@@ -160,80 +160,87 @@ ClusterState executeRefreshOrUpdate(final ClusterState currentState) throws Exce
160160
161161 if (task instanceof RefreshTask ) {
162162 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 ();
168179 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 ;
173182 }
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 );
174189 }
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 ()) {
180192 continue ;
181193 }
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- }
189194
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 );
192200 }
193-
194- logger .warn ("[{}] re-syncing mappings with cluster state for types [{}]" , index , updatedTypes );
195- mdBuilder .put (indexMetaDataBuilder );
196- dirty = true ;
197-
198201 } else if (task instanceof UpdateTask ) {
199202 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 ;
202206
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+ }
207211
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+ }
216221 }
217- }
218222
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+ }
221231
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+ }
227238
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 );
233243 }
234-
235- mdBuilder .put (IndexMetaData .builder (indexMetaData ).putMapping (new MappingMetaData (updatedMapper )));
236- dirty = true ;
237244 } else {
238245 logger .warn ("illegal state, got wrong mapping task type [{}]" , task );
239246 }
0 commit comments