Merge branch cassandra-3.11 into trunk
[cassandra.git] / NEWS.txt
1 PLEASE READ: MAXIMUM TTL EXPIRATION DATE NOTICE (CASSANDRA-14092)
2 ------------------------------------------------------------------
3 (General upgrading instructions are available in the next section)
4
5 The maximum expiration timestamp that can be represented by the storage engine is
6 2038-01-19T03:14:06+00:00, which means that inserts with TTL thatl expire after
7 this date are not currently supported. By default, INSERTS with TTL exceeding the
8 maximum supported date are rejected, but it's possible to choose a different
9  expiration overflow policy. See CASSANDRA-14092.txt for more details.
10
11 Prior to 3.0.16 (3.0.X) and 3.11.2 (3.11.x) there was no protection against INSERTS
12 with TTL expiring after the maximum supported date, causing the expiration time
13 field to overflow and the records to expire immediately. Clusters in the 2.X and
14 lower series are not subject to this when assertions are enabled. Backed up SSTables
15 can be potentially recovered and recovery instructions can be found on the
16 CASSANDRA-14092.txt file.
17
18 If you use or plan to use very large TTLS (10 to 20 years), read CASSANDRA-14092.txt
19 for more information.
20
21 GENERAL UPGRADING ADVICE FOR ANY VERSION
22 ========================================
23
24 Snapshotting is fast (especially if you have JNA installed) and takes
25 effectively zero disk space until you start compacting the live data
26 files again.  Thus, best practice is to ALWAYS snapshot before any
27 upgrade, just in case you need to roll back to the previous version.
28 (Cassandra version X + 1 will always be able to read data files created
29 by version X, but the inverse is not necessarily the case.)
30
31 When upgrading major versions of Cassandra, you will be unable to
32 restore snapshots created with the previous major version using the
33 'sstableloader' tool. You can upgrade the file format of your snapshots
34 using the provided 'sstableupgrade' tool.
35
36 4.0
37 ===
38
39 New features
40 ------------
41    - An experimental option to compare all merkle trees together has been added - for example, in
42      a 3 node cluster with 2 replicas identical and 1 out-of-date, with this option enabled, the
43      out-of-date replica will only stream a single copy from up-to-date replica. Enable it by adding
44      "-os" to nodetool repair. See CASSANDRA-3200.
45    - The currentTimestamp, currentDate, currentTime and currentTimeUUID functions have been added.
46      See CASSANDRA-13132
47    - Support for arithmetic operations between `timestamp`/`date` and `duration` has been added.
48      See CASSANDRA-11936
49    - Support for arithmetic operations on number has been added. See CASSANDRA-11935
50    - Preview expected streaming required for a repair (nodetool repair --preview), and validate the
51      consistency of repaired data between nodes (nodetool repair --validate). See CASSANDRA-13257
52    - Support for selecting Map values and Set elements has been added for SELECT queries. See CASSANDRA-7396
53    - Change-Data-Capture has been modified to make CommitLogSegments available
54      immediately upon creation via hard-linking the files. This means that incomplete
55      segments will be available in cdc_raw rather than fully flushed. See documentation
56      and CASSANDRA-12148 for more detail.
57    - The initial build of materialized views can be parallelized. The number of concurrent builder
58      threads is specified by the property `cassandra.yaml:concurrent_materialized_view_builders`.
59      This property can be modified at runtime through both JMX and the new `setconcurrentviewbuilders`
60      and `getconcurrentviewbuilders` nodetool commands. See CASSANDRA-12245 for more details.
61    - There is now a binary full query log based on Chronicle Queue that can be controlled using
62      nodetool enablefullquerylog, disablefullquerylog, and resetfullquerylog. The log
63      contains all queries invoked, approximate time they were invoked, any parameters necessary
64      to bind wildcard values, and all query options. A human readable version of the log can be
65      dumped or tailed using the new bin/fqltool utility. The full query log is designed to be safe
66      to use in production and limits utilization of heap memory and disk space with limits
67      you can specify when enabling the log.
68      See nodetool and fqltool help text for more information.
69    - SSTableDump now supports the -l option to output each partition as it's own json object
70      See CASSANDRA-13848 for more detail
71
72 Upgrading
73 ---------
74     - Cassandra 4.0 removed support for COMPACT STORAGE tables. All Compact Tables
75       have to be migrated using `ALTER ... DROP COMPACT STORAGE` statement in 3.0/3.11.
76       Cassandra starting 4.0 will not start if flags indicate that the table is non-CQL.
77       Syntax for creating compact tables is also deprecated.
78     - Support for legacy auth tables in the system_auth keyspace (users,
79       permissions, credentials) and the migration code has been removed. Migration
80       of these legacy auth tables must have been completed before the upgrade to
81       4.0 and the legacy tables must have been removed. See the 'Upgrading' section
82       for version 2.2 for migration instructions.
83     - Cassandra 4.0 removed support for the deprecated Thrift interface. Amongst
84       other things, this implies the removal of all yaml options related to thrift
85       ('start_rpc', rpc_port, ...).
86     - Cassandra 4.0 removed support for any pre-3.0 format. This means you
87       cannot upgrade from a 2.x version to 4.0 directly, you have to upgrade to
88       a 3.0.x/3.x version first (and run upgradesstable). In particular, this
89       mean Cassandra 4.0 cannot load or read pre-3.0 sstables in any way: you
90       will need to upgrade those sstable in 3.0.x/3.x first.
91     - Upgrades from 3.0.x or 3.x are supported since 3.0.13 or 3.11.0, previous
92       versions will causes issues during rolling upgrades (CASSANDRA-13274).
93     - Cassandra will no longer allow invalid keyspace replication options, such
94       as invalid datacenter names for NetworkTopologyStrategy. Operators MUST
95       add new nodes to a datacenter before they can set set ALTER or CREATE
96       keyspace replication policies using that datacenter. Existing keyspaces
97       will continue to operate, but CREATE and ALTER will validate that all
98       datacenters specified exist in the cluster.
99     - Cassandra 4.0 fixes a problem with incremental repair which caused repaired
100       data to be inconsistent between nodes. The fix changes the behavior of both
101       full and incremental repairs. For full repairs, data is no longer marked
102       repaired. For incremental repairs, anticompaction is run at the beginning
103       of the repair, instead of at the end. If incremental repair was being used
104       prior to upgrading, a full repair should be run after upgrading to resolve
105       any inconsistencies.
106     - Config option index_interval has been removed (it was deprecated since 2.0)
107     - Deprecated repair JMX APIs are removed.
108     - The version of snappy-java has been upgraded to 1.1.2.6
109         - the miniumum value for internode message timeouts is 10ms. Previously, any
110           positive value was allowed. See cassandra.yaml entries like
111           read_request_timeout_in_ms for more details.
112         - Cassandra 4.0 allows a single port to be used for both secure and insecure
113           connections between cassandra nodes (CASSANDRA-10404). See the yaml for
114           specific property changes, and see the security doc for full details.
115     - Due to the parallelization of the initial build of materialized views,
116       the per token range view building status is stored in the new table
117       `system.view_builds_in_progress`. The old table `system.views_builds_in_progress`
118       is no longer used and can be removed. See CASSANDRA-12245 for more details.
119         - Config option commitlog_sync_batch_window_in_ms has been deprecated as it's
120           documentation has been incorrect and the setting itself near useless.
121           Batch mode remains a valid commit log mode, however.
122         - There is a new commit log mode, group, which is similar to batch mode
123           but blocks for up to a configurable number of milliseconds between disk flushes.
124         - nodetool clearsnapshot now required the --all flag to remove all snapshots.
125           Previous behavior would delete all snapshots by default.
126     - Nodes are now identified by a combination of IP, and storage port.
127       Existing JMX APIs, nodetool, and system tables continue to work
128       and accept/return just an IP, but there is a new
129       version of each that works with the full unambiguous identifier.
130       You should prefer these over the deprecated ambiguous versions that only
131       work with an IP. This was done to support multiple instances per IP.
132       Additionally we are moving to only using a single port for encrypted and
133       unencrypted traffic and if you want multiple instances per IP you must
134       first switch encrypted traffic to the storage port and not a separate
135       encrypted port. If you want to use multiple instances per IP
136       with SSL you will need to use StartTLS on storage_port and set
137       outgoing_encrypted_port_source to gossip outbound connections
138       know what port to connect to for each instance. Before changing
139       storage port or native port at nodes you must first upgrade the entire cluster
140       and clients to 4.0 so they can handle the port not being consistent across
141       the cluster.
142
143 Materialized Views
144 -------------------
145    - Following a discussion regarding concerns about the design and safety of Materialized Views, the C* development
146      community no longer recommends them for production use, and considers them experimental. Warnings messages will
147      now be logged when they are created. (See https://www.mail-archive.com/dev@cassandra.apache.org/msg11511.html)
148    - An 'enable_materialized_views' flag has been added to cassandra.yaml to allow operators to prevent creation of
149      views
150
151 3.11.2
152 ======
153
154 Upgrading
155 ---------
156    - See MAXIMUM TTL EXPIRATION DATE NOTICE above.
157     - Cassandra is now relying on the JVM options to properly shutdown on OutOfMemoryError. By default it will
158       rely on the OnOutOfMemoryError option as the ExitOnOutOfMemoryError and CrashOnOutOfMemoryError options
159       are not supported by the older 1.7 and 1.8 JVMs. A warning will be logged at startup if none of those JVM
160       options are used. See CASSANDRA-13006 for more details
161     - Cassandra is not logging anymore by default an Heap histogram on OutOfMemoryError. To enable that behavior
162       set the 'cassandra.printHeapHistogramOnOutOfMemoryError' System property to 'true'. See CASSANDRA-13006
163       for more details.
164
165 3.11.1
166 ======
167
168 Upgrading
169 ---------
170     - Creating Materialized View with filtering on non-primary-key base column
171       (added in CASSANDRA-10368) is disabled, because the liveness of view row
172       is depending on multiple filtered base non-key columns and base non-key
173       column used in view primary-key. This semantic cannot be supported without
174       storage format change, see CASSANDRA-13826. For append-only use case, you
175       may still use this feature with a startup flag: "-Dcassandra.mv.allow_filtering_nonkey_columns_unsafe=true"
176
177 Compact Storage (only when upgrading from 3.X or any version lower than 3.0.15)
178 ---------------
179     - Starting version 4.0, Thrift and COMPACT STORAGE is no longer supported.
180       'ALTER ... DROP COMPACT STORAGE' statement makes Compact Tables CQL-compatible,
181       exposing internal structure of Thrift/Compact Tables. You can find more details
182       on exposed internal structure under: 
183       http://cassandra.apache.org/doc/latest/cql/appendices.html#appendix-c-dropping-compact-storage
184
185       For uninterrupted cluster upgrades, drivers now support 'NO_COMPACT' startup option.
186       Supplying this flag will have same effect as 'DROP COMPACT STORAGE', but only for the
187       current connection.
188
189       In order to upgrade, clients supporting a non-compact schema view can be rolled out
190       gradually. When all the clients are updated 'ALTER ... DROP COMPACT STORAGE' can be
191       executed. After dropping compact storage, ’NO_COMPACT' option will have no effect
192       after that.
193
194
195 Materialized Views
196 -------------------
197
198 Materialized Views (only when upgrading from any version lower than 3.0.15 (3.0 series) or 3.11.1 (3.X series))
199 ---------------------------------------------------------------------------------------
200     - Cassandra will no longer allow dropping columns on tables with Materialized Views.
201     - A change was made in the way the Materialized View timestamp is computed, which
202       may cause an old deletion to a base column which is view primary key (PK) column
203       to not be reflected in the view when repairing the base table post-upgrade. This
204       condition is only possible when a column deletion to an MV primary key (PK) column
205       not present in the base table PK (via UPDATE base SET view_pk_col = null or DELETE
206       view_pk_col FROM base) is missed before the upgrade and received by repair after the upgrade.
207       If such column deletions are done on a view PK column which is not a base PK, it's advisable
208       to run repair on the base table of all nodes prior to the upgrade. Alternatively it's possible
209       to fix potential inconsistencies by running repair on the views after upgrade or drop and
210       re-create the views. See CASSANDRA-11500 for more details.
211     - Removal of columns not selected in the Materialized View (via UPDATE base SET unselected_column
212       = null or DELETE unselected_column FROM base) may not be properly reflected in the view in some
213       situations so we advise against doing deletions on base columns not selected in views
214       until this is fixed on CASSANDRA-13826.
215
216 3.11.0
217 ======
218
219 Upgrading
220 ---------
221    - Creating Materialized View with filtering on non-primary-key base column
222      (added in CASSANDRA-10368) is disabled, because the liveness of view row
223      is depending on multiple filtered base non-key columns and base non-key
224      column used in view primary-key. This semantic cannot be supported without
225      storage format change, see CASSANDRA-13826. For append-only use case, you
226      may still use this feature with a startup flag: "-Dcassandra.mv.allow_filtering_nonkey_columns_unsafe=true"
227    - The NativeAccessMBean isAvailable method will only return true if the
228      native library has been successfully linked. Previously it was returning
229      true if JNA could be found but was not taking into account link failures.
230    - Primary ranges in the system.size_estimates table are now based on the keyspace
231      replication settings and adjacent ranges are no longer merged (CASSANDRA-9639).
232    - In 2.1, the default for otc_coalescing_strategy was 'DISABLED'.
233      In 2.2 and 3.0, it was changed to 'TIMEHORIZON', but that value was shown
234      to be a performance regression. The default for 3.11.0 and newer has
235      been reverted to 'DISABLED'. Users upgrading from Cassandra 2.2 or 3.0 should
236      be aware that the default has changed.
237    - The StorageHook interface has been modified to allow to retrieve read information from
238      SSTableReader (CASSANDRA-13120).
239
240 3.10
241 ====
242
243 New features
244 ------------
245    - New `DurationType` (cql duration). See CASSANDRA-11873
246    - Runtime modification of concurrent_compactors is now available via nodetool
247    - Support for the assignment operators +=/-= has been added for update queries.
248    - An Index implementation may now provide a task which runs prior to joining
249      the ring. See CASSANDRA-12039
250    - Filtering on partition key columns is now also supported for queries without
251      secondary indexes.
252    - A slow query log has been added: slow queries will be logged at DEBUG level.
253      For more details refer to CASSANDRA-12403 and slow_query_log_timeout_in_ms
254      in cassandra.yaml.
255    - Support for GROUP BY queries has been added.
256    - A new compaction-stress tool has been added to test the throughput of compaction
257      for any cassandra-stress user schema.  see compaction-stress help for how to use.
258    - Compaction can now take into account overlapping tables that don't take part
259      in the compaction to look for deleted or overwritten data in the compacted tables.
260      Then such data is found, it can be safely discarded, which in turn should enable
261      the removal of tombstones over that data.
262
263      The behavior can be engaged in two ways:
264        - as a "nodetool garbagecollect -g CELL/ROW" operation, which applies
265          single-table compaction on all sstables to discard deleted data in one step.
266        - as a "provide_overlapping_tombstones:CELL/ROW/NONE" compaction strategy flag,
267          which uses overlapping tables as a source of deletions/overwrites during all
268          compactions.
269      The argument specifies the granularity at which deleted data is to be found:
270        - If ROW is specified, only whole deleted rows (or sets of rows) will be
271          discarded.
272        - If CELL is specified, any columns whose value is overwritten or deleted
273          will also be discarded.
274        - NONE (default) specifies the old behavior, overlapping tables are not used to
275          decide when to discard data.
276      Which option to use depends on your workload, both ROW and CELL increase the
277      disk load on compaction (especially with the size-tiered compaction strategy),
278      with CELL being more resource-intensive. Both should lead to better read
279      performance if deleting rows (resp. overwriting or deleting cells) is common.
280    - Prepared statements are now persisted in the table prepared_statements in
281      the system keyspace. Upon startup, this table is used to preload all
282      previously prepared statements - i.e. in many cases clients do not need to
283      re-prepare statements against restarted nodes.
284    - cqlsh can now connect to older Cassandra versions by downgrading the native
285      protocol version. Please note that this is currently not part of our release
286      testing and, as a consequence, it is not guaranteed to work in all cases.
287      See CASSANDRA-12150 for more details.
288    - Snapshots that are automatically taken before a table is dropped or truncated
289      will have a "dropped" or "truncated" prefix on their snapshot tag name.
290    - Metrics are exposed for successful and failed authentication attempts.
291      These can be located using the object names org.apache.cassandra.metrics:type=Client,name=AuthSuccess
292      and org.apache.cassandra.metrics:type=Client,name=AuthFailure respectively.
293    - Add support to "unset" JSON fields in prepared statements by specifying DEFAULT UNSET.
294      See CASSANDRA-11424 for details
295    - Allow TTL with null value on insert and update. It will be treated as equivalent to inserting a 0.
296    - Removed outboundBindAny configuration property. See CASSANDRA-12673 for details.
297
298 Upgrading
299 ---------
300     - Support for alter types of already defined tables and of UDTs fields has been disabled.
301       If it is necessary to return a different type, please use casting instead. See
302       CASSANDRA-12443 for more details.
303     - Specifying the default_time_to_live option when creating or altering a
304       materialized view was erroneously accepted (and ignored). It is now
305       properly rejected.
306     - Only Java and JavaScript are now supported UDF languages.
307       The sandbox in 3.0 already prevented the use of script languages except Java
308       and JavaScript.
309     - Compaction now correctly drops sstables out of CompactionTask when there
310       isn't enough disk space to perform the full compaction.  This should reduce
311       pending compaction tasks on systems with little remaining disk space.
312     - Request timeouts in cassandra.yaml (read_request_timeout_in_ms, etc) now apply to the
313       "full" request time on the coordinator.  Previously, they only covered the time from
314       when the coordinator sent a message to a replica until the time that the replica
315       responded.  Additionally, the previous behavior was to reset the timeout when performing
316       a read repair, making a second read to fix a short read, and when subranges were read
317       as part of a range scan or secondary index query.  In 3.10 and higher, the timeout
318       is no longer reset for these "subqueries".  The entire request must complete within
319       the specified timeout.  As a consequence, your timeouts may need to be adjusted
320       to account for this.  See CASSANDRA-12256 for more details.
321     - Logs written to stdout are now consistent with logs written to files.
322       Time is now local (it was UTC on the console and local in files). Date, thread, file
323       and line info where added to stdout. (see CASSANDRA-12004)
324     - The 'clientutil' jar, which has been somewhat broken on the 3.x branch, is not longer provided.
325       The features provided by that jar are provided by any good java driver and we advise relying on drivers rather on
326       that jar, but if you need that jar for backward compatiblity until you do so, you should use the version provided
327       on previous Cassandra branch, like the 3.0 branch (by design, the functionality provided by that jar are stable
328       accross versions so using the 3.0 jar for a client connecting to 3.x should work without issues).
329     - (Tools development) DatabaseDescriptor no longer implicitly startups components/services like
330       commit log replay. This may break existing 3rd party tools and clients. In order to startup
331       a standalone tool or client application, use the DatabaseDescriptor.toolInitialization() or
332       DatabaseDescriptor.clientInitialization() methods. Tool initialization sets up partitioner,
333       snitch, encryption context. Client initialization just applies the configuration but does not
334       setup anything. Instead of using Config.setClientMode() or Config.isClientMode(), which are
335       deprecated now, use one of the appropiate new methods in DatabaseDescriptor.
336     - Application layer keep-alives were added to the streaming protocol to prevent idle incoming connections from
337       timing out and failing the stream session (CASSANDRA-11839). This effectively deprecates the streaming_socket_timeout_in_ms
338       property in favor of streaming_keep_alive_period_in_secs. See cassandra.yaml for more details about this property.
339     - Duration litterals support the ISO 8601 format. By consequence, identifiers matching that format
340       (e.g P2Y or P1MT6H) will not be supported anymore (CASSANDRA-11873).
341
342 3.8
343 ===
344
345 New features
346 ------------
347    - Shared pool threads are now named according to the stage they are executing
348      tasks for. Thread names mentioned in traced queries change accordingly.
349    - A new option has been added to cassandra-stress "-rate fixed={number}/s"
350      that forces a scheduled rate of operations/sec over time. Using this, stress can
351      accurately account for coordinated ommission from the stress process.
352    - The cassandra-stress "-rate limit=" option has been renamed to "-rate throttle="
353    - hdr histograms have been added to stress runs, it's output can be saved to disk using:
354      "-log hdrfile=" option. This histogram includes response/service/wait times when used with the
355      fixed or throttle rate options.  The histogram file can be plotted on
356      http://hdrhistogram.github.io/HdrHistogram/plotFiles.html
357    - TimeWindowCompactionStrategy has been added. This has proven to be a better approach
358      to time series compaction and new tables should use this instead of DTCS. See
359      CASSANDRA-9666 for details.
360    - Change-Data-Capture is now available. See cassandra.yaml and for cdc-specific flags and
361      a brief explanation of on-disk locations for archived data in CommitLog form. This can
362      be enabled via ALTER TABLE ... WITH cdc=true.
363      Upon flush, CommitLogSegments containing data for CDC-enabled tables are moved to
364      the data/cdc_raw directory until removed by the user and writes to CDC-enabled tables
365      will be rejected with a WriteTimeoutException once cdc_total_space_in_mb is reached
366      between unflushed CommitLogSegments and cdc_raw.
367      NOTE: CDC is disabled by default in the .yaml file. Do not enable CDC on a mixed-version
368      cluster as it will lead to exceptions which can interrupt traffic. Once all nodes
369      have been upgraded to 3.8 it is safe to enable this feature and restart the cluster.
370
371 Upgrading
372 ---------
373    - The ReversedType behaviour has been corrected for clustering columns of
374      BYTES type containing empty value. Scrub should be run on the existing
375      SSTables containing a descending clustering column of BYTES type to correct
376      their ordering. See CASSANDRA-12127 for more details.
377    - Ec2MultiRegionSnitch will no longer automatically set broadcast_rpc_address
378      to the public instance IP if this property is defined on cassandra.yaml.
379    - The name "json" and "distinct" are not valid anymore a user-defined function
380      names (they are still valid as column name however). In the unlikely case where
381      you had defined functions with such names, you will need to recreate
382      those under a different name, change your code to use the new names and
383      drop the old versions, and this _before_ upgrade (see CASSANDRA-10783 for more
384      details).
385
386 Deprecation
387 -----------
388    - DateTieredCompactionStrategy has been deprecated - new tables should use
389      TimeWindowCompactionStrategy. Note that migrating an existing DTCS-table to TWCS might
390      cause increased compaction load for a while after the migration so make sure you run
391      tests before migrating. Read CASSANDRA-9666 for background on this.
392
393 3.7
394 ===
395
396 Upgrading
397 ---------
398    - A maximum size for SSTables values has been introduced, to prevent out of memory
399      exceptions when reading corrupt SSTables. This maximum size can be set via
400      max_value_size_in_mb in cassandra.yaml. The default is 256MB, which matches the default
401      value of native_transport_max_frame_size_in_mb. SSTables will be considered corrupt if
402      they contain values whose size exceeds this limit. See CASSANDRA-9530 for more details.
403
404
405 3.6
406 =====
407
408 New features
409 ------------
410    - JMX connections can now use the same auth mechanisms as CQL clients. New options
411      in cassandra-env.(sh|ps1) enable JMX authentication and authorization to be delegated
412      to the IAuthenticator and IAuthorizer configured in cassandra.yaml. The default settings
413      still only expose JMX locally, and use the JVM's own security mechanisms when remote
414      connections are permitted. For more details on how to enable the new options, see the
415      comments in cassandra-env.sh. A new class of IResource, JMXResource, is provided for
416      the purposes of GRANT/REVOKE via CQL. See CASSANDRA-10091 for more details.
417      Also, directly setting JMX remote port via the com.sun.management.jmxremote.port system
418      property at startup is deprecated. See CASSANDRA-11725 for more details.
419    - JSON timestamps are now in UTC and contain the timezone information, see CASSANDRA-11137 for more details.
420    - Collision checks are performed when joining the token ring, regardless of whether
421      the node should bootstrap. Additionally, replace_address can legitimately be used
422      without bootstrapping to help with recovery of nodes with partially failed disks.
423      See CASSANDRA-10134 for more details.
424    - Key cache will only hold indexed entries up to the size configured by
425      column_index_cache_size_in_kb in cassandra.yaml in memory. Larger indexed entries
426      will never go into memory. See CASSANDRA-11206 for more details.
427    - For tables having a default_time_to_live specifying a TTL of 0 will remove the TTL
428      from the inserted or updated values.
429    - Startup is now aborted if corrupted transaction log files are found. The details
430      of the affected log files are now logged, allowing the operator to decide how
431      to resolve the situation.
432    - Filtering expressions are made more pluggable and can be added programatically via
433      a QueryHandler implementation. See CASSANDRA-11295 for more details.
434
435
436
437 3.4
438 ===
439
440 New features
441 ------------
442     - Internal authentication now supports caching of encrypted credentials.
443       Reference cassandra.yaml:credentials_validity_in_ms
444     - Remote configuration of auth caches via JMX can be disabled using the
445       the system property cassandra.disable_auth_caches_remote_configuration
446     - sstabledump tool is added to be 3.0 version of former sstable2json. The tool only
447       supports v3.0+ SSTables. See tool's help for more detail.
448
449 Upgrading
450 ---------
451     - Nothing specific to 3.4 but please see previous versions upgrading section,
452       especially if you are upgrading from 2.2.
453
454 Deprecation
455 -----------
456     - The mbean interfaces org.apache.cassandra.auth.PermissionsCacheMBean and
457       org.apache.cassandra.auth.RolesCacheMBean are deprecated in favor of
458       org.apache.cassandra.auth.AuthCacheMBean. This generalized interface is
459       common across all caches in the auth subsystem. The specific mbean interfaces
460       for each individual cache will be removed in a subsequent major version.
461
462
463 3.2
464 ===
465
466 New features
467 ------------
468    - We now make sure that a token does not exist in several data directories. This
469      means that we run one compaction strategy per data_file_directory and we use
470      one thread per directory to flush. Use nodetool relocatesstables to make sure your
471      tokens are in the correct place, or just wait and compaction will handle it. See
472      CASSANDRA-6696 for more details.
473    - bound maximum in-flight commit log replay mutation bytes to 64 megabytes
474      tunable via cassandra.commitlog_max_outstanding_replay_bytes
475    - Support for type casting has been added to the selection clause.
476    - Hinted handoff now supports compression. Reference cassandra.yaml:hints_compression.
477      Note: hints compression is currently disabled by default.
478
479 Upgrading
480 ---------
481    - The compression ratio metrics computation has been modified to be more accurate.
482    - Running Cassandra as root is prevented by default.
483    - JVM options are moved from cassandra-env.(sh|ps1) to jvm.options file
484
485 Deprecation
486 -----------
487    - The Thrift API is deprecated and will be removed in Cassandra 4.0.
488
489
490 3.1
491 =====
492
493 Upgrading
494 ---------
495    - The return value of SelectStatement::getLimit as been changed from DataLimits
496      to int.
497    - Custom index implementation should be aware that the method Indexer::indexes()
498      has been removed as its contract was misleading and all custom implementation
499      should have almost surely returned true inconditionally for that method.
500    - GC logging is now enabled by default (you can disable it in the jvm.options
501      file if you prefer).
502
503
504 3.0
505 ===
506
507 New features
508 ------------
509    - EACH_QUORUM is now a supported consistency level for read requests.
510    - Support for IN restrictions on any partition key component or clustering key
511      as well as support for EQ and IN multicolumn restrictions has been added to
512      UPDATE and DELETE statement.
513    - Support for single-column and multi-colum slice restrictions (>, >=, <= and <)
514      has been added to DELETE statements
515    - nodetool rebuild_index accepts the index argument without
516      the redundant table name
517    - Materialized Views, which allow for server-side denormalization, is now
518      available. Materialized views provide an alternative to secondary indexes
519      for non-primary key queries, and perform much better for indexing high
520      cardinality columns.
521      See http://www.datastax.com/dev/blog/new-in-cassandra-3-0-materialized-views
522    - Hinted handoff has been completely rewritten. Hints are now stored in flat
523      files, with less overhead for storage and more efficient dispatch.
524      See CASSANDRA-6230 for full details.
525    - Option to not purge unrepaired tombstones. To avoid users having data resurrected
526      if repair has not been run within gc_grace_seconds, an option has been added to
527      only allow tombstones from repaired sstables to be purged. To enable, set the
528      compaction option 'only_purge_repaired_tombstones':true but keep in mind that if
529      you do not run repair for a long time, you will keep all tombstones around which
530      can cause other problems.
531    - Enabled warning on GC taking longer than 1000ms. See
532      cassandra.yaml:gc_warn_threshold_in_ms
533
534 Upgrading
535 ---------
536    - Clients must use the native protocol version 3 when upgrading from 2.2.X as
537      the native protocol version 4 is not compatible between 2.2.X and 3.Y. See
538      https://www.mail-archive.com/user@cassandra.apache.org/msg45381.html for details.
539    - A new argument of type InetAdress has been added to IAuthenticator::newSaslNegotiator,
540      representing the IP address of the client attempting authentication. It will be a breaking
541      change for any custom implementations.
542    - token-generator tool has been removed.
543    - Upgrade to 3.0 is supported from Cassandra 2.1 versions greater or equal to 2.1.9,
544      or Cassandra 2.2 versions greater or equal to 2.2.2. Upgrade from Cassandra 2.0 and
545      older versions is not supported.
546    - The 'memtable_allocation_type: offheap_objects' option has been removed. It should
547      be re-introduced in a future release and you can follow CASSANDRA-9472 to know more.
548    - Configuration parameter memory_allocator in cassandra.yaml has been removed.
549    - The native protocol versions 1 and 2 are not supported anymore.
550    - Max mutation size is now configurable via max_mutation_size_in_kb setting in
551      cassandra.yaml; the default is half the size commitlog_segment_size_in_mb * 1024.
552    - 3.0 requires Java 8u40 or later.
553    - Garbage collection options were moved from cassandra-env to jvm.options file.
554    - New transaction log files have been introduced to replace the compactions_in_progress
555      system table, temporary file markers (tmp and tmplink) and sstable ancerstors.
556      Therefore, compaction metadata no longer contains ancestors. Transaction log files
557      list sstable descriptors involved in compactions and other operations such as flushing
558      and streaming. Use the sstableutil tool to list any sstable files currently involved
559      in operations not yet completed, which previously would have been marked as temporary.
560      A transaction log file contains one sstable per line, with the prefix "add:" or "remove:".
561      They also contain a special line "commit", only inserted at the end when the transaction
562      is committed. On startup we use these files to cleanup any partial transactions that were
563      in progress when the process exited. If the commit line is found, we keep new sstables
564      (those with the "add" prefix) and delete the old sstables (those with the "remove" prefix),
565      vice-versa if the commit line is missing. Should you lose or delete these log files,
566      both old and new sstable files will be kept as live files, which will result in duplicated
567      sstables. These files are protected by incremental checksums so you should not manually
568      edit them. When restoring a full backup or moving sstable files, you should clean-up
569      any left over transactions and their temporary files first. You can use this command:
570       ===> sstableutil -c ks table
571      See CASSANDRA-7066 for full details.
572    - New write stages have been added for batchlog and materialized view mutations
573      you can set their size in cassandra.yaml
574    - User defined functions are now executed in a sandbox.
575      To use UDFs and UDAs, you have to enable them in cassandra.yaml.
576    - New SSTable version 'la' with improved bloom-filter false-positive handling
577      compared to previous version 'ka' used in 2.2 and 2.1. Running sstableupgrade
578      is not necessary but recommended.
579    - Before upgrading to 3.0, make sure that your cluster is in complete agreement
580      (schema versions outputted by `nodetool describecluster` are all the same).
581    - Schema metadata is now stored in the new `system_schema` keyspace, and
582      legacy `system.schema_*` tables are now gone; see CASSANDRA-6717 for details.
583    - Pig's support has been removed.
584    - Hadoop BulkOutputFormat and BulkRecordWriter have been removed; use
585      CqlBulkOutputFormat and CqlBulkRecordWriter instead.
586    - Hadoop ColumnFamilyInputFormat and ColumnFamilyOutputFormat have been removed;
587      use CqlInputFormat and CqlOutputFormat instead.
588    - Hadoop ColumnFamilyRecordReader and ColumnFamilyRecordWriter have been removed;
589      use CqlRecordReader and CqlRecordWriter instead.
590    - hinted_handoff_enabled in cassandra.yaml no longer supports a list of data centers.
591      To specify a list of excluded data centers when hinted_handoff_enabled is set to true,
592      use hinted_handoff_disabled_datacenters, see CASSANDRA-9035 for details.
593    - The `sstable_compression` and `chunk_length_kb` compression options have been deprecated.
594      The new options are `class` and `chunk_length_in_kb`. Disabling compression should now
595      be done by setting the new option `enabled` to `false`.
596    - The compression option `crc_check_chance` became a top-level table option, but is currently
597      enforced only against tables with enabled compression.
598    - Only map syntax is now allowed for caching options. ALL/NONE/KEYS_ONLY/ROWS_ONLY syntax
599      has been deprecated since 2.1.0 and is being removed in 3.0.0.
600    - The 'index_interval' option for 'CREATE TABLE' statements, which has been deprecated
601      since 2.1 and replaced with the 'min_index_interval' and 'max_index_interval' options,
602      has now been removed.
603    - Batchlog entries are now stored in a new table - system.batches.
604      The old one has been deprecated.
605    - JMX methods set/getCompactionStrategyClass have been removed, use
606      set/getCompactionParameters or set/getCompactionParametersJson instead.
607    - SizeTieredCompactionStrategy parameter cold_reads_to_omit has been removed.
608    - The secondary index API has been comprehensively reworked. This will be a breaking
609      change for any custom index implementations, which should now look to implement
610      the new org.apache.cassandra.index.Index interface. New syntax has been added to create
611      and query row-based indexes, which are not explicitly linked to a single column in the
612      base table.
613
614
615 2.2.4
616 =====
617
618 Deprecation
619 -----------
620     - Pig support has been deprecated, and will be removed in 3.0.
621       Please see CASSANDRA-10542 for more details.
622     - Configuration parameter memory_allocator in cassandra.yaml has been deprecated
623       and will be removed in 3.0.0. As mentioned below for 2.2.0, jemalloc is
624       automatically preloaded on Unix platforms.
625
626 Operations
627 ----------
628     - Switching data center or racks is no longer an allowed operation on a node
629       which has data. Instead, the node will need to be decommissioned and
630       rebootstrapped. If moving from the SimpleSnitch, make sure that the data
631       center and rack containing all current nodes is named "datacenter1" and
632       "rack1". To override this behaviour use -Dcassandra.ignore_rack=true and/or
633       -Dcassandra.ignore_dc=true.
634     - Reloading the configuration file of GossipingPropertyFileSnitch has been disabled.
635
636 Upgrading
637 ---------
638     - The default for the inter-DC stream throughput setting
639       (inter_dc_stream_throughput_outbound_megabits_per_sec in cassandra.yaml) is
640       the same than the one for intra-DC one (200Mbps) instead of being unlimited.
641       Having it unlimited was never intended and was a bug.
642
643 New features
644 ------------
645     - Time windows in DTCS are now limited to 1 day by default to be able to
646       handle bootstrap and repair in a better way. To get the old behaviour,
647       increase max_window_size_seconds.
648     - DTCS option max_sstable_age_days is now deprecated and defaults to 1000 days.
649     - Native protocol server now allows both SSL and non-SSL connections on
650       the same port.
651
652 2.2.3
653 =====
654
655 Upgrading
656 ---------
657     - Nothing specific to this release, but please see 2.2 if you are upgrading
658       from a previous version.
659
660
661 2.2.2
662 =====
663
664 Changed Defaults
665 ----------------
666    - commitlog_total_space_in_mb will use the smaller of 8192, and 1/4
667      of the total space of the commitlog volume. (Before: always used
668      8192)
669    - The following INFO logs were reduced to DEBUG level and will now show
670      on debug.log instead of system.log:
671       - Memtable flushing actions
672       - Commit log replayed files
673       - Compacted sstables
674       - SStable opening (SSTableReader)
675
676 New features
677 ------------
678    - Custom QueryHandlers can retrieve the column specifications for the bound
679      variables from QueryOptions by using the hasColumnSpecifications()
680      and getColumnSpecifications() methods.
681    - A new default assynchronous log appender debug.log was created in addition
682      to  the system.log appender in order to provide more detailed log debugging.
683      In order to disable debug logging, you must comment-out the ASYNCDEBUGLOG
684      appender on conf/logback.xml. See CASSANDRA-10241 for more information.
685
686
687 2.2.1
688 =====
689
690 New features
691 ------------
692    - COUNT(*) and COUNT(1) can be selected with other columns or functions
693
694
695 2.2
696 ===
697
698 Upgrading
699 ---------
700    - The authentication & authorization subsystems have been redesigned to
701      support role based access control (RBAC), resulting in a change to the
702      schema of the system_auth keyspace. See below for more detail.
703      For systems already using the internal auth implementations, the process
704      for converting existing data during a rolling upgrade is straightforward.
705      As each node is restarted, it will attempt to convert any data in the
706      legacy tables into the new schema. Until enough nodes to satisfy the
707      replication strategy for the system_auth keyspace are upgraded and so have
708      the new schema, this conversion will fail with the failure being reported
709      in the system log.
710      During the upgrade, Cassandra's internal auth classes will continue to use
711      the legacy tables, so clients experience no disruption. Issuing DCL
712      statements during an upgrade is not supported.
713      Once all nodes are upgraded, an operator with superuser privileges should
714      drop the legacy tables, system_auth.users, system_auth.credentials and
715      system_auth.permissions. Doing so will prompt Cassandra to switch over to
716      the new tables without requiring any further intervention.
717      While the legacy tables are present a restarted node will re-run the data
718      conversion and report the outcome so that operators can verify that it is
719      safe to drop them.
720
721 New features
722 ------------
723    - The LIMIT clause applies now only to the number of rows returned to the user,
724      not to the number of row queried. By consequence, queries using aggregates will not
725      be impacted by the LIMIT clause anymore.
726    - Very large batches will now be rejected (defaults to 50kb). This
727      can be customized by modifying batch_size_fail_threshold_in_kb.
728    - Selecting columns,scalar functions, UDT fields, writetime or ttl together
729      with aggregated is now possible. The value returned for the columns,
730      scalar functions, UDT fields, writetime and ttl will be the ones for
731      the first row matching the query.
732    - Windows is now a supported platform. Powershell execution for startup scripts
733      is highly recommended and can be enabled via an administrator command-prompt
734      with: 'powershell set-executionpolicy unrestricted'
735    - It is now possible to do major compactions when using leveled compaction.
736      Doing that will take all sstables and compact them out in levels. The
737      levels will be non overlapping so doing this will still not be something
738      you want to do very often since it might cause more compactions for a while.
739      It is also possible to split output when doing a major compaction with
740      STCS - files will be split in sizes 50%, 25%, 12.5% etc of the total size.
741      This might be a bit better than old major compactions which created one big
742      file on disk.
743    - A new tool has been added bin/sstableverify that checks for errors/bitrot
744      in all sstables.  Unlike scrub, this is a non-invasive tool.
745    - Authentication & Authorization APIs have been updated to introduce
746      roles. Roles and Permissions granted to them are inherited, supporting
747      role based access control. The role concept supercedes that of users
748      and CQL constructs such as CREATE USER are deprecated but retained for
749      compatibility. The requirement to explicitly create Roles in Cassandra
750      even when auth is handled by an external system has been removed, so
751      authentication & authorization can be delegated to such systems in their
752      entirety.
753    - In addition to the above, Roles are also first class resources and can be the
754      subject of permissions. Users (roles) can now be granted permissions on other
755      roles, including CREATE, ALTER, DROP & AUTHORIZE, which removesthe need for
756      superuser privileges in order to perform user/role management operations.
757    - Creators of database resources (Keyspaces, Tables, Roles) are now automatically
758      granted all permissions on them (if the IAuthorizer implementation supports
759      this).
760    - SSTable file name is changed. Now you don't have Keyspace/CF name
761      in file name. Also, secondary index has its own directory under parent's
762      directory.
763    - Support for user-defined functions and user-defined aggregates have
764      been added to CQL.
765      ************************************************************************
766      IMPORTANT NOTE: user-defined functions can be used to execute
767      arbitrary and possibly evil code in Cassandra 2.2, and are
768      therefore disabled by default.  To enable UDFs edit
769      cassandra.yaml and set enable_user_defined_functions to true.
770
771      CASSANDRA-9402 will add a security manager for UDFs in Cassandra
772      3.0.  This will inherently be backwards-incompatible with any 2.2
773      UDF that perform insecure operations such as opening a socket or
774      writing to the filesystem.
775      ************************************************************************
776    - Row-cache is now fully off-heap.
777    - jemalloc is now automatically preloaded and used on Linux and OS-X if
778      installed.
779    - Please ensure on Unix platforms that there is no libjnadispath.so
780      installed which is accessible by Cassandra. Old versions of
781      libjna packages (< 4.0.0) will cause problems - e.g. Debian Wheezy
782      contains libjna versin 3.2.x.
783    - The node now keeps up when streaming is failed during bootstrapping. You can
784      use new `nodetool bootstrap resume` command to continue streaming after resolving
785      an issue.
786    - Protocol version 4 specifies that bind variables do not require having a
787      value when executing a statement. Bind variables without a value are
788      called 'unset'. The 'unset' bind variable is serialized as the int
789      value '-2' without following bytes.
790      In an EXECUTE or BATCH request an unset bind value does not modify the value and
791      does not create a tombstone, an unset bind ttl is treated as 'unlimited',
792      an unset bind timestamp is treated as 'now', an unset bind counter operation
793      does not change the counter value.
794      Unset tuple field, UDT field and map key are not allowed.
795      In a QUERY request an unset limit is treated as 'unlimited'.
796      Unset WHERE clauses with unset partition column, clustering column
797      or index column are not allowed.
798    - New `ByteType` (cql tinyint). 1-byte signed integer
799    - New `ShortType` (cql smallint). 2-byte signed integer
800    - New `SimpleDateType` (cql date). 4-byte unsigned integer
801    - New `TimeType` (cql time). 8-byte long
802    - The toDate(timeuuid), toTimestamp(timeuuid) and toUnixTimestamp(timeuuid) functions have been added to allow
803      to convert from timeuuid into date type, timestamp type and bigint raw value.
804      The functions unixTimestampOf(timeuuid) and dateOf(timeuuid) have been deprecated.
805    - The toDate(timestamp) and toUnixTimestamp(timestamp) functions have been added to allow
806      to convert from timestamp into date type and bigint raw value.
807    - The toTimestamp(date) and toUnixTimestamp(date) functions have been added to allow
808      to convert from date into timestamp type and bigint raw value.
809    - SizeTieredCompactionStrategy parameter cold_reads_to_omit has been removed.
810    - The default JVM flag -XX:+PerfDisableSharedMem will cause the following tools JVM
811      to stop working: jps, jstack, jinfo, jmc, jcmd as well as 3rd party tools like Jolokia.
812      If you wish to use these tools you can comment this flag out in cassandra-env.{sh,ps1}
813
814 Upgrading
815 ---------
816    - Thrift rpc is no longer being started by default.
817      Set `start_rpc` parameter to `true` to enable it.
818    - Pig's CqlStorage has been removed, use CqlNativeStorage instead
819    - Pig's CassandraStorage has been deprecated. CassandraStorage
820      should only be used against tables created via thrift.
821      Use CqlNativeStorage for all other tables.
822    - IAuthenticator been updated to remove responsibility for user/role
823      maintenance and is now solely responsible for validating credentials,
824      This is primarily done via SASL, though an optional method exists for
825      systems which need support for the Thrift login() method.
826    - IRoleManager interface has been added which takes over the maintenance
827      functions from IAuthenticator. IAuthorizer is mainly unchanged. Auth data
828      in systems using the stock internal implementations PasswordAuthenticator
829      & CassandraAuthorizer will be automatically converted during upgrade,
830      with minimal operator intervention required. Custom implementations will
831      require modification, though these can be used in conjunction with the
832      stock CassandraRoleManager so providing an IRoleManager implementation
833      should not usually be necessary.
834    - Fat client support has been removed since we have push notifications to clients
835    - cassandra-cli has been removed. Please use cqlsh instead.
836    - YamlFileNetworkTopologySnitch has been removed; switch to
837      GossipingPropertyFileSnitch instead.
838    - CQL2 has been removed entirely in this release (previously deprecated
839      in 2.0.0). Please switch to CQL3 if you haven't already done so.
840    - The results of CQL3 queries containing an IN restriction will be ordered
841      in the normal order and not anymore in the order in which the column values were
842      specified in the IN restriction.
843    - Some secondary index queries with restrictions on non-indexed clustering
844      columns were not requiring ALLOW FILTERING as they should. This has been
845      fixed, and those queries now require ALLOW FILTERING (see CASSANDRA-8418
846      for details).
847    - The SSTableSimpleWriter and SSTableSimpleUnsortedWriter classes have been
848      deprecated and will be removed in the next major Cassandra release. You
849      should use the CQLSSTableWriter class instead.
850    - The sstable2json and json2sstable tools have been deprecated and will be
851      removed in the next major Cassandra release. See CASSANDRA-9618
852      (https://issues.apache.org/jira/browse/CASSANDRA-9618) for details.
853    - nodetool enablehandoff will no longer support a list of data centers starting
854      with the next major release. Two new commands will be added, enablehintsfordc and disablehintsfordc,
855      to exclude data centers from using hinted handoff when the global status is enabled.
856      In cassandra.yaml, hinted_handoff_enabled will no longer support a list of data centers starting
857      with the next major release. A new setting will be added, hinted_handoff_disabled_datacenters,
858      to exclude data centers when the global status is enabled, see CASSANDRA-9035 for details.
859
860
861 2.1.13
862 ======
863
864 New features
865 ------------
866     - New options for cqlsh COPY FROM and COPY TO, see CASSANDRA-9303 for details.
867
868 2.1.10
869 =====
870
871 New features
872 ------------
873    - The syntax TRUNCATE TABLE X is now accepted as an alias for TRUNCATE X
874
875
876 2.1.9
877 =====
878
879 Upgrading
880 ---------
881     - cqlsh will now display timestamps with a UTC timezone. Previously,
882       timestamps were displayed with the local timezone.
883     - Commit log files are no longer recycled by default, due to negative
884       performance implications. This can be enabled again with the
885       commitlog_segment_recycling option in your cassandra.yaml
886     - JMX methods set/getCompactionStrategyClass have been deprecated, use
887       set/getCompactionParameters/set/getCompactionParametersJson instead
888
889 2.1.8
890 =====
891
892 Upgrading
893 ---------
894     - Nothing specific to this release, but please see 2.1 if you are upgrading
895       from a previous version.
896
897
898 2.1.7
899 =====
900
901
902
903 2.1.6
904 =====
905
906 Upgrading
907 ---------
908     - Nothing specific to this release, but please see 2.1 if you are upgrading
909       from a previous version.
910
911
912 2.1.5
913 =====
914
915 Upgrading
916 ---------
917     - The option to omit cold sstables with size tiered compaction has been
918       removed - it is almost always better to use date tiered compaction for
919       workloads that have cold data.
920
921 2.1.4
922 =====
923
924 Upgrading
925 ---------
926 The default JMX config now listens to localhost only. You must enable
927 the other JMX flags in cassandra-env.sh manually.
928
929
930 2.1.3
931 =====
932
933 Upgrading
934 ---------
935     - Prepending a list to a list collection was erroneously resulting in
936       the prepended list being reversed upon insertion.  If you were depending
937       on this buggy behavior, note that it has been corrected.
938     - Incremental replacement of compacted SSTables has been disabled for this
939       release.
940
941
942 2.1.2
943 =====
944
945 Upgrading
946 ---------
947     - Nothing specific to this release, but please see 2.1 if you are upgrading
948       from a previous version.
949
950
951 2.1.1
952 =====
953
954 Upgrading
955 ---------
956     - Nothing specific to this release, but please see 2.1 if you are upgrading
957       from a previous version.
958
959 New features
960 ------------
961    - Netty support for epoll on linux is now enabled.  If for some
962      reason you want to disable it pass, the following system property
963      -Dcassandra.native.epoll.enabled=false
964
965
966 2.1
967 ===
968
969 New features
970 ------------
971    - Default data and log locations have changed.  If not set in
972      cassandra.yaml, the data file directory, commitlog directory,
973      and saved caches directory will default to $CASSANDRA_HOME/data/data,
974      $CASSANDRA_HOME/data/commitlog, and $CASSANDRA_HOME/data/saved_caches,
975      respectively.  The log directory now defaults to $CASSANDRA_HOME/logs.
976      If not set, $CASSANDRA_HOME, defaults to the top-level directory of
977      the installation.
978      Note that this should only affect source checkouts and tarballs.
979      Deb and RPM packages will continue to use /var/lib/cassandra and
980      /var/log/cassandra in cassandra.yaml.
981    - SSTable data directory name is slightly changed. Each directory will
982      have hex string appended after CF name, e.g.
983          ks/cf-5be396077b811e3a3ab9dc4b9ac088d/
984      This hex string part represents unique ColumnFamily ID.
985      Note that existing directories are used as is, so only newly created
986      directories after upgrade have new directory name format.
987    - Saved key cache files also have ColumnFamily ID in their file name.
988    - It is now possible to do incremental repairs, sstables that have been
989      repaired are marked with a timestamp and not included in the next
990      repair session. Use nodetool repair -par -inc to use this feature.
991      A tool to manually mark/unmark sstables as repaired is available in
992      tools/bin/sstablerepairedset. This is particularly important when
993      using LCS, or any data not repaired in your first incremental repair
994      will be put back in L0.
995    - Bootstrapping now ensures that range movements are consistent,
996      meaning the data for the new node is taken from the node that is no
997      longer a responsible for that range of keys.
998      If you want the old behavior (due to a lost node perhaps)
999      you can set the following property (-Dcassandra.consistent.rangemovement=false)
1000    - It is now possible to use quoted identifiers in triggers' names.
1001      WARNING: if you previously used triggers with capital letters in their
1002      names, then you must quote them from now on.
1003    - Improved stress tool (http://goo.gl/OTNqiQ)
1004    - New incremental repair option (http://goo.gl/MjohJp, http://goo.gl/f8jSme)
1005    - Incremental replacement of compacted SSTables (http://goo.gl/JfDBGW)
1006    - The row cache can now cache only the head of partitions (http://goo.gl/6TJPH6)
1007    - Off-heap memtables (http://goo.gl/YT7znJ)
1008    - CQL improvements and additions: User-defined types, tuple types, 2ndary
1009      indexing of collections, ... (http://goo.gl/kQl7GW)
1010
1011 Upgrading
1012 ---------
1013    - commitlog_sync_batch_window_in_ms behavior has changed from the
1014      maximum time to wait between fsync to the minimum time.  We are
1015      working on making this more user-friendly (see CASSANDRA-9533) but in the
1016      meantime, this means 2.1 needs a much smaller batch window to keep
1017      writer threads from starving.  The suggested default is now 2ms.
1018    - Rolling upgrades from anything pre-2.0.7 is not supported. Furthermore
1019      pre-2.0 sstables are not supported. This means that before upgrading
1020      a node on 2.1, this node must be started on 2.0 and
1021      'nodetool upgdradesstables' must be run (and this even in the case
1022      of not-rolling upgrades).
1023    - For size-tiered compaction users, Cassandra now defaults to ignoring
1024      the coldest 5% of sstables.  This can be customized with the
1025      cold_reads_to_omit compaction option; 0.0 omits nothing (the old
1026      behavior) and 1.0 omits everything.
1027    - Multithreaded compaction has been removed.
1028    - Counters implementation has been changed, replaced by a safer one with
1029      less caveats, but different performance characteristics. You might have
1030      to change your data model to accomodate the new implementation.
1031      (See https://issues.apache.org/jira/browse/CASSANDRA-6504 and the
1032      blog post at http://goo.gl/qj8iQl for details).
1033    - (per-table) index_interval parameter has been replaced with
1034      min_index_interval and max_index_interval paratemeters. index_interval
1035      has been deprecated.
1036    - support for supercolumns has been removed from json2sstable
1037
1038
1039 2.0.11
1040 ======
1041
1042 Upgrading
1043 ---------
1044     - Nothing specific to this release, but refer to previous entries if you
1045       are upgrading from a previous version.
1046
1047 New features
1048 ------------
1049     - DateTieredCompactionStrategy added, optimized for time series data and groups
1050       data that is written closely in time (CASSANDRA-6602 for details). Consider
1051       this experimental for now.
1052
1053
1054 2.0.10
1055 ======
1056
1057 New features
1058 ------------
1059     - CqlPaginRecordReader and CqlPagingInputFormat have both been removed.
1060       Use CqlInputFormat instead.
1061     - If you are using Leveled Compaction, you can now disable doing size-tiered
1062       compaction in L0 by starting Cassandra with -Dcassandra.disable_stcs_in_l0
1063       (see CASSANDRA-6621 for details).
1064     - Shuffle and taketoken have been removed.  For clusters that choose to
1065       upgrade to vnodes, creating a new datacenter with vnodes and migrating is
1066       recommended. See http://goo.gl/Sna2S1 for further information.
1067
1068
1069 2.0.9
1070 =====
1071
1072 Upgrading
1073 ---------
1074     - Default values for read_repair_chance and local_read_repair_chance have been
1075       swapped. Namely, default read_repair_chance is now set to 0.0, and default
1076       local_read_repair_chance to 0.1.
1077     - Queries selecting only CQL static columns were (mistakenly) not returning one
1078       result per row in the partition. This has been fixed and a SELECT DISTINCT
1079       can be used when only the static column of a partition needs to be fetch
1080       without fetching the whole partition. But if you use static columns, please
1081       make sure this won't affect you (see CASSANDRA-7305 for details).
1082
1083
1084 2.0.8
1085 =====
1086
1087 New features
1088 ------------
1089     - New snitches have been used for users of Google Compute Engine and of
1090       Cloudstack.
1091
1092 Upgrading
1093 ---------
1094     - Nothing specific to this release, but please see 2.0.7 if you are upgrading
1095       from a previous version.
1096
1097
1098 2.0.7
1099 =====
1100
1101 Upgrading
1102 ---------
1103     - Nothing specific to this release, but please see 2.0.6 if you are upgrading
1104       from a previous version.
1105
1106
1107 2.0.6
1108 =====
1109
1110 New features
1111 ------------
1112     - CQL now support static columns, allows to batch multiple conditional updates
1113       and has a new syntax for slicing over multiple clustering columns
1114       (http://goo.gl/B6qz4j).
1115     - Repair can be restricted to a set of nodes using the -hosts option in nodetool.
1116     - A new 'nodetool taketoken' command relocate tokens with vnodes.
1117     - Hinted handoff can be enabled only for some data-centers (see
1118       hinted_handoff_enabled in cassandra.yaml)
1119
1120 Upgrading
1121 ---------
1122     - Nothing specific to this release, but please see 2.0.5 if you are upgrading
1123       from a previous version.
1124
1125
1126 2.0.5
1127 =====
1128
1129 New features
1130 ------------
1131     - Batchlog replay can be, and is throttled by default now.
1132       See batchlog_replay_throttle_in_kb setting in cassandra.yaml.
1133     - Scrub can now optionally skip corrupt counter partitions. Please note
1134       that this will lead to the loss of all the counter updates in the skipped
1135       partition. See the --skip-corrupted option.
1136
1137 Upgrading
1138 ---------
1139     - If your cluster began on a version before 1.2, check that your secondary
1140       index SSTables are on version 'ic' before upgrading.  If not, run
1141       'nodetool upgradesstables' if on 1.2.14 or later, or run 'nodetool
1142       upgradesstables ks cf' with the keyspace and secondary index named
1143       explicitly otherwise.  If you don't do this and upgrade to 2.0.x and it
1144       refuses to start because of 'hf' version files in the secondary index,
1145       you will need to delete/move them out of the way and recreate the index
1146       when 2.0.x starts.
1147
1148
1149 2.0.3
1150 =====
1151
1152 New features
1153 ------------
1154     - It's now possible to configure the maximum allowed size of the native
1155       protocol frames (native_transport_max_frame_size_in_mb in the yaml file).
1156
1157 Upgrading
1158 ---------
1159     - NaN and Infinity are new valid floating point constants in CQL3 and are now reserved
1160       keywords. In the unlikely case you were using one of them as an identifier (for a
1161       column, a keyspace or a table), you will now have to double-quote them (see
1162       http://cassandra.apache.org/doc/cql3/CQL.html#identifiers for "quoted identifiers").
1163     - The IEndpointStateChangeSubscriber has a new method, beforeChange, that
1164       any custom implemenations using the class will need to implement.
1165
1166
1167 2.0.2
1168 =====
1169
1170 New features
1171 ------------
1172     - Speculative retry defaults to 99th percentile
1173       (See blog post at http://www.datastax.com/dev/blog/rapid-read-protection-in-cassandra-2-0-2)
1174     - Configurable metrics reporting
1175       (see conf/metrics-reporter-config-sample.yaml)
1176     - Compaction history and stats are now saved to system keyspace
1177       (system.compaction_history table). You can access historiy via
1178       new 'nodetool compactionhistory' command or CQL.
1179
1180 Upgrading
1181 ---------
1182     - Nodetool defaults to Sequential mode for repair operations
1183
1184
1185 2.0.1
1186 =====
1187 Upgrading
1188 ---------
1189     - The default memtable allocation has changed from 1/3 of heap to 1/4
1190       of heap.  Also, default (single-partition) read and write timeouts
1191       have been reduced from 10s to 5s and 2s, respectively.
1192
1193
1194 2.0.0
1195 =====
1196
1197 Upgrading
1198 ---------
1199     - Java 7 is now *required*!
1200     - Upgrading is ONLY supported from Cassandra 1.2.9 or later. This
1201       goes for sstable compatibility as well as network.  When
1202       upgrading from an earlier release, upgrade to 1.2.9 first and
1203       run upgradesstables before proceeding to 2.0.
1204     - CAS and new features in CQL such as DROP COLUMN assume that cell
1205       timestamps are microseconds-since-epoch.  Do not use these
1206       features if you are using client-specified timestamps with some
1207       other source.
1208     - Replication and strategy options do not accept unknown options anymore.
1209       This was already the case for CQL3 in 1.2 but this is now the case for
1210       thrift too.
1211     - auto_bootstrap of a single-token node with no initial_token will
1212       now pick a random token instead of bisecting an existing token
1213       range.  We recommend upgrading to vnodes; failing that, we
1214       recommend specifying initial_token.
1215     - reduce_cache_sizes_at, reduce_cache_capacity_to, and
1216       flush_largest_memtables_at options have been removed from cassandra.yaml.
1217     - CacheServiceMBean.reduceCacheSizes() has been removed.
1218       Use CacheServiceMBean.set{Key,Row}CacheCapacityInMB() instead.
1219     - authority option in cassandra.yaml has been deprecated since 1.2.0,
1220       but it has been completely removed in 2.0. Please use 'authorizer' option.
1221     - ASSUME command has been removed from cqlsh. Use CQL3 blobAsType() and
1222       typeAsBlob() conversion functions instead.
1223       See https://cassandra.apache.org/doc/cql3/CQL.html#blobFun for details.
1224     - Inputting blobs as string constants is now fully deprecated in
1225       favor of blob constants. Make sure to update your applications to use
1226       the new syntax while you are still on 1.2 (which supports both string
1227       and blob constants for blob input) before upgrading to 2.0.
1228     - index_interval is now moved to ColumnFamily property. You can change value
1229       with ALTER TABLE ... WITH statement and SSTables written after that will
1230       have new value. When upgrading, Cassandra will pick up the value defined in
1231       cassanda.yaml as the default for existing ColumnFamilies, until you explicitly
1232       set the value for those.
1233     - The deprecated native_transport_min_threads option has been removed in
1234       Cassandra.yaml.
1235
1236 Operations
1237 ----------
1238     - VNodes are enabled by default in cassandra.yaml.  initial_token
1239       for non-vnode deployments has been removed from the example
1240       yaml, but is still respected if specified.
1241     - Major compactions, cleanup, scrub, and upgradesstables will interrupt
1242       any in-progress compactions (but not repair validations) when invoked.
1243     - Disabling autocompactions by setting min/max compaction threshold to 0
1244       has been deprecated, instead, use the nodetool commands 'disableautocompaction'
1245       and 'enableautocompaction' or set the compaction strategy option enabled = false
1246     - ALTER TABLE DROP has been reenabled for CQL3 tables and has new semantics now.
1247       See https://cassandra.apache.org/doc/cql3/CQL.html#alterTableStmt and
1248       https://issues.apache.org/jira/browse/CASSANDRA-3919 for details.
1249     - CAS uses gc_grace_seconds to determine how long to keep unused paxos
1250       state around for, or a minimum of three hours.
1251     - A new hints created metric is tracked per target, replacing countPendingHints
1252     - After performance testing for CASSANDRA-5727, the default LCS filesize
1253       has been changed from 5MB to 160MB.
1254     - cqlsh DESCRIBE SCHEMA no longer outputs the schema of system_* keyspaces;
1255       use DESCRIBE FULL SCHEMA if you need the schema of system_* keyspaces.
1256     - CQL2 has been deprecated, and will be removed entirely in 2.2. See
1257       CASSANDRA-5918 for details.
1258     - Commit log archiver now assumes the client time stamp to be in microsecond
1259       precision, during restore. Please refer to commitlog_archiving.properties.
1260
1261
1262 Features
1263 --------
1264     - Lightweight transactions
1265       (http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0)
1266     - Alias support has been added to CQL3 SELECT statement. Refer to
1267       CQL3 documentation (http://cassandra.apache.org/doc/cql3/CQL.html) for details.
1268     - JEMalloc support (see memory_allocator in cassandra.yaml)
1269     - Experimental triggers support.  See examples/ for how to use.  "Experimental"
1270       means "tied closely to internal data structures; we plan to decouple this in
1271       the future, which will probably break triggers written against this initial
1272       API."
1273     - Numerous improvements to CQL3 and a new version of the native protocol. See
1274       http://www.datastax.com/dev/blog/cql-in-cassandra-2-0 for details.
1275
1276 1.2.11
1277 ======
1278
1279 Features
1280 --------
1281     - Added a new consistency level, LOCAL_ONE, that forces all CL.ONE operations to
1282       execute only in the local datacenter.
1283     - New replace_address to supplant the (now removed) replace_token and
1284       replace_node workflows to replace a dead node in place.  Works like the
1285       old options, but takes the IP address of the node to be replaced.
1286
1287 1.2.9
1288 =====
1289
1290 Features
1291 --------
1292     - A history of executed nodetool commands is now captured.
1293       It can be found in ~/.cassandra/nodetool.history. Other tools output files
1294       (cli and cqlsh history, .cqlshrc) are now centralized in ~/.cassandra, as well.
1295     - A new sstablesplit utility allows to split large sstables offline.
1296
1297
1298
1299 1.2.8
1300 =====
1301
1302 Upgrading
1303 ---------
1304     - Nothing specific to this release, but please see 1.2.7 if you are upgrading
1305       from a previous version.
1306
1307
1308 1.2.7
1309 =====
1310
1311 Upgrading
1312 ---------
1313     - If you have decommissioned a node in the past 72 hours, it is imperative
1314       that you not upgrade until such time has passed, or do a full cluster
1315       restart (not rolling) before beginning the upgrade.  This only applies to
1316       decommission, not removetoken.
1317
1318
1319 1.2.6
1320 =====
1321
1322 Upgrading
1323 ---------
1324     - hinted_handoff_throttle_in_kb is now reduced by a factor
1325       proportional to the number of nodes in the cluster (see
1326       https://issues.apache.org/jira/browse/CASSANDRA-5272).
1327     - CQL3 syntax for CREATE CUSTOM INDEX has been updated. See CQL3
1328       documentation for details.
1329
1330
1331 1.2.5
1332 =====
1333
1334 Features
1335 --------
1336     - Custom secondary index support has been added to CQL3. Refer to
1337       CQL3 documentation (http://cassandra.apache.org/doc/cql3/CQL.html)
1338       for details and examples.
1339
1340 Upgrading
1341 ---------
1342     - The native CQL transport is enabled by default on part 9042.
1343
1344
1345 1.2.4
1346 =====
1347
1348 Upgrading
1349 ---------
1350     - 'nodetool upgradesstables' now only upgrades/rewrites sstables that are
1351       not on the current version (which is usually what you want). Use the new
1352       -a flag to recover the old behavior of rewriting all sstables.
1353
1354 Features
1355 --------
1356     - superuser setup delay (10 seconds) can now be overridden using
1357       'cassandra.superuser_setup_delay_ms' property.
1358
1359
1360 1.2.3
1361 =====
1362
1363 Upgrading
1364 ---------
1365     - CQL3 used to be case-insensitive for property map key in ALTER and CREATE
1366       statements. In other words:
1367         CREATE KEYSPACE test WITH replication = { 'CLASS' : 'SimpleStrategy',
1368                                                   'REPLICATION_FACTOR' : '1' }
1369       was allowed. However, this was not consistent with the fact that string
1370       literal are case sensitive in every other places and more importantly this
1371       break NetworkTopologyStrategy for which DC names are case sensitive. Those
1372       property map key are now case sensitive. So the statement above should be
1373       changed to:
1374         CREATE KEYSPACE test WITH replication = { 'class' : 'SimpleStrategy',
1375                                                   'replication_factor' : '1' }
1376
1377
1378 1.2.2
1379 =====
1380
1381 Upgrading
1382 ---------
1383     - CQL3 type validation for constants has been fixed, which may require
1384       fixing queries that were relying on the previous loose validation. Please
1385       refer to the CQL3 documentation (http://cassandra.apache.org/doc/cql3/CQL.html)
1386       and in particular the changelog section for more details. Please note in
1387       particular that inputing blobs as strings constants is now deprecated (in
1388       favor of blob constants) and its support will be removed in a future
1389       version.
1390
1391 Features
1392 --------
1393     - Built-in CQL3-based implementations of IAuthenticator (PasswordAuthenticator)
1394       and IAuthorizer (CassandraAuthorizer) have been added. PasswordAuthenticator
1395       stores usernames and hashed passwords in system_auth.credentials table;
1396       CassandraAuthorizer stores permissions in system_auth.permissions table.
1397     - system_auth keyspace is now alterable via ALTER KEYSPACE queries.
1398       The default is SimpleStrategy with replication_factor of 1, but it's
1399       advised to raise RF to at least 3 or 5, since CL.QUORUM is used for all
1400       auth-related queries. It's also possible to change the strategy to NTS.
1401     - Permissions caching with time-based expiration policy has been added to reduce
1402       performance impact of authorization. Permission validity can be configured
1403       using 'permissions_validity_in_ms' setting in cassandra.yaml. The default
1404       is 2000 (2 seconds).
1405     - SimpleAuthenticator and SimpleAuthorizer examples have been removed. Please
1406       look at CassandraAuthorizer/PasswordAuthenticator instead.
1407
1408
1409 1.2.1
1410 =====
1411
1412 Upgrading
1413 ---------
1414     - In CQL3, date string are no longer accepted as timeuuid value since a
1415       date string is not a correct representation of a timeuuid. Instead, new
1416       methods (minTimeuuid, maxTimeuuid, now, dateOf, unixTimestampOf) have been
1417       introduced to make working on timeuuid from date string easy. cqlsh also
1418       does not display timeuuid as date string (since this is a lossy
1419       representation), but the new dateOf method can be used instead. Please
1420       refer to the reference documentation (http://cassandra.apache.org/doc/cql3/CQL.html)
1421       for more detail.
1422     - For client implementors: CQL3 client using the thrift interface should
1423       use the new execute_cql3_query, prepare_cql3_query and execute_prepared_cql3_query
1424       since 1.2.0. However, Cassandra 1.2.0 was not complaining if CQL3 was set
1425       through set_cql_version but the now CQL2 only methods were used. This is
1426       now the case.
1427     - Queries that uses unrecognized or bad compaction or replication strategy
1428       options are now refused (instead of simply logging a warning).
1429
1430
1431 1.2
1432 ===
1433
1434 Upgrading
1435 ---------
1436     - IAuthenticator interface has been updated to support dynamic
1437       user creation, modification and removal. Users, even when stored
1438       externally, now have to be explicitly created using
1439       CREATE USER query first. AllowAllAuthenticator and SimpleAuthenticator
1440       have been updated for the new interface, but you'll have to update
1441       your old IAuthenticator implementations for 1.2. To ease this process,
1442       a new abstract LegacyAuthenticator class has been added - subclass it
1443       in your old IAuthenticator implementaion and everything should just work
1444       (this only affects users who implemented custom authenticators).
1445     - IAuthority interface has been deprecated in favor of IAuthorizer.
1446       AllowAllAuthority and SimpleAuthority have been renamed to
1447       AllowAllAuthorizer and SimpleAuthorizer, respectively. In order to
1448       simplify the upgrade to the new interface, a new abstract
1449       LegacyAuthorizer has been added - you should subclass it in your
1450       old IAuthority implementation and everything should just work
1451       (this only affects users who implemented custom authorities).
1452       'authority' setting in cassandra.yaml has been renamed to 'authorizer',
1453       'authority' is no longer recognized. This affects all upgrading users.
1454     - 1.2 is NOT network-compatible with versions older than 1.0. That
1455       means if you want to do a rolling, zero-downtime upgrade, you'll need
1456       to upgrade first to 1.0.x or 1.1.x, and then to 1.2.  1.2 retains
1457       the ability to read data files from Cassandra versions at least
1458       back to 0.6, so a non-rolling upgrade remains possible with just
1459       one step.
1460     - The default partitioner for new clusters is Murmur3Partitioner,
1461       which is about 10% faster for index-intensive workloads.  Partitioners
1462       cannot be changed once data is in the cluster, however, so if you are
1463       switching to the 1.2 cassandra.yaml, you should change this to
1464       RandomPartitioner or whatever your old partitioner was.
1465     - If you using counters and upgrading from a version prior to
1466       1.1.6, you should drain existing Cassandra nodes prior to the
1467       upgrade to prevent overcount during commitlog replay (see
1468       CASSANDRA-4782).  For non-counter uses, drain is not required
1469       but is a good practice to minimize restart time.
1470     - Tables using LeveledCompactionStrategy will default to not
1471       creating a row-level bloom filter.  The default in older versions
1472       of Cassandra differs; you should manually set the false positive
1473       rate to 1.0 (to disable) or 0.01 (to enable, if you make many
1474       requests for rows that do not exist).
1475     - The hints schema was changed from 1.1 to 1.2. Cassandra automatically
1476       snapshots and then truncates the hints column family as part of
1477       starting up 1.2 for the first time.  Additionally, upgraded nodes
1478       will not store new hints destined for older (pre-1.2) nodes. It is
1479       therefore recommended that you perform a cluster upgrade when all
1480       nodes are up. Because hints will be lost, a cluster-wide repair (with
1481       -pr) is recommended after upgrade of all nodes.
1482     - The `nodetool removetoken` command (and corresponding JMX operation)
1483       have been renamed to `nodetool removenode`.  This function is
1484       incompatible with the earlier `nodetool removetoken`, and attempts to
1485       remove nodes in this way with a mixed 1.1 (or lower) / 1.2 cluster,
1486       is not supported.
1487     - The somewhat ill-conceived CollatingOrderPreservingPartitioner
1488       has been removed. Use Murmur3Partitioner (recommended) or
1489       ByteOrderedPartitioner instead.
1490     - Global option hinted_handoff_throttle_delay_in_ms has been removed.
1491       hinted_handoff_throttle_in_kb has been added instead.
1492     - The default bloom filter fp chance has been increased to 1%.
1493       This will save about 30% of the memory used by the old default.
1494       Existing columnfamilies will retain their old setting.
1495     - The default partitioner (for new clusters; the partitioner cannot be
1496       changed in existing clusters) was changed from RandomPartitioner to
1497       Murmur3Partitioner which provides faster hashing as well as improved
1498       performance with secondary indexes.
1499     - The default version of CQL (and cqlsh) is now CQL3. CQL2 is still
1500       available but you will have to use the thrift set_cql_version method
1501       (that is already supported in 1.1) to use CQL2. For cqlsh, you will need
1502       to use 'cqlsh -2'.
1503     - CQL3 is now considered final in this release. Compared to the beta
1504       version that is part of 1.1, this final version has a few additions
1505       (collections), but also some (incompatible) changes in the syntax for the
1506       options of the create/alter keyspace/table statements. Typically, the
1507       syntax to create a keyspace is now:
1508         CREATE KEYSPACE ks WITH replication = { 'class' : 'SimpleStrategy',
1509                                                 'replication_factor' : 2 };
1510       Also, the consistency level cannot be set in the language anymore, but is
1511       at the protocol level.
1512       Please refer to the CQL3 documentation (http://cassandra.apache.org/doc/cql3/CQL.html)
1513       for details.
1514     - In CQL3, the DROP behavior from ALTER TABLE has currently been removed
1515       (because it was not correctly implemented). We hope to add it back soon
1516       (Cassandra 1.2.1 or 1.2.2)
1517
1518 Features
1519 --------
1520     - Cassandra can now handle concurrent CREATE TABLE schema changes
1521       as well as other updates
1522     - rpc_timeout has been split up to allow finer-grained control
1523       on timeouts for different operation types
1524     - num_tokens can now be specified in cassandra.yaml. This defines the
1525       number of tokens assigned to the host on the ring (default: 1).
1526       Also specifying initial_token will override any num_tokens setting.
1527     - disk_failure_policy allows blacklisting failed disks in JBOD
1528       configuration instead of erroring out indefinitely
1529     - event tracing can be configured per-connection ("trace_next_query")
1530       or globally/probabilistically ("nodetool settraceprobability")
1531     - Atomic batches are now supported server side, where Cassandra will
1532       guarantee that (at the price of pre-writing the batch to another node
1533       first), all mutations in the batch will be applied, even if the
1534       coordinator fails mid-batch.
1535     - new IAuthorizer interface has replaced the old IAuthority. IAuthorizer
1536       allows dynamic permission management via new CQL3 statements:
1537       GRANT, REVOKE, LIST PERMISSIONS. A native implementation storing
1538       the permissions in Cassandra is being worked on and we expect to
1539       include it in 1.2.1 or 1.2.2.
1540     - IAuthenticator interface has been updated to support dynamic user
1541       creation, modification and removal via new CQL3 statements:
1542       CREATE USER, ALTER USER, DROP USER, LIST USERS. A native implementation
1543       that stores users in Cassandra itself is being worked on and is expected to
1544       become part of 1.2.1 or 1.2.2.
1545
1546
1547 1.1.5
1548 =====
1549
1550 Upgrading
1551 ---------
1552     - Nothing specific to this release, but please see 1.1 if you are upgrading
1553       from a previous version.
1554
1555
1556 1.1.4
1557 =====
1558
1559 Upgrading
1560 ---------
1561     - Nothing specific to this release, but please see 1.1 if you are upgrading
1562       from a previous version.
1563
1564
1565 1.1.3
1566 =====
1567
1568 Upgrading
1569 ---------
1570     - Running "nodetool upgradesstables" after upgrading is recommended
1571       if you use Counter columnfamilies.
1572
1573 Features
1574 --------
1575     - the cqlsh COPY command can now export to CSV flat files
1576     - added a new tools/bin/token-generator to facilitate generating evenly distributed tokens
1577
1578
1579 1.1.2
1580 =====
1581
1582 Upgrading
1583 ---------
1584     - If you have column families using the LeveledCompactionStrategy, you should run scrub on those column families.
1585
1586 Features
1587 --------
1588     - cqlsh has a new COPY command to load data from CSV flat files
1589
1590
1591 1.1.1
1592 =====
1593
1594 Upgrading
1595 ---------
1596     - Nothing specific to this release, but please see 1.1 if you are upgrading
1597       from a previous version.
1598
1599 Features
1600 --------
1601     - Continuous commitlog archiving and point-in-time recovery.
1602       See conf/commitlog_archiving.properties
1603     - Incremental repair by token range, exposed over JMX
1604
1605
1606 1.1
1607 ===
1608
1609 Upgrading
1610 ---------
1611     - Compression is enabled by default on newly created ColumnFamilies
1612       (and unchanged for ColumnFamilies created prior to upgrading).
1613     - If you are running a multi datacenter setup, you should upgrade to
1614       the latest 1.0.x (or 0.8.x) release before upgrading.  Versions
1615       0.8.8 and 1.0.3-1.0.5 generate cross-dc forwarding that is incompatible
1616       with 1.1.
1617     - EACH_QUORUM ConsistencyLevel is only supported for writes and will now
1618       throw an InvalidRequestException when used for reads.  (Previous
1619       versions would silently perform a LOCAL_QUORUM read instead.)
1620     - ANY ConsistencyLevel is only supported for writes and will now
1621       throw an InvalidRequestException when used for reads.  (Previous
1622       versions would silently perform a ONE read for range queries;
1623       single-row and multiget reads already rejected ANY.)
1624     - The largest mutation batch accepted by the commitlog is now 128MB.
1625       (In practice, batches larger than ~10MB always caused poor
1626       performance due to load volatility and GC promotion failures.)
1627       Larger batches will continue to be accepted but will not be
1628       durable.  Consider setting durable_writes=false if you really
1629       want to use such large batches.
1630     - Make sure that global settings: key_cache_{size_in_mb, save_period}
1631       and row_cache_{size_in_mb, save_period} in conf/cassandra.yaml are
1632       used instead of per-ColumnFamily options.
1633     - JMX methods no longer return custom Cassandra objects.  Any such methods
1634       will now return standard Maps, Lists, etc.
1635     - Hadoop input and output details are now separated.  If you were
1636       previously using methods such as getRpcPort you now need to use
1637       getInputRpcPort or getOutputRpcPort depending on the circumstance.
1638     - CQL changes:
1639       + Prior to 1.1, you could use KEY as the primary key name in some
1640         select statements, even if the PK was actually given a different
1641         name.  In 1.1+ you must use the defined PK name.
1642     - The sliced_buffer_size_in_kb option has been removed from the
1643       cassandra.yaml config file (this option was a no-op since 1.0).
1644
1645 Features
1646 --------
1647     - Concurrent schema updates are now supported, with any conflicts
1648       automatically resolved. Please note that simultaneously running
1649       ‘CREATE COLUMN FAMILY’ operation on the different nodes wouldn’t
1650       be safe until version 1.2 due to the nature of ColumnFamily
1651       identifier generation, for more details see CASSANDRA-3794.
1652     - The CQL language has undergone a major revision, CQL3, the
1653       highlights of which are covered at [1].  CQL3 is not
1654       backwards-compatibile with CQL2, so we've introduced a
1655       set_cql_version Thrift method to specify which version you want.
1656       (The default remains CQL2 at least until Cassandra 1.2.)  cqlsh
1657       adds a --cql3 flag to enable this.
1658       [1] http://www.datastax.com/dev/blog/schema-in-cassandra-1-1
1659     - Row-level isolation: multi-column updates to a single row have
1660       always been *atomic* (either all will be applied, or none)
1661       thanks to the CommitLog, but until 1.1 they were not *isolated*
1662       -- a reader may see mixed old and new values while the update
1663       happens.
1664     - Finer-grained control over data directories, allowing a ColumnFamily to
1665       be pinned to specfic volume, e.g. one backed by SSD.
1666     - The bulk loader is not longer a fat client; it can be run from an
1667       existing machine in a cluster.
1668     - A new write survey mode has been added, similar to bootstrap (enabled via
1669       -Dcassandra.write_survey=true), but the node will not automatically join
1670       the cluster.  This is useful for cases such as testing different
1671       compaction strategies with live traffic without affecting the cluster.
1672     - Key and row caches are now global, similar to the global memtable
1673       threshold. Manual tuning of cache sizes per-columnfamily is no longer
1674       required.
1675     - Off-heap caches no longer require JNA, and will work out of the box
1676       on Windows as well as Unix platforms.
1677     - Streaming is now multithreaded.
1678     - Compactions may now be aborted via JMX or nodetool.
1679     - The stress tool is not new in 1.1, but it is newly included in
1680       binary builds as well as the source tree
1681     - Hadoop: a new BulkOutputFormat is included which will directly write
1682       SSTables locally and then stream them into the cluster.
1683       YOU SHOULD USE BulkOutputFormat BY DEFAULT.  ColumnFamilyOutputFormat
1684       is still around in case for some strange reason you want results
1685       trickling out over Thrift, but BulkOutputFormat is significantly
1686       more efficient.
1687     - Hadoop: KeyRange.filter is now supported with ColumnFamilyInputFormat,
1688       allowing index expressions to be evaluated server-side to reduce
1689       the amount of data sent to Hadoop.
1690     - Hadoop: ColumnFamilyRecordReader has a wide-row mode, enabled via
1691       a boolean parameter to setInputColumnFamily, that pages through
1692       data column-at-a-time instead of row-at-a-time.
1693     - Pig: can use the wide-row Hadoop support, by setting PIG_WIDEROW_INPUT
1694       to true.  This will produce each row's columns in a bag.
1695
1696
1697
1698 1.0.8
1699 =====
1700
1701 Upgrading
1702 ---------
1703     - Nothing specific to 1.0.8
1704
1705 Other
1706 -----
1707     - Allow configuring socket timeout for streaming
1708
1709
1710 1.0.7
1711 =====
1712
1713 Upgrading
1714 ---------
1715     - Nothing specific to 1.0.7, please report to instruction for 1.0.6
1716
1717 Other
1718 -----
1719     - Adds new setstreamthroughput to nodetool to configure streaming
1720       throttling
1721     - Adds JMX property to get/set rpc_timeout_in_ms at runtime
1722     - Allow configuring (per-CF) bloom_filter_fp_chance
1723
1724
1725 1.0.6
1726 =====
1727
1728 Upgrading
1729 ---------
1730     - This release fixes an issue related to the chunk_length_kb option for
1731       compressed sstables. If you use compression on some column families, it
1732       is recommended after the upgrade to check the value for this option on
1733       these column families (the default value is 64). In case the option would
1734       not be set correctly, you should update the column family definition,
1735       setting the right value and then run scrub on the column family.
1736     - Please report to instruction for 1.0.5 if coming from an older version.
1737
1738
1739 1.0.5
1740 =====
1741
1742 Upgrading
1743 ---------
1744     - 1.0.5 comes to fix two important regression of 1.0.4. So all information
1745       concerning 1.0.4 are valid for this release, but please avoids upgrading
1746       to 1.0.4.
1747
1748
1749 1.0.4
1750 =====
1751
1752 Upgrading
1753 ---------
1754     - Nothing specific to 1.0.4 but please see the 1.0 upgrading section if
1755       upgrading from a version prior to 1.0.0
1756
1757 Features
1758 --------
1759     - A new upgradesstables command has been added to nodetool. It is very
1760       similar to scrub but without the ability to discard corrupted rows (and
1761       as a consequence it does not snapshot automatically before). This new
1762       command is to be prefered to scrub in all cases where sstables should be
1763       rewritten to the current format for upgrade purposes.
1764
1765 JMX
1766 ---
1767     - The path for the data, commit log and saved cache directories exposed
1768       through JMX
1769     - The in-memory bloom filter sizes are now exposed through JMX
1770
1771
1772 1.0.3
1773 =====
1774
1775 Upgrading
1776 ---------
1777     - Nothing specific to 1.0.3 but please see the 1.0 upgrading section if
1778       upgrading from a version prior to 1.0.0
1779
1780 Features
1781 --------
1782     - For non compressed sstables (compressed sstable already include more
1783       fine grained checsums), a sha1 for the full sstable is now automatically
1784       created (in a fix with suffix -Digest.sha1). It can be used to check the
1785       sstable integrity with sha1sum.
1786
1787
1788 1.0.2
1789 =====
1790
1791 Upgrading
1792 ---------
1793     - Nothing specific to 1.0.2 but please see the 1.0 upgrading section if
1794       upgrading from a version prior to 1.0.0
1795
1796 Features
1797 --------
1798     - Cassandra CLI queries now have timing information
1799
1800
1801 1.0.1
1802 =====
1803
1804 Upgrading
1805 ---------
1806     - If upgrading from a version prior to 1.0.0, please see the 1.0 Upgrading
1807       section
1808     - For running on Windows as a Service, procrun is no longer discributed
1809       with Cassandra, see README.txt for more information on how to download
1810       it if necessary.
1811     - The name given to snapshots directories have been improved for human
1812       readability. If you had scripts relying on it, you may need to update
1813       them.
1814
1815
1816 1.0
1817 ===
1818
1819 Upgrading
1820 ---------
1821     - Upgrading from version 0.7.1+ or 0.8.2+ can be done with a rolling
1822       restart, one node at a time.  (0.8.0 or 0.8.1 are NOT network-compatible
1823       with 1.0: upgrade to the most recent 0.8 release first.)
1824       You do not need to bring down the whole cluster at once.
1825     - After upgrading, run nodetool scrub against each node before running
1826       repair, moving nodes, or adding new ones.
1827     - CQL inserts/updates now generate microsecond resolution timestamps
1828       by default, instead of millisecond. THIS MEANS A ROLLING UPGRADE COULD
1829       MIX milliseconds and microseconds, with clients talking to servers
1830       generating milliseconds unable to overwrite the larger microsecond
1831       timestamps. If you are using CQL and this is important for your
1832       application, you can either perform a non-rolling upgrade to 1.0, or
1833       update your application first to use explicit timestamps with the "USING
1834       timestamp=X" syntax.
1835     - The BinaryMemtable bulk-load interface has been removed (use the
1836       sstableloader tool instead).
1837     - The compaction_thread_priority setting has been removed from
1838       cassandra.yaml (use compaction_throughput_mb_per_sec to throttle
1839       compaction instead).
1840     - CQL types bytea and date were renamed to blob and timestamp, respectively,
1841       to conform with SQL norms.  CQL type int is now a 4-byte int, not 8
1842       (which is still available as bigint).
1843     - Cassandra 1.0 uses arena allocation to reduce old generation
1844       fragmentation.  This means there is a minimum overhead of 1MB
1845       per ColumnFamily plus 1MB per index.
1846     - The SimpleAuthenticator and SimpleAuthority classes have been moved to
1847       the example directory (and are thus not available from the binary
1848       distribution). They never provided actual security and in their current
1849       state are only meant as examples.
1850
1851 Features
1852 --------
1853     - SSTable compression is supported through the 'compression_options'
1854       parameter when creating/updating a column family. For instance, you can
1855       create a column family Cf using compression (through the Snappy library)
1856       in the CLI with:
1857         create column family Cf with compression_options={sstable_compression: SnappyCompressor}
1858       SSTable compression is not activated by default but can be activated or
1859       deactivated at any time.
1860     - Compressed SSTable blocks are checksummed to protect against bitrot
1861     - New LevelDB-inspired compaction algorithm can be enabled by setting the
1862       Columnfamily compaction_strategy=LeveledCompactionStrategy option.
1863       Leveled compaction means you only need to keep a few MB of space free for
1864       compaction instead of (in the worst case) 50%.
1865     - Ability to use multiple threads during a single compaction. See
1866       multithreaded_compaction in cassandra.yaml for more details.
1867     - Windows Service ("cassandra.bat install" to enable)
1868     - A dead node may be replaced in a single step by starting a new node
1869       with -Dcassandra.replace_token=<token>. More details can be found at
1870       http://wiki.apache.org/cassandra/Operations#Replacing_a_Dead_Node
1871     - It is now possible to repair only the first range returned by the
1872       partitioner for a node with `nodetool repair -pr`. It makes it
1873       easier/possible to repair a full cluster without any work duplication by
1874       running this command on every node of the cluster.
1875
1876 New data types
1877 --------------
1878     - decimal
1879
1880 Other
1881 -----
1882     - Hinted Handoff has two major improvements:
1883         - Hint replay is much more efficient thanks to a change in the data model
1884         - Hints are created for all replicas that do not ack a write.  (Formerly,
1885           only replicas known to be down when the write started were hinted.)
1886       This means that running with read repair completely off is much more
1887       viable than before, and the default read_repair_chance is reduced from 1.0
1888       ("always repair") to 0.1 ("repair 10% of the time").
1889     - The old per-ColumnFamily memtable thresholds
1890       (memtable_throughput_in_mb, memtable_operations_in_millions,
1891       memtable_flush_after_mins) are ignored, in favor of the global
1892       memtable_total_space_in_mb and commitlog_total_space_in_mb settings.
1893       This does not affect client compatibility -- the old options are
1894       still allowed, but have no effect. These options may be removed
1895       entirely in a future release.
1896     - Backlogged compactions will begin five minutes after startup.  The 0.8
1897       behavior of never starting compaction until a flush happens is usually
1898       not what is desired, but a short grace period is useful to allow caches
1899       to warm up first.
1900     - The deletion of compacted data files is not performed during Garbage
1901       Collection anymore. This means compacted files will now be deleted
1902       without delay.
1903
1904
1905 0.8.5
1906 =====
1907
1908 Features
1909 --------
1910     - SSTables copied to a data directory can be loaded by a live node through
1911       nodetool refresh (may be handy to load snapshots).
1912     - The configured compaction throughput is exposed through JMX.
1913
1914 Other
1915 -----
1916     - The sstableloader is now bundled with the debian package.
1917     - Repair detects when a participating node is dead and fails instead of
1918       hanging forever.
1919
1920
1921 0.8.4
1922 =====
1923
1924 Upgrading
1925 ---------
1926     - Nothing specific to 0.8.4
1927
1928 Other
1929 -----
1930     - This release comes to fix a bug in counter that could lead to
1931       (important) over-count.
1932     - It also fixes a slight upgrade regression from 0.8.3. It is thus advised
1933       to jump directly to 0.8.4 if upgrading from before 0.8.3.
1934
1935
1936 0.8.3
1937 =====
1938
1939 Upgrading
1940 ---------
1941     - Token removal has been revamped.  Removing tokens in a mixed cluster with
1942       0.8.3 will not work, so the entire cluster will need to be running 0.8.3
1943       first, except for the dead node.
1944
1945 Features
1946 --------
1947     - It is now possible to use thrift asynchronous and
1948       half-synchronous/half-asynchronous servers (see cassandra.yaml for more
1949       details).
1950     - It is now possible to access counter columns through Hadoop.
1951
1952 Other
1953 -----
1954     - This release fix a regression of 0.8 that can make commit log segment to
1955       be deleted even though not all data it contains has been flushed.
1956       Upgrades from 0.8.* is very much encouraged.
1957
1958
1959 0.8.2
1960 =====
1961
1962 Upgrading
1963 ---------
1964     - 0.8.0 and 0.8.1 shipped with a bug that was setting the
1965       replicate_on_write option for counter column families to false (this
1966       option has no effect on non-counter column family). This is an unsafe
1967       default and 0.8.2 correct this, the default for replicate_on_write is
1968       now true. It is advised to update your counter column family definitions
1969       if replicate_on_write was uncorrectly set to false (before or after
1970       upgrade).
1971
1972
1973 0.8.1
1974 =====
1975
1976 Upgrading
1977 ---------
1978     - 0.8.1 is backwards compatible with 0.8, upgrade can be achieved by a
1979       simple rolling restart.
1980     - If upgrading for earlier version (0.7), please refer to the 0.8 section
1981       for instructions.
1982
1983 Features
1984 --------
1985     - Numerous additions/improvements to CQL (support for counters, TTL, batch
1986       inserts/deletes, index dropping, ...).
1987     - Add two new AbstractTypes (comparator) to support compound keys
1988       (CompositeType and DynamicCompositeType), as well as a ReverseType to
1989       reverse the order of any existing comparator.
1990     - New option to bypass the commit log on some keyspaces (for advanced
1991       users).
1992
1993 Tools
1994 -----
1995     - Add new data bulk loading utility (sstableloader).
1996
1997
1998 0.8
1999 ===
2000
2001 Upgrading
2002 ---------
2003     - Upgrading from version 0.7.1 or later can be done with a rolling
2004       restart, one node at a time.  You do not need to bring down the
2005       whole cluster at once.
2006     - After upgrading, run nodetool scrub against each node before running
2007       repair, moving nodes, or adding new ones.
2008     - Running nodetool drain before shutting down the 0.7 node is
2009       recommended but not required. (Skipping this will result in
2010       replay of entire commitlog, so it will take longer to restart but
2011       is otherwise harmless.)
2012     - 0.8 is fully API-compatible with 0.7.  You can continue
2013       to use your 0.7 clients.
2014     - Avro record classes used in map/reduce and Hadoop streaming code have
2015       been removed. Map/reduce can be switched to Thrift by changing
2016       org.apache.cassandra.avro in import statements to
2017       org.apache.cassandra.thrift (no class names change). Streaming support
2018       has been removed for the time being.
2019     - The loadbalance command has been removed from nodetool.  For similar
2020       behavior, decommission then rebootstrap with empty initial_token.
2021     - Thrift unframed mode has been removed.
2022     - The addition of key_validation_class means the cli will assume keys
2023       are bytes, instead of strings, in the absence of other information.
2024       See http://wiki.apache.org/cassandra/FAQ#cli_keys for more details.
2025
2026
2027 Features
2028 --------
2029     - added CQL client API and JDBC/DBAPI2-compliant drivers for Java and
2030       Python, respectively (see: drivers/ subdirectory and doc/cql)
2031     - added distributed Counters feature;
2032       see http://wiki.apache.org/cassandra/Counters
2033     - optional intranode encryption; see comments around 'encryption_options'
2034       in cassandra.yaml
2035     - compaction multithreading and rate-limiting; see
2036       'concurrent_compactors' and 'compaction_throughput_mb_per_sec' in
2037       cassandra.yaml
2038     - cassandra will limit total memtable memory usage to 1/3 of the heap
2039       by default.  This can be ajusted or disabled with the
2040       memtable_total_space_in_mb option.  The old per-ColumnFamily
2041       throughput, operations, and age settings are still respected but
2042       will be removed in a future major release once we are satisfied that
2043       memtable_total_space_in_mb works adequately.
2044
2045 Tools
2046 -----
2047     - stress and py_stress moved from contrib/ to tools/
2048     - clustertool was removed (see
2049       https://issues.apache.org/jira/browse/CASSANDRA-2607 for examples
2050       of how to script nodetool across the cluster instead)
2051
2052 Other
2053 -----
2054     - In the past, sstable2json would write column names and values as
2055       hex strings, and now creates human readable values based on the
2056       comparator/validator.  As a result, JSON dumps created with
2057       older versions of sstable2json are no longer compatible with
2058       json2sstable, and imports must be made with a configuration that
2059       is identical to the export.
2060     - manually-forced compactions ("nodetool compact") will do nothing
2061       if only a single SSTable remains for a ColumnFamily. To force it
2062       to compact that anyway (which will free up space if there are
2063       a lot of expired tombstones), use the new forceUserDefinedCompaction
2064       JMX method on CompactionManager.
2065     - most of contrib/ (which was not part of the binary releases)
2066       has been moved either to examples/ or tools/. We plan to move the
2067       rest for 0.8.1.
2068
2069 JMX
2070 ---
2071     - By default, JMX now listens on port 7199.
2072
2073
2074 0.7.6
2075 =====
2076
2077 Upgrading
2078 ---------
2079     - Nothing specific to 0.7.6, but see 0.7.3 Upgrading if upgrading
2080       from earlier than 0.7.1.
2081
2082
2083 0.7.5
2084 =====
2085
2086 Upgrading
2087 ---------
2088     - Nothing specific to 0.7.5, but see 0.7.3 Upgrading if upgrading
2089       from earlier than 0.7.1.
2090
2091 Changes
2092 -------
2093     - system_update_column_family no longer snapshots before applying
2094       the schema change. (_update_keyspace never did.  _drop_keyspace
2095       and _drop_column_family continue to snapshot.)
2096     - added memtable_flush_queue_size option to cassandra.yaml to
2097       avoid blocking writes when multiple column families (or a colum
2098       family with indexes) are flushed at the same time.
2099     - allow overriding initial_token, storage_port and rpc_port using
2100       system properties
2101
2102
2103 0.7.4
2104 =====
2105
2106 Upgrading
2107 ---------
2108     - Nothing specific to 0.7.4, but see 0.7.3 Upgrading if upgrading
2109       from earlier than 0.7.1.
2110
2111 Features
2112 --------
2113     - Output to Pig is now supported as well as input
2114
2115
2116 0.7.3
2117 =====
2118
2119 Upgrading
2120 ---------
2121     - 0.7.1 and 0.7.2 shipped with a bug that caused incorrect row-level
2122       bloom filters to be generated when compacting sstables generated
2123       with earlier versions.  This would manifest in IOExceptions during
2124       column name-based queries.  0.7.3 provides "nodetool scrub" to
2125       rebuild sstables with correct bloom filters, with no data lost.
2126       (If your cluster was never on 0.7.0 or earlier, you don't have to
2127       worry about this.)  Note that nodetool scrub will snapshot your
2128       data files before rebuilding, just in case.
2129
2130
2131 0.7.1
2132 =====
2133
2134 Upgrading
2135 ---------
2136     - 0.7.1 is completely backwards compatible with 0.7.0.  Just restart
2137       each node with the new version, one at a time.  (The cluster does
2138       not all need to be upgraded simultaneously.)
2139
2140 Features
2141 --------
2142     - added flush_largest_memtables_at and reduce_cache_sizes_at options
2143       to cassandra.yaml as an escape valve for memory pressure
2144     - added option to specify -Dcassandra.join_ring=false on startup
2145       to allow "warm spare" nodes or performing JMX maintenance before
2146       joining the ring
2147
2148 Performance
2149 -----------
2150     - Disk writes and sequential scans avoid polluting page cache
2151       (requires JNA to be enabled)
2152     - Cassandra performs writes efficiently across datacenters by
2153       sending a single copy of the mutation and having the recipient
2154       forward that to other replicas in its datacenter.
2155     - Improved network buffering
2156     - Reduced lock contention on memtable flush
2157     - Optimized supercolumn deserialization
2158     - Zero-copy reads from mmapped sstable files
2159     - Explicitly set higher JVM new generation size
2160     - Reduced i/o contention during saving of caches
2161
2162
2163 0.7.0
2164 =====
2165
2166 Features
2167 --------
2168     - Secondary indexes (indexes on column values) are now supported
2169     - Row size limit increased from 2GB to 2 billion columns.  rows
2170       are no longer read into memory during compaction.
2171     - Keyspace and ColumnFamily definitions may be added and modified live
2172     - Streaming data for repair or node movement no longer requires
2173       anticompaction step first
2174     - NetworkTopologyStrategy (formerly DatacenterShardStrategy) is ready for
2175       use, enabling ConsistencyLevel.DCQUORUM and DCQUORUMSYNC.  See comments
2176       in `cassandra.yaml.`
2177     - Optional per-Column time-to-live field allows expiring data without
2178       have to issue explicit remove commands
2179     - `truncate` thrift method allows clearing an entire ColumnFamily at once
2180     - Hadoop OutputFormat and Streaming [non-jvm map/reduce via stdin/out]
2181       support
2182     - Up to 8x faster reads from row cache
2183     - A new ByteOrderedPartitioner supports bytes keys with arbitrary content,
2184       and orders keys by their byte value.  This should be used in new
2185       deployments instead of OrderPreservingPartitioner.
2186     - Optional round-robin scheduling between keyspaces for multitenant
2187       clusters
2188     - Dynamic endpoint snitch mitigates the impact of impaired nodes
2189     - New `IntegerType`, faster than LongType and allows integers of
2190       both less and more bits than Long's 64
2191     - A revamped authentication system that decouples authorization and
2192       allows finer-grained control of resources.
2193
2194 Upgrading
2195 ---------
2196     The Thrift API has changed in incompatible ways; see below, and refer
2197     to http://wiki.apache.org/cassandra/ClientOptions for a list of
2198     higher-level clients that have been updated to support the 0.7 API.
2199
2200     The Cassandra inter-node protocol is incompatible with 0.6.x
2201     releases (and with 0.7 beta1), meaning you will have to bring your
2202     cluster down prior to upgrading: you cannot mix 0.6 and 0.7 nodes.
2203
2204     The hints schema was changed from 0.6 to 0.7. Cassandra automatically
2205     snapshots and then truncates the hints column family as part of
2206     starting up 0.7 for the first time.
2207
2208     Keyspace and ColumnFamily definitions are stored in the system
2209     keyspace, rather than the configuration file.
2210
2211     The process to upgrade is:
2212     1) run "nodetool drain" on _each_ 0.6 node.  When drain finishes (log
2213        message "Node is drained" appears), stop the process.
2214     2) Convert your storage-conf.xml to the new cassandra.yaml using
2215        "bin/config-converter".
2216     3) Rename any of your keyspace or column family names that do not adhere
2217        to the '^\w+' regex convention.
2218     4) Start up your cluster with the 0.7 version.
2219     5) Initialize your Keyspace and ColumnFamily definitions using
2220        "bin/schematool <host> <jmxport> import".  _You only need to do
2221        this to one node_.
2222
2223 Thrift API
2224 ----------
2225     - The Cassandra server now defaults to framed mode, rather than
2226       unframed.  Unframed is obsolete and will be removed in the next
2227       major release.
2228     - The Cassandra Thrift interface file has been updated for Thrift 0.5.
2229       If you are compiling your own client code from the interface, you
2230       will need to upgrade the Thrift compiler to match.
2231     - Row keys are now bytes: keys stored by versions prior to 0.7.0 will be
2232       returned as UTF-8 encoded bytes. OrderPreservingPartitioner and
2233       CollatingOrderPreservingPartitioner continue to expect that keys contain
2234       UTF-8 encoded strings, but RandomPartitioner now works on any key data.
2235     - keyspace parameters have been replaced with the per-connection
2236       set_keyspace method.
2237     - The return type for login() is now AccessLevel.
2238     - The get_string_property() method has been removed.
2239     - The get_string_list_property() method has been removed.
2240
2241 Configuraton
2242 ------------
2243     - Configuration file renamed to cassandra.yaml and log4j.properties to
2244       log4j-server.properties
2245     - PropertyFileSnitch configuration file renamed to
2246       cassandra-topology.properties
2247     - The ThriftAddress and ThriftPort directives have been renamed to
2248       RPCAddress and RPCPort respectively.
2249     - EndPointSnitch was renamed to RackInferringSnitch.  A new SimpleSnitch
2250       has been added.
2251     - RackUnawareStrategy and RackAwareStrategy have been renamed to
2252       SimpleStrategy and OldNetworkTopologyStrategy, respectively.
2253     - RowWarningThresholdInMB replaced with in_memory_compaction_limit_in_mb
2254     - GCGraceSeconds is now per-ColumnFamily instead of global
2255         - Keyspace and column family names that do not confirm to a '^\w+' regex
2256       are considered illegal.
2257     - Keyspace and column family definitions will need to be loaded via
2258       "bin/schematool <host> <jmxport> import".  _You only need to do this to
2259       one node_.
2260     - In addition to an authenticator, an authority must be configured as
2261       well. Users of SimpleAuthenticator should use SimpleAuthority for this
2262       value (the default is AllowAllAuthority, which corresponds with
2263       AllowAllAuthenticator).
2264     - The format of access.properties has changed, see the sample configuration
2265       conf/access.properties for documentation on the new format.
2266
2267
2268 JMX
2269 ---
2270     - StreamingService moved from o.a.c.streaming to o.a.c.service
2271     - GMFD renamed to GOSSIP_STAGE
2272     - {Min,Mean,Max}RowCompactedSize renamed to {Min,Mean,Max}RowSize
2273       since it no longer has to wait til compaction to be computed
2274
2275 Other
2276 -----
2277     - If extending AbstractType, make sure you follow the singleton pattern
2278       followed by Cassandra core AbstractType classes: provide a public
2279       static final variable called 'instance'.
2280
2281
2282 0.6.6
2283 =====
2284
2285 Upgrading
2286 ---------
2287     - As part of the cache-saving feature, a third directory
2288       (along with data and commitlog) has been added to the config
2289       file.  You will need to set and create this directory
2290       when restarting your node into 0.6.6.
2291
2292
2293 0.6.1
2294 =====
2295
2296 Upgrading
2297 ---------
2298     - We try to keep minor versions 100% compatible (data format,
2299       commitlog format, network format) within the major series, but
2300       we introduced a network-level incompatibility in 0.6.1.
2301       Thus, if you are upgrading from 0.6.0 to any higher version
2302       (0.6.1, 0.6.2, etc.) then you will need to restart your entire
2303       cluster with the new version, instead of being able to do a
2304       rolling restart.
2305
2306
2307 0.6.0
2308 =====
2309
2310 Features
2311 --------
2312     - row caching: configure with the RowsCached attribute in
2313       ColumnFamily definition
2314     - Hadoop map/reduce support: see contrib/word_count for an example
2315     - experimental authentication support, described under
2316       Authenticator in storage.conf
2317
2318 Configuraton
2319 ------------
2320     - MemtableSizeInMB has been replaced by MemtableThroughputInMB which
2321       triggers a memtable flush when the specified amount of data has
2322       been written, including overwrites.
2323     - MemtableObjectCountInMillions has been replaced by the
2324       MemtableOperationsInMillions directive which causes a memtable flush
2325       to occur after the specified number of operations.
2326     - Like MemtableSizeInMB, BinaryMemtableSizeInMB has been replaced by
2327       BinaryMemtableThroughputInMB.
2328     - Replication factor is now per-keyspace, rather than global.
2329     - KeysCachedFraction is deprecated in favor of KeysCached
2330     - RowWarningThresholdInMB added, to warn before very large rows
2331       get big enough to threaten node stability
2332
2333 Thrift API
2334 ----------
2335     - removed deprecated get_key_range method
2336     - added batch_mutate meethod
2337     - deprecated multiget and batch_insert methods in favor of
2338       multiget_slice and batch_mutate, respectively
2339     - added ConsistencyLevel.ANY, for when you want write
2340       availability even when it may not be readable immediately.
2341       Unlike CL.ZERO, though, it will throw an exception if
2342       it cannot be written *somewhere*.
2343
2344 JMX metrics
2345 -----------
2346     - read and write statistics are reported as lifetime totals,
2347       instead of averages over the last minute.  average-since-last
2348       requested are also available for convenience.
2349     - cache hit rate statistics are now available from JMX under
2350       org.apache.cassandra.db.Caches
2351     - compaction JMX metrics are moved to
2352       org.apache.cassandra.db.CompactionManager.  PendingTasks is now
2353       a much better estimate of compactions remaining, and the
2354       progress of the current compaction has been added.
2355     - commitlog JMX metrics are moved to org.apache.cassandra.db.Commitlog
2356     - progress of data streaming during bootstrap, loadbalance, or other
2357       data migration, is available under
2358       org.apache.cassandra.streaming.StreamingService.
2359       See http://wiki.apache.org/cassandra/Streaming for details.
2360
2361 Installation/Upgrade
2362 --------------------
2363     - 0.6 network traffic is not compatible with earlier versions.  You
2364       will need to shut down all your nodes at once, upgrade, then restart.
2365
2366
2367
2368 0.5.0
2369 =====
2370
2371 0. The commitlog format has changed (but sstable format has not).
2372    When upgrading from 0.4, empty the commitlog either by running
2373    bin/nodeprobe flush on each machine and waiting for the flush to finish,
2374    or simply remove the commitlog directory if you only have test data.
2375    (If more writes come in after the flush command, starting 0.5 will error
2376    out; if that happens, just go back to 0.4 and flush again.)
2377    The format changed twice: from 0.4 to beta1, and from beta2 to RC1.
2378
2379 .5 The gossip protocol has changed, meaning 0.5 nodes cannot coexist
2380    in a cluster of 0.4 nodes or vice versa; you must upgrade your
2381    whole cluster at the same time.
2382
2383 1. Bootstrap, move, load balancing, and active repair have been added.
2384    See http://wiki.apache.org/cassandra/Operations.  When upgrading
2385    from 0.4, leave autobootstrap set to false for the first restart
2386    of your old nodes.
2387
2388 2. Performance improvements across the board, especially on the write
2389    path (over 100% improvement in stress.py throughput).
2390
2391 3. Configuration:
2392      - Added "comment" field to ColumnFamily definition.
2393      - Added MemtableFlushAfterMinutes, a global replacement for the
2394        old per-CF FlushPeriodInMinutes setting
2395      - Key cache settings
2396
2397 4. Thrift:
2398      - Added get_range_slice, deprecating get_key_range
2399
2400
2401
2402 0.4.2
2403 =====
2404
2405 1. Improve default garbage collector options significantly --
2406    throughput will be 30% higher or more.
2407
2408
2409
2410 0.4.1
2411 =====
2412
2413 1. SnapshotBeforeCompaction configuration option allows snapshotting
2414    before each compaction, which allows rolling back to any version
2415    of the data.
2416
2417
2418
2419 0.4.0
2420 =====
2421
2422 1. On-disk data format has changed to allow billions of keys/rows per
2423    node instead of only millions.  The new format is incompatible with 0.3;
2424    see 0.3 notes below for how to import data from a 0.3 install.
2425
2426 2. Cassandra now supports multiple keyspaces.  Typically you will have
2427    one keyspace per application, allowing applications to be able to
2428    create and modify ColumnFamilies at will without worrying about
2429    collisions with others in the same cluster.
2430
2431 3. Many Thrift API changes and documentation.  See
2432    http://wiki.apache.org/cassandra/API
2433
2434 4. Removed the web interface in favor of JMX and bin/nodeprobe, which
2435    has significantly enhanced functionality.
2436
2437 5. Renamed configuration "<Table>" to "<Keyspace>".
2438
2439 6. Added commitlog fsync; see "<CommitLogSync>" in configuration.
2440
2441
2442
2443 0.3.0
2444 =====
2445
2446 1. With enough and large enough keys in a ColumnFamily, Cassandra will
2447    run out of memory trying to perform compactions (data file merges).
2448    The size of what is stored in memory is (S + 16) * (N + M) where S
2449    is the size of the key (usually 2 bytes per character), N is the
2450    number of keys and M, is the map overhead (which can be guestimated
2451    at around 32 bytes per key).
2452    So, if you have 10-character keys and 1GB of headroom in your heap
2453    space for compaction, you can expect to store about 17M keys
2454    before running into problems.
2455    See https://issues.apache.org/jira/browse/CASSANDRA-208
2456
2457 2. Because fixing #1 requires a data file format change, 0.4 will not
2458    be binary-compatible with 0.3 data files.  A client-side upgrade
2459    can be done relatively easily with the following algorithm:
2460      for key in old_client.get_key_range(everything):
2461          columns = old_client.get_slice or get_slice_super(key, all columns)
2462      new_client.batch_insert or batch_insert_super(key, columns)
2463    The inner loop can be trivially parallelized for speed.
2464
2465 3. Commitlog does not fsync before reporting a write successful.
2466    Using blocking writes mitigates this to some degree, since all
2467    nodes that were part of the write quorum would have to fail
2468    before sync for data to be lost.
2469    See https://issues.apache.org/jira/browse/CASSANDRA-182
2470
2471 Additionally, row size (that is, all the data associated with a single
2472 key in a given ColumnFamily) is limited by available memory, because
2473 compaction deserializes each row before merging.
2474
2475 See https://issues.apache.org/jira/browse/CASSANDRA-16