5.0
 * Add guardrail for partition tombstones and deprecate compaction_tombstone_warning_threshold (CASSANDRA-17194)
 * Print header and statistics for cassandra-stress output with arbitrary frequency (CASSANDRA-12972)
 * CEP-25: Trie-indexed SSTable format (CASSANDRA-18398)
 * Make cassandra-stress able to read all credentials from a file (CASSANDRA-18544)
 * Add guardrail for partition size and deprecate compaction_large_partition_warning_threshold (CASSANDRA-18500)
 * Add HISTORY command for CQLSH (CASSANDRA-15046)
 * Fix sstable formats configuration (CASSANDRA-18441)
 * Add guardrail to bound timestamps (CASSANDRA-18352)
 * Add keyspace_name column to system_views.clients (CASSANDRA-18525)
 * Moved system properties and envs to CassandraRelevantProperties and CassandraRelevantEnv respectively (CASSANDRA-17797)
 * Add sstablepartitions offline tool to find large partitions in sstables (CASSANDRA-8720)
 * Replace usages of json-simple dependency by Jackson (CASSANDRA-16855)
 * When decommissioning should set Severity to limit traffic (CASSANDRA-18430)
 * For Java11 and Java17 remove -XX:-UseBiasedLocking as it is the default already (CASSANDRA-17869)
 * Upgrade commons-io to 2.11.0 (CASSANDRA-17364)
 * Node Draining Should Abort All Current SSTables Imports (CASSANDRA-18373)
 * Use snake case for the names of CQL native functions (CASSANDRA-18037)
 * Use jdk-dependent checkstyle version to check the source code (CASSANDRA-18262)
 * Provide summary of failed SessionInfo's in StreamResultFuture (CASSANDRA-17199)
 * CEP-20: Dynamic Data Masking (CASSANDRA-17940)
 * Add system_views.snapshots virtual table (CASSANDRA-18102)
 * Update OpenHFT dependencies (chronicle-queue, chronicle-core, chronicle-bytes, chronicle-wire, chronicle-threads) (CASSANDRA-18049)
 * Remove org.apache.cassandra.hadoop code (CASSANDRA-18323)
 * Remove deprecated CQL functions dateOf and unixTimestampOf (CASSANDRA-18328)
 * Remove DateTieredCompactionStrategy (CASSANDRA-18043)
 * Add system_views.max_sstable_size and system_views.max_sstable_duration tables (CASSANDRA-18333)
 * Extend implicit allow-filtering for virtual tables to clustering columns (CASSANDRA-18331)
 * Upgrade maven-shade-plugin to 3.4.1 to fix shaded dtest JAR build (CASSANDRA-18136)
 * Upgrade to Opcodes.ASM9 (CASSANDRA-17971)
 * Add MaxSSTableSize and MaxSSTableDuration metrics and propagate them together with local read/write ratio to tablestats (CASSANDRA-18283)
 * Add more logging around CompactionManager operations (CASSANDRA-18268)
 * Reduce memory allocations of calls to ByteBufer.duplicate() made in org.apache.cassandra.transport.CBUtil#writeValue (CASSANDRA-18212)
 * CEP-17: SSTable API (CASSANDRA-17056)
 * Gossip stateMapOrdering does not have correct ordering when both EndpointState are in the bootstrapping set (CASSANDRA-18292)
 * Snapshot only sstables containing mismatching ranges on preview repair mismatch (CASSANDRA-17561)
 * More accurate skipping of sstables in read path (CASSANDRA-18134)
 * Prepare for JDK17 experimental support (CASSANDRA-18179, CASSANDRA-18258)
 * Remove Scripted UDFs internals; hooks to be added later in CASSANDRA-17281 (CASSANDRA-18252)
 * Update JNA to 5.13.0 (CASSANDRA-18050)
 * Make virtual tables decide if they implicitly enable ALLOW FILTERING (CASSANDRA-18238)
 * Add row, tombstone, and sstable count to nodetool profileload (CASSANDRA-18022)
 * Coordinator level metrics for read response and mutation row and column counts (CASSANDRA-18155)
 * Add CQL functions for dynamic data masking (CASSANDRA-17941)
 * Print friendly error when nodetool attempts to connect to uninitialized server (CASSANDRA-11537)
 * Use G1GC by default, and update default G1GC settings (CASSANDRA-18027)
 * SimpleSeedProvider can resolve multiple IP addresses per DNS record (CASSANDRA-14361)
 * Remove mocking in InternalNodeProbe spying on StorageServiceMBean (CASSANDRA-18152)
 * Add compaction_properties column to system.compaction_history table and nodetool compactionhistory command (CASSANDRA-18061)
 * Remove ProtocolVersion entirely from the CollectionSerializer ecosystem (CASSANDRA-18114)
 * Fix serialization error in new getsstables --show-levels option (CASSANDRA-18140)
 * Use checked casts when reading vints as ints (CASSANDRA-18099)
 * Add Mutation Serialization Caching (CASSANDRA-17998)
 * Only reload compaction strategies if disk boundaries change (CASSANDRA-17874)
 * CEP-10: Simulator Java11 Support (CASSANDRA-17178)
 * Set the major compaction type correctly for compactionstats (CASSANDRA-18055)
 * Print exception message without stacktrace when nodetool commands fail on probe.getOwnershipWithPort() (CASSANDRA-18079)
 * Add option to print level in nodetool getsstables output (CASSANDRA-18023)
 * Implement a guardrail for not having zero default_time_to_live on tables with TWCS (CASSANDRA-18042)
 * Add CQL scalar functions for collection aggregation (CASSANDRA-18060)
 * Make cassandra.replayList property for CommitLogReplayer possible to react on keyspaces only (CASSANDRA-18044)
 * Add Mathematical functions (CASSANDRA-17221)
 * Make incremental backup configurable per table (CASSANDRA-15402)
 * Change shebangs of Python scripts to resolve Python 3 from env command (CASSANDRA-17832)
 * Add reasons to guardrail messages and consider guardrails in the error message for needed ALLOW FILTERING (CASSANDRA-17967)
 * Add support for CQL functions on collections, tuples and UDTs (CASSANDRA-17811)
 * Add flag to exclude nodes from local DC when running nodetool rebuild (CASSANDRA-17870)
 * Adding endpoint verification option to client_encryption_options (CASSANDRA-18034)
 * Replace 'wcwidth.py' with pypi module (CASSANDRA-17287)
 * Add nodetool forcecompact to remove tombstoned or ttl'd data ignoring GC grace for given table and partition keys (CASSANDRA-17711)
 * Offer IF (NOT) EXISTS in cqlsh completion for CREATE TYPE, DROP TYPE, CREATE ROLE and DROP ROLE (CASSANDRA-16640)
 * Nodetool bootstrap resume will now return an error if the operation fails (CASSANDRA-16491)
 * Disable resumable bootstrap by default (CASSANDRA-17679)
 * Include Git SHA in --verbose flag for nodetool version (CASSANDRA-17753)
 * Update Byteman to 4.0.20 and Jacoco to 0.8.8 (CASSANDRA-16413)
 * Add memtable option among possible tab completions for a table (CASSANDRA-17982)
 * Adds a trie-based memtable implementation (CASSANDRA-17240)
 * Further improves precision of memtable heap tracking (CASSANDRA-17240)
 * Fix formatting of metrics documentation (CASSANDRA-17961)
 * Keep sstable level when streaming for decommission and move (CASSANDRA-17969)
 * Add Unavailables metric for CASWrite in the docs (CASSANDRA-16357)
 * Make Cassandra logs able to be viewed in the virtual table system_views.system_logs (CASSANDRA-17946)
 * IllegalArgumentException in Gossiper#order due to concurrent mutations to elements being applied (CASSANDRA-17908)
 * Include estimated active compaction remaining write size when starting a new compaction (CASSANDRA-17931)
 * Mixed mode support for internode authentication during TLS upgrades (CASSANDRA-17923)
 * Revert Mockito downgrade from CASSANDRA-17750 (CASSANDRA-17496)
 * Add --older-than and --older-than-timestamp options for nodetool clearsnapshots (CASSANDRA-16860)
 * Fix "open RT bound as its last item" exception (CASSANDRA-17810)
 * Fix leak of non-standard Java types in JMX MBeans `org.apache.cassandra.db:type=StorageService`
   and `org.apache.cassandra.db:type=RepairService` as clients using JMX cannot handle them. More details in NEWS.txt (CASSANDRA-17668)
 * Deprecate Throwables.propagate usage (CASSANDRA-14218)
 * Allow disabling hotness persistence for high sstable counts (CASSANDRA-17868)
 * Prevent NullPointerException when changing neverPurgeTombstones from true to false (CASSANDRA-17897)
 * Add metrics around storage usage and compression (CASSANDRA-17898)
 * Remove usage of deprecated javax certificate classes (CASSANDRA-17867)
 * Make sure preview repairs don't optimise streams unless configured to (CASSANDRA-17865)
 * Optionally avoid hint transfer during decommission (CASSANDRA-17808)
 * Make disabling auto snapshot on selected tables possible (CASSANDRA-10383)
 * Introduce compaction priorities to prevent upgrade compaction inability to finish (CASSANDRA-17851)
 * Prevent a user from manually removing ephemeral snapshots (CASSANDRA-17757)
 * Remove dependency on Maven Ant Tasks (CASSANDRA-17750)
 * Update ASM(9.1 to 9.3), Mockito(1.10.10 to 1.12.13) and ByteBuddy(3.2.4 to 4.7.0) (CASSANDRA-17835)
 * Add the ability for operators to loosen the definition of "empty" for edge cases (CASSANDRA-17842)
 * Fix potential out of range exception on column index downsampling (CASSANDRA-17839)
 * Introduce target directory to vtable output for sstable_tasks and for compactionstats (CASSANDRA-13010)
 * Read/Write/Truncate throw RequestFailure in a race condition with callback timeouts, should return Timeout instead (CASSANDRA-17828)
 * Add ability to log load profiles at fixed intervals (CASSANDRA-17821)
 * Protect against Gossip backing up due to a quarantined endpoint without version information (CASSANDRA-17830)
 * NPE in org.apache.cassandra.cql3.Attributes.getTimeToLive (CASSANDRA-17822)
 * Add guardrail for column size (CASSANDRA-17151)
 * When doing a host replacement, we need to check that the node is a live node before failing with "Cannot replace a live node..." (CASSANDRA-17805)
 * Add support to generate a One-Shot heap dump on unhandled exceptions (CASSANDRA-17795)
 * Rate-limit new client connection auth setup to avoid overwhelming bcrypt (CASSANDRA-17812)
 * DataOutputBuffer#scratchBuffer can use off-heap or on-heap memory as a means to control memory allocations (CASSANDRA-16471)
 * Add ability to read the TTLs and write times of the elements of a collection and/or UDT (CASSANDRA-8877)
 * Removed Python < 2.7 support from formatting.py (CASSANDRA-17694)
 * Cleanup pylint issues with pylexotron.py (CASSANDRA-17779)
 * NPE bug in streaming checking if SSTable is being repaired (CASSANDRA-17801)
 * Users of NativeLibrary should handle lack of JNA appropriately when running in client mode (CASSANDRA-17794)
 * Warn on unknown directories found in system keyspace directory rather than kill node during startup checks (CASSANDRA-17777)
 * Log duplicate rows sharing a partition key found in verify and scrub (CASSANDRA-17789)
 * Add separate thread pool for Secondary Index building so it doesn't block compactions (CASSANDRA-17781)
 * Added JMX call to getSSTableCountPerTWCSBucket for TWCS (CASSANDRA-17774)
 * When doing a host replacement, -Dcassandra.broadcast_interval_ms is used to know when to check the ring but checks that the ring wasn't changed in -Dcassandra.ring_delay_ms, changes to ring delay should not depend on when we publish load stats (CASSANDRA-17776)
 * When bootstrap fails, CassandraRoleManager may attempt to do read queries that fail with "Cannot read from a bootstrapping node", and increments unavailables counters (CASSANDRA-17754)
 * Add guardrail to disallow DROP KEYSPACE commands (CASSANDRA-17767)
 * Remove ephemeral snapshot marker file and introduce a flag to SnapshotManifest (CASSANDRA-16911)
 * Add a virtual table that exposes currently running queries (CASSANDRA-15241)
 * Allow sstableloader to specify table without relying on path (CASSANDRA-16584)
 * Fix TestGossipingPropertyFileSnitch.test_prefer_local_reconnect_on_listen_address (CASSANDRA-17700)
 * Add ByteComparable API (CASSANDRA-6936)
 * Add guardrail for maximum replication factor (CASSANDRA-17500)
 * Increment CQLSH to version 6.2.0 for release 4.2 (CASSANDRA-17646)
 * Adding support to perform certificate based internode authentication (CASSANDRA-17661)
 * Option to disable CDC writes of repaired data (CASSANDRA-17666)
 * When a node is bootstrapping it gets the whole gossip state but applies in random order causing some cases where StorageService will fail causing an instance to not show up in TokenMetadata (CASSANDRA-17676)
 * Add CQLSH command SHOW REPLICAS (CASSANDRA-17577)
 * Add guardrail to allow disabling of SimpleStrategy (CASSANDRA-17647)
 * Change default directory permission to 750 in packaging (CASSANDRA-17470)
 * Adding support for TLS client authentication for internode communication (CASSANDRA-17513)
 * Add new CQL function maxWritetime (CASSANDRA-17425)
 * Add guardrail for ALTER TABLE ADD / DROP / REMOVE column operations (CASSANDRA-17495)
 * Rename DisableFlag class to EnableFlag on guardrails (CASSANDRA-17544)
Merged from 4.0:
 * Partial compaction can resurrect deleted data (CASSANDRA-18507)


4.1.3
Merged from 4.0: 
 * Remove unnecessary shuffling of GossipDigests in Gossiper#makeRandomGossipDigest (CASSANDRA-18546)
Merged from 3.11:
Merged from 3.0:
 * Remove dh_python use in Debian packaging (CASSANDRA-18558)


4.1.2
 * NPE when deserializing malformed collections from client (CASSANDRA-18505)
 * Allow keystore and trustrore passwords to be nullable (CASSANDRA-18124)
 * Return snapshots with dots in their name in nodetool listsnapshots (CASSANDRA-18371)
 * Fix NPE when loading snapshots and data directory is one directory from root (CASSANDRA-18359)
 * Do not submit hints when hinted_handoff_enabled=false (CASSANDRA-18304)
 * Fix COPY ... TO STDOUT behavior in cqlsh (CASSANDRA-18353)
 * Remove six and Py2SaferScanner merge cruft (CASSANDRA-18354)
Merged from 4.0:
 * Improve nodetool enable{audit,fullquery}log (CASSANDRA-18550)
 * Report network cache info in nodetool (CASSANDRa-18400)
 * Partial compaction can resurrect deleted data (CASSANDRA-18507)
 * Allow internal address to change with reconnecting snitches (CASSANDRA-16718)
 * Fix quoting in toCqlString methods of UDTs and aggregates (CASSANDRA-17918)
 * Improve 'Not enough space for compaction' logging messages (CASSANDRA-18260)
 * Incremental repairs fail on mixed IPv4/v6 addresses serializing SyncRequest (CASSANDRA-18474)
 * Deadlock updating sstable metadata if disk boundaries need reloading (CASSANDRA-18443)
 * Fix nested selection of reversed collections (CASSANDRA-17913)
 * Update zstd-jni library to version 1.5.5 (CASSANDRA-18429)
Merged from 3.11:
 * Remove unnecessary String.format invocation in QueryProcessor when getting a prepared statement from cache (CASSANDRA-17202)
 * Fix the capital P usage in the CQL parser (CASSANDRA-17919)
Merged from 3.0:
 * Pass down all contact points to driver for cassandra-stress (CASSANDRA-18025)
 * Validate the existence of a datacenter in nodetool rebuild (CASSANDRA-14319)
 * 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)


4.0.9
 * Update zstd-jni library to version 1.5.5 (CASSANDRA-18429)
 * Backport CASSANDRA-17205 to 4.0 branch - Remove self-reference in SSTableTidier (CASSANDRA-18332)
 * Avoid loading the preferred IP for BulkLoader streaming (CASSANDRA-18370)
 * Fix BufferPool incorrect memoryInUse when putUnusedPortion is used (CASSANDRA-18311)
 * Improve memtable allocator accounting when updating AtomicBTreePartition (CASSANDRA-18125)
 * Update zstd-jni to version 1.5.4-1 (CASSANDRA-18259)
 * Split and order IDEA workspace template VM_PARAMETERS (CASSANDRA-18242)
Merged from 3.11:
 * Fix sstable_count metric missing from tablestats json/yaml output (CASSANDRA-18448)
 * Suppress CVE-2022-45688 (CASSANDRA-18389)
 * Fix Splitter sometimes creating more splits than requested (CASSANDRA-18013)
Merged from 3.0:
 * 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)


4.1.1
 * Deprecate org.apache.cassandra.hadoop code (CASSANDRA-16984)
 * Fix too early schema version change in sysem local table (CASSANDRA-18291)
 * Fix copying of JAR of a trigger to temporary file (CASSANDRA-18264)
 * Fix possible NoSuchFileException when removing a snapshot (CASSANDRA-18211)
 * PaxosPrepare may add instances to the Electorate that are not in gossip (CASSANDRA-18194)
 * Fix PAXOS2_COMMIT_AND_PREPARE_RSP serialisation AssertionError (CASSANDRA-18164)
 * Streaming progress virtual table lock contention can trigger TCP_USER_TIMEOUT and fail streaming (CASSANDRA-18110)
 * Fix perpetual load of denylist on read in cases where denylist can never be loaded (CASSANDRA-18116)
