From 11cffb3168fd18bbf28772a54a0c3fac13e671e4 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Mon, 3 Jun 2019 11:50:54 -0700 Subject: [PATCH] fix ec.rebuild bugs --- weed/server/volume_grpc_erasure_coding.go | 1 + weed/storage/erasure_coding/ec_encoder.go | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/weed/server/volume_grpc_erasure_coding.go b/weed/server/volume_grpc_erasure_coding.go index 5568596a9..d73cbdeeb 100644 --- a/weed/server/volume_grpc_erasure_coding.go +++ b/weed/server/volume_grpc_erasure_coding.go @@ -68,6 +68,7 @@ func (vs *VolumeServer) VolumeEcShardsRebuild(ctx context.Context, req *volume_s for _, location := range vs.store.Locations { if util.FileExists(path.Join(location.Directory, baseFileName+".ecx")) { // write .ec01 ~ .ec14 files + baseFileName = path.Join(location.Directory, baseFileName) if generatedShardIds, err := erasure_coding.RebuildEcFiles(baseFileName); err != nil { return nil, fmt.Errorf("RebuildEcFiles %s: %v", baseFileName, err) } else { diff --git a/weed/storage/erasure_coding/ec_encoder.go b/weed/storage/erasure_coding/ec_encoder.go index 090e6e075..26130b4ba 100644 --- a/weed/storage/erasure_coding/ec_encoder.go +++ b/weed/storage/erasure_coding/ec_encoder.go @@ -249,19 +249,17 @@ func rebuildEcFiles(shardHasData []bool, inputFiles []*os.File, outputFiles []*o if n == 0 { return nil } - if inputBufferDataSize != 0 { + if inputBufferDataSize == 0 { inputBufferDataSize = n } if inputBufferDataSize != n { - return fmt.Errorf("ec shard size need to be the same") + return fmt.Errorf("ec shard size expected %d actual %d", inputBufferDataSize, n) } } else { buffers[i] = nil } } - fmt.Printf("reconstructing [%d,%d)\n", startOffset, startOffset+int64(inputBufferDataSize)) - // encode the data err = enc.Reconstruct(buffers) if err != nil {