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/topology/collection.go | |
| parent | 8f0e2f31afad1fcb2f06ef3ae55866313b7b4b02 (diff) | |
| download | seaweedfs-3b687111399fd08468e4a6232bcbe6068df961bf.tar.xz seaweedfs-3b687111399fd08468e4a6232bcbe6068df961bf.zip | |
support for collections!
Diffstat (limited to 'go/topology/collection.go')
| -rw-r--r-- | go/topology/collection.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/go/topology/collection.go b/go/topology/collection.go new file mode 100644 index 000000000..0a7971424 --- /dev/null +++ b/go/topology/collection.go @@ -0,0 +1,38 @@ +package topology + +import ( + "code.google.com/p/weed-fs/go/glog" + "code.google.com/p/weed-fs/go/storage" +) + +type Collection struct { + Name string + volumeSizeLimit uint64 + replicaType2VolumeLayout []*VolumeLayout +} + +func NewCollection(name string, volumeSizeLimit uint64) *Collection { + c := &Collection{Name: name, volumeSizeLimit: volumeSizeLimit} + c.replicaType2VolumeLayout = make([]*VolumeLayout, storage.LengthRelicationType) + return c +} + +func (c *Collection) GetOrCreateVolumeLayout(repType storage.ReplicationType) *VolumeLayout { + replicationTypeIndex := repType.GetReplicationLevelIndex() + if c.replicaType2VolumeLayout[replicationTypeIndex] == nil { + glog.V(0).Infoln("collection", c.Name, "adding replication type", repType) + c.replicaType2VolumeLayout[replicationTypeIndex] = NewVolumeLayout(repType, c.volumeSizeLimit) + } + return c.replicaType2VolumeLayout[replicationTypeIndex] +} + +func (c *Collection) Lookup(vid storage.VolumeId) []*DataNode { + for _, vl := range c.replicaType2VolumeLayout { + if vl != nil { + if list := vl.Lookup(vid); list != nil { + return list + } + } + } + return nil +} |
