From 4fd78926d46f260d7c637273340f6fa5a2f00c1d Mon Sep 17 00:00:00 2001 From: nsa Date: Sun, 7 Jul 2019 22:32:40 -0400 Subject: [PATCH 1/2] build: update bbolt to v1.3.3 with panic rollback fix This commit updates the bbolt dependency to v1.3.3 so that we can use the NoFreelistSync option without triggering a panic in case a rollback occurs. --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index a3b255ab7..9e9ea8c56 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d github.com/btcsuite/btcwallet v0.0.0-20190628225330-4a9774585e57 github.com/btcsuite/fastsha256 v0.0.0-20160815193821-637e65642941 - github.com/coreos/bbolt v1.3.2 + github.com/coreos/bbolt v1.3.3 github.com/davecgh/go-spew v1.1.1 github.com/go-errors/errors v1.0.1 github.com/golang/protobuf v1.3.1 diff --git a/go.sum b/go.sum index 2dbb059e2..5f0cabf5f 100644 --- a/go.sum +++ b/go.sum @@ -64,6 +64,8 @@ github.com/coreos/bbolt v0.0.0-20180223184059-7ee3ded59d4835e10f3e7d0f7603c42aa5 github.com/coreos/bbolt v0.0.0-20180223184059-7ee3ded59d4835e10f3e7d0f7603c42aa5e83820/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/bbolt v1.3.3 h1:n6AiVyVRKQFNb6mJlwESEvvLoDyiTzXX7ORAUlkeBdY= +github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= From 66d15c8e766a1f0aa8b784c1833d7d0afc24087a Mon Sep 17 00:00:00 2001 From: nsa Date: Mon, 8 Jul 2019 18:41:25 -0400 Subject: [PATCH 2/2] channeldb + wtdb: specify freelist bbolt options by default This commit specifies two bbolt options when opening the underlying channel and watchtower databases so that there is reduced heap pressure in case the bbolt database has a lot of free pages in the B+ tree. --- channeldb/db.go | 9 ++++++++- watchtower/wtdb/db_common.go | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/channeldb/db.go b/channeldb/db.go index e9a9a1857..0fa3953f0 100644 --- a/channeldb/db.go +++ b/channeldb/db.go @@ -135,7 +135,14 @@ func Open(dbPath string, modifiers ...OptionModifier) (*DB, error) { modifier(&opts) } - bdb, err := bbolt.Open(path, dbFilePermission, nil) + // Specify bbolt freelist options to reduce heap pressure in case the + // freelist grows to be very large. + options := &bbolt.Options{ + NoFreelistSync: true, + FreelistType: bbolt.FreelistMapType, + } + + bdb, err := bbolt.Open(path, dbFilePermission, options) if err != nil { return nil, err } diff --git a/watchtower/wtdb/db_common.go b/watchtower/wtdb/db_common.go index 63bca9ae7..ed6f1c6b8 100644 --- a/watchtower/wtdb/db_common.go +++ b/watchtower/wtdb/db_common.go @@ -63,7 +63,14 @@ func createDBIfNotExist(dbPath, name string) (*bbolt.DB, bool, error) { } } - bdb, err := bbolt.Open(path, dbFilePermission, nil) + // Specify bbolt freelist options to reduce heap pressure in case the + // freelist grows to be very large. + options := &bbolt.Options{ + NoFreelistSync: true, + FreelistType: bbolt.FreelistMapType, + } + + bdb, err := bbolt.Open(path, dbFilePermission, options) if err != nil { return nil, false, err }