diff --git a/core/src/main/java/org/elasticsearch/action/support/WriteRequest.java b/core/src/main/java/org/elasticsearch/action/support/WriteRequest.java index 6379a4fb259c3..50edcd39bd16e 100644 --- a/core/src/main/java/org/elasticsearch/action/support/WriteRequest.java +++ b/core/src/main/java/org/elasticsearch/action/support/WriteRequest.java @@ -65,36 +65,43 @@ enum RefreshPolicy implements Writeable { /** * Don't refresh after this request. The default. */ - NONE, + NONE("false"), /** * Force a refresh as part of this request. This refresh policy does not scale for high indexing or search throughput but is useful * to present a consistent view to for indices with very low traffic. And it is wonderful for tests! */ - IMMEDIATE, + IMMEDIATE("true"), /** * Leave this request open until a refresh has made the contents of this request visible to search. This refresh policy is * compatible with high indexing and search throughput but it causes the request to wait to reply until a refresh occurs. */ - WAIT_UNTIL; + WAIT_UNTIL("wait_for"); + + private final String value; + + RefreshPolicy(String value) { + this.value = value; + } + + public String getValue() { + return value; + } /** * Parse the string representation of a refresh policy, usually from a request parameter. */ - public static RefreshPolicy parse(String string) { - switch (string) { - case "false": - return NONE; - /* - * Empty string is IMMEDIATE because that makes "POST /test/test/1?refresh" perform a refresh which reads well and is what folks - * are used to. - */ - case "": - case "true": + public static RefreshPolicy parse(String value) { + for (RefreshPolicy policy : values()) { + if (policy.getValue().equals(value)) { + return policy; + } + } + if ("".equals(value)) { + // Empty string is IMMEDIATE because that makes "POST /test/test/1?refresh" perform + // a refresh which reads well and is what folks are used to. return IMMEDIATE; - case "wait_for": - return WAIT_UNTIL; } - throw new IllegalArgumentException("Unknown value for refresh: [" + string + "]."); + throw new IllegalArgumentException("Unknown value for refresh: [" + value + "]."); } public static RefreshPolicy readFrom(StreamInput in) throws IOException { diff --git a/core/src/test/java/org/elasticsearch/action/support/RefreshPolicyTests.java b/core/src/test/java/org/elasticsearch/action/support/RefreshPolicyTests.java new file mode 100644 index 0000000000000..a6e25036c5317 --- /dev/null +++ b/core/src/test/java/org/elasticsearch/action/support/RefreshPolicyTests.java @@ -0,0 +1,54 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.action.support; + +import org.elasticsearch.common.io.stream.BytesStreamOutput; +import org.elasticsearch.common.io.stream.StreamInput; +import org.elasticsearch.test.ESTestCase; + +import java.io.IOException; + +public class RefreshPolicyTests extends ESTestCase { + + public void testSerialization() throws IOException { + final WriteRequest.RefreshPolicy refreshPolicy = randomFrom(WriteRequest.RefreshPolicy.values()); + try (BytesStreamOutput out = new BytesStreamOutput()) { + refreshPolicy.writeTo(out); + try (StreamInput in = out.bytes().streamInput()) { + WriteRequest.RefreshPolicy deserializedRefreshPolicy = WriteRequest.RefreshPolicy.readFrom(in); + assertEquals(refreshPolicy, deserializedRefreshPolicy); + } + } + } + + public void testParse() throws IOException { + final String refreshPolicyValue = randomFrom(WriteRequest.RefreshPolicy.values()).getValue(); + assertEquals(refreshPolicyValue, WriteRequest.RefreshPolicy.parse(refreshPolicyValue).getValue()); + } + + public void testParseEmpty() throws IOException { + assertEquals(WriteRequest.RefreshPolicy.IMMEDIATE, WriteRequest.RefreshPolicy.parse("")); + } + + public void testParseUnknown() throws IOException { + IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> WriteRequest.RefreshPolicy.parse("unknown")); + assertEquals("Unknown value for refresh: [unknown].", e.getMessage()); + } +}