This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 885127f121e Add NewResourceMetaDataChangedSubscriber to refresh schema
meta data (#26421)
885127f121e is described below
commit 885127f121e70f693acc1234806696790af16b12
Author: zhaojinchao <[email protected]>
AuthorDate: Sun Jun 18 23:24:13 2023 +0800
Add NewResourceMetaDataChangedSubscriber to refresh schema meta data
(#26421)
* Add NewResourceMetaDataChangedSubscriber to refresh schema meta data
* Remove unless unit test
---
...riteSplittingRuleConfigurationEventBuilder.java | 12 +-
.../AddReadwriteSplittingConfigurationEvent.java | 2 +-
.../AlterReadwriteSplittingConfigurationEvent.java | 2 +-
...DeleteReadwriteSplittingConfigurationEvent.java | 2 +-
.../event/loadbalance/AlterLoadBalanceEvent.java | 2 +-
.../event/loadbalance/DeleteLoadBalanceEvent.java | 2 +-
.../converter/ReadwriteSplittingNodeConverter.java | 14 ---
.../ReadwriteSplittingConfigurationSubscriber.java | 6 +-
.../ReadwriteSplittingLoadBalanceSubscriber.java | 4 +-
.../ReadwriteSplittingNodeConverterTest.java | 6 -
.../persist/node/NewDatabaseMetaDataNode.java | 38 +++++-
.../persist/node/NewDatabaseMetaDataNodeTest.java | 22 +++-
.../event/datasource/AlterStorageUnitEvent.java | 2 +-
.../event/datasource/RegisterStorageUnitEvent.java | 2 +-
.../datasource/UnregisterStorageUnitEvent.java | 2 +-
.../mode/event/schema/table/AlterTableEvent.java | 6 +-
.../mode/event/schema/table/DropTableEvent.java | 4 +
.../mode/event/schema/view/AlterViewEvent.java | 6 +-
.../mode/event/schema/view/DropViewEvent.java | 4 +
.../cluster/NewClusterModeContextManager.java | 3 +-
.../watcher/NewMetaDataChangedWatcher.java | 32 ++---
.../NewContextManagerSubscriberFacade.java | 2 +-
.../subscriber/NewDataSourceChangedSubscriber.java | 6 +-
.../NewResourceMetaDataChangedSubscriber.java | 137 +++++++++++++++++++++
24 files changed, 252 insertions(+), 66 deletions(-)
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
index bff5ed40184..bd728bbb2aa 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/ReadwriteSplittingRuleConfigurationEventBuilder.java
@@ -63,14 +63,13 @@ public final class
ReadwriteSplittingRuleConfigurationEventBuilder implements Ru
private Optional<GovernanceEvent>
createReadwriteSplittingConfigEvent(final String databaseName, final int
version, final DataChangedEvent event) {
String groupName =
ReadwriteSplittingNodeConverter.getGroupName(event.getKey()).orElse("");
- String activeVersionPath =
ReadwriteSplittingNodeConverter.appendActiveVersion(event.getKey());
if (Type.ADDED == event.getType()) {
- return Optional.of(new
AddReadwriteSplittingConfigurationEvent(databaseName, swapDataSource(groupName,
event.getValue()), activeVersionPath, version));
+ return Optional.of(new
AddReadwriteSplittingConfigurationEvent(databaseName, swapDataSource(groupName,
event.getValue()), event.getKey(), version));
}
if (Type.UPDATED == event.getType()) {
- return Optional.of(new
AlterReadwriteSplittingConfigurationEvent(databaseName,
swapDataSource(groupName, event.getValue()), activeVersionPath, version));
+ return Optional.of(new
AlterReadwriteSplittingConfigurationEvent(databaseName,
swapDataSource(groupName, event.getValue()), event.getKey(), version));
}
- return Optional.of(new
DeleteReadwriteSplittingConfigurationEvent(databaseName, groupName,
activeVersionPath, version));
+ return Optional.of(new
DeleteReadwriteSplittingConfigurationEvent(databaseName, groupName,
event.getKey(), version));
}
private ReadwriteSplittingDataSourceRuleConfiguration swapDataSource(final
String name, final String yamlContext) {
@@ -87,11 +86,10 @@ public final class
ReadwriteSplittingRuleConfigurationEventBuilder implements Ru
private Optional<GovernanceEvent> createLoadBalanceEvent(final String
databaseName, final int version, final DataChangedEvent event) {
String loadBalanceName =
ReadwriteSplittingNodeConverter.getLoadBalancerName(event.getKey()).orElse("");
- String activeVersionPath =
ReadwriteSplittingNodeConverter.appendActiveVersion(event.getKey());
if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
- return Optional.of(new AlterLoadBalanceEvent(databaseName,
loadBalanceName, swapToAlgorithmConfig(event.getValue()), activeVersionPath,
version));
+ return Optional.of(new AlterLoadBalanceEvent(databaseName,
loadBalanceName, swapToAlgorithmConfig(event.getValue()), event.getKey(),
version));
}
- return Optional.of(new DeleteLoadBalanceEvent(databaseName,
loadBalanceName, activeVersionPath, version));
+ return Optional.of(new DeleteLoadBalanceEvent(databaseName,
loadBalanceName, event.getKey(), version));
}
private AlgorithmConfiguration swapToAlgorithmConfig(final String
yamlContext) {
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/AddReadwriteSplittingConfigurationEvent.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/AddReadwriteSplittingConfigurationEvent.java
index 79a3aff7b4e..6affb7bf400 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/AddReadwriteSplittingConfigurationEvent.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/AddReadwriteSplittingConfigurationEvent.java
@@ -33,7 +33,7 @@ public final class AddReadwriteSplittingConfigurationEvent
implements Governance
private final ReadwriteSplittingDataSourceRuleConfiguration config;
- private final String activeVersionKey;
+ private final String versionKey;
private final int version;
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/AlterReadwriteSplittingConfigurationEvent.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/AlterReadwriteSplittingConfigurationEvent.java
index 66a9bdfdb98..e17987c4320 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/AlterReadwriteSplittingConfigurationEvent.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/AlterReadwriteSplittingConfigurationEvent.java
@@ -33,7 +33,7 @@ public final class AlterReadwriteSplittingConfigurationEvent
implements Governan
private final ReadwriteSplittingDataSourceRuleConfiguration config;
- private final String activeVersionKey;
+ private final String versionKey;
private final int version;
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/DeleteReadwriteSplittingConfigurationEvent.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/DeleteReadwriteSplittingConfigurationEvent.java
index 6c66911f008..2c5ec048a05 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/DeleteReadwriteSplittingConfigurationEvent.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/config/DeleteReadwriteSplittingConfigurationEvent.java
@@ -32,7 +32,7 @@ public final class DeleteReadwriteSplittingConfigurationEvent
implements Governa
private final String groupName;
- private final String activeVersionKey;
+ private final String versionKey;
private final int version;
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/AlterLoadBalanceEvent.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/AlterLoadBalanceEvent.java
index 70c699321e4..32546b28d31 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/AlterLoadBalanceEvent.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/AlterLoadBalanceEvent.java
@@ -35,7 +35,7 @@ public final class AlterLoadBalanceEvent implements
GovernanceEvent {
private final AlgorithmConfiguration config;
- private final String activeVersionKey;
+ private final String versionKey;
private final int version;
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/DeleteLoadBalanceEvent.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/DeleteLoadBalanceEvent.java
index 7b30623b323..782844e0938 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/DeleteLoadBalanceEvent.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/event/loadbalance/DeleteLoadBalanceEvent.java
@@ -32,7 +32,7 @@ public final class DeleteLoadBalanceEvent implements
GovernanceEvent {
private final String loadBalanceName;
- private final String activeVersionKey;
+ private final String versionKey;
private final int version;
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/metadata/converter/ReadwriteSplittingNodeConverter.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/metadata/converter/ReadwriteSplittingNodeConverter.java
index b6a4a8e3165..9a0d7fbb573 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/metadata/converter/ReadwriteSplittingNodeConverter.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/metadata/converter/ReadwriteSplittingNodeConverter.java
@@ -36,10 +36,6 @@ public final class ReadwriteSplittingNodeConverter {
private static final String LOAD_BALANCER_NODE = "load_balancers";
- private static final String VERSIONS = "versions";
-
- private static final String ACTIVE_VERSION = "active_version";
-
private static final String RULES_NODE_PREFIX =
"/([\\w\\-]+)/([\\w\\-]+)/rules/";
private static final String RULE_NAME_PATTERN = "/([\\w\\-]+)/versions/?";
@@ -149,14 +145,4 @@ public final class ReadwriteSplittingNodeConverter {
Matcher matcher = pattern.matcher(rulePath);
return matcher.find() ? Optional.of(matcher.group(3)) :
Optional.empty();
}
-
- /**
- * Append active version.
- *
- * @param rulePath rule path
- * @return group name
- */
- public static String appendActiveVersion(final String rulePath) {
- return rulePath.substring(0, rulePath.indexOf(VERSIONS)) +
ACTIVE_VERSION;
- }
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingConfigurationSubscriber.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingConfigurationSubscriber.java
index 76a4184dcee..7332bd77806 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingConfigurationSubscriber.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingConfigurationSubscriber.java
@@ -59,7 +59,7 @@ public final class ReadwriteSplittingConfigurationSubscriber
implements RuleConf
*/
@Subscribe
public synchronized void renew(final
AddReadwriteSplittingConfigurationEvent event) {
- if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))
{
+ if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
return;
}
ShardingSphereDatabase database =
databases.get(event.getDatabaseName());
@@ -82,7 +82,7 @@ public final class ReadwriteSplittingConfigurationSubscriber
implements RuleConf
*/
@Subscribe
public synchronized void renew(final
AlterReadwriteSplittingConfigurationEvent event) {
- if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))
{
+ if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
return;
}
ShardingSphereDatabase database =
databases.get(event.getDatabaseName());
@@ -100,7 +100,7 @@ public final class
ReadwriteSplittingConfigurationSubscriber implements RuleConf
*/
@Subscribe
public synchronized void renew(final
DeleteReadwriteSplittingConfigurationEvent event) {
- if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))
{
+ if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
return;
}
ShardingSphereDatabase database =
databases.get(event.getDatabaseName());
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingLoadBalanceSubscriber.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingLoadBalanceSubscriber.java
index 2b27a8f19ca..274d470068c 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingLoadBalanceSubscriber.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/subscriber/ReadwriteSplittingLoadBalanceSubscriber.java
@@ -55,7 +55,7 @@ public final class ReadwriteSplittingLoadBalanceSubscriber
implements RuleConfig
*/
@Subscribe
public synchronized void renew(final AlterLoadBalanceEvent event) {
- if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))
{
+ if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
return;
}
ShardingSphereDatabase database =
databases.get(event.getDatabaseName());
@@ -70,7 +70,7 @@ public final class ReadwriteSplittingLoadBalanceSubscriber
implements RuleConfig
*/
@Subscribe
public synchronized void renew(final DeleteLoadBalanceEvent event) {
- if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))
{
+ if (event.getVersion() <
instanceContext.getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
return;
}
ShardingSphereDatabase database =
databases.get(event.getDatabaseName());
diff --git
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/metadata/converter/ReadwriteSplittingNodeConverterTest.java
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/metadata/converter/ReadwriteSplittingNodeConverterTest.java
index 1890d04d928..c2e2f5846cd 100644
---
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/metadata/converter/ReadwriteSplittingNodeConverterTest.java
+++
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/metadata/converter/ReadwriteSplittingNodeConverterTest.java
@@ -75,10 +75,4 @@ class ReadwriteSplittingNodeConverterTest {
assertTrue(actual.isPresent());
assertThat(actual.get(), is("random"));
}
-
- @Test
- void assertAppendActiveVersion() {
-
assertThat(ReadwriteSplittingNodeConverter.appendActiveVersion("/metadata/foo_db/rules/readwrite_splitting/load_balancers/random/versions/0"),
-
is("/metadata/foo_db/rules/readwrite_splitting/load_balancers/random/active_version"));
- }
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
index 0bc06538d89..a0ccc916be3 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNode.java
@@ -343,11 +343,23 @@ public final class NewDatabaseMetaDataNode {
* @return table name
*/
public static Optional<String> getTableName(final String path) {
- Pattern pattern = Pattern.compile(getMetaDataNodeNode() +
"/([\\w\\-]+)/schemas/([\\w\\-]+)/tables" + "/([\\w\\-]+)$",
Pattern.CASE_INSENSITIVE);
+ Pattern pattern = Pattern.compile(getMetaDataNodeNode() +
"/([\\w\\-]+)/schemas/([\\w\\-]+)/tables" + "/([\\w\\-]+)?",
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(path);
return matcher.find() ? Optional.of(matcher.group(3)) :
Optional.empty();
}
+ /**
+ * Get table name version.
+ *
+ * @param path path
+ * @return table name version
+ */
+ public static Optional<String> getTableNameVersion(final String path) {
+ Pattern pattern = Pattern.compile(getMetaDataNodeNode() +
"/([\\w\\-]+)/schemas/([\\w\\-]+)/tables" +
"/([\\w\\-]+)/versions/([\\w\\-]+)$", Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(path);
+ return matcher.find() ? Optional.of(matcher.group(4)) :
Optional.empty();
+ }
+
/**
* Get view name.
*
@@ -355,11 +367,33 @@ public final class NewDatabaseMetaDataNode {
* @return view name
*/
public static Optional<String> getViewName(final String path) {
- Pattern pattern = Pattern.compile(getMetaDataNodeNode() +
"/([\\w\\-]+)/schemas/([\\w\\-]+)/views" + "/([\\w\\-]+)$",
Pattern.CASE_INSENSITIVE);
+ Pattern pattern = Pattern.compile(getMetaDataNodeNode() +
"/([\\w\\-]+)/schemas/([\\w\\-]+)/views" + "/([\\w\\-]+)?",
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(path);
return matcher.find() ? Optional.of(matcher.group(3)) :
Optional.empty();
}
+ /**
+ * Get view name version.
+ *
+ * @param path path
+ * @return view name version
+ */
+ public static Optional<String> getViewNameVersion(final String path) {
+ Pattern pattern = Pattern.compile(getMetaDataNodeNode() +
"/([\\w\\-]+)/schemas/([\\w\\-]+)/views" +
"/([\\w\\-]+)/versions/([\\w\\-]+)$", Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(path);
+ return matcher.find() ? Optional.of(matcher.group(4)) :
Optional.empty();
+ }
+
+ /**
+ * Decorate active version.
+ *
+ * @param rulePath rule path
+ * @return group name
+ */
+ public static String decorateActiveVersion(final String rulePath) {
+ return rulePath.substring(0, rulePath.indexOf(VERSIONS)) +
ACTIVE_VERSION;
+ }
+
private static String getMetaDataNodeNode() {
return String.join("/", "", ROOT_NODE);
}
diff --git
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNodeTest.java
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNodeTest.java
index 0c9fcebf041..d86f504a6d8 100644
---
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNodeTest.java
+++
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/NewDatabaseMetaDataNodeTest.java
@@ -77,11 +77,18 @@ class NewDatabaseMetaDataNodeTest {
@Test
void assertGetTableName() {
- Optional<String> actual =
NewDatabaseMetaDataNode.getTableName("/metadata/foo_db/schemas/foo_schema/tables/foo_table");
+ Optional<String> actual =
NewDatabaseMetaDataNode.getTableName("/metadata/foo_db/schemas/foo_schema/tables/foo_table/versions/0");
assertTrue(actual.isPresent());
assertThat(actual.get(), is("foo_table"));
}
+ @Test
+ void assertGetTableVersion() {
+ Optional<String> actual =
NewDatabaseMetaDataNode.getTableNameVersion("/metadata/foo_db/schemas/foo_schema/tables/foo_table/versions/0");
+ assertTrue(actual.isPresent());
+ assertThat(actual.get(), is("0"));
+ }
+
@Test
void assertGetViewName() {
Optional<String> actual =
NewDatabaseMetaDataNode.getViewName("/metadata/foo_db/schemas/foo_schema/views/foo_view");
@@ -89,6 +96,19 @@ class NewDatabaseMetaDataNodeTest {
assertThat(actual.get(), is("foo_view"));
}
+ @Test
+ void assertGetViewNameVersion() {
+ Optional<String> actual =
NewDatabaseMetaDataNode.getViewNameVersion("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0");
+ assertTrue(actual.isPresent());
+ assertThat(actual.get(), is("0"));
+ }
+
+ @Test
+ void assertDecorateActiveVersion() {
+
assertThat(NewDatabaseMetaDataNode.decorateActiveVersion("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0"),
+
is("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version"));
+ }
+
@Test
void assertGetMetaDataDataSourcesNode() {
assertThat(NewDatabaseMetaDataNode.getDataSourcesNode("foo_db"),
is("/metadata/foo_db/data_sources"));
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/AlterStorageUnitEvent.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/AlterStorageUnitEvent.java
index a2ae0660d82..14071820767 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/AlterStorageUnitEvent.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/AlterStorageUnitEvent.java
@@ -35,7 +35,7 @@ public final class AlterStorageUnitEvent implements
GovernanceEvent {
private final DataSourceProperties props;
- private final String activeVersionKey;
+ private final String versionKey;
private final int version;
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/RegisterStorageUnitEvent.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/RegisterStorageUnitEvent.java
index 7b55f07c1b2..18b5e01cbb4 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/RegisterStorageUnitEvent.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/RegisterStorageUnitEvent.java
@@ -35,7 +35,7 @@ public final class RegisterStorageUnitEvent implements
GovernanceEvent {
private final DataSourceProperties props;
- private final String activeVersionKey;
+ private final String versionKey;
private final int version;
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/UnregisterStorageUnitEvent.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/UnregisterStorageUnitEvent.java
index 4198e7647c4..7a036bf56d3 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/UnregisterStorageUnitEvent.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/datasource/UnregisterStorageUnitEvent.java
@@ -32,7 +32,7 @@ public final class UnregisterStorageUnitEvent implements
GovernanceEvent {
private final String storageUnitName;
- private final String activeVersionKey;
+ private final String versionKey;
private final int version;
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/table/AlterTableEvent.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/table/AlterTableEvent.java
index d96c7269f6a..278bb4fef71 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/table/AlterTableEvent.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/table/AlterTableEvent.java
@@ -33,7 +33,9 @@ public final class AlterTableEvent implements GovernanceEvent
{
private final String schemaName;
- private final String version;
-
private final ShardingSphereTable table;
+
+ private final int version;
+
+ private final String versionKey;
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/table/DropTableEvent.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/table/DropTableEvent.java
index 39378fa29da..27146d7c2bb 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/table/DropTableEvent.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/table/DropTableEvent.java
@@ -33,4 +33,8 @@ public final class DropTableEvent implements GovernanceEvent {
private final String schemaName;
private final String tableName;
+
+ private final int version;
+
+ private final String versionKey;
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/view/AlterViewEvent.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/view/AlterViewEvent.java
index 94b7490a38c..77914291c40 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/view/AlterViewEvent.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/view/AlterViewEvent.java
@@ -33,7 +33,9 @@ public final class AlterViewEvent implements GovernanceEvent {
private final String schemaName;
- private final String version;
-
private final ShardingSphereView view;
+
+ private final int version;
+
+ private final String versionKey;
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/view/DropViewEvent.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/view/DropViewEvent.java
index 80053c4ba6f..1054db29149 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/view/DropViewEvent.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/schema/view/DropViewEvent.java
@@ -33,4 +33,8 @@ public final class DropViewEvent implements GovernanceEvent {
private final String schemaName;
private final String viewName;
+
+ private final int version;
+
+ private final String versionKey;
}
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 2246184f0db..dd3c97a2188 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
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO;
import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
+import org.apache.shardingsphere.metadata.persist.node.NewDatabaseMetaDataNode;
import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerAware;
@@ -147,7 +148,7 @@ public final class NewClusterModeContextManager implements
ModeContextManager, C
@Override
public int getActiveVersionByKey(final String key) {
- String activeVersion =
contextManager.getMetaDataContexts().getPersistService().getRepository().getDirectly(key);
+ String activeVersion =
contextManager.getMetaDataContexts().getPersistService().getRepository().getDirectly(NewDatabaseMetaDataNode.decorateActiveVersion(key));
return Strings.isNullOrEmpty(activeVersion) ? 0 :
Integer.parseInt(activeVersion);
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
index ff5551da820..19e78207628 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/watcher/NewMetaDataChangedWatcher.java
@@ -81,13 +81,13 @@ public final class NewMetaDataChangedWatcher implements
NewGovernanceWatcher<Gov
return createSchemaChangedEvent(databaseName.get(),
schemaName.get(), event);
}
schemaName = NewDatabaseMetaDataNode.getSchemaNameByTableNode(key);
- Optional<String> tableName = NewDatabaseMetaDataNode.getTableName(key);
- if (databaseName.isPresent() && schemaName.isPresent() &&
tableName.isPresent()) {
- return createTableChangedEvent(databaseName.get(),
schemaName.get(), tableName.get(), event);
+ Optional<String> tableNameVersion =
NewDatabaseMetaDataNode.getTableNameVersion(key);
+ if (databaseName.isPresent() && schemaName.isPresent() &&
tableNameVersion.isPresent()) {
+ return createTableChangedEvent(databaseName.get(),
schemaName.get(), tableNameVersion.get(), event);
}
- Optional<String> viewName = NewDatabaseMetaDataNode.getViewName(key);
- if (databaseName.isPresent() && schemaName.isPresent() &&
viewName.isPresent()) {
- return createViewChangedEvent(databaseName.get(),
schemaName.get(), viewName.get(), event);
+ Optional<String> viewNameVersion =
NewDatabaseMetaDataNode.getViewNameVersion(key);
+ if (databaseName.isPresent() && schemaName.isPresent() &&
viewNameVersion.isPresent()) {
+ return createViewChangedEvent(databaseName.get(),
schemaName.get(), viewNameVersion.get(), event);
}
if (!databaseName.isPresent()) {
return Optional.empty();
@@ -118,16 +118,20 @@ public final class NewMetaDataChangedWatcher implements
NewGovernanceWatcher<Gov
return Optional.empty();
}
- private Optional<GovernanceEvent> createTableChangedEvent(final String
databaseName, final String schemaName, final String tableName, final
DataChangedEvent event) {
- return Type.DELETED == event.getType()
- ? Optional.of(new DropTableEvent(databaseName, schemaName,
tableName))
- : Optional.of(new AlterTableEvent(databaseName, schemaName,
null, new
YamlTableSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(),
YamlShardingSphereTable.class))));
+ private Optional<GovernanceEvent> createTableChangedEvent(final String
databaseName, final String schemaName, final String tableNameVersion, final
DataChangedEvent event) {
+ if (Type.DELETED == event.getType()) {
+ return Optional.of(new DropTableEvent(databaseName, schemaName,
NewDatabaseMetaDataNode.getTableName(event.getKey()).orElse(""),
Integer.parseInt(tableNameVersion), event.getKey()));
+ }
+ return Optional.of(new AlterTableEvent(databaseName, schemaName,
+ new
YamlTableSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(),
YamlShardingSphereTable.class)), Integer.parseInt(tableNameVersion),
event.getKey()));
}
- private Optional<GovernanceEvent> createViewChangedEvent(final String
databaseName, final String schemaName, final String viewName, final
DataChangedEvent event) {
- return Type.DELETED == event.getType()
- ? Optional.of(new DropViewEvent(databaseName, schemaName,
viewName))
- : Optional.of(new AlterViewEvent(databaseName, schemaName,
null, new YamlViewSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(),
YamlShardingSphereView.class))));
+ private Optional<GovernanceEvent> createViewChangedEvent(final String
databaseName, final String schemaName, final String viewNameVersion, final
DataChangedEvent event) {
+ if (Type.DELETED == event.getType()) {
+ return Optional.of(new DropViewEvent(databaseName, schemaName,
NewDatabaseMetaDataNode.getViewName(event.getKey()).orElse(""),
Integer.parseInt(viewNameVersion), event.getKey()));
+ }
+ return Optional.of(new AlterViewEvent(databaseName, schemaName,
+ new
YamlViewSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(),
YamlShardingSphereView.class)), Integer.parseInt(viewNameVersion),
event.getKey()));
}
@SuppressWarnings("unchecked")
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 1672cf8390c..03f52e00856 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
@@ -30,7 +30,7 @@ public final class NewContextManagerSubscriberFacade {
public NewContextManagerSubscriberFacade(final NewRegistryCenter
registryCenter, final ContextManager contextManager) {
new NewConfigurationChangedSubscriber(contextManager);
new NewDataSourceChangedSubscriber(contextManager);
- new ResourceMetaDataChangedSubscriber(contextManager);
+ new NewResourceMetaDataChangedSubscriber(contextManager);
new DatabaseChangedSubscriber(contextManager);
new NewStateChangedSubscriber(registryCenter, contextManager);
new NewProcessListChangedSubscriber(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
index 71100f34799..e90cb07e78d 100644
---
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
@@ -44,7 +44,7 @@ public final class NewDataSourceChangedSubscriber {
*/
@Subscribe
public void renew(final RegisterStorageUnitEvent event) {
- if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))
{
+ if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
return;
}
contextManager.registerStorageUnit(event.getDatabaseName(),
event.getStorageUnitName(), event.getProps());
@@ -57,7 +57,7 @@ public final class NewDataSourceChangedSubscriber {
*/
@Subscribe
public void renew(final AlterStorageUnitEvent event) {
- if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))
{
+ if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
return;
}
contextManager.alterStorageUnit(event.getDatabaseName(),
event.getStorageUnitName(), event.getProps());
@@ -70,7 +70,7 @@ public final class NewDataSourceChangedSubscriber {
*/
@Subscribe
public void renew(final UnregisterStorageUnitEvent event) {
- if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getActiveVersionKey()))
{
+ if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
return;
}
contextManager.unregisterStorageUnit(event.getDatabaseName(),
event.getStorageUnitName());
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewResourceMetaDataChangedSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewResourceMetaDataChangedSubscriber.java
new file mode 100644
index 00000000000..6122ff27d98
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/subscriber/NewResourceMetaDataChangedSubscriber.java
@@ -0,0 +1,137 @@
+/*
+ * 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.schema.table.AlterTableEvent;
+import org.apache.shardingsphere.mode.event.schema.table.DropTableEvent;
+import org.apache.shardingsphere.mode.event.schema.view.AlterViewEvent;
+import org.apache.shardingsphere.mode.event.schema.view.DropViewEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.DatabaseAddedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.DatabaseDeletedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.SchemaAddedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.SchemaDeletedEvent;
+
+/**
+ * TODO Rename ResourceMetaDataChangedSubscriber when metadata structure
adjustment completed. #25485
+ * Resource meta data changed subscriber.
+ */
+@SuppressWarnings("UnstableApiUsage")
+public final class NewResourceMetaDataChangedSubscriber {
+
+ private final ContextManager contextManager;
+
+ public NewResourceMetaDataChangedSubscriber(final ContextManager
contextManager) {
+ this.contextManager = contextManager;
+
contextManager.getInstanceContext().getEventBusContext().register(this);
+ }
+
+ /**
+ * Renew to persist meta data.
+ *
+ * @param event database added event
+ */
+ @Subscribe
+ public synchronized void renew(final DatabaseAddedEvent event) {
+ contextManager.addDatabase(event.getDatabaseName());
+ }
+
+ /**
+ * Renew to delete database.
+ *
+ * @param event database delete event
+ */
+ @Subscribe
+ public synchronized void renew(final DatabaseDeletedEvent event) {
+ contextManager.dropDatabase(event.getDatabaseName());
+ }
+
+ /**
+ * Renew to added schema.
+ *
+ * @param event schema added event
+ */
+ @Subscribe
+ public synchronized void renew(final SchemaAddedEvent event) {
+ contextManager.addSchema(event.getDatabaseName(),
event.getSchemaName());
+ }
+
+ /**
+ * Renew to delete schema.
+ *
+ * @param event schema delete event
+ */
+ @Subscribe
+ public synchronized void renew(final SchemaDeletedEvent event) {
+ contextManager.dropSchema(event.getDatabaseName(),
event.getSchemaName());
+ }
+
+ /**
+ * Renew table.
+ *
+ * @param event alter table event
+ */
+ @Subscribe
+ public synchronized void renew(final AlterTableEvent event) {
+ if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
+ return;
+ }
+ contextManager.alterSchema(event.getDatabaseName(),
event.getSchemaName(), event.getTable(), null);
+ }
+
+ /**
+ * Renew table.
+ *
+ * @param event drop table event
+ */
+ @Subscribe
+ public synchronized void renew(final DropTableEvent event) {
+ if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
+ return;
+ }
+ contextManager.alterSchema(event.getDatabaseName(),
event.getSchemaName(), event.getTableName(), null);
+
+ }
+
+ /**
+ * Renew view.
+ *
+ * @param event alter view event
+ */
+ @Subscribe
+ public synchronized void renew(final AlterViewEvent event) {
+ if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
+ return;
+ }
+ contextManager.alterSchema(event.getDatabaseName(),
event.getSchemaName(), null, event.getView());
+ }
+
+ /**
+ * Renew view.
+ *
+ * @param event drop view event
+ */
+ @Subscribe
+ public synchronized void renew(final DropViewEvent event) {
+ if (event.getVersion() <
contextManager.getInstanceContext().getModeContextManager().getActiveVersionByKey(event.getVersionKey()))
{
+ return;
+ }
+ contextManager.alterSchema(event.getDatabaseName(),
event.getSchemaName(), null, event.getViewName());
+ }
+}