diff options
Diffstat (limited to 'weed/topology/topology.go')
| -rw-r--r-- | weed/topology/topology.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/weed/topology/topology.go b/weed/topology/topology.go index fee4d6a03..017208b81 100644 --- a/weed/topology/topology.go +++ b/weed/topology/topology.go @@ -76,6 +76,28 @@ func NewTopology(id string, seq sequence.Sequencer, volumeSizeLimit uint64, puls return t } +func (t *Topology) IsChildLocked() (bool, error) { + if t.IsLocked() { + return true, errors.New("topology is locked") + } + for _, dcNode := range t.Children() { + if dcNode.IsLocked() { + return true, fmt.Errorf("topology child %s is locked", dcNode.String()) + } + for _, rackNode := range dcNode.Children() { + if rackNode.IsLocked() { + return true, fmt.Errorf("dc %s child %s is locked", dcNode.String(), rackNode.String()) + } + for _, dataNode := range rackNode.Children() { + if dataNode.IsLocked() { + return true, fmt.Errorf("rack %s child %s is locked", rackNode.String(), dataNode.Id()) + } + } + } + } + return false, nil +} + func (t *Topology) IsLeader() bool { t.RaftServerAccessLock.RLock() defer t.RaftServerAccessLock.RUnlock() |