Merged from 4.0:
 * Fix BufferPool incorrect memoryInUse when putUnusedPortion is used (CASSANDRA-18311)
 * Improve memtable allocator accounting when updating AtomicBTreePartition (CASSANDRA-18125)
 * Update zstd-jni to version 1.5.4-1 (CASSANDRA-18259)
 * Split and order IDEA workspace template VM_PARAMETERS (CASSANDRA-18242)
 * Log warning message on aggregation queries without key or on multiple keys (CASSANDRA-18219)
 * Fix the output of FQL dump tool to properly separate entries (CASSANDRA-18215)
 * Add cache type information for maximum memory usage warning message (CASSANDRA-18184)
 * Fix NPE in fqltool dump on null value (CASSANDRA-18113)
 * Improve unit tests performance (CASSANDRA-17427)
 * Connect to listen address when own broadcast address is requested (CASSANDRA-18200)
 * Add safeguard so cleanup fails when node has pending ranges (CASSANDRA-16418)
 * Fix legacy clustering serialization for paging with compact storage (CASSANDRA-17507)
 * Add support for python 3.11 (CASSANDRA-18088)
 * Fix formatting of duration in cqlsh (CASSANDRA-18141)
 * Fix sstable loading of keyspaces named snapshots or backups (CASSANDRA-14013)
 * Avoid ConcurrentModificationException in STCS/DTCS/TWCS.getSSTables (CASSANDRA-17977)
 * Restore internode custom tracing on 4.0's new messaging system (CASSANDRA-17981)
Merged from 3.11:
Merged from 3.0:
 * 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)


4.1.0
 * Fix ContentionStrategy backoff and Clock.waitUntil (CASSANDRA-18086)
Merged from 4.0:
Merged from 3.11:
Merged from 3.0:
 * Fix incorrect resource name in LIST PERMISSION output (CASSANDRA-17848)
 * Suppress CVE-2022-41854 and similar (CASSANDRA-18083)


4.1-rc1
 * Avoid schema mismatch problems on memtable API misconfiguration (CASSANDRA-18040)
 * Start Paxos auto repair in CassandraDaemon (CASSANDRA-18029)
 * Restore streaming_keep_alive_period on the netty control streaming channel (CASSANDRA-17768)
 * Move Schema.FORCE_LOAD_KEYSPACES and Schema.FORCE_LOAD_KEYSPACES_PROP to CassandraRelevantProps (CASSANDRA-17783)
 * Add --resolve-ip option to nodetool gossipinfo (CASSANDRA-17934)
 * Allow pre-V5 global limit on bytes in flight to revert to zero asynchronously in RateLimitingTest (CASSANDRA-17927)
Merged from 4.0:
 * Backport CASSANDRA-17205 to 4.0 branch - Remove self-reference in SSTableTidier (CASSANDRA-18332)
 * Avoid loading the preferred IP for BulkLoader streaming (CASSANDRA-18370)
 * Harden parsing of boolean values in CQL in PropertyDefinitions (CASSANDRA-17878)
 * Fix error message about type hints (CASSANDRA-17915)
 * Fix possible race condition on repair snapshots (CASSANDRA-17955)
 * Fix ASM bytecode version inconsistency (CASSANDRA-17873)
 * Remove empty cq4 files in log directory to not fail the startup of BinLog (CASSANDRA-17933)
 * Fix multiple BufferPool bugs (CASSANDRA-16681)
 * Fix StorageService.getNativeaddress handling of IPv6 addresses (CASSANDRA-17945)
Merged from 3.11:
 * Fix Splitter sometimes creating more splits than requested (CASSANDRA-18013)
 * Suppress CVE-2022-42003 and CVE-2022-42004 (CASSANDRA-17966)
 * Make LongBufferPoolTest insensitive to timing (CASSANDRA-16681)
Merged from 3.0:
 * Fix running Ant rat targets without git (CASSANDRA-17974)
 * 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)


4.1-beta1
 * We should not emit deprecation warning on startup for `key_cache_save_period`, `row_cache_save_period`, `counter_cache_save_period` (CASSANDRA-17904)
 * upsert with adder support is not consistent with numbers and strings in LWT (CASSANDRA-17857)
 * Fix race and return after failing connections (CASSANDRA-17618)
 * Speculative execution threshold unit mismatch (CASSANDRA-17877)
 * Fix BulkLoader to load entireSSTableThrottle and entireSSTableInterDcThrottle (CASSANDRA-17677)
 * Fix a race condition where a keyspace can be oopened while it is being removed (CASSANDRA-17658)
 * DatabaseDescriptor will set the default failure detector during client initialization (CASSANDRA-17782)
 * Avoid initializing schema via SystemKeyspace.getPreferredIP() with the BulkLoader tool (CASSANDRA-17740)
 * Improve JMX methods signatures, fix JMX and config backward compatibility (CASSANDRA-17725)
 * Fix sstable_preemptive_open_interval disabled value. sstable_preemptive_open_interval = null backward compatible with
   sstable_preemptive_open_interval_in_mb = -1 (CASSANDRA-17737)
 * Remove usages of Path#toFile() in the snapshot apparatus (CASSANDRA-17769)
 * Fix Settings Virtual Table to update paxos_variant after startup and rename enable_uuid_sstable_identifiers to
   uuid_sstable_identifiers_enabled as per our config naming conventions (CASSANDRA-17738)
 * index_summary_resize_interval_in_minutes = -1 is equivalent to index_summary_resize_interval being set to null or
   disabled. JMX MBean IndexSummaryManager, setResizeIntervalInMinutes method still takes resizeIntervalInMinutes = -1 for disabled (CASSANDRA-17735)
 * min_tracked_partition_size_bytes parameter from 4.1 alpha1 was renamed to min_tracked_partition_size (CASSANDRA-17733)
 * Remove commons-lang dependency during build runtime (CASSANDRA-17724)
 * Relax synchronization on StreamSession#onError() to avoid deadlock (CASSANDRA-17706)
 * Fix AbstractCell#toString throws MarshalException for cell in collection (CASSANDRA-17695)
 * Add new vtable output option to compactionstats (CASSANDRA-17683)
 * Fix commitLogUpperBound initialization in AbstractMemtableWithCommitlog (CASSANDRA-17587)
 * Fix widening to long in getBatchSizeFailThreshold (CASSANDRA-17650)
 * Fix widening from mebibytes to bytes in IntMebibytesBound (CASSANDRA-17716)
 * Revert breaking change in nodetool clientstats and expose cient options through nodetool clientstats --client-options. (CASSANDRA-17715)
 * Fix missed nowInSec values in QueryProcessor (CASSANDRA-17458)
 * Revert removal of withBufferSizeInMB(int size) in CQLSSTableWriter.Builder class and deprecate it in favor of withBufferSizeInMiB(int size) (CASSANDRA-17675)
 * Remove expired snapshots of dropped tables after restart (CASSANDRA-17619)
Merged from 4.0:
 * Mitigate direct buffer memory OOM on replacements (CASSANDRA-17895)
 * Fix repair failure on assertion if two peers have overlapping mismatching ranges (CASSANDRA-17900)
 * Better handle null state in Gossip schema migration to avoid NPE (CASSANDRA-17864)
 * HintedHandoffAddRemoveNodesTest now accounts for the fact that StorageMetrics.totalHints is not updated synchronously w/ writes (CASSANDRA-16679)
 * Avoid getting hanging repairs due to repair message timeouts (CASSANDRA-17613)
 * Prevent infinite loop in repair coordinator on FailSession (CASSANDRA-17834)
 * Fix race condition on updating cdc size and advancing to next segment (CASSANDRA-17792)
 * Add 'noboolean' rpm build for older distros like CentOS7 (CASSANDRA-17765)
 * Fix default value for compaction_throughput_mb_per_sec in Config class to match  the one in cassandra.yaml (CASSANDRA-17790)
 * Fix Setting Virtual Table - update after startup config properties gc_log_threshold_in_ms, gc_warn_threshold_in_ms,
   conf.index_summary_capacity_in_mb, prepared_statements_cache_size_mb, key_cache_size_in_mb, counter_cache_size_in_mb
   (CASSANDRA-17737)
 * Fix Settings Virtual Table - index_summary_resize_interval and index_summary_capacity were not updated after startup (CASSANDRA-17735)
 * Clean up ScheduledExecutors, CommitLog, and MessagingService shutdown for in-JVM dtests (CASSANDRA-17731)
 * Remove extra write to system table for prepared statements (CASSANDRA-17764)
 * SSL storage port in sstableloader is deprecated (CASSANDRA-17602)
 * Fix counter write timeouts at ONE (CASSANDRA-17411)
 * Fix NPE in getLocalPrimaryRangeForEndpoint (CASSANDRA-17680)
 * Allow Java 11 to satisfy RPM/Debian packaging (CASSANDRA-17669)
 * Ensure FileStreamTask cannot compromise shared channel proxy for system table when interrupted (CASSANDRA-17663)
 * silence benign SslClosedEngineException (CASSANDRA-17565)
Merged from 3.11:
 * Fix potential IndexOutOfBoundsException in PagingState in mixed mode clusters (CASSANDRA-17840)
 * Document usage of closed token intervals in manual compaction (CASSANDRA-17575)
 * Creating of a keyspace on insufficient number of replicas should filter out gosspping-only members (CASSANDRA-17759)
 * Suppress CVE-2022-25857 and other snakeyaml CVEs (CASSANDRA-17907)
Merged from 3.0:
 * Improve libjemalloc resolution in bin/cassandra (CASSANDRA-15767)
 * Fix restarting of services on gossipping-only member (CASSANDRA-17752)
 * Fix scrubber falling into infinite loop when the last partition is broken (CASSANDRA-17862)
 * Fix resetting schema (CASSANDRA-17819)


4.1-alpha1
 * Handle config parameters upper bound on startup; Fix auto_snapshot_ttl and paxos_purge_grace_period min unit validations (CASSANDRA-17571)
 * Fix leak of non-standard Java types in our Exceptions as clients using JMX are unable to handle them.
   Remove useless validation that leads to unnecessary additional read of cassandra.yaml on startup (CASSANDRA-17638)
 * Fix repair_request_timeout_in_ms and remove paxos_auto_repair_threshold_mb (CASSANDRA-17557)
 * Incremental repair leaks SomeRepairFailedException after switch away from flatMap (CASSANDRA-17620)
 * StorageService read threshold get methods throw NullPointerException due to not handling null configs (CASSANDRA-17593)
 * Rename truncate_drop guardrail to drop_truncate_table (CASSANDRA-17592)
 * nodetool enablefullquerylog can NPE when directory has no files (CASSANDRA-17595)
 * Add auto_snapshot_ttl configuration (CASSANDRA-16790)
 * List snapshots of dropped tables (CASSANDRA-16843)
 * Add information whether sstables are dropped to SchemaChangeListener (CASSANDRA-17582)
 * Add a pluggable memtable API (CEP-11 / CASSANDRA-17034)
 * Save sstable id as string in activity table (CASSANDRA-17585)
 * Implement startup check to prevent Cassandra to potentially spread zombie data (CASSANDRA-17180)
 * Allow failing startup on duplicate config keys (CASSANDRA-17379)
 * Migrate threshold for minimum keyspace replication factor to guardrails (CASSANDRA-17212)
 * Add guardrail to disallow TRUNCATE and DROP TABLE commands (CASSANDRA-17558)
 * Add plugin support for CQLSH (CASSANDRA-16456)
 * Add guardrail to disallow querying with ALLOW FILTERING (CASSANDRA-17370)
 * Enhance SnakeYAML properties to be reusable outside of YAML parsing, support camel case conversion to snake case, and add support to ignore properties (CASSANDRA-17166)
 * nodetool compact should support using a key string to find the range to avoid operators having to manually do this (CASSANDRA-17537)
 * Add guardrail for data disk usage (CASSANDRA-17150)
 * Tool to list data paths of existing tables (CASSANDRA-17568)
 * Migrate track_warnings to more standard naming conventions and use latest configuration types rather than long (CASSANDRA-17560)
 * Add support for CONTAINS and CONTAINS KEY in conditional UPDATE and DELETE statement (CASSANDRA-10537)
 * Migrate advanced config parameters to the new Config types (CASSANDRA-17431)
 * Make null to be meaning disabled and leave 0 as a valid value for permissions_update_interval, roles_update_interval, credentials_update_interval (CASSANDRA-17431)
 * Fix typo in Config annotation (CASSANDRA-17431)
 * Made Converters type safe and fixed a few cases where converters used the wrong type (CASSANDRA-17431)
 * Fix null bug in DataStorageSpec and DurationSpec and require units to be added when providing 0 value (CASSANDRA-17431)
 * Shutdown ScheduledExecutors as part of node drainage (CASSANDRA-17493)
 * Provide JMX endpoint to allow transient logging of blocking read repairs (CASSANDRA-17471)
 * Add guardrail for GROUP BY queries (CASSANDRA-17509)
 * make pylib PEP and pylint compliant (CASSANDRA-17546)
 * Add support for vnodes in jvm-dtest (CASSANDRA-17332)
 * Remove guardrails global enable flag (CASSANDRA-17499)
 * Clients using JMX are unable to handle non-standard java types but we leak this into our interfaces (CASSANDRA-17527)
 * Remove stress server functionality (CASSANDRA-17535)
 * Reduce histogram snapshot long[] allocation overhead during speculative read and write threshold updates (CASSANDRA-17523)
 * Add guardrail for creation of secondary indexes (CASSANDRA-17498)
 * Add guardrail to disallow creation of uncompressed tables (CASSANDRA-17504)
 * Add guardrail to disallow creation of new COMPACT STORAGE tables (CASSANDRA-17522)
 * repair vtables should expose a completed field due to lack of filtering options in CQL (CASSANDRA-17520)
 * remove outdated code from cqlsh (CASSANDRA-17490)
 * remove support for deprecated version specific TLS in Python 3.6 (CASSANDRA-17365)
 * Add support for IF EXISTS and IF NOT EXISTS in ALTER statements (CASSANDRA-16916)
 * resolve several pylint issues in cqlsh.py and pylib (CASSANDRA-17480)
 * Streaming sessions longer than 3 minutes fail with timeout (CASSANDRA-17510)
 * Add ability to track state in repair (CASSANDRA-15399)
 * Remove unused 'parse' module (CASSANDRA-17484)
 * change six functions in cqlshlib to native Python 3 (CASSANDRA-17417)
 * reduce hot-path object allocations required to record local/remote requests against the client request metrics (CASSANDRA-17424)
 * Disallow removing DC from system_auth while nodes are active in the DC (CASSANDRA-17478)
 * Add guardrail for the number of fields per UDT (CASSANDRA-17385)
 * Allow users to change cqlsh history location using env variable (CASSANDRA-17448)
 * Add required -f option to use nodetool verify and standalone sstableverify (CASSANDRA-17017)
 * Add support for UUID based sstable generation identifiers (CASSANDRA-17048)
 * Log largest memtable flush at info instead of debug (CASSANDRA-17472)
 * Add native transport rate limiter options to example cassandra.yaml, and expose metric for dispatch rate (CASSANDRA-17423)
 * Add diagnostic events for guardrails (CASSANDRA-17197)
 * Pre hashed passwords in CQL (CASSANDRA-17334)
 * Increase cqlsh version (CASSANDRA-17432)
 * Update SUPPORTED_UPGRADE_PATHS to include 3.0 and 3.x to 4.1 paths and remove obsolete tests (CASSANDRA-17362)
 * Support DELETE in CQLSSTableWriter (CASSANDRA-14797)
 * Failed inbound internode authentication failures generate ugly warning with stack trace (CASSANDRA-17068)
 * Expose gossip information in system_views.gossip_info virtual table (CASSANDRA-17002)
 * Add guardrails for collection items and size (CASSANDRA-17153)
 * Improve guardrails messages (CASSANDRA-17430)
 * Remove all usages of junit.framework and ban them via Checkstyle (CASSANDRA-17316)
 * Add guardrails for read/write consistency levels (CASSANDRA-17188)
 * Add guardrail for SELECT IN terms and their cartesian product (CASSANDRA-17187)
 * remove unused imports in cqlsh.py and cqlshlib (CASSANDRA-17413)
 * deprecate property windows_timer_interval (CASSANDRA-17404)
 * Expose streaming as a vtable (CASSANDRA-17390)
 * Expose all client options via system_views.clients and nodetool clientstats (CASSANDRA-16378)
 * Make startup checks configurable (CASSANDRA-17220)
 * Add guardrail for number of partition keys on IN queries (CASSANDRA-17186)
 * update Python test framework from nose to pytest (CASSANDRA-17293)
 * Fix improper CDC commit log segments deletion in non-blocking mode (CASSANDRA-17233)
 * Add support for string concatenations through the + operator (CASSANDRA-17190)
 * Limit the maximum hints size per host (CASSANDRA-17142)
 * Add a virtual table for exposing batch metrics (CASSANDRA-17225)
 * Flatten guardrails config (CASSANDRA-17353)
 * Instance failed to start up due to NPE in StartupClusterConnectivityChecker (CASSANDRA-17347)
 * add the shorter version of version flag (-v) in cqlsh (CASSANDRA-17236)
 * Make vtables accessible via internode messaging (CASSANDRA-17295)
 * Add support for PEM based key material for SSL (CASSANDRA-17031)
 * Standardize storage configuration parameters' names. Support unit suffixes. (CASSANDRA-15234)
 * Remove support for Windows (CASSANDRA-16956)
 * Runtime-configurable YAML option to prohibit USE statements (CASSANDRA-17318)
 * When streaming sees a ClosedChannelException this triggers the disk failure policy (CASSANDRA-17116)
 * Add a virtual table for exposing prepared statements metrics (CASSANDRA-17224)
 * Remove python 2.x support from cqlsh (CASSANDRA-17242)
 * Prewarm role and credential caches to avoid timeouts at startup (CASSANDRA-16958)
 * Make capacity/validity/updateinterval/activeupdate for Auth Caches configurable via nodetool (CASSANDRA-17063)
 * Added startup check for read_ahead_kb setting (CASSANDRA-16436)
 * Avoid unecessary array allocations and initializations when performing query checks (CASSANDRA-17209)
 * Add guardrail for list operations that require read before write (CASSANDRA-17154)
 * Migrate thresholds for number of keyspaces and tables to guardrails (CASSANDRA-17195)
 * Remove self-reference in SSTableTidier (CASSANDRA-17205)
 * Add guardrail for query page size (CASSANDRA-17189)
 * Allow column_index_size_in_kb to be configurable through nodetool (CASSANDRA-17121)
 * Emit a metric for number of local read and write calls
 * Add non-blocking mode for CDC writes (CASSANDRA-17001)
 * Add guardrails framework (CASSANDRA-17147)
 * Harden resource management on SSTable components to prevent future leaks (CASSANDRA-17174)
 * Make nodes more resilient to local unrelated files during startup (CASSANDRA-17082)
 * repair prepare message would produce a wrong error message if network timeout happened rather than reply wait timeout (CASSANDRA-16992)
 * Log queries that fail on timeout or unavailable errors up to once per minute by default (CASSANDRA-17159)
 * Refactor normal/preview/IR repair to standardize repair cleanup and error handling of failed RepairJobs (CASSANDRA-17069)
 * Log missing peers in StartupClusterConnectivityChecker (CASSANDRA-17130)
 * Introduce separate rate limiting settings for entire SSTable streaming (CASSANDRA-17065)
 * Implement Virtual Tables for Auth Caches (CASSANDRA-16914)
 * Actively update auth cache in the background (CASSANDRA-16957)
 * Add unix time conversion functions (CASSANDRA-17029)
 * JVMStabilityInspector.forceHeapSpaceOomMaybe should handle all non-heap OOMs rather than only supporting direct only (CASSANDRA-17128)
 * Forbid other Future implementations with checkstyle (CASSANDRA-17055)
 * commit log was switched from non-daemon to daemon threads, which causes the JVM to exit in some case as no non-daemon threads are active (CASSANDRA-17085)
 * Add a Denylist to block reads and writes on specific partition keys (CASSANDRA-12106)
 * v4+ protocol did not clean up client warnings, which caused leaking the state (CASSANDRA-17054)
 * Remove duplicate toCQLString in ReadCommand (CASSANDRA-17023)
 * Ensure hint window is persistent across restarts of a node (CASSANDRA-14309)
 * Allow to GRANT or REVOKE multiple permissions in a single statement (CASSANDRA-17030)
 * Allow to grant permission for all tables in a keyspace (CASSANDRA-17027)
 * Log time spent writing keys during compaction (CASSANDRA-17037)
 * Make nodetool compactionstats and sstable_tasks consistent (CASSANDRA-16976)
 * Add metrics and logging around index summary redistribution (CASSANDRA-17036)
 * Add configuration options for minimum allowable replication factor and default replication factor (CASSANDRA-14557)
 * Expose information about stored hints via a nodetool command and a virtual table (CASSANDRA-14795)
 * Add broadcast_rpc_address to system.local (CASSANDRA-11181)
 * Add support for type casting in WHERE clause components and in the values of INSERT/UPDATE statements (CASSANDRA-14337)
 * add credentials file support to CQLSH (CASSANDRA-16983)
 * Skip remaining bytes in the Envelope buffer when a ProtocolException is thrown to avoid double decoding (CASSANDRA-17026)
 * Allow reverse iteration of resources during permissions checking (CASSANDRA-17016)
 * Add feature to verify correct ownership of attached locations on disk at startup (CASSANDRA-16879)
 * Make SSLContext creation pluggable/extensible (CASSANDRA-16666)
 * Add soft/hard limits to local reads to protect against reading too much data in a single query (CASSANDRA-16896)
 * Avoid token cache invalidation for removing a non-member node (CASSANDRA-15290)
 * Allow configuration of consistency levels on auth operations (CASSANDRA-12988)
 * Add number of sstables in a compaction to compactionstats output (CASSANDRA-16844)
 * Upgrade Caffeine to 2.9.2 (CASSANDRA-15153)
 * Allow DELETE and TRUNCATE to work on Virtual Tables if the implementation allows it (CASSANDRA-16806)
 * Include SASI components to snapshots (CASSANDRA-15134)
 * Fix missed wait latencies in the output of `nodetool tpstats -F` (CASSANDRA-16938)
 * Reduce native transport max frame size to 16MB (CASSANDRA-16886)
 * Add support for filtering using IN restrictions (CASSANDRA-14344)
 * Provide a nodetool command to invalidate auth caches (CASSANDRA-16404)
 * Catch read repair timeout exceptions and add metric (CASSANDRA-16880)
 * Exclude Jackson 1.x transitive dependency of hadoop* provided dependencies (CASSANDRA-16854)
 * Add client warnings and abort to tombstone and coordinator reads which go past a low/high watermark (CASSANDRA-16850)
 * Add TTL support to nodetool snapshots (CASSANDRA-16789)
 * Allow CommitLogSegmentReader to optionally skip sync marker CRC checks (CASSANDRA-16842)
 * allow blocking IPs from updating metrics about traffic (CASSANDRA-16859)
 * Request-Based Native Transport Rate-Limiting (CASSANDRA-16663)
 * Implement nodetool getauditlog command (CASSANDRA-16725)
 * Clean up repair code (CASSANDRA-13720)
 * Background schedule to clean up orphaned hints files (CASSANDRA-16815)
 * Modify SecondaryIndexManager#indexPartition() to retrieve only columns for which indexes are actually being built (CASSANDRA-16776)
 * Batch the token metadata update to improve the speed (CASSANDRA-15291)
 * Reduce the log level on "expected" repair exceptions (CASSANDRA-16775)
 * Make JMXTimer expose attributes using consistent time unit (CASSANDRA-16760)
 * Remove check on gossip status from DynamicEndpointSnitch::updateScores (CASSANDRA-11671)
 * Fix AbstractReadQuery::toCQLString not returning valid CQL (CASSANDRA-16510)
 * Log when compacting many tombstones (CASSANDRA-16780)
 * Display bytes per level in tablestats for LCS tables (CASSANDRA-16799)
 * Add isolated flush timer to CommitLogMetrics and ensure writes correspond to single WaitingOnCommit data points (CASSANDRA-16701)
 * GossiperTest.testHasVersion3Nodes didn't take into account trunk version changes, fixed to rely on latest version (CASSANDRA-16651)
 * Update JNA library to 5.9.0 and snappy-java to version 1.1.8.4 (CASSANDRA-17040)
