Skip to content

Commit 70f212a

Browse files
committed
more improvements for handling of large / many mappings by batching the removal of mappings
1 parent 5715588 commit 70f212a

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

src/main/java/org/elasticsearch/index/mapper/MapperService.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -302,49 +302,59 @@ public void remove(String type) {
302302

303303
private void removeObjectAndFieldMappers(DocumentMapper docMapper) {
304304
// we need to remove those mappers
305+
MapBuilder<String, FieldMappers> nameFieldMappers = newMapBuilder(this.nameFieldMappers);
306+
MapBuilder<String, FieldMappers> indexNameFieldMappers = newMapBuilder(this.indexNameFieldMappers);
307+
MapBuilder<String, FieldMappers> fullNameFieldMappers = newMapBuilder(this.fullNameFieldMappers);
308+
305309
for (FieldMapper mapper : docMapper.mappers()) {
306310
FieldMappers mappers = nameFieldMappers.get(mapper.names().name());
307311
if (mappers != null) {
308312
mappers = mappers.remove(mapper);
309313
if (mappers.isEmpty()) {
310-
nameFieldMappers = newMapBuilder(nameFieldMappers).remove(mapper.names().name()).map();
314+
nameFieldMappers.remove(mapper.names().name());
311315
} else {
312-
nameFieldMappers = newMapBuilder(nameFieldMappers).put(mapper.names().name(), mappers).map();
316+
nameFieldMappers.put(mapper.names().name(), mappers);
313317
}
314318
}
315319

316320
mappers = indexNameFieldMappers.get(mapper.names().indexName());
317321
if (mappers != null) {
318322
mappers = mappers.remove(mapper);
319323
if (mappers.isEmpty()) {
320-
indexNameFieldMappers = newMapBuilder(indexNameFieldMappers).remove(mapper.names().indexName()).map();
324+
indexNameFieldMappers.remove(mapper.names().indexName());
321325
} else {
322-
indexNameFieldMappers = newMapBuilder(indexNameFieldMappers).put(mapper.names().indexName(), mappers).map();
326+
indexNameFieldMappers.put(mapper.names().indexName(), mappers);
323327
}
324328
}
325329

326330
mappers = fullNameFieldMappers.get(mapper.names().fullName());
327331
if (mappers != null) {
328332
mappers = mappers.remove(mapper);
329333
if (mappers.isEmpty()) {
330-
fullNameFieldMappers = newMapBuilder(fullNameFieldMappers).remove(mapper.names().fullName()).map();
334+
fullNameFieldMappers.remove(mapper.names().fullName());
331335
} else {
332-
fullNameFieldMappers = newMapBuilder(fullNameFieldMappers).put(mapper.names().fullName(), mappers).map();
336+
fullNameFieldMappers.put(mapper.names().fullName(), mappers);
333337
}
334338
}
335339
}
340+
this.nameFieldMappers = nameFieldMappers.map();
341+
this.indexNameFieldMappers = indexNameFieldMappers.map();
342+
this.fullNameFieldMappers = fullNameFieldMappers.map();
336343

344+
MapBuilder<String, ObjectMappers> fullPathObjectMappers = newMapBuilder(this.fullPathObjectMappers);
337345
for (ObjectMapper mapper : docMapper.objectMappers().values()) {
338346
ObjectMappers mappers = fullPathObjectMappers.get(mapper.fullPath());
339347
if (mappers != null) {
340348
mappers = mappers.remove(mapper);
341349
if (mappers.isEmpty()) {
342-
fullPathObjectMappers = newMapBuilder(fullPathObjectMappers).remove(mapper.fullPath()).map();
350+
fullPathObjectMappers.remove(mapper.fullPath());
343351
} else {
344-
fullPathObjectMappers = newMapBuilder(fullPathObjectMappers).put(mapper.fullPath(), mappers).map();
352+
fullPathObjectMappers.put(mapper.fullPath(), mappers);
345353
}
346354
}
347355
}
356+
357+
this.fullPathObjectMappers = fullPathObjectMappers.map();
348358
}
349359

350360
/**

0 commit comments

Comments
 (0)