Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OperationTimedOut: errors={}, last_host=127.0.0.1

I am using a single node Cassandra and I intend to run some queries in order to check the response time. In some queries, after 10s of execution occurs to me the following error:

OperationTimedOut: errors = {}, last_host = 127.0.0.1

So I ran the following command:

sudo gedit /usr/bin/cqlsh.py

And changed cqlsh.py file:

# cqlsh should run correctly when run out of a Cassandra source tree,
# out of an unpacked Cassandra tarball, and after a proper package install.
cqlshlibdir = os.path.join(CASSANDRA_PATH, 'pylib')
if os.path.isdir(cqlshlibdir):
    sys.path.insert(0, cqlshlibdir)

from cqlshlib import cql3handling, cqlhandling, pylexotron, sslhandling
from cqlshlib.displaying import (ANSI_RESET, BLUE, COLUMN_NAME_COLORS, CYAN,
                                 RED, FormattedValue, colorme)

from cqlshlib.formatting import (DEFAULT_DATE_FORMAT, DEFAULT_NANOTIME_FORMAT,
                                 DEFAULT_TIMESTAMP_FORMAT, DateTimeFormat,
                                 format_by_type, format_value_utype,
                                 formatter_for)

from cqlshlib.tracing import print_trace, print_trace_session
from cqlshlib.util import get_file_encoding_bomsize, trim_if_present

DEFAULT_HOST = '127.0.0.1'
DEFAULT_PORT = 9042
DEFAULT_CQLVER = '3.3.1'
DEFAULT_PROTOCOL_VERSION = 4
DEFAULT_CONNECT_TIMEOUT_SECONDS = 240

DEFAULT_FLOAT_PRECISION = 5
DEFAULT_MAX_TRACE_WAIT = 300

However, when I try to run the query again, cql return the same error after 10s:

OperationTimedOut: errors = {}, last_host = 127.0.0.1

What I have to do so that the query has no answer timeout?

like image 636
Pedro Cunha Avatar asked Oct 23 '15 16:10

Pedro Cunha


4 Answers

The latest version of cassandra allows you to specify cqlsh timeout when you use it, instead of having to edit your cqlshrc file.

cqlsh --request-timeout <your-timeout>

like image 179
Alberto Rivera Avatar answered Oct 16 '22 23:10

Alberto Rivera


Are you executing these queries in cqlsh?

If so, you are hitting the client request timeout (not the connect timeout, nor the server-side read request timeout).

You can change the default timeout by setting one in ~/.cassandra/cqlshrc:

[connection]
client_timeout = 20
# Can also be set to None to disable:
# client_timeout = None

See https://issues.apache.org/jira/browse/CASSANDRA-7516 for more detail.

I see from another comment you are already aware of paging. This will be the best approach because it does not require you to marshal the entire result set in memory at the data and app tiers.

like image 42
Adam Holmberg Avatar answered Oct 16 '22 23:10

Adam Holmberg


You'll see a handful of responses telling you how to raise the various timeouts, but the real answer is that you almost never want to raise those timeouts, because if you have a real data set, you will kill your server (or drop requests/mutations) with lots of long-running queries. You are better off using paging and more short-running queries than huge, long running queries.

like image 4
Jeff Jirsa Avatar answered Oct 16 '22 22:10

Jeff Jirsa


You have to change the read_request_timeout_in_ms parameter in the cassandra.yaml file. And then restart Cassandra.

like image 1
Adrien Piquerez Avatar answered Oct 16 '22 22:10

Adrien Piquerez