You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2025/01/12 08:05:50 UTC

(shardingsphere) branch master updated: Remove useless RuleConfigurationPersistDecorator (#34322)

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 e78d0bd4c1d Remove useless RuleConfigurationPersistDecorator (#34322)
e78d0bd4c1d is described below

commit e78d0bd4c1d8c243c88074ede4a274cc22eee347
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Jan 12 16:05:44 2025 +0800

    Remove useless RuleConfigurationPersistDecorator (#34322)
    
    * Simplify MetaDataContextsFactory
    
    * Remove useless RuleConfigurationPersistDecorator
---
 .../spi/RuleConfigurationPersistDecorator.java     | 66 ----------------
 .../mode/metadata/MetaDataContextManager.java      |  8 +-
 .../mode/metadata/MetaDataContextsFactory.java     | 32 ++------
 .../RuleConfigurationPersistDecorateEngine.java    | 78 -------------------
 ...RuleConfigurationPersistDecorateEngineTest.java | 91 ----------------------
 .../handler/global/GlobalRuleChangedHandler.java   |  8 +-
 .../ral/updatable/SetDistVariableExecutor.java     | 10 +--
 .../util/ClusterExportMetaDataGenerator.java       |  8 +-
 8 files changed, 14 insertions(+), 287 deletions(-)

diff --git a/mode/api/src/main/java/org/apache/shardingsphere/mode/spi/RuleConfigurationPersistDecorator.java b/mode/api/src/main/java/org/apache/shardingsphere/mode/spi/RuleConfigurationPersistDecorator.java
deleted file mode 100644
index dd6f12a5376..00000000000
--- a/mode/api/src/main/java/org/apache/shardingsphere/mode/spi/RuleConfigurationPersistDecorator.java
+++ /dev/null
@@ -1,66 +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.spi;
-
-import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
-
-/**
- * Rule configuration persist decorator.
- * 
- * @param <T> type of rule configuration
- */
-@SingletonSPI
-public interface RuleConfigurationPersistDecorator<T extends RuleConfiguration> extends TypedSPI {
-    
-    /**
-     * Decorate rule configuration.
-     *
-     * @param ruleConfig to be decorated rule configuration
-     * @return decorated rule configuration
-     */
-    T decorate(T ruleConfig);
-    
-    /**
-     * Check whether the rule configuration can be restored.
-     *
-     * @param ruleConfig rule configuration to be checked
-     * @return can be restored or not
-     */
-    boolean canBeRestored(T ruleConfig);
-    
-    /**
-     * Restore rule configuration.
-     *
-     * @param ruleConfig rule configuration to be restored
-     * @return restored rule configuration
-     */
-    RuleConfiguration restore(T ruleConfig);
-    
-    /**
-     * Get rule type.
-     *
-     * @return rule type
-     */
-    Class<? extends ShardingSphereRule> getRuleType();
-    
-    @Override
-    Class<T> getType();
-}
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 145b4d232db..785a811f438 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
@@ -28,7 +28,6 @@ import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import org.apache.shardingsphere.mode.metadata.decorator.RuleConfigurationPersistDecorateEngine;
 import org.apache.shardingsphere.mode.metadata.manager.DatabaseRuleConfigurationManager;
 import org.apache.shardingsphere.mode.metadata.manager.GlobalConfigurationManager;
 import org.apache.shardingsphere.mode.metadata.manager.ResourceSwitchManager;
@@ -72,8 +71,6 @@ public class MetaDataContextManager {
     
     private final GlobalConfigurationManager globalConfigurationManager;
     
-    private final RuleConfigurationPersistDecorateEngine ruleConfigPersistDecorateEngine;
-    
     public MetaDataContextManager(final AtomicReference<MetaDataContexts> metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext, final PersistRepository repository) {
         this.metaDataContexts = metaDataContexts;
         this.computeNodeInstanceContext = computeNodeInstanceContext;
@@ -85,7 +82,6 @@ public class MetaDataContextManager {
         ruleItemManager = new RuleItemManager(metaDataContexts, repository, databaseRuleConfigurationManager);
         globalConfigurationManager = new GlobalConfigurationManager(metaDataContexts, repository);
         metaDataPersistService = new MetaDataPersistService(repository);
-        ruleConfigPersistDecorateEngine = new RuleConfigurationPersistDecorateEngine(computeNodeInstanceContext);
     }
     
     /**
@@ -154,8 +150,8 @@ public class MetaDataContextManager {
                 .createChangedDatabase(database.getName(), false, switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService, computeNodeInstanceContext);
         metaDataContexts.get().getMetaData().putDatabase(changedDatabase);
         ConfigurationProperties props = new ConfigurationProperties(metaDataPersistService.getPropsService().load());
-        RuleMetaData changedGlobalMetaData = new RuleMetaData(GlobalRulesBuilder.buildRules(
-                ruleConfigPersistDecorateEngine.restore(metaDataPersistService.getGlobalRuleService().load()), metaDataContexts.get().getMetaData().getAllDatabases(), props));
+        Collection<RuleConfiguration> globalRuleConfigs = metaDataPersistService.getGlobalRuleService().load();
+        RuleMetaData changedGlobalMetaData = new RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, metaDataContexts.get().getMetaData().getAllDatabases(), props));
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 metaDataContexts.get().getMetaData().getAllDatabases(), metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), changedGlobalMetaData, props);
         MetaDataContexts result = new MetaDataContexts(metaData, ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index 69b164fccd8..3e0ab1a1a21 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -37,21 +37,16 @@ import org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUn
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
 import org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereSchemaData;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
-import org.apache.shardingsphere.mode.metadata.decorator.RuleConfigurationPersistDecorateEngine;
 import org.apache.shardingsphere.mode.metadata.factory.ExternalMetaDataFactory;
 import org.apache.shardingsphere.mode.metadata.factory.InternalMetaDataFactory;
 import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.mode.spi.RuleConfigurationPersistDecorator;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -98,9 +93,7 @@ public final class MetaDataContextsFactory {
         Collection<RuleConfiguration> globalRuleConfigs = persistService.getGlobalRuleService().load();
         ConfigurationProperties props = new ConfigurationProperties(persistService.getPropsService().load());
         Map<String, ShardingSphereDatabase> databases = InternalMetaDataFactory.create(persistService, effectiveDatabaseConfigs, props, instanceContext);
-        MetaDataContexts result = newMetaDataContexts(persistService, param, globalRuleConfigs, databases, props);
-        restoreRules(result, instanceContext);
-        return result;
+        return newMetaDataContexts(persistService, param, globalRuleConfigs, databases, props);
     }
     
     private static MetaDataContexts newMetaDataContexts(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param,
@@ -139,25 +132,10 @@ public final class MetaDataContextsFactory {
         }
     }
     
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    private static void restoreRules(final MetaDataContexts metaDataContexts, final ComputeNodeInstanceContext instanceContext) {
-        if (!instanceContext.getModeConfiguration().isCluster()) {
-            return;
-        }
-        for (RuleConfigurationPersistDecorator each : ShardingSphereServiceLoader.getServiceInstances(RuleConfigurationPersistDecorator.class)) {
-            ShardingSphereRule rule = metaDataContexts.getMetaData().getGlobalRuleMetaData().getSingleRule(each.getRuleType());
-            metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules().removeIf(eachRule -> each.getRuleType() == eachRule.getClass());
-            RuleConfiguration restoredRuleConfig = each.restore(rule.getConfiguration());
-            ShardingSphereRule rebuiltRule = GlobalRulesBuilder.buildRules(
-                    Collections.singleton(restoredRuleConfig), metaDataContexts.getMetaData().getAllDatabases(), metaDataContexts.getMetaData().getProps()).iterator().next();
-            metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules().add(rebuiltRule);
-        }
-    }
-    
-    private static void persistDatabaseConfigurations(final MetaDataContexts metadataContexts, final ContextManagerBuilderParameter param, final MetaDataPersistService persistService,
-                                                      final ComputeNodeInstanceContext instanceContext) {
-        RuleConfigurationPersistDecorateEngine ruleConfigPersistDecorateEngine = new RuleConfigurationPersistDecorateEngine(instanceContext);
-        persistService.persistGlobalRuleConfiguration(ruleConfigPersistDecorateEngine.decorate(metadataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations()), param.getProps());
+    private static void persistDatabaseConfigurations(final MetaDataContexts metadataContexts,
+                                                      final ContextManagerBuilderParameter param, final MetaDataPersistService persistService, final ComputeNodeInstanceContext instanceContext) {
+        Collection<RuleConfiguration> globalRuleConfigs = metadataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations();
+        persistService.persistGlobalRuleConfiguration(globalRuleConfigs, param.getProps());
         for (Entry<String, ? extends DatabaseConfiguration> entry : param.getDatabaseConfigs().entrySet()) {
             String databaseName = entry.getKey();
             persistService.persistConfigurations(entry.getKey(), entry.getValue(),
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/decorator/RuleConfigurationPersistDecorateEngine.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/decorator/RuleConfigurationPersistDecorateEngine.java
deleted file mode 100644
index af1a4dbade5..00000000000
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/decorator/RuleConfigurationPersistDecorateEngine.java
+++ /dev/null
@@ -1,78 +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.decorator;
-
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.spi.RuleConfigurationPersistDecorator;
-
-import java.util.Collection;
-import java.util.stream.Collectors;
-
-/**
- * Rule configuration persist decorate engine.
- */
-@RequiredArgsConstructor
-public final class RuleConfigurationPersistDecorateEngine {
-    
-    private final ComputeNodeInstanceContext computeNodeInstanceContext;
-    
-    /**
-     * Decorate rule configurations.
-     *
-     * @param ruleConfigs to be decorated rule configurations
-     * @return decorated rule configurations
-     */
-    @SuppressWarnings("unchecked")
-    public Collection<RuleConfiguration> decorate(final Collection<RuleConfiguration> ruleConfigs) {
-        if (!computeNodeInstanceContext.getModeConfiguration().isCluster()) {
-            return ruleConfigs;
-        }
-        return ruleConfigs.stream()
-                .map(each -> TypedSPILoader.findService(RuleConfigurationPersistDecorator.class, each.getClass()).map(optional -> optional.decorate(each)).orElse(each)).collect(Collectors.toList());
-    }
-    
-    /**
-     * Restore rule configurations.
-     *
-     * @param ruleConfigs to be restored rule configurations
-     * @return restored rule configurations
-     */
-    @SuppressWarnings("unchecked")
-    public Collection<RuleConfiguration> restore(final Collection<RuleConfiguration> ruleConfigs) {
-        if (!computeNodeInstanceContext.getModeConfiguration().isCluster()) {
-            return ruleConfigs;
-        }
-        return ruleConfigs.stream()
-                .map(each -> TypedSPILoader.findService(RuleConfigurationPersistDecorator.class, each.getClass()).map(optional -> optional.restore(each)).orElse(each)).collect(Collectors.toList());
-    }
-    
-    /**
-     * Try to restore rule configurations.
-     *
-     * @param ruleConfigs to be restored rule configurations
-     * @return restored rule configurations
-     */
-    @SuppressWarnings("unchecked")
-    public Collection<RuleConfiguration> tryRestore(final Collection<RuleConfiguration> ruleConfigs) {
-        return ruleConfigs.stream().map(each -> TypedSPILoader.findService(RuleConfigurationPersistDecorator.class, each.getClass())
-                .filter(optional -> optional.canBeRestored(each)).map(optional -> optional.restore(each)).orElse(each)).collect(Collectors.toList());
-    }
-}
diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/decorator/RuleConfigurationPersistDecorateEngineTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/decorator/RuleConfigurationPersistDecorateEngineTest.java
deleted file mode 100644
index 5c5d4644ff9..00000000000
--- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/decorator/RuleConfigurationPersistDecorateEngineTest.java
+++ /dev/null
@@ -1,91 +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.decorator;
-
-import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.spi.RuleConfigurationPersistDecorator;
-import org.apache.shardingsphere.test.mock.AutoMockExtension;
-import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(AutoMockExtension.class)
-@StaticMockSettings(TypedSPILoader.class)
-class RuleConfigurationPersistDecorateEngineTest {
-    
-    private RuleConfigurationPersistDecorateEngine decorateEngine;
-    
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ComputeNodeInstanceContext computeNodeInstanceContext;
-    
-    @BeforeEach
-    void setUp() {
-        decorateEngine = new RuleConfigurationPersistDecorateEngine(computeNodeInstanceContext);
-    }
-    
-    @Test
-    void assertDecorateIfNotClusterMode() {
-        Collection<RuleConfiguration> ruleConfigs = Collections.singleton(mock(RuleConfiguration.class));
-        assertThat(decorateEngine.decorate(ruleConfigs), is(ruleConfigs));
-    }
-    
-    @Test
-    void assertDecorateIfClusterMode() {
-        when(computeNodeInstanceContext.getModeConfiguration().isCluster()).thenReturn(true);
-        when(TypedSPILoader.findService(eq(RuleConfigurationPersistDecorator.class), any())).thenReturn(Optional.empty());
-        Collection<RuleConfiguration> ruleConfigs = Collections.singletonList(mock(RuleConfiguration.class));
-        assertThat(decorateEngine.decorate(ruleConfigs), is(ruleConfigs));
-    }
-    
-    @Test
-    void assertRestoreIfNotClusterMode() {
-        Collection<RuleConfiguration> ruleConfigs = Collections.singleton(mock(RuleConfiguration.class));
-        assertThat(decorateEngine.restore(ruleConfigs), is(ruleConfigs));
-    }
-    
-    @Test
-    void assertRestoreIfClusterMode() {
-        when(computeNodeInstanceContext.getModeConfiguration().isCluster()).thenReturn(true);
-        when(TypedSPILoader.findService(eq(RuleConfigurationPersistDecorator.class), any())).thenReturn(Optional.empty());
-        Collection<RuleConfiguration> ruleConfigs = Collections.singletonList(mock(RuleConfiguration.class));
-        assertThat(decorateEngine.restore(ruleConfigs), is(ruleConfigs));
-    }
-    
-    @Test
-    void assertTryRestore() {
-        when(TypedSPILoader.findService(eq(RuleConfigurationPersistDecorator.class), any())).thenReturn(Optional.empty());
-        Collection<RuleConfiguration> ruleConfigs = Collections.singletonList(mock(RuleConfiguration.class));
-        assertThat(decorateEngine.tryRestore(ruleConfigs), is(ruleConfigs));
-    }
-}
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/GlobalRuleChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/GlobalRuleChangedHandler.java
index fef06a5ffae..639f1ce7422 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/GlobalRuleChangedHandler.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/GlobalRuleChangedHandler.java
@@ -19,14 +19,12 @@ package org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.global;
 
 import com.google.common.base.Preconditions;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.node.GlobalNodePath;
 import org.apache.shardingsphere.mode.event.DataChangedEvent;
 import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.manager.cluster.dispatch.checker.ActiveVersionChecker;
 import org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.DataChangedEventHandler;
-import org.apache.shardingsphere.mode.spi.RuleConfigurationPersistDecorator;
+import org.apache.shardingsphere.mode.metadata.persist.node.GlobalNodePath;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -47,7 +45,6 @@ public final class GlobalRuleChangedHandler implements DataChangedEventHandler {
         return Arrays.asList(Type.ADDED, Type.UPDATED);
     }
     
-    @SuppressWarnings("unchecked")
     @Override
     public void handle(final ContextManager contextManager, final DataChangedEvent event) {
         if (!org.apache.shardingsphere.mode.path.GlobalNodePath.isRuleActiveVersionPath(event.getKey())) {
@@ -60,7 +57,6 @@ public final class GlobalRuleChangedHandler implements DataChangedEventHandler {
         ActiveVersionChecker.checkActiveVersion(contextManager, event);
         Optional<RuleConfiguration> ruleConfig = contextManager.getPersistServiceFacade().getMetaDataPersistService().getGlobalRuleService().load(ruleName.get());
         Preconditions.checkArgument(ruleConfig.isPresent(), "Can not find rule configuration with name: %s", ruleName.get());
-        contextManager.getMetaDataContextManager().getGlobalConfigurationManager().alterGlobalRuleConfiguration(
-                TypedSPILoader.findService(RuleConfigurationPersistDecorator.class, ruleConfig.get().getClass()).map(optional -> optional.restore(ruleConfig.get())).orElse(ruleConfig.get()));
+        contextManager.getMetaDataContextManager().getGlobalConfigurationManager().alterGlobalRuleConfiguration(ruleConfig.get());
     }
 }
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutor.java
index 3326907589b..cafc69fd255 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutor.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutor.java
@@ -36,7 +36,6 @@ import org.apache.shardingsphere.logging.constant.LoggingConstants;
 import org.apache.shardingsphere.logging.rule.LoggingRule;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.decorator.RuleConfigurationPersistDecorateEngine;
 import org.slf4j.LoggerFactory;
 
 import java.sql.SQLException;
@@ -104,7 +103,7 @@ public final class SetDistVariableExecutor implements DistSQLUpdateExecutor<SetD
         if (LoggingConstants.SQL_SHOW.equalsIgnoreCase(propertyKey.getKey())) {
             metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(LoggingRule.class).flatMap(LoggingRule::getSQLLogger).ifPresent(option -> {
                 option.getProps().setProperty(LoggingConstants.SQL_LOG_ENABLE, value);
-                decorateGlobalRuleConfiguration(contextManager);
+                persistGlobalRuleConfigurations(contextManager);
             });
         }
     }
@@ -113,14 +112,13 @@ public final class SetDistVariableExecutor implements DistSQLUpdateExecutor<SetD
         if (LoggingConstants.SQL_SIMPLE.equalsIgnoreCase(propertyKey.getKey())) {
             metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(LoggingRule.class).flatMap(LoggingRule::getSQLLogger).ifPresent(optional -> {
                 optional.getProps().setProperty(LoggingConstants.SQL_LOG_SIMPLE, value);
-                decorateGlobalRuleConfiguration(contextManager);
+                persistGlobalRuleConfigurations(contextManager);
             });
         }
     }
     
-    private void decorateGlobalRuleConfiguration(final ContextManager contextManager) {
-        RuleConfigurationPersistDecorateEngine ruleConfigPersistDecorateEngine = new RuleConfigurationPersistDecorateEngine(contextManager.getComputeNodeInstanceContext());
-        Collection<RuleConfiguration> globalRuleConfigs = ruleConfigPersistDecorateEngine.decorate(contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations());
+    private void persistGlobalRuleConfigurations(final ContextManager contextManager) {
+        Collection<RuleConfiguration> globalRuleConfigs = contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations();
         contextManager.getPersistServiceFacade().getMetaDataPersistService().getGlobalRuleService().persist(globalRuleConfigs);
     }
     
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/ClusterExportMetaDataGenerator.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/ClusterExportMetaDataGenerator.java
index f788c8967f6..3a5ddb3c29e 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/ClusterExportMetaDataGenerator.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/ClusterExportMetaDataGenerator.java
@@ -28,7 +28,6 @@ import org.apache.shardingsphere.infra.util.json.JsonUtils;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper;
 import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.decorator.RuleConfigurationPersistDecorateEngine;
 import org.apache.shardingsphere.proxy.backend.distsql.export.ExportedClusterInfo;
 import org.apache.shardingsphere.proxy.backend.distsql.export.ExportedMetaData;
 import org.apache.shardingsphere.proxy.backend.distsql.export.ExportedSnapshotInfo;
@@ -59,7 +58,7 @@ public final class ClusterExportMetaDataGenerator {
         ExportedMetaData exportedMetaData = new ExportedMetaData();
         exportedMetaData.setDatabases(generatorDatabasesExportData());
         exportedMetaData.setProps(generatePropsData(metaData.getProps().getProps()));
-        exportedMetaData.setRules(generateRulesData(getGlobalRules(metaData)));
+        exportedMetaData.setRules(generateRulesData(metaData.getGlobalRuleMetaData().getConfigurations()));
         ExportedClusterInfo exportedClusterInfo = new ExportedClusterInfo();
         exportedClusterInfo.setMetaData(exportedMetaData);
         generateSnapshotInfo(metaData, exportedClusterInfo);
@@ -91,11 +90,6 @@ public final class ClusterExportMetaDataGenerator {
         return result.toString();
     }
     
-    private Collection<RuleConfiguration> getGlobalRules(final ShardingSphereMetaData metaData) {
-        RuleConfigurationPersistDecorateEngine ruleConfigPersistDecorateEngine = new RuleConfigurationPersistDecorateEngine(contextManager.getComputeNodeInstanceContext());
-        return ruleConfigPersistDecorateEngine.decorate(metaData.getGlobalRuleMetaData().getConfigurations());
-    }
-    
     @SuppressWarnings({"rawtypes", "unchecked"})
     private String generateRulesData(final Collection<RuleConfiguration> rules) {
         if (rules.isEmpty()) {