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) }