mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-30 23:53:41 +02:00
wtclient: add DeactivateTower method
This commit adds the DeactiateTower method to the wtclient.ClientManager interface along with its implementation. A test is also added for the new method.
This commit is contained in:
@@ -38,6 +38,11 @@ type ClientManager interface {
|
||||
// instead.
|
||||
RemoveTower(*btcec.PublicKey, net.Addr) error
|
||||
|
||||
// DeactivateTower sets the given tower's status to inactive so that it
|
||||
// is not considered for session negotiation. Its sessions will also not
|
||||
// be used while the tower is inactive.
|
||||
DeactivateTower(pubKey *btcec.PublicKey) error
|
||||
|
||||
// Stats returns the in-memory statistics of the client since startup.
|
||||
Stats() ClientStats
|
||||
|
||||
@@ -431,6 +436,56 @@ func (m *Manager) RemoveTower(key *btcec.PublicKey, addr net.Addr) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeactivateTower sets the given tower's status to inactive so that it is not
|
||||
// considered for session negotiation. Its sessions will also not be used while
|
||||
// the tower is inactive.
|
||||
func (m *Manager) DeactivateTower(key *btcec.PublicKey) error {
|
||||
// We'll load the tower in order to retrieve its ID within the database.
|
||||
tower, err := m.cfg.DB.LoadTower(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m.clientsMu.Lock()
|
||||
defer m.clientsMu.Unlock()
|
||||
|
||||
for _, client := range m.clients {
|
||||
err := client.deactivateTower(tower.ID, tower.IdentityKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Finally, mark the tower as inactive in the DB.
|
||||
err = m.cfg.DB.DeactivateTower(key)
|
||||
if err != nil {
|
||||
log.Errorf("Could not deactivate the tower. Re-activating. %v",
|
||||
err)
|
||||
|
||||
// If the persisted state update fails, re-add the address to
|
||||
// our client's in-memory state.
|
||||
tower, newTowerErr := NewTowerFromDBTower(tower)
|
||||
if newTowerErr != nil {
|
||||
log.Errorf("Could not create new in-memory tower: %v",
|
||||
newTowerErr)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
for _, client := range m.clients {
|
||||
addTowerErr := client.addTower(tower)
|
||||
if addTowerErr != nil {
|
||||
log.Errorf("Could not re-add tower: %v",
|
||||
addTowerErr)
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stats returns the in-memory statistics of the clients managed by the Manager
|
||||
// since startup.
|
||||
func (m *Manager) Stats() ClientStats {
|
||||
@@ -850,7 +905,7 @@ func (m *Manager) handleClosableSessions(
|
||||
// Stop the session and remove it from the
|
||||
// in-memory set.
|
||||
err = client.stopAndRemoveSession(
|
||||
item.sessionID,
|
||||
item.sessionID, true,
|
||||
)
|
||||
if err != nil {
|
||||
log.Errorf("could not remove "+
|
||||
|
Reference in New Issue
Block a user