Merged from 4.0:
 * Utilise BTree improvements to reduce garbage and improve throughput (CASSANDRA-15511)
Merged from 3.11:
Merged from 3.0:
 * Fix writetime and ttl functions forbidden for collections instead of multicell columns (CASSANDRA-17628)
 * 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)


4.0.4
 * Optimise BTree build,update and transform operations (CASSANDRA-15510)
 * Clean up schema migration coordinator and tests (CASSANDRA-17533)
 * Shut repair task executor down without interruption to avoid compromising shared channel proxies (CASSANDRA-17466)
 * Generate valid KEYSPACE / MATERIALIZED VIEW for CQL for views (CASSANDRA-17266)
 * Fix timestamp tz parsing (CASSANDRA-17467)
 * Suppress CVE-2021-44521 from driver (CASSANDRA-17459)
 * Upgrade jackson to 2.13.2 (CASSANDRA-17460)
 * Make sstableloader honour native port option (CASSANDRA-17210)
 * Reject snapshot names with special character (CASSANDRA-15297)
 * Fix ObjectSizes implementation and usages (CASSANDRA-17402)
 * Fix race condition bug during local session repair (CASSANDRA-17335)
 * Fix ignored streaming encryption settings in sstableloader (CASSANDRA-17367)
 * Streaming tasks handle empty SSTables correctly (CASSANDRA-16349)
 * Prevent SSTableLoader from doing unnecessary work (CASSANDRA-16349)
Merged from 3.11:
 * Upgrade jackson-databind to 2.13.2.2 (CASSANDRA-17556)
 * Upgrade slf4j to 1.7.25 (CASSANDRA-17474)
 * Upgrade jackson to 2.13.2 (CASSANDRA-17492)
 * emit warning on keyspace creation when replication factor is bigger than the number of nodes (CASSANDRA-16747)
 * Fix snapshot true size calculation (CASSANDRA-17267)
 * Validate existence of DCs when repairing (CASSANDRA-17407)
 * dropping of a materialized view creates a snapshot with dropped- prefix (CASSANDRA-17415)
Merged from 3.0:
 * fsync TOC and digest files (CASSANDRA-10709)
 * 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)
 * Suppress inapplicable CVEs (CASSANDRA-17368)
 * Fix flaky test - test_cqlsh_completion.TestCqlshCompletion (CASSANDRA-17338)
 * Fixed TestCqlshOutput failing tests (CASSANDRA-17386)
 * Lazy transaction log replica creation allows incorrect replica content divergence during anticompaction (CASSANDRA-17273)
 * LeveledCompactionStrategy disk space check improvements (CASSANDRA-17272)


4.0.3
 * Deprecate otc_coalescing_strategy, otc_coalescing_window_us, otc_coalescing_enough_coalesced_messages,
   otc_backlog_expiration_interval_ms (CASSANDRA-17377)
 * Improve start up processing of Incremental Repair information read from system.repairs (CASSANDRA-17342)
 * Extend operator control over the UDF threading model for CVE-2021-44521 (CASSANDRA-17352)
 * Full Java 11 support (CASSANDRA-16894)
 * Remove unused 'geomet' package from cqlsh path (CASSANDRA-17271)
 * Removed unused 'cql' dependency (CASSANDRA-17247)
 * Don't block gossip when clearing repair snapshots (CASSANDRA-17168)
 * Deduplicate warnings for deprecated parameters (changed names) (CASSANDRA-17160)
 * Update ant-junit to version 1.10.12 (CASSANDRA-17218)
 * Add droppable tombstone metrics to nodetool tablestats (CASSANDRA-16308)
 * Fix disk failure triggered when enabling FQL on an unclean directory (CASSANDRA-17136)
 * Fixed broken classpath when multiple jars in build directory (CASSANDRA-17129)
 * DebuggableThreadPoolExecutor does not propagate client warnings (CASSANDRA-17072)
 * internode_send_buff_size_in_bytes and internode_recv_buff_size_in_bytes have new names. Backward compatibility with the old names added (CASSANDRA-17141)
 * Remove unused configuration parameters from cassandra.yaml (CASSANDRA-17132)
 * Queries performed with NODE_LOCAL consistency level do not update request metrics (CASSANDRA-17052)
 * Fix multiple full sources can be select unexpectedly for bootstrap streaming (CASSANDRA-16945)
 * Fix cassandra.yaml formatting of parameters (CASSANDRA-17131)
 * Add backward compatibility for CQLSSTableWriter Date fields (CASSANDRA-17117)
 * Push initial client connection messages to trace (CASSANDRA-17038)
 * Correct the internode message timestamp if sending node has wrapped (CASSANDRA-16997)
 * Avoid race causing us to return null in RangesAtEndpoint (CASSANDRA-16965)
 * Avoid rewriting all sstables during cleanup when transient replication is enabled (CASSANDRA-16966)
 * Prevent CQLSH from failure on Python 3.10 (CASSANDRA-16987)
 * Avoid trying to acquire 0 permits from the rate limiter when taking snapshot (CASSANDRA-16872)
 * Remove all the state pollution between tests in SSTableReaderTest (CASSANDRA-16888)
 * Delay auth setup until after gossip has settled to avoid unavailables on startup (CASSANDRA-16783)
 * org.apache.cassandra.db.rows.ArrayCell#unsharedHeapSizeExcludingData includes data twice (CASSANDRA-16900)
 * Fix clustering order logic in CREATE MATERIALIZED VIEW (CASSANDRA-16898)
 * Exclude Jackson 1.x transitive dependency of hadoop* provided dependencies (CASSANDRA-16854)
 * Tolerate missing DNS entry when completing a host replacement (CASSANDRA-16873)
 * Harden PrunableArrayQueue against Pruner implementations that might throw exceptions (CASSANDRA-16866)
 * Move RepairedDataInfo to the execution controller rather than the ReadCommand to avoid unintended sharing (CASSANDRA-16721)
 * Bump zstd-jni version to 1.5.0-4 (CASSANDRA-16884)
 * Remove assumption that all urgent messages are small (CASSANDRA-16877)
 * ArrayClustering.unsharedHeapSize does not include the data so undercounts the heap size (CASSANDRA-16845)
 * Improve help, doc and error messages about sstabledump -k and -x arguments (CASSANDRA-16818)
 * Add repaired/unrepaired bytes back to nodetool (CASSANDRA-15282)
 * Upgrade lz4-java to 1.8.0 to add RH6 support back (CASSANDRA-16753)
 * Improve DiagnosticEventService.publish(event) logging message of events (CASSANDRA-16749)
 * Cleanup dependency scopes (CASSANDRA-16704)
 * Make JmxHistogram#getRecentValues() and JmxTimer#getRecentValues() thread-safe (CASSANDRA-16707)
Merged from 3.11:
 * Upgrade jackson-databind to 2.13.2.2 (CASSANDRA-17556)
 * Upgrade slf4j to 1.7.25 (CASSANDRA-17474)
 * Upgrade jackson to 2.13.2 (CASSANDRA-17492)
 * emit warning on keyspace creation when replication factor is bigger than the number of nodes (CASSANDRA-16747)
 * Fix snapshot true size calculation (CASSANDRA-17267)
 * dropping of a materialized view creates a snapshot with dropped- prefix (CASSANDRA-17415)
 * Validate existence of DCs when repairing (CASSANDRA-17407)
 * Add key validation to ssstablescrub (CASSANDRA-16969)
 * Update Jackson from 2.9.10 to 2.12.5 (CASSANDRA-16851)
 * Make assassinate more resilient to missing tokens (CASSANDRA-16847)
 * Validate SASI tokenizer options before adding index to schema (CASSANDRA-15135)
 * Fixup scrub output when no data post-scrub and clear up old use of row, which really means partition (CASSANDRA-16835)
 * Reduce thread contention in CommitLogSegment and HintsBuffer (CASSANDRA-16072)
 * Make cqlsh use the same set of reserved keywords than the server uses (CASSANDRA-15663)
 * Optimize bytes skipping when reading SSTable files (CASSANDRA-14415)
 * Enable tombstone compactions when unchecked_tombstone_compaction is set in TWCS (CASSANDRA-14496)
 * Read only the required SSTables for single partition queries (CASSANDRA-16737)
Merged from 3.0:
 * 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)
 * Suppress inapplicable CVEs (CASSANDRA-17368)
 * Fix flaky test - test_cqlsh_completion.TestCqlshCompletion (CASSANDRA-17338)
 * Fixed TestCqlshOutput failing tests (CASSANDRA-17386)
 * Lazy transaction log replica creation allows incorrect replica content divergence during anticompaction (CASSANDRA-17273)
 * LeveledCompactionStrategy disk space check improvements (CASSANDRA-17272)
 * 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)
 * Make the addition of regular column to COMPACT tables throw an InvalidRequestException (CASSANDRA-14564)
 * Fix secondary indexes on primary key columns skipping some writes (CASSANDRA-16868)
 * 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)
 * 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)
 * Clean transaction log leftovers at the beginning of sstablelevelreset and sstableofflinerelevel (CASSANDRA-12519)


4.0.0
 * Avoid signaling DigestResolver until the minimum number of responses are guaranteed to be visible (CASSANDRA-16807)
 * Fix pre-4.0 FWD_FRM parameter serializer (CASSANDRA-16808)
 * Fix fwd to/from headers in DC write forwarding (CASSANDRA-16797)
 * Fix CassandraVersion::compareTo (CASSANDRA-16794)
 * BinLog does not close chronicle queue leaving this to GC to cleanup (CASSANDRA-16774)


4.0-rc2
 * Improved password obfuscation (CASSANDRA-16801)
 * Avoid memoizing the wrong min cluster version during upgrades (CASSANDRA-16759)
 * Obfuscate passwords in statements in QueryEvents (CASSANDRA-16669)
 * Fix queries on empty partitions with static data (CASSANDRA-16686)
 * Keep python driver in artifacts (CASSANDRA-16700)
 * Improve AuditLogging documentation and logback.xml(CASSANDRA-16682)
 * Spin up SEPWorker threads whenever we grow the number of work permits(CASSANDRA-16668)
 * Add a warning to cqlsh 6.0.0 that DESCRIBE does not work with a Cassandra 3.x servers (CASSANDRA-16652)
 * cqlsh: fix DESC TYPE with non-ascii character in the identifier (CASSANDRA-16400)
 * Remove drivers dependency and bring cql_keywords_reserved on server side (CASSANDRA-16659)
 * Fix in-browser "help", Python 3 (CASSANDRA-16658)
 * Fix DROP COMPACT STORAGE for counters (CASSANDRA-16653)
 * Add back validation for AlterTableStatements (CASSANDRA-16643)
 * Fix cqlsh encoding error with unicode in multi-line statement (CASSANDRA-16539)
 * Fix race in fat client removal (CASSANDRA-16238)
 * Test org.apache.cassandra.net.AsyncPromiseTest FAILED (CASSANDRA-16596)
Merged from 3.11:
 * Fix LeveledCompactionStrategy compacts last level throw an ArrayIndexOutOfBoundsException (CASSANDRA-15669)
 * Maps $CASSANDRA_LOG_DIR to cassandra.logdir java property when executing nodetool (CASSANDRA-16199)
 * Nodetool garbagecollect should retain SSTableLevel for LCS (CASSANDRA-16634)
 * Ignore stale acks received in the shadow round (CASSANDRA-16588)
Merged from 3.0:
 * 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)
 * CQL shell should prefer newer TLS version by default (CASSANDRA-16695)
 * Ensure that existing empty rows are properly returned (CASSANDRA-16671)
 * 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 a node (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)


