aboutsummaryrefslogtreecommitdiff
path: root/weed/storage/erasure_coding/ec_context.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/storage/erasure_coding/ec_context.go')
-rw-r--r--weed/storage/erasure_coding/ec_context.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/weed/storage/erasure_coding/ec_context.go b/weed/storage/erasure_coding/ec_context.go
new file mode 100644
index 000000000..770fe41af
--- /dev/null
+++ b/weed/storage/erasure_coding/ec_context.go
@@ -0,0 +1,46 @@
+package erasure_coding
+
+import (
+ "fmt"
+
+ "github.com/klauspost/reedsolomon"
+ "github.com/seaweedfs/seaweedfs/weed/storage/needle"
+)
+
+// ECContext encapsulates erasure coding parameters for encoding/decoding operations
+type ECContext struct {
+ DataShards int
+ ParityShards int
+ Collection string
+ VolumeId needle.VolumeId
+}
+
+// Total returns the total number of shards (data + parity)
+func (ctx *ECContext) Total() int {
+ return ctx.DataShards + ctx.ParityShards
+}
+
+// NewDefaultECContext creates a context with default 10+4 shard configuration
+func NewDefaultECContext(collection string, volumeId needle.VolumeId) *ECContext {
+ return &ECContext{
+ DataShards: DataShardsCount,
+ ParityShards: ParityShardsCount,
+ Collection: collection,
+ VolumeId: volumeId,
+ }
+}
+
+// CreateEncoder creates a Reed-Solomon encoder for this context
+func (ctx *ECContext) CreateEncoder() (reedsolomon.Encoder, error) {
+ return reedsolomon.New(ctx.DataShards, ctx.ParityShards)
+}
+
+// ToExt returns the file extension for a given shard index
+func (ctx *ECContext) ToExt(shardIndex int) string {
+ return fmt.Sprintf(".ec%02d", shardIndex)
+}
+
+// String returns a human-readable representation of the EC configuration
+func (ctx *ECContext) String() string {
+ return fmt.Sprintf("%d+%d (total: %d)", ctx.DataShards, ctx.ParityShards, ctx.Total())
+}