mirror of
https://github.com/chrislusf/seaweedfs
synced 2024-07-06 09:07:08 +02:00
add primary request and backup request when requesting volumes for a data center
This commit is contained in:
parent
e2849a36e5
commit
6c4fee85e3
|
@ -2,7 +2,6 @@ package operation
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -29,26 +28,35 @@ type AssignResult struct {
|
||||||
Error string `json:"error,omitempty"`
|
Error string `json:"error,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func Assign(server string, r *VolumeAssignRequest) (*AssignResult, error) {
|
func Assign(server string, primaryRequest *VolumeAssignRequest, alternativeRequests ...*VolumeAssignRequest) (*AssignResult, error) {
|
||||||
|
var requests []*VolumeAssignRequest
|
||||||
|
requests = append(requests, primaryRequest)
|
||||||
|
requests = append(requests, alternativeRequests...)
|
||||||
|
|
||||||
|
var lastError error
|
||||||
|
for i, request := range requests {
|
||||||
|
if request == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
values := make(url.Values)
|
values := make(url.Values)
|
||||||
values.Add("count", strconv.FormatUint(r.Count, 10))
|
values.Add("count", strconv.FormatUint(request.Count, 10))
|
||||||
if r.Replication != "" {
|
if request.Replication != "" {
|
||||||
values.Add("replication", r.Replication)
|
values.Add("replication", request.Replication)
|
||||||
}
|
}
|
||||||
if r.Collection != "" {
|
if request.Collection != "" {
|
||||||
values.Add("collection", r.Collection)
|
values.Add("collection", request.Collection)
|
||||||
}
|
}
|
||||||
if r.Ttl != "" {
|
if request.Ttl != "" {
|
||||||
values.Add("ttl", r.Ttl)
|
values.Add("ttl", request.Ttl)
|
||||||
}
|
}
|
||||||
if r.DataCenter != "" {
|
if request.DataCenter != "" {
|
||||||
values.Add("dataCenter", r.DataCenter)
|
values.Add("dataCenter", request.DataCenter)
|
||||||
}
|
}
|
||||||
if r.Rack != "" {
|
if request.Rack != "" {
|
||||||
values.Add("rack", r.Rack)
|
values.Add("rack", request.Rack)
|
||||||
}
|
}
|
||||||
if r.DataNode != "" {
|
if request.DataNode != "" {
|
||||||
values.Add("dataNode", r.DataNode)
|
values.Add("dataNode", request.DataNode)
|
||||||
}
|
}
|
||||||
|
|
||||||
jsonBlob, err := util.Post("http://"+server+"/dir/assign", values)
|
jsonBlob, err := util.Post("http://"+server+"/dir/assign", values)
|
||||||
|
@ -62,7 +70,10 @@ func Assign(server string, r *VolumeAssignRequest) (*AssignResult, error) {
|
||||||
return nil, fmt.Errorf("/dir/assign result JSON unmarshal error:%v, json:%s", err, string(jsonBlob))
|
return nil, fmt.Errorf("/dir/assign result JSON unmarshal error:%v, json:%s", err, string(jsonBlob))
|
||||||
}
|
}
|
||||||
if ret.Count <= 0 {
|
if ret.Count <= 0 {
|
||||||
return nil, errors.New(ret.Error)
|
lastError = fmt.Errorf("assign failure %d: %v", i+1, ret.Error)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
return &ret, nil
|
return &ret, nil
|
||||||
}
|
}
|
||||||
|
return nil, lastError
|
||||||
|
}
|
||||||
|
|
|
@ -173,13 +173,25 @@ func (fs *FilerServer) AssignVolume(ctx context.Context, req *filer_pb.AssignVol
|
||||||
ttlStr = strconv.Itoa(int(req.TtlSec))
|
ttlStr = strconv.Itoa(int(req.TtlSec))
|
||||||
}
|
}
|
||||||
|
|
||||||
assignResult, err := operation.Assign(fs.filer.GetMaster(), &operation.VolumeAssignRequest{
|
var backupRequest *operation.VolumeAssignRequest
|
||||||
|
|
||||||
|
assignRequest := &operation.VolumeAssignRequest{
|
||||||
Count: uint64(req.Count),
|
Count: uint64(req.Count),
|
||||||
Replication: req.Replication,
|
Replication: req.Replication,
|
||||||
Collection: req.Collection,
|
Collection: req.Collection,
|
||||||
Ttl: ttlStr,
|
Ttl: ttlStr,
|
||||||
DataCenter: fs.option.DataCenter,
|
DataCenter: fs.option.DataCenter,
|
||||||
})
|
}
|
||||||
|
if fs.option.DataCenter != "" {
|
||||||
|
backupRequest = &operation.VolumeAssignRequest{
|
||||||
|
Count: uint64(req.Count),
|
||||||
|
Replication: req.Replication,
|
||||||
|
Collection: req.Collection,
|
||||||
|
Ttl: ttlStr,
|
||||||
|
DataCenter: "",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assignResult, err := operation.Assign(fs.filer.GetMaster(), assignRequest, backupRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("assign volume: %v", err)
|
return nil, fmt.Errorf("assign volume: %v", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue