There's currently a check in `TransportService.HandshakeResponse.isIncompatibleBuild` to stop ES with the same Version but different build hashes from joining a cluster. This needs to be relaxed for cloud deployments where Version is not applicable
server/src/main/java/org/elasticsearch/transport/TransportService.java
threadPool.executor(executor).execute(new ForkingResponseHandlerRunnable(handler, exception) {
                            @Override
                            protected void doRun() {
                                handler.handleException(exception);
                            }
                        });
                    }
                } catch (Exception e) {
                    assert false : e;
                    logger.warn(() -> format("failed to notify response handler on shutdown, action: %s", holderToNotify.action()), e);
                }
            }
        }
    }
    @Override
    protected void doClose() throws IOException {
        transport.close();
    }
    /**
     * Start accepting incoming requests.
     *
     * The transport service starts before it's ready to accept incoming requests because we need to know the address(es) to which we are
     * bound, which means we have to actually bind to them and start accepting incoming connections. However until this method is called we
     * reject any incoming requests, including handshakes, by closing the connection.
     */
    public final void acceptIncomingRequests() {
        final boolean startedWithThisCall = handleIncomingRequests.compareAndSet(false, true);
        assert startedWithThisCall : "transport service was already accepting incoming requests";
        logger.debug("now accepting incoming requests");
    }