2015-10-23 14 views
5

Sto utilizzando un singolo nodo Cassandra e intendo eseguire alcune query per verificare il tempo di risposta. In alcune query, dopo 10s di esecuzione viene in mente il seguente errore:OperationTimedOut: errors = {}, last_host = 127.0.0.1

OperationTimedOut: errors = {}, last_host = 127.0.0.1 

così mi sono imbattuto il seguente comando:

sudo gedit /usr/bin/cqlsh.py 

e cambiati cqlsh.py di 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 

Tuttavia, quando provo a eseguire nuovamente la query, cql restituisce lo stesso errore dopo 10 s:

OperationTimedOut: errors = {}, last_host = 127.0.0.1 

Cosa devo fare in modo che la query non abbia un timeout della risposta?

risposta

5

Stai eseguendo queste query in cqlsh?

In tal caso, si sta verificando il timeout della richiesta del client (non il timeout di connessione, né il timeout della richiesta di lettura lato server).

È possibile modificare il timeout predefinito impostando uno in ~/.cassandra/cqlshrc:

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

Vedi https://issues.apache.org/jira/browse/CASSANDRA-7516 per maggiori dettagli.

Vedo da un altro commento che si è già a conoscenza del paging. Questo sarà l'approccio migliore perché non richiede il marshalling dell'intero set di risultati in memoria a livello di dati e app.

+0

che è la directory che dovrei cambiare il timeout predefinito in ~/.cassandra/cqlshrc? Non riesco a trovare ... –

+1

Non intendo utilizzare il "paging" perché sto facendo un confronto tra prestazioni RDBMS e Cassandra. Intendo ottenere il risultato completo della query e controllare il tempo di risposta ... Con l'opzione "paging" penso che non sia possibile ... –

+1

Puoi metterlo sul percorso specificato (~/.cassandra/cqlshrc), o specificare un percorso alternativo sulla riga di comando cqlsh: https://github.com/apache/cassandra/blob/cassandra-2.2.3/ bin/cqlsh.py # L174 –

1

È necessario modificare il parametro read_request_timeout_in_ms nel file cassandra.yaml. E poi riavvia Cassandra.

+0

ho cambiato il [read_request_timeout] per '5000000' e l'errore continua. Sto lavorando con un nodo, quindi ho pensato di cambiare il file 'cqlsh.py' dovrebbe risolvere il problema ma non ... –

+0

Qual è la tua richiesta? – DineMartine

+0

Il file cassandra.yaml da modificare è quello del nodo e non quello del client cqlsh. E 'quello che hai fatto? Hai riavviato il nodo? – DineMartine

4

Vedrai una manciata di risposte che ti dicono come aumentare i vari timeout, ma la vera risposta è che non vorrai quasi mai aumentare quei timeout, perché se hai un vero set di dati, ucciderai il tuo server (o rilascia richieste/mutazioni) con molte query di lunga durata. Stai meglio usando le ricerche di paging e le query a esecuzione ridotta rispetto alle query lunghe e lunghe.

+1

Avevo bisogno del rilancio del timeout per l'ispezione interattiva durante l'analisi comparativa. Quindi la "vera risposta" è negli occhi di chi guarda ... ;-) –

6

L'ultima versione di cassandra consente di specificare il timeout cqlsh quando viene utilizzato, invece di dover modificare il file cqlshrc.

cqlsh --request-timeout <your-timeout>