This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 0886c357edf Refactor ShardingSphereDriverUtils (#30257)
0886c357edf is described below
commit 0886c357edf337f23de7ad0685348e40d0358b29
Author: jiangML <[email protected]>
AuthorDate: Fri Feb 23 17:28:43 2024 +0800
Refactor ShardingSphereDriverUtils (#30257)
* Refactor ShardingSphereDriverUtils
* Optimize ShardingSphereDriverUtils
* Fix checkstyle error
---
.../agent/plugin/core/context/PluginContext.java | 27 ++++-----------------
.../core/util/ShardingSphereDriverUtils.java | 28 +++++++++++++++++++---
.../impl/jdbc/JDBCMetaDataInfoExporter.java | 13 ++++------
.../core/exporter/impl/jdbc/JDBCStateExporter.java | 13 ++++------
4 files changed, 38 insertions(+), 43 deletions(-)
diff --git
a/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/context/PluginContext.java
b/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/context/PluginContext.java
index 68496405788..1649eecf5ba 100644
---
a/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/context/PluginContext.java
+++
b/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/context/PluginContext.java
@@ -21,16 +21,12 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.shardingsphere.agent.plugin.core.util.AgentReflectionUtils;
-import org.apache.shardingsphere.driver.ShardingSphereDriver;
-import org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache;
+import
org.apache.shardingsphere.agent.plugin.core.util.ShardingSphereDriverUtils;
+import
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import javax.sql.DataSource;
-import java.sql.Driver;
-import java.sql.DriverManager;
-import java.util.Enumeration;
import java.util.Map;
import java.util.Optional;
@@ -77,22 +73,9 @@ public final class PluginContext {
if (isEnhancedForProxy) {
return
Optional.ofNullable(ProxyContext.getInstance().getContextManager());
}
- Optional<ShardingSphereDriver> shardingSphereDriver =
getShardingSphereDriver();
- if (shardingSphereDriver.isPresent()) {
- DriverDataSourceCache dataSourceCache =
AgentReflectionUtils.getFieldValue(shardingSphereDriver.get(),
"dataSourceCache");
- Map<String, DataSource> dataSourceMap =
AgentReflectionUtils.getFieldValue(dataSourceCache, "dataSourceMap");
- return dataSourceMap.isEmpty() ? Optional.empty() :
Optional.ofNullable(AgentReflectionUtils.getFieldValue(dataSourceMap.values().iterator().next(),
"contextManager"));
- }
- return Optional.empty();
- }
-
- private Optional<ShardingSphereDriver> getShardingSphereDriver() {
- Enumeration<Driver> driverEnumeration = DriverManager.getDrivers();
- while (driverEnumeration.hasMoreElements()) {
- Driver driver = driverEnumeration.nextElement();
- if (driver instanceof ShardingSphereDriver) {
- return Optional.of((ShardingSphereDriver) driver);
- }
+ Optional<Map<String, ShardingSphereDataSource>> dataSourceMap =
ShardingSphereDriverUtils.getShardingSphereDataSources();
+ if (dataSourceMap.isPresent() && !dataSourceMap.get().isEmpty()) {
+ return
Optional.ofNullable(AgentReflectionUtils.getFieldValue(dataSourceMap.get().values().iterator().next(),
"contextManager"));
}
return Optional.empty();
}
diff --git
a/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/util/ShardingSphereDriverUtils.java
b/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/util/ShardingSphereDriverUtils.java
index 2be08e87a01..d1c90e39ad6 100644
---
a/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/util/ShardingSphereDriverUtils.java
+++
b/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/util/ShardingSphereDriverUtils.java
@@ -20,10 +20,16 @@ package org.apache.shardingsphere.agent.plugin.core.util;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.driver.ShardingSphereDriver;
+import
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
+import org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache;
+import javax.sql.DataSource;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Enumeration;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
import java.util.Optional;
/**
@@ -33,11 +39,27 @@ import java.util.Optional;
public final class ShardingSphereDriverUtils {
/**
- * Get sharding sphere driver.
+ * Get ShardingSphere data sources.
*
- * @return ShardingSphereDriver
+ * @return got data source
*/
- public static Optional<ShardingSphereDriver> getShardingSphereDriver() {
+ public static Optional<Map<String, ShardingSphereDataSource>>
getShardingSphereDataSources() {
+ Optional<ShardingSphereDriver> driver = getShardingSphereDriver();
+ if (driver.isPresent()) {
+ DriverDataSourceCache dataSourceCache =
AgentReflectionUtils.getFieldValue(driver.get(), "dataSourceCache");
+ Map<String, DataSource> dataSourceMap =
AgentReflectionUtils.getFieldValue(dataSourceCache, "dataSourceMap");
+ Map<String, ShardingSphereDataSource> result = new
LinkedHashMap<>();
+ for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
+ if (entry.getValue() instanceof ShardingSphereDataSource) {
+ result.put(entry.getKey(), (ShardingSphereDataSource)
entry.getValue());
+ }
+ }
+ return Optional.of(result);
+ }
+ return Optional.empty();
+ }
+
+ private static Optional<ShardingSphereDriver> getShardingSphereDriver() {
Enumeration<Driver> driverEnumeration = DriverManager.getDrivers();
while (driverEnumeration.hasMoreElements()) {
Driver driver = driverEnumeration.nextElement();
diff --git
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCMetaDataInfoExporter.java
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCMetaDataInfoExporter.java
index ed249b6955f..415bb1251a3 100644
---
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCMetaDataInfoExporter.java
+++
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCMetaDataInfoExporter.java
@@ -24,12 +24,9 @@ import
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeM
import
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricCollectorType;
import
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
import
org.apache.shardingsphere.agent.plugin.metrics.core.exporter.MetricsExporter;
-import org.apache.shardingsphere.driver.ShardingSphereDriver;
import
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
-import org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import javax.sql.DataSource;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
@@ -47,16 +44,14 @@ public final class JDBCMetaDataInfoExporter implements
MetricsExporter {
@Override
public Optional<GaugeMetricFamilyMetricsCollector> export(final String
pluginType) {
- Optional<ShardingSphereDriver> driver =
ShardingSphereDriverUtils.getShardingSphereDriver();
- if (!driver.isPresent()) {
+ Optional<Map<String, ShardingSphereDataSource>> dataSourceMap =
ShardingSphereDriverUtils.getShardingSphereDataSources();
+ if (!dataSourceMap.isPresent()) {
return Optional.empty();
}
GaugeMetricFamilyMetricsCollector result =
MetricsCollectorRegistry.get(config, pluginType);
result.cleanMetrics();
- DriverDataSourceCache dataSourceCache =
AgentReflectionUtils.getFieldValue(driver.get(), "dataSourceCache");
- Map<String, DataSource> dataSourceMap =
AgentReflectionUtils.getFieldValue(dataSourceCache, "dataSourceMap");
- for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
- ShardingSphereDataSource dataSource = (ShardingSphereDataSource)
entry.getValue();
+ for (Entry<String, ShardingSphereDataSource> entry :
dataSourceMap.get().entrySet()) {
+ ShardingSphereDataSource dataSource = entry.getValue();
String databaseName =
AgentReflectionUtils.getFieldValue(dataSource, "databaseName");
ContextManager contextManager =
AgentReflectionUtils.getFieldValue(dataSource, "contextManager");
result.addMetric(Arrays.asList(databaseName,
"storage_unit_count"), contextManager.getStorageUnits(databaseName).size());
diff --git
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCStateExporter.java
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCStateExporter.java
index 16c5866d7c4..6572582cfea 100644
---
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCStateExporter.java
+++
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCStateExporter.java
@@ -24,12 +24,9 @@ import
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeM
import
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricCollectorType;
import
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
import
org.apache.shardingsphere.agent.plugin.metrics.core.exporter.MetricsExporter;
-import org.apache.shardingsphere.driver.ShardingSphereDriver;
import
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
-import org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import javax.sql.DataSource;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
@@ -44,16 +41,14 @@ public final class JDBCStateExporter implements
MetricsExporter {
@Override
public Optional<GaugeMetricFamilyMetricsCollector> export(final String
pluginType) {
- Optional<ShardingSphereDriver> driver =
ShardingSphereDriverUtils.getShardingSphereDriver();
- if (!driver.isPresent()) {
+ Optional<Map<String, ShardingSphereDataSource>> dataSourceMap =
ShardingSphereDriverUtils.getShardingSphereDataSources();
+ if (!dataSourceMap.isPresent()) {
return Optional.empty();
}
GaugeMetricFamilyMetricsCollector result =
MetricsCollectorRegistry.get(config, pluginType);
result.cleanMetrics();
- DriverDataSourceCache dataSourceCache =
AgentReflectionUtils.getFieldValue(driver.get(), "dataSourceCache");
- Map<String, DataSource> dataSourceMap =
AgentReflectionUtils.getFieldValue(dataSourceCache, "dataSourceMap");
- for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
- ShardingSphereDataSource dataSource = (ShardingSphereDataSource)
entry.getValue();
+ for (Entry<String, ShardingSphereDataSource> entry :
dataSourceMap.get().entrySet()) {
+ ShardingSphereDataSource dataSource = entry.getValue();
ContextManager contextManager =
AgentReflectionUtils.getFieldValue(dataSource, "contextManager");
result.addMetric(Collections.emptyList(),
contextManager.getInstanceContext().getInstance().getState().getCurrentState().ordinal());
}