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 97e26096..afc3582c 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 @@ -21,6 +21,7 @@ import com.tencent.polaris.api.rpc.InstanceDeregisterRequest; import com.tencent.polaris.api.rpc.InstanceRegisterRequest; import com.tencent.polaris.client.api.SDKContext; + import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; @@ -47,7 +48,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 -> { @@ -90,7 +93,7 @@ private static String buildRegisterStateKey(CommonProviderBaseEntity baseEntity) public static final class RegisterState { - private InstanceRegisterRequest instanceRegisterRequest; + private volatile InstanceRegisterRequest instanceRegisterRequest; private long firstRegisterTime; private ScheduledFuture taskFuture; private int heartbeatFailCounter = 0;