improve failure message when timing out on green/yellow
This commit is contained in:
parent
15cb0fd745
commit
84242c208e
|
@ -23,6 +23,10 @@ import org.elasticsearch.action.ActionResponse;
|
|||
import org.elasticsearch.cluster.service.PendingClusterTask;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.xcontent.ToXContent;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilderString;
|
||||
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
@ -31,7 +35,7 @@ import java.util.List;
|
|||
|
||||
/**
|
||||
*/
|
||||
public class PendingClusterTasksResponse extends ActionResponse implements Iterable<PendingClusterTask> {
|
||||
public class PendingClusterTasksResponse extends ActionResponse implements Iterable<PendingClusterTask>, ToXContent {
|
||||
|
||||
private List<PendingClusterTask> pendingTasks;
|
||||
|
||||
|
@ -58,6 +62,55 @@ public class PendingClusterTasksResponse extends ActionResponse implements Itera
|
|||
return pendingTasks.iterator();
|
||||
}
|
||||
|
||||
public String prettyPrint() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("tasks: (").append(pendingTasks.size()).append("):\n");
|
||||
for (PendingClusterTask pendingClusterTask : this) {
|
||||
sb.append(pendingClusterTask.getInsertOrder()).append("/").append(pendingClusterTask.getPriority()).append("/").append(pendingClusterTask.getSource()).append("/").append(pendingClusterTask.getTimeInQueue()).append("\n");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
try {
|
||||
XContentBuilder builder = XContentFactory.jsonBuilder().prettyPrint();
|
||||
builder.startObject();
|
||||
toXContent(builder, EMPTY_PARAMS);
|
||||
builder.endObject();
|
||||
return builder.string();
|
||||
} catch (IOException e) {
|
||||
return "{ \"error\" : \"" + e.getMessage() + "\"}";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startArray(Fields.TASKS);
|
||||
for (PendingClusterTask pendingClusterTask : this) {
|
||||
builder.startObject();
|
||||
builder.field(Fields.INSERT_ORDER, pendingClusterTask.insertOrder());
|
||||
builder.field(Fields.PRIORITY, pendingClusterTask.priority());
|
||||
builder.field(Fields.SOURCE, pendingClusterTask.source());
|
||||
builder.field(Fields.TIME_IN_QUEUE_MILLIS, pendingClusterTask.timeInQueueInMillis());
|
||||
builder.field(Fields.TIME_IN_QUEUE, pendingClusterTask.getTimeInQueue());
|
||||
builder.endObject();
|
||||
}
|
||||
builder.endArray();
|
||||
return builder;
|
||||
}
|
||||
|
||||
static final class Fields {
|
||||
|
||||
static final XContentBuilderString TASKS = new XContentBuilderString("tasks");
|
||||
static final XContentBuilderString INSERT_ORDER = new XContentBuilderString("insert_order");
|
||||
static final XContentBuilderString PRIORITY = new XContentBuilderString("proirity");
|
||||
static final XContentBuilderString SOURCE = new XContentBuilderString("source");
|
||||
static final XContentBuilderString TIME_IN_QUEUE_MILLIS = new XContentBuilderString("time_in_queue_millis");
|
||||
static final XContentBuilderString TIME_IN_QUEUE = new XContentBuilderString("time_in_queue");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFrom(StreamInput in) throws IOException {
|
||||
super.readFrom(in);
|
||||
|
|
|
@ -212,6 +212,14 @@ public class ClusterState implements ToXContent {
|
|||
return this;
|
||||
}
|
||||
|
||||
public String prettyPrint() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(nodes().prettyPrint());
|
||||
sb.append(routingTable().prettyPrint());
|
||||
sb.append(readOnlyRoutingNodes().prettyPrint());
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
try {
|
||||
|
|
|
@ -23,11 +23,9 @@ import org.elasticsearch.action.ActionListener;
|
|||
import org.elasticsearch.action.admin.cluster.tasks.PendingClusterTasksRequest;
|
||||
import org.elasticsearch.action.admin.cluster.tasks.PendingClusterTasksResponse;
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.cluster.service.PendingClusterTask;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilderString;
|
||||
import org.elasticsearch.rest.*;
|
||||
import org.elasticsearch.rest.action.support.RestXContentBuilder;
|
||||
|
||||
|
@ -53,17 +51,7 @@ public class RestPendingClusterTasksAction extends BaseRestHandler {
|
|||
try {
|
||||
XContentBuilder builder = RestXContentBuilder.restContentBuilder(request);
|
||||
builder.startObject();
|
||||
builder.startArray(Fields.TASKS);
|
||||
for (PendingClusterTask pendingClusterTask : response) {
|
||||
builder.startObject();
|
||||
builder.field(Fields.INSERT_ORDER, pendingClusterTask.insertOrder());
|
||||
builder.field(Fields.PRIORITY, pendingClusterTask.priority());
|
||||
builder.field(Fields.SOURCE, pendingClusterTask.source());
|
||||
builder.field(Fields.TIME_IN_QUEUE_MILLIS, pendingClusterTask.timeInQueueInMillis());
|
||||
builder.field(Fields.TIME_IN_QUEUE, pendingClusterTask.getTimeInQueue());
|
||||
builder.endObject();
|
||||
}
|
||||
builder.endArray();
|
||||
response.toXContent(builder, request);
|
||||
channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder));
|
||||
} catch (Throwable e) {
|
||||
onFailure(e);
|
||||
|
@ -83,15 +71,4 @@ public class RestPendingClusterTasksAction extends BaseRestHandler {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
static final class Fields {
|
||||
|
||||
static final XContentBuilderString TASKS = new XContentBuilderString("tasks");
|
||||
static final XContentBuilderString INSERT_ORDER = new XContentBuilderString("insert_order");
|
||||
static final XContentBuilderString PRIORITY = new XContentBuilderString("proirity");
|
||||
static final XContentBuilderString SOURCE = new XContentBuilderString("source");
|
||||
static final XContentBuilderString TIME_IN_QUEUE_MILLIS = new XContentBuilderString("time_in_queue_millis");
|
||||
static final XContentBuilderString TIME_IN_QUEUE = new XContentBuilderString("time_in_queue");
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -253,7 +253,10 @@ public abstract class AbstractSharedClusterTest extends ElasticsearchTestCase {
|
|||
public ClusterHealthStatus ensureGreen() {
|
||||
ClusterHealthResponse actionGet = client().admin().cluster()
|
||||
.health(Requests.clusterHealthRequest().waitForGreenStatus().waitForEvents(Priority.LANGUID).waitForRelocatingShards(0)).actionGet();
|
||||
assertThat(actionGet.isTimedOut(), equalTo(false));
|
||||
if (actionGet.isTimedOut()) {
|
||||
logger.info("ensureGreen timed out, cluster state:\n{}\n{}", client().admin().cluster().prepareState().get().getState().prettyPrint(), client().admin().cluster().preparePendingClusterTasks().get().prettyPrint());
|
||||
assertThat(actionGet.isTimedOut(), equalTo(false));
|
||||
}
|
||||
assertThat(actionGet.getStatus(), equalTo(ClusterHealthStatus.GREEN));
|
||||
return actionGet.getStatus();
|
||||
}
|
||||
|
@ -269,7 +272,10 @@ public abstract class AbstractSharedClusterTest extends ElasticsearchTestCase {
|
|||
}
|
||||
ClusterHealthResponse actionGet = client().admin().cluster()
|
||||
.health(request).actionGet();
|
||||
assertThat(actionGet.isTimedOut(), equalTo(false));
|
||||
if (actionGet.isTimedOut()) {
|
||||
logger.info("waitForRelocation timed out (status={}), cluster state:\n{}\n{}", status, client().admin().cluster().prepareState().get().getState().prettyPrint(), client().admin().cluster().preparePendingClusterTasks().get().prettyPrint());
|
||||
assertThat(actionGet.isTimedOut(), equalTo(false));
|
||||
}
|
||||
if (status != null) {
|
||||
assertThat(actionGet.getStatus(), equalTo(status));
|
||||
}
|
||||
|
@ -279,7 +285,10 @@ public abstract class AbstractSharedClusterTest extends ElasticsearchTestCase {
|
|||
public ClusterHealthStatus ensureYellow() {
|
||||
ClusterHealthResponse actionGet = client().admin().cluster()
|
||||
.health(Requests.clusterHealthRequest().waitForRelocatingShards(0).waitForYellowStatus().waitForEvents(Priority.LANGUID)).actionGet();
|
||||
assertThat(actionGet.isTimedOut(), equalTo(false));
|
||||
if (actionGet.isTimedOut()) {
|
||||
logger.info("ensureYellow timed out, cluster state:\n{}\n{}", client().admin().cluster().prepareState().get().getState().prettyPrint(), client().admin().cluster().preparePendingClusterTasks().get().prettyPrint());
|
||||
assertThat(actionGet.isTimedOut(), equalTo(false));
|
||||
}
|
||||
return actionGet.getStatus();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue