in mr/src/main/java/org/elasticsearch/hadoop/rest/RestClient.java [754:799]
public ClusterInfo mainInfo() {
Response response = execute(GET, "", true);
Map<String, Object> result = parseContent(response.body(), null);
if (result == null) {
throw new EsHadoopIllegalStateException("Unable to retrieve elasticsearch main cluster info.");
}
String clusterName = result.get("cluster_name").toString();
String clusterUUID = (String)result.get("cluster_uuid");
@SuppressWarnings("unchecked")
Map<String, String> versionBody = (Map<String, String>) result.get("version");
if (versionBody == null || !StringUtils.hasText(versionBody.get("number"))) {
throw new EsHadoopIllegalStateException("Unable to retrieve elasticsearch version.");
}
String versionNumber = versionBody.get("number");
EsMajorVersion major = EsMajorVersion.parse(versionNumber);
if (major.before(EsMajorVersion.V_6_X)) {
throw new EsHadoopIllegalStateException("Invalid major version [" + major + "]. " +
"Version is lower than minimum required version [" + EsMajorVersion.V_6_X + "].");
} else if (major.onOrAfter(V_6_X)) {
String tagline = result.get("tagline").toString();
if (ELASTICSEARCH_TAGLINE.equals(tagline) == false) {
LOG.warn("Could not verify server is Elasticsearch! Invalid main action response body format [tag].");
}
if (major.onOrAfter(V_7_X)) {
String buildFlavor = versionBody.get("build_flavor");
if (ELASTICSEARCH_BUILD_FLAVOR.equals(buildFlavor) == false) {
LOG.warn("Could not verify server is Elasticsearch! Invalid main action response body format [build_flavor].");
}
List<String> productHeader = response.getHeaders(ELASTIC_PRODUCT_HEADER);
boolean validElasticsearchHeader = productHeader != null && productHeader.size() == 1 && productHeader.get(0).equals(ELASTIC_PRODUCT_HEADER_VALUE);
boolean verifyServer = (major.on(V_7_X) && major.parseMinorVersion(versionNumber) >= 14) || major.onOrAfter(V_8_X);
if (validElasticsearchHeader == false) {
if (verifyServer) {
throw new EsHadoopTransportException("Connected, but could not verify server is Elasticsearch. Response missing [" +
ELASTIC_PRODUCT_HEADER + "] header. Please check that you are connecting to an Elasticsearch instance, and " +
"that any networking filters are preserving that header.");
} else {
LOG.warn("Could not verify server is Elasticsearch! ES-Hadoop will require server validation when connecting to an " +
"Elasticsearch cluster if that Elasticsearch cluster is v7.14 and up.");
}
}
}
}
return new ClusterInfo(new ClusterName(clusterName, clusterUUID), EsMajorVersion.parse(versionNumber));
}