|
@ -408,7 +408,9 @@ func (vs *VolumeServer) VolumeEcShardsToVolume(ctx context.Context, req *volume_ |
|
|
|
|
|
|
|
|
glog.V(0).Infof("VolumeEcShardsToVolume: %v", req) |
|
|
glog.V(0).Infof("VolumeEcShardsToVolume: %v", req) |
|
|
|
|
|
|
|
|
v, found := vs.store.FindEcVolume(needle.VolumeId(req.VolumeId)) |
|
|
|
|
|
|
|
|
// collect .ec00 ~ .ec09 files
|
|
|
|
|
|
shardFileNames := make([]string, erasure_coding.DataShardsCount) |
|
|
|
|
|
v, found := vs.store.CollectEcShards(needle.VolumeId(req.VolumeId), shardFileNames) |
|
|
if !found { |
|
|
if !found { |
|
|
return nil, fmt.Errorf("ec volume %d not found", req.VolumeId) |
|
|
return nil, fmt.Errorf("ec volume %d not found", req.VolumeId) |
|
|
} |
|
|
} |
|
@ -417,6 +419,12 @@ func (vs *VolumeServer) VolumeEcShardsToVolume(ctx context.Context, req *volume_ |
|
|
return nil, fmt.Errorf("existing collection:%v unexpected input: %v", v.Collection, req.Collection) |
|
|
return nil, fmt.Errorf("existing collection:%v unexpected input: %v", v.Collection, req.Collection) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for shardId := 0; shardId < DataShardsCount; shardId++ { |
|
|
|
|
|
if shardFileNames[shardId] == "" { |
|
|
|
|
|
return nil, fmt.Errorf("ec volume %d missing shard %d", req.VolumeId, shardId) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
dataBaseFileName, indexBaseFileName := v.DataBaseFileName(), v.IndexBaseFileName() |
|
|
dataBaseFileName, indexBaseFileName := v.DataBaseFileName(), v.IndexBaseFileName() |
|
|
// calculate .dat file size
|
|
|
// calculate .dat file size
|
|
|
datFileSize, err := erasure_coding.FindDatFileSize(dataBaseFileName, indexBaseFileName) |
|
|
datFileSize, err := erasure_coding.FindDatFileSize(dataBaseFileName, indexBaseFileName) |
|
@ -425,7 +433,7 @@ func (vs *VolumeServer) VolumeEcShardsToVolume(ctx context.Context, req *volume_ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// write .dat file from .ec00 ~ .ec09 files
|
|
|
// write .dat file from .ec00 ~ .ec09 files
|
|
|
if err := erasure_coding.WriteDatFile(dataBaseFileName, datFileSize); err != nil { |
|
|
|
|
|
|
|
|
if err := erasure_coding.WriteDatFile(dataBaseFileName, datFileSize, shardFileNames); err != nil { |
|
|
return nil, fmt.Errorf("WriteDatFile %s: %v", dataBaseFileName, err) |
|
|
return nil, fmt.Errorf("WriteDatFile %s: %v", dataBaseFileName, err) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|