Chris Lu
3 years ago
4 changed files with 671 additions and 651 deletions
-
43weed/pb/volume_server.proto
-
1192weed/pb/volume_server_pb/volume_server.pb.go
-
38weed/server/volume_grpc_read_write.go
-
49weed/server/volume_grpc_remote.go
1192
weed/pb/volume_server_pb/volume_server.pb.go
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,49 @@ |
|||
package weed_server |
|||
|
|||
import ( |
|||
"context" |
|||
"fmt" |
|||
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb" |
|||
"github.com/chrislusf/seaweedfs/weed/pb/volume_server_pb" |
|||
"github.com/chrislusf/seaweedfs/weed/remote_storage" |
|||
"github.com/chrislusf/seaweedfs/weed/storage/needle" |
|||
"github.com/chrislusf/seaweedfs/weed/storage/types" |
|||
) |
|||
|
|||
func (vs *VolumeServer) FetchAndWriteNeedle(ctx context.Context, req *volume_server_pb.FetchAndWriteNeedleRequest) (resp *volume_server_pb.FetchAndWriteNeedleResponse, err error) { |
|||
resp = &volume_server_pb.FetchAndWriteNeedleResponse{} |
|||
v := vs.store.GetVolume(needle.VolumeId(req.VolumeId)) |
|||
if v == nil { |
|||
return nil, fmt.Errorf("not found volume id %d", req.VolumeId) |
|||
} |
|||
|
|||
remoteConf := &filer_pb.RemoteConf{ |
|||
Type: req.RemoteType, |
|||
Name: req.RemoteName, |
|||
S3AccessKey: req.S3AccessKey, |
|||
S3SecretKey: req.S3SecretKey, |
|||
S3Region: req.S3Region, |
|||
S3Endpoint: req.S3Endpoint, |
|||
} |
|||
|
|||
client, getClientErr := remote_storage.GetRemoteStorage(remoteConf) |
|||
if getClientErr != nil { |
|||
return nil, fmt.Errorf("get remote client: %v", getClientErr) |
|||
} |
|||
|
|||
remoteStorageLocation := &filer_pb.RemoteStorageLocation{ |
|||
Name: req.RemoteName, |
|||
Bucket: req.RemoteBucket, |
|||
Path: req.RemoteKey, |
|||
} |
|||
data, ReadRemoteErr := client.ReadFile(remoteStorageLocation, req.Offset, req.Size) |
|||
if ReadRemoteErr != nil { |
|||
return nil, fmt.Errorf("read from remote %+v: %v", remoteStorageLocation, ReadRemoteErr) |
|||
} |
|||
|
|||
if err = v.WriteNeedleBlob(types.NeedleId(req.NeedleId), data, types.Size(req.Size)); err != nil { |
|||
return nil, fmt.Errorf("write blob needle %d size %d: %v", req.NeedleId, req.Size, err) |
|||
} |
|||
|
|||
return resp, nil |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue