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));
+ }
+}