All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.elasticsearch.action.delete.DeleteRequest Maven / Gradle / Ivy

There is a newer version: 8.13.4
Show newest version
/*
 * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
 * or more contributor license agreements. Licensed under the Elastic License
 * 2.0 and the Server Side Public License, v 1; you may not use this file except
 * in compliance with, at your election, the Elastic License 2.0 or the Server
 * Side Public License, v 1.
 */

package org.elasticsearch.action.delete;

import org.apache.lucene.util.RamUsageEstimator;
import org.elasticsearch.Version;
import org.elasticsearch.action.ActionRequestValidationException;
import org.elasticsearch.action.CompositeIndicesRequest;
import org.elasticsearch.action.DocWriteRequest;
import org.elasticsearch.action.support.replication.ReplicatedWriteRequest;
import org.elasticsearch.cluster.routing.IndexRouting;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.lucene.uid.Versions;
import org.elasticsearch.core.Nullable;
import org.elasticsearch.index.VersionType;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.shard.ShardId;

import java.io.IOException;

import static org.elasticsearch.action.ValidateActions.addValidationError;
import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_PRIMARY_TERM;
import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO;

/**
 * A request to delete a document from an index based on its type and id. Best created using
 * {@link org.elasticsearch.client.internal.Requests#deleteRequest(String)}.
 * 

* The operation requires the {@link #index()} and {@link #id(String)} to * be set. * * @see DeleteResponse * @see org.elasticsearch.client.internal.Client#delete(DeleteRequest) * @see org.elasticsearch.client.internal.Requests#deleteRequest(String) */ public class DeleteRequest extends ReplicatedWriteRequest implements DocWriteRequest, CompositeIndicesRequest { private static final long SHALLOW_SIZE = RamUsageEstimator.shallowSizeOfInstance(DeleteRequest.class); private static final ShardId NO_SHARD_ID = null; private String id; @Nullable private String routing; private long version = Versions.MATCH_ANY; private VersionType versionType = VersionType.INTERNAL; private long ifSeqNo = UNASSIGNED_SEQ_NO; private long ifPrimaryTerm = UNASSIGNED_PRIMARY_TERM; public DeleteRequest(StreamInput in) throws IOException { this(null, in); } public DeleteRequest(@Nullable ShardId shardId, StreamInput in) throws IOException { super(shardId, in); if (in.getVersion().before(Version.V_8_0_0)) { String type = in.readString(); assert MapperService.SINGLE_MAPPING_NAME.equals(type) : "Expected [_doc] but received [" + type + "]"; } id = in.readString(); routing = in.readOptionalString(); version = in.readLong(); versionType = VersionType.fromValue(in.readByte()); ifSeqNo = in.readZLong(); ifPrimaryTerm = in.readVLong(); } public DeleteRequest() { super(NO_SHARD_ID); } /** * Constructs a new delete request against the specified index. The {@link #id(String)} * must be set. */ public DeleteRequest(String index) { super(NO_SHARD_ID); this.index = index; } /** * Constructs a new delete request against the specified index and id. * * @param index The index to get the document from * @param id The id of the document */ public DeleteRequest(String index, String id) { super(NO_SHARD_ID); this.index = index; this.id = id; } @Override public ActionRequestValidationException validate() { ActionRequestValidationException validationException = super.validate(); if (Strings.isEmpty(id)) { validationException = addValidationError("id is missing", validationException); } validationException = DocWriteRequest.validateSeqNoBasedCASParams(this, validationException); return validationException; } /** * The id of the document to delete. */ @Override public String id() { return id; } /** * Sets the id of the document to delete. */ public DeleteRequest id(String id) { this.id = id; return this; } /** * Controls the shard routing of the request. Using this value to hash the shard * and not the id. */ @Override public DeleteRequest routing(String routing) { if (routing != null && routing.length() == 0) { this.routing = null; } else { this.routing = routing; } return this; } /** * Controls the shard routing of the delete request. Using this value to hash the shard * and not the id. */ @Override public String routing() { return this.routing; } @Override public DeleteRequest version(long version) { this.version = version; return this; } @Override public long version() { return this.version; } @Override public DeleteRequest versionType(VersionType versionType) { this.versionType = versionType; return this; } /** * If set, only perform this delete request if the document was last modification was assigned this sequence number. * If the document last modification was assigned a different sequence number a * {@link org.elasticsearch.index.engine.VersionConflictEngineException} will be thrown. */ public long ifSeqNo() { return ifSeqNo; } /** * If set, only perform this delete request if the document was last modification was assigned this primary term. * * If the document last modification was assigned a different term a * {@link org.elasticsearch.index.engine.VersionConflictEngineException} will be thrown. */ public long ifPrimaryTerm() { return ifPrimaryTerm; } /** * only perform this delete request if the document was last modification was assigned the given * sequence number. Must be used in combination with {@link #setIfPrimaryTerm(long)} * * If the document last modification was assigned a different sequence number a * {@link org.elasticsearch.index.engine.VersionConflictEngineException} will be thrown. */ public DeleteRequest setIfSeqNo(long seqNo) { if (seqNo < 0 && seqNo != UNASSIGNED_SEQ_NO) { throw new IllegalArgumentException("sequence numbers must be non negative. got [" + seqNo + "]."); } ifSeqNo = seqNo; return this; } /** * only perform this delete request if the document was last modification was assigned the given * primary term. Must be used in combination with {@link #setIfSeqNo(long)} * * If the document last modification was assigned a different primary term a * {@link org.elasticsearch.index.engine.VersionConflictEngineException} will be thrown. */ public DeleteRequest setIfPrimaryTerm(long term) { if (term < 0) { throw new IllegalArgumentException("primary term must be non negative. got [" + term + "]"); } ifPrimaryTerm = term; return this; } @Override public VersionType versionType() { return this.versionType; } @Override public OpType opType() { return OpType.DELETE; } @Override public boolean isRequireAlias() { return false; } @Override public void process(IndexRouting indexRouting) { // Nothing to do } @Override public int route(IndexRouting indexRouting) { return indexRouting.deleteShard(id, routing); } @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); writeBody(out); } @Override public void writeThin(StreamOutput out) throws IOException { super.writeThin(out); writeBody(out); } private void writeBody(StreamOutput out) throws IOException { if (out.getVersion().before(Version.V_8_0_0)) { out.writeString(MapperService.SINGLE_MAPPING_NAME); } out.writeString(id); out.writeOptionalString(routing()); out.writeLong(version); out.writeByte(versionType.getValue()); out.writeZLong(ifSeqNo); out.writeVLong(ifPrimaryTerm); } @Override public String toString() { return "delete {[" + index + "][" + id + "]}"; } @Override public long ramBytesUsed() { return SHALLOW_SIZE + RamUsageEstimator.sizeOf(id); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy