tsan, xds: fix data races in ServerWrapperForXds (#8114)

This commit is contained in:
yifeizhuang 2021-04-26 11:58:32 -07:00 committed by GitHub
parent b436d0dfb7
commit 8468b5c42f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 7 deletions

View File

@ -56,7 +56,7 @@ public final class ServerWrapperForXds extends Server {
private XdsServerBuilder.XdsServingStatusListener xdsServingStatusListener;
@Nullable XdsClientWrapperForServerSds.ServerWatcher serverWatcher;
private AtomicBoolean started = new AtomicBoolean();
private ServingState currentServingState;
private volatile ServingState currentServingState;
private final long delayForRetry;
private final TimeUnit timeUnitForDelayForRetry;
private StartRetryTask startRetryTask;
@ -239,12 +239,14 @@ public final class ServerWrapperForXds extends Server {
rebuildAndRestartServer();
}
private synchronized void cleanUpStartRetryTask() {
private void cleanUpStartRetryTask() {
synchronized (ServerWrapperForXds.this) {
if (timerService != null) {
timerService = SharedResourceHolder.release(GrpcUtil.TIMER_SERVICE, timerService);
}
startRetryTask = null;
}
}
public void shutdownNow() {
ScheduledFuture<?> oldValue = future.getAndSet(null);
@ -290,7 +292,7 @@ public final class ServerWrapperForXds extends Server {
private void cleanupStartRetryTaskAndShutdownDelegateAndXdsClient(boolean shutdownNow) {
Server delegateCopy = null;
synchronized (this) {
synchronized (ServerWrapperForXds.this) {
if (startRetryTask != null) {
startRetryTask.shutdownNow();
}

View File

@ -99,7 +99,12 @@ public class ServerWrapperForXdsTest {
}
});
// wait until xdsClientWrapperForServerSds.serverWatchers populated
for (int i = 0; i < 10 && xdsClientWrapperForServerSds.serverWatchers.isEmpty(); i++) {
for (int i = 0; i < 10; i++) {
synchronized (xdsClientWrapperForServerSds.serverWatchers) {
if (!xdsClientWrapperForServerSds.serverWatchers.isEmpty()) {
break;
}
}
Thread.sleep(100L);
}
return settableFuture;