diff --git a/blobstore/clustermgr/blobnode_test.go b/blobstore/clustermgr/blobnode_test.go index 6469d07f2..5a5217a93 100644 --- a/blobstore/clustermgr/blobnode_test.go +++ b/blobstore/clustermgr/blobnode_test.go @@ -128,30 +128,36 @@ func TestNodeUpdate(t *testing.T) { require.NoError(t, err) require.Equal(t, nodeID, proto.NodeID(1)) - info, err := testClusterClient.NodeInfo(ctx, 1) + oldInfo, err := testClusterClient.NodeInfo(ctx, 1) require.NoError(t, err) // update node + info := *oldInfo + info.NodeSetID = 0 + info.Status = 0 info.Host = "127.0.0.1:9110" info.Rack = "newRack" - nodeID, err = testClusterClient.AddNode(ctx, info) + nodeID, err = testClusterClient.AddNode(ctx, &info) require.NoError(t, err) require.Equal(t, nodeID, proto.NodeID(1)) info1, err := testClusterClient.NodeInfo(ctx, 1) require.NoError(t, err) - require.Equal(t, info, info1) + require.NotEqual(t, oldInfo, info1) + info1.Host = nodeInfo.Host + info1.Rack = nodeInfo.Rack + require.Equal(t, oldInfo, info1) // update not exist node info.NodeID = proto.NodeID(100) info.Host = "127.0.0.1:1111" - _, err = testClusterClient.AddNode(ctx, info) + _, err = testClusterClient.AddNode(ctx, &info) require.Error(t, err) // update node idc not allowed info.NodeID = proto.NodeID(1) info.Idc = testService.IDC[1] - _, err = testClusterClient.AddNode(ctx, info) + _, err = testClusterClient.AddNode(ctx, &info) require.Error(t, err) } diff --git a/blobstore/clustermgr/cluster/cluster.go b/blobstore/clustermgr/cluster/cluster.go index bf33f5c12..07ede0016 100644 --- a/blobstore/clustermgr/cluster/cluster.go +++ b/blobstore/clustermgr/cluster/cluster.go @@ -532,12 +532,14 @@ func (d *manager) AllowNodeIPChange(ctx context.Context, info *clustermgr.NodeIn dropping = oldNodeItem.dropping return nil }) - oldNodeInfo.Host = info.Host - oldNodeInfo.Rack = info.Rack - if oldNodeInfo != *info || oldNodeInfo.Status == proto.NodeStatusDropped || dropping { + if oldNodeInfo.Status == proto.NodeStatusDropped || dropping { return false } - return true + oldNodeInfo.Host = info.Host + oldNodeInfo.Rack = info.Rack + oldNodeInfo.NodeSetID = 0 + oldNodeInfo.Status = 0 + return oldNodeInfo == *info } func (d *manager) ValidateNodeInfo(ctx context.Context, info *clustermgr.NodeInfo) error {