private ClientResponse sendRequest(ServerRequest request) throws Exception { ResponseHolder responseHolder = new ResponseHolder(); responseHolders.put(request.getRequestId(), responseHolder); requestObserver.onNext(request); // timeout is in case agent never responds // passing ClientResponse.getDefaultInstance() is just dummy (non-null) value ClientResponse response = responseHolder.response.exchange(ClientResponse.getDefaultInstance(), 1, HOURS); if (response.getMessageCase() == MessageCase.UNKNOWN_REQUEST_RESPONSE) { throw new OutdatedAgentException(); } if (response.getMessageCase() == MessageCase.EXCEPTION_RESPONSE) { throw new AgentException(); } return response; }