Skip to content

Commit

Permalink
Code improvements from review.
Browse files Browse the repository at this point in the history
  • Loading branch information
sdedic committed Sep 2, 2024
1 parent cdd7f17 commit b80cde2
Showing 1 changed file with 13 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
Expand Down Expand Up @@ -762,22 +761,20 @@ public void assertNoOperations() {
}
}

private Collection<IdentityHolder> collectRelaeases(ProjectOperations op) {
Collection<IdentityHolder> releases = op.releases;
private Collection<IdentityHolder> collectReleases(ProjectOperations op) {
Collection<IdentityHolder> releases = op.releases;
// this is copied from postCleanup, but can be done in batch without
// checking the project operation is in progress for each reference. These are already removed
// from stateIdentity, so just check they did not obtain another one:
for (Iterator<IdentityHolder> it = releases.iterator(); it.hasNext(); ) {
IdentityHolder expired = it.next();
releases.removeIf(expired -> {
ProjectStateData d = expired.state.get();
if (d == null) {
it.remove();
return true;
}
IdentityHolder h = stateIdentity.get(d);
if (h != null && h != expired) {
it.remove();
}
}
return h != null && h != expired;
});
op.releases = new ArrayList<>();
return releases;
}

Expand Down Expand Up @@ -832,8 +829,7 @@ private void endOperation(Project p, Reloader reload, Runnable futureCompleter)
} else {
// do not remove from the pendingOperations YET, we want to capture potential reload requests
// until after the events are fired off, so they do not interleave.
releases = collectRelaeases(op);
op.releases = new ArrayList<>();
releases = collectReleases(op);
}
terminatingOperations.add(op);
}
Expand Down Expand Up @@ -897,26 +893,25 @@ private void endOperation(Project p, Reloader reload, Runnable futureCompleter)
CompletableFuture<ProjectState> f = CompletableFuture.runAsync(() -> fNextReloader.initRound(), loader).
thenCompose((v) -> fNextReloader.start(floader));
// run this cleanup in the dispatcher thread
f.whenCompleteAsync((a, b) -> {
f.whenCompleteAsync((result, err) -> {
LOG.log(Level.FINER, "Return RP to the pool", new Object[] { floader });
loaderProcessors.offer(floader);
try {
LOG.log(Level.FINE, "Load end project {0} with request {1}", new Object[] { fNextReloader.project, fNextReloader.request });
// postpone event delivery so that the events observers see the Future as completed.
endOperation(fNextReloader.project, fNextReloader, () -> {;
if (b == null) {
fNextReloader.completePending.completeAsync(() -> a, RELOAD_RP);
endOperation(fNextReloader.project, fNextReloader, () -> {
if (err == null) {
fNextReloader.completePending.completeAsync(() -> result, RELOAD_RP);
} else {
RELOAD_RP.post(() -> {
fNextReloader.completePending.completeExceptionally(b);
fNextReloader.completePending.completeExceptionally(err);
});
}
});
} catch (ThreadDeath td) {
throw td;
} catch (Throwable t) {
Exceptions.printStackTrace(t);
} finally {
}
}, floader);
});
Expand Down

0 comments on commit b80cde2

Please sign in to comment.