mirror of https://github.com/grpc/grpc-java.git
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.
This commit is contained in:
parent
bc3c764058
commit
bb120a8cbb
|
|
@ -537,17 +537,21 @@ final class XdsNameResolver extends NameResolver {
|
|||
|
||||
private void releaseCluster(final String cluster) {
|
||||
int count = clusterRefs.get(cluster).refCount.decrementAndGet();
|
||||
if (count < 0) {
|
||||
throw new AssertionError();
|
||||
}
|
||||
if (count == 0) {
|
||||
syncContext.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (clusterRefs.get(cluster).refCount.get() == 0) {
|
||||
clusterRefs.remove(cluster);
|
||||
if (resolveState.lastConfigOrStatus.hasValue()) {
|
||||
updateResolutionResult(resolveState.lastConfigOrStatus.getValue());
|
||||
} else {
|
||||
resolveState.cleanUpRoutes(resolveState.lastConfigOrStatus.getStatus());
|
||||
}
|
||||
if (clusterRefs.get(cluster).refCount.get() != 0) {
|
||||
throw new AssertionError();
|
||||
}
|
||||
clusterRefs.remove(cluster);
|
||||
if (resolveState.lastConfigOrStatus.hasValue()) {
|
||||
updateResolutionResult(resolveState.lastConfigOrStatus.getValue());
|
||||
} else {
|
||||
resolveState.cleanUpRoutes(resolveState.lastConfigOrStatus.getStatus());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue