merge from 1.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b320cd9c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b320cd9c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b320cd9c Branch: refs/heads/trunk Commit: b320cd9cdb9752780895e44fc1ab435571a920f9 Parents: 47ac42f 39a38e6 Author: Jonathan Ellis <[email protected]> Authored: Thu Jul 11 14:18:42 2013 -0500 Committer: Jonathan Ellis <[email protected]> Committed: Thu Jul 11 14:18:42 2013 -0500 ---------------------------------------------------------------------- CHANGES.txt | 2 + .../apache/cassandra/service/ReadCallback.java | 8 +++ .../apache/cassandra/service/StorageProxy.java | 61 ++++++++++++++++++-- .../cassandra/thrift/CassandraServer.java | 4 -- 4 files changed, 67 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b320cd9c/CHANGES.txt ---------------------------------------------------------------------- diff --cc CHANGES.txt index 4ede198,e1e3154..db74bec --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,81 -1,5 +1,82 @@@ +2.0 + * Removed on-heap row cache (CASSANDRA-5348) + * use nanotime consistently for node-local timeouts (CASSANDRA-5581) + * Avoid unnecessary second pass on name-based queries (CASSANDRA-5577) + * Experimental triggers (CASSANDRA-1311) + * JEMalloc support for off-heap allocation (CASSANDRA-3997) + * Single-pass compaction (CASSANDRA-4180) + * Removed token range bisection (CASSANDRA-5518) + * Removed compatibility with pre-1.2.5 sstables and network messages + (CASSANDRA-5511) + * removed PBSPredictor (CASSANDRA-5455) + * CAS support (CASSANDRA-5062, 5441, 5442, 5443, 5619, 5667) + * Leveled compaction performs size-tiered compactions in L0 + (CASSANDRA-5371, 5439) + * Add yaml network topology snitch for mixed ec2/other envs (CASSANDRA-5339) + * Log when a node is down longer than the hint window (CASSANDRA-4554) + * Optimize tombstone creation for ExpiringColumns (CASSANDRA-4917) + * Improve LeveledScanner work estimation (CASSANDRA-5250, 5407) + * Replace compaction lock with runWithCompactionsDisabled (CASSANDRA-3430) + * Change Message IDs to ints (CASSANDRA-5307) + * Move sstable level information into the Stats component, removing the + need for a separate Manifest file (CASSANDRA-4872) + * avoid serializing to byte[] on commitlog append (CASSANDRA-5199) + * make index_interval configurable per columnfamily (CASSANDRA-3961, CASSANDRA-5650) + * add default_time_to_live (CASSANDRA-3974) + * add memtable_flush_period_in_ms (CASSANDRA-4237) + * replace supercolumns internally by composites (CASSANDRA-3237, 5123) + * upgrade thrift to 0.9.0 (CASSANDRA-3719) + * drop unnecessary keyspace parameter from user-defined compaction API + (CASSANDRA-5139) + * more robust solution to incomplete compactions + counters (CASSANDRA-5151) + * Change order of directory searching for c*.in.sh (CASSANDRA-3983) + * Add tool to reset SSTable compaction level for LCS (CASSANDRA-5271) + * Allow custom configuration loader (CASSANDRA-5045) + * Remove memory emergency pressure valve logic (CASSANDRA-3534) + * Reduce request latency with eager retry (CASSANDRA-4705) + * cqlsh: Remove ASSUME command (CASSANDRA-5331) + * Rebuild BF when loading sstables if bloom_filter_fp_chance + has changed since compaction (CASSANDRA-5015) + * remove row-level bloom filters (CASSANDRA-4885) + * Change Kernel Page Cache skipping into row preheating (disabled by default) + (CASSANDRA-4937) + * Improve repair by deciding on a gcBefore before sending + out TreeRequests (CASSANDRA-4932) + * Add an official way to disable compactions (CASSANDRA-5074) + * Reenable ALTER TABLE DROP with new semantics (CASSANDRA-3919) + * Add binary protocol versioning (CASSANDRA-5436) + * Swap THshaServer for TThreadedSelectorServer (CASSANDRA-5530) + * Add alias support to SELECT statement (CASSANDRA-5075) + * Don't create empty RowMutations in CommitLogReplayer (CASSANDRA-5541) + * Use range tombstones when dropping cfs/columns from schema (CASSANDRA-5579) + * cqlsh: drop CQL2/CQL3-beta support (CASSANDRA-5585) + * Track max/min column names in sstables to be able to optimize slice + queries (CASSANDRA-5514, CASSANDRA-5595, CASSANDRA-5600) + * Binary protocol: allow batching already prepared statements (CASSANDRA-4693) + * Allow preparing timestamp, ttl and limit in CQL3 queries (CASSANDRA-4450) + * Support native link w/o JNA in Java7 (CASSANDRA-3734) + * Use SASL authentication in binary protocol v2 (CASSANDRA-5545) + * Replace Thrift HsHa with LMAX Disruptor based implementation (CASSANDRA-5582) + * cqlsh: Add row count to SELECT output (CASSANDRA-5636) + * Include a timestamp with all read commands to determine column expiration + (CASSANDRA-5149) + * Streaming 2.0 (CASSANDRA-5286, 5699) + * Conditional create/drop ks/table/index statements in CQL3 (CASSANDRA-2737) + * more pre-table creation property validation (CASSANDRA-5693) + * Redesign repair messages (CASSANDRA-5426) + * Fix ALTER RENAME post-5125 (CASSANDRA-5702) + * Disallow renaming a 2ndary indexed column (CASSANDRA-5705) + * Rename Table to Keyspace (CASSANDRA-5613) + * Ensure changing column_index_size_in_kb on different nodes don't corrupt the + sstable (CASSANDRA-5454) + * Move resultset type information into prepare, not execute (CASSANDRA-5649) + * Auto paging in binary protocol (CASSANDRA-4415, 5714) + * Don't tie client side use of AbstractType to JDBC (CASSANDRA-4495) + * Adds new TimestampType to replace DateType (CASSANDRA-5723, CASSANDRA-5729) + * Allow nodetool with no args, and with help to run without a server (CASSANDRA-5734) + 1.2.7 + * Add timeout events to query traces (CASSANDRA-5520) * make starting native protocol server idempotent (CASSANDRA-5728) * Fix loading key cache when a saved entry is no longer valid (CASSANDRA-5706) * Fix serialization of the LEFT gossip value (CASSANDRA-5696) http://git-wip-us.apache.org/repos/asf/cassandra/blob/b320cd9c/src/java/org/apache/cassandra/service/ReadCallback.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b320cd9c/src/java/org/apache/cassandra/service/StorageProxy.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/service/StorageProxy.java index 763e86a,28e2af5..ee1e29a --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@@ -1169,18 -911,37 +1169,38 @@@ public class StorageProxy implements St // read results and make a second pass for any digest mismatches List<ReadCommand> repairCommands = null; List<ReadCallback<ReadResponse, Row>> repairResponseHandlers = null; - for (int i = 0; i < commands.size(); i++) + for (AbstractReadExecutor exec: readExecutors) { - ReadCallback<ReadResponse, Row> handler = readCallbacks[i]; - ReadCommand command = commands.get(i); try { - Row row = handler.get(); + Row row = exec.get(); if (row != null) { - command.maybeTrim(row); + exec.command.maybeTrim(row); rows.add(row); } + if (logger.isDebugEnabled()) + logger.debug("Read: {} ms.", TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - exec.handler.start)); ++ + } + catch (ReadTimeoutException ex) + { - int blockFor = consistency_level.blockFor(Table.open(command.getKeyspace())); - int responseCount = handler.getReceivedCount(); - String gotData = responseCount > 0 ? - gotData = handler.resolver.isDataPresent() ? " (including data)" : " (only digests)" : - ""; ++ int blockFor = consistency_level.blockFor(Keyspace.open(exec.command.getKeyspace())); ++ int responseCount = exec.handler.getReceivedCount(); ++ String gotData = responseCount > 0 ++ ? exec.resolver.isDataPresent() ? " (including data)" : " (only digests)" ++ : ""; + + if (Tracing.isTracing()) + { + Tracing.trace("Timed out; received {} of {} responses{}", + new Object[]{ responseCount, blockFor, gotData }); + } + else if (logger.isDebugEnabled()) + { + logger.debug("Read timeout; received {} of {} responses{}", responseCount, blockFor, gotData); + } + throw ex; } catch (DigestMismatchException ex) { @@@ -1239,7 -1000,8 +1259,8 @@@ } catch (TimeoutException e) { + Tracing.trace("Timed out on digest mismatch retries"); - int blockFor = consistency_level.blockFor(Table.open(command.getKeyspace())); + int blockFor = consistency_level.blockFor(Keyspace.open(command.getKeyspace())); throw new ReadTimeoutException(consistency_level, blockFor, blockFor, true); } @@@ -1436,11 -1208,35 +1457,35 @@@ } FBUtilities.waitOnFutures(resolver.repairResults, DatabaseDescriptor.getWriteRpcTimeout()); } + catch (ReadTimeoutException ex) + { + // we timed out waiting for responses - int blockFor = consistency_level.blockFor(table); ++ int blockFor = consistency_level.blockFor(keyspace); + int responseCount = resolver.responses.size(); - String gotData = responseCount > 0 ? - resolver.isDataPresent() ? " (including data)" : " (only digests)" : - ""; ++ String gotData = responseCount > 0 ++ ? resolver.isDataPresent() ? " (including data)" : " (only digests)" ++ : ""; + + if (Tracing.isTracing()) + { + Tracing.trace("Timed out; received {} of {} responses{} for range {} of {}", - new Object[]{ responseCount, blockFor, gotData, i, ranges.size() }); ++ new Object[]{ responseCount, blockFor, gotData, i, ranges.size() }); + } + else if (logger.isDebugEnabled()) + { + logger.debug("Range slice timeout; received {} of {} responses{} for range {} of {}", - responseCount, blockFor, gotData, i, ranges.size()); ++ responseCount, blockFor, gotData, i, ranges.size()); + } + throw ex; + } catch (TimeoutException ex) { - logger.debug("Range slice timeout: {}", ex.toString()); - // We actually got all response at that point + // We got all responses, but timed out while repairing - int blockFor = consistency_level.blockFor(table); + int blockFor = consistency_level.blockFor(keyspace); + if (Tracing.isTracing()) + Tracing.trace("Timed out while read-repairing after receiving all {} data and digest responses", blockFor); + else + logger.debug("Range slice timeout while read-repairing after receiving all {} data and digest responses", blockFor); throw new ReadTimeoutException(consistency_level, blockFor, blockFor, true); } catch (DigestMismatchException e) http://git-wip-us.apache.org/repos/asf/cassandra/blob/b320cd9c/src/java/org/apache/cassandra/thrift/CassandraServer.java ----------------------------------------------------------------------
