This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new e255a2bc3e6 Fix sonar issue for JdbcUrlAppender (#33265)
e255a2bc3e6 is described below

commit e255a2bc3e6863da9a8be39a2f6a236f4fa57aad
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Oct 16 00:09:21 2024 +0800

    Fix sonar issue for JdbcUrlAppender (#33265)
    
    * Fix sonar issue for JdbcUrlAppender
    
    * Refactor ComputeNodeInstanceContextTest
    
    * Refactor ComputeNodeInstanceContextTest
    
    * Refactor ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
    
    * Add more test cases on ComputeNodeInstanceContext
---
 .../infra/instance/ComputeNodeInstanceContext.java | 100 +++++----------
 .../instance/ComputeNodeInstanceContextTest.java   | 138 ++++++++++++++-------
 .../core/connector/url/JdbcUrlAppender.java        |   2 +-
 .../DriverDatabaseConnectionManagerTest.java       |   4 -
 .../dispatch/ComputeNodeStateSubscriber.java       |   2 +-
 .../dispatch/ComputeNodeStateSubscriberTest.java   |   2 +-
 6 files changed, 127 insertions(+), 121 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstanceContext.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstanceContext.java
index 1ef7e83414b..4a3c7082461 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstanceContext.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstanceContext.java
@@ -17,12 +17,10 @@
 
 package org.apache.shardingsphere.infra.instance;
 
-import com.google.common.base.Preconditions;
 import lombok.AccessLevel;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
-import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
-import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
+import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
 import org.apache.shardingsphere.infra.lock.LockContext;
 import org.apache.shardingsphere.infra.state.instance.InstanceState;
@@ -30,8 +28,6 @@ import 
org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 
 import javax.annotation.concurrent.ThreadSafe;
 import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.Map;
 import java.util.Optional;
 import java.util.Properties;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -51,17 +47,15 @@ public final class ComputeNodeInstanceContext {
     
     private final ModeConfiguration modeConfiguration;
     
-    @SuppressWarnings("rawtypes")
     @Getter(AccessLevel.NONE)
-    private final AtomicReference<LockContext> lockContext = new 
AtomicReference<>();
+    private final AtomicReference<LockContext<?>> lockContext = new 
AtomicReference<>();
     
     private final EventBusContext eventBusContext;
     
     private final Collection<ComputeNodeInstance> allClusterInstances = new 
CopyOnWriteArrayList<>();
     
-    @SuppressWarnings("rawtypes")
     public ComputeNodeInstanceContext(final ComputeNodeInstance instance, 
final WorkerIdGenerator workerIdGenerator,
-                                      final ModeConfiguration modeConfig, 
final LockContext lockContext, final EventBusContext eventBusContext) {
+                                      final ModeConfiguration modeConfig, 
final LockContext<?> lockContext, final EventBusContext eventBusContext) {
         this.instance = instance;
         this.workerIdGenerator.set(workerIdGenerator);
         this.modeConfiguration = modeConfig;
@@ -79,8 +73,7 @@ public final class ComputeNodeInstanceContext {
      * @param workerIdGenerator worker id generator
      * @param lockContext lock context
      */
-    @SuppressWarnings("rawtypes")
-    public void init(final WorkerIdGenerator workerIdGenerator, final 
LockContext lockContext) {
+    public void init(final WorkerIdGenerator workerIdGenerator, final 
LockContext<?> lockContext) {
         this.workerIdGenerator.set(workerIdGenerator);
         this.lockContext.set(lockContext);
     }
@@ -88,77 +81,68 @@ public final class ComputeNodeInstanceContext {
     /**
      * Update instance status.
      *
-     * @param id instance ID
+     * @param instanceId instance ID
      * @param status status
      */
-    public void updateStatus(final String id, final String status) {
+    public void updateStatus(final String instanceId, final String status) {
         Optional<InstanceState> instanceState = InstanceState.get(status);
         if (!instanceState.isPresent()) {
             return;
         }
-        if (instance.getMetaData().getId().equals(id)) {
+        if (instance.getMetaData().getId().equals(instanceId)) {
             instance.switchState(instanceState.get());
         }
-        updateRelatedComputeNodeInstancesStatus(id, instanceState.get());
-    }
-    
-    private void updateRelatedComputeNodeInstancesStatus(final String 
instanceId, final InstanceState instanceState) {
-        for (ComputeNodeInstance each : allClusterInstances) {
-            if (each.getMetaData().getId().equals(instanceId)) {
-                each.switchState(instanceState);
-            }
-        }
+        allClusterInstances.stream().filter(each -> 
each.getMetaData().getId().equals(instanceId)).forEach(each -> 
each.switchState(instanceState.get()));
     }
     
     /**
-     * Update instance worker id.
+     * Update instance labels.
      *
-     * @param instanceId instance id
-     * @param workerId worker id
+     * @param instanceId instance ID
+     * @param labels labels
      */
-    public void updateWorkerId(final String instanceId, final Integer 
workerId) {
+    public void updateLabels(final String instanceId, final Collection<String> 
labels) {
         if (instance.getMetaData().getId().equals(instanceId)) {
-            instance.setWorkerId(workerId);
+            updateLabels(instance, labels);
         }
-        allClusterInstances.stream().filter(each -> 
each.getMetaData().getId().equals(instanceId)).forEach(each -> 
each.setWorkerId(workerId));
+        allClusterInstances.stream().filter(each -> 
each.getMetaData().getId().equals(instanceId)).forEach(each -> 
updateLabels(each, labels));
+    }
+    
+    private void updateLabels(final ComputeNodeInstance computeNodeInstance, 
final Collection<String> labels) {
+        computeNodeInstance.getLabels().clear();
+        computeNodeInstance.getLabels().addAll(labels);
     }
     
     /**
-     * Update instance label.
+     * Update instance worker ID.
      *
-     * @param instanceId instance id
-     * @param labels collection of label
+     * @param instanceId instance ID
+     * @param workerId worker ID
      */
-    public void updateLabel(final String instanceId, final Collection<String> 
labels) {
+    public void updateWorkerId(final String instanceId, final Integer 
workerId) {
         if (instance.getMetaData().getId().equals(instanceId)) {
-            instance.getLabels().clear();
-            instance.getLabels().addAll(labels);
-        }
-        for (ComputeNodeInstance each : allClusterInstances) {
-            if (each.getMetaData().getId().equals(instanceId)) {
-                each.getLabels().clear();
-                each.getLabels().addAll(labels);
-            }
+            instance.setWorkerId(workerId);
         }
+        allClusterInstances.stream().filter(each -> 
each.getMetaData().getId().equals(instanceId)).forEach(each -> 
each.setWorkerId(workerId));
     }
     
     /**
-     * Get worker id.
+     * Get worker ID.
      *
-     * @return worker id
+     * @return worker ID
      */
     public int getWorkerId() {
         return instance.getWorkerId();
     }
     
     /**
-     * Generate worker id.
+     * Generate worker ID.
      *
      * @param props properties
-     * @return worker id
+     * @return worker ID
      */
     public int generateWorkerId(final Properties props) {
-        Preconditions.checkArgument(workerIdGenerator.get() != null, "Worker 
id generator is not initialized.");
+        ShardingSpherePreconditions.checkNotNull(workerIdGenerator.get(), () 
-> new IllegalArgumentException("Worker id generator is not initialized."));
         int result = workerIdGenerator.get().generate(props);
         instance.setWorkerId(result);
         return result;
@@ -184,26 +168,9 @@ public final class ComputeNodeInstanceContext {
     }
     
     /**
-     * Get compute node instances by instance type and labels.
-     *
-     * @param instanceType instance type
-     * @param labels collection of contained label
-     * @return compute node instances
-     */
-    public Map<String, InstanceMetaData> getAllClusterInstances(final 
InstanceType instanceType, final Collection<String> labels) {
-        Map<String, InstanceMetaData> result = new 
LinkedHashMap<>(allClusterInstances.size(), 1F);
-        for (ComputeNodeInstance each : allClusterInstances) {
-            if (each.getMetaData().getType() == instanceType && 
labels.stream().anyMatch(each.getLabels()::contains)) {
-                result.put(each.getMetaData().getId(), each.getMetaData());
-            }
-        }
-        return result;
-    }
-    
-    /**
-     * Get compute node instance by instance id.
+     * Get compute node instance.
      *
-     * @param instanceId instance id
+     * @param instanceId instance ID
      * @return compute node instance
      */
     public Optional<ComputeNodeInstance> getComputeNodeInstanceById(final 
String instanceId) {
@@ -216,8 +183,7 @@ public final class ComputeNodeInstanceContext {
      * @return lock context
      * @throws IllegalStateException if lock context is not initialized
      */
-    @SuppressWarnings("rawtypes")
-    public LockContext getLockContext() throws IllegalStateException {
+    public LockContext<?> getLockContext() throws IllegalStateException {
         return Optional.ofNullable(lockContext.get()).orElseThrow(() -> new 
IllegalStateException("Lock context is not initialized."));
     }
 }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstanceContextTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstanceContextTest.java
index ce2eadeffd8..dfffac5f40b 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstanceContextTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstanceContextTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.instance;
 
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
+import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
 import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
 import org.apache.shardingsphere.infra.lock.LockContext;
 import org.apache.shardingsphere.infra.state.instance.InstanceState;
@@ -26,85 +27,128 @@ import 
org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
-import java.util.Collection;
+import java.util.Optional;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
 class ComputeNodeInstanceContextTest {
     
-    private final ModeConfiguration modeConfig = new 
ModeConfiguration("Standalone", null);
-    
-    private final LockContext lockContext = mock(LockContext.class);
-    
-    private final EventBusContext eventBusContext = new EventBusContext();
+    @Test
+    void assertInit() {
+        ComputeNodeInstanceContext context = new 
ComputeNodeInstanceContext(new 
ComputeNodeInstance(mock(InstanceMetaData.class)), 
mock(ModeConfiguration.class), new EventBusContext());
+        WorkerIdGenerator workerIdGenerator = mock(WorkerIdGenerator.class);
+        LockContext<?> lockContext = mock(LockContext.class);
+        context.init(workerIdGenerator, lockContext);
+        context.generateWorkerId(new Properties());
+        verify(workerIdGenerator).generate(new Properties());
+        assertThat(context.getLockContext(), is(lockContext));
+    }
     
     @Test
-    void assertUpdateComputeNodeState() {
+    void assertUpdateStatusWithInvalidInstanceState() {
         InstanceMetaData instanceMetaData = mock(InstanceMetaData.class);
-        when(instanceMetaData.getId()).thenReturn("foo_instance_id");
         ComputeNodeInstanceContext context = new ComputeNodeInstanceContext(
-                new ComputeNodeInstance(instanceMetaData), 
mock(WorkerIdGenerator.class), modeConfig, lockContext, eventBusContext);
-        InstanceState actual = 
context.getInstance().getState().getCurrentState();
-        assertThat(actual, is(InstanceState.OK));
-        context.updateStatus(instanceMetaData.getId(), 
InstanceState.CIRCUIT_BREAK.name());
-        actual = context.getInstance().getState().getCurrentState();
-        assertThat(actual, is(InstanceState.CIRCUIT_BREAK));
-        context.updateStatus(instanceMetaData.getId(), 
InstanceState.OK.name());
-        actual = context.getInstance().getState().getCurrentState();
-        assertThat(actual, is(InstanceState.OK));
+                new ComputeNodeInstance(instanceMetaData), 
mock(WorkerIdGenerator.class), mock(ModeConfiguration.class), 
mock(LockContext.class), new EventBusContext());
+        context.updateStatus("id", "INVALID");
+        verify(instanceMetaData, times(0)).getId();
     }
     
     @Test
-    void assertGetWorkerId() {
-        ComputeNodeInstance computeNodeInstance = 
mock(ComputeNodeInstance.class);
-        when(computeNodeInstance.getWorkerId()).thenReturn(0);
-        ComputeNodeInstanceContext context = new 
ComputeNodeInstanceContext(computeNodeInstance, mock(WorkerIdGenerator.class), 
modeConfig, lockContext, eventBusContext);
-        assertThat(context.getWorkerId(), is(0));
+    void assertUpdateStatusWithCurrentInstance() {
+        InstanceMetaData instanceMetaData = new 
ProxyInstanceMetaData("foo_instance_id", 3306);
+        ComputeNodeInstanceContext context = new ComputeNodeInstanceContext(
+                new ComputeNodeInstance(instanceMetaData), 
mock(WorkerIdGenerator.class), mock(ModeConfiguration.class), 
mock(LockContext.class), new EventBusContext());
+        context.addComputeNodeInstance(new ComputeNodeInstance(new 
ProxyInstanceMetaData("bar_instance_id", 3307)));
+        context.updateStatus("foo_instance_id", 
InstanceState.CIRCUIT_BREAK.name());
+        assertThat(context.getInstance().getState().getCurrentState(), 
is(InstanceState.CIRCUIT_BREAK));
     }
     
     @Test
-    void assertGenerateWorkerId() {
+    void assertUpdateStatusWithOtherInstance() {
+        InstanceMetaData instanceMetaData = new 
ProxyInstanceMetaData("foo_instance_id", 3306);
         ComputeNodeInstanceContext context = new ComputeNodeInstanceContext(
-                new ComputeNodeInstance(mock(InstanceMetaData.class)), 
mock(WorkerIdGenerator.class), modeConfig, lockContext, eventBusContext);
-        assertThat(context.generateWorkerId(new Properties()), is(0));
+                new ComputeNodeInstance(instanceMetaData), 
mock(WorkerIdGenerator.class), mock(ModeConfiguration.class), 
mock(LockContext.class), new EventBusContext());
+        context.addComputeNodeInstance(new ComputeNodeInstance(new 
ProxyInstanceMetaData("bar_instance_id", 3307)));
+        context.updateStatus("bar_instance_id", 
InstanceState.CIRCUIT_BREAK.name());
+        assertThat(context.getInstance().getState().getCurrentState(), 
is(InstanceState.OK));
     }
     
     @Test
-    void assertUpdateLabel() {
-        InstanceMetaData instanceMetaData = mock(InstanceMetaData.class);
-        when(instanceMetaData.getId()).thenReturn("foo_instance_id");
+    void assertUpdateLabelsWithCurrentInstance() {
+        InstanceMetaData instanceMetaData = new 
ProxyInstanceMetaData("foo_instance_id", 3306);
         ComputeNodeInstanceContext context = new ComputeNodeInstanceContext(
-                new ComputeNodeInstance(instanceMetaData), 
mock(WorkerIdGenerator.class), modeConfig, lockContext, eventBusContext);
-        Collection<String> expected = Arrays.asList("label_1", "label_2");
-        context.updateLabel("foo_instance_id", expected);
-        Collection<String> actual = context.getInstance().getLabels();
-        assertThat(actual, is(expected));
+                new ComputeNodeInstance(instanceMetaData), 
mock(WorkerIdGenerator.class), mock(ModeConfiguration.class), 
mock(LockContext.class), new EventBusContext());
+        context.updateLabels("foo_instance_id", Arrays.asList("label_1", 
"label_2"));
+        assertThat(context.getInstance().getLabels(), 
is(Arrays.asList("label_1", "label_2")));
     }
     
     @Test
-    void assertGetInstance() {
-        ComputeNodeInstance expected = new 
ComputeNodeInstance(mock(InstanceMetaData.class));
-        ComputeNodeInstanceContext context = new 
ComputeNodeInstanceContext(expected, mock(WorkerIdGenerator.class), modeConfig, 
lockContext, eventBusContext);
-        ComputeNodeInstance actual = context.getInstance();
-        assertThat(actual, is(expected));
+    void assertUpdateLabelsWithOtherInstance() {
+        InstanceMetaData instanceMetaData = new 
ProxyInstanceMetaData("foo_instance_id", 3306);
+        ComputeNodeInstanceContext context = new ComputeNodeInstanceContext(
+                new ComputeNodeInstance(instanceMetaData), 
mock(WorkerIdGenerator.class), mock(ModeConfiguration.class), 
mock(LockContext.class), new EventBusContext());
+        context.addComputeNodeInstance(new ComputeNodeInstance(new 
ProxyInstanceMetaData("bar_instance_id", 3307)));
+        context.updateLabels("bar_instance_id", Arrays.asList("label_1", 
"label_2"));
+        assertTrue(context.getInstance().getLabels().isEmpty());
+        
assertThat(context.getAllClusterInstances().iterator().next().getLabels(), 
is(Arrays.asList("label_1", "label_2")));
     }
     
     @Test
-    void assertGetState() {
-        ComputeNodeInstanceContext context = new ComputeNodeInstanceContext(
-                new ComputeNodeInstance(mock(InstanceMetaData.class)), 
mock(WorkerIdGenerator.class), modeConfig, lockContext, eventBusContext);
-        assertNotNull(context.getInstance().getState());
+    void assertUpdateWorkerIdWithCurrentInstance() {
+        ComputeNodeInstance instance = new ComputeNodeInstance(new 
ProxyInstanceMetaData("foo_instance_id", 3306));
+        ComputeNodeInstanceContext context = new 
ComputeNodeInstanceContext(instance, mock(WorkerIdGenerator.class), 
mock(ModeConfiguration.class), mock(LockContext.class), new EventBusContext());
+        context.updateWorkerId("foo_instance_id", 10);
+        assertThat(context.getWorkerId(), is(10));
+    }
+    
+    @Test
+    void assertUpdateWorkerIdWithOtherInstance() {
+        ComputeNodeInstance instance = new ComputeNodeInstance(new 
ProxyInstanceMetaData("foo_instance_id", 3306));
+        ComputeNodeInstanceContext context = new 
ComputeNodeInstanceContext(instance, mock(WorkerIdGenerator.class), 
mock(ModeConfiguration.class), mock(LockContext.class), new EventBusContext());
+        context.addComputeNodeInstance(new ComputeNodeInstance(new 
ProxyInstanceMetaData("bar_instance_id", 3307)));
+        context.updateWorkerId("bar_instance_id", 10);
+        assertThat(context.getWorkerId(), is(-1));
+        
assertThat(context.getAllClusterInstances().iterator().next().getWorkerId(), 
is(10));
     }
     
     @Test
-    void assertGetModeConfiguration() {
+    void assertGenerateWorkerId() {
         ComputeNodeInstanceContext context = new ComputeNodeInstanceContext(
-                new ComputeNodeInstance(mock(InstanceMetaData.class)), 
mock(WorkerIdGenerator.class), modeConfig, lockContext, eventBusContext);
-        assertThat(context.getModeConfiguration(), is(modeConfig));
+                new ComputeNodeInstance(mock(InstanceMetaData.class)), 
mock(WorkerIdGenerator.class), mock(ModeConfiguration.class), 
mock(LockContext.class), new EventBusContext());
+        assertThat(context.generateWorkerId(new Properties()), is(0));
+    }
+    
+    @Test
+    void assertAddComputeNodeInstance() {
+        ComputeNodeInstance instance = new ComputeNodeInstance(new 
ProxyInstanceMetaData("foo_instance_id", 3306));
+        ComputeNodeInstanceContext context = new 
ComputeNodeInstanceContext(instance, mock(WorkerIdGenerator.class), 
mock(ModeConfiguration.class), mock(LockContext.class), new EventBusContext());
+        context.addComputeNodeInstance(new ComputeNodeInstance(new 
ProxyInstanceMetaData("bar_instance_id", 3307)));
+        assertFalse(context.getAllClusterInstances().isEmpty());
+    }
+    
+    @Test
+    void assertDeleteComputeNodeInstance() {
+        ComputeNodeInstance instance = new ComputeNodeInstance(new 
ProxyInstanceMetaData("foo_instance_id", 3306));
+        ComputeNodeInstanceContext context = new 
ComputeNodeInstanceContext(instance, mock(WorkerIdGenerator.class), 
mock(ModeConfiguration.class), mock(LockContext.class), new EventBusContext());
+        context.addComputeNodeInstance(new ComputeNodeInstance(new 
ProxyInstanceMetaData("bar_instance_id", 3307)));
+        context.deleteComputeNodeInstance(new ComputeNodeInstance(new 
ProxyInstanceMetaData("bar_instance_id", 3307)));
+        assertTrue(context.getAllClusterInstances().isEmpty());
+    }
+    
+    @Test
+    void assertGetComputeNodeInstanceById() {
+        ComputeNodeInstance instance = new ComputeNodeInstance(new 
ProxyInstanceMetaData("foo_instance_id", 3306));
+        ComputeNodeInstanceContext context = new 
ComputeNodeInstanceContext(instance, mock(WorkerIdGenerator.class), 
mock(ModeConfiguration.class), mock(LockContext.class), new EventBusContext());
+        context.addComputeNodeInstance(new ComputeNodeInstance(new 
ProxyInstanceMetaData("bar_instance_id", 3307)));
+        Optional<ComputeNodeInstance> actual = 
context.getComputeNodeInstanceById("bar_instance_id");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().getMetaData().getId(), is("bar_instance_id"));
     }
 }
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/connector/url/JdbcUrlAppender.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/connector/url/JdbcUrlAppender.java
index 7bf216843c4..dc3a2f37f22 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/connector/url/JdbcUrlAppender.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/connector/url/JdbcUrlAppender.java
@@ -37,10 +37,10 @@ public final class JdbcUrlAppender {
      * @return appended JDBC URL
      */
     public String appendQueryProperties(final String jdbcUrl, final Properties 
queryProps) {
-        Properties currentQueryProps = 
DatabaseTypedSPILoader.getService(ConnectionPropertiesParser.class, 
DatabaseTypeFactory.get(jdbcUrl)).parse(jdbcUrl, null, 
null).getQueryProperties();
         if (queryProps.isEmpty()) {
             return jdbcUrl;
         }
+        Properties currentQueryProps = 
DatabaseTypedSPILoader.getService(ConnectionPropertiesParser.class, 
DatabaseTypeFactory.get(jdbcUrl)).parse(jdbcUrl, null, 
null).getQueryProperties();
         return hasConflictedQueryProperties(currentQueryProps, queryProps)
                 ? jdbcUrl.substring(0, jdbcUrl.indexOf('?') + 1) + 
concat(getMergedProperties(currentQueryProps, queryProps))
                 : jdbcUrl + getURLDelimiter(currentQueryProps) + 
concat(queryProps);
diff --git 
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
 
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
index f6f856666eb..6334f9e03b1 100644
--- 
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
+++ 
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
@@ -21,8 +21,6 @@ import com.zaxxer.hikari.HikariDataSource;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
-import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
-import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
@@ -67,8 +65,6 @@ class DriverDatabaseConnectionManagerTest {
         MetaDataPersistService persistService = mockMetaDataPersistService();
         
when(result.getPersistServiceFacade().getMetaDataPersistService()).thenReturn(persistService);
         
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Collections.singleton(mock(TransactionRule.class, 
RETURNS_DEEP_STUBS))));
-        
when(result.getComputeNodeInstanceContext().getAllClusterInstances(InstanceType.PROXY,
 Arrays.asList("OLTP", "OLAP"))).thenReturn(
-                Collections.singletonMap("foo_id", new 
ProxyInstanceMetaData("foo_id", "127.0.0.1@3307", "foo_version")));
         return result;
     }
     
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/ComputeNodeStateSubscriber.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/ComputeNodeStateSubscriber.java
index e00ed827f90..6d661330cb9 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/ComputeNodeStateSubscriber.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/ComputeNodeStateSubscriber.java
@@ -86,6 +86,6 @@ public final class ComputeNodeStateSubscriber implements 
EventSubscriber {
     @Subscribe
     public synchronized void renew(final LabelsEvent event) {
         // TODO labels may be empty
-        
contextManager.getComputeNodeInstanceContext().updateLabel(event.getInstanceId(),
 event.getLabels());
+        
contextManager.getComputeNodeInstanceContext().updateLabels(event.getInstanceId(),
 event.getLabels());
     }
 }
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/ComputeNodeStateSubscriberTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/ComputeNodeStateSubscriberTest.java
index 9ed424f0f8a..95d8b8ad677 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/ComputeNodeStateSubscriberTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/ComputeNodeStateSubscriberTest.java
@@ -82,6 +82,6 @@ class ComputeNodeStateSubscriberTest {
     @Test
     void assertRenewWithLabelsEvent() {
         subscriber.renew(new LabelsEvent("foo_instance_id", 
Collections.emptyList()));
-        
verify(contextManager.getComputeNodeInstanceContext()).updateLabel("foo_instance_id",
 Collections.emptyList());
+        
verify(contextManager.getComputeNodeInstanceContext()).updateLabels("foo_instance_id",
 Collections.emptyList());
     }
 }

Reply via email to