void handleConfigDataChangeEvent(Event event) {
        if (event instanceof ConfigDataChangeEvent) {
            ConfigDataChangeEvent evt = (ConfigDataChangeEvent) event;
            long dumpTs = evt.lastModifiedTs;
            String dataId = evt.dataId;
            String group = evt.group;
            String tenant = evt.tenant;
            String tag = evt.tag;
            MetricsMonitor.incrementConfigChangeCount(tenant, group, dataId);
            
            Collection<Member> ipList = memberManager.allMembersWithoutSelf();
            
            // In fact, any type of queue here can be
            Queue<NotifySingleRpcTask> rpcQueue = new LinkedList<>();
            
            for (Member member : ipList) {
                // grpc report data change only
                rpcQueue.add(
                        new NotifySingleRpcTask(dataId, group, tenant, tag, dumpTs, evt.isBeta, evt.isBatch, member));
            }
            if (!rpcQueue.isEmpty()) {
                ConfigExecutor.executeAsyncNotify(new AsyncRpcTask(rpcQueue));
            }
        }
    }
@Test
    void testHandleConfigDataChangeEvent() {
        long timeStamp = System.currentTimeMillis();
        
        List<Member> memberList = new ArrayList<>();
        // member1 success
        Member member1 = new Member();
        member1.setIp("testip1" + timeStamp);
        member1.setState(NodeState.UP);
        memberList.add(member1);
        // member2 exception
        Member member2 = new Member();
        member2.setIp("testip2" + timeStamp);
        member2.setState(NodeState.UP);
        memberList.add(member2);
        // member3 unhealth
        Member member3 = new Member();
        member3.setIp("testip3" + timeStamp);
        member3.setState(NodeState.DOWN);
        memberList.add(member3);
        
        Mockito.when(serverMemberManager.allMembersWithoutSelf()).thenReturn(memberList);
        
        configExecutorMocked.when(() -> ConfigExecutor.scheduleAsyncNotify(any(Runnable.class), anyLong(), any(TimeUnit.class)))
                .thenAnswer(invocation -> null);
        String dataId = "testDataId" + timeStamp;
        String group = "testGroup";
        AsyncNotifyService asyncNotifyService = new AsyncNotifyService(serverMemberManager);
        asyncNotifyService.handleConfigDataChangeEvent(new ConfigDataChangeEvent(dataId, group, System.currentTimeMillis()));
        
        // expect schedule twice fail or exception response.
        configExecutorMocked.verify(() -> ConfigExecutor.executeAsyncNotify(any(AsyncNotifyService.AsyncRpcTask.class)), times(1));
        
    }