Return-Path: X-Original-To: apmail-cassandra-user-archive@www.apache.org Delivered-To: apmail-cassandra-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7DB9298AD for ; Wed, 7 Mar 2012 08:11:00 +0000 (UTC) Received: (qmail 6725 invoked by uid 500); 7 Mar 2012 08:10:57 -0000 Delivered-To: apmail-cassandra-user-archive@cassandra.apache.org Received: (qmail 6637 invoked by uid 500); 7 Mar 2012 08:10:56 -0000 Mailing-List: contact user-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@cassandra.apache.org Delivered-To: mailing list user@cassandra.apache.org Received: (qmail 6624 invoked by uid 99); 7 Mar 2012 08:10:56 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Mar 2012 08:10:56 +0000 X-ASF-Spam-Status: No, hits=1.7 required=5.0 tests=FREEMAIL_ENVFROM_END_DIGIT,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of mccloud35@gmail.com designates 209.85.213.172 as permitted sender) Received: from [209.85.213.172] (HELO mail-yx0-f172.google.com) (209.85.213.172) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Mar 2012 08:10:49 +0000 Received: by yenm5 with SMTP id m5so3067267yen.31 for ; Wed, 07 Mar 2012 00:10:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=McdQ/nSe8IymUp4OJLL+6uD6Z1zM0R5dul+pLTyrSbs=; b=NgBxrN/9afR6dp3QMK9jOKWHErfKWu0mdUl6onI0aIdwl15oznfgEEvmAHmhJMOJK2 2HQEa3gWivzgiuLPCERPl91Fk4CJJAfgdEEh2gt0Yrnm4QB6EtiXz9L1GkZdihQWbkjJ zOg7lMdsa8IzwyUctGi3Um07UQO7RGatp2hIa2Oo1uwxw5rlNXtIKO76ZkQg9L4YVjWc lb2Uy0sa4OQQCfauge1Ig3TazftRGBhyGNP4Ae7nz3xg2s2ceb2NfryoatOMU05rlU9/ l46a71zzKsvj5Wb+OhAWn0Rkq+RqWI6W1LrsjwzvwdE1YzwUuVPWG+UyG0h3Vt9rXJQv ASXg== MIME-Version: 1.0 Received: by 10.236.116.195 with SMTP id g43mr2028113yhh.26.1331107828401; Wed, 07 Mar 2012 00:10:28 -0800 (PST) Received: by 10.236.185.99 with HTTP; Wed, 7 Mar 2012 00:10:27 -0800 (PST) In-Reply-To: References: <05CEA178DD88EE4FA89EED77C245F84916414DAF@msex85.morningstar.com> <49BABB83-0D56-4FFD-9903-FD96C8DFA145@thelastpickle.com> <4F564F90.6080103@morningstar.com> Date: Wed, 7 Mar 2012 13:40:27 +0530 Message-ID: Subject: Re: Schema change causes exception when adding data From: Tharindu Mathew To: user@cassandra.apache.org Content-Type: multipart/related; boundary=20cf303dd65445051e04baa2b161 X-Virus-Checked: Checked by ClamAV on apache.org --20cf303dd65445051e04baa2b161 Content-Type: multipart/alternative; boundary=20cf303dd65445051b04baa2b160 --20cf303dd65445051b04baa2b160 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Hi Folks, Managed to solve this problem to an extent. I used the thrift api just for this client and did a thread sleep until the schema comes into agreement. The addColumnFamily(CF, boolean) is not available in the Hector I use. Anyway, I checked the code in Hector trunk. The approach is almost identical, so it should be good. Sometimes still the schema does not come into agreement... I wonder whether this issue is solved the newer versions? Anyway, Aaron has given a workaround in another thread for this problem. Thanks for all the help folks. On Tue, Mar 6, 2012 at 11:32 PM, Tamar Fraenkel wrote= : > Hi! > Maybe I didn't understand, but if you use Hector's > addColumnFamily(CF, true); > it should wait for schema agreement. > Will that solve your problem? > > Thanks > > *Tamar Fraenkel * > Senior Software Engineer, TOK Media > > [image: Inline image 1] > > tamar@tok-media.com > Tel: +972 2 6409736 > Mob: +972 54 8356490 > Fax: +972 2 5612956 > > > > > > On Tue, Mar 6, 2012 at 7:55 PM, Jeremiah Jordan < > jeremiah.jordan@morningstar.com> wrote: > >> That is the best one I have found. >> >> >> On 03/01/2012 03:12 PM, Tharindu Mathew wrote: >> >> There are 2. I'd like to wait till there are one, when I insert the valu= e. >> >> Going through the code, calling client.describe_schema_versions() seems >> to give a good answer to this. And I discovered that if I wait till ther= e >> is only 1 version, I will not get this error. >> >> Is this the best practice if I want to check this programatically? >> >> On Thu, Mar 1, 2012 at 11:15 PM, aaron morton w= rote: >> >>> use describe cluster in the CLI to see how many schema versions there >>> are. >>> >>> Cheers >>> >>> ----------------- >>> Aaron Morton >>> Freelance Developer >>> @aaronmorton >>> http://www.thelastpickle.com >>> >>> On 2/03/2012, at 12:25 AM, Tharindu Mathew wrote: >>> >>> >>> >>> On Thu, Mar 1, 2012 at 11:47 AM, Tharindu Mathew w= rote: >>> >>>> Jeremiah, >>>> >>>> Thanks for the reply. >>>> >>>> This is what we have been doing, but it's not reliable as we don't kno= w >>>> a definite time that the schema would get replicated. Is there any way= I >>>> can know for sure that changes have propagated? >>>> >>> [Edit: corrected to a question] >>> >>>> >>>> Then I can block the insertion of data until then. >>>> >>>> >>>> On Thu, Mar 1, 2012 at 4:33 AM, Jeremiah Jordan < >>>> JEREMIAH.JORDAN@morningstar.com> wrote: >>>> >>>>> The error is that the specified colum family doesn=92t exist. If yo= u >>>>> connect with the CLI and describe the keyspace does it show up? Also= , >>>>> after adding a new column family programmatically you can=92t use it >>>>> immediately, you have to wait for it to propagate. You can use calls= to >>>>> describe schema to do so, keep calling it until every node is on the = same >>>>> schema. >>>>> >>>>> >>>>> >>>>> -Jeremiah >>>>> >>>>> >>>>> >>>>> *From:* Tharindu Mathew [mailto:mccloud35@gmail.com] >>>>> *Sent:* Wednesday, February 29, 2012 8:27 AM >>>>> *To:* user >>>>> *Subject:* Schema change causes exception when adding data >>>>> >>>>> >>>>> >>>>> Hi, >>>>> >>>>> I have a 3 node cluster and I'm dynamically updating a keyspace with = a >>>>> new column family. Then, when I try to write records to it I get the >>>>> following exception shown at [1]. >>>>> >>>>> How do I avoid this. I'm using Hector and the default consistency >>>>> level of QUORUM is used. Cassandra version 0.7.8. Replication Factor = is 1. >>>>> >>>>> How can I solve my problem? >>>>> >>>>> [1] - >>>>> me.prettyprint.hector.api.exceptions.HInvalidRequestException: >>>>> InvalidRequestException(why:unconfigured columnfamily proxySummary) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(E= xceptionsTranslatorImpl.java:42) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.service.KeyspaceServiceImpl$10.execute(Keysp= aceServiceImpl.java:397) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.service.KeyspaceServiceImpl$10.execute(Keysp= aceServiceImpl.java:383) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operat= ion.java:101) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.connection.HConnectionManager.operateWithFai= lover(HConnectionManager.java:156) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.service.KeyspaceServiceImpl.operateWithFailo= ver(KeyspaceServiceImpl.java:129) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.service.KeyspaceServiceImpl.multigetSlice(Ke= yspaceServiceImpl.java:401) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.model.thrift.ThriftMultigetSliceQuery$1.doIn= Keyspace(ThriftMultigetSliceQuery.java:67) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.model.thrift.ThriftMultigetSliceQuery$1.doIn= Keyspace(ThriftMultigetSliceQuery.java:59) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.model.KeyspaceOperationCallback.doInKeyspace= AndMeasure(KeyspaceOperationCallback.java:20) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.model.ExecutingKeyspace.doExecute(ExecutingK= eyspace.java:72) >>>>> >>>>> at >>>>> me.prettyprint.cassandra.model.thrift.ThriftMultigetSliceQuery.execut= e(ThriftMultigetSliceQuery.java:58) >>>>> >>>>> >>>>> >>>>> -- >>>>> Regards, >>>>> >>>>> Tharindu >>>>> >>>>> >>>>> >>>>> blog: http://mackiemathew.com/ >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Regards, >>>> >>>> Tharindu >>>> >>>> blog: http://mackiemathew.com/ >>>> >>>> >>> >>> >>> -- >>> Regards, >>> >>> Tharindu >>> >>> blog: http://mackiemathew.com/ >>> >>> >>> >> >> >> -- >> Regards, >> >> Tharindu >> >> blog: http://mackiemathew.com/ >> >> > --=20 Regards, Tharindu blog: http://mackiemathew.com/ --20cf303dd65445051b04baa2b160 Content-Type: text/html; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Hi Folks,

