class OperationConductor implements OnOperationCompleteListener {

    protected void drainPostProcessOperations()
    {
        // wipe the completed operation queue just before gathering the newly ready operations
        LinkedList<OperationWrapper> recentCompletedOperations = new LinkedList<>();
        postProcessingOperationQueue.drainTo(recentCompletedOperations);

        logger.info(
            "clearing the following complete operations: {}",
            recentCompletedOperations.stream().map(ow -> ow.getOperation().getName()).collect(Collectors.joining(", ")));

        // post process all drained operations
        recentCompletedOperations.forEach(this::postProcessCompletedOperation);
    }

    public  OperationConductor(Collection<Operation> operations, ExecutorContext executorContext,
        List<OperationConductorModifier> completedOperationModifiers);
    public  OperationConductor(Collection<Operation> operations, ExecutorContext executorContext);

}