protected <T> Collection<String> getInvokerAddrList(List<Invoker<T>> invokers, Invocation invocation) {
        String key = invokers.get(0).getUrl().getServiceKey() + "." + RpcUtils.getMethodName(invocation);
        Map<String, WeightedRoundRobin> map = methodWeightMap.get(key);
        if (map != null) {
            return map.keySet();
        }
        return null;
    }
@Test
    void testNodeCacheShouldRecycle() {
        {
            Field recycleTimeField = null;
            try {
                // change recycle time to 1 ms
                recycleTimeField = RoundRobinLoadBalance.class.getDeclaredField("RECYCLE_PERIOD");
                recycleTimeField.setAccessible(true);
                recycleTimeField.setInt(RoundRobinLoadBalance.class, 10);
            } catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException | SecurityException e) {
                Assertions.assertTrue(true, "getField failed");
            }
        }

        int loop = 10000;
        // tmperately add a new invoker
        weightInvokers.add(weightInvokerTmp);
        try {
            Map<Invoker, InvokeResult> resultMap = getWeightedInvokeResult(loop, RoundRobinLoadBalance.NAME);
            assertStrictWRRResult(loop, resultMap);

            // inner nodes cache judgement
            RoundRobinLoadBalance lb = (RoundRobinLoadBalance) getLoadBalance(RoundRobinLoadBalance.NAME);
            Assertions.assertEquals(
                    weightInvokers.size(),
                    lb.getInvokerAddrList(weightInvokers, weightTestInvocation).size());

            weightInvokers.remove(weightInvokerTmp);

            resultMap = getWeightedInvokeResult(loop, RoundRobinLoadBalance.NAME);
            assertStrictWRRResult(loop, resultMap);

            Assertions.assertEquals(
                    weightInvokers.size(),
                    lb.getInvokerAddrList(weightInvokers, weightTestInvocation).size());
        } finally {
            // prevent other UT's failure
            weightInvokers.remove(weightInvokerTmp);
        }
    }