incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marcelo Elias Del Valle <marc...@s1mbi0se.com.br>
Subject Re: python cql driver - cassandra.ReadTimeout - “Operation timed out - received only 1 responses.”
Date Wed, 04 Jun 2014 00:18:04 GMT
Indeed Alex, the problem was in the rpc timeouts on the server...
Thanks a lot, it's simple but I was losing time thinking my client config
was wrong!
[]s


2014-06-02 18:15 GMT-03:00 Alex Popescu <alexp@datastax.com>:

> If I'm reading this correctly, what you are seeing is the read_timeout on
> Cassandra side and not the client side timeout. Even if you set the client
> side timeouts, the C* read & write timeouts are still respected on that
> side.
>
>
> On Mon, Jun 2, 2014 at 10:55 AM, Marcelo Elias Del Valle <
> marcelo@s1mbi0se.com.br> wrote:
>
>> I am using Cassandra 2.0 with python CQL.
>>
>> I have created a column family as follows:
>>
>> CREATE KEYSPACE IF NOT EXISTS Identification
>>   WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy',
>>   'DC1' : 1 };
>>
>> USE Identification;
>>
>> CREATE TABLE IF NOT EXISTS entitylookup (
>>   name varchar,
>>   value varchar,
>>   entity_id uuid,
>>   PRIMARY KEY ((name, value), entity_id))
>> WITH
>>     caching=all;
>>
>> I then try to count the number of records in this CF as follows:
>>
>> #!/usr/bin/env pythonimport argparseimport sysimport tracebackfrom cassandra import
ConsistencyLevelfrom cassandra.cluster import Clusterfrom cassandra.query import SimpleStatement
>> def count(host, cf):
>>     keyspace = "identification"
>>     cluster = Cluster([host], port=9042, control_connection_timeout=600000000)
>>     session = cluster.connect(keyspace)
>>     session.default_timeout=600000000
>>
>>     st = SimpleStatement("SELECT count(*) FROM %s" % cf, consistency_level=ConsistencyLevel.ALL)
>>     for row in session.execute(st, timeout=600000000):
>>         print "count for cf %s = %s " % (cf, str(row))
>>     dump_pool.close()
>>     dump_pool.join()
>> if __name__ == "__main__":
>>     parser = argparse.ArgumentParser()
>>     parser.add_argument("-cf", "--column-family", default="entitylookup", help="Column
Family to query")
>>     parser.add_argument("-H", "--host", default="localhost", help="Cassandra host")
>>     args = parser.parse_args()
>>
>>     count(args.host, args.column_family)
>>
>>     print "fim"
>>
>>  The count is not that useful to me, it's just a test with an operation
>> that takes long to complete.
>>
>> Although I have defined timeout as 600000000 seconds, after less than 30
>> seconds I get the following error:
>>
>> ./count_entity_lookup.py  -H localhost -cf entitylookup
>>     Traceback (most recent call last):
>>       File "./count_entity_lookup.py", line 27, in <module>
>>         count(args.host, args.column_family)
>>       File "./count_entity_lookup.py", line 16, in count
>>         for row in session.execute(st, timeout=None):
>>       File "/home/mvalle/pyenv0/local/lib/python2.7/site-packages/cassandra/cluster.py",
line 1026, in execute
>>         result = future.result(timeout)
>>       File "/home/mvalle/pyenv0/local/lib/python2.7/site-packages/cassandra/cluster.py",
line 2300, in result
>>         raise self._final_exception
>>     cassandra.ReadTimeout: code=1200 [Timeout during read request] message="Operation
timed out - received only 1 responses." info={'received_responses': 1, 'data_retrieved': True,
'required_responses': 2, 'consistency': 5}
>>
>>  It seems the answer was found in just a replica, but this really doesn't
>> make sense to me. Should't cassandra be able to query it anyway?
>>
>> These tests are running in a two node cluster, with RF = 2, write and
>> read consistency = ALL (but same results using QUORUM).
>>
>> Thanks in advance.
>>
>> Best regards,
>>
>> Marcelo.
>>
>
>
>
> --
>
> :- a)
>
>
> Alex Popescu
> Sen. Product Manager @ DataStax
> @al3xandru
>

Mime
View raw message