diff options
| author | Eric Yang <lanqingy@usc.edu> | 2022-09-06 23:51:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-06 23:51:27 -0700 |
| commit | b324a6536c07ff57340ff62b5d5318d05ff5666c (patch) | |
| tree | 076b2eeabdcd1c677b623327dc8791460abe215a /weed/server | |
| parent | c07ab9c060eafe26cc0b4246d507d5b33f32f317 (diff) | |
| download | seaweedfs-b324a6536c07ff57340ff62b5d5318d05ff5666c.tar.xz seaweedfs-b324a6536c07ff57340ff62b5d5318d05ff5666c.zip | |
ADHOC: add read needle meta grpc (#3581)
* ADHOC: add read needle meta grpc
* add test
* nit
Co-authored-by: root <root@HQ-10MSTD3EY.roblox.local>
Diffstat (limited to 'weed/server')
| -rw-r--r-- | weed/server/volume_grpc_read_write.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/weed/server/volume_grpc_read_write.go b/weed/server/volume_grpc_read_write.go index 9a4b6b072..75b2e38fa 100644 --- a/weed/server/volume_grpc_read_write.go +++ b/weed/server/volume_grpc_read_write.go @@ -23,6 +23,35 @@ func (vs *VolumeServer) ReadNeedleBlob(ctx context.Context, req *volume_server_p return resp, nil } +func (vs *VolumeServer) ReadNeedleMeta(ctx context.Context, req *volume_server_pb.ReadNeedleMetaRequest) (resp *volume_server_pb.ReadNeedleMetaResponse, err error) { + resp = &volume_server_pb.ReadNeedleMetaResponse{} + volumeId := needle.VolumeId(req.VolumeId) + + n := &needle.Needle{ + Id: types.NeedleId(req.NeedleId), + Flags: 0x08, + } + size := req.Size + offset := req.Offset + + hasVolume := vs.store.HasVolume(volumeId) + if !hasVolume { + return nil, fmt.Errorf("not found volume id %d and read needle metadata at ec shards is not supported", req.VolumeId) + } + err = vs.store.ReadVolumeNeedleMetaAt(volumeId, n, offset, size) + if err != nil { + return nil, err + } + + resp.Cookie = uint32(n.Cookie) + resp.LastModified = n.LastModified + resp.Crc = n.Checksum.Value() + if n.HasTtl() { + resp.Ttl = n.Ttl.String() + } + return resp, nil +} + func (vs *VolumeServer) WriteNeedleBlob(ctx context.Context, req *volume_server_pb.WriteNeedleBlobRequest) (resp *volume_server_pb.WriteNeedleBlobResponse, err error) { resp = &volume_server_pb.WriteNeedleBlobResponse{} v := vs.store.GetVolume(needle.VolumeId(req.VolumeId)) |
