### Description

The `sendRequest` method is asynchronous and notifies a 
`TransportResponseHandler` when it completes the excecution
(successfully or unsuccessfully). 

When opening the connection we only catch `NodeNotConnectedException`
( https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/transport/TransportService.java#L719 ) which is currently fine as no implementations
throw other type of exception however, it'd be best to catch `Exception` here
so the `handler` gets notified of potential exceptions (as opposed to the caller
having to `try/catch` the call to `sendRequest`)
server/src/main/java/org/elasticsearch/cluster/coordination/CoordinationDiagnosticsService.java
new ClusterFormationInfoAction.Request(),
            (response, e) -> {
                assert response != null || e != null : "a response or an exception must be provided";
                if (response != null) {
                    return new ClusterFormationStateOrException(response.getClusterFormationState());
                } else {
                    return new ClusterFormationStateOrException(e);
                }
            }
        );
    }
    void beginPollingRemoteMasterStabilityDiagnostic() {
        assert ThreadPool.assertInSystemContext(transportService.getThreadPool());
        AtomicReference<Scheduler.Cancellable> cancellableReference = new AtomicReference<>();
        AtomicReference<RemoteMasterHealthResult> resultReference = new AtomicReference<>();
        remoteCoordinationDiagnosisTask = cancellableReference;
        remoteCoordinationDiagnosisResult = resultReference;
        beginPollingRemoteMasterStabilityDiagnostic(resultReference::set, cancellableReference);
    }
    /**
     * This method returns quickly, but in the background schedules to query a remote master node's cluster diagnostics in 10 seconds, and
     * repeats doing that until cancelPollingRemoteMasterStabilityDiagnostic() is called. This method
     * exists (rather than being just part of the beginPollingRemoteMasterStabilityDiagnostic() above) in order to facilitate
     * unit testing.
     * @param responseConsumer A consumer for any results produced for a node by this method
     * @param cancellableReference The Cancellable reference to assign the current Cancellable for this polling attempt
     */
    
    void beginPollingRemoteMasterStabilityDiagnostic(
        Consumer<RemoteMasterHealthResult> responseConsumer,