3.0.31
 *

3.0.30
 * Fix SCM URL link (CASSANDRA-19422)
 * Backport CASSANDRA-16418 to 3.x (CASSANDRA-18824)
 * Suppress CVE-2023-6378 (CASSANDRA-19142) 
 * Do not set RPC_READY to false on transports shutdown in order to not fail counter updates for deployments with coordinator and storage nodes with transports turned off (CASSANDRA-18935)
 * Suppress CVE-2023-44487 (CASSANDRA-18943)
 * Fix nodetool enable/disablebinary to correctly set rpc readiness in gossip (CASSANDRA-18935)
 * Implement the logic in bin/stop-server (CASSANDRA-18838) 
 * Upgrade snappy-java to 1.1.10.4 (CASSANDRA-18878)
 * Add cqlshrc.sample and credentials.sample into Debian package (CASSANDRA-18818)
 * Refactor validation logic in StorageService.rebuild (CASSANDRA-18803)
 * Make alternation of a user type validate the same way as creation of a user type does (CASSANDRA-18585)
 * Backport of CASSANDRA-16905 Further restrict schema column drop/recreate conversions (CASSANDRA-18760)
 * CQLSH emits a warning when the server version doesn't match (CASSANDRA-18745)
 * Fix missing speculative retries in tablestats (CASSANDRA-18767)
 * Fix Requires for Java for RPM package (CASSANDRA-18751)
 * Fix CQLSH online help topic link (CASSANDRA-17534)
 * Remove unused suppressions (CASSANDRA-18724)
 * Upgrade OWASP to 8.3.1 (CASSANDRA-18650)
 * Suppress CVE-2023-34462 (CASSANDRA-18649)
 * Add support for AWS Ec2 IMDSv2 (CASSANDRA-16555)
 * Suppress CVE-2023-35116 (CASSANDRA-18630)
 * Pass taskId from CompactionTask to system.compaction_history (CASSANDRA-12183)
 * Suppress CVE-2023-34455, CVE-2023-34454, CVE-2023-34453 (CASSANDRA-18608)
 * Backport CASSANDRA-10508: Remove hard-coded SSL cipher suites (CASSANDRA-18575)
 * Suppress CVE-2023-2976 (CASSANDRA-18562)
 * Remove dh_python use in Debian packaging (CASSANDRA-18558)
 * Pass down all contact points to driver for cassandra-stress (CASSANDRA-18025)
 * Validate the existence of a datacenter in nodetool rebuild (CASSANDRA-14319)


3.0.29
 * Suppress CVE-2023-2251 (CASSANDRA-18497)
 * Do not remove SSTables when cause of FSReadError is OutOfMemoryError while using best_effort disk failure policy (CASSANDRA-18336)
 * Do not remove truncated_at entry in system.local while dropping an index (CASSANDRA-18105)
 * Save host id to system.local and flush immediately after startup (CASSANDRA-18153)
 * Fix RepairJob unnecessarily reporting cancellation error (CASSANDRA-17701)
 * Fix the ordering of sstables when running sstableupgrade tool (CASSANDRA-18143)
 * Fix default file system error handler for disk_failure_policy die (CASSANDRA-18294)
 * Introduce check for names of test classes (CASSANDRA-17964)
 * Suppress CVE-2022-41915 (CASSANDRA-18147)
 * Suppress CVE-2021-1471, CVE-2021-3064, CVE-2021-4235 (CASSANDRA-18149)
 * Switch to snakeyaml's SafeConstructor (CASSANDRA-18150)
 * Expand build.dir property in rat targets (CASSANDRA-18183)
 * Suppress CVE-2022-41881 (CASSANDRA-18148)
 * Default role is created with zero timestamp (CASSANDRA-12525)
 * Suppress CVE-2021-37533 (CASSANDRA-18146)
 * Add to the IntelliJ Git Window issue navigation links to Cassandra's Jira (CASSANDRA-18126)
 * Avoid anticompaction mixing data from two different time windows with TWCS (CASSANDRA-17970)
 * Do not spam the logs with MigrationCoordinator not being able to pull schemas (CASSANDRA-18096)
 * Fix incorrect resource name in LIST PERMISSION output (CASSANDRA-17848)
 * Suppress CVE-2022-41854 and similar (CASSANDRA-18083)
 * Fix running Ant rat targets without git (CASSANDRA-17974)
 * Fix intermittent failure in nodetool toppartitions (CASSANDRA-17254)


3.0.28
 * Harden JMX by resolving beanshooter issues (CASSANDRA-17921)
 * Suppress CVE-2019-2684 (CASSANDRA-17965)
 * Fix auto-completing "WITH" when creating a materialized view (CASSANDRA-17879)
 * Fix scrubber falling into infinite loop when the last partition is broken (CASSANDRA-17862)
 * Improve libjemalloc resolution in bin/cassandra (CASSANDRA-15767)
 * Fix missing state resetting on CompressedRandomAccessReader read errors (CASSANDRA-17314)
 * Fix restarting of services on gossipping-only member (CASSANDRA-17752)
 * Fix writetime and ttl functions forbidden for collections instead of multicell columns (CASSANDRA-17628)
 * Supress CVE-2020-7238 (CASSANDRA-17697)
 * Fix issue where frozen maps may not be serialized in the correct order (CASSANDRA-17623)
 * Suppress CVE-2022-24823 (CASSANDRA-17633)
 * fsync TOC and digest files (CASSANDRA-10709)


3.0.27
 * Fix URISyntaxException in nodetool with updated Java (CASSANDRA-17581)
 * Schema mutations may not be completed on drain (CASSANDRA-17524)
 * Fix data corruption in AbstractCompositeType due to static boolean byte buffers (CASSANDRA-14752)
 * Add procps dependency to RPM/Debian packages (CASSANDRA-17516)
 * Suppress CVE-2021-44521 (CASSANDRA-17492)
 * ConnectionLimitHandler may leaks connection count if remote connection drops (CASSANDRA-17252)
 * Require ant >= 1.10 (CASSANDRA-17428)
 * Disallow CONTAINS for UPDATE and DELETE (CASSANDRA-15266)
 * filter out NULL_VERSION entries from peers table in ConfiguredLimit (CASSANDRA-16518)
 * Suppress inapplicable CVEs (CASSANDRA-17368)
 * Fix flaky test - test_cqlsh_completion.TestCqlshCompletion (CASSANDRA-17338)
 * Fixed TestCqlshOutput failing tests (CASSANDRA-17386)
 * LeveledCompactionStrategy disk space check improvements (CASSANDRA-17272)
 * Lazy transaction log replica creation allows incorrect replica content divergence during anticompaction (CASSANDRA-17273)


3.0.26
 * Extend operator control over the UDF threading model for CVE-2021-44521 (CASSANDRA-17352)
 * Fix conversion from megabits to bytes in streaming rate limiter (CASSANDRA-17243)
 * Upgrade logback to 1.2.9 (CASSANDRA-17204)
 * Avoid race in AbstractReplicationStrategy endpoint caching (CASSANDRA-16673)
 * Fix abort when window resizing during cqlsh COPY (CASSANDRA-15230)
 * Fix slow keycache load which blocks startup for tables with many sstables (CASSANDRA-14898)
 * Fix rare NPE caused by batchlog replay / node decomission races (CASSANDRA-17049)
 * Allow users to view permissions of the roles they created (CASSANDRA-16902)
 * Fix failure handling in inter-node communication (CASSANDRA-16334)
 * Log more information when a node runs out of commitlog space (CASSANDRA-11323)
 * Don't take snapshots when truncating system tables (CASSANDRA-16839)
 * Make -Dtest.methods consistently optional in all Ant test targets (CASSANDRA-17014)
 * Immediately apply stream throughput, considering negative values as unthrottled (CASSANDRA-16959)
 * Do not release new SSTables in offline transactions (CASSANDRA-16975)
 * ArrayIndexOutOfBoundsException in FunctionResource#fromName (CASSANDRA-16977, CASSANDRA-16995)
 * CVE-2015-0886 Security vulnerability in jbcrypt is addressed (CASSANDRA-9384)
 * Avoid useless SSTable reads during single partition queries (CASSANDRA-16944)
 * Debian init respects CASSANDRA_HEAPDUMP_DIR (CASSANDRA-13843)
 * Catch UnsatisfiedLinkError in WindowsTimer (CASSANDRA-16085)
 * Avoid removing batch when it's not created during view replication (CASSANDRA-16175)
 * Make the addition of regular column to COMPACT tables throw an InvalidRequestException (CASSANDRA-14564)
 * Fix materialized view schema backup as table (CASSANDRA-12734)
 * Avoid signaling DigestResolver until the minimum number of responses are guaranteed to be visible (CASSANDRA-16883)
 * Fix secondary indexes on primary key columns skipping some writes (CASSANDRA-16868)
 * Fix incorrect error message in LegacyLayout (CASSANDRA-15136)
 * Use JMX to validate nodetool --jobs parameter (CASSANDRA-16104)
 * Handle properly UnsatisfiedLinkError in NativeLibrary#getProcessID() (CASSANDRA-16578)
 * Remove mutation data from error log message (CASSANDRA-16817)
 * Race in CompactionExecutorTest (CASSANDRA-17239)
