diff --git a/weed-fs/src/pkg/replication/volume_growth.go b/weed-fs/src/pkg/replication/volume_growth.go index 49afc741c..5747330ea 100644 --- a/weed-fs/src/pkg/replication/volume_growth.go +++ b/weed-fs/src/pkg/replication/volume_growth.go @@ -22,7 +22,7 @@ type VolumeGrowth struct { func (vg *VolumeGrowth) GrowVolumeCopy(copyLevel int, topo topology.Topology) { if copyLevel == 1 { for i := 0; i 0 { //if reserved n.reservedVolumeCount-- @@ -42,6 +45,10 @@ func (n *Node) AddVolume(v *storage.VolumeInfo) { } } +func (n *Node) GetMaxVolumeId() storage.VolumeId { + return n.maxVolumeId +} + func (n *Node) AddNode(node *Node) { n.children[node.id] = node n.countVolumeCount += node.countVolumeCount diff --git a/weed-fs/src/pkg/topology/topology.go b/weed-fs/src/pkg/topology/topology.go index 05f603af3..7afa19803 100644 --- a/weed-fs/src/pkg/topology/topology.go +++ b/weed-fs/src/pkg/topology/topology.go @@ -9,12 +9,13 @@ type Topology struct { Node } -func (t *Topology) RandomlyCreateOneVolume() (bool,storage.VolumeId) { +func (t *Topology) RandomlyReserveOneVolume() (bool,storage.VolumeId) { r := rand.Intn(t.Node.maxVolumeCount-t.Node.countVolumeCount-t.Node.reservedVolumeCount) vid := t.nextVolumeId() return t.Node.ReserveOneVolume(r,vid), vid } func (t *Topology) nextVolumeId() storage.VolumeId { - return storage.VolumeId(0) + vid := t.Node.GetMaxVolumeId() + return vid.Next() }