quickwit-proto 0.3.0

Quickwit's protos
// Quickwit
//  Copyright (C) 2021 Quickwit Inc.
//
//  Quickwit is offered under the AGPL v3.0 and as commercial software.
//  For commercial licensing, contact us at hello@quickwit.io.
//
//  AGPL:
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU Affero General Public License as
//  published by the Free Software Foundation, either version 3 of the
//  License, or (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU Affero General Public License for more details.
//
//  You should have received a copy of the GNU Affero General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.

syntax = "proto3";

// We remap this to quickwit_proto::ingest_api;

package quickwit_ingest_api;

service IngestAPIService {
  /// Ingests document in a given queue.
  ///
  /// Upon any kind of error, the client should
  /// - retry to get at least once delivery.
  /// - not retry to get at most once delivery.
  ///
  /// Exactly once delivery is not supported yet.
  rpc Ingest(IngestRequest) returns (IngestResponse);

  /// Fetches record from a given queue.
  ///
  /// Records are returned in order.
  ///
  /// The returned `FetchResponse` object is meant to be read with the
  /// `crate::iter_records` function.
  ///
  /// Fetching does not necessarily return all of the available records.
  /// If returning all records would exceed `FETCH_PAYLOAD_LIMIT` (2MB),
  /// the reponse will be partial.
  rpc Fetch(FetchRequest) returns (FetchResponse);

  /// Returns a batch containing the last records.
  ///
  /// It returns the last documents, from the newest
  /// to the oldest, and stops as soon as `FETCH_PAYLOAD_LIMIT` (2MB)
  /// is exceeded.
  rpc Tail(TailRequest) returns (FetchResponse);
}

message QueueExistsRequest {
    string queue_id = 1;
}

message CreateQueueRequest {
    string queue_id = 1;
}

message CreateQueueIfNotExistsRequest {
    string queue_id = 1;
}

message DropQueueRequest {
    string queue_id = 1;
}

message IngestRequest {
    repeated DocBatch doc_batches = 1;
}

message IngestResponse {
    uint64 num_docs_for_processing = 1;
}

message FetchRequest {
    string index_id = 1;
    optional uint64 start_after = 2;
    optional uint64 num_bytes_limit = 3;
}

message FetchResponse {
    optional uint64 first_position = 1;
    DocBatch doc_batch = 2;
}

message DocBatch {
    string index_id = 1;
    bytes concat_docs = 2;
    repeated uint64 doc_lens = 3;
}

/// Suggest to truncate the queue.
///
/// This function allows the queue to remove all records up to and
/// including `up_to_offset_included`.
///
/// The role of this truncation is to release memory and disk space.
///
/// There are no guarantees that the record will effectively be removed.
/// Nothing might happen, or the truncation might be partial.
///
/// In other words, truncating from a position, and fetching records starting
/// earlier than this position can yield undefined result:
/// the truncated records may or may not be returned.
message SuggestTruncateRequest {
    string index_id = 1;
    uint64 up_to_position_included = 2;
}

message TailRequest {
    string index_id = 1;
}


message ListQueuesRequest {   
}

message ListQueuesResponse {
    repeated string queues = 1;
}