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

org.elasticsearch.hadoop.rest.bulk.BulkResponse Maven / Gradle / Ivy

/*
 * 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.hadoop.rest.bulk;

import java.util.Collections;
import java.util.List;

import org.elasticsearch.hadoop.EsHadoopException;
import org.elasticsearch.hadoop.rest.HttpStatus;
import org.elasticsearch.hadoop.util.BytesArray;

/**
 * Simple response object that tracks useful information about a bulk indexing response.
 * This includes the determined response code, the number of docs indexed, the docs that
 * did not make it, and a sample of error messages for the user to peruse.
 */
public class BulkResponse {

    public static BulkResponse complete() {
        return complete(HttpStatus.OK, 0L, 0, 0, 0);
    }

    public static BulkResponse complete(int httpStatus, long spent, int totalWrites, int docsSent, int docsSkipped) {
        return new BulkResponse(BulkStatus.COMPLETE, httpStatus, spent, totalWrites, docsSent, docsSkipped, 0, Collections.emptyList());
    }

    public static BulkResponse partial(int httpStatus, long spent, int totalWrites, int docsSent, int docsSkipped, int docsAborted, List errors) {
        return new BulkResponse(BulkStatus.PARTIAL, httpStatus, spent, totalWrites, docsSent, docsSkipped, docsAborted, errors);
    }

    public enum BulkStatus {
        /**
         * The bulk operation was completed successfully with all documents accepted
         */
        COMPLETE,
        /**
         * The bulk operation was completed partially, with some documents containing failures
         */
        PARTIAL
    }

    public static class BulkError {

        private final int originalPosition;
        private final BytesArray document;
        private final int documentStatus;
        private final EsHadoopException error;

        public BulkError(int originalPosition, BytesArray document, int documentStatus, EsHadoopException error) {
            this.originalPosition = originalPosition;
            this.document = document;
            this.documentStatus = documentStatus;
            this.error = error;
        }

        /**
         * @return original location in tracking bytes array that the document existed in for the very first request.
         */
        public int getOriginalPosition() {
            return originalPosition;
        }

        /**
         * @return the document in original form, backed by the tracking bytes array.
         */
        public BytesArray getDocument() {
            return document;
        }

        public int getDocumentStatus() {
            return documentStatus;
        }

        public EsHadoopException getError() {
            return error;
        }
    }

    private final BulkStatus status;
    private final int httpStatus;
    private final long spent;
    private final int totalDocs;
    private final int docsSent;
    private final int docsSkipped;
    private final int docsAborted;
    private List documentErrors;

    private BulkResponse(BulkStatus status, int httpStatus, long spent, int totalDocs, int docsSent, int docsSkipped, int docsAborted, List documentErrors) {
        this.status = status;
        this.httpStatus = httpStatus;
        this.spent = spent;
        this.totalDocs = totalDocs;
        this.docsSent = docsSent;
        this.docsSkipped = docsSkipped;
        this.docsAborted = docsAborted;
        this.documentErrors = documentErrors;
    }

    public BulkStatus getStatus() {
        return status;
    }

    public int getHttpStatus() {
        return httpStatus;
    }

    public long getClientTimeSpent() {
        return spent;
    }

    public int getTotalDocs() {
        return totalDocs;
    }

    public long getSpent() {
        return spent;
    }

    public int getDocsSent() {
        return docsSent;
    }

    public int getDocsSkipped() {
        return docsSkipped;
    }

    public int getDocsAborted() {
        return docsAborted;
    }

    public List getDocumentErrors() {
        return documentErrors;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy