/** * The collection of index deletions in the cluster. */ public IndexGraveyard indexGraveyard() { return custom(IndexGraveyard.TYPE); }
Map<String, StoredScriptSource> getScriptsFromClusterState() { if (clusterState == null) { return Collections.emptyMap(); } ScriptMetaData scriptMetadata = clusterState.metaData().custom(ScriptMetaData.TYPE); if (scriptMetadata == null) { return Collections.emptyMap(); } return scriptMetadata.getStoredScripts(); }
/** Returns true if the persistent tasks are not equal between the previous and the current cluster state **/ static boolean persistentTasksChanged(final ClusterChangedEvent event) { String type = PersistentTasksCustomMetaData.TYPE; return Objects.equals(event.state().metaData().custom(type), event.previousState().metaData().custom(type)) == false; }
/** * @return pipeline configuration specified by id. If multiple ids or wildcards are specified multiple pipelines * may be returned */ // Returning PipelineConfiguration instead of Pipeline, because Pipeline and Processor interface don't // know how to serialize themselves. public static List<PipelineConfiguration> getPipelines(ClusterState clusterState, String... ids) { IngestMetadata ingestMetadata = clusterState.getMetaData().custom(IngestMetadata.TYPE); return innerGetPipelines(ingestMetadata, ids); }
@Override public void clusterStateProcessed(String source, ClusterState oldState, ClusterState newState) { if (isAnyTaskUnassigned(newState.getMetaData().custom(PersistentTasksCustomMetaData.TYPE))) { periodicRechecker.rescheduleIfNecessary(); } } });
@SuppressWarnings("unchecked") public static <Params extends PersistentTaskParams> PersistentTask<Params> getTaskWithId(ClusterState clusterState, String taskId) { PersistentTasksCustomMetaData tasks = clusterState.metaData().custom(PersistentTasksCustomMetaData.TYPE); if (tasks != null) { return (PersistentTask<Params>) tasks.getTask(taskId); } return null; }
private static PersistentTasksCustomMetaData.Builder builder(ClusterState currentState) { return PersistentTasksCustomMetaData.builder(currentState.getMetaData().custom(PersistentTasksCustomMetaData.TYPE)); }
public StoredScriptSource getStoredScript(ClusterState state, GetStoredScriptRequest request) { ScriptMetaData scriptMetadata = state.metaData().custom(ScriptMetaData.TYPE); if (scriptMetadata != null) { return scriptMetadata.getStoredScript(request.id()); } else { return null; } }
@Override public void runInternal() { if (clusterService.localNode().isMasterNode()) { final ClusterState state = clusterService.state(); logger.trace("periodic persistent task assignment check running for cluster state {}", state.getVersion()); if (isAnyTaskUnassigned(state.getMetaData().custom(PersistentTasksCustomMetaData.TYPE))) { reassignPersistentTasks(); } } }
StoredScriptSource getScriptFromClusterState(String id) { ScriptMetaData scriptMetadata = clusterState.metaData().custom(ScriptMetaData.TYPE); if (scriptMetadata == null) { throw new ResourceNotFoundException("unable to find script [" + id + "] in cluster state"); } StoredScriptSource source = scriptMetadata.getStoredScript(id); if (source == null) { throw new ResourceNotFoundException("unable to find script [" + id + "] in cluster state"); } return source; }
/** * Finds the least loaded node that satisfies the selector criteria */ protected DiscoveryNode selectLeastLoadedNode(ClusterState clusterState, Predicate<DiscoveryNode> selector) { long minLoad = Long.MAX_VALUE; DiscoveryNode minLoadedNode = null; PersistentTasksCustomMetaData persistentTasks = clusterState.getMetaData().custom(PersistentTasksCustomMetaData.TYPE); for (DiscoveryNode node : clusterState.getNodes()) { if (selector.test(node)) { if (persistentTasks == null) { // We don't have any task running yet, pick the first available node return node; } long numberOfTasks = persistentTasks.getNumberOfTasksOnNode(node.getId(), taskName); if (minLoad > numberOfTasks) { minLoad = numberOfTasks; minLoadedNode = node; } } } return minLoadedNode; }
public static boolean isGlobalStateEquals(MetaData metaData1, MetaData metaData2) { if (!metaData1.persistentSettings.equals(metaData2.persistentSettings)) { return false; } if (!metaData1.templates.equals(metaData2.templates())) { return false; } // Check if any persistent metadata needs to be saved int customCount1 = 0; for (ObjectObjectCursor<String, Custom> cursor : metaData1.customs) { if (cursor.value.context().contains(XContentContext.GATEWAY)) { if (!cursor.value.equals(metaData2.custom(cursor.key))) return false; customCount1++; } } int customCount2 = 0; for (ObjectCursor<Custom> cursor : metaData2.customs.values()) { if (cursor.value.context().contains(XContentContext.GATEWAY)) { customCount2++; } } if (customCount1 != customCount2) return false; return true; }
/** * Validates snapshot request * * @param request snapshot request * @param state current cluster state */ private void validate(SnapshotRequest request, ClusterState state) { RepositoriesMetaData repositoriesMetaData = state.getMetaData().custom(RepositoriesMetaData.TYPE); final String repository = request.repositoryName; if (repositoriesMetaData == null || repositoriesMetaData.repository(repository) == null) { throw new RepositoryMissingException(repository); } validate(repository, request.snapshotName); }
private void innerUpdatePipelines(ClusterState previousState, ClusterState state) { if (state.blocks().hasGlobalBlock(GatewayService.STATE_NOT_RECOVERED_BLOCK)) { return; } IngestMetadata ingestMetadata = state.getMetaData().custom(IngestMetadata.TYPE); IngestMetadata previousIngestMetadata = previousState.getMetaData().custom(IngestMetadata.TYPE); if (Objects.equals(ingestMetadata, previousIngestMetadata)) { return; } Map<String, Pipeline> pipelines = new HashMap<>(); List<ElasticsearchParseException> exceptions = new ArrayList<>(); for (PipelineConfiguration pipeline : ingestMetadata.getPipelines().values()) { try { pipelines.put( pipeline.getId(), Pipeline.create(pipeline.getId(), pipeline.getConfigAsMap(), processorFactories, scriptService) ); } catch (ElasticsearchParseException e) { pipelines.put(pipeline.getId(), substitutePipeline(pipeline.getId(), e)); exceptions.add(e); } catch (Exception e) { ElasticsearchParseException parseException = new ElasticsearchParseException( "Error updating pipeline with id [" + pipeline.getId() + "]", e); pipelines.put(pipeline.getId(), substitutePipeline(pipeline.getId(), parseException)); exceptions.add(parseException); } } this.pipelines = Collections.unmodifiableMap(pipelines); ExceptionsHelper.rethrowAndSuppress(exceptions); }
static ClusterState innerDelete(DeletePipelineRequest request, ClusterState currentState) { IngestMetadata currentIngestMetadata = currentState.metaData().custom(IngestMetadata.TYPE); if (currentIngestMetadata == null) { return currentState; } Map<String, PipelineConfiguration> pipelines = currentIngestMetadata.getPipelines(); Set<String> toRemove = new HashSet<>(); for (String pipelineKey : pipelines.keySet()) { if (Regex.simpleMatch(request.getId(), pipelineKey)) { toRemove.add(pipelineKey); } } if (toRemove.isEmpty() && Regex.isMatchAllPattern(request.getId()) == false) { throw new ResourceNotFoundException("pipeline [{}] is missing", request.getId()); } else if (toRemove.isEmpty()) { return currentState; } final Map<String, PipelineConfiguration> pipelinesCopy = new HashMap<>(pipelines); for (String key : toRemove) { pipelinesCopy.remove(key); } ClusterState.Builder newState = ClusterState.builder(currentState); newState.metaData(MetaData.builder(currentState.getMetaData()) .putCustom(IngestMetadata.TYPE, new IngestMetadata(pipelinesCopy)) .build()); return newState.build(); }
static ClusterState innerPut(PutPipelineRequest request, ClusterState currentState) { IngestMetadata currentIngestMetadata = currentState.metaData().custom(IngestMetadata.TYPE); Map<String, PipelineConfiguration> pipelines; if (currentIngestMetadata != null) { pipelines = new HashMap<>(currentIngestMetadata.getPipelines()); } else { pipelines = new HashMap<>(); } pipelines.put(request.getId(), new PipelineConfiguration(request.getId(), request.getSource(), request.getXContentType())); ClusterState.Builder newState = ClusterState.builder(currentState); newState.metaData(MetaData.builder(currentState.getMetaData()) .putCustom(IngestMetadata.TYPE, new IngestMetadata(pipelines)) .build()); return newState.build(); }
@SuppressWarnings("unchecked") @Override public void clusterStateProcessed(String source, ClusterState oldState, ClusterState newState) { PersistentTasksCustomMetaData tasks = newState.getMetaData().custom(PersistentTasksCustomMetaData.TYPE); if (tasks != null) { PersistentTask<?> task = tasks.getTask(taskId); listener.onResponse(task); if (task != null && task.isAssigned() == false && periodicRechecker.isScheduled() == false) { periodicRechecker.rescheduleIfNecessary(); } } else { listener.onResponse(null); } } });
@Override public ClusterState execute(ClusterState currentState) throws Exception { ScriptMetaData smd = currentState.metaData().custom(ScriptMetaData.TYPE); smd = ScriptMetaData.putStoredScript(smd, request.id(), source); MetaData.Builder mdb = MetaData.builder(currentState.getMetaData()).putCustom(ScriptMetaData.TYPE, smd); return ClusterState.builder(currentState).metaData(mdb).build(); } });
@Override public ClusterState execute(ClusterState currentState) throws Exception { ScriptMetaData smd = currentState.metaData().custom(ScriptMetaData.TYPE); smd = ScriptMetaData.deleteStoredScript(smd, request.id()); MetaData.Builder mdb = MetaData.builder(currentState.getMetaData()).putCustom(ScriptMetaData.TYPE, smd); return ClusterState.builder(currentState).metaData(mdb).build(); } });
/** * Returns true if the cluster state change(s) require to reassign some persistent tasks. It can happen in the following * situations: a node left or is added, the routing table changed, the master node changed, the metadata changed or the * persistent tasks changed. */ boolean shouldReassignPersistentTasks(final ClusterChangedEvent event) { final PersistentTasksCustomMetaData tasks = event.state().getMetaData().custom(PersistentTasksCustomMetaData.TYPE); if (tasks == null) { return false; } boolean masterChanged = event.previousState().nodes().isLocalNodeElectedMaster() == false; if (persistentTasksChanged(event) || event.nodesChanged() || event.routingTableChanged() || event.metaDataChanged() || masterChanged) { for (PersistentTask<?> task : tasks.tasks()) { if (needsReassignment(task.getAssignment(), event.state().nodes())) { Assignment assignment = createAssignment(task.getTaskName(), task.getParams(), event.state()); if (Objects.equals(assignment, task.getAssignment()) == false) { return true; } } } } return false; }