The Ruby client works fine. ;-) Evan
On Mon, Aug 24, 2009 at 12:00 PM, Jonathan Ellis<[email protected]> wrote: > That's probably the best option at the moment. Once you're familiar > with the thrift API I'm sure the lazyboy devs would welcome updates > too. > > -Jonathan > > On Mon, Aug 24, 2009 at 1:54 PM, Bruno Couto<[email protected]> wrote: >> Thanks for helpping me Jonathan! >> >> Well, now I know that I can´t use the Lazyboy, then I will try my >> first steps using the Cassandra trunk version and thrift api whitout a >> wrapper. >> >> >> On Mon, Aug 24, 2009 at 2:41 PM, Jonathan Ellis<[email protected]> wrote: >>> lazyboy works vs an earlier version of trunk, so it's already >>> incompatible with 0.3, but not yet compatible w/ latest 0.4 :) >>> >>> On Mon, Aug 24, 2009 at 12:28 PM, Bruno Couto<[email protected]> wrote: >>>> Jonathan, >>>> >>>> >>>> First, thanks for answering so fast. >>>> I´m using version 0.3-final of Cassandra, then I believe the api >>>> version 0.4 is not the problem, am I correct? >>>> I'll look for the null problem. >>>> >>>> >>>> Bruno Couto >>>> >>>> >>>> On Mon, Aug 24, 2009 at 11:50 AM, Jonathan Ellis<[email protected]> wrote: >>>>> There's two things going on here, I think. >>>>> >>>>> One is that you're passing a null where there shouldn't be one. This >>>>> is a thrift bug and will be addressed in the next beta. >>>>> >>>>> The other is that IIRC lazyboy needs to be updated to work with the >>>>> latest 0.4 api. >>>>> >>>>> -Jonathan >>>>> >>>>> On Mon, Aug 24, 2009 at 9:09 AM, Bruno Couto<[email protected]> wrote: >>>>>> Hi Guys, >>>>>> >>>>>> my name is Bruno and I'm from Brazil, first, sorry for my bad english. >>>>>> I'm in my first steps with cassandra, and I´m trying to use Lazyboy >>>>>> (python wrapper). >>>>>> But when I run the layzyboy columnfamily.py example, I get the >>>>>> following error messages. >>>>>> Someone with more experience could help me? >>>>>> >>>>>> Thanks, >>>>>> >>>>>> Bruno Couto. >>>>>> >>>>>> >>>>>> ---- >>>>>> >>>>>> Cassandra Error Message: >>>>>> >>>>>> DEBUG - batch_insert >>>>>> ERROR - Internal error processing batch_insert >>>>>> java.lang.NullPointerException >>>>>> at >>>>>> org.apache.cassandra.db.RowMutation.getRowMutation(RowMutation.java:284) >>>>>> at >>>>>> org.apache.cassandra.service.CassandraServer.batch_insert(CassandraServer.java:318) >>>>>> at >>>>>> org.apache.cassandra.service.Cassandra$Processor$batch_insert.process(Cassandra.java:968) >>>>>> at >>>>>> org.apache.cassandra.service.Cassandra$Processor.process(Cassandra.java:807) >>>>>> at >>>>>> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:252) >>>>>> at >>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) >>>>>> at >>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) >>>>>> at java.lang.Thread.run(Thread.java:619) >>>>>> DEBUG - Disseminating load info ... >>>>>> >>>>>> ---- >>>>>> >>>>>> Python Error Message: >>>>>> >>>>>> localhost ~ # python columnfamily.py >>>>>> {'table': 'UserData', 'superkey': None, 'key': >>>>>> '3a63b82a947d4ee1a8cbee45944b5dcb', 'family': 'Users', 'supercol': >>>>>> None} >>>>>> {'username': 'ieure', 'email': '[email protected]'} >>>>>> True >>>>>> Traceback (most recent call last): >>>>>> File "columnfamily.py", line 65, in <module> >>>>>> u.save() # -> {'username': 'ieure', 'email': >>>>>> '[email protected]'} >>>>>> File "/root/columnfamily.py", line 119, in save >>>>>> >>>>>> File "build/bdist.linux-i686/egg/lazyboy/connection.py", line 106, in >>>>>> func >>>>>> lazyboy.exceptions.ErrorThriftMessage: Internal error processing >>>>>> batch_insert >>>>>> >>>>>> ---- >>>>>> >>>>>> ColumnFamily.py >>>>>> >>>>>> # -*- coding: utf-8 -*- >>>>>> # >>>>>> # Lazyboy examples >>>>>> # >>>>>> # © 2009 Digg, Inc. All rights reserved. >>>>>> # Author: Ian Eure <[email protected]> >>>>>> # >>>>>> # This example assumes the following schema: >>>>>> # >>>>>> # <Tables> >>>>>> # <Table Name="UserData"> >>>>>> # <ColumnFamily ColumnSort="Name" Name="Users"/> >>>>>> # </Table> >>>>>> # </Tables> >>>>>> # >>>>>> >>>>>> >>>>>> from lazyboy import * >>>>>> >>>>>> >>>>>> # Define your cluster(s) >>>>>> connection.add_pool('UserData', ['localhost:9160']) >>>>>> >>>>>> >>>>>> # Subclass ColumnFamily to create an object of the correct type. >>>>>> class User(columnfamily.ColumnFamily): >>>>>> """A class representing a user in Cassandra.""" >>>>>> >>>>>> # _key is the key template. It's values are given to >>>>>> # PrimaryKey.__init__ as keyword arguments any time a PK is >>>>>> # instantiated for this object. >>>>>> _key = {'table': 'UserData', # The table to store in >>>>>> 'family': 'Users'} # The ColumnFamily name to store >>>>>> on >>>>>> >>>>>> # Anything in here _must_ be set before the object is saved >>>>>> _required = ('username',) >>>>>> >>>>>> >>>>>> # Create an empty object >>>>>> u = User() >>>>>> >>>>>> # A PrimaryKey is generated for you: >>>>>> print u.pk >>>>>> # -> {'table': 'UserData', 'superkey': None, >>>>>> # 'key': 'da6c8e19174f40cfa6d0b65a08eef62f', >>>>>> # 'family': 'Users', 'supercol': None} >>>>>> >>>>>> data = {'username': 'ieure', 'email': '[email protected]'} >>>>>> >>>>>> # The object is a dict. All these are equivalent. >>>>>> u.update(data) >>>>>> u.update(data.items()) >>>>>> u.update(**data) >>>>>> for k in data: >>>>>> u[k] = data[k] >>>>>> >>>>>> # Arguments to __init__ are passed to update() >>>>>> u = User(data) >>>>>> print u # -> {'username': 'ieure', 'email': '[email protected]'} >>>>>> >>>>>> # You can see if it's been modified. >>>>>> print u.is_modified() # -> True >>>>>> >>>>>> # Save to Cassandra >>>>>> u.save() # -> {'username': 'ieure', 'email': '[email protected]'} >>>>>> >>>>>> print u.is_modified() # -> False >>>>>> >>>>>> # Load it in a new instance. >>>>>> u_ = User().load(u.pk.key) >>>>>> print u_ # -> {'username': 'ieure', 'email': '[email protected]'} >>>>>> >>>>>> print u.is_modified() # -> False >>>>>> del u['username'] >>>>>> print u.valid() # -> False >>>>>> print u.missing() # -> ('username',) >>>>>> try: >>>>>> u.save() # -> ('Missing required field(s):', ('username',)) >>>>>> except Exception, e: >>>>>> print e >>>>>> >>>>>> # Discard modifications >>>>>> u.revert() >>>>>> print u.is_modified() # -> False >>>>>> print u.valid() # -> True >>>>>> >>>>> >>>> >>> >> > -- Evan Weaver
