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

panjuan 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 747e1cb5917 Refactor LabelComputeNodeHandler (#24206)
747e1cb5917 is described below

commit 747e1cb5917946155170d1dd7f1441cdbfc32376
Author: Raigor <[email protected]>
AuthorDate: Fri Feb 17 11:40:20 2023 +0800

    Refactor LabelComputeNodeHandler (#24206)
---
 .../distsql/ral/RALBackendHandlerFactory.java      |  3 --
 ...deHandler.java => LabelComputeNodeUpdater.java} | 31 +++++++++-------
 ...ingsphere.distsql.handler.ral.update.RALUpdater |  1 +
 .../ral/updatable/LabelComputeNodeUpdaterTest.java | 41 ++++++++++++++++++++++
 4 files changed, 61 insertions(+), 15 deletions(-)

diff --git 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/RALBackendHandlerFactory.java
 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/RALBackendHandlerFactory.java
index f3225a5a33f..9f70e411d0d 100644
--- 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/RALBackendHandlerFactory.java
+++ 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/RALBackendHandlerFactory.java
@@ -28,7 +28,6 @@ import 
org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableGlobalRul
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableRALStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.ImportDatabaseConfigurationStatement;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.LabelComputeNodeStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshDatabaseMetaDataStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshTableMetaDataStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.SetDistVariableStatement;
@@ -42,7 +41,6 @@ import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.hint.HintRALB
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.migration.update.UpdatableScalingRALBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.AlterReadwriteSplittingStorageUnitStatusStatementHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.ImportDatabaseConfigurationHandler;
-import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.LabelComputeNodeHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.RefreshDatabaseMetaDataHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.RefreshTableMetaDataHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.SetDistVariableHandler;
@@ -63,7 +61,6 @@ public final class RALBackendHandlerFactory {
     private static final Map<Class<? extends RALStatement>, Class<? extends 
RALBackendHandler<?>>> HANDLERS = new HashMap<>();
     
     static {
-        HANDLERS.put(LabelComputeNodeStatement.class, 
LabelComputeNodeHandler.class);
         HANDLERS.put(UnlabelComputeNodeStatement.class, 
UnlabelComputeNodeHandler.class);
         HANDLERS.put(SetInstanceStatusStatement.class, 
SetInstanceStatusHandler.class);
         HANDLERS.put(SetDistVariableStatement.class, 
SetDistVariableHandler.class);
diff --git 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeHandler.java
 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdater.java
similarity index 65%
rename from 
proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeHandler.java
rename to 
proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdater.java
index 440599f5032..b4b15ca9dce 100644
--- 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeHandler.java
+++ 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdater.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable;
 
+import org.apache.shardingsphere.distsql.handler.ral.update.RALUpdater;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.LabelComputeNodeStatement;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
@@ -24,33 +25,39 @@ import 
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.LabelsChangedEvent;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import 
org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepository;
+import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.UpdatableRALBackendHandler;
 
-import java.util.ArrayList;
+import java.sql.SQLException;
 import java.util.Collection;
 import java.util.LinkedHashSet;
+import java.util.LinkedList;
 import java.util.Optional;
 
 /**
- * Label compute node handler.
+ * Label compute node updater.
  */
-public final class LabelComputeNodeHandler extends 
UpdatableRALBackendHandler<LabelComputeNodeStatement> {
+public final class LabelComputeNodeUpdater implements 
RALUpdater<LabelComputeNodeStatement> {
     
     @Override
-    public void update(final ContextManager contextManager) {
-        MetaDataPersistService persistService = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
-        ShardingSpherePreconditions.checkState(null != persistService && null 
!= persistService.getRepository() && !(persistService.getRepository() 
instanceof StandalonePersistRepository),
+    public void executeUpdate(final String databaseName, final 
LabelComputeNodeStatement sqlStatement) throws SQLException {
+        ContextManager contextManager = 
ProxyContext.getInstance().getContextManager();
+        MetaDataPersistService persistService = 
contextManager.getMetaDataContexts().getPersistService();
+        ShardingSpherePreconditions.checkState(null != persistService && null 
!= persistService.getRepository() && persistService.getRepository() instanceof 
ClusterPersistRepository,
                 () -> new UnsupportedSQLOperationException("Labels can only be 
added in cluster mode"));
-        String instanceId = getSqlStatement().getInstanceId();
+        String instanceId = sqlStatement.getInstanceId();
         Optional<ComputeNodeInstance> computeNodeInstance = 
contextManager.getInstanceContext().getComputeNodeInstanceById(instanceId);
         if (computeNodeInstance.isPresent()) {
-            Collection<String> labels = new 
LinkedHashSet<>(getSqlStatement().getLabels());
-            if (!getSqlStatement().isOverwrite()) {
+            Collection<String> labels = new 
LinkedHashSet<>(sqlStatement.getLabels());
+            if (!sqlStatement.isOverwrite()) {
                 labels.addAll(computeNodeInstance.get().getLabels());
             }
-            contextManager.getInstanceContext().getEventBusContext().post(new 
LabelsChangedEvent(instanceId, new ArrayList<>(labels)));
+            contextManager.getInstanceContext().getEventBusContext().post(new 
LabelsChangedEvent(instanceId, new LinkedList<>(labels)));
         }
     }
+    
+    @Override
+    public String getType() {
+        return LabelComputeNodeStatement.class.getName();
+    }
 }
diff --git 
a/proxy/backend/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.update.RALUpdater
 
b/proxy/backend/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.update.RALUpdater
index 2d26c849b1a..485048adb06 100644
--- 
a/proxy/backend/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.update.RALUpdater
+++ 
b/proxy/backend/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.update.RALUpdater
@@ -16,3 +16,4 @@
 #
 
 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.AlterInventoryIncrementalRuleUpdater
+org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.LabelComputeNodeUpdater
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdaterTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdaterTest.java
new file mode 100644
index 00000000000..5acebfa4b22
--- /dev/null
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/LabelComputeNodeUpdaterTest.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable;
+
+import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.LabelComputeNodeStatement;
+import 
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
+import org.junit.Test;
+
+import java.sql.SQLException;
+
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
+
+public final class LabelComputeNodeUpdaterTest extends ProxyContextRestorer {
+    
+    @Test(expected = UnsupportedSQLOperationException.class)
+    public void assertWithStandaloneMode() throws SQLException {
+        ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
+        ProxyContext.init(contextManager);
+        LabelComputeNodeUpdater updater = new LabelComputeNodeUpdater();
+        updater.executeUpdate("foo", mock(LabelComputeNodeStatement.class));
+    }
+}

Reply via email to