This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 cbb49e97cb7 Refactor load data source unit from repository (#38065)
cbb49e97cb7 is described below
commit cbb49e97cb7e744da730d2747dae4baae7b8a622
Author: Haoran Meng <[email protected]>
AuthorDate: Tue Feb 17 07:58:17 2026 +0800
Refactor load data source unit from repository (#38065)
---
.../database/DataSourceUnitPersistService.java | 24 +++++++++++++++-------
.../database/DataSourceUnitPersistServiceTest.java | 13 ++++++++++++
.../datasource/StorageUnitChangedHandler.java | 11 ++++++----
.../datasource/StorageUnitChangedHandlerTest.java | 6 ++++--
4 files changed, 41 insertions(+), 13 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
index fe8a14f985d..2926cad0cda 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.mode.metadata.persist.config.database;
+import com.google.common.base.Strings;
import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import
org.apache.shardingsphere.infra.yaml.config.swapper.resource.YamlDataSourceConfigurationSwapper;
@@ -30,7 +31,7 @@ import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.stream.Collectors;
+import java.util.Optional;
/**
* Data source unit persist service.
@@ -57,8 +58,11 @@ public final class DataSourceUnitPersistService {
*/
public Map<String, DataSourcePoolProperties> load(final String
databaseName) {
Collection<String> childrenKeys =
repository.getChildrenKeys(NodePathGenerator.toPath(new
StorageUnitNodePath(databaseName, null)));
- return childrenKeys.stream()
- .collect(Collectors.toMap(each -> each, each ->
load(databaseName, each), (oldValue, currentValue) -> currentValue, () -> new
LinkedHashMap<>(childrenKeys.size(), 1F)));
+ Map<String, DataSourcePoolProperties> result = new
LinkedHashMap<>(childrenKeys.size(), 1F);
+ for (String each : childrenKeys) {
+ load(databaseName, each).ifPresent(dataSourcePoolProps ->
result.put(each, dataSourcePoolProps));
+ }
+ return result;
}
/**
@@ -69,11 +73,17 @@ public final class DataSourceUnitPersistService {
* @return data source pool properties
*/
@SuppressWarnings("unchecked")
- public DataSourcePoolProperties load(final String databaseName, final
String dataSourceName) {
+ public Optional<DataSourcePoolProperties> load(final String databaseName,
final String dataSourceName) {
VersionNodePath versionNodePath = new VersionNodePath(new
StorageUnitNodePath(databaseName, dataSourceName));
- int activeVersion =
Integer.parseInt(repository.query(versionNodePath.getActiveVersionPath()));
- String dataSourceContent =
repository.query(versionNodePath.getVersionPath(activeVersion));
- return
yamlDataSourceConfigurationSwapper.swapToDataSourcePoolProperties(YamlEngine.unmarshal(dataSourceContent,
Map.class));
+ String activeVersion =
repository.query(versionNodePath.getActiveVersionPath());
+ if (Strings.isNullOrEmpty(activeVersion)) {
+ return Optional.empty();
+ }
+ String dataSourceContent =
repository.query(versionNodePath.getVersionPath(Integer.parseInt(activeVersion)));
+ if (Strings.isNullOrEmpty(dataSourceContent)) {
+ return Optional.empty();
+ }
+ return
Optional.of(yamlDataSourceConfigurationSwapper.swapToDataSourcePoolProperties(YamlEngine.unmarshal(dataSourceContent,
Map.class)));
}
/**
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java
index dff65f0dde2..9c0030ef332 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java
@@ -25,12 +25,14 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
+import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -58,6 +60,17 @@ class DataSourceUnitPersistServiceTest {
assertThat(actual.get("foo_ds").getPoolClassName(),
is("org.apache.shardingsphere.test.infra.fixture.jdbc.MockedDataSource"));
}
+ @Test
+ void assertLoadWithInvalidDataSource() {
+
when(repository.getChildrenKeys("/metadata/foo_db/data_sources/units")).thenReturn(Arrays.asList("foo_ds",
"bar_ds"));
+
when(repository.query("/metadata/foo_db/data_sources/units/foo_ds/active_version")).thenReturn("10");
+
when(repository.query("/metadata/foo_db/data_sources/units/foo_ds/versions/10")).thenReturn("{dataSourceClassName:
org.apache.shardingsphere.test.infra.fixture.jdbc.MockedDataSource}");
+ Map<String, DataSourcePoolProperties> actual =
persistService.load("foo_db");
+ assertThat(actual.size(), is(1));
+ assertThat(actual.get("foo_ds").getPoolClassName(),
is("org.apache.shardingsphere.test.infra.fixture.jdbc.MockedDataSource"));
+ assertFalse(actual.containsKey("bar_ds"));
+ }
+
@Test
void assertPersist() {
Map<String, DataSourcePoolProperties> dataSourcePropsMap = new
LinkedHashMap<>(1, 1F);
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandler.java
index 443f8599048..663e7471e75 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandler.java
@@ -29,6 +29,7 @@ import
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher
import
org.apache.shardingsphere.mode.node.path.type.database.metadata.datasource.StorageUnitNodePath;
import java.util.Collections;
+import java.util.Optional;
/**
* Storage unit changed handler.
@@ -62,13 +63,15 @@ public final class StorageUnitChangedHandler implements
DatabaseLeafValueChanged
}
private void handleRegistered(final String databaseName, final String
storageUnitName) {
- DataSourcePoolProperties dataSourcePoolProps =
contextManager.getPersistServiceFacade().getMetaDataFacade().getDataSourceUnitService().load(databaseName,
storageUnitName);
-
contextManager.getMetaDataContextManager().getStorageUnitManager().register(databaseName,
Collections.singletonMap(storageUnitName, dataSourcePoolProps));
+ Optional<DataSourcePoolProperties> dataSourcePoolProps =
contextManager.getPersistServiceFacade().getMetaDataFacade().getDataSourceUnitService().load(databaseName,
storageUnitName);
+ dataSourcePoolProps.ifPresent(dataSourcePoolProperties ->
contextManager.getMetaDataContextManager().getStorageUnitManager().register(databaseName,
+ Collections.singletonMap(storageUnitName,
dataSourcePoolProperties)));
}
private void handleAltered(final String databaseName, final String
storageUnitName) {
- DataSourcePoolProperties dataSourcePoolProps =
contextManager.getPersistServiceFacade().getMetaDataFacade().getDataSourceUnitService().load(databaseName,
storageUnitName);
-
contextManager.getMetaDataContextManager().getStorageUnitManager().alter(databaseName,
Collections.singletonMap(storageUnitName, dataSourcePoolProps));
+ Optional<DataSourcePoolProperties> dataSourcePoolProps =
contextManager.getPersistServiceFacade().getMetaDataFacade().getDataSourceUnitService().load(databaseName,
storageUnitName);
+ dataSourcePoolProps.ifPresent(dataSourcePoolProperties ->
contextManager.getMetaDataContextManager().getStorageUnitManager().alter(databaseName,
+ Collections.singletonMap(storageUnitName,
dataSourcePoolProperties)));
}
private void handleUnregistered(final String databaseName, final String
storageUnitName) {
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandlerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandlerTest.java
index 868e5b97480..b3bbef4f82c 100644
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandlerTest.java
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandlerTest.java
@@ -30,6 +30,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
+import java.util.Optional;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
@@ -53,14 +55,14 @@ class StorageUnitChangedHandlerTest {
@Test
void assertHandleStorageUnitRegistered() {
-
when(contextManager.getPersistServiceFacade().getMetaDataFacade().getDataSourceUnitService().load("foo_db",
"foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
+
when(contextManager.getPersistServiceFacade().getMetaDataFacade().getDataSourceUnitService().load("foo_db",
"foo_unit")).thenReturn(Optional.of(mock(DataSourcePoolProperties.class)));
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version",
"0", Type.ADDED));
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).register(eq("foo_db"),
any());
}
@Test
void assertHandleStorageUnitAltered() {
-
when(contextManager.getPersistServiceFacade().getMetaDataFacade().getDataSourceUnitService().load("foo_db",
"foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
+
when(contextManager.getPersistServiceFacade().getMetaDataFacade().getDataSourceUnitService().load("foo_db",
"foo_unit")).thenReturn(Optional.of(mock(DataSourcePoolProperties.class)));
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version",
"0", Type.UPDATED));
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).alter(eq("foo_db"),
any());
}