Merged from 2.2:
 * Add python2 location to RPMs (CASSANDRA-16822)


3.0.25:
 * Binary releases no longer bundle the apidocs (javadoc) (CASSANDRA-16557)
 * Migrate dependency handling from maven-ant-tasks to resolver-ant-tasks, removing lib/ directory from version control (CASSANDRA-16557)
 * Don't allow seeds to replace without using unsafe (CASSANDRA-14463)
 * Calculate time remaining correctly for all compaction types in compactionstats (CASSANDRA-14701)
 * Receipt of gossip shutdown notification updates TokenMetadata (CASSANDRA-16796)
 * Count bloom filter misses correctly (CASSANDRA-12922)
 * Reject token() in MV WHERE clause (CASSANDRA-13464)
 * Ensure java executable is on the path (CASSANDRA-14325)
 * Make speculative retry parameter case-insensitive for backward compatibility with 2.1 (CASSANDRA-16467)
 * Push digest mismatch exceptions to trace (CASSANDRA-14900)
 * Support long names in nodetool output (CASSANDRA-14162)
 * Handle correctly the exceptions thrown by custom QueryHandler constructors (CASSANDRA-16703)
 * Adding columns via ALTER TABLE can generate corrupt sstables (CASSANDRA-16735)
 * Add flag to disable ALTER...DROP COMPACT STORAGE statements (CASSANDRA-16733)
 * Clean transaction log leftovers at the beginning of sstablelevelreset and sstableofflinerelevel (CASSANDRA-12519)
 * CQL shell should prefer newer TLS version by default (CASSANDRA-16695)
 * Ensure that existing empty rows are properly returned (CASSANDRA-16671)
 * Invalidate prepared statements on DROP COMPACT (CASSANDRA-16712)
 * Failure to execute queries should emit a KPI other than read timeout/unavailable so it can be alerted/tracked (CASSANDRA-16581)
 * Don't wait on schema versions from replacement target when replacing (CASSANDRA-16692)
 * StandaloneVerifier does not fail when unable to verify SSTables, it only fails if Corruption is thrown (CASSANDRA-16683)
 * Fix bloom filter false ratio calculation by including true negatives (CASSANDRA-15834)
 * Prevent loss of commit log data when moving sstables between nodes (CASSANDRA-16619)
 * Fix materialized view builders inserting truncated data (CASSANDRA-16567)
 * Don't wait for schema migrations from removed nodes (CASSANDRA-16577)
 * Scheduled (delayed) schema pull tasks should not run after MIGRATION stage shutdown during decommission (CASSANDRA-16495)
 * Ignore trailing zeros in hint files (CASSANDRA-16523)
 * Refuse DROP COMPACT STORAGE if some 2.x sstables are in use (CASSANDRA-15897)
 * Fix ColumnFilter::toString not returning a valid CQL fragment (CASSANDRA-16483)
 * Fix ColumnFilter behaviour to prevent digest mitmatches during upgrades (CASSANDRA-16415)
 * Avoid pushing schema mutations when setting up distributed system keyspaces locally (CASSANDRA-16387)
Merged from 2.2:
 * Remove ant targets list-jvm-dtests and ant list-jvm-upgrade-dtests (CASSANDRA-16519)
 * Fix centos packaging for arm64, >=4.0 rpm's now require python3 (CASSANDRA-16477)
 * Make TokenMetadata's ring version increments atomic (CASSANDRA-16286)


3.0.24:
 * Prevent unbounded number of pending flushing tasks; Add PendingFlushTasks metric (CASSANDRA-16261)
 * Improve empty hint file handling during startup (CASSANDRA-16162)
 * Allow empty string in collections with COPY FROM in cqlsh (CASSANDRA-16372)
 * Fix skipping on pre-3.0 created compact storage sstables due to missing primary key liveness (CASSANDRA-16226)
 * Fix DecimalDeserializer#toString OOM (CASSANDRA-14925)
 * Extend the exclusion of replica filtering protection to other indices instead of just SASI (CASSANDRA-16311)
 * Synchronize transaction logs for JBOD (CASSANDRA-16225)
 * Fix the counting of cells per partition (CASSANDRA-16259)
 * Fix serial read/non-applying CAS linearizability (CASSANDRA-12126)
 * Avoid potential NPE in JVMStabilityInspector (CASSANDRA-16294)
 * Improved check of num_tokens against the length of initial_token (CASSANDRA-14477)
 * Fix a race condition on ColumnFamilyStore and TableMetrics (CASSANDRA-16228)
 * Remove the SEPExecutor blocking behavior (CASSANDRA-16186)
 * Wait for schema agreement when bootstrapping (CASSANDRA-15158)
 * Fix invalid cell value skipping when reading from disk (CASSANDRA-16223)
 * Prevent invoking enable/disable gossip when not in NORMAL (CASSANDRA-16146)
Merged from 2.2:
 * Remove OpenJDK log warning (CASSANDRA-15563)
 * Fix the histogram merge of the table metrics (CASSANDRA-16259)


3.0.23:
 * Fix OOM when terminating repair session (CASSANDRA-15902)
 * Avoid marking shutting down nodes as up after receiving gossip shutdown message (CASSANDRA-16094)
 * Check SSTables for latest version before dropping compact storage (CASSANDRA-16063)
 * Handle unexpected columns due to schema races (CASSANDRA-15899)
 * Avoid failing compactions with very large partitions (CASSANDRA-15164)
 * Use IF NOT EXISTS for index and UDT create statements in snapshot schema files (CASSANDRA-13935)
 * Add flag to ignore unreplicated keyspaces during repair (CASSANDRA-15160)
Merged from 2.2:
 * Package tools/bin scripts as executable (CASSANDRA-16151)
 * Fixed a NullPointerException when calling nodetool enablethrift (CASSANDRA-16127)


3.0.22:
 * Fix gossip shutdown order (CASSANDRA-15816)
 * Remove broken 'defrag-on-read' optimization (CASSANDRA-15432)
 * Check for endpoint collision with hibernating nodes (CASSANDRA-14599)
 * Operational improvements and hardening for replica filtering protection (CASSANDRA-15907)
 * stop_paranoid disk failure policy is ignored on CorruptSSTableException after node is up (CASSANDRA-15191)
 * 3.x fails to start if commit log has range tombstones from a column which is also deleted (CASSANDRA-15970)
 * Forbid altering UDTs used in partition keys (CASSANDRA-15933)
 * Fix empty/null json string representation (CASSANDRA-15896)
 * Handle difference in timestamp precision between java8 and java11 in LogFIle.java (CASSANDRA-16050)
Merged from 2.2:
 * Fix CQL parsing of collections when the column type is reversed (CASSANDRA-15814)
