mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-09-24 17:23:40 +08:00
Added VolumeNeedleStatus volume server grpc method
This is needed for the diffing tool to get the cookie for a needle
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/chrislusf/seaweedfs/weed/stats"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/needle"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/super_block"
|
||||
"github.com/chrislusf/seaweedfs/weed/storage/types"
|
||||
)
|
||||
|
||||
func (vs *VolumeServer) DeleteCollection(ctx context.Context, req *volume_server_pb.DeleteCollectionRequest) (*volume_server_pb.DeleteCollectionResponse, error) {
|
||||
@@ -166,3 +167,44 @@ func (vs *VolumeServer) VolumeServerStatus(ctx context.Context, req *volume_serv
|
||||
return resp, nil
|
||||
|
||||
}
|
||||
|
||||
func (vs *VolumeServer) VolumeNeedleStatus(ctx context.Context, req *volume_server_pb.VolumeNeedleStatusRequest) (*volume_server_pb.VolumeNeedleStatusResponse, error) {
|
||||
|
||||
resp := &volume_server_pb.VolumeNeedleStatusResponse{}
|
||||
|
||||
volumeId := needle.VolumeId(req.VolumeId)
|
||||
|
||||
n := &needle.Needle{
|
||||
Id: types.NeedleId(req.NeedleId),
|
||||
}
|
||||
|
||||
var count int
|
||||
var err error
|
||||
hasVolume := vs.store.HasVolume(volumeId)
|
||||
if !hasVolume {
|
||||
_, hasEcVolume := vs.store.FindEcVolume(volumeId)
|
||||
if !hasEcVolume {
|
||||
return nil, fmt.Errorf("volume not found %d", req.VolumeId)
|
||||
}
|
||||
count, err = vs.store.ReadEcShardNeedle(volumeId, n)
|
||||
} else {
|
||||
count, err = vs.store.ReadVolumeNeedle(volumeId, n)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if count < 0 {
|
||||
return nil, fmt.Errorf("needle not found %d", n.Id)
|
||||
}
|
||||
|
||||
resp.NeedleId = uint64(n.Id)
|
||||
resp.Cookie = uint32(n.Cookie)
|
||||
resp.Size = n.Size
|
||||
resp.LastModified = n.LastModified
|
||||
resp.Crc = n.Checksum.Value()
|
||||
if n.HasTtl() {
|
||||
resp.Ttl = n.Ttl.String()
|
||||
}
|
||||
return resp, nil
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user