@Override
    public void handleData(String dataId, UserData userData) {

        if (dataId == null) {
            return;
        }

        this.lastUserData = userData;

        printUserData(dataId, userData);
        if (flag != null) {
            flag[0].compareAndSet(false, true);
        }

        if (canNotify()) {
            flag = null; // 已经没作用了
            composeAndNotify(userData, lastConfigData);
        }
    }
@Test
    public void handleData() throws Exception {

        Subscriber listSub = new MockSubscribe(5);
        Configurator attrSub = new MockConfigurator(2);

        final AtomicInteger ps = new AtomicInteger(0);
        ProviderInfoListener listener = new ProviderInfoListener() {
            @Override
            public void addProvider(ProviderGroup providerGroup) {
                ps.addAndGet(providerGroup.size());
            }

            @Override
            public void removeProvider(ProviderGroup providerGroup) {
                ps.addAndGet(-providerGroup.size());
            }

            @Override
            public void updateProviders(ProviderGroup providerGroup) {
                ps.set(providerGroup.size());
            }

            @Override
            public void updateAllProviders(List<ProviderGroup> providerGroups) {
                ps.set(0);
                for (ProviderGroup providerGroup : providerGroups) {
                    ps.addAndGet(providerGroup.size());
                }
            }
        };

        SofaRegistrySubscribeCallback callback = new SofaRegistrySubscribeCallback();
        callback.addProviderInfoListener("xxxxx", new ConsumerConfig(), listener);
        Assert.assertTrue((!callback.flag[0].get()) && (!callback.flag[1].get()));

        callback.handleData("xxxxx", buildConfigPs(2));
        try {
            Thread.sleep(200);
        } finally {
        }
        Assert.assertTrue(callback.flag[1].get());
        Assert.assertTrue(ps.get() == 0);

        callback.handleData("xxxxx", buildPs(5));
        try {
            Thread.sleep(200);
        } finally {
        }
        Assert.assertTrue(callback.flag == null);
        //default+localZone
        Assert.assertEquals(ps.get(), 5 + 5);

        callback = new SofaRegistrySubscribeCallback();
        ps.set(0);
        callback.addProviderInfoListener("yyyyy", new ConsumerConfig(), listener);
        callback.handleData("yyyyy", buildPs(5));
        try {
            Thread.sleep(200);
        } finally {
        }
        callback.handleData("yyyyy", buildConfigPs(2));
        try {
            Thread.sleep(200);
        } finally {
        }
        Assert.assertTrue(callback.flag == null);
        Assert.assertEquals(ps.get(), 5 + 5);

    }