diff --git a/server/filestore.go b/server/filestore.go index 98887882..575667f7 100644 --- a/server/filestore.go +++ b/server/filestore.go @@ -4288,26 +4288,29 @@ func (fs *fileStore) State() StreamState { state.NumSubjects = fs.numSubjects() state.Deleted = nil // make sure. - cur := fs.state.FirstSeq + if numDeleted := int((state.LastSeq - state.FirstSeq + 1) - state.Msgs); numDeleted > 0 { + state.Deleted = make([]uint64, 0, numDeleted) + cur := fs.state.FirstSeq - for _, mb := range fs.blks { - mb.mu.Lock() - fseq := mb.first.seq - // Account for messages missing from the head. - if fseq > cur { - for seq := cur; seq < fseq; seq++ { - state.Deleted = append(state.Deleted, seq) + for _, mb := range fs.blks { + mb.mu.Lock() + fseq := mb.first.seq + // Account for messages missing from the head. + if fseq > cur { + for seq := cur; seq < fseq; seq++ { + state.Deleted = append(state.Deleted, seq) + } } - } - cur = mb.last.seq + 1 // Expected next first. - for seq := range mb.dmap { - if seq < fseq { - delete(mb.dmap, seq) - } else { - state.Deleted = append(state.Deleted, seq) + cur = mb.last.seq + 1 // Expected next first. + for seq := range mb.dmap { + if seq < fseq { + delete(mb.dmap, seq) + } else { + state.Deleted = append(state.Deleted, seq) + } } + mb.mu.Unlock() } - mb.mu.Unlock() } fs.mu.RUnlock() diff --git a/server/memstore.go b/server/memstore.go index 7cfa452b..4cd8037c 100644 --- a/server/memstore.go +++ b/server/memstore.go @@ -873,8 +873,7 @@ func (ms *memStore) State() StreamState { // Calculate interior delete details. if state.LastSeq > state.FirstSeq { - state.NumDeleted = int((state.LastSeq - state.FirstSeq) - state.Msgs + 1) - if state.NumDeleted > 0 { + if state.NumDeleted = int((state.LastSeq - state.FirstSeq) - state.Msgs + 1); state.NumDeleted > 0 { state.Deleted = make([]uint64, 0, state.NumDeleted) // TODO(dlc) - Too Simplistic, once state is updated to allow runs etc redo. for seq := state.FirstSeq + 1; seq < ms.state.LastSeq; seq++ {