Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 edbd7d392 -> cc2f45237
cqlsh: allow COPY FROM to be interrupted with ctrl-c Patch by Tyler Hobbs; review by Mikhail Stepura for CASSANDRA-7815 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/cc2f4523 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/cc2f4523 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/cc2f4523 Branch: refs/heads/cassandra-2.1 Commit: cc2f45237aeed66d73893e4f7f4c04e4c9c16cfb Parents: edbd7d3 Author: Tyler Hobbs <ty...@datastax.com> Authored: Thu Aug 21 16:06:34 2014 -0500 Committer: Tyler Hobbs <ty...@datastax.com> Committed: Thu Aug 21 16:06:34 2014 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + pylib/cqlshlib/async_insert.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/cc2f4523/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 80eb279..fc6c942 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.1 + * (cqlsh) Don't ignore CTRL-C during COPY FROM execution (CASSANDRA-7815) * (cqlsh) Order UDTs according to cross-type dependencies in DESCRIBE output (CASSANDRA-7659) * (cqlsh) Fix handling of CAS statement results (CASSANDRA-7671) http://git-wip-us.apache.org/repos/asf/cassandra/blob/cc2f4523/pylib/cqlshlib/async_insert.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/async_insert.py b/pylib/cqlshlib/async_insert.py index 145b0d6..a4adcd2 100644 --- a/pylib/cqlshlib/async_insert.py +++ b/pylib/cqlshlib/async_insert.py @@ -33,7 +33,9 @@ class _CountDownLatch(object): def await(self): with self._lock: while self._count > 0: - self._lock.wait() + # use a timeout so that the main thread wakes up occasionally + # so it can see keyboard interrupts (CASSANDRA-7815) + self._lock.wait(0.5) class _ChainedWriter(object): @@ -57,7 +59,13 @@ class _ChainedWriter(object): for i in xrange(self.CONCURRENCY): self._execute_next(self._sentinel, 0) - self._task_counter.await() + try: + self._task_counter.await() + except KeyboardInterrupt: + self._cancellation_event.set() + sys.stdout.write('Aborting due to keyboard interrupt\n') + self._task_counter.await() + return next(self._num_finished), self._first_error def _abort(self, error, failed_record):