2019-04-02 02:33:13 +03:00
|
|
|
package channeldb
|
|
|
|
|
2020-11-09 12:21:25 +03:00
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/lightningnetwork/lnd/channeldb/kvdb"
|
|
|
|
"github.com/lightningnetwork/lnd/clock"
|
|
|
|
)
|
2020-01-20 12:57:34 +03:00
|
|
|
|
2019-04-02 02:33:13 +03:00
|
|
|
const (
|
|
|
|
// DefaultRejectCacheSize is the default number of rejectCacheEntries to
|
|
|
|
// cache for use in the rejection cache of incoming gossip traffic. This
|
|
|
|
// produces a cache size of around 1MB.
|
|
|
|
DefaultRejectCacheSize = 50000
|
|
|
|
|
|
|
|
// DefaultChannelCacheSize is the default number of ChannelEdges cached
|
|
|
|
// in order to reply to gossip queries. This produces a cache size of
|
|
|
|
// around 40MB.
|
|
|
|
DefaultChannelCacheSize = 20000
|
|
|
|
)
|
|
|
|
|
|
|
|
// Options holds parameters for tuning and customizing a channeldb.DB.
|
|
|
|
type Options struct {
|
2020-11-09 12:21:25 +03:00
|
|
|
kvdb.BoltBackendConfig
|
|
|
|
|
2019-04-02 02:33:13 +03:00
|
|
|
// RejectCacheSize is the maximum number of rejectCacheEntries to hold
|
|
|
|
// in the rejection cache.
|
|
|
|
RejectCacheSize int
|
|
|
|
|
|
|
|
// ChannelCacheSize is the maximum number of ChannelEdges to hold in the
|
|
|
|
// channel cache.
|
|
|
|
ChannelCacheSize int
|
2019-10-04 18:19:34 +03:00
|
|
|
|
2020-01-20 12:57:34 +03:00
|
|
|
// clock is the time source used by the database.
|
|
|
|
clock clock.Clock
|
2020-05-12 01:38:45 +03:00
|
|
|
|
|
|
|
// dryRun will fail to commit a successful migration when opening the
|
|
|
|
// database if set to true.
|
|
|
|
dryRun bool
|
2019-04-02 02:33:13 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// DefaultOptions returns an Options populated with default values.
|
|
|
|
func DefaultOptions() Options {
|
|
|
|
return Options{
|
2020-11-09 12:21:25 +03:00
|
|
|
BoltBackendConfig: kvdb.BoltBackendConfig{
|
|
|
|
NoFreelistSync: true,
|
|
|
|
AutoCompact: false,
|
|
|
|
AutoCompactMinAge: kvdb.DefaultBoltAutoCompactMinAge,
|
|
|
|
},
|
2019-04-02 02:33:13 +03:00
|
|
|
RejectCacheSize: DefaultRejectCacheSize,
|
|
|
|
ChannelCacheSize: DefaultChannelCacheSize,
|
2020-01-20 12:57:34 +03:00
|
|
|
clock: clock.NewDefaultClock(),
|
2019-04-02 02:33:13 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// OptionModifier is a function signature for modifying the default Options.
|
|
|
|
type OptionModifier func(*Options)
|
|
|
|
|
|
|
|
// OptionSetRejectCacheSize sets the RejectCacheSize to n.
|
|
|
|
func OptionSetRejectCacheSize(n int) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.RejectCacheSize = n
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// OptionSetChannelCacheSize sets the ChannelCacheSize to n.
|
|
|
|
func OptionSetChannelCacheSize(n int) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.ChannelCacheSize = n
|
|
|
|
}
|
|
|
|
}
|
2019-10-04 18:19:34 +03:00
|
|
|
|
|
|
|
// OptionSetSyncFreelist allows the database to sync its freelist.
|
|
|
|
func OptionSetSyncFreelist(b bool) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.NoFreelistSync = !b
|
|
|
|
}
|
|
|
|
}
|
2020-01-20 12:57:34 +03:00
|
|
|
|
2020-11-09 12:21:25 +03:00
|
|
|
// OptionAutoCompact turns on automatic database compaction on startup.
|
|
|
|
func OptionAutoCompact() OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.AutoCompact = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// OptionAutoCompactMinAge sets the minimum age for automatic database
|
|
|
|
// compaction.
|
|
|
|
func OptionAutoCompactMinAge(minAge time.Duration) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.AutoCompactMinAge = minAge
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-20 12:57:34 +03:00
|
|
|
// OptionClock sets a non-default clock dependency.
|
|
|
|
func OptionClock(clock clock.Clock) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.clock = clock
|
|
|
|
}
|
|
|
|
}
|
2020-05-12 01:38:45 +03:00
|
|
|
|
|
|
|
// OptionDryRunMigration controls whether or not to intentially fail to commit a
|
|
|
|
// successful migration that occurs when opening the database.
|
|
|
|
func OptionDryRunMigration(dryRun bool) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.dryRun = dryRun
|
|
|
|
}
|
|
|
|
}
|