master add grpc API for fileid assigning

This commit is contained in:
Chris Lu 2018-11-20 11:35:45 -08:00
parent b318167cd3
commit 5065d4ab2d
5 changed files with 352 additions and 122 deletions

View file

@ -1,13 +1,9 @@
package operation
import (
"encoding/json"
"fmt"
"net/url"
"strconv"
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/util"
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
"context"
)
type VolumeAssignRequest struct {
@ -29,52 +25,54 @@ type AssignResult struct {
}
func Assign(server string, primaryRequest *VolumeAssignRequest, alternativeRequests ...*VolumeAssignRequest) (*AssignResult, error) {
var requests []*VolumeAssignRequest
requests = append(requests, primaryRequest)
requests = append(requests, alternativeRequests...)
var lastError error
ret := &AssignResult{}
for i, request := range requests {
if request == nil {
continue
}
values := make(url.Values)
values.Add("count", strconv.FormatUint(request.Count, 10))
if request.Replication != "" {
values.Add("replication", request.Replication)
lastError = withMasterServerClient(server, func(masterClient master_pb.SeaweedClient) error {
req := &master_pb.AssignRequest{
Count: primaryRequest.Count,
Replication: primaryRequest.Replication,
Collection: primaryRequest.Collection,
Ttl: primaryRequest.Ttl,
DataCenter: primaryRequest.DataCenter,
Rack: primaryRequest.Rack,
DataNode: primaryRequest.DataNode,
}
if request.Collection != "" {
values.Add("collection", request.Collection)
}
if request.Ttl != "" {
values.Add("ttl", request.Ttl)
}
if request.DataCenter != "" {
values.Add("dataCenter", request.DataCenter)
}
if request.Rack != "" {
values.Add("rack", request.Rack)
}
if request.DataNode != "" {
values.Add("dataNode", request.DataNode)
resp, grpcErr := masterClient.Assign(context.Background(), req)
if grpcErr != nil {
return grpcErr
}
postUrl := fmt.Sprintf("http://%s/dir/assign", server)
jsonBlob, err := util.Post(postUrl, values)
glog.V(2).Infof("assign %d result from %s %+v : %s", i, postUrl, values, string(jsonBlob))
if err != nil {
return nil, err
}
var ret AssignResult
err = json.Unmarshal(jsonBlob, &ret)
if err != nil {
return nil, fmt.Errorf("/dir/assign result JSON unmarshal error:%v, json:%s", err, string(jsonBlob))
ret.Count = resp.Count
ret.Fid = resp.Fid
ret.Url = resp.Url
ret.PublicUrl = resp.PublicUrl
ret.Error = resp.Error
return nil
})
if lastError != nil {
continue
}
if ret.Count <= 0 {
lastError = fmt.Errorf("assign failure %d: %v", i+1, ret.Error)
continue
}
return &ret, nil
}
return nil, lastError
return ret, lastError
}

View file

@ -11,6 +11,8 @@ service Seaweed {
}
rpc LookupVolume (LookupVolumeRequest) returns (LookupVolumeResponse) {
}
rpc Assign (AssignRequest) returns (AssignResponse) {
}
}
//////////////////////////////////////////////////
@ -89,3 +91,20 @@ message Location {
string url = 1;
string public_url = 2;
}
message AssignRequest {
uint64 count = 1;
string replication = 2;
string collection = 3;
string ttl = 4;
string data_center = 5;
string rack = 6;
string data_node = 7;
}
message AssignResponse {
string fid = 1;
string url = 2;
string public_url = 3;
uint64 count = 4;
string error = 5;
}

View file

@ -19,6 +19,8 @@ It has these top-level messages:
LookupVolumeRequest
LookupVolumeResponse
Location
AssignRequest
AssignResponse
*/
package master_pb
@ -471,6 +473,118 @@ func (m *Location) GetPublicUrl() string {
return ""
}
type AssignRequest struct {
Count uint64 `protobuf:"varint,1,opt,name=count" json:"count,omitempty"`
Replication string `protobuf:"bytes,2,opt,name=replication" json:"replication,omitempty"`
Collection string `protobuf:"bytes,3,opt,name=collection" json:"collection,omitempty"`
Ttl string `protobuf:"bytes,4,opt,name=ttl" json:"ttl,omitempty"`
DataCenter string `protobuf:"bytes,5,opt,name=data_center,json=dataCenter" json:"data_center,omitempty"`
Rack string `protobuf:"bytes,6,opt,name=rack" json:"rack,omitempty"`
DataNode string `protobuf:"bytes,7,opt,name=data_node,json=dataNode" json:"data_node,omitempty"`
}
func (m *AssignRequest) Reset() { *m = AssignRequest{} }
func (m *AssignRequest) String() string { return proto.CompactTextString(m) }
func (*AssignRequest) ProtoMessage() {}
func (*AssignRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
func (m *AssignRequest) GetCount() uint64 {
if m != nil {
return m.Count
}
return 0
}
func (m *AssignRequest) GetReplication() string {
if m != nil {
return m.Replication
}
return ""
}
func (m *AssignRequest) GetCollection() string {
if m != nil {
return m.Collection
}
return ""
}
func (m *AssignRequest) GetTtl() string {
if m != nil {
return m.Ttl
}
return ""
}
func (m *AssignRequest) GetDataCenter() string {
if m != nil {
return m.DataCenter
}
return ""
}
func (m *AssignRequest) GetRack() string {
if m != nil {
return m.Rack
}
return ""
}
func (m *AssignRequest) GetDataNode() string {
if m != nil {
return m.DataNode
}
return ""
}
type AssignResponse struct {
Fid string `protobuf:"bytes,1,opt,name=fid" json:"fid,omitempty"`
Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"`
PublicUrl string `protobuf:"bytes,3,opt,name=public_url,json=publicUrl" json:"public_url,omitempty"`
Count uint64 `protobuf:"varint,4,opt,name=count" json:"count,omitempty"`
Error string `protobuf:"bytes,5,opt,name=error" json:"error,omitempty"`
}
func (m *AssignResponse) Reset() { *m = AssignResponse{} }
func (m *AssignResponse) String() string { return proto.CompactTextString(m) }
func (*AssignResponse) ProtoMessage() {}
func (*AssignResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
func (m *AssignResponse) GetFid() string {
if m != nil {
return m.Fid
}
return ""
}
func (m *AssignResponse) GetUrl() string {
if m != nil {
return m.Url
}
return ""
}
func (m *AssignResponse) GetPublicUrl() string {
if m != nil {
return m.PublicUrl
}
return ""
}
func (m *AssignResponse) GetCount() uint64 {
if m != nil {
return m.Count
}
return 0
}
func (m *AssignResponse) GetError() string {
if m != nil {
return m.Error
}
return ""
}
func init() {
proto.RegisterType((*Heartbeat)(nil), "master_pb.Heartbeat")
proto.RegisterType((*HeartbeatResponse)(nil), "master_pb.HeartbeatResponse")
@ -484,6 +598,8 @@ func init() {
proto.RegisterType((*LookupVolumeResponse)(nil), "master_pb.LookupVolumeResponse")
proto.RegisterType((*LookupVolumeResponse_VolumeIdLocation)(nil), "master_pb.LookupVolumeResponse.VolumeIdLocation")
proto.RegisterType((*Location)(nil), "master_pb.Location")
proto.RegisterType((*AssignRequest)(nil), "master_pb.AssignRequest")
proto.RegisterType((*AssignResponse)(nil), "master_pb.AssignResponse")
}
// Reference imports to suppress errors if they are not otherwise used.
@ -500,6 +616,7 @@ type SeaweedClient interface {
SendHeartbeat(ctx context.Context, opts ...grpc.CallOption) (Seaweed_SendHeartbeatClient, error)
KeepConnected(ctx context.Context, opts ...grpc.CallOption) (Seaweed_KeepConnectedClient, error)
LookupVolume(ctx context.Context, in *LookupVolumeRequest, opts ...grpc.CallOption) (*LookupVolumeResponse, error)
Assign(ctx context.Context, in *AssignRequest, opts ...grpc.CallOption) (*AssignResponse, error)
}
type seaweedClient struct {
@ -581,12 +698,22 @@ func (c *seaweedClient) LookupVolume(ctx context.Context, in *LookupVolumeReques
return out, nil
}
func (c *seaweedClient) Assign(ctx context.Context, in *AssignRequest, opts ...grpc.CallOption) (*AssignResponse, error) {
out := new(AssignResponse)
err := grpc.Invoke(ctx, "/master_pb.Seaweed/Assign", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for Seaweed service
type SeaweedServer interface {
SendHeartbeat(Seaweed_SendHeartbeatServer) error
KeepConnected(Seaweed_KeepConnectedServer) error
LookupVolume(context.Context, *LookupVolumeRequest) (*LookupVolumeResponse, error)
Assign(context.Context, *AssignRequest) (*AssignResponse, error)
}
func RegisterSeaweedServer(s *grpc.Server, srv SeaweedServer) {
@ -663,6 +790,24 @@ func _Seaweed_LookupVolume_Handler(srv interface{}, ctx context.Context, dec fun
return interceptor(ctx, in, info, handler)
}
func _Seaweed_Assign_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(AssignRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(SeaweedServer).Assign(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/master_pb.Seaweed/Assign",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(SeaweedServer).Assign(ctx, req.(*AssignRequest))
}
return interceptor(ctx, in, info, handler)
}
var _Seaweed_serviceDesc = grpc.ServiceDesc{
ServiceName: "master_pb.Seaweed",
HandlerType: (*SeaweedServer)(nil),
@ -671,6 +816,10 @@ var _Seaweed_serviceDesc = grpc.ServiceDesc{
MethodName: "LookupVolume",
Handler: _Seaweed_LookupVolume_Handler,
},
{
MethodName: "Assign",
Handler: _Seaweed_Assign_Handler,
},
},
Streams: []grpc.StreamDesc{
{
@ -692,59 +841,66 @@ var _Seaweed_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("master.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 855 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x55, 0xcf, 0x6f, 0xdc, 0x44,
0x14, 0xae, 0xbd, 0x9b, 0xec, 0xfa, 0x6d, 0x36, 0xdd, 0x4c, 0x22, 0xe4, 0x2e, 0xa5, 0x5d, 0xcc,
0xc5, 0x08, 0x14, 0x95, 0x70, 0x44, 0x5c, 0xba, 0x0a, 0x22, 0x4a, 0x50, 0x83, 0x03, 0x3d, 0x70,
0x31, 0xb3, 0xf6, 0x6b, 0x35, 0xca, 0x78, 0x6c, 0x66, 0x66, 0x93, 0x75, 0x2f, 0xfc, 0x67, 0x9c,
0xf8, 0x6f, 0xb8, 0x71, 0xe3, 0x86, 0x66, 0x3c, 0xde, 0x1f, 0x6e, 0x00, 0x89, 0xdb, 0x9b, 0x6f,
0xde, 0x8f, 0x6f, 0xde, 0xf7, 0x9e, 0x0d, 0x07, 0x05, 0x55, 0x1a, 0xe5, 0x69, 0x25, 0x4b, 0x5d,
0x92, 0xa0, 0x39, 0xa5, 0xd5, 0x22, 0xfa, 0xc3, 0x87, 0xe0, 0x5b, 0xa4, 0x52, 0x2f, 0x90, 0x6a,
0x72, 0x08, 0x3e, 0xab, 0x42, 0x6f, 0xe6, 0xc5, 0x41, 0xe2, 0xb3, 0x8a, 0x10, 0xe8, 0x57, 0xa5,
0xd4, 0xa1, 0x3f, 0xf3, 0xe2, 0x71, 0x62, 0x6d, 0xf2, 0x11, 0x40, 0xb5, 0x5c, 0x70, 0x96, 0xa5,
0x4b, 0xc9, 0xc3, 0x9e, 0xf5, 0x0d, 0x1a, 0xe4, 0x47, 0xc9, 0x49, 0x0c, 0x93, 0x82, 0xae, 0xd2,
0xbb, 0x92, 0x2f, 0x0b, 0x4c, 0xb3, 0x72, 0x29, 0x74, 0xd8, 0xb7, 0xe1, 0x87, 0x05, 0x5d, 0xbd,
0xb6, 0xf0, 0xdc, 0xa0, 0x64, 0x66, 0x58, 0xad, 0xd2, 0x37, 0x8c, 0x63, 0x7a, 0x8b, 0x75, 0xb8,
0x37, 0xf3, 0xe2, 0x7e, 0x02, 0x05, 0x5d, 0x7d, 0xc3, 0x38, 0x5e, 0x62, 0x4d, 0x9e, 0xc3, 0x28,
0xa7, 0x9a, 0xa6, 0x19, 0x0a, 0x8d, 0x32, 0xdc, 0xb7, 0xb5, 0xc0, 0x40, 0x73, 0x8b, 0x18, 0x7e,
0x92, 0x66, 0xb7, 0xe1, 0xc0, 0xde, 0x58, 0xdb, 0xf0, 0xa3, 0x79, 0xc1, 0x44, 0x6a, 0x99, 0x0f,
0x6d, 0xe9, 0xc0, 0x22, 0xd7, 0x86, 0xfe, 0xd7, 0x30, 0x68, 0xb8, 0xa9, 0x30, 0x98, 0xf5, 0xe2,
0xd1, 0xd9, 0x27, 0xa7, 0xeb, 0x6e, 0x9c, 0x36, 0xf4, 0x2e, 0xc4, 0x9b, 0x52, 0x16, 0x54, 0xb3,
0x52, 0x7c, 0x87, 0x4a, 0xd1, 0xb7, 0x98, 0xb4, 0x31, 0xe4, 0x09, 0x0c, 0x05, 0xde, 0xa7, 0x77,
0x2c, 0x57, 0x21, 0xcc, 0x7a, 0xf1, 0x38, 0x19, 0x08, 0xbc, 0x7f, 0xcd, 0x72, 0x45, 0x3e, 0x86,
0x83, 0x1c, 0x39, 0x6a, 0xcc, 0x9b, 0xeb, 0x91, 0xbd, 0x1e, 0x39, 0xcc, 0xb8, 0x44, 0x0a, 0x8e,
0xd6, 0xcd, 0x4e, 0x50, 0x55, 0xa5, 0x50, 0x48, 0x62, 0x78, 0xdc, 0x64, 0xbf, 0x61, 0xef, 0xf0,
0x8a, 0x15, 0x4c, 0x5b, 0x05, 0xfa, 0x49, 0x17, 0x26, 0x4f, 0x21, 0x50, 0x98, 0x49, 0xd4, 0x97,
0x58, 0x5b, 0x4d, 0x82, 0x64, 0x03, 0x90, 0x0f, 0x60, 0x9f, 0x23, 0xcd, 0x51, 0x3a, 0x51, 0xdc,
0x29, 0xfa, 0xdd, 0x87, 0xf0, 0x9f, 0x1e, 0x66, 0x15, 0xcf, 0x6d, 0xbd, 0x71, 0xe2, 0xb3, 0xdc,
0x74, 0x54, 0xb1, 0x77, 0x68, 0xb3, 0xf7, 0x13, 0x6b, 0x93, 0x67, 0x00, 0x59, 0xc9, 0x39, 0x66,
0x26, 0xd0, 0x25, 0xdf, 0x42, 0x4c, 0xc7, 0xad, 0x88, 0x1b, 0xb1, 0xfb, 0x49, 0x60, 0x90, 0x46,
0xe7, 0x75, 0x5f, 0x9c, 0x43, 0xa3, 0xb3, 0xeb, 0x4b, 0xe3, 0xf2, 0x39, 0x90, 0xb6, 0x75, 0x8b,
0x7a, 0xed, 0xb8, 0x6f, 0x1d, 0x27, 0xee, 0xe6, 0x65, 0xdd, 0x7a, 0x7f, 0x08, 0x81, 0x44, 0x9a,
0xa7, 0xa5, 0xe0, 0xb5, 0x95, 0x7e, 0x98, 0x0c, 0x0d, 0xf0, 0x4a, 0xf0, 0x9a, 0x7c, 0x06, 0x47,
0x12, 0x2b, 0xce, 0x32, 0x9a, 0x56, 0x9c, 0x66, 0x58, 0xa0, 0x68, 0xa7, 0x60, 0xe2, 0x2e, 0xae,
0x5b, 0x9c, 0x84, 0x30, 0xb8, 0x43, 0xa9, 0xcc, 0xb3, 0x02, 0xeb, 0xd2, 0x1e, 0xc9, 0x04, 0x7a,
0x5a, 0xf3, 0x10, 0x2c, 0x6a, 0xcc, 0x68, 0x00, 0x7b, 0xe7, 0x45, 0xa5, 0xeb, 0xe8, 0x37, 0x0f,
0x1e, 0xdf, 0x2c, 0x2b, 0x94, 0x2f, 0x79, 0x99, 0xdd, 0x9e, 0xaf, 0xb4, 0xa4, 0xe4, 0x15, 0x1c,
0xa2, 0xa4, 0x6a, 0x29, 0x0d, 0xf7, 0x9c, 0x89, 0xb7, 0xb6, 0xa5, 0xa3, 0xb3, 0x78, 0x6b, 0xb8,
0x3a, 0x31, 0xa7, 0xe7, 0x4d, 0xc0, 0xdc, 0xfa, 0x27, 0x63, 0xdc, 0x3e, 0x4e, 0x7f, 0x82, 0xf1,
0xce, 0xbd, 0x11, 0xc6, 0x0c, 0xbe, 0x93, 0xca, 0xda, 0x46, 0xf1, 0x8a, 0x4a, 0xa6, 0x6b, 0xb7,
0xa0, 0xee, 0x64, 0x04, 0x71, 0xfb, 0x67, 0xe6, 0xb0, 0x67, 0xe7, 0x30, 0x68, 0x90, 0x8b, 0x5c,
0x45, 0x9f, 0xc2, 0xf1, 0x9c, 0x33, 0x14, 0xfa, 0x8a, 0x29, 0x8d, 0x22, 0xc1, 0x5f, 0x96, 0xa8,
0xb4, 0xa9, 0x20, 0x68, 0x81, 0x6e, 0xfd, 0xad, 0x1d, 0xfd, 0x0a, 0x87, 0xcd, 0xe8, 0x5c, 0x95,
0x99, 0x9d, 0x1b, 0xd3, 0x18, 0xb3, 0xf7, 0x8d, 0x93, 0x31, 0x3b, 0x1f, 0x04, 0xbf, 0xfb, 0x41,
0xd8, 0xde, 0x98, 0xde, 0xbf, 0x6f, 0x4c, 0xff, 0xfd, 0x8d, 0xf9, 0x01, 0x8e, 0xaf, 0xca, 0xf2,
0x76, 0x59, 0x35, 0x34, 0x5a, 0xae, 0xbb, 0x2f, 0xf4, 0x66, 0x3d, 0x53, 0x73, 0xfd, 0xc2, 0xce,
0xc4, 0xfa, 0xdd, 0x89, 0x8d, 0xfe, 0xf4, 0xe0, 0x64, 0x37, 0xad, 0xdb, 0xc5, 0x9f, 0xe1, 0x78,
0x9d, 0x37, 0xe5, 0xee, 0xcd, 0x4d, 0x81, 0xd1, 0xd9, 0x8b, 0x2d, 0x31, 0x1f, 0x8a, 0x6e, 0x3f,
0x1f, 0x79, 0xdb, 0xac, 0xe4, 0xe8, 0xae, 0x83, 0xa8, 0xe9, 0x0a, 0x26, 0x5d, 0x37, 0x33, 0xd0,
0xeb, 0xaa, 0xae, 0xb3, 0xc3, 0x36, 0x92, 0x7c, 0x01, 0xc1, 0x86, 0x88, 0x6f, 0x89, 0x1c, 0xef,
0x10, 0x71, 0xb5, 0x36, 0x5e, 0xe4, 0x04, 0xf6, 0x50, 0xca, 0xb2, 0xfd, 0x10, 0x34, 0x87, 0xe8,
0x2b, 0x18, 0xfe, 0x6f, 0x15, 0xcf, 0xfe, 0xf2, 0x60, 0x70, 0x83, 0xf4, 0x1e, 0x31, 0x27, 0x17,
0x30, 0xbe, 0x41, 0x91, 0x6f, 0x7e, 0x1b, 0x27, 0x5b, 0x7c, 0xd6, 0xe8, 0xf4, 0xe9, 0x43, 0x68,
0xdb, 0xab, 0xe8, 0x51, 0xec, 0xbd, 0xf0, 0xc8, 0x35, 0x8c, 0x2f, 0x11, 0xab, 0x79, 0x29, 0x04,
0x66, 0x1a, 0x73, 0xf2, 0x6c, 0x2b, 0xe8, 0x81, 0x21, 0x9d, 0x3e, 0x79, 0xef, 0x6b, 0xdd, 0xbe,
0xc9, 0x65, 0xfc, 0x1e, 0x0e, 0xb6, 0xb5, 0xd9, 0x49, 0xf8, 0xc0, 0x24, 0x4d, 0x9f, 0xff, 0x87,
0xa8, 0xd1, 0xa3, 0xc5, 0xbe, 0xfd, 0x6b, 0x7e, 0xf9, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa1,
0x9f, 0x87, 0x2e, 0x45, 0x07, 0x00, 0x00,
// 971 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x6e, 0x23, 0x45,
0x17, 0x4d, 0xb7, 0x7f, 0xfb, 0x3a, 0xce, 0x38, 0x95, 0xe8, 0x53, 0x8f, 0x67, 0xbe, 0x19, 0xd3,
0x6c, 0x8c, 0x40, 0xd1, 0x10, 0x96, 0x08, 0x21, 0xc6, 0x0a, 0x22, 0x4a, 0x60, 0x42, 0x07, 0x66,
0xc1, 0xa6, 0x29, 0x77, 0xdf, 0x44, 0xa5, 0xf4, 0x1f, 0x55, 0xe5, 0xc4, 0x9e, 0x0d, 0xef, 0xc5,
0x82, 0x15, 0x3b, 0x1e, 0x85, 0x1d, 0x4f, 0x80, 0xea, 0xa7, 0xdb, 0x6d, 0x27, 0x61, 0x24, 0x76,
0x55, 0xa7, 0xef, 0xad, 0x3a, 0x75, 0xce, 0xbd, 0x55, 0x0d, 0xbb, 0x19, 0x15, 0x12, 0xf9, 0x51,
0xc9, 0x0b, 0x59, 0x10, 0xcf, 0xcc, 0xa2, 0x72, 0x1e, 0xfc, 0xe5, 0x82, 0xf7, 0x0d, 0x52, 0x2e,
0xe7, 0x48, 0x25, 0xd9, 0x03, 0x97, 0x95, 0xbe, 0x33, 0x71, 0xa6, 0x5e, 0xe8, 0xb2, 0x92, 0x10,
0x68, 0x97, 0x05, 0x97, 0xbe, 0x3b, 0x71, 0xa6, 0xc3, 0x50, 0x8f, 0xc9, 0xff, 0x01, 0xca, 0xc5,
0x3c, 0x65, 0x71, 0xb4, 0xe0, 0xa9, 0xdf, 0xd2, 0xb1, 0x9e, 0x41, 0x7e, 0xe4, 0x29, 0x99, 0xc2,
0x28, 0xa3, 0xcb, 0xe8, 0xb6, 0x48, 0x17, 0x19, 0x46, 0x71, 0xb1, 0xc8, 0xa5, 0xdf, 0xd6, 0xe9,
0x7b, 0x19, 0x5d, 0xbe, 0xd5, 0xf0, 0x4c, 0xa1, 0x64, 0xa2, 0x58, 0x2d, 0xa3, 0x2b, 0x96, 0x62,
0x74, 0x83, 0x2b, 0xbf, 0x33, 0x71, 0xa6, 0xed, 0x10, 0x32, 0xba, 0xfc, 0x9a, 0xa5, 0x78, 0x86,
0x2b, 0xf2, 0x12, 0x06, 0x09, 0x95, 0x34, 0x8a, 0x31, 0x97, 0xc8, 0xfd, 0xae, 0xde, 0x0b, 0x14,
0x34, 0xd3, 0x88, 0xe2, 0xc7, 0x69, 0x7c, 0xe3, 0xf7, 0xf4, 0x17, 0x3d, 0x56, 0xfc, 0x68, 0x92,
0xb1, 0x3c, 0xd2, 0xcc, 0xfb, 0x7a, 0x6b, 0x4f, 0x23, 0x17, 0x8a, 0xfe, 0x17, 0xd0, 0x33, 0xdc,
0x84, 0xef, 0x4d, 0x5a, 0xd3, 0xc1, 0xf1, 0x87, 0x47, 0xb5, 0x1a, 0x47, 0x86, 0xde, 0x69, 0x7e,
0x55, 0xf0, 0x8c, 0x4a, 0x56, 0xe4, 0xdf, 0xa2, 0x10, 0xf4, 0x1a, 0xc3, 0x2a, 0x87, 0x3c, 0x85,
0x7e, 0x8e, 0x77, 0xd1, 0x2d, 0x4b, 0x84, 0x0f, 0x93, 0xd6, 0x74, 0x18, 0xf6, 0x72, 0xbc, 0x7b,
0xcb, 0x12, 0x41, 0x3e, 0x80, 0xdd, 0x04, 0x53, 0x94, 0x98, 0x98, 0xcf, 0x03, 0xfd, 0x79, 0x60,
0x31, 0x15, 0x12, 0x08, 0xd8, 0xaf, 0xc5, 0x0e, 0x51, 0x94, 0x45, 0x2e, 0x90, 0x4c, 0xe1, 0x89,
0x59, 0xfd, 0x92, 0xbd, 0xc3, 0x73, 0x96, 0x31, 0xa9, 0x1d, 0x68, 0x87, 0xdb, 0x30, 0x79, 0x0e,
0x9e, 0xc0, 0x98, 0xa3, 0x3c, 0xc3, 0x95, 0xf6, 0xc4, 0x0b, 0xd7, 0x00, 0xf9, 0x1f, 0x74, 0x53,
0xa4, 0x09, 0x72, 0x6b, 0x8a, 0x9d, 0x05, 0x7f, 0xb8, 0xe0, 0x3f, 0x76, 0x30, 0xed, 0x78, 0xa2,
0xf7, 0x1b, 0x86, 0x2e, 0x4b, 0x94, 0xa2, 0x82, 0xbd, 0x43, 0xbd, 0x7a, 0x3b, 0xd4, 0x63, 0xf2,
0x02, 0x20, 0x2e, 0xd2, 0x14, 0x63, 0x95, 0x68, 0x17, 0x6f, 0x20, 0x4a, 0x71, 0x6d, 0xe2, 0xda,
0xec, 0x76, 0xe8, 0x29, 0xc4, 0xf8, 0x5c, 0xeb, 0x62, 0x03, 0x8c, 0xcf, 0x56, 0x17, 0x13, 0xf2,
0x09, 0x90, 0x4a, 0xba, 0xf9, 0xaa, 0x0e, 0xec, 0xea, 0xc0, 0x91, 0xfd, 0xf2, 0x7a, 0x55, 0x45,
0x3f, 0x03, 0x8f, 0x23, 0x4d, 0xa2, 0x22, 0x4f, 0x57, 0xda, 0xfa, 0x7e, 0xd8, 0x57, 0xc0, 0x9b,
0x3c, 0x5d, 0x91, 0x8f, 0x61, 0x9f, 0x63, 0x99, 0xb2, 0x98, 0x46, 0x65, 0x4a, 0x63, 0xcc, 0x30,
0xaf, 0xaa, 0x60, 0x64, 0x3f, 0x5c, 0x54, 0x38, 0xf1, 0xa1, 0x77, 0x8b, 0x5c, 0xa8, 0x63, 0x79,
0x3a, 0xa4, 0x9a, 0x92, 0x11, 0xb4, 0xa4, 0x4c, 0x7d, 0xd0, 0xa8, 0x1a, 0x06, 0x3d, 0xe8, 0x9c,
0x64, 0xa5, 0x5c, 0x05, 0xbf, 0x3b, 0xf0, 0xe4, 0x72, 0x51, 0x22, 0x7f, 0x9d, 0x16, 0xf1, 0xcd,
0xc9, 0x52, 0x72, 0x4a, 0xde, 0xc0, 0x1e, 0x72, 0x2a, 0x16, 0x5c, 0x71, 0x4f, 0x58, 0x7e, 0xad,
0x25, 0x1d, 0x1c, 0x4f, 0x1b, 0xc5, 0xb5, 0x95, 0x73, 0x74, 0x62, 0x12, 0x66, 0x3a, 0x3e, 0x1c,
0x62, 0x73, 0x3a, 0xfe, 0x09, 0x86, 0x1b, 0xdf, 0x95, 0x31, 0xaa, 0xf0, 0xad, 0x55, 0x7a, 0xac,
0x1c, 0x2f, 0x29, 0x67, 0x72, 0x65, 0x1b, 0xd4, 0xce, 0x94, 0x21, 0xb6, 0xff, 0x54, 0x1d, 0xb6,
0x74, 0x1d, 0x7a, 0x06, 0x39, 0x4d, 0x44, 0xf0, 0x11, 0x1c, 0xcc, 0x52, 0x86, 0xb9, 0x3c, 0x67,
0x42, 0x62, 0x1e, 0xe2, 0x2f, 0x0b, 0x14, 0x52, 0xed, 0x90, 0xd3, 0x0c, 0x6d, 0xfb, 0xeb, 0x71,
0xf0, 0x2b, 0xec, 0x99, 0xd2, 0x39, 0x2f, 0x62, 0x5d, 0x37, 0x4a, 0x18, 0xd5, 0xf7, 0x26, 0x48,
0x0d, 0xb7, 0x2e, 0x04, 0x77, 0xfb, 0x42, 0x68, 0x76, 0x4c, 0xeb, 0xdf, 0x3b, 0xa6, 0x7d, 0xbf,
0x63, 0x7e, 0x80, 0x83, 0xf3, 0xa2, 0xb8, 0x59, 0x94, 0x86, 0x46, 0xc5, 0x75, 0xf3, 0x84, 0xce,
0xa4, 0xa5, 0xf6, 0xac, 0x4f, 0xb8, 0x55, 0xb1, 0xee, 0x76, 0xc5, 0x06, 0x7f, 0x3b, 0x70, 0xb8,
0xb9, 0xac, 0xed, 0xc5, 0x9f, 0xe1, 0xa0, 0x5e, 0x37, 0x4a, 0xed, 0x99, 0xcd, 0x06, 0x83, 0xe3,
0x57, 0x0d, 0x33, 0x1f, 0xca, 0xae, 0xae, 0x8f, 0xa4, 0x12, 0x2b, 0xdc, 0xbf, 0xdd, 0x42, 0xc4,
0x78, 0x09, 0xa3, 0xed, 0x30, 0x55, 0xd0, 0xf5, 0xae, 0x56, 0xd9, 0x7e, 0x95, 0x49, 0x3e, 0x05,
0x6f, 0x4d, 0xc4, 0xd5, 0x44, 0x0e, 0x36, 0x88, 0xd8, 0xbd, 0xd6, 0x51, 0xe4, 0x10, 0x3a, 0xc8,
0x79, 0x51, 0x5d, 0x04, 0x66, 0x12, 0x7c, 0x0e, 0xfd, 0xff, 0xec, 0x62, 0xf0, 0xa7, 0x03, 0xc3,
0xaf, 0x84, 0x60, 0xd7, 0x75, 0xb9, 0x1c, 0x42, 0xc7, 0xb4, 0xa9, 0xb9, 0xac, 0xcc, 0x84, 0x4c,
0x60, 0x60, 0xbb, 0xac, 0x21, 0x7d, 0x13, 0x7a, 0xef, 0x6d, 0x62, 0x3b, 0xaf, 0x6d, 0xa8, 0x49,
0x99, 0x6e, 0x3f, 0x03, 0x9d, 0x47, 0x9f, 0x81, 0x6e, 0xe3, 0x19, 0x78, 0x06, 0x9e, 0x4e, 0xca,
0x8b, 0x04, 0xed, 0xfb, 0xd0, 0x57, 0xc0, 0x77, 0x45, 0xa2, 0xcb, 0xba, 0x3a, 0x8c, 0x35, 0x7e,
0x04, 0xad, 0xab, 0x5a, 0x7c, 0x35, 0xac, 0x24, 0x72, 0x1f, 0x93, 0xe8, 0xde, 0xcb, 0x57, 0x0b,
0xd2, 0x6e, 0x0a, 0x52, 0x7b, 0xd1, 0x69, 0x78, 0x71, 0xfc, 0x9b, 0x0b, 0xbd, 0x4b, 0xa4, 0x77,
0x88, 0x09, 0x39, 0x85, 0xe1, 0x25, 0xe6, 0xc9, 0xfa, 0x15, 0x3e, 0x6c, 0xd8, 0x5b, 0xa3, 0xe3,
0xe7, 0x0f, 0xa1, 0x15, 0xff, 0x60, 0x67, 0xea, 0xbc, 0x72, 0xc8, 0x05, 0x0c, 0xcf, 0x10, 0xcb,
0x59, 0x91, 0xe7, 0x18, 0x4b, 0x4c, 0xc8, 0x8b, 0x46, 0xd2, 0x03, 0x3d, 0x3f, 0x7e, 0x7a, 0xef,
0xf1, 0xab, 0x4a, 0xc4, 0xae, 0xf8, 0x3d, 0xec, 0x36, 0x4b, 0x7d, 0x63, 0xc1, 0x07, 0x1a, 0x73,
0xfc, 0xf2, 0x3d, 0x3d, 0x12, 0xec, 0x90, 0x2f, 0xa1, 0x6b, 0xc4, 0x27, 0x7e, 0x23, 0x78, 0xa3,
0xb8, 0x36, 0x78, 0x6d, 0x3a, 0x15, 0xec, 0xcc, 0xbb, 0xfa, 0x2f, 0xe6, 0xb3, 0x7f, 0x02, 0x00,
0x00, 0xff, 0xff, 0xbc, 0xef, 0x85, 0x4d, 0xd5, 0x08, 0x00, 0x00,
}

View file

@ -1,29 +0,0 @@
package weed_server
import (
"context"
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
)
func (ms *MasterServer) LookupVolume(ctx context.Context, req *master_pb.LookupVolumeRequest) (*master_pb.LookupVolumeResponse, error) {
resp := &master_pb.LookupVolumeResponse{}
volumeLocations := ms.lookupVolumeId(req.VolumeIds, req.Collection)
for _, result := range volumeLocations {
var locations []*master_pb.Location
for _, loc := range result.Locations {
locations = append(locations, &master_pb.Location{
Url: loc.Url,
PublicUrl: loc.PublicUrl,
})
}
resp.VolumeIdLocations = append(resp.VolumeIdLocations, &master_pb.LookupVolumeResponse_VolumeIdLocation{
VolumeId: result.VolumeId,
Locations: locations,
Error: result.Error,
})
}
return resp, nil
}

View file

@ -0,0 +1,86 @@
package weed_server
import (
"context"
"fmt"
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
"github.com/chrislusf/seaweedfs/weed/topology"
"github.com/chrislusf/seaweedfs/weed/storage"
)
func (ms *MasterServer) LookupVolume(ctx context.Context, req *master_pb.LookupVolumeRequest) (*master_pb.LookupVolumeResponse, error) {
resp := &master_pb.LookupVolumeResponse{}
volumeLocations := ms.lookupVolumeId(req.VolumeIds, req.Collection)
for _, result := range volumeLocations {
var locations []*master_pb.Location
for _, loc := range result.Locations {
locations = append(locations, &master_pb.Location{
Url: loc.Url,
PublicUrl: loc.PublicUrl,
})
}
resp.VolumeIdLocations = append(resp.VolumeIdLocations, &master_pb.LookupVolumeResponse_VolumeIdLocation{
VolumeId: result.VolumeId,
Locations: locations,
Error: result.Error,
})
}
return resp, nil
}
func (ms *MasterServer) Assign(ctx context.Context, req *master_pb.AssignRequest) (*master_pb.AssignResponse, error) {
if req.Count == 0 {
req.Count = 1
}
if req.Replication == "" {
req.Replication = ms.defaultReplicaPlacement
}
replicaPlacement, err := storage.NewReplicaPlacementFromString(req.Replication)
if err != nil {
return nil, err
}
ttl, err := storage.ReadTTL(req.Ttl)
if err != nil {
return nil, err
}
option := &topology.VolumeGrowOption{
Collection: req.Collection,
ReplicaPlacement: replicaPlacement,
Ttl: ttl,
Prealloacte: ms.preallocate,
DataCenter: req.DataCenter,
Rack: req.Rack,
DataNode: req.DataNode,
}
if !ms.Topo.HasWritableVolume(option) {
if ms.Topo.FreeSpace() <= 0 {
return nil, fmt.Errorf("No free volumes left!")
}
ms.vgLock.Lock()
if !ms.Topo.HasWritableVolume(option) {
if _, err = ms.vg.AutomaticGrowByType(option, ms.Topo); err != nil {
ms.vgLock.Unlock()
return nil, fmt.Errorf("Cannot grow volume group! %v", err)
}
}
ms.vgLock.Unlock()
}
fid, count, dn, err := ms.Topo.PickForWrite(req.Count, option)
if err != nil {
return nil, fmt.Errorf("%v", err)
}
return &master_pb.AssignResponse{
Fid: fid,
Url: dn.Url(),
PublicUrl: dn.PublicUrl,
Count: count,
}, nil
}