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/28 04:36:13 UTC

[shardingsphere] branch master updated: Refactor drop database logic (#26650)

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

zhonghongsheng 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 a3accd3eb43 Refactor drop database logic (#26650)
a3accd3eb43 is described below

commit a3accd3eb4386274326188f7022e6b6c0b90ede7
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Wed Jun 28 12:36:06 2023 +0800

    Refactor drop database logic (#26650)
    
    * Refactor drop database logic
    
    * Merge NewDataSourceChangedSubscriber to NewConfigurationChangedSubscriber
---
 .../database/NewDatabaseRulePersistService.java    |  4 +-
 .../cluster/NewClusterModeContextManager.java      |  4 ++
 .../NewConfigurationChangedSubscriber.java         | 47 +++++++++++++
 .../NewContextManagerSubscriberFacade.java         |  1 -
 .../subscriber/NewDataSourceChangedSubscriber.java | 80 ----------------------
 5 files changed, 54 insertions(+), 82 deletions(-)

diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
index aaf25df995e..c91a28bafa4 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/NewDatabaseRulePersistService.java
@@ -104,7 +104,9 @@ public final class NewDatabaseRulePersistService extends AbstractPersistService
             if (dataNodes.isEmpty()) {
                 continue;
             }
-            deleteDataNodes(databaseName, entry.getValue().getRuleTagName().toLowerCase(), dataNodes);
+            List<YamlDataNode> result = new LinkedList<>(dataNodes);
+            Collections.reverse(result);
+            deleteDataNodes(databaseName, entry.getValue().getRuleTagName().toLowerCase(), result);
         }
     }
     
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
index 79151930a69..c0a550d98d5 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/NewClusterModeContextManager.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.mode.manager.cluster;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
 import org.apache.shardingsphere.infra.instance.mode.ModeContextManager;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
@@ -57,6 +58,9 @@ public final class NewClusterModeContextManager implements ModeContextManager, C
     
     @Override
     public void dropDatabase(final String databaseName) {
+        ShardingSphereDatabase database = contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName);
+        // TODO Avoid drop database to generate child node events
+        database.getRuleMetaData().getConfigurations().forEach(each -> removeRuleConfiguration(databaseName, each));
         contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().dropDatabase(databaseName);
     }
     
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
index 1341bbf6068..06d8a9be088 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewConfigurationChangedSubscriber.java
@@ -22,6 +22,9 @@ import org.apache.shardingsphere.mode.event.config.DatabaseRuleConfigurationChan
 import org.apache.shardingsphere.mode.event.config.global.AlterGlobalRuleConfigurationEvent;
 import org.apache.shardingsphere.mode.event.config.global.AlterPropertiesEvent;
 import org.apache.shardingsphere.mode.event.config.global.DeleteGlobalRuleConfigurationEvent;
