/** * Finalises the final response message and publishes it (after any subtasks). */ private void completeResponse(final TaskMessage responseMessage) { // Get the final number of responses final int finalResponseCount = getFinalResponseCount(); // Check if there are multiple responses if (finalResponseCount > 1) { // Ensure the buffer is flushed singleMessageBuffer.flush(); // Add a suffix the task id updateTaskId(responseMessage, finalResponseCount, true); // Ensure that all the subtasks have been published before continuing subtasksPublishedSemaphore.acquireUninterruptibly(finalResponseCount - 1); } // Add task response message to progress report buffer. progressReportBuffer.add(responseMessage); // Ensure all report updates have been sent. progressReportBuffer.flush(); // Complete the task workerCallback.complete(messageId, responseMessage.getTo(), responseMessage); }