diff --git a/multicluster/controllers/multicluster/leader_clusterset_controller.go b/multicluster/controllers/multicluster/leader_clusterset_controller.go index 5686da769c9..1555737da55 100644 --- a/multicluster/controllers/multicluster/leader_clusterset_controller.go +++ b/multicluster/controllers/multicluster/leader_clusterset_controller.go @@ -70,7 +70,9 @@ func (r *LeaderClusterSetReconciler) Reconcile(ctx context.Context, req ctrl.Req return ctrl.Result{}, err } klog.InfoS("Received ClusterSet delete", "clusterset", klog.KObj(clusterSet)) - r.StatusManager.CleanupMembers() + for _, removedMember := range r.clusterSetConfig.Spec.Members { + r.StatusManager.RemoveMember(common.ClusterID(removedMember.ClusterID)) + } r.clusterSetConfig = nil r.clusterID = common.InvalidClusterID r.clusterSetID = common.InvalidClusterSetID diff --git a/multicluster/controllers/multicluster/leader_clusterset_controller_test.go b/multicluster/controllers/multicluster/leader_clusterset_controller_test.go index c8f1d0da92c..735cdac93d3 100644 --- a/multicluster/controllers/multicluster/leader_clusterset_controller_test.go +++ b/multicluster/controllers/multicluster/leader_clusterset_controller_test.go @@ -164,7 +164,8 @@ func TestLeaderClusterSetDelete(t *testing.T) { err = fakeRemoteClient.Delete(context.TODO(), clusterSet) assert.Equal(t, nil, err) - mockStatusManager.EXPECT().CleanupMembers() + mockStatusManager.EXPECT().RemoveMember(common.ClusterID("east")) + mockStatusManager.EXPECT().RemoveMember(common.ClusterID("west")) req := ctrl.Request{ NamespacedName: types.NamespacedName{ diff --git a/multicluster/controllers/multicluster/memberclusterannounce_controller.go b/multicluster/controllers/multicluster/memberclusterannounce_controller.go index 9b193443b04..d506c5eef9c 100644 --- a/multicluster/controllers/multicluster/memberclusterannounce_controller.go +++ b/multicluster/controllers/multicluster/memberclusterannounce_controller.go @@ -74,7 +74,6 @@ type MemberClusterAnnounceReconciler struct { type MemberClusterStatusManager interface { AddMember(memberID common.ClusterID) RemoveMember(memberID common.ClusterID) - CleanupMembers() GetMemberClusterStatuses() []multiclusterv1alpha1.ClusterStatus } @@ -261,31 +260,16 @@ func (r *MemberClusterAnnounceReconciler) AddMember(memberID common.ClusterID) { Conditions: conditions} r.timerData[memberID] = &timerData{connected: false, lastUpdateTime: time.Time{}} - klog.InfoS("new member is added", "member", memberID) + klog.InfoS("Added member", "member", memberID) } func (r *MemberClusterAnnounceReconciler) RemoveMember(memberID common.ClusterID) { r.mapLock.Lock() defer r.mapLock.Unlock() - if _, ok := r.memberStatus[memberID]; ok { - delete(r.memberStatus, memberID) - return - } - - if _, ok := r.timerData[memberID]; ok { - klog.InfoS("remove members", "member", memberID) - delete(r.timerData, memberID) - return - } -} - -func (r *MemberClusterAnnounceReconciler) CleanupMembers() { - r.mapLock.Lock() - defer r.mapLock.Unlock() - - r.memberStatus = make(map[common.ClusterID]*multiclusterv1alpha1.ClusterStatus) - r.timerData = make(map[common.ClusterID]*timerData) + delete(r.memberStatus, memberID) + delete(r.timerData, memberID) + klog.InfoS("Removed member", "member", memberID) } func (r *MemberClusterAnnounceReconciler) GetMemberClusterStatuses() []multiclusterv1alpha1.ClusterStatus { diff --git a/multicluster/controllers/multicluster/memberclusterannounce_controller_test.go b/multicluster/controllers/multicluster/memberclusterannounce_controller_test.go index 44c144d1694..ed03a891919 100644 --- a/multicluster/controllers/multicluster/memberclusterannounce_controller_test.go +++ b/multicluster/controllers/multicluster/memberclusterannounce_controller_test.go @@ -114,12 +114,24 @@ func TestStatusAfterAdd(t *testing.T) { }, } - //[]multiclusterv1alpha1.ClusterStatus status := memberClusterAnnounceReconcilerUnderTest.GetMemberClusterStatuses() + expectedTimeData := memberClusterAnnounceReconcilerUnderTest.timerData assert.Equal(t, 1, len(status)) + assert.Equal(t, 1, len(expectedTimeData)) verifyStatus(t, expectedStatus, status[0]) } +func TestStatusAfterDelete(t *testing.T) { + setup() + memberClusterAnnounceReconcilerUnderTest.AddMember("east") + memberClusterAnnounceReconcilerUnderTest.RemoveMember("east") + + status := memberClusterAnnounceReconcilerUnderTest.GetMemberClusterStatuses() + expectedTimeData := memberClusterAnnounceReconcilerUnderTest.timerData + assert.Equal(t, 0, len(status)) + assert.Equal(t, 0, len(expectedTimeData)) +} + func TestStatusAfterReconcile(t *testing.T) { TestStatusAfterAdd(t) diff --git a/multicluster/controllers/multicluster/mock_membercluster_status_manager.go b/multicluster/controllers/multicluster/mock_membercluster_status_manager.go index 03d8b22b161..b559598083f 100644 --- a/multicluster/controllers/multicluster/mock_membercluster_status_manager.go +++ b/multicluster/controllers/multicluster/mock_membercluster_status_manager.go @@ -62,18 +62,6 @@ func (mr *MockMemberClusterStatusManagerMockRecorder) AddMember(memberID interfa return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddMember", reflect.TypeOf((*MockMemberClusterStatusManager)(nil).AddMember), memberID) } -// CleanupMembers mocks base method. -func (m *MockMemberClusterStatusManager) CleanupMembers() { - m.ctrl.T.Helper() - m.ctrl.Call(m, "CleanupMembers") -} - -// CleanupMembers indicates an expected call of CleanupMembers. -func (mr *MockMemberClusterStatusManagerMockRecorder) CleanupMembers() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CleanupMembers", reflect.TypeOf((*MockMemberClusterStatusManager)(nil).CleanupMembers)) -} - // GetMemberClusterStatuses mocks base method. func (m *MockMemberClusterStatusManager) GetMemberClusterStatuses() []v1alpha1.ClusterStatus { m.ctrl.T.Helper()