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

Commit

Permalink
#151 Implemented GetSettings and UpdateSettings actions
Browse files Browse the repository at this point in the history
  • Loading branch information
Cihat Keser committed Oct 21, 2014
1 parent a9cd676 commit e5b8cd6
Show file tree
Hide file tree
Showing 5 changed files with 205 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,22 @@
import io.searchbox.action.GenericResultAbstractAction;

/**
* The get settings API allows to retrieve settings of index/indices.
*
* @author Dogukan Sonmez
* @author cihat keser
*/
public class GetSettings extends GenericResultAbstractAction {
public class GetSettings extends IndicesSettingsAbstractAction {

private GetSettings(Builder builder) {
super(builder);
setURI(buildURI());
}

@Override
public String getRestMethodName() {
return "GET";
}

@Override
protected String buildURI() {
StringBuilder sb = new StringBuilder();
sb.append(super.buildURI()).append("/_settings");
return sb.toString();
}

public static class Builder extends AbstractMultiIndexActionBuilder<GetSettings, Builder> {

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package io.searchbox.indices.settings;

import io.searchbox.action.GenericResultAbstractAction;

/**
* @author cihat keser
*/
public abstract class IndicesSettingsAbstractAction extends GenericResultAbstractAction {

protected IndicesSettingsAbstractAction(Builder builder) {
super(builder);
setURI(buildURI());
}

@Override
protected String buildURI() {
StringBuilder sb = new StringBuilder();
sb.append(super.buildURI()).append("/_settings");
return sb.toString();
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,50 @@
package io.searchbox.indices.settings;

import com.google.gson.Gson;
import io.searchbox.action.AbstractMultiIndexActionBuilder;

/**
* Change specific index level settings in real time.
*
* @author Dogukan Sonmez
* @author cihat keser
*/
public class UpdateSettings extends IndicesSettingsAbstractAction {

private Object source;

private UpdateSettings(Builder builder) {
super(builder);
this.source = builder.source;
}

@Override
public String getRestMethodName() {
return "PUT";
}

@Override
public Object getData(Gson gson) {
return source;
}

public static class Builder extends AbstractMultiIndexActionBuilder<UpdateSettings, Builder> {
private final Object source;

/**
* Please see the <a href="http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-update-settings.html#indices-update-settings">related page on Elasticsearch guide</a>
* for the list of settings that can be changed using this action/API.
*
* @param source body of request that includes updated settings
*/
public Builder(Object source) {
this.source = source;
}

@Override
public UpdateSettings build() {
return new UpdateSettings(this);
}
}

public class UpdateSettings {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.searchbox.indices.settings;

import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

public class UpdateSettingsTest {

@Test
public void testDefaultBehaviour() {
String expectedUri = "_all/_settings";

UpdateSettings updateSettings = new UpdateSettings.Builder("").build();
assertEquals(expectedUri, updateSettings.getURI());
assertEquals("", updateSettings.getData(null));
assertEquals("PUT", updateSettings.getRestMethodName());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package io.searchbox.indices.settings;

import io.searchbox.client.JestResult;
import io.searchbox.common.AbstractIntegrationTest;
import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest;
import org.elasticsearch.action.admin.indices.settings.get.GetSettingsResponse;
import org.elasticsearch.test.ElasticsearchIntegrationTest;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

/**
* @author cihat keser
*/
@ElasticsearchIntegrationTest.ClusterScope(scope = ElasticsearchIntegrationTest.Scope.SUITE, numDataNodes = 1)
public class UpdateSettingsIntegrationTest extends AbstractIntegrationTest {
private static final String INDEX_1 = "updatesettingstest1";
private static final String INDEX_2 = "updatesettingstest2";

@Before
public void init() {
createIndex(INDEX_1, INDEX_2);
ensureGreen(INDEX_1, INDEX_2);
}

@Test
public void testBasicFlowForAllIndices() throws IOException {
GetSettingsResponse getSettingsResponse =
client().admin().indices().getSettings(new GetSettingsRequest()).actionGet();
Integer originalNumberOfReplicas = Integer.parseInt(getSettingsResponse.getSetting(INDEX_1, "index.number_of_replicas"));
Integer expectedNumberOfReplicas = originalNumberOfReplicas + 1;

String body = "{ \"index\" : { " +
"\"number_of_replicas\" : " + expectedNumberOfReplicas.toString() +
"} }";

UpdateSettings updateSettings = new UpdateSettings.Builder(body).build();
JestResult result = client.execute(updateSettings);
assertNotNull(result);

assertTrue(result.isSucceeded());

getSettingsResponse = client().admin().indices().getSettings(new GetSettingsRequest()).actionGet();
Integer actualNumberOfReplicasForIndex1 = Integer.parseInt(getSettingsResponse.getSetting(INDEX_1, "index.number_of_replicas"));
Integer actualNumberOfReplicasForIndex2 = Integer.parseInt(getSettingsResponse.getSetting(INDEX_2, "index.number_of_replicas"));

assertEquals(expectedNumberOfReplicas, actualNumberOfReplicasForIndex1);
assertEquals(expectedNumberOfReplicas, actualNumberOfReplicasForIndex2);
}

@Test
public void testBasicFlowForNonExistingIndex() throws IOException {
String body = "{ \"index\" : { " +
"\"number_of_replicas\" : 3" +
"} }";

UpdateSettings updateSettings = new UpdateSettings.Builder(body).addIndex("idontexist").build();
JestResult result = client.execute(updateSettings);
assertNotNull(result);

assertFalse(result.isSucceeded());
}

@Test
public void testBasicFlowForTargetedIndex() throws IOException {
GetSettingsResponse getSettingsResponse =
client().admin().indices().getSettings(new GetSettingsRequest()).actionGet();
Integer originalNumberOfReplicasForIndex1 = Integer.parseInt(getSettingsResponse.getSetting(INDEX_1, "index.number_of_replicas"));
Integer originalNumberOfReplicasForIndex2 = Integer.parseInt(getSettingsResponse.getSetting(INDEX_2, "index.number_of_replicas"));
Integer expectedNumberOfReplicasForIndex1 = originalNumberOfReplicasForIndex1 + 1;

String body = "{ \"index\" : { " +
"\"number_of_replicas\" : " + expectedNumberOfReplicasForIndex1.toString() +
"} }";

UpdateSettings updateSettings = new UpdateSettings.Builder(body).addIndex(INDEX_1).build();
JestResult result = client.execute(updateSettings);
assertNotNull(result);

assertTrue(result.isSucceeded());

getSettingsResponse = client().admin().indices().getSettings(new GetSettingsRequest()).actionGet();
Integer actualNumberOfReplicasForIndex1 = Integer.parseInt(getSettingsResponse.getSetting(INDEX_1, "index.number_of_replicas"));
Integer actualNumberOfReplicasForIndex2 = Integer.parseInt(getSettingsResponse.getSetting(INDEX_2, "index.number_of_replicas"));

assertEquals(expectedNumberOfReplicasForIndex1, actualNumberOfReplicasForIndex1);
assertEquals(originalNumberOfReplicasForIndex2, actualNumberOfReplicasForIndex2);
}

@Test
public void testWithEmptySource() throws IOException {
UpdateSettings updateSettings = new UpdateSettings.Builder("").addIndex(INDEX_1).build();
JestResult result = client.execute(updateSettings);
assertNotNull(result);

assertTrue(result.isSucceeded());
}

@Test
public void testWithEmptyJsonSource() throws IOException {
UpdateSettings updateSettings = new UpdateSettings.Builder("{}").addIndex(INDEX_1).build();
JestResult result = client.execute(updateSettings);
assertNotNull(result);

assertTrue(result.isSucceeded());
}

@Test
public void testWithNullSource() throws IOException {
UpdateSettings updateSettings = new UpdateSettings.Builder(null).addIndex(INDEX_1).build();
JestResult result = client.execute(updateSettings);
assertNotNull(result);

assertTrue(result.isSucceeded());
}

}

0 comments on commit e5b8cd6

Please sign in to comment.