aboutsummaryrefslogtreecommitdiff
path: root/weed/topology/topology.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/topology/topology.go')
-rw-r--r--weed/topology/topology.go22
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()