4.0-rc1
 * Allow for setting buffer max capacity to increase it dynamically as needed (CASSANDRA-16524)
 * Harden internode message resource limit accounting against serialization failures (CASSANDRA-16616)
 * Add back the source release of python driver in tree to avoid fetching from GitHub APIs (CASSANDRA-16599)
 * Fix false unavailable for queries due to cluster topology changes (CASSANDRA-16545)
 * Fixed a race condition issue in nodetool repair where we poll for the error before seeing the error notification, leading to a less meaningful message (CASSANDRA-16585)
 * Fix mixed cluster GROUP BY queries (CASSANDRA-16582)
 * Upgrade jflex to 1.8.2 (CASSANDRA-16576)
 * Binary releases no longer bundle the apidocs (javadoc) (CASSANDRA-15561)
 * Fix Streaming Repair metrics (CASSANDRA-16190)
 * Scheduled (delayed) schema pull tasks should not run after MIGRATION stage shutdown during decommission (CASSANDRA-16495)
 * When behind a firewall trunk is not buildable, need to allow overriding URLs (CASSANDRA-16563)
 * Make sure sstables with moved starts are removed correctly in LeveledGenerations (CASSANDRA-16552)
 * Fix race between secondary index building and active compactions tracking (CASSANDRA-16554)
 * Migrate dependency handling from maven-ant-tasks to resolver-ant-tasks, removing lib/ directory from version control (CASSANDRA-16391)
 * Fix 4.0 node sending a repair prepare message to a 3.x node breaking the connection (CASSANDRA-16542)
 * Removed synchronized modifier from StreamSession#onChannelClose to prevent deadlocking on flush (CASSANDRA-15892)
 * Throw IOE in AbstractType.writeValue if value has wrong fixed length (CASSANDRA-16500)
 * Execute background refreshing of auth caches on a dedicated executor (CASSANDRA-15177)
 * Update bundled java and python drivers to 3.11.0 and 3.25.0 respectively (CASSANDRA-13951)
 * Add io.netty.tryReflectionSetAccessible=true to j11 server options in order to enable netty to use Unsafe direct byte buffer construction (CASSANDRA-16493)
 * Make cassandra-stress -node support host:port notation (CASSANDRA-16529)
 * Better handle legacy gossip application states during (and after) upgrades (CASSANDRA-16525)
 * Mark StreamingMetrics.ActiveOutboundStreams as deprecated (CASSANDRA-11174)
 * Increase the cqlsh version number (CASSANDRA-16509)
 * Fix the CQL generated for the views.where_clause column when some identifiers require quoting (CASSANDRA-16479)
 * Send FAILED_SESSION_MSG on shutdown and on in-progress repairs during startup (CASSANDRA-16425)
 * Reinstate removed ApplicationState padding (CASSANDRA-16484)
 * Expose data dirs to ColumnFamilyStoreMBean (CASSANDRA-16335)
 * Add possibility to copy SSTables in SSTableImporter instead of moving them (CASSANDRA-16407)
 * Fix DESCRIBE statement for CUSTOM indices with options (CASSANDRA-16482)
 * Fix cassandra-stress JMX connection (CASSANDRA-16473)
 * Avoid processing redundant application states on endpoint changes (CASSANDRA-16381)
 * Prevent parent repair sessions leak (CASSANDRA-16446)
 * Fix timestamp issue in SinglePartitionSliceCommandTest testPartitionD…eletionRowDeletionTie (CASSANDRA-16443)
 * Promote protocol V5 out of beta (CASSANDRA-14973)
 * Fix incorrect encoding for strings can be UTF8 (CASSANDRA-16429)
 * Fix node unable to join when RF > N in multi-DC with added warning (CASSANDRA-16296)
 * Add an option to nodetool tablestats to check sstable location correctness (CASSANDRA-16344)
 * Unable to ALTER KEYSPACE while decommissioned/assassinated nodes are in gossip (CASSANDRA-16422)
 * Metrics backward compatibility restored after CASSANDRA-15066 (CASSANDRA-16083)
 * Reduce new reserved keywords introduced since 3.0 (CASSANDRA-16439)
 * Improve system tables handling in case of disk failures (CASSANDRA-14793)
 * Add access and datacenters to unreserved keywords (CASSANDRA-16398)
 * Fix nodetool ring, status output when DNS resolution or port printing are in use (CASSANDRA-16283)
 * Upgrade Jacoco to 0.8.6 (for Java 11 support) (CASSANDRA-16365)
 * Move excessive repair debug loggings to trace level (CASSANDRA-16406)
 * Restore validation of each message's protocol version (CASSANDRA-16374)
 * Upgrade netty and chronicle-queue dependencies to get Auditing and native library loading working on arm64 architectures (CASSANDRA-16384,CASSANDRA-16392)
 * Release StreamingTombstoneHistogramBuilder spool when switching writers (CASSANDRA-14834)
 * Correct memtable on-heap size calculations to match actual use (CASSANDRA-16318)
 * Fix client notifications in CQL protocol v5 (CASSANDRA-16353)
 * Too defensive check when picking sstables for preview repair (CASSANDRA-16284)
 * Ensure pre-negotiation native protocol responses have correct stream id (CASSANDRA-16376)
 * Fix check for -Xlog in cassandra-env.sh (CASSANDRA-16279)
 * SSLFactory should initialize SSLContext before setting protocols (CASSANDRA-16362)
 * Restore sasi dependencies jflex, snowball-stemmer, and concurrent-trees, in the cassandra-all pom (CASSANDRA-16303)
 * Fix DecimalDeserializer#toString OOM (CASSANDRA-14925)
Merged from 3.11:
 * Add autocomplete and error messages for provide_overlapping_tombstones (CASSANDRA-16350)
 * Upgrade jackson-databind to 2.9.10.8 (CASSANDRA-16462)
 * Fix digest computation for queries with fetched but non queried columns (CASSANDRA-15962)
 * Reduce amount of allocations during batch statement execution (CASSANDRA-16201)
 * Update jflex-1.6.0.jar to match upstream (CASSANDRA-16393)
Merged from 3.0:
 * Don't wait for schema migrations from removed nodes (CASSANDRA-16577)
 * 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)
 * Update debian packaging for python3 (CASSANDRA-16396)
 * Avoid pushing schema mutations when setting up distributed system keyspaces locally (CASSANDRA-16387)
 * Prevent unbounded number of pending flushing tasks (CASSANDRA-16261)
 * Improve empty hint file handling during startup (CASSANDRA-16162)
 * Fix skipping on pre-3.0 created compact storage sstables due to missing primary key liveness (CASSANDRA-16226)
 * Allow empty string in collections with COPY FROM in cqlsh (CASSANDRA-16372)
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)


4.0-beta4
 * DROP COMPACT STORAGE should invalidate prepared statements still using CompactTableMetadata (CASSANDRA-16361)
 * Update default num_tokens to 16 and allocate_tokens_for_local_replication_factor to 3 (CASSANDRA-13701)
 * Remove use of String.intern() (CASSANDRA-15810)
 * Fix the missing bb position in ByteBufferAccessor.getUnsignedShort (CASSANDRA-16249)
 * Make sure OOM errors are rethrown on truncation failure (CASSANDRA-16254)
 * Send back client warnings when creating too many tables/keyspaces (CASSANDRA-16309)
 * Add dedicated tcp user timeout for streaming connection (CASSANDRA-16143)
 * Add generatetokens script for offline token allocation strategy generation (CASSANDRA-16205)
 * Remove Windows scripts (CASSANDRA-16171)
 * Improve checksumming and compression in protocol V5 (CASSANDRA-15299)
 * Optimised repair streaming improvements (CASSANDRA-16274)
 * Update jctools dependency to 3.1.0 (CASSANDRA-16255)
 * 'SSLEngine closed already' exception on failed outbound connection (CASSANDRA-16277)
 * Drain and/or shutdown might throw because of slow messaging service shutdown (CASSANDRA-16276)
 * Upgrade JNA to 5.6.0, dropping support for <=glibc-2.6 systems (CASSANDRA-16212)
 * Add saved Host IDs to TokenMetadata at startup (CASSANDRA-16246)
 * Ensure that CacheMetrics.requests is picked up by the metric reporter (CASSANDRA-16228)
 * Add a ratelimiter to snapshot creation and deletion (CASSANDRA-13019)
 * Produce consistent tombstone for reads to avoid digest mistmatch (CASSANDRA-15369)
 * Fix SSTableloader issue when restoring a table named backups (CASSANDRA-16235)
 * Invalid serialized size for responses caused by increasing message time by 1ms which caused extra bytes in size calculation (CASSANDRA-16103)
 * Throw BufferOverflowException from DataOutputBuffer for better visibility (CASSANDRA-16214)
 * TLS connections to the storage port on a node without server encryption configured causes java.io.IOException accessing missing keystore (CASSANDRA-16144)
 * Internode messaging catches OOMs and does not rethrow (CASSANDRA-15214)
 * When a table attempts to clean up metrics, it was cleaning up all global table metrics (CASSANDRA-16095)
 * Bring back the accepted encryption protocols list as configurable option (CASSANDRA-13325)
 * DigestResolver.getData throws AssertionError since dataResponse is null (CASSANDRA-16097)
 * Cannot replace_address /X because it doesn't exist in gossip (CASSANDRA-16213)
 * cqlsh row_id resets on page boundaries (CASSANDRA-16160)
Merged from 3.11:
 * SASI's `max_compaction_flush_memory_in_mb` settings over 100GB revert to default of 1GB (CASSANDRA-16071)
Merged from 3.0:
 * 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)
 * Prevent invoking enable/disable gossip when not in NORMAL (CASSANDRA-16146)
 * Raise Dynamic Snitch Default Badness Threshold to 1.0 (CASSANDRA-16285)
Merged from 2.2:
 * Fix the histogram merge of the table metrics (CASSANDRA-16259)


4.0-beta3
 * Segregate Network and Chunk Cache BufferPools and Recirculate Partially Freed Chunks (CASSANDRA-15229)
 * Fail truncation requests when they fail on a replica (CASSANDRA-16208)
 * Move compact storage validation earlier in startup process (CASSANDRA-16063)
 * Fix ByteBufferAccessor cast exceptions are thrown when trying to query a virtual table (CASSANDRA-16155)
 * Consolidate node liveness check for forced repair (CASSANDRA-16113)
 * Use unsigned short in ValueAccessor.sliceWithShortLength (CASSANDRA-16147)
 * Abort repairs when getting a truncation request (CASSANDRA-15854)
 * Remove bad assert when getting active compactions for an sstable (CASSANDRA-15457)
 * Avoid failing compactions with very large partitions (CASSANDRA-15164)
 * Prevent NPE in StreamMessage in type lookup (CASSANDRA-16131)
 * Avoid invalid state transition exception during incremental repair (CASSANDRA-16067)
 * Allow zero padding in timestamp serialization (CASSANDRA-16105)
 * Add byte array backed cells (CASSANDRA-15393)
 * Correctly handle pending ranges with adjacent range movements (CASSANDRA-14801)
 * Avoid adding locahost when streaming trivial ranges (CASSANDRA-16099)
 * Add nodetool getfullquerylog (CASSANDRA-15988)
 * Fix yaml format and alignment in tpstats (CASSANDRA-11402)
 * Avoid trying to keep track of RTs for endpoints we won't write to during read repair (CASSANDRA-16084)
 * When compaction gets interrupted, the exception should include the compactionId (CASSANDRA-15954)
 * Make Table/Keyspace Metric Names Consistent With Each Other (CASSANDRA-15909)
 * Mutating sstable component may race with entire-sstable-streaming(ZCS) causing checksum validation failure (CASSANDRA-15861)
 * NPE thrown while updating speculative execution time if keyspace is removed during task execution (CASSANDRA-15949)
 * Show the progress of data streaming and index build (CASSANDRA-15406)
 * Add flag to disable chunk cache and disable by default (CASSANDRA-16036)
 * Upgrade to snakeyaml >= 1.26 version for CVE-2017-18640 fix (CASSANDRA-16150)
Merged from 3.11:
 * Fix ColumnFilter to avoid querying cells of unselected complex columns (CASSANDRA-15977)
 * Fix memory leak in CompressedChunkReader (CASSANDRA-15880)
 * Don't attempt value skipping with mixed version cluster (CASSANDRA-15833)
 * Use IF NOT EXISTS for index and UDT create statements in snapshot schema files (CASSANDRA-13935)
 * Make sure LCS handles duplicate sstable added/removed notifications correctly (CASSANDRA-14103)
Merged from 3.0:
 * Avoid marking shutting down nodes as up after receiving gossip shutdown message (CASSANDRA-16094)
 * Handle unexpected columns due to schema races (CASSANDRA-15899)
 * 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)
 * Automatically drop compact storage on tables for which it is safe (CASSANDRA-16048)
 * Fixed NullPointerException for COMPACT STORAGE tables with null clustering (CASSANDRA-16241)


4.0-beta2
 * Add addition incremental repair visibility to nodetool repair_admin (CASSANDRA-14939)
 * Always access system properties and environment variables via the new CassandraRelevantProperties and CassandraRelevantEnv classes (CASSANDRA-15876)
 * Remove deprecated HintedHandOffManager (CASSANDRA-15939)
 * Prevent repair from overrunning compaction (CASSANDRA-15817)
 * fix cqlsh COPY functions in Python 3.8 on Mac (CASSANDRA-16053)
 * Strip comment blocks from cqlsh input before processing statements (CASSANDRA-15802)
 * Fix unicode chars error input (CASSANDRA-15990)
 * Improved testability for CacheMetrics and ChunkCacheMetrics (CASSANDRA-15788)
 * Handle errors in StreamSession#prepare (CASSANDRA-15852)
 * FQL replay should have options to ignore DDL statements (CASSANDRA-16039)
 * Remove COMPACT STORAGE internals (CASSANDRA-13994)
 * Make TimestampSerializer accept fractional seconds of varying precision (CASSANDRA-15976)
 * Improve cassandra-stress logging when using a profile file that doesn't exist (CASSANDRA-14425)
 * Improve logging for socket connection/disconnection (CASSANDRA-15980)
 * Throw FSWriteError upon write failures in order to apply DiskFailurePolicy (CASSANDRA-15928)
 * Forbid altering UDTs used in partition keys (CASSANDRA-15933)
 * Fix version parsing logic when upgrading from 3.0 (CASSANDRA-15973)
 * Optimize NoSpamLogger use in hot paths (CASSANDRA-15766)
 * Verify sstable components on startup (CASSANDRA-15945)
 * Resolve JMX output inconsistencies from CASSANDRA-7544 storage-port-configurable-per-node (CASSANDRA-15937)
Merged from 3.11:
 * Correctly interpret SASI's `max_compaction_flush_memory_in_mb` setting in megabytes not bytes (CASSANDRA-16071)
 * Fix short read protection for GROUP BY queries (CASSANDRA-15459)
 * stop_paranoid disk failure policy is ignored on CorruptSSTableException after node is up (CASSANDRA-15191)
 * Frozen RawTuple is not annotated with frozen in the toString method (CASSANDRA-15857)
Merged from 3.0:
 * 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)
 * 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)


4.0-beta1
 * Remove BackPressureStrategy (CASSANDRA-15375)
 * Improve messaging on indexing frozen collections (CASSANDRA-15908)
 * USING_G1 is incorrectly set in cassandra-env.sh if G1 is explicitly disabled with -UseG1GC (CASSANDRA-15931)
 * Update compaction_throughput_mb_per_sec throttle default to 64 (CASSANDRA-14902)
 * Add option to disable compaction at startup (CASSANDRA-15927)
 * FBUtilities.getJustLocalAddress falls back to lo ip on misconfigured nodes (CASSANDRA-15901)
 * Close channel and reduce buffer allocation during entire sstable streaming with SSL (CASSANDRA-15900)
 * Prune expired messages less frequently in internode messaging (CASSANDRA-15700)
 * Fix Ec2Snitch handling of legacy mode for dc names matching both formats, eg "us-west-2" (CASSANDRA-15878)
 * Add support for server side DESCRIBE statements (CASSANDRA-14825)
 * Fail startup if -Xmn is set when the G1 garbage collector is used (CASSANDRA-15839)
 * generateSplits method replaced the generateRandomTokens for ReplicationAwareTokenAllocator. (CASSANDRA-15877)
 * Several mbeans are not unregistered when dropping a keyspace and table (CASSANDRA-14888)
 * Update defaults for server and client TLS settings (CASSANDRA-15262)
 * Differentiate follower/initator in StreamMessageHeader (CASSANDRA-15665)
 * Add a startup check to detect if LZ4 uses java rather than native implementation (CASSANDRA-15884)
 * Fix missing topology events when running multiple nodes on the same network interface (CASSANDRA-15677)
 * Create config.yml.MIDRES (CASSANDRA-15712)
 * Fix handling of fully purged static rows in repaired data tracking (CASSANDRA-15848)
 * Prevent validation request submission from blocking ANTI_ENTROPY stage (CASSANDRA-15812)
 * Add fqltool and auditlogviewer to rpm and deb packages (CASSANDRA-14712)
 * Include DROPPED_COLUMNS in schema digest computation (CASSANDRA-15843)
 * Fix Cassandra restart from rpm install (CASSANDRA-15830)
 * Improve handling of 2i initialization failures (CASSANDRA-13606)
 * Add completion_ratio column to sstable_tasks virtual table (CASANDRA-15759)
 * Add support for adding custom Verbs (CASSANDRA-15725)
 * Speed up entire-file-streaming file containment check and allow entire-file-streaming for all compaction strategies (CASSANDRA-15657,CASSANDRA-15783)
 * Provide ability to configure IAuditLogger (CASSANDRA-15748)
 * Fix nodetool enablefullquerylog blocking param parsing (CASSANDRA-15819)
 * Add isTransient to SSTableMetadataView (CASSANDRA-15806)
 * Fix tools/bin/fqltool for all shells (CASSANDRA-15820)
 * Fix clearing of legacy size_estimates (CASSANDRA-15776)
 * Update port when reconnecting to pre-4.0 SSL storage (CASSANDRA-15727)
 * Only calculate dynamicBadnessThreshold once per loop in DynamicEndpointSnitch (CASSANDRA-15798)
 * Cleanup redundant nodetool commands added in 4.0 (CASSANDRA-15256)
 * Update to Python driver 3.23 for cqlsh (CASSANDRA-15793)
 * Add tunable initial size and growth factor to RangeTombstoneList (CASSANDRA-15763)
 * Improve debug logging in SSTableReader for index summary (CASSANDRA-15755)
 * bin/sstableverify should support user provided token ranges (CASSANDRA-15753)
 * Improve logging when mutation passed to commit log is too large (CASSANDRA-14781)
 * replace LZ4FastDecompressor with LZ4SafeDecompressor (CASSANDRA-15560)
 * Fix buffer pool NPE with concurrent release due to in-progress tiny pool eviction (CASSANDRA-15726)
 * Avoid race condition when completing stream sessions (CASSANDRA-15666)
 * Flush with fast compressors by default (CASSANDRA-15379)
 * Fix CqlInputFormat regression from the switch to system.size_estimates (CASSANDRA-15637)
 * Allow sending Entire SSTables over SSL (CASSANDRA-15740)
 * Fix CQLSH UTF-8 encoding issue for Python 2/3 compatibility (CASSANDRA-15739)
 * Fix batch statement preparation when multiple tables and parameters are used (CASSANDRA-15730)
 * Fix regression with traceOutgoingMessage printing message size (CASSANDRA-15687)
 * Ensure repaired data tracking reads a consistent amount of data across replicas (CASSANDRA-15601)
 * Fix CQLSH to avoid arguments being evaluated (CASSANDRA-15660)
 * Correct Visibility and Improve Safety of Methods in LatencyMetrics (CASSANDRA-15597)
 * Allow cqlsh to run with Python2.7/Python3.6+ (CASSANDRA-15659,CASSANDRA-15573)
 * Improve logging around incremental repair (CASSANDRA-15599)
 * Do not check cdc_raw_directory filesystem space if CDC disabled (CASSANDRA-15688)
 * Replace array iterators with get by index (CASSANDRA-15394)
 * Minimize BTree iterator allocations (CASSANDRA-15389)
