MCPcopy Create free account
hub / github.com/apple/foundationdb / fastClear

Method fastClear

fdbserver/KeyValueStoreSQLite.actor.cpp:916–953  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

914 }
915 }
916 void fastClear(KeyRangeRef keys, bool& freeTableEmpty) {
917 std::vector<int> clearBuffer(SERVER_KNOBS->CLEAR_BUFFER_SIZE);
918 clearBuffer[0] = 0;
919
920 while (true) {
921 if (moveTo(keys.begin) < 0)
922 moveNext();
923 RawCursor endCursor(db, db.table, false);
924 if (endCursor.moveTo(keys.end) >= 0)
925 endCursor.movePrevious();
926
927 if (!valid || !endCursor ||
928 (db.fragment_values ? (decodeKVFragment(getEncodedRow()).get().key >=
929 decodeKVFragment(endCursor.getEncodedRow()).get().key)
930 : (decodeKV(getEncodedRow()).key > decodeKV(endCursor.getEncodedRow()).key)))
931 break; // If empty stop!
932
933 int rc = sqlite3BtreeDeleteRange(
934 cursor, endCursor.cursor, &clearBuffer[0], &clearBuffer[0] + clearBuffer.size());
935 if (rc == 201)
936 continue;
937 if (!rc)
938 break;
939 db.checkError("BtreeDeleteRange", rc);
940 }
941
942 if (clearBuffer[0]) {
943 // printf("fastClear(%s,%s): %d pages freed\n", printable(keys.begin).c_str(), printable(keys.end).c_str(),
944 // clearBuffer[0]);
945 IntKeyCursor fc(db, db.freetable, true);
946 int pagesDeleted = 0;
947 db.checkError("BtreeLazyDelete",
948 sqlite3BtreeLazyDelete(
949 fc.cursor, &clearBuffer[0], &clearBuffer[0] + clearBuffer.size(), 0, &pagesDeleted));
950 ASSERT(pagesDeleted == 0);
951 freeTableEmpty = false;
952 }
953 }
954 int lazyDelete(int desiredPages) {
955 std::vector<int> clearBuffer(SERVER_KNOBS->CLEAR_BUFFER_SIZE);
956 clearBuffer[0] = 0;

Callers 1

actionFunction · 0.80

Calls 12

moveToFunction · 0.85
moveNextFunction · 0.85
decodeKVFragmentFunction · 0.85
decodeKVFunction · 0.85
sqlite3BtreeDeleteRangeFunction · 0.85
sqlite3BtreeLazyDeleteFunction · 0.85
movePreviousMethod · 0.80
getEncodedRowMethod · 0.80
moveToMethod · 0.65
getMethod · 0.65
sizeMethod · 0.45
checkErrorMethod · 0.45

Tested by

no test coverage detected