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;
|
||||
@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,11 +239,13 @@ public final class ServerWrapperForXds extends Server {
|
|||
rebuildAndRestartServer();
|
||||
}
|
||||
|
||||
private synchronized void cleanUpStartRetryTask() {
|
||||
if (timerService != null) {
|
||||
timerService = SharedResourceHolder.release(GrpcUtil.TIMER_SERVICE, timerService);
|
||||
private void cleanUpStartRetryTask() {
|
||||
synchronized (ServerWrapperForXds.this) {
|
||||
if (timerService != null) {
|
||||
timerService = SharedResourceHolder.release(GrpcUtil.TIMER_SERVICE, timerService);
|
||||
}
|
||||
startRetryTask = null;
|
||||
}
|
||||
startRetryTask = null;
|
||||
}
|
||||
|
||||
public void shutdownNow() {
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue