About Protocol Buffers

Alex De la rosa alex.rosa.box at gmail.com
Mon Jun 23 18:31:50 EDT 2014


By the way, I have the following error using PBC on Riak 2.0:

test.py
------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------
import riak
client = riak.RiakClient(host ='127.0.0.1', http_port = 8098, pb_port =
8087, protocol = 'pbc')
bucket = client.bucket_type('counter_bucket').bucket('likes')
counter = bucket.new('Barcelona')
counter.increment(5)
------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------

OUTPUT:

Traceback (most recent call last):
  File "test.py", line 18, in <module>
    bucket = client.bucket_type('counter_bucket').bucket('likes')
AttributeError: 'RiakClient' object has no attribute 'bucket_type'

What is wrong? I was following the instructions at:
https://raw.githubusercontent.com/basho/basho_docs/2.0.0/source/languages/en/riak/dev/using/data-types.md

Thanks,
Alex


On Mon, Jun 23, 2014 at 10:03 PM, Alex De la rosa <alex.rosa.box at gmail.com>
wrote:

> Hi Bret,
>
> Thanks for your reply, I had used Riak since version 0.14 via HTTP... for
> 2.0 I decided to do the switch to PBC and I'm glad to hear all HTTP calls
> has been migrated to PBC too :)
>
> Does anybody know an estimate date for version 2.0 to be out? I'm starting
> a new project and I would love to be able to use 2.0 as "list" buckets is a
> great feature for my needs.
>
> Thanks,
> Alex
>
>
>
> On Mon, Jun 23, 2014 at 9:57 PM, Brett Hazen <brett at basho.com> wrote:
>
>> Alex -
>>
>> I suspect you may be looking at some older documentation.  AFAIK all HTTP
>> functionality is now (Riak 2.0) supported via PBC so you can pick either
>> transport or the other for all of your communication.  In the past there
>> was some functionality available only via HTTP.  There are now some direct
>> queries to the Solr API which are available only via HTTP, but that’s
>> outside of Riak’s core [1].
>>
>> I’m sure those more in the know will correct me if I’ve misspoken.
>>
>> Brett
>>
>> [1] http://docs.basho.com/riak/2.0.0beta1/dev/advanced/search/
>>
>> On June 23, 2014 at 10:47:45 AM, Alex De la rosa (alex.rosa.box at gmail.com)
>> wrote:
>>
>>  Hi Luc,
>>
>> Cool, thanks! I can see how to do it now:
>>
>> bucket = client.bucket_type('counter_bucket').bucket('counters')
>>
>> Will be checking it more to see what can I do that is not yet documented.
>>
>> The Python documentation says at one point: "Some requests are only valid
>> over 'http', and will always be sent via those transports, regardless of
>> which protocol is preferred.". Can I know which requests are HTTP only? is
>> it for something in particular? or they will be made into PBC at some point?
>>
>> Thanks,
>> Alex
>>
>>
>> On Mon, Jun 23, 2014 at 5:29 PM, Luc Perkins <lperkins at basho.com> wrote:
>>
>>> Alex,
>>>
>>> It sounds like you're working mostly with the lower-level Python API at
>>> the moment, but if you want to use the higher-level parts of the client for
>>> interacting with Riak Data Types (sets, maps, and counters), there is a
>>> tutorial here:
>>>
>>>
>>> https://raw.githubusercontent.com/basho/basho_docs/2.0.0/source/languages/en/riak/dev/using/data-types.md
>>>
>>> You'll see the Python samples interspersed throughout. I know it's
>>> annoying because it's just raw Markdown at the moment, but this will be
>>> deployed to our normal docs site
>>> <http://docs.basho.com/riak/2.0.0beta1/> soon.
>>>
>>> Hope that helps!
>>>
>>> Luc
>>>
>>>
>>> On Mon, Jun 23, 2014 at 4:54 PM, Alex De la rosa <
>>> alex.rosa.box at gmail.com> wrote:
>>>
>>>> Hi Sean,
>>>>
>>>> Thanks for your quick reply, is what i suspected, moreover after
>>>> checking riak.proto file in the source. So mainly the contents to store
>>>> (json or not json) is not PB encoded semantically, but is encoded as a
>>>> "body" field in the Message. That's good though.
>>>>
>>>> Another question... is there any estimated date for Riak 2.0 to be
>>>> released? I'm playing with 2.0 beta 1 and the "list" object is a must-have
>>>> for me (same as the "counter" object that can be found in Riak 1.4).
>>>>
>>>> Is crucial for me to decide which technologies to use in my new
>>>> project; so far Riak 2.0 seems a great option, but I can not build under a
>>>> beta.
>>>>
>>>> Another question now that I talk about "counters"... how do you do it
>>>> with Python's PBC? I can see the functions: RiakClient.get_counter()
>>>> and RiakClient.update_counter()... but... how do you create a new counter?
>>>> how do you specify the special connotations to the bucket?
>>>>
>>>> Thanks,
>>>> Alex
>>>>
>>>>
>>>> On Mon, Jun 23, 2014 at 4:38 PM, Sean Cribbs <sean at basho.com> wrote:
>>>>
>>>>> Hi Alex,
>>>>>
>>>>> By default, the client assumes new objects use JSON as the encoding.
>>>>> The protocol buffers are only used on the wire to encode Riak's protocol.
>>>>> If you want to use your own protobuffs messages, I suggest two things:
>>>>>
>>>>> 1. Decide on a `content_type` property for each of your data types and
>>>>> be sure to assign that to each key as you create it. I've used
>>>>> 'application/pb-person' as an example below.
>>>>> 2. Register encoder and decoder functions [1] on the RiakClient
>>>>> object, like so:
>>>>>
>>>>> client.set_decoder('application/pb-person', Person.ParseFromString)
>>>>> client.set_encoder('application/pb-person', lambda x:
>>>>> x.SerializeToString())
>>>>>
>>>>> [1]
>>>>> http://riak-python-client.readthedocs.org/en/latest/client.html#serialization
>>>>>
>>>>> Cheers,
>>>>>
>>>>>
>>>>>  On Mon, Jun 23, 2014 at 9:19 AM, Alex De la rosa <
>>>>> alex.rosa.box at gmail.com> wrote:
>>>>>
>>>>>>  Hi there,
>>>>>>
>>>>>> I just installed RIAK 2.0 beta 1 and was playing with the Python
>>>>>> library using 'pbc' (Protocol Buffers).
>>>>>>
>>>>>> test.py
>>>>>>
>>>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>>>>  import riak
>>>>>>  client = riak.RiakClient(host ='127.0.0.1', http_port = 8098,
>>>>>> pb_port = 8087, protocol = 'pbc')
>>>>>>  bucket = client.bucket('people')
>>>>>>
>>>>>> key = bucket.new('alex', data={"username":"Alex","age":33})
>>>>>> key.store()
>>>>>>
>>>>>> print bucket.get('alex').encoded_data
>>>>>>
>>>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>>>>
>>>>>> it works perfectly and it prints {"username": "Alex", "age": 33} as
>>>>>> it should print.
>>>>>>
>>>>>> However, I'm not using a proto file (person.proto) and compiling it
>>>>>> into binary for Python to use it... something like:
>>>>>>
>>>>>> person.proto
>>>>>>
>>>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>>>>  message Person {
>>>>>>   required string username = 1;
>>>>>>   required int32 age = 2;
>>>>>> }
>>>>>>
>>>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>>>>
>>>>>> xxx.py
>>>>>>
>>>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>>>>  import person_pb2
>>>>>> person = person_pb2.Person()
>>>>>> person.username = "Alex"
>>>>>> person.age = 33
>>>>>> data = person.SerializeToString()
>>>>>>
>>>>>> --------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------
>>>>>>
>>>>>> Am I using the 'pbc' interface wrong? however, on Riak's examples
>>>>>> page is done also without the "proto" file... I'm a bit confused at the
>>>>>> moment as it changed the way I normally would use Protocol Buffers.
>>>>>>
>>>>>> Thanks,
>>>>>> Alex
>>>>>>
>>>>>>  _______________________________________________
>>>>>> riak-users mailing list
>>>>>> riak-users at lists.basho.com
>>>>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Sean Cribbs <sean at basho.com>
>>>>> Software Engineer
>>>>> Basho Technologies, Inc.
>>>>> http://basho.com/
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> riak-users mailing list
>>>> riak-users at lists.basho.com
>>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>>
>>>>
>>>
>> _______________________________________________
>> riak-users mailing list
>> riak-users at lists.basho.com
>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20140624/34ed0cd7/attachment.html>


More information about the riak-users mailing list