Merged from 3.11:
 * Fix cqlsh output when fetching all rows in batch mode (CASSANDRA-15905)
 * Upgrade Jackson to 2.9.10 (CASSANDRA-15867)
 * Fix CQL formatting of read command restrictions for slow query log (CASSANDRA-15503)
Merged from 3.0:
 * 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)
 * 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)
 * 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)
 * Allow selecting static column only when querying static index (CASSANDRA-14242)
 * 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)
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)
Merged from 2.1:
 * Fix writing of snapshot manifest when the table has table-backed secondary indexes (CASSANDRA-10968)


4.0-alpha4
 * Add client request size server metrics (CASSANDRA-15704)
 * Add additional logging around FileUtils and compaction leftover cleanup (CASSANDRA-15705)
 * Mark system_views/system_virtual_schema as non-alterable keyspaces in cqlsh (CASSANDRA-15711)
 * Fail incremental repair if an old version sstable is involved (CASSANDRA-15612)
 * Fix overflows on StreamingTombstoneHistogramBuilder produced by large deletion times (CASSANDRA-14773)
 * Mark system_views/system_virtual_schema as system keyspaces in cqlsh (CASSANDRA-15706)
 * Avoid unnecessary collection/iterator allocations during btree construction (CASSANDRA-15390)
 * Repair history tables should have TTL and TWCS (CASSANDRA-12701)
 * Fix cqlsh erroring out on Python 3.7 due to webbrowser module being absent (CASSANDRA-15572)
 * Fix IMH#acquireCapacity() to return correct Outcome when endpoint reserve runs out (CASSANDRA-15607)
 * Fix nodetool describering output (CASSANDRA-15682)
 * Only track ideal CL failure when request CL met (CASSANDRA-15696)
 * Fix flaky CoordinatorMessagingTest and docstring in OutboundSink and ConsistentSession (CASSANDRA-15672)
 * Fix force compaction of wrapping ranges (CASSANDRA-15664)
 * Expose repair streaming metrics (CASSANDRA-15656)
 * Set now in seconds in the future for validation repairs (CASSANDRA-15655)
 * Emit metric on preview repair failure (CASSANDRA-15654)
 * Use more appropriate logging levels (CASSANDRA-15661)
 * Fixed empty check in TrieMemIndex due to potential state inconsistency in ConcurrentSkipListMap (CASSANDRA-15526)
 * Added UnleveledSSTables global and table level metric (CASSANDRA-15620)
 * Added Virtual Table exposing Cassandra relevant system properties (CASSANDRA-15616, CASSANDRA-15643)
 * Improve the algorithmic token allocation in case racks = RF (CASSANDRA-15600)
 * Fix ConnectionTest.testAcquireReleaseOutbound (CASSANDRA-15308)
 * Include finalized pending sstables in preview repair (CASSANDRA-15553)
 * Reverted to the original behavior of CLUSTERING ORDER on CREATE TABLE (CASSANDRA-15271)
 * Correct inaccurate logging message (CASSANDRA-15549)
 * Unset GREP_OPTIONS (CASSANDRA-14487)
 * Update to Python driver 3.21 for cqlsh (CASSANDRA-14872)
 * Fix missing Keyspaces in cqlsh describe output (CASSANDRA-15576)
 * Fix multi DC nodetool status output (CASSANDRA-15305)
 * updateCoordinatorWriteLatencyTableMetric can produce misleading metrics (CASSANDRA-15569)
 * Make cqlsh and cqlshlib Python 2 & 3 compatible (CASSANDRA-10190)
 * Improve the description of nodetool listsnapshots command (CASSANDRA-14587)
 * allow embedded cassandra launched from a one-jar or uno-jar (CASSANDRA-15494)
 * Update hppc library to version 0.8.1 (CASSANDRA-12995)
 * Limit the dependencies used by UDFs/UDAs (CASSANDRA-14737)
 * Make native_transport_max_concurrent_requests_in_bytes updatable (CASSANDRA-15519)
 * Cleanup and improvements to IndexInfo/ColumnIndex (CASSANDRA-15469)
 * Potential Overflow in DatabaseDescriptor Functions That Convert Between KB/MB & Bytes (CASSANDRA-15470)
Merged from 3.11:
 * Allow sstableloader to use SSL on the native port (CASSANDRA-14904)
Merged from 3.0:
 * 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:
 * Duplicate results with DISTINCT queries in mixed mode (CASSANDRA-15501)
 * Disable JMX rebinding (CASSANDRA-15653)
Merged from 2.1:
 * 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)


4.0-alpha3
 * Restore monotonic read consistency guarantees for blocking read repair (CASSANDRA-14740)
 * Separate exceptions for CAS write timeout exceptions caused by contention and unkown result (CASSANDRA-15350)
 * Fix in-jvm dtest java 11 compatibility (CASSANDRA-15463)
 * Remove joda time dependency (CASSANDRA-15257)
 * Exclude purgeable tombstones from repaired data tracking (CASSANDRA-15462)
 * Exclude legacy counter shards from repaired data tracking (CASSANDRA-15461)
 * Make it easier to add trace headers to messages (CASSANDRA-15499)
 * Fix and optimise partial compressed sstable streaming (CASSANDRA-13938)
 * Improve error when JVM 11 can't access required modules (CASSANDRA-15468)
 * Better handling of file deletion failures by DiskFailurePolicy (CASSANDRA-15143)
 * Prevent read repair mutations from increasing read timeout (CASSANDRA-15442)
 * Document 4.0 system keyspace changes, bump generations (CASSANDRA-15454)
 * Make it possible to disable STCS-in-L0 during runtime (CASSANDRA-15445)
 * Removed obsolete OldNetworkTopologyStrategy (CASSANDRA-13990)
 * Align record header of FQL and audit binary log (CASSANDRA-15076)
 * Shuffle forwarding replica for messages to non-local DC (CASSANDRA-15318)
 * Optimise native protocol ASCII string encoding (CASSANDRA-15410)
 * Make sure all exceptions are propagated in DebuggableThreadPoolExecutor (CASSANDRA-15332)
 * Make it possible to resize concurrent read / write thread pools at runtime (CASSANDRA-15277)
 * Close channels on error (CASSANDRA-15407)
 * Integrate SJK into nodetool (CASSANDRA-12197)
 * Ensure that empty clusterings with kind==CLUSTERING are Clustering.EMPTY (CASSANDRA-15498)
 * The flag 'cross_node_timeout' has been set as true by default. This change
   is done under the assumption that users have setup NTP on their clusters or
   otherwise synchronize their clocks, and that clocks are mostly in sync, since
   this is a requirement for general correctness of last write wins. (CASSANDRA-15216)
Merged from 3.11:
 * Fix bad UDT sstable metadata serialization headers written by C* 3.0 on upgrade and in sstablescrub (CASSANDRA-15035)
 * Fix nodetool compactionstats showing extra pending task for TWCS - patch implemented (CASSANDRA-15409)
 * Fix SELECT JSON formatting for the "duration" type (CASSANDRA-15075)
 * Update nodetool help stop output (CASSANDRA-15401)
Merged from 3.0:
 * Fix race condition when setting bootstrap flags (CASSANDRA-14878)
 * 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)
 * Make sure index summary redistribution does not start when compactions are paused (CASSANDRA-15265)
 * 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)
 * Added data modeling documentation (CASSANDRA-15443)


4.0-alpha2
 * Fix SASI non-literal string comparisons (range operators) (CASSANDRA-15169)
 * Upgrade Guava to 27, and to java-driver 3.6.0 (from 3.4.0-SNAPSHOT) (CASSANDRA-14655)
 * Extract an AbstractCompactionController to allow for custom implementations (CASSANDRA-15286)
 * Move chronicle-core version from snapshot to stable, and include carrotsearch in generated pom.xml (CASSANDRA-15321)
 * Untangle RepairMessage sub-hierarchy of messages, use new messaging (more) correctly (CASSANDRA-15163)
 * Add `allocate_tokens_for_local_replication_factor` option for token allocation (CASSANDRA-15260)
 * Add Alibaba Cloud Platform snitch (CASSANDRA-15092)
Merged from 3.0:
 * Fix various data directory prefix matching issues (CASSANDRA-13974)
 * Minimize clustering values in metadata collector (CASSANDRA-15400)
 * Make sure index summary redistribution does not start when compactions are paused (CASSANDRA-15265)
 * 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 bad merge that reverted CASSANDRA-14993 (CASSANDRA-15289)
 * Add support for network topology and query tracing for inJVM dtest (CASSANDRA-15319)


