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 28cad28c6c7 Add more test cases for MetaDataChangedSubscriber (#32884)
28cad28c6c7 is described below
commit 28cad28c6c7a043e277bf612e1a196bd2896a965
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Sep 15 19:40:54 2024 +0800
Add more test cases for MetaDataChangedSubscriber (#32884)
---
.../dispatch/MetaDataChangedSubscriber.java | 33 +++++---
.../dispatch/MetaDataChangedSubscriberTest.java | 99 +++++++++++-----------
2 files changed, 70 insertions(+), 62 deletions(-)
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriber.java
index 10a93688bfa..f6ae7c6f754 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriber.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriber.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch
import com.google.common.base.Preconditions;
import com.google.common.eventbus.Subscribe;
-import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
@@ -41,12 +40,18 @@ import java.util.Map;
/**
* Meta data changed subscriber.
*/
-@RequiredArgsConstructor
@SuppressWarnings("unused")
public final class MetaDataChangedSubscriber implements EventSubscriber {
private final ContextManager contextManager;
+ private final ClusterPersistRepository repository;
+
+ public MetaDataChangedSubscriber(final ContextManager contextManager) {
+ this.contextManager = contextManager;
+ repository = (ClusterPersistRepository)
contextManager.getPersistServiceFacade().getRepository();
+ }
+
/**
* Renew to added schema.
*
@@ -76,10 +81,11 @@ public final class MetaDataChangedSubscriber implements
EventSubscriber {
*/
@Subscribe
public synchronized void renew(final CreateOrAlterTableEvent event) {
-
Preconditions.checkArgument(event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
- .getActiveVersionByFullPath(event.getActiveVersionKey())),
"Invalid active version: %s of key: %s", event.getActiveVersion(),
event.getActiveVersionKey());
- Map<String, ShardingSphereTable> tables =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService()
-
.getTableMetaDataPersistService().load(event.getDatabaseName(),
event.getSchemaName(), event.getTableName());
+ Preconditions.checkArgument(event.getActiveVersion().equals(
+
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())),
+ "Invalid active version: %s of key: %s",
event.getActiveVersion(), event.getActiveVersionKey());
+ Map<String, ShardingSphereTable> tables =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().getTableMetaDataPersistService()
+ .load(event.getDatabaseName(), event.getSchemaName(),
event.getTableName());
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
event.getSchemaName(), tables.values().iterator().next(), null);
refreshShardingSphereStatisticsData();
}
@@ -102,12 +108,12 @@ public final class MetaDataChangedSubscriber implements
EventSubscriber {
*/
@Subscribe
public synchronized void renew(final CreateOrAlterViewEvent event) {
-
Preconditions.checkArgument(event.getActiveVersion().equals(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService()
- .getActiveVersionByFullPath(event.getActiveVersionKey())),
"Invalid active version: %s of key: %s", event.getActiveVersion(),
event.getActiveVersionKey());
- Map<String, ShardingSphereView> views =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService()
- .getViewMetaDataPersistService().load(event.getDatabaseName(),
event.getSchemaName(), event.getViewName());
-
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
event.getSchemaName(),
- null, views.values().iterator().next());
+ Preconditions.checkArgument(event.getActiveVersion().equals(
+
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())),
+ "Invalid active version: %s of key: %s",
event.getActiveVersion(), event.getActiveVersionKey());
+ Map<String, ShardingSphereView> views =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().getViewMetaDataPersistService()
+ .load(event.getDatabaseName(), event.getSchemaName(),
event.getViewName());
+
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
event.getSchemaName(), null, views.values().iterator().next());
refreshShardingSphereStatisticsData();
}
@@ -125,8 +131,7 @@ public final class MetaDataChangedSubscriber implements
EventSubscriber {
private void refreshShardingSphereStatisticsData() {
if
(contextManager.getComputeNodeInstanceContext().getModeConfiguration().isCluster()
&& InstanceType.PROXY ==
contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType())
{
- new ShardingSphereStatisticsRefreshEngine(contextManager,
- new GlobalLockContext(new
GlobalLockPersistService((ClusterPersistRepository)
contextManager.getPersistServiceFacade().getRepository()))).asyncRefresh();
+ new ShardingSphereStatisticsRefreshEngine(contextManager, new
GlobalLockContext(new GlobalLockPersistService(repository))).asyncRefresh();
}
}
}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriberTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriberTest.java
index b39486d67da..f54401f38b7 100644
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriberTest.java
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/subscriber/dispatch/MetaDataChangedSubscriberTest.java
@@ -17,24 +17,18 @@
package
org.apache.shardingsphere.mode.manager.cluster.event.subscriber.dispatch;
-import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
-import
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
-import
org.apache.shardingsphere.mode.manager.cluster.ClusterContextManagerBuilder;
+import
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
import
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.SchemaAddedEvent;
import
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.SchemaDeletedEvent;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
-import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
+import
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.CreateOrAlterTableEvent;
+import
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.table.DropTableEvent;
+import
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.CreateOrAlterViewEvent;
+import
org.apache.shardingsphere.mode.event.dispatch.metadata.schema.view.DropViewEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -44,13 +38,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
-import java.sql.SQLException;
import java.util.Collections;
-import java.util.Map;
-import java.util.Properties;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -61,46 +50,60 @@ class MetaDataChangedSubscriberTest {
private MetaDataChangedSubscriber subscriber;
- private ContextManager contextManager;
-
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private ShardingSphereDatabase database;
+ private ContextManager contextManager;
@BeforeEach
- void setUp() throws SQLException {
- contextManager = new
ClusterContextManagerBuilder().build(createContextManagerBuilderParameter(),
new EventBusContext());
-
contextManager.renewMetaDataContexts(MetaDataContextsFactory.create(contextManager.getPersistServiceFacade().getMetaDataPersistService(),
new ShardingSphereMetaData(createDatabases(),
-
contextManager.getMetaDataContexts().getMetaData().getGlobalResourceMetaData(),
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData(),
- new ConfigurationProperties(new Properties()))));
+ void setUp() {
+
when(contextManager.getPersistServiceFacade().getRepository()).thenReturn(mock(ClusterPersistRepository.class));
+
when(contextManager.getMetaDataContexts().getMetaData().getTemporaryProps().getValue(TemporaryConfigurationPropertyKey.PROXY_META_DATA_COLLECTOR_ENABLED)).thenReturn(false);
+
when(contextManager.getComputeNodeInstanceContext().getModeConfiguration().isCluster()).thenReturn(true);
subscriber = new MetaDataChangedSubscriber(contextManager);
}
- private ContextManagerBuilderParameter
createContextManagerBuilderParameter() {
- ModeConfiguration modeConfig = new ModeConfiguration("Cluster", new
ClusterPersistRepositoryConfiguration("FIXTURE", "", "", new Properties()));
- InstanceMetaData instanceMetaData = new
ProxyInstanceMetaData("foo_instance_id", 3307);
- return new ContextManagerBuilderParameter(modeConfig,
Collections.emptyMap(), Collections.emptyMap(), Collections.emptyList(), new
Properties(), Collections.emptyList(), instanceMetaData,
- false);
+ @Test
+ void assertRenewWithSchemaAddedEvent() {
+
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
+ subscriber.renew(new SchemaAddedEvent("foo_db", "foo_schema"));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).addSchema("foo_db",
"foo_schema");
}
- private Map<String, ShardingSphereDatabase> createDatabases() {
- when(database.getName()).thenReturn("db");
-
when(database.getSchemas()).thenReturn(Collections.singletonMap("foo_schema",
new ShardingSphereSchema(DefaultDatabase.LOGIC_NAME)));
-
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
-
when(database.getSchema("foo_schema")).thenReturn(mock(ShardingSphereSchema.class));
-
when(database.getRuleMetaData().getConfigurations()).thenReturn(Collections.emptyList());
- return Collections.singletonMap("db", database);
+ @Test
+ void assertRenewWithSchemaDeletedEvent() {
+
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
+ subscriber.renew(new SchemaDeletedEvent("foo_db", "foo_schema"));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropSchema("foo_db",
"foo_schema");
+ }
+
+ @Test
+ void assertRenewWithCreateOrAlterTableEvent() {
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().getTableMetaDataPersistService().load("foo_db",
"foo_schema", "foo_tbl"))
+ .thenReturn(Collections.singletonMap("foo_tbl", table));
+ subscriber.renew(new CreateOrAlterTableEvent("foo_db", "foo_schema",
"foo_tbl", "key", "value"));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", table, null);
+ }
+
+ @Test
+ void assertRenewWithDropTableEvent() {
+ subscriber.renew(new DropTableEvent("foo_db", "foo_schema",
"foo_tbl"));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", "foo_tbl", null);
}
@Test
- void assertRenewForSchemaAdded() {
- subscriber.renew(new SchemaAddedEvent("db", "foo_schema"));
-
verify(contextManager.getMetaDataContexts().getMetaData().getDatabase("db")).addSchema(argThat("foo_schema"::equals),
any(ShardingSphereSchema.class));
+ void assertRenewWithCreateOrAlterViewEvent() {
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+ ShardingSphereView view = mock(ShardingSphereView.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataService().getViewMetaDataPersistService().load("foo_db",
"foo_schema", "foo_view"))
+ .thenReturn(Collections.singletonMap("foo_view", view));
+ subscriber.renew(new CreateOrAlterViewEvent("foo_db", "foo_schema",
"foo_view", "key", "value"));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", null, view);
}
@Test
- void assertRenewForSchemaDeleted() {
-
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("db").containsSchema("foo_schema")).thenReturn(true);
- subscriber.renew(new SchemaDeletedEvent("db", "foo_schema"));
-
verify(contextManager.getMetaDataContexts().getMetaData().getDatabase("db")).dropSchema("foo_schema");
+ void assertRenewWithDropViewEvent() {
+ subscriber.renew(new DropViewEvent("foo_db", "foo_schema", "foo_view",
"key", "value"));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", null, "foo_view");
}
}