Managed to solve this problem to an extent. I used the thr= ift api just for this client and did a thread sleep until the schema comes = into agreement.

The addColumnFamily(CF, boolean) is not available in= the Hector I use. Anyway, I checked the code in Hector trunk. The approach= is almost identical, so it should be good.

Sometimes still the schema does not come into agreement... I wonder whe= ther this issue is solved the newer versions?

Anyway, Aaron has give= n a workaround in another thread for this problem.

Thanks for all th= e help folks.

On Tue, Mar 6, 2012 at 11:32 PM, Tamar Fraen= kel <tamar@tok-= media.com> wrote:
Hi!
Maybe I didn't understand, but if you us= e Hector's
addColumnFamily(CF, true);
it should wait for = schema agreement.
Will that solve your problem?

Thanks

<= b>Tamar Fraenkel=A0
Senior Software Engineer, TOK Media=A0

3D"Inline=

tamar@tok-media.co= m
Tel:=A0=A0=A0+972 2 6409736=A0
Mo= b:=A0=A0+972 54 8356490=A0
Fax:=A0=A0=A0<= a value=3D"+97225612956">+972 2 5612956=A0





On Tue, Mar 6, 2012 at 7:55 PM, Jeremiah= Jordan <jeremiah.jordan@morningstar.com> wrot= e:
=20 =20 =20
That is the best one I have found.


