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 2023/06/27 01:53:57 UTC

[shardingsphere] branch master updated: Refactor mask rule changed subscriber (#26595)

This is an automated email from the ASF dual-hosted git repository.

zhaojinchao 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 40bed8b1b42 Refactor mask rule changed subscriber (#26595)
40bed8b1b42 is described below

commit 40bed8b1b4258b4471a8775dc07c61aecee66a98
Author: ChenJiaHao <Pa...@163.com>
AuthorDate: Tue Jun 27 09:53:49 2023 +0800

    Refactor mask rule changed subscriber (#26595)
    
    * Refactor mask rule changed subscriber
    
    * Remove useless test
---
 .../convert/BroadcastNodeConverterTest.java        | 42 ----------------------
 .../mask/subscriber/MaskAlgorithmSubscriber.java   | 29 +++++++++++++--
 .../mask/subscriber/MaskTableSubscriber.java       | 19 +++++++---
 3 files changed, 41 insertions(+), 49 deletions(-)

diff --git a/features/broadcast/core/src/main/test/org/apache/shardingsphere/broadcast/metadata/convert/BroadcastNodeConverterTest.java b/features/broadcast/core/src/main/test/org/apache/shardingsphere/broadcast/metadata/convert/BroadcastNodeConverterTest.java
deleted file mode 100644
index 5087e3fcc9b..00000000000
--- a/features/broadcast/core/src/main/test/org/apache/shardingsphere/broadcast/metadata/convert/BroadcastNodeConverterTest.java
+++ /dev/null
@@ -1,42 +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.broadcast.metadata.convert;
-
-import org.apache.shardingsphere.broadcast.metadata.converter.BroadcastNodeConverter;
-import org.junit.jupiter.api.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-class BroadcastNodeConverterTest {
-    
-    @Test
-    void assertGetTableNamePath() {
-        assertThat(BroadcastNodeConverter.getTablesPath(), is("tables"));
-    }
-    
-    @Test
-    void assertCheckIsTargetRuleByRulePath() {
-        assertTrue(BroadcastNodeConverter.isBroadcastPath("/metadata/foo_db/rules/broadcast/tables"));
-        assertFalse(BroadcastNodeConverter.isBroadcastPath("/metadata/foo_db/rules/foo/tables/foo_table"));
-        assertTrue(BroadcastNodeConverter.isTablesActiveVersionPath("/metadata/foo_db/rules/broadcast/tables/active_version"));
-        assertFalse(BroadcastNodeConverter.isTablesActiveVersionPath("/metadata/foo_db/rules/broadcast/tables/versions/0"));
-    }
-}
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskAlgorithmSubscriber.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskAlgorithmSubscriber.java
index ad990d50898..916081baaee 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskAlgorithmSubscriber.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskAlgorithmSubscriber.java
@@ -27,12 +27,17 @@ import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.infra.yaml.config.pojo.algorithm.YamlAlgorithmConfiguration;
 import org.apache.shardingsphere.infra.yaml.config.swapper.algorithm.YamlAlgorithmConfigurationSwapper;
 import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
+import org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
 import org.apache.shardingsphere.mask.event.algorithm.AlterMaskAlgorithmEvent;
 import org.apache.shardingsphere.mask.event.algorithm.DeleteMaskAlgorithmEvent;
 import org.apache.shardingsphere.mask.rule.MaskRule;
 import org.apache.shardingsphere.mode.event.config.DatabaseRuleConfigurationChangedEvent;
 
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * Mask algorithm subscriber.
@@ -53,9 +58,27 @@ public final class MaskAlgorithmSubscriber implements RuleChangedSubscriber {
     @Subscribe
     public synchronized void renew(final AlterMaskAlgorithmEvent event) {
         ShardingSphereDatabase database = databases.get(event.getDatabaseName());
-        MaskRuleConfiguration config = (MaskRuleConfiguration) database.getRuleMetaData().getSingleRule(MaskRule.class).getConfiguration();
-        config.getMaskAlgorithms().put(event.getAlgorithmName(), swapToAlgorithmConfig(
-                instanceContext.getModeContextManager().getVersionPathByActiveVersionKey(event.getActiveVersionKey(), event.getActiveVersion())));
+        Optional<MaskRule> rule = database.getRuleMetaData().findSingleRule(MaskRule.class);
+        MaskRuleConfiguration config;
+        if (rule.isPresent()) {
+            config = (MaskRuleConfiguration) rule.get().getConfiguration();
+            if (null == config.getMaskAlgorithms()) {
+                Map<String, AlgorithmConfiguration> maskAlgorithms = new HashMap<>();
+                maskAlgorithms.put(event.getAlgorithmName(), swapToAlgorithmConfig(
+                        instanceContext.getModeContextManager().getVersionPathByActiveVersionKey(event.getActiveVersionKey(), event.getActiveVersion())));
+                config = new MaskRuleConfiguration(config.getTables(), maskAlgorithms);
+            } else {
+                config.getMaskAlgorithms().put(event.getAlgorithmName(), swapToAlgorithmConfig(
+                        instanceContext.getModeContextManager().getVersionPathByActiveVersionKey(event.getActiveVersionKey(), event.getActiveVersion())));
+            }
+        } else {
+            Collection<MaskTableRuleConfiguration> tables = new LinkedList<>();
+            Map<String, AlgorithmConfiguration> maskAlgorithms = new HashMap<>();
+            maskAlgorithms.put(event.getAlgorithmName(), swapToAlgorithmConfig(
+                    instanceContext.getModeContextManager().getVersionPathByActiveVersionKey(event.getActiveVersionKey(), event.getActiveVersion())));
+            config = new MaskRuleConfiguration(tables, maskAlgorithms);
+        }
+        instanceContext.getEventBusContext().post(new DatabaseRuleConfigurationChangedEvent(event.getDatabaseName(), config));
     }
     
     /**
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java
index adae5837f1a..deed79f2d19 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/subscriber/MaskTableSubscriber.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mask.subscriber;
 
 import com.google.common.eventbus.Subscribe;
 import lombok.Setter;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.rule.RuleChangedSubscriber;
@@ -33,7 +34,9 @@ import org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskTableRuleConfigur
 import org.apache.shardingsphere.mask.yaml.swapper.rule.YamlMaskTableRuleConfigurationSwapper;
 import org.apache.shardingsphere.mode.event.config.DatabaseRuleConfigurationChangedEvent;
 
-import java.util.Collections;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.Optional;
 
@@ -65,10 +68,18 @@ public final class MaskTableSubscriber implements RuleChangedSubscriber {
         MaskRuleConfiguration config;
         if (rule.isPresent()) {
             config = (MaskRuleConfiguration) rule.get().getConfiguration();
-            config.getTables().removeIf(each -> each.getName().equals(needToAddedConfig.getName()));
-            config.getTables().add(needToAddedConfig);
+            if (null == config.getTables()) {
+                Collection<MaskTableRuleConfiguration> tables = new LinkedList<>();
+                tables.add(needToAddedConfig);
+                config = new MaskRuleConfiguration(tables, config.getMaskAlgorithms());
+            } else {
+                config.getTables().add(needToAddedConfig);
+            }
         } else {
-            config = new MaskRuleConfiguration(Collections.singletonList(needToAddedConfig), Collections.emptyMap());
+            Collection<MaskTableRuleConfiguration> tables = new LinkedList<>();
+            tables.add(needToAddedConfig);
+            Map<String, AlgorithmConfiguration> maskAlgorithms = new HashMap<>();
+            config = new MaskRuleConfiguration(tables, maskAlgorithms);
         }
         instanceContext.getEventBusContext().post(new DatabaseRuleConfigurationChangedEvent(event.getDatabaseName(), config));
     }