Merged from 2.1:
 * Only allow strings to be passed to JMX authentication (CASSANDRA-16077)


3.0.21
 * Backport CASSANDRA-12189: escape string literals (CASSANDRA-15948)
 * Avoid hinted handoff per-host throttle being arounded to 0 in large cluster (CASSANDRA-15859)
 * Avoid emitting empty range tombstones from RangeTombstoneList (CASSANDRA-15924)
 * Avoid thread starvation, and improve compare-and-swap performance, in the slab allocators (CASSANDRA-15922)
 * Fix broken KEYS 2i queries after DROP COMPACT STORAGE (CASSANDRA-15906)
 * Add token to tombstone warning and error messages (CASSANDRA-15890)
 * Fixed range read concurrency factor computation and capped as 10 times tpc cores (CASSANDRA-15752)
 * Catch exception on bootstrap resume and init native transport (CASSANDRA-15863)
 * Fix replica-side filtering returning stale data with CL > ONE (CASSANDRA-8272, CASSANDRA-8273)
 * Fix duplicated row on 2.x upgrades when multi-rows range tombstones interact with collection ones (CASSANDRA-15805)
 * Rely on snapshotted session infos on StreamResultFuture.maybeComplete to avoid race conditions (CASSANDRA-15667)
 * EmptyType doesn't override writeValue so could attempt to write bytes when expected not to (CASSANDRA-15790)
 * Fix index queries on partition key columns when some partitions contains only static data (CASSANDRA-13666)
 * Avoid creating duplicate rows during major upgrades (CASSANDRA-15789)
 * liveDiskSpaceUsed and totalDiskSpaceUsed get corrupted if IndexSummaryRedistribution gets interrupted (CASSANDRA-15674)
 * Fix Debian init start/stop (CASSANDRA-15770)
 * Fix infinite loop on index query paging in tables with clustering (CASSANDRA-14242)
 * Fix chunk index overflow due to large sstable with small chunk length (CASSANDRA-15595)
 * cqlsh return non-zero status when STDIN CQL fails (CASSANDRA-15623)
 * Don't skip sstables in slice queries based only on local min/max/deletion timestamp (CASSANDRA-15690)
 * Memtable memory allocations may deadlock (CASSANDRA-15367)
 * Run evictFromMembership in GossipStage (CASSANDRA-15592)
Merged from 2.2:
 * Fix nomenclature of allow and deny lists (CASSANDRA-15862)
 * Remove generated files from source artifact (CASSANDRA-15849)
 * Remove duplicated tools binaries from tarballs (CASSANDRA-15768)
 * Duplicate results with DISTINCT queries in mixed mode (CASSANDRA-15501)
 * Disable JMX rebinding (CASSANDRA-15653)
Merged from 2.1:
 * Fix writing of snapshot manifest when the table has table-backed secondary indexes (CASSANDRA-10968)
 * Fix parse error in cqlsh COPY FROM and formatting for map of blobs (CASSANDRA-15679)
 * Fix Commit log replays when static column clustering keys are collections (CASSANDRA-14365)
 * Fix Red Hat init script on newer systemd versions (CASSANDRA-15273)
 * Allow EXTRA_CLASSPATH to work on tar/source installations (CASSANDRA-15567)


3.0.20
 * Run in-jvm upgrade dtests in circleci (CASSANDRA-15506)
 * Include updates to static column in mutation size calculations (CASSANDRA-15293)
 * Fix point-in-time recoevery ignoring timestamp of updates to static columns (CASSANDRA-15292)
 * GC logs are also put under $CASSANDRA_LOG_DIR (CASSANDRA-14306)
 * Fix sstabledump's position key value when partitions have multiple rows (CASSANDRA-14721)
 * Avoid over-scanning data directories in LogFile.verify() (CASSANDRA-15364)
 * Bump generations and document changes to system_distributed and system_traces in 3.0, 3.11
   (CASSANDRA-15441)
 * Fix system_traces creation timestamp; optimise system keyspace upgrades (CASSANDRA-15398)
 * Fix various data directory prefix matching issues (CASSANDRA-13974)
 * Minimize clustering values in metadata collector (CASSANDRA-15400)
 * Avoid over-trimming of results in mixed mode clusters (CASSANDRA-15405)
 * validate value sizes in LegacyLayout (CASSANDRA-15373)
 * Ensure that tracing doesn't break connections in 3.x/4.0 mixed mode by default (CASSANDRA-15385)
 * Make sure index summary redistribution does not start when compactions are paused (CASSANDRA-15265)
 * Ensure legacy rows have primary key livenessinfo when they contain illegal cells (CASSANDRA-15365)
 * Fix race condition when setting bootstrap flags (CASSANDRA-14878)
 * Fix NativeLibrary.tryOpenDirectory callers for Windows (CASSANDRA-15426)
Merged from 2.2:
 * Fix SELECT JSON output for empty blobs (CASSANDRA-15435)
 * In-JVM DTest: Set correct internode message version for upgrade test (CASSANDRA-15371)
 * In-JVM DTest: Support NodeTool in dtest (CASSANDRA-15429)


3.0.19
 * Add ability to cap max negotiable protocol version (CASSANDRA-15193)
 * Gossip tokens on startup if available (CASSANDRA-15335)
 * Fix resource leak in CompressedSequentialWriter (CASSANDRA-15340)
 * Fix merge which reverted CASSANDRA-14993 (CASSANDRA-15289)
 * Fix LegacyLayout RangeTombstoneList IndexOutOfBoundsException when upgrading and RangeTombstone bounds are asymmetric (CASSANDRA-15172)
 * Fix NPE when using allocate_tokens_for_keyspace on new DC/rack (CASSANDRA-14952)
 * Filter sstables earlier when running cleanup (CASSANDRA-15100)
 * Use mean row count instead of mean column count for index selectivity calculation (CASSANDRA-15259)
 * Avoid updating unchanged gossip states (CASSANDRA-15097)
 * Prevent recreation of previously dropped columns with a different kind (CASSANDRA-14948)
 * Prevent client requests from blocking on executor task queue (CASSANDRA-15013)
 * Toughen up column drop/recreate type validations (CASSANDRA-15204)
 * LegacyLayout should handle paging states that cross a collection column (CASSANDRA-15201)
 * Prevent RuntimeException when username or password is empty/null (CASSANDRA-15198)
 * Multiget thrift query returns null records after digest mismatch (CASSANDRA-14812)
 * Skipping illegal legacy cells can break reverse iteration of indexed partitions (CASSANDRA-15178)
 * Handle paging states serialized with a different version than the session's (CASSANDRA-15176)
 * Throw IOE instead of asserting on unsupporter peer versions (CASSANDRA-15066)
 * Update token metadata when handling MOVING/REMOVING_TOKEN events (CASSANDRA-15120)
 * Add ability to customize cassandra log directory using $CASSANDRA_LOG_DIR (CASSANDRA-15090)
 * Skip cells with illegal column names when reading legacy sstables (CASSANDRA-15086)
 * Fix assorted gossip races and add related runtime checks (CASSANDRA-15059)
 * Fix mixed mode partition range scans with limit (CASSANDRA-15072)
 * cassandra-stress works with frozen collections: list and set (CASSANDRA-14907)
 * For nodetool listsnapshots output, put spaces between columns, and increase snapshot padding (CASSANDRA-14876)
 * Fix handling FS errors on writing and reading flat files - LogTransaction and hints (CASSANDRA-15053)
 * Avoid double closing the iterator to avoid overcounting the number of requests (CASSANDRA-15058)
 * Improve `nodetool status -r` speed (CASSANDRA-14847)
 * Improve merkle tree size and time on heap (CASSANDRA-14096)
 * Add missing commands to nodetool-completion (CASSANDRA-14916)
 * Anti-compaction temporarily corrupts sstable state for readers (CASSANDRA-15004)
 Merged from 2.2:
 * Catch non-IOException in FileUtils.close to make sure that all resources are closed (CASSANDRA-15225)
 * Handle exceptions during authentication/authorization (CASSANDRA-15041)
 * Support cross version messaging in in-jvm upgrade dtests (CASSANDRA-15078)
 * Fix index summary redistribution cancellation (CASSANDRA-15045)
 * Refactor Circle CI configuration (CASSANDRA-14806)
 * Fixing invalid CQL in security documentation (CASSANDRA-15020)
 * Multi-version in-JVM dtests (CASSANDRA-14937)
 * Allow instance class loaders to be garbage collected for inJVM dtest (CASSANDRA-15170)
 * Add support for network topology and query tracing for inJVM dtest (CASSANDRA-15319)


