Improve error message when pausing index (#48915)
Throw an appropriate error message when the follower index is not found or is a regular index.
This commit is contained in:
parent
d3bc9b7fb2
commit
fec22130c2
|
@ -13,14 +13,17 @@ import org.elasticsearch.action.support.master.TransportMasterNodeAction;
|
||||||
import org.elasticsearch.cluster.ClusterState;
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.block.ClusterBlockException;
|
import org.elasticsearch.cluster.block.ClusterBlockException;
|
||||||
import org.elasticsearch.cluster.block.ClusterBlockLevel;
|
import org.elasticsearch.cluster.block.ClusterBlockLevel;
|
||||||
|
import org.elasticsearch.cluster.metadata.IndexMetaData;
|
||||||
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
import org.elasticsearch.cluster.service.ClusterService;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
|
import org.elasticsearch.index.IndexNotFoundException;
|
||||||
import org.elasticsearch.persistent.PersistentTasksCustomMetaData;
|
import org.elasticsearch.persistent.PersistentTasksCustomMetaData;
|
||||||
import org.elasticsearch.persistent.PersistentTasksService;
|
import org.elasticsearch.persistent.PersistentTasksService;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.transport.TransportService;
|
import org.elasticsearch.transport.TransportService;
|
||||||
|
import org.elasticsearch.xpack.ccr.Ccr;
|
||||||
import org.elasticsearch.xpack.core.ccr.action.PauseFollowAction;
|
import org.elasticsearch.xpack.core.ccr.action.PauseFollowAction;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -58,9 +61,18 @@ public class TransportPauseFollowAction extends TransportMasterNodeAction<PauseF
|
||||||
protected void masterOperation(PauseFollowAction.Request request,
|
protected void masterOperation(PauseFollowAction.Request request,
|
||||||
ClusterState state,
|
ClusterState state,
|
||||||
ActionListener<AcknowledgedResponse> listener) throws Exception {
|
ActionListener<AcknowledgedResponse> listener) throws Exception {
|
||||||
|
final IndexMetaData followerIMD = state.metaData().index(request.getFollowIndex());
|
||||||
|
if (followerIMD == null) {
|
||||||
|
listener.onFailure(new IndexNotFoundException(request.getFollowIndex()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (followerIMD.getCustomData(Ccr.CCR_CUSTOM_METADATA_KEY) == null) {
|
||||||
|
listener.onFailure(new IllegalArgumentException("index [" + request.getFollowIndex() + "] is not a follower index"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
PersistentTasksCustomMetaData persistentTasksMetaData = state.metaData().custom(PersistentTasksCustomMetaData.TYPE);
|
PersistentTasksCustomMetaData persistentTasksMetaData = state.metaData().custom(PersistentTasksCustomMetaData.TYPE);
|
||||||
if (persistentTasksMetaData == null) {
|
if (persistentTasksMetaData == null) {
|
||||||
listener.onFailure(new IllegalArgumentException("no shard follow tasks for [" + request.getFollowIndex() + "]"));
|
listener.onFailure(new IllegalArgumentException("no shard follow tasks found"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -577,7 +577,7 @@ public class IndexFollowingIT extends CcrIntegTestCase {
|
||||||
|
|
||||||
public void testUnfollowNonExistingIndex() {
|
public void testUnfollowNonExistingIndex() {
|
||||||
PauseFollowAction.Request unfollowRequest = new PauseFollowAction.Request("non-existing-index");
|
PauseFollowAction.Request unfollowRequest = new PauseFollowAction.Request("non-existing-index");
|
||||||
expectThrows(IllegalArgumentException.class,
|
expectThrows(IndexNotFoundException.class,
|
||||||
() -> followerClient().execute(PauseFollowAction.INSTANCE, unfollowRequest).actionGet());
|
() -> followerClient().execute(PauseFollowAction.INSTANCE, unfollowRequest).actionGet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -818,6 +818,27 @@ public class IndexFollowingIT extends CcrIntegTestCase {
|
||||||
ensureNoCcrTasks();
|
ensureNoCcrTasks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPauseIndex() throws Exception {
|
||||||
|
assertAcked(leaderClient().admin().indices().prepareCreate("leader")
|
||||||
|
.setSettings(Settings.builder()
|
||||||
|
.put(IndexSettings.INDEX_SOFT_DELETES_SETTING.getKey(), true)
|
||||||
|
.put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
|
||||||
|
.put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0)
|
||||||
|
.build()));
|
||||||
|
followerClient().execute(PutFollowAction.INSTANCE, putFollow("leader", "follower")).get();
|
||||||
|
assertAcked(followerClient().admin().indices().prepareCreate("regular-index"));
|
||||||
|
assertAcked(followerClient().execute(PauseFollowAction.INSTANCE, new PauseFollowAction.Request("follower")).actionGet());
|
||||||
|
assertThat(expectThrows(IllegalArgumentException.class, () -> followerClient().execute(
|
||||||
|
PauseFollowAction.INSTANCE, new PauseFollowAction.Request("follower")).actionGet()).getMessage(),
|
||||||
|
equalTo("no shard follow tasks for [follower]"));
|
||||||
|
assertThat(expectThrows(IllegalArgumentException.class, () -> followerClient().execute(
|
||||||
|
PauseFollowAction.INSTANCE, new PauseFollowAction.Request("regular-index")).actionGet()).getMessage(),
|
||||||
|
equalTo("index [regular-index] is not a follower index"));
|
||||||
|
assertThat(expectThrows(IndexNotFoundException.class, () -> followerClient().execute(
|
||||||
|
PauseFollowAction.INSTANCE, new PauseFollowAction.Request("xyz")).actionGet()).getMessage(),
|
||||||
|
equalTo("no such index [xyz]"));
|
||||||
|
}
|
||||||
|
|
||||||
public void testUnfollowIndex() throws Exception {
|
public void testUnfollowIndex() throws Exception {
|
||||||
String leaderIndexSettings = getIndexSettings(1, 0, singletonMap(IndexSettings.INDEX_SOFT_DELETES_SETTING.getKey(), "true"));
|
String leaderIndexSettings = getIndexSettings(1, 0, singletonMap(IndexSettings.INDEX_SOFT_DELETES_SETTING.getKey(), "true"));
|
||||||
assertAcked(leaderClient().admin().indices().prepareCreate("index1").setSource(leaderIndexSettings, XContentType.JSON).get());
|
assertAcked(leaderClient().admin().indices().prepareCreate("index1").setSource(leaderIndexSettings, XContentType.JSON).get());
|
||||||
|
|
Loading…
Reference in New Issue