From 6b00d8513ab80f8cfc0d490f7da5d53dbfc5cc45 Mon Sep 17 00:00:00 2001 From: zhangliang Date: Fri, 3 Jan 2025 16:20:09 +0800 Subject: [PATCH] Refactor DeliverEventSubscriber --- features/readwrite-splitting/core/pom.xml | 2 +- ...littingQualifiedDataSourceDeletedSubscriber.java | 8 ++++---- ...rdingsphere.mode.deliver.DeliverEventSubscriber} | 0 ...ingQualifiedDataSourceDeletedSubscriberTest.java | 9 ++++++++- .../mode}/deliver/DeliverEventSubscriber.java | 10 +++++----- .../cluster/ClusterContextManagerBuilder.java | 13 ++++++------- 6 files changed, 24 insertions(+), 18 deletions(-) rename features/readwrite-splitting/core/src/main/resources/META-INF/services/{org.apache.shardingsphere.mode.event.deliver.DeliverEventSubscriber => org.apache.shardingsphere.mode.deliver.DeliverEventSubscriber} (100%) rename mode/{api/src/main/java/org/apache/shardingsphere/mode/event => core/src/main/java/org/apache/shardingsphere/mode}/deliver/DeliverEventSubscriber.java (81%) diff --git a/features/readwrite-splitting/core/pom.xml b/features/readwrite-splitting/core/pom.xml index 0914b61b7d899..43796d0bf1873 100644 --- a/features/readwrite-splitting/core/pom.xml +++ b/features/readwrite-splitting/core/pom.xml @@ -45,7 +45,7 @@ org.apache.shardingsphere - shardingsphere-mode-api + shardingsphere-mode-core ${project.version} diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriber.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriber.java index 842ac068f42ef..015bfda5b130f 100644 --- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriber.java +++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriber.java @@ -20,8 +20,8 @@ import com.google.common.eventbus.Subscribe; import lombok.Setter; import org.apache.shardingsphere.metadata.persist.node.QualifiedDataSourceNode; -import org.apache.shardingsphere.mode.event.deliver.DeliverEventSubscriber; -import org.apache.shardingsphere.mode.spi.PersistRepository; +import org.apache.shardingsphere.mode.deliver.DeliverEventSubscriber; +import org.apache.shardingsphere.mode.manager.ContextManager; /** * Readwrite-splitting qualified data source deleted subscriber. @@ -29,7 +29,7 @@ @Setter public final class ReadwriteSplittingQualifiedDataSourceDeletedSubscriber implements DeliverEventSubscriber { - private PersistRepository repository; + private ContextManager contextManager; /** * Delete qualified data source. @@ -38,6 +38,6 @@ public final class ReadwriteSplittingQualifiedDataSourceDeletedSubscriber implem */ @Subscribe public void delete(final QualifiedDataSourceDeletedEvent event) { - repository.delete(QualifiedDataSourceNode.getQualifiedDataSourceNodePath(event.getQualifiedDataSource())); + contextManager.getPersistServiceFacade().getRepository().delete(QualifiedDataSourceNode.getQualifiedDataSourceNodePath(event.getQualifiedDataSource())); } } diff --git a/features/readwrite-splitting/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.event.deliver.DeliverEventSubscriber b/features/readwrite-splitting/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.deliver.DeliverEventSubscriber similarity index 100% rename from features/readwrite-splitting/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.event.deliver.DeliverEventSubscriber rename to features/readwrite-splitting/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.deliver.DeliverEventSubscriber diff --git a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriberTest.java b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriberTest.java index 837bd8bcc2aa7..6bb1de62bb144 100644 --- a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriberTest.java +++ b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriberTest.java @@ -18,27 +18,34 @@ package org.apache.shardingsphere.readwritesplitting.cluster; import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDataSource; +import org.apache.shardingsphere.mode.manager.ContextManager; import org.apache.shardingsphere.mode.spi.PersistRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class ReadwriteSplittingQualifiedDataSourceDeletedSubscriberTest { private ReadwriteSplittingQualifiedDataSourceDeletedSubscriber subscriber; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private ContextManager contextManager; + @Mock private PersistRepository repository; @BeforeEach void setUp() { subscriber = new ReadwriteSplittingQualifiedDataSourceDeletedSubscriber(); - subscriber.setRepository(repository); + when(contextManager.getPersistServiceFacade().getRepository()).thenReturn(repository); + subscriber.setContextManager(contextManager); } @Test diff --git a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/deliver/DeliverEventSubscriber.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/deliver/DeliverEventSubscriber.java similarity index 81% rename from mode/api/src/main/java/org/apache/shardingsphere/mode/event/deliver/DeliverEventSubscriber.java rename to mode/core/src/main/java/org/apache/shardingsphere/mode/deliver/DeliverEventSubscriber.java index ef278879965b3..307635db345a1 100644 --- a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/deliver/DeliverEventSubscriber.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/deliver/DeliverEventSubscriber.java @@ -15,11 +15,11 @@ * limitations under the License. */ -package org.apache.shardingsphere.mode.event.deliver; +package org.apache.shardingsphere.mode.deliver; import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI; import org.apache.shardingsphere.infra.util.eventbus.EventSubscriber; -import org.apache.shardingsphere.mode.spi.PersistRepository; +import org.apache.shardingsphere.mode.manager.ContextManager; /** * Deliver event subscriber factory. @@ -28,9 +28,9 @@ public interface DeliverEventSubscriber extends EventSubscriber { /** - * Set persist repository. + * Set context manager. * - * @param repository persist repository + * @param contextManager context manager */ - void setRepository(PersistRepository repository); + void setContextManager(ContextManager contextManager); } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java index 51d89f17c3ce3..f98354a94eb62 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java @@ -28,7 +28,7 @@ import org.apache.shardingsphere.infra.util.eventbus.EventBusContext; import org.apache.shardingsphere.infra.util.eventbus.EventSubscriber; import org.apache.shardingsphere.metadata.persist.MetaDataPersistService; -import org.apache.shardingsphere.mode.event.deliver.DeliverEventSubscriber; +import org.apache.shardingsphere.mode.deliver.DeliverEventSubscriber; import org.apache.shardingsphere.mode.manager.ContextManager; import org.apache.shardingsphere.mode.manager.ContextManagerBuilder; import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter; @@ -63,7 +63,7 @@ public ContextManager build(final ContextManagerBuilderParameter param, final Ev MetaDataPersistService metaDataPersistService = new MetaDataPersistService(repository); MetaDataContexts metaDataContexts = MetaDataContextsFactory.create(metaDataPersistService, param, computeNodeInstanceContext); ContextManager result = new ContextManager(metaDataContexts, computeNodeInstanceContext, repository); - registerOnline(computeNodeInstanceContext, param, result, repository); + registerOnline(computeNodeInstanceContext, param, result); return result; } @@ -74,14 +74,13 @@ private ClusterPersistRepository getClusterPersistRepository(final ClusterPersis return result; } - private void registerOnline(final ComputeNodeInstanceContext computeNodeInstanceContext, final ContextManagerBuilderParameter param, final ContextManager contextManager, - final ClusterPersistRepository repository) { + private void registerOnline(final ComputeNodeInstanceContext computeNodeInstanceContext, final ContextManagerBuilderParameter param, final ContextManager contextManager) { contextManager.getPersistServiceFacade().getComputeNodePersistService().registerOnline(computeNodeInstanceContext.getInstance()); contextManager.getComputeNodeInstanceContext().getClusterInstanceRegistry().getAllClusterInstances() .addAll(contextManager.getPersistServiceFacade().getComputeNodePersistService().loadAllComputeNodeInstances()); new DataChangedEventListenerRegistry(contextManager, getDatabaseNames(param, contextManager.getPersistServiceFacade().getMetaDataPersistService())).register(); ClusterEventSubscriberRegistry eventSubscriberRegistry = new ClusterEventSubscriberRegistry(contextManager.getComputeNodeInstanceContext().getEventBusContext()); - eventSubscriberRegistry.register(createDeliverEventSubscribers(repository)); + eventSubscriberRegistry.register(createDeliverEventSubscribers(contextManager)); } private Collection getDatabaseNames(final ContextManagerBuilderParameter param, final MetaDataPersistService metaDataPersistService) { @@ -90,10 +89,10 @@ private Collection getDatabaseNames(final ContextManagerBuilderParameter : metaDataPersistService.getDatabaseMetaDataFacade().getDatabase().loadAllDatabaseNames(); } - private Collection createDeliverEventSubscribers(final ClusterPersistRepository repository) { + private Collection createDeliverEventSubscribers(final ContextManager contextManager) { Collection result = new LinkedList<>(); for (DeliverEventSubscriber each : ShardingSphereServiceLoader.getServiceInstances(DeliverEventSubscriber.class)) { - each.setRepository(repository); + each.setContextManager(contextManager); result.add(each); } return result;