3.10
 * Create compaction-stress tool (CASSANDRA-11844)
 * Garbage-collecting compaction operation and schema option (CASSANDRA-7019)
 * Add schema to snapshot manifest, add USING TIMESTAMP clause to ALTER TABLE statements (CASSANDRA-7190)
 * Add beta protocol flag for v5 native protocol (CASSANDRA-12142)
 * Support filtering on non-PRIMARY KEY columns in the CREATE
   MATERIALIZED VIEW statement's WHERE clause (CASSANDRA-10368)
 * Unify STDOUT and SYSTEMLOG logback format (CASSANDRA-12004)
 * COPY FROM should raise error for non-existing input files (CASSANDRA-12174)
 * Faster write path (CASSANDRA-12269)
 * Option to leave omitted columns in INSERT JSON unset (CASSANDRA-11424)
 * Support json/yaml output in nodetool tpstats (CASSANDRA-12035)
 * Expose metrics for successful/failed authentication attempts (CASSANDRA-10635)
 * Prepend snapshot name with "truncated" or "dropped" when a snapshot
   is taken before truncating or dropping a table (CASSANDRA-12178)
 * Optimize RestrictionSet (CASSANDRA-12153)
 * cqlsh does not automatically downgrade CQL version (CASSANDRA-12150)
 * Omit (de)serialization of state variable in UDAs (CASSANDRA-9613)
 * Create a system table to expose prepared statements (CASSANDRA-8831)
 * Reuse DataOutputBuffer from ColumnIndex (CASSANDRA-11970)
 * Remove DatabaseDescriptor dependency from SegmentedFile (CASSANDRA-11580)
 * Add supplied username to authentication error messages (CASSANDRA-12076)
 * Remove pre-startup check for open JMX port (CASSANDRA-12074)
 * Remove compaction Severity from DynamicEndpointSnitch (CASSANDRA-11738)


3.9
 * cqlsh: Fix handling of $$-escaped strings (CASSANDRA-12189)
 * Fix SSL JMX requiring truststore containing server cert (CASSANDRA-12109)
Merged from 3.0:
 * Rerun ReplicationAwareTokenAllocatorTest on failure to avoid flakiness (CASSANDRA-12277)
 * Exception when computing read-repair for range tombstones (CASSANDRA-12263)
 * Lost counter writes in compact table and static columns (CASSANDRA-12219)
 * AssertionError with MVs on updating a row that isn't indexed due to a null value (CASSANDRA-12247)
 * Disable RR and speculative retry with EACH_QUORUM reads (CASSANDRA-11980)
 * Add option to override compaction space check (CASSANDRA-12180)
 * Faster startup by only scanning each directory for temporary files once (CASSANDRA-12114)
 * Respond with v1/v2 protocol header when responding to driver that attempts
   to connect with too low of a protocol version (CASSANDRA-11464)
 * NullPointerExpception when reading/compacting table (CASSANDRA-11988)
 * Fix problem with undeleteable rows on upgrade to new sstable format (CASSANDRA-12144)
Merged from 2.2:
 * Wait for tracing events before returning response and query at same consistency level client side (CASSANDRA-11465)
 * cqlsh copyutil should get host metadata by connected address (CASSANDRA-11979)
 * Fixed cqlshlib.test.remove_test_db (CASSANDRA-12214)
Merged from 2.1:
 * cannot use cql since upgrading python to 2.7.11+ (CASSANDRA-11850)
 * Allow STCS-in-L0 compactions to reduce scope with LCS (CASSANDRA-12040)

3.8
 * Fix hdr logging for single operation workloads (CASSANDRA-12145)
 * Fix SASI PREFIX search in CONTAINS mode with partial terms (CASSANDRA-12073)
 * Increase size of flushExecutor thread pool (CASSANDRA-12071)
 * Partial revert of CASSANDRA-11971, cannot recycle buffer in SP.sendMessagesToNonlocalDC (CASSANDRA-11950)
 * Upgrade netty to 4.0.39 (CASSANDRA-12032, CASSANDRA-12034)
 * Improve details in compaction log message (CASSANDRA-12080)
 * Allow unset values in CQLSSTableWriter (CASSANDRA-11911)
 * Chunk cache to request compressor-compatible buffers if pool space is exhausted (CASSANDRA-11993)
 * Remove DatabaseDescriptor dependencies from SequentialWriter (CASSANDRA-11579)
 * Move skip_stop_words filter before stemming (CASSANDRA-12078)
 * Support seek() in EncryptedFileSegmentInputStream (CASSANDRA-11957)
 * SSTable tools mishandling LocalPartitioner (CASSANDRA-12002)
 * When SEPWorker assigned work, set thread name to match pool (CASSANDRA-11966)
 * Add cross-DC latency metrics (CASSANDRA-11596)
 * Allow terms in selection clause (CASSANDRA-10783)
 * Add bind variables to trace (CASSANDRA-11719)
 * Switch counter shards' clock to timestamps (CASSANDRA-9811)
 * Introduce HdrHistogram and response/service/wait separation to stress tool (CASSANDRA-11853)
 * entry-weighers in QueryProcessor should respect partitionKeyBindIndexes field (CASSANDRA-11718)
 * Support older ant versions (CASSANDRA-11807)
 * Estimate compressed on disk size when deciding if sstable size limit reached (CASSANDRA-11623)
 * cassandra-stress profiles should support case sensitive schemas (CASSANDRA-11546)
 * Remove DatabaseDescriptor dependency from FileUtils (CASSANDRA-11578)
 * Faster streaming (CASSANDRA-9766)
 * Add prepared query parameter to trace for "Execute CQL3 prepared query" session (CASSANDRA-11425)
 * Add repaired percentage metric (CASSANDRA-11503)
 * Add Change-Data-Capture (CASSANDRA-8844)
Merged from 3.0:
 * Fix paging logic for deleted partitions with static columns (CASSANDRA-12107)
 * Wait until the message is being send to decide which serializer must be used (CASSANDRA-11393)
 * Fix migration of static thrift column names with non-text comparators (CASSANDRA-12147)
 * Fix upgrading sparse tables that are incorrectly marked as dense (CASSANDRA-11315)
 * Fix reverse queries ignoring range tombstones (CASSANDRA-11733)
 * Avoid potential race when rebuilding CFMetaData (CASSANDRA-12098)
 * Avoid missing sstables when getting the canonical sstables (CASSANDRA-11996)
 * Always select the live sstables when getting sstables in bounds (CASSANDRA-11944)
 * Fix column ordering of results with static columns for Thrift requests in
   a mixed 2.x/3.x cluster, also fix potential non-resolved duplication of
   those static columns in query results (CASSANDRA-12123)
 * Avoid digest mismatch with empty but static rows (CASSANDRA-12090)
 * Fix EOF exception when altering column type (CASSANDRA-11820)
 * cqlsh: fix error handling in rare COPY FROM failure scenario (CASSANDRA-12070)
 * Disable autocompaction during drain (CASSANDRA-11878)
 * Add a metrics timer to MemtablePool and use it to track time spent blocked on memory in MemtableAllocator (CASSANDRA-11327)
 * Fix upgrading schema with super columns with non-text subcomparators (CASSANDRA-12023)
 * Add TimeWindowCompactionStrategy (CASSANDRA-9666)
Merged from 2.2:
 * Synchronize ThriftServer::stop() (CASSANDRA-12105)
 * Use dedicated thread for JMX notifications (CASSANDRA-12146)
 * Improve streaming synchronization and fault tolerance (CASSANDRA-11414)
 * MemoryUtil.getShort() should return an unsigned short also for architectures not supporting unaligned memory accesses (CASSANDRA-11973)
 * Allow nodetool info to run with readonly JMX access (CASSANDRA-11755)
 * Validate bloom_filter_fp_chance against lowest supported
   value when the table is created (CASSANDRA-11920)
 * Don't send erroneous NEW_NODE notifications on restart (CASSANDRA-11038)
 * StorageService shutdown hook should use a volatile variable (CASSANDRA-11984)
Merged from 2.1:
 * Fix filtering on clustering columns when 2i is used (CASSANDRA-11907)
 * Avoid stalling paxos when the paxos state expires (CASSANDRA-12043)
 * Remove finished incoming streaming connections from MessagingService (CASSANDRA-11854)
 * Don't try to get sstables for non-repairing column families (CASSANDRA-12077)
 * Avoid marking too many sstables as repaired (CASSANDRA-11696)
 * Prevent select statements with clustering key > 64k (CASSANDRA-11882)
 * Fix clock skew corrupting other nodes with paxos (CASSANDRA-11991)
 * Remove distinction between non-existing static columns and existing but null in LWTs (CASSANDRA-9842)
 * Cache local ranges when calculating repair neighbors (CASSANDRA-11934)
 * Allow LWT operation on static column with only partition keys (CASSANDRA-10532)
 * Create interval tree over canonical sstables to avoid missing sstables during streaming (CASSANDRA-11886)
 * cqlsh COPY FROM: shutdown parent cluster after forking, to avoid corrupting SSL connections (CASSANDRA-11749)


3.7
 * Support multiple folders for user defined compaction tasks (CASSANDRA-11765)
 * Fix race in CompactionStrategyManager's pause/resume (CASSANDRA-11922)
Merged from 3.0:
 * Fix legacy serialization of Thrift-generated non-compound range tombstones
   when communicating with 2.x nodes (CASSANDRA-11930)
 * Fix Directories instantiations where CFS.initialDirectories should be used (CASSANDRA-11849)
 * Avoid referencing DatabaseDescriptor in AbstractType (CASSANDRA-11912)
 * Don't use static dataDirectories field in Directories instances (CASSANDRA-11647)
 * Fix sstables not being protected from removal during index build (CASSANDRA-11905)
 * cqlsh: Suppress stack trace from Read/WriteFailures (CASSANDRA-11032)
 * Remove unneeded code to repair index summaries that have
   been improperly down-sampled (CASSANDRA-11127)
 * Avoid WriteTimeoutExceptions during commit log replay due to materialized
   view lock contention (CASSANDRA-11891)
 * Prevent OOM failures on SSTable corruption, improve tests for corruption detection (CASSANDRA-9530)
 * Use CFS.initialDirectories when clearing snapshots (CASSANDRA-11705)
 * Allow compaction strategies to disable early open (CASSANDRA-11754)
 * Refactor Materialized View code (CASSANDRA-11475)
 * Update Java Driver (CASSANDRA-11615)
Merged from 2.2:
 * Persist local metadata earlier in startup sequence (CASSANDRA-11742)
 * cqlsh: fix tab completion for case-sensitive identifiers (CASSANDRA-11664)
 * Avoid showing estimated key as -1 in tablestats (CASSANDRA-11587)
 * Fix possible race condition in CommitLog.recover (CASSANDRA-11743)
 * Enable client encryption in sstableloader with cli options (CASSANDRA-11708)
 * Possible memory leak in NIODataInputStream (CASSANDRA-11867)
 * Add seconds to cqlsh tracing session duration (CASSANDRA-11753)
 * Fix commit log replay after out-of-order flush completion (CASSANDRA-9669)
 * Prohibit Reversed Counter type as part of the PK (CASSANDRA-9395)
 * cqlsh: correctly handle non-ascii chars in error messages (CASSANDRA-11626)
Merged from 2.1:
 * Run CommitLog tests with different compression settings (CASSANDRA-9039)
 * cqlsh: apply current keyspace to source command (CASSANDRA-11152)
 * Clear out parent repair session if repair coordinator dies (CASSANDRA-11824)
 * Set default streaming_socket_timeout_in_ms to 24 hours (CASSANDRA-11840)
 * Do not consider local node a valid source during replace (CASSANDRA-11848)
 * Add message dropped tasks to nodetool netstats (CASSANDRA-11855)
 * Avoid holding SSTableReaders for duration of incremental repair (CASSANDRA-11739)


3.6
 * Correctly migrate schema for frozen UDTs during 2.x -> 3.x upgrades
   (does not affect any released versions) (CASSANDRA-11613)
 * Allow server startup if JMX is configured directly (CASSANDRA-11725)
 * Prevent direct memory OOM on buffer pool allocations (CASSANDRA-11710)
 * Enhanced Compaction Logging (CASSANDRA-10805)
 * Make prepared statement cache size configurable (CASSANDRA-11555)
 * Integrated JMX authentication and authorization (CASSANDRA-10091)
 * Add units to stress ouput (CASSANDRA-11352)
 * Fix PER PARTITION LIMIT for single and multi partitions queries (CASSANDRA-11603)
 * Add uncompressed chunk cache for RandomAccessReader (CASSANDRA-5863)
 * Clarify ClusteringPrefix hierarchy (CASSANDRA-11213)
 * Always perform collision check before joining ring (CASSANDRA-10134)
 * SSTableWriter output discrepancy (CASSANDRA-11646)
 * Fix potential timeout in NativeTransportService.testConcurrentDestroys (CASSANDRA-10756)
 * Support large partitions on the 3.0 sstable format (CASSANDRA-11206,11763)
 * Add support to rebuild from specific range (CASSANDRA-10406)
 * Optimize the overlapping lookup by calculating all the
   bounds in advance (CASSANDRA-11571)
 * Support json/yaml output in nodetool tablestats (CASSANDRA-5977)
 * (stress) Add datacenter option to -node options (CASSANDRA-11591)
 * Fix handling of empty slices (CASSANDRA-11513)
 * Make number of cores used by cqlsh COPY visible to testing code (CASSANDRA-11437)
 * Allow filtering on clustering columns for queries without secondary indexes (CASSANDRA-11310)
 * Refactor Restriction hierarchy (CASSANDRA-11354)
 * Eliminate allocations in R/W path (CASSANDRA-11421)
 * Update Netty to 4.0.36 (CASSANDRA-11567)
 * Fix PER PARTITION LIMIT for queries requiring post-query ordering (CASSANDRA-11556)
 * Allow instantiation of UDTs and tuples in UDFs (CASSANDRA-10818)
 * Support UDT in CQLSSTableWriter (CASSANDRA-10624)
 * Support for non-frozen user-defined types, updating
   individual fields of user-defined types (CASSANDRA-7423)
 * Make LZ4 compression level configurable (CASSANDRA-11051)
 * Allow per-partition LIMIT clause in CQL (CASSANDRA-7017)
 * Make custom filtering more extensible with UserExpression (CASSANDRA-11295)
 * Improve field-checking and error reporting in cassandra.yaml (CASSANDRA-10649)
 * Print CAS stats in nodetool proxyhistograms (CASSANDRA-11507)
 * More user friendly error when providing an invalid token to nodetool (CASSANDRA-9348)
 * Add static column support to SASI index (CASSANDRA-11183)
 * Support EQ/PREFIX queries in SASI CONTAINS mode without tokenization (CASSANDRA-11434)
 * Support LIKE operator in prepared statements (CASSANDRA-11456)
 * Add a command to see if a Materialized View has finished building (CASSANDRA-9967)
 * Log endpoint and port associated with streaming operation (CASSANDRA-8777)
 * Print sensible units for all log messages (CASSANDRA-9692)
 * Upgrade Netty to version 4.0.34 (CASSANDRA-11096)
 * Break the CQL grammar into separate Parser and Lexer (CASSANDRA-11372)
 * Compress only inter-dc traffic by default (CASSANDRA-8888)
 * Add metrics to track write amplification (CASSANDRA-11420)
 * cassandra-stress: cannot handle "value-less" tables (CASSANDRA-7739)
 * Add/drop multiple columns in one ALTER TABLE statement (CASSANDRA-10411)
 * Add require_endpoint_verification opt for internode encryption (CASSANDRA-9220)
 * Add auto import java.util for UDF code block (CASSANDRA-11392)
 * Add --hex-format option to nodetool getsstables (CASSANDRA-11337)
 * sstablemetadata should print sstable min/max token (CASSANDRA-7159)
 * Do not wrap CassandraException in TriggerExecutor (CASSANDRA-9421)
 * COPY TO should have higher double precision (CASSANDRA-11255)
 * Stress should exit with non-zero status after failure (CASSANDRA-10340)
 * Add client to cqlsh SHOW_SESSION (CASSANDRA-8958)
 * Fix nodetool tablestats keyspace level metrics (CASSANDRA-11226)
 * Store repair options in parent_repair_history (CASSANDRA-11244)
 * Print current leveling in sstableofflinerelevel (CASSANDRA-9588)
 * Change repair message for keyspaces with RF 1 (CASSANDRA-11203)
 * Remove hard-coded SSL cipher suites and protocols (CASSANDRA-10508)
 * Improve concurrency in CompactionStrategyManager (CASSANDRA-10099)
 * (cqlsh) interpret CQL type for formatting blobs (CASSANDRA-11274)
 * Refuse to start and print txn log information in case of disk
   corruption (CASSANDRA-10112)
 * Resolve some eclipse-warnings (CASSANDRA-11086)
 * (cqlsh) Show static columns in a different color (CASSANDRA-11059)
 * Allow to remove TTLs on table with default_time_to_live (CASSANDRA-11207)
Merged from 3.0:
 * Disallow creating view with a static column (CASSANDRA-11602)
 * Reduce the amount of object allocations caused by the getFunctions methods (CASSANDRA-11593)
 * Potential error replaying commitlog with smallint/tinyint/date/time types (CASSANDRA-11618)
 * Fix queries with filtering on counter columns (CASSANDRA-11629)
 * Improve tombstone printing in sstabledump (CASSANDRA-11655)
 * Fix paging for range queries where all clustering columns are specified (CASSANDRA-11669)
 * Don't require HEAP_NEW_SIZE to be set when using G1 (CASSANDRA-11600)
 * Fix sstabledump not showing cells after tombstone marker (CASSANDRA-11654)
 * Ignore all LocalStrategy keyspaces for streaming and other related
   operations (CASSANDRA-11627)
 * Ensure columnfilter covers indexed columns for thrift 2i queries (CASSANDRA-11523)
 * Only open one sstable scanner per sstable (CASSANDRA-11412)
 * Option to specify ProtocolVersion in cassandra-stress (CASSANDRA-11410)
 * ArithmeticException in avgFunctionForDecimal (CASSANDRA-11485)
 * LogAwareFileLister should only use OLD sstable files in current folder to determine disk consistency (CASSANDRA-11470)
 * Notify indexers of expired rows during compaction (CASSANDRA-11329)
 * Properly respond with ProtocolError when a v1/v2 native protocol
   header is received (CASSANDRA-11464)
 * Validate that num_tokens and initial_token are consistent with one another (CASSANDRA-10120)
Merged from 2.2:
 * Exit JVM if JMX server fails to startup (CASSANDRA-11540)
 * Produce a heap dump when exiting on OOM (CASSANDRA-9861)
 * Restore ability to filter on clustering columns when using a 2i (CASSANDRA-11510)
 * JSON datetime formatting needs timezone (CASSANDRA-11137)
 * Fix is_dense recalculation for Thrift-updated tables (CASSANDRA-11502)
 * Remove unnescessary file existence check during anticompaction (CASSANDRA-11660)
 * Add missing files to debian packages (CASSANDRA-11642)
 * Avoid calling Iterables::concat in loops during ModificationStatement::getFunctions (CASSANDRA-11621)
 * cqlsh: COPY FROM should use regular inserts for single statement batches and
   report errors correctly if workers processes crash on initialization (CASSANDRA-11474)
 * Always close cluster with connection in CqlRecordWriter (CASSANDRA-11553)
 * Allow only DISTINCT queries with partition keys restrictions (CASSANDRA-11339)
 * CqlConfigHelper no longer requires both a keystore and truststore to work (CASSANDRA-11532)
 * Make deprecated repair methods backward-compatible with previous notification service (CASSANDRA-11430)
 * IncomingStreamingConnection version check message wrong (CASSANDRA-11462)
Merged from 2.1:
 * Support mlockall on IBM POWER arch (CASSANDRA-11576)
 * Add option to disable use of severity in DynamicEndpointSnitch (CASSANDRA-11737)
 * cqlsh COPY FROM fails for null values with non-prepared statements (CASSANDRA-11631)
 * Make cython optional in pylib/setup.py (CASSANDRA-11630)
 * Change order of directory searching for cassandra.in.sh to favor local one (CASSANDRA-11628)
 * cqlsh COPY FROM fails with []{} chars in UDT/tuple fields/values (CASSANDRA-11633)
 * clqsh: COPY FROM throws TypeError with Cython extensions enabled (CASSANDRA-11574)
 * cqlsh: COPY FROM ignores NULL values in conversion (CASSANDRA-11549)
 * Validate levels when building LeveledScanner to avoid overlaps with orphaned sstables (CASSANDRA-9935)


3.5
 * StaticTokenTreeBuilder should respect posibility of duplicate tokens (CASSANDRA-11525)
 * Correctly fix potential assertion error during compaction (CASSANDRA-11353)
 * Avoid index segment stitching in RAM which lead to OOM on big SSTable files (CASSANDRA-11383)
 * Fix clustering and row filters for LIKE queries on clustering columns (CASSANDRA-11397)
Merged from 3.0:
 * Fix rare NPE on schema upgrade from 2.x to 3.x (CASSANDRA-10943)
 * Improve backoff policy for cqlsh COPY FROM (CASSANDRA-11320)
 * Improve IF NOT EXISTS check in CREATE INDEX (CASSANDRA-11131)
 * Upgrade ohc to 0.4.3
 * Enable SO_REUSEADDR for JMX RMI server sockets (CASSANDRA-11093)
 * Allocate merkletrees with the correct size (CASSANDRA-11390)
 * Support streaming pre-3.0 sstables (CASSANDRA-10990)
 * Add backpressure to compressed or encrypted commit log (CASSANDRA-10971)
 * SSTableExport supports secondary index tables (CASSANDRA-11330)
 * Fix sstabledump to include missing info in debug output (CASSANDRA-11321)
 * Establish and implement canonical bulk reading workload(s) (CASSANDRA-10331)
 * Fix paging for IN queries on tables without clustering columns (CASSANDRA-11208)
 * Remove recursive call from CompositesSearcher (CASSANDRA-11304)
 * Fix filtering on non-primary key columns for queries without index (CASSANDRA-6377)
 * Fix sstableloader fail when using materialized view (CASSANDRA-11275)
Merged from 2.2:
 * DatabaseDescriptor should log stacktrace in case of Eception during seed provider creation (CASSANDRA-11312)
 * Use canonical path for directory in SSTable descriptor (CASSANDRA-10587)
 * Add cassandra-stress keystore option (CASSANDRA-9325)
 * Dont mark sstables as repairing with sub range repairs (CASSANDRA-11451)
 * Notify when sstables change after cancelling compaction (CASSANDRA-11373)
 * cqlsh: COPY FROM should check that explicit column names are valid (CASSANDRA-11333)
 * Add -Dcassandra.start_gossip startup option (CASSANDRA-10809)
 * Fix UTF8Validator.validate() for modified UTF-8 (CASSANDRA-10748)
 * Clarify that now() function is calculated on the coordinator node in CQL documentation (CASSANDRA-10900)
 * Fix bloom filter sizing with LCS (CASSANDRA-11344)
 * (cqlsh) Fix error when result is 0 rows with EXPAND ON (CASSANDRA-11092)
 * Add missing newline at end of bin/cqlsh (CASSANDRA-11325)
 * Unresolved hostname leads to replace being ignored (CASSANDRA-11210)
 * Only log yaml config once, at startup (CASSANDRA-11217)
 * Reference leak with parallel repairs on the same table (CASSANDRA-11215)
Merged from 2.1:
 * Add a -j parameter to scrub/cleanup/upgradesstables to state how
   many threads to use (CASSANDRA-11179)
 * COPY FROM on large datasets: fix progress report and debug performance (CASSANDRA-11053)
 * InvalidateKeys should have a weak ref to key cache (CASSANDRA-11176)


3.4
 * (cqlsh) add cqlshrc option to always connect using ssl (CASSANDRA-10458)
 * Cleanup a few resource warnings (CASSANDRA-11085)
 * Allow custom tracing implementations (CASSANDRA-10392)
 * Extract LoaderOptions to be able to be used from outside (CASSANDRA-10637)
 * fix OnDiskIndexTest to properly treat empty ranges (CASSANDRA-11205)
 * fix TrackerTest to handle new notifications (CASSANDRA-11178)
 * add SASI validation for partitioner and complex columns (CASSANDRA-11169)
 * Add caching of encrypted credentials in PasswordAuthenticator (CASSANDRA-7715)
 * fix SASI memtable switching on flush (CASSANDRA-11159)
 * Remove duplicate offline compaction tracking (CASSANDRA-11148)
 * fix EQ semantics of analyzed SASI indexes (CASSANDRA-11130)
 * Support long name output for nodetool commands (CASSANDRA-7950)
 * Encrypted hints (CASSANDRA-11040)
 * SASI index options validation (CASSANDRA-11136)
 * Optimize disk seek using min/max column name meta data when the LIMIT clause is used
   (CASSANDRA-8180)
 * Add LIKE support to CQL3 (CASSANDRA-11067)
 * Generic Java UDF types (CASSANDRA-10819)
 * cqlsh: Include sub-second precision in timestamps by default (CASSANDRA-10428)
 * Set javac encoding to utf-8 (CASSANDRA-11077)
 * Integrate SASI index into Cassandra (CASSANDRA-10661)
 * Add --skip-flush option to nodetool snapshot
 * Skip values for non-queried columns (CASSANDRA-10657)
 * Add support for secondary indexes on static columns (CASSANDRA-8103)
 * CommitLogUpgradeTestMaker creates broken commit logs (CASSANDRA-11051)
 * Add metric for number of dropped mutations (CASSANDRA-10866)
 * Simplify row cache invalidation code (CASSANDRA-10396)
 * Support user-defined compaction through nodetool (CASSANDRA-10660)
 * Stripe view locks by key and table ID to reduce contention (CASSANDRA-10981)
 * Add nodetool gettimeout and settimeout commands (CASSANDRA-10953)
 * Add 3.0 metadata to sstablemetadata output (CASSANDRA-10838)
Merged from 3.0:
 * MV should only query complex columns included in the view (CASSANDRA-11069)
 * Failed aggregate creation breaks server permanently (CASSANDRA-11064)
 * Add sstabledump tool (CASSANDRA-7464)
 * Introduce backpressure for hints (CASSANDRA-10972)
 * Fix ClusteringPrefix not being able to read tombstone range boundaries (CASSANDRA-11158)
 * Prevent logging in sandboxed state (CASSANDRA-11033)
 * Disallow drop/alter operations of UDTs used by UDAs (CASSANDRA-10721)
 * Add query time validation method on Index (CASSANDRA-11043)
 * Avoid potential AssertionError in mixed version cluster (CASSANDRA-11128)
 * Properly handle hinted handoff after topology changes (CASSANDRA-5902)
 * AssertionError when listing sstable files on inconsistent disk state (CASSANDRA-11156)
 * Fix wrong rack counting and invalid conditions check for TokenAllocation
   (CASSANDRA-11139)
 * Avoid creating empty hint files (CASSANDRA-11090)
 * Fix leak detection strong reference loop using weak reference (CASSANDRA-11120)
 * Configurie BatchlogManager to stop delayed tasks on shutdown (CASSANDRA-11062)
 * Hadoop integration is incompatible with Cassandra Driver 3.0.0 (CASSANDRA-11001)
 * Add dropped_columns to the list of schema table so it gets handled
   properly (CASSANDRA-11050)
 * Fix NPE when using forceRepairRangeAsync without DC (CASSANDRA-11239)
Merged from 2.2:
 * Preserve order for preferred SSL cipher suites (CASSANDRA-11164)
 * Range.compareTo() violates the contract of Comparable (CASSANDRA-11216)
 * Avoid NPE when serializing ErrorMessage with null message (CASSANDRA-11167)
 * Replacing an aggregate with a new version doesn't reset INITCOND (CASSANDRA-10840)
 * (cqlsh) cqlsh cannot be called through symlink (CASSANDRA-11037)
 * fix ohc and java-driver pom dependencies in build.xml (CASSANDRA-10793)
 * Protect from keyspace dropped during repair (CASSANDRA-11065)
 * Handle adding fields to a UDT in SELECT JSON and toJson() (CASSANDRA-11146)
 * Better error message for cleanup (CASSANDRA-10991)
 * cqlsh pg-style-strings broken if line ends with ';' (CASSANDRA-11123)
 * Always persist upsampled index summaries (CASSANDRA-10512)
 * (cqlsh) Fix inconsistent auto-complete (CASSANDRA-10733)
 * Make SELECT JSON and toJson() threadsafe (CASSANDRA-11048)
 * Fix SELECT on tuple relations for mixed ASC/DESC clustering order (CASSANDRA-7281)
 * Use cloned TokenMetadata in size estimates to avoid race against membership check
   (CASSANDRA-10736)
 * (cqlsh) Support utf-8/cp65001 encoding on Windows (CASSANDRA-11030)
 * Fix paging on DISTINCT queries repeats result when first row in partition changes
   (CASSANDRA-10010)
 * (cqlsh) Support timezone conversion using pytz (CASSANDRA-10397)
 * cqlsh: change default encoding to UTF-8 (CASSANDRA-11124)
Merged from 2.1:
 * Checking if an unlogged batch is local is inefficient (CASSANDRA-11529)
 * Fix out-of-space error treatment in memtable flushing (CASSANDRA-11448).
 * Don't do defragmentation if reading from repaired sstables (CASSANDRA-10342)
 * Fix streaming_socket_timeout_in_ms not enforced (CASSANDRA-11286)
 * Avoid dropping message too quickly due to missing unit conversion (CASSANDRA-11302)
 * Don't remove FailureDetector history on removeEndpoint (CASSANDRA-10371)
 * Only notify if repair status changed (CASSANDRA-11172)
 * Use logback setting for 'cassandra -v' command (CASSANDRA-10767)
 * Fix sstableloader to unthrottle streaming by default (CASSANDRA-9714)
 * Fix incorrect warning in 'nodetool status' (CASSANDRA-10176)
 * Properly release sstable ref when doing offline scrub (CASSANDRA-10697)
 * Improve nodetool status performance for large cluster (CASSANDRA-7238)
 * Gossiper#isEnabled is not thread safe (CASSANDRA-11116)
 * Avoid major compaction mixing repaired and unrepaired sstables in DTCS (CASSANDRA-11113)
 * Make it clear what DTCS timestamp_resolution is used for (CASSANDRA-11041)
 * (cqlsh) Display milliseconds when datetime overflows (CASSANDRA-10625)


3.3
 * Avoid infinite loop if owned range is smaller than number of
   data dirs (CASSANDRA-11034)
 * Avoid bootstrap hanging when existing nodes have no data to stream (CASSANDRA-11010)
Merged from 3.0:
 * Remove double initialization of newly added tables (CASSANDRA-11027)
 * Filter keys searcher results by target range (CASSANDRA-11104)
 * Fix deserialization of legacy read commands (CASSANDRA-11087)
 * Fix incorrect computation of deletion time in sstable metadata (CASSANDRA-11102)
 * Avoid memory leak when collecting sstable metadata (CASSANDRA-11026)
 * Mutations do not block for completion under view lock contention (CASSANDRA-10779)
 * Invalidate legacy schema tables when unloading them (CASSANDRA-11071)
 * (cqlsh) handle INSERT and UPDATE statements with LWT conditions correctly
   (CASSANDRA-11003)
 * Fix DISTINCT queries in mixed version clusters (CASSANDRA-10762)
 * Migrate build status for indexes along with legacy schema (CASSANDRA-11046)
 * Ensure SSTables for legacy KEYS indexes can be read (CASSANDRA-11045)
 * Added support for IBM zSystems architecture (CASSANDRA-11054)
 * Update CQL documentation (CASSANDRA-10899)
 * Check the column name, not cell name, for dropped columns when reading
   legacy sstables (CASSANDRA-11018)
 * Don't attempt to index clustering values of static rows (CASSANDRA-11021)
 * Remove checksum files after replaying hints (CASSANDRA-10947)
 * Support passing base table metadata to custom 2i validation (CASSANDRA-10924)
 * Ensure stale index entries are purged during reads (CASSANDRA-11013)
 * (cqlsh) Also apply --connect-timeout to control connection
   timeout (CASSANDRA-10959)
 * Fix AssertionError when removing from list using UPDATE (CASSANDRA-10954)
 * Fix UnsupportedOperationException when reading old sstable with range
   tombstone (CASSANDRA-10743)
 * MV should use the maximum timestamp of the primary key (CASSANDRA-10910)
 * Fix potential assertion error during compaction (CASSANDRA-10944)
Merged from 2.2:
 * maxPurgeableTimestamp needs to check memtables too (CASSANDRA-9949)
 * Apply change to compaction throughput in real time (CASSANDRA-10025)
 * (cqlsh) encode input correctly when saving history
 * Fix potential NPE on ORDER BY queries with IN (CASSANDRA-10955)
 * Start L0 STCS-compactions even if there is a L0 -> L1 compaction
   going (CASSANDRA-10979)
 * Make UUID LSB unique per process (CASSANDRA-7925)
 * Avoid NPE when performing sstable tasks (scrub etc.) (CASSANDRA-10980)
 * Make sure client gets tombstone overwhelmed warning (CASSANDRA-9465)
 * Fix error streaming section more than 2GB (CASSANDRA-10961)
 * Histogram buckets exposed in jmx are sorted incorrectly (CASSANDRA-10975)
 * Enable GC logging by default (CASSANDRA-10140)
 * Optimize pending range computation (CASSANDRA-9258)
 * Skip commit log and saved cache directories in SSTable version startup check (CASSANDRA-10902)
 * drop/alter user should be case sensitive (CASSANDRA-10817)
Merged from 2.1:
 * test_bulk_round_trip_blogposts is failing occasionally (CASSANDRA-10938)
 * Fix isJoined return true only after becoming cluster member (CASANDRA-11007)
 * Fix bad gossip generation seen in long-running clusters (CASSANDRA-10969)
 * Avoid NPE when incremental repair fails (CASSANDRA-10909)
 * Unmark sstables compacting once they are done in cleanup/scrub/upgradesstables (CASSANDRA-10829)
 * Allow simultaneous bootstrapping with strict consistency when no vnodes are used (CASSANDRA-11005)
 * Log a message when major compaction does not result in a single file (CASSANDRA-10847)
 * (cqlsh) fix cqlsh_copy_tests when vnodes are disabled (CASSANDRA-10997)
 * (cqlsh) Add request timeout option to cqlsh (CASSANDRA-10686)
 * Avoid AssertionError while submitting hint with LWT (CASSANDRA-10477)
 * If CompactionMetadata is not in stats file, use index summary instead (CASSANDRA-10676)
 * Retry sending gossip syn multiple times during shadow round (CASSANDRA-8072)
 * Fix pending range calculation during moves (CASSANDRA-10887)
 * Sane default (200Mbps) for inter-DC streaming througput (CASSANDRA-8708)



3.2
 * Make sure tokens don't exist in several data directories (CASSANDRA-6696)
 * Add requireAuthorization method to IAuthorizer (CASSANDRA-10852)
 * Move static JVM options to conf/jvm.options file (CASSANDRA-10494)
 * Fix CassandraVersion to accept x.y version string (CASSANDRA-10931)
 * Add forceUserDefinedCleanup to allow more flexible cleanup (CASSANDRA-10708)
 * (cqlsh) allow setting TTL with COPY (CASSANDRA-9494)
 * Fix counting of received sstables in streaming (CASSANDRA-10949)
 * Implement hints compression (CASSANDRA-9428)
 * Fix potential assertion error when reading static columns (CASSANDRA-10903)
 * Fix EstimatedHistogram creation in nodetool tablehistograms (CASSANDRA-10859)
 * Establish bootstrap stream sessions sequentially (CASSANDRA-6992)
 * Sort compactionhistory output by timestamp (CASSANDRA-10464)
 * More efficient BTree removal (CASSANDRA-9991)
 * Make tablehistograms accept the same syntax as tablestats (CASSANDRA-10149)
 * Group pending compactions based on table (CASSANDRA-10718)
 * Add compressor name in sstablemetadata output (CASSANDRA-9879)
 * Fix type casting for counter columns (CASSANDRA-10824)
 * Prevent running Cassandra as root (CASSANDRA-8142)
 * bound maximum in-flight commit log replay mutation bytes to 64 megabytes (CASSANDRA-8639)
 * Normalize all scripts (CASSANDRA-10679)
 * Make compression ratio much more accurate (CASSANDRA-10225)
 * Optimize building of Clustering object when only one is created (CASSANDRA-10409)
 * Make index building pluggable (CASSANDRA-10681)
 * Add sstable flush observer (CASSANDRA-10678)
 * Improve NTS endpoints calculation (CASSANDRA-10200)
 * Improve performance of the folderSize function (CASSANDRA-10677)
 * Add support for type casting in selection clause (CASSANDRA-10310)
 * Added graphing option to cassandra-stress (CASSANDRA-7918)
 * Abort in-progress queries that time out (CASSANDRA-7392)
 * Add transparent data encryption core classes (CASSANDRA-9945)
Merged from 3.0:
 * Better handling of SSL connection errors inter-node (CASSANDRA-10816)
 * Avoid NoSuchElementException when executing empty batch (CASSANDRA-10711)
 * Avoid building PartitionUpdate in toString (CASSANDRA-10897)
 * Reduce heap spent when receiving many SSTables (CASSANDRA-10797)
 * Add back support for 3rd party auth providers to bulk loader (CASSANDRA-10873)
 * Eliminate the dependency on jgrapht for UDT resolution (CASSANDRA-10653)
 * (Hadoop) Close Clusters and Sessions in Hadoop Input/Output classes (CASSANDRA-10837)
 * Fix sstableloader not working with upper case keyspace name (CASSANDRA-10806)
Merged from 2.2:
 * jemalloc detection fails due to quoting issues in regexv (CASSANDRA-10946)
 * (cqlsh) show correct column names for empty result sets (CASSANDRA-9813)
 * Add new types to Stress (CASSANDRA-9556)
 * Add property to allow listening on broadcast interface (CASSANDRA-9748)
Merged from 2.1:
 * Match cassandra-loader options in COPY FROM (CASSANDRA-9303)
 * Fix binding to any address in CqlBulkRecordWriter (CASSANDRA-9309)
 * cqlsh fails to decode utf-8 characters for text typed columns (CASSANDRA-10875)
 * Log error when stream session fails (CASSANDRA-9294)
 * Fix bugs in commit log archiving startup behavior (CASSANDRA-10593)
 * (cqlsh) further optimise COPY FROM (CASSANDRA-9302)
 * Allow CREATE TABLE WITH ID (CASSANDRA-9179)
 * Make Stress compiles within eclipse (CASSANDRA-10807)
 * Cassandra Daemon should print JVM arguments (CASSANDRA-10764)
 * Allow cancellation of index summary redistribution (CASSANDRA-8805)


3.1.1
Merged from 3.0:
  * Fix upgrade data loss due to range tombstone deleting more data than then should
    (CASSANDRA-10822)


3.1
Merged from 3.0:
 * Avoid MV race during node decommission (CASSANDRA-10674)
 * Disable reloading of GossipingPropertyFileSnitch (CASSANDRA-9474)
 * Handle single-column deletions correction in materialized views
   when the column is part of the view primary key (CASSANDRA-10796)
 * Fix issue with datadir migration on upgrade (CASSANDRA-10788)
 * Fix bug with range tombstones on reverse queries and test coverage for
   AbstractBTreePartition (CASSANDRA-10059)
 * Remove 64k limit on collection elements (CASSANDRA-10374)
 * Remove unclear Indexer.indexes() method (CASSANDRA-10690)
 * Fix NPE on stream read error (CASSANDRA-10771)
 * Normalize cqlsh DESC output (CASSANDRA-10431)
 * Rejects partition range deletions when columns are specified (CASSANDRA-10739)
 * Fix error when saving cached key for old format sstable (CASSANDRA-10778)
 * Invalidate prepared statements on DROP INDEX (CASSANDRA-10758)
 * Fix SELECT statement with IN restrictions on partition key,
   ORDER BY and LIMIT (CASSANDRA-10729)
 * Improve stress performance over 1k threads (CASSANDRA-7217)
 * Wait for migration responses to complete before bootstrapping (CASSANDRA-10731)
 * Unable to create a function with argument of type Inet (CASSANDRA-10741)
 * Fix backward incompatibiliy in CqlInputFormat (CASSANDRA-10717)
 * Correctly preserve deletion info on updated rows when notifying indexers
   of single-row deletions (CASSANDRA-10694)
 * Notify indexers of partition delete during cleanup (CASSANDRA-10685)
 * Keep the file open in trySkipCache (CASSANDRA-10669)
 * Updated trigger example (CASSANDRA-10257)
Merged from 2.2:
 * Verify tables in pseudo-system keyspaces at startup (CASSANDRA-10761)
 * Fix IllegalArgumentException in DataOutputBuffer.reallocate for large buffers (CASSANDRA-10592)
 * Show CQL help in cqlsh in web browser (CASSANDRA-7225)
 * Serialize on disk the proper SSTable compression ratio (CASSANDRA-10775)
 * Reject index queries while the index is building (CASSANDRA-8505)
 * CQL.textile syntax incorrectly includes optional keyspace for aggregate SFUNC and FINALFUNC (CASSANDRA-10747)
 * Fix JSON update with prepared statements (CASSANDRA-10631)
 * Don't do anticompaction after subrange repair (CASSANDRA-10422)
 * Fix SimpleDateType type compatibility (CASSANDRA-10027)
 * (Hadoop) fix splits calculation (CASSANDRA-10640)
 * (Hadoop) ensure that Cluster instances are always closed (CASSANDRA-10058)
Merged from 2.1:
 * Fix Stress profile parsing on Windows (CASSANDRA-10808)
 * Fix incremental repair hang when replica is down (CASSANDRA-10288)
 * Optimize the way we check if a token is repaired in anticompaction (CASSANDRA-10768)
 * Add proper error handling to stream receiver (CASSANDRA-10774)
 * Warn or fail when changing cluster topology live (CASSANDRA-10243)
 * Status command in debian/ubuntu init script doesn't work (CASSANDRA-10213)
 * Some DROP ... IF EXISTS incorrectly result in exceptions on non-existing KS (CASSANDRA-10658)
 * DeletionTime.compareTo wrong in rare cases (CASSANDRA-10749)
 * Force encoding when computing statement ids (CASSANDRA-10755)
 * Properly reject counters as map keys (CASSANDRA-10760)
 * Fix the sstable-needs-cleanup check (CASSANDRA-10740)
 * (cqlsh) Print column names before COPY operation (CASSANDRA-8935)
 * Fix CompressedInputStream for proper cleanup (CASSANDRA-10012)
 * (cqlsh) Support counters in COPY commands (CASSANDRA-9043)
 * Try next replica if not possible to connect to primary replica on
   ColumnFamilyRecordReader (CASSANDRA-2388)
 * Limit window size in DTCS (CASSANDRA-10280)
 * sstableloader does not use MAX_HEAP_SIZE env parameter (CASSANDRA-10188)
 * (cqlsh) Improve COPY TO performance and error handling (CASSANDRA-9304)
 * Create compression chunk for sending file only (CASSANDRA-10680)
 * Forbid compact clustering column type changes in ALTER TABLE (CASSANDRA-8879)
 * Reject incremental repair with subrange repair (CASSANDRA-10422)
 * Add a nodetool command to refresh size_estimates (CASSANDRA-9579)
 * Invalidate cache after stream receive task is completed (CASSANDRA-10341)
 * Reject counter writes in CQLSSTableWriter (CASSANDRA-10258)
 * Remove superfluous COUNTER_MUTATION stage mapping (CASSANDRA-10605)


3.0
 * Fix AssertionError while flushing memtable due to materialized views
   incorrectly inserting empty rows (CASSANDRA-10614)
 * Store UDA initcond as CQL literal in the schema table, instead of a blob (CASSANDRA-10650)
 * Don't use -1 for the position of partition key in schema (CASSANDRA-10491)
 * Fix distinct queries in mixed version cluster (CASSANDRA-10573)
 * Skip sstable on clustering in names query (CASSANDRA-10571)
 * Remove value skipping as it breaks read-repair (CASSANDRA-10655)
 * Fix bootstrapping with MVs (CASSANDRA-10621)
 * Make sure EACH_QUORUM reads are using NTS (CASSANDRA-10584)
 * Fix MV replica filtering for non-NetworkTopologyStrategy (CASSANDRA-10634)
 * (Hadoop) fix CIF describeSplits() not handling 0 size estimates (CASSANDRA-10600)
 * Fix reading of legacy sstables (CASSANDRA-10590)
 * Use CQL type names in schema metadata tables (CASSANDRA-10365)
 * Guard batchlog replay against integer division by zero (CASSANDRA-9223)
 * Fix bug when adding a column to thrift with the same name than a primary key (CASSANDRA-10608)
 * Add client address argument to IAuthenticator::newSaslNegotiator (CASSANDRA-8068)
 * Fix implementation of LegacyLayout.LegacyBoundComparator (CASSANDRA-10602)
 * Don't use 'names query' read path for counters (CASSANDRA-10572)
 * Fix backward compatibility for counters (CASSANDRA-10470)
 * Remove memory_allocator paramter from cassandra.yaml (CASSANDRA-10581,10628)
 * Execute the metadata reload task of all registered indexes on CFS::reload (CASSANDRA-10604)
 * Fix thrift cas operations with defined columns (CASSANDRA-10576)
 * Fix PartitionUpdate.operationCount()for updates with static column operations (CASSANDRA-10606)
 * Fix thrift get() queries with defined columns (CASSANDRA-10586)
 * Fix marking of indexes as built and removed (CASSANDRA-10601)
 * Skip initialization of non-registered 2i instances, remove Index::getIndexName (CASSANDRA-10595)
 * Fix batches on multiple tables (CASSANDRA-10554)
 * Ensure compaction options are validated when updating KeyspaceMetadata (CASSANDRA-10569)
 * Flatten Iterator Transformation Hierarchy (CASSANDRA-9975)
 * Remove token generator (CASSANDRA-5261)
 * RolesCache should not be created for any authenticator that does not requireAuthentication (CASSANDRA-10562)
 * Fix LogTransaction checking only a single directory for files (CASSANDRA-10421)
 * Fix handling of range tombstones when reading old format sstables (CASSANDRA-10360)
 * Aggregate with Initial Condition fails with C* 3.0 (CASSANDRA-10367)
Merged from 2.2:
 * (cqlsh) show partial trace if incomplete after max_trace_wait (CASSANDRA-7645)
 * Use most up-to-date version of schema for system tables (CASSANDRA-10652)
 * Deprecate memory_allocator in cassandra.yaml (CASSANDRA-10581,10628)
 * Expose phi values from failure detector via JMX and tweak debug
   and trace logging (CASSANDRA-9526)
 * Fix IllegalArgumentException in DataOutputBuffer.reallocate for large buffers (CASSANDRA-10592)
Merged from 2.1:
 * Shutdown compaction in drain to prevent leak (CASSANDRA-10079)
 * (cqlsh) fix COPY using wrong variable name for time_format (CASSANDRA-10633)
 * Do not run SizeEstimatesRecorder if a node is not a member of the ring (CASSANDRA-9912)
 * Improve handling of dead nodes in gossip (CASSANDRA-10298)
 * Fix logback-tools.xml incorrectly configured for outputing to System.err
   (CASSANDRA-9937)
 * Fix streaming to catch exception so retry not fail (CASSANDRA-10557)
 * Add validation method to PerRowSecondaryIndex (CASSANDRA-10092)
 * Support encrypted and plain traffic on the same port (CASSANDRA-10559)
 * Do STCS in DTCS windows (CASSANDRA-10276)
 * Avoid repetition of JVM_OPTS in debian package (CASSANDRA-10251)
 * Fix potential NPE from handling result of SIM.highestSelectivityIndex (CASSANDRA-10550)
 * Fix paging issues with partitions containing only static columns data (CASSANDRA-10381)
 * Fix conditions on static columns (CASSANDRA-10264)
 * AssertionError: attempted to delete non-existing file CommitLog (CASSANDRA-10377)
 * Fix sorting for queries with an IN condition on partition key columns (CASSANDRA-10363)


3.0-rc2
 * Fix SELECT DISTINCT queries between 2.2.2 nodes and 3.0 nodes (CASSANDRA-10473)
 * Remove circular references in SegmentedFile (CASSANDRA-10543)
 * Ensure validation of indexed values only occurs once per-partition (CASSANDRA-10536)
 * Fix handling of static columns for range tombstones in thrift (CASSANDRA-10174)
 * Support empty ColumnFilter for backward compatility on empty IN (CASSANDRA-10471)
 * Remove Pig support (CASSANDRA-10542)
 * Fix LogFile throws Exception when assertion is disabled (CASSANDRA-10522)
 * Revert CASSANDRA-7486, make CMS default GC, move GC config to
   conf/jvm.options (CASSANDRA-10403)
 * Fix TeeingAppender causing some logs to be truncated/empty (CASSANDRA-10447)
 * Allow EACH_QUORUM for reads (CASSANDRA-9602)
 * Fix potential ClassCastException while upgrading (CASSANDRA-10468)
 * Fix NPE in MVs on update (CASSANDRA-10503)
 * Only include modified cell data in indexing deltas (CASSANDRA-10438)
 * Do not load keyspace when creating sstable writer (CASSANDRA-10443)
 * If node is not yet gossiping write all MV updates to batchlog only (CASSANDRA-10413)
 * Re-populate token metadata after commit log recovery (CASSANDRA-10293)
 * Provide additional metrics for materialized views (CASSANDRA-10323)
 * Flush system schema tables after local schema changes (CASSANDRA-10429)
Merged from 2.2:
 * Reduce contention getting instances of CompositeType (CASSANDRA-10433)
 * Fix the regression when using LIMIT with aggregates (CASSANDRA-10487)
 * Avoid NoClassDefFoundError during DataDescriptor initialization on windows (CASSANDRA-10412)
 * Preserve case of quoted Role & User names (CASSANDRA-10394)
 * cqlsh pg-style-strings broken (CASSANDRA-10484)
 * cqlsh prompt includes name of keyspace after failed `use` statement (CASSANDRA-10369)
Merged from 2.1:
 * (cqlsh) Distinguish negative and positive infinity in output (CASSANDRA-10523)
 * (cqlsh) allow custom time_format for COPY TO (CASSANDRA-8970)
 * Don't allow startup if the node's rack has changed (CASSANDRA-10242)
 * (cqlsh) show partial trace if incomplete after max_trace_wait (CASSANDRA-7645)
 * Allow LOCAL_JMX to be easily overridden (CASSANDRA-10275)
 * Mark nodes as dead even if they've already left (CASSANDRA-10205)


3.0.0-rc1
 * Fix mixed version read request compatibility for compact static tables
   (CASSANDRA-10373)
 * Fix paging of DISTINCT with static and IN (CASSANDRA-10354)
 * Allow MATERIALIZED VIEW's SELECT statement to restrict primary key
   columns (CASSANDRA-9664)
 * Move crc_check_chance out of compression options (CASSANDRA-9839)
 * Fix descending iteration past end of BTreeSearchIterator (CASSANDRA-10301)
 * Transfer hints to a different node on decommission (CASSANDRA-10198)
 * Check partition keys for CAS operations during stmt validation (CASSANDRA-10338)
 * Add custom query expressions to SELECT (CASSANDRA-10217)
 * Fix minor bugs in MV handling (CASSANDRA-10362)
 * Allow custom indexes with 0,1 or multiple target columns (CASSANDRA-10124)
 * Improve MV schema representation (CASSANDRA-9921)
 * Add flag to enable/disable coordinator batchlog for MV writes (CASSANDRA-10230)
 * Update cqlsh COPY for new internal driver serialization interface (CASSANDRA-10318)
 * Give index implementations more control over rebuild operations (CASSANDRA-10312)
 * Update index file format (CASSANDRA-10314)
 * Add "shadowable" row tombstones to deal with mv timestamp issues (CASSANDRA-10261)
 * CFS.loadNewSSTables() broken for pre-3.0 sstables
 * Cache selected index in read command to reduce lookups (CASSANDRA-10215)
 * Small optimizations of sstable index serialization (CASSANDRA-10232)
 * Support for both encrypted and unencrypted native transport connections (CASSANDRA-9590)
Merged from 2.2:
 * Configurable page size in cqlsh (CASSANDRA-9855)
 * Defer default role manager setup until all nodes are on 2.2+ (CASSANDRA-9761)
 * Handle missing RoleManager in config after upgrade to 2.2 (CASSANDRA-10209)
Merged from 2.1:
 * Bulk Loader API could not tolerate even node failure (CASSANDRA-10347)
 * Avoid misleading pushed notifications when multiple nodes
   share an rpc_address (CASSANDRA-10052)
 * Fix dropping undroppable when message queue is full (CASSANDRA-10113)
 * Fix potential ClassCastException during paging (CASSANDRA-10352)
 * Prevent ALTER TYPE from creating circular references (CASSANDRA-10339)
 * Fix cache handling of 2i and base tables (CASSANDRA-10155, 10359)
 * Fix NPE in nodetool compactionhistory (CASSANDRA-9758)
 * (Pig) support BulkOutputFormat as a URL parameter (CASSANDRA-7410)
 * BATCH statement is broken in cqlsh (CASSANDRA-10272)
 * (cqlsh) Make cqlsh PEP8 Compliant (CASSANDRA-10066)
 * (cqlsh) Fix error when starting cqlsh with --debug (CASSANDRA-10282)
 * Scrub, Cleanup and Upgrade do not unmark compacting until all operations
   have completed, regardless of the occurence of exceptions (CASSANDRA-10274)


3.0.0-beta2
 * Fix columns returned by AbstractBtreePartitions (CASSANDRA-10220)
 * Fix backward compatibility issue due to AbstractBounds serialization bug (CASSANDRA-9857)
 * Fix startup error when upgrading nodes (CASSANDRA-10136)
 * Base table PRIMARY KEY can be assumed to be NOT NULL in MV creation (CASSANDRA-10147)
 * Improve batchlog write patch (CASSANDRA-9673)
 * Re-apply MaterializedView updates on commitlog replay (CASSANDRA-10164)
 * Require AbstractType.isByteOrderComparable declaration in constructor (CASSANDRA-9901)
 * Avoid digest mismatch on upgrade to 3.0 (CASSANDRA-9554)
 * Fix Materialized View builder when adding multiple MVs (CASSANDRA-10156)
 * Choose better poolingOptions for protocol v4 in cassandra-stress (CASSANDRA-10182)
 * Fix LWW bug affecting Materialized Views (CASSANDRA-10197)
 * Ensures frozen sets and maps are always sorted (CASSANDRA-10162)
 * Don't deadlock when flushing CFS backed custom indexes (CASSANDRA-10181)
 * Fix double flushing of secondary index tables (CASSANDRA-10180)
 * Fix incorrect handling of range tombstones in thrift (CASSANDRA-10046)
 * Only use batchlog when paired materialized view replica is remote (CASSANDRA-10061)
 * Reuse TemporalRow when updating multiple MaterializedViews (CASSANDRA-10060)
 * Validate gc_grace_seconds for batchlog writes and MVs (CASSANDRA-9917)
 * Fix sstablerepairedset (CASSANDRA-10132)
Merged from 2.2:
 * Cancel transaction for sstables we wont redistribute index summary
   for (CASSANDRA-10270)
 * Retry snapshot deletion after compaction and gc on Windows (CASSANDRA-10222)
 * Fix failure to start with space in directory path on Windows (CASSANDRA-10239)
 * Fix repair hang when snapshot failed (CASSANDRA-10057)
 * Fall back to 1/4 commitlog volume for commitlog_total_space on small disks
   (CASSANDRA-10199)
Merged from 2.1:
 * Added configurable warning threshold for GC duration (CASSANDRA-8907)
 * Fix handling of streaming EOF (CASSANDRA-10206)
 * Only check KeyCache when it is enabled
 * Change streaming_socket_timeout_in_ms default to 1 hour (CASSANDRA-8611)
 * (cqlsh) update list of CQL keywords (CASSANDRA-9232)
 * Add nodetool gettraceprobability command (CASSANDRA-10234)
Merged from 2.0:
 * Fix rare race where older gossip states can be shadowed (CASSANDRA-10366)
 * Fix consolidating racks violating the RF contract (CASSANDRA-10238)
 * Disallow decommission when node is in drained state (CASSANDRA-8741)


2.2.1
 * Fix race during construction of commit log (CASSANDRA-10049)
 * Fix LeveledCompactionStrategyTest (CASSANDRA-9757)
 * Fix broken UnbufferedDataOutputStreamPlus.writeUTF (CASSANDRA-10203)
 * (cqlsh) default load-from-file encoding to utf-8 (CASSANDRA-9898)
 * Avoid returning Permission.NONE when failing to query users table (CASSANDRA-10168)
 * (cqlsh) add CLEAR command (CASSANDRA-10086)
 * Support string literals as Role names for compatibility (CASSANDRA-10135)
Merged from 2.1:
 * Only check KeyCache when it is enabled
 * Change streaming_socket_timeout_in_ms default to 1 hour (CASSANDRA-8611)
 * (cqlsh) update list of CQL keywords (CASSANDRA-9232)


3.0.0-beta1
 * Redesign secondary index API (CASSANDRA-9459, 7771, 9041)
 * Fix throwing ReadFailure instead of ReadTimeout on range queries (CASSANDRA-10125)
 * Rewrite hinted handoff (CASSANDRA-6230)
 * Fix query on static compact tables (CASSANDRA-10093)
 * Fix race during construction of commit log (CASSANDRA-10049)
 * Add option to only purge repaired tombstones (CASSANDRA-6434)
 * Change authorization handling for MVs (CASSANDRA-9927)
 * Add custom JMX enabled executor for UDF sandbox (CASSANDRA-10026)
 * Fix row deletion bug for Materialized Views (CASSANDRA-10014)
 * Support mixed-version clusters with Cassandra 2.1 and 2.2 (CASSANDRA-9704)
 * Fix multiple slices on RowSearchers (CASSANDRA-10002)
 * Fix bug in merging of collections (CASSANDRA-10001)
 * Optimize batchlog replay to avoid full scans (CASSANDRA-7237)
 * Repair improvements when using vnodes (CASSANDRA-5220)
 * Disable scripted UDFs by default (CASSANDRA-9889)
 * Bytecode inspection for Java-UDFs (CASSANDRA-9890)
 * Use byte to serialize MT hash length (CASSANDRA-9792)
 * Replace usage of Adler32 with CRC32 (CASSANDRA-8684)
 * Fix migration to new format from 2.1 SSTable (CASSANDRA-10006)
 * SequentialWriter should extend BufferedDataOutputStreamPlus (CASSANDRA-9500)
 * Use the same repairedAt timestamp within incremental repair session (CASSANDRA-9111)
Merged from 2.2:
 * Allow count(*) and count(1) to be use as normal aggregation (CASSANDRA-10114)
 * An NPE is thrown if the column name is unknown for an IN relation (CASSANDRA-10043)
 * Apply commit_failure_policy to more errors on startup (CASSANDRA-9749)
 * Fix histogram overflow exception (CASSANDRA-9973)
 * Route gossip messages over dedicated socket (CASSANDRA-9237)
 * Add checksum to saved cache files (CASSANDRA-9265)
 * Log warning when using an aggregate without partition key (CASSANDRA-9737)
Merged from 2.1:
 * (cqlsh) Allow encoding to be set through command line (CASSANDRA-10004)
 * Add new JMX methods to change local compaction strategy (CASSANDRA-9965)
 * Write hints for paxos commits (CASSANDRA-7342)
 * (cqlsh) Fix timestamps before 1970 on Windows, always
   use UTC for timestamp display (CASSANDRA-10000)
 * (cqlsh) Avoid overwriting new config file with old config
   when both exist (CASSANDRA-9777)
 * Release snapshot selfRef when doing snapshot repair (CASSANDRA-9998)
 * Cannot replace token does not exist - DN node removed as Fat Client (CASSANDRA-9871)
Merged from 2.0:
 * Don't cast expected bf size to an int (CASSANDRA-9959)
 * Make getFullyExpiredSSTables less expensive (CASSANDRA-9882)


3.0.0-alpha1
 * Implement proper sandboxing for UDFs (CASSANDRA-9402)
 * Simplify (and unify) cleanup of compaction leftovers (CASSANDRA-7066)
 * Allow extra schema definitions in cassandra-stress yaml (CASSANDRA-9850)
 * Metrics should use up to date nomenclature (CASSANDRA-9448)
 * Change CREATE/ALTER TABLE syntax for compression (CASSANDRA-8384)
 * Cleanup crc and adler code for java 8 (CASSANDRA-9650)
 * Storage engine refactor (CASSANDRA-8099, 9743, 9746, 9759, 9781, 9808, 9825,
   9848, 9705, 9859, 9867, 9874, 9828, 9801)
 * Update Guava to 18.0 (CASSANDRA-9653)
 * Bloom filter false positive ratio is not honoured (CASSANDRA-8413)
 * New option for cassandra-stress to leave a ratio of columns null (CASSANDRA-9522)
 * Change hinted_handoff_enabled yaml setting, JMX (CASSANDRA-9035)
 * Add algorithmic token allocation (CASSANDRA-7032)
 * Add nodetool command to replay batchlog (CASSANDRA-9547)
 * Make file buffer cache independent of paths being read (CASSANDRA-8897)
 * Remove deprecated legacy Hadoop code (CASSANDRA-9353)
 * Decommissioned nodes will not rejoin the cluster (CASSANDRA-8801)
 * Change gossip stabilization to use endpoit size (CASSANDRA-9401)
 * Change default garbage collector to G1 (CASSANDRA-7486)
 * Populate TokenMetadata early during startup (CASSANDRA-9317)
 * Undeprecate cache recentHitRate (CASSANDRA-6591)
 * Add support for selectively varint encoding fields (CASSANDRA-9499, 9865)
 * Materialized Views (CASSANDRA-6477)
Merged from 2.2:
 * Avoid grouping sstables for anticompaction with DTCS (CASSANDRA-9900)
 * UDF / UDA execution time in trace (CASSANDRA-9723)
 * Fix broken internode SSL (CASSANDRA-9884)
Merged from 2.1:
 * Add new JMX methods to change local compaction strategy (CASSANDRA-9965)
 * Fix handling of enable/disable autocompaction (CASSANDRA-9899)
 * Add consistency level to tracing ouput (CASSANDRA-9827)
 * Remove repair snapshot leftover on startup (CASSANDRA-7357)
 * Use random nodes for batch log when only 2 racks (CASSANDRA-8735)
 * Ensure atomicity inside thrift and stream session (CASSANDRA-7757)
 * Fix nodetool info error when the node is not joined (CASSANDRA-9031)
Merged from 2.0:
 * Log when messages are dropped due to cross_node_timeout (CASSANDRA-9793)
 * Don't track hotness when opening from snapshot for validation (CASSANDRA-9382)


2.2.0
 * Allow the selection of columns together with aggregates (CASSANDRA-9767)
 * Fix cqlsh copy methods and other windows specific issues (CASSANDRA-9795)
 * Don't wrap byte arrays in SequentialWriter (CASSANDRA-9797)
 * sum() and avg() functions missing for smallint and tinyint types (CASSANDRA-9671)
 * Revert CASSANDRA-9542 (allow native functions in UDA) (CASSANDRA-9771)
Merged from 2.1:
 * Fix MarshalException when upgrading superColumn family (CASSANDRA-9582)
 * Fix broken logging for "empty" flushes in Memtable (CASSANDRA-9837)
 * Handle corrupt files on startup (CASSANDRA-9686)
 * Fix clientutil jar and tests (CASSANDRA-9760)
 * (cqlsh) Allow the SSL protocol version to be specified through the
    config file or environment variables (CASSANDRA-9544)
Merged from 2.0:
 * Add tool to find why expired sstables are not getting dropped (CASSANDRA-10015)
 * Remove erroneous pending HH tasks from tpstats/jmx (CASSANDRA-9129)
 * Don't cast expected bf size to an int (CASSANDRA-9959)
 * checkForEndpointCollision fails for legitimate collisions (CASSANDRA-9765)
 * Complete CASSANDRA-8448 fix (CASSANDRA-9519)
 * Don't include auth credentials in debug log (CASSANDRA-9682)
 * Can't transition from write survey to normal mode (CASSANDRA-9740)
 * Scrub (recover) sstables even when -Index.db is missing (CASSANDRA-9591)
 * Fix growing pending background compaction (CASSANDRA-9662)


2.2.0-rc2
 * Re-enable memory-mapped I/O on Windows (CASSANDRA-9658)
 * Warn when an extra-large partition is compacted (CASSANDRA-9643)
 * (cqlsh) Allow setting the initial connection timeout (CASSANDRA-9601)
 * BulkLoader has --transport-factory option but does not use it (CASSANDRA-9675)
 * Allow JMX over SSL directly from nodetool (CASSANDRA-9090)
 * Update cqlsh for UDFs (CASSANDRA-7556)
 * Change Windows kernel default timer resolution (CASSANDRA-9634)
 * Deprected sstable2json and json2sstable (CASSANDRA-9618)
 * Allow native functions in user-defined aggregates (CASSANDRA-9542)
 * Don't repair system_distributed by default (CASSANDRA-9621)
 * Fix mixing min, max, and count aggregates for blob type (CASSANRA-9622)
 * Rename class for DATE type in Java driver (CASSANDRA-9563)
 * Duplicate compilation of UDFs on coordinator (CASSANDRA-9475)
 * Fix connection leak in CqlRecordWriter (CASSANDRA-9576)
 * Mlockall before opening system sstables & remove boot_without_jna option (CASSANDRA-9573)
 * Add functions to convert timeuuid to date or time, deprecate dateOf and unixTimestampOf (CASSANDRA-9229)
 * Make sure we cancel non-compacting sstables from LifecycleTransaction (CASSANDRA-9566)
 * Fix deprecated repair JMX API (CASSANDRA-9570)
 * Add logback metrics (CASSANDRA-9378)
 * Update and refactor ant test/test-compression to run the tests in parallel (CASSANDRA-9583)
 * Fix upgrading to new directory for secondary index (CASSANDRA-9687)
Merged from 2.1:
 * (cqlsh) Fix bad check for CQL compatibility when DESCRIBE'ing
   COMPACT STORAGE tables with no clustering columns
 * Eliminate strong self-reference chains in sstable ref tidiers (CASSANDRA-9656)
 * Ensure StreamSession uses canonical sstable reader instances (CASSANDRA-9700) 
 * Ensure memtable book keeping is not corrupted in the event we shrink usage (CASSANDRA-9681)
 * Update internal python driver for cqlsh (CASSANDRA-9064)
 * Fix IndexOutOfBoundsException when inserting tuple with too many
   elements using the string literal notation (CASSANDRA-9559)
 * Enable describe on indices (CASSANDRA-7814)
 * Fix incorrect result for IN queries where column not found (CASSANDRA-9540)
 * ColumnFamilyStore.selectAndReference may block during compaction (CASSANDRA-9637)
 * Fix bug in cardinality check when compacting (CASSANDRA-9580)
 * Fix memory leak in Ref due to ConcurrentLinkedQueue.remove() behaviour (CASSANDRA-9549)
 * Make rebuild only run one at a time (CASSANDRA-9119)
Merged from 2.0:
 * Avoid NPE in AuthSuccess#decode (CASSANDRA-9727)
 * Add listen_address to system.local (CASSANDRA-9603)
 * Bug fixes to resultset metadata construction (CASSANDRA-9636)
 * Fix setting 'durable_writes' in ALTER KEYSPACE (CASSANDRA-9560)
 * Avoids ballot clash in Paxos (CASSANDRA-9649)
 * Improve trace messages for RR (CASSANDRA-9479)
 * Fix suboptimal secondary index selection when restricted
   clustering column is also indexed (CASSANDRA-9631)
 * (cqlsh) Add min_threshold to DTCS option autocomplete (CASSANDRA-9385)
 * Fix error message when attempting to create an index on a column
   in a COMPACT STORAGE table with clustering columns (CASSANDRA-9527)
 * 'WITH WITH' in alter keyspace statements causes NPE (CASSANDRA-9565)
 * Expose some internals of SelectStatement for inspection (CASSANDRA-9532)
 * ArrivalWindow should use primitives (CASSANDRA-9496)
 * Periodically submit background compaction tasks (CASSANDRA-9592)
 * Set HAS_MORE_PAGES flag to false when PagingState is null (CASSANDRA-9571)


2.2.0-rc1
 * Compressed commit log should measure compressed space used (CASSANDRA-9095)
 * Fix comparison bug in CassandraRoleManager#collectRoles (CASSANDRA-9551)
 * Add tinyint,smallint,time,date support for UDFs (CASSANDRA-9400)
 * Deprecates SSTableSimpleWriter and SSTableSimpleUnsortedWriter (CASSANDRA-9546)
 * Empty INITCOND treated as null in aggregate (CASSANDRA-9457)
 * Remove use of Cell in Thrift MapReduce classes (CASSANDRA-8609)
 * Integrate pre-release Java Driver 2.2-rc1, custom build (CASSANDRA-9493)
 * Clean up gossiper logic for old versions (CASSANDRA-9370)
 * Fix custom payload coding/decoding to match the spec (CASSANDRA-9515)
 * ant test-all results incomplete when parsed (CASSANDRA-9463)
 * Disallow frozen<> types in function arguments and return types for
   clarity (CASSANDRA-9411)
 * Static Analysis to warn on unsafe use of Autocloseable instances (CASSANDRA-9431)
 * Update commitlog archiving examples now that commitlog segments are
   not recycled (CASSANDRA-9350)
 * Extend Transactional API to sstable lifecycle management (CASSANDRA-8568)
 * (cqlsh) Add support for native protocol 4 (CASSANDRA-9399)
 * Ensure that UDF and UDAs are keyspace-isolated (CASSANDRA-9409)
 * Revert CASSANDRA-7807 (tracing completion client notifications) (CASSANDRA-9429)
 * Add ability to stop compaction by ID (CASSANDRA-7207)
 * Let CassandraVersion handle SNAPSHOT version (CASSANDRA-9438)
Merged from 2.1:
 * (cqlsh) Fix using COPY through SOURCE or -f (CASSANDRA-9083)
 * Fix occasional lack of `system` keyspace in schema tables (CASSANDRA-8487)
 * Use ProtocolError code instead of ServerError code for native protocol
   error responses to unsupported protocol versions (CASSANDRA-9451)
 * Default commitlog_sync_batch_window_in_ms changed to 2ms (CASSANDRA-9504)
 * Fix empty partition assertion in unsorted sstable writing tools (CASSANDRA-9071)
 * Ensure truncate without snapshot cannot produce corrupt responses (CASSANDRA-9388) 
 * Consistent error message when a table mixes counter and non-counter
   columns (CASSANDRA-9492)
 * Avoid getting unreadable keys during anticompaction (CASSANDRA-9508)
 * (cqlsh) Better float precision by default (CASSANDRA-9224)
 * Improve estimated row count (CASSANDRA-9107)
 * Optimize range tombstone memory footprint (CASSANDRA-8603)
 * Use configured gcgs in anticompaction (CASSANDRA-9397)
Merged from 2.0:
 * Don't accumulate more range than necessary in RangeTombstone.Tracker (CASSANDRA-9486)
 * Add broadcast and rpc addresses to system.local (CASSANDRA-9436)
 * Always mark sstable suspect when corrupted (CASSANDRA-9478)
 * Add database users and permissions to CQL3 documentation (CASSANDRA-7558)
 * Allow JVM_OPTS to be passed to standalone tools (CASSANDRA-5969)
 * Fix bad condition in RangeTombstoneList (CASSANDRA-9485)
 * Fix potential StackOverflow when setting CrcCheckChance over JMX (CASSANDRA-9488)
 * Fix null static columns in pages after the first, paged reversed
   queries (CASSANDRA-8502)
 * Fix counting cache serialization in request metrics (CASSANDRA-9466)
 * Add option not to validate atoms during scrub (CASSANDRA-9406)


2.2.0-beta1
 * Introduce Transactional API for internal state changes (CASSANDRA-8984)
 * Add a flag in cassandra.yaml to enable UDFs (CASSANDRA-9404)
 * Better support of null for UDF (CASSANDRA-8374)
 * Use ecj instead of javassist for UDFs (CASSANDRA-8241)
 * faster async logback configuration for tests (CASSANDRA-9376)
 * Add `smallint` and `tinyint` data types (CASSANDRA-8951)
 * Avoid thrift schema creation when native driver is used in stress tool (CASSANDRA-9374)
 * Make Functions.declared thread-safe
 * Add client warnings to native protocol v4 (CASSANDRA-8930)
 * Allow roles cache to be invalidated (CASSANDRA-8967)
 * Upgrade Snappy (CASSANDRA-9063)
 * Don't start Thrift rpc by default (CASSANDRA-9319)
 * Only stream from unrepaired sstables with incremental repair (CASSANDRA-8267)
 * Aggregate UDFs allow SFUNC return type to differ from STYPE if FFUNC specified (CASSANDRA-9321)
 * Remove Thrift dependencies in bundled tools (CASSANDRA-8358)
 * Disable memory mapping of hsperfdata file for JVM statistics (CASSANDRA-9242)
 * Add pre-startup checks to detect potential incompatibilities (CASSANDRA-8049)
 * Distinguish between null and unset in protocol v4 (CASSANDRA-7304)
 * Add user/role permissions for user-defined functions (CASSANDRA-7557)
 * Allow cassandra config to be updated to restart daemon without unloading classes (CASSANDRA-9046)
 * Don't initialize compaction writer before checking if iter is empty (CASSANDRA-9117)
 * Don't execute any functions at prepare-time (CASSANDRA-9037)
 * Share file handles between all instances of a SegmentedFile (CASSANDRA-8893)
 * Make it possible to major compact LCS (CASSANDRA-7272)
 * Make FunctionExecutionException extend RequestExecutionException
   (CASSANDRA-9055)
 * Add support for SELECT JSON, INSERT JSON syntax and new toJson(), fromJson()
   functions (CASSANDRA-7970)
 * Optimise max purgeable timestamp calculation in compaction (CASSANDRA-8920)
 * Constrain internode message buffer sizes, and improve IO class hierarchy (CASSANDRA-8670) 
 * New tool added to validate all sstables in a node (CASSANDRA-5791)
 * Push notification when tracing completes for an operation (CASSANDRA-7807)
 * Delay "node up" and "node added" notifications until native protocol server is started (CASSANDRA-8236)
 * Compressed Commit Log (CASSANDRA-6809)
 * Optimise IntervalTree (CASSANDRA-8988)
 * Add a key-value payload for third party usage (CASSANDRA-8553, 9212)
 * Bump metrics-reporter-config dependency for metrics 3.0 (CASSANDRA-8149)
 * Partition intra-cluster message streams by size, not type (CASSANDRA-8789)
 * Add WriteFailureException to native protocol, notify coordinator of
   write failures (CASSANDRA-8592)
 * Convert SequentialWriter to nio (CASSANDRA-8709)
 * Add role based access control (CASSANDRA-7653, 8650, 7216, 8760, 8849, 8761, 8850)
 * Record client ip address in tracing sessions (CASSANDRA-8162)
 * Indicate partition key columns in response metadata for prepared
   statements (CASSANDRA-7660)
 * Merge UUIDType and TimeUUIDType parse logic (CASSANDRA-8759)
 * Avoid memory allocation when searching index summary (CASSANDRA-8793)
 * Optimise (Time)?UUIDType Comparisons (CASSANDRA-8730)
 * Make CRC32Ex into a separate maven dependency (CASSANDRA-8836)
 * Use preloaded jemalloc w/ Unsafe (CASSANDRA-8714, 9197)
 * Avoid accessing partitioner through StorageProxy (CASSANDRA-8244, 8268)
 * Upgrade Metrics library and remove depricated metrics (CASSANDRA-5657)
 * Serializing Row cache alternative, fully off heap (CASSANDRA-7438)
 * Duplicate rows returned when in clause has repeated values (CASSANDRA-6706)
 * Make CassandraException unchecked, extend RuntimeException (CASSANDRA-8560)
 * Support direct buffer decompression for reads (CASSANDRA-8464)
 * DirectByteBuffer compatible LZ4 methods (CASSANDRA-7039)
 * Group sstables for anticompaction correctly (CASSANDRA-8578)
 * Add ReadFailureException to native protocol, respond
   immediately when replicas encounter errors while handling
   a read request (CASSANDRA-7886)
 * Switch CommitLogSegment from RandomAccessFile to nio (CASSANDRA-8308)
 * Allow mixing token and partition key restrictions (CASSANDRA-7016)
 * Support index key/value entries on map collections (CASSANDRA-8473)
 * Modernize schema tables (CASSANDRA-8261)
 * Support for user-defined aggregation functions (CASSANDRA-8053)
 * Fix NPE in SelectStatement with empty IN values (CASSANDRA-8419)
 * Refactor SelectStatement, return IN results in natural order instead
   of IN value list order and ignore duplicate values in partition key IN restrictions (CASSANDRA-7981)
 * Support UDTs, tuples, and collections in user-defined
   functions (CASSANDRA-7563)
 * Fix aggregate fn results on empty selection, result column name,
   and cqlsh parsing (CASSANDRA-8229)
 * Mark sstables as repaired after full repair (CASSANDRA-7586)
 * Extend Descriptor to include a format value and refactor reader/writer
   APIs (CASSANDRA-7443)
 * Integrate JMH for microbenchmarks (CASSANDRA-8151)
 * Keep sstable levels when bootstrapping (CASSANDRA-7460)
 * Add Sigar library and perform basic OS settings check on startup (CASSANDRA-7838)
 * Support for aggregation functions (CASSANDRA-4914)
 * Remove cassandra-cli (CASSANDRA-7920)
 * Accept dollar quoted strings in CQL (CASSANDRA-7769)
 * Make assassinate a first class command (CASSANDRA-7935)
 * Support IN clause on any partition key column (CASSANDRA-7855)
 * Support IN clause on any clustering column (CASSANDRA-4762)
 * Improve compaction logging (CASSANDRA-7818)
 * Remove YamlFileNetworkTopologySnitch (CASSANDRA-7917)
 * Do anticompaction in groups (CASSANDRA-6851)
 * Support user-defined functions (CASSANDRA-7395, 7526, 7562, 7740, 7781, 7929,
   7924, 7812, 8063, 7813, 7708)
 * Permit configurable timestamps with cassandra-stress (CASSANDRA-7416)
 * Move sstable RandomAccessReader to nio2, which allows using the
   FILE_SHARE_DELETE flag on Windows (CASSANDRA-4050)
 * Remove CQL2 (CASSANDRA-5918)
 * Optimize fetching multiple cells by name (CASSANDRA-6933)
 * Allow compilation in java 8 (CASSANDRA-7028)
 * Make incremental repair default (CASSANDRA-7250)
 * Enable code coverage thru JaCoCo (CASSANDRA-7226)
 * Switch external naming of 'column families' to 'tables' (CASSANDRA-4369) 
 * Shorten SSTable path (CASSANDRA-6962)
 * Use unsafe mutations for most unit tests (CASSANDRA-6969)
 * Fix race condition during calculation of pending ranges (CASSANDRA-7390)
 * Fail on very large batch sizes (CASSANDRA-8011)
 * Improve concurrency of repair (CASSANDRA-6455, 8208, 9145)
 * Select optimal CRC32 implementation at runtime (CASSANDRA-8614)
 * Evaluate MurmurHash of Token once per query (CASSANDRA-7096)
 * Generalize progress reporting (CASSANDRA-8901)
 * Resumable bootstrap streaming (CASSANDRA-8838, CASSANDRA-8942)
 * Allow scrub for secondary index (CASSANDRA-5174)
 * Save repair data to system table (CASSANDRA-5839)
 * fix nodetool names that reference column families (CASSANDRA-8872)
 Merged from 2.1:
 * Warn on misuse of unlogged batches (CASSANDRA-9282)
 * Failure detector detects and ignores local pauses (CASSANDRA-9183)
 * Add utility class to support for rate limiting a given log statement (CASSANDRA-9029)
 * Add missing consistency levels to cassandra-stess (CASSANDRA-9361)
 * Fix commitlog getCompletedTasks to not increment (CASSANDRA-9339)
 * Fix for harmless exceptions logged as ERROR (CASSANDRA-8564)
 * Delete processed sstables in sstablesplit/sstableupgrade (CASSANDRA-8606)
 * Improve sstable exclusion from partition tombstones (CASSANDRA-9298)
 * Validate the indexed column rather than the cell's contents for 2i (CASSANDRA-9057)
 * Add support for top-k custom 2i queries (CASSANDRA-8717)
 * Fix error when dropping table during compaction (CASSANDRA-9251)
 * cassandra-stress supports validation operations over user profiles (CASSANDRA-8773)
 * Add support for rate limiting log messages (CASSANDRA-9029)
 * Log the partition key with tombstone warnings (CASSANDRA-8561)
 * Reduce runWithCompactionsDisabled poll interval to 1ms (CASSANDRA-9271)
 * Fix PITR commitlog replay (CASSANDRA-9195)
 * GCInspector logs very different times (CASSANDRA-9124)
 * Fix deleting from an empty list (CASSANDRA-9198)
 * Update tuple and collection types that use a user-defined type when that UDT
   is modified (CASSANDRA-9148, CASSANDRA-9192)
 * Use higher timeout for prepair and snapshot in repair (CASSANDRA-9261)
 * Fix anticompaction blocking ANTI_ENTROPY stage (CASSANDRA-9151)
 * Repair waits for anticompaction to finish (CASSANDRA-9097)
 * Fix streaming not holding ref when stream error (CASSANDRA-9295)
 * Fix canonical view returning early opened SSTables (CASSANDRA-9396)
Merged from 2.0:
 * (cqlsh) Add LOGIN command to switch users (CASSANDRA-7212)
 * Clone SliceQueryFilter in AbstractReadCommand implementations (CASSANDRA-8940)
 * Push correct protocol notification for DROP INDEX (CASSANDRA-9310)
 * token-generator - generated tokens too long (CASSANDRA-9300)
 * Fix counting of tombstones for TombstoneOverwhelmingException (CASSANDRA-9299)
 * Fix ReconnectableSnitch reconnecting to peers during upgrade (CASSANDRA-6702)
 * Include keyspace and table name in error log for collections over the size
   limit (CASSANDRA-9286)
 * Avoid potential overlap in LCS with single-partition sstables (CASSANDRA-9322)
 * Log warning message when a table is queried before the schema has fully
   propagated (CASSANDRA-9136)
 * Overload SecondaryIndex#indexes to accept the column definition (CASSANDRA-9314)
 * (cqlsh) Add SERIAL and LOCAL_SERIAL consistency levels (CASSANDRA-8051)
 * Fix index selection during rebuild with certain table layouts (CASSANDRA-9281)
 * Fix partition-level-delete-only workload accounting (CASSANDRA-9194)
 * Allow scrub to handle corrupted compressed chunks (CASSANDRA-9140)
 * Fix assertion error when resetlocalschema is run during repair (CASSANDRA-9249)
 * Disable single sstable tombstone compactions for DTCS by default (CASSANDRA-9234)
 * IncomingTcpConnection thread is not named (CASSANDRA-9262)
 * Close incoming connections when MessagingService is stopped (CASSANDRA-9238)
 * Fix streaming hang when retrying (CASSANDRA-9132)


2.1.5
 * Re-add deprecated cold_reads_to_omit param for backwards compat (CASSANDRA-9203)
 * Make anticompaction visible in compactionstats (CASSANDRA-9098)
 * Improve nodetool getendpoints documentation about the partition
   key parameter (CASSANDRA-6458)
 * Don't check other keyspaces for schema changes when an user-defined
   type is altered (CASSANDRA-9187)
 * Add generate-idea-files target to build.xml (CASSANDRA-9123)
 * Allow takeColumnFamilySnapshot to take a list of tables (CASSANDRA-8348)
 * Limit major sstable operations to their canonical representation (CASSANDRA-8669)
 * cqlsh: Add tests for INSERT and UPDATE tab completion (CASSANDRA-9125)
 * cqlsh: quote column names when needed in COPY FROM inserts (CASSANDRA-9080)
 * Do not load read meter for offline operations (CASSANDRA-9082)
 * cqlsh: Make CompositeType data readable (CASSANDRA-8919)
 * cqlsh: Fix display of triggers (CASSANDRA-9081)
 * Fix NullPointerException when deleting or setting an element by index on
   a null list collection (CASSANDRA-9077)
 * Buffer bloom filter serialization (CASSANDRA-9066)
 * Fix anti-compaction target bloom filter size (CASSANDRA-9060)
 * Make FROZEN and TUPLE unreserved keywords in CQL (CASSANDRA-9047)
 * Prevent AssertionError from SizeEstimatesRecorder (CASSANDRA-9034)
 * Avoid overwriting index summaries for sstables with an older format that
   does not support downsampling; rebuild summaries on startup when this
   is detected (CASSANDRA-8993)
 * Fix potential data loss in CompressedSequentialWriter (CASSANDRA-8949)
 * Make PasswordAuthenticator number of hashing rounds configurable (CASSANDRA-8085)
 * Fix AssertionError when binding nested collections in DELETE (CASSANDRA-8900)
 * Check for overlap with non-early sstables in LCS (CASSANDRA-8739)
 * Only calculate max purgable timestamp if we have to (CASSANDRA-8914)
 * (cqlsh) Greatly improve performance of COPY FROM (CASSANDRA-8225)
 * IndexSummary effectiveIndexInterval is now a guideline, not a rule (CASSANDRA-8993)
 * Use correct bounds for page cache eviction of compressed files (CASSANDRA-8746)
 * SSTableScanner enforces its bounds (CASSANDRA-8946)
 * Cleanup cell equality (CASSANDRA-8947)
 * Introduce intra-cluster message coalescing (CASSANDRA-8692)
 * DatabaseDescriptor throws NPE when rpc_interface is used (CASSANDRA-8839)
 * Don't check if an sstable is live for offline compactions (CASSANDRA-8841)
 * Don't set clientMode in SSTableLoader (CASSANDRA-8238)
 * Fix SSTableRewriter with disabled early open (CASSANDRA-8535)
 * Fix cassandra-stress so it respects the CL passed in user mode (CASSANDRA-8948)
 * Fix rare NPE in ColumnDefinition#hasIndexOption() (CASSANDRA-8786)
 * cassandra-stress reports per-operation statistics, plus misc (CASSANDRA-8769)
 * Add SimpleDate (cql date) and Time (cql time) types (CASSANDRA-7523)
 * Use long for key count in cfstats (CASSANDRA-8913)
 * Make SSTableRewriter.abort() more robust to failure (CASSANDRA-8832)
 * Remove cold_reads_to_omit from STCS (CASSANDRA-8860)
 * Make EstimatedHistogram#percentile() use ceil instead of floor (CASSANDRA-8883)
 * Fix top partitions reporting wrong cardinality (CASSANDRA-8834)
 * Fix rare NPE in KeyCacheSerializer (CASSANDRA-8067)
 * Pick sstables for validation as late as possible inc repairs (CASSANDRA-8366)
 * Fix commitlog getPendingTasks to not increment (CASSANDRA-8862)
 * Fix parallelism adjustment in range and secondary index queries
   when the first fetch does not satisfy the limit (CASSANDRA-8856)
 * Check if the filtered sstables is non-empty in STCS (CASSANDRA-8843)
 * Upgrade java-driver used for cassandra-stress (CASSANDRA-8842)
 * Fix CommitLog.forceRecycleAllSegments() memory access error (CASSANDRA-8812)
 * Improve assertions in Memory (CASSANDRA-8792)
 * Fix SSTableRewriter cleanup (CASSANDRA-8802)
 * Introduce SafeMemory for CompressionMetadata.Writer (CASSANDRA-8758)
 * 'nodetool info' prints exception against older node (CASSANDRA-8796)
 * Ensure SSTableReader.last corresponds exactly with the file end (CASSANDRA-8750)
 * Make SSTableWriter.openEarly more robust and obvious (CASSANDRA-8747)
 * Enforce SSTableReader.first/last (CASSANDRA-8744)
 * Cleanup SegmentedFile API (CASSANDRA-8749)
 * Avoid overlap with early compaction replacement (CASSANDRA-8683)
 * Safer Resource Management++ (CASSANDRA-8707)
 * Write partition size estimates into a system table (CASSANDRA-7688)
 * cqlsh: Fix keys() and full() collection indexes in DESCRIBE output
   (CASSANDRA-8154)
 * Show progress of streaming in nodetool netstats (CASSANDRA-8886)
 * IndexSummaryBuilder utilises offheap memory, and shares data between
   each IndexSummary opened from it (CASSANDRA-8757)
 * markCompacting only succeeds if the exact SSTableReader instances being 
   marked are in the live set (CASSANDRA-8689)
 * cassandra-stress support for varint (CASSANDRA-8882)
 * Fix Adler32 digest for compressed sstables (CASSANDRA-8778)
 * Add nodetool statushandoff/statusbackup (CASSANDRA-8912)
 * Use stdout for progress and stats in sstableloader (CASSANDRA-8982)
 * Correctly identify 2i datadir from older versions (CASSANDRA-9116)
Merged from 2.0:
 * Ignore gossip SYNs after shutdown (CASSANDRA-9238)
 * Avoid overflow when calculating max sstable size in LCS (CASSANDRA-9235)
 * Make sstable blacklisting work with compression (CASSANDRA-9138)
 * Do not attempt to rebuild indexes if no index accepts any column (CASSANDRA-9196)
 * Don't initiate snitch reconnection for dead states (CASSANDRA-7292)
 * Fix ArrayIndexOutOfBoundsException in CQLSSTableWriter (CASSANDRA-8978)
 * Add shutdown gossip state to prevent timeouts during rolling restarts (CASSANDRA-8336)
 * Fix running with java.net.preferIPv6Addresses=true (CASSANDRA-9137)
 * Fix failed bootstrap/replace attempts being persisted in system.peers (CASSANDRA-9180)
 * Flush system.IndexInfo after marking index built (CASSANDRA-9128)
 * Fix updates to min/max_compaction_threshold through cassandra-cli
   (CASSANDRA-8102)
 * Don't include tmp files when doing offline relevel (CASSANDRA-9088)
 * Use the proper CAS WriteType when finishing a previous round during Paxos
   preparation (CASSANDRA-8672)
 * Avoid race in cancelling compactions (CASSANDRA-9070)
 * More aggressive check for expired sstables in DTCS (CASSANDRA-8359)
 * Fix ignored index_interval change in ALTER TABLE statements (CASSANDRA-7976)
 * Do more aggressive compaction in old time windows in DTCS (CASSANDRA-8360)
 * java.lang.AssertionError when reading saved cache (CASSANDRA-8740)
 * "disk full" when running cleanup (CASSANDRA-9036)
 * Lower logging level from ERROR to DEBUG when a scheduled schema pull
   cannot be completed due to a node being down (CASSANDRA-9032)
 * Fix MOVED_NODE client event (CASSANDRA-8516)
 * Allow overriding MAX_OUTSTANDING_REPLAY_COUNT (CASSANDRA-7533)
 * Fix malformed JMX ObjectName containing IPv6 addresses (CASSANDRA-9027)
 * (cqlsh) Allow increasing CSV field size limit through
   cqlshrc config option (CASSANDRA-8934)
 * Stop logging range tombstones when exceeding the threshold
   (CASSANDRA-8559)
 * Fix NullPointerException when nodetool getendpoints is run
   against invalid keyspaces or tables (CASSANDRA-8950)
 * Allow specifying the tmp dir (CASSANDRA-7712)
 * Improve compaction estimated tasks estimation (CASSANDRA-8904)
 * Fix duplicate up/down messages sent to native clients (CASSANDRA-7816)
 * Expose commit log archive status via JMX (CASSANDRA-8734)
 * Provide better exceptions for invalid replication strategy parameters
   (CASSANDRA-8909)
 * Fix regression in mixed single and multi-column relation support for
   SELECT statements (CASSANDRA-8613)
 * Add ability to limit number of native connections (CASSANDRA-8086)
 * Fix CQLSSTableWriter throwing exception and spawning threads
   (CASSANDRA-8808)
 * Fix MT mismatch between empty and GC-able data (CASSANDRA-8979)
 * Fix incorrect validation when snapshotting single table (CASSANDRA-8056)
 * Add offline tool to relevel sstables (CASSANDRA-8301)
 * Preserve stream ID for more protocol errors (CASSANDRA-8848)
 * Fix combining token() function with multi-column relations on
   clustering columns (CASSANDRA-8797)
 * Make CFS.markReferenced() resistant to bad refcounting (CASSANDRA-8829)
 * Fix StreamTransferTask abort/complete bad refcounting (CASSANDRA-8815)
 * Fix AssertionError when querying a DESC clustering ordered
   table with ASC ordering and paging (CASSANDRA-8767)
 * AssertionError: "Memory was freed" when running cleanup (CASSANDRA-8716)
 * Make it possible to set max_sstable_age to fractional days (CASSANDRA-8406)
 * Fix some multi-column relations with indexes on some clustering
   columns (CASSANDRA-8275)
 * Fix memory leak in SSTableSimple*Writer and SSTableReader.validate()
   (CASSANDRA-8748)
 * Throw OOM if allocating memory fails to return a valid pointer (CASSANDRA-8726)
 * Fix SSTableSimpleUnsortedWriter ConcurrentModificationException (CASSANDRA-8619)
 * 'nodetool info' prints exception against older node (CASSANDRA-8796)
 * Ensure SSTableSimpleUnsortedWriter.close() terminates if
   disk writer has crashed (CASSANDRA-8807)


2.1.4
 * Bind JMX to localhost unless explicitly configured otherwise (CASSANDRA-9085)


2.1.3
 * Fix HSHA/offheap_objects corruption (CASSANDRA-8719)
 * Upgrade libthrift to 0.9.2 (CASSANDRA-8685)
 * Don't use the shared ref in sstableloader (CASSANDRA-8704)
 * Purge internal prepared statements if related tables or
   keyspaces are dropped (CASSANDRA-8693)
 * (cqlsh) Handle unicode BOM at start of files (CASSANDRA-8638)
 * Stop compactions before exiting offline tools (CASSANDRA-8623)
 * Update tools/stress/README.txt to match current behaviour (CASSANDRA-7933)
 * Fix schema from Thrift conversion with empty metadata (CASSANDRA-8695)
 * Safer Resource Management (CASSANDRA-7705)
 * Make sure we compact highly overlapping cold sstables with
   STCS (CASSANDRA-8635)
 * rpc_interface and listen_interface generate NPE on startup when specified
   interface doesn't exist (CASSANDRA-8677)
 * Fix ArrayIndexOutOfBoundsException in nodetool cfhistograms (CASSANDRA-8514)
 * Switch from yammer metrics for nodetool cf/proxy histograms (CASSANDRA-8662)
 * Make sure we don't add tmplink files to the compaction
   strategy (CASSANDRA-8580)
 * (cqlsh) Handle maps with blob keys (CASSANDRA-8372)
 * (cqlsh) Handle DynamicCompositeType schemas correctly (CASSANDRA-8563)
 * Duplicate rows returned when in clause has repeated values (CASSANDRA-6706)
 * Add tooling to detect hot partitions (CASSANDRA-7974)
 * Fix cassandra-stress user-mode truncation of partition generation (CASSANDRA-8608)
 * Only stream from unrepaired sstables during inc repair (CASSANDRA-8267)
 * Don't allow starting multiple inc repairs on the same sstables (CASSANDRA-8316)
 * Invalidate prepared BATCH statements when related tables
   or keyspaces are dropped (CASSANDRA-8652)
 * Fix missing results in secondary index queries on collections
   with ALLOW FILTERING (CASSANDRA-8421)
 * Expose EstimatedHistogram metrics for range slices (CASSANDRA-8627)
 * (cqlsh) Escape clqshrc passwords properly (CASSANDRA-8618)
 * Fix NPE when passing wrong argument in ALTER TABLE statement (CASSANDRA-8355)
 * Pig: Refactor and deprecate CqlStorage (CASSANDRA-8599)
 * Don't reuse the same cleanup strategy for all sstables (CASSANDRA-8537)
 * Fix case-sensitivity of index name on CREATE and DROP INDEX
   statements (CASSANDRA-8365)
 * Better detection/logging for corruption in compressed sstables (CASSANDRA-8192)
 * Use the correct repairedAt value when closing writer (CASSANDRA-8570)
 * (cqlsh) Handle a schema mismatch being detected on startup (CASSANDRA-8512)
 * Properly calculate expected write size during compaction (CASSANDRA-8532)
 * Invalidate affected prepared statements when a table's columns
   are altered (CASSANDRA-7910)
 * Stress - user defined writes should populate sequentally (CASSANDRA-8524)
 * Fix regression in SSTableRewriter causing some rows to become unreadable 
   during compaction (CASSANDRA-8429)
 * Run major compactions for repaired/unrepaired in parallel (CASSANDRA-8510)
 * (cqlsh) Fix compression options in DESCRIBE TABLE output when compression
   is disabled (CASSANDRA-8288)
 * (cqlsh) Fix DESCRIBE output after keyspaces are altered (CASSANDRA-7623)
 * Make sure we set lastCompactedKey correctly (CASSANDRA-8463)
 * (cqlsh) Fix output of CONSISTENCY command (CASSANDRA-8507)
 * (cqlsh) Fixed the handling of LIST statements (CASSANDRA-8370)
 * Make sstablescrub check leveled manifest again (CASSANDRA-8432)
 * Check first/last keys in sstable when giving out positions (CASSANDRA-8458)
 * Disable mmap on Windows (CASSANDRA-6993)
 * Add missing ConsistencyLevels to cassandra-stress (CASSANDRA-8253)
 * Add auth support to cassandra-stress (CASSANDRA-7985)
 * Fix ArrayIndexOutOfBoundsException when generating error message
   for some CQL syntax errors (CASSANDRA-8455)
 * Scale memtable slab allocation logarithmically (CASSANDRA-7882)
 * cassandra-stress simultaneous inserts over same seed (CASSANDRA-7964)
 * Reduce cassandra-stress sampling memory requirements (CASSANDRA-7926)
 * Ensure memtable flush cannot expire commit log entries from its future (CASSANDRA-8383)
 * Make read "defrag" async to reclaim memtables (CASSANDRA-8459)
 * Remove tmplink files for offline compactions (CASSANDRA-8321)
 * Reduce maxHintsInProgress (CASSANDRA-8415)
 * BTree updates may call provided update function twice (CASSANDRA-8018)
 * Release sstable references after anticompaction (CASSANDRA-8386)
 * Handle abort() in SSTableRewriter properly (CASSANDRA-8320)
 * Centralize shared executors (CASSANDRA-8055)
 * Fix filtering for CONTAINS (KEY) relations on frozen collection
   clustering columns when the query is restricted to a single
   partition (CASSANDRA-8203)
 * Do more aggressive entire-sstable TTL expiry checks (CASSANDRA-8243)
 * Add more log info if readMeter is null (CASSANDRA-8238)
 * add check of the system wall clock time at startup (CASSANDRA-8305)
 * Support for frozen collections (CASSANDRA-7859)
 * Fix overflow on histogram computation (CASSANDRA-8028)
 * Have paxos reuse the timestamp generation of normal queries (CASSANDRA-7801)
 * Fix incremental repair not remove parent session on remote (CASSANDRA-8291)
 * Improve JBOD disk utilization (CASSANDRA-7386)
 * Log failed host when preparing incremental repair (CASSANDRA-8228)
 * Force config client mode in CQLSSTableWriter (CASSANDRA-8281)
 * Fix sstableupgrade throws exception (CASSANDRA-8688)
 * Fix hang when repairing empty keyspace (CASSANDRA-8694)
Merged from 2.0:
 * Fix IllegalArgumentException in dynamic snitch (CASSANDRA-8448)
 * Add support for UPDATE ... IF EXISTS (CASSANDRA-8610)
 * Fix reversal of list prepends (CASSANDRA-8733)
 * Prevent non-zero default_time_to_live on tables with counters
   (CASSANDRA-8678)
 * Fix SSTableSimpleUnsortedWriter ConcurrentModificationException
   (CASSANDRA-8619)
 * Round up time deltas lower than 1ms in BulkLoader (CASSANDRA-8645)
 * Add batch remove iterator to ABSC (CASSANDRA-8414, 8666)
 * Round up time deltas lower than 1ms in BulkLoader (CASSANDRA-8645)
 * Fix isClientMode check in Keyspace (CASSANDRA-8687)
 * Use more efficient slice size for querying internal secondary
   index tables (CASSANDRA-8550)
 * Fix potentially returning deleted rows with range tombstone (CASSANDRA-8558)
 * Check for available disk space before starting a compaction (CASSANDRA-8562)
 * Fix DISTINCT queries with LIMITs or paging when some partitions
   contain only tombstones (CASSANDRA-8490)
 * Introduce background cache refreshing to permissions cache
   (CASSANDRA-8194)
 * Fix race condition in StreamTransferTask that could lead to
   infinite loops and premature sstable deletion (CASSANDRA-7704)
 * Add an extra version check to MigrationTask (CASSANDRA-8462)
 * Ensure SSTableWriter cleans up properly after failure (CASSANDRA-8499)
 * Increase bf true positive count on key cache hit (CASSANDRA-8525)
 * Move MeteredFlusher to its own thread (CASSANDRA-8485)
 * Fix non-distinct results in DISTNCT queries on static columns when
   paging is enabled (CASSANDRA-8087)
 * Move all hints related tasks to hints internal executor (CASSANDRA-8285)
 * Fix paging for multi-partition IN queries (CASSANDRA-8408)
 * Fix MOVED_NODE topology event never being emitted when a node
   moves its token (CASSANDRA-8373)
 * Fix validation of indexes in COMPACT tables (CASSANDRA-8156)
 * Avoid StackOverflowError when a large list of IN values
   is used for a clustering column (CASSANDRA-8410)
 * Fix NPE when writetime() or ttl() calls are wrapped by
   another function call (CASSANDRA-8451)
 * Fix NPE after dropping a keyspace (CASSANDRA-8332)
 * Fix error message on read repair timeouts (CASSANDRA-7947)
 * Default DTCS base_time_seconds changed to 60 (CASSANDRA-8417)
 * Refuse Paxos operation with more than one pending endpoint (CASSANDRA-8346, 8640)
 * Throw correct exception when trying to bind a keyspace or table
   name (CASSANDRA-6952)
 * Make HHOM.compact synchronized (CASSANDRA-8416)
 * cancel latency-sampling task when CF is dropped (CASSANDRA-8401)
 * don't block SocketThread for MessagingService (CASSANDRA-8188)
 * Increase quarantine delay on replacement (CASSANDRA-8260)
 * Expose off-heap memory usage stats (CASSANDRA-7897)
 * Ignore Paxos commits for truncated tables (CASSANDRA-7538)
 * Validate size of indexed column values (CASSANDRA-8280)
 * Make LCS split compaction results over all data directories (CASSANDRA-8329)
 * Fix some failing queries that use multi-column relations
   on COMPACT STORAGE tables (CASSANDRA-8264)
 * Fix InvalidRequestException with ORDER BY (CASSANDRA-8286)
 * Disable SSLv3 for POODLE (CASSANDRA-8265)
 * Fix millisecond timestamps in Tracing (CASSANDRA-8297)
 * Include keyspace name in error message when there are insufficient
   live nodes to stream from (CASSANDRA-8221)
 * Avoid overlap in L1 when L0 contains many nonoverlapping
   sstables (CASSANDRA-8211)
 * Improve PropertyFileSnitch logging (CASSANDRA-8183)
 * Add DC-aware sequential repair (CASSANDRA-8193)
 * Use live sstables in snapshot repair if possible (CASSANDRA-8312)
 * Fix hints serialized size calculation (CASSANDRA-8587)


2.1.2
 * (cqlsh) parse_for_table_meta errors out on queries with undefined
   grammars (CASSANDRA-8262)
 * (cqlsh) Fix SELECT ... TOKEN() function broken in C* 2.1.1 (CASSANDRA-8258)
 * Fix Cassandra crash when running on JDK8 update 40 (CASSANDRA-8209)
 * Optimize partitioner tokens (CASSANDRA-8230)
 * Improve compaction of repaired/unrepaired sstables (CASSANDRA-8004)
 * Make cache serializers pluggable (CASSANDRA-8096)
 * Fix issues with CONTAINS (KEY) queries on secondary indexes
   (CASSANDRA-8147)
 * Fix read-rate tracking of sstables for some queries (CASSANDRA-8239)
 * Fix default timestamp in QueryOptions (CASSANDRA-8246)
 * Set socket timeout when reading remote version (CASSANDRA-8188)
 * Refactor how we track live size (CASSANDRA-7852)
 * Make sure unfinished compaction files are removed (CASSANDRA-8124)
 * Fix shutdown when run as Windows service (CASSANDRA-8136)
 * Fix DESCRIBE TABLE with custom indexes (CASSANDRA-8031)
 * Fix race in RecoveryManagerTest (CASSANDRA-8176)
 * Avoid IllegalArgumentException while sorting sstables in
   IndexSummaryManager (CASSANDRA-8182)
 * Shutdown JVM on file descriptor exhaustion (CASSANDRA-7579)
 * Add 'die' policy for commit log and disk failure (CASSANDRA-7927)
 * Fix installing as service on Windows (CASSANDRA-8115)
 * Fix CREATE TABLE for CQL2 (CASSANDRA-8144)
 * Avoid boxing in ColumnStats min/max trackers (CASSANDRA-8109)
Merged from 2.0:
 * Correctly handle non-text column names in cql3 (CASSANDRA-8178)
 * Fix deletion for indexes on primary key columns (CASSANDRA-8206)
 * Add 'nodetool statusgossip' (CASSANDRA-8125)
 * Improve client notification that nodes are ready for requests (CASSANDRA-7510)
 * Handle negative timestamp in writetime method (CASSANDRA-8139)
 * Pig: Remove errant LIMIT clause in CqlNativeStorage (CASSANDRA-8166)
 * Throw ConfigurationException when hsha is used with the default
   rpc_max_threads setting of 'unlimited' (CASSANDRA-8116)
 * Allow concurrent writing of the same table in the same JVM using
   CQLSSTableWriter (CASSANDRA-7463)
 * Fix totalDiskSpaceUsed calculation (CASSANDRA-8205)


2.1.1
 * Fix spin loop in AtomicSortedColumns (CASSANDRA-7546)
 * Dont notify when replacing tmplink files (CASSANDRA-8157)
 * Fix validation with multiple CONTAINS clause (CASSANDRA-8131)
 * Fix validation of collections in TriggerExecutor (CASSANDRA-8146)
 * Fix IllegalArgumentException when a list of IN values containing tuples
   is passed as a single arg to a prepared statement with the v1 or v2
   protocol (CASSANDRA-8062)
 * Fix ClassCastException in DISTINCT query on static columns with
   query paging (CASSANDRA-8108)
 * Fix NPE on null nested UDT inside a set (CASSANDRA-8105)
 * Fix exception when querying secondary index on set items or map keys
   when some clustering columns are specified (CASSANDRA-8073)
 * Send proper error response when there is an error during native
   protocol message decode (CASSANDRA-8118)
 * Gossip should ignore generation numbers too far in the future (CASSANDRA-8113)
 * Fix NPE when creating a table with frozen sets, lists (CASSANDRA-8104)
 * Fix high memory use due to tracking reads on incrementally opened sstable
   readers (CASSANDRA-8066)
 * Fix EXECUTE request with skipMetadata=false returning no metadata
   (CASSANDRA-8054)
 * Allow concurrent use of CQLBulkOutputFormat (CASSANDRA-7776)
 * Shutdown JVM on OOM (CASSANDRA-7507)
 * Upgrade netty version and enable epoll event loop (CASSANDRA-7761)
 * Don't duplicate sstables smaller than split size when using
   the sstablesplitter tool (CASSANDRA-7616)
 * Avoid re-parsing already prepared statements (CASSANDRA-7923)
 * Fix some Thrift slice deletions and updates of COMPACT STORAGE
   tables with some clustering columns omitted (CASSANDRA-7990)
 * Fix filtering for CONTAINS on sets (CASSANDRA-8033)
 * Properly track added size (CASSANDRA-7239)
 * Allow compilation in java 8 (CASSANDRA-7208)
 * Fix Assertion error on RangeTombstoneList diff (CASSANDRA-8013)
 * Release references to overlapping sstables during compaction (CASSANDRA-7819)
 * Send notification when opening compaction results early (CASSANDRA-8034)
 * Make native server start block until properly bound (CASSANDRA-7885)
 * (cqlsh) Fix IPv6 support (CASSANDRA-7988)
 * Ignore fat clients when checking for endpoint collision (CASSANDRA-7939)
 * Make sstablerepairedset take a list of files (CASSANDRA-7995)
 * (cqlsh) Tab completeion for indexes on map keys (CASSANDRA-7972)
 * (cqlsh) Fix UDT field selection in select clause (CASSANDRA-7891)
 * Fix resource leak in event of corrupt sstable
 * (cqlsh) Add command line option for cqlshrc file path (CASSANDRA-7131)
 * Provide visibility into prepared statements churn (CASSANDRA-7921, CASSANDRA-7930)
 * Invalidate prepared statements when their keyspace or table is
   dropped (CASSANDRA-7566)
 * cassandra-stress: fix support for NetworkTopologyStrategy (CASSANDRA-7945)
 * Fix saving caches when a table is dropped (CASSANDRA-7784)
 * Add better error checking of new stress profile (CASSANDRA-7716)
 * Use ThreadLocalRandom and remove FBUtilities.threadLocalRandom (CASSANDRA-7934)
 * Prevent operator mistakes due to simultaneous bootstrap (CASSANDRA-7069)
 * cassandra-stress supports whitelist mode for node config (CASSANDRA-7658)
 * GCInspector more closely tracks GC; cassandra-stress and nodetool report it (CASSANDRA-7916)
 * nodetool won't output bogus ownership info without a keyspace (CASSANDRA-7173)
 * Add human readable option to nodetool commands (CASSANDRA-5433)
 * Don't try to set repairedAt on old sstables (CASSANDRA-7913)
 * Add metrics for tracking PreparedStatement use (CASSANDRA-7719)
 * (cqlsh) tab-completion for triggers (CASSANDRA-7824)
 * (cqlsh) Support for query paging (CASSANDRA-7514)
 * (cqlsh) Show progress of COPY operations (CASSANDRA-7789)
 * Add syntax to remove multiple elements from a map (CASSANDRA-6599)
 * Support non-equals conditions in lightweight transactions (CASSANDRA-6839)
 * Add IF [NOT] EXISTS to create/drop triggers (CASSANDRA-7606)
 * (cqlsh) Display the current logged-in user (CASSANDRA-7785)
 * (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)
 * (cqlsh) COPY TO/FROM improvements (CASSANDRA-7405)
 * Support list index operations with conditions (CASSANDRA-7499)
 * Add max live/tombstoned cells to nodetool cfstats output (CASSANDRA-7731)
 * Validate IPv6 wildcard addresses properly (CASSANDRA-7680)
 * (cqlsh) Error when tracing query (CASSANDRA-7613)
 * Avoid IOOBE when building SyntaxError message snippet (CASSANDRA-7569)
 * SSTableExport uses correct validator to create string representation of partition
   keys (CASSANDRA-7498)
 * Avoid NPEs when receiving type changes for an unknown keyspace (CASSANDRA-7689)
 * Add support for custom 2i validation (CASSANDRA-7575)
 * Pig support for hadoop CqlInputFormat (CASSANDRA-6454)
 * Add duration mode to cassandra-stress (CASSANDRA-7468)
 * Add listen_interface and rpc_interface options (CASSANDRA-7417)
 * Improve schema merge performance (CASSANDRA-7444)
 * Adjust MT depth based on # of partition validating (CASSANDRA-5263)
 * Optimise NativeCell comparisons (CASSANDRA-6755)
 * Configurable client timeout for cqlsh (CASSANDRA-7516)
 * Include snippet of CQL query near syntax error in messages (CASSANDRA-7111)
 * Make repair -pr work with -local (CASSANDRA-7450)
 * Fix error in sstableloader with -cph > 1 (CASSANDRA-8007)
 * Fix snapshot repair error on indexed tables (CASSANDRA-8020)
 * Do not exit nodetool repair when receiving JMX NOTIF_LOST (CASSANDRA-7909)
 * Stream to private IP when available (CASSANDRA-8084)
Merged from 2.0:
 * Reject conditions on DELETE unless full PK is given (CASSANDRA-6430)
 * Properly reject the token function DELETE (CASSANDRA-7747)
 * Force batchlog replay before decommissioning a node (CASSANDRA-7446)
 * Fix hint replay with many accumulated expired hints (CASSANDRA-6998)
 * Fix duplicate results in DISTINCT queries on static columns with query
   paging (CASSANDRA-8108)
 * Add DateTieredCompactionStrategy (CASSANDRA-6602)
 * Properly validate ascii and utf8 string literals in CQL queries (CASSANDRA-8101)
 * (cqlsh) Fix autocompletion for alter keyspace (CASSANDRA-8021)
 * Create backup directories for commitlog archiving during startup (CASSANDRA-8111)
 * Reduce totalBlockFor() for LOCAL_* consistency levels (CASSANDRA-8058)
 * Fix merging schemas with re-dropped keyspaces (CASSANDRA-7256)
 * Fix counters in supercolumns during live upgrades from 1.2 (CASSANDRA-7188)
 * Notify DT subscribers when a column family is truncated (CASSANDRA-8088)
 * Add sanity check of $JAVA on startup (CASSANDRA-7676)
 * Schedule fat client schema pull on join (CASSANDRA-7993)
 * Don't reset nodes' versions when closing IncomingTcpConnections
   (CASSANDRA-7734)
 * Record the real messaging version in all cases in OutboundTcpConnection
   (CASSANDRA-8057)
 * SSL does not work in cassandra-cli (CASSANDRA-7899)
 * Fix potential exception when using ReversedType in DynamicCompositeType
   (CASSANDRA-7898)
 * Better validation of collection values (CASSANDRA-7833)
 * Track min/max timestamps correctly (CASSANDRA-7969)
 * Fix possible overflow while sorting CL segments for replay (CASSANDRA-7992)
 * Increase nodetool Xmx (CASSANDRA-7956)
 * Archive any commitlog segments present at startup (CASSANDRA-6904)
 * CrcCheckChance should adjust based on live CFMetadata not 
   sstable metadata (CASSANDRA-7978)
 * token() should only accept columns in the partitioning
   key order (CASSANDRA-6075)
 * Add method to invalidate permission cache via JMX (CASSANDRA-7977)
 * Allow propagating multiple gossip states atomically (CASSANDRA-6125)
 * Log exceptions related to unclean native protocol client disconnects
   at DEBUG or INFO (CASSANDRA-7849)
 * Allow permissions cache to be set via JMX (CASSANDRA-7698)
 * Include schema_triggers CF in readable system resources (CASSANDRA-7967)
 * Fix RowIndexEntry to report correct serializedSize (CASSANDRA-7948)
 * Make CQLSSTableWriter sync within partitions (CASSANDRA-7360)
 * Potentially use non-local replicas in CqlConfigHelper (CASSANDRA-7906)
 * Explicitly disallow mixing multi-column and single-column
   relations on clustering columns (CASSANDRA-7711)
 * Better error message when condition is set on PK column (CASSANDRA-7804)
 * Don't send schema change responses and events for no-op DDL
   statements (CASSANDRA-7600)
 * (Hadoop) fix cluster initialisation for a split fetching (CASSANDRA-7774)
 * Throw InvalidRequestException when queries contain relations on entire
   collection columns (CASSANDRA-7506)
 * (cqlsh) enable CTRL-R history search with libedit (CASSANDRA-7577)
 * (Hadoop) allow ACFRW to limit nodes to local DC (CASSANDRA-7252)
 * (cqlsh) cqlsh should automatically disable tracing when selecting
   from system_traces (CASSANDRA-7641)
 * (Hadoop) Add CqlOutputFormat (CASSANDRA-6927)
 * Don't depend on cassandra config for nodetool ring (CASSANDRA-7508)
 * (cqlsh) Fix failing cqlsh formatting tests (CASSANDRA-7703)
 * Fix IncompatibleClassChangeError from hadoop2 (CASSANDRA-7229)
 * Add 'nodetool sethintedhandoffthrottlekb' (CASSANDRA-7635)
 * (cqlsh) Add tab-completion for CREATE/DROP USER IF [NOT] EXISTS (CASSANDRA-7611)
 * Catch errors when the JVM pulls the rug out from GCInspector (CASSANDRA-5345)
 * cqlsh fails when version number parts are not int (CASSANDRA-7524)
 * Fix NPE when table dropped during streaming (CASSANDRA-7946)
 * Fix wrong progress when streaming uncompressed (CASSANDRA-7878)
 * Fix possible infinite loop in creating repair range (CASSANDRA-7983)
 * Fix unit in nodetool for streaming throughput (CASSANDRA-7375)
Merged from 1.2:
 * Don't index tombstones (CASSANDRA-7828)
 * Improve PasswordAuthenticator default super user setup (CASSANDRA-7788)


2.1.0
 * (cqlsh) Removed "ALTER TYPE <name> RENAME TO <name>" from tab-completion
   (CASSANDRA-7895)
 * Fixed IllegalStateException in anticompaction (CASSANDRA-7892)
 * cqlsh: DESCRIBE support for frozen UDTs, tuples (CASSANDRA-7863)
 * Avoid exposing internal classes over JMX (CASSANDRA-7879)
 * Add null check for keys when freezing collection (CASSANDRA-7869)
 * Improve stress workload realism (CASSANDRA-7519)
Merged from 2.0:
 * Configure system.paxos with LeveledCompactionStrategy (CASSANDRA-7753)
 * Fix ALTER clustering column type from DateType to TimestampType when
   using DESC clustering order (CASSANRDA-7797)
 * Throw EOFException if we run out of chunks in compressed datafile
   (CASSANDRA-7664)
 * Fix PRSI handling of CQL3 row markers for row cleanup (CASSANDRA-7787)
 * Fix dropping collection when it's the last regular column (CASSANDRA-7744)
 * Make StreamReceiveTask thread safe and gc friendly (CASSANDRA-7795)
 * Validate empty cell names from counter updates (CASSANDRA-7798)
Merged from 1.2:
 * Don't allow compacted sstables to be marked as compacting (CASSANDRA-7145)
 * Track expired tombstones (CASSANDRA-7810)


2.1.0-rc7
 * Add frozen keyword and require UDT to be frozen (CASSANDRA-7857)
 * Track added sstable size correctly (CASSANDRA-7239)
 * (cqlsh) Fix case insensitivity (CASSANDRA-7834)
 * Fix failure to stream ranges when moving (CASSANDRA-7836)
 * Correctly remove tmplink files (CASSANDRA-7803)
 * (cqlsh) Fix column name formatting for functions, CAS operations,
   and UDT field selections (CASSANDRA-7806)
 * (cqlsh) Fix COPY FROM handling of null/empty primary key
   values (CASSANDRA-7792)
 * Fix ordering of static cells (CASSANDRA-7763)
Merged from 2.0:
 * Forbid re-adding dropped counter columns (CASSANDRA-7831)
 * Fix CFMetaData#isThriftCompatible() for PK-only tables (CASSANDRA-7832)
 * Always reject inequality on the partition key without token()
   (CASSANDRA-7722)
 * Always send Paxos commit to all replicas (CASSANDRA-7479)
 * Make disruptor_thrift_server invocation pool configurable (CASSANDRA-7594)
 * Make repair no-op when RF=1 (CASSANDRA-7864)


2.1.0-rc6
 * Fix OOM issue from netty caching over time (CASSANDRA-7743)
 * json2sstable couldn't import JSON for CQL table (CASSANDRA-7477)
 * Invalidate all caches on table drop (CASSANDRA-7561)
 * Skip strict endpoint selection for ranges if RF == nodes (CASSANRA-7765)
 * Fix Thrift range filtering without 2ary index lookups (CASSANDRA-7741)
 * Add tracing entries about concurrent range requests (CASSANDRA-7599)
 * (cqlsh) Fix DESCRIBE for NTS keyspaces (CASSANDRA-7729)
 * Remove netty buffer ref-counting (CASSANDRA-7735)
 * Pass mutated cf to index updater for use by PRSI (CASSANDRA-7742)
 * Include stress yaml example in release and deb (CASSANDRA-7717)
 * workaround for netty issue causing corrupted data off the wire (CASSANDRA-7695)
 * cqlsh DESC CLUSTER fails retrieving ring information (CASSANDRA-7687)
 * Fix binding null values inside UDT (CASSANDRA-7685)
 * Fix UDT field selection with empty fields (CASSANDRA-7670)
 * Bogus deserialization of static cells from sstable (CASSANDRA-7684)
 * Fix NPE on compaction leftover cleanup for dropped table (CASSANDRA-7770)
Merged from 2.0:
 * Fix race condition in StreamTransferTask that could lead to
   infinite loops and premature sstable deletion (CASSANDRA-7704)
 * (cqlsh) Wait up to 10 sec for a tracing session (CASSANDRA-7222)
 * Fix NPE in FileCacheService.sizeInBytes (CASSANDRA-7756)
 * Remove duplicates from StorageService.getJoiningNodes (CASSANDRA-7478)
 * Clone token map outside of hot gossip loops (CASSANDRA-7758)
 * Fix MS expiring map timeout for Paxos messages (CASSANDRA-7752)
 * Do not flush on truncate if durable_writes is false (CASSANDRA-7750)
 * Give CRR a default input_cql Statement (CASSANDRA-7226)
 * Better error message when adding a collection with the same name
   than a previously dropped one (CASSANDRA-6276)
 * Fix validation when adding static columns (CASSANDRA-7730)
 * (Thrift) fix range deletion of supercolumns (CASSANDRA-7733)
 * Fix potential AssertionError in RangeTombstoneList (CASSANDRA-7700)
 * Validate arguments of blobAs* functions (CASSANDRA-7707)
 * Fix potential AssertionError with 2ndary indexes (CASSANDRA-6612)
 * Avoid logging CompactionInterrupted at ERROR (CASSANDRA-7694)
 * Minor leak in sstable2jon (CASSANDRA-7709)
 * Add cassandra.auto_bootstrap system property (CASSANDRA-7650)
 * Update java driver (for hadoop) (CASSANDRA-7618)
 * Remove CqlPagingRecordReader/CqlPagingInputFormat (CASSANDRA-7570)
 * Support connecting to ipv6 jmx with nodetool (CASSANDRA-7669)


2.1.0-rc5
 * Reject counters inside user types (CASSANDRA-7672)
 * Switch to notification-based GCInspector (CASSANDRA-7638)
 * (cqlsh) Handle nulls in UDTs and tuples correctly (CASSANDRA-7656)
 * Don't use strict consistency when replacing (CASSANDRA-7568)
 * Fix min/max cell name collection on 2.0 SSTables with range
   tombstones (CASSANDRA-7593)
 * Tolerate min/max cell names of different lengths (CASSANDRA-7651)
 * Filter cached results correctly (CASSANDRA-7636)
 * Fix tracing on the new SEPExecutor (CASSANDRA-7644)
 * Remove shuffle and taketoken (CASSANDRA-7601)
 * Clean up Windows batch scripts (CASSANDRA-7619)
 * Fix native protocol drop user type notification (CASSANDRA-7571)
 * Give read access to system.schema_usertypes to all authenticated users
   (CASSANDRA-7578)
 * (cqlsh) Fix cqlsh display when zero rows are returned (CASSANDRA-7580)
 * Get java version correctly when JAVA_TOOL_OPTIONS is set (CASSANDRA-7572)
 * Fix NPE when dropping index from non-existent keyspace, AssertionError when
   dropping non-existent index with IF EXISTS (CASSANDRA-7590)
 * Fix sstablelevelresetter hang (CASSANDRA-7614)
 * (cqlsh) Fix deserialization of blobs (CASSANDRA-7603)
 * Use "keyspace updated" schema change message for UDT changes in v1 and
   v2 protocols (CASSANDRA-7617)
 * Fix tracing of range slices and secondary index lookups that are local
   to the coordinator (CASSANDRA-7599)
 * Set -Dcassandra.storagedir for all tool shell scripts (CASSANDRA-7587)
 * Don't swap max/min col names when mutating sstable metadata (CASSANDRA-7596)
 * (cqlsh) Correctly handle paged result sets (CASSANDRA-7625)
 * (cqlsh) Improve waiting for a trace to complete (CASSANDRA-7626)
 * Fix tracing of concurrent range slices and 2ary index queries (CASSANDRA-7626)
 * Fix scrub against collection type (CASSANDRA-7665)
Merged from 2.0:
 * Set gc_grace_seconds to seven days for system schema tables (CASSANDRA-7668)
 * SimpleSeedProvider no longer caches seeds forever (CASSANDRA-7663)
 * Always flush on truncate (CASSANDRA-7511)
 * Fix ReversedType(DateType) mapping to native protocol (CASSANDRA-7576)
 * Always merge ranges owned by a single node (CASSANDRA-6930)
 * Track max/min timestamps for range tombstones (CASSANDRA-7647)
 * Fix NPE when listing saved caches dir (CASSANDRA-7632)


2.1.0-rc4
 * Fix word count hadoop example (CASSANDRA-7200)
 * Updated memtable_cleanup_threshold and memtable_flush_writers defaults 
   (CASSANDRA-7551)
 * (Windows) fix startup when WMI memory query fails (CASSANDRA-7505)
 * Anti-compaction proceeds if any part of the repair failed (CASSANDRA-7521)
 * Add missing table name to DROP INDEX responses and notifications (CASSANDRA-7539)
 * Bump CQL version to 3.2.0 and update CQL documentation (CASSANDRA-7527)
 * Fix configuration error message when running nodetool ring (CASSANDRA-7508)
 * Support conditional updates, tuple type, and the v3 protocol in cqlsh (CASSANDRA-7509)
 * Handle queries on multiple secondary index types (CASSANDRA-7525)
 * Fix cqlsh authentication with v3 native protocol (CASSANDRA-7564)
 * Fix NPE when unknown prepared statement ID is used (CASSANDRA-7454)
Merged from 2.0:
 * (Windows) force range-based repair to non-sequential mode (CASSANDRA-7541)
 * Fix range merging when DES scores are zero (CASSANDRA-7535)
 * Warn when SSL certificates have expired (CASSANDRA-7528)
 * Fix error when doing reversed queries with static columns (CASSANDRA-7490)
Merged from 1.2:
 * Set correct stream ID on responses when non-Exception Throwables
   are thrown while handling native protocol messages (CASSANDRA-7470)


2.1.0-rc3
 * Consider expiry when reconciling otherwise equal cells (CASSANDRA-7403)
 * Introduce CQL support for stress tool (CASSANDRA-6146)
 * Fix ClassCastException processing expired messages (CASSANDRA-7496)
 * Fix prepared marker for collections inside UDT (CASSANDRA-7472)
 * Remove left-over populate_io_cache_on_flush and replicate_on_write
   uses (CASSANDRA-7493)
 * (Windows) handle spaces in path names (CASSANDRA-7451)
 * Ensure writes have completed after dropping a table, before recycling
   commit log segments (CASSANDRA-7437)
 * Remove left-over rows_per_partition_to_cache (CASSANDRA-7493)
 * Fix error when CONTAINS is used with a bind marker (CASSANDRA-7502)
 * Properly reject unknown UDT field (CASSANDRA-7484)
Merged from 2.0:
 * Fix CC#collectTimeOrderedData() tombstone optimisations (CASSANDRA-7394)
 * Support DISTINCT for static columns and fix behaviour when DISTINC is
   not use (CASSANDRA-7305).
 * Workaround JVM NPE on JMX bind failure (CASSANDRA-7254)
 * Fix race in FileCacheService RemovalListener (CASSANDRA-7278)
 * Fix inconsistent use of consistencyForCommit that allowed LOCAL_QUORUM
   operations to incorrect become full QUORUM (CASSANDRA-7345)
 * Properly handle unrecognized opcodes and flags (CASSANDRA-7440)
 * (Hadoop) close CqlRecordWriter clients when finished (CASSANDRA-7459)
 * Commit disk failure policy (CASSANDRA-7429)
 * Make sure high level sstables get compacted (CASSANDRA-7414)
 * Fix AssertionError when using empty clustering columns and static columns
   (CASSANDRA-7455)
 * Add option to disable STCS in L0 (CASSANDRA-6621)
 * Upgrade to snappy-java 1.0.5.2 (CASSANDRA-7476)


2.1.0-rc2
 * Fix heap size calculation for CompoundSparseCellName and 
   CompoundSparseCellName.WithCollection (CASSANDRA-7421)
 * Allow counter mutations in UNLOGGED batches (CASSANDRA-7351)
 * Modify reconcile logic to always pick a tombstone over a counter cell
   (CASSANDRA-7346)
 * Avoid incremental compaction on Windows (CASSANDRA-7365)
 * Fix exception when querying a composite-keyed table with a collection index
   (CASSANDRA-7372)
 * Use node's host id in place of counter ids (CASSANDRA-7366)
 * Fix error when doing reversed queries with static columns (CASSANDRA-7490)
 * Backport CASSANDRA-6747 (CASSANDRA-7560)
 * Track max/min timestamps for range tombstones (CASSANDRA-7647)
 * Fix NPE when listing saved caches dir (CASSANDRA-7632)
 * Fix sstableloader unable to connect encrypted node (CASSANDRA-7585)
Merged from 1.2:
 * Clone token map outside of hot gossip loops (CASSANDRA-7758)
 * Add stop method to EmbeddedCassandraService (CASSANDRA-7595)
 * Support connecting to ipv6 jmx with nodetool (CASSANDRA-7669)
 * Set gc_grace_seconds to seven days for system schema tables (CASSANDRA-7668)
 * SimpleSeedProvider no longer caches seeds forever (CASSANDRA-7663)
 * Set correct stream ID on responses when non-Exception Throwables
   are thrown while handling native protocol messages (CASSANDRA-7470)
 * Fix row size miscalculation in LazilyCompactedRow (CASSANDRA-7543)
 * Fix race in background compaction check (CASSANDRA-7745)
 * Don't clear out range tombstones during compaction (CASSANDRA-7808)


2.1.0-rc1
 * Revert flush directory (CASSANDRA-6357)
 * More efficient executor service for fast operations (CASSANDRA-4718)
 * Move less common tools into a new cassandra-tools package (CASSANDRA-7160)
 * Support more concurrent requests in native protocol (CASSANDRA-7231)
 * Add tab-completion to debian nodetool packaging (CASSANDRA-6421)
 * Change concurrent_compactors defaults (CASSANDRA-7139)
 * Add PowerShell Windows launch scripts (CASSANDRA-7001)
 * Make commitlog archive+restore more robust (CASSANDRA-6974)
 * Fix marking commitlogsegments clean (CASSANDRA-6959)
 * Add snapshot "manifest" describing files included (CASSANDRA-6326)
 * Parallel streaming for sstableloader (CASSANDRA-3668)
 * Fix bugs in supercolumns handling (CASSANDRA-7138)
 * Fix ClassClassException on composite dense tables (CASSANDRA-7112)
 * Cleanup and optimize collation and slice iterators (CASSANDRA-7107)
 * Upgrade NBHM lib (CASSANDRA-7128)
 * Optimize netty server (CASSANDRA-6861)
 * Fix repair hang when given CF does not exist (CASSANDRA-7189)
 * Allow c* to be shutdown in an embedded mode (CASSANDRA-5635)
 * Add server side batching to native transport (CASSANDRA-5663)
 * Make batchlog replay asynchronous (CASSANDRA-6134)
 * remove unused classes (CASSANDRA-7197)
 * Limit user types to the keyspace they are defined in (CASSANDRA-6643)
 * Add validate method to CollectionType (CASSANDRA-7208)
 * New serialization format for UDT values (CASSANDRA-7209, CASSANDRA-7261)
 * Fix nodetool netstats (CASSANDRA-7270)
 * Fix potential ClassCastException in HintedHandoffManager (CASSANDRA-7284)
 * Use prepared statements internally (CASSANDRA-6975)
 * Fix broken paging state with prepared statement (CASSANDRA-7120)
 * Fix IllegalArgumentException in CqlStorage (CASSANDRA-7287)
 * Allow nulls/non-existant fields in UDT (CASSANDRA-7206)
 * Add Thrift MultiSliceRequest (CASSANDRA-6757, CASSANDRA-7027)
 * Handle overlapping MultiSlices (CASSANDRA-7279)
 * Fix DataOutputTest on Windows (CASSANDRA-7265)
 * Embedded sets in user defined data-types are not updating (CASSANDRA-7267)
 * Add tuple type to CQL/native protocol (CASSANDRA-7248)
 * Fix CqlPagingRecordReader on tables with few rows (CASSANDRA-7322)
Merged from 2.0:
 * Copy compaction options to make sure they are reloaded (CASSANDRA-7290)
 * Add option to do more aggressive tombstone compactions (CASSANDRA-6563)
 * Don't try to compact already-compacting files in HHOM (CASSANDRA-7288)
 * Always reallocate buffers in HSHA (CASSANDRA-6285)
 * (Hadoop) support authentication in CqlRecordReader (CASSANDRA-7221)
 * (Hadoop) Close java driver Cluster in CQLRR.close (CASSANDRA-7228)
 * Warn when 'USING TIMESTAMP' is used on a CAS BATCH (CASSANDRA-7067)
 * return all cpu values from BackgroundActivityMonitor.readAndCompute (CASSANDRA-7183)
 * Correctly delete scheduled range xfers (CASSANDRA-7143)
 * return all cpu values from BackgroundActivityMonitor.readAndCompute (CASSANDRA-7183)  
 * reduce garbage creation in calculatePendingRanges (CASSANDRA-7191)
 * fix c* launch issues on Russian os's due to output of linux 'free' cmd (CASSANDRA-6162)
 * Fix disabling autocompaction (CASSANDRA-7187)
 * Fix potential NumberFormatException when deserializing IntegerType (CASSANDRA-7088)
 * cqlsh can't tab-complete disabling compaction (CASSANDRA-7185)
 * cqlsh: Accept and execute CQL statement(s) from command-line parameter (CASSANDRA-7172)
 * Fix IllegalStateException in CqlPagingRecordReader (CASSANDRA-7198)
 * Fix the InvertedIndex trigger example (CASSANDRA-7211)
 * Add --resolve-ip option to 'nodetool ring' (CASSANDRA-7210)
 * reduce garbage on codec flag deserialization (CASSANDRA-7244) 
 * Fix duplicated error messages on directory creation error at startup (CASSANDRA-5818)
 * Proper null handle for IF with map element access (CASSANDRA-7155)
 * Improve compaction visibility (CASSANDRA-7242)
 * Correctly delete scheduled range xfers (CASSANDRA-7143)
 * Make batchlog replica selection rack-aware (CASSANDRA-6551)
 * Fix CFMetaData#getColumnDefinitionFromColumnName() (CASSANDRA-7074)
 * Fix writetime/ttl functions for static columns (CASSANDRA-7081)
 * Suggest CTRL-C or semicolon after three blank lines in cqlsh (CASSANDRA-7142)
 * Fix 2ndary index queries with DESC clustering order (CASSANDRA-6950)
 * Invalid key cache entries on DROP (CASSANDRA-6525)
 * Fix flapping RecoveryManagerTest (CASSANDRA-7084)
 * Add missing iso8601 patterns for date strings (CASSANDRA-6973)
 * Support selecting multiple rows in a partition using IN (CASSANDRA-6875)
 * Add authentication support to shuffle (CASSANDRA-6484)
 * Swap local and global default read repair chances (CASSANDRA-7320)
 * Add conditional CREATE/DROP USER support (CASSANDRA-7264)
 * Cqlsh counts non-empty lines for "Blank lines" warning (CASSANDRA-7325)
Merged from 1.2:
 * Add Cloudstack snitch (CASSANDRA-7147)
 * Update system.peers correctly when relocating tokens (CASSANDRA-7126)
 * Add Google Compute Engine snitch (CASSANDRA-7132)
 * remove duplicate query for local tokens (CASSANDRA-7182)
 * exit CQLSH with error status code if script fails (CASSANDRA-6344)
 * Fix bug with some IN queries missig results (CASSANDRA-7105)
 * Fix availability validation for LOCAL_ONE CL (CASSANDRA-7319)
 * Hint streaming can cause decommission to fail (CASSANDRA-7219)


2.1.0-beta2
 * Increase default CL space to 8GB (CASSANDRA-7031)
 * Add range tombstones to read repair digests (CASSANDRA-6863)
 * Fix BTree.clear for large updates (CASSANDRA-6943)
 * Fail write instead of logging a warning when unable to append to CL
   (CASSANDRA-6764)
 * Eliminate possibility of CL segment appearing twice in active list 
   (CASSANDRA-6557)
 * Apply DONTNEED fadvise to commitlog segments (CASSANDRA-6759)
 * Switch CRC component to Adler and include it for compressed sstables 
   (CASSANDRA-4165)
 * Allow cassandra-stress to set compaction strategy options (CASSANDRA-6451)
 * Add broadcast_rpc_address option to cassandra.yaml (CASSANDRA-5899)
 * Auto reload GossipingPropertyFileSnitch config (CASSANDRA-5897)
 * Fix overflow of memtable_total_space_in_mb (CASSANDRA-6573)
 * Fix ABTC NPE and apply update function correctly (CASSANDRA-6692)
 * Allow nodetool to use a file or prompt for password (CASSANDRA-6660)
 * Fix AIOOBE when concurrently accessing ABSC (CASSANDRA-6742)
 * Fix assertion error in ALTER TYPE RENAME (CASSANDRA-6705)
 * Scrub should not always clear out repaired status (CASSANDRA-5351)
 * Improve handling of range tombstone for wide partitions (CASSANDRA-6446)
 * Fix ClassCastException for compact table with composites (CASSANDRA-6738)
 * Fix potentially repairing with wrong nodes (CASSANDRA-6808)
 * Change caching option syntax (CASSANDRA-6745)
 * Fix stress to do proper counter reads (CASSANDRA-6835)
 * Fix help message for stress counter_write (CASSANDRA-6824)
 * Fix stress smart Thrift client to pick servers correctly (CASSANDRA-6848)
 * Add logging levels (minimal, normal or verbose) to stress tool (CASSANDRA-6849)
 * Fix race condition in Batch CLE (CASSANDRA-6860)
 * Improve cleanup/scrub/upgradesstables failure handling (CASSANDRA-6774)
 * ByteBuffer write() methods for serializing sstables (CASSANDRA-6781)
 * Proper compare function for CollectionType (CASSANDRA-6783)
 * Update native server to Netty 4 (CASSANDRA-6236)
 * Fix off-by-one error in stress (CASSANDRA-6883)
 * Make OpOrder AutoCloseable (CASSANDRA-6901)
 * Remove sync repair JMX interface (CASSANDRA-6900)
 * Add multiple memory allocation options for memtables (CASSANDRA-6689, 6694)
 * Remove adjusted op rate from stress output (CASSANDRA-6921)
 * Add optimized CF.hasColumns() implementations (CASSANDRA-6941)
 * Serialize batchlog mutations with the version of the target node
   (CASSANDRA-6931)
 * Optimize CounterColumn#reconcile() (CASSANDRA-6953)
 * Properly remove 1.2 sstable support in 2.1 (CASSANDRA-6869)
 * Lock counter cells, not partitions (CASSANDRA-6880)
 * Track presence of legacy counter shards in sstables (CASSANDRA-6888)
 * Ensure safe resource cleanup when replacing sstables (CASSANDRA-6912)
 * Add failure handler to async callback (CASSANDRA-6747)
 * Fix AE when closing SSTable without releasing reference (CASSANDRA-7000)
 * Clean up IndexInfo on keyspace/table drops (CASSANDRA-6924)
 * Only snapshot relative SSTables when sequential repair (CASSANDRA-7024)
 * Require nodetool rebuild_index to specify index names (CASSANDRA-7038)
 * fix cassandra stress errors on reads with native protocol (CASSANDRA-7033)
 * Use OpOrder to guard sstable references for reads (CASSANDRA-6919)
 * Preemptive opening of compaction result (CASSANDRA-6916)
 * Multi-threaded scrub/cleanup/upgradesstables (CASSANDRA-5547)
 * Optimize cellname comparison (CASSANDRA-6934)
 * Native protocol v3 (CASSANDRA-6855)
 * Optimize Cell liveness checks and clean up Cell (CASSANDRA-7119)
 * Support consistent range movements (CASSANDRA-2434)
 * Display min timestamp in sstablemetadata viewer (CASSANDRA-6767)
Merged from 2.0:
 * Avoid race-prone second "scrub" of system keyspace (CASSANDRA-6797)
 * Pool CqlRecordWriter clients by inetaddress rather than Range
   (CASSANDRA-6665)
 * Fix compaction_history timestamps (CASSANDRA-6784)
 * Compare scores of full replica ordering in DES (CASSANDRA-6683)
 * fix CME in SessionInfo updateProgress affecting netstats (CASSANDRA-6577)
 * Allow repairing between specific replicas (CASSANDRA-6440)
 * Allow per-dc enabling of hints (CASSANDRA-6157)
 * Add compatibility for Hadoop 0.2.x (CASSANDRA-5201)
 * Fix EstimatedHistogram races (CASSANDRA-6682)
 * Failure detector correctly converts initial value to nanos (CASSANDRA-6658)
 * Add nodetool taketoken to relocate vnodes (CASSANDRA-4445)
 * Expose bulk loading progress over JMX (CASSANDRA-4757)
 * Correctly handle null with IF conditions and TTL (CASSANDRA-6623)
 * Account for range/row tombstones in tombstone drop
   time histogram (CASSANDRA-6522)
 * Stop CommitLogSegment.close() from calling sync() (CASSANDRA-6652)
 * Make commitlog failure handling configurable (CASSANDRA-6364)
 * Avoid overlaps in LCS (CASSANDRA-6688)
 * Improve support for paginating over composites (CASSANDRA-4851)
 * Fix count(*) queries in a mixed cluster (CASSANDRA-6707)
 * Improve repair tasks(snapshot, differencing) concurrency (CASSANDRA-6566)
 * Fix replaying pre-2.0 commit logs (CASSANDRA-6714)
 * Add static columns to CQL3 (CASSANDRA-6561)
 * Optimize single partition batch statements (CASSANDRA-6737)
 * Disallow post-query re-ordering when paging (CASSANDRA-6722)
 * Fix potential paging bug with deleted columns (CASSANDRA-6748)
 * Fix NPE on BulkLoader caused by losing StreamEvent (CASSANDRA-6636)
 * Fix truncating compression metadata (CASSANDRA-6791)
 * Add CMSClassUnloadingEnabled JVM option (CASSANDRA-6541)
 * Catch memtable flush exceptions during shutdown (CASSANDRA-6735)
 * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645)
 * Fix UPDATE updating PRIMARY KEY columns implicitly (CASSANDRA-6782)
 * Fix IllegalArgumentException when updating from 1.2 with SuperColumns
   (CASSANDRA-6733)
 * FBUtilities.singleton() should use the CF comparator (CASSANDRA-6778)
 * Fix CQLSStableWriter.addRow(Map<String, Object>) (CASSANDRA-6526)
 * Fix HSHA server introducing corrupt data (CASSANDRA-6285)
 * Fix CAS conditions for COMPACT STORAGE tables (CASSANDRA-6813)
 * Starting threads in OutboundTcpConnectionPool constructor causes race conditions (CASSANDRA-7177)
 * Allow overriding cassandra-rackdc.properties file (CASSANDRA-7072)
 * Set JMX RMI port to 7199 (CASSANDRA-7087)
 * Use LOCAL_QUORUM for data reads at LOCAL_SERIAL (CASSANDRA-6939)
 * Log a warning for large batches (CASSANDRA-6487)
 * Put nodes in hibernate when join_ring is false (CASSANDRA-6961)
 * Avoid early loading of non-system keyspaces before compaction-leftovers 
   cleanup at startup (CASSANDRA-6913)
 * Restrict Windows to parallel repairs (CASSANDRA-6907)
 * (Hadoop) Allow manually specifying start/end tokens in CFIF (CASSANDRA-6436)
 * Fix NPE in MeteredFlusher (CASSANDRA-6820)
 * Fix race processing range scan responses (CASSANDRA-6820)
 * Allow deleting snapshots from dropped keyspaces (CASSANDRA-6821)
 * Add uuid() function (CASSANDRA-6473)
 * Omit tombstones from schema digests (CASSANDRA-6862)
 * Include correct consistencyLevel in LWT timeout (CASSANDRA-6884)
 * Lower chances for losing new SSTables during nodetool refresh and
   ColumnFamilyStore.loadNewSSTables (CASSANDRA-6514)
 * Add support for DELETE ... IF EXISTS to CQL3 (CASSANDRA-5708)
 * Update hadoop_cql3_word_count example (CASSANDRA-6793)
 * Fix handling of RejectedExecution in sync Thrift server (CASSANDRA-6788)
 * Log more information when exceeding tombstone_warn_threshold (CASSANDRA-6865)
 * Fix truncate to not abort due to unreachable fat clients (CASSANDRA-6864)
 * Fix schema concurrency exceptions (CASSANDRA-6841)
 * Fix leaking validator FH in StreamWriter (CASSANDRA-6832)
 * Fix saving triggers to schema (CASSANDRA-6789)
 * Fix trigger mutations when base mutation list is immutable (CASSANDRA-6790)
 * Fix accounting in FileCacheService to allow re-using RAR (CASSANDRA-6838)
 * Fix static counter columns (CASSANDRA-6827)
 * Restore expiring->deleted (cell) compaction optimization (CASSANDRA-6844)
 * Fix CompactionManager.needsCleanup (CASSANDRA-6845)
 * Correctly compare BooleanType values other than 0 and 1 (CASSANDRA-6779)
 * Read message id as string from earlier versions (CASSANDRA-6840)
 * Properly use the Paxos consistency for (non-protocol) batch (CASSANDRA-6837)
 * Add paranoid disk failure option (CASSANDRA-6646)
 * Improve PerRowSecondaryIndex performance (CASSANDRA-6876)
 * Extend triggers to support CAS updates (CASSANDRA-6882)
 * Static columns with IF NOT EXISTS don't always work as expected (CASSANDRA-6873)
 * Fix paging with SELECT DISTINCT (CASSANDRA-6857)
 * Fix UnsupportedOperationException on CAS timeout (CASSANDRA-6923)
 * Improve MeteredFlusher handling of MF-unaffected column families
   (CASSANDRA-6867)
 * Add CqlRecordReader using native pagination (CASSANDRA-6311)
 * Add QueryHandler interface (CASSANDRA-6659)
 * Track liveRatio per-memtable, not per-CF (CASSANDRA-6945)
 * Make sure upgradesstables keeps sstable level (CASSANDRA-6958)
 * Fix LIMIT with static columns (CASSANDRA-6956)
 * Fix clash with CQL column name in thrift validation (CASSANDRA-6892)
 * Fix error with super columns in mixed 1.2-2.0 clusters (CASSANDRA-6966)
 * Fix bad skip of sstables on slice query with composite start/finish (CASSANDRA-6825)
 * Fix unintended update with conditional statement (CASSANDRA-6893)
 * Fix map element access in IF (CASSANDRA-6914)
 * Avoid costly range calculations for range queries on system keyspaces
   (CASSANDRA-6906)
 * Fix SSTable not released if stream session fails (CASSANDRA-6818)
 * Avoid build failure due to ANTLR timeout (CASSANDRA-6991)
 * Queries on compact tables can return more rows that requested (CASSANDRA-7052)
 * USING TIMESTAMP for batches does not work (CASSANDRA-7053)
 * Fix performance regression from CASSANDRA-5614 (CASSANDRA-6949)
 * Ensure that batchlog and hint timeouts do not produce hints (CASSANDRA-7058)
 * Merge groupable mutations in TriggerExecutor#execute() (CASSANDRA-7047)
 * Plug holes in resource release when wiring up StreamSession (CASSANDRA-7073)
 * Re-add parameter columns to tracing session (CASSANDRA-6942)
 * Preserves CQL metadata when updating table from thrift (CASSANDRA-6831)
Merged from 1.2:
 * Fix nodetool display with vnodes (CASSANDRA-7082)
 * Add UNLOGGED, COUNTER options to BATCH documentation (CASSANDRA-6816)
 * add extra SSL cipher suites (CASSANDRA-6613)
 * fix nodetool getsstables for blob PK (CASSANDRA-6803)
 * Fix BatchlogManager#deleteBatch() use of millisecond timestamps
   (CASSANDRA-6822)
 * Continue assassinating even if the endpoint vanishes (CASSANDRA-6787)
 * Schedule schema pulls on change (CASSANDRA-6971)
 * Non-droppable verbs shouldn't be dropped from OTC (CASSANDRA-6980)
 * Shutdown batchlog executor in SS#drain() (CASSANDRA-7025)
 * Fix batchlog to account for CF truncation records (CASSANDRA-6999)
 * Fix CQLSH parsing of functions and BLOB literals (CASSANDRA-7018)
 * Properly load trustore in the native protocol (CASSANDRA-6847)
 * Always clean up references in SerializingCache (CASSANDRA-6994)
 * Don't shut MessagingService down when replacing a node (CASSANDRA-6476)
 * fix npe when doing -Dcassandra.fd_initial_value_ms (CASSANDRA-6751)


2.1.0-beta1
 * Add flush directory distinct from compaction directories (CASSANDRA-6357)
 * Require JNA by default (CASSANDRA-6575)
 * add listsnapshots command to nodetool (CASSANDRA-5742)
 * Introduce AtomicBTreeColumns (CASSANDRA-6271, 6692)
 * Multithreaded commitlog (CASSANDRA-3578)
 * allocate fixed index summary memory pool and resample cold index summaries 
   to use less memory (CASSANDRA-5519)
 * Removed multithreaded compaction (CASSANDRA-6142)
 * Parallelize fetching rows for low-cardinality indexes (CASSANDRA-1337)
 * change logging from log4j to logback (CASSANDRA-5883)
 * switch to LZ4 compression for internode communication (CASSANDRA-5887)
 * Stop using Thrift-generated Index* classes internally (CASSANDRA-5971)
 * Remove 1.2 network compatibility code (CASSANDRA-5960)
 * Remove leveled json manifest migration code (CASSANDRA-5996)
 * Remove CFDefinition (CASSANDRA-6253)
 * Use AtomicIntegerFieldUpdater in RefCountedMemory (CASSANDRA-6278)
 * User-defined types for CQL3 (CASSANDRA-5590)
 * Use of o.a.c.metrics in nodetool (CASSANDRA-5871, 6406)
 * Batch read from OTC's queue and cleanup (CASSANDRA-1632)
 * Secondary index support for collections (CASSANDRA-4511, 6383)
 * SSTable metadata(Stats.db) format change (CASSANDRA-6356)
 * Push composites support in the storage engine
   (CASSANDRA-5417, CASSANDRA-6520)
 * Add snapshot space used to cfstats (CASSANDRA-6231)
 * Add cardinality estimator for key count estimation (CASSANDRA-5906)
 * CF id is changed to be non-deterministic. Data dir/key cache are created
   uniquely for CF id (CASSANDRA-5202)
 * New counters implementation (CASSANDRA-6504)
 * Replace UnsortedColumns, EmptyColumns, TreeMapBackedSortedColumns with new
   ArrayBackedSortedColumns (CASSANDRA-6630, CASSANDRA-6662, CASSANDRA-6690)
 * Add option to use row cache with a given amount of rows (CASSANDRA-5357)
 * Avoid repairing already repaired data (CASSANDRA-5351)
 * Reject counter updates with USING TTL/TIMESTAMP (CASSANDRA-6649)
 * Replace index_interval with min/max_index_interval (CASSANDRA-6379)
 * Lift limitation that order by columns must be selected for IN queries (CASSANDRA-4911)


2.0.5
 * Reduce garbage generated by bloom filter lookups (CASSANDRA-6609)
 * Add ks.cf names to tombstone logging (CASSANDRA-6597)
 * Use LOCAL_QUORUM for LWT operations at LOCAL_SERIAL (CASSANDRA-6495)
 * Wait for gossip to settle before accepting client connections (CASSANDRA-4288)
 * Delete unfinished compaction incrementally (CASSANDRA-6086)
 * Allow specifying custom secondary index options in CQL3 (CASSANDRA-6480)
 * Improve replica pinning for cache efficiency in DES (CASSANDRA-6485)
 * Fix LOCAL_SERIAL from thrift (CASSANDRA-6584)
 * Don't special case received counts in CAS timeout exceptions (CASSANDRA-6595)
 * Add support for 2.1 global counter shards (CASSANDRA-6505)
 * Fix NPE when streaming connection is not yet established (CASSANDRA-6210)
 * Avoid rare duplicate read repair triggering (CASSANDRA-6606)
 * Fix paging discardFirst (CASSANDRA-6555)
 * Fix ArrayIndexOutOfBoundsException in 2ndary index query (CASSANDRA-6470)
 * Release sstables upon rebuilding 2i (CASSANDRA-6635)
 * Add AbstractCompactionStrategy.startup() method (CASSANDRA-6637)
 * SSTableScanner may skip rows during cleanup (CASSANDRA-6638)
 * sstables from stalled repair sessions can resurrect deleted data (CASSANDRA-6503)
 * Switch stress to use ITransportFactory (CASSANDRA-6641)
 * Fix IllegalArgumentException during prepare (CASSANDRA-6592)
 * Fix possible loss of 2ndary index entries during compaction (CASSANDRA-6517)
 * Fix direct Memory on architectures that do not support unaligned long access
   (CASSANDRA-6628)
 * Let scrub optionally skip broken counter partitions (CASSANDRA-5930)
Merged from 1.2:
 * fsync compression metadata (CASSANDRA-6531)
 * Validate CF existence on execution for prepared statement (CASSANDRA-6535)
 * Add ability to throttle batchlog replay (CASSANDRA-6550)
 * Fix executing LOCAL_QUORUM with SimpleStrategy (CASSANDRA-6545)
 * Avoid StackOverflow when using large IN queries (CASSANDRA-6567)
 * Nodetool upgradesstables includes secondary indexes (CASSANDRA-6598)
 * Paginate batchlog replay (CASSANDRA-6569)
 * skip blocking on streaming during drain (CASSANDRA-6603)
 * Improve error message when schema doesn't match loaded sstable (CASSANDRA-6262)
 * Add properties to adjust FD initial value and max interval (CASSANDRA-4375)
 * Fix preparing with batch and delete from collection (CASSANDRA-6607)
 * Fix ABSC reverse iterator's remove() method (CASSANDRA-6629)
 * Handle host ID conflicts properly (CASSANDRA-6615)
 * Move handling of migration event source to solve bootstrap race. (CASSANDRA-6648)
 * Make sure compaction throughput value doesn't overflow with int math (CASSANDRA-6647)


2.0.4
 * Allow removing snapshots of no-longer-existing CFs (CASSANDRA-6418)
 * add StorageService.stopDaemon() (CASSANDRA-4268)
 * add IRE for invalid CF supplied to get_count (CASSANDRA-5701)
 * add client encryption support to sstableloader (CASSANDRA-6378)
 * Fix accept() loop for SSL sockets post-shutdown (CASSANDRA-6468)
 * Fix size-tiered compaction in LCS L0 (CASSANDRA-6496)
 * Fix assertion failure in filterColdSSTables (CASSANDRA-6483)
 * Fix row tombstones in larger-than-memory compactions (CASSANDRA-6008)
 * Fix cleanup ClassCastException (CASSANDRA-6462)
 * Reduce gossip memory use by interning VersionedValue strings (CASSANDRA-6410)
 * Allow specifying datacenters to participate in a repair (CASSANDRA-6218)
 * Fix divide-by-zero in PCI (CASSANDRA-6403)
 * Fix setting last compacted key in the wrong level for LCS (CASSANDRA-6284)
 * Add millisecond precision formats to the timestamp parser (CASSANDRA-6395)
 * Expose a total memtable size metric for a CF (CASSANDRA-6391)
 * cqlsh: handle symlinks properly (CASSANDRA-6425)
 * Fix potential infinite loop when paging query with IN (CASSANDRA-6464)
 * Fix assertion error in AbstractQueryPager.discardFirst (CASSANDRA-6447)
 * Fix streaming older SSTable yields unnecessary tombstones (CASSANDRA-6527)
Merged from 1.2:
 * Improved error message on bad properties in DDL queries (CASSANDRA-6453)
 * Randomize batchlog candidates selection (CASSANDRA-6481)
 * Fix thundering herd on endpoint cache invalidation (CASSANDRA-6345, 6485)
 * Improve batchlog write performance with vnodes (CASSANDRA-6488)
 * cqlsh: quote single quotes in strings inside collections (CASSANDRA-6172)
 * Improve gossip performance for typical messages (CASSANDRA-6409)
 * Throw IRE if a prepared statement has more markers than supported 
   (CASSANDRA-5598)
 * Expose Thread metrics for the native protocol server (CASSANDRA-6234)
 * Change snapshot response message verb to INTERNAL to avoid dropping it 
   (CASSANDRA-6415)
 * Warn when collection read has > 65K elements (CASSANDRA-5428)
 * Fix cache persistence when both row and key cache are enabled 
   (CASSANDRA-6413)
 * (Hadoop) add describe_local_ring (CASSANDRA-6268)
 * Fix handling of concurrent directory creation failure (CASSANDRA-6459)
 * Allow executing CREATE statements multiple times (CASSANDRA-6471)
 * Don't send confusing info with timeouts (CASSANDRA-6491)
 * Don't resubmit counter mutation runnables internally (CASSANDRA-6427)
 * Don't drop local mutations without a hint (CASSANDRA-6510)
 * Don't allow null max_hint_window_in_ms (CASSANDRA-6419)
 * Validate SliceRange start and finish lengths (CASSANDRA-6521)


2.0.3
 * Fix FD leak on slice read path (CASSANDRA-6275)
 * Cancel read meter task when closing SSTR (CASSANDRA-6358)
 * free off-heap IndexSummary during bulk (CASSANDRA-6359)
 * Recover from IOException in accept() thread (CASSANDRA-6349)
 * Improve Gossip tolerance of abnormally slow tasks (CASSANDRA-6338)
 * Fix trying to hint timed out counter writes (CASSANDRA-6322)
 * Allow restoring specific columnfamilies from archived CL (CASSANDRA-4809)
 * Avoid flushing compaction_history after each operation (CASSANDRA-6287)
 * Fix repair assertion error when tombstones expire (CASSANDRA-6277)
 * Skip loading corrupt key cache (CASSANDRA-6260)
 * Fixes for compacting larger-than-memory rows (CASSANDRA-6274)
 * Compact hottest sstables first and optionally omit coldest from
   compaction entirely (CASSANDRA-6109)
 * Fix modifying column_metadata from thrift (CASSANDRA-6182)
 * cqlsh: fix LIST USERS output (CASSANDRA-6242)
 * Add IRequestSink interface (CASSANDRA-6248)
 * Update memtable size while flushing (CASSANDRA-6249)
 * Provide hooks around CQL2/CQL3 statement execution (CASSANDRA-6252)
 * Require Permission.SELECT for CAS updates (CASSANDRA-6247)
 * New CQL-aware SSTableWriter (CASSANDRA-5894)
 * Reject CAS operation when the protocol v1 is used (CASSANDRA-6270)
 * Correctly throw error when frame too large (CASSANDRA-5981)
 * Fix serialization bug in PagedRange with 2ndary indexes (CASSANDRA-6299)
 * Fix CQL3 table validation in Thrift (CASSANDRA-6140)
 * Fix bug missing results with IN clauses (CASSANDRA-6327)
 * Fix paging with reversed slices (CASSANDRA-6343)
 * Set minTimestamp correctly to be able to drop expired sstables (CASSANDRA-6337)
 * Support NaN and Infinity as float literals (CASSANDRA-6003)
 * Remove RF from nodetool ring output (CASSANDRA-6289)
 * Fix attempting to flush empty rows (CASSANDRA-6374)
 * Fix potential out of bounds exception when paging (CASSANDRA-6333)
Merged from 1.2:
 * Optimize FD phi calculation (CASSANDRA-6386)
 * Improve initial FD phi estimate when starting up (CASSANDRA-6385)
 * Don't list CQL3 table in CLI describe even if named explicitely 
   (CASSANDRA-5750)
 * Invalidate row cache when dropping CF (CASSANDRA-6351)
 * add non-jamm path for cached statements (CASSANDRA-6293)
 * add windows bat files for shell commands (CASSANDRA-6145)
 * Require logging in for Thrift CQL2/3 statement preparation (CASSANDRA-6254)
 * restrict max_num_tokens to 1536 (CASSANDRA-6267)
 * Nodetool gets default JMX port from cassandra-env.sh (CASSANDRA-6273)
 * make calculatePendingRanges asynchronous (CASSANDRA-6244)
 * Remove blocking flushes in gossip thread (CASSANDRA-6297)
 * Fix potential socket leak in connectionpool creation (CASSANDRA-6308)
 * Allow LOCAL_ONE/LOCAL_QUORUM to work with SimpleStrategy (CASSANDRA-6238)
 * cqlsh: handle 'null' as session duration (CASSANDRA-6317)
 * Fix json2sstable handling of range tombstones (CASSANDRA-6316)
 * Fix missing one row in reverse query (CASSANDRA-6330)
 * Fix reading expired row value from row cache (CASSANDRA-6325)
 * Fix AssertionError when doing set element deletion (CASSANDRA-6341)
 * Make CL code for the native protocol match the one in C* 2.0
   (CASSANDRA-6347)
 * Disallow altering CQL3 table from thrift (CASSANDRA-6370)
 * Fix size computation of prepared statement (CASSANDRA-6369)


2.0.2
 * Update FailureDetector to use nanontime (CASSANDRA-4925)
 * Fix FileCacheService regressions (CASSANDRA-6149)
 * Never return WriteTimeout for CL.ANY (CASSANDRA-6132)
 * Fix race conditions in bulk loader (CASSANDRA-6129)
 * Add configurable metrics reporting (CASSANDRA-4430)
 * drop queries exceeding a configurable number of tombstones (CASSANDRA-6117)
 * Track and persist sstable read activity (CASSANDRA-5515)
 * Fixes for speculative retry (CASSANDRA-5932, CASSANDRA-6194)
 * Improve memory usage of metadata min/max column names (CASSANDRA-6077)
 * Fix thrift validation refusing row markers on CQL3 tables (CASSANDRA-6081)
 * Fix insertion of collections with CAS (CASSANDRA-6069)
 * Correctly send metadata on SELECT COUNT (CASSANDRA-6080)
 * Track clients' remote addresses in ClientState (CASSANDRA-6070)
 * Create snapshot dir if it does not exist when migrating
   leveled manifest (CASSANDRA-6093)
 * make sequential nodetool repair the default (CASSANDRA-5950)
 * Add more hooks for compaction strategy implementations (CASSANDRA-6111)
 * Fix potential NPE on composite 2ndary indexes (CASSANDRA-6098)
 * Delete can potentially be skipped in batch (CASSANDRA-6115)
 * Allow alter keyspace on system_traces (CASSANDRA-6016)
 * Disallow empty column names in cql (CASSANDRA-6136)
 * Use Java7 file-handling APIs and fix file moving on Windows (CASSANDRA-5383)
 * Save compaction history to system keyspace (CASSANDRA-5078)
 * Fix NPE if StorageService.getOperationMode() is executed before full startup (CASSANDRA-6166)
 * CQL3: support pre-epoch longs for TimestampType (CASSANDRA-6212)
 * Add reloadtriggers command to nodetool (CASSANDRA-4949)
 * cqlsh: ignore empty 'value alias' in DESCRIBE (CASSANDRA-6139)
 * Fix sstable loader (CASSANDRA-6205)
 * Reject bootstrapping if the node already exists in gossip (CASSANDRA-5571)
 * Fix NPE while loading paxos state (CASSANDRA-6211)
 * cqlsh: add SHOW SESSION <tracing-session> command (CASSANDRA-6228)
Merged from 1.2:
 * (Hadoop) Require CFRR batchSize to be at least 2 (CASSANDRA-6114)
 * Add a warning for small LCS sstable size (CASSANDRA-6191)
 * Add ability to list specific KS/CF combinations in nodetool cfstats (CASSANDRA-4191)
 * Mark CF clean if a mutation raced the drop and got it marked dirty (CASSANDRA-5946)
 * Add a LOCAL_ONE consistency level (CASSANDRA-6202)
 * Limit CQL prepared statement cache by size instead of count (CASSANDRA-6107)
 * Tracing should log write failure rather than raw exceptions (CASSANDRA-6133)
 * lock access to TM.endpointToHostIdMap (CASSANDRA-6103)
 * Allow estimated memtable size to exceed slab allocator size (CASSANDRA-6078)
 * Start MeteredFlusher earlier to prevent OOM during CL replay (CASSANDRA-6087)
 * Avoid sending Truncate command to fat clients (CASSANDRA-6088)
 * Allow where clause conditions to be in parenthesis (CASSANDRA-6037)
 * Do not open non-ssl storage port if encryption option is all (CASSANDRA-3916)
 * Move batchlog replay to its own executor (CASSANDRA-6079)
 * Add tombstone debug threshold and histogram (CASSANDRA-6042, 6057)
 * Enable tcp keepalive on incoming connections (CASSANDRA-4053)
 * Fix fat client schema pull NPE (CASSANDRA-6089)
 * Fix memtable flushing for indexed tables (CASSANDRA-6112)
 * Fix skipping columns with multiple slices (CASSANDRA-6119)
 * Expose connected thrift + native client counts (CASSANDRA-5084)
 * Optimize auth setup (CASSANDRA-6122)
 * Trace index selection (CASSANDRA-6001)
 * Update sstablesPerReadHistogram to use biased sampling (CASSANDRA-6164)
 * Log UnknownColumnfamilyException when closing socket (CASSANDRA-5725)
 * Properly error out on CREATE INDEX for counters table (CASSANDRA-6160)
 * Handle JMX notification failure for repair (CASSANDRA-6097)
 * (Hadoop) Fetch no more than 128 splits in parallel (CASSANDRA-6169)
 * stress: add username/password authentication support (CASSANDRA-6068)
 * Fix indexed queries with row cache enabled on parent table (CASSANDRA-5732)
 * Fix compaction race during columnfamily drop (CASSANDRA-5957)
 * Fix validation of empty column names for compact tables (CASSANDRA-6152)
 * Skip replaying mutations that pass CRC but fail to deserialize (CASSANDRA-6183)
 * Rework token replacement to use replace_address (CASSANDRA-5916)
 * Fix altering column types (CASSANDRA-6185)
 * cqlsh: fix CREATE/ALTER WITH completion (CASSANDRA-6196)
 * add windows bat files for shell commands (CASSANDRA-6145)
 * Fix potential stack overflow during range tombstones insertion (CASSANDRA-6181)
 * (Hadoop) Make LOCAL_ONE the default consistency level (CASSANDRA-6214)


2.0.1
 * Fix bug that could allow reading deleted data temporarily (CASSANDRA-6025)
 * Improve memory use defaults (CASSANDRA-6059)
 * Make ThriftServer more easlly extensible (CASSANDRA-6058)
 * Remove Hadoop dependency from ITransportFactory (CASSANDRA-6062)
 * add file_cache_size_in_mb setting (CASSANDRA-5661)
 * Improve error message when yaml contains invalid properties (CASSANDRA-5958)
 * Improve leveled compaction's ability to find non-overlapping L0 compactions
   to work on concurrently (CASSANDRA-5921)
 * Notify indexer of columns shadowed by range tombstones (CASSANDRA-5614)
 * Log Merkle tree stats (CASSANDRA-2698)
 * Switch from crc32 to adler32 for compressed sstable checksums (CASSANDRA-5862)
 * Improve offheap memcpy performance (CASSANDRA-5884)
 * Use a range aware scanner for cleanup (CASSANDRA-2524)
 * Cleanup doesn't need to inspect sstables that contain only local data
   (CASSANDRA-5722)
 * Add ability for CQL3 to list partition keys (CASSANDRA-4536)
 * Improve native protocol serialization (CASSANDRA-5664)
 * Upgrade Thrift to 0.9.1 (CASSANDRA-5923)
 * Require superuser status for adding triggers (CASSANDRA-5963)
 * Make standalone scrubber handle old and new style leveled manifest
   (CASSANDRA-6005)
 * Fix paxos bugs (CASSANDRA-6012, 6013, 6023)
 * Fix paged ranges with multiple replicas (CASSANDRA-6004)
 * Fix potential AssertionError during tracing (CASSANDRA-6041)
 * Fix NPE in sstablesplit (CASSANDRA-6027)
 * Migrate pre-2.0 key/value/column aliases to system.schema_columns
   (CASSANDRA-6009)
 * Paging filter empty rows too agressively (CASSANDRA-6040)
 * Support variadic parameters for IN clauses (CASSANDRA-4210)
 * cqlsh: return the result of CAS writes (CASSANDRA-5796)
 * Fix validation of IN clauses with 2ndary indexes (CASSANDRA-6050)
 * Support named bind variables in CQL (CASSANDRA-6033)
Merged from 1.2:
 * Allow cache-keys-to-save to be set at runtime (CASSANDRA-5980)
 * Avoid second-guessing out-of-space state (CASSANDRA-5605)
 * Tuning knobs for dealing with large blobs and many CFs (CASSANDRA-5982)
 * (Hadoop) Fix CQLRW for thrift tables (CASSANDRA-6002)
 * Fix possible divide-by-zero in HHOM (CASSANDRA-5990)
 * Allow local batchlog writes for CL.ANY (CASSANDRA-5967)
 * Upgrade metrics-core to version 2.2.0 (CASSANDRA-5947)
 * Fix CqlRecordWriter with composite keys (CASSANDRA-5949)
 * Add snitch, schema version, cluster, partitioner to JMX (CASSANDRA-5881)
 * Allow disabling SlabAllocator (CASSANDRA-5935)
 * Make user-defined compaction JMX blocking (CASSANDRA-4952)
 * Fix streaming does not transfer wrapped range (CASSANDRA-5948)
 * Fix loading index summary containing empty key (CASSANDRA-5965)
 * Correctly handle limits in CompositesSearcher (CASSANDRA-5975)
 * Pig: handle CQL collections (CASSANDRA-5867)
 * Pass the updated cf to the PRSI index() method (CASSANDRA-5999)
 * Allow empty CQL3 batches (as no-op) (CASSANDRA-5994)
 * Support null in CQL3 functions (CASSANDRA-5910)
 * Replace the deprecated MapMaker with CacheLoader (CASSANDRA-6007)
 * Add SSTableDeletingNotification to DataTracker (CASSANDRA-6010)
 * Fix snapshots in use get deleted during snapshot repair (CASSANDRA-6011)
 * Move hints and exception count to o.a.c.metrics (CASSANDRA-6017)
 * Fix memory leak in snapshot repair (CASSANDRA-6047)
 * Fix sstable2sjon for CQL3 tables (CASSANDRA-5852)


2.0.0
 * Fix thrift validation when inserting into CQL3 tables (CASSANDRA-5138)
 * Fix periodic memtable flushing behavior with clean memtables (CASSANDRA-5931)
 * Fix dateOf() function for pre-2.0 timestamp columns (CASSANDRA-5928)
 * Fix SSTable unintentionally loads BF when opened for batch (CASSANDRA-5938)
 * Add stream session progress to JMX (CASSANDRA-4757)
 * Fix NPE during CAS operation (CASSANDRA-5925)
Merged from 1.2:
 * Fix getBloomFilterDiskSpaceUsed for AlwaysPresentFilter (CASSANDRA-5900)
 * Don't announce schema version until we've loaded the changes locally
   (CASSANDRA-5904)
 * Fix to support off heap bloom filters size greater than 2 GB (CASSANDRA-5903)
 * Properly handle parsing huge map and set literals (CASSANDRA-5893)


2.0.0-rc2
 * enable vnodes by default (CASSANDRA-5869)
 * fix CAS contention timeout (CASSANDRA-5830)
 * fix HsHa to respect max frame size (CASSANDRA-4573)
 * Fix (some) 2i on composite components omissions (CASSANDRA-5851)
 * cqlsh: add DESCRIBE FULL SCHEMA variant (CASSANDRA-5880)
Merged from 1.2:
 * Correctly validate sparse composite cells in scrub (CASSANDRA-5855)
 * Add KeyCacheHitRate metric to CF metrics (CASSANDRA-5868)
 * cqlsh: add support for multiline comments (CASSANDRA-5798)
 * Handle CQL3 SELECT duplicate IN restrictions on clustering columns
   (CASSANDRA-5856)


2.0.0-rc1
 * improve DecimalSerializer performance (CASSANDRA-5837)
 * fix potential spurious wakeup in AsyncOneResponse (CASSANDRA-5690)
 * fix schema-related trigger issues (CASSANDRA-5774)
 * Better validation when accessing CQL3 table from thrift (CASSANDRA-5138)
 * Fix assertion error during repair (CASSANDRA-5801)
 * Fix range tombstone bug (CASSANDRA-5805)
 * DC-local CAS (CASSANDRA-5797)
 * Add a native_protocol_version column to the system.local table (CASSANRDA-5819)
 * Use index_interval from cassandra.yaml when upgraded (CASSANDRA-5822)
 * Fix buffer underflow on socket close (CASSANDRA-5792)
Merged from 1.2:
 * Fix reading DeletionTime from 1.1-format sstables (CASSANDRA-5814)
 * cqlsh: add collections support to COPY (CASSANDRA-5698)
 * retry important messages for any IOException (CASSANDRA-5804)
 * Allow empty IN relations in SELECT/UPDATE/DELETE statements (CASSANDRA-5626)
 * cqlsh: fix crashing on Windows due to libedit detection (CASSANDRA-5812)
 * fix bulk-loading compressed sstables (CASSANDRA-5820)
 * (Hadoop) fix quoting in CqlPagingRecordReader and CqlRecordWriter 
   (CASSANDRA-5824)
 * update default LCS sstable size to 160MB (CASSANDRA-5727)
 * Allow compacting 2Is via nodetool (CASSANDRA-5670)
 * Hex-encode non-String keys in OPP (CASSANDRA-5793)
 * nodetool history logging (CASSANDRA-5823)
 * (Hadoop) fix support for Thrift tables in CqlPagingRecordReader 
   (CASSANDRA-5752)
 * add "all time blocked" to StatusLogger output (CASSANDRA-5825)
 * Future-proof inter-major-version schema migrations (CASSANDRA-5845)
 * (Hadoop) add CqlPagingRecordReader support for ReversedType in Thrift table
   (CASSANDRA-5718)
 * Add -no-snapshot option to scrub (CASSANDRA-5891)
 * Fix to support off heap bloom filters size greater than 2 GB (CASSANDRA-5903)
 * Properly handle parsing huge map and set literals (CASSANDRA-5893)
 * Fix LCS L0 compaction may overlap in L1 (CASSANDRA-5907)
 * New sstablesplit tool to split large sstables offline (CASSANDRA-4766)
 * Fix potential deadlock in native protocol server (CASSANDRA-5926)
 * Disallow incompatible type change in CQL3 (CASSANDRA-5882)
Merged from 1.1:
 * Correctly validate sparse composite cells in scrub (CASSANDRA-5855)


2.0.0-beta2
 * Replace countPendingHints with Hints Created metric (CASSANDRA-5746)
 * Allow nodetool with no args, and with help to run without a server (CASSANDRA-5734)
 * Cleanup AbstractType/TypeSerializer classes (CASSANDRA-5744)
 * Remove unimplemented cli option schema-mwt (CASSANDRA-5754)
 * Support range tombstones in thrift (CASSANDRA-5435)
 * Normalize table-manipulating CQL3 statements' class names (CASSANDRA-5759)
 * cqlsh: add missing table options to DESCRIBE output (CASSANDRA-5749)
 * Fix assertion error during repair (CASSANDRA-5757)
 * Fix bulkloader (CASSANDRA-5542)
 * Add LZ4 compression to the native protocol (CASSANDRA-5765)
 * Fix bugs in the native protocol v2 (CASSANDRA-5770)
 * CAS on 'primary key only' table (CASSANDRA-5715)
 * Support streaming SSTables of old versions (CASSANDRA-5772)
 * Always respect protocol version in native protocol (CASSANDRA-5778)
 * Fix ConcurrentModificationException during streaming (CASSANDRA-5782)
 * Update deletion timestamp in Commit#updatesWithPaxosTime (CASSANDRA-5787)
 * Thrift cas() method crashes if input columns are not sorted (CASSANDRA-5786)
 * Order columns names correctly when querying for CAS (CASSANDRA-5788)
 * Fix streaming retry (CASSANDRA-5775)
Merged from 1.2:
 * if no seeds can be a reached a node won't start in a ring by itself (CASSANDRA-5768)
 * add cassandra.unsafesystem property (CASSANDRA-5704)
 * (Hadoop) quote identifiers in CqlPagingRecordReader (CASSANDRA-5763)
 * Add replace_node functionality for vnodes (CASSANDRA-5337)
 * Add timeout events to query traces (CASSANDRA-5520)
 * Fix serialization of the LEFT gossip value (CASSANDRA-5696)
 * Pig: support for cql3 tables (CASSANDRA-5234)
 * Fix skipping range tombstones with reverse queries (CASSANDRA-5712)
 * Expire entries out of ThriftSessionManager (CASSANDRA-5719)
 * Don't keep ancestor information in memory (CASSANDRA-5342)
 * Expose native protocol server status in nodetool info (CASSANDRA-5735)
 * Fix pathetic performance of range tombstones (CASSANDRA-5677)
 * Fix querying with an empty (impossible) range (CASSANDRA-5573)
 * cqlsh: handle CUSTOM 2i in DESCRIBE output (CASSANDRA-5760)
 * Fix minor bug in Range.intersects(Bound) (CASSANDRA-5771)
 * cqlsh: handle disabled compression in DESCRIBE output (CASSANDRA-5766)
 * Ensure all UP events are notified on the native protocol (CASSANDRA-5769)
 * Fix formatting of sstable2json with multiple -k arguments (CASSANDRA-5781)
 * Don't rely on row marker for queries in general to hide lost markers
   after TTL expires (CASSANDRA-5762)
 * Sort nodetool help output (CASSANDRA-5776)
 * Fix column expiring during 2 phases compaction (CASSANDRA-5799)
 * now() is being rejected in INSERTs when inside collections (CASSANDRA-5795)


2.0.0-beta1
 * Add support for indexing clustered columns (CASSANDRA-5125)
 * 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)
Merged from 1.2:
 * 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)
 * cqlsh: Don't show 'null' in place of empty values (CASSANDRA-5675)
 * Race condition in detecting version on a mixed 1.1/1.2 cluster
   (CASSANDRA-5692)
 * Fix skipping range tombstones with reverse queries (CASSANDRA-5712)
 * Expire entries out of ThriftSessionManager (CASSANRDA-5719)
 * Don't keep ancestor information in memory (CASSANDRA-5342)
 * cqlsh: fix handling of semicolons inside BATCH queries (CASSANDRA-5697)


1.2.6
 * Fix tracing when operation completes before all responses arrive 
   (CASSANDRA-5668)
 * Fix cross-DC mutation forwarding (CASSANDRA-5632)
 * Reduce SSTableLoader memory usage (CASSANDRA-5555)
 * Scale hinted_handoff_throttle_in_kb to cluster size (CASSANDRA-5272)
 * (Hadoop) Add CQL3 input/output formats (CASSANDRA-4421, 5622)
 * (Hadoop) Fix InputKeyRange in CFIF (CASSANDRA-5536)
 * Fix dealing with ridiculously large max sstable sizes in LCS (CASSANDRA-5589)
 * Ignore pre-truncate hints (CASSANDRA-4655)
 * Move System.exit on OOM into a separate thread (CASSANDRA-5273)
 * Write row markers when serializing schema (CASSANDRA-5572)
 * Check only SSTables for the requested range when streaming (CASSANDRA-5569)
 * Improve batchlog replay behavior and hint ttl handling (CASSANDRA-5314)
 * Exclude localTimestamp from validation for tombstones (CASSANDRA-5398)
 * cqlsh: add custom prompt support (CASSANDRA-5539)
 * Reuse prepared statements in hot auth queries (CASSANDRA-5594)
 * cqlsh: add vertical output option (see EXPAND) (CASSANDRA-5597)
 * Add a rate limit option to stress (CASSANDRA-5004)
 * have BulkLoader ignore snapshots directories (CASSANDRA-5587) 
 * fix SnitchProperties logging context (CASSANDRA-5602)
 * Expose whether jna is enabled and memory is locked via JMX (CASSANDRA-5508)
 * cqlsh: fix COPY FROM with ReversedType (CASSANDRA-5610)
 * Allow creating CUSTOM indexes on collections (CASSANDRA-5615)
 * Evaluate now() function at execution time (CASSANDRA-5616)
 * Expose detailed read repair metrics (CASSANDRA-5618)
 * Correct blob literal + ReversedType parsing (CASSANDRA-5629)
 * Allow GPFS to prefer the internal IP like EC2MRS (CASSANDRA-5630)
 * fix help text for -tspw cassandra-cli (CASSANDRA-5643)
 * don't throw away initial causes exceptions for internode encryption issues 
   (CASSANDRA-5644)
 * Fix message spelling errors for cql select statements (CASSANDRA-5647)
 * Suppress custom exceptions thru jmx (CASSANDRA-5652)
 * Update CREATE CUSTOM INDEX syntax (CASSANDRA-5639)
 * Fix PermissionDetails.equals() method (CASSANDRA-5655)
 * Never allow partition key ranges in CQL3 without token() (CASSANDRA-5666)
 * Gossiper incorrectly drops AppState for an upgrading node (CASSANDRA-5660)
 * Connection thrashing during multi-region ec2 during upgrade, due to 
   messaging version (CASSANDRA-5669)
 * Avoid over reconnecting in EC2MRS (CASSANDRA-5678)
 * Fix ReadResponseSerializer.serializedSize() for digest reads (CASSANDRA-5476)
 * allow sstable2json on 2i CFs (CASSANDRA-5694)
Merged from 1.1:
 * Remove buggy thrift max message length option (CASSANDRA-5529)
 * Fix NPE in Pig's widerow mode (CASSANDRA-5488)
 * Add split size parameter to Pig and disable split combination (CASSANDRA-5544)


1.2.5
 * make BytesToken.toString only return hex bytes (CASSANDRA-5566)
 * Ensure that submitBackground enqueues at least one task (CASSANDRA-5554)
 * fix 2i updates with identical values and timestamps (CASSANDRA-5540)
 * fix compaction throttling bursty-ness (CASSANDRA-4316)
 * reduce memory consumption of IndexSummary (CASSANDRA-5506)
 * remove per-row column name bloom filters (CASSANDRA-5492)
 * Include fatal errors in trace events (CASSANDRA-5447)
 * Ensure that PerRowSecondaryIndex is notified of row-level deletes
   (CASSANDRA-5445)
 * Allow empty blob literals in CQL3 (CASSANDRA-5452)
 * Fix streaming RangeTombstones at column index boundary (CASSANDRA-5418)
 * Fix preparing statements when current keyspace is not set (CASSANDRA-5468)
 * Fix SemanticVersion.isSupportedBy minor/patch handling (CASSANDRA-5496)
 * Don't provide oldCfId for post-1.1 system cfs (CASSANDRA-5490)
 * Fix primary range ignores replication strategy (CASSANDRA-5424)
 * Fix shutdown of binary protocol server (CASSANDRA-5507)
 * Fix repair -snapshot not working (CASSANDRA-5512)
 * Set isRunning flag later in binary protocol server (CASSANDRA-5467)
 * Fix use of CQL3 functions with descending clustering order (CASSANDRA-5472)
 * Disallow renaming columns one at a time for thrift table in CQL3
   (CASSANDRA-5531)
 * cqlsh: add CLUSTERING ORDER BY support to DESCRIBE (CASSANDRA-5528)
 * Add custom secondary index support to CQL3 (CASSANDRA-5484)
 * Fix repair hanging silently on unexpected error (CASSANDRA-5229)
 * Fix Ec2Snitch regression introduced by CASSANDRA-5171 (CASSANDRA-5432)
 * Add nodetool enablebackup/disablebackup (CASSANDRA-5556)
 * cqlsh: fix DESCRIBE after case insensitive USE (CASSANDRA-5567)
Merged from 1.1
 * Add retry mechanism to OTC for non-droppable_verbs (CASSANDRA-5393)
 * Use allocator information to improve memtable memory usage estimate
   (CASSANDRA-5497)
 * Fix trying to load deleted row into row cache on startup (CASSANDRA-4463)
 * fsync leveled manifest to avoid corruption (CASSANDRA-5535)
 * Fix Bound intersection computation (CASSANDRA-5551)
 * sstablescrub now respects max memory size in cassandra.in.sh (CASSANDRA-5562)


1.2.4
 * Ensure that PerRowSecondaryIndex updates see the most recent values
   (CASSANDRA-5397)
 * avoid duplicate index entries ind PrecompactedRow and 
   ParallelCompactionIterable (CASSANDRA-5395)
 * remove the index entry on oldColumn when new column is a tombstone 
   (CASSANDRA-5395)
 * Change default stream throughput from 400 to 200 mbps (CASSANDRA-5036)
 * Gossiper logs DOWN for symmetry with UP (CASSANDRA-5187)
 * Fix mixing prepared statements between keyspaces (CASSANDRA-5352)
 * Fix consistency level during bootstrap - strike 3 (CASSANDRA-5354)
 * Fix transposed arguments in AlreadyExistsException (CASSANDRA-5362)
 * Improve asynchronous hint delivery (CASSANDRA-5179)
 * Fix Guava dependency version (12.0 -> 13.0.1) for Maven (CASSANDRA-5364)
 * Validate that provided CQL3 collection value are < 64K (CASSANDRA-5355)
 * Make upgradeSSTable skip current version sstables by default (CASSANDRA-5366)
 * Optimize min/max timestamp collection (CASSANDRA-5373)
 * Invalid streamId in cql binary protocol when using invalid CL 
   (CASSANDRA-5164)
 * Fix validation for IN where clauses with collections (CASSANDRA-5376)
 * Copy resultSet on count query to avoid ConcurrentModificationException 
   (CASSANDRA-5382)
 * Correctly typecheck in CQL3 even with ReversedType (CASSANDRA-5386)
 * Fix streaming compressed files when using encryption (CASSANDRA-5391)
 * cassandra-all 1.2.0 pom missing netty dependency (CASSANDRA-5392)
 * Fix writetime/ttl functions on null values (CASSANDRA-5341)
 * Fix NPE during cql3 select with token() (CASSANDRA-5404)
 * IndexHelper.skipBloomFilters won't skip non-SHA filters (CASSANDRA-5385)
 * cqlsh: Print maps ordered by key, sort sets (CASSANDRA-5413)
 * Add null syntax support in CQL3 for inserts (CASSANDRA-3783)
 * Allow unauthenticated set_keyspace() calls (CASSANDRA-5423)
 * Fix potential incremental backups race (CASSANDRA-5410)
 * Fix prepared BATCH statements with batch-level timestamps (CASSANDRA-5415)
 * Allow overriding superuser setup delay (CASSANDRA-5430)
 * cassandra-shuffle with JMX usernames and passwords (CASSANDRA-5431)
Merged from 1.1:
 * cli: Quote ks and cf names in schema output when needed (CASSANDRA-5052)
 * Fix bad default for min/max timestamp in SSTableMetadata (CASSANDRA-5372)
 * Fix cf name extraction from manifest in Directories.migrateFile() 
   (CASSANDRA-5242)
 * Support pluggable internode authentication (CASSANDRA-5401)


1.2.3
 * add check for sstable overlap within a level on startup (CASSANDRA-5327)
 * replace ipv6 colons in jmx object names (CASSANDRA-5298, 5328)
 * Avoid allocating SSTableBoundedScanner during repair when the range does 
   not intersect the sstable (CASSANDRA-5249)
 * Don't lowercase property map keys (this breaks NTS) (CASSANDRA-5292)
 * Fix composite comparator with super columns (CASSANDRA-5287)
 * Fix insufficient validation of UPDATE queries against counter cfs
   (CASSANDRA-5300)
 * Fix PropertyFileSnitch default DC/Rack behavior (CASSANDRA-5285)
 * Handle null values when executing prepared statement (CASSANDRA-5081)
 * Add netty to pom dependencies (CASSANDRA-5181)
 * Include type arguments in Thrift CQLPreparedResult (CASSANDRA-5311)
 * Fix compaction not removing columns when bf_fp_ratio is 1 (CASSANDRA-5182)
 * cli: Warn about missing CQL3 tables in schema descriptions (CASSANDRA-5309)
 * Re-enable unknown option in replication/compaction strategies option for
   backward compatibility (CASSANDRA-4795)
 * Add binary protocol support to stress (CASSANDRA-4993)
 * cqlsh: Fix COPY FROM value quoting and null handling (CASSANDRA-5305)
 * Fix repair -pr for vnodes (CASSANDRA-5329)
 * Relax CL for auth queries for non-default users (CASSANDRA-5310)
 * Fix AssertionError during repair (CASSANDRA-5245)
 * Don't announce migrations to pre-1.2 nodes (CASSANDRA-5334)
Merged from 1.1:
 * Update offline scrub for 1.0 -> 1.1 directory structure (CASSANDRA-5195)
 * add tmp flag to Descriptor hashcode (CASSANDRA-4021)
 * fix logging of "Found table data in data directories" when only system tables
   are present (CASSANDRA-5289)
 * cli: Add JMX authentication support (CASSANDRA-5080)
 * nodetool: ability to repair specific range (CASSANDRA-5280)
 * Fix possible assertion triggered in SliceFromReadCommand (CASSANDRA-5284)
 * cqlsh: Add inet type support on Windows (ipv4-only) (CASSANDRA-4801)
 * Fix race when initializing ColumnFamilyStore (CASSANDRA-5350)
 * Add UseTLAB JVM flag (CASSANDRA-5361)


1.2.2
 * fix potential for multiple concurrent compactions of the same sstables
   (CASSANDRA-5256)
 * avoid no-op caching of byte[] on commitlog append (CASSANDRA-5199)
 * fix symlinks under data dir not working (CASSANDRA-5185)
 * fix bug in compact storage metadata handling (CASSANDRA-5189)
 * Validate login for USE queries (CASSANDRA-5207)
 * cli: remove default username and password (CASSANDRA-5208)
 * configure populate_io_cache_on_flush per-CF (CASSANDRA-4694)
 * allow configuration of internode socket buffer (CASSANDRA-3378)
 * Make sstable directory picking blacklist-aware again (CASSANDRA-5193)
 * Correctly expire gossip states for edge cases (CASSANDRA-5216)
 * Improve handling of directory creation failures (CASSANDRA-5196)
 * Expose secondary indicies to the rest of nodetool (CASSANDRA-4464)
 * Binary protocol: avoid sending notification for 0.0.0.0 (CASSANDRA-5227)
 * add UseCondCardMark XX jvm settings on jdk 1.7 (CASSANDRA-4366)
 * CQL3 refactor to allow conversion function (CASSANDRA-5226)
 * Fix drop of sstables in some circumstance (CASSANDRA-5232)
 * Implement caching of authorization results (CASSANDRA-4295)
 * Add support for LZ4 compression (CASSANDRA-5038)
 * Fix missing columns in wide rows queries (CASSANDRA-5225)
 * Simplify auth setup and make system_auth ks alterable (CASSANDRA-5112)
 * Stop compactions from hanging during bootstrap (CASSANDRA-5244)
 * fix compressed streaming sending extra chunk (CASSANDRA-5105)
 * Add CQL3-based implementations of IAuthenticator and IAuthorizer
   (CASSANDRA-4898)
 * Fix timestamp-based tomstone removal logic (CASSANDRA-5248)
 * cli: Add JMX authentication support (CASSANDRA-5080)
 * Fix forceFlush behavior (CASSANDRA-5241)
 * cqlsh: Add username autocompletion (CASSANDRA-5231)
 * Fix CQL3 composite partition key error (CASSANDRA-5240)
 * Allow IN clause on last clustering key (CASSANDRA-5230)
Merged from 1.1:
 * fix start key/end token validation for wide row iteration (CASSANDRA-5168)
 * add ConfigHelper support for Thrift frame and max message sizes (CASSANDRA-5188)
 * fix nodetool repair not fail on node down (CASSANDRA-5203)
 * always collect tombstone hints (CASSANDRA-5068)
 * Fix error when sourcing file in cqlsh (CASSANDRA-5235)


1.2.1
 * stream undelivered hints on decommission (CASSANDRA-5128)
 * GossipingPropertyFileSnitch loads saved dc/rack info if needed (CASSANDRA-5133)
 * drain should flush system CFs too (CASSANDRA-4446)
 * add inter_dc_tcp_nodelay setting (CASSANDRA-5148)
 * re-allow wrapping ranges for start_token/end_token range pairitspwng (CASSANDRA-5106)
 * fix validation compaction of empty rows (CASSANDRA-5136)
 * nodetool methods to enable/disable hint storage/delivery (CASSANDRA-4750)
 * disallow bloom filter false positive chance of 0 (CASSANDRA-5013)
 * add threadpool size adjustment methods to JMXEnabledThreadPoolExecutor and 
   CompactionManagerMBean (CASSANDRA-5044)
 * fix hinting for dropped local writes (CASSANDRA-4753)
 * off-heap cache doesn't need mutable column container (CASSANDRA-5057)
 * apply disk_failure_policy to bad disks on initial directory creation 
   (CASSANDRA-4847)
 * Optimize name-based queries to use ArrayBackedSortedColumns (CASSANDRA-5043)
 * Fall back to old manifest if most recent is unparseable (CASSANDRA-5041)
 * pool [Compressed]RandomAccessReader objects on the partitioned read path
   (CASSANDRA-4942)
 * Add debug logging to list filenames processed by Directories.migrateFile 
   method (CASSANDRA-4939)
 * Expose black-listed directories via JMX (CASSANDRA-4848)
 * Log compaction merge counts (CASSANDRA-4894)
 * Minimize byte array allocation by AbstractData{Input,Output} (CASSANDRA-5090)
 * Add SSL support for the binary protocol (CASSANDRA-5031)
 * Allow non-schema system ks modification for shuffle to work (CASSANDRA-5097)
 * cqlsh: Add default limit to SELECT statements (CASSANDRA-4972)
 * cqlsh: fix DESCRIBE for 1.1 cfs in CQL3 (CASSANDRA-5101)
 * Correctly gossip with nodes >= 1.1.7 (CASSANDRA-5102)
 * Ensure CL guarantees on digest mismatch (CASSANDRA-5113)
 * Validate correctly selects on composite partition key (CASSANDRA-5122)
 * Fix exception when adding collection (CASSANDRA-5117)
 * Handle states for non-vnode clusters correctly (CASSANDRA-5127)
 * Refuse unrecognized replication and compaction strategy options (CASSANDRA-4795)
 * Pick the correct value validator in sstable2json for cql3 tables (CASSANDRA-5134)
 * Validate login for describe_keyspace, describe_keyspaces and set_keyspace
   (CASSANDRA-5144)
 * Fix inserting empty maps (CASSANDRA-5141)
 * Don't remove tokens from System table for node we know (CASSANDRA-5121)
 * fix streaming progress report for compresed files (CASSANDRA-5130)
 * Coverage analysis for low-CL queries (CASSANDRA-4858)
 * Stop interpreting dates as valid timeUUID value (CASSANDRA-4936)
 * Adds E notation for floating point numbers (CASSANDRA-4927)
 * Detect (and warn) unintentional use of the cql2 thrift methods when cql3 was
   intended (CASSANDRA-5172)
 * cli: Quote ks and cf names in schema output when needed (CASSANDRA-5052)
 * Fix cf name extraction from manifest in Directories.migrateFile() (CASSANDRA-5242)
 * Replace mistaken usage of commons-logging with slf4j (CASSANDRA-5464)
 * Ensure Jackson dependency matches lib (CASSANDRA-5126)
 * Expose droppable tombstone ratio stats over JMX (CASSANDRA-5159)
Merged from 1.1:
 * Simplify CompressedRandomAccessReader to work around JDK FD bug (CASSANDRA-5088)
 * Improve handling a changing target throttle rate mid-compaction (CASSANDRA-5087)
 * Pig: correctly decode row keys in widerow mode (CASSANDRA-5098)
 * nodetool repair command now prints progress (CASSANDRA-4767)
 * fix user defined compaction to run against 1.1 data directory (CASSANDRA-5118)
 * Fix CQL3 BATCH authorization caching (CASSANDRA-5145)
 * fix get_count returns incorrect value with TTL (CASSANDRA-5099)
 * better handling for mid-compaction failure (CASSANDRA-5137)
 * convert default marshallers list to map for better readability (CASSANDRA-5109)
 * fix ConcurrentModificationException in getBootstrapSource (CASSANDRA-5170)
 * fix sstable maxtimestamp for row deletes and pre-1.1.1 sstables (CASSANDRA-5153)
 * Fix thread growth on node removal (CASSANDRA-5175)
 * Make Ec2Region's datacenter name configurable (CASSANDRA-5155)


1.2.0
 * Disallow counters in collections (CASSANDRA-5082)
 * cqlsh: add unit tests (CASSANDRA-3920)
 * fix default bloom_filter_fp_chance for LeveledCompactionStrategy (CASSANDRA-5093)
Merged from 1.1:
 * add validation for get_range_slices with start_key and end_token (CASSANDRA-5089)


1.2.0-rc2
 * fix nodetool ownership display with vnodes (CASSANDRA-5065)
 * cqlsh: add DESCRIBE KEYSPACES command (CASSANDRA-5060)
 * Fix potential infinite loop when reloading CFS (CASSANDRA-5064)
 * Fix SimpleAuthorizer example (CASSANDRA-5072)
 * cqlsh: force CL.ONE for tracing and system.schema* queries (CASSANDRA-5070)
 * Includes cassandra-shuffle in the debian package (CASSANDRA-5058)
Merged from 1.1:
 * fix multithreaded compaction deadlock (CASSANDRA-4492)
 * fix temporarily missing schema after upgrade from pre-1.1.5 (CASSANDRA-5061)
 * Fix ALTER TABLE overriding compression options with defaults
   (CASSANDRA-4996, 5066)
 * fix specifying and altering crc_check_chance (CASSANDRA-5053)
 * fix Murmur3Partitioner ownership% calculation (CASSANDRA-5076)
 * Don't expire columns sooner than they should in 2ndary indexes (CASSANDRA-5079)


1.2-rc1
 * rename rpc_timeout settings to request_timeout (CASSANDRA-5027)
 * add BF with 0.1 FP to LCS by default (CASSANDRA-5029)
 * Fix preparing insert queries (CASSANDRA-5016)
 * Fix preparing queries with counter increment (CASSANDRA-5022)
 * Fix preparing updates with collections (CASSANDRA-5017)
 * Don't generate UUID based on other node address (CASSANDRA-5002)
 * Fix message when trying to alter a clustering key type (CASSANDRA-5012)
 * Update IAuthenticator to match the new IAuthorizer (CASSANDRA-5003)
 * Fix inserting only a key in CQL3 (CASSANDRA-5040)
 * Fix CQL3 token() function when used with strings (CASSANDRA-5050)
Merged from 1.1:
 * reduce log spam from invalid counter shards (CASSANDRA-5026)
 * Improve schema propagation performance (CASSANDRA-5025)
 * Fix for IndexHelper.IndexFor throws OOB Exception (CASSANDRA-5030)
 * cqlsh: make it possible to describe thrift CFs (CASSANDRA-4827)
 * cqlsh: fix timestamp formatting on some platforms (CASSANDRA-5046)


1.2-beta3
 * make consistency level configurable in cqlsh (CASSANDRA-4829)
 * fix cqlsh rendering of blob fields (CASSANDRA-4970)
 * fix cqlsh DESCRIBE command (CASSANDRA-4913)
 * save truncation position in system table (CASSANDRA-4906)
 * Move CompressionMetadata off-heap (CASSANDRA-4937)
 * allow CLI to GET cql3 columnfamily data (CASSANDRA-4924)
 * Fix rare race condition in getExpireTimeForEndpoint (CASSANDRA-4402)
 * acquire references to overlapping sstables during compaction so bloom filter
   doesn't get free'd prematurely (CASSANDRA-4934)
 * Don't share slice query filter in CQL3 SelectStatement (CASSANDRA-4928)
 * Separate tracing from Log4J (CASSANDRA-4861)
 * Exclude gcable tombstones from merkle-tree computation (CASSANDRA-4905)
 * Better printing of AbstractBounds for tracing (CASSANDRA-4931)
 * Optimize mostRecentTombstone check in CC.collectAllData (CASSANDRA-4883)
 * Change stream session ID to UUID to avoid collision from same node (CASSANDRA-4813)
 * Use Stats.db when bulk loading if present (CASSANDRA-4957)
 * Skip repair on system_trace and keyspaces with RF=1 (CASSANDRA-4956)
 * (cql3) Remove arbitrary SELECT limit (CASSANDRA-4918)
 * Correctly handle prepared operation on collections (CASSANDRA-4945)
 * Fix CQL3 LIMIT (CASSANDRA-4877)
 * Fix Stress for CQL3 (CASSANDRA-4979)
 * Remove cassandra specific exceptions from JMX interface (CASSANDRA-4893)
 * (CQL3) Force using ALLOW FILTERING on potentially inefficient queries (CASSANDRA-4915)
 * (cql3) Fix adding column when the table has collections (CASSANDRA-4982)
 * (cql3) Fix allowing collections with compact storage (CASSANDRA-4990)
 * (cql3) Refuse ttl/writetime function on collections (CASSANDRA-4992)
 * Replace IAuthority with new IAuthorizer (CASSANDRA-4874)
 * clqsh: fix KEY pseudocolumn escaping when describing Thrift tables
   in CQL3 mode (CASSANDRA-4955)
 * add basic authentication support for Pig CassandraStorage (CASSANDRA-3042)
 * fix CQL2 ALTER TABLE compaction_strategy_class altering (CASSANDRA-4965)
Merged from 1.1:
 * Fall back to old describe_splits if d_s_ex is not available (CASSANDRA-4803)
 * Improve error reporting when streaming ranges fail (CASSANDRA-5009)
 * Fix cqlsh timestamp formatting of timezone info (CASSANDRA-4746)
 * Fix assertion failure with leveled compaction (CASSANDRA-4799)
 * Check for null end_token in get_range_slice (CASSANDRA-4804)
 * Remove all remnants of removed nodes (CASSANDRA-4840)
 * Add aut-reloading of the log4j file in debian package (CASSANDRA-4855)
 * Fix estimated row cache entry size (CASSANDRA-4860)
 * reset getRangeSlice filter after finishing a row for get_paged_slice
   (CASSANDRA-4919)
 * expunge row cache post-truncate (CASSANDRA-4940)
 * Allow static CF definition with compact storage (CASSANDRA-4910)
 * Fix endless loop/compaction of schema_* CFs due to broken timestamps (CASSANDRA-4880)
 * Fix 'wrong class type' assertion in CounterColumn (CASSANDRA-4976)


1.2-beta2
 * fp rate of 1.0 disables BF entirely; LCS defaults to 1.0 (CASSANDRA-4876)
 * off-heap bloom filters for row keys (CASSANDRA_4865)
 * add extension point for sstable components (CASSANDRA-4049)
 * improve tracing output (CASSANDRA-4852, 4862)
 * make TRACE verb droppable (CASSANDRA-4672)
 * fix BulkLoader recognition of CQL3 columnfamilies (CASSANDRA-4755)
 * Sort commitlog segments for replay by id instead of mtime (CASSANDRA-4793)
 * Make hint delivery asynchronous (CASSANDRA-4761)
 * Pluggable Thrift transport factories for CLI and cqlsh (CASSANDRA-4609, 4610)
 * cassandra-cli: allow Double value type to be inserted to a column (CASSANDRA-4661)
 * Add ability to use custom TServerFactory implementations (CASSANDRA-4608)
 * optimize batchlog flushing to skip successful batches (CASSANDRA-4667)
 * include metadata for system keyspace itself in schema tables (CASSANDRA-4416)
 * add check to PropertyFileSnitch to verify presence of location for
   local node (CASSANDRA-4728)
 * add PBSPredictor consistency modeler (CASSANDRA-4261)
 * remove vestiges of Thrift unframed mode (CASSANDRA-4729)
 * optimize single-row PK lookups (CASSANDRA-4710)
 * adjust blockFor calculation to account for pending ranges due to node 
   movement (CASSANDRA-833)
 * Change CQL version to 3.0.0 and stop accepting 3.0.0-beta1 (CASSANDRA-4649)
 * (CQL3) Make prepared statement global instead of per connection 
   (CASSANDRA-4449)
 * Fix scrubbing of CQL3 created tables (CASSANDRA-4685)
 * (CQL3) Fix validation when using counter and regular columns in the same 
   table (CASSANDRA-4706)
 * Fix bug starting Cassandra with simple authentication (CASSANDRA-4648)
 * Add support for batchlog in CQL3 (CASSANDRA-4545, 4738)
 * Add support for multiple column family outputs in CFOF (CASSANDRA-4208)
 * Support repairing only the local DC nodes (CASSANDRA-4747)
 * Use rpc_address for binary protocol and change default port (CASSANDRA-4751)
 * Fix use of collections in prepared statements (CASSANDRA-4739)
 * Store more information into peers table (CASSANDRA-4351, 4814)
 * Configurable bucket size for size tiered compaction (CASSANDRA-4704)
 * Run leveled compaction in parallel (CASSANDRA-4310)
 * Fix potential NPE during CFS reload (CASSANDRA-4786)
 * Composite indexes may miss results (CASSANDRA-4796)
 * Move consistency level to the protocol level (CASSANDRA-4734, 4824)
 * Fix Subcolumn slice ends not respected (CASSANDRA-4826)
 * Fix Assertion error in cql3 select (CASSANDRA-4783)
 * Fix list prepend logic (CQL3) (CASSANDRA-4835)
 * Add booleans as literals in CQL3 (CASSANDRA-4776)
 * Allow renaming PK columns in CQL3 (CASSANDRA-4822)
 * Fix binary protocol NEW_NODE event (CASSANDRA-4679)
 * Fix potential infinite loop in tombstone compaction (CASSANDRA-4781)
 * Remove system tables accounting from schema (CASSANDRA-4850)
 * (cql3) Force provided columns in clustering key order in 
   'CLUSTERING ORDER BY' (CASSANDRA-4881)
 * Fix composite index bug (CASSANDRA-4884)
 * Fix short read protection for CQL3 (CASSANDRA-4882)
 * Add tracing support to the binary protocol (CASSANDRA-4699)
 * (cql3) Don't allow prepared marker inside collections (CASSANDRA-4890)
 * Re-allow order by on non-selected columns (CASSANDRA-4645)
 * Bug when composite index is created in a table having collections (CASSANDRA-4909)
 * log index scan subject in CompositesSearcher (CASSANDRA-4904)
Merged from 1.1:
 * add get[Row|Key]CacheEntries to CacheServiceMBean (CASSANDRA-4859)
 * fix get_paged_slice to wrap to next row correctly (CASSANDRA-4816)
 * fix indexing empty column values (CASSANDRA-4832)
 * allow JdbcDate to compose null Date objects (CASSANDRA-4830)
 * fix possible stackoverflow when compacting 1000s of sstables
   (CASSANDRA-4765)
 * fix wrong leveled compaction progress calculation (CASSANDRA-4807)
 * add a close() method to CRAR to prevent leaking file descriptors (CASSANDRA-4820)
 * fix potential infinite loop in get_count (CASSANDRA-4833)
 * fix compositeType.{get/from}String methods (CASSANDRA-4842)
 * (CQL) fix CREATE COLUMNFAMILY permissions check (CASSANDRA-4864)
 * Fix DynamicCompositeType same type comparison (CASSANDRA-4711)
 * Fix duplicate SSTable reference when stream session failed (CASSANDRA-3306)
 * Allow static CF definition with compact storage (CASSANDRA-4910)
 * Fix endless loop/compaction of schema_* CFs due to broken timestamps (CASSANDRA-4880)
 * Fix 'wrong class type' assertion in CounterColumn (CASSANDRA-4976)


1.2-beta1
 * add atomic_batch_mutate (CASSANDRA-4542, -4635)
 * increase default max_hint_window_in_ms to 3h (CASSANDRA-4632)
 * include message initiation time to replicas so they can more
   accurately drop timed-out requests (CASSANDRA-2858)
 * fix clientutil.jar dependencies (CASSANDRA-4566)
 * optimize WriteResponse (CASSANDRA-4548)
 * new metrics (CASSANDRA-4009)
 * redesign KEYS indexes to avoid read-before-write (CASSANDRA-2897)
 * debug tracing (CASSANDRA-1123)
 * parallelize row cache loading (CASSANDRA-4282)
 * Make compaction, flush JBOD-aware (CASSANDRA-4292)
 * run local range scans on the read stage (CASSANDRA-3687)
 * clean up ioexceptions (CASSANDRA-2116)
 * add disk_failure_policy (CASSANDRA-2118)
 * Introduce new json format with row level deletion (CASSANDRA-4054)
 * remove redundant "name" column from schema_keyspaces (CASSANDRA-4433)
 * improve "nodetool ring" handling of multi-dc clusters (CASSANDRA-3047)
 * update NTS calculateNaturalEndpoints to be O(N log N) (CASSANDRA-3881)
 * split up rpc timeout by operation type (CASSANDRA-2819)
 * rewrite key cache save/load to use only sequential i/o (CASSANDRA-3762)
 * update MS protocol with a version handshake + broadcast address id
   (CASSANDRA-4311)
 * multithreaded hint replay (CASSANDRA-4189)
 * add inter-node message compression (CASSANDRA-3127)
 * remove COPP (CASSANDRA-2479)
 * Track tombstone expiration and compact when tombstone content is
   higher than a configurable threshold, default 20% (CASSANDRA-3442, 4234)
 * update MurmurHash to version 3 (CASSANDRA-2975)
 * (CLI) track elapsed time for `delete' operation (CASSANDRA-4060)
 * (CLI) jline version is bumped to 1.0 to properly  support
   'delete' key function (CASSANDRA-4132)
 * Save IndexSummary into new SSTable 'Summary' component (CASSANDRA-2392, 4289)
 * Add support for range tombstones (CASSANDRA-3708)
 * Improve MessagingService efficiency (CASSANDRA-3617)
 * Avoid ID conflicts from concurrent schema changes (CASSANDRA-3794)
 * Set thrift HSHA server thread limit to unlimited by default (CASSANDRA-4277)
 * Avoids double serialization of CF id in RowMutation messages
   (CASSANDRA-4293)
 * stream compressed sstables directly with java nio (CASSANDRA-4297)
 * Support multiple ranges in SliceQueryFilter (CASSANDRA-3885)
 * Add column metadata to system column families (CASSANDRA-4018)
 * (cql3) Always use composite types by default (CASSANDRA-4329)
 * (cql3) Add support for set, map and list (CASSANDRA-3647)
 * Validate date type correctly (CASSANDRA-4441)
 * (cql3) Allow definitions with only a PK (CASSANDRA-4361)
 * (cql3) Add support for row key composites (CASSANDRA-4179)
 * improve DynamicEndpointSnitch by using reservoir sampling (CASSANDRA-4038)
 * (cql3) Add support for 2ndary indexes (CASSANDRA-3680)
 * (cql3) fix defining more than one PK to be invalid (CASSANDRA-4477)
 * remove schema agreement checking from all external APIs (Thrift, CQL and CQL3) (CASSANDRA-4487)
 * add Murmur3Partitioner and make it default for new installations (CASSANDRA-3772, 4621)
 * (cql3) update pseudo-map syntax to use map syntax (CASSANDRA-4497)
 * Finer grained exceptions hierarchy and provides error code with exceptions (CASSANDRA-3979)
 * Adds events push to binary protocol (CASSANDRA-4480)
 * Rewrite nodetool help (CASSANDRA-2293)
 * Make CQL3 the default for CQL (CASSANDRA-4640)
 * update stress tool to be able to use CQL3 (CASSANDRA-4406)
 * Accept all thrift update on CQL3 cf but don't expose their metadata (CASSANDRA-4377)
 * Replace Throttle with Guava's RateLimiter for HintedHandOff (CASSANDRA-4541)
 * fix counter add/get using CQL2 and CQL3 in stress tool (CASSANDRA-4633)
 * Add sstable count per level to cfstats (CASSANDRA-4537)
 * (cql3) Add ALTER KEYSPACE statement (CASSANDRA-4611)
 * (cql3) Allow defining default consistency levels (CASSANDRA-4448)
 * (cql3) Fix queries using LIMIT missing results (CASSANDRA-4579)
 * fix cross-version gossip messaging (CASSANDRA-4576)
 * added inet data type (CASSANDRA-4627)


1.1.6
 * Wait for writes on synchronous read digest mismatch (CASSANDRA-4792)
 * fix commitlog replay for nanotime-infected sstables (CASSANDRA-4782)
 * preflight check ttl for maximum of 20 years (CASSANDRA-4771)
 * (Pig) fix widerow input with single column rows (CASSANDRA-4789)
 * Fix HH to compact with correct gcBefore, which avoids wiping out
   undelivered hints (CASSANDRA-4772)
 * LCS will merge up to 32 L0 sstables as intended (CASSANDRA-4778)
 * NTS will default unconfigured DC replicas to zero (CASSANDRA-4675)
 * use default consistency level in counter validation if none is
   explicitly provide (CASSANDRA-4700)
 * Improve IAuthority interface by introducing fine-grained
   access permissions and grant/revoke commands (CASSANDRA-4490, 4644)
 * fix assumption error in CLI when updating/describing keyspace 
   (CASSANDRA-4322)
 * Adds offline sstablescrub to debian packaging (CASSANDRA-4642)
 * Automatic fixing of overlapping leveled sstables (CASSANDRA-4644)
 * fix error when using ORDER BY with extended selections (CASSANDRA-4689)
 * (CQL3) Fix validation for IN queries for non-PK cols (CASSANDRA-4709)
 * fix re-created keyspace disappering after 1.1.5 upgrade 
   (CASSANDRA-4698, 4752)
 * (CLI) display elapsed time in 2 fraction digits (CASSANDRA-3460)
 * add authentication support to sstableloader (CASSANDRA-4712)
 * Fix CQL3 'is reversed' logic (CASSANDRA-4716, 4759)
 * (CQL3) Don't return ReversedType in result set metadata (CASSANDRA-4717)
 * Backport adding AlterKeyspace statement (CASSANDRA-4611)
 * (CQL3) Correcty accept upper-case data types (CASSANDRA-4770)
 * Add binary protocol events for schema changes (CASSANDRA-4684)
Merged from 1.0:
 * Switch from NBHM to CHM in MessagingService's callback map, which
   prevents OOM in long-running instances (CASSANDRA-4708)


1.1.5
 * add SecondaryIndex.reload API (CASSANDRA-4581)
 * use millis + atomicint for commitlog segment creation instead of
   nanotime, which has issues under some hypervisors (CASSANDRA-4601)
 * fix FD leak in slice queries (CASSANDRA-4571)
 * avoid recursion in leveled compaction (CASSANDRA-4587)
 * increase stack size under Java7 to 180K
 * Log(info) schema changes (CASSANDRA-4547)
 * Change nodetool setcachecapcity to manipulate global caches (CASSANDRA-4563)
 * (cql3) fix setting compaction strategy (CASSANDRA-4597)
 * fix broken system.schema_* timestamps on system startup (CASSANDRA-4561)
 * fix wrong skip of cache saving (CASSANDRA-4533)
 * Avoid NPE when lost+found is in data dir (CASSANDRA-4572)
 * Respect five-minute flush moratorium after initial CL replay (CASSANDRA-4474)
 * Adds ntp as recommended in debian packaging (CASSANDRA-4606)
 * Configurable transport in CF Record{Reader|Writer} (CASSANDRA-4558)
 * (cql3) fix potential NPE with both equal and unequal restriction (CASSANDRA-4532)
 * (cql3) improves ORDER BY validation (CASSANDRA-4624)
 * Fix potential deadlock during counter writes (CASSANDRA-4578)
 * Fix cql error with ORDER BY when using IN (CASSANDRA-4612)
Merged from 1.0:
 * increase Xss to 160k to accomodate latest 1.6 JVMs (CASSANDRA-4602)
 * fix toString of hint destination tokens (CASSANDRA-4568)
 * Fix multiple values for CurrentLocal NodeID (CASSANDRA-4626)


1.1.4
 * fix offline scrub to catch >= out of order rows (CASSANDRA-4411)
 * fix cassandra-env.sh on RHEL and other non-dash-based systems 
   (CASSANDRA-4494)
Merged from 1.0:
 * (Hadoop) fix setting key length for old-style mapred api (CASSANDRA-4534)
 * (Hadoop) fix iterating through a resultset consisting entirely
   of tombstoned rows (CASSANDRA-4466)


1.1.3
 * (cqlsh) add COPY TO (CASSANDRA-4434)
 * munmap commitlog segments before rename (CASSANDRA-4337)
 * (JMX) rename getRangeKeySample to sampleKeyRange to avoid returning
   multi-MB results as an attribute (CASSANDRA-4452)
 * flush based on data size, not throughput; overwritten columns no 
   longer artificially inflate liveRatio (CASSANDRA-4399)
 * update default commitlog segment size to 32MB and total commitlog
   size to 32/1024 MB for 32/64 bit JVMs, respectively (CASSANDRA-4422)
 * avoid using global partitioner to estimate ranges in index sstables
   (CASSANDRA-4403)
 * restore pre-CASSANDRA-3862 approach to removing expired tombstones
   from row cache during compaction (CASSANDRA-4364)
 * (stress) support for CQL prepared statements (CASSANDRA-3633)
 * Correctly catch exception when Snappy cannot be loaded (CASSANDRA-4400)
 * (cql3) Support ORDER BY when IN condition is given in WHERE clause (CASSANDRA-4327)
 * (cql3) delete "component_index" column on DROP TABLE call (CASSANDRA-4420)
 * change nanoTime() to currentTimeInMillis() in schema related code (CASSANDRA-4432)
 * add a token generation tool (CASSANDRA-3709)
 * Fix LCS bug with sstable containing only 1 row (CASSANDRA-4411)
 * fix "Can't Modify Index Name" problem on CF update (CASSANDRA-4439)
 * Fix assertion error in getOverlappingSSTables during repair (CASSANDRA-4456)
 * fix nodetool's setcompactionthreshold command (CASSANDRA-4455)
 * Ensure compacted files are never used, to avoid counter overcount (CASSANDRA-4436)
Merged from 1.0:
 * Push the validation of secondary index values to the SecondaryIndexManager (CASSANDRA-4240)
 * allow dropping columns shadowed by not-yet-expired supercolumn or row
   tombstones in PrecompactedRow (CASSANDRA-4396)


1.1.2
 * Fix cleanup not deleting index entries (CASSANDRA-4379)
 * Use correct partitioner when saving + loading caches (CASSANDRA-4331)
 * Check schema before trying to export sstable (CASSANDRA-2760)
 * Raise a meaningful exception instead of NPE when PFS encounters
   an unconfigured node + no default (CASSANDRA-4349)
 * fix bug in sstable blacklisting with LCS (CASSANDRA-4343)
 * LCS no longer promotes tiny sstables out of L0 (CASSANDRA-4341)
 * skip tombstones during hint replay (CASSANDRA-4320)
 * fix NPE in compactionstats (CASSANDRA-4318)
 * enforce 1m min keycache for auto (CASSANDRA-4306)
 * Have DeletedColumn.isMFD always return true (CASSANDRA-4307)
 * (cql3) exeption message for ORDER BY constraints said primary filter can be
    an IN clause, which is misleading (CASSANDRA-4319)
 * (cql3) Reject (not yet supported) creation of 2ndardy indexes on tables with
   composite primary keys (CASSANDRA-4328)
 * Set JVM stack size to 160k for java 7 (CASSANDRA-4275)
 * cqlsh: add COPY command to load data from CSV flat files (CASSANDRA-4012)
 * CFMetaData.fromThrift to throw ConfigurationException upon error (CASSANDRA-4353)
 * Use CF comparator to sort indexed columns in SecondaryIndexManager
   (CASSANDRA-4365)
 * add strategy_options to the KSMetaData.toString() output (CASSANDRA-4248)
 * (cql3) fix range queries containing unqueried results (CASSANDRA-4372)
 * (cql3) allow updating column_alias types (CASSANDRA-4041)
 * (cql3) Fix deletion bug (CASSANDRA-4193)
 * Fix computation of overlapping sstable for leveled compaction (CASSANDRA-4321)
 * Improve scrub and allow to run it offline (CASSANDRA-4321)
 * Fix assertionError in StorageService.bulkLoad (CASSANDRA-4368)
 * (cqlsh) add option to authenticate to a keyspace at startup (CASSANDRA-4108)
 * (cqlsh) fix ASSUME functionality (CASSANDRA-4352)
 * Fix ColumnFamilyRecordReader to not return progress > 100% (CASSANDRA-3942)
Merged from 1.0:
 * Set gc_grace on index CF to 0 (CASSANDRA-4314)


1.1.1
 * add populate_io_cache_on_flush option (CASSANDRA-2635)
 * allow larger cache capacities than 2GB (CASSANDRA-4150)
 * add getsstables command to nodetool (CASSANDRA-4199)
 * apply parent CF compaction settings to secondary index CFs (CASSANDRA-4280)
 * preserve commitlog size cap when recycling segments at startup
   (CASSANDRA-4201)
 * (Hadoop) fix split generation regression (CASSANDRA-4259)
 * ignore min/max compactions settings in LCS, while preserving
   behavior that min=max=0 disables autocompaction (CASSANDRA-4233)
 * log number of rows read from saved cache (CASSANDRA-4249)
 * calculate exact size required for cleanup operations (CASSANDRA-1404)
 * avoid blocking additional writes during flush when the commitlog
   gets behind temporarily (CASSANDRA-1991)
 * enable caching on index CFs based on data CF cache setting (CASSANDRA-4197)
 * warn on invalid replication strategy creation options (CASSANDRA-4046)
 * remove [Freeable]Memory finalizers (CASSANDRA-4222)
 * include tombstone size in ColumnFamily.size, which can prevent OOM
   during sudden mass delete operations by yielding a nonzero liveRatio
   (CASSANDRA-3741)
 * Open 1 sstableScanner per level for leveled compaction (CASSANDRA-4142)
 * Optimize reads when row deletion timestamps allow us to restrict
   the set of sstables we check (CASSANDRA-4116)
 * add support for commitlog archiving and point-in-time recovery
   (CASSANDRA-3690)
 * avoid generating redundant compaction tasks during streaming
   (CASSANDRA-4174)
 * add -cf option to nodetool snapshot, and takeColumnFamilySnapshot to
   StorageService mbean (CASSANDRA-556)
 * optimize cleanup to drop entire sstables where possible (CASSANDRA-4079)
 * optimize truncate when autosnapshot is disabled (CASSANDRA-4153)
 * update caches to use byte[] keys to reduce memory overhead (CASSANDRA-3966)
 * add column limit to cli (CASSANDRA-3012, 4098)
 * clean up and optimize DataOutputBuffer, used by CQL compression and
   CompositeType (CASSANDRA-4072)
 * optimize commitlog checksumming (CASSANDRA-3610)
 * identify and blacklist corrupted SSTables from future compactions 
   (CASSANDRA-2261)
 * Move CfDef and KsDef validation out of thrift (CASSANDRA-4037)
 * Expose API to repair a user provided range (CASSANDRA-3912)
 * Add way to force the cassandra-cli to refresh its schema (CASSANDRA-4052)
 * Avoid having replicate on write tasks stacking up at CL.ONE (CASSANDRA-2889)
 * (cql3) Backwards compatibility for composite comparators in non-cql3-aware
   clients (CASSANDRA-4093)
 * (cql3) Fix order by for reversed queries (CASSANDRA-4160)
 * (cql3) Add ReversedType support (CASSANDRA-4004)
 * (cql3) Add timeuuid type (CASSANDRA-4194)
 * (cql3) Minor fixes (CASSANDRA-4185)
 * (cql3) Fix prepared statement in BATCH (CASSANDRA-4202)
 * (cql3) Reduce the list of reserved keywords (CASSANDRA-4186)
 * (cql3) Move max/min compaction thresholds to compaction strategy options
   (CASSANDRA-4187)
 * Fix exception during move when localhost is the only source (CASSANDRA-4200)
 * (cql3) Allow paging through non-ordered partitioner results (CASSANDRA-3771)
 * (cql3) Fix drop index (CASSANDRA-4192)
 * (cql3) Don't return range ghosts anymore (CASSANDRA-3982)
 * fix re-creating Keyspaces/ColumnFamilies with the same name as dropped
   ones (CASSANDRA-4219)
 * fix SecondaryIndex LeveledManifest save upon snapshot (CASSANDRA-4230)
 * fix missing arrayOffset in FBUtilities.hash (CASSANDRA-4250)
 * (cql3) Add name of parameters in CqlResultSet (CASSANDRA-4242)
 * (cql3) Correctly validate order by queries (CASSANDRA-4246)
 * rename stress to cassandra-stress for saner packaging (CASSANDRA-4256)
 * Fix exception on colum metadata with non-string comparator (CASSANDRA-4269)
 * Check for unknown/invalid compression options (CASSANDRA-4266)
 * (cql3) Adds simple access to column timestamp and ttl (CASSANDRA-4217)
 * (cql3) Fix range queries with secondary indexes (CASSANDRA-4257)
 * Better error messages from improper input in cli (CASSANDRA-3865)
 * Try to stop all compaction upon Keyspace or ColumnFamily drop (CASSANDRA-4221)
 * (cql3) Allow keyspace properties to contain hyphens (CASSANDRA-4278)
 * (cql3) Correctly validate keyspace access in create table (CASSANDRA-4296)
 * Avoid deadlock in migration stage (CASSANDRA-3882)
 * Take supercolumn names and deletion info into account in memtable throughput
   (CASSANDRA-4264)
 * Add back backward compatibility for old style replication factor (CASSANDRA-4294)
 * Preserve compatibility with pre-1.1 index queries (CASSANDRA-4262)
Merged from 1.0:
 * Fix super columns bug where cache is not updated (CASSANDRA-4190)
 * fix maxTimestamp to include row tombstones (CASSANDRA-4116)
 * (CLI) properly handle quotes in create/update keyspace commands (CASSANDRA-4129)
 * Avoids possible deadlock during bootstrap (CASSANDRA-4159)
 * fix stress tool that hangs forever on timeout or error (CASSANDRA-4128)
 * stress tool to return appropriate exit code on failure (CASSANDRA-4188)
 * fix compaction NPE when out of disk space and assertions disabled
   (CASSANDRA-3985)
 * synchronize LCS getEstimatedTasks to avoid CME (CASSANDRA-4255)
 * ensure unique streaming session id's (CASSANDRA-4223)
 * kick off background compaction when min/max thresholds change 
   (CASSANDRA-4279)
 * improve ability of STCS.getBuckets to deal with 100s of 1000s of
   sstables, such as when convertinb back from LCS (CASSANDRA-4287)
 * Oversize integer in CQL throws NumberFormatException (CASSANDRA-4291)
 * fix 1.0.x node join to mixed version cluster, other nodes >= 1.1 (CASSANDRA-4195)
 * Fix LCS splitting sstable base on uncompressed size (CASSANDRA-4419)
 * Push the validation of secondary index values to the SecondaryIndexManager (CASSANDRA-4240)
 * Don't purge columns during upgradesstables (CASSANDRA-4462)
 * Make cqlsh work with piping (CASSANDRA-4113)
 * Validate arguments for nodetool decommission (CASSANDRA-4061)
 * Report thrift status in nodetool info (CASSANDRA-4010)


1.1.0-final
 * average a reduced liveRatio estimate with the previous one (CASSANDRA-4065)
 * Allow KS and CF names up to 48 characters (CASSANDRA-4157)
 * fix stress build (CASSANDRA-4140)
 * add time remaining estimate to nodetool compactionstats (CASSANDRA-4167)
 * (cql) fix NPE in cql3 ALTER TABLE (CASSANDRA-4163)
 * (cql) Add support for CL.TWO and CL.THREE in CQL (CASSANDRA-4156)
 * (cql) Fix type in CQL3 ALTER TABLE preventing update (CASSANDRA-4170)
 * (cql) Throw invalid exception from CQL3 on obsolete options (CASSANDRA-4171)
 * (cqlsh) fix recognizing uppercase SELECT keyword (CASSANDRA-4161)
 * Pig: wide row support (CASSANDRA-3909)
Merged from 1.0:
 * avoid streaming empty files with bulk loader if sstablewriter errors out
   (CASSANDRA-3946)


1.1-rc1
 * Include stress tool in binary builds (CASSANDRA-4103)
 * (Hadoop) fix wide row iteration when last row read was deleted
   (CASSANDRA-4154)
 * fix read_repair_chance to really default to 0.1 in the cli (CASSANDRA-4114)
 * Adds caching and bloomFilterFpChange to CQL options (CASSANDRA-4042)
 * Adds posibility to autoconfigure size of the KeyCache (CASSANDRA-4087)
 * fix KEYS index from skipping results (CASSANDRA-3996)
 * Remove sliced_buffer_size_in_kb dead option (CASSANDRA-4076)
 * make loadNewSStable preserve sstable version (CASSANDRA-4077)
 * Respect 1.0 cache settings as much as possible when upgrading 
   (CASSANDRA-4088)
 * relax path length requirement for sstable files when upgrading on 
   non-Windows platforms (CASSANDRA-4110)
 * fix terminination of the stress.java when errors were encountered
   (CASSANDRA-4128)
 * Move CfDef and KsDef validation out of thrift (CASSANDRA-4037)
 * Fix get_paged_slice (CASSANDRA-4136)
 * CQL3: Support slice with exclusive start and stop (CASSANDRA-3785)
Merged from 1.0:
 * support PropertyFileSnitch in bulk loader (CASSANDRA-4145)
 * add auto_snapshot option allowing disabling snapshot before drop/truncate
   (CASSANDRA-3710)
 * allow short snitch names (CASSANDRA-4130)


1.1-beta2
 * rename loaded sstables to avoid conflicts with local snapshots
   (CASSANDRA-3967)
 * start hint replay as soon as FD notifies that the target is back up
   (CASSANDRA-3958)
 * avoid unproductive deserializing of cached rows during compaction
   (CASSANDRA-3921)
 * fix concurrency issues with CQL keyspace creation (CASSANDRA-3903)
 * Show Effective Owership via Nodetool ring <keyspace> (CASSANDRA-3412)
 * Update ORDER BY syntax for CQL3 (CASSANDRA-3925)
 * Fix BulkRecordWriter to not throw NPE if reducer gets no map data from Hadoop (CASSANDRA-3944)
 * Fix bug with counters in super columns (CASSANDRA-3821)
 * Remove deprecated merge_shard_chance (CASSANDRA-3940)
 * add a convenient way to reset a node's schema (CASSANDRA-2963)
 * fix for intermittent SchemaDisagreementException (CASSANDRA-3884)
 * CLI `list <CF>` to limit number of columns and their order (CASSANDRA-3012)
 * ignore deprecated KsDef/CfDef/ColumnDef fields in native schema (CASSANDRA-3963)
 * CLI to report when unsupported column_metadata pair was given (CASSANDRA-3959)
 * reincarnate removed and deprecated KsDef/CfDef attributes (CASSANDRA-3953)
 * Fix race between writes and read for cache (CASSANDRA-3862)
 * perform static initialization of StorageProxy on start-up (CASSANDRA-3797)
 * support trickling fsync() on writes (CASSANDRA-3950)
 * expose counters for unavailable/timeout exceptions given to thrift clients (CASSANDRA-3671)
 * avoid quadratic startup time in LeveledManifest (CASSANDRA-3952)
 * Add type information to new schema_ columnfamilies and remove thrift
   serialization for schema (CASSANDRA-3792)
 * add missing column validator options to the CLI help (CASSANDRA-3926)
 * skip reading saved key cache if CF's caching strategy is NONE or ROWS_ONLY (CASSANDRA-3954)
 * Unify migration code (CASSANDRA-4017)
Merged from 1.0:
 * cqlsh: guess correct version of Python for Arch Linux (CASSANDRA-4090)
 * (CLI) properly handle quotes in create/update keyspace commands (CASSANDRA-4129)
 * Avoids possible deadlock during bootstrap (CASSANDRA-4159)
 * fix stress tool that hangs forever on timeout or error (CASSANDRA-4128)
 * Fix super columns bug where cache is not updated (CASSANDRA-4190)
 * stress tool to return appropriate exit code on failure (CASSANDRA-4188)


1.0.9
 * improve index sampling performance (CASSANDRA-4023)
 * always compact away deleted hints immediately after handoff (CASSANDRA-3955)
 * delete hints from dropped ColumnFamilies on handoff instead of
   erroring out (CASSANDRA-3975)
 * add CompositeType ref to the CLI doc for create/update column family (CASSANDRA-3980)
 * Pig: support Counter ColumnFamilies (CASSANDRA-3973)
 * Pig: Composite column support (CASSANDRA-3684)
 * Avoid NPE during repair when a keyspace has no CFs (CASSANDRA-3988)
 * Fix division-by-zero error on get_slice (CASSANDRA-4000)
 * don't change manifest level for cleanup, scrub, and upgradesstables
   operations under LeveledCompactionStrategy (CASSANDRA-3989, 4112)
 * fix race leading to super columns assertion failure (CASSANDRA-3957)
 * fix NPE on invalid CQL delete command (CASSANDRA-3755)
 * allow custom types in CLI's assume command (CASSANDRA-4081)
 * fix totalBytes count for parallel compactions (CASSANDRA-3758)
 * fix intermittent NPE in get_slice (CASSANDRA-4095)
 * remove unnecessary asserts in native code interfaces (CASSANDRA-4096)
 * Validate blank keys in CQL to avoid assertion errors (CASSANDRA-3612)
 * cqlsh: fix bad decoding of some column names (CASSANDRA-4003)
 * cqlsh: fix incorrect padding with unicode chars (CASSANDRA-4033)
 * Fix EC2 snitch incorrectly reporting region (CASSANDRA-4026)
 * Shut down thrift during decommission (CASSANDRA-4086)
 * Expose nodetool cfhistograms for 2ndary indexes (CASSANDRA-4063)
Merged from 0.8:
 * Fix ConcurrentModificationException in gossiper (CASSANDRA-4019)


1.1-beta1
 * (cqlsh)
   + add SOURCE and CAPTURE commands, and --file option (CASSANDRA-3479)
   + add ALTER COLUMNFAMILY WITH (CASSANDRA-3523)
   + bundle Python dependencies with Cassandra (CASSANDRA-3507)
   + added to Debian package (CASSANDRA-3458)
   + display byte data instead of erroring out on decode failure 
     (CASSANDRA-3874)
 * add nodetool rebuild_index (CASSANDRA-3583)
 * add nodetool rangekeysample (CASSANDRA-2917)
 * Fix streaming too much data during move operations (CASSANDRA-3639)
 * Nodetool and CLI connect to localhost by default (CASSANDRA-3568)
 * Reduce memory used by primary index sample (CASSANDRA-3743)
 * (Hadoop) separate input/output configurations (CASSANDRA-3197, 3765)
 * avoid returning internal Cassandra classes over JMX (CASSANDRA-2805)
 * add row-level isolation via SnapTree (CASSANDRA-2893)
 * Optimize key count estimation when opening sstable on startup
   (CASSANDRA-2988)
 * multi-dc replication optimization supporting CL > ONE (CASSANDRA-3577)
 * add command to stop compactions (CASSANDRA-1740, 3566, 3582)
 * multithreaded streaming (CASSANDRA-3494)
 * removed in-tree redhat spec (CASSANDRA-3567)
 * "defragment" rows for name-based queries under STCS, again (CASSANDRA-2503)
 * Recycle commitlog segments for improved performance 
   (CASSANDRA-3411, 3543, 3557, 3615)
 * update size-tiered compaction to prioritize small tiers (CASSANDRA-2407)
 * add message expiration logic to OutboundTcpConnection (CASSANDRA-3005)
 * off-heap cache to use sun.misc.Unsafe instead of JNA (CASSANDRA-3271)
 * EACH_QUORUM is only supported for writes (CASSANDRA-3272)
 * replace compactionlock use in schema migration by checking CFS.isValid
   (CASSANDRA-3116)
 * recognize that "SELECT first ... *" isn't really "SELECT *" (CASSANDRA-3445)
 * Use faster bytes comparison (CASSANDRA-3434)
 * Bulk loader is no longer a fat client, (HADOOP) bulk load output format
   (CASSANDRA-3045)
 * (Hadoop) add support for KeyRange.filter
 * remove assumption that keys and token are in bijection
   (CASSANDRA-1034, 3574, 3604)
 * always remove endpoints from delevery queue in HH (CASSANDRA-3546)
 * fix race between cf flush and its 2ndary indexes flush (CASSANDRA-3547)
 * fix potential race in AES when a repair fails (CASSANDRA-3548)
 * Remove columns shadowed by a deleted container even when we cannot purge
   (CASSANDRA-3538)
 * Improve memtable slice iteration performance (CASSANDRA-3545)
 * more efficient allocation of small bloom filters (CASSANDRA-3618)
 * Use separate writer thread in SSTableSimpleUnsortedWriter (CASSANDRA-3619)
 * fsync the directory after new sstable or commitlog segment are created (CASSANDRA-3250)
 * fix minor issues reported by FindBugs (CASSANDRA-3658)
 * global key/row caches (CASSANDRA-3143, 3849)
 * optimize memtable iteration during range scan (CASSANDRA-3638)
 * introduce 'crc_check_chance' in CompressionParameters to support
   a checksum percentage checking chance similarly to read-repair (CASSANDRA-3611)
 * a way to deactivate global key/row cache on per-CF basis (CASSANDRA-3667)
 * fix LeveledCompactionStrategy broken because of generation pre-allocation
   in LeveledManifest (CASSANDRA-3691)
 * finer-grained control over data directories (CASSANDRA-2749)
 * Fix ClassCastException during hinted handoff (CASSANDRA-3694)
 * Upgrade Thrift to 0.7 (CASSANDRA-3213)
 * Make stress.java insert operation to use microseconds (CASSANDRA-3725)
 * Allows (internally) doing a range query with a limit of columns instead of
   rows (CASSANDRA-3742)
 * Allow rangeSlice queries to be start/end inclusive/exclusive (CASSANDRA-3749)
 * Fix BulkLoader to support new SSTable layout and add stream
   throttling to prevent an NPE when there is no yaml config (CASSANDRA-3752)
 * Allow concurrent schema migrations (CASSANDRA-1391, 3832)
 * Add SnapshotCommand to trigger snapshot on remote node (CASSANDRA-3721)
 * Make CFMetaData conversions to/from thrift/native schema inverses
   (CASSANDRA_3559)
 * Add initial code for CQL 3.0-beta (CASSANDRA-2474, 3781, 3753)
 * Add wide row support for ColumnFamilyInputFormat (CASSANDRA-3264)
 * Allow extending CompositeType comparator (CASSANDRA-3657)
 * Avoids over-paging during get_count (CASSANDRA-3798)
 * Add new command to rebuild a node without (repair) merkle tree calculations
   (CASSANDRA-3483, 3922)
 * respect not only row cache capacity but caching mode when
   trying to read data (CASSANDRA-3812)
 * fix system tests (CASSANDRA-3827)
 * CQL support for altering row key type in ALTER TABLE (CASSANDRA-3781)
 * turn compression on by default (CASSANDRA-3871)
 * make hexToBytes refuse invalid input (CASSANDRA-2851)
 * Make secondary indexes CF inherit compression and compaction from their
   parent CF (CASSANDRA-3877)
 * Finish cleanup up tombstone purge code (CASSANDRA-3872)
 * Avoid NPE on aboarted stream-out sessions (CASSANDRA-3904)
 * BulkRecordWriter throws NPE for counter columns (CASSANDRA-3906)
 * Support compression using BulkWriter (CASSANDRA-3907)


1.0.8
 * fix race between cleanup and flush on secondary index CFSes (CASSANDRA-3712)
 * avoid including non-queried nodes in rangeslice read repair
   (CASSANDRA-3843)
 * Only snapshot CF being compacted for snapshot_before_compaction 
   (CASSANDRA-3803)
 * Log active compactions in StatusLogger (CASSANDRA-3703)
 * Compute more accurate compaction score per level (CASSANDRA-3790)
 * Return InvalidRequest when using a keyspace that doesn't exist
   (CASSANDRA-3764)
 * disallow user modification of System keyspace (CASSANDRA-3738)
 * allow using sstable2json on secondary index data (CASSANDRA-3738)
 * (cqlsh) add DESCRIBE COLUMNFAMILIES (CASSANDRA-3586)
 * (cqlsh) format blobs correctly and use colors to improve output
   readability (CASSANDRA-3726)
 * synchronize BiMap of bootstrapping tokens (CASSANDRA-3417)
 * show index options in CLI (CASSANDRA-3809)
 * add optional socket timeout for streaming (CASSANDRA-3838)
 * fix truncate not to leave behind non-CFS backed secondary indexes
   (CASSANDRA-3844)
 * make CLI `show schema` to use output stream directly instead
   of StringBuilder (CASSANDRA-3842)
 * remove the wait on hint future during write (CASSANDRA-3870)
 * (cqlsh) ignore missing CfDef opts (CASSANDRA-3933)
 * (cqlsh) look for cqlshlib relative to realpath (CASSANDRA-3767)
 * Fix short read protection (CASSANDRA-3934)
 * Make sure infered and actual schema match (CASSANDRA-3371)
 * Fix NPE during HH delivery (CASSANDRA-3677)
 * Don't put boostrapping node in 'hibernate' status (CASSANDRA-3737)
 * Fix double quotes in windows bat files (CASSANDRA-3744)
 * Fix bad validator lookup (CASSANDRA-3789)
 * Fix soft reset in EC2MultiRegionSnitch (CASSANDRA-3835)
 * Don't leave zombie connections with THSHA thrift server (CASSANDRA-3867)
 * (cqlsh) fix deserialization of data (CASSANDRA-3874)
 * Fix removetoken force causing an inconsistent state (CASSANDRA-3876)
 * Fix ahndling of some types with Pig (CASSANDRA-3886)
 * Don't allow to drop the system keyspace (CASSANDRA-3759)
 * Make Pig deletes disabled by default and configurable (CASSANDRA-3628)
Merged from 0.8:
 * (Pig) fix CassandraStorage to use correct comparator in Super ColumnFamily
   case (CASSANDRA-3251)
 * fix thread safety issues in commitlog replay, primarily affecting
   systems with many (100s) of CF definitions (CASSANDRA-3751)
 * Fix relevant tombstone ignored with super columns (CASSANDRA-3875)


1.0.7
 * fix regression in HH page size calculation (CASSANDRA-3624)
 * retry failed stream on IOException (CASSANDRA-3686)
 * allow configuring bloom_filter_fp_chance (CASSANDRA-3497)
 * attempt hint delivery every ten minutes, or when failure detector
   notifies us that a node is back up, whichever comes first.  hint
   handoff throttle delay default changed to 1ms, from 50 (CASSANDRA-3554)
 * add nodetool setstreamthroughput (CASSANDRA-3571)
 * fix assertion when dropping a columnfamily with no sstables (CASSANDRA-3614)
 * more efficient allocation of small bloom filters (CASSANDRA-3618)
 * CLibrary.createHardLinkWithExec() to check for errors (CASSANDRA-3101)
 * Avoid creating empty and non cleaned writer during compaction (CASSANDRA-3616)
 * stop thrift service in shutdown hook so we can quiesce MessagingService
   (CASSANDRA-3335)
 * (CQL) compaction_strategy_options and compression_parameters for
   CREATE COLUMNFAMILY statement (CASSANDRA-3374)
 * Reset min/max compaction threshold when creating size tiered compaction
   strategy (CASSANDRA-3666)
 * Don't ignore IOException during compaction (CASSANDRA-3655)
 * Fix assertion error for CF with gc_grace=0 (CASSANDRA-3579)
 * Shutdown ParallelCompaction reducer executor after use (CASSANDRA-3711)
 * Avoid < 0 value for pending tasks in leveled compaction (CASSANDRA-3693)
 * (Hadoop) Support TimeUUID in Pig CassandraStorage (CASSANDRA-3327)
 * Check schema is ready before continuing boostrapping (CASSANDRA-3629)
 * Catch overflows during parsing of chunk_length_kb (CASSANDRA-3644)
 * Improve stream protocol mismatch errors (CASSANDRA-3652)
 * Avoid multiple thread doing HH to the same target (CASSANDRA-3681)
 * Add JMX property for rp_timeout_in_ms (CASSANDRA-2940)
 * Allow DynamicCompositeType to compare component of different types
   (CASSANDRA-3625)
 * Flush non-cfs backed secondary indexes (CASSANDRA-3659)
 * Secondary Indexes should report memory consumption (CASSANDRA-3155)
 * fix for SelectStatement start/end key are not set correctly
   when a key alias is involved (CASSANDRA-3700)
 * fix CLI `show schema` command insert of an extra comma in
   column_metadata (CASSANDRA-3714)
Merged from 0.8:
 * avoid logging (harmless) exception when GC takes < 1ms (CASSANDRA-3656)
 * prevent new nodes from thinking down nodes are up forever (CASSANDRA-3626)
 * use correct list of replicas for LOCAL_QUORUM reads when read repair
   is disabled (CASSANDRA-3696)
 * block on flush before compacting hints (may prevent OOM) (CASSANDRA-3733)


1.0.6
 * (CQL) fix cqlsh support for replicate_on_write (CASSANDRA-3596)
 * fix adding to leveled manifest after streaming (CASSANDRA-3536)
 * filter out unavailable cipher suites when using encryption (CASSANDRA-3178)
 * (HADOOP) add old-style api support for CFIF and CFRR (CASSANDRA-2799)
 * Support TimeUUIDType column names in Stress.java tool (CASSANDRA-3541)
 * (CQL) INSERT/UPDATE/DELETE/TRUNCATE commands should allow CF names to
   be qualified by keyspace (CASSANDRA-3419)
 * always remove endpoints from delevery queue in HH (CASSANDRA-3546)
 * fix race between cf flush and its 2ndary indexes flush (CASSANDRA-3547)
 * fix potential race in AES when a repair fails (CASSANDRA-3548)
 * fix default value validation usage in CLI SET command (CASSANDRA-3553)
 * Optimize componentsFor method for compaction and startup time
   (CASSANDRA-3532)
 * (CQL) Proper ColumnFamily metadata validation on CREATE COLUMNFAMILY 
   (CASSANDRA-3565)
 * fix compression "chunk_length_kb" option to set correct kb value for 
   thrift/avro (CASSANDRA-3558)
 * fix missing response during range slice repair (CASSANDRA-3551)
 * 'describe ring' moved from CLI to nodetool and available through JMX (CASSANDRA-3220)
 * add back partitioner to sstable metadata (CASSANDRA-3540)
 * fix NPE in get_count for counters (CASSANDRA-3601)
Merged from 0.8:
 * remove invalid assertion that table was opened before dropping it
   (CASSANDRA-3580)
 * range and index scans now only send requests to enough replicas to
   satisfy requested CL + RR (CASSANDRA-3598)
 * use cannonical host for local node in nodetool info (CASSANDRA-3556)
 * remove nonlocal DC write optimization since it only worked with
   CL.ONE or CL.LOCAL_QUORUM (CASSANDRA-3577, 3585)
 * detect misuses of CounterColumnType (CASSANDRA-3422)
 * turn off string interning in json2sstable, take 2 (CASSANDRA-2189)
 * validate compression parameters on add/update of the ColumnFamily 
   (CASSANDRA-3573)
 * Check for 0.0.0.0 is incorrect in CFIF (CASSANDRA-3584)
 * Increase vm.max_map_count in debian packaging (CASSANDRA-3563)
 * gossiper will never add itself to saved endpoints (CASSANDRA-3485)


1.0.5
 * revert CASSANDRA-3407 (see CASSANDRA-3540)
 * fix assertion error while forwarding writes to local nodes (CASSANDRA-3539)


1.0.4
 * fix self-hinting of timed out read repair updates and make hinted handoff
   less prone to OOMing a coordinator (CASSANDRA-3440)
 * expose bloom filter sizes via JMX (CASSANDRA-3495)
 * enforce RP tokens 0..2**127 (CASSANDRA-3501)
 * canonicalize paths exposed through JMX (CASSANDRA-3504)
 * fix "liveSize" stat when sstables are removed (CASSANDRA-3496)
 * add bloom filter FP rates to nodetool cfstats (CASSANDRA-3347)
 * record partitioner in sstable metadata component (CASSANDRA-3407)
 * add new upgradesstables nodetool command (CASSANDRA-3406)
 * skip --debug requirement to see common exceptions in CLI (CASSANDRA-3508)
 * fix incorrect query results due to invalid max timestamp (CASSANDRA-3510)
 * make sstableloader recognize compressed sstables (CASSANDRA-3521)
 * avoids race in OutboundTcpConnection in multi-DC setups (CASSANDRA-3530)
 * use SETLOCAL in cassandra.bat (CASSANDRA-3506)
 * fix ConcurrentModificationException in Table.all() (CASSANDRA-3529)
Merged from 0.8:
 * fix concurrence issue in the FailureDetector (CASSANDRA-3519)
 * fix array out of bounds error in counter shard removal (CASSANDRA-3514)
 * avoid dropping tombstones when they might still be needed to shadow
   data in a different sstable (CASSANDRA-2786)


1.0.3
 * revert name-based query defragmentation aka CASSANDRA-2503 (CASSANDRA-3491)
 * fix invalidate-related test failures (CASSANDRA-3437)
 * add next-gen cqlsh to bin/ (CASSANDRA-3188, 3131, 3493)
 * (CQL) fix handling of rows with no columns (CASSANDRA-3424, 3473)
 * fix querying supercolumns by name returning only a subset of
   subcolumns or old subcolumn versions (CASSANDRA-3446)
 * automatically compute sha1 sum for uncompressed data files (CASSANDRA-3456)
 * fix reading metadata/statistics component for version < h (CASSANDRA-3474)
 * add sstable forward-compatibility (CASSANDRA-3478)
 * report compression ratio in CFSMBean (CASSANDRA-3393)
 * fix incorrect size exception during streaming of counters (CASSANDRA-3481)
 * (CQL) fix for counter decrement syntax (CASSANDRA-3418)
 * Fix race introduced by CASSANDRA-2503 (CASSANDRA-3482)
 * Fix incomplete deletion of delivered hints (CASSANDRA-3466)
 * Avoid rescheduling compactions when no compaction was executed 
   (CASSANDRA-3484)
 * fix handling of the chunk_length_kb compression options (CASSANDRA-3492)
Merged from 0.8:
 * fix updating CF row_cache_provider (CASSANDRA-3414)
 * CFMetaData.convertToThrift method to set RowCacheProvider (CASSANDRA-3405)
 * acquire compactionlock during truncate (CASSANDRA-3399)
 * fix displaying cfdef entries for super columnfamilies (CASSANDRA-3415)
 * Make counter shard merging thread safe (CASSANDRA-3178)
 * Revert CASSANDRA-2855
 * Fix bug preventing the use of efficient cross-DC writes (CASSANDRA-3472)
 * `describe ring` command for CLI (CASSANDRA-3220)
 * (Hadoop) skip empty rows when entire row is requested, redux (CASSANDRA-2855)


1.0.2
 * "defragment" rows for name-based queries under STCS (CASSANDRA-2503)
 * Add timing information to cassandra-cli GET/SET/LIST queries (CASSANDRA-3326)
 * Only create one CompressionMetadata object per sstable (CASSANDRA-3427)
 * cleanup usage of StorageService.setMode() (CASSANDRA-3388)
 * Avoid large array allocation for compressed chunk offsets (CASSANDRA-3432)
 * fix DecimalType bytebuffer marshalling (CASSANDRA-3421)
 * fix bug that caused first column in per row indexes to be ignored 
   (CASSANDRA-3441)
 * add JMX call to clean (failed) repair sessions (CASSANDRA-3316)
 * fix sstableloader reference acquisition bug (CASSANDRA-3438)
 * fix estimated row size regression (CASSANDRA-3451)
 * make sure we don't return more columns than asked (CASSANDRA-3303, 3395)
Merged from 0.8:
 * acquire compactionlock during truncate (CASSANDRA-3399)
 * fix displaying cfdef entries for super columnfamilies (CASSANDRA-3415)


1.0.1
 * acquire references during index build to prevent delete problems
   on Windows (CASSANDRA-3314)
 * describe_ring should include datacenter/topology information (CASSANDRA-2882)
 * Thrift sockets are not properly buffered (CASSANDRA-3261)
 * performance improvement for bytebufferutil compare function (CASSANDRA-3286)
 * add system.versions ColumnFamily (CASSANDRA-3140)
 * reduce network copies (CASSANDRA-3333, 3373)
 * limit nodetool to 32MB of heap (CASSANDRA-3124)
 * (CQL) update parser to accept "timestamp" instead of "date" (CASSANDRA-3149)
 * Fix CLI `show schema` to include "compression_options" (CASSANDRA-3368)
 * Snapshot to include manifest under LeveledCompactionStrategy (CASSANDRA-3359)
 * (CQL) SELECT query should allow CF name to be qualified by keyspace (CASSANDRA-3130)
 * (CQL) Fix internal application error specifying 'using consistency ...'
   in lower case (CASSANDRA-3366)
 * fix Deflate compression when compression actually makes the data bigger
   (CASSANDRA-3370)
 * optimize UUIDGen to avoid lock contention on InetAddress.getLocalHost 
   (CASSANDRA-3387)
 * tolerate index being dropped mid-mutation (CASSANDRA-3334, 3313)
 * CompactionManager is now responsible for checking for new candidates
   post-task execution, enabling more consistent leveled compaction 
   (CASSANDRA-3391)
 * Cache HSHA threads (CASSANDRA-3372)
 * use CF/KS names as snapshot prefix for drop + truncate operations
   (CASSANDRA-2997)
 * Break bloom filters up to avoid heap fragmentation (CASSANDRA-2466)
 * fix cassandra hanging on jsvc stop (CASSANDRA-3302)
 * Avoid leveled compaction getting blocked on errors (CASSANDRA-3408)
 * Make reloading the compaction strategy safe (CASSANDRA-3409)
 * ignore 0.8 hints even if compaction begins before we try to purge
   them (CASSANDRA-3385)
 * remove procrun (bin\daemon) from Cassandra source tree and 
   artifacts (CASSANDRA-3331)
 * make cassandra compile under JDK7 (CASSANDRA-3275)
 * remove dependency of clientutil.jar to FBUtilities (CASSANDRA-3299)
 * avoid truncation errors by using long math on long values (CASSANDRA-3364)
 * avoid clock drift on some Windows machine (CASSANDRA-3375)
 * display cache provider in cli 'describe keyspace' command (CASSANDRA-3384)
 * fix incomplete topology information in describe_ring (CASSANDRA-3403)
 * expire dead gossip states based on time (CASSANDRA-2961)
 * improve CompactionTask extensibility (CASSANDRA-3330)
 * Allow one leveled compaction task to kick off another (CASSANDRA-3363)
 * allow encryption only between datacenters (CASSANDRA-2802)
Merged from 0.8:
 * fix truncate allowing data to be replayed post-restart (CASSANDRA-3297)
 * make iwriter final in IndexWriter to avoid NPE (CASSANDRA-2863)
 * (CQL) update grammar to require key clause in DELETE statement
   (CASSANDRA-3349)
 * (CQL) allow numeric keyspace names in USE statement (CASSANDRA-3350)
 * (Hadoop) skip empty rows when slicing the entire row (CASSANDRA-2855)
 * Fix handling of tombstone by SSTableExport/Import (CASSANDRA-3357)
 * fix ColumnIndexer to use long offsets (CASSANDRA-3358)
 * Improved CLI exceptions (CASSANDRA-3312)
 * Fix handling of tombstone by SSTableExport/Import (CASSANDRA-3357)
 * Only count compaction as active (for throttling) when they have
   successfully acquired the compaction lock (CASSANDRA-3344)
 * Display CLI version string on startup (CASSANDRA-3196)
 * (Hadoop) make CFIF try rpc_address or fallback to listen_address
   (CASSANDRA-3214)
 * (Hadoop) accept comma delimited lists of initial thrift connections
   (CASSANDRA-3185)
 * ColumnFamily min_compaction_threshold should be >= 2 (CASSANDRA-3342)
 * (Pig) add 0.8+ types and key validation type in schema (CASSANDRA-3280)
 * Fix completely removing column metadata using CLI (CASSANDRA-3126)
 * CLI `describe cluster;` output should be on separate lines for separate versions
   (CASSANDRA-3170)
 * fix changing durable_writes keyspace option during CF creation
   (CASSANDRA-3292)
 * avoid locking on update when no indexes are involved (CASSANDRA-3386)
 * fix assertionError during repair with ordered partitioners (CASSANDRA-3369)
 * correctly serialize key_validation_class for avro (CASSANDRA-3391)
 * don't expire counter tombstone after streaming (CASSANDRA-3394)
 * prevent nodes that failed to join from hanging around forever 
   (CASSANDRA-3351)
 * remove incorrect optimization from slice read path (CASSANDRA-3390)
 * Fix race in AntiEntropyService (CASSANDRA-3400)


1.0.0-final
 * close scrubbed sstable fd before deleting it (CASSANDRA-3318)
 * fix bug preventing obsolete commitlog segments from being removed
   (CASSANDRA-3269)
 * tolerate whitespace in seed CDL (CASSANDRA-3263)
 * Change default heap thresholds to max(min(1/2 ram, 1G), min(1/4 ram, 8GB))
   (CASSANDRA-3295)
 * Fix broken CompressedRandomAccessReaderTest (CASSANDRA-3298)
 * (CQL) fix type information returned for wildcard queries (CASSANDRA-3311)
 * add estimated tasks to LeveledCompactionStrategy (CASSANDRA-3322)
 * avoid including compaction cache-warming in keycache stats (CASSANDRA-3325)
 * run compaction and hinted handoff threads at MIN_PRIORITY (CASSANDRA-3308)
 * default hsha thrift server to cpu core count in rpc pool (CASSANDRA-3329)
 * add bin\daemon to binary tarball for Windows service (CASSANDRA-3331)
 * Fix places where uncompressed size of sstables was use in place of the
   compressed one (CASSANDRA-3338)
 * Fix hsha thrift server (CASSANDRA-3346)
 * Make sure repair only stream needed sstables (CASSANDRA-3345)


1.0.0-rc2
 * Log a meaningful warning when a node receives a message for a repair session
   that doesn't exist anymore (CASSANDRA-3256)
 * test for NUMA policy support as well as numactl presence (CASSANDRA-3245)
 * Fix FD leak when internode encryption is enabled (CASSANDRA-3257)
 * Remove incorrect assertion in mergeIterator (CASSANDRA-3260)
 * FBUtilities.hexToBytes(String) to throw NumberFormatException when string
   contains non-hex characters (CASSANDRA-3231)
 * Keep SimpleSnitch proximity ordering unchanged from what the Strategy
   generates, as intended (CASSANDRA-3262)
 * remove Scrub from compactionstats when finished (CASSANDRA-3255)
 * fix counter entry in jdbc TypesMap (CASSANDRA-3268)
 * fix full queue scenario for ParallelCompactionIterator (CASSANDRA-3270)
 * fix bootstrap process (CASSANDRA-3285)
 * don't try delivering hints if when there isn't any (CASSANDRA-3176)
 * CLI documentation change for ColumnFamily `compression_options` (CASSANDRA-3282)
 * ignore any CF ids sent by client for adding CF/KS (CASSANDRA-3288)
 * remove obsolete hints on first startup (CASSANDRA-3291)
 * use correct ISortedColumns for time-optimized reads (CASSANDRA-3289)
 * Evict gossip state immediately when a token is taken over by a new IP 
   (CASSANDRA-3259)


1.0.0-rc1
 * Update CQL to generate microsecond timestamps by default (CASSANDRA-3227)
 * Fix counting CFMetadata towards Memtable liveRatio (CASSANDRA-3023)
 * Kill server on wrapped OOME such as from FileChannel.map (CASSANDRA-3201)
 * remove unnecessary copy when adding to row cache (CASSANDRA-3223)
 * Log message when a full repair operation completes (CASSANDRA-3207)
 * Fix streamOutSession keeping sstables references forever if the remote end
   dies (CASSANDRA-3216)
 * Remove dynamic_snitch boolean from example configuration (defaulting to 
   true) and set default badness threshold to 0.1 (CASSANDRA-3229)
 * Base choice of random or "balanced" token on bootstrap on whether
   schema definitions were found (CASSANDRA-3219)
 * Fixes for LeveledCompactionStrategy score computation, prioritization,
   scheduling, and performance (CASSANDRA-3224, 3234)
 * parallelize sstable open at server startup (CASSANDRA-2988)
 * fix handling of exceptions writing to OutboundTcpConnection (CASSANDRA-3235)
 * Allow using quotes in "USE <keyspace>;" CLI command (CASSANDRA-3208)
 * Don't allow any cache loading exceptions to halt startup (CASSANDRA-3218)
 * Fix sstableloader --ignores option (CASSANDRA-3247)
 * File descriptor limit increased in packaging (CASSANDRA-3206)
 * Fix deadlock in commit log during flush (CASSANDRA-3253) 


1.0.0-beta1
 * removed binarymemtable (CASSANDRA-2692)
 * add commitlog_total_space_in_mb to prevent fragmented logs (CASSANDRA-2427)
 * removed commitlog_rotation_threshold_in_mb configuration (CASSANDRA-2771)
 * make AbstractBounds.normalize de-overlapp overlapping ranges (CASSANDRA-2641)
 * replace CollatingIterator, ReducingIterator with MergeIterator 
   (CASSANDRA-2062)
 * Fixed the ability to set compaction strategy in cli using create column 
   family command (CASSANDRA-2778)
 * clean up tmp files after failed compaction (CASSANDRA-2468)
 * restrict repair streaming to specific columnfamilies (CASSANDRA-2280)
 * don't bother persisting columns shadowed by a row tombstone (CASSANDRA-2589)
 * reset CF and SC deletion times after gc_grace (CASSANDRA-2317)
 * optimize away seek when compacting wide rows (CASSANDRA-2879)
 * single-pass streaming (CASSANDRA-2677, 2906, 2916, 3003)
 * use reference counting for deleting sstables instead of relying on GC
   (CASSANDRA-2521, 3179)
 * store hints as serialized mutations instead of pointers to data row
   (CASSANDRA-2045)
 * store hints in the coordinator node instead of in the closest replica 
   (CASSANDRA-2914)
 * add row_cache_keys_to_save CF option (CASSANDRA-1966)
 * check column family validity in nodetool repair (CASSANDRA-2933)
 * use lazy initialization instead of class initialization in NodeId
   (CASSANDRA-2953)
 * add paging to get_count (CASSANDRA-2894)
 * fix "short reads" in [multi]get (CASSANDRA-2643, 3157, 3192)
 * add optional compression for sstables (CASSANDRA-47, 2994, 3001, 3128)
 * add scheduler JMX metrics (CASSANDRA-2962)
 * add block level checksum for compressed data (CASSANDRA-1717)
 * make column family backed column map pluggable and introduce unsynchronized
   ArrayList backed one to speedup reads (CASSANDRA-2843, 3165, 3205)
 * refactoring of the secondary index api (CASSANDRA-2982)
 * make CL > ONE reads wait for digest reconciliation before returning
   (CASSANDRA-2494)
 * fix missing logging for some exceptions (CASSANDRA-2061)
 * refactor and optimize ColumnFamilyStore.files(...) and Descriptor.fromFilename(String)
   and few other places responsible for work with SSTable files (CASSANDRA-3040)
 * Stop reading from sstables once we know we have the most recent columns,
   for query-by-name requests (CASSANDRA-2498)
 * Add query-by-column mode to stress.java (CASSANDRA-3064)
 * Add "install" command to cassandra.bat (CASSANDRA-292)
 * clean up KSMetadata, CFMetadata from unnecessary
   Thrift<->Avro conversion methods (CASSANDRA-3032)
 * Add timeouts to client request schedulers (CASSANDRA-3079, 3096)
 * Cli to use hashes rather than array of hashes for strategy options (CASSANDRA-3081)
 * LeveledCompactionStrategy (CASSANDRA-1608, 3085, 3110, 3087, 3145, 3154, 3182)
 * Improvements of the CLI `describe` command (CASSANDRA-2630)
 * reduce window where dropped CF sstables may not be deleted (CASSANDRA-2942)
 * Expose gossip/FD info to JMX (CASSANDRA-2806)
 * Fix streaming over SSL when compressed SSTable involved (CASSANDRA-3051)
 * Add support for pluggable secondary index implementations (CASSANDRA-3078)
 * remove compaction_thread_priority setting (CASSANDRA-3104)
 * generate hints for replicas that timeout, not just replicas that are known
   to be down before starting (CASSANDRA-2034)
 * Add throttling for internode streaming (CASSANDRA-3080)
 * make the repair of a range repair all replica (CASSANDRA-2610, 3194)
 * expose the ability to repair the first range (as returned by the
   partitioner) of a node (CASSANDRA-2606)
 * Streams Compression (CASSANDRA-3015)
 * add ability to use multiple threads during a single compaction
   (CASSANDRA-2901)
 * make AbstractBounds.normalize support overlapping ranges (CASSANDRA-2641)
 * fix of the CQL count() behavior (CASSANDRA-3068)
 * use TreeMap backed column families for the SSTable simple writers
   (CASSANDRA-3148)
 * fix inconsistency of the CLI syntax when {} should be used instead of [{}]
   (CASSANDRA-3119)
 * rename CQL type names to match expected SQL behavior (CASSANDRA-3149, 3031)
 * Arena-based allocation for memtables (CASSANDRA-2252, 3162, 3163, 3168)
 * Default RR chance to 0.1 (CASSANDRA-3169)
 * Add RowLevel support to secondary index API (CASSANDRA-3147)
 * Make SerializingCacheProvider the default if JNA is available (CASSANDRA-3183)
 * Fix backwards compatibilty for CQL memtable properties (CASSANDRA-3190)
 * Add five-minute delay before starting compactions on a restarted server
   (CASSANDRA-3181)
 * Reduce copies done for intra-host messages (CASSANDRA-1788, 3144)
 * support of compaction strategy option for stress.java (CASSANDRA-3204)
 * make memtable throughput and column count thresholds no-ops (CASSANDRA-2449)
 * Return schema information along with the resultSet in CQL (CASSANDRA-2734)
 * Add new DecimalType (CASSANDRA-2883)
 * Fix assertion error in RowRepairResolver (CASSANDRA-3156)
 * Reduce unnecessary high buffer sizes (CASSANDRA-3171)
 * Pluggable compaction strategy (CASSANDRA-1610)
 * Add new broadcast_address config option (CASSANDRA-2491)


0.8.7
 * Kill server on wrapped OOME such as from FileChannel.map (CASSANDRA-3201)
 * Allow using quotes in "USE <keyspace>;" CLI command (CASSANDRA-3208)
 * Log message when a full repair operation completes (CASSANDRA-3207)
 * Don't allow any cache loading exceptions to halt startup (CASSANDRA-3218)
 * Fix sstableloader --ignores option (CASSANDRA-3247)
 * File descriptor limit increased in packaging (CASSANDRA-3206)
 * Log a meaningfull warning when a node receive a message for a repair session
   that doesn't exist anymore (CASSANDRA-3256)
 * Fix FD leak when internode encryption is enabled (CASSANDRA-3257)
 * FBUtilities.hexToBytes(String) to throw NumberFormatException when string
   contains non-hex characters (CASSANDRA-3231)
 * Keep SimpleSnitch proximity ordering unchanged from what the Strategy
   generates, as intended (CASSANDRA-3262)
 * remove Scrub from compactionstats when finished (CASSANDRA-3255)
 * Fix tool .bat files when CASSANDRA_HOME contains spaces (CASSANDRA-3258)
 * Force flush of status table when removing/updating token (CASSANDRA-3243)
 * Evict gossip state immediately when a token is taken over by a new IP (CASSANDRA-3259)
 * Fix bug where the failure detector can take too long to mark a host
   down (CASSANDRA-3273)
 * (Hadoop) allow wrapping ranges in queries (CASSANDRA-3137)
 * (Hadoop) check all interfaces for a match with split location
   before falling back to random replica (CASSANDRA-3211)
 * (Hadoop) Make Pig storage handle implements LoadMetadata (CASSANDRA-2777)
 * (Hadoop) Fix exception during PIG 'dump' (CASSANDRA-2810)
 * Fix stress COUNTER_GET option (CASSANDRA-3301)
 * Fix missing fields in CLI `show schema` output (CASSANDRA-3304)
 * Nodetool no longer leaks threads and closes JMX connections (CASSANDRA-3309)
 * fix truncate allowing data to be replayed post-restart (CASSANDRA-3297)
 * Move SimpleAuthority and SimpleAuthenticator to examples (CASSANDRA-2922)
 * Fix handling of tombstone by SSTableExport/Import (CASSANDRA-3357)
 * Fix transposition in cfHistograms (CASSANDRA-3222)
 * Allow using number as DC name when creating keyspace in CQL (CASSANDRA-3239)
 * Force flush of system table after updating/removing a token (CASSANDRA-3243)


0.8.6
 * revert CASSANDRA-2388
 * change TokenRange.endpoints back to listen/broadcast address to match
   pre-1777 behavior, and add TokenRange.rpc_endpoints instead (CASSANDRA-3187)
 * avoid trying to watch cassandra-topology.properties when loaded from jar
   (CASSANDRA-3138)
 * prevent users from creating keyspaces with LocalStrategy replication
   (CASSANDRA-3139)
 * fix CLI `show schema;` to output correct keyspace definition statement
   (CASSANDRA-3129)
 * CustomTThreadPoolServer to log TTransportException at DEBUG level
   (CASSANDRA-3142)
 * allow topology sort to work with non-unique rack names between 
   datacenters (CASSANDRA-3152)
 * Improve caching of same-version Messages on digest and repair paths
   (CASSANDRA-3158)
 * Randomize choice of first replica for counter increment (CASSANDRA-2890)
 * Fix using read_repair_chance instead of merge_shard_change (CASSANDRA-3202)
 * Avoid streaming data to nodes that already have it, on move as well as
   decommission (CASSANDRA-3041)
 * Fix divide by zero error in GCInspector (CASSANDRA-3164)
 * allow quoting of the ColumnFamily name in CLI `create column family`
   statement (CASSANDRA-3195)
 * Fix rolling upgrade from 0.7 to 0.8 problem (CASSANDRA-3166)
 * Accomodate missing encryption_options in IncomingTcpConnection.stream
   (CASSANDRA-3212)


0.8.5
 * fix NPE when encryption_options is unspecified (CASSANDRA-3007)
 * include column name in validation failure exceptions (CASSANDRA-2849)
 * make sure truncate clears out the commitlog so replay won't re-
   populate with truncated data (CASSANDRA-2950)
 * fix NPE when debug logging is enabled and dropped CF is present
   in a commitlog segment (CASSANDRA-3021)
 * fix cassandra.bat when CASSANDRA_HOME contains spaces (CASSANDRA-2952)
 * fix to SSTableSimpleUnsortedWriter bufferSize calculation (CASSANDRA-3027)
 * make cleanup and normal compaction able to skip empty rows
   (rows containing nothing but expired tombstones) (CASSANDRA-3039)
 * work around native memory leak in com.sun.management.GarbageCollectorMXBean
   (CASSANDRA-2868)
 * validate that column names in column_metadata are not equal to key_alias
   on create/update of the ColumnFamily and CQL 'ALTER' statement (CASSANDRA-3036)
 * return an InvalidRequestException if an indexed column is assigned
   a value larger than 64KB (CASSANDRA-3057)
 * fix of numeric-only and string column names handling in CLI "drop index" 
   (CASSANDRA-3054)
 * prune index scan resultset back to original request for lazy
   resultset expansion case (CASSANDRA-2964)
 * (Hadoop) fail jobs when Cassandra node has failed but TaskTracker
   has not (CASSANDRA-2388)
 * fix dynamic snitch ignoring nodes when read_repair_chance is zero
   (CASSANDRA-2662)
 * avoid retaining references to dropped CFS objects in 
   CompactionManager.estimatedCompactions (CASSANDRA-2708)
 * expose rpc timeouts per host in MessagingServiceMBean (CASSANDRA-2941)
 * avoid including cwd in classpath for deb and rpm packages (CASSANDRA-2881)
 * remove gossip state when a new IP takes over a token (CASSANDRA-3071)
 * allow sstable2json to work on index sstable files (CASSANDRA-3059)
 * always hint counters (CASSANDRA-3099)
 * fix log4j initialization in EmbeddedCassandraService (CASSANDRA-2857)
 * remove gossip state when a new IP takes over a token (CASSANDRA-3071)
 * work around native memory leak in com.sun.management.GarbageCollectorMXBean
    (CASSANDRA-2868)
 * fix UnavailableException with writes at CL.EACH_QUORM (CASSANDRA-3084)
 * fix parsing of the Keyspace and ColumnFamily names in numeric
   and string representations in CLI (CASSANDRA-3075)
 * fix corner cases in Range.differenceToFetch (CASSANDRA-3084)
 * fix ip address String representation in the ring cache (CASSANDRA-3044)
 * fix ring cache compatibility when mixing pre-0.8.4 nodes with post-
   in the same cluster (CASSANDRA-3023)
 * make repair report failure when a node participating dies (instead of
   hanging forever) (CASSANDRA-2433)
 * fix handling of the empty byte buffer by ReversedType (CASSANDRA-3111)
 * Add validation that Keyspace names are case-insensitively unique (CASSANDRA-3066)
 * catch invalid key_validation_class before instantiating UpdateColumnFamily (CASSANDRA-3102)
 * make Range and Bounds objects client-safe (CASSANDRA-3108)
 * optionally skip log4j configuration (CASSANDRA-3061)
 * bundle sstableloader with the debian package (CASSANDRA-3113)
 * don't try to build secondary indexes when there is none (CASSANDRA-3123)
 * improve SSTableSimpleUnsortedWriter speed for large rows (CASSANDRA-3122)
 * handle keyspace arguments correctly in nodetool snapshot (CASSANDRA-3038)
 * Fix SSTableImportTest on windows (CASSANDRA-3043)
 * expose compactionThroughputMbPerSec through JMX (CASSANDRA-3117)
 * log keyspace and CF of large rows being compacted


0.8.4
 * change TokenRing.endpoints to be a list of rpc addresses instead of 
   listen/broadcast addresses (CASSANDRA-1777)
 * include files-to-be-streamed in StreamInSession.getSources (CASSANDRA-2972)
 * use JAVA env var in cassandra-env.sh (CASSANDRA-2785, 2992)
 * avoid doing read for no-op replicate-on-write at CL=1 (CASSANDRA-2892)
 * refuse counter write for CL.ANY (CASSANDRA-2990)
 * switch back to only logging recent dropped messages (CASSANDRA-3004)
 * always deserialize RowMutation for counters (CASSANDRA-3006)
 * ignore saved replication_factor strategy_option for NTS (CASSANDRA-3011)
 * make sure pre-truncate CL segments are discarded (CASSANDRA-2950)


0.8.3
 * add ability to drop local reads/writes that are going to timeout
   (CASSANDRA-2943)
 * revamp token removal process, keep gossip states for 3 days (CASSANDRA-2496)
 * don't accept extra args for 0-arg nodetool commands (CASSANDRA-2740)
 * log unavailableexception details at debug level (CASSANDRA-2856)
 * expose data_dir though jmx (CASSANDRA-2770)
 * don't include tmp files as sstable when create cfs (CASSANDRA-2929)
 * log Java classpath on startup (CASSANDRA-2895)
 * keep gossipped version in sync with actual on migration coordinator 
   (CASSANDRA-2946)
 * use lazy initialization instead of class initialization in NodeId
   (CASSANDRA-2953)
 * check column family validity in nodetool repair (CASSANDRA-2933)
 * speedup bytes to hex conversions dramatically (CASSANDRA-2850)
 * Flush memtables on shutdown when durable writes are disabled 
   (CASSANDRA-2958)
 * improved POSIX compatibility of start scripts (CASsANDRA-2965)
 * add counter support to Hadoop InputFormat (CASSANDRA-2981)
 * fix bug where dirty commitlog segments were removed (and avoid keeping 
   segments with no post-flush activity permanently dirty) (CASSANDRA-2829)
 * fix throwing exception with batch mutation of counter super columns
   (CASSANDRA-2949)
 * ignore system tables during repair (CASSANDRA-2979)
 * throw exception when NTS is given replication_factor as an option
   (CASSANDRA-2960)
 * fix assertion error during compaction of counter CFs (CASSANDRA-2968)
 * avoid trying to create index names, when no index exists (CASSANDRA-2867)
 * don't sample the system table when choosing a bootstrap token
   (CASSANDRA-2825)
 * gossiper notifies of local state changes (CASSANDRA-2948)
 * add asynchronous and half-sync/half-async (hsha) thrift servers 
   (CASSANDRA-1405)
 * fix potential use of free'd native memory in SerializingCache 
   (CASSANDRA-2951)
 * prune index scan resultset back to original request for lazy
   resultset expansion case (CASSANDRA-2964)
 * (Hadoop) fail jobs when Cassandra node has failed but TaskTracker
    has not (CASSANDRA-2388)


0.8.2
 * CQL: 
   - include only one row per unique key for IN queries (CASSANDRA-2717)
   - respect client timestamp on full row deletions (CASSANDRA-2912)
 * improve thread-safety in StreamOutSession (CASSANDRA-2792)
 * allow deleting a row and updating indexed columns in it in the
   same mutation (CASSANDRA-2773)
 * Expose number of threads blocked on submitting memtable to flush
   in JMX (CASSANDRA-2817)
 * add ability to return "endpoints" to nodetool (CASSANDRA-2776)
 * Add support for multiple (comma-delimited) coordinator addresses
   to ColumnFamilyInputFormat (CASSANDRA-2807)
 * fix potential NPE while scheduling read repair for range slice
   (CASSANDRA-2823)
 * Fix race in SystemTable.getCurrentLocalNodeId (CASSANDRA-2824)
 * Correctly set default for replicate_on_write (CASSANDRA-2835)
 * improve nodetool compactionstats formatting (CASSANDRA-2844)
 * fix index-building status display (CASSANDRA-2853)
 * fix CLI perpetuating obsolete KsDef.replication_factor (CASSANDRA-2846)
 * improve cli treatment of multiline comments (CASSANDRA-2852)
 * handle row tombstones correctly in EchoedRow (CASSANDRA-2786)
 * add MessagingService.get[Recently]DroppedMessages and
   StorageService.getExceptionCount (CASSANDRA-2804)
 * fix possibility of spurious UnavailableException for LOCAL_QUORUM
   reads with dynamic snitch + read repair disabled (CASSANDRA-2870)
 * add ant-optional as dependence for the debian package (CASSANDRA-2164)
 * add option to specify limit for get_slice in the CLI (CASSANDRA-2646)
 * decrease HH page size (CASSANDRA-2832)
 * reset cli keyspace after dropping the current one (CASSANDRA-2763)
 * add KeyRange option to Hadoop inputformat (CASSANDRA-1125)
 * fix protocol versioning (CASSANDRA-2818, 2860)
 * support spaces in path to log4j configuration (CASSANDRA-2383)
 * avoid including inferred types in CF update (CASSANDRA-2809)
 * fix JMX bulkload call (CASSANDRA-2908)
 * fix updating KS with durable_writes=false (CASSANDRA-2907)
 * add simplified facade to SSTableWriter for bulk loading use
   (CASSANDRA-2911)
 * fix re-using index CF sstable names after drop/recreate (CASSANDRA-2872)
 * prepend CF to default index names (CASSANDRA-2903)
 * fix hint replay (CASSANDRA-2928)
 * Properly synchronize repair's merkle tree computation (CASSANDRA-2816)


0.8.1
 * CQL:
   - support for insert, delete in BATCH (CASSANDRA-2537)
   - support for IN to SELECT, UPDATE (CASSANDRA-2553)
   - timestamp support for INSERT, UPDATE, and BATCH (CASSANDRA-2555)
   - TTL support (CASSANDRA-2476)
   - counter support (CASSANDRA-2473)
   - ALTER COLUMNFAMILY (CASSANDRA-1709)
   - DROP INDEX (CASSANDRA-2617)
   - add SCHEMA/TABLE as aliases for KS/CF (CASSANDRA-2743)
   - server handles wait-for-schema-agreement (CASSANDRA-2756)
   - key alias support (CASSANDRA-2480)
 * add support for comparator parameters and a generic ReverseType
   (CASSANDRA-2355)
 * add CompositeType and DynamicCompositeType (CASSANDRA-2231)
 * optimize batches containing multiple updates to the same row
   (CASSANDRA-2583)
 * adjust hinted handoff page size to avoid OOM with large columns 
   (CASSANDRA-2652)
 * mark BRAF buffer invalid post-flush so we don't re-flush partial
   buffers again, especially on CL writes (CASSANDRA-2660)
 * add DROP INDEX support to CLI (CASSANDRA-2616)
 * don't perform HH to client-mode [storageproxy] nodes (CASSANDRA-2668)
 * Improve forceDeserialize/getCompactedRow encapsulation (CASSANDRA-2659)
 * Don't write CounterUpdateColumn to disk in tests (CASSANDRA-2650)
 * Add sstable bulk loading utility (CASSANDRA-1278)
 * avoid replaying hints to dropped columnfamilies (CASSANDRA-2685)
 * add placeholders for missing rows in range query pseudo-RR (CASSANDRA-2680)
 * remove no-op HHOM.renameHints (CASSANDRA-2693)
 * clone super columns to avoid modifying them during flush (CASSANDRA-2675)
 * allow writes to bypass the commitlog for certain keyspaces (CASSANDRA-2683)
 * avoid NPE when bypassing commitlog during memtable flush (CASSANDRA-2781)
 * Added support for making bootstrap retry if nodes flap (CASSANDRA-2644)
 * Added statusthrift to nodetool to report if thrift server is running (CASSANDRA-2722)
 * Fixed rows being cached if they do not exist (CASSANDRA-2723)
 * Support passing tableName and cfName to RowCacheProviders (CASSANDRA-2702)
 * close scrub file handles (CASSANDRA-2669)
 * throttle migration replay (CASSANDRA-2714)
 * optimize column serializer creation (CASSANDRA-2716)
 * Added support for making bootstrap retry if nodes flap (CASSANDRA-2644)
 * Added statusthrift to nodetool to report if thrift server is running
   (CASSANDRA-2722)
 * Fixed rows being cached if they do not exist (CASSANDRA-2723)
 * fix truncate/compaction race (CASSANDRA-2673)
 * workaround large resultsets causing large allocation retention
   by nio sockets (CASSANDRA-2654)
 * fix nodetool ring use with Ec2Snitch (CASSANDRA-2733)
 * fix removing columns and subcolumns that are supressed by a row or
   supercolumn tombstone during replica resolution (CASSANDRA-2590)
 * support sstable2json against snapshot sstables (CASSANDRA-2386)
 * remove active-pull schema requests (CASSANDRA-2715)
 * avoid marking entire list of sstables as actively being compacted
   in multithreaded compaction (CASSANDRA-2765)
 * seek back after deserializing a row to update cache with (CASSANDRA-2752)
 * avoid skipping rows in scrub for counter column family (CASSANDRA-2759)
 * fix ConcurrentModificationException in repair when dealing with 0.7 node
   (CASSANDRA-2767)
 * use threadsafe collections for StreamInSession (CASSANDRA-2766)
 * avoid infinite loop when creating merkle tree (CASSANDRA-2758)
 * avoids unmarking compacting sstable prematurely in cleanup (CASSANDRA-2769)
 * fix NPE when the commit log is bypassed (CASSANDRA-2718)
 * don't throw an exception in SS.isRPCServerRunning (CASSANDRA-2721)
 * make stress.jar executable (CASSANDRA-2744)
 * add daemon mode to java stress (CASSANDRA-2267)
 * expose the DC and rack of a node through JMX and nodetool ring (CASSANDRA-2531)
 * fix cache mbean getSize (CASSANDRA-2781)
 * Add Date, Float, Double, and Boolean types (CASSANDRA-2530)
 * Add startup flag to renew counter node id (CASSANDRA-2788)
 * add jamm agent to cassandra.bat (CASSANDRA-2787)
 * fix repair hanging if a neighbor has nothing to send (CASSANDRA-2797)
 * purge tombstone even if row is in only one sstable (CASSANDRA-2801)
 * Fix wrong purge of deleted cf during compaction (CASSANDRA-2786)
 * fix race that could result in Hadoop writer failing to throw an
   exception encountered after close() (CASSANDRA-2755)
 * fix scan wrongly throwing assertion error (CASSANDRA-2653)
 * Always use even distribution for merkle tree with RandomPartitionner
   (CASSANDRA-2841)
 * fix describeOwnership for OPP (CASSANDRA-2800)
 * ensure that string tokens do not contain commas (CASSANDRA-2762)


0.8.0-final
 * fix CQL grammar warning and cqlsh regression from CASSANDRA-2622
 * add ant generate-cql-html target (CASSANDRA-2526)
 * update CQL consistency levels (CASSANDRA-2566)
 * debian packaging fixes (CASSANDRA-2481, 2647)
 * fix UUIDType, IntegerType for direct buffers (CASSANDRA-2682, 2684)
 * switch to native Thrift for Hadoop map/reduce (CASSANDRA-2667)
 * fix StackOverflowError when building from eclipse (CASSANDRA-2687)
 * only provide replication_factor to strategy_options "help" for
   SimpleStrategy, OldNetworkTopologyStrategy (CASSANDRA-2678, 2713)
 * fix exception adding validators to non-string columns (CASSANDRA-2696)
 * avoid instantiating DatabaseDescriptor in JDBC (CASSANDRA-2694)
 * fix potential stack overflow during compaction (CASSANDRA-2626)
 * clone super columns to avoid modifying them during flush (CASSANDRA-2675)
 * reset underlying iterator in EchoedRow constructor (CASSANDRA-2653)


0.8.0-rc1
 * faster flushes and compaction from fixing excessively pessimistic 
   rebuffering in BRAF (CASSANDRA-2581)
 * fix returning null column values in the python cql driver (CASSANDRA-2593)
 * fix merkle tree splitting exiting early (CASSANDRA-2605)
 * snapshot_before_compaction directory name fix (CASSANDRA-2598)
 * Disable compaction throttling during bootstrap (CASSANDRA-2612) 
 * fix CQL treatment of > and < operators in range slices (CASSANDRA-2592)
 * fix potential double-application of counter updates on commitlog replay
   by moving replay position from header to sstable metadata (CASSANDRA-2419)
 * JDBC CQL driver exposes getColumn for access to timestamp
 * JDBC ResultSetMetadata properties added to AbstractType
 * r/m clustertool (CASSANDRA-2607)
 * add support for presenting row key as a column in CQL result sets 
   (CASSANDRA-2622)
 * Don't allow {LOCAL|EACH}_QUORUM unless strategy is NTS (CASSANDRA-2627)
 * validate keyspace strategy_options during CQL create (CASSANDRA-2624)
 * fix empty Result with secondary index when limit=1 (CASSANDRA-2628)
 * Fix regression where bootstrapping a node with no schema fails
   (CASSANDRA-2625)
 * Allow removing LocationInfo sstables (CASSANDRA-2632)
 * avoid attempting to replay mutations from dropped keyspaces (CASSANDRA-2631)
 * avoid using cached position of a key when GT is requested (CASSANDRA-2633)
 * fix counting bloom filter true positives (CASSANDRA-2637)
 * initialize local ep state prior to gossip startup if needed (CASSANDRA-2638)
 * fix counter increment lost after restart (CASSANDRA-2642)
 * add quote-escaping via backslash to CLI (CASSANDRA-2623)
 * fix pig example script (CASSANDRA-2487)
 * fix dynamic snitch race in adding latencies (CASSANDRA-2618)
 * Start/stop cassandra after more important services such as mdadm in
   debian packaging (CASSANDRA-2481)


0.8.0-beta2
 * fix NPE compacting index CFs (CASSANDRA-2528)
 * Remove checking all column families on startup for compaction candidates 
   (CASSANDRA-2444)
 * validate CQL create keyspace options (CASSANDRA-2525)
 * fix nodetool setcompactionthroughput (CASSANDRA-2550)
 * move	gossip heartbeat back to its own thread (CASSANDRA-2554)
 * validate cql TRUNCATE columnfamily before truncating (CASSANDRA-2570)
 * fix batch_mutate for mixed standard-counter mutations (CASSANDRA-2457)
 * disallow making schema changes to system keyspace (CASSANDRA-2563)
 * fix sending mutation messages multiple times (CASSANDRA-2557)
 * fix incorrect use of NBHM.size in ReadCallback that could cause
   reads to time out even when responses were received (CASSANDRA-2552)
 * trigger read repair correctly for LOCAL_QUORUM reads (CASSANDRA-2556)
 * Allow configuring the number of compaction thread (CASSANDRA-2558)
 * forceUserDefinedCompaction will attempt to compact what it is given
   even if the pessimistic estimate is that there is not enough disk space;
   automatic compactions will only compact 2 or more sstables (CASSANDRA-2575)
 * refuse to apply migrations with older timestamps than the current 
   schema (CASSANDRA-2536)
 * remove unframed Thrift transport option
 * include indexes in snapshots (CASSANDRA-2596)
 * improve ignoring of obsolete mutations in index maintenance (CASSANDRA-2401)
 * recognize attempt to drop just the index while leaving the column
   definition alone (CASSANDRA-2619)
  

0.8.0-beta1
 * remove Avro RPC support (CASSANDRA-926)
 * support for columns that act as incr/decr counters 
   (CASSANDRA-1072, 1937, 1944, 1936, 2101, 2093, 2288, 2105, 2384, 2236, 2342,
   2454)
 * CQL (CASSANDRA-1703, 1704, 1705, 1706, 1707, 1708, 1710, 1711, 1940, 
   2124, 2302, 2277, 2493)
 * avoid double RowMutation serialization on write path (CASSANDRA-1800)
 * make NetworkTopologyStrategy the default (CASSANDRA-1960)
 * configurable internode encryption (CASSANDRA-1567, 2152)
 * human readable column names in sstable2json output (CASSANDRA-1933)
 * change default JMX port to 7199 (CASSANDRA-2027)
 * backwards compatible internal messaging (CASSANDRA-1015)
 * atomic switch of memtables and sstables (CASSANDRA-2284)
 * add pluggable SeedProvider (CASSANDRA-1669)
 * Fix clustertool to not throw exception when calling get_endpoints (CASSANDRA-2437)
 * upgrade to thrift 0.6 (CASSANDRA-2412) 
 * repair works on a token range instead of full ring (CASSANDRA-2324)
 * purge tombstones from row cache (CASSANDRA-2305)
 * push replication_factor into strategy_options (CASSANDRA-1263)
 * give snapshots the same name on each node (CASSANDRA-1791)
 * remove "nodetool loadbalance" (CASSANDRA-2448)
 * multithreaded compaction (CASSANDRA-2191)
 * compaction throttling (CASSANDRA-2156)
 * add key type information and alias (CASSANDRA-2311, 2396)
 * cli no longer divides read_repair_chance by 100 (CASSANDRA-2458)
 * made CompactionInfo.getTaskType return an enum (CASSANDRA-2482)
 * add a server-wide cap on measured memtable memory usage and aggressively
   flush to keep under that threshold (CASSANDRA-2006)
 * add unified UUIDType (CASSANDRA-2233)
 * add off-heap row cache support (CASSANDRA-1969)


0.7.5
 * improvements/fixes to PIG driver (CASSANDRA-1618, CASSANDRA-2387,
   CASSANDRA-2465, CASSANDRA-2484)
 * validate index names (CASSANDRA-1761)
 * reduce contention on Table.flusherLock (CASSANDRA-1954)
 * try harder to detect failures during streaming, cleaning up temporary
   files more reliably (CASSANDRA-2088)
 * shut down server for OOM on a Thrift thread (CASSANDRA-2269)
 * fix tombstone handling in repair and sstable2json (CASSANDRA-2279)
 * preserve version when streaming data from old sstables (CASSANDRA-2283)
 * don't start repair if a neighboring node is marked as dead (CASSANDRA-2290)
 * purge tombstones from row cache (CASSANDRA-2305)
 * Avoid seeking when sstable2json exports the entire file (CASSANDRA-2318)
 * clear Built flag in system table when dropping an index (CASSANDRA-2320)
 * don't allow arbitrary argument for stress.java (CASSANDRA-2323)
 * validate values for index predicates in get_indexed_slice (CASSANDRA-2328)
 * queue secondary indexes for flush before the parent (CASSANDRA-2330)
 * allow job configuration to set the CL used in Hadoop jobs (CASSANDRA-2331)
 * add memtable_flush_queue_size defaulting to 4 (CASSANDRA-2333)
 * Allow overriding of initial_token, storage_port and rpc_port from system
   properties (CASSANDRA-2343)
 * fix comparator used for non-indexed secondary expressions in index scan
   (CASSANDRA-2347)
 * ensure size calculation and write phase of large-row compaction use
   the same threshold for TTL expiration (CASSANDRA-2349)
 * fix race when iterating CFs during add/drop (CASSANDRA-2350)
 * add ConsistencyLevel command to CLI (CASSANDRA-2354)
 * allow negative numbers in the cli (CASSANDRA-2358)
 * hard code serialVersionUID for tokens class (CASSANDRA-2361)
 * fix potential infinite loop in ByteBufferUtil.inputStream (CASSANDRA-2365)
 * fix encoding bugs in HintedHandoffManager, SystemTable when default
   charset is not UTF8 (CASSANDRA-2367)
 * avoids having removed node reappearing in Gossip (CASSANDRA-2371)
 * fix incorrect truncation of long to int when reading columns via block
   index (CASSANDRA-2376)
 * fix NPE during stream session (CASSANDRA-2377)
 * fix race condition that could leave orphaned data files when dropping CF or
   KS (CASSANDRA-2381)
 * fsync statistics component on write (CASSANDRA-2382)
 * fix duplicate results from CFS.scan (CASSANDRA-2406)
 * add IntegerType to CLI help (CASSANDRA-2414)
 * avoid caching token-only decoratedkeys (CASSANDRA-2416)
 * convert mmap assertion to if/throw so scrub can catch it (CASSANDRA-2417)
 * don't overwrite gc log (CASSANDR-2418)
 * invalidate row cache for streamed row to avoid inconsitencies
   (CASSANDRA-2420)
 * avoid copies in range/index scans (CASSANDRA-2425)
 * make sure we don't wipe data during cleanup if the node has not join
   the ring (CASSANDRA-2428)
 * Try harder to close files after compaction (CASSANDRA-2431)
 * re-set bootstrapped flag after move finishes (CASSANDRA-2435)
 * display validation_class in CLI 'describe keyspace' (CASSANDRA-2442)
 * make cleanup compactions cleanup the row cache (CASSANDRA-2451)
 * add column fields validation to scrub (CASSANDRA-2460)
 * use 64KB flush buffer instead of in_memory_compaction_limit (CASSANDRA-2463)
 * fix backslash substitutions in CLI (CASSANDRA-2492)
 * disable cache saving for system CFS (CASSANDRA-2502)
 * fixes for verifying destination availability under hinted conditions
   so UE can be thrown intead of timing out (CASSANDRA-2514)
 * fix update of validation class in column metadata (CASSANDRA-2512)
 * support LOCAL_QUORUM, EACH_QUORUM CLs outside of NTS (CASSANDRA-2516)
 * preserve version when streaming data from old sstables (CASSANDRA-2283)
 * fix backslash substitutions in CLI (CASSANDRA-2492)
 * count a row deletion as one operation towards memtable threshold 
   (CASSANDRA-2519)
 * support LOCAL_QUORUM, EACH_QUORUM CLs outside of NTS (CASSANDRA-2516)


0.7.4
 * add nodetool join command (CASSANDRA-2160)
 * fix secondary indexes on pre-existing or streamed data (CASSANDRA-2244)
 * initialize endpoint in gossiper earlier (CASSANDRA-2228)
 * add ability to write to Cassandra from Pig (CASSANDRA-1828)
 * add rpc_[min|max]_threads (CASSANDRA-2176)
 * add CL.TWO, CL.THREE (CASSANDRA-2013)
 * avoid exporting an un-requested row in sstable2json, when exporting 
   a key that does not exist (CASSANDRA-2168)
 * add incremental_backups option (CASSANDRA-1872)
 * add configurable row limit to Pig loadfunc (CASSANDRA-2276)
 * validate column values in batches as well as single-Column inserts
   (CASSANDRA-2259)
 * move sample schema from cassandra.yaml to schema-sample.txt,
   a cli scripts (CASSANDRA-2007)
 * avoid writing empty rows when scrubbing tombstoned rows (CASSANDRA-2296)
 * fix assertion error in range and index scans for CL < ALL
   (CASSANDRA-2282)
 * fix commitlog replay when flush position refers to data that didn't
   get synced before server died (CASSANDRA-2285)
 * fix fd leak in sstable2json with non-mmap'd i/o (CASSANDRA-2304)
 * reduce memory use during streaming of multiple sstables (CASSANDRA-2301)
 * purge tombstoned rows from cache after GCGraceSeconds (CASSANDRA-2305)
 * allow zero replicas in a NTS datacenter (CASSANDRA-1924)
 * make range queries respect snitch for local replicas (CASSANDRA-2286)
 * fix HH delivery when column index is larger than 2GB (CASSANDRA-2297)
 * make 2ary indexes use parent CF flush thresholds during initial build
   (CASSANDRA-2294)
 * update memtable_throughput to be a long (CASSANDRA-2158)


0.7.3
 * Keep endpoint state until aVeryLongTime (CASSANDRA-2115)
 * lower-latency read repair (CASSANDRA-2069)
 * add hinted_handoff_throttle_delay_in_ms option (CASSANDRA-2161)
 * fixes for cache save/load (CASSANDRA-2172, -2174)
 * Handle whole-row deletions in CFOutputFormat (CASSANDRA-2014)
 * Make memtable_flush_writers flush in parallel (CASSANDRA-2178)
 * Add compaction_preheat_key_cache option (CASSANDRA-2175)
 * refactor stress.py to have only one copy of the format string 
   used for creating row keys (CASSANDRA-2108)
 * validate index names for \w+ (CASSANDRA-2196)
 * Fix Cassandra cli to respect timeout if schema does not settle 
   (CASSANDRA-2187)
 * fix for compaction and cleanup writing old-format data into new-version 
   sstable (CASSANDRA-2211, -2216)
 * add nodetool scrub (CASSANDRA-2217, -2240)
 * fix sstable2json large-row pagination (CASSANDRA-2188)
 * fix EOFing on requests for the last bytes in a file (CASSANDRA-2213)
 * fix BufferedRandomAccessFile bugs (CASSANDRA-2218, -2241)
 * check for memtable flush_after_mins exceeded every 10s (CASSANDRA-2183)
 * fix cache saving on Windows (CASSANDRA-2207)
 * add validateSchemaAgreement call + synchronization to schema
   modification operations (CASSANDRA-2222)
 * fix for reversed slice queries on large rows (CASSANDRA-2212)
 * fat clients were writing local data (CASSANDRA-2223)
 * set DEFAULT_MEMTABLE_LIFETIME_IN_MINS to 24h
 * improve detection and cleanup of partially-written sstables 
   (CASSANDRA-2206)
 * fix supercolumn de/serialization when subcolumn comparator is different
   from supercolumn's (CASSANDRA-2104)
 * fix starting up on Windows when CASSANDRA_HOME contains whitespace
   (CASSANDRA-2237)
 * add [get|set][row|key]cacheSavePeriod to JMX (CASSANDRA-2100)
 * fix Hadoop ColumnFamilyOutputFormat dropping of mutations
   when batch fills up (CASSANDRA-2255)
 * move file deletions off of scheduledtasks executor (CASSANDRA-2253)


0.7.2
 * copy DecoratedKey.key when inserting into caches to avoid retaining
   a reference to the underlying buffer (CASSANDRA-2102)
 * format subcolumn names with subcomparator (CASSANDRA-2136)
 * fix column bloom filter deserialization (CASSANDRA-2165)


0.7.1
 * refactor MessageDigest creation code. (CASSANDRA-2107)
 * buffer network stack to avoid inefficient small TCP messages while avoiding
   the nagle/delayed ack problem (CASSANDRA-1896)
 * check log4j configuration for changes every 10s (CASSANDRA-1525, 1907)
 * more-efficient cross-DC replication (CASSANDRA-1530, -2051, -2138)
 * avoid polluting page cache with commitlog or sstable writes
   and seq scan operations (CASSANDRA-1470)
 * add RMI authentication options to nodetool (CASSANDRA-1921)
 * make snitches configurable at runtime (CASSANDRA-1374)
 * retry hadoop split requests on connection failure (CASSANDRA-1927)
 * implement describeOwnership for BOP, COPP (CASSANDRA-1928)
 * make read repair behave as expected for ConsistencyLevel > ONE
   (CASSANDRA-982, 2038)
 * distributed test harness (CASSANDRA-1859, 1964)
 * reduce flush lock contention (CASSANDRA-1930)
 * optimize supercolumn deserialization (CASSANDRA-1891)
 * fix CFMetaData.apply to only compare objects of the same class 
   (CASSANDRA-1962)
 * allow specifying specific SSTables to compact from JMX (CASSANDRA-1963)
 * fix race condition in MessagingService.targets (CASSANDRA-1959, 2094, 2081)
 * refuse to open sstables from a future version (CASSANDRA-1935)
 * zero-copy reads (CASSANDRA-1714)
 * fix copy bounds for word Text in wordcount demo (CASSANDRA-1993)
 * fixes for contrib/javautils (CASSANDRA-1979)
 * check more frequently for memtable expiration (CASSANDRA-2000)
 * fix writing SSTable column count statistics (CASSANDRA-1976)
 * fix streaming of multiple CFs during bootstrap (CASSANDRA-1992)
 * explicitly set JVM GC new generation size with -Xmn (CASSANDRA-1968)
 * add short options for CLI flags (CASSANDRA-1565)
 * make keyspace argument to "describe keyspace" in CLI optional
   when authenticated to keyspace already (CASSANDRA-2029)
 * added option to specify -Dcassandra.join_ring=false on startup
   to allow "warm spare" nodes or performing JMX maintenance before
   joining the ring (CASSANDRA-526)
 * log migrations at INFO (CASSANDRA-2028)
 * add CLI verbose option in file mode (CASSANDRA-2030)
 * add single-line "--" comments to CLI (CASSANDRA-2032)
 * message serialization tests (CASSANDRA-1923)
 * switch from ivy to maven-ant-tasks (CASSANDRA-2017)
 * CLI attempts to block for new schema to propagate (CASSANDRA-2044)
 * fix potential overflow in nodetool cfstats (CASSANDRA-2057)
 * add JVM shutdownhook to sync commitlog (CASSANDRA-1919)
 * allow nodes to be up without being part of  normal traffic (CASSANDRA-1951)
 * fix CLI "show keyspaces" with null options on NTS (CASSANDRA-2049)
 * fix possible ByteBuffer race conditions (CASSANDRA-2066)
 * reduce garbage generated by MessagingService to prevent load spikes
   (CASSANDRA-2058)
 * fix math in RandomPartitioner.describeOwnership (CASSANDRA-2071)
 * fix deletion of sstable non-data components (CASSANDRA-2059)
 * avoid blocking gossip while deleting handoff hints (CASSANDRA-2073)
 * ignore messages from newer versions, keep track of nodes in gossip 
   regardless of version (CASSANDRA-1970)
 * cache writing moved to CompactionManager to reduce i/o contention and
   updated to use non-cache-polluting writes (CASSANDRA-2053)
 * page through large rows when exporting to JSON (CASSANDRA-2041)
 * add flush_largest_memtables_at and reduce_cache_sizes_at options
   (CASSANDRA-2142)
 * add cli 'describe cluster' command (CASSANDRA-2127)
 * add cli support for setting username/password at 'connect' command 
   (CASSANDRA-2111)
 * add -D option to Stress.java to allow reading hosts from a file 
   (CASSANDRA-2149)
 * bound hints CF throughput between 32M and 256M (CASSANDRA-2148)
 * continue starting when invalid saved cache entries are encountered
   (CASSANDRA-2076)
 * add max_hint_window_in_ms option (CASSANDRA-1459)


0.7.0-final
 * fix offsets to ByteBuffer.get (CASSANDRA-1939)


0.7.0-rc4
 * fix cli crash after backgrounding (CASSANDRA-1875)
 * count timeouts in storageproxy latencies, and include latency 
   histograms in StorageProxyMBean (CASSANDRA-1893)
 * fix CLI get recognition of supercolumns (CASSANDRA-1899)
 * enable keepalive on intra-cluster sockets (CASSANDRA-1766)
 * count timeouts towards dynamicsnitch latencies (CASSANDRA-1905)
 * Expose index-building status in JMX + cli schema description
   (CASSANDRA-1871)
 * allow [LOCAL|EACH]_QUORUM to be used with non-NetworkTopology 
   replication Strategies
 * increased amount of index locks for faster commitlog replay
 * collect secondary index tombstones immediately (CASSANDRA-1914)
 * revert commitlog changes from #1780 (CASSANDRA-1917)
 * change RandomPartitioner min token to -1 to avoid collision w/
   tokens on actual nodes (CASSANDRA-1901)
 * examine the right nibble when validating TimeUUID (CASSANDRA-1910)
 * include secondary indexes in cleanup (CASSANDRA-1916)
 * CFS.scrubDataDirectories should also cleanup invalid secondary indexes
   (CASSANDRA-1904)
 * ability to disable/enable gossip on nodes to force them down
   (CASSANDRA-1108)


0.7.0-rc3
 * expose getNaturalEndpoints in StorageServiceMBean taking byte[]
   key; RMI cannot serialize ByteBuffer (CASSANDRA-1833)
 * infer org.apache.cassandra.locator for replication strategy classes
   when not otherwise specified
 * validation that generates less garbage (CASSANDRA-1814)
 * add TTL support to CLI (CASSANDRA-1838)
 * cli defaults to bytestype for subcomparator when creating
   column families (CASSANDRA-1835)
 * unregister index MBeans when index is dropped (CASSANDRA-1843)
 * make ByteBufferUtil.clone thread-safe (CASSANDRA-1847)
 * change exception for read requests during bootstrap from 
   InvalidRequest to Unavailable (CASSANDRA-1862)
 * respect row-level tombstones post-flush in range scans
   (CASSANDRA-1837)
 * ReadResponseResolver check digests against each other (CASSANDRA-1830)
 * return InvalidRequest when remove of subcolumn without supercolumn
   is requested (CASSANDRA-1866)
 * flush before repair (CASSANDRA-1748)
 * SSTableExport validates key order (CASSANDRA-1884)
 * large row support for SSTableExport (CASSANDRA-1867)
 * Re-cache hot keys post-compaction without hitting disk (CASSANDRA-1878)
 * manage read repair in coordinator instead of data source, to
   provide latency information to dynamic snitch (CASSANDRA-1873)


0.7.0-rc2
 * fix live-column-count of slice ranges including tombstoned supercolumn 
   with live subcolumn (CASSANDRA-1591)
 * rename o.a.c.internal.AntientropyStage -> AntiEntropyStage,
   o.a.c.request.Request_responseStage -> RequestResponseStage,
   o.a.c.internal.Internal_responseStage -> InternalResponseStage
 * add AbstractType.fromString (CASSANDRA-1767)
 * require index_type to be present when specifying index_name
   on ColumnDef (CASSANDRA-1759)
 * fix add/remove index bugs in CFMetadata (CASSANDRA-1768)
 * rebuild Strategy during system_update_keyspace (CASSANDRA-1762)
 * cli updates prompt to ... in continuation lines (CASSANDRA-1770)
 * support multiple Mutations per key in hadoop ColumnFamilyOutputFormat
   (CASSANDRA-1774)
 * improvements to Debian init script (CASSANDRA-1772)
 * use local classloader to check for version.properties (CASSANDRA-1778)
 * Validate that column names in column_metadata are valid for the
   defined comparator, and decode properly in cli (CASSANDRA-1773)
 * use cross-platform newlines in cli (CASSANDRA-1786)
 * add ExpiringColumn support to sstable import/export (CASSANDRA-1754)
 * add flush for each append to periodic commitlog mode; added
   periodic_without_flush option to disable this (CASSANDRA-1780)
 * close file handle used for post-flush truncate (CASSANDRA-1790)
 * various code cleanup (CASSANDRA-1793, -1794, -1795)
 * fix range queries against wrapped range (CASSANDRA-1781)
 * fix consistencylevel calculations for NetworkTopologyStrategy
   (CASSANDRA-1804)
 * cli support index type enum names (CASSANDRA-1810)
 * improved validation of column_metadata (CASSANDRA-1813)
 * reads at ConsistencyLevel > 1 throw UnavailableException
   immediately if insufficient live nodes exist (CASSANDRA-1803)
 * copy bytebuffers for local writes to avoid retaining the entire
   Thrift frame (CASSANDRA-1801)
 * fix NPE adding index to column w/o prior metadata (CASSANDRA-1764)
 * reduce fat client timeout (CASSANDRA-1730)
 * fix botched merge of CASSANDRA-1316


0.7.0-rc1
 * fix compaction and flush races with schema updates (CASSANDRA-1715)
 * add clustertool, config-converter, sstablekeys, and schematool 
   Windows .bat files (CASSANDRA-1723)
 * reject range queries received during bootstrap (CASSANDRA-1739)
 * fix wrapping-range queries on non-minimum token (CASSANDRA-1700)
 * add nodetool cfhistogram (CASSANDRA-1698)
 * limit repaired ranges to what the nodes have in common (CASSANDRA-1674)
 * index scan treats missing columns as not matching secondary
   expressions (CASSANDRA-1745)
 * Fix misuse of DataOutputBuffer.getData in AntiEntropyService
   (CASSANDRA-1729)
 * detect and warn when obsolete version of JNA is present (CASSANDRA-1760)
 * reduce fat client timeout (CASSANDRA-1730)
 * cleanup smallest CFs first to increase free temp space for larger ones
   (CASSANDRA-1811)
 * Update windows .bat files to work outside of main Cassandra
   directory (CASSANDRA-1713)
 * fix read repair regression from 0.6.7 (CASSANDRA-1727)
 * more-efficient read repair (CASSANDRA-1719)
 * fix hinted handoff replay (CASSANDRA-1656)
 * log type of dropped messages (CASSANDRA-1677)
 * upgrade to SLF4J 1.6.1
 * fix ByteBuffer bug in ExpiringColumn.updateDigest (CASSANDRA-1679)
 * fix IntegerType.getString (CASSANDRA-1681)
 * make -Djava.net.preferIPv4Stack=true the default (CASSANDRA-628)
 * add INTERNAL_RESPONSE verb to differentiate from responses related
   to client requests (CASSANDRA-1685)
 * log tpstats when dropping messages (CASSANDRA-1660)
 * include unreachable nodes in describeSchemaVersions (CASSANDRA-1678)
 * Avoid dropping messages off the client request path (CASSANDRA-1676)
 * fix jna errno reporting (CASSANDRA-1694)
 * add friendlier error for UnknownHostException on startup (CASSANDRA-1697)
 * include jna dependency in RPM package (CASSANDRA-1690)
 * add --skip-keys option to stress.py (CASSANDRA-1696)
 * improve cli handling of non-string keys and column names 
   (CASSANDRA-1701, -1693)
 * r/m extra subcomparator line in cli keyspaces output (CASSANDRA-1712)
 * add read repair chance to cli "show keyspaces"
 * upgrade to ConcurrentLinkedHashMap 1.1 (CASSANDRA-975)
 * fix index scan routing (CASSANDRA-1722)
 * fix tombstoning of supercolumns in range queries (CASSANDRA-1734)
 * clear endpoint cache after updating keyspace metadata (CASSANDRA-1741)
 * fix wrapping-range queries on non-minimum token (CASSANDRA-1700)
 * truncate includes secondary indexes (CASSANDRA-1747)
 * retain reference to PendingFile sstables (CASSANDRA-1749)
 * fix sstableimport regression (CASSANDRA-1753)
 * fix for bootstrap when no non-system tables are defined (CASSANDRA-1732)
 * handle replica unavailability in index scan (CASSANDRA-1755)
 * fix service initialization order deadlock (CASSANDRA-1756)
 * multi-line cli commands (CASSANDRA-1742)
 * fix race between snapshot and compaction (CASSANDRA-1736)
 * add listEndpointsPendingHints, deleteHintsForEndpoint JMX methods 
   (CASSANDRA-1551)


0.7.0-beta3
 * add strategy options to describe_keyspace output (CASSANDRA-1560)
 * log warning when using randomly generated token (CASSANDRA-1552)
 * re-organize JMX into .db, .net, .internal, .request (CASSANDRA-1217)
 * allow nodes to change IPs between restarts (CASSANDRA-1518)
 * remember ring state between restarts by default (CASSANDRA-1518)
 * flush index built flag so we can read it before log replay (CASSANDRA-1541)
 * lock row cache updates to prevent race condition (CASSANDRA-1293)
 * remove assertion causing rare (and harmless) error messages in
   commitlog (CASSANDRA-1330)
 * fix moving nodes with no keyspaces defined (CASSANDRA-1574)
 * fix unbootstrap when no data is present in a transfer range (CASSANDRA-1573)
 * take advantage of AVRO-495 to simplify our avro IDL (CASSANDRA-1436)
 * extend authorization hierarchy to column family (CASSANDRA-1554)
 * deletion support in secondary indexes (CASSANDRA-1571)
 * meaningful error message for invalid replication strategy class 
   (CASSANDRA-1566)
 * allow keyspace creation with RF > N (CASSANDRA-1428)
 * improve cli error handling (CASSANDRA-1580)
 * add cache save/load ability (CASSANDRA-1417, 1606, 1647)
 * add StorageService.getDrainProgress (CASSANDRA-1588)
 * Disallow bootstrap to an in-use token (CASSANDRA-1561)
 * Allow dynamic secondary index creation and destruction (CASSANDRA-1532)
 * log auto-guessed memtable thresholds (CASSANDRA-1595)
 * add ColumnDef support to cli (CASSANDRA-1583)
 * reduce index sample time by 75% (CASSANDRA-1572)
 * add cli support for column, strategy metadata (CASSANDRA-1578, 1612)
 * add cli support for schema modification (CASSANDRA-1584)
 * delete temp files on failed compactions (CASSANDRA-1596)
 * avoid blocking for dead nodes during removetoken (CASSANDRA-1605)
 * remove ConsistencyLevel.ZERO (CASSANDRA-1607)
 * expose in-progress compaction type in jmx (CASSANDRA-1586)
 * removed IClock & related classes from internals (CASSANDRA-1502)
 * fix removing tokens from SystemTable on decommission and removetoken
   (CASSANDRA-1609)
 * include CF metadata in cli 'show keyspaces' (CASSANDRA-1613)
 * switch from Properties to HashMap in PropertyFileSnitch to
   avoid synchronization bottleneck (CASSANDRA-1481)
 * PropertyFileSnitch configuration file renamed to 
   cassandra-topology.properties
 * add cli support for get_range_slices (CASSANDRA-1088, CASSANDRA-1619)
 * Make memtable flush thresholds per-CF instead of global 
   (CASSANDRA-1007, 1637)
 * add cli support for binary data without CfDef hints (CASSANDRA-1603)
 * fix building SSTable statistics post-stream (CASSANDRA-1620)
 * fix potential infinite loop in 2ary index queries (CASSANDRA-1623)
 * allow creating NTS keyspaces with no replicas configured (CASSANDRA-1626)
 * add jmx histogram of sstables accessed per read (CASSANDRA-1624)
 * remove system_rename_column_family and system_rename_keyspace from the
   client API until races can be fixed (CASSANDRA-1630, CASSANDRA-1585)
 * add cli sanity tests (CASSANDRA-1582)
 * update GC settings in cassandra.bat (CASSANDRA-1636)
 * cli support for index queries (CASSANDRA-1635)
 * cli support for updating schema memtable settings (CASSANDRA-1634)
 * cli --file option (CASSANDRA-1616)
 * reduce automatically chosen memtable sizes by 50% (CASSANDRA-1641)
 * move endpoint cache from snitch to strategy (CASSANDRA-1643)
 * fix commitlog recovery deleting the newly-created segment as well as
   the old ones (CASSANDRA-1644)
 * upgrade to Thrift 0.5 (CASSANDRA-1367)
 * renamed CL.DCQUORUM to LOCAL_QUORUM and DCQUORUMSYNC to EACH_QUORUM
 * cli truncate support (CASSANDRA-1653)
 * update GC settings in cassandra.bat (CASSANDRA-1636)
 * avoid logging when a node's ip/token is gossipped back to it (CASSANDRA-1666)


0.7-beta2
 * always use UTF-8 for hint keys (CASSANDRA-1439)
 * remove cassandra.yaml dependency from Hadoop and Pig (CASSADRA-1322)
 * expose CfDef metadata in describe_keyspaces (CASSANDRA-1363)
 * restore use of mmap_index_only option (CASSANDRA-1241)
 * dropping a keyspace with no column families generated an error 
   (CASSANDRA-1378)
 * rename RackAwareStrategy to OldNetworkTopologyStrategy, RackUnawareStrategy 
   to SimpleStrategy, DatacenterShardStrategy to NetworkTopologyStrategy,
   AbstractRackAwareSnitch to AbstractNetworkTopologySnitch (CASSANDRA-1392)
 * merge StorageProxy.mutate, mutateBlocking (CASSANDRA-1396)
 * faster UUIDType, LongType comparisons (CASSANDRA-1386, 1393)
 * fix setting read_repair_chance from CLI addColumnFamily (CASSANDRA-1399)
 * fix updates to indexed columns (CASSANDRA-1373)
 * fix race condition leaving to FileNotFoundException (CASSANDRA-1382)
 * fix sharded lock hash on index write path (CASSANDRA-1402)
 * add support for GT/E, LT/E in subordinate index clauses (CASSANDRA-1401)
 * cfId counter got out of sync when CFs were added (CASSANDRA-1403)
 * less chatty schema updates (CASSANDRA-1389)
 * rename column family mbeans. 'type' will now include either 
   'IndexColumnFamilies' or 'ColumnFamilies' depending on the CFS type.
   (CASSANDRA-1385)
 * disallow invalid keyspace and column family names. This includes name that
   matches a '^\w+' regex. (CASSANDRA-1377)
 * use JNA, if present, to take snapshots (CASSANDRA-1371)
 * truncate hints if starting 0.7 for the first time (CASSANDRA-1414)
 * fix FD leak in single-row slicepredicate queries (CASSANDRA-1416)
 * allow index expressions against columns that are not part of the 
   SlicePredicate (CASSANDRA-1410)
 * config-converter properly handles snitches and framed support 
   (CASSANDRA-1420)
 * remove keyspace argument from multiget_count (CASSANDRA-1422)
 * allow specifying cassandra.yaml location as (local or remote) URL
   (CASSANDRA-1126)
 * fix using DynamicEndpointSnitch with NetworkTopologyStrategy
   (CASSANDRA-1429)
 * Add CfDef.default_validation_class (CASSANDRA-891)
 * fix EstimatedHistogram.max (CASSANDRA-1413)
 * quorum read optimization (CASSANDRA-1622)
 * handle zero-length (or missing) rows during HH paging (CASSANDRA-1432)
 * include secondary indexes during schema migrations (CASSANDRA-1406)
 * fix commitlog header race during schema change (CASSANDRA-1435)
 * fix ColumnFamilyStoreMBeanIterator to use new type name (CASSANDRA-1433)
 * correct filename generated by xml->yaml converter (CASSANDRA-1419)
 * add CMSInitiatingOccupancyFraction=75 and UseCMSInitiatingOccupancyOnly
   to default JVM options
 * decrease jvm heap for cassandra-cli (CASSANDRA-1446)
 * ability to modify keyspaces and column family definitions on a live cluster
   (CASSANDRA-1285)
 * support for Hadoop Streaming [non-jvm map/reduce via stdin/out]
   (CASSANDRA-1368)
 * Move persistent sstable stats from the system table to an sstable component
   (CASSANDRA-1430)
 * remove failed bootstrap attempt from pending ranges when gossip times
   it out after 1h (CASSANDRA-1463)
 * eager-create tcp connections to other cluster members (CASSANDRA-1465)
 * enumerate stages and derive stage from message type instead of 
   transmitting separately (CASSANDRA-1465)
 * apply reversed flag during collation from different data sources
   (CASSANDRA-1450)
 * make failure to remove commitlog segment non-fatal (CASSANDRA-1348)
 * correct ordering of drain operations so CL.recover is no longer 
   necessary (CASSANDRA-1408)
 * removed keyspace from describe_splits method (CASSANDRA-1425)
 * rename check_schema_agreement to describe_schema_versions
   (CASSANDRA-1478)
 * fix QUORUM calculation for RF > 3 (CASSANDRA-1487)
 * remove tombstones during non-major compactions when bloom filter
   verifies that row does not exist in other sstables (CASSANDRA-1074)
 * nodes that coordinated a loadbalance in the past could not be seen by
   newly added nodes (CASSANDRA-1467)
 * exposed endpoint states (gossip details) via jmx (CASSANDRA-1467)
 * ensure that compacted sstables are not included when new readers are
   instantiated (CASSANDRA-1477)
 * by default, calculate heap size and memtable thresholds at runtime (CASSANDRA-1469)
 * fix races dealing with adding/dropping keyspaces and column families in
   rapid succession (CASSANDRA-1477)
 * clean up of Streaming system (CASSANDRA-1503, 1504, 1506)
 * add options to configure Thrift socket keepalive and buffer sizes (CASSANDRA-1426)
 * make contrib CassandraServiceDataCleaner recursive (CASSANDRA-1509)
 * min, max compaction threshold are configurable and persistent 
   per-ColumnFamily (CASSANDRA-1468)
 * fix replaying the last mutation in a commitlog unnecessarily 
   (CASSANDRA-1512)
 * invoke getDefaultUncaughtExceptionHandler from DTPE with the original
   exception rather than the ExecutionException wrapper (CASSANDRA-1226)
 * remove Clock from the Thrift (and Avro) API (CASSANDRA-1501)
 * Close intra-node sockets when connection is broken (CASSANDRA-1528)
 * RPM packaging spec file (CASSANDRA-786)
 * weighted request scheduler (CASSANDRA-1485)
 * treat expired columns as deleted (CASSANDRA-1539)
 * make IndexInterval configurable (CASSANDRA-1488)
 * add describe_snitch to Thrift API (CASSANDRA-1490)
 * MD5 authenticator compares plain text submitted password with MD5'd
   saved property, instead of vice versa (CASSANDRA-1447)
 * JMX MessagingService pending and completed counts (CASSANDRA-1533)
 * fix race condition processing repair responses (CASSANDRA-1511)
 * make repair blocking (CASSANDRA-1511)
 * create EndpointSnitchInfo and MBean to expose rack and DC (CASSANDRA-1491)
 * added option to contrib/word_count to output results back to Cassandra
   (CASSANDRA-1342)
 * rewrite Hadoop ColumnFamilyRecordWriter to pool connections, retry to
   multiple Cassandra nodes, and smooth impact on the Cassandra cluster
   by using smaller batch sizes (CASSANDRA-1434)
 * fix setting gc_grace_seconds via CLI (CASSANDRA-1549)
 * support TTL'd index values (CASSANDRA-1536)
 * make removetoken work like decommission (CASSANDRA-1216)
 * make cli comparator-aware and improve quote rules (CASSANDRA-1523,-1524)
 * make nodetool compact and cleanup blocking (CASSANDRA-1449)
 * add memtable, cache information to GCInspector logs (CASSANDRA-1558)
 * enable/disable HintedHandoff via JMX (CASSANDRA-1550)
 * Ignore stray files in the commit log directory (CASSANDRA-1547)
 * Disallow bootstrap to an in-use token (CASSANDRA-1561)


0.7-beta1
 * sstable versioning (CASSANDRA-389)
 * switched to slf4j logging (CASSANDRA-625)
 * add (optional) expiration time for column (CASSANDRA-699)
 * access levels for authentication/authorization (CASSANDRA-900)
 * add ReadRepairChance to CF definition (CASSANDRA-930)
 * fix heisenbug in system tests, especially common on OS X (CASSANDRA-944)
 * convert to byte[] keys internally and all public APIs (CASSANDRA-767)
 * ability to alter schema definitions on a live cluster (CASSANDRA-44)
 * renamed configuration file to cassandra.xml, and log4j.properties to
   log4j-server.properties, which must now be loaded from
   the classpath (which is how our scripts in bin/ have always done it)
   (CASSANDRA-971)
 * change get_count to require a SlicePredicate. create multi_get_count
   (CASSANDRA-744)
 * re-organized endpointsnitch implementations and added SimpleSnitch
   (CASSANDRA-994)
 * Added preload_row_cache option (CASSANDRA-946)
 * add CRC to commitlog header (CASSANDRA-999)
 * removed deprecated batch_insert and get_range_slice methods (CASSANDRA-1065)
 * add truncate thrift method (CASSANDRA-531)
 * http mini-interface using mx4j (CASSANDRA-1068)
 * optimize away copy of sliced row on memtable read path (CASSANDRA-1046)
 * replace constant-size 2GB mmaped segments and special casing for index 
   entries spanning segment boundaries, with SegmentedFile that computes 
   segments that always contain entire entries/rows (CASSANDRA-1117)
 * avoid reading large rows into memory during compaction (CASSANDRA-16)
 * added hadoop OutputFormat (CASSANDRA-1101)
 * efficient Streaming (no more anticompaction) (CASSANDRA-579)
 * split commitlog header into separate file and add size checksum to
   mutations (CASSANDRA-1179)
 * avoid allocating a new byte[] for each mutation on replay (CASSANDRA-1219)
 * revise HH schema to be per-endpoint (CASSANDRA-1142)
 * add joining/leaving status to nodetool ring (CASSANDRA-1115)
 * allow multiple repair sessions per node (CASSANDRA-1190)
 * optimize away MessagingService for local range queries (CASSANDRA-1261)
 * make framed transport the default so malformed requests can't OOM the 
   server (CASSANDRA-475)
 * significantly faster reads from row cache (CASSANDRA-1267)
 * take advantage of row cache during range queries (CASSANDRA-1302)
 * make GCGraceSeconds a per-ColumnFamily value (CASSANDRA-1276)
 * keep persistent row size and column count statistics (CASSANDRA-1155)
 * add IntegerType (CASSANDRA-1282)
 * page within a single row during hinted handoff (CASSANDRA-1327)
 * push DatacenterShardStrategy configuration into keyspace definition,
   eliminating datacenter.properties. (CASSANDRA-1066)
 * optimize forward slices starting with '' and single-index-block name 
   queries by skipping the column index (CASSANDRA-1338)
 * streaming refactor (CASSANDRA-1189)
 * faster comparison for UUID types (CASSANDRA-1043)
 * secondary index support (CASSANDRA-749 and subtasks)
 * make compaction buckets deterministic (CASSANDRA-1265)


0.6.6
 * Allow using DynamicEndpointSnitch with RackAwareStrategy (CASSANDRA-1429)
 * remove the remaining vestiges of the unfinished DatacenterShardStrategy 
   (replaced by NetworkTopologyStrategy in 0.7)
   

0.6.5
 * fix key ordering in range query results with RandomPartitioner
   and ConsistencyLevel > ONE (CASSANDRA-1145)
 * fix for range query starting with the wrong token range (CASSANDRA-1042)
 * page within a single row during hinted handoff (CASSANDRA-1327)
 * fix compilation on non-sun JDKs (CASSANDRA-1061)
 * remove String.trim() call on row keys in batch mutations (CASSANDRA-1235)
 * Log summary of dropped messages instead of spamming log (CASSANDRA-1284)
 * add dynamic endpoint snitch (CASSANDRA-981)
 * fix streaming for keyspaces with hyphens in their name (CASSANDRA-1377)
 * fix errors in hard-coded bloom filter optKPerBucket by computing it
   algorithmically (CASSANDRA-1220
 * remove message deserialization stage, and uncap read/write stages
   so slow reads/writes don't block gossip processing (CASSANDRA-1358)
 * add jmx port configuration to Debian package (CASSANDRA-1202)
 * use mlockall via JNA, if present, to prevent Linux from swapping
   out parts of the JVM (CASSANDRA-1214)


0.6.4
 * avoid queuing multiple hint deliveries for the same endpoint
   (CASSANDRA-1229)
 * better performance for and stricter checking of UTF8 column names
   (CASSANDRA-1232)
 * extend option to lower compaction priority to hinted handoff
   as well (CASSANDRA-1260)
 * log errors in gossip instead of re-throwing (CASSANDRA-1289)
 * avoid aborting commitlog replay prematurely if a flushed-but-
   not-removed commitlog segment is encountered (CASSANDRA-1297)
 * fix duplicate rows being read during mapreduce (CASSANDRA-1142)
 * failure detection wasn't closing command sockets (CASSANDRA-1221)
 * cassandra-cli.bat works on windows (CASSANDRA-1236)
 * pre-emptively drop requests that cannot be processed within RPCTimeout
   (CASSANDRA-685)
 * add ack to Binary write verb and update CassandraBulkLoader
   to wait for acks for each row (CASSANDRA-1093)
 * added describe_partitioner Thrift method (CASSANDRA-1047)
 * Hadoop jobs no longer require the Cassandra storage-conf.xml
   (CASSANDRA-1280, CASSANDRA-1047)
 * log thread pool stats when GC is excessive (CASSANDRA-1275)
 * remove gossip message size limit (CASSANDRA-1138)
 * parallelize local and remote reads during multiget, and respect snitch 
   when determining whether to do local read for CL.ONE (CASSANDRA-1317)
 * fix read repair to use requested consistency level on digest mismatch,
   rather than assuming QUORUM (CASSANDRA-1316)
 * process digest mismatch re-reads in parallel (CASSANDRA-1323)
 * switch hints CF comparator to BytesType (CASSANDRA-1274)


0.6.3
 * retry to make streaming connections up to 8 times. (CASSANDRA-1019)
 * reject describe_ring() calls on invalid keyspaces (CASSANDRA-1111)
 * fix cache size calculation for size of 100% (CASSANDRA-1129)
 * fix cache capacity only being recalculated once (CASSANDRA-1129)
 * remove hourly scan of all hints on the off chance that the gossiper
   missed a status change; instead, expose deliverHintsToEndpoint to JMX
   so it can be done manually, if necessary (CASSANDRA-1141)
 * don't reject reads at CL.ALL (CASSANDRA-1152)
 * reject deletions to supercolumns in CFs containing only standard
   columns (CASSANDRA-1139)
 * avoid preserving login information after client disconnects
   (CASSANDRA-1057)
 * prefer sun jdk to openjdk in debian init script (CASSANDRA-1174)
 * detect partioner config changes between restarts and fail fast 
   (CASSANDRA-1146)
 * use generation time to resolve node token reassignment disagreements
   (CASSANDRA-1118)
 * restructure the startup ordering of Gossiper and MessageService to avoid
   timing anomalies (CASSANDRA-1160)
 * detect incomplete commit log hearders (CASSANDRA-1119)
 * force anti-entropy service to stream files on the stream stage to avoid
   sending streams out of order (CASSANDRA-1169)
 * remove inactive stream managers after AES streams files (CASSANDRA-1169)
 * allow removing entire row through batch_mutate Deletion (CASSANDRA-1027)
 * add JMX metrics for row-level bloom filter false positives (CASSANDRA-1212)
 * added a redhat init script to contrib (CASSANDRA-1201)
 * use midpoint when bootstrapping a new machine into range with not
   much data yet instead of random token (CASSANDRA-1112)
 * kill server on OOM in executor stage as well as Thrift (CASSANDRA-1226)
 * remove opportunistic repairs, when two machines with overlapping replica
   responsibilities happen to finish major compactions of the same CF near
   the same time.  repairs are now fully manual (CASSANDRA-1190)
 * add ability to lower compaction priority (default is no change from 0.6.2)
   (CASSANDRA-1181)


0.6.2
 * fix contrib/word_count build. (CASSANDRA-992)
 * split CommitLogExecutorService into BatchCommitLogExecutorService and 
   PeriodicCommitLogExecutorService (CASSANDRA-1014)
 * add latency histograms to CFSMBean (CASSANDRA-1024)
 * make resolving timestamp ties deterministic by using value bytes
   as a tiebreaker (CASSANDRA-1039)
 * Add option to turn off Hinted Handoff (CASSANDRA-894)
 * fix windows startup (CASSANDRA-948)
 * make concurrent_reads, concurrent_writes configurable at runtime via JMX
   (CASSANDRA-1060)
 * disable GCInspector on non-Sun JVMs (CASSANDRA-1061)
 * fix tombstone handling in sstable rows with no other data (CASSANDRA-1063)
 * fix size of row in spanned index entries (CASSANDRA-1056)
 * install json2sstable, sstable2json, and sstablekeys to Debian package
 * StreamingService.StreamDestinations wouldn't empty itself after streaming
   finished (CASSANDRA-1076)
 * added Collections.shuffle(splits) before returning the splits in 
   ColumnFamilyInputFormat (CASSANDRA-1096)
 * do not recalculate cache capacity post-compaction if it's been manually 
   modified (CASSANDRA-1079)
 * better defaults for flush sorter + writer executor queue sizes
   (CASSANDRA-1100)
 * windows scripts for SSTableImport/Export (CASSANDRA-1051)
 * windows script for nodetool (CASSANDRA-1113)
 * expose PhiConvictThreshold (CASSANDRA-1053)
 * make repair of RF==1 a no-op (CASSANDRA-1090)
 * improve default JVM GC options (CASSANDRA-1014)
 * fix SlicePredicate serialization inside Hadoop jobs (CASSANDRA-1049)
 * close Thrift sockets in Hadoop ColumnFamilyRecordReader (CASSANDRA-1081)


0.6.1
 * fix NPE in sstable2json when no excluded keys are given (CASSANDRA-934)
 * keep the replica set constant throughout the read repair process
   (CASSANDRA-937)
 * allow querying getAllRanges with empty token list (CASSANDRA-933)
 * fix command line arguments inversion in clustertool (CASSANDRA-942)
 * fix race condition that could trigger a false-positive assertion
   during post-flush discard of old commitlog segments (CASSANDRA-936)
 * fix neighbor calculation for anti-entropy repair (CASSANDRA-924)
 * perform repair even for small entropy differences (CASSANDRA-924)
 * Use hostnames in CFInputFormat to allow Hadoop's naive string-based
   locality comparisons to work (CASSANDRA-955)
 * cache read-only BufferedRandomAccessFile length to avoid
   3 system calls per invocation (CASSANDRA-950)
 * nodes with IPv6 (and no IPv4) addresses could not join cluster
   (CASSANDRA-969)
 * Retrieve the correct number of undeleted columns, if any, from
   a supercolumn in a row that had been deleted previously (CASSANDRA-920)
 * fix index scans that cross the 2GB mmap boundaries for both mmap
   and standard i/o modes (CASSANDRA-866)
 * expose drain via nodetool (CASSANDRA-978)


0.6.0-RC1
 * JMX drain to flush memtables and run through commit log (CASSANDRA-880)
 * Bootstrapping can skip ranges under the right conditions (CASSANDRA-902)
 * fix merging row versions in range_slice for CL > ONE (CASSANDRA-884)
 * default write ConsistencyLeven chaned from ZERO to ONE
 * fix for index entries spanning mmap buffer boundaries (CASSANDRA-857)
 * use lexical comparison if time part of TimeUUIDs are the same 
   (CASSANDRA-907)
 * bound read, mutation, and response stages to fix possible OOM
   during log replay (CASSANDRA-885)
 * Use microseconds-since-epoch (UTC) in cli, instead of milliseconds
 * Treat batch_mutate Deletion with null supercolumn as "apply this predicate 
   to top level supercolumns" (CASSANDRA-834)
 * Streaming destination nodes do not update their JMX status (CASSANDRA-916)
 * Fix internal RPC timeout calculation (CASSANDRA-911)
 * Added Pig loadfunc to contrib/pig (CASSANDRA-910)


0.6.0-beta3
 * fix compaction bucketing bug (CASSANDRA-814)
 * update windows batch file (CASSANDRA-824)
 * deprecate KeysCachedFraction configuration directive in favor
   of KeysCached; move to unified-per-CF key cache (CASSANDRA-801)
 * add invalidateRowCache to ColumnFamilyStoreMBean (CASSANDRA-761)
 * send Handoff hints to natural locations to reduce load on
   remaining nodes in a failure scenario (CASSANDRA-822)
 * Add RowWarningThresholdInMB configuration option to warn before very 
   large rows get big enough to threaten node stability, and -x option to
   be able to remove them with sstable2json if the warning is unheeded
   until it's too late (CASSANDRA-843)
 * Add logging of GC activity (CASSANDRA-813)
 * fix ConcurrentModificationException in commitlog discard (CASSANDRA-853)
 * Fix hardcoded row count in Hadoop RecordReader (CASSANDRA-837)
 * Add a jmx status to the streaming service and change several DEBUG
   messages to INFO (CASSANDRA-845)
 * fix classpath in cassandra-cli.bat for Windows (CASSANDRA-858)
 * allow re-specifying host, port to cassandra-cli if invalid ones
   are first tried (CASSANDRA-867)
 * fix race condition handling rpc timeout in the coordinator
   (CASSANDRA-864)
 * Remove CalloutLocation and StagingFileDirectory from storage-conf files 
   since those settings are no longer used (CASSANDRA-878)
 * Parse a long from RowWarningThresholdInMB instead of an int (CASSANDRA-882)
 * Remove obsolete ControlPort code from DatabaseDescriptor (CASSANDRA-886)
 * move skipBytes side effect out of assert (CASSANDRA-899)
 * add "double getLoad" to StorageServiceMBean (CASSANDRA-898)
 * track row stats per CF at compaction time (CASSANDRA-870)
 * disallow CommitLogDirectory matching a DataFileDirectory (CASSANDRA-888)
 * default key cache size is 200k entries, changed from 10% (CASSANDRA-863)
 * add -Dcassandra-foreground=yes to cassandra.bat
 * exit if cluster name is changed unexpectedly (CASSANDRA-769)


0.6.0-beta1/beta2
 * add batch_mutate thrift command, deprecating batch_insert (CASSANDRA-336)
 * remove get_key_range Thrift API, deprecated in 0.5 (CASSANDRA-710)
 * add optional login() Thrift call for authentication (CASSANDRA-547)
 * support fat clients using gossiper and StorageProxy to perform
   replication in-process [jvm-only] (CASSANDRA-535)
 * support mmapped I/O for reads, on by default on 64bit JVMs 
   (CASSANDRA-408, CASSANDRA-669)
 * improve insert concurrency, particularly during Hinted Handoff
   (CASSANDRA-658)
 * faster network code (CASSANDRA-675)
 * stress.py moved to contrib (CASSANDRA-635)
 * row caching [must be explicitly enabled per-CF in config] (CASSANDRA-678)
 * present a useful measure of compaction progress in JMX (CASSANDRA-599)
 * add bin/sstablekeys (CASSNADRA-679)
 * add ConsistencyLevel.ANY (CASSANDRA-687)
 * make removetoken remove nodes from gossip entirely (CASSANDRA-644)
 * add ability to set cache sizes at runtime (CASSANDRA-708)
 * report latency and cache hit rate statistics with lifetime totals
   instead of average over the last minute (CASSANDRA-702)
 * support get_range_slice for RandomPartitioner (CASSANDRA-745)
 * per-keyspace replication factory and replication strategy (CASSANDRA-620)
 * track latency in microseconds (CASSANDRA-733)
 * add describe_ Thrift methods, deprecating get_string_property and 
   get_string_list_property
 * jmx interface for tracking operation mode and streams in general.
   (CASSANDRA-709)
 * keep memtables in sorted order to improve range query performance
   (CASSANDRA-799)
 * use while loop instead of recursion when trimming sstables compaction list 
   to avoid blowing stack in pathological cases (CASSANDRA-804)
 * basic Hadoop map/reduce support (CASSANDRA-342)


0.5.1
 * ensure all files for an sstable are streamed to the same directory.
   (CASSANDRA-716)
 * more accurate load estimate for bootstrapping (CASSANDRA-762)
 * tolerate dead or unavailable bootstrap target on write (CASSANDRA-731)
 * allow larger numbers of keys (> 140M) in a sstable bloom filter
   (CASSANDRA-790)
 * include jvm argument improvements from CASSANDRA-504 in debian package
 * change streaming chunk size to 32MB to accomodate Windows XP limitations
   (was 64MB) (CASSANDRA-795)
 * fix get_range_slice returning results in the wrong order (CASSANDRA-781)
 

0.5.0 final
 * avoid attempting to delete temporary bootstrap files twice (CASSANDRA-681)
 * fix bogus NaN in nodeprobe cfstats output (CASSANDRA-646)
 * provide a policy for dealing with single thread executors w/ a full queue
   (CASSANDRA-694)
 * optimize inner read in MessagingService, vastly improving multiple-node
   performance (CASSANDRA-675)
 * wait for table flush before streaming data back to a bootstrapping node.
   (CASSANDRA-696)
 * keep track of bootstrapping sources by table so that bootstrapping doesn't 
   give the indication of finishing early (CASSANDRA-673)


0.5.0 RC3
 * commit the correct version of the patch for CASSANDRA-663


0.5.0 RC2 (unreleased)
 * fix bugs in converting get_range_slice results to Thrift 
   (CASSANDRA-647, CASSANDRA-649)
 * expose java.util.concurrent.TimeoutException in StorageProxy methods
   (CASSANDRA-600)
 * TcpConnectionManager was holding on to disconnected connections, 
   giving the false indication they were being used. (CASSANDRA-651)
 * Remove duplicated write. (CASSANDRA-662)
 * Abort bootstrap if IP is already in the token ring (CASSANDRA-663)
 * increase default commitlog sync period, and wait for last sync to 
   finish before submitting another (CASSANDRA-668)


0.5.0 RC1
 * Fix potential NPE in get_range_slice (CASSANDRA-623)
 * add CRC32 to commitlog entries (CASSANDRA-605)
 * fix data streaming on windows (CASSANDRA-630)
 * GC compacted sstables after cleanup and compaction (CASSANDRA-621)
 * Speed up anti-entropy validation (CASSANDRA-629)
 * Fix anti-entropy assertion error (CASSANDRA-639)
 * Fix pending range conflicts when bootstapping or moving
   multiple nodes at once (CASSANDRA-603)
 * Handle obsolete gossip related to node movement in the case where
   one or more nodes is down when the movement occurs (CASSANDRA-572)
 * Include dead nodes in gossip to avoid a variety of problems
   and fix HH to removed nodes (CASSANDRA-634)
 * return an InvalidRequestException for mal-formed SlicePredicates
   (CASSANDRA-643)
 * fix bug determining closest neighbor for use in multiple datacenters
   (CASSANDRA-648)
 * Vast improvements in anticompaction speed (CASSANDRA-607)
 * Speed up log replay and writes by avoiding redundant serializations
   (CASSANDRA-652)


0.5.0 beta 2
 * Bootstrap improvements (several tickets)
 * add nodeprobe repair anti-entropy feature (CASSANDRA-193, CASSANDRA-520)
 * fix possibility of partition when many nodes restart at once
   in clusters with multiple seeds (CASSANDRA-150)
 * fix NPE in get_range_slice when no data is found (CASSANDRA-578)
 * fix potential NPE in hinted handoff (CASSANDRA-585)
 * fix cleanup of local "system" keyspace (CASSANDRA-576)
 * improve computation of cluster load balance (CASSANDRA-554)
 * added super column read/write, column count, and column/row delete to
   cassandra-cli (CASSANDRA-567, CASSANDRA-594)
 * fix returning live subcolumns of deleted supercolumns (CASSANDRA-583)
 * respect JAVA_HOME in bin/ scripts (several tickets)
 * add StorageService.initClient for fat clients on the JVM (CASSANDRA-535)
   (see contrib/client_only for an example of use)
 * make consistency_level functional in get_range_slice (CASSANDRA-568)
 * optimize key deserialization for RandomPartitioner (CASSANDRA-581)
 * avoid GCing tombstones except on major compaction (CASSANDRA-604)
 * increase failure conviction threshold, resulting in less nodes
   incorrectly (and temporarily) marked as down (CASSANDRA-610)
 * respect memtable thresholds during log replay (CASSANDRA-609)
 * support ConsistencyLevel.ALL on read (CASSANDRA-584)
 * add nodeprobe removetoken command (CASSANDRA-564)


0.5.0 beta
 * Allow multiple simultaneous flushes, improving flush throughput 
   on multicore systems (CASSANDRA-401)
 * Split up locks to improve write and read throughput on multicore systems
   (CASSANDRA-444, CASSANDRA-414)
 * More efficient use of memory during compaction (CASSANDRA-436)
 * autobootstrap option: when enabled, all non-seed nodes will attempt
   to bootstrap when started, until bootstrap successfully
   completes. -b option is removed.  (CASSANDRA-438)
 * Unless a token is manually specified in the configuration xml,
   a bootstraping node will use a token that gives it half the
   keys from the most-heavily-loaded node in the cluster,
   instead of generating a random token. 
   (CASSANDRA-385, CASSANDRA-517)
 * Miscellaneous bootstrap fixes (several tickets)
 * Ability to change a node's token even after it has data on it
   (CASSANDRA-541)
 * Ability to decommission a live node from the ring (CASSANDRA-435)
 * Semi-automatic loadbalancing via nodeprobe (CASSANDRA-192)
 * Add ability to set compaction thresholds at runtime via
   JMX / nodeprobe.  (CASSANDRA-465)
 * Add "comment" field to ColumnFamily definition. (CASSANDRA-481)
 * Additional JMX metrics (CASSANDRA-482)
 * JSON based export and import tools (several tickets)
 * Hinted Handoff fixes (several tickets)
 * Add key cache to improve read performance (CASSANDRA-423)
 * Simplified construction of custom ReplicationStrategy classes
   (CASSANDRA-497)
 * Graphical application (Swing) for ring integrity verification and 
   visualization was added to contrib (CASSANDRA-252)
 * Add DCQUORUM, DCQUORUMSYNC consistency levels and corresponding
   ReplicationStrategy / EndpointSnitch classes.  Experimental.
   (CASSANDRA-492)
 * Web client interface added to contrib (CASSANDRA-457)
 * More-efficient flush for Random, CollatedOPP partitioners 
   for normal writes (CASSANDRA-446) and bulk load (CASSANDRA-420)
 * Add MemtableFlushAfterMinutes, a global replacement for the old 
   per-CF FlushPeriodInMinutes setting (CASSANDRA-463)
 * optimizations to slice reading (CASSANDRA-350) and supercolumn
   queries (CASSANDRA-510)
 * force binding to given listenaddress for nodes with multiple
   interfaces (CASSANDRA-546)
 * stress.py benchmarking tool improvements (several tickets)
 * optimized replica placement code (CASSANDRA-525)
 * faster log replay on restart (CASSANDRA-539, CASSANDRA-540)
 * optimized local-node writes (CASSANDRA-558)
 * added get_range_slice, deprecating get_key_range (CASSANDRA-344)
 * expose TimedOutException to thrift (CASSANDRA-563)
 

0.4.2
 * Add validation disallowing null keys (CASSANDRA-486)
 * Fix race conditions in TCPConnectionManager (CASSANDRA-487)
 * Fix using non-utf8-aware comparison as a sanity check.
   (CASSANDRA-493)
 * Improve default garbage collector options (CASSANDRA-504)
 * Add "nodeprobe flush" (CASSANDRA-505)
 * remove NotFoundException from get_slice throws list (CASSANDRA-518)
 * fix get (not get_slice) of entire supercolumn (CASSANDRA-508)
 * fix null token during bootstrap (CASSANDRA-501)


0.4.1
 * Fix FlushPeriod columnfamily configuration regression
   (CASSANDRA-455)
 * Fix long column name support (CASSANDRA-460)
 * Fix for serializing a row that only contains tombstones
   (CASSANDRA-458)
 * Fix for discarding unneeded commitlog segments (CASSANDRA-459)
 * Add SnapshotBeforeCompaction configuration option (CASSANDRA-426)
 * Fix compaction abort under insufficient disk space (CASSANDRA-473)
 * Fix reading subcolumn slice from tombstoned CF (CASSANDRA-484)
 * Fix race condition in RVH causing occasional NPE (CASSANDRA-478)


0.4.0
 * fix get_key_range problems when a node is down (CASSANDRA-440)
   and add UnavailableException to more Thrift methods
 * Add example EndPointSnitch contrib code (several tickets)


0.4.0 RC2
 * fix SSTable generation clash during compaction (CASSANDRA-418)
 * reject method calls with null parameters (CASSANDRA-308)
 * properly order ranges in nodeprobe output (CASSANDRA-421)
 * fix logging of certain errors on executor threads (CASSANDRA-425)


0.4.0 RC1
 * Bootstrap feature is live; use -b on startup (several tickets)
 * Added multiget api (CASSANDRA-70)
 * fix Deadlock with SelectorManager.doProcess and TcpConnection.write
   (CASSANDRA-392)
 * remove key cache b/c of concurrency bugs in third-party
   CLHM library (CASSANDRA-405)
 * update non-major compaction logic to use two threshold values
   (CASSANDRA-407)
 * add periodic / batch commitlog sync modes (several tickets)
 * inline BatchMutation into batch_insert params (CASSANDRA-403)
 * allow setting the logging level at runtime via mbean (CASSANDRA-402)
 * change default comparator to BytesType (CASSANDRA-400)
 * add forwards-compatible ConsistencyLevel parameter to get_key_range
   (CASSANDRA-322)
 * r/m special case of blocking for local destination when writing with 
   ConsistencyLevel.ZERO (CASSANDRA-399)
 * Fixes to make BinaryMemtable [bulk load interface] useful (CASSANDRA-337);
   see contrib/bmt_example for an example of using it.
 * More JMX properties added (several tickets)
 * Thrift changes (several tickets)
    - Merged _super get methods with the normal ones; return values
      are now of ColumnOrSuperColumn.
    - Similarly, merged batch_insert_super into batch_insert.



0.4.0 beta
 * On-disk data format has changed to allow billions of keys/rows per
   node instead of only millions
 * Multi-keyspace support
 * Scan all sstables for all queries to avoid situations where
   different types of operation on the same ColumnFamily could
   disagree on what data was present
 * Snapshot support via JMX
 * Thrift API has changed a _lot_:
    - removed time-sorted CFs; instead, user-defined comparators
      may be defined on the column names, which are now byte arrays.
      Default comparators are provided for UTF8, Bytes, Ascii, Long (i64),
      and UUID types.
    - removed colon-delimited strings in thrift api in favor of explicit
      structs such as ColumnPath, ColumnParent, etc.  Also normalized
      thrift struct and argument naming.
    - Added columnFamily argument to get_key_range.
    - Change signature of get_slice to accept starting and ending
      columns as well as an offset.  (This allows use of indexes.)
      Added "ascending" flag to allow reasonably-efficient reverse
      scans as well.  Removed get_slice_by_range as redundant.
    - get_key_range operates on one CF at a time
    - changed `block` boolean on insert methods to ConsistencyLevel enum,
      with options of NONE, ONE, QUORUM, and ALL.
    - added similar consistency_level parameter to read methods
    - column-name-set slice with no names given now returns zero columns
      instead of all of them.  ("all" can run your server out of memory.
      use a range-based slice with a high max column count instead.)
 * Removed the web interface. Node information can now be obtained by 
   using the newly introduced nodeprobe utility.
 * More JMX stats
 * Remove magic values from internals (e.g. special key to indicate
   when to flush memtables)
 * Rename configuration "table" to "keyspace"
 * Moved to crash-only design; no more shutdown (just kill the process)
 * Lots of bug fixes

Full list of issues resolved in 0.4 is at https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&&pid=12310865&fixfor=12313862&resolution=1&sorter/field=issuekey&sorter/order=DESC


0.3.0 RC3
 * Fix potential deadlock under load in TCPConnection.
   (CASSANDRA-220)


0.3.0 RC2
 * Fix possible data loss when server is stopped after replaying
   log but before new inserts force memtable flush.
   (CASSANDRA-204)
 * Added BUGS file


0.3.0 RC1
 * Range queries on keys, including user-defined key collation
 * Remove support
 * Workarounds for a weird bug in JDK select/register that seems
   particularly common on VM environments. Cassandra should deploy
   fine on EC2 now
 * Much improved infrastructure: the beginnings of a decent test suite
   ("ant test" for unit tests; "nosetests" for system tests), code
   coverage reporting, etc.
 * Expanded node status reporting via JMX
 * Improved error reporting/logging on both server and client
 * Reduced memory footprint in default configuration
 * Combined blocking and non-blocking versions of insert APIs
 * Added FlushPeriodInMinutes configuration parameter to force
   flushing of infrequently-updated ColumnFamilies
