diff --git a/weed/storage/erasure_coding/ec_context.go b/weed/storage/erasure_coding/ec_context.go new file mode 100644 index 000000000..4270c58c3 --- /dev/null +++ b/weed/storage/erasure_coding/ec_context.go @@ -0,0 +1,44 @@ +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 + TotalShards int + Collection string + VolumeId needle.VolumeId +} + +// NewDefaultECContext creates a context with default 10+4 shard configuration +func NewDefaultECContext(collection string, volumeId needle.VolumeId) *ECContext { + return &ECContext{ + DataShards: DataShardsCount, + ParityShards: ParityShardsCount, + TotalShards: TotalShardsCount, + 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.TotalShards) +} +