4.0-alpha1
 * Inaccurate exception message with nodetool snapshot (CASSANDRA-15287)
 * Fix InternodeOutboundMetrics overloaded bytes/count mixup (CASSANDRA-15186)
 * Enhance & reenable RepairTest with compression=off and compression=on (CASSANDRA-15272)
 * Improve readability of Table metrics Virtual tables units (CASSANDRA-15194)
 * Fix error with non-existent table for nodetool tablehistograms (CASSANDRA-14410)
 * Avoid result truncation in decimal operations (CASSANDRA-15232)
 * Catch non-IOException in FileUtils.close to make sure that all resources are closed (CASSANDRA-15225)
 * Align load column in nodetool status output (CASSANDRA-14787)
 * CassandraNetworkAuthorizer uses cached roles info (CASSANDRA-15089)
 * Introduce optional timeouts for idle client sessions (CASSANDRA-11097)
 * Fix AlterTableStatement dropped type validation order (CASSANDRA-15203)
 * Update Netty dependencies to latest, clean up SocketFactory (CASSANDRA-15195)
 * Native Transport - Apply noSpamLogger to ConnectionLimitHandler (CASSANDRA-15167)
 * Reduce heap pressure during compactions (CASSANDRA-14654)
 * Support building Cassandra with JDK 11 (CASSANDRA-15108)
 * Use quilt to patch cassandra.in.sh in Debian packaging (CASSANDRA-14710)
 * Take sstable references before calculating approximate key count (CASSANDRA-14647)
 * Restore snapshotting of system keyspaces on version change (CASSANDRA-14412)
 * Fix AbstractBTreePartition locking in java 11 (CASSANDRA-14607)
 * SimpleClient should pass connection properties as options (CASSANDRA-15056)
 * Set repaired data tracking flag on range reads if enabled (CASSANDRA-15019)
 * Calculate pending ranges for BOOTSTRAP_REPLACE correctly (CASSANDRA-14802)
 * Make TableCQLHelper reuse the single quote pattern (CASSANDRA-15033)
 * Add Zstd compressor (CASSANDRA-14482)
 * Fix IR prepare anti-compaction race (CASSANDRA-15027)
 * Fix SimpleStrategy option validation (CASSANDRA-15007)
 * Don't try to cancel 2i compactions when starting anticompaction (CASSANDRA-15024)
 * Avoid NPE in RepairRunnable.recordFailure (CASSANDRA-15025)
 * SSL Cert Hot Reloading should check for sanity of the new keystore/truststore before loading it (CASSANDRA-14991)
 * Avoid leaking threads when failing anticompactions and rate limit anticompactions (CASSANDRA-15002)
 * Validate token() arguments early instead of throwing NPE at execution (CASSANDRA-14989)
 * Add a new tool to dump audit logs (CASSANDRA-14885)
 * Fix generating javadoc with Java11 (CASSANDRA-14988)
 * Only cancel conflicting compactions when starting anticompactions and sub range compactions (CASSANDRA-14935)
 * Use a stub IndexRegistry for non-daemon use cases (CASSANDRA-14938)
 * Don't enable client transports when bootstrap is pending (CASSANDRA-14525)
 * Make antiCompactGroup throw exception on error and anticompaction non cancellable
   again (CASSANDRA-14936)
 * Catch empty/invalid bounds in SelectStatement (CASSANDRA-14849)
 * Auto-expand replication_factor for NetworkTopologyStrategy (CASSANDRA-14303)
 * Transient Replication: support EACH_QUORUM (CASSANDRA-14727)
 * BufferPool: allocating thread for new chunks should acquire directly (CASSANDRA-14832)
 * Send correct messaging version in internode messaging handshake's third message (CASSANDRA-14896)
 * Make Read and Write Latency columns consistent for proxyhistograms and tablehistograms (CASSANDRA-11939)
 * Make protocol checksum type option case insensitive (CASSANDRA-14716)
 * Forbid re-adding static columns as regular and vice versa (CASSANDRA-14913)
 * Audit log allows system keyspaces to be audited via configuration options (CASSANDRA-14498)
 * Lower default chunk_length_in_kb from 64kb to 16kb (CASSANDRA-13241)
 * Startup checker should wait for count rather than percentage (CASSANDRA-14297)
 * Fix incorrect sorting of replicas in SimpleStrategy.calculateNaturalReplicas (CASSANDRA-14862)
 * Partitioned outbound internode TCP connections can occur when nodes restart (CASSANDRA-14358)
 * Don't write to system_distributed.repair_history, system_traces.sessions, system_traces.events in mixed version 3.X/4.0 clusters (CASSANDRA-14841)
 * Avoid running query to self through messaging service (CASSANDRA-14807)
 * Allow using custom script for chronicle queue BinLog archival (CASSANDRA-14373)
 * Transient->Full range movements mishandle consistency level upgrade (CASSANDRA-14759)
 * ReplicaCollection follow-up (CASSANDRA-14726)
 * Transient node receives full data requests (CASSANDRA-14762)
 * Enable snapshot artifacts publish (CASSANDRA-12704)
 * Introduce RangesAtEndpoint.unwrap to simplify StreamSession.addTransferRanges (CASSANDRA-14770)
 * LOCAL_QUORUM may speculate to non-local nodes, resulting in Timeout instead of Unavailable (CASSANDRA-14735)
 * Avoid creating empty compaction tasks after truncate (CASSANDRA-14780)
 * Fail incremental repair prepare phase if it encounters sstables from un-finalized sessions (CASSANDRA-14763)
 * Add a check for receiving digest response from transient node (CASSANDRA-14750)
 * Fail query on transient replica if coordinator only expects full data (CASSANDRA-14704)
 * Remove mentions of transient replication from repair path (CASSANDRA-14698)
 * Fix handleRepairStatusChangedNotification to remove first then add (CASSANDRA-14720)
 * Allow transient node to serve as a repair coordinator (CASSANDRA-14693)
 * DecayingEstimatedHistogramReservoir.EstimatedHistogramReservoirSnapshot returns wrong value for size() and incorrectly calculates count (CASSANDRA-14696)
 * AbstractReplicaCollection equals and hash code should throw due to conflict between order sensitive/insensitive uses (CASSANDRA-14700)
 * Detect inconsistencies in repaired data on the read path (CASSANDRA-14145)
 * Add checksumming to the native protocol (CASSANDRA-13304)
 * Make AuthCache more easily extendable (CASSANDRA-14662)
 * Extend RolesCache to include detailed role info (CASSANDRA-14497)
 * Add fqltool compare (CASSANDRA-14619)
 * Add fqltool replay (CASSANDRA-14618)
 * Log keyspace in full query log (CASSANDRA-14656)
 * Transient Replication and Cheap Quorums (CASSANDRA-14404)
 * Log server-generated timestamp and nowInSeconds used by queries in FQL (CASSANDRA-14675)
 * Add diagnostic events for read repairs (CASSANDRA-14668)
 * Use consistent nowInSeconds and timestamps values within a request (CASSANDRA-14671)
 * Add sampler for query time and expose with nodetool (CASSANDRA-14436)
 * Clean up Message.Request implementations (CASSANDRA-14677)
 * Disable old native protocol versions on demand (CASANDRA-14659)
 * Allow specifying now-in-seconds in native protocol (CASSANDRA-14664)
 * Improve BTree build performance by avoiding data copy (CASSANDRA-9989)
 * Make monotonic read / read repair configurable (CASSANDRA-14635)
 * Refactor CompactionStrategyManager (CASSANDRA-14621)
 * Flush netty client messages immediately by default (CASSANDRA-13651)
 * Improve read repair blocking behavior (CASSANDRA-10726)
 * Add a virtual table to expose settings (CASSANDRA-14573)
 * Fix up chunk cache handling of metrics (CASSANDRA-14628)
 * Extend IAuthenticator to accept peer SSL certificates (CASSANDRA-14652)
 * Incomplete handling of exceptions when decoding incoming messages (CASSANDRA-14574)
 * Add diagnostic events for user audit logging (CASSANDRA-13668)
 * Allow retrieving diagnostic events via JMX (CASSANDRA-14435)
 * Add base classes for diagnostic events (CASSANDRA-13457)
 * Clear view system metadata when dropping keyspace (CASSANDRA-14646)
 * Allocate ReentrantLock on-demand in java11 AtomicBTreePartitionerBase (CASSANDRA-14637)
 * Make all existing virtual tables use LocalPartitioner (CASSANDRA-14640)
 * Revert 4.0 GC alg back to CMS (CASANDRA-14636)
 * Remove hardcoded java11 jvm args in idea workspace files (CASSANDRA-14627)
 * Update netty to 4.1.128 (CASSANDRA-14633)
 * Add a virtual table to expose thread pools (CASSANDRA-14523)
 * Add a virtual table to expose caches (CASSANDRA-14538, CASSANDRA-14626)
 * Fix toDate function for timestamp arguments (CASSANDRA-14502)
 * Stream entire SSTables when possible (CASSANDRA-14556)
 * Cell reconciliation should not depend on nowInSec (CASSANDRA-14592)
 * Add experimental support for Java 11 (CASSANDRA-9608)
 * Make PeriodicCommitLogService.blockWhenSyncLagsNanos configurable (CASSANDRA-14580)
 * Improve logging in MessageInHandler's constructor (CASSANDRA-14576)
 * Set broadcast address in internode messaging handshake (CASSANDRA-14579)
 * Wait for schema agreement prior to building MVs (CASSANDRA-14571)
 * Make all DDL statements idempotent and not dependent on global state (CASSANDRA-13426)
 * Bump the hints messaging version to match the current one (CASSANDRA-14536)
 * OffsetAwareConfigurationLoader doesn't set ssl storage port causing bind errors in CircleCI (CASSANDRA-14546)
 * Report why native_transport_port fails to bind (CASSANDRA-14544)
 * Optimize internode messaging protocol (CASSANDRA-14485)
 * Internode messaging handshake sends wrong messaging version number (CASSANDRA-14540)
 * Add a virtual table to expose active client connections (CASSANDRA-14458)
 * Clean up and refactor client metrics (CASSANDRA-14524)
 * Nodetool import row cache invalidation races with adding sstables to tracker (CASSANDRA-14529)
 * Fix assertions in LWTs after TableMetadata was made immutable (CASSANDRA-14356)
 * Abort compactions quicker (CASSANDRA-14397)
 * Support light-weight transactions in cassandra-stress (CASSANDRA-13529)
 * Make AsyncOneResponse use the correct timeout (CASSANDRA-14509)
 * Add option to sanity check tombstones on reads/compactions (CASSANDRA-14467)
 * Add a virtual table to expose all running sstable tasks (CASSANDRA-14457)
 * Let nodetool import take a list of directories (CASSANDRA-14442)
 * Avoid unneeded memory allocations / cpu for disabled log levels (CASSANDRA-14488)
 * Implement virtual keyspace interface (CASSANDRA-7622)
 * nodetool import cleanup and improvements (CASSANDRA-14417)
 * Bump jackson version to >= 2.9.5 (CASSANDRA-14427)
 * Allow nodetool toppartitions without specifying table (CASSANDRA-14360)
 * Audit logging for database activity (CASSANDRA-12151)
 * Clean up build artifacts in docs container (CASSANDRA-14432)
 * Minor network authz improvements (Cassandra-14413)
 * Automatic sstable upgrades (CASSANDRA-14197)
 * Replace deprecated junit.framework.Assert usages with org.junit.Assert (CASSANDRA-14431)
 * Cassandra-stress throws NPE if insert section isn't specified in user profile (CASSSANDRA-14426)
 * List clients by protocol versions `nodetool clientstats --by-protocol` (CASSANDRA-14335)
 * Improve LatencyMetrics performance by reducing write path processing (CASSANDRA-14281)
 * Add network authz (CASSANDRA-13985)
 * Use the correct IP/Port for Streaming when localAddress is left unbound (CASSANDRA-14389)
 * nodetool listsnapshots is missing local system keyspace snapshots (CASSANDRA-14381)
 * Remove StreamCoordinator.streamExecutor thread pool (CASSANDRA-14402)
 * Rename nodetool --with-port to --print-port to disambiguate from --port (CASSANDRA-14392)
 * Client TOPOLOGY_CHANGE messages have wrong port. (CASSANDRA-14398)
 * Add ability to load new SSTables from a separate directory (CASSANDRA-6719)
 * Eliminate background repair and probablistic read_repair_chance table options
   (CASSANDRA-13910)
 * Bind to correct local address in 4.0 streaming (CASSANDRA-14362)
 * Use standard Amazon naming for datacenter and rack in Ec2Snitch (CASSANDRA-7839)
 * Abstract write path for pluggable storage (CASSANDRA-14118)
 * nodetool describecluster should be more informative (CASSANDRA-13853)
 * Compaction performance improvements (CASSANDRA-14261)
 * Refactor Pair usage to avoid boxing ints/longs (CASSANDRA-14260)
 * Add options to nodetool tablestats to sort and limit output (CASSANDRA-13889)
 * Rename internals to reflect CQL vocabulary (CASSANDRA-14354)
 * Add support for hybrid MIN(), MAX() speculative retry policies
   (CASSANDRA-14293, CASSANDRA-14338, CASSANDRA-14352)
 * Fix some regressions caused by 14058 (CASSANDRA-14353)
 * Abstract repair for pluggable storage (CASSANDRA-14116)
 * Add meaningful toString() impls (CASSANDRA-13653)
 * Add sstableloader option to accept target keyspace name (CASSANDRA-13884)
 * Move processing of EchoMessage response to gossip stage (CASSANDRA-13713)
 * Add coordinator write metric per CF (CASSANDRA-14232)
 * Correct and clarify SSLFactory.getSslContext method and call sites (CASSANDRA-14314)
 * Handle static and partition deletion properly on ThrottledUnfilteredIterator (CASSANDRA-14315)
 * NodeTool clientstats should show SSL Cipher (CASSANDRA-14322)
 * Add ability to specify driver name and version (CASSANDRA-14275)
 * Abstract streaming for pluggable storage (CASSANDRA-14115)
 * Forced incremental repairs should promote sstables if they can (CASSANDRA-14294)
 * Use Murmur3 for validation compactions (CASSANDRA-14002)
 * Comma at the end of the seed list is interpretated as localhost (CASSANDRA-14285)
 * Refactor read executor and response resolver, abstract read repair (CASSANDRA-14058)
 * Add optional startup delay to wait until peers are ready (CASSANDRA-13993)
 * Add a few options to nodetool verify (CASSANDRA-14201)
 * CVE-2017-5929 Security vulnerability and redefine default log rotation policy (CASSANDRA-14183)
 * Use JVM default SSL validation algorithm instead of custom default (CASSANDRA-13259)
 * Better document in code InetAddressAndPort usage post 7544, incorporate port into UUIDGen node (CASSANDRA-14226)
 * Fix sstablemetadata date string for minLocalDeletionTime (CASSANDRA-14132)
 * Make it possible to change neverPurgeTombstones during runtime (CASSANDRA-14214)
 * Remove GossipDigestSynVerbHandler#doSort() (CASSANDRA-14174)
 * Add nodetool clientlist (CASSANDRA-13665)
 * Revert ProtocolVersion changes from CASSANDRA-7544 (CASSANDRA-14211)
 * Non-disruptive seed node list reload (CASSANDRA-14190)
 * Nodetool tablehistograms to print statics for all the tables (CASSANDRA-14185)
 * Migrate dtests to use pytest and python3 (CASSANDRA-14134)
 * Allow storage port to be configurable per node (CASSANDRA-7544)
 * Make sub-range selection for non-frozen collections return null instead of empty (CASSANDRA-14182)
 * BloomFilter serialization format should not change byte ordering (CASSANDRA-9067)
 * Remove unused on-heap BloomFilter implementation (CASSANDRA-14152)
 * Delete temp test files on exit (CASSANDRA-14153)
 * Make PartitionUpdate and Mutation immutable (CASSANDRA-13867)
 * Fix CommitLogReplayer exception for CDC data (CASSANDRA-14066)
 * Fix cassandra-stress startup failure (CASSANDRA-14106)
 * Remove initialDirectories from CFS (CASSANDRA-13928)
 * Fix trivial log format error (CASSANDRA-14015)
 * Allow sstabledump to do a json object per partition (CASSANDRA-13848)
 * Add option to optimise merkle tree comparison across replicas (CASSANDRA-3200)
 * Remove unused and deprecated methods from AbstractCompactionStrategy (CASSANDRA-14081)
 * Fix Distribution.average in cassandra-stress (CASSANDRA-14090)
 * Support a means of logging all queries as they were invoked (CASSANDRA-13983)
 * Presize collections (CASSANDRA-13760)
 * Add GroupCommitLogService (CASSANDRA-13530)
 * Parallelize initial materialized view build (CASSANDRA-12245)
 * Make LWTs send resultset metadata on every request (CASSANDRA-13992)
 * Fix flaky indexWithFailedInitializationIsNotQueryableAfterPartialRebuild (CASSANDRA-13963)
 * Introduce leaf-only iterator (CASSANDRA-9988)
 * Upgrade Guava to 23.3 and Airline to 0.8 (CASSANDRA-13997)
 * Allow only one concurrent call to StatusLogger (CASSANDRA-12182)
 * Refactoring to specialised functional interfaces (CASSANDRA-13982)
 * Speculative retry should allow more friendly params (CASSANDRA-13876)
 * Throw exception if we send/receive repair messages to incompatible nodes (CASSANDRA-13944)
 * Replace usages of MessageDigest with Guava's Hasher (CASSANDRA-13291)
 * Add nodetool cmd to print hinted handoff window (CASSANDRA-13728)
 * Fix some alerts raised by static analysis (CASSANDRA-13799)
 * Checksum sstable metadata (CASSANDRA-13321, CASSANDRA-13593)
 * Add result set metadata to prepared statement MD5 hash calculation (CASSANDRA-10786)
 * Refactor GcCompactionTest to avoid boxing (CASSANDRA-13941)
 * Expose recent histograms in JmxHistograms (CASSANDRA-13642)
 * Fix buffer length comparison when decompressing in netty-based streaming (CASSANDRA-13899)
 * Properly close StreamCompressionInputStream to release any ByteBuf (CASSANDRA-13906)
 * Add SERIAL and LOCAL_SERIAL support for cassandra-stress (CASSANDRA-13925)
 * LCS needlessly checks for L0 STCS candidates multiple times (CASSANDRA-12961)
 * Correctly close netty channels when a stream session ends (CASSANDRA-13905)
 * Update lz4 to 1.4.0 (CASSANDRA-13741)
 * Optimize Paxos prepare and propose stage for local requests (CASSANDRA-13862)
 * Throttle base partitions during MV repair streaming to prevent OOM (CASSANDRA-13299)
 * Use compaction threshold for STCS in L0 (CASSANDRA-13861)
 * Fix problem with min_compress_ratio: 1 and disallow ratio < 1 (CASSANDRA-13703)
 * Add extra information to SASI timeout exception (CASSANDRA-13677)
 * Add incremental repair support for --hosts, --force, and subrange repair (CASSANDRA-13818)
 * Rework CompactionStrategyManager.getScanners synchronization (CASSANDRA-13786)
 * Add additional unit tests for batch behavior, TTLs, Timestamps (CASSANDRA-13846)
 * Add keyspace and table name in schema validation exception (CASSANDRA-13845)
 * Emit metrics whenever we hit tombstone failures and warn thresholds (CASSANDRA-13771)
 * Make netty EventLoopGroups daemon threads (CASSANDRA-13837)
 * Race condition when closing stream sessions (CASSANDRA-13852)
 * NettyFactoryTest is failing in trunk on macOS (CASSANDRA-13831)
 * Allow changing log levels via nodetool for related classes (CASSANDRA-12696)
 * Add stress profile yaml with LWT (CASSANDRA-7960)
 * Reduce memory copies and object creations when acting on ByteBufs (CASSANDRA-13789)
 * Simplify mx4j configuration (Cassandra-13578)
 * Fix trigger example on 4.0 (CASSANDRA-13796)
 * Force minumum timeout value (CASSANDRA-9375)
 * Use netty for streaming (CASSANDRA-12229)
 * Use netty for internode messaging (CASSANDRA-8457)
 * Add bytes repaired/unrepaired to nodetool tablestats (CASSANDRA-13774)
 * Don't delete incremental repair sessions if they still have sstables (CASSANDRA-13758)
 * Fix pending repair manager index out of bounds check (CASSANDRA-13769)
 * Don't use RangeFetchMapCalculator when RF=1 (CASSANDRA-13576)
 * Don't optimise trivial ranges in RangeFetchMapCalculator (CASSANDRA-13664)
 * Use an ExecutorService for repair commands instead of new Thread(..).start() (CASSANDRA-13594)
 * Fix race / ref leak in anticompaction (CASSANDRA-13688)
 * Expose tasks queue length via JMX (CASSANDRA-12758)
 * Fix race / ref leak in PendingRepairManager (CASSANDRA-13751)
 * Enable ppc64le runtime as unsupported architecture (CASSANDRA-13615)
 * Improve sstablemetadata output (CASSANDRA-11483)
 * Support for migrating legacy users to roles has been dropped (CASSANDRA-13371)
 * Introduce error metrics for repair (CASSANDRA-13387)
 * Refactoring to primitive functional interfaces in AuthCache (CASSANDRA-13732)
 * Update metrics to 3.1.5 (CASSANDRA-13648)
 * batch_size_warn_threshold_in_kb can now be set at runtime (CASSANDRA-13699)
 * Avoid always rebuilding secondary indexes at startup (CASSANDRA-13725)
 * Upgrade JMH from 1.13 to 1.19 (CASSANDRA-13727)
 * Upgrade SLF4J from 1.7.7 to 1.7.25 (CASSANDRA-12996)
 * Default for start_native_transport now true if not set in config (CASSANDRA-13656)
 * Don't add localhost to the graph when calculating where to stream from (CASSANDRA-13583)
 * Make CDC availability more deterministic via hard-linking (CASSANDRA-12148)
 * Allow skipping equality-restricted clustering columns in ORDER BY clause (CASSANDRA-10271)
 * Use common nowInSec for validation compactions (CASSANDRA-13671)
 * Improve handling of IR prepare failures (CASSANDRA-13672)
 * Send IR coordinator messages synchronously (CASSANDRA-13673)
 * Flush system.repair table before IR finalize promise (CASSANDRA-13660)
 * Fix column filter creation for wildcard queries (CASSANDRA-13650)
 * Add 'nodetool getbatchlogreplaythrottle' and 'nodetool setbatchlogreplaythrottle' (CASSANDRA-13614)
 * fix race condition in PendingRepairManager (CASSANDRA-13659)
 * Allow noop incremental repair state transitions (CASSANDRA-13658)
 * Run repair with down replicas (CASSANDRA-10446)
 * Added started & completed repair metrics (CASSANDRA-13598)
 * Added started & completed repair metrics (CASSANDRA-13598)
 * Improve secondary index (re)build failure and concurrency handling (CASSANDRA-10130)
 * Improve calculation of available disk space for compaction (CASSANDRA-13068)
 * Change the accessibility of RowCacheSerializer for third party row cache plugins (CASSANDRA-13579)
 * Allow sub-range repairs for a preview of repaired data (CASSANDRA-13570)
 * NPE in IR cleanup when columnfamily has no sstables (CASSANDRA-13585)
 * Fix Randomness of stress values (CASSANDRA-12744)
 * Allow selecting Map values and Set elements (CASSANDRA-7396)
 * Fast and garbage-free Streaming Histogram (CASSANDRA-13444)
 * Update repairTime for keyspaces on completion (CASSANDRA-13539)
 * Add configurable upper bound for validation executor threads (CASSANDRA-13521)
 * Bring back maxHintTTL propery (CASSANDRA-12982)
 * Add testing guidelines (CASSANDRA-13497)
 * Add more repair metrics (CASSANDRA-13531)
 * RangeStreamer should be smarter when picking endpoints for streaming (CASSANDRA-4650)
 * Avoid rewrapping an exception thrown for cache load functions (CASSANDRA-13367)
 * Log time elapsed for each incremental repair phase (CASSANDRA-13498)
 * Add multiple table operation support to cassandra-stress (CASSANDRA-8780)
 * Fix incorrect cqlsh results when selecting same columns multiple times (CASSANDRA-13262)
 * Fix WriteResponseHandlerTest is sensitive to test execution order (CASSANDRA-13421)
 * Improve incremental repair logging (CASSANDRA-13468)
 * Start compaction when incremental repair finishes (CASSANDRA-13454)
 * Add repair streaming preview (CASSANDRA-13257)
 * Cleanup isIncremental/repairedAt usage (CASSANDRA-13430)
 * Change protocol to allow sending key space independent of query string (CASSANDRA-10145)
 * Make gc_log and gc_warn settable at runtime (CASSANDRA-12661)
 * Take number of files in L0 in account when estimating remaining compaction tasks (CASSANDRA-13354)
 * Skip building views during base table streams on range movements (CASSANDRA-13065)
 * Improve error messages for +/- operations on maps and tuples (CASSANDRA-13197)
 * Remove deprecated repair JMX APIs (CASSANDRA-11530)
 * Fix version check to enable streaming keep-alive (CASSANDRA-12929)
 * Make it possible to monitor an ideal consistency level separate from actual consistency level (CASSANDRA-13289)
 * Outbound TCP connections ignore internode authenticator (CASSANDRA-13324)
 * Cleanup ParentRepairSession after repairs (CASSANDRA-13359)
 * Upgrade snappy-java to 1.1.2.6 (CASSANDRA-13336)
 * Incremental repair not streaming correct sstables (CASSANDRA-13328)
 * Upgrade the jna version to 4.3.0 (CASSANDRA-13300)
 * Add the currentTimestamp, currentDate, currentTime and currentTimeUUID functions (CASSANDRA-13132)
 * Remove config option index_interval (CASSANDRA-10671)
 * Reduce lock contention for collection types and serializers (CASSANDRA-13271)
 * Make it possible to override MessagingService.Verb ids (CASSANDRA-13283)
 * Avoid synchronized on prepareForRepair in ActiveRepairService (CASSANDRA-9292)
 * Adds the ability to use uncompressed chunks in compressed files (CASSANDRA-10520)
 * Don't flush sstables when streaming for incremental repair (CASSANDRA-13226)
 * Remove unused method (CASSANDRA-13227)
 * Fix minor bugs related to #9143 (CASSANDRA-13217)
 * Output warning if user increases RF (CASSANDRA-13079)
 * Remove pre-3.0 streaming compatibility code for 4.0 (CASSANDRA-13081)
 * Add support for + and - operations on dates (CASSANDRA-11936)
 * Fix consistency of incrementally repaired data (CASSANDRA-9143)
 * Increase commitlog version (CASSANDRA-13161)
 * Make TableMetadata immutable, optimize Schema (CASSANDRA-9425)
 * Refactor ColumnCondition (CASSANDRA-12981)
 * Parallelize streaming of different keyspaces (CASSANDRA-4663)
 * Improved compactions metrics (CASSANDRA-13015)
 * Speed-up start-up sequence by avoiding un-needed flushes (CASSANDRA-13031)
 * Use Caffeine (W-TinyLFU) for on-heap caches (CASSANDRA-10855)
 * Thrift removal (CASSANDRA-11115)
 * Remove pre-3.0 compatibility code for 4.0 (CASSANDRA-12716)
 * Add column definition kind to dropped columns in schema (CASSANDRA-12705)
 * Add (automate) Nodetool Documentation (CASSANDRA-12672)
 * Update bundled cqlsh python driver to 3.7.0 (CASSANDRA-12736)
 * Reject invalid replication settings when creating or altering a keyspace (CASSANDRA-12681)
 * Clean up the SSTableReader#getScanner API wrt removal of RateLimiter (CASSANDRA-12422)
 * Use new token allocation for non bootstrap case as well (CASSANDRA-13080)
 * Avoid byte-array copy when key cache is disabled (CASSANDRA-13084)
 * Require forceful decommission if number of nodes is less than replication factor (CASSANDRA-12510)
 * Allow IN restrictions on column families with collections (CASSANDRA-12654)
 * Log message size in trace message in OutboundTcpConnection (CASSANDRA-13028)
 * Add timeUnit Days for cassandra-stress (CASSANDRA-13029)
 * Add mutation size and batch metrics (CASSANDRA-12649)
 * Add method to get size of endpoints to TokenMetadata (CASSANDRA-12999)
 * Expose time spent waiting in thread pool queue (CASSANDRA-8398)
 * Conditionally update index built status to avoid unnecessary flushes (CASSANDRA-12969)
 * cqlsh auto completion: refactor definition of compaction strategy options (CASSANDRA-12946)
 * Add support for arithmetic operators (CASSANDRA-11935)
 * Add histogram for delay to deliver hints (CASSANDRA-13234)
 * Fix cqlsh automatic protocol downgrade regression (CASSANDRA-13307)
 * Changing `max_hint_window_in_ms` at runtime (CASSANDRA-11720)
 * Trivial format error in StorageProxy (CASSANDRA-13551)
 * Nodetool repair can hang forever if we lose the notification for the repair completing/failing (CASSANDRA-13480)
 * Anticompaction can cause noisy log messages (CASSANDRA-13684)
 * Switch to client init for sstabledump (CASSANDRA-13683)
 * CQLSH: Don't pause when capturing data (CASSANDRA-13743)
 * nodetool clearsnapshot requires --all to clear all snapshots (CASSANDRA-13391)
 * Correctly count range tombstones in traces and tombstone thresholds (CASSANDRA-8527)
 * cqlshrc.sample uses incorrect option for time formatting (CASSANDRA-14243)
 * Multi-version in-JVM dtests (CASSANDRA-14937)
 * Allow instance class loaders to be garbage collected for inJVM dtest (CASSANDRA-15170)


