Unverified Commit 0e4bdf62 authored by ti-srebot's avatar ti-srebot Committed by GitHub

Fix missing obsolete sequence for deletion in deleteblobfiles (#212) (#213)

parent 919f0a79
...@@ -294,7 +294,7 @@ Status BlobFileSet::DeleteBlobFilesInRanges(uint32_t cf_id, ...@@ -294,7 +294,7 @@ Status BlobFileSet::DeleteBlobFilesInRanges(uint32_t cf_id,
Status s = it->second->GetBlobFilesInRanges(ranges, n, include_end, &files); Status s = it->second->GetBlobFilesInRanges(ranges, n, include_end, &files);
if (!s.ok()) return s; if (!s.ok()) return s;
for (auto file_number : files) { for (auto file_number : files) {
edit.DeleteBlobFile(file_number); edit.DeleteBlobFile(file_number, obsolete_sequence);
} }
s = LogAndApply(edit); s = LogAndApply(edit);
return s; return s;
......
...@@ -703,6 +703,10 @@ TEST_F(TitanDBTest, DeleteFilesInRange) { ...@@ -703,6 +703,10 @@ TEST_F(TitanDBTest, DeleteFilesInRange) {
ASSERT_TRUE(db_->GetProperty("rocksdb.num-files-at-level6", &value)); ASSERT_TRUE(db_->GetProperty("rocksdb.num-files-at-level6", &value));
ASSERT_EQ(value, "3"); ASSERT_EQ(value, "3");
std::unique_ptr<Iterator> iter(db_->NewIterator(ReadOptions()));
iter->SeekToFirst();
ASSERT_TRUE(iter->Valid());
std::string key40 = GenKey(40); std::string key40 = GenKey(40);
std::string key80 = GenKey(80); std::string key80 = GenKey(80);
Slice start = Slice(key40); Slice start = Slice(key40);
...@@ -723,6 +727,18 @@ TEST_F(TitanDBTest, DeleteFilesInRange) { ...@@ -723,6 +727,18 @@ TEST_F(TitanDBTest, DeleteFilesInRange) {
// These two files are marked obsolete directly by `DeleteBlobFilesInRanges` // These two files are marked obsolete directly by `DeleteBlobFilesInRanges`
ASSERT_EQ(blob->NumObsoleteBlobFiles(), 2); ASSERT_EQ(blob->NumObsoleteBlobFiles(), 2);
// The snapshot held by the iterator prevents the blob files from being
// purged.
ASSERT_OK(db_impl_->TEST_PurgeObsoleteFiles());
while (iter->Valid()) {
iter->Next();
ASSERT_OK(iter->status());
}
ASSERT_EQ(blob->NumBlobFiles(), 6);
ASSERT_EQ(blob->NumObsoleteBlobFiles(), 2);
// Once the snapshot is released, the blob files should be purged.
iter.reset(nullptr);
ASSERT_OK(db_impl_->TEST_PurgeObsoleteFiles()); ASSERT_OK(db_impl_->TEST_PurgeObsoleteFiles());
ASSERT_EQ(blob->NumBlobFiles(), 4); ASSERT_EQ(blob->NumBlobFiles(), 4);
ASSERT_EQ(blob->NumObsoleteBlobFiles(), 0); ASSERT_EQ(blob->NumObsoleteBlobFiles(), 0);
......
...@@ -69,7 +69,7 @@ Status VersionEdit::DecodeFrom(Slice* src) { ...@@ -69,7 +69,7 @@ Status VersionEdit::DecodeFrom(Slice* src) {
break; break;
case kDeletedBlobFile: case kDeletedBlobFile:
if (GetVarint64(src, &file_number)) { if (GetVarint64(src, &file_number)) {
DeleteBlobFile(file_number); DeleteBlobFile(file_number, 0);
} else { } else {
error = "deleted blob file"; error = "deleted blob file";
} }
......
...@@ -32,8 +32,7 @@ class VersionEdit { ...@@ -32,8 +32,7 @@ class VersionEdit {
added_files_.push_back(file); added_files_.push_back(file);
} }
void DeleteBlobFile(uint64_t file_number, void DeleteBlobFile(uint64_t file_number, SequenceNumber obsolete_sequence) {
SequenceNumber obsolete_sequence = 0) {
deleted_files_.emplace_back(std::make_pair(file_number, obsolete_sequence)); deleted_files_.emplace_back(std::make_pair(file_number, obsolete_sequence));
} }
......
...@@ -134,8 +134,8 @@ TEST_F(VersionTest, VersionEdit) { ...@@ -134,8 +134,8 @@ TEST_F(VersionTest, VersionEdit) {
auto file2 = std::make_shared<BlobFileMeta>(5, 6, 0, 0, "", ""); auto file2 = std::make_shared<BlobFileMeta>(5, 6, 0, 0, "", "");
input.AddBlobFile(file1); input.AddBlobFile(file1);
input.AddBlobFile(file2); input.AddBlobFile(file2);
input.DeleteBlobFile(7); input.DeleteBlobFile(7, 0);
input.DeleteBlobFile(8); input.DeleteBlobFile(8, 0);
CheckCodec(input); CheckCodec(input);
} }
...@@ -153,7 +153,7 @@ VersionEdit DeleteBlobFilesEdit(uint32_t cf_id, uint64_t start, uint64_t end) { ...@@ -153,7 +153,7 @@ VersionEdit DeleteBlobFilesEdit(uint32_t cf_id, uint64_t start, uint64_t end) {
VersionEdit edit; VersionEdit edit;
edit.SetColumnFamilyID(cf_id); edit.SetColumnFamilyID(cf_id);
for (auto i = start; i < end; i++) { for (auto i = start; i < end; i++) {
edit.DeleteBlobFile(i); edit.DeleteBlobFile(i, 0);
} }
return edit; return edit;
} }
...@@ -367,7 +367,7 @@ TEST_F(VersionTest, BlobFileMetaV1ToV2) { ...@@ -367,7 +367,7 @@ TEST_F(VersionTest, BlobFileMetaV1ToV2) {
VersionEdit edit; VersionEdit edit;
edit.SetColumnFamilyID(1); edit.SetColumnFamilyID(1);
edit.AddBlobFile(std::make_shared<BlobFileMeta>(1, 1, 0, 0, "", "")); edit.AddBlobFile(std::make_shared<BlobFileMeta>(1, 1, 0, 0, "", ""));
edit.DeleteBlobFile(1); edit.DeleteBlobFile(1, 0);
edit.AddBlobFile(std::make_shared<BlobFileMeta>(2, 2, 0, 0, "", "")); edit.AddBlobFile(std::make_shared<BlobFileMeta>(2, 2, 0, 0, "", ""));
std::string str; std::string str;
LegacyEncode(edit, &str); LegacyEncode(edit, &str);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment