/* -------------------------------------------------------------------
**
** 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
**
**
** 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;
}