@Override
    public void getNodeState(NodeInfo node, Waiter<GetNodeStateRequest> externalWaiter) {
        Target connection = getConnection(node);
        if ( ! connection.isValid()) {
            log.log(Level.FINE, () -> String.format("Connection to '%s' could not be created.", node.getRpcAddress()));
        }
        NodeState currentState = node.getReportedState();
        Request req = new Request("getnodestate3");
        req.parameters().add(new StringValue(
                currentState.getState().equals(State.DOWN) || node.getConnectionAttemptCount() > 0
                   ? "unknown" : currentState.serialize()));
        req.parameters().add(new Int32Value((int)generateNodeStateRequestTimeout().toMillis()));
        req.parameters().add(new Int32Value(fleetControllerIndex));

        RPCGetNodeStateRequest stateRequest = new RPCGetNodeStateRequest(node, req);
        RPCGetNodeStateWaiter waiter = new RPCGetNodeStateWaiter(stateRequest, externalWaiter);

        Duration requestTimeout = nodeStateRequestTimeoutIntervalMax.plus(nodeStateRequestRoundTripTimeMax);

        connection.invokeAsync(req, requestTimeout, waiter);
        node.setCurrentNodeStateRequest(stateRequest, timer.getCurrentTimeInMillis());
        node.lastRequestInfoConnection = connection;
    }
Responsible for doing RPC requests to storage nodes.
This class is not thread-safe.
clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicator.java