You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by mi...@apache.org on 2014/08/15 23:57:17 UTC
[02/11] git commit: CQLSH: wait up to 10 sec for a tracing session.
CQLSH: wait up to 10 sec for a tracing session.
patch by Mikhail Stepura; reviewed by Tyler Hobbs for CASSANDRA-7222
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/115bbe43
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/115bbe43
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/115bbe43
Branch: refs/heads/cassandra-2.0
Commit: 115bbe435b6fe2cef99acc1cde2aa86f809de15d
Parents: 563cea1
Author: Mikhail Stepura <mi...@apache.org>
Authored: Wed Aug 13 13:35:48 2014 -0700
Committer: Mikhail Stepura <mi...@apache.org>
Committed: Fri Aug 15 14:53:13 2014 -0700
----------------------------------------------------------------------
CHANGES.txt | 1 +
bin/cqlsh | 1 -
pylib/cqlshlib/tracing.py | 58 +++++++++++++++++++++++-------------------
3 files changed, 33 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/115bbe43/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e335484..987c227 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.0.10
+ * (cqlsh) Wait up to 10 sec for a tracing session (CASSANDRA-7222)
* Fix NPE in FileCacheService.sizeInBytes (CASSANDRA-7756)
* (cqlsh) cqlsh should automatically disable tracing when selecting
from system_traces (CASSANDRA-7641)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/115bbe43/bin/cqlsh
----------------------------------------------------------------------
diff --git a/bin/cqlsh b/bin/cqlsh
index 6aa397e..64d7bf5 100755
--- a/bin/cqlsh
+++ b/bin/cqlsh
@@ -911,7 +911,6 @@ class Shell(cmd.Cmd):
result = self.perform_statement_untraced(statement,
decoder=decoder,
with_default_limit=with_default_limit)
- time.sleep(0.5) # trace writes are async so we wait a little.
print_trace_session(self, self.cursor, session_id)
return result
else:
http://git-wip-us.apache.org/repos/asf/cassandra/blob/115bbe43/pylib/cqlshlib/tracing.py
----------------------------------------------------------------------
diff --git a/pylib/cqlshlib/tracing.py b/pylib/cqlshlib/tracing.py
index fe0f71e..6dd4b14 100644
--- a/pylib/cqlshlib/tracing.py
+++ b/pylib/cqlshlib/tracing.py
@@ -21,9 +21,10 @@ from cqlshlib.displaying import MAGENTA
TRACING_KS = 'system_traces'
SESSIONS_CF = 'sessions'
EVENTS_CF = 'events'
+MAX_WAIT = 10.0
def print_trace_session(shell, cursor, session_id):
- rows = fetch_trace_session(cursor, session_id)
+ rows = fetch_trace_session(cursor, session_id)
if not rows:
shell.printerr("Session %s wasn't found." % session_id)
return
@@ -41,35 +42,40 @@ def print_trace_session(shell, cursor, session_id):
shell.writeresult('')
def fetch_trace_session(cursor, session_id):
- cursor.execute("SELECT request, coordinator, started_at, duration "
- "FROM %s.%s "
- "WHERE session_id = %s" % (TRACING_KS, SESSIONS_CF, session_id),
- consistency_level='ONE')
- session = cursor.fetchone()
- if not session:
- return []
- (request, coordinator, started_at, duration) = session
- cursor.execute("SELECT activity, event_id, source, source_elapsed "
- "FROM %s.%s "
- "WHERE session_id = %s" % (TRACING_KS, EVENTS_CF, session_id),
- consistency_level='ONE')
- events = cursor.fetchall()
+ start = time.time()
+ while True:
+ time_spent = time.time() - start
+ if time_spent >= MAX_WAIT:
+ return []
+ cursor.execute("SELECT request, coordinator, started_at, duration "
+ "FROM %s.%s "
+ "WHERE session_id = %s" % (TRACING_KS, SESSIONS_CF, session_id),
+ consistency_level='ONE')
+ session = cursor.fetchone()
- rows = []
- # append header row (from sessions table).
- rows.append([request, format_timestamp(started_at), coordinator, 0])
- # append main rows (from events table).
- for activity, event_id, source, source_elapsed in events:
- rows.append([activity, format_timeuuid(event_id), source, source_elapsed])
- # append footer row (from sessions table).
- if duration:
+ if not session or session[3] is None: #session[3] is a duration
+ time.sleep(0.5)
+ continue
+
+ (request, coordinator, started_at, duration) = session
+ cursor.execute("SELECT activity, event_id, source, source_elapsed "
+ "FROM %s.%s "
+ "WHERE session_id = %s" % (TRACING_KS, EVENTS_CF, session_id),
+ consistency_level='ONE')
+ events = cursor.fetchall()
+
+ rows = []
+ # append header row (from sessions table).
+ rows.append([request, format_timestamp(started_at), coordinator, 0])
+ # append main rows (from events table).
+ for activity, event_id, source, source_elapsed in events:
+ rows.append([activity, format_timeuuid(event_id), source, source_elapsed])
+ # append footer row (from sessions table).
finished_at = format_timestamp(started_at + (duration / 1000000.))
- else:
- finished_at = duration = "--"
- rows.append(['Request complete', finished_at, coordinator, duration])
+ rows.append(['Request complete', finished_at, coordinator, duration])
- return rows
+ return rows
def format_timestamp(value):
return format_time(int(value * 1000))