multi: add unsafedisconnect as a dev config
This commit adds a new dev config `unsafedisconnect` as we sometimes want to disconnect nodes in our itests.
This commit is contained in:
4 files changed
+37
-6
No files matched your search
@@ -24,6 +24,17 @@ func (d *DevConfig) ChannelReadyWait() time.Duration {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetUnsafeDisconnect returns the config value, which is always true for
|
||||||
|
// production build.
|
||||||
|
//
|
||||||
|
// TODO(yy): this is a temporary solution to allow users to reconnect peers to
|
||||||
|
// trigger a reestablishiment for the active channels. Once a new dedicated RPC
|
||||||
|
// is added to realize that functionality, this function should return false to
|
||||||
|
// forbidden disconnecting peers while there are active channels.
|
||||||
|
func (d *DevConfig) GetUnsafeDisconnect() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// GetReservationTimeout returns the config value for `ReservationTimeout`.
|
// GetReservationTimeout returns the config value for `ReservationTimeout`.
|
||||||
func (d *DevConfig) GetReservationTimeout() time.Duration {
|
func (d *DevConfig) GetReservationTimeout() time.Duration {
|
||||||
return DefaultReservationTimeout
|
return DefaultReservationTimeout
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ type DevConfig struct {
|
|||||||
ProcessChannelReadyWait time.Duration `long:"processchannelreadywait" description:"Time to sleep before processing remote node's channel_ready message."`
|
ProcessChannelReadyWait time.Duration `long:"processchannelreadywait" description:"Time to sleep before processing remote node's channel_ready message."`
|
||||||
ReservationTimeout time.Duration `long:"reservationtimeout" description:"The maximum time we keep a pending channel open flow in memory."`
|
ReservationTimeout time.Duration `long:"reservationtimeout" description:"The maximum time we keep a pending channel open flow in memory."`
|
||||||
ZombieSweeperInterval time.Duration `long:"zombiesweeperinterval" description:"The time interval at which channel opening flows are evaluated for zombie status."`
|
ZombieSweeperInterval time.Duration `long:"zombiesweeperinterval" description:"The time interval at which channel opening flows are evaluated for zombie status."`
|
||||||
|
UnsafeDisconnect bool `long:"unsafedisconnect" description:"Allows the rpcserver to intentionally disconnect from peers with open channels."`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChannelReadyWait returns the config value `ProcessChannelReadyWait`.
|
// ChannelReadyWait returns the config value `ProcessChannelReadyWait`.
|
||||||
@@ -46,3 +47,8 @@ func (d *DevConfig) GetZombieSweeperInterval() time.Duration {
|
|||||||
|
|
||||||
return d.ZombieSweeperInterval
|
return d.ZombieSweeperInterval
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChannelReadyWait returns the config value `UnsafeDisconnect`.
|
||||||
|
func (d *DevConfig) GetUnsafeDisconnect() bool {
|
||||||
|
return d.UnsafeDisconnect
|
||||||
|
}
|
||||||
@@ -206,7 +206,6 @@ func (cfg *BaseNodeConfig) GenArgs() []string {
|
|||||||
args = append(args, backendArgs...)
|
args = append(args, backendArgs...)
|
||||||
|
|
||||||
nodeArgs := []string{
|
nodeArgs := []string{
|
||||||
"--bitcoin.active",
|
|
||||||
"--nobootstrap",
|
"--nobootstrap",
|
||||||
"--debuglevel=debug,DISC=trace",
|
"--debuglevel=debug,DISC=trace",
|
||||||
"--bitcoin.defaultchanconfs=1",
|
"--bitcoin.defaultchanconfs=1",
|
||||||
@@ -241,6 +240,9 @@ func (cfg *BaseNodeConfig) GenArgs() []string {
|
|||||||
// Speed up the tests for bitcoind backend.
|
// Speed up the tests for bitcoind backend.
|
||||||
"--bitcoind.blockpollinginterval=100ms",
|
"--bitcoind.blockpollinginterval=100ms",
|
||||||
"--bitcoind.txpollinginterval=100ms",
|
"--bitcoind.txpollinginterval=100ms",
|
||||||
|
|
||||||
|
// Allow unsafe disconnect in itest.
|
||||||
|
"--dev.unsafedisconnect",
|
||||||
}
|
}
|
||||||
|
|
||||||
args = append(args, nodeArgs...)
|
args = append(args, nodeArgs...)
|
||||||
|
|||||||
+17
-5
@@ -1747,15 +1747,27 @@ func (r *rpcServer) DisconnectPeer(ctx context.Context,
|
|||||||
// In order to avoid erroneously disconnecting from a peer that we have
|
// In order to avoid erroneously disconnecting from a peer that we have
|
||||||
// an active channel with, if we have any channels active with this
|
// an active channel with, if we have any channels active with this
|
||||||
// peer, then we'll disallow disconnecting from them.
|
// peer, then we'll disallow disconnecting from them.
|
||||||
if len(nodeChannels) > 0 {
|
if len(nodeChannels) != 0 {
|
||||||
return nil, fmt.Errorf("cannot disconnect from peer(%x), "+
|
// If we are not in a dev environment or the configed dev value
|
||||||
"all active channels with the peer need to be closed "+
|
// `unsafedisconnect` is false, we return an error since there
|
||||||
"first", pubKeyBytes)
|
// are active channels.
|
||||||
|
if !r.cfg.Dev.GetUnsafeDisconnect() {
|
||||||
|
return nil, fmt.Errorf("cannot disconnect from "+
|
||||||
|
"peer(%x), still has %d active channels",
|
||||||
|
pubKeyBytes, len(nodeChannels))
|
||||||
|
}
|
||||||
|
|
||||||
|
// We are in a dev environment, print a warning log and
|
||||||
|
// disconnect.
|
||||||
|
rpcsLog.Warnf("UnsafeDisconnect mode, disconnecting from "+
|
||||||
|
"peer(%x) while there are %d active channels",
|
||||||
|
pubKeyBytes, len(nodeChannels))
|
||||||
}
|
}
|
||||||
|
|
||||||
// With all initial validation complete, we'll now request that the
|
// With all initial validation complete, we'll now request that the
|
||||||
// server disconnects from the peer.
|
// server disconnects from the peer.
|
||||||
if err := r.server.DisconnectPeer(peerPubKey); err != nil {
|
err = r.server.DisconnectPeer(peerPubKey)
|
||||||
|
if err != nil {
|
||||||
return nil, fmt.Errorf("unable to disconnect peer: %v", err)
|
return nil, fmt.Errorf("unable to disconnect peer: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user