Skip to content
This repository was archived by the owner on Jun 20, 2023. It is now read-only.

Commit bd7c793

Browse files
author
kramer
committed
replaced HashMap with LinkedHashMap in critical places for order predictability.
1 parent 8d65e6b commit bd7c793

File tree

12 files changed

+41
-36
lines changed

12 files changed

+41
-36
lines changed

jest-common/src/main/java/io/searchbox/action/AbstractAction.java

+15-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.searchbox.action;
22

33
import com.google.common.collect.HashMultimap;
4+
import com.google.common.collect.LinkedHashMultimap;
45
import com.google.common.collect.Multimap;
56
import com.google.gson.Gson;
67
import com.google.gson.JsonObject;
@@ -37,8 +38,8 @@ public abstract class AbstractAction<T extends JestResult> implements Action<T>
3738
protected Object payload;
3839

3940
private final ConcurrentMap<String, Object> headerMap = new ConcurrentHashMap<String, Object>();
40-
private final Multimap<String, Object> parameterMap = HashMultimap.create();
41-
private final Set<String> cleanApiParameters = new HashSet<String>();
41+
private final Multimap<String, Object> parameterMap = LinkedHashMultimap.create();
42+
private final Set<String> cleanApiParameters = new LinkedHashSet<String>();
4243
private String URI;
4344
private String pathToResult;
4445

