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 6b8980bf704 Optimize init ShardingSphereData logic. (#22654)
6b8980bf704 is described below
commit 6b8980bf7045c601fe11aeebccade27ea1baf818
Author: Chuxin Chen <[email protected]>
AuthorDate: Mon Dec 5 17:11:43 2022 +0800
Optimize init ShardingSphereData logic. (#22654)
---
.../mode/metadata/MetaDataContexts.java | 39 ++++++++++++++++++----
1 file changed, 33 insertions(+), 6 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
index 5bfc528c0db..b9ad35109cc 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
@@ -20,10 +20,14 @@ package org.apache.shardingsphere.mode.metadata;
import lombok.Getter;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.data.ShardingSphereData;
+import
org.apache.shardingsphere.infra.metadata.data.ShardingSphereDatabaseData;
+import org.apache.shardingsphere.infra.metadata.data.ShardingSphereSchemaData;
+import org.apache.shardingsphere.infra.metadata.data.ShardingSphereTableData;
import
org.apache.shardingsphere.infra.metadata.data.builder.ShardingSphereDataBuilderFactory;
import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+import java.util.Map.Entry;
import java.util.Optional;
/**
@@ -45,16 +49,39 @@ public final class MetaDataContexts implements
AutoCloseable {
}
private ShardingSphereData initShardingSphereData(final
MetaDataPersistService persistService, final ShardingSphereMetaData metaData) {
- Optional<ShardingSphereData> result =
Optional.ofNullable(persistService.getShardingSphereDataPersistService())
- .flatMap(shardingSphereDataPersistService ->
shardingSphereDataPersistService.load(metaData));
- if (result.isPresent()) {
- return result.get();
- }
if (metaData.getDatabases().isEmpty()) {
return new ShardingSphereData();
}
- return
Optional.ofNullable(metaData.getDatabases().values().iterator().next().getProtocolType())
+ ShardingSphereData result =
Optional.ofNullable(metaData.getDatabases().values().iterator().next().getProtocolType())
.flatMap(protocolType ->
ShardingSphereDataBuilderFactory.getInstance(protocolType).map(builder ->
builder.build(metaData))).orElseGet(ShardingSphereData::new);
+ Optional<ShardingSphereData> loadedShardingSphereData =
Optional.ofNullable(persistService.getShardingSphereDataPersistService())
+ .flatMap(shardingSphereDataPersistService ->
shardingSphereDataPersistService.load(metaData));
+ loadedShardingSphereData.ifPresent(sphereData ->
useLoadedToReplaceInit(result, sphereData));
+ return result;
+ }
+
+ private void useLoadedToReplaceInit(final ShardingSphereData
initShardingSphereData, final ShardingSphereData loadedShardingSphereData) {
+ for (Entry<String, ShardingSphereDatabaseData> entry :
initShardingSphereData.getDatabaseData().entrySet()) {
+ if
(loadedShardingSphereData.getDatabaseData().containsKey(entry.getKey())) {
+ useLoadedToReplaceInitByDatabaseData(entry.getValue(),
loadedShardingSphereData.getDatabaseData().get(entry.getKey()));
+ }
+ }
+ }
+
+ private void useLoadedToReplaceInitByDatabaseData(final
ShardingSphereDatabaseData initDatabaseData, final ShardingSphereDatabaseData
loadedDatabaseData) {
+ for (Entry<String, ShardingSphereSchemaData> entry :
initDatabaseData.getSchemaData().entrySet()) {
+ if
(loadedDatabaseData.getSchemaData().containsKey(entry.getKey())) {
+ useLoadedToReplaceInitBySchemaData(entry.getValue(),
loadedDatabaseData.getSchemaData().get(entry.getKey()));
+ }
+ }
+ }
+
+ private void useLoadedToReplaceInitBySchemaData(final
ShardingSphereSchemaData initSchemaData, final ShardingSphereSchemaData
loadedSchemaData) {
+ for (Entry<String, ShardingSphereTableData> entry :
initSchemaData.getTableData().entrySet()) {
+ if (loadedSchemaData.getTableData().containsKey(entry.getKey())) {
+
entry.setValue(loadedSchemaData.getTableData().get(entry.getKey()));
+ }
+ }
}
@Override