3.0.18
 * Severe concurrency issues in STCS,DTCS,TWCS,TMD.Topology,TypeParser
 * Add a script to make running the cqlsh tests in cassandra repo easier (CASSANDRA-14951)
 * If SizeEstimatesRecorder misses a 'onDropTable' notification, the size_estimates table will never be cleared for that table. (CASSANDRA-14905)
 * Counters fail to increment in 2.1/2.2 to 3.X mixed version clusters (CASSANDRA-14958)
 * Streaming needs to synchronise access to LifecycleTransaction (CASSANDRA-14554)
 * Fix cassandra-stress write hang with default options (CASSANDRA-14616)
 * Differentiate between slices and RTs when decoding legacy bounds (CASSANDRA-14919)
 * CommitLogReplayer.handleReplayError should print stack traces (CASSANDRA-14589)
 * Netty epoll IOExceptions caused by unclean client disconnects being logged at INFO (CASSANDRA-14909)
 * Unfiltered.isEmpty conflicts with Row extends AbstractCollection.isEmpty (CASSANDRA-14588)
 * RangeTombstoneList doesn't properly clean up mergeable or superseded rts in some cases (CASSANDRA-14894)
 * Fix handling of collection tombstones for dropped columns from legacy sstables (CASSANDRA-14912)
 * Throw exception if Columns serialized subset encode more columns than possible (CASSANDRA-14591)
 * Drop/add column name with different Kind can result in corruption (CASSANDRA-14843)
 * Fix missing rows when reading 2.1 SSTables with static columns in 3.0 (CASSANDRA-14873)
 * Move TWCS message 'No compaction necessary for bucket size' to Trace level (CASSANDRA-14884)
 * Sstable min/max metadata can cause data loss (CASSANDRA-14861)
 * Dropped columns can cause reverse sstable iteration to return prematurely (CASSANDRA-14838)
 * Legacy sstables with  multi block range tombstones create invalid bound sequences (CASSANDRA-14823)
 * Expand range tombstone validation checks to multiple interim request stages (CASSANDRA-14824)
 * Reverse order reads can return incomplete results (CASSANDRA-14803)
 * Avoid calling iter.next() in a loop when notifying indexers about range tombstones (CASSANDRA-14794)
 * Fix purging semi-expired RT boundaries in reversed iterators (CASSANDRA-14672)
 * DESC order reads can fail to return the last Unfiltered in the partition (CASSANDRA-14766)
 * Fix corrupted collection deletions for dropped columns in 3.0 <-> 2.{1,2} messages (CASSANDRA-14568)
 * Fix corrupted static collection deletions in 3.0 <-> 2.{1,2} messages (CASSANDRA-14568)
 * Handle failures in parallelAllSSTableOperation (cleanup/upgradesstables/etc) (CASSANDRA-14657)
 * Improve TokenMetaData cache populating performance avoid long locking (CASSANDRA-14660)
 * Backport: Flush netty client messages immediately (not by default) (CASSANDRA-13651)
 * Fix static column order for SELECT * wildcard queries (CASSANDRA-14638)
 * sstableloader should use discovered broadcast address to connect intra-cluster (CASSANDRA-14522)
 * Fix reading columns with non-UTF names from schema (CASSANDRA-14468)
 Merged from 2.2:
 * CircleCI docker image should bake in more dependencies (CASSANDRA-14985)
 * Don't enable client transports when bootstrap is pending (CASSANDRA-14525)
 * MigrationManager attempts to pull schema from different major version nodes (CASSANDRA-14928)
 * Fix incorrect cqlsh results when selecting same columns multiple times (CASSANDRA-13262)
 * Returns null instead of NaN or Infinity in JSON strings (CASSANDRA-14377)
Merged from 2.1:
 * Paged Range Slice queries with DISTINCT can drop rows from results (CASSANDRA-14956)
 * Update release checksum algorithms to SHA-256, SHA-512 (CASSANDRA-14970)


3.0.17
 * Fix corrupted static collection deletions in 3.0 -> 2.{1,2} messages (CASSANDRA-14568)
 * Fix potential IndexOutOfBoundsException with counters (CASSANDRA-14167)
 * Restore resumable hints delivery, backport CASSANDRA-11960 (CASSANDRA-14419)
 * Always close RT markers returned by ReadCommand#executeLocally() (CASSANDRA-14515)
 * Reverse order queries with range tombstones can cause data loss (CASSANDRA-14513)
 * Fix regression of lagging commitlog flush log message (CASSANDRA-14451)
 * Add Missing dependencies in pom-all (CASSANDRA-14422)
 * Cleanup StartupClusterConnectivityChecker and PING Verb (CASSANDRA-14447)
 * Fix deprecated repair error notifications from 3.x clusters to legacy JMX clients (CASSANDRA-13121)
 * Cassandra not starting when using enhanced startup scripts in windows (CASSANDRA-14418)
 * Fix progress stats and units in compactionstats (CASSANDRA-12244)
 * Better handle missing partition columns in system_schema.columns (CASSANDRA-14379)
 * Delay hints store excise by write timeout to avoid race with decommission (CASSANDRA-13740)
 * Deprecate background repair and probablistic read_repair_chance table options
   (CASSANDRA-13910)
 * Add missed CQL keywords to documentation (CASSANDRA-14359)
 * Fix unbounded validation compactions on repair / revert CASSANDRA-13797 (CASSANDRA-14332)
 * Avoid deadlock when running nodetool refresh before node is fully up (CASSANDRA-14310)
 * Handle all exceptions when opening sstables (CASSANDRA-14202)
 * Handle incompletely written hint descriptors during startup (CASSANDRA-14080)
 * Handle repeat open bound from SRP in read repair (CASSANDRA-14330)
 * Respect max hint window when hinting for LWT (CASSANDRA-14215)
 * Adding missing WriteType enum values to v3, v4, and v5 spec (CASSANDRA-13697)
 * Don't regenerate bloomfilter and summaries on startup (CASSANDRA-11163)
 * Fix NPE when performing comparison against a null frozen in LWT (CASSANDRA-14087)
 * Log when SSTables are deleted (CASSANDRA-14302)
 * Fix batch commitlog sync regression (CASSANDRA-14292)
 * Write to pending endpoint when view replica is also base replica (CASSANDRA-14251)
 * Chain commit log marker potential performance regression in batch commit mode (CASSANDRA-14194)
 * Fully utilise specified compaction threads (CASSANDRA-14210)
 * Pre-create deletion log records to finish compactions quicker (CASSANDRA-12763)
Merged from 2.2:
 * Fix bug that prevented compaction of SSTables after full repairs (CASSANDRA-14423)
 * Incorrect counting of pending messages in OutboundTcpConnection (CASSANDRA-11551)
 * Fix compaction failure caused by reading un-flushed data (CASSANDRA-12743)
 * Use Bounds instead of Range for sstables in anticompaction (CASSANDRA-14411)
 * Fix JSON queries with IN restrictions and ORDER BY clause (CASSANDRA-14286)
 * CQL fromJson(null) throws NullPointerException (CASSANDRA-13891)
 * Backport circleci yaml (CASSANDRA-14240)
Merged from 2.1:
 * Check checksum before decompressing data (CASSANDRA-14284)
 * CVE-2017-5929 Security vulnerability in Logback warning in NEWS.txt (CASSANDRA-14183)


