incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Drew Schleck <drew.schl...@gmail.com>
Subject Re: Newbe´s question
Date Tue, 25 Aug 2009 06:07:29 GMT
It's not my Lazyboy, give the Digg guys credit for doing almost all of
the work. I found out most of this by just looking at the provided
unit tests, even if you can't run them they are helpful.

Columns:
class User(columnfamily.ColumnFamily):
    _key = { 'table': 'keyspace',
             'family': 'Users' }

    _required = ('password', 'salt')

Super columns:
class Item(supercolumnfamily.SuperColumnFamily):
    _key = { 'table': 'keyspace',
             'supercol': 'Items' }

class Items(supercolumn.SuperColumn):
    _key = { 'table': 'kayspace',
             'family': 'Items' }
    name = "Items"

Drew

On Mon, Aug 24, 2009 at 21:26, <mobiledreamers@gmail.com> wrote:
> hey Drew
> Can you show an example on how to use your lazyboy with a simple column
> family or super columny family
> that would be really great
> thanks a lot
>
> On Mon, Aug 24, 2009 at 3:15 PM, Drew Schleck <drew.schleck@gmail.com>
> wrote:
>>
>> I've been working on a Lazyboy 0.4 update at
>> http://github.com/dschleck/lazyboy/ . Right now it's at the point
>> where it works for me and what I'm doing but there's probably a few
>> bugs to be caught. As an example, yesterday I noticed it wasn't
>> possible to delete items out of supercolumns so I fixed that.
>>
>> If you decide to use my branch of it and find a bug, please tell me
>> about it and I'll do my best to sort it out.
>>
>> Drew
>>
>> On Mon, Aug 24, 2009 at 12:09, Evan Weaver<eweaver@gmail.com> wrote:
>> > The Ruby client works fine. ;-)
>> >
>> > Evan
>> >
>> > On Mon, Aug 24, 2009 at 12:00 PM, Jonathan Ellis<jbellis@gmail.com>
>> > 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<bcouto@gmail.com> 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<jbellis@gmail.com>
>> >>> 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<bcouto@gmail.com>
>> >>>> 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<jbellis@gmail.com>
>> >>>>> 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<bcouto@gmail.com>
>> >>>>>> 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': 'ian@digg.com'}
>> >>>>>>> True
>> >>>>>>> Traceback (most recent call last):
>> >>>>>>>  File "columnfamily.py", line 65, in <module>
>> >>>>>>>    u.save()           # -> {'username': 'ieure',
'email':
>> >>>>>>> 'ian@digg.com'}
>> >>>>>>>  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 <ian@digg.com>
>> >>>>>>> #
>> >>>>>>> # 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': 'ian@digg.com'}
>> >>>>>>>
>> >>>>>>> # 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':
>> >>>>>>> 'ian@digg.com'}
>> >>>>>>>
>> >>>>>>> # You can see if it's been modified.
>> >>>>>>> print u.is_modified()           # -> True
>> >>>>>>>
>> >>>>>>> # Save to Cassandra
>> >>>>>>> u.save()           # -> {'username': 'ieure',
'email':
>> >>>>>>> 'ian@digg.com'}
>> >>>>>>>
>> >>>>>>> print u.is_modified()           # -> False
>> >>>>>>>
>> >>>>>>> # Load it in a new instance.
>> >>>>>>> u_ = User().load(u.pk.key)
>> >>>>>>> print u_           # -> {'username': 'ieure',
'email':
>> >>>>>>> 'ian@digg.com'}
>> >>>>>>>
>> >>>>>>> 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
>> >
>
>
>
> --
> Bidegg worlds best auction site
> http://bidegg.com
>

Mime
View raw message