Gateway Storage: Improve it to support non breaking changes in the future, closes #191.

This commit is contained in:
kimchy 2010-05-24 18:27:48 +03:00
parent 2cdb7bc05a
commit b7d11f1303
7 changed files with 62 additions and 27 deletions

View File

@ -11,7 +11,7 @@ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
buildTimeStr = sdf.format(buildTime)
versionNumber = '0.7.2-SNAPSHOT'
versionNumber = '0.8.0-SNAPSHOT'
explodedDistDir = new File(distsDir, 'exploded')
explodedDistLibDir = new File(explodedDistDir, 'lib')

View File

@ -29,6 +29,7 @@ import org.elasticsearch.util.io.stream.StreamOutput;
import org.elasticsearch.util.settings.ImmutableSettings;
import org.elasticsearch.util.settings.Settings;
import org.elasticsearch.util.xcontent.ToXContent;
import org.elasticsearch.util.xcontent.XContentFactory;
import org.elasticsearch.util.xcontent.XContentParser;
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
@ -210,13 +211,14 @@ public class IndexMetaData {
}
builder.endObject();
builder.startObject("mappings");
builder.startArray("mappings");
for (Map.Entry<String, String> entry : indexMetaData.mappings().entrySet()) {
builder.startObject(entry.getKey());
builder.field("source", entry.getValue());
builder.endObject();
XContentParser parser = XContentFactory.xContent(entry.getValue()).createParser(entry.getValue());
Map<String, Object> mapping = parser.map();
parser.close();
builder.map(mapping);
}
builder.endObject();
builder.endArray();
builder.endObject();
}
@ -240,22 +242,17 @@ public class IndexMetaData {
}
builder.settings(settingsBuilder.build());
} else if ("mappings".equals(currentFieldName)) {
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
String mappingType = parser.currentName();
String mappingSource = null;
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
if (token == XContentParser.Token.FIELD_NAME) {
if ("source".equals(parser.currentName())) {
parser.nextToken();
mappingSource = parser.text();
}
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
Map<String, Object> mapping = parser.map();
if (mapping.size() == 1) {
String mappingSource = XContentFactory.jsonBuilder().map(mapping).string();
if (mappingSource == null) {
// crap, no mapping source, warn?
} else {
builder.putMapping(mapping.keySet().iterator().next(), mappingSource);
}
}
if (mappingSource == null) {
// crap, no mapping source, warn?
} else {
builder.putMapping(mappingType, mappingSource);
}
}
}
}

View File

@ -148,4 +148,12 @@ public class NettyHttpRequest extends AbstractRestRequest implements HttpRequest
@Override public String param(String key) {
return params.get(key);
}
@Override public String param(String key, String defaultValue) {
String value = params.get(key);
if (value == null) {
return defaultValue;
}
return value;
}
}

View File

