2019-04-01 16:33:13 -07:00
|
|
|
package channeldb
|
|
|
|
|
2020-11-09 10:21:25 +01:00
|
|
|
import (
|
|
|
|
"github.com/lightningnetwork/lnd/clock"
|
|
|
|
)
|
2020-01-20 10:57:34 +01:00
|
|
|
|
2019-04-01 16:33:13 -07: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
|
2021-09-21 19:18:25 +02:00
|
|
|
|
|
|
|
// DefaultPreAllocCacheNumNodes is the default number of channels we
|
|
|
|
// assume for mainnet for pre-allocating the graph cache. As of
|
|
|
|
// September 2021, there currently are 14k nodes in a strictly pruned
|
|
|
|
// graph, so we choose a number that is slightly higher.
|
|
|
|
DefaultPreAllocCacheNumNodes = 15000
|
2019-04-01 16:33:13 -07:00
|
|
|
)
|
|
|
|
|
2022-04-28 06:46:37 +08:00
|
|
|
// OptionalMiragtionConfig defines the flags used to signal whether a
|
|
|
|
// particular migration needs to be applied.
|
|
|
|
type OptionalMiragtionConfig struct {
|
|
|
|
// PruneRevocationLog specifies that the revocation log migration needs
|
|
|
|
// to be applied.
|
|
|
|
PruneRevocationLog bool
|
|
|
|
}
|
|
|
|
|
2019-04-01 16:33:13 -07:00
|
|
|
// Options holds parameters for tuning and customizing a channeldb.DB.
|
|
|
|
type Options struct {
|
2022-04-28 06:46:37 +08:00
|
|
|
OptionalMiragtionConfig
|
2020-11-09 10:21:25 +01:00
|
|
|
|
2021-12-13 10:53:58 +01:00
|
|
|
// NoMigration specifies that underlying backend was opened in read-only
|
|
|
|
// mode and migrations shouldn't be performed. This can be useful for
|
|
|
|
// applications that use the channeldb package as a library.
|
|
|
|
NoMigration bool
|
|
|
|
|
2023-02-10 10:13:34 +02:00
|
|
|
// NoRevLogAmtData when set to true, indicates that amount data should
|
|
|
|
// not be stored in the revocation log.
|
|
|
|
NoRevLogAmtData bool
|
|
|
|
|
2020-01-20 10:57:34 +01:00
|
|
|
// clock is the time source used by the database.
|
|
|
|
clock clock.Clock
|
2020-05-11 15:38:45 -07:00
|
|
|
|
|
|
|
// dryRun will fail to commit a successful migration when opening the
|
|
|
|
// database if set to true.
|
|
|
|
dryRun bool
|
2022-04-21 07:33:01 +00:00
|
|
|
|
|
|
|
// keepFailedPaymentAttempts determines whether failed htlc attempts
|
|
|
|
// are kept on disk or removed to save space.
|
|
|
|
keepFailedPaymentAttempts bool
|
2023-01-19 13:04:43 +01:00
|
|
|
|
|
|
|
// storeFinalHtlcResolutions determines whether to persistently store
|
|
|
|
// the final resolution of incoming htlcs.
|
|
|
|
storeFinalHtlcResolutions bool
|
2019-04-01 16:33:13 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// DefaultOptions returns an Options populated with default values.
|
|
|
|
func DefaultOptions() Options {
|
|
|
|
return Options{
|
2022-04-28 06:46:37 +08:00
|
|
|
OptionalMiragtionConfig: OptionalMiragtionConfig{},
|
|
|
|
NoMigration: false,
|
|
|
|
clock: clock.NewDefaultClock(),
|
2019-04-01 16:33:13 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// OptionModifier is a function signature for modifying the default Options.
|
|
|
|
type OptionModifier func(*Options)
|
|
|
|
|
2023-02-10 10:13:34 +02:00
|
|
|
// OptionNoRevLogAmtData sets the NoRevLogAmtData option to the given value. If
|
|
|
|
// it is set to true then amount data will not be stored in the revocation log.
|
|
|
|
func OptionNoRevLogAmtData(noAmtData bool) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.NoRevLogAmtData = noAmtData
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-12-13 10:53:58 +01:00
|
|
|
// OptionNoMigration allows the database to be opened in read only mode by
|
|
|
|
// disabling migrations.
|
|
|
|
func OptionNoMigration(b bool) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.NoMigration = b
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-20 10:57:34 +01:00
|
|
|
// OptionClock sets a non-default clock dependency.
|
|
|
|
func OptionClock(clock clock.Clock) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.clock = clock
|
|
|
|
}
|
|
|
|
}
|
2020-05-11 15:38:45 -07:00
|
|
|
|
2022-01-13 18:29:43 +02:00
|
|
|
// OptionDryRunMigration controls whether or not to intentionally fail to commit a
|
2020-05-11 15:38:45 -07:00
|
|
|
// successful migration that occurs when opening the database.
|
|
|
|
func OptionDryRunMigration(dryRun bool) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.dryRun = dryRun
|
|
|
|
}
|
|
|
|
}
|
2022-04-21 07:33:01 +00:00
|
|
|
|
|
|
|
// OptionKeepFailedPaymentAttempts controls whether failed payment attempts are
|
|
|
|
// kept on disk after a payment settles.
|
|
|
|
func OptionKeepFailedPaymentAttempts(keepFailedPaymentAttempts bool) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.keepFailedPaymentAttempts = keepFailedPaymentAttempts
|
|
|
|
}
|
|
|
|
}
|
2022-04-28 06:46:37 +08:00
|
|
|
|
2023-01-19 13:04:43 +01:00
|
|
|
// OptionStoreFinalHtlcResolutions controls whether to persistently store the
|
|
|
|
// final resolution of incoming htlcs.
|
|
|
|
func OptionStoreFinalHtlcResolutions(
|
|
|
|
storeFinalHtlcResolutions bool) OptionModifier {
|
|
|
|
|
|
|
|
return func(o *Options) {
|
|
|
|
o.storeFinalHtlcResolutions = storeFinalHtlcResolutions
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-28 06:46:37 +08:00
|
|
|
// OptionPruneRevocationLog specifies whether the migration for pruning
|
|
|
|
// revocation logs needs to be applied or not.
|
|
|
|
func OptionPruneRevocationLog(prune bool) OptionModifier {
|
|
|
|
return func(o *Options) {
|
|
|
|
o.OptionalMiragtionConfig.PruneRevocationLog = prune
|
|
|
|
}
|
|
|
|
}
|