-
Notifications
You must be signed in to change notification settings - Fork 4.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use bbolt instead of the legacy bolt implementation #11720
Conversation
# Conflicts: # agent/config/testdata/TestRuntimeConfig_Sanitize-enterprise.golden # agent/consul/server.go
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess we'll want to document these new metrics, but not required for this PR
🍒 If backport labels were added before merging, cherry-picking will start automatically. To retroactively trigger a backport after merging, add backport labels and re-run https://circleci.com/gh/hashicorp/consul/517055. |
Btw I just noticed @mkeeler the latest version of bbolt is actually 1.3.6. It was discussed here: etcd-io/bbolt#278, but it was released as a tag on the GitHub repo, but not actually released via GitHub releases. |
This PR swaps the underlying BoltDB implementation from boltdb/bolt to go.etc.io/bbolt. In addition, the Server has a new configuration option for disabling NoFreelistSync on the underlying database. Freelist option: https://github.com/etcd-io/bbolt/blob/master/db.go#L81 Consul equivelent PR: hashicorp/consul#11720
…lt after hashicorp#11720. Replace it so that we can have one less dependency, and build on newer architecture like RISC-V. Two lines of replace are required because Go refuses to replace github.com/boltdb/bolt with go.etcd.io/bbolt when the latter is also present in the dependency tree. Replace it again with github.com/etcd-io/bbolt solves the issue.
There are some dependencies that still depends on the unmaintained bolt after hashicorp#11720. Replace it so that we can have one less dependency, and build on newer architecture like RISC-V. Two lines of replace are required because Go refuses to replace github.com/boltdb/bolt with go.etcd.io/bbolt when the latter is also present in the dependency tree. Replace it again with github.com/etcd-io/bbolt solves the issue.
In addition to just swapping out bbolt for bolt this also exposes a configuration to allow for disabling boltdb freelist syncing.
Finally it also enables metrics emission for the raft boltdb store to give us insights into boltdb performance.