incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Frederick Haebin Na <haebin...@gmail.com>
Subject Re: INSERT ... IF NOT EXISTS with some nodes unavailable
Date Tue, 03 Jun 2014 08:17:29 GMT
Hello Mitchell,

I think it is due to your replication factor, which, I assume, is 2 since
you have only 2 nodes in the cluster.
If you are using even number of nodes, Cassandra is impossible to run
queries require QUORUM participants.

So, I think you have to expand your cluster to 3 nodes and make replication
factor 3.
HTH

Haebin


2014-06-03 12:09 GMT+09:00 Ackerman, Mitchell <Mitchell.Ackerman@pgi.com>:

>  Hi, I’m trying to get a query using
>
>
>
>                INSERT ... IF NOT EXISTS
>
>
>
> working when not all of the nodes are available.  As a test case I have 2
> nodes, one in AWS us-west-1, another in AWS eu-west-1.  The keyspace
> settings are described below.  When I only have one of the nodes available,
> the insert fails with an UnavaliableException (via
> TokenRangeOfflineException, see below for details).
>
>
>
> From reading about the lightweight transactions (
> http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0)
> and the CQL expression, it looks like this scenario should be supported.
> Does anyone have any idea why it is not working?
>
>
>
> You will notice that I’m using Astyanax, could this be a source of
> problems for this use case?
>
>
>
> I presume that a Consistency Level of Serial is in use and that a quorum
> of 1 should suffice for a 2 node cache.
>
>
>
> Thanks, Mitchell
>
>
>
> conferenceassignmentcache
>
>
>
> replica_placement_strategy
> org.apache.cassandra.locator.NetworkTopologyStrategy
>
> Replication Strategy Options
>
> us-west                1
>
> eu-west               1
>
>
>
> CREATE TABLE conferenceassignmentcache.conferenceassignmentcache_cf (
>
>   id text PRIMARY KEY,
>
>   value text
>
> ) WITH
>
>   bloom_filter_fp_chance=0.010000 AND
>
>   caching='KEYS_ONLY' AND
>
>   comment='' AND
>
>   dclocal_read_repair_chance=0.000000 AND
>
>   gc_grace_seconds=864000 AND
>
>   read_repair_chance=0.100000 AND
>
>   replicate_on_write='true' AND
>
>   populate_io_cache_on_flush='false' AND
>
>   compaction={'class': 'SizeTieredCompactionStrategy'} AND
>
>   compression={'sstable_compression': 'LZ4Compressor'};
>
>
>
> When I try to INSERT a row with only one node available I get the
> following exception:
>
>
>
> 2014-06-02 20:57:59,947 [eventTaskExecutor-15] DEBUG
> [CassandraConferenceAssignmentManager.getInsertStatement() 53] - INSERT
> INTO conferenceassignmentcache_cf (id, value) VALUES (?, ?) IF NOT EXISTS
> USING TTL 60;
>
> 2014-06-02 20:58:00,084 [eventTaskExecutor-15] DEBUG
> [ThriftConverter.ToConnectionPoolException() 157] -
>
> 2014-06-02 20:58:00,086 [eventTaskExecutor-15] ERROR
> [CountingConnectionPoolMonitor.trackError() 94] -
> *com.netflix.astyanax.connectionpool.exceptions.TokenRangeOfflineException*:
> *TokenRangeOfflineException*: [host=cache.alpha.us-west-1.bobdev.com(10.89.0.37):9160,
> latency=137(137), attempts=1]UnavailableException()
>
> *com.netflix.astyanax.connectionpool.exceptions.TokenRangeOfflineException*:
> *TokenRangeOfflineException*: [host=cache.alpha.us-west-1.bobdev.com(10.89.0.37):9160,
> latency=137(137), attempts=1]UnavailableException()
>
>
>
> Caused by: UnavailableException()
>
>        at
> org.apache.cassandra.thrift.Cassandra$execute_prepared_cql3_query_result.read(Cassandra.java:41876)
>
>        at
> org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
>
>        at
> org.apache.cassandra.thrift.Cassandra$Client.recv_execute_prepared_cql3_query(Cassandra.java:1689)
>
>        at
> org.apache.cassandra.thrift.Cassandra$Client.execute_prepared_cql3_query(Cassandra.java:1674)
>
>        at
> com.netflix.astyanax.thrift.ThriftCql3Query.execute_prepared_cql_query(ThriftCql3Query.java:29)
>
>        at
> com.netflix.astyanax.thrift.AbstractThriftCqlQuery$3$1.internalExecute(AbstractThriftCqlQuery.java:93)
>
>        at
> com.netflix.astyanax.thrift.AbstractThriftCqlQuery$3$1.internalExecute(AbstractThriftCqlQuery.java:83)
>
>        at
> com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:60)
>
>        ... 35 more
>
>
>

Mime
View raw message