diff options
| author | Chris Lu <chris.lu@gmail.com> | 2013-11-12 02:21:22 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2013-11-12 02:21:22 -0800 |
| commit | 3b687111399fd08468e4a6232bcbe6068df961bf (patch) | |
| tree | cde07f3ba6c9ae411d55b25c331bca6827253c30 /go/replication | |
| parent | 8f0e2f31afad1fcb2f06ef3ae55866313b7b4b02 (diff) | |
| download | seaweedfs-3b687111399fd08468e4a6232bcbe6068df961bf.tar.xz seaweedfs-3b687111399fd08468e4a6232bcbe6068df961bf.zip | |
support for collections!
Diffstat (limited to 'go/replication')
| -rw-r--r-- | go/replication/volume_growth.go | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/go/replication/volume_growth.go b/go/replication/volume_growth.go index 2adf72dee..6e5bf1f5c 100644 --- a/go/replication/volume_growth.go +++ b/go/replication/volume_growth.go @@ -32,27 +32,27 @@ func NewDefaultVolumeGrowth() *VolumeGrowth { return &VolumeGrowth{copy1factor: 7, copy2factor: 6, copy3factor: 3} } -func (vg *VolumeGrowth) AutomaticGrowByType(repType storage.ReplicationType, dataCenter string, topo *topology.Topology) (count int, err error) { +func (vg *VolumeGrowth) AutomaticGrowByType(collection string, repType storage.ReplicationType, dataCenter string, topo *topology.Topology) (count int, err error) { factor := 1 switch repType { case storage.Copy000: factor = 1 - count, err = vg.GrowByCountAndType(vg.copy1factor, repType, dataCenter, topo) + count, err = vg.GrowByCountAndType(vg.copy1factor, collection, repType, dataCenter, topo) case storage.Copy001: factor = 2 - count, err = vg.GrowByCountAndType(vg.copy2factor, repType, dataCenter, topo) + count, err = vg.GrowByCountAndType(vg.copy2factor, collection, repType, dataCenter, topo) case storage.Copy010: factor = 2 - count, err = vg.GrowByCountAndType(vg.copy2factor, repType, dataCenter, topo) + count, err = vg.GrowByCountAndType(vg.copy2factor, collection, repType, dataCenter, topo) case storage.Copy100: factor = 2 - count, err = vg.GrowByCountAndType(vg.copy2factor, repType, dataCenter, topo) + count, err = vg.GrowByCountAndType(vg.copy2factor, collection, repType, dataCenter, topo) case storage.Copy110: factor = 3 - count, err = vg.GrowByCountAndType(vg.copy3factor, repType, dataCenter, topo) + count, err = vg.GrowByCountAndType(vg.copy3factor, collection, repType, dataCenter, topo) case storage.Copy200: factor = 3 - count, err = vg.GrowByCountAndType(vg.copy3factor, repType, dataCenter, topo) + count, err = vg.GrowByCountAndType(vg.copy3factor, collection, repType, dataCenter, topo) default: err = errors.New("Unknown Replication Type!") } @@ -61,7 +61,7 @@ func (vg *VolumeGrowth) AutomaticGrowByType(repType storage.ReplicationType, dat } return count, err } -func (vg *VolumeGrowth) GrowByCountAndType(count int, repType storage.ReplicationType, dataCenter string, topo *topology.Topology) (counter int, err error) { +func (vg *VolumeGrowth) GrowByCountAndType(count int, collection string, repType storage.ReplicationType, dataCenter string, topo *topology.Topology) (counter int, err error) { vg.accessLock.Lock() defer vg.accessLock.Unlock() @@ -70,7 +70,7 @@ func (vg *VolumeGrowth) GrowByCountAndType(count int, repType storage.Replicatio case storage.Copy000: for i := 0; i < count; i++ { if ok, server, vid := topo.RandomlyReserveOneVolume(dataCenter); ok { - if err = vg.grow(topo, *vid, repType, server); err == nil { + if err = vg.grow(topo, *vid, collection, repType, server); err == nil { counter++ } else { return counter, err @@ -89,7 +89,7 @@ func (vg *VolumeGrowth) GrowByCountAndType(count int, repType storage.Replicatio newNodeList := topology.NewNodeList(rack.Children(), exclusion) if newNodeList.FreeSpace() > 0 { if ok2, server2 := newNodeList.ReserveOneVolume(rand.Intn(newNodeList.FreeSpace()), *vid); ok2 { - if err = vg.grow(topo, *vid, repType, server1, server2); err == nil { + if err = vg.grow(topo, *vid, collection, repType, server1, server2); err == nil { counter++ } } @@ -107,7 +107,7 @@ func (vg *VolumeGrowth) GrowByCountAndType(count int, repType storage.Replicatio newNodeList := topology.NewNodeList(dc.Children(), exclusion) if newNodeList.FreeSpace() > 0 { if ok2, server2 := newNodeList.ReserveOneVolume(rand.Intn(newNodeList.FreeSpace()), *vid); ok2 { - if err = vg.grow(topo, *vid, repType, server1, server2); err == nil { + if err = vg.grow(topo, *vid, collection, repType, server1, server2); err == nil { counter++ } } @@ -129,7 +129,7 @@ func (vg *VolumeGrowth) GrowByCountAndType(count int, repType storage.Replicatio } } if len(servers) == 2 { - if err = vg.grow(topo, vid, repType, servers...); err == nil { + if err = vg.grow(topo, vid, collection, repType, servers...); err == nil { counter++ } } @@ -168,7 +168,7 @@ func (vg *VolumeGrowth) GrowByCountAndType(count int, repType storage.Replicatio } } if len(servers) == 3 { - if err = vg.grow(topo, vid, repType, servers...); err == nil { + if err = vg.grow(topo, vid, collection, repType, servers...); err == nil { counter++ } } @@ -189,7 +189,7 @@ func (vg *VolumeGrowth) GrowByCountAndType(count int, repType storage.Replicatio } } if len(servers) == 3 { - if err = vg.grow(topo, vid, repType, servers...); err == nil { + if err = vg.grow(topo, vid, collection, repType, servers...); err == nil { counter++ } } @@ -198,10 +198,10 @@ func (vg *VolumeGrowth) GrowByCountAndType(count int, repType storage.Replicatio } return } -func (vg *VolumeGrowth) grow(topo *topology.Topology, vid storage.VolumeId, repType storage.ReplicationType, servers ...*topology.DataNode) error { +func (vg *VolumeGrowth) grow(topo *topology.Topology, vid storage.VolumeId, collection string, repType storage.ReplicationType, servers ...*topology.DataNode) error { for _, server := range servers { - if err := operation.AllocateVolume(server, vid, repType); err == nil { - vi := storage.VolumeInfo{Id: vid, Size: 0, RepType: repType, Version: storage.CurrentVersion} + if err := operation.AllocateVolume(server, vid, collection, repType); err == nil { + vi := storage.VolumeInfo{Id: vid, Size: 0, Collection: collection, RepType: repType, Version: storage.CurrentVersion} server.AddOrUpdateVolume(vi) topo.RegisterVolumeLayout(&vi, server) glog.V(0).Infoln("Created Volume", vid, "on", server) |
