@Override protected ClusterBlockException checkBlock(DeleteWarmerRequest request, ClusterState state) { return state .blocks() .indicesBlockedException( ClusterBlockLevel.METADATA, clusterService .state() .metaData() .concreteIndices(request.indicesOptions(), request.indices())); }
@Override protected void masterOperation( final DeleteWarmerRequest request, final ClusterState state, final ActionListener<DeleteWarmerResponse> listener) throws ElasticsearchException { final String[] concreteIndices = clusterService .state() .metaData() .concreteIndices(request.indicesOptions(), request.indices()); clusterService.submitStateUpdateTask( "delete_warmer [" + Arrays.toString(request.names()) + "]", new AckedClusterStateUpdateTask<DeleteWarmerResponse>(request, listener) { @Override protected DeleteWarmerResponse newResponse(boolean acknowledged) { return new DeleteWarmerResponse(acknowledged); } @Override public void onFailure(String source, Throwable t) { logger.debug( "failed to delete warmer [{}] on indices [{}]", t, Arrays.toString(request.names()), concreteIndices); super.onFailure(source, t); } @Override public ClusterState execute(ClusterState currentState) { MetaData.Builder mdBuilder = MetaData.builder(currentState.metaData()); boolean globalFoundAtLeastOne = false; for (String index : concreteIndices) { IndexMetaData indexMetaData = currentState.metaData().index(index); if (indexMetaData == null) { throw new IndexMissingException(new Index(index)); } IndexWarmersMetaData warmers = indexMetaData.custom(IndexWarmersMetaData.TYPE); if (warmers != null) { List<IndexWarmersMetaData.Entry> entries = Lists.newArrayList(); for (IndexWarmersMetaData.Entry entry : warmers.entries()) { boolean keepWarmer = true; for (String warmer : request.names()) { if (Regex.simpleMatch(warmer, entry.name()) || warmer.equals("_all")) { globalFoundAtLeastOne = true; keepWarmer = false; // don't add it... break; } } if (keepWarmer) { entries.add(entry); } } // a change, update it... if (entries.size() != warmers.entries().size()) { warmers = new IndexWarmersMetaData( entries.toArray(new IndexWarmersMetaData.Entry[entries.size()])); IndexMetaData.Builder indexBuilder = IndexMetaData.builder(indexMetaData) .putCustom(IndexWarmersMetaData.TYPE, warmers); mdBuilder.put(indexBuilder); } } } if (!globalFoundAtLeastOne) { throw new IndexWarmerMissingException(request.names()); } if (logger.isInfoEnabled()) { for (String index : concreteIndices) { IndexMetaData indexMetaData = currentState.metaData().index(index); if (indexMetaData == null) { throw new IndexMissingException(new Index(index)); } IndexWarmersMetaData warmers = indexMetaData.custom(IndexWarmersMetaData.TYPE); if (warmers != null) { for (IndexWarmersMetaData.Entry entry : warmers.entries()) { for (String warmer : request.names()) { if (Regex.simpleMatch(warmer, entry.name()) || warmer.equals("_all")) { logger.info("[{}] delete warmer [{}]", index, entry.name()); } } } } } } return ClusterState.builder(currentState).metaData(mdBuilder).build(); } }); }