diff --git a/services/src/main/java/io/grpc/services/ChannelzService.java b/services/src/main/java/io/grpc/services/ChannelzService.java index 70702a89a0..8b8d748523 100644 --- a/services/src/main/java/io/grpc/services/ChannelzService.java +++ b/services/src/main/java/io/grpc/services/ChannelzService.java @@ -25,6 +25,7 @@ import io.grpc.InternalChannelz.ServerSocketsList; import io.grpc.InternalChannelz.SocketStats; import io.grpc.InternalInstrumented; import io.grpc.Status; +import io.grpc.StatusRuntimeException; import io.grpc.channelz.v1.ChannelzGrpc; import io.grpc.channelz.v1.GetChannelRequest; import io.grpc.channelz.v1.GetChannelResponse; @@ -68,7 +69,15 @@ public final class ChannelzService extends ChannelzGrpc.ChannelzImplBase { InternalChannelz.RootChannelList rootChannels = channelz.getRootChannels(request.getStartChannelId(), maxPageSize); - responseObserver.onNext(ChannelzProtoUtil.toGetTopChannelResponse(rootChannels)); + GetTopChannelsResponse resp; + try { + resp = ChannelzProtoUtil.toGetTopChannelResponse(rootChannels); + } catch (StatusRuntimeException e) { + responseObserver.onError(e); + return; + } + + responseObserver.onNext(resp); responseObserver.onCompleted(); } @@ -82,11 +91,18 @@ public final class ChannelzService extends ChannelzGrpc.ChannelzImplBase { return; } - responseObserver.onNext( - GetChannelResponse - .newBuilder() - .setChannel(ChannelzProtoUtil.toChannel(s)) - .build()); + GetChannelResponse resp; + try { + resp = GetChannelResponse + .newBuilder() + .setChannel(ChannelzProtoUtil.toChannel(s)) + .build(); + } catch (StatusRuntimeException e) { + responseObserver.onError(e); + return; + } + + responseObserver.onNext(resp); responseObserver.onCompleted(); } @@ -96,7 +112,15 @@ public final class ChannelzService extends ChannelzGrpc.ChannelzImplBase { GetServersRequest request, StreamObserver responseObserver) { ServerList servers = channelz.getServers(request.getStartServerId(), maxPageSize); - responseObserver.onNext(ChannelzProtoUtil.toGetServersResponse(servers)); + GetServersResponse resp; + try { + resp = ChannelzProtoUtil.toGetServersResponse(servers); + } catch (StatusRuntimeException e) { + responseObserver.onError(e); + return; + } + + responseObserver.onNext(resp); responseObserver.onCompleted(); } @@ -110,11 +134,18 @@ public final class ChannelzService extends ChannelzGrpc.ChannelzImplBase { return; } - responseObserver.onNext( - GetSubchannelResponse - .newBuilder() - .setSubchannel(ChannelzProtoUtil.toSubchannel(s)) - .build()); + GetSubchannelResponse resp; + try { + resp = GetSubchannelResponse + .newBuilder() + .setSubchannel(ChannelzProtoUtil.toSubchannel(s)) + .build(); + } catch (StatusRuntimeException e) { + responseObserver.onError(e); + return; + } + + responseObserver.onNext(resp); responseObserver.onCompleted(); } @@ -128,11 +159,16 @@ public final class ChannelzService extends ChannelzGrpc.ChannelzImplBase { return; } - responseObserver.onNext( - GetSocketResponse - .newBuilder() - .setSocket(ChannelzProtoUtil.toSocket(s)) - .build()); + GetSocketResponse resp; + try { + resp = + GetSocketResponse.newBuilder().setSocket(ChannelzProtoUtil.toSocket(s)).build(); + } catch (StatusRuntimeException e) { + responseObserver.onError(e); + return; + } + + responseObserver.onNext(resp); responseObserver.onCompleted(); } @@ -146,7 +182,15 @@ public final class ChannelzService extends ChannelzGrpc.ChannelzImplBase { return; } - responseObserver.onNext(ChannelzProtoUtil.toGetServerSocketsResponse(serverSockets)); + GetServerSocketsResponse resp; + try { + resp = ChannelzProtoUtil.toGetServerSocketsResponse(serverSockets); + } catch (StatusRuntimeException e) { + responseObserver.onError(e); + return; + } + + responseObserver.onNext(resp); responseObserver.onCompleted(); } }