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

jianglongtao 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 739e7613490 Refactor `UnlabelComputeNodeHandler` (#24211)
739e7613490 is described below

commit 739e761349087b7401e5448a971516613d0c0f03
Author: Zichao <[email protected]>
AuthorDate: Fri Feb 17 15:45:09 2023 +0800

    Refactor `UnlabelComputeNodeHandler` (#24211)
    
    * Refactor `UnlabelComputeNodeHandler`
    
    * Refactor `UnlabelComputeNodeHandler`
---
 .../distsql/ral/RALBackendHandlerFactory.java      |  3 --
 ...Handler.java => UnlabelComputeNodeUpdater.java} | 24 ++++++++-----
 ...ingsphere.distsql.handler.ral.update.RALUpdater |  1 +
 .../updatable/UnlabelComputeNodeUpdaterTest.java   | 41 ++++++++++++++++++++++
 4 files changed, 57 insertions(+), 12 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 9f70e411d0d..932ce8d1c9d 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
@@ -32,7 +32,6 @@ import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshD
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshTableMetaDataStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.SetDistVariableStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.SetInstanceStatusStatement;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.UnlabelComputeNodeStatement;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
@@ -45,7 +44,6 @@ import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.Ref
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.RefreshTableMetaDataHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.SetDistVariableHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.SetInstanceStatusHandler;
-import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.UnlabelComputeNodeHandler;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.status.AlterReadwriteSplittingStorageUnitStatusStatement;
 
@@ -61,7 +59,6 @@ public final class RALBackendHandlerFactory {
     private static final Map<Class<? extends RALStatement>, Class<? extends 
RALBackendHandler<?>>> HANDLERS = new HashMap<>();
     
     static {
-        HANDLERS.put(UnlabelComputeNodeStatement.class, 
UnlabelComputeNodeHandler.class);
         HANDLERS.put(SetInstanceStatusStatement.class, 
SetInstanceStatusHandler.class);
         HANDLERS.put(SetDistVariableStatement.class, 
SetDistVariableHandler.class);
         HANDLERS.put(AlterReadwriteSplittingStorageUnitStatusStatement.class, 
AlterReadwriteSplittingStorageUnitStatusStatementHandler.class);
diff --git 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeHandler.java
 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdater.java
similarity index 75%
rename from 
proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeHandler.java
rename to 
proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdater.java
index 085d2dab2f4..8d4d278f61a 100644
--- 
a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeHandler.java
+++ 
b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdater.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.UnlabelComputeNodeStatement;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
@@ -24,9 +25,8 @@ 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.util.Collection;
@@ -35,25 +35,31 @@ import java.util.LinkedHashSet;
 import java.util.Optional;
 
 /**
- * Unlabel compute node handler.
+ * Unlabel compute node updater.
  */
-public final class UnlabelComputeNodeHandler extends 
UpdatableRALBackendHandler<UnlabelComputeNodeStatement> {
+public final class UnlabelComputeNodeUpdater implements 
RALUpdater<UnlabelComputeNodeStatement> {
     
     @Override
-    protected void update(final ContextManager contextManager) {
+    public void executeUpdate(final String databaseName, final 
UnlabelComputeNodeStatement sqlStatement) {
         MetaDataPersistService persistService = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService();
-        ShardingSpherePreconditions.checkState(null != 
persistService.getRepository() && !(persistService.getRepository() instanceof 
StandalonePersistRepository),
+        ShardingSpherePreconditions.checkState(null != 
persistService.getRepository() && persistService.getRepository() instanceof 
ClusterPersistRepository,
                 () -> new UnsupportedSQLOperationException("Labels can only be 
removed in cluster mode"));
-        String instanceId = getSqlStatement().getInstanceId();
+        String instanceId = sqlStatement.getInstanceId();
+        ContextManager contextManager = 
ProxyContext.getInstance().getContextManager();
         Optional<ComputeNodeInstance> computeNodeInstance = 
contextManager.getInstanceContext().getComputeNodeInstanceById(instanceId);
         if (computeNodeInstance.isPresent()) {
             Collection<String> labels = new 
LinkedHashSet<>(computeNodeInstance.get().getLabels());
-            if (getSqlStatement().getLabels().isEmpty()) {
+            if (sqlStatement.getLabels().isEmpty()) {
                 
contextManager.getInstanceContext().getEventBusContext().post(new 
LabelsChangedEvent(instanceId, Collections.emptyList()));
             } else {
-                labels.removeAll(getSqlStatement().getLabels());
+                labels.removeAll(sqlStatement.getLabels());
                 
contextManager.getInstanceContext().getEventBusContext().post(new 
LabelsChangedEvent(instanceId, new ArrayList<>(labels)));
             }
         }
     }
+    
+    @Override
+    public String getType() {
+        return UnlabelComputeNodeStatement.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 485048adb06..ac7d881c3e5 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
@@ -17,3 +17,4 @@
 
 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.AlterInventoryIncrementalRuleUpdater
 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.LabelComputeNodeUpdater
+org.apache.shardingsphere.proxy.backend.handler.distsql.ral.updatable.UnlabelComputeNodeUpdater
diff --git 
a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdaterTest.java
 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdaterTest.java
new file mode 100644
index 00000000000..897bf358c74
--- /dev/null
+++ 
b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/UnlabelComputeNodeUpdaterTest.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.UnlabelComputeNodeStatement;
+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 UnlabelComputeNodeUpdaterTest extends ProxyContextRestorer {
+    
+    @Test(expected = UnsupportedSQLOperationException.class)
+    public void assertWithStandaloneMode() throws SQLException {
+        ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
+        ProxyContext.init(contextManager);
+        UnlabelComputeNodeUpdater updater = new UnlabelComputeNodeUpdater();
+        updater.executeUpdate("foo", mock(UnlabelComputeNodeStatement.class));
+    }
+}

Reply via email to