You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/02/17 11:38:55 UTC
[shardingsphere] branch master updated: Verify active version for refresh data source and rule configuration (#15475)
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 0680399 Verify active version for refresh data source and rule configuration (#15475)
0680399 is described below
commit 0680399fc75a1b89e65d51e5fff05ea91f495480
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Thu Feb 17 19:37:52 2022 +0800
Verify active version for refresh data source and rule configuration (#15475)
---
.../metadata/persist/MetaDataPersistService.java | 4 ++
.../service/SchemaVersionPersistService.java | 55 ++++++++++++++++++++++
.../ClusterContextManagerCoordinator.java | 12 +++--
.../ClusterContextManagerCoordinatorTest.java | 2 +
4 files changed, 69 insertions(+), 4 deletions(-)
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
index 5161473..46c1739 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
import org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
import org.apache.shardingsphere.mode.metadata.persist.service.ComputeNodePersistService;
import org.apache.shardingsphere.mode.metadata.persist.service.SchemaMetaDataPersistService;
+import org.apache.shardingsphere.mode.metadata.persist.service.SchemaVersionPersistService;
import org.apache.shardingsphere.mode.metadata.persist.service.impl.DataSourcePersistService;
import org.apache.shardingsphere.mode.metadata.persist.service.impl.GlobalRulePersistService;
import org.apache.shardingsphere.mode.metadata.persist.service.impl.PropertiesPersistService;
@@ -60,6 +61,8 @@ public final class MetaDataPersistService {
private final ComputeNodePersistService computeNodePersistService;
+ private final SchemaVersionPersistService schemaVersionPersistService;
+
public MetaDataPersistService(final PersistRepository repository) {
this.repository = repository;
dataSourceService = new DataSourcePersistService(repository);
@@ -68,6 +71,7 @@ public final class MetaDataPersistService {
globalRuleService = new GlobalRulePersistService(repository);
propsService = new PropertiesPersistService(repository);
computeNodePersistService = new ComputeNodePersistService(repository);
+ schemaVersionPersistService = new SchemaVersionPersistService(repository);
}
/**
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaVersionPersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaVersionPersistService.java
new file mode 100644
index 0000000..eb99a0c
--- /dev/null
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaVersionPersistService.java
@@ -0,0 +1,55 @@
+/*
+ * 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.mode.metadata.persist.service;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.metadata.persist.node.SchemaMetaDataNode;
+import org.apache.shardingsphere.mode.persist.PersistRepository;
+
+import java.util.Optional;
+
+/**
+ * Schema version persist service.
+ */
+@RequiredArgsConstructor
+public final class SchemaVersionPersistService {
+
+ private final PersistRepository repository;
+
+ /**
+ * Get schema active version.
+ *
+ * @param schemaName schema name
+ * @return active version
+ */
+ public Optional<String> getSchemaActiveVersion(final String schemaName) {
+ return Optional.ofNullable(repository.get(SchemaMetaDataNode.getActiveVersionPath(schemaName)));
+ }
+
+ /**
+ * Verify the version is the active version.
+ *
+ * @param schemaName schema name
+ * @param version version
+ * @return true if the version is active version, false if not
+ */
+ public boolean isActiveVersion(final String schemaName, final String version) {
+ Optional<String> actualVersion = getSchemaActiveVersion(schemaName);
+ return actualVersion.isPresent() && actualVersion.get().equals(version);
+ }
+}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
index 011f35f..e7f4b83 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
@@ -128,8 +128,10 @@ public final class ClusterContextManagerCoordinator {
*/
@Subscribe
public synchronized void renew(final RuleConfigurationsChangedEvent event) {
- contextManager.alterRuleConfiguration(event.getSchemaName(), event.getRuleConfigurations());
- buildSpecialRules();
+ if (metaDataPersistService.getSchemaVersionPersistService().isActiveVersion(event.getSchemaName(), event.getSchemaVersion())) {
+ contextManager.alterRuleConfiguration(event.getSchemaName(), event.getRuleConfigurations());
+ buildSpecialRules();
+ }
}
/**
@@ -139,8 +141,10 @@ public final class ClusterContextManagerCoordinator {
*/
@Subscribe
public synchronized void renew(final DataSourceChangedEvent event) {
- contextManager.alterDataSourceConfiguration(event.getSchemaName(), event.getDataSourcePropertiesMap());
- buildSpecialRules();
+ if (metaDataPersistService.getSchemaVersionPersistService().isActiveVersion(event.getSchemaName(), event.getSchemaVersion())) {
+ contextManager.alterDataSourceConfiguration(event.getSchemaName(), event.getDataSourcePropertiesMap());
+ buildSpecialRules();
+ }
}
/**
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
index aedfa35..0586cfe 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinatorTest.java
@@ -171,6 +171,7 @@ public final class ClusterContextManagerCoordinatorTest {
@Test
public void assertRuleConfigurationsChanged() {
+ when(metaDataPersistService.getSchemaVersionPersistService().isActiveVersion("schema", "0")).thenReturn(Boolean.TRUE);
assertThat(contextManager.getMetaDataContexts().getMetaData("schema"), is(metaData));
RuleConfigurationsChangedEvent event = new RuleConfigurationsChangedEvent("schema", "0", new LinkedList<>());
coordinator.renew(event);
@@ -185,6 +186,7 @@ public final class ClusterContextManagerCoordinatorTest {
@Test
public void assertDataSourceChanged() {
+ when(metaDataPersistService.getSchemaVersionPersistService().isActiveVersion("schema", "0")).thenReturn(Boolean.TRUE);
DataSourceChangedEvent event = new DataSourceChangedEvent("schema", "0", getChangedDataSourcePropertiesMap());
coordinator.renew(event);
assertTrue(contextManager.getMetaDataContexts().getMetaData("schema").getResource().getDataSources().containsKey("ds_2"));