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 f4b0640bcd8 Adjust build change event logic when alter or delete meta 
data node (#30639)
f4b0640bcd8 is described below

commit f4b0640bcd8d2af0c6410a0480ee9a04822b2eca
Author: zhaojinchao <[email protected]>
AuthorDate: Mon Mar 25 20:41:55 2024 +0800

    Adjust build change event logic when alter or delete meta data node (#30639)
    
    * Adjust build change event logic when alter or delete meta data node
    
    * Fix bug
    
    * Fix checkstyle
---
 .../node/metadata/DataSourceMetaDataNode.java      | 54 +++++++++++++--
 .../persist/node/metadata/TableMetaDataNode.java   | 12 ++++
 .../persist/node/metadata/ViewMetaDataNode.java    | 12 ++++
 .../node/metadata/DataSourceMetaDataNodeTest.java  | 33 ++++++++-
 .../node/metadata/TableMetaDataNodeTest.java       |  5 ++
 .../node/metadata/ViewMetaDataNodeTest.java        |  5 ++
 .../metadata/watcher/MetaDataChangedWatcher.java   | 80 +++++++++++++---------
 7 files changed, 162 insertions(+), 39 deletions(-)

diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceMetaDataNode.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceMetaDataNode.java
index 706c83f1d8c..f87855d8917 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceMetaDataNode.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceMetaDataNode.java
@@ -46,6 +46,8 @@ public final class DataSourceMetaDataNode {
     
     private static final String ACTIVE_VERSION_SUFFIX = 
"/([\\w\\-]+)/active_version";
     
+    private static final String DATA_SOURCE_SUFFIX = "/([\\w\\-]+)$";
+    
     /**
      * Get data source units node.
      *
@@ -166,6 +168,18 @@ public final class DataSourceMetaDataNode {
         return Pattern.compile(getMetaDataNode() + DATABASE_DATA_SOURCES_NODE 
+ "?", Pattern.CASE_INSENSITIVE).matcher(path).find();
     }
     
+    /**
+     * Get data source name by data source unit active version node.
+     *
+     * @param path path
+     * @return data source name
+     */
+    public static Optional<String> 
getDataSourceNameByDataSourceUnitActiveVersionNode(final String path) {
+        Pattern pattern = Pattern.compile(getMetaDataNode() + 
DATABASE_DATA_SOURCES_NODE + DATA_SOURCE_UNITS_NODE + ACTIVE_VERSION_SUFFIX, 
Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(path);
+        return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
+    }
+    
     /**
      * Get data source name by data source unit node.
      *
@@ -173,19 +187,31 @@ public final class DataSourceMetaDataNode {
      * @return data source name
      */
     public static Optional<String> getDataSourceNameByDataSourceUnitNode(final 
String path) {
-        Pattern pattern = Pattern.compile(getMetaDataNode() + 
DATABASE_DATA_SOURCES_NODE + DATA_SOURCE_UNITS_NODE + "/([\\w\\-]+)?", 
Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile(getMetaDataNode() + 
DATABASE_DATA_SOURCES_NODE + DATA_SOURCE_UNITS_NODE + DATA_SOURCE_SUFFIX, 
Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
     }
     
     /**
-     * Get data source name by data source nodes node.
+     * Get data source name by data source node active version node.
      *
      * @param path path
      * @return data source name
      */
-    public static Optional<String> getDataSourceNameByDataSourceNode(final 
String path) {
-        Pattern pattern = Pattern.compile(getMetaDataNode() + 
DATABASE_DATA_SOURCES_NODE + DATA_SOURCE_NODES_NODE + "/([\\w\\-]+)?", 
Pattern.CASE_INSENSITIVE);
+    public static Optional<String> 
getDataSourceNameByDataSourceNodeActiveVersionNode(final String path) {
+        Pattern pattern = Pattern.compile(getMetaDataNode() + 
DATABASE_DATA_SOURCES_NODE + DATA_SOURCE_NODES_NODE + ACTIVE_VERSION_SUFFIX, 
Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(path);
+        return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
+    }
+    
+    /**
+     * Get data source name by data source node.
+     *
+     * @param path path
+     * @return data source name
+     */
+    public static Optional<String> getDataSourceNameByDataSourceNodeNode(final 
String path) {
+        Pattern pattern = Pattern.compile(getMetaDataNode() + 
DATABASE_DATA_SOURCES_NODE + DATA_SOURCE_NODES_NODE + DATA_SOURCE_SUFFIX, 
Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
     }
@@ -200,6 +226,16 @@ public final class DataSourceMetaDataNode {
         return Pattern.compile(getMetaDataNode() + DATABASE_DATA_SOURCES_NODE 
+ DATA_SOURCE_UNITS_NODE + ACTIVE_VERSION_SUFFIX, 
Pattern.CASE_INSENSITIVE).matcher(path).find();
     }
     
+    /**
+     * Is data source unit node.
+     *
+     * @param path path
+     * @return true or false
+     */
+    public static boolean isDataSourceUnitNode(final String path) {
+        return Pattern.compile(getMetaDataNode() + DATABASE_DATA_SOURCES_NODE 
+ DATA_SOURCE_UNITS_NODE + DATA_SOURCE_SUFFIX, 
Pattern.CASE_INSENSITIVE).matcher(path).find();
+    }
+    
     /**
      * Is data source node active version node.
      *
@@ -210,6 +246,16 @@ public final class DataSourceMetaDataNode {
         return Pattern.compile(getMetaDataNode() + DATABASE_DATA_SOURCES_NODE 
+ DATA_SOURCE_NODES_NODE + ACTIVE_VERSION_SUFFIX, 
Pattern.CASE_INSENSITIVE).matcher(path).find();
     }
     
+    /**
+     * Is data source node node.
+     *
+     * @param path path
+     * @return true or false
+     */
+    public static boolean isDataSourceNodeNode(final String path) {
+        return Pattern.compile(getMetaDataNode() + DATABASE_DATA_SOURCES_NODE 
+ DATA_SOURCE_NODES_NODE + DATA_SOURCE_SUFFIX, 
Pattern.CASE_INSENSITIVE).matcher(path).find();
+    }
+    
     private static String getMetaDataNode() {
         return String.join("/", "", ROOT_NODE);
     }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/TableMetaDataNode.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/TableMetaDataNode.java
index 7c05f6032aa..8740be20ec2 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/TableMetaDataNode.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/TableMetaDataNode.java
@@ -44,6 +44,8 @@ public final class TableMetaDataNode {
     
     private static final String ACTIVE_VERSION_SUFFIX = 
"/([\\w\\-]+)/active_version";
     
+    private static final String TABLE_SUFFIX = "/([\\w\\-]+)$";
+    
     /**
      * Get meta data tables node.
      *
@@ -138,6 +140,16 @@ public final class TableMetaDataNode {
         return Pattern.compile(getMetaDataNode() + TABLES_PATTERN + 
ACTIVE_VERSION_SUFFIX, Pattern.CASE_INSENSITIVE).matcher(path).find();
     }
     
+    /**
+     * Is table node.
+     *
+     * @param path path
+     * @return true or false
+     */
+    public static boolean isTableNode(final String path) {
+        return Pattern.compile(getMetaDataNode() + TABLES_PATTERN + 
TABLE_SUFFIX, Pattern.CASE_INSENSITIVE).matcher(path).find();
+    }
+    
     private static String getMetaDataNode() {
         return String.join("/", "", ROOT_NODE);
     }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/ViewMetaDataNode.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/ViewMetaDataNode.java
index 34c2f92bd35..cc1c628e2da 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/ViewMetaDataNode.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/metadata/ViewMetaDataNode.java
@@ -44,6 +44,8 @@ public final class ViewMetaDataNode {
     
     private static final String ACTIVE_VERSION_SUFFIX = 
"/([\\w\\-]+)/active_version";
     
+    private static final String VIEW_SUFFIX = "/([\\w\\-]+)$";
+    
     /**
      * Get meta data views node.
      *
@@ -138,6 +140,16 @@ public final class ViewMetaDataNode {
         return Pattern.compile(getMetaDataNode() + VIEWS_PATTERN + 
ACTIVE_VERSION_SUFFIX, Pattern.CASE_INSENSITIVE).matcher(path).find();
     }
     
+    /**
+     * Is view node.
+     *
+     * @param path path
+     * @return true or false
+     */
+    public static boolean isViewNode(final String path) {
+        return Pattern.compile(getMetaDataNode() + VIEWS_PATTERN + 
VIEW_SUFFIX, Pattern.CASE_INSENSITIVE).matcher(path).find();
+    }
+    
     private static String getMetaDataNode() {
         return String.join("/", "", ROOT_NODE);
     }
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceMetaDataNodeTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceMetaDataNodeTest.java
index 4c9cbf38bfc..5bebaba1fd9 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceMetaDataNodeTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/DataSourceMetaDataNodeTest.java
@@ -32,9 +32,30 @@ class DataSourceMetaDataNodeTest {
         
assertTrue(DataSourceMetaDataNode.isDataSourcesNode("/metadata/logic_db/data_sources/foo_ds"));
     }
     
+    @Test
+    void assertGetDataSourceNameByDataSourceUnitActiveVersionNode() {
+        Optional<String> actual = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitActiveVersionNode("/metadata/logic_db/data_sources/units/foo_ds/active_version");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get(), is("foo_ds"));
+    }
+    
     @Test
     void assertGetDataSourceNameByDataSourceUnitNode() {
-        Optional<String> actual = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitNode("/metadata/logic_db/data_sources/units/foo_ds/versions/0");
+        Optional<String> actual = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitNode("/metadata/logic_db/data_sources/units/foo_ds");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get(), is("foo_ds"));
+    }
+    
+    @Test
+    void assertGetDataSourceNameByDataSourceNodeActiveVersionNode() {
+        Optional<String> actual = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeActiveVersionNode("/metadata/logic_db/data_sources/nodes/foo_ds/active_version");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get(), is("foo_ds"));
+    }
+    
+    @Test
+    void assertGetDataSourceNameByDataSourceNodeNode() {
+        Optional<String> actual = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeNode("/metadata/logic_db/data_sources/nodes/foo_ds");
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("foo_ds"));
     }
@@ -44,6 +65,16 @@ class DataSourceMetaDataNodeTest {
         
assertTrue(DataSourceMetaDataNode.isDataSourceUnitActiveVersionNode("/metadata/logic_db/data_sources/units/foo_ds/active_version"));
     }
     
+    @Test
+    void assertIsDataSourceUnitNode() {
+        
assertTrue(DataSourceMetaDataNode.isDataSourceUnitNode("/metadata/logic_db/data_sources/units/foo_ds"));
+    }
+    
+    @Test
+    void assertIsDataSourceNodeNode() {
+        
assertTrue(DataSourceMetaDataNode.isDataSourceNodeNode("/metadata/logic_db/data_sources/nodes/foo_ds"));
+    }
+    
     @Test
     void assertIsDataSourceNodeActiveVersionNode() {
         
assertTrue(DataSourceMetaDataNode.isDataSourceNodeActiveVersionNode("/metadata/logic_db/data_sources/nodes/foo_ds/active_version"));
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/TableMetaDataNodeTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/TableMetaDataNodeTest.java
index 8af0ac316d5..abbaf8333f9 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/TableMetaDataNodeTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/TableMetaDataNodeTest.java
@@ -39,6 +39,11 @@ class TableMetaDataNodeTest {
         
assertTrue(TableMetaDataNode.isTableActiveVersionNode("/metadata/foo_db/schemas/foo_schema/tables/foo_table/active_version"));
     }
     
+    @Test
+    void assertIsTableNode() {
+        
assertTrue(TableMetaDataNode.isTableNode("/metadata/foo_db/schemas/foo_schema/tables/foo_table"));
+    }
+    
     @Test
     void assertGetTableActiveVersionNode() {
         assertThat(TableMetaDataNode.getTableActiveVersionNode("foo_db", 
"foo_schema", "foo_table"), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_table/active_version"));
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/ViewMetaDataNodeTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/ViewMetaDataNodeTest.java
index 444efffc664..87b6a97f40f 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/ViewMetaDataNodeTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/metadata/ViewMetaDataNodeTest.java
@@ -40,6 +40,11 @@ class ViewMetaDataNodeTest {
         
assertTrue(ViewMetaDataNode.isViewActiveVersionNode("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version"));
     }
     
+    @Test
+    void assertIsViewNode() {
+        
assertTrue(ViewMetaDataNode.isViewNode("/metadata/foo_db/schemas/foo_schema/views/foo_view"));
+    }
+    
     @Test
     void assertGetVersionNodeByActiveVersionPath() {
         
assertThat(DatabaseMetaDataNode.getVersionNodeByActiveVersionPath("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
 "0"),
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
index c3d21be85ea..94b1728ab9b 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/MetaDataChangedWatcher.java
@@ -78,10 +78,12 @@ public final class MetaDataChangedWatcher implements 
GovernanceWatcher<Governanc
             return createSchemaChangedEvent(databaseName.get(), 
schemaName.get(), event);
         }
         schemaName = DatabaseMetaDataNode.getSchemaNameByTableNode(key);
-        if (databaseName.isPresent() && schemaName.isPresent() && 
TableMetaDataNode.isTableActiveVersionNode(event.getKey())) {
+        if (databaseName.isPresent() && schemaName.isPresent() && 
(TableMetaDataNode.isTableActiveVersionNode(event.getKey()))
+                || TableMetaDataNode.isTableNode(event.getKey())) {
             return createTableChangedEvent(databaseName.get(), 
schemaName.get(), event);
         }
-        if (databaseName.isPresent() && schemaName.isPresent() && 
ViewMetaDataNode.isViewActiveVersionNode(event.getKey())) {
+        if (databaseName.isPresent() && schemaName.isPresent() && 
(ViewMetaDataNode.isViewActiveVersionNode(event.getKey())
+                || ViewMetaDataNode.isViewNode(event.getKey()))) {
             return createViewChangedEvent(databaseName.get(), 
schemaName.get(), event);
         }
         if (!databaseName.isPresent()) {
@@ -114,58 +116,68 @@ public final class MetaDataChangedWatcher implements 
GovernanceWatcher<Governanc
     }
     
     private Optional<GovernanceEvent> createTableChangedEvent(final String 
databaseName, final String schemaName, final DataChangedEvent event) {
-        Optional<String> tableName = 
TableMetaDataNode.getTableNameByActiveVersionNode(event.getKey());
-        Preconditions.checkState(tableName.isPresent(), "Not found table 
name.");
-        if (Type.DELETED == event.getType()) {
+        if (Type.DELETED == event.getType() && 
TableMetaDataNode.isTableNode(event.getKey())) {
+            Optional<String> tableName = 
TableMetaDataNode.getTableName(event.getKey());
+            Preconditions.checkState(tableName.isPresent(), "Not found table 
name.");
             return Optional.of(new DropTableEvent(databaseName, schemaName, 
tableName.get()));
         }
-        return Optional.of(new AlterTableEvent(databaseName, schemaName, 
tableName.get(), event.getKey(), event.getValue()));
+        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& TableMetaDataNode.isTableActiveVersionNode(event.getKey())) {
+            Optional<String> tableName = 
TableMetaDataNode.getTableNameByActiveVersionNode(event.getKey());
+            Preconditions.checkState(tableName.isPresent(), "Not found table 
name.");
+            return Optional.of(new AlterTableEvent(databaseName, schemaName, 
tableName.get(), event.getKey(), event.getValue()));
+        }
+        return Optional.empty();
     }
     
     private Optional<GovernanceEvent> createViewChangedEvent(final String 
databaseName, final String schemaName, final DataChangedEvent event) {
-        Optional<String> viewName = 
ViewMetaDataNode.getViewNameByActiveVersionNode(event.getKey());
-        Preconditions.checkState(viewName.isPresent(), "Not found view name.");
-        if (Type.DELETED == event.getType()) {
+        if (Type.DELETED == event.getType() && 
ViewMetaDataNode.isViewNode(event.getKey())) {
+            Optional<String> viewName = 
ViewMetaDataNode.getViewName(event.getKey());
+            Preconditions.checkState(viewName.isPresent(), "Not found view 
name.");
             return Optional.of(new DropViewEvent(databaseName, schemaName, 
viewName.get(), event.getKey(), event.getValue()));
         }
-        return Optional.of(new AlterViewEvent(databaseName, schemaName, 
viewName.get(), event.getKey(), event.getValue()));
+        if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) 
&& ViewMetaDataNode.isViewActiveVersionNode(event.getKey())) {
+            Optional<String> viewName = 
ViewMetaDataNode.getViewNameByActiveVersionNode(event.getKey());
+            Preconditions.checkState(viewName.isPresent(), "Not found view 
name.");
+            return Optional.of(new AlterViewEvent(databaseName, schemaName, 
viewName.get(), event.getKey(), event.getValue()));
+        }
+        return Optional.empty();
     }
     
     private Optional<GovernanceEvent> createDataSourceEvent(final String 
databaseName, final DataChangedEvent event) {
-        if 
(DataSourceMetaDataNode.isDataSourceUnitActiveVersionNode(event.getKey())) {
+        if 
(DataSourceMetaDataNode.isDataSourceUnitActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceUnitNode(event.getKey())) {
             return createStorageUnitChangedEvent(databaseName, event);
         }
-        if 
(DataSourceMetaDataNode.isDataSourceNodeActiveVersionNode(event.getKey())) {
+        if 
(DataSourceMetaDataNode.isDataSourceNodeActiveVersionNode(event.getKey()) || 
DataSourceMetaDataNode.isDataSourceNodeNode(event.getKey())) {
             return createStorageNodeChangedEvent(databaseName, event);
         }
         return Optional.empty();
     }
     
     private Optional<GovernanceEvent> createStorageUnitChangedEvent(final 
String databaseName, final DataChangedEvent event) {
-        Optional<String> dataSourceUnitName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitNode(event.getKey());
-        if (!dataSourceUnitName.isPresent()) {
-            return Optional.empty();
-        }
-        if (Type.ADDED == event.getType()) {
-            return Optional.of(new RegisterStorageUnitEvent(databaseName, 
dataSourceUnitName.get(), event.getKey(), event.getValue()));
-        }
-        if (Type.UPDATED == event.getType()) {
-            return Optional.of(new AlterStorageUnitEvent(databaseName, 
dataSourceUnitName.get(), event.getKey(), event.getValue()));
-        }
-        return Optional.of(new UnregisterStorageUnitEvent(databaseName, 
dataSourceUnitName.get()));
+        Optional<String> dataSourceUnitName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitActiveVersionNode(event.getKey());
+        if (dataSourceUnitName.isPresent()) {
+            if (Type.ADDED == event.getType()) {
+                return Optional.of(new RegisterStorageUnitEvent(databaseName, 
dataSourceUnitName.get(), event.getKey(), event.getValue()));
+            }
+            if (Type.UPDATED == event.getType()) {
+                return Optional.of(new AlterStorageUnitEvent(databaseName, 
dataSourceUnitName.get(), event.getKey(), event.getValue()));
+            }
+        }
+        dataSourceUnitName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitNode(event.getKey());
+        return dataSourceUnitName.map(optional -> new 
UnregisterStorageUnitEvent(databaseName, optional));
     }
     
     private Optional<GovernanceEvent> createStorageNodeChangedEvent(final 
String databaseName, final DataChangedEvent event) {
-        Optional<String> dataSourceNodeName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceNode(event.getKey());
-        if (!dataSourceNodeName.isPresent()) {
-            return Optional.empty();
-        }
-        if (Type.ADDED == event.getType()) {
-            return Optional.of(new RegisterStorageNodeEvent(databaseName, 
dataSourceNodeName.get(), event.getKey(), event.getValue()));
-        }
-        if (Type.UPDATED == event.getType()) {
-            return Optional.of(new AlterStorageNodeEvent(databaseName, 
dataSourceNodeName.get(), event.getKey(), event.getValue()));
-        }
-        return Optional.of(new UnregisterStorageNodeEvent(databaseName, 
dataSourceNodeName.get()));
+        Optional<String> dataSourceNodeName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeActiveVersionNode(event.getKey());
+        if (dataSourceNodeName.isPresent()) {
+            if (Type.ADDED == event.getType()) {
+                return Optional.of(new RegisterStorageNodeEvent(databaseName, 
dataSourceNodeName.get(), event.getKey(), event.getValue()));
+            }
+            if (Type.UPDATED == event.getType()) {
+                return Optional.of(new AlterStorageNodeEvent(databaseName, 
dataSourceNodeName.get(), event.getKey(), event.getValue()));
+            }
+        }
+        dataSourceNodeName = 
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeNode(event.getKey());
+        return dataSourceNodeName.map(optional -> new 
UnregisterStorageNodeEvent(databaseName, optional));
     }
 }

Reply via email to