org.elasticsearch.ingest.IngestMetadata Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* Licensed to Elasticsearch under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.elasticsearch.ingest;
import org.elasticsearch.cluster.Diff;
import org.elasticsearch.cluster.DiffableUtils;
import org.elasticsearch.cluster.metadata.MetaData;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.ParseFieldMatcher;
import org.elasticsearch.common.ParseFieldMatcherSupplier;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.xcontent.ObjectParser;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentParser;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Holds the ingest pipelines that are available in the cluster
*/
public final class IngestMetadata implements MetaData.Custom {
public static final String TYPE = "ingest";
public static final IngestMetadata PROTO = new IngestMetadata();
private static final ParseField PIPELINES_FIELD = new ParseField("pipeline");
private static final ObjectParser, ParseFieldMatcherSupplier> INGEST_METADATA_PARSER = new ObjectParser<>(
"ingest_metadata", ArrayList::new);
static {
INGEST_METADATA_PARSER.declareObjectArray(List::addAll , PipelineConfiguration.getParser(), PIPELINES_FIELD);
}
// We can't use Pipeline class directly in cluster state, because we don't have the processor factories around when
// IngestMetadata is registered as custom metadata.
private final Map pipelines;
private IngestMetadata() {
this.pipelines = Collections.emptyMap();
}
public IngestMetadata(Map pipelines) {
this.pipelines = Collections.unmodifiableMap(pipelines);
}
@Override
public String type() {
return TYPE;
}
public Map getPipelines() {
return pipelines;
}
@Override
public IngestMetadata readFrom(StreamInput in) throws IOException {
int size = in.readVInt();
Map pipelines = new HashMap<>(size);
for (int i = 0; i < size; i++) {
PipelineConfiguration pipeline = PipelineConfiguration.readPipelineConfiguration(in);
pipelines.put(pipeline.getId(), pipeline);
}
return new IngestMetadata(pipelines);
}
@Override
public void writeTo(StreamOutput out) throws IOException {
out.writeVInt(pipelines.size());
for (PipelineConfiguration pipeline : pipelines.values()) {
pipeline.writeTo(out);
}
}
@Override
public IngestMetadata fromXContent(XContentParser parser) throws IOException {
Map pipelines = new HashMap<>();
List configs = INGEST_METADATA_PARSER.parse(parser, () -> ParseFieldMatcher.STRICT);
for (PipelineConfiguration pipeline : configs) {
pipelines.put(pipeline.getId(), pipeline);
}
return new IngestMetadata(pipelines);
}
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startArray(PIPELINES_FIELD.getPreferredName());
for (PipelineConfiguration pipeline : pipelines.values()) {
pipeline.toXContent(builder, params);
}
builder.endArray();
return builder;
}
@Override
public EnumSet context() {
return MetaData.ALL_CONTEXTS;
}
@Override
public Diff diff(MetaData.Custom before) {
return new IngestMetadataDiff((IngestMetadata) before, this);
}
@Override
public Diff readDiffFrom(StreamInput in) throws IOException {
return new IngestMetadataDiff(in);
}
static class IngestMetadataDiff implements Diff {
final Diff