Skip to content

Commit 1b6c204

Browse files
committed
fix(set_family): Transfer TTL flag from DenseLink object in delete
When extracting DensePtr from LinkObject we need to transfer TTL flag before this DensePtr is assigned to bucket. Fixes #3915 Signed-off-by: mkaruza <mario@dragonflydb.io>
1 parent eb80d57 commit 1b6c204

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/core/dense_set.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,8 @@ void DenseSet::Delete(DensePtr* prev, DensePtr* ptr) {
648648

649649
DenseLinkKey* plink = prev->AsLink();
650650
DensePtr tmp = DensePtr::From(plink);
651+
// Transfer TTL flag
652+
tmp.SetTtl(prev->HasTtl());
651653
DCHECK(ObjectAllocSize(tmp.GetObject()));
652654

653655
FreeLink(plink);

src/server/set_family_test.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,4 +412,17 @@ TEST_F(SetFamilyTest, SAddEx) {
412412
EXPECT_THAT(Run({"saddex", "key", "KEEPTTL", "2"}), ErrArg("wrong number of arguments"));
413413
}
414414

415+
TEST_F(SetFamilyTest, CheckSetLinkExpiryTransfer) {
416+
for (int i = 0; i < 10; i++) {
417+
EXPECT_THAT(Run({"SADDEX", "key", "5", absl::StrCat(i)}), IntArg(1));
418+
}
419+
for (int i = 0; i < 9; i++) {
420+
Run({"SREM", "key", absl::StrCat(i)});
421+
}
422+
EXPECT_THAT(Run({"SCARD", "key"}), IntArg(1));
423+
AdvanceTime(6000);
424+
Run({"SMEMBERS", "key"});
425+
EXPECT_THAT(Run({"SCARD", "key"}), IntArg(0));
426+
}
427+
415428
} // namespace dfly

0 commit comments

Comments
 (0)