Skip to content

Commit 5701cce

Browse files
committed
Use separate queues for state copy & state verify. (Fixes deadlock)
1 parent a8ec5f4 commit 5701cce

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

src/org/lockss/laaws/V2AuMover.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,28 @@ public class V2AuMover {
134134
public static final String DEFAULT_VERIFY_ITER_EXECUTOR_SPEC = "10;2";
135135

136136
/**
137-
* Index Executor. Controls max simulataneous finishBulk) operations
137+
* Index Executor. Controls max simulataneous finishBulk operations
138138
*/
139139
public static final String PARAM_INDEX_EXECUTOR_SPEC =
140140
EXEC_PREFIX + "index.spec";
141141
public static final String DEFAULT_INDEX_EXECUTOR_SPEC = "50;5";
142142

143143
/**
144-
* Misc Executor, runs AU State copy & verify, finishall.
144+
* State copy Executor, runs AU State copy.
145+
*/
146+
public static final String PARAM_STATE_COPY_EXECUTOR_SPEC =
147+
EXEC_PREFIX + "stateCopy.spec";
148+
public static final String DEFAULT_STATE_COPY_EXECUTOR_SPEC = "50;10";
149+
150+
/**
151+
* State verify Executor, runs AU State verify.
152+
*/
153+
public static final String PARAM_STATE_VERIFY_EXECUTOR_SPEC =
154+
EXEC_PREFIX + "stateVerify.spec";
155+
public static final String DEFAULT_STATE_VERIFY_EXECUTOR_SPEC = "50;10";
156+
157+
/**
158+
* Misc Executor, runs finishall.
145159
*/
146160
public static final String PARAM_MISC_EXECUTOR_SPEC =
147161
EXEC_PREFIX + "misc.spec";
@@ -397,6 +411,8 @@ enum UseFetchUrl {
397411
private ThreadPoolExecutor verifyIterExecutor;
398412
private ThreadPoolExecutor copyExecutor;
399413
private ThreadPoolExecutor verifyExecutor;
414+
private ThreadPoolExecutor stateCopyExecutor;
415+
private ThreadPoolExecutor stateVerifyExecutor;
400416
private ThreadPoolExecutor miscExecutor;
401417
private ThreadPoolExecutor indexExecutor;
402418

@@ -504,6 +520,14 @@ public void setConfig(Configuration config, Configuration oldConfig,
504520
indexExecutor = createOrReConfigureExecutor(indexExecutor, config,
505521
PARAM_INDEX_EXECUTOR_SPEC,
506522
DEFAULT_INDEX_EXECUTOR_SPEC);
523+
stateCopyExecutor =
524+
createOrReConfigureExecutor(stateCopyExecutor, config,
525+
PARAM_STATE_COPY_EXECUTOR_SPEC,
526+
DEFAULT_STATE_COPY_EXECUTOR_SPEC);
527+
stateVerifyExecutor =
528+
createOrReConfigureExecutor(stateVerifyExecutor, config,
529+
PARAM_STATE_VERIFY_EXECUTOR_SPEC,
530+
DEFAULT_STATE_VERIFY_EXECUTOR_SPEC);
507531
miscExecutor = createOrReConfigureExecutor(miscExecutor, config,
508532
PARAM_MISC_EXECUTOR_SPEC,
509533
DEFAULT_MISC_EXECUTOR_SPEC);
@@ -1061,11 +1085,11 @@ void doAction(AuStatus auStat, Action action) {
10611085
break;
10621086
case EnqCopyState:
10631087
log.debug2("Enqueueing copy AU state: " + auName);
1064-
enqueueTask(MigrationTask.copyAuState(this, au), auStat, miscExecutor);
1088+
enqueueTask(MigrationTask.copyAuState(this, au), auStat, stateCopyExecutor);
10651089
break;
10661090
case EnqCheckState:
10671091
log.debug2("Enqueueing check AU state: " + auName);
1068-
enqueueTask(MigrationTask.checkAuState(this, au), auStat, miscExecutor);
1092+
enqueueTask(MigrationTask.checkAuState(this, au), auStat, stateVerifyExecutor);
10691093
break;
10701094
case EnqIndex:
10711095
if (auStat.isBulk()) {
@@ -1697,6 +1721,8 @@ public List<String> getInstruments() {
16971721
res.add(getExecutorStats("Copy", copyExecutor));
16981722
res.add(getExecutorStats("Verify", verifyExecutor));
16991723
res.add(getExecutorStats("Index", indexExecutor));
1724+
res.add(getExecutorStats("StateCopy", stateCopyExecutor));
1725+
res.add(getExecutorStats("StateVerify", stateVerifyExecutor));
17001726
res.add(getExecutorStats("Misc", miscExecutor));
17011727
return res;
17021728
}

0 commit comments

Comments
 (0)