Excessive mapping parsing when cluster state changes, closes #575.

This commit is contained in:
kimchy 2010-12-23 09:53:05 +02:00
parent 9361e3bd2b
commit 5ac42f2a4f
2 changed files with 12 additions and 8 deletions

View File

@ -34,6 +34,7 @@ import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeMap;
import static org.elasticsearch.common.collect.ImmutableMap.*; import static org.elasticsearch.common.collect.ImmutableMap.*;
import static org.elasticsearch.common.collect.Lists.*; import static org.elasticsearch.common.collect.Lists.*;
@ -575,8 +576,11 @@ public class ObjectMapper implements XContentMapper, IncludeInAllMapper {
doXContent(builder, params); doXContent(builder, params);
// sort the mappers so we get consistent serialization format
TreeMap<String, XContentMapper> sortedMappers = new TreeMap<String, XContentMapper>(mappers);
// check internal mappers first (this is only relevant for root object) // check internal mappers first (this is only relevant for root object)
for (XContentMapper mapper : mappers.values()) { for (XContentMapper mapper : sortedMappers.values()) {
if (mapper instanceof InternalMapper) { if (mapper instanceof InternalMapper) {
mapper.toXContent(builder, params); mapper.toXContent(builder, params);
} }
@ -589,7 +593,7 @@ public class ObjectMapper implements XContentMapper, IncludeInAllMapper {
if (!mappers.isEmpty()) { if (!mappers.isEmpty()) {
builder.startObject("properties"); builder.startObject("properties");
for (XContentMapper mapper : mappers.values()) { for (XContentMapper mapper : sortedMappers.values()) {
if (!(mapper instanceof InternalMapper)) { if (!(mapper instanceof InternalMapper)) {
mapper.toXContent(builder, params); mapper.toXContent(builder, params);
} }

View File

@ -276,9 +276,9 @@ public class IndicesClusterStateService extends AbstractLifecycleComponent<Indic
logger.debug("[{}] adding mapping [{}], source [{}]", index, mappingType, mappingSource.string()); logger.debug("[{}] adding mapping [{}], source [{}]", index, mappingType, mappingSource.string());
} }
mapperService.add(mappingType, mappingSource.string()); mapperService.add(mappingType, mappingSource.string());
// if (!mapperService.documentMapper(mappingType).mappingSource().equals(mappingSource)) { if (!mapperService.documentMapper(mappingType).mappingSource().equals(mappingSource)) {
// logger.warn("[{}] parsed mapping [{}], and got different sources\noriginal:\n{}\nparsed:\n{}", mappingType, mappingSource, mapperService.documentMapper(mappingType).mappingSource()); logger.warn("[{}] parsed mapping [{}], and got different sources\noriginal:\n{}\nparsed:\n{}", index, mappingType, mappingSource, mapperService.documentMapper(mappingType).mappingSource());
// } }
nodeMappingCreatedAction.nodeMappingCreated(new NodeMappingCreatedAction.NodeMappingCreatedResponse(index, mappingType, event.state().nodes().localNodeId())); nodeMappingCreatedAction.nodeMappingCreated(new NodeMappingCreatedAction.NodeMappingCreatedResponse(index, mappingType, event.state().nodes().localNodeId()));
} else { } else {
DocumentMapper existingMapper = mapperService.documentMapper(mappingType); DocumentMapper existingMapper = mapperService.documentMapper(mappingType);
@ -288,9 +288,9 @@ public class IndicesClusterStateService extends AbstractLifecycleComponent<Indic
logger.debug("[{}] updating mapping [{}], source [{}]", index, mappingType, mappingSource.string()); logger.debug("[{}] updating mapping [{}], source [{}]", index, mappingType, mappingSource.string());
} }
mapperService.add(mappingType, mappingSource.string()); mapperService.add(mappingType, mappingSource.string());
// if (!mapperService.documentMapper(mappingType).mappingSource().equals(mappingSource)) { if (!mapperService.documentMapper(mappingType).mappingSource().equals(mappingSource)) {
// logger.warn("[{}] parsed mapping [{}], and got different sources\noriginal:\n{}\nparsed:\n{}", mappingType, mappingSource, mapperService.documentMapper(mappingType).mappingSource()); logger.warn("[{}] parsed mapping [{}], and got different sources\noriginal:\n{}\nparsed:\n{}", index, mappingType, mappingSource, mapperService.documentMapper(mappingType).mappingSource());
// } }
nodeMappingCreatedAction.nodeMappingCreated(new NodeMappingCreatedAction.NodeMappingCreatedResponse(index, mappingType, event.state().nodes().localNodeId())); nodeMappingCreatedAction.nodeMappingCreated(new NodeMappingCreatedAction.NodeMappingCreatedResponse(index, mappingType, event.state().nodes().localNodeId()));
} }
} }