blob: fa318e16a82fce6156cda69cc1010566924065a8 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.
*/
namespace java org.apache.distributedlog.thrift.service
/* Response stats codes */
enum StatusCode {
/* 2xx: action requested by the client was received, understood, accepted and processed successfully. */
/* standard response for successful requests. */
SUCCESS = 200,
/* 3xx: client must take additional action to complete the request. */
/* client closed. */
CLIENT_CLOSED = 301,
/* found the stream in a different server, a redirection is required by client. */
FOUND = 302,
/* 4xx: client seems to have erred. */
/* request is denied for some reason */
REQUEST_DENIED = 403,
/* request record too large */
TOO_LARGE_RECORD = 413,
/* 5xx: server failed to fulfill an apparently valid request. */
/* Generic error message, given when no more specific message is suitable. */
INTERNAL_SERVER_ERROR = 500,
/* Not implemented */
NOT_IMPLEMENTED = 501,
/* Already Closed Exception */
ALREADY_CLOSED = 502,
/* Service is currently unavailable (because it is overloaded or down for maintenance). */
SERVICE_UNAVAILABLE = 503,
/* Locking exception */
LOCKING_EXCEPTION = 504,
/* ZooKeeper Errors */
ZOOKEEPER_ERROR = 505,
/* Metadata exception */
METADATA_EXCEPTION = 506,
/* BK Transmit Error */
BK_TRANSMIT_ERROR = 507,
/* Flush timeout */
FLUSH_TIMEOUT = 508,
/* Log empty */
LOG_EMPTY = 509,
/* Log not found */
LOG_NOT_FOUND = 510,
/* Truncated Transactions */
TRUNCATED_TRANSACTION = 511,
/* End of Stream */
END_OF_STREAM = 512,
/* Transaction Id Out of Order */
TRANSACTION_OUT_OF_ORDER = 513,
/* Write exception */
WRITE_EXCEPTION = 514,
/* Stream Unavailable */
STREAM_UNAVAILABLE = 515,
/* Write cancelled exception */
WRITE_CANCELLED_EXCEPTION = 516,
/* over-capacity/backpressure */
OVER_CAPACITY = 517,
/** stream exists but is not ready (recovering etc.).
the difference between NOT_READY and UNAVAILABLE is that UNAVAILABLE
indicates the stream is no longer owned by the proxy and we should
redirect. NOT_READY indicates the stream exist at the proxy but isn't
eady for writes. */
STREAM_NOT_READY = 518,
/* Region Unavailable */
REGION_UNAVAILABLE = 519,
/* Invalid Enveloped Entry */
INVALID_ENVELOPED_ENTRY = 520,
/* Unsupported metadata version */
UNSUPPORTED_METADATA_VERSION = 521,
/* Log Already Exists */
LOG_EXISTS = 522,
/* Checksum failed on the request */
CHECKSUM_FAILED = 523,
/* Overcapacity: too many streams */
TOO_MANY_STREAMS = 524,
/* Log Segment Not Found */
LOG_SEGMENT_NOT_FOUND = 525,
// End of Log Segment
END_OF_LOG_SEGMENT = 526,
// Log Segment Is Truncated
LOG_SEGMENT_IS_TRUNCATED = 527,
/* 6xx: unexpected */
UNEXPECTED = 600,
INTERRUPTED = 601,
INVALID_STREAM_NAME = 602,
ILLEGAL_STATE = 603,
/* 10xx: reader exceptions */
RETRYABLE_READ = 1000,
LOG_READ_ERROR = 1001,
/* Read cancelled exception */
READ_CANCELLED_EXCEPTION = 1002,
}
/* Response Header */
struct ResponseHeader {
1: required StatusCode code;
2: optional string errMsg;
3: optional string location;
}
/* Write Response */
struct WriteResponse {
1: required ResponseHeader header;
2: optional string dlsn;
}
/* Bulk write response */
struct BulkWriteResponse {
1: required ResponseHeader header;
2: optional list<WriteResponse> writeResponses;
}
/* Write Context */
struct WriteContext {
1: optional set<string> triedHosts;
2: optional i64 crc32;
3: optional bool isRecordSet;
}
/* HeartBeat Options */
struct HeartbeatOptions {
1: optional bool sendHeartBeatToReader;
}
/* Server Status */
enum ServerStatus {
/* service is writing and accepting new streams */
WRITE_AND_ACCEPT = 100,
/* service is only writing to old streams, not accepting new streams */
WRITE_ONLY = 200,
/* service is shutting down, will not write */
DOWN = 300,
}
/* Server Info */
struct ServerInfo {
1: optional map<string, string> ownerships;
2: optional ServerStatus serverStatus;
}
/* Client Info */
struct ClientInfo {
1: optional string streamNameRegex;
2: optional bool getOwnerships;
}
service DistributedLogService {
/* Deprecated */
ServerInfo handshake();
ServerInfo handshakeWithClientInfo(ClientInfo clientInfo);
/* Deprecated */
WriteResponse heartbeat(string stream, WriteContext ctx);
WriteResponse heartbeatWithOptions(string stream, WriteContext ctx, HeartbeatOptions options);
/* Deprecated */
WriteResponse write(string stream, binary data);
WriteResponse writeWithContext(string stream, binary data, WriteContext ctx);
BulkWriteResponse writeBulkWithContext(string stream, list<binary> data, WriteContext ctx);
WriteResponse truncate(string stream, string dlsn, WriteContext ctx);
WriteResponse release(string stream, WriteContext ctx);
WriteResponse create(string stream, WriteContext ctx);
WriteResponse delete(string stream, WriteContext ctx);
WriteResponse getOwner(string stream, WriteContext ctx);
/* Admin Methods */
void setAcceptNewStream(bool enabled);
}