### 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
cancelPollingClusterFormationInfo();
        }
        if (clusterService.localNode().isMasterNode() == false) {
            if (currentMaster == null) {
                beginPollingRemoteMasterStabilityDiagnostic();
            } else {
                cancelPollingRemoteMasterStabilityDiagnostic();
            }
        }
    }
    /**
     * This method begins polling all known master-eligible nodes for cluster formation information. After a 10-second initial delay, it
     * polls each node every 10 seconds until cancelPollingClusterFormationInfo() is called.
     */
    void beginPollingClusterFormationInfo() {
        assert ThreadPool.assertCurrentThreadPool(ClusterApplierService.CLUSTER_UPDATE_THREAD_NAME);
        assert ThreadPool.assertInSystemContext(transportService.getThreadPool());
        cancelPollingClusterFormationInfo();
        ConcurrentMap<DiscoveryNode, ClusterFormationStateOrException> responses = new ConcurrentHashMap<>();
        Map<DiscoveryNode, Scheduler.Cancellable> cancellables = new ConcurrentHashMap<>();
        /*
         * Assignment of clusterFormationInfoTasks must be done before the call to beginPollingClusterFormationInfo because it is used
         * asynchronously by rescheduleClusterFormationFetchConsumer, called from beginPollingClusterFormationInfo.
         */
        clusterFormationInfoTasks = cancellables;
        clusterFormationResponses = responses;
        beginPollingClusterFormationInfo(getMasterEligibleNodes(), responses::put, cancellables);
    }
    /**
     * This method returns quickly, but in the background schedules to query the remote node's cluster formation state in 10 seconds, and