diff --git a/polaris-discovery/polaris-discovery-client/src/main/java/com/tencent/polaris/discovery/client/flow/RegisterStateManager.java b/polaris-discovery/polaris-discovery-client/src/main/java/com/tencent/polaris/discovery/client/flow/RegisterStateManager.java index 046926fee..dee78905f 100644 --- a/polaris-discovery/polaris-discovery-client/src/main/java/com/tencent/polaris/discovery/client/flow/RegisterStateManager.java +++ b/polaris-discovery/polaris-discovery-client/src/main/java/com/tencent/polaris/discovery/client/flow/RegisterStateManager.java @@ -55,7 +55,9 @@ public static RegisterState putRegisterState(SDKContext sdkContext, String registerStateKey = buildRegisterStateKey(instanceRegisterRequest); Map sdkRegisterStates = REGISTER_STATES.computeIfAbsent( sdkContext.getValueContext().getClientId(), clientId -> new ConcurrentHashMap<>()); - if (sdkRegisterStates.containsKey(registerStateKey)) { + RegisterState existsRegisterState = sdkRegisterStates.get(registerStateKey); + if (existsRegisterState != null) { + existsRegisterState.setInstanceRegisterRequest(instanceRegisterRequest); return null; } return sdkRegisterStates.computeIfAbsent(registerStateKey, unused -> { @@ -112,7 +114,7 @@ private static String buildRegisterStateKey(CommonProviderBaseEntity baseEntity) public static class RegisterState { - private InstanceRegisterRequest instanceRegisterRequest; + private volatile InstanceRegisterRequest instanceRegisterRequest; private long firstRegisterTime; private ScheduledFuture taskFuture; private final AtomicInteger heartbeatFailCounter = new AtomicInteger(0);