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

Reply via email to