You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/01/27 12:08:02 UTC
[shardingsphere] branch master updated: Return optional value to avoid NPE for ProxyContext (#15127)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 9e83057 Return optional value to avoid NPE for ProxyContext (#15127)
9e83057 is described below
commit 9e83057781aa9d56ff240501a8486c628e873f9a
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Thu Jan 27 20:06:59 2022 +0800
Return optional value to avoid NPE for ProxyContext (#15127)
---
.../agent/metrics/prometheus/collector/ProxyInfoCollector.java | 8 +++-----
.../apache/shardingsphere/proxy/backend/context/ProxyContext.java | 8 +++-----
.../shardingsphere/proxy/backend/context/ProxyContextTest.java | 1 +
.../shardingsphere/proxy/frontend/state/ProxyStateContext.java | 2 +-
4 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/ProxyInfoCollector.java b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/ProxyInfoCollector.java
index 4ac9f54..4181c57 100644
--- a/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/ProxyInfoCollector.java
+++ b/shardingsphere-agent/shardingsphere-agent-plugins/shardingsphere-agent-plugin-metrics/shardingsphere-agent-metrics-prometheus/src/main/java/org/apache/shardingsphere/agent/metrics/prometheus/collector/ProxyInfoCollector.java
@@ -22,7 +22,6 @@ import io.prometheus.client.GaugeMetricFamily;
import org.apache.shardingsphere.agent.metrics.api.constant.MetricIds;
import org.apache.shardingsphere.agent.metrics.api.util.MetricsUtil;
import org.apache.shardingsphere.agent.metrics.prometheus.wrapper.PrometheusWrapperFactory;
-import org.apache.shardingsphere.infra.state.StateContext;
import org.apache.shardingsphere.infra.state.StateType;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -57,12 +56,11 @@ public final class ProxyInfoCollector extends Collector {
return result;
}
Optional<GaugeMetricFamily> proxyInfo = FACTORY.createGaugeMetricFamily(MetricIds.PROXY_INFO);
- StateContext currentStateContext = ProxyContext.getInstance().getStateContext();
- if (null != currentStateContext) {
+ ProxyContext.getInstance().getStateContext().ifPresent(optional -> {
proxyInfo.ifPresent(m ->
- m.addMetric(Collections.singletonList(PROXY_STATE), PROXY_STATE_MAP.get(currentStateContext.getCurrentState())));
+ m.addMetric(Collections.singletonList(PROXY_STATE), PROXY_STATE_MAP.get(optional.getCurrentState())));
proxyInfo.ifPresent(result::add);
- }
+ });
return result;
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
index aac8767..50c8fdc 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
@@ -30,6 +30,7 @@ import org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedExcep
import java.util.Collection;
import java.util.LinkedList;
+import java.util.Optional;
/**
* Proxy context.
@@ -99,11 +100,8 @@ public final class ProxyContext {
*
* @return state context
*/
- public StateContext getStateContext() {
- if (null == contextManager.getInstanceContext()) {
- return null;
- }
- return contextManager.getInstanceContext().getState();
+ public Optional<StateContext> getStateContext() {
+ return null == contextManager.getInstanceContext() ? Optional.empty() : Optional.ofNullable(contextManager.getInstanceContext().getState());
}
/**
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
index 083ba70..7ab125b 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
@@ -61,6 +61,7 @@ public final class ProxyContextTest {
proxyContext.init(contextManager);
assertThat(proxyContext.getContextManager().getMetaDataContexts(), is(metaDataContexts));
assertThat(proxyContext.getContextManager().getTransactionContexts(), is(transactionContexts));
+ assertTrue(proxyContext.getStateContext().isPresent());
}
@Test
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateContext.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateContext.java
index 474da56..ee42408 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateContext.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateContext.java
@@ -64,6 +64,6 @@ public final class ProxyStateContext {
*/
public static void execute(final ChannelHandlerContext context, final Object message,
final DatabaseProtocolFrontendEngine databaseProtocolFrontendEngine, final ConnectionSession connectionSession) {
- STATES.get(ProxyContext.getInstance().getStateContext().getCurrentState()).execute(context, message, databaseProtocolFrontendEngine, connectionSession);
+ ProxyContext.getInstance().getStateContext().ifPresent(optional -> STATES.get(optional.getCurrentState()).execute(context, message, databaseProtocolFrontendEngine, connectionSession));
}
}