Skip to content

Commit 16cf340

Browse files
committed
keep order of keys without reversing
1 parent 002f872 commit 16cf340

File tree

1 file changed

+13
-16
lines changed

1 file changed

+13
-16
lines changed

src/main/java/org/dataloader/DataLoaderHelper.java

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import java.time.Clock;
2020
import java.time.Instant;
2121
import java.util.ArrayList;
22+
import java.util.Arrays;
2223
import java.util.Collection;
23-
import java.util.Collections;
2424
import java.util.LinkedHashSet;
2525
import java.util.List;
2626
import java.util.Map;
@@ -228,9 +228,6 @@ DispatchResult<V> dispatch() {
228228
DataLoaderInstrumentationContext<DispatchResult<?>> instrCtx = ctxOrNoopCtx(instrumentation().beginDispatch(dataLoader));
229229

230230
boolean batchingEnabled = loaderOptions.batchingEnabled();
231-
final List<K> keys;
232-
final List<Object> callContexts;
233-
final List<CompletableFuture<V>> queuedFutures;
234231

235232
LoaderQueueEntry<K, V> loaderQueueEntryHead;
236233
while (true) {
@@ -246,21 +243,21 @@ DispatchResult<V> dispatch() {
246243
}
247244
int queueSize = calcQueueDepth(loaderQueueEntryHead);
248245
// we copy the pre-loaded set of futures ready for dispatch
249-
keys = new ArrayList<>(queueSize);
250-
callContexts = new ArrayList<>(queueSize);
251-
queuedFutures = new ArrayList<>(queueSize);
252-
246+
Object[] keysArray = new Object[queueSize];
247+
CompletableFuture[] queuedFuturesArray = new CompletableFuture[queueSize];
248+
Object[] callContextsArray = new Object[queueSize];
249+
int index = queueSize - 1;
253250
while (loaderQueueEntryHead != null) {
254-
keys.add(loaderQueueEntryHead.getKey());
255-
queuedFutures.add(loaderQueueEntryHead.getValue());
256-
callContexts.add(loaderQueueEntryHead.getCallContext());
251+
keysArray[index] = loaderQueueEntryHead.getKey();
252+
queuedFuturesArray[index] = loaderQueueEntryHead.getValue();
253+
callContextsArray[index] = loaderQueueEntryHead.getCallContext();
257254
loaderQueueEntryHead = loaderQueueEntryHead.prev;
255+
index--;
258256
}
259-
//TODO: to many test depend on the previous order, therefore we reverse the lists here
260-
// but this should not matter and we should change the tests
261-
Collections.reverse(keys);
262-
Collections.reverse(callContexts);
263-
Collections.reverse(queuedFutures);
257+
final List<K> keys = (List<K>) Arrays.asList(keysArray);
258+
final List<CompletableFuture<V>> queuedFutures = Arrays.asList(queuedFuturesArray);
259+
final List<Object> callContexts = Arrays.asList(callContextsArray);
260+
264261
lastDispatchTime.set(now());
265262
if (!batchingEnabled) {
266263
instrCtx.onDispatched();

0 commit comments

Comments
 (0)