Skip to content

Commit e5e7e9e

Browse files
authored
MB-71607: Fixed data corruption in bolt (#2324)
- Added a guardrail to copy data instead of reusing slices - Fixed bug in drop writer ids
1 parent 08e551f commit e5e7e9e

2 files changed

Lines changed: 6 additions & 3 deletions

File tree

index/scorch/persister.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,9 +1232,10 @@ func (s *Scorch) removeBoltFileWriterIDs(ids map[string]struct{}) error {
12321232
if err != nil {
12331233
return fmt.Errorf("unable to load correct reader: %v", err)
12341234
}
1235-
c := snapshots.Cursor()
1236-
for kk, _ := c.First(); kk != nil; kk, _ = c.Next() {
1237-
if k[0] == util.BoltInternalKey[0] {
1235+
1236+
cc := snapshot.Cursor()
1237+
for kk, _ := cc.First(); kk != nil; kk, _ = cc.Next() {
1238+
if kk[0] == util.BoltInternalKey[0] {
12381239
internalBucket := snapshot.GetBucket(kk)
12391240
if internalBucket == nil {
12401241
continue

util/bolt.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ func (b *BoltBucketImpl) CreateBucketIfNotExists(name []byte) (*BoltBucketImpl,
118118
func (b *BoltBucketImpl) ForEach(fn func(key []byte, value []byte) error, reader FileReader) error {
119119
_, ok1 := boltKeysProcessed[b.name]
120120
return b.Bucket.ForEach(func(k, v []byte) error {
121+
v = append([]byte(nil), v...)
121122
if _, ok2 := boltKeysProcessed[string(k)]; ok1 || ok2 {
122123
if reader == nil {
123124
return fmt.Errorf("reader callback is required for bucket %s", b.name)
@@ -136,6 +137,7 @@ func (b *BoltBucketImpl) ForEach(fn func(key []byte, value []byte) error, reader
136137
func (b *BoltBucketImpl) Put(key []byte, value []byte, writer FileWriter) error {
137138
_, ok1 := boltKeysProcessed[string(key)]
138139
_, ok2 := boltKeysProcessed[b.name]
140+
value = append([]byte(nil), value...)
139141
if ok1 || ok2 {
140142
if writer == nil {
141143
return fmt.Errorf("writer callback is required for key %s", string(key))

0 commit comments

Comments
 (0)