The CSDS service provides information about the status of a running xDS client. Client Status Discovery Service is a service that exposes xDS config of a given client. See the full design at <a hr
| 59 | * @since 1.37.0 |
| 60 | */ |
| 61 | public final class CsdsService implements BindableService { |
| 62 | private static final Logger logger = Logger.getLogger(CsdsService.class.getName()); |
| 63 | private final XdsClientPoolFactory xdsClientPoolFactory; |
| 64 | private final CsdsServiceInternal delegate = new CsdsServiceInternal(); |
| 65 | |
| 66 | @VisibleForTesting |
| 67 | CsdsService(XdsClientPoolFactory xdsClientPoolFactory) { |
| 68 | this.xdsClientPoolFactory = checkNotNull(xdsClientPoolFactory, "xdsClientPoolProvider"); |
| 69 | } |
| 70 | |
| 71 | private CsdsService() { |
| 72 | this(SharedXdsClientPoolProvider.getDefaultProvider()); |
| 73 | } |
| 74 | |
| 75 | /** Creates an instance. */ |
| 76 | public static CsdsService newInstance() { |
| 77 | return new CsdsService(); |
| 78 | } |
| 79 | |
| 80 | @Override |
| 81 | public ServerServiceDefinition bindService() { |
| 82 | return delegate.bindService(); |
| 83 | } |
| 84 | |
| 85 | /** Hide protobuf from being exposed via the API. */ |
| 86 | private final class CsdsServiceInternal |
| 87 | extends ClientStatusDiscoveryServiceGrpc.ClientStatusDiscoveryServiceImplBase { |
| 88 | @Override |
| 89 | public void fetchClientStatus( |
| 90 | ClientStatusRequest request, StreamObserver<ClientStatusResponse> responseObserver) { |
| 91 | if (handleRequest(request, responseObserver)) { |
| 92 | responseObserver.onCompleted(); |
| 93 | } |
| 94 | // TODO(sergiitk): Add a case covering mutating handleRequest return false to true - to verify |
| 95 | // that responseObserver.onCompleted() isn't erroneously called on error. |
| 96 | } |
| 97 | |
| 98 | @Override |
| 99 | public StreamObserver<ClientStatusRequest> streamClientStatus( |
| 100 | final StreamObserver<ClientStatusResponse> responseObserver) { |
| 101 | return new StreamObserver<ClientStatusRequest>() { |
| 102 | @Override |
| 103 | public void onNext(ClientStatusRequest request) { |
| 104 | handleRequest(request, responseObserver); |
| 105 | } |
| 106 | |
| 107 | @Override |
| 108 | public void onError(Throwable t) { |
| 109 | onCompleted(); |
| 110 | } |
| 111 | |
| 112 | @Override |
| 113 | public void onCompleted() { |
| 114 | responseObserver.onCompleted(); |
| 115 | } |
| 116 | }; |
| 117 | } |
| 118 | } |