+import org.apache.shardingsphere.mode.event.datasource.AlterStorageUnitEvent;
+import org.apache.shardingsphere.mode.event.datasource.RegisterStorageUnitEvent;
+import org.apache.shardingsphere.mode.event.datasource.UnregisterStorageUnitEvent;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 
 /**
@@ -38,6 +41,47 @@ public final class NewConfigurationChangedSubscriber {
         contextManager.getInstanceContext().getEventBusContext().register(this);
     }
     
+    /**
+     * Renew for register storage unit.
+     *
+     * @param event register storage unit event
+     */
+    @Subscribe
+    public void renew(final RegisterStorageUnitEvent event) {
+        if (!event.getActiveVersion().equals(contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
+            return;
+        }
+        contextManager.registerStorageUnit(event.getDatabaseName(),
+                contextManager.getMetaDataContexts().getPersistService().getDataSourceService().load(event.getDatabaseName(), event.getStorageUnitName()));
+    }
+    
+    /**
+     * Renew for alter storage unit.
+     *
+     * @param event register storage unit event
+     */
+    @Subscribe
+    public void renew(final AlterStorageUnitEvent event) {
+        if (!event.getActiveVersion().equals(contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
+            return;
+        }
+        contextManager.alterStorageUnit(event.getDatabaseName(), event.getStorageUnitName(),
+                contextManager.getMetaDataContexts().getPersistService().getDataSourceService().load(event.getDatabaseName(), event.getStorageUnitName()));
+    }
+    
+    /**
+     * Renew for unregister storage unit.
+     *
+     * @param event register storage unit event
+     */
+    @Subscribe
+    public void renew(final UnregisterStorageUnitEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
+        contextManager.unregisterStorageUnit(event.getDatabaseName(), event.getStorageUnitName());
+    }
+    
     /**
      * Renew for database rule configuration.
      *
@@ -45,6 +89,9 @@ public final class NewConfigurationChangedSubscriber {
      */
     @Subscribe
     public synchronized void renew(final DatabaseRuleConfigurationChangedEvent event) {
+        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
+            return;
+        }
         contextManager.alterRuleConfiguration(event.getDatabaseName(), event.getRuleConfig());
     }
     
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
index 03f52e00856..169b7221e15 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewContextManagerSubscriberFacade.java
@@ -29,7 +29,6 @@ public final class NewContextManagerSubscriberFacade {
     
     public NewContextManagerSubscriberFacade(final NewRegistryCenter registryCenter, final ContextManager contextManager) {
         new NewConfigurationChangedSubscriber(contextManager);
-        new NewDataSourceChangedSubscriber(contextManager);
         new NewResourceMetaDataChangedSubscriber(contextManager);
         new DatabaseChangedSubscriber(contextManager);
         new NewStateChangedSubscriber(registryCenter, contextManager);
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewDataSourceChangedSubscriber.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewDataSourceChangedSubscriber.java
deleted file mode 100644
index ab7b2d033a6..00000000000
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewDataSourceChangedSubscriber.java
+++ /dev/null
@@ -1,80 +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.manager.cluster.coordinator.subscriber;
-
-import com.google.common.eventbus.Subscribe;
-import org.apache.shardingsphere.mode.event.datasource.AlterStorageUnitEvent;
-import org.apache.shardingsphere.mode.event.datasource.RegisterStorageUnitEvent;
-import org.apache.shardingsphere.mode.event.datasource.UnregisterStorageUnitEvent;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-
-/**
- * TODO Rename DataSourceChangedSubscriber when metadata structure adjustment completed. #25485
- * New data source changed subscriber.
- */
-@SuppressWarnings("UnstableApiUsage")
-public final class NewDataSourceChangedSubscriber {
-    
-    private final ContextManager contextManager;
-    
-    public NewDataSourceChangedSubscriber(final ContextManager contextManager) {
-        this.contextManager = contextManager;
-        contextManager.getInstanceContext().getEventBusContext().register(this);
-    }
-    
-    /**
-     * Renew for register storage unit.
-     *
-     * @param event register storage unit event
-     */
-    @Subscribe
-    public void renew(final RegisterStorageUnitEvent event) {
-        if (!event.getActiveVersion().equals(contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
-            return;
-        }
-        contextManager.registerStorageUnit(event.getDatabaseName(),
-                contextManager.getMetaDataContexts().getPersistService().getDataSourceService().load(event.getDatabaseName(), event.getStorageUnitName()));
-    }
-    
-    /**
-     * Renew for alter storage unit.
-     *
-     * @param event register storage unit event
-     */
-    @Subscribe
-    public void renew(final AlterStorageUnitEvent event) {
-        if (!event.getActiveVersion().equals(contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))) {
-            return;
-        }
-        contextManager.alterStorageUnit(event.getDatabaseName(), event.getStorageUnitName(),
-                contextManager.getMetaDataContexts().getPersistService().getDataSourceService().load(event.getDatabaseName(), event.getStorageUnitName()));
-    }
-    
-    /**
-     * Renew for unregister storage unit.
-     *
-     * @param event register storage unit event
-     */
-    @Subscribe
-    public void renew(final UnregisterStorageUnitEvent event) {
-        if (!contextManager.getMetaDataContexts().getMetaData().containsDatabase(event.getDatabaseName())) {
-            return;
-        }
-        contextManager.unregisterStorageUnit(event.getDatabaseName(), event.getStorageUnitName());
-    }
-}