aboutsummaryrefslogtreecommitdiff
path: root/weed/server/volume_grpc_erasure_coding.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-05-28 21:29:07 -0700
committerChris Lu <chris.lu@gmail.com>2019-05-28 21:29:07 -0700
commit3f9ecee40fd469f9669686752ea8c6b2b8090596 (patch)
tree9970709a3fd1702a12e3bfea27ccf4dcfef981df /weed/server/volume_grpc_erasure_coding.go
parent302d9fbc6dcc6471e8dcf1bb2c765364c5bcfd57 (diff)
downloadseaweedfs-3f9ecee40fd469f9669686752ea8c6b2b8090596.tar.xz
seaweedfs-3f9ecee40fd469f9669686752ea8c6b2b8090596.zip
working with reading remote intervals
Diffstat (limited to 'weed/server/volume_grpc_erasure_coding.go')
-rw-r--r--weed/server/volume_grpc_erasure_coding.go37
1 files changed, 22 insertions, 15 deletions
diff --git a/weed/server/volume_grpc_erasure_coding.go b/weed/server/volume_grpc_erasure_coding.go
index 6cb826d30..2ef89a040 100644
--- a/weed/server/volume_grpc_erasure_coding.go
+++ b/weed/server/volume_grpc_erasure_coding.go
@@ -160,35 +160,42 @@ func (vs *VolumeServer) VolumeEcShardRead(req *volume_server_pb.VolumeEcShardRea
return fmt.Errorf("not found ec shard %d.%d", req.VolumeId, req.ShardId)
}
- buffer := make([]byte, BufferSizeLimit)
+ bufSize := req.Size
+ if bufSize > BufferSizeLimit {
+ bufSize = BufferSizeLimit
+ }
+ buffer := make([]byte, bufSize)
+
startOffset, bytesToRead := req.Offset, req.Size
for bytesToRead > 0 {
bytesread, err := ecShard.ReadAt(buffer, startOffset)
// println(fileName, "read", bytesread, "bytes, with target", bytesToRead)
+ if bytesread > 0 {
- if err != nil {
- if err != io.EOF {
+ if int64(bytesread) > bytesToRead {
+ bytesread = int(bytesToRead)
+ }
+ err = stream.Send(&volume_server_pb.VolumeEcShardReadResponse{
+ Data: buffer[:bytesread],
+ })
+ if err != nil {
+ // println("sending", bytesread, "bytes err", err.Error())
return err
}
- // println(fileName, "read", bytesread, "bytes, with target", bytesToRead, "err", err.Error())
- break
- }
- if int64(bytesread) > bytesToRead {
- bytesread = int(bytesToRead)
+ bytesToRead -= int64(bytesread)
+
}
- err = stream.Send(&volume_server_pb.VolumeEcShardReadResponse{
- Data: buffer[:bytesread],
- })
+
if err != nil {
- // println("sending", bytesread, "bytes err", err.Error())
- return err
+ if err != io.EOF {
+ return err
+ }
+ return nil
}
- bytesToRead -= int64(bytesread)
-
}
return nil