summaryrefslogtreecommitdiff
path: root/pbc/riakclient.proto
diff options
context:
space:
mode:
Diffstat (limited to 'pbc/riakclient.proto')
-rw-r--r--pbc/riakclient.proto246
1 files changed, 246 insertions, 0 deletions
diff --git a/pbc/riakclient.proto b/pbc/riakclient.proto
new file mode 100644
index 0000000..e8150d6
--- /dev/null
+++ b/pbc/riakclient.proto
@@ -0,0 +1,246 @@
+/* -------------------------------------------------------------------
+**
+** riakclient.proto: Protocol buffers for riak
+**
+** Copyright (c) 2007-2010 Basho Technologies, Inc. All Rights Reserved.
+**
+** This file is provided 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.
+**
+** -------------------------------------------------------------------
+*/
+/*
+** Revision: 1.1
+**
+** Lowest Common Denominator Protocol Buffers Client
+** - no ENUM (protobuffs_erlang does not support)
+**
+** Protocol
+**
+** The protocol encodes requests and responses as protocol buffer messages.
+** Each request message results in one or more response messages.
+** As message type and length are not encoded by PB they are sent
+** on the wire as
+**
+** <length:32> <msg_code:8> <pbmsg>
+**
+** length is the length of msg_code (1 byte) plus the message length
+** in bytes encoded in network order (big endian)
+**
+** msg_code indicates what is encoded as pbmsg
+**
+** pbmsg is the encoded protocol buffer message
+**
+** On connect, the client can make requests and will receive responses.
+** For each request message there is a corresponding response message,
+** or the server will respond with an error message if something has
+** gone wrong.
+**
+** The client should be prepared to handle messages without any pbmsg
+** (i.e. length==1) for requests like ping or a put without return_body set.
+**
+** RpbGetClientIdReq -> RpbGetClientIdResp
+** RpbSetClientIdReq -> RpbSetClientIdResp
+** RpbGetServerInfoReq -> RpbGetServerInfoResp
+** RpbPingReq -> RpbPingResp
+** RpbGetReq -> RpbErrorResp | RbpGetResp
+** RpbPutReq -> RpbErrorResp | RpbPutResp
+** RpbDelReq -> RpbErrorResp | RpbDelResp
+** RpbListBucketsReq -> RpbErrorResp | RpbListBucketsResp
+** RpbListKeysReq -> RpbErrorResp | RpbListKeysResp{1,}
+** RpbGetBucketReq -> RpbErrorResp | RpbGetBucketResp
+**
+**
+** Message Codes
+** 0 - RpbErrorResp
+** 1 - RpbPingReq - 0 length
+** 2 - RpbPingResp (pong) - 0 length
+** 3 - RpbGetClientIdReq
+** 4 - RpbGetClientIdResp
+** 5 - RpbSetClientIdReq
+** 6 - RpbSetClientIdResp
+** 7 - RpbGetServerInfoReq
+** 8 - RpbGetServerInfoResp
+** 9 - RpbGetReq
+** 10 - RpbGetResp
+** 11 - RpbPutReq
+** 12 - RpbPutResp - 0 length
+** 13 - RpbDelReq
+** 14 - RpbDelResp
+** 15 - RpbListBucketsReq
+** 16 - RpbListBucketsResp
+** 17 - RpbListKeysReq
+** 18 - RpbListKeysResp{1,}
+** 19 - RpbGetBucketReq
+** 20 - RpbGetBucketResp
+** 21 - RpbSetBucketReq
+** 22 - RpbSetBucketResp
+** 23 - RpbMapRedReq
+** 24 - RpbMapRedResp{1,}
+**
+*/
+
+// Error response - may be generated for any Req
+message RpbErrorResp {
+ required bytes errmsg = 1;
+ required uint32 errcode = 2;
+}
+
+// Get ClientId Request - no message defined, just send RpbGetClientIdReq message code
+message RpbGetClientIdResp {
+ required bytes client_id = 1; // Client id in use for this connection
+}
+
+message RpbSetClientIdReq {
+ required bytes client_id = 1; // Client id to use for this connection
+}
+// Set ClientId Request - no message defined, just send RpbSetClientIdReq message code
+
+// Get server info request - no message defined, just send RpbGetServerInfoReq message code
+
+message RpbGetServerInfoResp {
+ optional bytes node = 1;
+ optional bytes server_version = 2;
+}
+
+
+// Get Request - retrieve bucket/key
+message RpbGetReq {
+ required bytes bucket = 1;
+ required bytes key = 2;
+ optional uint32 r = 3;
+}
+
+// Get Response - if the record was not found there will be no content/vclock
+message RpbGetResp {
+ repeated RpbContent content = 1;
+ optional bytes vclock = 2; // the opaque vector clock for the object
+}
+
+
+// Put request - if options.return_body is set then the updated metadata/data for
+// the key will be returned.
+message RpbPutReq {
+ required bytes bucket = 1;
+ required bytes key = 2;
+ optional bytes vclock = 3;
+ required RpbContent content = 4;
+ optional uint32 w = 5;
+ optional uint32 dw = 6;
+ optional bool return_body = 7;
+}
+
+// Put response - same as get response
+message RpbPutResp {
+ repeated RpbContent content = 1;
+ optional bytes vclock = 2; // the opaque vector clock for the object
+}
+
+
+// Delete request
+message RpbDelReq {
+ required bytes bucket = 1;
+ required bytes key = 2;
+ optional uint32 rw = 3;
+}
+
+// Delete response - not defined, will return a RpbDelResp on success or RpbErrorResp on failure
+
+// List buckets request - no message defined, just send RpbListBucketsReq
+
+// List buckets response
+message RpbListBucketsResp {
+ repeated bytes buckets = 1;
+}
+
+
+// List keys in bucket request
+message RpbListKeysReq {
+ required bytes bucket = 1;
+}
+
+// List keys in bucket response - one or more of these packets will be sent
+// the last one will have done set true (and may not have any keys in it)
+message RpbListKeysResp {
+ repeated bytes keys = 1;
+ optional bool done = 2;
+}
+
+// Get bucket properties request
+message RpbGetBucketReq {
+ required bytes bucket = 1;
+}
+
+// Get bucket properties response
+message RpbGetBucketResp {
+ required RpbBucketProps props = 1;
+}
+
+// Set bucket properties request
+message RpbSetBucketReq {
+ required bytes bucket = 1;
+ required RpbBucketProps props = 2;
+}
+
+
+// Set bucket properties response - no message defined, just send RpbSetBucketResp
+
+
+// Map/Reduce request
+message RpbMapRedReq {
+ required bytes request = 1;
+ required bytes content_type = 2;
+}
+
+// Map/Reduce response
+// one or more of these packets will be sent the last one will have done set
+// true (and may not have phase/data in it)
+message RpbMapRedResp {
+ optional uint32 phase = 1;
+ optional bytes response = 2;
+ optional bool done = 3;
+}
+
+// Content message included in get/put responses
+// Holds the value and associated metadata
+message RpbContent {
+ required bytes value = 1;
+ optional bytes content_type = 2; // the media type/format
+ optional bytes charset = 3;
+ optional bytes content_encoding = 4;
+ optional bytes vtag = 5;
+ repeated RpbLink links = 6; // links to other resources
+ optional uint32 last_mod = 7;
+ optional uint32 last_mod_usecs = 8;
+ repeated RpbPair usermeta = 9; // user metadata stored with the object
+}
+
+// Key/value pair - used for user metadata
+message RpbPair {
+ required bytes key = 1;
+ optional bytes value = 2;
+}
+
+// Link metadata
+message RpbLink {
+ optional bytes bucket = 1;
+ optional bytes key = 2;
+ optional bytes tag = 3;
+}
+
+// Bucket properties
+message RpbBucketProps {
+ optional uint32 n_val = 1;
+ optional bool allow_mult = 2;
+}