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

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

There is a newer version: 2.18.0
Show newest version
/*
 * SPDX-License-Identifier: Apache-2.0
 *
 * The OpenSearch Contributors require contributions made to
 * this file be licensed under the Apache-2.0 license or a
 * compatible open source license.
 */

/*
 * 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.
 */

/*
 * Modifications Copyright OpenSearch Contributors. See
 * GitHub history for details.
 */

package org.opensearch.action.delete;

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

import java.io.IOException;

import static org.opensearch.action.ValidateActions.addValidationError;
import static org.opensearch.index.seqno.SequenceNumbers.UNASSIGNED_PRIMARY_TERM;
import static org.opensearch.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.opensearch.client.Requests#deleteRequest(String)}.
 * 

* The operation requires the {@link #index()}, and {@link #id(String)} to * be set. * * @see DeleteResponse * @see org.opensearch.client.Client#delete(DeleteRequest) * @see org.opensearch.client.Requests#deleteRequest(String) * * @opensearch.internal */ 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_2_0_0)) { String type = in.readString(); assert MapperService.SINGLE_MAPPING_NAME.equals(type) : "Expected [_doc] but received [" + type + "]"; } id = in.readString(); routing = in.readOptionalString(); if (in.getVersion().before(LegacyESVersion.V_7_0_0)) { in.readOptionalString(); // _parent } 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.opensearch.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.opensearch.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.opensearch.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.opensearch.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 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_2_0_0)) { out.writeString(MapperService.SINGLE_MAPPING_NAME); } out.writeString(id); out.writeOptionalString(routing()); if (out.getVersion().before(LegacyESVersion.V_7_0_0)) { out.writeOptionalString(null); // _parent } 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