Skip to content

Commit bb120a8

Browse files
committedMar 19, 2025·
xds: Assert XdsNR's cluster ref counting is consistent
It is much harder to debug refcounting problems when we ignore impossible situations. So make such impossible cases complain loudly so the bug is obvious.
1 parent bc3c764 commit bb120a8

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed
 

‎xds/src/main/java/io/grpc/xds/XdsNameResolver.java

+11-7
Original file line numberDiff line numberDiff line change
@@ -537,17 +537,21 @@ private boolean retainCluster(String cluster) {
537537

538538
private void releaseCluster(final String cluster) {
539539
int count = clusterRefs.get(cluster).refCount.decrementAndGet();
540+
if (count < 0) {
541+
throw new AssertionError();
542+
}
540543
if (count == 0) {
541544
syncContext.execute(new Runnable() {
542545
@Override
543546
public void run() {
544-
if (clusterRefs.get(cluster).refCount.get() == 0) {
545-
clusterRefs.remove(cluster);
546-
if (resolveState.lastConfigOrStatus.hasValue()) {
547-
updateResolutionResult(resolveState.lastConfigOrStatus.getValue());
548-
} else {
549-
resolveState.cleanUpRoutes(resolveState.lastConfigOrStatus.getStatus());
550-
}
547+
if (clusterRefs.get(cluster).refCount.get() != 0) {
548+
throw new AssertionError();
549+
}
550+
clusterRefs.remove(cluster);
551+
if (resolveState.lastConfigOrStatus.hasValue()) {
552+
updateResolutionResult(resolveState.lastConfigOrStatus.getValue());
553+
} else {
554+
resolveState.cleanUpRoutes(resolveState.lastConfigOrStatus.getStatus());
551555
}
552556
}
553557
});

0 commit comments

Comments
 (0)
Please sign in to comment.