Skip to content

Commit

Permalink
Add validation
Browse files Browse the repository at this point in the history
  • Loading branch information
nik9000 committed Aug 16, 2016
1 parent c93f9dc commit b318d8a
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@

import org.elasticsearch.action.ActionRequestValidationException;
import org.elasticsearch.action.IndicesRequest;
import org.elasticsearch.action.admin.indices.alias.Alias;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.support.ActiveShardCount;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.action.support.master.AcknowledgedRequest;
import org.elasticsearch.common.io.stream.StreamInput;
Expand Down Expand Up @@ -56,18 +58,37 @@ public MigrateIndexRequest(String sourceIndex, String newIndex) {

@Override
public ActionRequestValidationException validate() {
ActionRequestValidationException validationException = createIndexRequest == null ? null : createIndexRequest.validate();
ActionRequestValidationException validationException = null;
if (sourceIndex == null) {
validationException = addValidationError("source index is not set", validationException);
}
if (createIndexRequest == null) {
validationException = addValidationError("create index request is not set", validationException);
} else {
ActionRequestValidationException createValidation = createIndexRequest.validate();
if (createValidation != null) {
for (String createValidationError: createValidation.validationErrors()) {
validationException = addValidationError("validation error with create index: " + createValidationError,
validationException);
}
}
if (Objects.equals(sourceIndex, createIndexRequest.index())) {
validationException = addValidationError("source and destination can't be the same index", validationException);
}
if (createIndexRequest.aliases().isEmpty()) {
validationException = addValidationError("migrating an index requires an alias", validationException);
}
for (Alias alias : createIndexRequest.aliases()) {
if (Objects.equals(createIndexRequest.index(), alias.name())) {
validationException = addValidationError(
"can't add an alias with the same name as the destination index [" + createIndexRequest.index() + "]",
validationException);
}
}
if (ActiveShardCount.NONE.equals(createIndexRequest.waitForActiveShards())) {
validationException = addValidationError("must wait for more than one active shard in the new index", validationException);
}
}
// NOCOMMIT validate wait_for_active_shards is at least 1.

return validationException;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
package org.elasticsearch.action.admin.indices.migrate;

import org.elasticsearch.action.admin.indices.alias.Alias;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.support.ActiveShardCount;
import org.elasticsearch.common.ValidationException;
import org.elasticsearch.common.io.stream.BytesStreamOutput;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.settings.Settings;
Expand Down Expand Up @@ -57,6 +60,48 @@ public void testToStringIsSane() {
assertThat(string, containsString("parentTask="));
}

public void testValidation() {
MigrateIndexRequest request = new MigrateIndexRequest("test_0", "test_1");
request.getCreateIndexRequest().alias(new Alias("test"));
assertNull(request.validate());

request = new MigrateIndexRequest();
request.setCreateIndexRequest(new CreateIndexRequest("test_1").alias(new Alias("test")));
ValidationException e = request.validate();
assertEquals("Validation Failed: 1: source index is not set;", e.getMessage());

request = new MigrateIndexRequest();
request.setSourceIndex("test_0");
e = request.validate();
assertEquals("Validation Failed: 1: create index request is not set;", e.getMessage());

request = new MigrateIndexRequest();
request.setSourceIndex("test_0");
request.setCreateIndexRequest(new CreateIndexRequest().alias(new Alias("test")));
e = request.validate();
assertEquals("Validation Failed: 1: validation error with create index: index is missing;", e.getMessage());

request = new MigrateIndexRequest("test_0", "test_0");
request.getCreateIndexRequest().alias(new Alias("test"));
e = request.validate();
assertEquals("Validation Failed: 1: source and destination can't be the same index;", e.getMessage());

request = new MigrateIndexRequest("test_0", "test_1");
e = request.validate();
assertEquals("Validation Failed: 1: migrating an index requires an alias;", e.getMessage());

request = new MigrateIndexRequest("test_0", "test_1");
request.getCreateIndexRequest().alias(new Alias("test_1"));
e = request.validate();
assertEquals("Validation Failed: 1: can't add an alias with the same name as the destination index [test_1];", e.getMessage());

request = new MigrateIndexRequest("test_0", "test_1");
request.getCreateIndexRequest().alias(new Alias("test"))
.waitForActiveShards(randomFrom(ActiveShardCount.from(0), ActiveShardCount.NONE));
e = request.validate();
assertEquals("Validation Failed: 1: must wait for more than one active shard in the new index;", e.getMessage());
}

private MigrateIndexRequest randomRequest() {
MigrateIndexRequest request = new MigrateIndexRequest(randomAsciiOfLength(5), randomAsciiOfLength(5));
int settingsCount = between(0, 5);
Expand Down

0 comments on commit b318d8a

Please sign in to comment.