|
@ -3,13 +3,14 @@ package weed_server |
|
|
import ( |
|
|
import ( |
|
|
"context" |
|
|
"context" |
|
|
"fmt" |
|
|
"fmt" |
|
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/cluster/lock_manager" |
|
|
"github.com/seaweedfs/seaweedfs/weed/cluster/lock_manager" |
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" |
|
|
"google.golang.org/grpc/codes" |
|
|
"google.golang.org/grpc/codes" |
|
|
"google.golang.org/grpc/status" |
|
|
"google.golang.org/grpc/status" |
|
|
"time" |
|
|
|
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
// DistributedLock is a grpc handler to handle FilerServer's LockRequest
|
|
|
// DistributedLock is a grpc handler to handle FilerServer's LockRequest
|
|
@ -20,7 +21,7 @@ func (fs *FilerServer) DistributedLock(ctx context.Context, req *filer_pb.LockRe |
|
|
var movedTo pb.ServerAddress |
|
|
var movedTo pb.ServerAddress |
|
|
expiredAtNs := time.Now().Add(time.Duration(req.SecondsToLock) * time.Second).UnixNano() |
|
|
expiredAtNs := time.Now().Add(time.Duration(req.SecondsToLock) * time.Second).UnixNano() |
|
|
resp.LockOwner, resp.RenewToken, movedTo, err = fs.filer.Dlm.LockWithTimeout(req.Name, expiredAtNs, req.RenewToken, req.Owner) |
|
|
resp.LockOwner, resp.RenewToken, movedTo, err = fs.filer.Dlm.LockWithTimeout(req.Name, expiredAtNs, req.RenewToken, req.Owner) |
|
|
glog.V(3).Infof("lock %s %v %v %v, isMoved=%v %v", req.Name, req.SecondsToLock, req.RenewToken, req.Owner, req.IsMoved, movedTo) |
|
|
|
|
|
|
|
|
glog.V(4).Infof("lock %s %v %v %v, isMoved=%v %v", req.Name, req.SecondsToLock, req.RenewToken, req.Owner, req.IsMoved, movedTo) |
|
|
if movedTo != "" && movedTo != fs.option.Host && !req.IsMoved { |
|
|
if movedTo != "" && movedTo != fs.option.Host && !req.IsMoved { |
|
|
err = pb.WithFilerClient(false, 0, movedTo, fs.grpcDialOption, func(client filer_pb.SeaweedFilerClient) error { |
|
|
err = pb.WithFilerClient(false, 0, movedTo, fs.grpcDialOption, func(client filer_pb.SeaweedFilerClient) error { |
|
|
secondResp, err := client.DistributedLock(context.Background(), &filer_pb.LockRequest{ |
|
|
secondResp, err := client.DistributedLock(context.Background(), &filer_pb.LockRequest{ |
|
|