You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2022/12/24 13:02:48 UTC
[iotdb] 02/02: perfect procedure test
This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch beyyes/procedure
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 2ba3c50971c2124ff60004285c9067c747bd5c8d
Author: Beyyes <cg...@foxmail.com>
AuthorDate: Sat Dec 24 21:02:23 2022 +0800
perfect procedure test
---
.../procedure/TestFirstStateMachineProcedure.java | 33 +++++++++
.../confignode/procedure/TestSTMProcedure.java | 14 ++--
...cedure.java => FirstStateMachineProcedure.java} | 78 ++++++++++++++++------
.../confignode/procedure/entity/IncProcedure.java | 46 ++++++++++++-
...edure.java => SecondStateMachineProcedure.java} | 65 ++++++++++++------
.../procedure/entity/SimpleLockProcedure.java | 3 +-
.../procedure/entity/SimpleSTMProcedure.java | 8 +--
.../procedure/entity/SleepProcedure.java | 8 ++-
.../procedure/entity/StuckProcedure.java | 1 -
.../confignode/procedure/entity/TestState.java | 26 ++++++++
.../confignode/procedure/env/TestProcEnv.java | 7 ++
11 files changed, 233 insertions(+), 56 deletions(-)
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/TestFirstStateMachineProcedure.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/TestFirstStateMachineProcedure.java
new file mode 100644
index 0000000000..4a3025d4f7
--- /dev/null
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/TestFirstStateMachineProcedure.java
@@ -0,0 +1,33 @@
+package org.apache.iotdb.confignode.procedure;
+
+import org.apache.iotdb.confignode.procedure.entity.FirstStateMachineProcedure;
+import org.apache.iotdb.confignode.procedure.env.TestProcEnv;
+import org.apache.iotdb.confignode.procedure.util.ProcedureTestUtil;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class TestFirstStateMachineProcedure extends TestProcedureBase {
+
+ public static final Logger LOGGER = LoggerFactory.getLogger(TestFirstStateMachineProcedure.class);
+
+ @Test
+ public void testRolledBackProcedure() {
+ FirstStateMachineProcedure firstProcedure = new FirstStateMachineProcedure();
+ firstProcedure.throwAtIndex = 3;
+ long procId = this.procExecutor.submitProcedure(firstProcedure);
+ ProcedureTestUtil.waitForProcedure(this.procExecutor, procId);
+ TestProcEnv env = this.getEnv();
+ AtomicInteger acc = env.getAcc();
+ int successCount = env.successCount.get();
+ int rolledBackCount = env.rolledBackCount.get();
+ LOGGER.info("all count: " + acc.get());
+ LOGGER.info("success count: " + successCount);
+ LOGGER.info("rolledback count: " + rolledBackCount);
+ Assert.assertEquals(1 + successCount - rolledBackCount, acc.get());
+ }
+}
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/TestSTMProcedure.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/TestSTMProcedure.java
index 0eff94ff97..5c5639a613 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/TestSTMProcedure.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/TestSTMProcedure.java
@@ -45,18 +45,18 @@ public class TestSTMProcedure extends TestProcedureBase {
}
@Test
- public void testRolledBackProcedure() {
+ public void testRolledBackProcedure() throws InterruptedException {
SimpleSTMProcedure stmProcedure = new SimpleSTMProcedure();
- stmProcedure.throwAtIndex = 4;
+ stmProcedure.throwAtIndex = 3;
long procId = this.procExecutor.submitProcedure(stmProcedure);
ProcedureTestUtil.waitForProcedure(this.procExecutor, procId);
TestProcEnv env = this.getEnv();
AtomicInteger acc = env.getAcc();
- int success = env.successCount.get();
- int rolledback = env.rolledBackCount.get();
+ int successCount = env.successCount.get();
+ int rolledBackCount = env.rolledBackCount.get();
LOGGER.info("all count: " + acc.get());
- LOGGER.info("success count: " + success);
- LOGGER.info("rolledback count: " + rolledback);
- Assert.assertEquals(1 + success - rolledback, acc.get());
+ LOGGER.info("success count: " + successCount);
+ LOGGER.info("rolledback count: " + rolledBackCount);
+ Assert.assertEquals(1 + successCount - rolledBackCount, acc.get());
}
}
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/FirstStateMachineProcedure.java
similarity index 52%
copy from confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java
copy to confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/FirstStateMachineProcedure.java
index 99c7b4e5d1..b20d8d6362 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/FirstStateMachineProcedure.java
@@ -19,30 +19,23 @@
package org.apache.iotdb.confignode.procedure.entity;
-import org.apache.iotdb.confignode.procedure.TestSTMProcedure;
import org.apache.iotdb.confignode.procedure.env.TestProcEnv;
import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
-import org.apache.iotdb.confignode.procedure.exception.ProcedureSuspendedException;
-import org.apache.iotdb.confignode.procedure.exception.ProcedureYieldException;
import org.apache.iotdb.confignode.procedure.impl.statemachine.StateMachineProcedure;
+import org.apache.iotdb.confignode.procedure.state.ProcedureLockState;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
-public class SimpleSTMProcedure
- extends StateMachineProcedure<TestProcEnv, SimpleSTMProcedure.TestState> {
+public class FirstStateMachineProcedure extends StateMachineProcedure<TestProcEnv, TestState> {
- public static final Logger LOGGER = LoggerFactory.getLogger(SimpleSTMProcedure.class);
+ public static final Logger LOGGER = LoggerFactory.getLogger(FirstStateMachineProcedure.class);
- public int throwAtIndex = -1;
+ private static final String FIRST = "FirstStateMachineProcedure";
- public enum TestState {
- STEP_1,
- STEP_2,
- STEP_3
- }
+ public int throwAtIndex = -1;
@Override
protected Flow executeFromState(TestProcEnv testProcEnv, TestState testState) {
@@ -50,26 +43,32 @@ public class SimpleSTMProcedure
try {
switch (testState) {
case STEP_1:
+ LOGGER.info("Execute {} STEP_1", FIRST);
acc.getAndAdd(1);
setNextState(TestState.STEP_2);
break;
case STEP_2:
- for (int i = 0; i < 10; i++) {
- IncProcedure child = new IncProcedure();
- if (i == throwAtIndex) {
- child.throwEx = true;
+ LOGGER.info("Execute {} STEP_2", FIRST);
+ for (int i = 0; i < 3; i++) {
+ SecondStateMachineProcedure child = new SecondStateMachineProcedure();
+ if (i == 1) {
+ child.throwAtIndex = i;
}
addChildProcedure(child);
}
setNextState(TestState.STEP_3);
break;
case STEP_3:
+ LOGGER.info("Execute FirstStateMachineProcedure STEP_3");
+ if (true) {
+ throw new ProcedureException("xx");
+ }
acc.getAndAdd(-1);
return Flow.NO_MORE_STATE;
}
} catch (Exception e) {
if (isRollbackSupported(testState)) {
- setFailure("proc failed", new ProcedureException(e));
+ setFailure("FirstStateMachineProcedure failed", new ProcedureException(e));
}
}
return Flow.HAS_MORE_STATE;
@@ -82,7 +81,18 @@ public class SimpleSTMProcedure
@Override
protected void rollbackState(TestProcEnv testProcEnv, TestState testState) {
- LOGGER.info("Execute rollback in SimpleSTMProcedure, testState: {}", testState);
+ switch (testState) {
+ case STEP_1:
+ LOGGER.info("Execute rollback in First STEP_1, procId: {}", getProcId());
+ break;
+ case STEP_2:
+ LOGGER.info("Execute rollback in First STEP_2, procId: {}", getProcId());
+ break;
+ case STEP_3:
+ default:
+ LOGGER.info("Execute rollback in First STEP_3, procId: {}", getProcId());
+ break;
+ }
}
@Override
@@ -99,4 +109,34 @@ public class SimpleSTMProcedure
protected TestState getInitialState() {
return TestState.STEP_1;
}
+
+ @Override
+ protected ProcedureLockState acquireLock(TestProcEnv testProcEnv) {
+ testProcEnv.getEnvLock().lock();
+ try {
+ if (testProcEnv.getExecuteLock().tryLock(this)) {
+ LOGGER.info("First {} acquire lock.", getProcId());
+ return ProcedureLockState.LOCK_ACQUIRED;
+ }
+ testProcEnv.getExecuteLock().waitProcedure(this);
+
+ LOGGER.info("First {} wait for lock.", getProcId());
+ return ProcedureLockState.LOCK_EVENT_WAIT;
+ } finally {
+ testProcEnv.getEnvLock().unlock();
+ }
+ }
+
+ @Override
+ protected void releaseLock(TestProcEnv testProcEnv) {
+ testProcEnv.getEnvLock().lock();
+ try {
+ LOGGER.info("First {} release lock.", getProcId());
+ if (testProcEnv.getExecuteLock().releaseLock(this)) {
+ testProcEnv.getExecuteLock().wakeWaitingProcedures(testProcEnv.getScheduler());
+ }
+ } finally {
+ testProcEnv.getEnvLock().unlock();
+ }
+ }
}
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/IncProcedure.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/IncProcedure.java
index 2a86110825..d782f06fe6 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/IncProcedure.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/IncProcedure.java
@@ -21,8 +21,13 @@ package org.apache.iotdb.confignode.procedure.entity;
import org.apache.iotdb.confignode.procedure.Procedure;
import org.apache.iotdb.confignode.procedure.env.TestProcEnv;
+import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
import org.apache.iotdb.confignode.procedure.exception.ProcedureSuspendedException;
import org.apache.iotdb.confignode.procedure.exception.ProcedureYieldException;
+import org.apache.iotdb.confignode.procedure.state.ProcedureLockState;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -30,25 +35,34 @@ import java.util.concurrent.atomic.AtomicInteger;
public class IncProcedure extends Procedure<TestProcEnv> {
+ public static final Logger LOGGER = LoggerFactory.getLogger(IncProcedure.class);
+
public boolean throwEx = false;
@Override
protected Procedure<TestProcEnv>[] execute(TestProcEnv testProcEnv)
throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {
+ LOGGER.info("IncProcedure {} execute start", getProcId());
AtomicInteger acc = testProcEnv.getAcc();
if (throwEx) {
+ LOGGER.info("IncProcedure {} throw exception", getProcId());
+ setFailure(new ProcedureException("exception in IncProcedure"));
throw new RuntimeException("throw a EXCEPTION");
}
+ // TimeUnit.SECONDS.sleep(5);
acc.getAndIncrement();
testProcEnv.successCount.getAndIncrement();
+ LOGGER.info("IncProcedure {} execute successfully, acc: {}", getProcId(), acc.get());
return null;
}
@Override
- protected void rollback(TestProcEnv testProcEnv) throws IOException, InterruptedException {
+ protected void rollback(TestProcEnv testProcEnv) {
+ LOGGER.info("IncProcedure {} start rollback", getProcId());
AtomicInteger acc = testProcEnv.getAcc();
acc.getAndDecrement();
testProcEnv.rolledBackCount.getAndIncrement();
+ LOGGER.info("IncProcedure {} end rollback successfully, acc: {}", getProcId(), acc.get());
}
@Override
@@ -61,4 +75,34 @@ public class IncProcedure extends Procedure<TestProcEnv> {
stream.writeInt(TestProcedureFactory.TestProcedureType.INC_PROCEDURE.ordinal());
super.serialize(stream);
}
+
+ @Override
+ protected ProcedureLockState acquireLock(TestProcEnv testProcEnv) {
+ testProcEnv.getEnvLock().lock();
+ try {
+ if (testProcEnv.getExecuteLock().tryLock(this)) {
+ LOGGER.info("IntProcedureId {} acquire lock.", getProcId());
+ return ProcedureLockState.LOCK_ACQUIRED;
+ }
+ testProcEnv.getExecuteLock().waitProcedure(this);
+
+ LOGGER.info("IntProcedureId {} wait for lock.", getProcId());
+ return ProcedureLockState.LOCK_EVENT_WAIT;
+ } finally {
+ testProcEnv.getEnvLock().unlock();
+ }
+ }
+
+ @Override
+ protected void releaseLock(TestProcEnv testProcEnv) {
+ testProcEnv.getEnvLock().lock();
+ try {
+ LOGGER.info("IntProcedureId {} release lock.", getProcId());
+ if (testProcEnv.getExecuteLock().releaseLock(this)) {
+ testProcEnv.getExecuteLock().wakeWaitingProcedures(testProcEnv.getScheduler());
+ }
+ } finally {
+ testProcEnv.getEnvLock().unlock();
+ }
+ }
}
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SecondStateMachineProcedure.java
similarity index 56%
copy from confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java
copy to confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SecondStateMachineProcedure.java
index 99c7b4e5d1..72634489ca 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SecondStateMachineProcedure.java
@@ -19,57 +19,47 @@
package org.apache.iotdb.confignode.procedure.entity;
-import org.apache.iotdb.confignode.procedure.TestSTMProcedure;
import org.apache.iotdb.confignode.procedure.env.TestProcEnv;
import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
-import org.apache.iotdb.confignode.procedure.exception.ProcedureSuspendedException;
-import org.apache.iotdb.confignode.procedure.exception.ProcedureYieldException;
import org.apache.iotdb.confignode.procedure.impl.statemachine.StateMachineProcedure;
+import org.apache.iotdb.confignode.procedure.state.ProcedureLockState;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
-public class SimpleSTMProcedure
- extends StateMachineProcedure<TestProcEnv, SimpleSTMProcedure.TestState> {
+public class SecondStateMachineProcedure extends StateMachineProcedure<TestProcEnv, TestState> {
- public static final Logger LOGGER = LoggerFactory.getLogger(SimpleSTMProcedure.class);
+ public static final Logger LOGGER = LoggerFactory.getLogger(SecondStateMachineProcedure.class);
public int throwAtIndex = -1;
- public enum TestState {
- STEP_1,
- STEP_2,
- STEP_3
- }
-
@Override
protected Flow executeFromState(TestProcEnv testProcEnv, TestState testState) {
AtomicInteger acc = testProcEnv.getAcc();
try {
switch (testState) {
case STEP_1:
+ LOGGER.info("Execute SecondStateMachineProcedure {} STEP_1", getProcId());
acc.getAndAdd(1);
setNextState(TestState.STEP_2);
break;
case STEP_2:
- for (int i = 0; i < 10; i++) {
- IncProcedure child = new IncProcedure();
- if (i == throwAtIndex) {
- child.throwEx = true;
- }
- addChildProcedure(child);
+ LOGGER.info("Execute SecondStateMachineProcedure {} STEP_2", getProcId());
+ if (throwAtIndex > 0) {
+ throw new RuntimeException("throw EXCEPTION in SecondStateMachineProcedure");
}
setNextState(TestState.STEP_3);
break;
case STEP_3:
+ LOGGER.info("Execute SecondStateMachineProcedure {} STEP_3", getProcId());
acc.getAndAdd(-1);
return Flow.NO_MORE_STATE;
}
} catch (Exception e) {
if (isRollbackSupported(testState)) {
- setFailure("proc failed", new ProcedureException(e));
+ setFailure("SecondStateMachineProcedure failed", new ProcedureException(e));
}
}
return Flow.HAS_MORE_STATE;
@@ -82,7 +72,10 @@ public class SimpleSTMProcedure
@Override
protected void rollbackState(TestProcEnv testProcEnv, TestState testState) {
- LOGGER.info("Execute rollback in SimpleSTMProcedure, testState: {}", testState);
+ LOGGER.info(
+ "Execute rollback in SecondStateMachineProcedure {}, testState: {}",
+ getProcId(),
+ testState);
}
@Override
@@ -99,4 +92,34 @@ public class SimpleSTMProcedure
protected TestState getInitialState() {
return TestState.STEP_1;
}
+
+ @Override
+ protected ProcedureLockState acquireLock(TestProcEnv testProcEnv) {
+ testProcEnv.getEnvLock().lock();
+ try {
+ if (testProcEnv.getExecuteLock().tryLock(this)) {
+ LOGGER.info("Second {} acquire lock.", getProcId());
+ return ProcedureLockState.LOCK_ACQUIRED;
+ }
+ testProcEnv.getExecuteLock().waitProcedure(this);
+
+ LOGGER.info("Second {} wait for lock.", getProcId());
+ return ProcedureLockState.LOCK_EVENT_WAIT;
+ } finally {
+ testProcEnv.getEnvLock().unlock();
+ }
+ }
+
+ @Override
+ protected void releaseLock(TestProcEnv testProcEnv) {
+ testProcEnv.getEnvLock().lock();
+ try {
+ LOGGER.info("Second {} release lock.", getProcId());
+ if (testProcEnv.getExecuteLock().releaseLock(this)) {
+ testProcEnv.getExecuteLock().wakeWaitingProcedures(testProcEnv.getScheduler());
+ }
+ } finally {
+ testProcEnv.getEnvLock().unlock();
+ }
+ }
}
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleLockProcedure.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleLockProcedure.java
index a88afdb4f4..553d02b295 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleLockProcedure.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleLockProcedure.java
@@ -25,11 +25,10 @@ import org.apache.iotdb.confignode.procedure.exception.ProcedureSuspendedExcepti
import org.apache.iotdb.confignode.procedure.exception.ProcedureYieldException;
import org.apache.iotdb.confignode.procedure.scheduler.SimpleProcedureScheduler;
import org.apache.iotdb.confignode.procedure.state.ProcedureLockState;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-
public class SimpleLockProcedure extends Procedure<TestProcEnv> {
private static final Logger LOGGER = LoggerFactory.getLogger(SimpleLockProcedure.class);
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java
index 99c7b4e5d1..8009e52fdc 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SimpleSTMProcedure.java
@@ -19,16 +19,13 @@
package org.apache.iotdb.confignode.procedure.entity;
-import org.apache.iotdb.confignode.procedure.TestSTMProcedure;
import org.apache.iotdb.confignode.procedure.env.TestProcEnv;
import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
-import org.apache.iotdb.confignode.procedure.exception.ProcedureSuspendedException;
-import org.apache.iotdb.confignode.procedure.exception.ProcedureYieldException;
import org.apache.iotdb.confignode.procedure.impl.statemachine.StateMachineProcedure;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
public class SimpleSTMProcedure
@@ -50,10 +47,12 @@ public class SimpleSTMProcedure
try {
switch (testState) {
case STEP_1:
+ LOGGER.info("Execute STM Procedure STEP_1");
acc.getAndAdd(1);
setNextState(TestState.STEP_2);
break;
case STEP_2:
+ LOGGER.info("Execute STM Procedure STEP_2");
for (int i = 0; i < 10; i++) {
IncProcedure child = new IncProcedure();
if (i == throwAtIndex) {
@@ -64,6 +63,7 @@ public class SimpleSTMProcedure
setNextState(TestState.STEP_3);
break;
case STEP_3:
+ LOGGER.info("Execute STM Procedure STEP_3");
acc.getAndAdd(-1);
return Flow.NO_MORE_STATE;
}
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SleepProcedure.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SleepProcedure.java
index f3b2abf054..4474a0a91e 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SleepProcedure.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/SleepProcedure.java
@@ -25,14 +25,20 @@ import org.apache.iotdb.confignode.procedure.exception.ProcedureSuspendedExcepti
import org.apache.iotdb.confignode.procedure.exception.ProcedureYieldException;
import org.apache.iotdb.confignode.procedure.util.ProcedureTestUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.DataOutputStream;
import java.io.IOException;
public class SleepProcedure extends Procedure<TestProcEnv> {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(Procedure.class);
+
@Override
protected Procedure<TestProcEnv>[] execute(TestProcEnv testProcEnv)
throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {
- System.out.println("Procedure is sleeping.");
+ LOGGER.info("SleepProcedure is sleeping.");
ProcedureTestUtil.sleepWithoutInterrupt(2000);
return null;
}
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/StuckProcedure.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/StuckProcedure.java
index 1f1204de44..8391906811 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/StuckProcedure.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/StuckProcedure.java
@@ -22,7 +22,6 @@ package org.apache.iotdb.confignode.procedure.entity;
import org.apache.iotdb.confignode.procedure.Procedure;
import org.apache.iotdb.confignode.procedure.env.TestProcEnv;
-import java.io.IOException;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/TestState.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/TestState.java
new file mode 100644
index 0000000000..b332e00315
--- /dev/null
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/entity/TestState.java
@@ -0,0 +1,26 @@
+/*
+ * 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.iotdb.confignode.procedure.entity;
+
+public enum TestState {
+ STEP_1,
+ STEP_2,
+ STEP_3
+}
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/env/TestProcEnv.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/env/TestProcEnv.java
index 63e4f1997b..4fdac52d4f 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/env/TestProcEnv.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/env/TestProcEnv.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.confignode.procedure.env;
+import org.apache.iotdb.confignode.procedure.scheduler.LockQueue;
import org.apache.iotdb.confignode.procedure.scheduler.ProcedureScheduler;
import java.util.concurrent.atomic.AtomicInteger;
@@ -39,6 +40,8 @@ public class TestProcEnv {
public StringBuilder lockAcquireSeq = new StringBuilder();
+ private final LockQueue procedureExecuteLock = new LockQueue();
+
public AtomicInteger getAcc() {
return acc;
}
@@ -51,6 +54,10 @@ public class TestProcEnv {
return envLock;
}
+ public LockQueue getExecuteLock() {
+ return this.procedureExecuteLock;
+ }
+
public void setScheduler(ProcedureScheduler scheduler) {
this.scheduler = scheduler;
}