3.0.16
 * Fix unit test failures in ViewComplexTest (CASSANDRA-14219)
 * Add MinGW uname check to start scripts (CASSANDRA-12940)
 * Protect against overflow of local expiration time (CASSANDRA-14092)
 * Use the correct digest file and reload sstable metadata in nodetool verify (CASSANDRA-14217)
 * Handle failure when mutating repaired status in Verifier (CASSANDRA-13933)
 * Close socket on error during connect on OutboundTcpConnection (CASSANDRA-9630)
 * Set encoding for javadoc generation (CASSANDRA-14154)
 * Fix index target computation for dense composite tables with dropped compact storage (CASSANDRA-14104)
 * Improve commit log chain marker updating (CASSANDRA-14108)
 * Extra range tombstone bound creates double rows (CASSANDRA-14008)
 * Fix SStable ordering by max timestamp in SinglePartitionReadCommand (CASSANDRA-14010)
 * Accept role names containing forward-slash (CASSANDRA-14088)
 * Optimize CRC check chance probability calculations (CASSANDRA-14094)
 * Fix cleanup on keyspace with no replicas (CASSANDRA-13526)
 * Fix updating base table rows with TTL not removing materialized view entries (CASSANDRA-14071)
 * Reduce garbage created by DynamicSnitch (CASSANDRA-14091)
 * More frequent commitlog chained markers (CASSANDRA-13987)
 * Fix serialized size of DataLimits (CASSANDRA-14057)
 * Add flag to allow dropping oversized read repair mutations (CASSANDRA-13975)
 * Fix SSTableLoader logger message (CASSANDRA-14003)
 * Fix repair race that caused gossip to block (CASSANDRA-13849)
 * Tracing interferes with digest requests when using RandomPartitioner (CASSANDRA-13964)
 * Add flag to disable materialized views, and warnings on creation (CASSANDRA-13959)
 * Don't let user drop or generally break tables in system_distributed (CASSANDRA-13813)
 * Provide a JMX call to sync schema with local storage (CASSANDRA-13954)
 * Mishandling of cells for removed/dropped columns when reading legacy files (CASSANDRA-13939)
 * Deserialise sstable metadata in nodetool verify (CASSANDRA-13922)
Merged from 2.2:
 * Fix the inspectJvmOptions startup check (CASSANDRA-14112)
 * Fix race that prevents submitting compaction for a table when executor is full (CASSANDRA-13801)
 * Rely on the JVM to handle OutOfMemoryErrors (CASSANDRA-13006)
Merged from 2.1:
 * More PEP8 compliance for cqlsh (CASSANDRA-14021)
 * RPM package spec: fix permissions for installed jars and config files (CASSANDRA-14181)


3.0.15
 * Improve TRUNCATE performance (CASSANDRA-13909)
 * Implement short read protection on partition boundaries (CASSANDRA-13595)
 * Fix ISE thrown by UPI.Serializer.hasNext() for some SELECT queries (CASSANDRA-13911)
 * Filter header only commit logs before recovery (CASSANDRA-13918)
 * AssertionError prepending to a list (CASSANDRA-13149)
 * Fix support for SuperColumn tables (CASSANDRA-12373)
 * Handle limit correctly on tables with strict liveness (CASSANDRA-13883)
 * Fix missing original update in TriggerExecutor (CASSANDRA-13894)
 * Remove non-rpc-ready nodes from counter leader candidates (CASSANDRA-13043)
 * Improve short read protection performance (CASSANDRA-13794)
 * Fix sstable reader to support range-tombstone-marker for multi-slices (CASSANDRA-13787)
 * Fix short read protection for tables with no clustering columns (CASSANDRA-13880)
 * Make isBuilt volatile in PartitionUpdate (CASSANDRA-13619)
 * Prevent integer overflow of timestamps in CellTest and RowsTest (CASSANDRA-13866)
 * Fix counter application order in short read protection (CASSANDRA-12872)
 * Don't block RepairJob execution on validation futures (CASSANDRA-13797)
 * Wait for all management tasks to complete before shutting down CLSM (CASSANDRA-13123)
 * INSERT statement fails when Tuple type is used as clustering column with default DESC order (CASSANDRA-13717)
 * Fix pending view mutations handling and cleanup batchlog when there are local and remote paired mutations (CASSANDRA-13069)
 * Improve config validation and documentation on overflow and NPE (CASSANDRA-13622)
 * Range deletes in a CAS batch are ignored (CASSANDRA-13655)
 * Avoid assertion error when IndexSummary > 2G (CASSANDRA-12014)
 * Change repair midpoint logging for tiny ranges (CASSANDRA-13603)
 * Better handle corrupt final commitlog segment (CASSANDRA-11995)
 * StreamingHistogram is not thread safe (CASSANDRA-13756)
 * Fix MV timestamp issues (CASSANDRA-11500)
 * Better tolerate improperly formatted bcrypt hashes (CASSANDRA-13626) 
 * Fix race condition in read command serialization (CASSANDRA-13363)
 * Enable segement creation before recovering commitlogs (CASSANDRA-13587)
 * Fix AssertionError in short read protection (CASSANDRA-13747)
 * Don't skip corrupted sstables on startup (CASSANDRA-13620)
 * Fix the merging of cells with different user type versions (CASSANDRA-13776)
 * Copy session properties on cqlsh.py do_login (CASSANDRA-13640)
 * Potential AssertionError during ReadRepair of range tombstone and partition deletions (CASSANDRA-13719)
 * Don't let stress write warmup data if n=0 (CASSANDRA-13773)
 * Gossip thread slows down when using batch commit log (CASSANDRA-12966)
 * Randomize batchlog endpoint selection with only 1 or 2 racks (CASSANDRA-12884)
 * Fix digest calculation for counter cells (CASSANDRA-13750)
 * Fix ColumnDefinition.cellValueType() for non-frozen collection and change SSTabledump to use type.toJSONString() (CASSANDRA-13573)
 * Skip materialized view addition if the base table doesn't exist (CASSANDRA-13737)
 * Drop table should remove corresponding entries in dropped_columns table (CASSANDRA-13730)
 * Log warn message until legacy auth tables have been migrated (CASSANDRA-13371)
 * Fix incorrect [2.1 <- 3.0] serialization of counter cells created in 2.0 (CASSANDRA-13691)
 * Fix invalid writetime for null cells (CASSANDRA-13711)
 * Fix ALTER TABLE statement to atomically propagate changes to the table and its MVs (CASSANDRA-12952)
 * Fixed ambiguous output of nodetool tablestats command (CASSANDRA-13722)
 * JMXEnabledThreadPoolExecutor with corePoolSize equal to maxPoolSize (Backport CASSANDRA-13329)
 * Fix Digest mismatch Exception if hints file has UnknownColumnFamily (CASSANDRA-13696)
 * Purge tombstones created by expired cells (CASSANDRA-13643)
 * Make concat work with iterators that have different subsets of columns (CASSANDRA-13482)
 * Set test.runners based on cores and memory size (CASSANDRA-13078)
 * Allow different NUMACTL_ARGS to be passed in (CASSANDRA-13557)
 * Allow native function calls in CQLSSTableWriter (CASSANDRA-12606)
 * Fix secondary index queries on COMPACT tables (CASSANDRA-13627)
 * Nodetool listsnapshots output is missing a newline, if there are no snapshots (CASSANDRA-13568)
 * sstabledump reports incorrect usage for argument order (CASSANDRA-13532)
Merged from 2.2:
 * Safely handle empty buffers when outputting to JSON (CASSANDRA-13868)
 * Copy session properties on cqlsh.py do_login (CASSANDRA-13847)
 * Fix load over calculated issue in IndexSummaryRedistribution (CASSANDRA-13738)
 * Fix compaction and flush exception not captured (CASSANDRA-13833)
 * Uncaught exceptions in Netty pipeline (CASSANDRA-13649)
 * Prevent integer overflow on exabyte filesystems (CASSANDRA-13067)
 * Fix queries with LIMIT and filtering on clustering columns (CASSANDRA-11223)
 * Fix potential NPE when resume bootstrap fails (CASSANDRA-13272)
 * Fix toJSONString for the UDT, tuple and collection types (CASSANDRA-13592)
 * Fix nested Tuples/UDTs validation (CASSANDRA-13646)
