@@ -67,6 +67,8 @@ public class LocationAwareSchedulerV2 extends SchedulerWithDaemonSet {
67
67
protected final int copySameTaskInParallel ;
68
68
protected final int maxHeldCopyTaskReady ;
69
69
70
+ private final FinalizerThread <Tuple <CopyTask , Boolean >> finalizerThread ;
71
+
70
72
/**
71
73
* This value must be between 1 and 100.
72
74
* 100 means that the data will be copied with full speed.
@@ -127,6 +129,8 @@ public LocationAwareSchedulerV2(
127
129
this .copyInAdvance = new CopyInAdvanceNodeWithMostData ( getCurrentlyCopying (), inputAlignment , this .copySameTaskInParallel );
128
130
this .maxHeldCopyTaskReady = config .maxHeldCopyTaskReady == null ? 3 : config .maxHeldCopyTaskReady ;
129
131
this .prioPhaseThree = config .prioPhaseThree == null ? 70 : config .prioPhaseThree ;
132
+ finalizerThread = new FinalizerThread <>( x -> processCopyTaskFinished ( x .getA (), x .getB () ) );
133
+ finalizerThread .start ();
130
134
}
131
135
132
136
@ Override
@@ -283,15 +287,19 @@ private void undoReserveCopyTask( CopyTask copyTask ) {
283
287
}
284
288
285
289
public void copyTaskFinished ( CopyTask copyTask , boolean success ) {
290
+ finalizerThread .addItem ( new Tuple <CopyTask , Boolean >(copyTask , success ) );
291
+ }
292
+
293
+ private void processCopyTaskFinished ( CopyTask copyTask , boolean success ) {
286
294
synchronized ( copyLock ) {
287
295
freeLocations ( copyTask .getAllLocationWrapper () );
288
296
if ( success ){
289
- copyTask .getInputFiles ().parallelStream ().forEach ( TaskInputFileLocationWrapper ::success );
290
- removeFromCopyingToNode ( copyTask .getTask (), copyTask .getNodeLocation (), copyTask .getFilesForCurrentNode () );
291
- copyTask .getTask ().preparedOnNode ( copyTask .getNodeLocation () );
297
+ copyTask .getInputFiles ().parallelStream ().forEach ( TaskInputFileLocationWrapper ::success );
298
+ removeFromCopyingToNode ( copyTask .getTask (), copyTask .getNodeLocation (), copyTask .getFilesForCurrentNode () );
299
+ copyTask .getTask ().preparedOnNode ( copyTask .getNodeLocation () );
292
300
} else {
293
- removeFromCopyingToNode ( copyTask .getTask (), copyTask .getNodeLocation (), copyTask .getFilesForCurrentNode () );
294
- handleProblematicCopy ( copyTask );
301
+ removeFromCopyingToNode ( copyTask .getTask (), copyTask .getNodeLocation (), copyTask .getFilesForCurrentNode () );
302
+ handleProblematicCopy ( copyTask );
295
303
}
296
304
}
297
305
}
0 commit comments