From 79bea382fd2c0753ca9ace79a11bb74c9a1d722b Mon Sep 17 00:00:00 2001 From: Robin Edwards Date: Wed, 20 Apr 2011 14:38:43 +0100 Subject: merged pbc branch to master --- pbc/compile_pbc.pl | 21 +++++ pbc/riakclient.proto | 246 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 267 insertions(+) create mode 100644 pbc/compile_pbc.pl create mode 100644 pbc/riakclient.proto (limited to 'pbc') diff --git a/pbc/compile_pbc.pl b/pbc/compile_pbc.pl new file mode 100644 index 0000000..5134cc5 --- /dev/null +++ b/pbc/compile_pbc.pl @@ -0,0 +1,21 @@ +#!/bin/env perl +use 5.01; +use strict; +use warnings; +use Google::ProtocolBuffers; + +my $pbc_definition = "pbc/riakclient.proto"; +my $output_file = "lib/Net/Riak/Transport/Message.pm"; + +say "Compiling Protocol Buffers definition.."; + +Google::ProtocolBuffers->parsefile( + $pbc_definition, { + generate_code => $output_file, + create_accessors => 1 + } +); + +say "done."; + +exit; 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 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; +} -- cgit 1.4.1