Merged from 2.1:
 * Remove stress-test target in CircleCI as it's not existing (CASSANDRA-13775)
 * Clone HeartBeatState when building gossip messages. Make its generation/version volatile (CASSANDRA-13700)


3.0.14
 * Ensure int overflow doesn't occur when calculating large partition warning size (CASSANDRA-13172)
 * Ensure consistent view of partition columns between coordinator and replica in ColumnFilter (CASSANDRA-13004)
 * Failed unregistering mbean during drop keyspace (CASSANDRA-13346)
 * nodetool scrub/cleanup/upgradesstables exit code is wrong (CASSANDRA-13542)
 * Fix the reported number of sstable data files accessed per read (CASSANDRA-13120)
 * Fix schema digest mismatch during rolling upgrades from versions before 3.0.12 (CASSANDRA-13559)
 * Upgrade JNA version to 4.4.0 (CASSANDRA-13072)
 * Interned ColumnIdentifiers should use minimal ByteBuffers (CASSANDRA-13533)
 * ReverseIndexedReader may drop rows during 2.1 to 3.0 upgrade (CASSANDRA-13525)
 * Fix repair process violating start/end token limits for small ranges (CASSANDRA-13052)
 * Add storage port options to sstableloader (CASSANDRA-13518)
 * Properly handle quoted index names in cqlsh DESCRIBE output (CASSANDRA-12847)
 * Avoid reading static row twice from old format sstables (CASSANDRA-13236)
 * Fix NPE in StorageService.excise() (CASSANDRA-13163)
 * Expire OutboundTcpConnection messages by a single Thread (CASSANDRA-13265)
 * Fail repair if insufficient responses received (CASSANDRA-13397)
 * Fix SSTableLoader fail when the loaded table contains dropped columns (CASSANDRA-13276)
 * Avoid name clashes in CassandraIndexTest (CASSANDRA-13427)
 * Handling partially written hint files (CASSANDRA-12728)
 * Interrupt replaying hints on decommission (CASSANDRA-13308)
 * Fix schema version calculation for rolling upgrades (CASSANDRA-13441)
Merged from 2.2:
 * Nodes started with join_ring=False should be able to serve requests when authentication is enabled (CASSANDRA-11381)
 * cqlsh COPY FROM: increment error count only for failures, not for attempts (CASSANDRA-13209)


3.0.13
 * Make reading of range tombstones more reliable (CASSANDRA-12811)
 * Fix startup problems due to schema tables not completely flushed (CASSANDRA-12213)
 * Fix view builder bug that can filter out data on restart (CASSANDRA-13405)
 * Fix 2i page size calculation when there are no regular columns (CASSANDRA-13400)
 * Fix the conversion of 2.X expired rows without regular column data (CASSANDRA-13395)
 * Fix hint delivery when using ext+internal IPs with prefer_local enabled (CASSANDRA-13020)
 * Fix possible NPE on upgrade to 3.0/3.X in case of IO errors (CASSANDRA-13389)
 * Legacy deserializer can create empty range tombstones (CASSANDRA-13341)
 * Use the Kernel32 library to retrieve the PID on Windows and fix startup checks (CASSANDRA-13333)
 * Fix code to not exchange schema across major versions (CASSANDRA-13274)
 * Dropping column results in "corrupt" SSTable (CASSANDRA-13337)
 * Bugs handling range tombstones in the sstable iterators (CASSANDRA-13340)
 * Fix CONTAINS filtering for null collections (CASSANDRA-13246)
 * Applying: Use a unique metric reservoir per test run when using Cassandra-wide metrics residing in MBeans (CASSANDRA-13216)
 * Propagate row deletions in 2i tables on upgrade (CASSANDRA-13320)
 * Slice.isEmpty() returns false for some empty slices (CASSANDRA-13305)
 * Add formatted row output to assertEmpty in CQL Tester (CASSANDRA-13238)
 * Legacy caching options can prevent 3.0 upgrade (CASSANDRA-13384)
 * Nodetool upgradesstables/scrub/compact ignores system tables (CASSANDRA-13410)
 * Fix NPE issue in StorageService (CASSANDRA-13060)
Merged from 2.2:
 * Avoid starting gossiper in RemoveTest (CASSANDRA-13407)
 * Fix weightedSize() for row-cache reported by JMX and NodeTool (CASSANDRA-13393)
 * Honor truststore-password parameter in cassandra-stress (CASSANDRA-12773)
 * Discard in-flight shadow round responses (CASSANDRA-12653)
 * Don't anti-compact repaired data to avoid inconsistencies (CASSANDRA-13153)
 * Wrong logger name in AnticompactionTask (CASSANDRA-13343)
 * Commitlog replay may fail if last mutation is within 4 bytes of end of segment (CASSANDRA-13282)
 * Fix queries updating multiple time the same list (CASSANDRA-13130)
 * Fix GRANT/REVOKE when keyspace isn't specified (CASSANDRA-13053)
Merged from 2.1:
 * Fix 2ndary index queries on partition keys for tables with static columns CASSANDRA-13147
 * Fix ParseError unhashable type list in cqlsh copy from (CASSANDRA-13364)


3.0.12
 * Prevent data loss on upgrade 2.1 - 3.0 by adding component separator to LogRecord absolute path (CASSANDRA-13294)
 * Improve testing on macOS by eliminating sigar logging (CASSANDRA-13233)
 * Cqlsh copy-from should error out when csv contains invalid data for collections (CASSANDRA-13071)
 * Update c.yaml doc for offheap memtables (CASSANDRA-13179)
 * Faster StreamingHistogram (CASSANDRA-13038)
 * Legacy deserializer can create unexpected boundary range tombstones (CASSANDRA-13237)
 * Remove unnecessary assertion from AntiCompactionTest (CASSANDRA-13070)
 * Fix cqlsh COPY for dates before 1900 (CASSANDRA-13185)
Merged from 2.2:
 * Avoid race on receiver by starting streaming sender thread after sending init message (CASSANDRA-12886)
 * Fix "multiple versions of ant detected..." when running ant test (CASSANDRA-13232)
 * Coalescing strategy sleeps too much (CASSANDRA-13090)
 * Fix flaky LongLeveledCompactionStrategyTest (CASSANDRA-12202)
 * Fix failing COPY TO STDOUT (CASSANDRA-12497)
 * Fix ColumnCounter::countAll behaviour for reverse queries (CASSANDRA-13222)
 * Exceptions encountered calling getSeeds() breaks OTC thread (CASSANDRA-13018)
Merged from 2.1:
 * Remove unused repositories (CASSANDRA-13278)
 * Log stacktrace of uncaught exceptions (CASSANDRA-13108)


