@@ -160,80 +160,87 @@ ClusterState executeRefreshOrUpdate(final ClusterState currentState) throws Exce
160
160
161
161
if (task instanceof RefreshTask ) {
162
162
RefreshTask refreshTask = (RefreshTask ) task ;
163
- IndexService indexService = indicesService .indexService (index );
164
- if (indexService == null ) {
165
- // we need to create the index here, and add the current mapping to it, so we can merge
166
- indexService = indicesService .createIndex (indexMetaData .index (), indexMetaData .settings (), currentState .nodes ().localNode ().id ());
167
- removeIndex = true ;
163
+ try {
164
+ IndexService indexService = indicesService .indexService (index );
165
+ if (indexService == null ) {
166
+ // we need to create the index here, and add the current mapping to it, so we can merge
167
+ indexService = indicesService .createIndex (indexMetaData .index (), indexMetaData .settings (), currentState .nodes ().localNode ().id ());
168
+ removeIndex = true ;
169
+ for (String type : refreshTask .types ) {
170
+ // only add the current relevant mapping (if exists)
171
+ if (indexMetaData .mappings ().containsKey (type )) {
172
+ // don't apply the default mapping, it has been applied when the mapping was created
173
+ indexService .mapperService ().merge (type , indexMetaData .mappings ().get (type ).source (), false );
174
+ }
175
+ }
176
+ }
177
+ IndexMetaData .Builder indexMetaDataBuilder = IndexMetaData .builder (indexMetaData );
178
+ List <String > updatedTypes = Lists .newArrayList ();
168
179
for (String type : refreshTask .types ) {
169
- // only add the current relevant mapping (if exists)
170
- if (indexMetaData .mappings ().containsKey (type )) {
171
- // don't apply the default mapping, it has been applied when the mapping was created
172
- indexService .mapperService ().merge (type , indexMetaData .mappings ().get (type ).source (), false );
180
+ if (processedRefreshes .contains (type )) {
181
+ continue ;
173
182
}
183
+ DocumentMapper mapper = indexService .mapperService ().documentMapper (type );
184
+ if (!mapper .mappingSource ().equals (indexMetaData .mappings ().get (type ).source ())) {
185
+ updatedTypes .add (type );
186
+ indexMetaDataBuilder .putMapping (new MappingMetaData (mapper ));
187
+ }
188
+ processedRefreshes .add (type );
174
189
}
175
- }
176
- IndexMetaData .Builder indexMetaDataBuilder = IndexMetaData .builder (indexMetaData );
177
- List <String > updatedTypes = Lists .newArrayList ();
178
- for (String type : refreshTask .types ) {
179
- if (processedRefreshes .contains (type )) {
190
+
191
+ if (updatedTypes .isEmpty ()) {
180
192
continue ;
181
193
}
182
- DocumentMapper mapper = indexService .mapperService ().documentMapper (type );
183
- if (!mapper .mappingSource ().equals (indexMetaData .mappings ().get (type ).source ())) {
184
- updatedTypes .add (type );
185
- indexMetaDataBuilder .putMapping (new MappingMetaData (mapper ));
186
- }
187
- processedRefreshes .add (type );
188
- }
189
194
190
- if (updatedTypes .isEmpty ()) {
191
- continue ;
195
+ logger .warn ("[{}] re-syncing mappings with cluster state for types [{}]" , index , updatedTypes );
196
+ mdBuilder .put (indexMetaDataBuilder );
197
+ dirty = true ;
198
+ } catch (Throwable t ) {
199
+ logger .warn ("[{}] failed to refresh-mapping in cluster state, types [{}]" , index , refreshTask .types );
192
200
}
193
-
194
- logger .warn ("[{}] re-syncing mappings with cluster state for types [{}]" , index , updatedTypes );
195
- mdBuilder .put (indexMetaDataBuilder );
196
- dirty = true ;
197
-
198
201
} else if (task instanceof UpdateTask ) {
199
202
UpdateTask updateTask = (UpdateTask ) task ;
200
- String type = updateTask .type ;
201
- CompressedString mappingSource = updateTask .mappingSource ;
203
+ try {
204
+ String type = updateTask .type ;
205
+ CompressedString mappingSource = updateTask .mappingSource ;
202
206
203
- if (indexMetaData .mappings ().containsKey (type ) && indexMetaData .mapping (type ).source ().equals (mappingSource )) {
204
- logger .debug ("[{}] update_mapping [{}] ignoring mapping update task as its source is equal to ours" , index , updateTask .type );
205
- continue ;
206
- }
207
+ if (indexMetaData .mappings ().containsKey (type ) && indexMetaData .mapping (type ).source ().equals (mappingSource )) {
208
+ logger .debug ("[{}] update_mapping [{}] ignoring mapping update task as its source is equal to ours" , index , updateTask .type );
209
+ continue ;
210
+ }
207
211
208
- IndexService indexService = indicesService .indexService (index );
209
- if (indexService == null ) {
210
- // we need to create the index here, and add the current mapping to it, so we can merge
211
- indexService = indicesService .createIndex (indexMetaData .index (), indexMetaData .settings (), currentState .nodes ().localNode ().id ());
212
- removeIndex = true ;
213
- // only add the current relevant mapping (if exists)
214
- if (indexMetaData .mappings ().containsKey (type )) {
215
- indexService .mapperService ().merge (type , indexMetaData .mappings ().get (type ).source (), false );
212
+ IndexService indexService = indicesService .indexService (index );
213
+ if (indexService == null ) {
214
+ // we need to create the index here, and add the current mapping to it, so we can merge
215
+ indexService = indicesService .createIndex (indexMetaData .index (), indexMetaData .settings (), currentState .nodes ().localNode ().id ());
216
+ removeIndex = true ;
217
+ // only add the current relevant mapping (if exists)
218
+ if (indexMetaData .mappings ().containsKey (type )) {
219
+ indexService .mapperService ().merge (type , indexMetaData .mappings ().get (type ).source (), false );
220
+ }
216
221
}
217
- }
218
222
219
- DocumentMapper updatedMapper = indexService .mapperService ().merge (type , mappingSource , false );
220
- processedRefreshes .add (type );
223
+ DocumentMapper updatedMapper = indexService .mapperService ().merge (type , mappingSource , false );
224
+ processedRefreshes .add (type );
225
+
226
+ // if we end up with the same mapping as the original once, ignore
227
+ if (indexMetaData .mappings ().containsKey (type ) && indexMetaData .mapping (type ).source ().equals (updatedMapper .mappingSource ())) {
228
+ logger .debug ("[{}] update_mapping [{}] ignoring mapping update task as it results in the same source as what we have" , index , updateTask .type );
229
+ continue ;
230
+ }
221
231
222
- // if we end up with the same mapping as the original once, ignore
223
- if (indexMetaData .mappings ().containsKey (type ) && indexMetaData .mapping (type ).source ().equals (updatedMapper .mappingSource ())) {
224
- logger .debug ("[{}] update_mapping [{}] ignoring mapping update task as it results in the same source as what we have" , index , updateTask .type );
225
- continue ;
226
- }
232
+ // build the updated mapping source
233
+ if (logger .isDebugEnabled ()) {
234
+ logger .debug ("[{}] update_mapping [{}] (dynamic) with source [{}]" , index , type , updatedMapper .mappingSource ());
235
+ } else if (logger .isInfoEnabled ()) {
236
+ logger .info ("[{}] update_mapping [{}] (dynamic)" , index , type );
237
+ }
227
238
228
- // build the updated mapping source
229
- if (logger .isDebugEnabled ()) {
230
- logger .debug ("[{}] update_mapping [{}] (dynamic) with source [{}]" , index , type , updatedMapper .mappingSource ());
231
- } else if (logger .isInfoEnabled ()) {
232
- logger .info ("[{}] update_mapping [{}] (dynamic)" , index , type );
239
+ mdBuilder .put (IndexMetaData .builder (indexMetaData ).putMapping (new MappingMetaData (updatedMapper )));
240
+ dirty = true ;
241
+ } catch (Throwable t ) {
242
+ logger .warn ("[{}] failed to update-mapping in cluster state, type [{}]" , index , updateTask .type );
233
243
}
234
-
235
- mdBuilder .put (IndexMetaData .builder (indexMetaData ).putMapping (new MappingMetaData (updatedMapper )));
236
- dirty = true ;
237
244
} else {
238
245
logger .warn ("illegal state, got wrong mapping task type [{}]" , task );
239
246
}
0 commit comments