aboutsummaryrefslogtreecommitdiff
path: root/weed/storage/erasure_coding
diff options
context:
space:
mode:
Diffstat (limited to 'weed/storage/erasure_coding')
-rw-r--r--weed/storage/erasure_coding/ec_volume.go40
1 files changed, 21 insertions, 19 deletions
diff --git a/weed/storage/erasure_coding/ec_volume.go b/weed/storage/erasure_coding/ec_volume.go
index 881e88d5f..5fba31f95 100644
--- a/weed/storage/erasure_coding/ec_volume.go
+++ b/weed/storage/erasure_coding/ec_volume.go
@@ -9,26 +9,28 @@ import (
"github.com/chrislusf/seaweedfs/weed/storage/types"
)
-type EcVolumeShards []*EcVolumeShard
+type EcVolume struct {
+ Shards []*EcVolumeShard
+}
-func (shards *EcVolumeShards) AddEcVolumeShard(ecVolumeShard *EcVolumeShard) bool {
- for _, s := range *shards {
+func (ev *EcVolume) AddEcVolumeShard(ecVolumeShard *EcVolumeShard) bool {
+ for _, s := range ev.Shards {
if s.ShardId == ecVolumeShard.ShardId {
return false
}
}
- *shards = append(*shards, ecVolumeShard)
- sort.Slice(shards, func(i, j int) bool {
- return (*shards)[i].VolumeId < (*shards)[j].VolumeId ||
- (*shards)[i].VolumeId == (*shards)[j].VolumeId && (*shards)[i].ShardId < (*shards)[j].ShardId
+ ev.Shards = append(ev.Shards, ecVolumeShard)
+ sort.Slice(ev, func(i, j int) bool {
+ return ev.Shards[i].VolumeId < ev.Shards[j].VolumeId ||
+ ev.Shards[i].VolumeId == ev.Shards[j].VolumeId && ev.Shards[i].ShardId < ev.Shards[j].ShardId
})
return true
}
-func (shards *EcVolumeShards) DeleteEcVolumeShard(ecVolumeShard *EcVolumeShard) bool {
+func (ev *EcVolume) DeleteEcVolumeShard(shardId ShardId) bool {
foundPosition := -1
- for i, s := range *shards {
- if s.ShardId == ecVolumeShard.ShardId {
+ for i, s := range ev.Shards {
+ if s.ShardId == shardId {
foundPosition = i
}
}
@@ -36,12 +38,12 @@ func (shards *EcVolumeShards) DeleteEcVolumeShard(ecVolumeShard *EcVolumeShard)
return false
}
- *shards = append((*shards)[:foundPosition], (*shards)[foundPosition+1:]...)
+ ev.Shards = append(ev.Shards[:foundPosition], ev.Shards[foundPosition+1:]...)
return true
}
-func (shards *EcVolumeShards) FindEcVolumeShard(shardId ShardId) (ecVolumeShard *EcVolumeShard, found bool) {
- for _, s := range *shards {
+func (ev *EcVolume) FindEcVolumeShard(shardId ShardId) (ecVolumeShard *EcVolumeShard, found bool) {
+ for _, s := range ev.Shards {
if s.ShardId == shardId {
return s, true
}
@@ -49,16 +51,16 @@ func (shards *EcVolumeShards) FindEcVolumeShard(shardId ShardId) (ecVolumeShard
return nil, false
}
-func (shards *EcVolumeShards) Close() {
- for _, s := range *shards {
+func (ev *EcVolume) Close() {
+ for _, s := range ev.Shards {
s.Close()
}
}
-func (shards *EcVolumeShards) ToVolumeEcShardInformationMessage() (messages []*master_pb.VolumeEcShardInformationMessage) {
+func (ev *EcVolume) ToVolumeEcShardInformationMessage() (messages []*master_pb.VolumeEcShardInformationMessage) {
prevVolumeId := needle.VolumeId(math.MaxUint32)
var m *master_pb.VolumeEcShardInformationMessage
- for _, s := range *shards {
+ for _, s := range ev.Shards {
if s.VolumeId != prevVolumeId {
m = &master_pb.VolumeEcShardInformationMessage{
Id: uint32(s.VolumeId),
@@ -72,9 +74,9 @@ func (shards *EcVolumeShards) ToVolumeEcShardInformationMessage() (messages []*m
return
}
-func (shards *EcVolumeShards) LocateEcShardNeedle(n *needle.Needle) (offset types.Offset, size uint32, intervals []Interval, err error) {
+func (ev *EcVolume) LocateEcShardNeedle(n *needle.Needle) (offset types.Offset, size uint32, intervals []Interval, err error) {
- shard := (*shards)[0]
+ shard := ev.Shards[0]
// find the needle from ecx file
offset, size, err = shard.findNeedleFromEcx(n.Id)
if err != nil {