mirror of https://github.com/grpc/grpc-java.git
tsan, xds: fix data races in ServerWrapperForXds (#8114)
This commit is contained in:
parent
b436d0dfb7
commit
8468b5c42f
|
|
@ -56,7 +56,7 @@ public final class ServerWrapperForXds extends Server {
|
||||||
private XdsServerBuilder.XdsServingStatusListener xdsServingStatusListener;
|
private XdsServerBuilder.XdsServingStatusListener xdsServingStatusListener;
|
||||||
@Nullable XdsClientWrapperForServerSds.ServerWatcher serverWatcher;
|
@Nullable XdsClientWrapperForServerSds.ServerWatcher serverWatcher;
|
||||||
private AtomicBoolean started = new AtomicBoolean();
|
private AtomicBoolean started = new AtomicBoolean();
|
||||||
private ServingState currentServingState;
|
private volatile ServingState currentServingState;
|
||||||
private final long delayForRetry;
|
private final long delayForRetry;
|
||||||
private final TimeUnit timeUnitForDelayForRetry;
|
private final TimeUnit timeUnitForDelayForRetry;
|
||||||
private StartRetryTask startRetryTask;
|
private StartRetryTask startRetryTask;
|
||||||
|
|
@ -239,11 +239,13 @@ public final class ServerWrapperForXds extends Server {
|
||||||
rebuildAndRestartServer();
|
rebuildAndRestartServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void cleanUpStartRetryTask() {
|
private void cleanUpStartRetryTask() {
|
||||||
if (timerService != null) {
|
synchronized (ServerWrapperForXds.this) {
|
||||||
timerService = SharedResourceHolder.release(GrpcUtil.TIMER_SERVICE, timerService);
|
if (timerService != null) {
|
||||||
|
timerService = SharedResourceHolder.release(GrpcUtil.TIMER_SERVICE, timerService);
|
||||||
|
}
|
||||||
|
startRetryTask = null;
|
||||||
}
|
}
|
||||||
startRetryTask = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void shutdownNow() {
|
public void shutdownNow() {
|
||||||
|
|
@ -290,7 +292,7 @@ public final class ServerWrapperForXds extends Server {
|
||||||
|
|
||||||
private void cleanupStartRetryTaskAndShutdownDelegateAndXdsClient(boolean shutdownNow) {
|
private void cleanupStartRetryTaskAndShutdownDelegateAndXdsClient(boolean shutdownNow) {
|
||||||
Server delegateCopy = null;
|
Server delegateCopy = null;
|
||||||
synchronized (this) {
|
synchronized (ServerWrapperForXds.this) {
|
||||||
if (startRetryTask != null) {
|
if (startRetryTask != null) {
|
||||||
startRetryTask.shutdownNow();
|
startRetryTask.shutdownNow();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,12 @@ public class ServerWrapperForXdsTest {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// wait until xdsClientWrapperForServerSds.serverWatchers populated
|
// 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);
|
Thread.sleep(100L);
|
||||||
}
|
}
|
||||||
return settableFuture;
|
return settableFuture;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue