This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 da49563 Add isInSameDatabaseInstance method for H2DataSourceMetaData
to support jdbc url contains ssl/tcp/file (#13540)
da49563 is described below
commit da4956301e23bb7d30dce136dcbd360b822a5436
Author: lichengxin813 <[email protected]>
AuthorDate: Thu Nov 11 13:43:06 2021 +0800
Add isInSameDatabaseInstance method for H2DataSourceMetaData to support
jdbc url contains ssl/tcp/file (#13540)
* add isInSameDatabaseInstance method for H2DataSourceMetaData to support
ssl/tcp url
* delete MemorizedDataSourceMetaData
* extract dataSourceMetaDataMap.get(dataSourceName)
---
.../database/metadata/DataSourceMetaData.java | 10 +++++++++
.../metadata/MemorizedDataSourceMetaData.java | 24 ----------------------
.../metadata/dialect/H2DataSourceMetaData.java | 15 +++++++++++---
.../metadata/resource/DataSourcesMetaData.java | 10 ++-------
4 files changed, 24 insertions(+), 35 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/DataSourceMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/DataSourceMetaData.java
index 1493b7d..a12073b 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/DataSourceMetaData.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/DataSourceMetaData.java
@@ -49,4 +49,14 @@ public interface DataSourceMetaData {
* @return schema
*/
String getSchema();
+
+ /**
+ * Judge whether two of data sources are in the same database instance.
+ *
+ * @param dataSourceMetaData data source meta data
+ * @return data sources are in the same database instance or not
+ */
+ default boolean isInSameDatabaseInstance(final DataSourceMetaData
dataSourceMetaData) {
+ return getHostName().equals(dataSourceMetaData.getHostName()) &&
getPort() == dataSourceMetaData.getPort();
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/MemorizedDataSourceMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/MemorizedDataSourceMetaData.java
deleted file mode 100644
index 02c61c3..0000000
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/MemorizedDataSourceMetaData.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.database.metadata;
-
-/**
- * Memorized data source meta data.
- */
-public interface MemorizedDataSourceMetaData extends DataSourceMetaData {
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
index 68bd907..c048e66 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
@@ -18,9 +18,10 @@
package org.apache.shardingsphere.infra.database.metadata.dialect;
import lombok.Getter;
-import
org.apache.shardingsphere.infra.database.metadata.MemorizedDataSourceMetaData;
+import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
import
org.apache.shardingsphere.infra.database.metadata.UnrecognizedDatabaseURLException;
+import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -28,10 +29,12 @@ import java.util.regex.Pattern;
* Data source meta data for H2.
*/
@Getter
-public final class H2DataSourceMetaData implements MemorizedDataSourceMetaData
{
+public final class H2DataSourceMetaData implements DataSourceMetaData {
private static final int DEFAULT_PORT = -1;
+ private static final String DEFAULT_HOST_NAME = "";
+
private final String hostName;
private final int port;
@@ -56,9 +59,15 @@ public final class H2DataSourceMetaData implements
MemorizedDataSourceMetaData {
String hostNameFromMatcher = matcher.group("hostName");
boolean setPort = null != portFromMatcher &&
!portFromMatcher.isEmpty();
String name = null == nameFromMatcher ? fileNameFromMatcher :
nameFromMatcher;
- hostName = null == hostNameFromMatcher ? "" : hostNameFromMatcher;
+ hostName = null == hostNameFromMatcher ? DEFAULT_HOST_NAME :
hostNameFromMatcher;
port = setPort ? Integer.parseInt(portFromMatcher) : DEFAULT_PORT;
catalog = null == catalogFromMatcher ? name : catalogFromMatcher;
schema = null;
}
+
+ @Override
+ public boolean isInSameDatabaseInstance(final DataSourceMetaData
dataSourceMetaData) {
+ return DEFAULT_HOST_NAME.equals(hostName) && DEFAULT_PORT == port ?
Objects.equals(schema, dataSourceMetaData.getSchema())
+ :
DataSourceMetaData.super.isInSameDatabaseInstance(dataSourceMetaData);
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/resource/DataSourcesMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/resource/DataSourcesMetaData.java
index 3decf4d..1defcea 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/resource/DataSourcesMetaData.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/resource/DataSourcesMetaData.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.infra.metadata.resource;
import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
-import
org.apache.shardingsphere.infra.database.metadata.MemorizedDataSourceMetaData;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.config.DatabaseAccessConfiguration;
@@ -27,7 +26,6 @@ import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -59,12 +57,8 @@ public final class DataSourcesMetaData {
}
private boolean isExisted(final String dataSourceName, final
Collection<String> existedDataSourceNames) {
- return existedDataSourceNames.stream().anyMatch(each ->
isInSameDatabaseInstance(dataSourceMetaDataMap.get(dataSourceName),
dataSourceMetaDataMap.get(each)));
- }
-
- private boolean isInSameDatabaseInstance(final DataSourceMetaData sample,
final DataSourceMetaData target) {
- return sample instanceof MemorizedDataSourceMetaData
- ? Objects.equals(target.getSchema(), sample.getSchema()) :
target.getHostName().equals(sample.getHostName()) && target.getPort() ==
sample.getPort();
+ DataSourceMetaData dataSourceMetaData =
dataSourceMetaDataMap.get(dataSourceName);
+ return existedDataSourceNames.stream().anyMatch(each ->
dataSourceMetaData.isInSameDatabaseInstance(dataSourceMetaDataMap.get(each)));
}
/**