mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-09-02 03:54:26 +02:00
multi: make watchtower client/server DBs remote compatible
The final database that needs to be made remote compatible is the watchtower server and client database. They are handled a bit differently because both of them are not always active, only when specifically turned on in the config.
This commit is contained in:
99
lncfg/db.go
99
lncfg/db.go
@@ -10,9 +10,11 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
channelDBName = "channel.db"
|
||||
macaroonDBName = "macaroons.db"
|
||||
decayedLogDbName = "sphinxreplay.db"
|
||||
channelDBName = "channel.db"
|
||||
macaroonDBName = "macaroons.db"
|
||||
decayedLogDbName = "sphinxreplay.db"
|
||||
towerClientDBName = "wtclient.db"
|
||||
towerServerDBName = "watchtower.db"
|
||||
|
||||
BoltBackend = "bolt"
|
||||
EtcdBackend = "etcd"
|
||||
@@ -28,6 +30,14 @@ const (
|
||||
// NSDecayedLogDB is the namespace name that we use for the sphinx
|
||||
// replay a.k.a. decayed log DB.
|
||||
NSDecayedLogDB = "decayedlogdb"
|
||||
|
||||
// NSTowerClientDB is the namespace name that we use for the watchtower
|
||||
// client DB.
|
||||
NSTowerClientDB = "towerclientdb"
|
||||
|
||||
// NSTowerServerDB is the namespace name that we use for the watchtower
|
||||
// server DB.
|
||||
NSTowerServerDB = "towerserverdb"
|
||||
)
|
||||
|
||||
// DB holds database configuration for LND.
|
||||
@@ -117,6 +127,14 @@ type DatabaseBackends struct {
|
||||
// data.
|
||||
DecayedLogDB kvdb.Backend
|
||||
|
||||
// TowerClientDB points to a database backend that stores the watchtower
|
||||
// client data. This might be nil if the watchtower client is disabled.
|
||||
TowerClientDB kvdb.Backend
|
||||
|
||||
// TowerServerDB points to a database backend that stores the watchtower
|
||||
// server data. This might be nil if the watchtower server is disabled.
|
||||
TowerServerDB kvdb.Backend
|
||||
|
||||
// Remote indicates whether the database backends are remote, possibly
|
||||
// replicated instances or local bbolt backed databases.
|
||||
Remote bool
|
||||
@@ -128,7 +146,8 @@ type DatabaseBackends struct {
|
||||
|
||||
// GetBackends returns a set of kvdb.Backends as set in the DB config.
|
||||
func (db *DB) GetBackends(ctx context.Context, chanDBPath,
|
||||
walletDBPath string) (*DatabaseBackends, error) {
|
||||
walletDBPath, towerServerDBPath string, towerClientEnabled,
|
||||
towerServerEnabled bool) (*DatabaseBackends, error) {
|
||||
|
||||
// We keep track of all the kvdb backends we actually open and return a
|
||||
// reference to their close function so they can be cleaned up properly
|
||||
@@ -159,13 +178,15 @@ func (db *DB) GetBackends(ctx context.Context, chanDBPath,
|
||||
|
||||
returnEarly = false
|
||||
return &DatabaseBackends{
|
||||
GraphDB: etcdBackend,
|
||||
ChanStateDB: etcdBackend,
|
||||
HeightHintDB: etcdBackend,
|
||||
MacaroonDB: etcdBackend,
|
||||
DecayedLogDB: etcdBackend,
|
||||
Remote: true,
|
||||
CloseFuncs: closeFuncs,
|
||||
GraphDB: etcdBackend,
|
||||
ChanStateDB: etcdBackend,
|
||||
HeightHintDB: etcdBackend,
|
||||
MacaroonDB: etcdBackend,
|
||||
DecayedLogDB: etcdBackend,
|
||||
TowerClientDB: etcdBackend,
|
||||
TowerServerDB: etcdBackend,
|
||||
Remote: true,
|
||||
CloseFuncs: closeFuncs,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -209,14 +230,58 @@ func (db *DB) GetBackends(ctx context.Context, chanDBPath,
|
||||
}
|
||||
closeFuncs[NSDecayedLogDB] = decayedLogBackend.Close
|
||||
|
||||
// The tower client is optional and might not be enabled by the user. We
|
||||
// handle it being nil properly in the main server.
|
||||
var towerClientBackend kvdb.Backend
|
||||
if towerClientEnabled {
|
||||
towerClientBackend, err = kvdb.GetBoltBackend(
|
||||
&kvdb.BoltBackendConfig{
|
||||
DBPath: chanDBPath,
|
||||
DBFileName: towerClientDBName,
|
||||
DBTimeout: db.Bolt.DBTimeout,
|
||||
NoFreelistSync: !db.Bolt.SyncFreelist,
|
||||
AutoCompact: db.Bolt.AutoCompact,
|
||||
AutoCompactMinAge: db.Bolt.AutoCompactMinAge,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error opening tower client "+
|
||||
"DB: %v", err)
|
||||
}
|
||||
closeFuncs[NSTowerClientDB] = towerClientBackend.Close
|
||||
}
|
||||
|
||||
// The tower server is optional and might not be enabled by the user. We
|
||||
// handle it being nil properly in the main server.
|
||||
var towerServerBackend kvdb.Backend
|
||||
if towerServerEnabled {
|
||||
towerServerBackend, err = kvdb.GetBoltBackend(
|
||||
&kvdb.BoltBackendConfig{
|
||||
DBPath: towerServerDBPath,
|
||||
DBFileName: towerServerDBName,
|
||||
DBTimeout: db.Bolt.DBTimeout,
|
||||
NoFreelistSync: !db.Bolt.SyncFreelist,
|
||||
AutoCompact: db.Bolt.AutoCompact,
|
||||
AutoCompactMinAge: db.Bolt.AutoCompactMinAge,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error opening tower server "+
|
||||
"DB: %v", err)
|
||||
}
|
||||
closeFuncs[NSTowerServerDB] = towerServerBackend.Close
|
||||
}
|
||||
|
||||
returnEarly = false
|
||||
return &DatabaseBackends{
|
||||
GraphDB: boltBackend,
|
||||
ChanStateDB: boltBackend,
|
||||
HeightHintDB: boltBackend,
|
||||
MacaroonDB: macaroonBackend,
|
||||
DecayedLogDB: decayedLogBackend,
|
||||
CloseFuncs: closeFuncs,
|
||||
GraphDB: boltBackend,
|
||||
ChanStateDB: boltBackend,
|
||||
HeightHintDB: boltBackend,
|
||||
MacaroonDB: macaroonBackend,
|
||||
DecayedLogDB: decayedLogBackend,
|
||||
TowerClientDB: towerClientBackend,
|
||||
TowerServerDB: towerServerBackend,
|
||||
CloseFuncs: closeFuncs,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user