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