Skip to content

Commit 2de9acd

Browse files
committed
get rid of the "optimized" parameter that existed for demonstration purposes
1 parent cf6be9d commit 2de9acd

3 files changed

Lines changed: 37 additions & 54 deletions

File tree

driver-core/src/main/com/mongodb/internal/async/AsyncRunnable.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -253,16 +253,9 @@ default AsyncRunnable thenRunRetryingWhile(
253253
* @see AsyncCallbackLoop
254254
*/
255255
default AsyncRunnable thenRunDoWhileLoop(final AsyncRunnable loopBodyRunnable, final BooleanSupplier whileCheck) {
256-
return thenRunDoWhileLoop(true, loopBodyRunnable, whileCheck);
257-
}
258-
259-
default AsyncRunnable thenRunDoWhileLoop(
260-
final boolean optimized,
261-
final AsyncRunnable loopBodyRunnable,
262-
final BooleanSupplier whileCheck) {
263256
return thenRun(finalCallback -> {
264257
LoopState loopState = new LoopState();
265-
new AsyncCallbackLoop(optimized, loopState, iterationCallback -> {
258+
new AsyncCallbackLoop(loopState, iterationCallback -> {
266259

267260
loopBodyRunnable.finish((result, t) -> {
268261
if (t != null) {

driver-core/src/main/com/mongodb/internal/async/function/AsyncCallbackLoop.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,7 @@ public final class AsyncCallbackLoop implements AsyncCallbackRunnable {
4848
* @param body The body of the loop.
4949
*/
5050
public AsyncCallbackLoop(final LoopState state, final AsyncCallbackRunnable body) {
51-
this(true, state, body);
52-
}
53-
54-
public AsyncCallbackLoop(final boolean optimized, final LoopState state, final AsyncCallbackRunnable body) {
55-
this.body = new Body(optimized, state, body);
51+
this.body = new Body(state, body);
5652
}
5753

5854
@Override
@@ -62,13 +58,11 @@ public void run(final SingleResultCallback<Void> callback) {
6258

6359
private static final class Body {
6460
private final AsyncCallbackRunnable wrapped;
65-
private final boolean optimized;
6661
private final LoopState state;
6762
private boolean reenteredLoopMethod;
6863

69-
private Body(final boolean optimized, final LoopState state, final AsyncCallbackRunnable body) {
64+
private Body(final LoopState state, final AsyncCallbackRunnable body) {
7065
this.wrapped = body;
71-
this.optimized = optimized;
7266
this.state = state;
7367
reenteredLoopMethod = false;
7468
}
@@ -85,11 +79,6 @@ boolean loop(final ReusableLoopCallback callback) {
8579
done[0] = localDone;
8680
return;
8781
}
88-
if (!optimized) {
89-
localDone = loop(callback);
90-
done[0] = localDone;
91-
return;
92-
}
9382
if (!reenteredLoopMethod) {
9483
reenteredLoopMethod = true;
9584
try {

driver-core/src/test/unit/com/mongodb/internal/async/VakoTest.java

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,13 @@
3636
class VakoTest {
3737
@ParameterizedTest
3838
@CsvSource({
39-
"false, 20",
40-
"true, 20"
39+
"10"
4140
})
42-
void asyncCallbackLoop(final boolean optimized, final int iterations) throws Exception {
41+
void asyncCallbackLoop(final int iterations) throws Exception {
4342
System.err.printf("baselineStackDepth=%d%n", Thread.currentThread().getStackTrace().length);
4443
CompletableFuture<Void> join = new CompletableFuture<>();
4544
LoopState loopState = new LoopState();
46-
new AsyncCallbackLoop(optimized, loopState, c -> {
45+
new AsyncCallbackLoop(loopState, c -> {
4746
int iteration = loopState.iteration();
4847
System.err.printf("iteration=%d, callStackDepth=%d%n", iteration, Thread.currentThread().getStackTrace().length);
4948
if (!loopState.breakAndCompleteIf(() -> iteration == (iterations - 1), c)) {
@@ -59,66 +58,68 @@ void asyncCallbackLoop(final boolean optimized, final int iterations) throws Exc
5958
}
6059
});
6160
join.get();
61+
System.err.printf("%n%nDONE%n%n");
6262
}
6363

6464
@ParameterizedTest()
6565
@CsvSource({
66-
"false, false, 0, 20",
67-
"false, true, 4, 20",
68-
"true, false, 0, 20",
69-
"true, true, 4, 20"
66+
"0, false, 0, 10",
67+
"0, true, 4, 10",
68+
"4, true, 0, 10"
7069
})
7170
void testThenRunDoWhileLoop(
72-
final boolean optimized,
73-
final boolean separateThread,
74-
final int sleepSeconds,
71+
final int blockInAsyncMethodTotalSeconds,
72+
final boolean asyncExecution,
73+
final int delayAsyncExecutionTotalSeconds,
7574
final int counterInitialValue) throws Exception {
76-
Duration totalSleepDuration = Duration.ofSeconds(sleepSeconds);
75+
Duration blockInAsyncMethodTotalDuration = Duration.ofSeconds(blockInAsyncMethodTotalSeconds);
76+
com.mongodb.assertions.Assertions.assertTrue(asyncExecution || delayAsyncExecutionTotalSeconds == 0);
77+
Duration delayAsyncExecutionTotalDuration = Duration.ofSeconds(delayAsyncExecutionTotalSeconds);
7778
StartTime start = StartTime.now();
7879
System.err.printf("baselineStackDepth=%d%n", Thread.currentThread().getStackTrace().length);
7980
CompletableFuture<Void> join = new CompletableFuture<>();
80-
asyncMethod1(optimized, separateThread, totalSleepDuration, new Counter(counterInitialValue), (r, t) -> {
81-
System.err.printf("TEST callback completed callStackDepth=%s, r=%s, t=%s%n",
82-
Thread.currentThread().getStackTrace().length, r, exceptionToString(t));
83-
if (t != null) {
84-
join.completeExceptionally(t);
85-
} else {
86-
join.complete(r);
87-
}
81+
asyncMethod1(blockInAsyncMethodTotalDuration, asyncExecution, delayAsyncExecutionTotalDuration, new Counter(counterInitialValue),
82+
(r, t) -> {
83+
System.err.printf("TEST callback completed callStackDepth=%s, r=%s, t=%s%n",
84+
Thread.currentThread().getStackTrace().length, r, exceptionToString(t));
85+
if (t != null) {
86+
join.completeExceptionally(t);
87+
} else {
88+
join.complete(r);
89+
}
8890
});
8991
System.err.printf("asyncMethod1 returned in %s%n", start.elapsed());
9092
join.get();
91-
sleep(Duration.ofSeconds(1));
92-
System.err.printf("%nDONE%n");
93+
System.err.printf("%n%nDONE%n%n");
9394
}
9495

9596
private static void asyncMethod1(
96-
final boolean optimized,
97-
final boolean separateThread,
98-
final Duration totalSleepDuration,
97+
final Duration blockInAsyncMethodTotalDuration,
98+
final boolean asyncExecution,
99+
final Duration delayAsyncExecutionTotalDuration,
99100
final Counter counter,
100101
final SingleResultCallback<Void> callback) {
101-
beginAsync().thenRunDoWhileLoop(optimized, c -> {
102-
// sleep(totalSleepDuration.dividedBy(counter.initial()));
102+
beginAsync().thenRunDoWhileLoop(c -> {
103+
sleep(blockInAsyncMethodTotalDuration.dividedBy(counter.initial()));
103104
StartTime start = StartTime.now();
104-
asyncMethod2(separateThread, totalSleepDuration, counter, c);
105+
asyncMethod2(asyncExecution, delayAsyncExecutionTotalDuration, counter, c);
105106
System.err.printf("asyncMethod2 returned in %s%n", start.elapsed());
106107
}, () -> !counter.done()).finish(callback);
107108
}
108109

109110
private static void asyncMethod2(
110-
final boolean separateThread,
111-
final Duration totalSleepDuration,
111+
final boolean asyncExecution,
112+
final Duration delayAsyncExecutionTotalDuration,
112113
final Counter counter,
113114
final SingleResultCallback<Void> callback) {
114115
Runnable action = () -> {
115-
sleep(totalSleepDuration.dividedBy(counter.initial()));
116+
sleep(delayAsyncExecutionTotalDuration.dividedBy(counter.initial()));
116117
counter.countDown();
117118
StartTime start = StartTime.now();
118119
callback.complete(callback);
119120
System.err.printf("asyncMethod2 callback.complete returned in %s%n", start.elapsed());
120121
};
121-
if (separateThread) {
122+
if (asyncExecution) {
122123
ForkJoinPool.commonPool().execute(action);
123124
} else {
124125
action.run();
@@ -169,7 +170,7 @@ private static String exceptionToString(@Nullable final Throwable t) {
169170
}
170171
}
171172

172-
private static void sleep(Duration duration) {
173+
private static void sleep(final Duration duration) {
173174
if (duration.isZero()) {
174175
return;
175176
}

0 commit comments

Comments
 (0)