| GENERAL UPGRADING ADVICE FOR ANY VERSION |
| ======================================== |
| |
| Snapshotting is fast (especially if you have JNA installed) and takes |
| effectively zero disk space until you start compacting the live data |
| files again. Thus, best practice is to ALWAYS snapshot before any |
| upgrade, just in case you need to roll back to the previous version. |
| (Cassandra version X + 1 will always be able to read data files created |
| by version X, but the inverse is not necessarily the case.) |
| |
| When upgrading major versions of Cassandra, you will be unable to |
| restore snapshots created with the previous major version using the |
| 'sstableloader' tool. You can upgrade the file format of your snapshots |
| using the provided 'sstableupgrade' tool. |
| |
| 2.0.15 |
| ====== |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but refer to previous entries if you |
| are upgrading from a previous version. |
| |
| 2.0.14 |
| ====== |
| The default JMX config now listens to localhost only. You must enable |
| the other JMX flags in cassandra-env.sh manually. |
| |
| 2.0.13 |
| ====== |
| |
| Upgrading |
| --------- |
| - Prepending a list to a list collection was erroneously resulting in |
| the prepended list being reversed upon insertion. If you were depending |
| on this buggy behavior, note that it has been corrected. |
| |
| 2.0.12 |
| ====== |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but refer to previous entries if you |
| are upgrading from a previous version. |
| |
| 2.0.11 |
| ====== |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but refer to previous entries if you |
| are upgrading from a previous version. |
| |
| New features |
| ------------ |
| - DateTieredCompactionStrategy added, optimized for time series data and groups |
| data that is written closely in time (CASSANDRA-6602 for details). Consider |
| this experimental for now. |
| |
| |
| 2.0.10 |
| ====== |
| |
| New features |
| ------------ |
| - CqlPaginRecordReader and CqlPagingInputFormat have both been removed. |
| Use CqlInputFormat instead. |
| - If you are using Leveled Compaction, you can now disable doing size-tiered |
| compaction in L0 by starting Cassandra with -Dcassandra.disable_stcs_in_l0 |
| (see CASSANDRA-6621 for details). |
| - Shuffle and taketoken have been removed. For clusters that choose to |
| upgrade to vnodes, creating a new datacenter with vnodes and migrating is |
| recommended. See http://goo.gl/Sna2S1 for further information. |
| |
| |
| 2.0.9 |
| ===== |
| |
| Upgrading |
| --------- |
| - Default values for read_repair_chance and local_read_repair_chance have been |
| swapped. Namely, default read_repair_chance is now set to 0.0, and default |
| local_read_repair_chance to 0.1. |
| - Queries selecting only CQL static columns were (mistakenly) not returning one |
| result per row in the partition. This has been fixed and a SELECT DISTINCT |
| can be used when only the static column of a partition needs to be fetch |
| without fetching the whole partition. But if you use static columns, please |
| make sure this won't affect you (see CASSANDRA-7305 for details). |
| |
| |
| 2.0.8 |
| ===== |
| |
| New features |
| ------------ |
| - New snitches have been used for users of Google Compute Engine and of |
| Cloudstack. |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but please see 2.0.7 if you are upgrading |
| from a previous version. |
| |
| |
| 2.0.7 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but please see 2.0.6 if you are upgrading |
| from a previous version. |
| |
| |
| 2.0.6 |
| ===== |
| |
| New features |
| ------------ |
| - CQL now support static columns, allows to batch multiple conditional updates |
| and has a new syntax for slicing over multiple clustering columns |
| (http://goo.gl/B6qz4j). |
| - Repair can be restricted to a set of nodes using the -hosts option in nodetool. |
| - A new 'nodetool taketoken' command relocate tokens with vnodes. |
| - Hinted handoff can be enabled only for some data-centers (see |
| hinted_handoff_enabled in cassandra.yaml) |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but please see 2.0.5 if you are upgrading |
| from a previous version. |
| |
| |
| 2.0.5 |
| ===== |
| |
| New features |
| ------------ |
| - Batchlog replay can be, and is throttled by default now. |
| See batchlog_replay_throttle_in_kb setting in cassandra.yaml. |
| - Scrub can now optionally skip corrupt counter partitions. Please note |
| that this will lead to the loss of all the counter updates in the skipped |
| partition. See the --skip-corrupted option. |
| |
| Upgrading |
| --------- |
| - If your cluster began on a version before 1.2, check that your secondary |
| index SSTables are on version 'ic' before upgrading. If not, run |
| 'nodetool upgradesstables' if on 1.2.14 or later, or run 'nodetool |
| upgradesstables ks cf' with the keyspace and secondary index named |
| explicitly otherwise. If you don't do this and upgrade to 2.0.x and it |
| refuses to start because of 'hf' version files in the secondary index, |
| you will need to delete/move them out of the way and recreate the index |
| when 2.0.x starts. |
| |
| |
| 2.0.3 |
| ===== |
| |
| New features |
| ------------ |
| - It's now possible to configure the maximum allowed size of the native |
| protocol frames (native_transport_max_frame_size_in_mb in the yaml file). |
| |
| Upgrading |
| --------- |
| - NaN and Infinity are new valid floating point constants in CQL3 and are now reserved |
| keywords. In the unlikely case you were using one of them as an identifier (for a |
| column, a keyspace or a table), you will now have to double-quote them (see |
| http://cassandra.apache.org/doc/cql3/CQL.html#identifiers for "quoted identifiers"). |
| - The IEndpointStateChangeSubscriber has a new method, beforeChange, that |
| any custom implemenations using the class will need to implement. |
| |
| |
| 2.0.2 |
| ===== |
| |
| New features |
| ------------ |
| - Speculative retry defaults to 99th percentile |
| (See blog post at http://www.datastax.com/dev/blog/rapid-read-protection-in-cassandra-2-0-2) |
| - Configurable metrics reporting |
| (see conf/metrics-reporter-config-sample.yaml) |
| - Compaction history and stats are now saved to system keyspace |
| (system.compaction_history table). You can access historiy via |
| new 'nodetool compactionhistory' command or CQL. |
| |
| Upgrading |
| --------- |
| - Nodetool defaults to Sequential mode for repair operations |
| |
| |
| 2.0.1 |
| ===== |
| Upgrading |
| --------- |
| - The default memtable allocation has changed from 1/3 of heap to 1/4 |
| of heap. Also, default (single-partition) read and write timeouts |
| have been reduced from 10s to 5s and 2s, respectively. |
| |
| |
| 2.0.0 |
| ===== |
| |
| Upgrading |
| --------- |
| - Java 7 is now *required*! |
| - Upgrading is ONLY supported from Cassandra 1.2.9 or later. This |
| goes for sstable compatibility as well as network. When |
| upgrading from an earlier release, upgrade to 1.2.9 first and |
| run upgradesstables before proceeding to 2.0. |
| - CAS and new features in CQL such as DROP COLUMN assume that cell |
| timestamps are microseconds-since-epoch. Do not use these |
| features if you are using client-specified timestamps with some |
| other source. |
| - Replication and strategy options do not accept unknown options anymore. |
| This was already the case for CQL3 in 1.2 but this is now the case for |
| thrift too. |
| - auto_bootstrap of a single-token node with no initial_token will |
| now pick a random token instead of bisecting an existing token |
| range. We recommend upgrading to vnodes; failing that, we |
| recommend specifying initial_token. |
| - reduce_cache_sizes_at, reduce_cache_capacity_to, and |
| flush_largest_memtables_at options have been removed from cassandra.yaml. |
| - CacheServiceMBean.reduceCacheSizes() has been removed. |
| Use CacheServiceMBean.set{Key,Row}CacheCapacityInMB() instead. |
| - authority option in cassandra.yaml has been deprecated since 1.2.0, |
| but it has been completely removed in 2.0. Please use 'authorizer' option. |
| - ASSUME command has been removed from cqlsh. Use CQL3 blobAsType() and |
| typeAsBlob() conversion functions instead. |
| See https://cassandra.apache.org/doc/cql3/CQL.html#blobFun for details. |
| - Inputting blobs as string constants is now fully deprecated in |
| favor of blob constants. Make sure to update your applications to use |
| the new syntax while you are still on 1.2 (which supports both string |
| and blob constants for blob input) before upgrading to 2.0. |
| - index_interval is now moved to ColumnFamily property. You can change value |
| with ALTER TABLE ... WITH statement and SSTables written after that will |
| have new value. When upgrading, Cassandra will pick up the value defined in |
| cassanda.yaml as the default for existing ColumnFamilies, until you explicitly |
| set the value for those. |
| - The deprecated native_transport_min_threads option has been removed in |
| Cassandra.yaml. |
| |
| Operations |
| ---------- |
| - VNodes are enabled by default in cassandra.yaml. initial_token |
| for non-vnode deployments has been removed from the example |
| yaml, but is still respected if specified. |
| - Major compactions, cleanup, scrub, and upgradesstables will interrupt |
| any in-progress compactions (but not repair validations) when invoked. |
| - Disabling autocompactions by setting min/max compaction threshold to 0 |
| has been deprecated, instead, use the nodetool commands 'disableautocompaction' |
| and 'enableautocompaction' or set the compaction strategy option enabled = false |
| - ALTER TABLE DROP has been reenabled for CQL3 tables and has new semantics now. |
| See https://cassandra.apache.org/doc/cql3/CQL.html#alterTableStmt and |
| https://issues.apache.org/jira/browse/CASSANDRA-3919 for details. |
| - CAS uses gc_grace_seconds to determine how long to keep unused paxos |
| state around for, or a minimum of three hours. |
| - A new hints created metric is tracked per target, replacing countPendingHints |
| - After performance testing for CASSANDRA-5727, the default LCS filesize |
| has been changed from 5MB to 160MB. |
| - cqlsh DESCRIBE SCHEMA no longer outputs the schema of system_* keyspaces; |
| use DESCRIBE FULL SCHEMA if you need the schema of system_* keyspaces. |
| - CQL2 has been deprecated, and will be removed entirely in 2.2. See |
| CASSANDRA-5918 for details. |
| - Commit log archiver now assumes the client time stamp to be in microsecond |
| precision, during restore. Please refer to commitlog_archiving.properties. |
| |
| |
| Features |
| -------- |
| - Lightweight transactions |
| (http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0) |
| - Alias support has been added to CQL3 SELECT statement. Refer to |
| CQL3 documentation (http://cassandra.apache.org/doc/cql3/CQL.html) for details. |
| - JEMalloc support (see memory_allocator in cassandra.yaml) |
| - Experimental triggers support. See examples/ for how to use. "Experimental" |
| means "tied closely to internal data structures; we plan to decouple this in |
| the future, which will probably break triggers written against this initial |
| API." |
| - Numerous improvements to CQL3 and a new version of the native protocol. See |
| http://www.datastax.com/dev/blog/cql-in-cassandra-2-0 for details. |
| |
| 1.2.11 |
| ====== |
| |
| Features |
| -------- |
| - Added a new consistency level, LOCAL_ONE, that forces all CL.ONE operations to |
| execute only in the local datacenter. |
| - New replace_address to supplant the (now removed) replace_token and |
| replace_node workflows to replace a dead node in place. Works like the |
| old options, but takes the IP address of the node to be replaced. |
| |
| 1.2.9 |
| ===== |
| |
| Features |
| -------- |
| - A history of executed nodetool commands is now captured. |
| It can be found in ~/.cassandra/nodetool.history. Other tools output files |
| (cli and cqlsh history, .cqlshrc) are now centralized in ~/.cassandra, as well. |
| - A new sstablesplit utility allows to split large sstables offline. |
| |
| |
| |
| 1.2.8 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but please see 1.2.7 if you are upgrading |
| from a previous version. |
| |
| |
| 1.2.7 |
| ===== |
| |
| Upgrading |
| --------- |
| - If you have decommissioned a node in the past 72 hours, it is imperative |
| that you not upgrade until such time has passed, or do a full cluster |
| restart (not rolling) before beginning the upgrade. This only applies to |
| decommission, not removetoken. |
| |
| |
| 1.2.6 |
| ===== |
| |
| Upgrading |
| --------- |
| - hinted_handoff_throttle_in_kb is now reduced by a factor |
| proportional to the number of nodes in the cluster (see |
| https://issues.apache.org/jira/browse/CASSANDRA-5272). |
| - CQL3 syntax for CREATE CUSTOM INDEX has been updated. See CQL3 |
| documentation for details. |
| |
| |
| 1.2.5 |
| ===== |
| |
| Features |
| -------- |
| - Custom secondary index support has been added to CQL3. Refer to |
| CQL3 documentation (http://cassandra.apache.org/doc/cql3/CQL.html) |
| for details and examples. |
| |
| Upgrading |
| --------- |
| - The native CQL transport is enabled by default on part 9042. |
| |
| |
| 1.2.4 |
| ===== |
| |
| Upgrading |
| --------- |
| - 'nodetool upgradesstables' now only upgrades/rewrites sstables that are |
| not on the current version (which is usually what you want). Use the new |
| -a flag to recover the old behavior of rewriting all sstables. |
| |
| Features |
| -------- |
| - superuser setup delay (10 seconds) can now be overridden using |
| 'cassandra.superuser_setup_delay_ms' property. |
| |
| |
| 1.2.3 |
| ===== |
| |
| Upgrading |
| --------- |
| - CQL3 used to be case-insensitive for property map key in ALTER and CREATE |
| statements. In other words: |
| CREATE KEYSPACE test WITH replication = { 'CLASS' : 'SimpleStrategy', |
| 'REPLICATION_FACTOR' : '1' } |
| was allowed. However, this was not consistent with the fact that string |
| literal are case sensitive in every other places and more importantly this |
| break NetworkTopologyStrategy for which DC names are case sensitive. Those |
| property map key are now case sensitive. So the statement above should be |
| changed to: |
| CREATE KEYSPACE test WITH replication = { 'class' : 'SimpleStrategy', |
| 'replication_factor' : '1' } |
| |
| |
| 1.2.2 |
| ===== |
| |
| Upgrading |
| --------- |
| - CQL3 type validation for constants has been fixed, which may require |
| fixing queries that were relying on the previous loose validation. Please |
| refer to the CQL3 documentation (http://cassandra.apache.org/doc/cql3/CQL.html) |
| and in particular the changelog section for more details. Please note in |
| particular that inputing blobs as strings constants is now deprecated (in |
| favor of blob constants) and its support will be removed in a future |
| version. |
| |
| Features |
| -------- |
| - Built-in CQL3-based implementations of IAuthenticator (PasswordAuthenticator) |
| and IAuthorizer (CassandraAuthorizer) have been added. PasswordAuthenticator |
| stores usernames and hashed passwords in system_auth.credentials table; |
| CassandraAuthorizer stores permissions in system_auth.permissions table. |
| - system_auth keyspace is now alterable via ALTER KEYSPACE queries. |
| The default is SimpleStrategy with replication_factor of 1, but it's |
| advised to raise RF to at least 3 or 5, since CL.QUORUM is used for all |
| auth-related queries. It's also possible to change the strategy to NTS. |
| - Permissions caching with time-based expiration policy has been added to reduce |
| performance impact of authorization. Permission validity can be configured |
| using 'permissions_validity_in_ms' setting in cassandra.yaml. The default |
| is 2000 (2 seconds). |
| - SimpleAuthenticator and SimpleAuthorizer examples have been removed. Please |
| look at CassandraAuthorizer/PasswordAuthenticator instead. |
| |
| |
| 1.2.1 |
| ===== |
| |
| Upgrading |
| --------- |
| - In CQL3, date string are no longer accepted as timeuuid value since a |
| date string is not a correct representation of a timeuuid. Instead, new |
| methods (minTimeuuid, maxTimeuuid, now, dateOf, unixTimestampOf) have been |
| introduced to make working on timeuuid from date string easy. cqlsh also |
| does not display timeuuid as date string (since this is a lossy |
| representation), but the new dateOf method can be used instead. Please |
| refer to the reference documentation (http://cassandra.apache.org/doc/cql3/CQL.html) |
| for more detail. |
| - For client implementors: CQL3 client using the thrift interface should |
| use the new execute_cql3_query, prepare_cql3_query and execute_prepared_cql3_query |
| since 1.2.0. However, Cassandra 1.2.0 was not complaining if CQL3 was set |
| through set_cql_version but the now CQL2 only methods were used. This is |
| now the case. |
| - Queries that uses unrecognized or bad compaction or replication strategy |
| options are now refused (instead of simply logging a warning). |
| |
| |
| 1.2 |
| === |
| |
| Upgrading |
| --------- |
| - IAuthenticator interface has been updated to support dynamic |
| user creation, modification and removal. Users, even when stored |
| externally, now have to be explicitly created using |
| CREATE USER query first. AllowAllAuthenticator and SimpleAuthenticator |
| have been updated for the new interface, but you'll have to update |
| your old IAuthenticator implementations for 1.2. To ease this process, |
| a new abstract LegacyAuthenticator class has been added - subclass it |
| in your old IAuthenticator implementaion and everything should just work |
| (this only affects users who implemented custom authenticators). |
| - IAuthority interface has been deprecated in favor of IAuthorizer. |
| AllowAllAuthority and SimpleAuthority have been renamed to |
| AllowAllAuthorizer and SimpleAuthorizer, respectively. In order to |
| simplify the upgrade to the new interface, a new abstract |
| LegacyAuthorizer has been added - you should subclass it in your |
| old IAuthority implementation and everything should just work |
| (this only affects users who implemented custom authorities). |
| 'authority' setting in cassandra.yaml has been renamed to 'authorizer', |
| 'authority' is no longer recognized. This affects all upgrading users. |
| - 1.2 is NOT network-compatible with versions older than 1.0. That |
| means if you want to do a rolling, zero-downtime upgrade, you'll need |
| to upgrade first to 1.0.x or 1.1.x, and then to 1.2. 1.2 retains |
| the ability to read data files from Cassandra versions at least |
| back to 0.6, so a non-rolling upgrade remains possible with just |
| one step. |
| - The default partitioner for new clusters is Murmur3Partitioner, |
| which is about 10% faster for index-intensive workloads. Partitioners |
| cannot be changed once data is in the cluster, however, so if you are |
| switching to the 1.2 cassandra.yaml, you should change this to |
| RandomPartitioner or whatever your old partitioner was. |
| - If you using counters and upgrading from a version prior to |
| 1.1.6, you should drain existing Cassandra nodes prior to the |
| upgrade to prevent overcount during commitlog replay (see |
| CASSANDRA-4782). For non-counter uses, drain is not required |
| but is a good practice to minimize restart time. |
| - Tables using LeveledCompactionStrategy will default to not |
| creating a row-level bloom filter. The default in older versions |
| of Cassandra differs; you should manually set the false positive |
| rate to 1.0 (to disable) or 0.01 (to enable, if you make many |
| requests for rows that do not exist). |
| - The hints schema was changed from 1.1 to 1.2. Cassandra automatically |
| snapshots and then truncates the hints column family as part of |
| starting up 1.2 for the first time. Additionally, upgraded nodes |
| will not store new hints destined for older (pre-1.2) nodes. It is |
| therefore recommended that you perform a cluster upgrade when all |
| nodes are up. Because hints will be lost, a cluster-wide repair (with |
| -pr) is recommended after upgrade of all nodes. |
| - The `nodetool removetoken` command (and corresponding JMX operation) |
| have been renamed to `nodetool removenode`. This function is |
| incompatible with the earlier `nodetool removetoken`, and attempts to |
| remove nodes in this way with a mixed 1.1 (or lower) / 1.2 cluster, |
| is not supported. |
| - The somewhat ill-conceived CollatingOrderPreservingPartitioner |
| has been removed. Use Murmur3Partitioner (recommended) or |
| ByteOrderedPartitioner instead. |
| - Global option hinted_handoff_throttle_delay_in_ms has been removed. |
| hinted_handoff_throttle_in_kb has been added instead. |
| - The default bloom filter fp chance has been increased to 1%. |
| This will save about 30% of the memory used by the old default. |
| Existing columnfamilies will retain their old setting. |
| - The default partitioner (for new clusters; the partitioner cannot be |
| changed in existing clusters) was changed from RandomPartitioner to |
| Murmur3Partitioner which provides faster hashing as well as improved |
| performance with secondary indexes. |
| - The default version of CQL (and cqlsh) is now CQL3. CQL2 is still |
| available but you will have to use the thrift set_cql_version method |
| (that is already supported in 1.1) to use CQL2. For cqlsh, you will need |
| to use 'cqlsh -2'. |
| - CQL3 is now considered final in this release. Compared to the beta |
| version that is part of 1.1, this final version has a few additions |
| (collections), but also some (incompatible) changes in the syntax for the |
| options of the create/alter keyspace/table statements. Typically, the |
| syntax to create a keyspace is now: |
| CREATE KEYSPACE ks WITH replication = { 'class' : 'SimpleStrategy', |
| 'replication_factor' : 2 }; |
| Also, the consistency level cannot be set in the language anymore, but is |
| at the protocol level. |
| Please refer to the CQL3 documentation (http://cassandra.apache.org/doc/cql3/CQL.html) |
| for details. |
| - In CQL3, the DROP behavior from ALTER TABLE has currently been removed |
| (because it was not correctly implemented). We hope to add it back soon |
| (Cassandra 1.2.1 or 1.2.2) |
| |
| Features |
| -------- |
| - Cassandra can now handle concurrent CREATE TABLE schema changes |
| as well as other updates |
| - rpc_timeout has been split up to allow finer-grained control |
| on timeouts for different operation types |
| - num_tokens can now be specified in cassandra.yaml. This defines the |
| number of tokens assigned to the host on the ring (default: 1). |
| Also specifying initial_token will override any num_tokens setting. |
| - disk_failure_policy allows blacklisting failed disks in JBOD |
| configuration instead of erroring out indefinitely |
| - event tracing can be configured per-connection ("trace_next_query") |
| or globally/probabilistically ("nodetool settraceprobability") |
| - Atomic batches are now supported server side, where Cassandra will |
| guarantee that (at the price of pre-writing the batch to another node |
| first), all mutations in the batch will be applied, even if the |
| coordinator fails mid-batch. |
| - new IAuthorizer interface has replaced the old IAuthority. IAuthorizer |
| allows dynamic permission management via new CQL3 statements: |
| GRANT, REVOKE, LIST PERMISSIONS. A native implementation storing |
| the permissions in Cassandra is being worked on and we expect to |
| include it in 1.2.1 or 1.2.2. |
| - IAuthenticator interface has been updated to support dynamic user |
| creation, modification and removal via new CQL3 statements: |
| CREATE USER, ALTER USER, DROP USER, LIST USERS. A native implementation |
| that stores users in Cassandra itself is being worked on and is expected to |
| become part of 1.2.1 or 1.2.2. |
| |
| |
| 1.1.5 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but please see 1.1 if you are upgrading |
| from a previous version. |
| |
| |
| 1.1.4 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but please see 1.1 if you are upgrading |
| from a previous version. |
| |
| |
| 1.1.3 |
| ===== |
| |
| Upgrading |
| --------- |
| - Running "nodetool upgradesstables" after upgrading is recommended |
| if you use Counter columnfamilies. |
| |
| Features |
| -------- |
| - the cqlsh COPY command can now export to CSV flat files |
| - added a new tools/bin/token-generator to facilitate generating evenly distributed tokens |
| |
| |
| 1.1.2 |
| ===== |
| |
| Upgrading |
| --------- |
| - If you have column families using the LeveledCompactionStrategy, you should run scrub on those column families. |
| |
| Features |
| -------- |
| - cqlsh has a new COPY command to load data from CSV flat files |
| |
| |
| 1.1.1 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to this release, but please see 1.1 if you are upgrading |
| from a previous version. |
| |
| Features |
| -------- |
| - Continuous commitlog archiving and point-in-time recovery. |
| See conf/commitlog_archiving.properties |
| - Incremental repair by token range, exposed over JMX |
| |
| |
| 1.1 |
| === |
| |
| Upgrading |
| --------- |
| - Compression is enabled by default on newly created ColumnFamilies |
| (and unchanged for ColumnFamilies created prior to upgrading). |
| - If you are running a multi datacenter setup, you should upgrade to |
| the latest 1.0.x (or 0.8.x) release before upgrading. Versions |
| 0.8.8 and 1.0.3-1.0.5 generate cross-dc forwarding that is incompatible |
| with 1.1. |
| - EACH_QUORUM ConsistencyLevel is only supported for writes and will now |
| throw an InvalidRequestException when used for reads. (Previous |
| versions would silently perform a LOCAL_QUORUM read instead.) |
| - ANY ConsistencyLevel is only supported for writes and will now |
| throw an InvalidRequestException when used for reads. (Previous |
| versions would silently perform a ONE read for range queries; |
| single-row and multiget reads already rejected ANY.) |
| - The largest mutation batch accepted by the commitlog is now 128MB. |
| (In practice, batches larger than ~10MB always caused poor |
| performance due to load volatility and GC promotion failures.) |
| Larger batches will continue to be accepted but will not be |
| durable. Consider setting durable_writes=false if you really |
| want to use such large batches. |
| - Make sure that global settings: key_cache_{size_in_mb, save_period} |
| and row_cache_{size_in_mb, save_period} in conf/cassandra.yaml are |
| used instead of per-ColumnFamily options. |
| - JMX methods no longer return custom Cassandra objects. Any such methods |
| will now return standard Maps, Lists, etc. |
| - Hadoop input and output details are now separated. If you were |
| previously using methods such as getRpcPort you now need to use |
| getInputRpcPort or getOutputRpcPort depending on the circumstance. |
| - CQL changes: |
| + Prior to 1.1, you could use KEY as the primary key name in some |
| select statements, even if the PK was actually given a different |
| name. In 1.1+ you must use the defined PK name. |
| - The sliced_buffer_size_in_kb option has been removed from the |
| cassandra.yaml config file (this option was a no-op since 1.0). |
| |
| Features |
| -------- |
| - Concurrent schema updates are now supported, with any conflicts |
| automatically resolved. Please note that simultaneously running |
| ‘CREATE COLUMN FAMILY’ operation on the different nodes wouldn’t |
| be safe until version 1.2 due to the nature of ColumnFamily |
| identifier generation, for more details see CASSANDRA-3794. |
| - The CQL language has undergone a major revision, CQL3, the |
| highlights of which are covered at [1]. CQL3 is not |
| backwards-compatibile with CQL2, so we've introduced a |
| set_cql_version Thrift method to specify which version you want. |
| (The default remains CQL2 at least until Cassandra 1.2.) cqlsh |
| adds a --cql3 flag to enable this. |
| [1] http://www.datastax.com/dev/blog/schema-in-cassandra-1-1 |
| - Row-level isolation: multi-column updates to a single row have |
| always been *atomic* (either all will be applied, or none) |
| thanks to the CommitLog, but until 1.1 they were not *isolated* |
| -- a reader may see mixed old and new values while the update |
| happens. |
| - Finer-grained control over data directories, allowing a ColumnFamily to |
| be pinned to specfic volume, e.g. one backed by SSD. |
| - The bulk loader is not longer a fat client; it can be run from an |
| existing machine in a cluster. |
| - A new write survey mode has been added, similar to bootstrap (enabled via |
| -Dcassandra.write_survey=true), but the node will not automatically join |
| the cluster. This is useful for cases such as testing different |
| compaction strategies with live traffic without affecting the cluster. |
| - Key and row caches are now global, similar to the global memtable |
| threshold. Manual tuning of cache sizes per-columnfamily is no longer |
| required. |
| - Off-heap caches no longer require JNA, and will work out of the box |
| on Windows as well as Unix platforms. |
| - Streaming is now multithreaded. |
| - Compactions may now be aborted via JMX or nodetool. |
| - The stress tool is not new in 1.1, but it is newly included in |
| binary builds as well as the source tree |
| - Hadoop: a new BulkOutputFormat is included which will directly write |
| SSTables locally and then stream them into the cluster. |
| YOU SHOULD USE BulkOutputFormat BY DEFAULT. ColumnFamilyOutputFormat |
| is still around in case for some strange reason you want results |
| trickling out over Thrift, but BulkOutputFormat is significantly |
| more efficient. |
| - Hadoop: KeyRange.filter is now supported with ColumnFamilyInputFormat, |
| allowing index expressions to be evaluated server-side to reduce |
| the amount of data sent to Hadoop. |
| - Hadoop: ColumnFamilyRecordReader has a wide-row mode, enabled via |
| a boolean parameter to setInputColumnFamily, that pages through |
| data column-at-a-time instead of row-at-a-time. |
| - Pig: can use the wide-row Hadoop support, by setting PIG_WIDEROW_INPUT |
| to true. This will produce each row's columns in a bag. |
| |
| |
| |
| 1.0.8 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to 1.0.8 |
| |
| Other |
| ----- |
| - Allow configuring socket timeout for streaming |
| |
| |
| 1.0.7 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to 1.0.7, please report to instruction for 1.0.6 |
| |
| Other |
| ----- |
| - Adds new setstreamthroughput to nodetool to configure streaming |
| throttling |
| - Adds JMX property to get/set rpc_timeout_in_ms at runtime |
| - Allow configuring (per-CF) bloom_filter_fp_chance |
| |
| |
| 1.0.6 |
| ===== |
| |
| Upgrading |
| --------- |
| - This release fixes an issue related to the chunk_length_kb option for |
| compressed sstables. If you use compression on some column families, it |
| is recommended after the upgrade to check the value for this option on |
| these column families (the default value is 64). In case the option would |
| not be set correctly, you should update the column family definition, |
| setting the right value and then run scrub on the column family. |
| - Please report to instruction for 1.0.5 if coming from an older version. |
| |
| |
| 1.0.5 |
| ===== |
| |
| Upgrading |
| --------- |
| - 1.0.5 comes to fix two important regression of 1.0.4. So all information |
| concerning 1.0.4 are valid for this release, but please avoids upgrading |
| to 1.0.4. |
| |
| |
| 1.0.4 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to 1.0.4 but please see the 1.0 upgrading section if |
| upgrading from a version prior to 1.0.0 |
| |
| Features |
| -------- |
| - A new upgradesstables command has been added to nodetool. It is very |
| similar to scrub but without the ability to discard corrupted rows (and |
| as a consequence it does not snapshot automatically before). This new |
| command is to be prefered to scrub in all cases where sstables should be |
| rewritten to the current format for upgrade purposes. |
| |
| JMX |
| --- |
| - The path for the data, commit log and saved cache directories exposed |
| through JMX |
| - The in-memory bloom filter sizes are now exposed through JMX |
| |
| |
| 1.0.3 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to 1.0.3 but please see the 1.0 upgrading section if |
| upgrading from a version prior to 1.0.0 |
| |
| Features |
| -------- |
| - For non compressed sstables (compressed sstable already include more |
| fine grained checsums), a sha1 for the full sstable is now automatically |
| created (in a fix with suffix -Digest.sha1). It can be used to check the |
| sstable integrity with sha1sum. |
| |
| |
| 1.0.2 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to 1.0.2 but please see the 1.0 upgrading section if |
| upgrading from a version prior to 1.0.0 |
| |
| Features |
| -------- |
| - Cassandra CLI queries now have timing information |
| |
| |
| 1.0.1 |
| ===== |
| |
| Upgrading |
| --------- |
| - If upgrading from a version prior to 1.0.0, please see the 1.0 Upgrading |
| section |
| - For running on Windows as a Service, procrun is no longer discributed |
| with Cassandra, see README.txt for more information on how to download |
| it if necessary. |
| - The name given to snapshots directories have been improved for human |
| readability. If you had scripts relying on it, you may need to update |
| them. |
| |
| |
| 1.0 |
| === |
| |
| Upgrading |
| --------- |
| - Upgrading from version 0.7.1+ or 0.8.2+ can be done with a rolling |
| restart, one node at a time. (0.8.0 or 0.8.1 are NOT network-compatible |
| with 1.0: upgrade to the most recent 0.8 release first.) |
| You do not need to bring down the whole cluster at once. |
| - After upgrading, run nodetool scrub against each node before running |
| repair, moving nodes, or adding new ones. |
| - CQL inserts/updates now generate microsecond resolution timestamps |
| by default, instead of millisecond. THIS MEANS A ROLLING UPGRADE COULD |
| MIX milliseconds and microseconds, with clients talking to servers |
| generating milliseconds unable to overwrite the larger microsecond |
| timestamps. If you are using CQL and this is important for your |
| application, you can either perform a non-rolling upgrade to 1.0, or |
| update your application first to use explicit timestamps with the "USING |
| timestamp=X" syntax. |
| - The BinaryMemtable bulk-load interface has been removed (use the |
| sstableloader tool instead). |
| - The compaction_thread_priority setting has been removed from |
| cassandra.yaml (use compaction_throughput_mb_per_sec to throttle |
| compaction instead). |
| - CQL types bytea and date were renamed to blob and timestamp, respectively, |
| to conform with SQL norms. CQL type int is now a 4-byte int, not 8 |
| (which is still available as bigint). |
| - Cassandra 1.0 uses arena allocation to reduce old generation |
| fragmentation. This means there is a minimum overhead of 1MB |
| per ColumnFamily plus 1MB per index. |
| - The SimpleAuthenticator and SimpleAuthority classes have been moved to |
| the example directory (and are thus not available from the binary |
| distribution). They never provided actual security and in their current |
| state are only meant as examples. |
| |
| Features |
| -------- |
| - SSTable compression is supported through the 'compression_options' |
| parameter when creating/updating a column family. For instance, you can |
| create a column family Cf using compression (through the Snappy library) |
| in the CLI with: |
| create column family Cf with compression_options={sstable_compression: SnappyCompressor} |
| SSTable compression is not activated by default but can be activated or |
| deactivated at any time. |
| - Compressed SSTable blocks are checksummed to protect against bitrot |
| - New LevelDB-inspired compaction algorithm can be enabled by setting the |
| Columnfamily compaction_strategy=LeveledCompactionStrategy option. |
| Leveled compaction means you only need to keep a few MB of space free for |
| compaction instead of (in the worst case) 50%. |
| - Ability to use multiple threads during a single compaction. See |
| multithreaded_compaction in cassandra.yaml for more details. |
| - Windows Service ("cassandra.bat install" to enable) |
| - A dead node may be replaced in a single step by starting a new node |
| with -Dcassandra.replace_token=<token>. More details can be found at |
| http://wiki.apache.org/cassandra/Operations#Replacing_a_Dead_Node |
| - It is now possible to repair only the first range returned by the |
| partitioner for a node with `nodetool repair -pr`. It makes it |
| easier/possible to repair a full cluster without any work duplication by |
| running this command on every node of the cluster. |
| |
| New data types |
| -------------- |
| - decimal |
| |
| Other |
| ----- |
| - Hinted Handoff has two major improvements: |
| - Hint replay is much more efficient thanks to a change in the data model |
| - Hints are created for all replicas that do not ack a write. (Formerly, |
| only replicas known to be down when the write started were hinted.) |
| This means that running with read repair completely off is much more |
| viable than before, and the default read_repair_chance is reduced from 1.0 |
| ("always repair") to 0.1 ("repair 10% of the time"). |
| - The old per-ColumnFamily memtable thresholds |
| (memtable_throughput_in_mb, memtable_operations_in_millions, |
| memtable_flush_after_mins) are ignored, in favor of the global |
| memtable_total_space_in_mb and commitlog_total_space_in_mb settings. |
| This does not affect client compatibility -- the old options are |
| still allowed, but have no effect. These options may be removed |
| entirely in a future release. |
| - Backlogged compactions will begin five minutes after startup. The 0.8 |
| behavior of never starting compaction until a flush happens is usually |
| not what is desired, but a short grace period is useful to allow caches |
| to warm up first. |
| - The deletion of compacted data files is not performed during Garbage |
| Collection anymore. This means compacted files will now be deleted |
| without delay. |
| |
| |
| 0.8.5 |
| ===== |
| |
| Features |
| -------- |
| - SSTables copied to a data directory can be loaded by a live node through |
| nodetool refresh (may be handy to load snapshots). |
| - The configured compaction throughput is exposed through JMX. |
| |
| Other |
| ----- |
| - The sstableloader is now bundled with the debian package. |
| - Repair detects when a participating node is dead and fails instead of |
| hanging forever. |
| |
| |
| 0.8.4 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to 0.8.4 |
| |
| Other |
| ----- |
| - This release comes to fix a bug in counter that could lead to |
| (important) over-count. |
| - It also fixes a slight upgrade regression from 0.8.3. It is thus advised |
| to jump directly to 0.8.4 if upgrading from before 0.8.3. |
| |
| |
| 0.8.3 |
| ===== |
| |
| Upgrading |
| --------- |
| - Token removal has been revamped. Removing tokens in a mixed cluster with |
| 0.8.3 will not work, so the entire cluster will need to be running 0.8.3 |
| first, except for the dead node. |
| |
| Features |
| -------- |
| - It is now possible to use thrift asynchronous and |
| half-synchronous/half-asynchronous servers (see cassandra.yaml for more |
| details). |
| - It is now possible to access counter columns through Hadoop. |
| |
| Other |
| ----- |
| - This release fix a regression of 0.8 that can make commit log segment to |
| be deleted even though not all data it contains has been flushed. |
| Upgrades from 0.8.* is very much encouraged. |
| |
| |
| 0.8.2 |
| ===== |
| |
| Upgrading |
| --------- |
| - 0.8.0 and 0.8.1 shipped with a bug that was setting the |
| replicate_on_write option for counter column families to false (this |
| option has no effect on non-counter column family). This is an unsafe |
| default and 0.8.2 correct this, the default for replicate_on_write is |
| now true. It is advised to update your counter column family definitions |
| if replicate_on_write was uncorrectly set to false (before or after |
| upgrade). |
| |
| |
| 0.8.1 |
| ===== |
| |
| Upgrading |
| --------- |
| - 0.8.1 is backwards compatible with 0.8, upgrade can be achieved by a |
| simple rolling restart. |
| - If upgrading for earlier version (0.7), please refer to the 0.8 section |
| for instructions. |
| |
| Features |
| -------- |
| - Numerous additions/improvements to CQL (support for counters, TTL, batch |
| inserts/deletes, index dropping, ...). |
| - Add two new AbstractTypes (comparator) to support compound keys |
| (CompositeType and DynamicCompositeType), as well as a ReverseType to |
| reverse the order of any existing comparator. |
| - New option to bypass the commit log on some keyspaces (for advanced |
| users). |
| |
| Tools |
| ----- |
| - Add new data bulk loading utility (sstableloader). |
| |
| |
| 0.8 |
| === |
| |
| Upgrading |
| --------- |
| - Upgrading from version 0.7.1 or later can be done with a rolling |
| restart, one node at a time. You do not need to bring down the |
| whole cluster at once. |
| - After upgrading, run nodetool scrub against each node before running |
| repair, moving nodes, or adding new ones. |
| - Running nodetool drain before shutting down the 0.7 node is |
| recommended but not required. (Skipping this will result in |
| replay of entire commitlog, so it will take longer to restart but |
| is otherwise harmless.) |
| - 0.8 is fully API-compatible with 0.7. You can continue |
| to use your 0.7 clients. |
| - Avro record classes used in map/reduce and Hadoop streaming code have |
| been removed. Map/reduce can be switched to Thrift by changing |
| org.apache.cassandra.avro in import statements to |
| org.apache.cassandra.thrift (no class names change). Streaming support |
| has been removed for the time being. |
| - The loadbalance command has been removed from nodetool. For similar |
| behavior, decommission then rebootstrap with empty initial_token. |
| - Thrift unframed mode has been removed. |
| - The addition of key_validation_class means the cli will assume keys |
| are bytes, instead of strings, in the absence of other information. |
| See http://wiki.apache.org/cassandra/FAQ#cli_keys for more details. |
| |
| |
| Features |
| -------- |
| - added CQL client API and JDBC/DBAPI2-compliant drivers for Java and |
| Python, respectively (see: drivers/ subdirectory and doc/cql) |
| - added distributed Counters feature; |
| see http://wiki.apache.org/cassandra/Counters |
| - optional intranode encryption; see comments around 'encryption_options' |
| in cassandra.yaml |
| - compaction multithreading and rate-limiting; see |
| 'concurrent_compactors' and 'compaction_throughput_mb_per_sec' in |
| cassandra.yaml |
| - cassandra will limit total memtable memory usage to 1/3 of the heap |
| by default. This can be ajusted or disabled with the |
| memtable_total_space_in_mb option. The old per-ColumnFamily |
| throughput, operations, and age settings are still respected but |
| will be removed in a future major release once we are satisfied that |
| memtable_total_space_in_mb works adequately. |
| |
| Tools |
| ----- |
| - stress and py_stress moved from contrib/ to tools/ |
| - clustertool was removed (see |
| https://issues.apache.org/jira/browse/CASSANDRA-2607 for examples |
| of how to script nodetool across the cluster instead) |
| |
| Other |
| ----- |
| - In the past, sstable2json would write column names and values as |
| hex strings, and now creates human readable values based on the |
| comparator/validator. As a result, JSON dumps created with |
| older versions of sstable2json are no longer compatible with |
| json2sstable, and imports must be made with a configuration that |
| is identical to the export. |
| - manually-forced compactions ("nodetool compact") will do nothing |
| if only a single SSTable remains for a ColumnFamily. To force it |
| to compact that anyway (which will free up space if there are |
| a lot of expired tombstones), use the new forceUserDefinedCompaction |
| JMX method on CompactionManager. |
| - most of contrib/ (which was not part of the binary releases) |
| has been moved either to examples/ or tools/. We plan to move the |
| rest for 0.8.1. |
| |
| JMX |
| --- |
| - By default, JMX now listens on port 7199. |
| |
| |
| 0.7.6 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to 0.7.6, but see 0.7.3 Upgrading if upgrading |
| from earlier than 0.7.1. |
| |
| |
| 0.7.5 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to 0.7.5, but see 0.7.3 Upgrading if upgrading |
| from earlier than 0.7.1. |
| |
| Changes |
| ------- |
| - system_update_column_family no longer snapshots before applying |
| the schema change. (_update_keyspace never did. _drop_keyspace |
| and _drop_column_family continue to snapshot.) |
| - added memtable_flush_queue_size option to cassandra.yaml to |
| avoid blocking writes when multiple column families (or a colum |
| family with indexes) are flushed at the same time. |
| - allow overriding initial_token, storage_port and rpc_port using |
| system properties |
| |
| |
| 0.7.4 |
| ===== |
| |
| Upgrading |
| --------- |
| - Nothing specific to 0.7.4, but see 0.7.3 Upgrading if upgrading |
| from earlier than 0.7.1. |
| |
| Features |
| -------- |
| - Output to Pig is now supported as well as input |
| |
| |
| 0.7.3 |
| ===== |
| |
| Upgrading |
| --------- |
| - 0.7.1 and 0.7.2 shipped with a bug that caused incorrect row-level |
| bloom filters to be generated when compacting sstables generated |
| with earlier versions. This would manifest in IOExceptions during |
| column name-based queries. 0.7.3 provides "nodetool scrub" to |
| rebuild sstables with correct bloom filters, with no data lost. |
| (If your cluster was never on 0.7.0 or earlier, you don't have to |
| worry about this.) Note that nodetool scrub will snapshot your |
| data files before rebuilding, just in case. |
| |
| |
| 0.7.1 |
| ===== |
| |
| Upgrading |
| --------- |
| - 0.7.1 is completely backwards compatible with 0.7.0. Just restart |
| each node with the new version, one at a time. (The cluster does |
| not all need to be upgraded simultaneously.) |
| |
| Features |
| -------- |
| - added flush_largest_memtables_at and reduce_cache_sizes_at options |
| to cassandra.yaml as an escape valve for memory pressure |
| - added option to specify -Dcassandra.join_ring=false on startup |
| to allow "warm spare" nodes or performing JMX maintenance before |
| joining the ring |
| |
| Performance |
| ----------- |
| - Disk writes and sequential scans avoid polluting page cache |
| (requires JNA to be enabled) |
| - Cassandra performs writes efficiently across datacenters by |
| sending a single copy of the mutation and having the recipient |
| forward that to other replicas in its datacenter. |
| - Improved network buffering |
| - Reduced lock contention on memtable flush |
| - Optimized supercolumn deserialization |
| - Zero-copy reads from mmapped sstable files |
| - Explicitly set higher JVM new generation size |
| - Reduced i/o contention during saving of caches |
| |
| |
| 0.7.0 |
| ===== |
| |
| Features |
| -------- |
| - Secondary indexes (indexes on column values) are now supported |
| - Row size limit increased from 2GB to 2 billion columns. rows |
| are no longer read into memory during compaction. |
| - Keyspace and ColumnFamily definitions may be added and modified live |
| - Streaming data for repair or node movement no longer requires |
| anticompaction step first |
| - NetworkTopologyStrategy (formerly DatacenterShardStrategy) is ready for |
| use, enabling ConsistencyLevel.DCQUORUM and DCQUORUMSYNC. See comments |
| in `cassandra.yaml.` |
| - Optional per-Column time-to-live field allows expiring data without |
| have to issue explicit remove commands |
| - `truncate` thrift method allows clearing an entire ColumnFamily at once |
| - Hadoop OutputFormat and Streaming [non-jvm map/reduce via stdin/out] |
| support |
| - Up to 8x faster reads from row cache |
| - A new ByteOrderedPartitioner supports bytes keys with arbitrary content, |
| and orders keys by their byte value. This should be used in new |
| deployments instead of OrderPreservingPartitioner. |
| - Optional round-robin scheduling between keyspaces for multitenant |
| clusters |
| - Dynamic endpoint snitch mitigates the impact of impaired nodes |
| - New `IntegerType`, faster than LongType and allows integers of |
| both less and more bits than Long's 64 |
| - A revamped authentication system that decouples authorization and |
| allows finer-grained control of resources. |
| |
| Upgrading |
| --------- |
| The Thrift API has changed in incompatible ways; see below, and refer |
| to http://wiki.apache.org/cassandra/ClientOptions for a list of |
| higher-level clients that have been updated to support the 0.7 API. |
| |
| The Cassandra inter-node protocol is incompatible with 0.6.x |
| releases (and with 0.7 beta1), meaning you will have to bring your |
| cluster down prior to upgrading: you cannot mix 0.6 and 0.7 nodes. |
| |
| The hints schema was changed from 0.6 to 0.7. Cassandra automatically |
| snapshots and then truncates the hints column family as part of |
| starting up 0.7 for the first time. |
| |
| Keyspace and ColumnFamily definitions are stored in the system |
| keyspace, rather than the configuration file. |
| |
| The process to upgrade is: |
| 1) run "nodetool drain" on _each_ 0.6 node. When drain finishes (log |
| message "Node is drained" appears), stop the process. |
| 2) Convert your storage-conf.xml to the new cassandra.yaml using |
| "bin/config-converter". |
| 3) Rename any of your keyspace or column family names that do not adhere |
| to the '^\w+' regex convention. |
| 4) Start up your cluster with the 0.7 version. |
| 5) Initialize your Keyspace and ColumnFamily definitions using |
| "bin/schematool <host> <jmxport> import". _You only need to do |
| this to one node_. |
| |
| Thrift API |
| ---------- |
| - The Cassandra server now defaults to framed mode, rather than |
| unframed. Unframed is obsolete and will be removed in the next |
| major release. |
| - The Cassandra Thrift interface file has been updated for Thrift 0.5. |
| If you are compiling your own client code from the interface, you |
| will need to upgrade the Thrift compiler to match. |
| - Row keys are now bytes: keys stored by versions prior to 0.7.0 will be |
| returned as UTF-8 encoded bytes. OrderPreservingPartitioner and |
| CollatingOrderPreservingPartitioner continue to expect that keys contain |
| UTF-8 encoded strings, but RandomPartitioner now works on any key data. |
| - keyspace parameters have been replaced with the per-connection |
| set_keyspace method. |
| - The return type for login() is now AccessLevel. |
| - The get_string_property() method has been removed. |
| - The get_string_list_property() method has been removed. |
| |
| Configuraton |
| ------------ |
| - Configuration file renamed to cassandra.yaml and log4j.properties to |
| log4j-server.properties |
| - PropertyFileSnitch configuration file renamed to |
| cassandra-topology.properties |
| - The ThriftAddress and ThriftPort directives have been renamed to |
| RPCAddress and RPCPort respectively. |
| - EndPointSnitch was renamed to RackInferringSnitch. A new SimpleSnitch |
| has been added. |
| - RackUnawareStrategy and RackAwareStrategy have been renamed to |
| SimpleStrategy and OldNetworkTopologyStrategy, respectively. |
| - RowWarningThresholdInMB replaced with in_memory_compaction_limit_in_mb |
| - GCGraceSeconds is now per-ColumnFamily instead of global |
| - Keyspace and column family names that do not confirm to a '^\w+' regex |
| are considered illegal. |
| - Keyspace and column family definitions will need to be loaded via |
| "bin/schematool <host> <jmxport> import". _You only need to do this to |
| one node_. |
| - In addition to an authenticator, an authority must be configured as |
| well. Users of SimpleAuthenticator should use SimpleAuthority for this |
| value (the default is AllowAllAuthority, which corresponds with |
| AllowAllAuthenticator). |
| - The format of access.properties has changed, see the sample configuration |
| conf/access.properties for documentation on the new format. |
| |
| |
| JMX |
| --- |
| - StreamingService moved from o.a.c.streaming to o.a.c.service |
| - GMFD renamed to GOSSIP_STAGE |
| - {Min,Mean,Max}RowCompactedSize renamed to {Min,Mean,Max}RowSize |
| since it no longer has to wait til compaction to be computed |
| |
| Other |
| ----- |
| - If extending AbstractType, make sure you follow the singleton pattern |
| followed by Cassandra core AbstractType classes: provide a public |
| static final variable called 'instance'. |
| |
| |
| 0.6.6 |
| ===== |
| |
| Upgrading |
| --------- |
| - As part of the cache-saving feature, a third directory |
| (along with data and commitlog) has been added to the config |
| file. You will need to set and create this directory |
| when restarting your node into 0.6.6. |
| |
| |
| 0.6.1 |
| ===== |
| |
| Upgrading |
| --------- |
| - We try to keep minor versions 100% compatible (data format, |
| commitlog format, network format) within the major series, but |
| we introduced a network-level incompatibility in 0.6.1. |
| Thus, if you are upgrading from 0.6.0 to any higher version |
| (0.6.1, 0.6.2, etc.) then you will need to restart your entire |
| cluster with the new version, instead of being able to do a |
| rolling restart. |
| |
| |
| 0.6.0 |
| ===== |
| |
| Features |
| -------- |
| - row caching: configure with the RowsCached attribute in |
| ColumnFamily definition |
| - Hadoop map/reduce support: see contrib/word_count for an example |
| - experimental authentication support, described under |
| Authenticator in storage.conf |
| |
| Configuraton |
| ------------ |
| - MemtableSizeInMB has been replaced by MemtableThroughputInMB which |
| triggers a memtable flush when the specified amount of data has |
| been written, including overwrites. |
| - MemtableObjectCountInMillions has been replaced by the |
| MemtableOperationsInMillions directive which causes a memtable flush |
| to occur after the specified number of operations. |
| - Like MemtableSizeInMB, BinaryMemtableSizeInMB has been replaced by |
| BinaryMemtableThroughputInMB. |
| - Replication factor is now per-keyspace, rather than global. |
| - KeysCachedFraction is deprecated in favor of KeysCached |
| - RowWarningThresholdInMB added, to warn before very large rows |
| get big enough to threaten node stability |
| |
| Thrift API |
| ---------- |
| - removed deprecated get_key_range method |
| - added batch_mutate meethod |
| - deprecated multiget and batch_insert methods in favor of |
| multiget_slice and batch_mutate, respectively |
| - added ConsistencyLevel.ANY, for when you want write |
| availability even when it may not be readable immediately. |
| Unlike CL.ZERO, though, it will throw an exception if |
| it cannot be written *somewhere*. |
| |
| JMX metrics |
| ----------- |
| - read and write statistics are reported as lifetime totals, |
| instead of averages over the last minute. average-since-last |
| requested are also available for convenience. |
| - cache hit rate statistics are now available from JMX under |
| org.apache.cassandra.db.Caches |
| - compaction JMX metrics are moved to |
| org.apache.cassandra.db.CompactionManager. PendingTasks is now |
| a much better estimate of compactions remaining, and the |
| progress of the current compaction has been added. |
| - commitlog JMX metrics are moved to org.apache.cassandra.db.Commitlog |
| - progress of data streaming during bootstrap, loadbalance, or other |
| data migration, is available under |
| org.apache.cassandra.streaming.StreamingService. |
| See http://wiki.apache.org/cassandra/Streaming for details. |
| |
| Installation/Upgrade |
| -------------------- |
| - 0.6 network traffic is not compatible with earlier versions. You |
| will need to shut down all your nodes at once, upgrade, then restart. |
| |
| |
| |
| 0.5.0 |
| ===== |
| |
| 0. The commitlog format has changed (but sstable format has not). |
| When upgrading from 0.4, empty the commitlog either by running |
| bin/nodeprobe flush on each machine and waiting for the flush to finish, |
| or simply remove the commitlog directory if you only have test data. |
| (If more writes come in after the flush command, starting 0.5 will error |
| out; if that happens, just go back to 0.4 and flush again.) |
| The format changed twice: from 0.4 to beta1, and from beta2 to RC1. |
| |
| .5 The gossip protocol has changed, meaning 0.5 nodes cannot coexist |
| in a cluster of 0.4 nodes or vice versa; you must upgrade your |
| whole cluster at the same time. |
| |
| 1. Bootstrap, move, load balancing, and active repair have been added. |
| See http://wiki.apache.org/cassandra/Operations. When upgrading |
| from 0.4, leave autobootstrap set to false for the first restart |
| of your old nodes. |
| |
| 2. Performance improvements across the board, especially on the write |
| path (over 100% improvement in stress.py throughput). |
| |
| 3. Configuration: |
| - Added "comment" field to ColumnFamily definition. |
| - Added MemtableFlushAfterMinutes, a global replacement for the |
| old per-CF FlushPeriodInMinutes setting |
| - Key cache settings |
| |
| 4. Thrift: |
| - Added get_range_slice, deprecating get_key_range |
| |
| |
| |
| 0.4.2 |
| ===== |
| |
| 1. Improve default garbage collector options significantly -- |
| throughput will be 30% higher or more. |
| |
| |
| |
| 0.4.1 |
| ===== |
| |
| 1. SnapshotBeforeCompaction configuration option allows snapshotting |
| before each compaction, which allows rolling back to any version |
| of the data. |
| |
| |
| |
| 0.4.0 |
| ===== |
| |
| 1. On-disk data format has changed to allow billions of keys/rows per |
| node instead of only millions. The new format is incompatible with 0.3; |
| see 0.3 notes below for how to import data from a 0.3 install. |
| |
| 2. Cassandra now supports multiple keyspaces. Typically you will have |
| one keyspace per application, allowing applications to be able to |
| create and modify ColumnFamilies at will without worrying about |
| collisions with others in the same cluster. |
| |
| 3. Many Thrift API changes and documentation. See |
| http://wiki.apache.org/cassandra/API |
| |
| 4. Removed the web interface in favor of JMX and bin/nodeprobe, which |
| has significantly enhanced functionality. |
| |
| 5. Renamed configuration "<Table>" to "<Keyspace>". |
| |
| 6. Added commitlog fsync; see "<CommitLogSync>" in configuration. |
| |
| |
| |
| 0.3.0 |
| ===== |
| |
| 1. With enough and large enough keys in a ColumnFamily, Cassandra will |
| run out of memory trying to perform compactions (data file merges). |
| The size of what is stored in memory is (S + 16) * (N + M) where S |
| is the size of the key (usually 2 bytes per character), N is the |
| number of keys and M, is the map overhead (which can be guestimated |
| at around 32 bytes per key). |
| So, if you have 10-character keys and 1GB of headroom in your heap |
| space for compaction, you can expect to store about 17M keys |
| before running into problems. |
| See https://issues.apache.org/jira/browse/CASSANDRA-208 |
| |
| 2. Because fixing #1 requires a data file format change, 0.4 will not |
| be binary-compatible with 0.3 data files. A client-side upgrade |
| can be done relatively easily with the following algorithm: |
| for key in old_client.get_key_range(everything): |
| columns = old_client.get_slice or get_slice_super(key, all columns) |
| new_client.batch_insert or batch_insert_super(key, columns) |
| The inner loop can be trivially parallelized for speed. |
| |
| 3. Commitlog does not fsync before reporting a write successful. |
| Using blocking writes mitigates this to some degree, since all |
| nodes that were part of the write quorum would have to fail |
| before sync for data to be lost. |
| See https://issues.apache.org/jira/browse/CASSANDRA-182 |
| |
| Additionally, row size (that is, all the data associated with a single |
| key in a given ColumnFamily) is limited by available memory, because |
| compaction deserializes each row before merging. |
| |
| See https://issues.apache.org/jira/browse/CASSANDRA-16 |
| |