Merge pull request #6761 from kzys/bbolt-freelist

Disable writing freelist to make the file robust against data corruptions
This commit is contained in:
Derek McGowan 2022-04-05 21:36:49 -07:00 committed by GitHub
commit ffddd4446c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -450,8 +450,16 @@ func LoadPlugins(ctx context.Context, config *srvconfig.Config) ([]*plugin.Regis
path := filepath.Join(ic.Root, "meta.db")
ic.Meta.Exports["path"] = path
options := *bolt.DefaultOptions
// Reading bbolt's freelist sometimes fails when the file has a data corruption.
// Disabling freelist sync reduces the chance of the breakage.
// https://github.com/etcd-io/bbolt/pull/1
// https://github.com/etcd-io/bbolt/pull/6
options.NoFreelistSync = true
// Without the timeout, bbolt.Open would block indefinitely due to flock(2).
options.Timeout = timeout.Get(boltOpenTimeout)
doneCh := make(chan struct{})
go func() {
t := time.NewTimer(10 * time.Second)