- final Iterable<Object> results;
- try {
- results = Await.result(resultsFuture, timeout.duration());
- } catch (Exception e) {
- successfulFromPrevious = null;
- LOG.debug("{}: processResponses - error from Future", txId, e);
- Throwables.propagateIfInstanceOf(e, TimeoutException.class);
- throw Throwables.propagate(e);
+ // FB issues violation for passing null to CompletableFuture#complete but it is valid and necessary when the
+ // generic type is Void.
+ @SuppressFBWarnings("NP_NONNULL_PARAM_VIOLATION")
+ private void processResponses(Throwable failure, Iterable<Object> results, State currentState, State afterState,
+ CompletableFuture<Void> resultFuture) {
+ if (failure != null) {
+ successfulFromPrevious = Collections.emptyList();
+ resultFuture.completeExceptionally(failure);
+ return;
+ }
+
+ final Collection<Failure> failed = new ArrayList<>(1);
+ final List<Success> successful = new ArrayList<>();
+ for (Object result : results) {
+ if (result instanceof DataTreeCohortActor.Success) {
+ successful.add((Success) result);
+ } else if (result instanceof Status.Failure) {
+ failed.add((Failure) result);
+ } else {
+ LOG.warn("{}: unrecognized response {}, ignoring it", result);
+ }