Skip to content

Commit 9a47bbd

Browse files
authored
chore: recover from badgerdb panic (#5678)
# Description Treating panic as error and deleting badgerdb folder for recovering ## Security - [x] The code changed/added as part of this pull request won't create any security issues with how the software is being used.
1 parent 6fd8e7c commit 9a47bbd

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

.github/workflows/verify.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,5 @@ jobs:
7777
- name: golangci-lint
7878
uses: golangci/golangci-lint-action@v7
7979
with:
80-
version: v2.0.0
80+
version: v2.0.2
8181
args: -v

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ TESTFILE=_testok
66
MOUNT_PATH=/local
77

88
# go tools versions
9-
GOLANGCI=github.com/golangci/golangci-lint/cmd/golangci-lint@2.0.1
9+
GOLANGCI=github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.0.2
1010
gofumpt=mvdan.cc/gofumpt@latest
1111
govulncheck=golang.org/x/vuln/cmd/govulncheck@latest
1212
goimports=golang.org/x/tools/cmd/goimports@latest

enterprise/reporting/event_sampler/badger_event_sampler.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,16 @@ func NewBadgerEventSampler(
8484
return nil, fmt.Errorf("removing badger db directory: %w", err)
8585
}
8686
}
87-
db, err := badger.Open(opts)
87+
88+
openDB := func() (dbase *badger.DB, err error) {
89+
defer func() {
90+
if r := recover(); r != nil {
91+
err = fmt.Errorf("panic during badgerdb open: %v", r)
92+
}
93+
}()
94+
return badger.Open(opts)
95+
}
96+
db, err := openDB()
8897
if err != nil {
8998
// corrupted or incompatible db, clean up the directory and retry
9099
log.Errorn("Error while opening event sampler badger db, cleaning up the directory",
@@ -94,7 +103,7 @@ func NewBadgerEventSampler(
94103
if err := os.RemoveAll(opts.Dir); err != nil {
95104
return nil, fmt.Errorf("removing badger db directory: %w", err)
96105
}
97-
if db, err = badger.Open(opts); err != nil {
106+
if db, err = openDB(); err != nil {
98107
return nil, fmt.Errorf("opening badger db: %w", err)
99108
}
100109
}

services/dedup/badger/badger.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,15 @@ func (d *BadgerDB) init() error {
148148
return
149149
}
150150
}
151-
d.badgerDB, err = badger.Open(d.opts)
151+
openDB := func() (dbase *badger.DB, err error) {
152+
defer func() {
153+
if r := recover(); r != nil {
154+
err = fmt.Errorf("panic during badgerdb open: %v", r)
155+
}
156+
}()
157+
return badger.Open(d.opts)
158+
}
159+
d.badgerDB, err = openDB()
152160
if err != nil {
153161
// corrupted or incompatible db, clean up the directory and retry
154162
d.logger.Errorn("Error while opening dedup badger db, cleaning up the directory",
@@ -158,7 +166,7 @@ func (d *BadgerDB) init() error {
158166
err = fmt.Errorf("removing badger db directory: %w", err)
159167
return
160168
}
161-
d.badgerDB, err = badger.Open(d.opts)
169+
d.badgerDB, err = openDB()
162170
if err != nil {
163171
err = fmt.Errorf("opening badger db: %w", err)
164172
return

0 commit comments

Comments
 (0)