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);
         }
     }
 }

Reply via email to