Skip to content

Commit b9a6914

Browse files
author
litongxin
committed
add idxcnt in delete
1 parent 253ede9 commit b9a6914

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/storage/disk_table.cc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,13 @@ bool DiskTable::Delete(const std::string& pk, uint32_t idx) {
299299
return false;
300300
}
301301
auto inner_index = table_index_.GetInnerIndex(index_def->GetInnerPos());
302+
rocksdb::ReadOptions ro = rocksdb::ReadOptions();
303+
const rocksdb::Snapshot* snapshot = db_->GetSnapshot();
304+
ro.snapshot = snapshot;
305+
ro.pin_data = true;
306+
rocksdb::Iterator* it = db_->NewIterator(ro, cf_hs_[index_def->GetInnerPos() + 1]);
307+
std::map<uint32_t, uint64_t> delete_idx_cnt;
308+
302309
if (inner_index && inner_index->GetIndex().size() > 1) {
303310
const auto& indexs = inner_index->GetIndex();
304311
for (const auto& index : indexs) {
@@ -308,16 +315,41 @@ bool DiskTable::Delete(const std::string& pk, uint32_t idx) {
308315
}
309316
std::string combine_key1 = CombineKeyTs(pk, UINT64_MAX, ts_col->GetId());
310317
std::string combine_key2 = CombineKeyTs(pk, 0, ts_col->GetId());
318+
it->Seek(rocksdb::Slice(combine_key1));
319+
while (it->Valid() && it->key().compare(rocksdb::Slice(combine_key2)) != 0) {
320+
if (delete_idx_cnt.find(index->GetId()) != delete_idx_cnt.end()) {
321+
delete_idx_cnt[index->GetId()]++;
322+
} else {
323+
delete_idx_cnt.emplace(index->GetId(), 1);
324+
}
325+
it->Next();
326+
}
311327
batch.DeleteRange(cf_hs_[idx + 1], rocksdb::Slice(combine_key1), rocksdb::Slice(combine_key2));
312328
}
313329
} else {
314330
std::string combine_key1 = CombineKeyTs(pk, UINT64_MAX);
315331
std::string combine_key2 = CombineKeyTs(pk, 0);
332+
it->Seek(rocksdb::Slice(combine_key1));
333+
const auto& index = inner_index->GetIndex().front();
334+
while (it->Valid() && it->key().compare(rocksdb::Slice(combine_key2)) != 0) {
335+
if (delete_idx_cnt.find(index->GetId()) != delete_idx_cnt.end()) {
336+
delete_idx_cnt[index->GetId()]++;
337+
} else {
338+
delete_idx_cnt.emplace(index->GetId(), 1);
339+
}
340+
it->Next();
341+
}
316342
batch.DeleteRange(cf_hs_[idx + 1], rocksdb::Slice(combine_key1), rocksdb::Slice(combine_key2));
317343
}
318344
rocksdb::Status s = db_->Write(write_opts_, &batch);
319345
if (s.ok()) {
320346
offset_.fetch_add(1, std::memory_order_relaxed);
347+
for (auto ts_idx_iter = delete_idx_cnt.begin(); ts_idx_iter != delete_idx_cnt.end(); ts_idx_iter++) {
348+
idx_cnt_vec_[ts_idx_iter->first]->fetch_sub(ts_idx_iter->second, std::memory_order_relaxed);
349+
}
350+
if (delete_idx_cnt.size() > 0) {
351+
pk_cnt_vec_[index_def->GetInnerPos()]->fetch_sub(1);
352+
}
321353
return true;
322354
} else {
323355
DEBUGLOG("Delete failed. tid %u pid %u msg %s", id_, pid_, s.ToString().c_str());

src/storage/table_test.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2160,6 +2160,12 @@ TEST_F(TableTest, GetRecordLatTTL) {
21602160
}
21612161
EXPECT_EQ(70, ts_count);
21622162

2163+
table->Delete("test0", 0);
2164+
table->Delete("testnew0", 1);
2165+
EXPECT_EQ(18, (int64_t)table->GetRecordPkCnt());
2166+
EXPECT_EQ(114, (int64_t)table->GetRecordIdxCnt());
2167+
2168+
21632169
delete table;
21642170
}
21652171

0 commit comments

Comments
 (0)