Skip to content

Commit

Permalink
xds: move the state check logic to delegate and eliminate boilerplate…
Browse files Browse the repository at this point in the history
… code (#8018) (#8019)
  • Loading branch information
sanjaypujare committed Mar 29, 2021
1 parent 828b03d commit 80585a4
Showing 1 changed file with 8 additions and 114 deletions.
122 changes: 8 additions & 114 deletions xds/src/main/java/io/grpc/xds/XdsServerBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,31 +21,18 @@

import com.google.common.annotations.VisibleForTesting;
import io.grpc.Attributes;
import io.grpc.BinaryLog;
import io.grpc.BindableService;
import io.grpc.CompressorRegistry;
import io.grpc.DecompressorRegistry;
import io.grpc.ExperimentalApi;
import io.grpc.ForwardingServerBuilder;
import io.grpc.HandlerRegistry;
import io.grpc.Internal;
import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.ServerCredentials;
import io.grpc.ServerInterceptor;
import io.grpc.ServerServiceDefinition;
import io.grpc.ServerStreamTracer;
import io.grpc.ServerTransportFilter;
import io.grpc.netty.InternalNettyServerBuilder;
import io.grpc.netty.NettyServerBuilder;
import io.grpc.xds.internal.sds.SdsProtocolNegotiators;
import io.grpc.xds.internal.sds.ServerWrapperForXds;
import java.io.File;
import java.io.InputStream;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.annotation.Nullable;
import java.util.logging.Logger;

/**
* A version of {@link ServerBuilder} to create xDS managed servers.
Expand All @@ -67,6 +54,7 @@ private XdsServerBuilder(NettyServerBuilder nettyDelegate, int port) {
@Override
@Internal
protected ServerBuilder<?> delegate() {
checkState(!isServerBuilt.get(), "Server already built!");
return delegate;
}

Expand Down Expand Up @@ -135,11 +123,13 @@ public interface XdsServingStatusListener {

/** Default implementation of {@link XdsServingStatusListener} that logs at WARNING level. */
private static class DefaultListener implements XdsServingStatusListener {
XdsLogger xdsLogger;
private final Logger logger;
private final String prefix;
boolean notServing;

DefaultListener(String prefix) {
xdsLogger = XdsLogger.withPrefix(prefix);
logger = Logger.getLogger(DefaultListener.class.getName());
this.prefix = prefix;
notServing = true;
}

Expand All @@ -148,110 +138,14 @@ private static class DefaultListener implements XdsServingStatusListener {
public void onServing() {
if (notServing) {
notServing = false;
xdsLogger.log(XdsLogger.XdsLogLevel.WARNING, "Entering serving state.");
logger.warning("[" + prefix + "] Entering serving state.");
}
}

@Override
public void onNotServing(Throwable throwable) {
xdsLogger.log(XdsLogger.XdsLogLevel.WARNING, throwable.getMessage());
logger.warning("[" + prefix + "] " + throwable.getMessage());
notServing = true;
}
}

@Override
public XdsServerBuilder directExecutor() {
checkState(!isServerBuilt.get(), "Server already built!");
return super.directExecutor();
}

@Override
public XdsServerBuilder executor(@Nullable Executor executor) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.executor(executor);
}

@Override
public XdsServerBuilder addService(ServerServiceDefinition service) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.addService(service);
}

@Override
public XdsServerBuilder addService(BindableService bindableService) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.addService(bindableService);
}

@Override
public XdsServerBuilder intercept(ServerInterceptor interceptor) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.intercept(interceptor);
}

@Override
public XdsServerBuilder addTransportFilter(ServerTransportFilter filter) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.addTransportFilter(filter);
}

@Override
public XdsServerBuilder addStreamTracerFactory(ServerStreamTracer.Factory factory) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.addStreamTracerFactory(factory);
}

@Override
public XdsServerBuilder fallbackHandlerRegistry(@Nullable HandlerRegistry fallbackRegistry) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.fallbackHandlerRegistry(fallbackRegistry);
}

@Override
public XdsServerBuilder useTransportSecurity(File certChain, File privateKey) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.useTransportSecurity(certChain, privateKey);
}

@Override
public XdsServerBuilder useTransportSecurity(InputStream certChain, InputStream privateKey) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.useTransportSecurity(certChain, privateKey);
}

@Override
public XdsServerBuilder decompressorRegistry(@Nullable DecompressorRegistry registry) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.decompressorRegistry(registry);
}

@Override
public XdsServerBuilder compressorRegistry(@Nullable CompressorRegistry registry) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.compressorRegistry(registry);
}

@Override
public XdsServerBuilder handshakeTimeout(long timeout, TimeUnit unit) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.handshakeTimeout(timeout, unit);
}

@Override
public XdsServerBuilder maxInboundMessageSize(int bytes) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.maxInboundMessageSize(bytes);
}

@Override
public XdsServerBuilder maxInboundMetadataSize(int bytes) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.maxInboundMetadataSize(bytes);
}

@Override
public XdsServerBuilder setBinaryLog(BinaryLog binaryLog) {
checkState(!isServerBuilt.get(), "Server already built!");
return super.setBinaryLog(binaryLog);
}
}

0 comments on commit 80585a4

Please sign in to comment.