This is an automated email from the ASF dual-hosted git repository.
xiaoyu 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 b2d8d5d Move StateMachine into infra module (#8186)
b2d8d5d is described below
commit b2d8d5d832fce4f829f5adc01700fab93b655782
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Nov 17 14:15:10 2020 +0800
Move StateMachine into infra module (#8186)
* Move RuntimeStateType to infra module
* Update javadoc
* Rename StateType
* Move StateMachine into infra module
* Add StateMachineTest
---
.../shardingsphere/infra/state/StateMachine.java | 32 +++++++++++++++++++---
.../shardingsphere/infra/state/StateType.java | 6 ++--
.../infra/state/StateMachineTest.java | 32 ++++++++++++++++++----
.../proxy/frontend/state/ProxyStateMachine.java | 25 +++++------------
.../state/impl/CircuitBreakProxyState.java | 8 +++---
5 files changed, 68 insertions(+), 35 deletions(-)
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateType.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/state/StateMachine.java
similarity index 53%
copy from
shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateType.java
copy to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/state/StateMachine.java
index a56cd29..3939e3b 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateType.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/state/StateMachine.java
@@ -15,12 +15,36 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.frontend.state;
+package org.apache.shardingsphere.infra.state;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+import java.util.concurrent.atomic.AtomicReference;
/**
- * Proxy state type.
+ * State machine.
*/
-public enum ProxyStateType {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class StateMachine {
+
+ private static final AtomicReference<StateType> CURRENT_STATE = new
AtomicReference<>(StateType.OK);
+
+ /**
+ * Switch state.
+ *
+ * @param type state type
+ */
+ public static void switchState(final StateType type) {
+ CURRENT_STATE.set(type);
+ }
- OK, LOCK, CIRCUIT_BREAK
+ /**
+ * Get current state.
+ *
+ * @return current state
+ */
+ public static StateType getCurrentState() {
+ return CURRENT_STATE.get();
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateType.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/state/StateType.java
similarity index 88%
copy from
shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateType.java
copy to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/state/StateType.java
index a56cd29..8c842f8 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateType.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/state/StateType.java
@@ -15,12 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.frontend.state;
+package org.apache.shardingsphere.infra.state;
/**
- * Proxy state type.
+ * State type.
*/
-public enum ProxyStateType {
+public enum StateType {
OK, LOCK, CIRCUIT_BREAK
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateType.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/state/StateMachineTest.java
similarity index 53%
rename from
shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateType.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/state/StateMachineTest.java
index a56cd29..e5801a6 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateType.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/state/StateMachineTest.java
@@ -15,12 +15,32 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.frontend.state;
+package org.apache.shardingsphere.infra.state;
-/**
- * Proxy state type.
- */
-public enum ProxyStateType {
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public final class StateMachineTest {
+
+ private StateType originalStateType;
+
+ @Before
+ public void setUp() {
+ originalStateType = StateMachine.getCurrentState();
+ }
+
+ @After
+ public void tearDown() {
+ StateMachine.switchState(originalStateType);
+ }
- OK, LOCK, CIRCUIT_BREAK
+ @Test
+ public void assertSwitchState() {
+ StateMachine.switchState(StateType.CIRCUIT_BREAK);
+ assertThat(StateMachine.getCurrentState(),
is(StateType.CIRCUIT_BREAK));
+ }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateMachine.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateMachine.java
index a6cd219..88bb0fc 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateMachine.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/ProxyStateMachine.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.proxy.frontend.state;
import io.netty.channel.ChannelHandlerContext;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.state.StateMachine;
+import org.apache.shardingsphere.infra.state.StateType;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
import
org.apache.shardingsphere.proxy.frontend.state.impl.CircuitBreakProxyState;
@@ -28,7 +30,6 @@ import
org.apache.shardingsphere.proxy.frontend.state.impl.OKProxyState;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicReference;
/**
* Proxy state machine.
@@ -36,15 +37,12 @@ import java.util.concurrent.atomic.AtomicReference;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class ProxyStateMachine {
- private static final Map<ProxyStateType, ProxyState> PROXY_STATE_MAP = new
ConcurrentHashMap<>(3, 1);
-
- private static final AtomicReference<ProxyState> CURRENT_STATE = new
AtomicReference<>();
+ private static final Map<StateType, ProxyState> PROXY_STATE_MAP = new
ConcurrentHashMap<>(3, 1);
static {
- PROXY_STATE_MAP.put(ProxyStateType.OK, new OKProxyState());
- PROXY_STATE_MAP.put(ProxyStateType.LOCK, new LockProxyState());
- PROXY_STATE_MAP.put(ProxyStateType.CIRCUIT_BREAK, new
CircuitBreakProxyState());
- CURRENT_STATE.set(PROXY_STATE_MAP.get(ProxyStateType.OK));
+ PROXY_STATE_MAP.put(StateType.OK, new OKProxyState());
+ PROXY_STATE_MAP.put(StateType.LOCK, new LockProxyState());
+ PROXY_STATE_MAP.put(StateType.CIRCUIT_BREAK, new
CircuitBreakProxyState());
}
/**
@@ -57,15 +55,6 @@ public final class ProxyStateMachine {
*/
public static void execute(final ChannelHandlerContext context, final
Object message,
final DatabaseProtocolFrontendEngine
databaseProtocolFrontendEngine, final BackendConnection backendConnection) {
- CURRENT_STATE.get().execute(context, message,
databaseProtocolFrontendEngine, backendConnection);
- }
-
- /**
- * Switch proxy state.
- *
- * @param type proxy state type
- */
- public static void switchState(final ProxyStateType type) {
- CURRENT_STATE.set(PROXY_STATE_MAP.get(type));
+ PROXY_STATE_MAP.get(StateMachine.getCurrentState()).execute(context,
message, databaseProtocolFrontendEngine, backendConnection);
}
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/CircuitBreakProxyState.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/CircuitBreakProxyState.java
index edf9e92..f000bc7 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/CircuitBreakProxyState.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/CircuitBreakProxyState.java
@@ -22,12 +22,12 @@ import io.netty.channel.ChannelHandlerContext;
import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.governance.core.event.GovernanceEventBus;
import
org.apache.shardingsphere.governance.core.registry.event.CircuitStateChangedEvent;
+import org.apache.shardingsphere.infra.state.StateMachine;
+import org.apache.shardingsphere.infra.state.StateType;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.exception.CircuitBreakException;
import
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
import org.apache.shardingsphere.proxy.frontend.state.ProxyState;
-import org.apache.shardingsphere.proxy.frontend.state.ProxyStateMachine;
-import org.apache.shardingsphere.proxy.frontend.state.ProxyStateType;
import java.util.Optional;
@@ -55,10 +55,10 @@ public final class CircuitBreakProxyState implements
ProxyState {
@Subscribe
public synchronized void renew(final CircuitStateChangedEvent event) {
if (event.isCircuitBreak()) {
- ProxyStateMachine.switchState(ProxyStateType.CIRCUIT_BREAK);
+ StateMachine.switchState(StateType.CIRCUIT_BREAK);
} else {
// TODO check previous state, maybe lock
- ProxyStateMachine.switchState(ProxyStateType.OK);
+ StateMachine.switchState(StateType.OK);
}
}
}