diff options
| author | Chris Lu <chris.lu@gmail.com> | 2018-11-20 11:35:45 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2018-11-20 11:35:45 -0800 |
| commit | 5065d4ab2df795436b1782c46836b2253a99034b (patch) | |
| tree | 82a45f43f8da57056541537618d9e51c528232e9 /weed/operation/assign_file_id.go | |
| parent | b318167cd3411b49e142610e11f70cc073ee8382 (diff) | |
| download | seaweedfs-5065d4ab2df795436b1782c46836b2253a99034b.tar.xz seaweedfs-5065d4ab2df795436b1782c46836b2253a99034b.zip | |
master add grpc API for fileid assigning
Diffstat (limited to 'weed/operation/assign_file_id.go')
| -rw-r--r-- | weed/operation/assign_file_id.go | 74 |
1 files changed, 36 insertions, 38 deletions
diff --git a/weed/operation/assign_file_id.go b/weed/operation/assign_file_id.go index 169fd664d..d9f12e545 100644 --- a/weed/operation/assign_file_id.go +++ b/weed/operation/assign_file_id.go @@ -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) - } - 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) - } - 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)) + 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, + } + resp, grpcErr := masterClient.Assign(context.Background(), req) + if grpcErr != nil { + return grpcErr + } + + 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 } |