On 03/01/2012 03:12 PM, Tharindu Mathew wrote:
There are 2. I'd like to wait till there = are one, when I insert the value.

Going through the code, calling client.describe_schema_versions() seems to give a good answer to this. And I discovered that if I wait till there is only 1 version, I will not get this error.

Is this the best practice if I want to check this programatically?
On Thu, Mar 1, 2012 at 11:15 PM, aaron morton <aaron@thelastpickle.com> wrote:
use describe cluster in the CLI to see how many schema versions there are.=A0

Cheers

-----------------
Aaron Morton
Freelance Developer
@aaronmorton

On 2/03/2012, at 12:25 AM, Tharindu Mathew wrote:



On Thu, Mar 1, 2012 at 11:47 AM, Tharindu Mathew <mccloud35@gmail.com> wrote:
Jeremiah,

Thanks for the reply.

This is what we have been doing, but it's not reliable as we don't know a definite time tha= t the schema would get replicated. Is there any way I can know for sure that changes have propagated?
[Edit: corrected to a question]

Then I can block the insertion of data until then.


On Thu, Mar 1, 2012 at 4:33 AM, Jeremiah Jordan <JEREMIAH.JORDAN@morningstar.com> wrote:

The error is that the specified colum family doesn=92t exist.=A0 If you connect with the CLI and describe the keyspace does it show up?=A0 Also, after adding a new column family programmatically you can=92t use it immediately, you have to wait for it to propagate.=A0 You can use calls to describe schema to do so, keep calling it until every node is on the same schema.

=A0

-Jeremiah

=A0

From: Tharindu Mathew [mailto:mccloud35@gmail.com]
Sent: Wednesday, February 29, 2012 8:27 AM
To: user
Subject: Schema change causes exception when adding data

=A0

Hi,

I have a 3 node cluster and I'm dynamically updating a keyspace with a new column family. Then, when I try to write records to it I get the following exception shown at [1].

How do I avoid this. I'm using Hector and the default consistency level of QUORUM is used. Cassandra version 0.7.8. Replication Factor is 1.

How can I solve my problem?

[1] - me.prettyprint.hector.api.exc= eptions.HInvalidRequestException: InvalidRequestException(why:unconfigured columnfamily proxySummary)

at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(Excepti= onsTranslatorImpl.java:42)

at me.prettyprint.cassandra.service.KeyspaceServiceImpl$10.execute(KeyspaceSer= viceImpl.java:397)

at me.prettyprint.cassandra.service.KeyspaceServiceImpl$10.execute(KeyspaceSer= viceImpl.java:383)

at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.ja= va:101)

at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(= HConnectionManager.java:156)

at me.prettyprint.cassandra.service.KeyspaceServiceImpl.operateWithFailover(Ke= yspaceServiceImpl.java:129)

at me.prettyprint.cassandra.service.KeyspaceServiceImpl.multigetSlice(Keyspace= ServiceImpl.java:401)

at me.prettyprint.cassandra.model.thrift.ThriftMultigetSliceQuery$1.doInKeyspa= ce(ThriftMultigetSliceQuery.java:67)

at me.prettyprint.cassandra.model.thrift.ThriftMultigetSliceQuery$1.doInKeyspa= ce(ThriftMultigetSliceQuery.java:59)

at me.prettyprint.cassandra.model.KeyspaceOperationCallback.doInKeyspaceAndMea= sure(KeyspaceOperationCallback.java:20)

at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecute(ExecutingKeyspac= e.java:72)

at me.prettyprint.cassandra.model.thrift.ThriftMultigetSliceQuery.execute(Thri= ftMultigetSliceQuery.java:58)



--
Regards,

Tharindu

=A0

=A0




--
Regards,

Tharindu





--
Regards,

Tharindu






--
Regards,

Tharindu






--
Regards,

Tharind= u


--20cf303dd65445051b04baa2b160-- --20cf303dd65445051e04baa2b161 Content-Type: image/png; name="tokLogo.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_135b91fb888fa9ff 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 RK5CYII= --20cf303dd65445051e04baa2b161--