diff options
author | Sergii Tkachenko <sergiitk@google.com> | 2024-03-11 16:14:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-11 16:14:05 -0700 |
commit | 0d749c59432e604a566e349d043eaeaadc8120d5 (patch) | |
tree | 51703e70da276506be1a80ef69d5b13a6a9d266d | |
parent | 403aa8189d18517e635f85bf5bb4103792d33cd5 (diff) | |
download | grpc-grpc-java-0d749c59432e604a566e349d043eaeaadc8120d5.tar.gz |
xds: Stabilize CsdsService (#11003)
To make it stable, this PR hides protobuf from being exposed via the
API.
Note: this breaks ABI of `CsdsService.streamClientStatus` and
`CsdsService.fetchClientStatus`, but these methods should not
normally be called by the user.
Closes #8016.
-rw-r--r-- | xds/src/main/java/io/grpc/xds/CsdsService.java | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/xds/src/main/java/io/grpc/xds/CsdsService.java b/xds/src/main/java/io/grpc/xds/CsdsService.java index 69aee71f1..010283666 100644 --- a/xds/src/main/java/io/grpc/xds/CsdsService.java +++ b/xds/src/main/java/io/grpc/xds/CsdsService.java @@ -28,7 +28,8 @@ import io.envoyproxy.envoy.service.status.v3.ClientConfig.GenericXdsConfig; import io.envoyproxy.envoy.service.status.v3.ClientStatusDiscoveryServiceGrpc; import io.envoyproxy.envoy.service.status.v3.ClientStatusRequest; import io.envoyproxy.envoy.service.status.v3.ClientStatusResponse; -import io.grpc.ExperimentalApi; +import io.grpc.BindableService; +import io.grpc.ServerServiceDefinition; import io.grpc.Status; import io.grpc.StatusException; import io.grpc.internal.ObjectPool; @@ -55,11 +56,10 @@ import java.util.logging.Logger; * * @since 1.37.0 */ -@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8016") -public final class CsdsService extends - ClientStatusDiscoveryServiceGrpc.ClientStatusDiscoveryServiceImplBase { +public final class CsdsService implements BindableService { private static final Logger logger = Logger.getLogger(CsdsService.class.getName()); private final XdsClientPoolFactory xdsClientPoolFactory; + private final CsdsServiceInternal delegate = new CsdsServiceInternal(); @VisibleForTesting CsdsService(XdsClientPoolFactory xdsClientPoolFactory) { @@ -76,34 +76,43 @@ public final class CsdsService extends } @Override - public void fetchClientStatus( - ClientStatusRequest request, StreamObserver<ClientStatusResponse> responseObserver) { - if (handleRequest(request, responseObserver)) { - responseObserver.onCompleted(); - } - // TODO(sergiitk): Add a case covering mutating handleRequest return false to true - to verify - // that responseObserver.onCompleted() isn't erroneously called on error. + public ServerServiceDefinition bindService() { + return delegate.bindService(); } - @Override - public StreamObserver<ClientStatusRequest> streamClientStatus( - final StreamObserver<ClientStatusResponse> responseObserver) { - return new StreamObserver<ClientStatusRequest>() { - @Override - public void onNext(ClientStatusRequest request) { - handleRequest(request, responseObserver); + /** Hide protobuf from being exposed via the API. */ + private final class CsdsServiceInternal + extends ClientStatusDiscoveryServiceGrpc.ClientStatusDiscoveryServiceImplBase { + @Override + public void fetchClientStatus( + ClientStatusRequest request, StreamObserver<ClientStatusResponse> responseObserver) { + if (handleRequest(request, responseObserver)) { + responseObserver.onCompleted(); } + // TODO(sergiitk): Add a case covering mutating handleRequest return false to true - to verify + // that responseObserver.onCompleted() isn't erroneously called on error. + } - @Override - public void onError(Throwable t) { - onCompleted(); - } + @Override + public StreamObserver<ClientStatusRequest> streamClientStatus( + final StreamObserver<ClientStatusResponse> responseObserver) { + return new StreamObserver<ClientStatusRequest>() { + @Override + public void onNext(ClientStatusRequest request) { + handleRequest(request, responseObserver); + } - @Override - public void onCompleted() { - responseObserver.onCompleted(); - } - }; + @Override + public void onError(Throwable t) { + onCompleted(); + } + + @Override + public void onCompleted() { + responseObserver.onCompleted(); + } + }; + } } private boolean handleRequest( |