This is an automated email from the ASF dual-hosted git repository. zhangliang 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 7db80d15c0e Remove SQLException on DatabaseChangedHandler.handle() (#35080) 7db80d15c0e is described below commit 7db80d15c0ece41a996df3648e0d7984e417fcda Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Wed Mar 26 21:10:42 2025 +0800 Remove SQLException on DatabaseChangedHandler.handle() (#35080) * Refactor DataChangedEventListenerRegistry * Remove SQLException on DatabaseChangedHandler.handle() * Remove SQLException on DatabaseChangedHandler.handle() * Remove SQLException on DatabaseChangedHandler.handle() --- .../manager/rule/DatabaseRuleItemManager.java | 23 ++++++++++++------ .../handler/database/DatabaseChangedHandler.java | 5 +--- .../rule/RuleItemConfigurationChangedHandler.java | 3 +-- .../type/DatabaseMetaDataChangedListener.java | 12 +--------- ...medRuleItemConfigurationChangedHandlerTest.java | 12 ++++------ ...queRuleItemConfigurationChangedHandlerTest.java | 12 ++++------ .../StandaloneMetaDataManagerPersistService.java | 28 ++++++---------------- ...tandaloneMetaDataManagerPersistServiceTest.java | 4 ++-- 8 files changed, 38 insertions(+), 61 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java index 0766dcbb97e..4342960210f 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java @@ -23,6 +23,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration; import org.apache.shardingsphere.infra.config.rule.checker.DatabaseRuleConfigurationEmptyChecker; +import org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.apache.shardingsphere.mode.metadata.MetaDataContexts; import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade; @@ -50,10 +51,10 @@ public final class DatabaseRuleItemManager { * Alter rule item. * * @param databaseRuleNodePath database rule node path - * @throws SQLException SQL Exception + * @throws SQLWrapperException SQL wrapper exception */ @SuppressWarnings({"rawtypes", "unchecked"}) - public void alter(final DatabaseRuleNodePath databaseRuleNodePath) throws SQLException { + public void alter(final DatabaseRuleNodePath databaseRuleNodePath) { RuleItemConfigurationChangedProcessor processor = TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class, new RuleChangedItemType(databaseRuleNodePath.getRuleType(), databaseRuleNodePath.getDatabaseRuleItem().getType())); String yamlContent = metaDataPersistFacade.getVersionService().loadContent(new VersionNodePath(databaseRuleNodePath)); @@ -62,7 +63,11 @@ public final class DatabaseRuleItemManager { String itemName = databaseRuleNodePath.getDatabaseRuleItem().getName(); synchronized (this) { processor.changeRuleItemConfiguration(itemName, currentRuleConfig, processor.swapRuleItemConfiguration(itemName, yamlContent)); - databaseRuleConfigManager.refresh(databaseName, currentRuleConfig, true); + try { + databaseRuleConfigManager.refresh(databaseName, currentRuleConfig, true); + } catch (final SQLException ex) { + throw new SQLWrapperException(ex); + } } } @@ -70,10 +75,10 @@ public final class DatabaseRuleItemManager { * Drop rule item. * * @param databaseRuleNodePath database rule node path - * @throws SQLException SQL Exception + * @throws SQLWrapperException SQL wrapper exception */ @SuppressWarnings({"rawtypes", "unchecked"}) - public void drop(final DatabaseRuleNodePath databaseRuleNodePath) throws SQLException { + public void drop(final DatabaseRuleNodePath databaseRuleNodePath) { String databaseName = databaseRuleNodePath.getDatabase().getDatabaseName(); Preconditions.checkState(metaDataContexts.getMetaData().containsDatabase(databaseName), "No database '%s' exists.", databaseName); RuleItemConfigurationChangedProcessor processor = TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class, @@ -82,8 +87,12 @@ public final class DatabaseRuleItemManager { String itemName = null == databaseRuleNodePath.getDatabaseRuleItem() ? null : databaseRuleNodePath.getDatabaseRuleItem().getName(); synchronized (this) { processor.dropRuleItemConfiguration(itemName, currentRuleConfig); - databaseRuleConfigManager.refresh(databaseName, currentRuleConfig, - !TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class, currentRuleConfig.getClass()).isEmpty((DatabaseRuleConfiguration) currentRuleConfig)); + try { + databaseRuleConfigManager.refresh(databaseName, currentRuleConfig, + !TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class, currentRuleConfig.getClass()).isEmpty((DatabaseRuleConfiguration) currentRuleConfig)); + } catch (final SQLException ex) { + throw new SQLWrapperException(ex); + } } } } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/DatabaseChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/DatabaseChangedHandler.java index 1f00f408de3..1ccd88b9d0f 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/DatabaseChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/DatabaseChangedHandler.java @@ -20,8 +20,6 @@ package org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database import org.apache.shardingsphere.mode.event.DataChangedEvent; import org.apache.shardingsphere.mode.node.path.NodePath; -import java.sql.SQLException; - /** * Database changed handler. */ @@ -40,7 +38,6 @@ public interface DatabaseChangedHandler { * * @param databaseName database name * @param event data changed event - * @throws SQLException SQL exception */ - void handle(String databaseName, DataChangedEvent event) throws SQLException; + void handle(String databaseName, DataChangedEvent event); } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java index d02fc566d11..f3c98e50a1f 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java @@ -24,7 +24,6 @@ import org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database. import org.apache.shardingsphere.mode.metadata.changed.RuleItemChangedNodePathBuilder; import org.apache.shardingsphere.mode.node.path.type.database.metadata.rule.DatabaseRuleNodePath; -import java.sql.SQLException; import java.util.Optional; /** @@ -38,7 +37,7 @@ public abstract class RuleItemConfigurationChangedHandler implements DatabaseLea private final RuleItemChangedNodePathBuilder ruleItemChangedNodePathBuilder = new RuleItemChangedNodePathBuilder(); @Override - public final void handle(final String databaseName, final DataChangedEvent event) throws SQLException { + public final void handle(final String databaseName, final DataChangedEvent event) { Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(databaseName, event.getKey()); if (!databaseRuleNodePath.isPresent()) { return; diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java index 952238a995e..88bfa235b4f 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.mode.manager.cluster.dispatch.listener.type; -import org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException; import org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache; import org.apache.shardingsphere.mode.event.DataChangedEvent; import org.apache.shardingsphere.mode.manager.ContextManager; @@ -38,7 +37,6 @@ import org.apache.shardingsphere.mode.node.path.type.database.metadata.DatabaseM import org.apache.shardingsphere.mode.node.path.version.VersionNodePath; import org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener; -import java.sql.SQLException; import java.util.Arrays; import java.util.Collection; import java.util.Optional; @@ -79,7 +77,7 @@ public final class DatabaseMetaDataChangedListener implements DataChangedEventLi && !new ActiveVersionChecker(contextManager.getPersistServiceFacade().getRepository()).checkSame(event)) { return; } - handle(each, databaseName.get(), event); + each.handle(databaseName.get(), event); return; } } @@ -93,12 +91,4 @@ public final class DatabaseMetaDataChangedListener implements DataChangedEventLi } return false; } - - private void handle(final DatabaseChangedHandler handler, final String databaseName, final DataChangedEvent event) { - try { - handler.handle(databaseName, event); - } catch (final SQLException ex) { - throw new SQLWrapperException(ex); - } - } } diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java index 0603f4b1cf3..43c7c4534ed 100644 --- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java +++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java @@ -29,8 +29,6 @@ import org.mockito.Answers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import java.sql.SQLException; - import static org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; @@ -50,35 +48,35 @@ class NamedRuleItemConfigurationChangedHandlerTest { } @Test - void assertHandleWithInvalidPath() throws SQLException { + void assertHandleWithInvalidPath() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture", "0", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).alter(any()); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).drop(any()); } @Test - void assertHandleWithIgnoreType() throws SQLException { + void assertHandleWithIgnoreType() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version", "0", Type.IGNORED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).alter(any()); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).drop(any()); } @Test - void assertHandleWithAddItem() throws SQLException { + void assertHandleWithAddItem() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version", "0", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()) .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("named", "foo_rule_item")))); } @Test - void assertHandleWithAlterItem() throws SQLException { + void assertHandleWithAlterItem() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version", "0", Type.UPDATED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()) .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("named", "foo_rule_item")))); } @Test - void assertHandleDropItem() throws SQLException { + void assertHandleDropItem() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version", "0", Type.DELETED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).drop(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("named", "foo_rule_item")))); } diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java index c239c7ff4ed..c152d1ca666 100644 --- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java +++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java @@ -29,8 +29,6 @@ import org.mockito.Answers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import java.sql.SQLException; - import static org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; @@ -50,33 +48,33 @@ class UniqueRuleItemConfigurationChangedHandlerTest { } @Test - void assertHandleWithInvalidPath() throws SQLException { + void assertHandleWithInvalidPath() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture", "foo", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).alter(any()); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).drop(any()); } @Test - void assertHandleWithIgnoreType() throws SQLException { + void assertHandleWithIgnoreType() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0", Type.IGNORED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).alter(any()); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), times(0)).drop(any()); } @Test - void assertHandleWithAddItem() throws SQLException { + void assertHandleWithAddItem() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique")))); } @Test - void assertHandleWithAlterItem() throws SQLException { + void assertHandleWithAlterItem() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0", Type.UPDATED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique")))); } @Test - void assertHandleWitDropItem() throws SQLException { + void assertHandleWitDropItem() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0", Type.DELETED)); verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).drop(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique")))); } diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java index 36fdc7f6450..d55e5033665 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java @@ -224,11 +224,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa for (MetaDataVersion each : metaDataVersions) { Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(databaseName, new VersionNodePath(each.getNodePath()).getActiveVersionPath()); if (databaseRuleNodePath.isPresent() && activeVersionChecker.checkSame(new VersionNodePath(databaseRuleNodePath.get()), each.getActiveVersion())) { - try { - metaDataContextManager.getDatabaseRuleItemManager().alter(databaseRuleNodePath.get()); - } catch (final SQLException ex) { - throw new SQLWrapperException(ex); - } + metaDataContextManager.getDatabaseRuleItemManager().alter(databaseRuleNodePath.get()); } } } @@ -250,14 +246,8 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa private void removeRuleItem(final String databaseName, final Collection<MetaDataVersion> metaDataVersions) { RuleItemChangedNodePathBuilder ruleItemChangedNodePathBuilder = new RuleItemChangedNodePathBuilder(); for (MetaDataVersion each : metaDataVersions) { - Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(databaseName, new VersionNodePath(each.getNodePath()).getActiveVersionPath()); - if (databaseRuleNodePath.isPresent()) { - try { - metaDataContextManager.getDatabaseRuleItemManager().drop(databaseRuleNodePath.get()); - } catch (final SQLException ex) { - throw new SQLWrapperException(ex); - } - } + ruleItemChangedNodePathBuilder.build(databaseName, new VersionNodePath(each.getNodePath()).getActiveVersionPath()) + .ifPresent(optional -> metaDataContextManager.getDatabaseRuleItemManager().drop(optional)); } } @@ -281,14 +271,10 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa public void removeRuleConfiguration(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleConfig, final String ruleType) { Collection<String> needReloadTables = getNeedReloadTables(database, toBeRemovedRuleConfig); metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), ruleType); - try { - metaDataContextManager.getDatabaseRuleItemManager().drop(new DatabaseRuleNodePath(database.getName(), ruleType, null)); - Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap = metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables( - database.getName(), metaDataContextManager.getMetaDataContexts(), needReloadTables); - alterTables(database, schemaAndTablesMap); - } catch (final SQLException ex) { - throw new SQLWrapperException(ex); - } + metaDataContextManager.getDatabaseRuleItemManager().drop(new DatabaseRuleNodePath(database.getName(), ruleType, null)); + Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap = metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables( + database.getName(), metaDataContextManager.getMetaDataContexts(), needReloadTables); + alterTables(database, schemaAndTablesMap); OrderedServicesCache.clearCache(); } diff --git a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java index 5e46430d1be..f552fc05b4b 100644 --- a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java +++ b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java @@ -163,7 +163,7 @@ class StandaloneMetaDataManagerPersistServiceTest { } @Test - void assertAlterRuleConfiguration() throws SQLException { + void assertAlterRuleConfiguration() { ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS); when(database.getName()).thenReturn("foo_db"); when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class, "FIXTURE")); @@ -186,7 +186,7 @@ class StandaloneMetaDataManagerPersistServiceTest { } @Test - void assertRemoveRuleConfigurationItem() throws SQLException { + void assertRemoveRuleConfigurationItem() { ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS); when(database.getName()).thenReturn("foo_db"); when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class, "FIXTURE"));