package org.xbib.elasticsearch.helper.client.ingest;
import org.elasticsearch.client.transport.NoNodeAvailableException;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.ESLoggerFactory;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
import org.xbib.elasticsearch.helper.client.ClientBuilder;
import org.xbib.elasticsearch.helper.client.IngestTransportClient;
import org.xbib.elasticsearch.helper.client.LongAdderIngestMetric;
import org.junit.Test;
import org.xbib.elasticsearch.NodeTestUtils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
public class IngestTransportUpdateReplicaLevelTest extends NodeTestUtils {
private final static ESLogger logger = ESLoggerFactory.getLogger(IngestTransportUpdateReplicaLevelTest.class.getSimpleName());
@Test
public void testUpdateReplicaLevel() throws Exception {
int numberOfShards = 2;
int replicaLevel = 3;
// we need 3 nodes for replica level 3
startNode("2");
startNode("3");
int shardsAfterReplica;
Settings settings = Settings.settingsBuilder()
.put("index.number_of_shards", numberOfShards)
.put("index.number_of_replicas", 0)
.build();
final IngestTransportClient ingest = ClientBuilder.builder()
.put(getSettings())
.setMetric(new LongAdderIngestMetric())
.toIngestTransportClient();
try {
ingest.newIndex("replicatest", settings, null);
ingest.waitForCluster("GREEN", TimeValue.timeValueSeconds(30));
for (int i = 0; i < 12345; i++) {
ingest.index("replicatest", "replicatest", null, "{ \"name\" : \"" + randomString(32) + "\"}");
}
ingest.flushIngest();
ingest.waitForResponses(TimeValue.timeValueSeconds(30));
shardsAfterReplica = ingest.updateReplicaLevel("replicatest", replicaLevel);
assertEquals(shardsAfterReplica, numberOfShards * (replicaLevel + 1));
} catch (NoNodeAvailableException e) {
logger.warn("skipping, no node available");
} finally {
ingest.shutdown();
if (ingest.hasThrowable()) {
logger.error("error", ingest.getThrowable());
}
assertFalse(ingest.hasThrowable());
}
}
}