@ -105,7 +105,7 @@ public interface Translog extends IndexShardComponent {
}
/**
* A generic interface representing an operation perfomed on the transaction log.
* A generic interface representing an operation performed on the transaction log.
* Each is associated with a type.
*/
static interface Operation extends Streamable {
@ -191,6 +191,7 @@ public interface Translog extends IndexShardComponent {
}
@Override public void readFrom(StreamInput in) throws IOException {
in.readVInt(); // version
id = in.readUTF();
type = in.readUTF();
source = new byte[in.readVInt()];
@ -198,6 +199,7 @@ public interface Translog extends IndexShardComponent {
}
@Override public void writeTo(StreamOutput out) throws IOException {
out.writeVInt(0); // version
out.writeUTF(id);
out.writeUTF(type);
out.writeVInt(source.length);
@ -248,6 +250,7 @@ public interface Translog extends IndexShardComponent {
}
@Override public void readFrom(StreamInput in) throws IOException {
in.readVInt(); // version
id = in.readUTF();
type = in.readUTF();
source = new byte[in.readVInt()];
@ -255,6 +258,7 @@ public interface Translog extends IndexShardComponent {
}
@Override public void writeTo(StreamOutput out) throws IOException {
out.writeVInt(0); // version
out.writeUTF(id);
out.writeUTF(type);
out.writeVInt(source.length);
@ -293,10 +297,12 @@ public interface Translog extends IndexShardComponent {
}
@Override public void readFrom(StreamInput in) throws IOException {
in.readVInt(); // version
uid = new Term(in.readUTF(), in.readUTF());
}
@Override public void writeTo(StreamOutput out) throws IOException {
out.writeVInt(0); // version
out.writeUTF(uid.field());
out.writeUTF(uid.text());
}
@ -345,6 +351,7 @@ public interface Translog extends IndexShardComponent {
}
@Override public void readFrom(StreamInput in) throws IOException {
in.readVInt(); // version
source = new byte[in.readVInt()];
in.readFully(source);
if (in.readBoolean()) {
@ -360,6 +367,7 @@ public interface Translog extends IndexShardComponent {
}
@Override public void writeTo(StreamOutput out) throws IOException {
out.writeVInt(0); // version
out.writeVInt(source.length);
out.writeBytes(source);
if (queryParserName == null) {

View File

@ -33,12 +33,18 @@ public interface ToXContent {
public static interface Params {
String param(String key);
String param(String key, String defaultValue);
}
public static final Params EMPTY_PARAMS = new Params() {
@Override public String param(String key) {
return null;
}
@Override public String param(String key, String defaultValue) {
return defaultValue;
}
};
public static class MapParams implements Params {
@ -52,6 +58,14 @@ public interface ToXContent {
@Override public String param(String key) {
return params.get(key);
}
@Override public String param(String key, String defaultValue) {
String value = params.get(key);
if (value == null) {
return defaultValue;
}
return value;
}
}
void toXContent(XContentBuilder builder, Params params) throws IOException;

View File

@ -66,13 +66,13 @@ public class ToAndFromJsonMetaDataTests {
MetaData parsedMetaData = MetaData.Builder.fromXContent(XContentFactory.xContent(XContentType.JSON).createParser(metaDataSource), null);
assertThat(parsedMetaData.maxNumberOfShardsPerNode(), equalTo(2));
IndexMetaData indexMetaData = metaData.index("test1");
IndexMetaData indexMetaData = parsedMetaData.index("test1");
assertThat(indexMetaData.numberOfShards(), equalTo(1));
assertThat(indexMetaData.numberOfReplicas(), equalTo(2));
assertThat(indexMetaData.settings().getAsMap().size(), equalTo(2));
assertThat(indexMetaData.mappings().size(), equalTo(0));
indexMetaData = metaData.index("test2");
indexMetaData = parsedMetaData.index("test2");
assertThat(indexMetaData.numberOfShards(), equalTo(2));
assertThat(indexMetaData.numberOfReplicas(), equalTo(3));
assertThat(indexMetaData.settings().getAsMap().size(), equalTo(4));
@ -80,14 +80,14 @@ public class ToAndFromJsonMetaDataTests {
assertThat(indexMetaData.settings().get("setting2"), equalTo("value2"));
assertThat(indexMetaData.mappings().size(), equalTo(0));
indexMetaData = metaData.index("test3");
indexMetaData = parsedMetaData.index("test3");
assertThat(indexMetaData.numberOfShards(), equalTo(1));
assertThat(indexMetaData.numberOfReplicas(), equalTo(2));
assertThat(indexMetaData.settings().getAsMap().size(), equalTo(2));
assertThat(indexMetaData.mappings().size(), equalTo(1));
assertThat(indexMetaData.mappings().get("mapping1"), equalTo(MAPPING_SOURCE1));
indexMetaData = metaData.index("test4");
indexMetaData = parsedMetaData.index("test4");
assertThat(indexMetaData.numberOfShards(), equalTo(1));
assertThat(indexMetaData.numberOfReplicas(), equalTo(2));
assertThat(indexMetaData.settings().getAsMap().size(), equalTo(4));
@ -98,6 +98,6 @@ public class ToAndFromJsonMetaDataTests {
assertThat(indexMetaData.mappings().get("mapping2"), equalTo(MAPPING_SOURCE2));
}
private static final String MAPPING_SOURCE1 = "{ text1: { type : \"string\" } }";
private static final String MAPPING_SOURCE2 = "{ text2: { type : \"string\" } }";
private static final String MAPPING_SOURCE1 = "{\"mapping1\":{\"text1\":{\"type\":\"string\"}}}";
private static final String MAPPING_SOURCE2 = "{\"mapping2\":{\"text2\":{\"type\":\"string\"}}}";
}

View File

@ -156,4 +156,12 @@ public class MemcachedRestRequest extends AbstractRestRequest {
@Override public Map<String, String> params() {
return params;
}
@Override public String param(String key, String defaultValue) {
String value = params.get(key);
if (value == null) {
return value;
}
return defaultValue;
}
}