aboutsummaryrefslogtreecommitdiff
path: root/weed/operation/assign_file_id.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2018-11-20 11:35:45 -0800
committerChris Lu <chris.lu@gmail.com>2018-11-20 11:35:45 -0800
commit5065d4ab2df795436b1782c46836b2253a99034b (patch)
tree82a45f43f8da57056541537618d9e51c528232e9 /weed/operation/assign_file_id.go
parentb318167cd3411b49e142610e11f70cc073ee8382 (diff)
downloadseaweedfs-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.go74
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
}