From 4142d49eeac7addd6335fc64877185b317e4e0a2 Mon Sep 17 00:00:00 2001 From: Siyuan Zhang Date: Fri, 12 Jan 2024 09:34:57 -0800 Subject: [PATCH] add key dedupe when a write buffer writeback to an empty read buffer bucket. Signed-off-by: Siyuan Zhang --- server/mvcc/backend/tx_buffer.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/server/mvcc/backend/tx_buffer.go b/server/mvcc/backend/tx_buffer.go index 667400248..622cf600e 100644 --- a/server/mvcc/backend/tx_buffer.go +++ b/server/mvcc/backend/tx_buffer.go @@ -80,6 +80,7 @@ func (txw *txWriteBuffer) writeback(txr *txReadBuffer) { rb, ok := txr.buckets[k] if !ok { delete(txw.buckets, k) + wb.dedupe() txr.buckets[k] = wb continue } @@ -201,10 +202,15 @@ func (bb *bucketBuffer) merge(bbsrc *bucketBuffer) { if bytes.Compare(bb.buf[(bb.used-bbsrc.used)-1].key, bbsrc.buf[0].key) < 0 { return } + bb.dedupe() +} +// dedupe removes duplicates, using only newest update +func (bb *bucketBuffer) dedupe() { + if bb.used <= 1 { + return + } sort.Stable(bb) - - // remove duplicates, using only newest update widx := 0 for ridx := 1; ridx < bb.used; ridx++ { if !bytes.Equal(bb.buf[ridx].key, bb.buf[widx].key) {