3.0.11
 * Use keyspace replication settings on system.size_estimates table (CASSANDRA-9639)
 * Add vm.max_map_count StartupCheck (CASSANDRA-13008)
 * Hint related logging should include the IP address of the destination in addition to 
   host ID (CASSANDRA-13205)
 * Reloading logback.xml does not work (CASSANDRA-13173)
 * Lightweight transactions temporarily fail after upgrade from 2.1 to 3.0 (CASSANDRA-13109)
 * Duplicate rows after upgrading from 2.1.16 to 3.0.10/3.9 (CASSANDRA-13125)
 * Fix UPDATE queries with empty IN restrictions (CASSANDRA-13152)
 * Abort or retry on failed hints delivery (CASSANDRA-13124)
 * Fix handling of partition with partition-level deletion plus
   live rows in sstabledump (CASSANDRA-13177)
 * Provide user workaround when system_schema.columns does not contain entries
   for a table that's in system_schema.tables (CASSANDRA-13180)
 * Dump threads when unit tests time out (CASSANDRA-13117)
 * Better error when modifying function permissions without explicit keyspace (CASSANDRA-12925)
 * Indexer is not correctly invoked when building indexes over sstables (CASSANDRA-13075)
 * Read repair is not blocking repair to finish in foreground repair (CASSANDRA-13115)
 * Stress daemon help is incorrect (CASSANDRA-12563)
 * Remove ALTER TYPE support (CASSANDRA-12443)
 * Fix assertion for certain legacy range tombstone pattern (CASSANDRA-12203)
 * Set javac encoding to utf-8 (CASSANDRA-11077)
 * Replace empty strings with null values if they cannot be converted (CASSANDRA-12794)
 * Fixed flacky SSTableRewriterTest: check file counts before calling validateCFS (CASSANDRA-12348)
 * Fix deserialization of 2.x DeletedCells (CASSANDRA-12620)
 * Add parent repair session id to anticompaction log message (CASSANDRA-12186)
 * Improve contention handling on failure to acquire MV lock for streaming and hints (CASSANDRA-12905)
 * Fix DELETE and UPDATE queries with empty IN restrictions (CASSANDRA-12829)
 * Mark MVs as built after successful bootstrap (CASSANDRA-12984)
 * Estimated TS drop-time histogram updated with Cell.NO_DELETION_TIME (CASSANDRA-13040)
 * Nodetool compactionstats fails with NullPointerException (CASSANDRA-13021)
 * Thread local pools never cleaned up (CASSANDRA-13033)
 * Set RPC_READY to false when draining or if a node is marked as shutdown (CASSANDRA-12781)
 * Make sure sstables only get committed when it's safe to discard commit log records (CASSANDRA-12956)
 * Reject default_time_to_live option when creating or altering MVs (CASSANDRA-12868)
 * Nodetool should use a more sane max heap size (CASSANDRA-12739)
 * LocalToken ensures token values are cloned on heap (CASSANDRA-12651)
 * AnticompactionRequestSerializer serializedSize is incorrect (CASSANDRA-12934)
 * Prevent reloading of logback.xml from UDF sandbox (CASSANDRA-12535)
 * Reenable HeapPool (CASSANDRA-12900)
Merged from 2.2:
 * Fix JVM metric names (CASSANDRA-13103)
 * Fix negative mean latency metric (CASSANDRA-12876)
 * Use only one file pointer when creating commitlog segments (CASSANDRA-12539)
 * Fix speculative retry bugs (CASSANDRA-13009)
 * Fix handling of nulls and unsets in IN conditions (CASSANDRA-12981)
 * Fix race causing infinite loop if Thrift server is stopped before it starts listening (CASSANDRA-12856)
 * CompactionTasks now correctly drops sstables out of compaction when not enough disk space is available (CASSANDRA-12979)
 * Remove support for non-JavaScript UDFs (CASSANDRA-12883)
 * Fix DynamicEndpointSnitch noop in multi-datacenter situations (CASSANDRA-13074)
 * cqlsh copy-from: encode column names to avoid primary key parsing errors (CASSANDRA-12909)
 * Temporarily fix bug that creates commit log when running offline tools (CASSANDRA-8616)
 * Reduce granuality of OpOrder.Group during index build (CASSANDRA-12796)
 * Test bind parameters and unset parameters in InsertUpdateIfConditionTest (CASSANDRA-12980)
 * Do not specify local address on outgoing connection when listen_on_broadcast_address is set (CASSANDRA-12673)
 * Use saved tokens when setting local tokens on StorageService.joinRing (CASSANDRA-12935)
 * cqlsh: fix DESC TYPES errors (CASSANDRA-12914)
 * Fix leak on skipped SSTables in sstableupgrade (CASSANDRA-12899)
 * Avoid blocking gossip during pending range calculation (CASSANDRA-12281)
Merged from 2.1:
 * Use portable stderr for java error in startup (CASSANDRA-13211)
 * Fix Thread Leak in OutboundTcpConnection (CASSANDRA-13204)
 * Coalescing strategy can enter infinite loop (CASSANDRA-13159)
 * Upgrade netty version to fix memory leak with client encryption (CASSANDRA-13114)
 * cqlsh copy-from: sort user type fields in csv (CASSANDRA-12959)


3.0.10
 * Disallow offheap_buffers memtable allocation (CASSANDRA-11039)
 * Fix CommitLogSegmentManagerTest (CASSANDRA-12283)
 * Pass root cause to CorruptBlockException when uncompression failed (CASSANDRA-12889)
 * Fix partition count log during compaction (CASSANDRA-12184)
 * Batch with multiple conditional updates for the same partition causes AssertionError (CASSANDRA-12867)
 * Make AbstractReplicationStrategy extendable from outside its package (CASSANDRA-12788)
 * Fix CommitLogTest.testDeleteIfNotDirty (CASSANDRA-12854)
 * Don't tell users to turn off consistent rangemovements during rebuild. (CASSANDRA-12296)
 * Avoid deadlock due to materialized view lock contention (CASSANDRA-12689)
 * Fix for KeyCacheCqlTest flakiness (CASSANDRA-12801)
 * Include SSTable filename in compacting large row message (CASSANDRA-12384)
 * Fix potential socket leak (CASSANDRA-12329, CASSANDRA-12330)
 * Fix ViewTest.testCompaction (CASSANDRA-12789)
 * Improve avg aggregate functions (CASSANDRA-12417)
 * Preserve quoted reserved keyword column names in MV creation (CASSANDRA-11803)
 * nodetool stopdaemon errors out (CASSANDRA-12646)
 * Split materialized view mutations on build to prevent OOM (CASSANDRA-12268)
 * mx4j does not work in 3.0.8 (CASSANDRA-12274)
 * Abort cqlsh copy-from in case of no answer after prolonged period of time (CASSANDRA-12740)
 * Avoid sstable corrupt exception due to dropped static column (CASSANDRA-12582)
 * Make stress use client mode to avoid checking commit log size on startup (CASSANDRA-12478)
 * Fix exceptions with new vnode allocation (CASSANDRA-12715)
 * Unify drain and shutdown processes (CASSANDRA-12509)
 * Fix NPE in ComponentOfSlice.isEQ() (CASSANDRA-12706)
 * Fix failure in LogTransactionTest (CASSANDRA-12632)
 * Fix potentially incomplete non-frozen UDT values when querying with the
   full primary key specified (CASSANDRA-12605)
 * Skip writing MV mutations to commitlog on mutation.applyUnsafe() (CASSANDRA-11670)
 * Establish consistent distinction between non-existing partition and NULL value for LWTs on static columns (CASSANDRA-12060)
 * Extend ColumnIdentifier.internedInstances key to include the type that generated the byte buffer (CASSANDRA-12516)
 * Backport CASSANDRA-10756 (race condition in NativeTransportService shutdown) (CASSANDRA-12472)
 * If CF has no clustering columns, any row cache is full partition cache (CASSANDRA-12499)
 * Correct log message for statistics of offheap memtable flush (CASSANDRA-12776)
 * Explicitly set locale for string validation (CASSANDRA-12541,CASSANDRA-12542,CASSANDRA-12543,CASSANDRA-12545)
