This is an automated email from the ASF dual-hosted git repository. hanahmily pushed a commit to branch bug/sidx-check in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git
commit 8d94e4a1b3f9b814097b22078abb7308587fb271 Author: Hongtao Gao <[email protected]> AuthorDate: Tue Jan 20 11:48:14 2026 +0800 Update version to 0.10 and fix panic in sidx merge and flush operations. --- CHANGES.md | 1 + api/proto/banyandb/version.go | 2 +- banyand/internal/sidx/merge.go | 5 ----- banyand/internal/sidx/sidx.go | 9 ++++----- 4 files changed, 6 insertions(+), 11 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 3e70e8d2..2232be11 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -29,6 +29,7 @@ Release Notes. - Fix duplicate elements in stream query results by implementing element ID-based deduplication across scan, merge, and result building stages. - Fix data written to the wrong shard and related stream queries. - Fix the lifecycle panic when the trace has no sidx. +- Fix panic in sidx merge and flush operations when part counts don't match expectations. ### Document diff --git a/api/proto/banyandb/version.go b/api/proto/banyandb/version.go index 2a4b305f..4ce532be 100644 --- a/api/proto/banyandb/version.go +++ b/api/proto/banyandb/version.go @@ -19,7 +19,7 @@ package apiversion // Version is the version of the API. -const Version = "0.9" +const Version = "0.10" // Revision is the revision of the API. Building with -ldflags -X. var revision string diff --git a/banyand/internal/sidx/merge.go b/banyand/internal/sidx/merge.go index 41922f95..f5e3bfea 100644 --- a/banyand/internal/sidx/merge.go +++ b/banyand/internal/sidx/merge.go @@ -22,7 +22,6 @@ import ( "github.com/apache/skywalking-banyandb/pkg/encoding" "github.com/apache/skywalking-banyandb/pkg/fs" - "github.com/apache/skywalking-banyandb/pkg/logger" ) var ( @@ -47,10 +46,6 @@ func (s *sidx) Merge(closeCh <-chan struct{}, partIDtoMerge map[uint64]struct{}, } } - if len(partsToMerge) != len(partIDtoMerge) { - logger.Panicf("not enough parts to merge: %d", len(partsToMerge)) - } - // Create new merged part newPart, err := s.mergeParts(s.fileSystem, closeCh, partsToMerge, newPartID, s.root) if err != nil { diff --git a/banyand/internal/sidx/sidx.go b/banyand/internal/sidx/sidx.go index 197c1870..a059e8b7 100644 --- a/banyand/internal/sidx/sidx.go +++ b/banyand/internal/sidx/sidx.go @@ -131,6 +131,10 @@ func (s *sidx) Flush(partIDsToFlush map[uint64]struct{}) (*FlusherIntroduction, } defer snap.decRef() + if len(snap.parts) == 0 { + return nil, nil + } + // Create flush introduction flushIntro := generateFlusherIntroduction() @@ -153,11 +157,6 @@ func (s *sidx) Flush(partIDsToFlush map[uint64]struct{}) (*FlusherIntroduction, newPW := newPartWrapper(nil, mustOpenPart(pw.ID(), partPath, s.fileSystem)) flushIntro.flushed[newPW.ID()] = newPW } - - if len(flushIntro.flushed) != len(partIDsToFlush) { - logger.Panicf("expected %d parts to flush, but got %d", len(partIDsToFlush), len(flushIntro.flushed)) - return nil, nil - } return flushIntro, nil }
