mirror of https://github.com/grpc/grpc-java.git
services: add support for channelz.GetServer()
This commit is contained in:
parent
4c5559d54f
commit
461b10a907
|
@ -179,6 +179,12 @@ public final class InternalChannelz {
|
|||
return new ServerList(serverList, !iterator.hasNext());
|
||||
}
|
||||
|
||||
/** Returns a server. */
|
||||
@Nullable
|
||||
public InternalInstrumented<ServerStats> getServer(long id) {
|
||||
return servers.get(id);
|
||||
}
|
||||
|
||||
/** Returns socket refs for a server. */
|
||||
@Nullable
|
||||
public ServerSocketsList getServerSockets(long serverId, long fromId, int maxPageSize) {
|
||||
|
|
|
@ -22,6 +22,7 @@ import io.grpc.InternalChannelz;
|
|||
import io.grpc.InternalChannelz.ChannelStats;
|
||||
import io.grpc.InternalChannelz.ServerList;
|
||||
import io.grpc.InternalChannelz.ServerSocketsList;
|
||||
import io.grpc.InternalChannelz.ServerStats;
|
||||
import io.grpc.InternalChannelz.SocketStats;
|
||||
import io.grpc.InternalInstrumented;
|
||||
import io.grpc.Status;
|
||||
|
@ -29,6 +30,8 @@ import io.grpc.StatusRuntimeException;
|
|||
import io.grpc.channelz.v1.ChannelzGrpc;
|
||||
import io.grpc.channelz.v1.GetChannelRequest;
|
||||
import io.grpc.channelz.v1.GetChannelResponse;
|
||||
import io.grpc.channelz.v1.GetServerRequest;
|
||||
import io.grpc.channelz.v1.GetServerResponse;
|
||||
import io.grpc.channelz.v1.GetServerSocketsRequest;
|
||||
import io.grpc.channelz.v1.GetServerSocketsResponse;
|
||||
import io.grpc.channelz.v1.GetServersRequest;
|
||||
|
@ -126,6 +129,33 @@ public final class ChannelzService extends ChannelzGrpc.ChannelzImplBase {
|
|||
responseObserver.onCompleted();
|
||||
}
|
||||
|
||||
/** Returns a server. */
|
||||
@Override
|
||||
public void getServer(
|
||||
GetServerRequest request, StreamObserver<GetServerResponse> responseObserver) {
|
||||
InternalInstrumented<ServerStats> s = channelz.getServer(request.getServerId());
|
||||
if (s == null) {
|
||||
responseObserver.onError(
|
||||
Status.NOT_FOUND.withDescription("Can't find server " + request.getServerId())
|
||||
.asRuntimeException());
|
||||
return;
|
||||
}
|
||||
|
||||
GetServerResponse resp;
|
||||
try {
|
||||
resp = GetServerResponse
|
||||
.newBuilder()
|
||||
.setServer(ChannelzProtoUtil.toServer(s))
|
||||
.build();
|
||||
} catch (StatusRuntimeException e) {
|
||||
responseObserver.onError(e);
|
||||
return;
|
||||
}
|
||||
|
||||
responseObserver.onNext(resp);
|
||||
responseObserver.onCompleted();
|
||||
}
|
||||
|
||||
/** Returns a subchannel. */
|
||||
@Override
|
||||
public void getSubchannel(
|
||||
|
|
|
@ -25,6 +25,8 @@ import io.grpc.InternalChannelz;
|
|||
import io.grpc.Status;
|
||||
import io.grpc.channelz.v1.GetChannelRequest;
|
||||
import io.grpc.channelz.v1.GetChannelResponse;
|
||||
import io.grpc.channelz.v1.GetServerRequest;
|
||||
import io.grpc.channelz.v1.GetServerResponse;
|
||||
import io.grpc.channelz.v1.GetServersRequest;
|
||||
import io.grpc.channelz.v1.GetServersResponse;
|
||||
import io.grpc.channelz.v1.GetSocketRequest;
|
||||
|
@ -127,6 +129,24 @@ public class ChannelzServiceTest {
|
|||
getServersHelper(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getServer() throws ExecutionException, InterruptedException {
|
||||
TestServer server = new TestServer();
|
||||
assertServerNotFound(server.getLogId().getId());
|
||||
|
||||
channelz.addServer(server);
|
||||
assertEquals(
|
||||
GetServerResponse
|
||||
.newBuilder()
|
||||
.setServer(ChannelzProtoUtil.toServer(server))
|
||||
.build(),
|
||||
getServerHelper(server.getLogId().getId()));
|
||||
|
||||
channelz.removeServer(server);
|
||||
assertServerNotFound(server.getLogId().getId());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getSocket() throws Exception {
|
||||
TestSocket socket = new TestSocket();
|
||||
|
@ -212,6 +232,26 @@ public class ChannelzServiceTest {
|
|||
return responseCaptor.getValue();
|
||||
}
|
||||
|
||||
private void assertServerNotFound(long id) {
|
||||
@SuppressWarnings("unchecked")
|
||||
StreamObserver<GetServerResponse> observer = mock(StreamObserver.class);
|
||||
ArgumentCaptor<Exception> exceptionCaptor = ArgumentCaptor.forClass(Exception.class);
|
||||
service.getServer(GetServerRequest.newBuilder().setServerId(id).build(), observer);
|
||||
verify(observer).onError(exceptionCaptor.capture());
|
||||
Status s = Status.fromThrowable(exceptionCaptor.getValue());
|
||||
assertWithMessage(s.toString()).that(s.getCode()).isEqualTo(Status.Code.NOT_FOUND);
|
||||
}
|
||||
|
||||
private GetServerResponse getServerHelper(long id) {
|
||||
@SuppressWarnings("unchecked")
|
||||
StreamObserver<GetServerResponse> observer = mock(StreamObserver.class);
|
||||
ArgumentCaptor<GetServerResponse> response = ArgumentCaptor.forClass(GetServerResponse.class);
|
||||
service.getServer(GetServerRequest.newBuilder().setServerId(id).build(), observer);
|
||||
verify(observer).onNext(response.capture());
|
||||
verify(observer).onCompleted();
|
||||
return response.getValue();
|
||||
}
|
||||
|
||||
private void assertSocketNotFound(long id) {
|
||||
@SuppressWarnings("unchecked")
|
||||
StreamObserver<GetSocketResponse> observer = mock(StreamObserver.class);
|
||||
|
|
Loading…
Reference in New Issue