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 3143d8d8a77 Refactor ClusterMetaDataManagerPersistService (#34246)
3143d8d8a77 is described below
commit 3143d8d8a77e533620bb28b952866db8bae73f22
Author: Haoran Meng <[email protected]>
AuthorDate: Sun Jan 5 11:40:03 2025 +0800
Refactor ClusterMetaDataManagerPersistService (#34246)
* Revert "Get reloaded metadata asynchronously after rule configuration
altered (#34236)"
This reverts commit 2849b62a
* Refactor ClusterMetaDataManagerPersistService
---
.../mode/metadata/MetaDataContextHolder.java | 64 ----------------------
.../mode/metadata/MetaDataContextManager.java | 5 +-
.../manager/DatabaseRuleConfigurationManager.java | 16 +++---
.../mode/metadata/MetaDataContextHolderTest.java | 46 ----------------
.../ClusterMetaDataManagerPersistService.java | 21 +++----
5 files changed, 20 insertions(+), 132 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextHolder.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextHolder.java
deleted file mode 100644
index fe69035f9cd..00000000000
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextHolder.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Meta data context holder.
- */
-@RequiredArgsConstructor
-@Slf4j
-public final class MetaDataContextHolder {
-
- @Getter
- private final AtomicReference<MetaDataContexts> metaDataContexts;
-
- private final CompletableFuture<MetaDataContexts> future = new
CompletableFuture<>();
-
- /**
- * Get meta data contexts.
- *
- * @return meta data contexts
- */
- public MetaDataContexts getMetaDataContextsAsync() {
- try {
- return future.get(5L, TimeUnit.SECONDS);
- } catch (final InterruptedException | ExecutionException |
TimeoutException ex) {
- return metaDataContexts.get();
- }
- }
-
- /**
- * Update meta data contexts.
- *
- * @param reloadMetaDataContexts reload meta data contexts
- */
- public void updateMetaDataContextsAsync(final MetaDataContexts
reloadMetaDataContexts) {
- metaDataContexts.set(reloadMetaDataContexts);
- future.complete(reloadMetaDataContexts);
- }
-}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
index 4dee15f38ee..7da1734731d 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
@@ -74,16 +74,13 @@ public class MetaDataContextManager {
private final RuleConfigurationPersistDecorateEngine
ruleConfigPersistDecorateEngine;
- private final MetaDataContextHolder metaDataContextHolder;
-
public MetaDataContextManager(final AtomicReference<MetaDataContexts>
metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
final PersistRepository repository) {
this.metaDataContexts = metaDataContexts;
this.computeNodeInstanceContext = computeNodeInstanceContext;
- metaDataContextHolder = new MetaDataContextHolder(metaDataContexts);
resourceSwitchManager = new ResourceSwitchManager();
databaseManager = new
ShardingSphereDatabaseDataManager(metaDataContexts);
storageUnitManager = new StorageUnitManager(metaDataContexts,
computeNodeInstanceContext, repository, resourceSwitchManager);
- databaseRuleConfigurationManager = new
DatabaseRuleConfigurationManager(metaDataContextHolder,
computeNodeInstanceContext, repository);
+ databaseRuleConfigurationManager = new
DatabaseRuleConfigurationManager(metaDataContexts, computeNodeInstanceContext,
repository);
schemaMetaDataManager = new SchemaMetaDataManager(metaDataContexts,
repository);
ruleItemManager = new RuleItemManager(metaDataContexts, repository,
databaseRuleConfigurationManager);
globalConfigurationManager = new
GlobalConfigurationManager(metaDataContexts, repository);
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
index da56fddff54..50361e42ecd 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
@@ -27,7 +27,6 @@ import
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextHolder;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
import org.apache.shardingsphere.mode.spi.PersistRepository;
@@ -36,6 +35,7 @@ import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Optional;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@@ -43,15 +43,15 @@ import java.util.stream.Collectors;
*/
public final class DatabaseRuleConfigurationManager {
- private final MetaDataContextHolder metaDataContextHolder;
+ private final AtomicReference<MetaDataContexts> metaDataContexts;
private final ComputeNodeInstanceContext computeNodeInstanceContext;
private final MetaDataPersistService metaDataPersistService;
- public DatabaseRuleConfigurationManager(final MetaDataContextHolder
metaDataContextHolder, final ComputeNodeInstanceContext
computeNodeInstanceContext,
+ public DatabaseRuleConfigurationManager(final
AtomicReference<MetaDataContexts> metaDataContexts, final
ComputeNodeInstanceContext computeNodeInstanceContext,
final PersistRepository
repository) {
- this.metaDataContextHolder = metaDataContextHolder;
+ this.metaDataContexts = metaDataContexts;
this.computeNodeInstanceContext = computeNodeInstanceContext;
metaDataPersistService = new MetaDataPersistService(repository);
}
@@ -65,7 +65,7 @@ public final class DatabaseRuleConfigurationManager {
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public synchronized void alterRuleConfiguration(final String databaseName,
final RuleConfiguration ruleConfig) throws SQLException {
- ShardingSphereDatabase database =
metaDataContextHolder.getMetaDataContexts().get().getMetaData().getDatabase(databaseName);
+ ShardingSphereDatabase database =
metaDataContexts.get().getMetaData().getDatabase(databaseName);
Collection<ShardingSphereRule> rules = new
LinkedList<>(database.getRuleMetaData().getRules());
Optional<ShardingSphereRule> toBeChangedRule =
rules.stream().filter(each ->
each.getConfiguration().getClass().equals(ruleConfig.getClass())).findFirst();
if (toBeChangedRule.isPresent() && toBeChangedRule.get() instanceof
PartialRuleUpdateSupported && ((PartialRuleUpdateSupported)
toBeChangedRule.get()).partialUpdate(ruleConfig)) {
@@ -87,7 +87,7 @@ public final class DatabaseRuleConfigurationManager {
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public synchronized void dropRuleConfiguration(final String databaseName,
final RuleConfiguration ruleConfig) throws SQLException {
- ShardingSphereDatabase database =
metaDataContextHolder.getMetaDataContexts().get().getMetaData().getDatabase(databaseName);
+ ShardingSphereDatabase database =
metaDataContexts.get().getMetaData().getDatabase(databaseName);
Collection<ShardingSphereRule> rules = new
LinkedList<>(database.getRuleMetaData().getRules());
Optional<ShardingSphereRule> toBeChangedRule =
rules.stream().filter(each ->
each.getConfiguration().getClass().equals(ruleConfig.getClass())).findFirst();
if (toBeChangedRule.isPresent() && toBeChangedRule.get() instanceof
PartialRuleUpdateSupported && ((PartialRuleUpdateSupported)
toBeChangedRule.get()).partialUpdate(ruleConfig)) {
@@ -104,8 +104,8 @@ public final class DatabaseRuleConfigurationManager {
private void refreshMetadata(final String databaseName, final
Collection<RuleConfiguration> ruleConfigurations) throws SQLException {
MetaDataContexts reloadMetaDataContexts =
MetaDataContextsFactory.createByAlterRule(databaseName, false,
- ruleConfigurations,
metaDataContextHolder.getMetaDataContexts().get(), metaDataPersistService,
computeNodeInstanceContext);
-
metaDataContextHolder.updateMetaDataContextsAsync(reloadMetaDataContexts);
+ ruleConfigurations, metaDataContexts.get(),
metaDataPersistService, computeNodeInstanceContext);
+ metaDataContexts.set(reloadMetaDataContexts);
}
private Collection<RuleConfiguration> getRuleConfigurations(final
Collection<ShardingSphereRule> rules) {
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextHolderTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextHolderTest.java
deleted file mode 100644
index da176b16f1b..00000000000
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/MetaDataContextHolderTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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;
-
-import org.junit.jupiter.api.Test;
-
-import java.util.concurrent.atomic.AtomicReference;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.mockito.Mockito.mock;
-
-class MetaDataContextHolderTest {
-
- private final MetaDataContexts metaDataContexts =
mock(MetaDataContexts.class);
-
- private final MetaDataContextHolder metaDataContextHolder = new
MetaDataContextHolder(new AtomicReference<>(metaDataContexts));
-
- @Test
- void assertGetMetaDataContextsAsync() {
- assertThat(metaDataContextHolder.getMetaDataContextsAsync(),
is(metaDataContexts));
- }
-
- @Test
- void assertUpdateMetaDataContextsAsync() {
- assertThat(metaDataContextHolder.getMetaDataContextsAsync(),
is(metaDataContexts));
-
metaDataContextHolder.updateMetaDataContextsAsync(mock(MetaDataContexts.class));
- assertNotEquals(metaDataContextHolder.getMetaDataContextsAsync(),
metaDataContexts);
- }
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
index f6f9635da24..16f146c029d 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.mode.manager.cluster.persist.service;
+import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
@@ -214,12 +215,12 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
afterRuleConfigurationAltered(databaseName, originalMetaDataContexts);
}
+ @SneakyThrows(InterruptedException.class)
private void afterRuleConfigurationAltered(final String databaseName,
final MetaDataContexts originalMetaDataContexts) {
- MetaDataContexts reloadMetaDataContexts =
metaDataContextManager.getMetaDataContextHolder().getMetaDataContextsAsync();
- if (!reloadMetaDataContexts.equals(originalMetaDataContexts)) {
- metaDataPersistService.persistReloadDatabaseByAlter(
- databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
- }
+ Thread.sleep(3000L);
+ MetaDataContexts reloadMetaDataContexts =
metaDataContextManager.getMetaDataContexts().get();
+ metaDataPersistService.persistReloadDatabaseByAlter(
+ databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
}
@Override
@@ -236,12 +237,12 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
afterRuleConfigurationDropped(databaseName, originalMetaDataContexts);
}
+ @SneakyThrows(InterruptedException.class)
private void afterRuleConfigurationDropped(final String databaseName,
final MetaDataContexts originalMetaDataContexts) {
- MetaDataContexts reloadMetaDataContexts =
metaDataContextManager.getMetaDataContextHolder().getMetaDataContextsAsync();
- if (!reloadMetaDataContexts.equals(originalMetaDataContexts)) {
- metaDataPersistService.persistReloadDatabaseByDrop(
- databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
- }
+ Thread.sleep(3000L);
+ MetaDataContexts reloadMetaDataContexts =
metaDataContextManager.getMetaDataContexts().get();
+ metaDataPersistService.persistReloadDatabaseByDrop(
+ databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
}
@Override