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