Makes it clear! Thank you Jonathan.
On Tue, Apr 19, 2011 at 7:02 PM, Jonathan Ellis <jbel...@gmail.com> wrote: > It doesn't make a lot of sense in general to allow those w/ non-NTS, > but it should be possible (e.g. if you've manually interleaved nodes > with ONTS so you know how many replicas are in each DC). > > Patch attached to https://issues.apache.org/jira/browse/CASSANDRA-2516 > > On Tue, Apr 19, 2011 at 8:39 PM, aaron morton <aa...@thelastpickle.com> wrote: >> You need to be using NTS. >> >> When NetworkTopologySetting is used it overrides the >> AbstractReplicationStrategy.getWriteResponseHandler() function in your stack >> and returns a either a DataCentreWriteResponseHandler for LOCAL_QUORUM or >> DatacenterSyncWriteResponseHandler for EACH_QUORUM . They are DC aware. >> >> Aaron >> >> >> On 20 Apr 2011, at 13:25, William Oberman wrote: >> >>> Good point, should have read your message (and the code) more closely! >>> >>> Sent from my iPhone >>> >>> On Apr 19, 2011, at 9:16 PM, Oleg Tsvinev <oleg.tsvi...@gmail.com> wrote: >>> >>>> I'm puzzled because code does not even check for LOCAL_QUORUM before >>>> throwing exception. >>>> Indeed I did not configure NetworkTopologyStrategy. Are you saying >>>> that it works after configuring it? >>>> >>>> On Tue, Apr 19, 2011 at 6:04 PM, William Oberman >>>> <ober...@civicscience.com> wrote: >>>>> I had a similar error today when I tried using LOCAL_QUORUM without >>>>> having a >>>>> properly configured NetworkTopologyStrategy. QUORUM worked fine however. >>>>> will >>>>> >>>>> On Tue, Apr 19, 2011 at 8:52 PM, Oleg Tsvinev <oleg.tsvi...@gmail.com> >>>>> wrote: >>>>>> >>>>>> Earlier I've posted the same message to a hector-users list. >>>>>> >>>>>> Guys, >>>>>> >>>>>> I'm a bit puzzled today. I'm using just released Hector 0.7.0-29 >>>>>> (thank you, Nate!) and Cassandra 0.7.4 and getting the exception >>>>>> below, marked as (1) Exception. When I dig to Cassandra source code >>>>>> below, marked as (2) Cassandra source, I see that there's no check for >>>>>> LOCAL_QUORUM. I also see that (3) cassandra.thrift defines >>>>>> LOCAL_QUORUM as enum value 3 and in debugger, I see that LOCAL_QUORUM >>>>>> is a valid enum value. >>>>>> >>>>>> My question is, how is it possible to use LOCAL_QUORUM if Cassandra >>>>>> code throws exception when it sees it? Is it a bad merge or something? >>>>>> I know it worked before, from looking at >>>>>> https://issues.apache.org/jira/browse/CASSANDRA-2254 >>>>>> >>>>>> :-\ >>>>>> >>>>>> (1) Exception: >>>>>> >>>>>> 2011-04-19 14:57:33,550 [pool-2-thread-49] ERROR >>>>>> org.apache.cassandra.thrift.Cassandra$Processor - Internal error >>>>>> processing batch_mutate >>>>>> java.lang.UnsupportedOperationException: invalid consistency level: >>>>>> LOCAL_QUORUM >>>>>> at >>>>>> org.apache.cassandra.service.WriteResponseHandler.determineBlockFor(WriteResponseHandler.java:99) >>>>>> at >>>>>> org.apache.cassandra.service.WriteResponseHandler.<init>(WriteResponseHandler.java:48) >>>>>> at >>>>>> org.apache.cassandra.service.WriteResponseHandler.create(WriteResponseHandler.java:61) >>>>>> at >>>>>> org.apache.cassandra.locator.AbstractReplicationStrategy.getWriteResponseHandler(AbstractReplicationStrategy.java:127) >>>>>> at >>>>>> org.apache.cassandra.service.StorageProxy.mutate(StorageProxy.java:115) >>>>>> at >>>>>> org.apache.cassandra.thrift.CassandraServer.doInsert(CassandraServer.java:415) >>>>>> at >>>>>> org.apache.cassandra.thrift.CassandraServer.batch_mutate(CassandraServer.java:388) >>>>>> at >>>>>> org.apache.cassandra.thrift.Cassandra$Processor$batch_mutate.process(Cassandra.java:3036) >>>>>> at >>>>>> org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:2555) >>>>>> at >>>>>> org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:206) >>>>>> 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:662) >>>>>> >>>>>> (2) Cassandra source (line 99 is throw statement) >>>>>> >>>>>> protected int determineBlockFor(String table) >>>>>> { >>>>>> int blockFor = 0; >>>>>> switch (consistencyLevel) >>>>>> { >>>>>> case ONE: >>>>>> blockFor = 1; >>>>>> break; >>>>>> case ANY: >>>>>> blockFor = 1; >>>>>> break; >>>>>> case TWO: >>>>>> blockFor = 2; >>>>>> break; >>>>>> case THREE: >>>>>> blockFor = 3; >>>>>> break; >>>>>> case QUORUM: >>>>>> blockFor = (writeEndpoints.size() / 2) + 1; >>>>>> break; >>>>>> case ALL: >>>>>> blockFor = writeEndpoints.size(); >>>>>> break; >>>>>> default: >>>>>> throw new UnsupportedOperationException("invalid >>>>>> consistency level: " + consistencyLevel.toString()); >>>>>> } >>>>>> // at most one node per range can bootstrap at a time, and >>>>>> these will be added to the write until >>>>>> // bootstrap finishes (at which point we no longer need to >>>>>> write to the old ones). >>>>>> assert 1 <= blockFor && blockFor <= 2 * >>>>>> Table.open(table).getReplicationStrategy().getReplicationFactor() >>>>>> : String.format("invalid response count %d for replication >>>>>> factor %d", >>>>>> blockFor, >>>>>> Table.open(table).getReplicationStrategy().getReplicationFactor()); >>>>>> return blockFor; >>>>>> } >>>>>> >>>>>> (3) cassandra.thrift: >>>>>> >>>>>> enum ConsistencyLevel { >>>>>> ONE = 1, >>>>>> QUORUM = 2, >>>>>> LOCAL_QUORUM = 3, >>>>>> EACH_QUORUM = 4, >>>>>> ALL = 5, >>>>>> ANY = 6, >>>>>> TWO = 7, >>>>>> THREE = 8, >>>>>> } >>>>> >>>>> >>>>> >>>>> -- >>>>> Will Oberman >>>>> Civic Science, Inc. >>>>> 3030 Penn Avenue., First Floor >>>>> Pittsburgh, PA 15201 >>>>> (M) 412-480-7835 >>>>> (E) ober...@civicscience.com >>>>> >> >> > > > > -- > Jonathan Ellis > Project Chair, Apache Cassandra > co-founder of DataStax, the source for professional Cassandra support > http://www.datastax.com >