From a90504eb9fe79a803290e4a5f8beb1548102b5e7 Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Tue, 11 Aug 2026 05:28:33 +0000 Subject: [PATCH 1/2] chore: update rocksdb-cloud to publish file number guard on branch roll Co-Authored-By: Claude Opus 5 (1M context) --- third_party/src/rocksdb-cloud | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/src/rocksdb-cloud b/third_party/src/rocksdb-cloud index 88025423..7b4210e7 160000 --- a/third_party/src/rocksdb-cloud +++ b/third_party/src/rocksdb-cloud @@ -1 +1 @@ -Subproject commit 88025423eeeeb5c7a9f52eec84d93824ff2dfb19 +Subproject commit 7b4210e7351a961a7fc2196c0ecfc81d01be3ac8 From d2c2aea006aa51b9640c4a0211ba2d2acc103abb Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Tue, 11 Aug 2026 06:43:23 +0000 Subject: [PATCH 2/2] fix: reset stale TTL when reusing FlushRecord blob payload FlushRecord::SetNonVersionedPayload reuses the BlobTxRecord slot across data-sync scan batches but only cleared value_, leaving the previous record's ttl_ behind. A no-TTL object flushed into a contaminated slot was then written to the KV store with another key's expiration: the RocksDB(-Cloud) read path and TTL compaction filter treat it as expired, so the key silently disappears once it is evicted from memory. Reset ttl_ to UINT64_MAX (BlobTxRecord's "no TTL" sentinel) on every reuse. Co-Authored-By: Claude Fable 5 --- tx_service/include/cc/cc_entry.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tx_service/include/cc/cc_entry.h b/tx_service/include/cc/cc_entry.h index dff57df9..c87fb20d 100644 --- a/tx_service/include/cc/cc_entry.h +++ b/tx_service/include/cc/cc_entry.h @@ -223,6 +223,10 @@ struct FlushRecord else { std::get<1>(payload_).value_.clear(); + // The BlobTxRecord is reused across scan batches; clear the + // previous record's TTL so a no-TTL record is not flushed with a + // stale expiration. + std::get<1>(payload_).ttl_ = UINT64_MAX; } if (ptr != nullptr) {