@@ -68,7 +69,7 @@ protected T createNewElasticSearchResult(T result, String responseBody, int stat
6869
result.setJsonObject(jsonMap);
6970
result.setPathToResult(getPathToResult());
7071

71-
if ((statusCode / 100) == 2) {
72+
if (isHttpSuccessful(statusCode)) {
7273
result.setSucceeded(true);
7374
log.debug("Request and operation succeeded");
7475
} else {
@@ -85,9 +86,13 @@ protected T createNewElasticSearchResult(T result, String responseBody, int stat
8586
return result;
8687
}
8788

89+
protected boolean isHttpSuccessful(int httpCode) {
90+
return (httpCode / 100) == 2;
91+
}
92+
8893
protected JsonObject parseResponseBody(String responseBody) {
8994
if (responseBody != null && !responseBody.trim().isEmpty()) {
90-
return new JsonParser().parse(responseBody).getAsJsonObject();
95+
return new JsonParser().parse(responseBody).getAsJsonObject();
9196
}
9297
return new JsonObject();
9398
}
@@ -143,9 +148,9 @@ protected void setURI(String URI) {
143148

144149
@Override
145150
public String getData(Gson gson) {
146-
if(payload == null){
151+
if (payload == null) {
147152
return null;
148-
} else if(payload instanceof String) {
153+
} else if (payload instanceof String) {
149154
return (String) payload;
150155
} else {
151156
return gson.toJson(payload);
@@ -184,7 +189,7 @@ protected String buildURI() {
184189
protected String buildQueryString() throws UnsupportedEncodingException {
185190
StringBuilder queryString = new StringBuilder();
186191

187-
if(!cleanApiParameters.isEmpty()) {
192+
if (!cleanApiParameters.isEmpty()) {
188193
queryString.append("/").append(StringUtils.join(cleanApiParameters, ","));
189194
}
190195

@@ -246,9 +251,9 @@ public boolean equals(Object obj) {
246251

247252
@SuppressWarnings("unchecked")
248253
protected static abstract class Builder<T extends Action, K> {
249-
protected Multimap<String, Object> parameters = HashMultimap.<String, Object>create();
250-
protected Map<String, Object> headers = new HashMap<String, Object>();
251-
protected Set<String> cleanApiParameters = new HashSet<String>();
254+
protected Multimap<String, Object> parameters = LinkedHashMultimap.<String, Object>create();
255+
protected Map<String, Object> headers = new LinkedHashMap<String, Object>();
256+
protected Set<String> cleanApiParameters = new LinkedHashSet<String>();
252257

253258
public K addCleanApiParameter(String key) {
254259
cleanApiParameters.add(key);

jest-common/src/main/java/io/searchbox/action/AbstractMultiIndexActionBuilder.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55

66
import java.util.Collection;
77
import java.util.HashSet;
8+
import java.util.LinkedHashSet;
89
import java.util.Set;
910

1011
/**
1112
* @author cihat keser
1213
*/
1314
@SuppressWarnings("unchecked")
1415
public abstract class AbstractMultiIndexActionBuilder<T extends Action, K> extends AbstractAction.Builder<T, K> {
15-
protected Set<String> indexNames = new HashSet<String>();
16+
protected Set<String> indexNames = new LinkedHashSet<String>();
1617

1718
public K addIndex(String indexName) {
1819
this.indexNames.add(indexName);

jest-common/src/main/java/io/searchbox/action/AbstractMultiTypeActionBuilder.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44

55
import java.util.Collection;
66
import java.util.HashSet;
7+
import java.util.LinkedHashSet;
78
import java.util.Set;
89

910
/**
1011
* @author cihat keser
1112
*/
1213
@SuppressWarnings("unchecked")
1314
public abstract class AbstractMultiTypeActionBuilder<T extends Action, K> extends AbstractMultiIndexActionBuilder<T, K> {
14-
private Set<String> indexTypes = new HashSet<String>();
15+
private Set<String> indexTypes = new LinkedHashSet<String>();
1516

1617
public K addType(Collection<? extends String> indexTypes) {
1718
this.indexTypes.addAll(indexTypes);

jest-common/src/main/java/io/searchbox/core/Doc.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import org.apache.commons.lang3.StringUtils;
44

5-
import java.util.Collection;
6-
import java.util.HashMap;
7-
import java.util.LinkedList;
8-
import java.util.Map;
5+
import java.util.*;
96

107
/**
118
* Represents a single get request description in a MultiGet request.
@@ -100,7 +97,7 @@ public Object getSource() {
10097
}
10198

10299
protected Map<String, Object> toMap() {
103-
Map<String, Object> retval = new HashMap<String, Object>();
100+
Map<String, Object> retval = new LinkedHashMap<String, Object>();
104101

105102
retval.put("_index", index);
106103
retval.put("_type", type);

jest-common/src/main/java/io/searchbox/indices/aliases/AliasMapping.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import org.apache.commons.lang3.StringUtils;
44

5-
import java.util.HashMap;
6-
import java.util.LinkedList;
7-
import java.util.List;
8-
import java.util.Map;
5+
import java.util.*;
96

107
/**
118
* @author cihat keser
@@ -24,7 +21,7 @@ public List<Map<String, Object>> getData() {
2421
List<Map<String, Object>> retList = new LinkedList<Map<String, Object>>();
2522

2623
for (String index : indices) {
27-
Map<String, Object> paramsMap = new HashMap<String, Object>();
24+
Map<String, Object> paramsMap = new LinkedHashMap<String, Object>();
2825
paramsMap.put("index", index);
2926
paramsMap.put("alias", alias);
3027

@@ -40,7 +37,7 @@ public List<Map<String, Object>> getData() {
4037
paramsMap.put("index_routing", StringUtils.join(indexRouting, ","));
4138
}
4239

43-
Map<String, Object> actionMap = new HashMap<String, Object>();
40+
Map<String, Object> actionMap = new LinkedHashMap<String, Object>();
4441
actionMap.put(getType(), paramsMap);
4542
retList.add(actionMap);
4643
}

jest-common/src/test/java/io/searchbox/action/AbstractActionTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void buildUrlWithRequestParameterWithMultipleValues() {
3434
.setParameter("x", "q")
3535
.setParameter("w", "p")
3636
.build();
37-
assertEquals("?w=p&x=z&x=y&x=q", dummyAction.getURI());
37+
assertEquals("?x=y&x=z&x=q&w=p", dummyAction.getURI());
3838
}
3939

4040
@Test

jest-common/src/test/java/io/searchbox/cluster/NodesInfoTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void getURIWithOnlyMultipleNode() {
4242
@Test
4343
public void getURIWithOnlyMultipleType() {
4444
NodesInfo nodesInfo = new NodesInfo.Builder().withOs().withProcess().build();
45-
assertEquals("/_nodes/_all/process,os", nodesInfo.getURI());
45+
assertEquals("/_nodes/_all/os,process", nodesInfo.getURI());
4646
}
4747

4848
@Test
@@ -54,7 +54,7 @@ public void getURIWithMultipleNodeAndTypes() {
5454
.withProcess()
5555
.withSettings()
5656
.build();
57-
assertEquals("/_nodes/twitter,jest/process,os,settings", nodesInfo.getURI());
57+
assertEquals("/_nodes/twitter,jest/os,process,settings", nodesInfo.getURI());
5858
}
5959

6060
}

jest-common/src/test/java/io/searchbox/core/MultiGetTest.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ public void getMultipleDocs() {
2424
assertEquals("GET", get.getRestMethodName());
2525
assertEquals("/_mget", get.getURI());
2626
assertEquals("{\"docs\":[" +
27-
"{\"_type\":\"tweet\",\"_id\":\"1\",\"_index\":\"twitter\"}," +
28-
"{\"_type\":\"tweet\",\"_id\":\"2\",\"_index\":\"twitter\"}," +
29-
"{\"_type\":\"tweet\",\"_id\":\"3\",\"_index\":\"twitter\"}]}", get.getData(new Gson()));
27+
"{\"_index\":\"twitter\",\"_type\":\"tweet\",\"_id\":\"1\"}," +
28+
"{\"_index\":\"twitter\",\"_type\":\"tweet\",\"_id\":\"2\"}," +
29+
"{\"_index\":\"twitter\",\"_type\":\"tweet\",\"_id\":\"3\"}]}",
30+
get.getData(new Gson()));
3031
}
3132

3233
@Test

jest-common/src/test/java/io/searchbox/indices/ClearCacheTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void testBasicUrlGenerationWithParameters() {
2525
@Test
2626
public void testMultiIndexUrlGenerationWithParameters() {
2727
ClearCache clearCache = new ClearCache.Builder().addIndex("tom").addIndex("jerry").bloom(true).build();
28-
assertEquals("jerry%2Ctom/_cache/clear?bloom=true", clearCache.getURI());
28+
assertEquals("tom%2Cjerry/_cache/clear?bloom=true", clearCache.getURI());
2929
}
3030

3131
@Test

jest-common/src/test/java/io/searchbox/indices/aliases/AddAliasMappingTest.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void testBasicGetDataForJson() {
2424
AddAliasMapping addAliasMapping = new AddAliasMapping
2525
.Builder("tIndex", "tAlias")
2626
.build();
27-
String actualJson = new Gson().toJson(addAliasMapping.getData()).toString();
27+
String actualJson = new Gson().toJson(addAliasMapping.getData());
2828
String expectedJson = "[{\"add\":{\"index\":\"tIndex\",\"alias\":\"tAlias\"}}]";
2929

3030
assertEquals(expectedJson, actualJson);
@@ -36,7 +36,7 @@ public void testGetDataForJsonWithFilter() {
3636
.Builder("tIndex", "tAlias")
3737
.setFilter(USER_FILTER_JSON)
3838
.build();
39-
String actualJson = new Gson().toJson(addAliasMapping.getData()).toString();
39+
String actualJson = new Gson().toJson(addAliasMapping.getData());
4040
String expectedJson = "[{\"add\":{\"index\":\"tIndex\",\"alias\":\"tAlias\",\"filter\":{\"term\":{\"user\":\"kimchy\"}}}}]";
4141

4242
assertEquals(expectedJson, actualJson);
@@ -49,9 +49,9 @@ public void testGetDataForJsonWithFilterAndRouting() {
4949
.setFilter(USER_FILTER_JSON)
5050
.addRouting("1")
5151
.build();
52-
String actualJson = new Gson().toJson(addAliasMapping.getData()).toString();
53-
String expectedJson = "[{\"add\":{\"search_routing\":\"1\",\"index\":\"tIndex\",\"alias\":\"tAlias\"," +
54-
"\"index_routing\":\"1\",\"filter\":{\"term\":{\"user\":\"kimchy\"}}}}]";
52+
String actualJson = new Gson().toJson(addAliasMapping.getData());
53+
String expectedJson = "[{\"add\":{\"index\":\"tIndex\",\"alias\":\"tAlias\"," +
54+
"\"filter\":{\"term\":{\"user\":\"kimchy\"}},\"search_routing\":\"1\",\"index_routing\":\"1\"}}]";
5555

5656
assertEquals(expectedJson, actualJson);
5757
}

jest-common/src/test/java/io/searchbox/indices/aliases/RemoveAliasMappingTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void testGetDataForJsonWithFilterAndRouting() {
5050
.addRouting("1")
5151
.build();
5252
String actualJson = new Gson().toJson(addAliasMapping.getData()).toString();
53-
String expectedJson = "[{\"remove\":{\"search_routing\":\"1\",\"index\":\"tIndex\",\"alias\":\"tAlias\",\"index_routing\":\"1\",\"filter\":{\"term\":{\"user\":\"kimchy\"}}}}]";
53+
String expectedJson = "[{\"remove\":{\"index\":\"tIndex\",\"alias\":\"tAlias\",\"filter\":{\"term\":{\"user\":\"kimchy\"}},\"search_routing\":\"1\",\"index_routing\":\"1\"}}]";
5454

5555
assertEquals(expectedJson, actualJson);
5656
}

pom.xml

+3
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@
133133
<groupId>org.apache.maven.plugins</groupId>
134134
<artifactId>maven-javadoc-plugin</artifactId>
135135
<version>2.10.3</version>
136+
<configuration>
137+
<failOnError>false</failOnError>
138+
</configuration>
136139
<executions>
137140
<execution>
138141
<id>attach-javadocs</id>

0 commit comments

Comments
 (0)