Browse Source

correct assign logic for rack level. Still need to fix data center

level.
pull/2/head
Chris Lu 11 years ago
parent
commit
47620bb27a
  1. 14
      go/topology/volume_growth.go

14
go/topology/volume_growth.go

@ -110,11 +110,21 @@ func (vg *VolumeGrowth) findEmptySlotsForOneVolume(topo *Topology, option *Volum
if option.Rack != "" && node.IsRack() && node.Id() != NodeId(option.Rack) {
return fmt.Errorf("Not matching preferred rack:%s", option.Rack)
}
if node.FreeSpace() < rp.SameRackCount+1 {
return fmt.Errorf("Free:%d < Expected:%d", node.FreeSpace(), rp.SameRackCount+1)
}
if len(node.Children()) < rp.SameRackCount+1 {
// a bit faster way test failed cases
return fmt.Errorf("Only has %d data nodes, not enough for %d.", len(node.Children()), rp.SameRackCount+1)
}
if node.FreeSpace() < rp.SameRackCount+1 {
return fmt.Errorf("Free:%d < Expected:%d", node.FreeSpace(), rp.SameRackCount+1)
possibleDataNodeCount := 0
for _, n := range node.Children() {
if n.FreeSpace() >= 1 {
possibleDataNodeCount++
}
}
if possibleDataNodeCount < rp.SameRackCount+1 {
return fmt.Errorf("Only has %d data nodes with a slot, not enough for %d.", possibleDataNodeCount, rp.SameRackCount+1)
}
return nil
})

Loading…
Cancel
Save