mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-23 14:30:46 +02:00
Forwarding a lock to its owner filer is routine in a multi-filer setup, so the forward and acquire messages move from V(0) to V(3). The acquire message is only logged when the forwarded response holds a renew token and no application error. Transport failures still log at V(0). Co-authored-by: zouyixiong <3390062+zouyixiong@users.noreply.github.com>
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package weed_server
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/cluster/lock_manager"
|
|
"github.com/seaweedfs/seaweedfs/weed/filer"
|
|
"github.com/seaweedfs/seaweedfs/weed/pb"
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
)
|
|
|
|
func TestFindLockOwnerExpiredLockReturnsNotFound(t *testing.T) {
|
|
fs := &FilerServer{
|
|
option: &FilerOption{Host: "filer1:8888"},
|
|
filer: &filer.Filer{
|
|
Dlm: lock_manager.NewDistributedLockManager("filer1:8888"),
|
|
},
|
|
}
|
|
fs.filer.Dlm.LockRing.SetSnapshot([]pb.ServerAddress{"filer1:8888"}, 0)
|
|
fs.filer.Dlm.InsertLock("expired-lock", time.Now().Add(-time.Second).UnixNano(), "token1", "owner1", 5, 2)
|
|
|
|
resp, err := fs.FindLockOwner(context.Background(), &filer_pb.FindLockOwnerRequest{
|
|
Name: "expired-lock",
|
|
})
|
|
require.Nil(t, resp)
|
|
require.Error(t, err)
|
|
|
|
st, ok := status.FromError(err)
|
|
require.True(t, ok)
|
|
require.Equal(t, codes.NotFound, st.Code())
|
|
}
|
|
|
|
func TestForwardedLockAcquired(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
resp *filer_pb.LockResponse
|
|
want bool
|
|
}{
|
|
{name: "nil response"},
|
|
{name: "empty token", resp: &filer_pb.LockResponse{}},
|
|
{name: "application error", resp: &filer_pb.LockResponse{RenewToken: "token", Error: "lock already owned"}},
|
|
{name: "acquired", resp: &filer_pb.LockResponse{RenewToken: "token"}, want: true},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
require.Equal(t, tt.want, forwardedLockAcquired(tt.resp))
|
|
})
|
|
}
|
|
}
|