Merged from 2.2:
 * Fix purgeability of tombstones with max timestamp (CASSANDRA-12792)
 * Fail repair if participant dies during sync or anticompaction (CASSANDRA-12901)
 * cqlsh COPY: unprotected pk values before converting them if not using prepared statements (CASSANDRA-12863)
 * Fix Util.spinAssertEquals (CASSANDRA-12283)
 * Fix potential NPE for compactionstats (CASSANDRA-12462)
 * Prepare legacy authenticate statement if credentials table initialised after node startup (CASSANDRA-12813)
 * Change cassandra.wait_for_tracing_events_timeout_secs default to 0 (CASSANDRA-12754)
 * Clean up permissions when a UDA is dropped (CASSANDRA-12720)
 * Limit colUpdateTimeDelta histogram updates to reasonable deltas (CASSANDRA-11117)
 * Fix leak errors and execution rejected exceptions when draining (CASSANDRA-12457)
 * Fix merkle tree depth calculation (CASSANDRA-12580)
 * Make Collections deserialization more robust (CASSANDRA-12618)
 * Better handle invalid system roles table (CASSANDRA-12700)
 * Fix exceptions when enabling gossip on nodes that haven't joined the ring (CASSANDRA-12253)
 * Fix authentication problem when invoking cqlsh copy from a SOURCE command (CASSANDRA-12642)
 * Decrement pending range calculator jobs counter in finally block
  (CASSANDRA-12554)
 * Split consistent range movement flag correction (CASSANDRA-12786)
Merged from 2.1:
 * Add system property to set the max number of native transport requests in queue (CASSANDRA-11363)
 * Don't skip sstables based on maxLocalDeletionTime (CASSANDRA-12765)


3.0.9
 * Handle composite prefixes with final EOC=0 as in 2.x and refactor LegacyLayout.decodeBound (CASSANDRA-12423)
 * Fix paging for 2.x to 3.x upgrades (CASSANDRA-11195)
 * select_distinct_with_deletions_test failing on non-vnode environments (CASSANDRA-11126)
 * Stack Overflow returned to queries while upgrading (CASSANDRA-12527)
 * Fix legacy regex for temporary files from 2.2 (CASSANDRA-12565)
 * Add option to state current gc_grace_seconds to tools/bin/sstablemetadata (CASSANDRA-12208)
 * Fix file system race condition that may cause LogAwareFileLister to fail to classify files (CASSANDRA-11889)
 * Fix file handle leaks due to simultaneous compaction/repair and
   listing snapshots, calculating snapshot sizes, or making schema
   changes (CASSANDRA-11594)
 * Fix nodetool repair exits with 0 for some errors (CASSANDRA-12508)
 * Do not shut down BatchlogManager twice during drain (CASSANDRA-12504)
 * Disk failure policy should not be invoked on out of space (CASSANDRA-12385)
 * Calculate last compacted key on startup (CASSANDRA-6216)
 * Add schema to snapshot manifest, add USING TIMESTAMP clause to ALTER TABLE statements (CASSANDRA-7190)
 * Fix clean interval not sent to commit log for empty memtable flush (CASSANDRA-12436)
 * Fix potential resource leak in RMIServerSocketFactoryImpl (CASSANDRA-12331)
 * Backport CASSANDRA-12002 (CASSANDRA-12177)
 * Make sure compaction stats are updated when compaction is interrupted (CASSANDRA-12100)
 * Fix potential bad messaging service message for paged range reads
   within mixed-version 3.x clusters (CASSANDRA-12249)
 * Change commitlog and sstables to track dirty and clean intervals (CASSANDRA-11828)
 * NullPointerException during compaction on table with static columns (CASSANDRA-12336)
 * Fixed ConcurrentModificationException when reading metrics in GraphiteReporter (CASSANDRA-11823)
 * Fix upgrade of super columns on thrift (CASSANDRA-12335)
 * Fixed flacky BlacklistingCompactionsTest, switched to fixed size types and increased corruption size (CASSANDRA-12359)
 * 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)
 * 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)
 * Fix JsonTransformer output of partition with deletion info (CASSANDRA-12418)
 * Fix NPE in SSTableLoader when specifying partial directory path (CASSANDRA-12609)
Merged from 2.2:
 * Add local address entry in PropertyFileSnitch (CASSANDRA-11332)
 * cqlshlib tests: increase default execute timeout (CASSANDRA-12481)
 * Forward writes to replacement node when replace_address != broadcast_address (CASSANDRA-8523)
 * Enable repair -pr and -local together (fix regression of CASSANDRA-7450) (CASSANDRA-12522)
 * Fail repair on non-existing table (CASSANDRA-12279)
 * cqlsh copy: fix missing counter values (CASSANDRA-12476)
 * Move migration tasks to non-periodic queue, assure flush executor shutdown after non-periodic executor (CASSANDRA-12251)
 * cqlsh copy: fixed possible race in initializing feeding thread (CASSANDRA-11701)
 * Only set broadcast_rpc_address on Ec2MultiRegionSnitch if it's not set (CASSANDRA-11357)
 * Update StorageProxy range metrics for timeouts, failures and unavailables (CASSANDRA-9507)
 * Add Sigar to classes included in clientutil.jar (CASSANDRA-11635)
 * Add decay to histograms and timers used for metrics (CASSANDRA-11752)
 * Fix hanging stream session (CASSANDRA-10992)
 * Fix INSERT JSON, fromJson() support of smallint, tinyint types (CASSANDRA-12371)
 * Restore JVM metric export for metric reporters (CASSANDRA-12312)
 * Release sstables of failed stream sessions only when outgoing transfers are finished (CASSANDRA-11345)
 * 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)
 * 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)
Merged from 2.1:
 * Fix queries with empty ByteBuffer values in clustering column restrictions (CASSANDRA-12127)
 * Disable passing control to post-flush after flush failure to prevent data loss (CASSANDRA-11828)
 * Allow STCS-in-L0 compactions to reduce scope with LCS (CASSANDRA-12040)
 * cannot use cql since upgrading python to 2.7.11+ (CASSANDRA-11850)
 * Fix filtering on clustering columns when 2i is used (CASSANDRA-11907)


3.0.8
 * Fix potential race in schema during new table creation (CASSANDRA-12083)
 * 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:
 * 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:
 * 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.0.7
 * 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)
 * 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)
 * Run CommitLog tests with different compression settings (CASSANDRA-9039)
 * 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)
 * Prohibit Reversed Counter type as part of the PK (CASSANDRA-9395)
Merged from 2.1:
 * cqlsh: apply current keyspace to source command (CASSANDRA-11152)
 * Backport CASSANDRA-11578 (CASSANDRA-11750)
 * 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.0.6
 * 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:
 * Fix commit log replay after out-of-order flush completion (CASSANDRA-9669)
 * cqlsh: correctly handle non-ascii chars in error messages (CASSANDRA-11626)
 * 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.0.5
 * 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 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)
 * Fix AE in nodetool cfstats (backport CASSANDRA-10859) (CASSANDRA-11297)
 * 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)
 * Backport CASSANDRA-10679 (CASSANDRA-9598)
 * InvalidateKeys should have a weak ref to key cache (CASSANDRA-11176)
 * COPY FROM on large datasets: fix progress report and debug performance (CASSANDRA-11053)


3.0.4
 * Preserve order for preferred SSL cipher suites (CASSANDRA-11164)
 * 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:
 * 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: 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) Support timezone conversion using pytz (CASSANDRA-10397)
 * (cqlsh) Display milliseconds when datetime overflows (CASSANDRA-10625)


3.0.3
 * 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)
 * 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)
 * Fix counting of received sstables in streaming (CASSANDRA-10949)
 * Implement hints compression (CASSANDRA-9428)
 * Fix potential assertion error when reading static columns (CASSANDRA-10903)
 * 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:
 * maxPurgeableTimestamp needs to check memtables too (CASSANDRA-9949)
 * Apply change to compaction throughput in real time (CASSANDRA-10025)
 * 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)
 * (cqlsh) Also apply --connect-timeout to control connection
   timeout (CASSANDRA-10959)
 * 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)
 * 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)
 * Fix regression in split size on CqlInputFormat (CASSANDRA-10835)
 * Better handling of SSL connection errors inter-node (CASSANDRA-10816)
 * Disable reloading of GossipingPropertyFileSnitch (CASSANDRA-9474)
 * Verify tables in pseudo-system keyspaces at startup (CASSANDRA-10761)
 * (cqlsh) encode input correctly when saving history
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)
 * 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.0.2
 * Fix upgrade data loss due to range tombstone deleting more data than then should
   (CASSANDRA-10822)


3.0.1
 * 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


