From fbeba11b367c9035449051d708d94bcb0470612d Mon Sep 17 00:00:00 2001 From: Pixy Yuan Date: Wed, 28 Sep 2022 14:26:52 +0800 Subject: [PATCH 1/4] [ISSUE #9230] Fix missing dependency between event publisher and subscriber triggered on snapshot loading. --- .../core/v2/client/manager/ClientManagerDelegate.java | 2 ++ .../client/manager/impl/EphemeralIpPortClientManager.java | 2 ++ .../nacos/naming/core/v2/pojo/InstancePublishInfo.java | 7 ++++++- .../service/impl/PersistentClientOperationServiceImpl.java | 5 +++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/manager/ClientManagerDelegate.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/manager/ClientManagerDelegate.java index 4be77886722..3525e37d6f6 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/manager/ClientManagerDelegate.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/manager/ClientManagerDelegate.java @@ -24,6 +24,7 @@ import com.alibaba.nacos.naming.core.v2.client.manager.impl.ConnectionBasedClientManager; import com.alibaba.nacos.naming.core.v2.client.manager.impl.EphemeralIpPortClientManager; import com.alibaba.nacos.naming.core.v2.client.manager.impl.PersistentIpPortClientManager; +import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; import java.util.Collection; @@ -34,6 +35,7 @@ * * @author xiweng.yy */ +@DependsOn({"clientServiceIndexesManager", "namingMetadataManager"}) @Component("clientManager") public class ClientManagerDelegate implements ClientManager { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/manager/impl/EphemeralIpPortClientManager.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/manager/impl/EphemeralIpPortClientManager.java index 2f80dd5c015..64a750ec8f5 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/manager/impl/EphemeralIpPortClientManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/client/manager/impl/EphemeralIpPortClientManager.java @@ -34,6 +34,7 @@ import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.NamingExecuteTaskDispatcher; import com.alibaba.nacos.naming.misc.SwitchDomain; +import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; import java.util.Collection; @@ -46,6 +47,7 @@ * * @author xiweng.yy */ +@DependsOn("clientServiceIndexesManager") @Component("ephemeralIpPortClientManager") public class EphemeralIpPortClientManager implements ClientManager { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/InstancePublishInfo.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/InstancePublishInfo.java index d6020c7b827..5e62fcabff1 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/InstancePublishInfo.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/InstancePublishInfo.java @@ -115,7 +115,12 @@ public int hashCode() { @Override public String toString() { - return "InstancePublishInfo{" + "ip='" + ip + '\'' + ", port=" + port + ", healthy=" + healthy + '}'; + return "InstancePublishInfo{" + + "ip='" + ip + '\'' + + ", port=" + port + + ", healthy=" + healthy + + ", cluster='" + cluster + '\'' + + '}'; } public static String genMetadataId(String ip, int port, String cluster) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.java index 1db5608f03e..56d8342f650 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.java @@ -113,6 +113,7 @@ public void registerInstance(Service service, Instance instance, String clientId try { protocol.write(writeRequest); + Loggers.RAFT.info("Client registered. service={}, clientId={}, instance={}", service, instance, clientId); } catch (Exception e) { throw new NacosRuntimeException(NacosException.SERVER_ERROR, e); } @@ -160,6 +161,7 @@ public void deregisterInstance(Service service, Instance instance, String client try { protocol.write(writeRequest); + Loggers.RAFT.info("Client unregistered. service={}, clientId={}, instance={}", service, instance, clientId); } catch (Exception e) { throw new NacosRuntimeException(NacosException.SERVER_ERROR, e); } @@ -313,6 +315,7 @@ protected boolean writeSnapshot(Writer writer) throws IOException { @Override protected boolean readSnapshot(Reader reader) throws Exception { final String readerPath = reader.getPath(); + Loggers.RAFT.info("snapshot start to load from : {}", readerPath); final String sourceFile = Paths.get(readerPath, SNAPSHOT_ARCHIVE).toString(); final Checksum checksum = new CRC64(); byte[] snapshotBytes = DiskUtils.decompress(sourceFile, checksum); @@ -323,6 +326,7 @@ protected boolean readSnapshot(Reader reader) throws Exception { } } loadSnapshot(snapshotBytes); + Loggers.RAFT.info("snapshot success to load from : {}", readerPath); return true; } @@ -357,6 +361,7 @@ private void loadSyncDataToClient(Map.Entry entry, IpPor Service service = Service.newService(namespaces.get(i), groupNames.get(i), serviceNames.get(i), false); Service singleton = ServiceManager.getInstance().getSingleton(service); client.putServiceInstance(singleton, instances.get(i)); + Loggers.RAFT.info("[SNAPSHOT-LOAD] service={}, instance={}", service, instances.get(i)); NotifyCenter.publishEvent( new ClientOperationEvent.ClientRegisterServiceEvent(singleton, client.getClientId())); } From e82418c4722ad5c9d442104ea959d6a3fbdc3f95 Mon Sep 17 00:00:00 2001 From: Pixy Yuan Date: Wed, 28 Sep 2022 14:33:45 +0800 Subject: [PATCH 2/4] [ISSUE #9230] Fix codestyle. --- .../naming/core/v2/pojo/InstancePublishInfo.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/InstancePublishInfo.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/InstancePublishInfo.java index 5e62fcabff1..1632fa88ea7 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/InstancePublishInfo.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/pojo/InstancePublishInfo.java @@ -115,12 +115,12 @@ public int hashCode() { @Override public String toString() { - return "InstancePublishInfo{" + - "ip='" + ip + '\'' + - ", port=" + port + - ", healthy=" + healthy + - ", cluster='" + cluster + '\'' + - '}'; + return "InstancePublishInfo{" + + "ip='" + ip + '\'' + + ", port=" + port + + ", healthy=" + healthy + + ", cluster='" + cluster + '\'' + + '}'; } public static String genMetadataId(String ip, int port, String cluster) { From 43d9e66dba45f80fac2912a4627c9a10761988e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E8=BE=B0?= Date: Thu, 10 Feb 2022 13:57:47 +0800 Subject: [PATCH 3/4] [ISSUE #9230] Fix missing dependency between event publisher and subscriber triggered on persistent clients' snapshot loading. --- .../naming/core/v2/service/ClientOperationServiceProxy.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/ClientOperationServiceProxy.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/ClientOperationServiceProxy.java index 9b08b0d3c68..2efa7c6dd9f 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/ClientOperationServiceProxy.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/ClientOperationServiceProxy.java @@ -24,6 +24,7 @@ import com.alibaba.nacos.naming.core.v2.service.impl.PersistentClientOperationServiceImpl; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.pojo.Subscriber; +import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; import java.util.List; @@ -31,8 +32,11 @@ /** * Implementation of external exposure. * + *

Depends on {@link com.alibaba.nacos.naming.push.v2.NamingSubscriberServiceV2Impl namingSubscriberServiceV2Impl} + * having listen on related {@link com.alibaba.nacos.naming.core.v2.event.service.ServiceEvent.ServiceChangedEvent events}. * @author liaochuntao */ +@DependsOn("namingSubscriberServiceV2Impl") @SuppressWarnings("PMD.ServiceOrDaoClassShouldEndWithImplRule") @Component public class ClientOperationServiceProxy implements ClientOperationService { From c9e48b131bec2f45640fe8eb5637ac2f58c55af1 Mon Sep 17 00:00:00 2001 From: Pixy Yuan Date: Wed, 28 Sep 2022 17:21:58 +0800 Subject: [PATCH 4/4] [ISSUE #9230] Fix import. --- .../v2/service/impl/PersistentClientOperationServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.java index 56d8342f650..abaa38742ca 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/v2/service/impl/PersistentClientOperationServiceImpl.java @@ -34,6 +34,7 @@ import com.alibaba.nacos.consistency.snapshot.SnapshotOperation; import com.alibaba.nacos.consistency.snapshot.Writer; import com.alibaba.nacos.core.distributed.ProtocolManager; +import com.alibaba.nacos.core.utils.Loggers; import com.alibaba.nacos.naming.consistency.persistent.impl.AbstractSnapshotOperation; import com.alibaba.nacos.naming.constants.Constants; import com.alibaba.nacos.naming.core.v2.ServiceManager;