3.11.6
 * Fix bad UDT sstable metadata serialization headers written by C* 3.0 on upgrade and in sstablescrub (CASSANDRA-15035)
 * Fix nodetool compactionstats showing extra pending task for TWCS - patch implemented (CASSANDRA-15409)
 * Fix SELECT JSON formatting for the "duration" type (CASSANDRA-15075)
 * Fix LegacyLayout to have same behavior as 2.x when handling unknown column names (CASSANDRA-15081)
 * Update nodetool help stop output (CASSANDRA-15401)
Merged from 3.0:
 * 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)
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)
 * Fix NativeLibrary.tryOpenDirectory callers for Windows (CASSANDRA-15426)


3.11.5
 * Fix cassandra-env.sh to use $CASSANDRA_CONF to find cassandra-jaas.config (CASSANDRA-14305)
 * Fixed nodetool cfstats printing index name twice (CASSANDRA-14903)
 * Add flag to disable SASI indexes, and warnings on creation (CASSANDRA-14866)
Merged from 3.0:
 * 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)
 * 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)
 * Fix assorted gossip races and add related runtime checks (CASSANDRA-15059)
 * cassandra-stress works with frozen collections: list and set (CASSANDRA-14907)
 * 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:
 * 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)


3.11.4
 * Make stop-server.bat wait for Cassandra to terminate (CASSANDRA-14829)
 * Correct sstable sorting for garbagecollect and levelled compaction (CASSANDRA-14870)
Merged from 3.0:
 * Improve merkle tree size and time on heap (CASSANDRA-14096)
 * 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)
 * Streaming needs to synchronise access to LifecycleTransaction (CASSANDRA-14554)
 * Fix cassandra-stress write hang with default options (CASSANDRA-14616)
 * 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)
 * MigrationManager attempts to pull schema from different major version nodes (CASSANDRA-14928)
 * 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.11.3
 * Validate supported column type with SASI analyzer (CASSANDRA-13669)
 * Remove BTree.Builder Recycler to reduce memory usage (CASSANDRA-13929)
 * Reduce nodetool GC thread count (CASSANDRA-14475)
 * Fix New SASI view creation during Index Redistribution (CASSANDRA-14055)
 * Remove string formatting lines from BufferPool hot path (CASSANDRA-14416)
 * Detect OpenJDK jvm type and architecture (CASSANDRA-12793)
 * Don't use guava collections in the non-system keyspace jmx attributes (CASSANDRA-12271)
 * Allow existing nodes to use all peers in shadow round (CASSANDRA-13851)
 * Fix cqlsh to read connection.ssl cqlshrc option again (CASSANDRA-14299)
 * Downgrade log level to trace for CommitLogSegmentManager (CASSANDRA-14370)
 * CQL fromJson(null) throws NullPointerException (CASSANDRA-13891)
 * Serialize empty buffer as empty string for json output format (CASSANDRA-14245)
 * Allow logging implementation to be interchanged for embedded testing (CASSANDRA-13396)
 * SASI tokenizer for simple delimiter based entries (CASSANDRA-14247)
 * Fix Loss of digits when doing CAST from varint/bigint to decimal (CASSANDRA-14170)
 * RateBasedBackPressure unnecessarily invokes a lock on the Guava RateLimiter (CASSANDRA-14163)
 * Fix wildcard GROUP BY queries (CASSANDRA-14209)
Merged from 3.0:
 * Fix corrupted static collection deletions in 3.0 -> 2.{1,2} messages (CASSANDRA-14568)
 * Fix potential IndexOutOfBoundsException with counters (CASSANDRA-14167)
 * 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)
 * 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)
 * 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)
 * Use zero as default score in DynamicEndpointSnitch (CASSANDRA-14252)
 * 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 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)
Merged from 2.1:
 * Check checksum before decompressing data (CASSANDRA-14284)


3.11.2
 * Fix ReadCommandTest (CASSANDRA-14234)
 * Remove trailing period from latency reports at keyspace level (CASSANDRA-14233)
 * Backport CASSANDRA-13080: Use new token allocation for non bootstrap case as well (CASSANDRA-14212)
 * Remove dependencies on JVM internal classes from JMXServerUtils (CASSANDRA-14173)
 * Add DEFAULT, UNSET, MBEAN and MBEANS to `ReservedKeywords` (CASSANDRA-14205)
 * Print correct snitch info from nodetool describecluster (CASSANDRA-13528)
 * Enable CDC unittest (CASSANDRA-14141)
 * Acquire read lock before accessing CompactionStrategyManager fields (CASSANDRA-14139)
 * Avoid invalidating disk boundaries unnecessarily (CASSANDRA-14083)
 * Avoid exposing compaction strategy index externally (CASSANDRA-14082)
 * Fix imbalanced disks when replacing node with same address with JBOD (CASSANDRA-14084)
 * Reload compaction strategies when disk boundaries are invalidated (CASSANDRA-13948)
 * Remove OpenJDK log warning (CASSANDRA-13916)
 * Prevent compaction strategies from looping indefinitely (CASSANDRA-14079)
 * Cache disk boundaries (CASSANDRA-13215)
 * Add asm jar to build.xml for maven builds (CASSANDRA-11193)
 * Round buffer size to powers of 2 for the chunk cache (CASSANDRA-13897)
 * Update jackson JSON jars (CASSANDRA-13949)
 * Avoid locks when checking LCS fanout and if we should defrag (CASSANDRA-13930)
Merged from 3.0:
 * Fix unit test failures in ViewComplexTest (CASSANDRA-14219)
 * Add MinGW uname check to start scripts (CASSANDRA-12840)
 * Use the correct digest file and reload sstable metadata in nodetool verify (CASSANDRA-14217)
 * Handle failure when mutating repaired status in Verifier (CASSANDRA-13933)
 * 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)
 * Grab refs during scrub/index redistribution/cleanup (CASSANDRA-13873)
Merged from 2.1:
 * Protect against overflow of local expiration time (CASSANDRA-14092)
 * RPM package spec: fix permissions for installed jars and config files (CASSANDRA-14181)
 * More PEP8 compliance for cqlsh


3.11.1
 * Fix the computation of cdc_total_space_in_mb for exabyte filesystems (CASSANDRA-13808)
 * AbstractTokenTreeBuilder#serializedSize returns wrong value when there is a single leaf and overflow collisions (CASSANDRA-13869)
 * Add a compaction option to TWCS to ignore sstables overlapping checks (CASSANDRA-13418)
 * BTree.Builder memory leak (CASSANDRA-13754)
 * Revert CASSANDRA-10368 of supporting non-pk column filtering due to correctness (CASSANDRA-13798)
 * Add a skip read validation flag to cassandra-stress (CASSANDRA-13772)
 * Fix cassandra-stress hang issues when an error during cluster connection happens (CASSANDRA-12938)
 * Better bootstrap failure message when blocked by (potential) range movement (CASSANDRA-13744)
 * "ignore" option is ignored in sstableloader (CASSANDRA-13721)
 * Deadlock in AbstractCommitLogSegmentManager (CASSANDRA-13652)
 * Duplicate the buffer before passing it to analyser in SASI operation (CASSANDRA-13512)
 * Properly evict pstmts from prepared statements cache (CASSANDRA-13641)
Merged from 3.0:
 * 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)
 * 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)
 * 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:
 * Clone HeartBeatState when building gossip messages. Make its generation/version volatile (CASSANDRA-13700)


3.11.0
 * Allow native function calls in CQLSSTableWriter (CASSANDRA-12606)
 * Replace string comparison with regex/number checks in MessagingService test (CASSANDRA-13216)
 * Fix formatting of duration columns in CQLSH (CASSANDRA-13549)
 * Fix the problem with duplicated rows when using paging with SASI (CASSANDRA-13302)
 * Allow CONTAINS statements filtering on the partition key and it’s parts (CASSANDRA-13275)
 * Fall back to even ranges calculation in clusters with vnodes when tokens are distributed unevenly (CASSANDRA-13229)
 * Fix duration type validation to prevent overflow (CASSANDRA-13218)
 * Forbid unsupported creation of SASI indexes over partition key columns (CASSANDRA-13228)
 * Reject multiple values for a key in CQL grammar. (CASSANDRA-13369)
 * UDA fails without input rows (CASSANDRA-13399)
 * Fix compaction-stress by using daemonInitialization (CASSANDRA-13188)
 * V5 protocol flags decoding broken (CASSANDRA-13443)
 * Use write lock not read lock for removing sstables from compaction strategies. (CASSANDRA-13422)
 * Use corePoolSize equal to maxPoolSize in JMXEnabledThreadPoolExecutors (CASSANDRA-13329)
 * Avoid rebuilding SASI indexes containing no values (CASSANDRA-12962)
 * Add charset to Analyser input stream (CASSANDRA-13151)
 * Fix testLimitSSTables flake caused by concurrent flush (CASSANDRA-12820)
 * cdc column addition strikes again (CASSANDRA-13382)
 * Fix static column indexes (CASSANDRA-13277)
 * DataOutputBuffer.asNewBuffer broken (CASSANDRA-13298)
 * unittest CipherFactoryTest failed on MacOS (CASSANDRA-13370)
 * Forbid SELECT restrictions and CREATE INDEX over non-frozen UDT columns (CASSANDRA-13247)
 * Default logging we ship will incorrectly print "?:?" for "%F:%L" pattern (CASSANDRA-13317)
 * Possible AssertionError in UnfilteredRowIteratorWithLowerBound (CASSANDRA-13366)
 * Support unaligned memory access for AArch64 (CASSANDRA-13326)
 * Improve SASI range iterator efficiency on intersection with an empty range (CASSANDRA-12915).
 * Fix equality comparisons of columns using the duration type (CASSANDRA-13174)
 * Move to FastThreadLocalThread and FastThreadLocal (CASSANDRA-13034)
 * nodetool stopdaemon errors out (CASSANDRA-13030)
 * Tables in system_distributed should not use gcgs of 0 (CASSANDRA-12954)
 * Fix primary index calculation for SASI (CASSANDRA-12910)
 * More fixes to the TokenAllocator (CASSANDRA-12990)
 * NoReplicationTokenAllocator should work with zero replication factor (CASSANDRA-12983)
 * Address message coalescing regression (CASSANDRA-12676)
 * Delete illegal character from StandardTokenizerImpl.jflex (CASSANDRA-13417)
 * Fix cqlsh automatic protocol downgrade regression (CASSANDRA-13307)
 * Tracing payload not passed from QueryMessage to tracing session (CASSANDRA-12835)
Merged from 3.0:
 * Filter header only commit logs before recovery (CASSANDRA-13918)
 * 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)
 * 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)
 * 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)
 * Handling partially written hint files (CASSANDRA-12728)
 * Fix NPE issue in StorageService (CASSANDRA-13060)
 * 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)
 * Legacy deserializer can create empty range tombstones (CASSANDRA-13341)
 * Legacy caching options can prevent 3.0 upgrade (CASSANDRA-13384)
 * 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)
 * 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)
 * Fix "multiple versions of ant detected..." when running ant test (CASSANDRA-13232)
 * Coalescing strategy sleeps too much (CASSANDRA-13090)
 * 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)
 * Use keyspace replication settings on system.size_estimates table (CASSANDRA-9639)
 * Add vm.max_map_count StartupCheck (CASSANDRA-13008)
 * Obfuscate password in stress-graphs (CASSANDRA-12233)
 * 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)
 * 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)
 * Nodetool upgradesstables/scrub/compact ignores system tables (CASSANDRA-13410)
 * 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)
 * Avoid starting gossiper in RemoveTest (CASSANDRA-13407)
 * Fix weightedSize() for row-cache reported by JMX and NodeTool (CASSANDRA-13393)
 * Fix JVM metric names (CASSANDRA-13103)
 * 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)
 * 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)
 * Fix negative mean latency metric (CASSANDRA-12876)
 * Use only one file pointer when creating commitlog segments (CASSANDRA-12539)
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)
 * Remove unused repositories (CASSANDRA-13278)
 * Log stacktrace of uncaught exceptions (CASSANDRA-13108)
 * Use portable stderr for java error in startup (CASSANDRA-13211)
 * Fix Thread Leak in OutboundTcpConnection (CASSANDRA-13204)
 * Upgrade netty version to fix memory leak with client encryption (CASSANDRA-13114)
 * Coalescing strategy can enter infinite loop (CASSANDRA-13159)


