From 4405881cc8c02373106500dbb2161696c27018ec Mon Sep 17 00:00:00 2001 From: KomachiSion Date: Thu, 29 Sep 2022 11:02:50 +0800 Subject: [PATCH 1/2] ConnectionBasedClient support add revision --- .../naming/core/v2/client/AbstractClient.java | 2 +- .../v2/client/impl/ConnectionBasedClient.java | 5 ++++ .../v2/pojo/BatchInstancePublishInfo.java | 1 - .../core/v2/client/AbstractClientTest.java | 7 ------ .../core/v2/client/MockAbstractClient.java | 7 ------ .../impl/ConnectionBasedClientTest.java | 25 +++++++++++++++++++ 6 files changed, 31 insertions(+), 16 deletions(-) diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/AbstractClient.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/AbstractClient.java index d6f402af16f..452be71394a 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/AbstractClient.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/AbstractClient.java @@ -49,7 +49,7 @@ public abstract class AbstractClient implements Client { protected volatile long lastUpdatedTime; - private final AtomicLong revision; + protected final AtomicLong revision; public AbstractClient(Long revision) { lastUpdatedTime = System.currentTimeMillis(); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/impl/ConnectionBasedClient.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/impl/ConnectionBasedClient.java index 78ede54d45c..be7d0ecb96d 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/impl/ConnectionBasedClient.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/impl/ConnectionBasedClient.java @@ -74,4 +74,9 @@ public void setLastRenewTime() { public boolean isExpire(long currentTime) { return !isNative() && currentTime - getLastRenewTime() > ClientConfig.getInstance().getClientExpiredTime(); } + + @Override + public long recalculateRevision() { + return revision.addAndGet(1); + } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/BatchInstancePublishInfo.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/BatchInstancePublishInfo.java index 1ab5b33a275..9097834a92b 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/BatchInstancePublishInfo.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/BatchInstancePublishInfo.java @@ -27,7 +27,6 @@ * @author : ChenHao26 * @ClassName: BatchInstancePublishInfo * @Date: 2022/4/21 16:19 - * @Description: TODO */ public class BatchInstancePublishInfo extends InstancePublishInfo { diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/AbstractClientTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/AbstractClientTest.java index 4544809c1c0..a38508cb422 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/AbstractClientTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/AbstractClientTest.java @@ -27,13 +27,6 @@ import java.util.Collection; -/** - * AbstractClient test. - * @ClassName: AbstractClientTest - * @Author: ChenHao26 - * @Date: 2022/8/3 16:22 - * @Description: TODO - */ @RunWith(MockitoJUnitRunner.class) public class AbstractClientTest { diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/MockAbstractClient.java b/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/MockAbstractClient.java index e38baf9fc45..f9d2a261b4e 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/MockAbstractClient.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/MockAbstractClient.java @@ -16,13 +16,6 @@ package com.alibaba.nacos.naming.core.v2.client; -/** - * Mock AbstractClient. - * @ClassName: MockAbstractClient - * @Author: ChenHao26 - * @Date: 2022/8/3 16:25 - * @Description: TODO - */ public class MockAbstractClient extends AbstractClient { public MockAbstractClient(Long revision) { diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/impl/ConnectionBasedClientTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/impl/ConnectionBasedClientTest.java index 3492fa3bda4..0b9fc0acc7b 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/impl/ConnectionBasedClientTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/v2/client/impl/ConnectionBasedClientTest.java @@ -20,6 +20,9 @@ import org.junit.Before; import org.junit.Test; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class ConnectionBasedClientTest { @@ -47,4 +50,26 @@ public void testIsExpire() { connectionBasedClient.getLastRenewTime() + 2 * ClientConfig.getInstance().getClientExpiredTime(); assertTrue(connectionBasedClient.isExpire(mustExpireTime)); } + + @Test + public void testRecalculateRevision() { + assertEquals(0, connectionBasedClient.getRevision()); + connectionBasedClient.recalculateRevision(); + assertEquals(1, connectionBasedClient.getRevision()); + } + + @Test + public void testRecalculateRevisionAsync() throws InterruptedException { + assertEquals(0, connectionBasedClient.getRevision()); + for (int i = 0; i < 10; i++) { + Thread thread = new Thread(() -> { + for (int j = 0; j < 10; j++) { + connectionBasedClient.recalculateRevision(); + } + }); + thread.start(); + } + TimeUnit.SECONDS.sleep(1); + assertEquals(100, connectionBasedClient.getRevision()); + } } From f2b7cef0c08bcf139966e8a04959ffca396c3e90 Mon Sep 17 00:00:00 2001 From: KomachiSion Date: Thu, 29 Sep 2022 11:23:25 +0800 Subject: [PATCH 2/2] getRevision when get verifydata. --- .../ephemeral/distro/v2/DistroClientDataProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/v2/DistroClientDataProcessor.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/v2/DistroClientDataProcessor.java index 770432d0f6c..f71eaf3b1fb 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/v2/DistroClientDataProcessor.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/v2/DistroClientDataProcessor.java @@ -288,7 +288,7 @@ public List getVerifyData() { } if (clientManager.isResponsibleClient(client)) { DistroClientVerifyInfo verifyData = new DistroClientVerifyInfo(client.getClientId(), - client.recalculateRevision()); + client.getRevision()); DistroKey distroKey = new DistroKey(client.getClientId(), TYPE); DistroData data = new DistroData(distroKey, ApplicationUtils.getBean(Serializer.class).serialize(verifyData));