From 23163cc1ed9030d0f97136896ceb8e3b8a75221a Mon Sep 17 00:00:00 2001
From: Jason Tedor <jason@tedor.me>
Date: Mon, 7 Aug 2017 14:02:21 +0200
Subject: [PATCH] Elasticsearch 5: Fix handling of settings

Since Elasticsearch 5, Elasticsearch is now strict about settings. This
means that if you pass it a setting that it does not recognize,
Elasticsearch will throw an exception whereas previously it was lenient
in such situations. This commit removes passing all properties as
settings to Elasticsearch in favor of a special prefix es.setting for
which properties prefixed with this will be passed as settings to
Elasticsearch.
---
 .../ycsb/db/elasticsearch5/ElasticsearchClient.java      | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/elasticsearch5/src/main/java/com/yahoo/ycsb/db/elasticsearch5/ElasticsearchClient.java b/elasticsearch5/src/main/java/com/yahoo/ycsb/db/elasticsearch5/ElasticsearchClient.java
index a76f2094..52c41776 100644
--- a/elasticsearch5/src/main/java/com/yahoo/ycsb/db/elasticsearch5/ElasticsearchClient.java
+++ b/elasticsearch5/src/main/java/com/yahoo/ycsb/db/elasticsearch5/ElasticsearchClient.java
@@ -94,7 +94,14 @@ public class ElasticsearchClient extends DB {
 
     // if properties file contains elasticsearch user defined properties
     // add it to the settings file (will overwrite the defaults).
-    settings.put(props);
+    for (final Entry<Object, Object> e : props.entrySet()) {
+      if (e.getKey() instanceof String) {
+        final String key = (String) e.getKey();
+        if (key.startsWith("es.setting.")) {
+          settings.put(key.substring("es.setting.".length()), e.getValue());
+        }
+      }
+    }
     final String clusterName = settings.get("cluster.name");
     System.err.println("Elasticsearch starting node = " + clusterName);
     System.err.println("Elasticsearch node path.home = " + settings.get("path.home"));
-- 
GitLab