3.10
 * Fix secondary index queries regression (CASSANDRA-13013)
 * Add duration type to the protocol V5 (CASSANDRA-12850)
 * Fix duration type validation (CASSANDRA-13143)
 * Fix flaky GcCompactionTest (CASSANDRA-12664)
 * Fix TestHintedHandoff.hintedhandoff_decom_test (CASSANDRA-13058)
 * Fixed query monitoring for range queries (CASSANDRA-13050)
 * Remove outboundBindAny configuration property (CASSANDRA-12673)
 * Use correct bounds for all-data range when filtering (CASSANDRA-12666)
 * Remove timing window in test case (CASSANDRA-12875)
 * Resolve unit testing without JCE security libraries installed (CASSANDRA-12945)
 * Fix inconsistencies in cassandra-stress load balancing policy (CASSANDRA-12919)
 * Fix validation of non-frozen UDT cells (CASSANDRA-12916)
 * Don't shut down socket input/output on StreamSession (CASSANDRA-12903)
 * Fix Murmur3PartitionerTest (CASSANDRA-12858)
 * Move cqlsh syntax rules into separate module and allow easier customization (CASSANDRA-12897)
 * Fix CommitLogSegmentManagerTest (CASSANDRA-12283)
 * Fix cassandra-stress truncate option (CASSANDRA-12695)
 * Fix crossNode value when receiving messages (CASSANDRA-12791)
 * Don't load MX4J beans twice (CASSANDRA-12869)
 * Extend native protocol request flags, add versions to SUPPORTED, and introduce ProtocolVersion enum (CASSANDRA-12838)
 * Set JOINING mode when running pre-join tasks (CASSANDRA-12836)
 * remove net.mintern.primitive library due to license issue (CASSANDRA-12845)
 * Properly format IPv6 addresses when logging JMX service URL (CASSANDRA-12454)
 * Optimize the vnode allocation for single replica per DC (CASSANDRA-12777)
 * Use non-token restrictions for bounds when token restrictions are overridden (CASSANDRA-12419)
 * Fix CQLSH auto completion for PER PARTITION LIMIT (CASSANDRA-12803)
 * Use different build directories for Eclipse and Ant (CASSANDRA-12466)
 * Avoid potential AttributeError in cqlsh due to no table metadata (CASSANDRA-12815)
 * Fix RandomReplicationAwareTokenAllocatorTest.testExistingCluster (CASSANDRA-12812)
 * Upgrade commons-codec to 1.9 (CASSANDRA-12790)
 * Add duration data type (CASSANDRA-11873)
 * Make the fanout size for LeveledCompactionStrategy to be configurable (CASSANDRA-11550)
 * Fix timeout in ReplicationAwareTokenAllocatorTest (CASSANDRA-12784)
 * Improve sum aggregate functions (CASSANDRA-12417)
 * Make cassandra.yaml docs for batch_size_*_threshold_in_kb reflect changes in CASSANDRA-10876 (CASSANDRA-12761)
 * cqlsh fails to format collections when using aliases (CASSANDRA-11534)
 * Check for hash conflicts in prepared statements (CASSANDRA-12733)
 * Exit query parsing upon first error (CASSANDRA-12598)
 * Fix cassandra-stress to use single seed in UUID generation (CASSANDRA-12729)
 * CQLSSTableWriter does not allow Update statement (CASSANDRA-12450)
 * Config class uses boxed types but DD exposes primitive types (CASSANDRA-12199)
 * Add pre- and post-shutdown hooks to Storage Service (CASSANDRA-12461)
 * Add hint delivery metrics (CASSANDRA-12693)
 * Remove IndexInfo cache from FileIndexInfoRetriever (CASSANDRA-12731)
 * ColumnIndex does not reuse buffer (CASSANDRA-12502)
 * cdc column addition still breaks schema migration tasks (CASSANDRA-12697)
 * Upgrade metrics-reporter dependencies (CASSANDRA-12089)
 * Tune compaction thread count via nodetool (CASSANDRA-12248)
 * Add +=/-= shortcut syntax for update queries (CASSANDRA-12232)
 * Include repair session IDs in repair start message (CASSANDRA-12532)
 * Add a blocking task to Index, run before joining the ring (CASSANDRA-12039)
 * Fix NPE when using CQLSSTableWriter (CASSANDRA-12667)
 * Support optional backpressure strategies at the coordinator (CASSANDRA-9318)
 * Make randompartitioner work with new vnode allocation (CASSANDRA-12647)
 * Fix cassandra-stress graphing (CASSANDRA-12237)
 * Allow filtering on partition key columns for queries without secondary indexes (CASSANDRA-11031)
 * Fix Cassandra Stress reporting thread model and precision (CASSANDRA-12585)
 * Add JMH benchmarks.jar (CASSANDRA-12586)
 * Cleanup uses of AlterTableStatementColumn (CASSANDRA-12567)
 * Add keep-alive to streaming (CASSANDRA-11841)
 * Tracing payload is passed through newSession(..) (CASSANDRA-11706)
 * avoid deleting non existing sstable files and improve related log messages (CASSANDRA-12261)
 * json/yaml output format for nodetool compactionhistory (CASSANDRA-12486)
 * Retry all internode messages once after a connection is
   closed and reopened (CASSANDRA-12192)
 * Add support to rebuild from targeted replica (CASSANDRA-9875)
 * Add sequence distribution type to cassandra stress (CASSANDRA-12490)
 * "SELECT * FROM foo LIMIT ;" does not error out (CASSANDRA-12154)
 * Define executeLocally() at the ReadQuery Level (CASSANDRA-12474)
 * Extend read/write failure messages with a map of replica addresses
   to error codes in the v5 native protocol (CASSANDRA-12311)
 * Fix rebuild of SASI indexes with existing index files (CASSANDRA-12374)
 * Let DatabaseDescriptor not implicitly startup services (CASSANDRA-9054, 12550)
 * Fix clustering indexes in presence of static columns in SASI (CASSANDRA-12378)
 * Fix queries on columns with reversed type on SASI indexes (CASSANDRA-12223)
 * Added slow query log (CASSANDRA-12403)
 * Count full coordinated request against timeout (CASSANDRA-12256)
 * Allow TTL with null value on insert and update (CASSANDRA-12216)
 * Make decommission operation resumable (CASSANDRA-12008)
 * Add support to one-way targeted repair (CASSANDRA-9876)
 * Remove clientutil jar (CASSANDRA-11635)
 * Fix compaction throughput throttle (CASSANDRA-12366, CASSANDRA-12717)
 * Delay releasing Memtable memory on flush until PostFlush has finished running (CASSANDRA-12358)
 * Cassandra stress should dump all setting on startup (CASSANDRA-11914)
 * Make it possible to compact a given token range (CASSANDRA-10643)
 * Allow updating DynamicEndpointSnitch properties via JMX (CASSANDRA-12179)
 * Collect metrics on queries by consistency level (CASSANDRA-7384)
 * Add support for GROUP BY to SELECT statement (CASSANDRA-10707)
 * Deprecate memtable_cleanup_threshold and update default for memtable_flush_writers (CASSANDRA-12228)
 * Upgrade to OHC 0.4.4 (CASSANDRA-12133)
 * Add version command to cassandra-stress (CASSANDRA-12258)
 * Create compaction-stress tool (CASSANDRA-11844)
 * Garbage-collecting compaction operation and schema option (CASSANDRA-7019)
 * Add beta protocol flag for v5 native protocol (CASSANDRA-12142)
 * Support filtering on non-PRIMARY KEY columns in the CREATE
   MATERIALIZED VIEW statement's WHERE clause (CASSANDRA-10368)
 * Unify STDOUT and SYSTEMLOG logback format (CASSANDRA-12004)
 * COPY FROM should raise error for non-existing input files (CASSANDRA-12174)
 * Faster write path (CASSANDRA-12269)
 * Option to leave omitted columns in INSERT JSON unset (CASSANDRA-11424)
 * Support json/yaml output in nodetool tpstats (CASSANDRA-12035)
 * Expose metrics for successful/failed authentication attempts (CASSANDRA-10635)
 * Prepend snapshot name with "truncated" or "dropped" when a snapshot
   is taken before truncating or dropping a table (CASSANDRA-12178)
 * Optimize RestrictionSet (CASSANDRA-12153)
 * cqlsh does not automatically downgrade CQL version (CASSANDRA-12150)
 * Omit (de)serialization of state variable in UDAs (CASSANDRA-9613)
 * Create a system table to expose prepared statements (CASSANDRA-8831)
 * Reuse DataOutputBuffer from ColumnIndex (CASSANDRA-11970)
 * Remove DatabaseDescriptor dependency from SegmentedFile (CASSANDRA-11580)
 * Add supplied username to authentication error messages (CASSANDRA-12076)
 * Remove pre-startup check for open JMX port (CASSANDRA-12074)
 * Remove compaction Severity from DynamicEndpointSnitch (CASSANDRA-11738)
 * Restore resumable hints delivery (CASSANDRA-11960)
 * Properly record CAS contention (CASSANDRA-12626)
Merged from 3.0:
 * 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)
 * Stress daemon help is incorrect (CASSANDRA-12563)
 * Read repair is not blocking repair to finish in foreground repair (CASSANDRA-13115)
 * Replace empty strings with null values if they cannot be converted (CASSANDRA-12794)
 * Remove support for non-JavaScript UDFs (CASSANDRA-12883)
 * 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)
 * CQL often queries static columns unnecessarily (CASSANDRA-12768)
 * 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)
 * Disallow offheap_buffers memtable allocation (CASSANDRA-11039)
 * Fix CommitLogSegmentManagerTest (CASSANDRA-12283)
 * Pass root cause to CorruptBlockException when uncompression failed (CASSANDRA-12889)
 * Batch with multiple conditional updates for the same partition causes AssertionError (CASSANDRA-12867)
 * Make AbstractReplicationStrategy extendable from outside its package (CASSANDRA-12788)
 * Don't tell users to turn off consistent rangemovements during rebuild. (CASSANDRA-12296)
 * Fix CommitLogTest.testDeleteIfNotDirty (CASSANDRA-12854)
 * Avoid deadlock due to MV 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)
 * Make sure repaired tombstones are dropped when only_purge_repaired_tombstones is enabled (CASSANDRA-12703)
 * 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)
 * Handle composite prefixes with final EOC=0 as in 2.x and refactor LegacyLayout.decodeBound (CASSANDRA-12423)
 * 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)
 * 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 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)
 * 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)
 * 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)
 * 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)
 * 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
 * cqlshlib tests: increase default execute timeout (CASSANDRA-12481)
 * Forward writes to replacement node when replace_address != broadcast_address (CASSANDRA-8523)
 * Fail repair on non-existing table (CASSANDRA-12279)
 * Enable repair -pr and -local together (fix regression of CASSANDRA-7450) (CASSANDRA-12522)
 * Better handle invalid system roles table (CASSANDRA-12700)
 * Split consistent range movement flag correction (CASSANDRA-12786)
Merged from 2.1:
 * cqlsh copy-from: sort user type fields in csv (CASSANDRA-12959)
 * Don't skip sstables based on maxLocalDeletionTime (CASSANDRA-12765)


3.8, 3.9
 * Fix value skipping with counter columns (CASSANDRA-11726)
 * Fix nodetool tablestats miss SSTable count (CASSANDRA-12205)
 * Fixed flacky SSTablesIteratedTest (CASSANDRA-12282)
 * Fixed flacky SSTableRewriterTest: check file counts before calling validateCFS (CASSANDRA-12348)
 * cqlsh: Fix handling of $$-escaped strings (CASSANDRA-12189)
 * Fix SSL JMX requiring truststore containing server cert (CASSANDRA-12109)
 * RTE from new CDC column breaks in flight queries (CASSANDRA-12236)
 * Fix hdr logging for single operation workloads (CASSANDRA-12145)
 * Fix SASI PREFIX search in CONTAINS mode with partial terms (CASSANDRA-12073)
 * Increase size of flushExecutor thread pool (CASSANDRA-12071)
 * Partial revert of CASSANDRA-11971, cannot recycle buffer in SP.sendMessagesToNonlocalDC (CASSANDRA-11950)
 * Upgrade netty to 4.0.39 (CASSANDRA-12032, CASSANDRA-12034)
 * Improve details in compaction log message (CASSANDRA-12080)
 * Allow unset values in CQLSSTableWriter (CASSANDRA-11911)
 * Chunk cache to request compressor-compatible buffers if pool space is exhausted (CASSANDRA-11993)
 * Remove DatabaseDescriptor dependencies from SequentialWriter (CASSANDRA-11579)
 * Move skip_stop_words filter before stemming (CASSANDRA-12078)
 * Support seek() in EncryptedFileSegmentInputStream (CASSANDRA-11957)
 * SSTable tools mishandling LocalPartitioner (CASSANDRA-12002)
 * When SEPWorker assigned work, set thread name to match pool (CASSANDRA-11966)
 * Add cross-DC latency metrics (CASSANDRA-11569)
 * Allow terms in selection clause (CASSANDRA-10783)
 * Add bind variables to trace (CASSANDRA-11719)
 * Switch counter shards' clock to timestamps (CASSANDRA-9811)
 * Introduce HdrHistogram and response/service/wait separation to stress tool (CASSANDRA-11853)
 * entry-weighers in QueryProcessor should respect partitionKeyBindIndexes field (CASSANDRA-11718)
 * Support older ant versions (CASSANDRA-11807)
 * Estimate compressed on disk size when deciding if sstable size limit reached (CASSANDRA-11623)
 * cassandra-stress profiles should support case sensitive schemas (CASSANDRA-11546)
 * Remove DatabaseDescriptor dependency from FileUtils (CASSANDRA-11578)
 * Faster streaming (CASSANDRA-9766)
 * Add prepared query parameter to trace for "Execute CQL3 prepared query" session (CASSANDRA-11425)
 * Add repaired percentage metric (CASSANDRA-11503)
 * Add Change-Data-Capture (CASSANDRA-8844)
Merged from 3.0:
 * Fix paging for 2.x to 3.x upgrades (CASSANDRA-11195)
 * Fix clean interval not sent to commit log for empty memtable flush (CASSANDRA-12436)
 * Fix potential resource leak in RMIServerSocketFactoryImpl (CASSANDRA-12331)
 * Make sure compaction stats are updated when compaction is interrupted (CASSANDRA-12100)
 * 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 potential bad messaging service message for paged range reads
   within mixed-version 3.x clusters (CASSANDRA-12249)
 * 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 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)
 * 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)
 * 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:
 * Add system property to set the max number of native transport requests in queue (CASSANDRA-11363)
 * 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)
 * Avoid stalling paxos when the paxos state expires (CASSANDRA-12043)
 * Remove finished incoming streaming connections from MessagingService (CASSANDRA-11854)
 * Don't try to get sstables for non-repairing column families (CASSANDRA-12077)
 * Avoid marking too many sstables as repaired (CASSANDRA-11696)
 * Prevent select statements with clustering key > 64k (CASSANDRA-11882)
 * Fix clock skew corrupting other nodes with paxos (CASSANDRA-11991)
 * Remove distinction between non-existing static columns and existing but null in LWTs (CASSANDRA-9842)
 * Cache local ranges when calculating repair neighbors (CASSANDRA-11934)
 * Allow LWT operation on static column with only partition keys (CASSANDRA-10532)
 * Create interval tree over canonical sstables to avoid missing sstables during streaming (CASSANDRA-11886)
 * cqlsh COPY FROM: shutdown parent cluster after forking, to avoid corrupting SSL connections (CASSANDRA-11749)


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


2.0.0-beta1
 * Add support for indexing clustered columns (CASSANDRA-5125)
 * Removed on-heap row cache (CASSANDRA-5348)
 * use nanotime consistently for node-local timeouts (CASSANDRA-5581)
 * Avoid unnecessary second pass on name-based queries (CASSANDRA-5577)
 * Experimental triggers (CASSANDRA-1311)
 * JEMalloc support for off-heap allocation (CASSANDRA-3997)
 * Single-pass compaction (CASSANDRA-4180)
 * Removed token range bisection (CASSANDRA-5518)
 * Removed compatibility with pre-1.2.5 sstables and network messages
   (CASSANDRA-5511)
 * removed PBSPredictor (CASSANDRA-5455)
 * CAS support (CASSANDRA-5062, 5441, 5442, 5443, 5619, 5667)
 * Leveled compaction performs size-tiered compactions in L0
   (CASSANDRA-5371, 5439)
 * Add yaml network topology snitch for mixed ec2/other envs (CASSANDRA-5339)
 * Log when a node is down longer than the hint window (CASSANDRA-4554)
 * Optimize tombstone creation for ExpiringColumns (CASSANDRA-4917)
 * Improve LeveledScanner work estimation (CASSANDRA-5250, 5407)
 * Replace compaction lock with runWithCompactionsDisabled (CASSANDRA-3430)
 * Change Message IDs to ints (CASSANDRA-5307)
 * Move sstable level information into the Stats component, removing the
   need for a separate Manifest file (CASSANDRA-4872)
 * avoid serializing to byte[] on commitlog append (CASSANDRA-5199)
 * make index_interval configurable per columnfamily (CASSANDRA-3961, CASSANDRA-5650)
 * add default_time_to_live (CASSANDRA-3974)
 * add memtable_flush_period_in_ms (CASSANDRA-4237)
 * replace supercolumns internally by composites (CASSANDRA-3237, 5123)
 * upgrade thrift to 0.9.0 (CASSANDRA-3719)
 * drop unnecessary keyspace parameter from user-defined compaction API
   (CASSANDRA-5139)
 * more robust solution to incomplete compactions + counters (CASSANDRA-5151)
 * Change order of directory searching for c*.in.sh (CASSANDRA-3983)
 * Add tool to reset SSTable compaction level for LCS (CASSANDRA-5271)
 * Allow custom configuration loader (CASSANDRA-5045)
 * Remove memory emergency pressure valve logic (CASSANDRA-3534)
 * Reduce request latency with eager retry (CASSANDRA-4705)
 * cqlsh: Remove ASSUME command (CASSANDRA-5331)
 * Rebuild BF when loading sstables if bloom_filter_fp_chance
   has changed since compaction (CASSANDRA-5015)
 * remove row-level bloom filters (CASSANDRA-4885)
 * Change Kernel Page Cache skipping into row preheating (disabled by default)
   (CASSANDRA-4937)
 * Improve repair by deciding on a gcBefore before sending
   out TreeRequests (CASSANDRA-4932)
 * Add an official way to disable compactions (CASSANDRA-5074)
 * Reenable ALTER TABLE DROP with new semantics (CASSANDRA-3919)
 * Add binary protocol versioning (CASSANDRA-5436)
 * Swap THshaServer for TThreadedSelectorServer (CASSANDRA-5530)
 * Add alias support to SELECT statement (CASSANDRA-5075)
 * Don't create empty RowMutations in CommitLogReplayer (CASSANDRA-5541)
 * Use range tombstones when dropping cfs/columns from schema (CASSANDRA-5579)
 * cqlsh: drop CQL2/CQL3-beta support (CASSANDRA-5585)
 * Track max/min column names in sstables to be able to optimize slice
   queries (CASSANDRA-5514, CASSANDRA-5595, CASSANDRA-5600)
 * Binary protocol: allow batching already prepared statements (CASSANDRA-4693)
 * Allow preparing timestamp, ttl and limit in CQL3 queries (CASSANDRA-4450)
 * Support native link w/o JNA in Java7 (CASSANDRA-3734)
 * Use SASL authentication in binary protocol v2 (CASSANDRA-5545)
 * Replace Thrift HsHa with LMAX Disruptor based implementation (CASSANDRA-5582)
 * cqlsh: Add row count to SELECT output (CASSANDRA-5636)
 * Include a timestamp with all read commands to determine column expiration
   (CASSANDRA-5149)
 * Streaming 2.0 (CASSANDRA-5286, 5699)
 * Conditional create/drop ks/table/index statements in CQL3 (CASSANDRA-2737)
 * more pre-table creation property validation (CASSANDRA-5693)
 * Redesign repair messages (CASSANDRA-5426)
 * Fix ALTER RENAME post-5125 (CASSANDRA-5702)
 * Disallow renaming a 2ndary indexed column (CASSANDRA-5705)
 * Rename Table to Keyspace (CASSANDRA-5613)
 * Ensure changing column_index_size_in_kb on different nodes don't corrupt the
   sstable (CASSANDRA-5454)
 * Move resultset type information into prepare, not execute (CASSANDRA-5649)
 * Auto paging in binary protocol (CASSANDRA-4415, 5714)
 * Don't tie client side use of AbstractType to JDBC (CASSANDRA-4495)
 * Adds new TimestampType to replace DateType (CASSANDRA-5723, CASSANDRA-5729)
Merged from 1.2:
 * make starting native protocol server idempotent (CASSANDRA-5728)
 * Fix loading key cache when a saved entry is no longer valid (CASSANDRA-5706)
 * Fix serialization of the LEFT gossip value (CASSANDRA-5696)
 * cqlsh: Don't show 'null' in place of empty values (CASSANDRA-5675)
 * Race condition in detecting version on a mixed 1.1/1.2 cluster
   (CASSANDRA-5692)
 * Fix skipping range tombstones with reverse queries (CASSANDRA-5712)
 * Expire entries out of ThriftSessionManager (CASSANRDA-5719)
 * Don't keep ancestor information in memory (CASSANDRA-5342)
 * cqlsh: fix handling of semicolons inside BATCH queries (CASSANDRA-5697)


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


