From e079d75d8b4065df5f04e0f2b295409118caa062 Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Sun, 14 Mar 2021 12:26:30 -0700 Subject: [PATCH] Fixes for index first from idx file Signed-off-by: Derek Collison --- server/filestore.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/server/filestore.go b/server/filestore.go index 62439de7..61249455 100644 --- a/server/filestore.go +++ b/server/filestore.go @@ -463,7 +463,7 @@ func (mb *msgBlock) rebuildState() (*LostStreamData, error) { // Clear state we need to rebuild. mb.msgs, mb.bytes = 0, 0 mb.last.seq, mb.last.ts = 0, 0 - mb.first.seq, mb.first.ts = 0, 0 + firstNeedsSet := true buf, err := ioutil.ReadFile(mb.mfn) if err != nil { @@ -515,8 +515,6 @@ func (mb *msgBlock) rebuildState() (*LostStreamData, error) { return &ld } - firstNeedsSet := true - for index, lbuf := uint32(0), uint32(len(buf)); index < lbuf; { if index+msgHdrSize >= lbuf { truncate(index) @@ -553,6 +551,15 @@ func (mb *msgBlock) rebuildState() (*LostStreamData, error) { continue } + // This is for when we have index info that adjusts for deleted messages + // at the head. So the first.seq will be already set here. If this is larger + // replace what we have with this seq. + if firstNeedsSet && seq > mb.first.seq { + firstNeedsSet = false + mb.first.seq = seq + mb.first.ts = ts + } + var deleted bool if mb.dmap != nil { if _, ok := mb.dmap[seq]; ok { @@ -1081,8 +1088,7 @@ func (fs *fileStore) removeMsg(seq uint64, secure bool) (bool, error) { mb.msgs-- mb.bytes -= msz - var shouldWriteIndex bool - var firstSeqNeedsUpdate bool + var shouldWriteIndex, firstSeqNeedsUpdate bool if secure { mb.eraseMsg(seq, int(ri), int(rl))