fix a (rare) case where search will fail due to failed serialization

This commit is contained in:
kimchy 2011-01-17 14:37:36 +02:00
parent b4e5a542f3
commit ba725f8986
2 changed files with 21 additions and 6 deletions

View File

@ -50,13 +50,17 @@ public class SearchPhaseExecutionException extends ElasticSearchException {
return shardFailures; return shardFailures;
} }
private static final String buildMessage(String phaseName, String msg, ShardSearchFailure[] shardFailures) { private static String buildMessage(String phaseName, String msg, ShardSearchFailure[] shardFailures) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Failed to execute phase [").append(phaseName).append("], ").append(msg); sb.append("Failed to execute phase [").append(phaseName).append("], ").append(msg);
if (shardFailures != null && shardFailures.length > 0) { if (shardFailures != null && shardFailures.length > 0) {
sb.append("; shardFailures "); sb.append("; shardFailures ");
for (ShardSearchFailure shardFailure : shardFailures) { for (ShardSearchFailure shardFailure : shardFailures) {
sb.append("{").append(shardFailure.shard()).append(": ").append(shardFailure.reason()).append("}"); if (shardFailure.shard() != null) {
sb.append("{").append(shardFailure.shard()).append(": ").append(shardFailure.reason()).append("}");
} else {
sb.append("{").append(shardFailure.reason()).append("}");
}
} }
} }
return sb.toString(); return sb.toString();

View File

@ -23,6 +23,7 @@ import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.io.stream.Streamable; import org.elasticsearch.common.io.stream.Streamable;
import javax.annotation.Nullable;
import java.io.IOException; import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
@ -49,11 +50,11 @@ public class SearchShardTarget implements Streamable, Serializable {
this.shardId = shardId; this.shardId = shardId;
} }
public String nodeId() { @Nullable public String nodeId() {
return nodeId; return nodeId;
} }
public String getNodeId() { @Nullable public String getNodeId() {
return nodeId; return nodeId;
} }
@ -80,13 +81,20 @@ public class SearchShardTarget implements Streamable, Serializable {
} }
@Override public void readFrom(StreamInput in) throws IOException { @Override public void readFrom(StreamInput in) throws IOException {
nodeId = in.readUTF(); if (in.readBoolean()) {
nodeId = in.readUTF();
}
index = in.readUTF(); index = in.readUTF();
shardId = in.readVInt(); shardId = in.readVInt();
} }
@Override public void writeTo(StreamOutput out) throws IOException { @Override public void writeTo(StreamOutput out) throws IOException {
out.writeUTF(nodeId); if (nodeId == null) {
out.writeBoolean(false);
} else {
out.writeBoolean(true);
out.writeUTF(nodeId);
}
out.writeUTF(index); out.writeUTF(index);
out.writeVInt(shardId); out.writeVInt(shardId);
} }
@ -112,6 +120,9 @@ public class SearchShardTarget implements Streamable, Serializable {
} }
@Override public String toString() { @Override public String toString() {
if (nodeId == null) {
return "[_na_][" + index + "][" + shardId + "]";
}
return "[" + nodeId + "][" + index + "][" + shardId + "]"; return "[" + nodeId + "][" + index + "][" + shardId + "]";
} }
} }