forked from apache/cassandra
-
Notifications
You must be signed in to change notification settings - Fork 4
/
NEWS.txt
2498 lines (2125 loc) · 113 KB
/
NEWS.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
PLEASE READ: MAXIMUM TTL EXPIRATION DATE NOTICE (CASSANDRA-14092)
------------------------------------------------------------------
(General upgrading instructions are available in the next section)
The maximum expiration timestamp that can be represented by the storage engine is
2038-01-19T03:14:06+00:00, which means that inserts with TTL thatl expire after
this date are not currently supported. By default, INSERTS with TTL exceeding the
maximum supported date are rejected, but it's possible to choose a different
expiration overflow policy. See CASSANDRA-14092.txt for more details.
Prior to 3.0.16 (3.0.X) and 3.11.2 (3.11.x) there was no protection against INSERTS
with TTL expiring after the maximum supported date, causing the expiration time
field to overflow and the records to expire immediately. Clusters in the 2.X and
lower series are not subject to this when assertions are enabled. Backed up SSTables
can be potentially recovered and recovery instructions can be found on the
CASSANDRA-14092.txt file.
If you use or plan to use very large TTLS (10 to 20 years), read CASSANDRA-14092.txt
for more information.
PLEASE READ: CVE-2017-5929 LOGBACK BEFORE 1.2.0 SERIALIZATION VULNERABILITY
------------------------------------------------------------------
QOS.ch Logback before 1.2.0 has a serialization vulnerability affecting the
SocketServer and ServerSocketReceiver components.
Logback has not been upgraded to avoid breaking deployments and customizations
based on older versions. If you are using vulnerable components you will need
to upgrade to a newer version of Logback or stop using the vulnerable components.
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.
3.11.9
======
Upgrading
---------
- Custom compaction strategies must handle getting sstables added/removed notifications for
sstables already added/removed - see CASSANDRA-14103 for details. This has been a requirement
for correct operation since 3.11.0 due to an issue in CompactionStrategyManager.
3.11.7
======
Upgrading
---------
- Nothing specific to this release, but please see previous upgrading sections,
especially if you are upgrading from 3.0.
3.11.6
======
Upgrading
---------
- Sstables for tables using with a frozen UDT written by C* 3.0 appear as corrupted.
Background: The serialization-header in the -Statistics.db sstable component contains the type information
of the table columns. C* 3.0 write incorrect type information for frozen UDTs by omitting the
"frozen" information. Non-frozen UDTs were introduced by CASSANDRA-7423 in C* 3.6. Since then, the missing
"frozen" information leads to deserialization issues that result in CorruptSSTableExceptions, potentially other
exceptions as well.
As a mitigation, the sstable serialization-headers are rewritten to contain the missing "frozen" information for
UDTs once, when an upgrade from C* 3.0 is detected. This migration does not touch snapshots or backups.
The sstablescrub tool now performs a check of the sstable serialization-header against the schema. A mismatch of
the types in the serialization-header and the schema will cause sstablescrub to error out and stop by default.
See the new `-e` option. `-e off` disables the new validation code. `-e fix` or `-e fix-only`, e.g.
`sstablescrub -e fix keyspace table`, will validate the serialization-header, rewrite the non-frozen UDTs
in the serialzation-header to frozen UDTs, if that matches the schema, and continue with scrub.
See `sstablescrub -h`.
(CASSANDRA-15035)
- repair_session_max_tree_depth setting has been added to cassandra.yaml to allow operators to reduce
merkle tree size if repair is creating too much heap pressure. See CASSANDRA-14096 for details.
3.11.5
======
Upgrading
---------
- repair_session_max_tree_depth setting has been added to cassandra.yaml to allow operators to reduce
merkle tree size if repair is creating too much heap pressure. See CASSANDRA-14096 for details.
- native_transport_max_negotiable_protocol_version has been added to cassandra.yaml to allow operators to
enforce an upper limit on the version of the native protocol that servers will negotiate with clients.
This can be used during upgrades from 2.1 to 3.0 to prevent errors due to incompatible paging state formats
between the two versions. See CASSANDRA-15193 for details.
Experimental features
---------------------
- An 'enable_sasi_indexes' flag, true by default, has been added to cassandra.yaml to allow operators to prevent
the creation of new SASI indexes, which are considered experimental and are not recommended for production use.
(See https://www.mail-archive.com/[email protected]/msg13582.html)
- The flags 'enable_sasi_indexes' and 'enable_materialized_views' have been grouped under an experimental features
section in cassandra.yaml.
3.11.4
======
Upgrading
---------
- The order of static columns in SELECT * has been fixed to match that of 2.0 and 2.1 - they are now sorted
alphabetically again, by their name, just like regular columns are. If you use prepared statements and
SELECT * queries, and have both simple and collection static columns in those tables, and are upgrading from an
earlier 3.0 version, then you might be affected by this change. Please see CASSANDRA-14638 for details.
3.11.3
=====
Upgrading
---------
- Materialized view users upgrading from 3.0.15 (3.0.X series) or 3.11.1 (3.11.X series) and
later that have performed range movements (join, decommission, move, etc), should run repair
on the base tables, and subsequently on the views to ensure data affected by CASSANDRA-14251
is correctly propagated to all replicas.
- Changes to bloom_filter_fp_chance will no longer take effect on existing sstables when the
node is restarted. Only compactions/upgradesstables regenerates bloom filters and Summaries
sstable components. See CASSANDRA-11163
Deprecation
-----------
- Background read repair has been deprecated. dclocal_read_repair_chance and read_repair_chance
table options have been deprecated, and will be removed entirely in 4.0. See CASSANDRA-13910
for details.
3.11.2
======
Upgrading
---------
- See MAXIMUM TTL EXPIRATION DATE NOTICE above.
- Cassandra is now relying on the JVM options to properly shutdown on OutOfMemoryError. By default it will
rely on the OnOutOfMemoryError option as the ExitOnOutOfMemoryError and CrashOnOutOfMemoryError options
are not supported by the older 1.7 and 1.8 JVMs. A warning will be logged at startup if none of those JVM
options are used. See CASSANDRA-13006 for more details
- Cassandra is not logging anymore by default an Heap histogram on OutOfMemoryError. To enable that behavior
set the 'cassandra.printHeapHistogramOnOutOfMemoryError' System property to 'true'. See CASSANDRA-13006
for more details.
- Upgrades from 3.0 might have produced unnecessary schema migrations while
there was at least one 3.0 node in the cluster. It is therefore highly
recommended to upgrade from 3.0 to at least 3.11.2. The root cause of
this schema mismatch was a difference in the way how schema digests were computed
in 3.0 and 3.11.2. To mitigate this issue, 3.11.2 and newer announce
3.0 compatible digests as long as there is at least one 3.0 node in the
cluster. Once all nodes have been upgraded, the "real" schema version will be
announced. Note: this fix is only necessary in 3.11.2 and therefore only applies
to 3.11. (CASSANDRA-14109)
Materialized Views
-------------------
- Following a discussion regarding concerns about the design and safety of Materialized Views, the C* development
community no longer recommends them for production use, and considers them experimental. Warnings messages will
now be logged when they are created. (See https://www.mail-archive.com/[email protected]/msg11511.html)
- An 'enable_materialized_views' flag has been added to cassandra.yaml to allow operators to prevent creation of
views
3.11.1
======
Upgrading
---------
- Creating Materialized View with filtering on non-primary-key base column
(added in CASSANDRA-10368) is disabled, because the liveness of view row
is depending on multiple filtered base non-key columns and base non-key
column used in view primary-key. This semantic cannot be supported without
storage format change, see CASSANDRA-13826. For append-only use case, you
may still use this feature with a startup flag: "-Dcassandra.mv.allow_filtering_nonkey_columns_unsafe=true"
Compact Storage (only when upgrading from 3.X or any version lower than 3.0.15)
---------------
- Starting version 4.0, Thrift and COMPACT STORAGE is no longer supported.
'ALTER ... DROP COMPACT STORAGE' statement makes Compact Tables CQL-compatible,
exposing internal structure of Thrift/Compact Tables. You can find more details
on exposed internal structure under:
http://cassandra.apache.org/doc/latest/cql/appendices.html#appendix-c-dropping-compact-storage
For uninterrupted cluster upgrades, drivers now support 'NO_COMPACT' startup option.
Supplying this flag will have same effect as 'DROP COMPACT STORAGE', but only for the
current connection.
In order to upgrade, clients supporting a non-compact schema view can be rolled out
gradually. When all the clients are updated 'ALTER ... DROP COMPACT STORAGE' can be
executed. After dropping compact storage, ’NO_COMPACT' option will have no effect
after that.
Materialized Views
-------------------
Materialized Views (only when upgrading from 3.X or any version lower than 3.0.15)
---------------------------------------------------------------------------------------
- Cassandra will no longer allow dropping columns on tables with Materialized Views.
- A change was made in the way the Materialized View timestamp is computed, which
may cause an old deletion to a base column which is view primary key (PK) column
to not be reflected in the view when repairing the base table post-upgrade. This
condition is only possible when a column deletion to an MV primary key (PK) column
not present in the base table PK (via UPDATE base SET view_pk_col = null or DELETE
view_pk_col FROM base) is missed before the upgrade and received by repair after the upgrade.
If such column deletions are done on a view PK column which is not a base PK, it's advisable
to run repair on the base table of all nodes prior to the upgrade. Alternatively it's possible
to fix potential inconsistencies by running repair on the views after upgrade or drop and
re-create the views. See CASSANDRA-11500 for more details.
- Removal of columns not selected in the Materialized View (via UPDATE base SET unselected_column
= null or DELETE unselected_column FROM base) may not be properly reflected in the view in some
situations so we advise against doing deletions on base columns not selected in views
until this is fixed on CASSANDRA-13826.
3.11.0
======
Upgrading
---------
- ALTER TABLE (ADD/DROP COLUMN) operations concurrent with a read might
result into data corruption (see CASSANDRA-13004 for more details).
Fixing this bug required a messaging protocol version bump. By default,
Cassandra 3.11 will use 3014 version for messaging.
Since Schema Migrations rely the on exact messaging protocol version
match between nodes, if you need schema changes during the upgrade
process, you have to start your nodes with `-Dcassandra.force_3_0_protocol_version=true`
first, in order to temporarily force a backwards compatible protocol.
After the whole cluster is upgraded to 3.11, do a rolling
restart of the cluster without setting that flag.
3.11 nodes with and withouot the flag set will be able to do schema
migrations with other 3.x and 3.0.x releases.
While running the cluster with the flag set to true on 3.11 (in
compatibility mode), avoid adding or removing any columns to/from
existing tables.
If your cluster can do without schema migrations during the upgrade
time, just start the cluster normally without setting aforementioned
flag.
If you are upgrading from 3.0.14+ (of 3.0.x branch), you do not have
to set an flag while upgrading to ensure schema migrations.
- The NativeAccessMBean isAvailable method will only return true if the
native library has been successfully linked. Previously it was returning
true if JNA could be found but was not taking into account link failures.
- Primary ranges in the system.size_estimates table are now based on the keyspace
replication settings and adjacent ranges are no longer merged (CASSANDRA-9639).
- In 2.1, the default for otc_coalescing_strategy was 'DISABLED'.
In 2.2 and 3.0, it was changed to 'TIMEHORIZON', but that value was shown
to be a performance regression. The default for 3.11.0 and newer has
been reverted to 'DISABLED'. Users upgrading from Cassandra 2.2 or 3.0 should
be aware that the default has changed.
- The StorageHook interface has been modified to allow to retrieve read information from
SSTableReader (CASSANDRA-13120).
3.10
====
New features
------------
- New `DurationType` (cql duration). See CASSANDRA-11873
- Runtime modification of concurrent_compactors is now available via nodetool
- Support for the assignment operators +=/-= has been added for update queries.
- An Index implementation may now provide a task which runs prior to joining
the ring. See CASSANDRA-12039
- Filtering on partition key columns is now also supported for queries without
secondary indexes.
- A slow query log has been added: slow queries will be logged at DEBUG level.
For more details refer to CASSANDRA-12403 and slow_query_log_timeout_in_ms
in cassandra.yaml.
- Support for GROUP BY queries has been added.
- A new compaction-stress tool has been added to test the throughput of compaction
for any cassandra-stress user schema. see compaction-stress help for how to use.
- Compaction can now take into account overlapping tables that don't take part
in the compaction to look for deleted or overwritten data in the compacted tables.
Then such data is found, it can be safely discarded, which in turn should enable
the removal of tombstones over that data.
The behavior can be engaged in two ways:
- as a "nodetool garbagecollect -g CELL/ROW" operation, which applies
single-table compaction on all sstables to discard deleted data in one step.
- as a "provide_overlapping_tombstones:CELL/ROW/NONE" compaction strategy flag,
which uses overlapping tables as a source of deletions/overwrites during all
compactions.
The argument specifies the granularity at which deleted data is to be found:
- If ROW is specified, only whole deleted rows (or sets of rows) will be
discarded.
- If CELL is specified, any columns whose value is overwritten or deleted
will also be discarded.
- NONE (default) specifies the old behavior, overlapping tables are not used to
decide when to discard data.
Which option to use depends on your workload, both ROW and CELL increase the
disk load on compaction (especially with the size-tiered compaction strategy),
with CELL being more resource-intensive. Both should lead to better read
performance if deleting rows (resp. overwriting or deleting cells) is common.
- Prepared statements are now persisted in the table prepared_statements in
the system keyspace. Upon startup, this table is used to preload all
previously prepared statements - i.e. in many cases clients do not need to
re-prepare statements against restarted nodes.
- cqlsh can now connect to older Cassandra versions by downgrading the native
protocol version. Please note that this is currently not part of our release
testing and, as a consequence, it is not guaranteed to work in all cases.
See CASSANDRA-12150 for more details.
- Snapshots that are automatically taken before a table is dropped or truncated
will have a "dropped" or "truncated" prefix on their snapshot tag name.
- Metrics are exposed for successful and failed authentication attempts.
These can be located using the object names org.apache.cassandra.metrics:type=Client,name=AuthSuccess
and org.apache.cassandra.metrics:type=Client,name=AuthFailure respectively.
- Add support to "unset" JSON fields in prepared statements by specifying DEFAULT UNSET.
See CASSANDRA-11424 for details
- Allow TTL with null value on insert and update. It will be treated as equivalent to inserting a 0.
- Removed outboundBindAny configuration property. See CASSANDRA-12673 for details.
Upgrading
---------
- Support for alter types of already defined tables and of UDTs fields has been disabled.
If it is necessary to return a different type, please use casting instead. See
CASSANDRA-12443 for more details.
- Specifying the default_time_to_live option when creating or altering a
materialized view was erroneously accepted (and ignored). It is now
properly rejected.
- Only Java and JavaScript are now supported UDF languages.
The sandbox in 3.0 already prevented the use of script languages except Java
and JavaScript.
- Compaction now correctly drops sstables out of CompactionTask when there
isn't enough disk space to perform the full compaction. This should reduce
pending compaction tasks on systems with little remaining disk space.
- Request timeouts in cassandra.yaml (read_request_timeout_in_ms, etc) now apply to the
"full" request time on the coordinator. Previously, they only covered the time from
when the coordinator sent a message to a replica until the time that the replica
responded. Additionally, the previous behavior was to reset the timeout when performing
a read repair, making a second read to fix a short read, and when subranges were read
as part of a range scan or secondary index query. In 3.10 and higher, the timeout
is no longer reset for these "subqueries". The entire request must complete within
the specified timeout. As a consequence, your timeouts may need to be adjusted
to account for this. See CASSANDRA-12256 for more details.
- Logs written to stdout are now consistent with logs written to files.
Time is now local (it was UTC on the console and local in files). Date, thread, file
and line info where added to stdout. (see CASSANDRA-12004)
- The 'clientutil' jar, which has been somewhat broken on the 3.x branch, is not longer provided.
The features provided by that jar are provided by any good java driver and we advise relying on drivers rather on
that jar, but if you need that jar for backward compatiblity until you do so, you should use the version provided
on previous Cassandra branch, like the 3.0 branch (by design, the functionality provided by that jar are stable
accross versions so using the 3.0 jar for a client connecting to 3.x should work without issues).
- (Tools development) DatabaseDescriptor no longer implicitly startups components/services like
commit log replay. This may break existing 3rd party tools and clients. In order to startup
a standalone tool or client application, use the DatabaseDescriptor.toolInitialization() or
DatabaseDescriptor.clientInitialization() methods. Tool initialization sets up partitioner,
snitch, encryption context. Client initialization just applies the configuration but does not
setup anything. Instead of using Config.setClientMode() or Config.isClientMode(), which are
deprecated now, use one of the appropiate new methods in DatabaseDescriptor.
- Application layer keep-alives were added to the streaming protocol to prevent idle incoming connections from
timing out and failing the stream session (CASSANDRA-11839). This effectively deprecates the streaming_socket_timeout_in_ms
property in favor of streaming_keep_alive_period_in_secs. See cassandra.yaml for more details about this property.
- Duration litterals support the ISO 8601 format. By consequence, identifiers matching that format
(e.g P2Y or P1MT6H) will not be supported anymore (CASSANDRA-11873).
3.8
===
New features
------------
- Shared pool threads are now named according to the stage they are executing
tasks for. Thread names mentioned in traced queries change accordingly.
- A new option has been added to cassandra-stress "-rate fixed={number}/s"
that forces a scheduled rate of operations/sec over time. Using this, stress can
accurately account for coordinated ommission from the stress process.
- The cassandra-stress "-rate limit=" option has been renamed to "-rate throttle="
- hdr histograms have been added to stress runs, it's output can be saved to disk using:
"-log hdrfile=" option. This histogram includes response/service/wait times when used with the
fixed or throttle rate options. The histogram file can be plotted on
http://hdrhistogram.github.io/HdrHistogram/plotFiles.html
- TimeWindowCompactionStrategy has been added. This has proven to be a better approach
to time series compaction and new tables should use this instead of DTCS. See
CASSANDRA-9666 for details.
- Change-Data-Capture is now available. See cassandra.yaml and for cdc-specific flags and
a brief explanation of on-disk locations for archived data in CommitLog form. This can
be enabled via ALTER TABLE ... WITH cdc=true.
Upon flush, CommitLogSegments containing data for CDC-enabled tables are moved to
the data/cdc_raw directory until removed by the user and writes to CDC-enabled tables
will be rejected with a WriteTimeoutException once cdc_total_space_in_mb is reached
between unflushed CommitLogSegments and cdc_raw.
NOTE: CDC is disabled by default in the .yaml file. Do not enable CDC on a mixed-version
cluster as it will lead to exceptions which can interrupt traffic. Once all nodes
have been upgraded to 3.8 it is safe to enable this feature and restart the cluster.
Upgrading
---------
- The ReversedType behaviour has been corrected for clustering columns of
BYTES type containing empty value. Scrub should be run on the existing
SSTables containing a descending clustering column of BYTES type to correct
their ordering. See CASSANDRA-12127 for more details.
- Ec2MultiRegionSnitch will no longer automatically set broadcast_rpc_address
to the public instance IP if this property is defined on cassandra.yaml.
- The name "json" and "distinct" are not valid anymore a user-defined function
names (they are still valid as column name however). In the unlikely case where
you had defined functions with such names, you will need to recreate
those under a different name, change your code to use the new names and
drop the old versions, and this _before_ upgrade (see CASSANDRA-10783 for more
details).
Deprecation
-----------
- DateTieredCompactionStrategy has been deprecated - new tables should use
TimeWindowCompactionStrategy. Note that migrating an existing DTCS-table to TWCS might
cause increased compaction load for a while after the migration so make sure you run
tests before migrating. Read CASSANDRA-9666 for background on this.
3.7
===
Upgrading
---------
- A maximum size for SSTables values has been introduced, to prevent out of memory
exceptions when reading corrupt SSTables. This maximum size can be set via
max_value_size_in_mb in cassandra.yaml. The default is 256MB, which matches the default
value of native_transport_max_frame_size_in_mb. SSTables will be considered corrupt if
they contain values whose size exceeds this limit. See CASSANDRA-9530 for more details.
3.6
=====
New features
------------
- JMX connections can now use the same auth mechanisms as CQL clients. New options
in cassandra-env.(sh|ps1) enable JMX authentication and authorization to be delegated
to the IAuthenticator and IAuthorizer configured in cassandra.yaml. The default settings
still only expose JMX locally, and use the JVM's own security mechanisms when remote
connections are permitted. For more details on how to enable the new options, see the
comments in cassandra-env.sh. A new class of IResource, JMXResource, is provided for
the purposes of GRANT/REVOKE via CQL. See CASSANDRA-10091 for more details.
Also, directly setting JMX remote port via the com.sun.management.jmxremote.port system
property at startup is deprecated. See CASSANDRA-11725 for more details.
- JSON timestamps are now in UTC and contain the timezone information, see CASSANDRA-11137 for more details.
- Collision checks are performed when joining the token ring, regardless of whether
the node should bootstrap. Additionally, replace_address can legitimately be used
without bootstrapping to help with recovery of nodes with partially failed disks.
See CASSANDRA-10134 for more details.
- Key cache will only hold indexed entries up to the size configured by
column_index_cache_size_in_kb in cassandra.yaml in memory. Larger indexed entries
will never go into memory. See CASSANDRA-11206 for more details.
- For tables having a default_time_to_live specifying a TTL of 0 will remove the TTL
from the inserted or updated values.
- Startup is now aborted if corrupted transaction log files are found. The details
of the affected log files are now logged, allowing the operator to decide how
to resolve the situation.
- Filtering expressions are made more pluggable and can be added programatically via
a QueryHandler implementation. See CASSANDRA-11295 for more details.
3.4
===
New features
------------
- Internal authentication now supports caching of encrypted credentials.
Reference cassandra.yaml:credentials_validity_in_ms
- Remote configuration of auth caches via JMX can be disabled using the
the system property cassandra.disable_auth_caches_remote_configuration
- sstabledump tool is added to be 3.0 version of former sstable2json. The tool only
supports v3.0+ SSTables. See tool's help for more detail.
Upgrading
---------
- Nothing specific to 3.4 but please see previous versions upgrading section,
especially if you are upgrading from 2.2.
Deprecation
-----------
- The mbean interfaces org.apache.cassandra.auth.PermissionsCacheMBean and
org.apache.cassandra.auth.RolesCacheMBean are deprecated in favor of
org.apache.cassandra.auth.AuthCacheMBean. This generalized interface is
common across all caches in the auth subsystem. The specific mbean interfaces
for each individual cache will be removed in a subsequent major version.
3.2
===
New features
------------
- We now make sure that a token does not exist in several data directories. This
means that we run one compaction strategy per data_file_directory and we use
one thread per directory to flush. Use nodetool relocatesstables to make sure your
tokens are in the correct place, or just wait and compaction will handle it. See
CASSANDRA-6696 for more details.
- bound maximum in-flight commit log replay mutation bytes to 64 megabytes
tunable via cassandra.commitlog_max_outstanding_replay_bytes
- Support for type casting has been added to the selection clause.
- Hinted handoff now supports compression. Reference cassandra.yaml:hints_compression.
Note: hints compression is currently disabled by default.
Upgrading
---------
- The compression ratio metrics computation has been modified to be more accurate.
- Running Cassandra as root is prevented by default.
- JVM options are moved from cassandra-env.(sh|ps1) to jvm.options file
Deprecation
-----------
- The Thrift API is deprecated and will be removed in Cassandra 4.0.
3.1
=====
Upgrading
---------
- The return value of SelectStatement::getLimit as been changed from DataLimits
to int.
- Custom index implementation should be aware that the method Indexer::indexes()
has been removed as its contract was misleading and all custom implementation
should have almost surely returned true inconditionally for that method.
- GC logging is now enabled by default (you can disable it in the jvm.options
file if you prefer).
3.0
===
New features
------------
- EACH_QUORUM is now a supported consistency level for read requests.
- Support for IN restrictions on any partition key component or clustering key
as well as support for EQ and IN multicolumn restrictions has been added to
UPDATE and DELETE statement.
- Support for single-column and multi-colum slice restrictions (>, >=, <= and <)
has been added to DELETE statements
- nodetool rebuild_index accepts the index argument without
the redundant table name
- Materialized Views, which allow for server-side denormalization, is now
available. Materialized views provide an alternative to secondary indexes
for non-primary key queries, and perform much better for indexing high
cardinality columns.
See http://www.datastax.com/dev/blog/new-in-cassandra-3-0-materialized-views
- Hinted handoff has been completely rewritten. Hints are now stored in flat
files, with less overhead for storage and more efficient dispatch.
See CASSANDRA-6230 for full details.
- Option to not purge unrepaired tombstones. To avoid users having data resurrected
if repair has not been run within gc_grace_seconds, an option has been added to
only allow tombstones from repaired sstables to be purged. To enable, set the
compaction option 'only_purge_repaired_tombstones':true but keep in mind that if
you do not run repair for a long time, you will keep all tombstones around which
can cause other problems.
- Enabled warning on GC taking longer than 1000ms. See
cassandra.yaml:gc_warn_threshold_in_ms
Upgrading
---------
- Clients must use the native protocol version 3 when upgrading from 2.2.X as
the native protocol version 4 is not compatible between 2.2.X and 3.Y. See
https://www.mail-archive.com/[email protected]/msg45381.html for details.
- A new argument of type InetAdress has been added to IAuthenticator::newSaslNegotiator,
representing the IP address of the client attempting authentication. It will be a breaking
change for any custom implementations.
- token-generator tool has been removed.
- Upgrade to 3.0 is supported from Cassandra 2.1 versions greater or equal to 2.1.9,
or Cassandra 2.2 versions greater or equal to 2.2.2. Upgrade from Cassandra 2.0 and
older versions is not supported.
- The 'memtable_allocation_type: offheap_objects' option has been removed. It should
be re-introduced in a future release and you can follow CASSANDRA-9472 to know more.
- Configuration parameter memory_allocator in cassandra.yaml has been removed.
- The native protocol versions 1 and 2 are not supported anymore.
- Max mutation size is now configurable via max_mutation_size_in_kb setting in
cassandra.yaml; the default is half the size commitlog_segment_size_in_mb * 1024.
- 3.0 requires Java 8u40 or later.
- Garbage collection options were moved from cassandra-env to jvm.options file.
- New transaction log files have been introduced to replace the compactions_in_progress
system table, temporary file markers (tmp and tmplink) and sstable ancerstors.
Therefore, compaction metadata no longer contains ancestors. Transaction log files
list sstable descriptors involved in compactions and other operations such as flushing
and streaming. Use the sstableutil tool to list any sstable files currently involved
in operations not yet completed, which previously would have been marked as temporary.
A transaction log file contains one sstable per line, with the prefix "add:" or "remove:".
They also contain a special line "commit", only inserted at the end when the transaction
is committed. On startup we use these files to cleanup any partial transactions that were
in progress when the process exited. If the commit line is found, we keep new sstables
(those with the "add" prefix) and delete the old sstables (those with the "remove" prefix),
vice-versa if the commit line is missing. Should you lose or delete these log files,
both old and new sstable files will be kept as live files, which will result in duplicated
sstables. These files are protected by incremental checksums so you should not manually
edit them. When restoring a full backup or moving sstable files, you should clean-up
any left over transactions and their temporary files first. You can use this command:
===> sstableutil -c ks table
See CASSANDRA-7066 for full details.
- New write stages have been added for batchlog and materialized view mutations
you can set their size in cassandra.yaml
- User defined functions are now executed in a sandbox.
To use UDFs and UDAs, you have to enable them in cassandra.yaml.
- New SSTable version 'la' with improved bloom-filter false-positive handling
compared to previous version 'ka' used in 2.2 and 2.1. Running sstableupgrade
is not necessary but recommended.
- Before upgrading to 3.0, make sure that your cluster is in complete agreement
(schema versions outputted by `nodetool describecluster` are all the same).
- Schema metadata is now stored in the new `system_schema` keyspace, and
legacy `system.schema_*` tables are now gone; see CASSANDRA-6717 for details.
- Pig's support has been removed.
- Hadoop BulkOutputFormat and BulkRecordWriter have been removed; use
CqlBulkOutputFormat and CqlBulkRecordWriter instead.
- Hadoop ColumnFamilyInputFormat and ColumnFamilyOutputFormat have been removed;
use CqlInputFormat and CqlOutputFormat instead.
- Hadoop ColumnFamilyRecordReader and ColumnFamilyRecordWriter have been removed;
use CqlRecordReader and CqlRecordWriter instead.
- hinted_handoff_enabled in cassandra.yaml no longer supports a list of data centers.
To specify a list of excluded data centers when hinted_handoff_enabled is set to true,
use hinted_handoff_disabled_datacenters, see CASSANDRA-9035 for details.
- The `sstable_compression` and `chunk_length_kb` compression options have been deprecated.
The new options are `class` and `chunk_length_in_kb`. Disabling compression should now
be done by setting the new option `enabled` to `false`.
- The compression option `crc_check_chance` became a top-level table option, but is currently
enforced only against tables with enabled compression.
- Only map syntax is now allowed for caching options. ALL/NONE/KEYS_ONLY/ROWS_ONLY syntax
has been deprecated since 2.1.0 and is being removed in 3.0.0.
- The 'index_interval' option for 'CREATE TABLE' statements, which has been deprecated
since 2.1 and replaced with the 'min_index_interval' and 'max_index_interval' options,
has now been removed.
- The 'replicate_on_write' and 'populate_io_cache_on_flush' options for 'CREATE TABLE' statements,
which have been deprecated since 2.1, have also been removed.
- Batchlog entries are now stored in a new table - system.batches.
The old one has been deprecated.
- JMX methods set/getCompactionStrategyClass have been removed, use
set/getCompactionParameters or set/getCompactionParametersJson instead.
- SizeTieredCompactionStrategy parameter cold_reads_to_omit has been removed.
- The secondary index API has been comprehensively reworked. This will be a breaking
change for any custom index implementations, which should now look to implement
the new org.apache.cassandra.index.Index interface. New syntax has been added to create
and query row-based indexes, which are not explicitly linked to a single column in the
base table.
2.2.4
=====
Deprecation
-----------
- Pig support has been deprecated, and will be removed in 3.0.
Please see CASSANDRA-10542 for more details.
- Configuration parameter memory_allocator in cassandra.yaml has been deprecated
and will be removed in 3.0.0. As mentioned below for 2.2.0, jemalloc is
automatically preloaded on Unix platforms.
Operations
----------
- Switching data center or racks is no longer an allowed operation on a node
which has data. Instead, the node will need to be decommissioned and
rebootstrapped. If moving from the SimpleSnitch, make sure that the data
center and rack containing all current nodes is named "datacenter1" and
"rack1". To override this behaviour use -Dcassandra.ignore_rack=true and/or
-Dcassandra.ignore_dc=true.
- Reloading the configuration file of GossipingPropertyFileSnitch has been disabled.
Upgrading
---------
- The default for the inter-DC stream throughput setting
(inter_dc_stream_throughput_outbound_megabits_per_sec in cassandra.yaml) is
the same than the one for intra-DC one (200Mbps) instead of being unlimited.
Having it unlimited was never intended and was a bug.
New features
------------
- Time windows in DTCS are now limited to 1 day by default to be able to
handle bootstrap and repair in a better way. To get the old behaviour,
increase max_window_size_seconds.
- DTCS option max_sstable_age_days is now deprecated and defaults to 1000 days.
- Native protocol server now allows both SSL and non-SSL connections on
the same port.
2.2.3
=====
Upgrading
---------
- Nothing specific to this release, but please see 2.2 if you are upgrading
from a previous version.
2.2.2
=====
Changed Defaults
----------------
- commitlog_total_space_in_mb will use the smaller of 8192, and 1/4
of the total space of the commitlog volume. (Before: always used
8192)
- The following INFO logs were reduced to DEBUG level and will now show
on debug.log instead of system.log:
- Memtable flushing actions
- Commit log replayed files
- Compacted sstables
- SStable opening (SSTableReader)
New features
------------
- Custom QueryHandlers can retrieve the column specifications for the bound
variables from QueryOptions by using the hasColumnSpecifications()
and getColumnSpecifications() methods.
- A new default assynchronous log appender debug.log was created in addition
to the system.log appender in order to provide more detailed log debugging.
In order to disable debug logging, you must comment-out the ASYNCDEBUGLOG
appender on conf/logback.xml. See CASSANDRA-10241 for more information.
2.2.1
=====
New features
------------
- COUNT(*) and COUNT(1) can be selected with other columns or functions
2.2
===
Upgrading
---------
- The authentication & authorization subsystems have been redesigned to
support role based access control (RBAC), resulting in a change to the
schema of the system_auth keyspace. See below for more detail.
For systems already using the internal auth implementations, the process
for converting existing data during a rolling upgrade is straightforward.
As each node is restarted, it will attempt to convert any data in the
legacy tables into the new schema. Until enough nodes to satisfy the
replication strategy for the system_auth keyspace are upgraded and so have
the new schema, this conversion will fail with the failure being reported
in the system log.
During the upgrade, Cassandra's internal auth classes will continue to use
the legacy tables, so clients experience no disruption. Issuing DCL
statements during an upgrade is not supported.
Once all nodes are upgraded, an operator with superuser privileges should
drop the legacy tables, system_auth.users, system_auth.credentials and
system_auth.permissions. Doing so will prompt Cassandra to switch over to
the new tables without requiring any further intervention.
While the legacy tables are present a restarted node will re-run the data
conversion and report the outcome so that operators can verify that it is
safe to drop them.
New features
------------
- The LIMIT clause applies now only to the number of rows returned to the user,
not to the number of row queried. By consequence, queries using aggregates will not
be impacted by the LIMIT clause anymore.
- Very large batches will now be rejected (defaults to 50kb). This
can be customized by modifying batch_size_fail_threshold_in_kb.
- Selecting columns,scalar functions, UDT fields, writetime or ttl together
with aggregated is now possible. The value returned for the columns,
scalar functions, UDT fields, writetime and ttl will be the ones for
the first row matching the query.
- Windows is now a supported platform. Powershell execution for startup scripts
is highly recommended and can be enabled via an administrator command-prompt
with: 'powershell set-executionpolicy unrestricted'
- It is now possible to do major compactions when using leveled compaction.
Doing that will take all sstables and compact them out in levels. The
levels will be non overlapping so doing this will still not be something
you want to do very often since it might cause more compactions for a while.
It is also possible to split output when doing a major compaction with
STCS - files will be split in sizes 50%, 25%, 12.5% etc of the total size.
This might be a bit better than old major compactions which created one big
file on disk.
- A new tool has been added bin/sstableverify that checks for errors/bitrot
in all sstables. Unlike scrub, this is a non-invasive tool.
- Authentication & Authorization APIs have been updated to introduce
roles. Roles and Permissions granted to them are inherited, supporting
role based access control. The role concept supercedes that of users
and CQL constructs such as CREATE USER are deprecated but retained for
compatibility. The requirement to explicitly create Roles in Cassandra
even when auth is handled by an external system has been removed, so
authentication & authorization can be delegated to such systems in their
entirety.
- In addition to the above, Roles are also first class resources and can be the
subject of permissions. Users (roles) can now be granted permissions on other
roles, including CREATE, ALTER, DROP & AUTHORIZE, which removesthe need for
superuser privileges in order to perform user/role management operations.
- Creators of database resources (Keyspaces, Tables, Roles) are now automatically
granted all permissions on them (if the IAuthorizer implementation supports
this).
- SSTable file name is changed. Now you don't have Keyspace/CF name
in file name. Also, secondary index has its own directory under parent's
directory.
- Support for user-defined functions and user-defined aggregates have
been added to CQL.
************************************************************************
IMPORTANT NOTE: user-defined functions can be used to execute
arbitrary and possibly evil code in Cassandra 2.2, and are
therefore disabled by default. To enable UDFs edit
cassandra.yaml and set enable_user_defined_functions to true.
CASSANDRA-9402 will add a security manager for UDFs in Cassandra
3.0. This will inherently be backwards-incompatible with any 2.2
UDF that perform insecure operations such as opening a socket or
writing to the filesystem.
************************************************************************
- Row-cache is now fully off-heap.
- jemalloc is now automatically preloaded and used on Linux and OS-X if
installed.
- Please ensure on Unix platforms that there is no libjnadispath.so
installed which is accessible by Cassandra. Old versions of
libjna packages (< 4.0.0) will cause problems - e.g. Debian Wheezy
contains libjna versin 3.2.x.
- The node now keeps up when streaming is failed during bootstrapping. You can
use new `nodetool bootstrap resume` command to continue streaming after resolving
an issue.
- Protocol version 4 specifies that bind variables do not require having a
value when executing a statement. Bind variables without a value are
called 'unset'. The 'unset' bind variable is serialized as the int
value '-2' without following bytes.
In an EXECUTE or BATCH request an unset bind value does not modify the value and
does not create a tombstone, an unset bind ttl is treated as 'unlimited',
an unset bind timestamp is treated as 'now', an unset bind counter operation
does not change the counter value.
Unset tuple field, UDT field and map key are not allowed.
In a QUERY request an unset limit is treated as 'unlimited'.
Unset WHERE clauses with unset partition column, clustering column
or index column are not allowed.
- New `ByteType` (cql tinyint). 1-byte signed integer
- New `ShortType` (cql smallint). 2-byte signed integer
- New `SimpleDateType` (cql date). 4-byte unsigned integer
- New `TimeType` (cql time). 8-byte long
- The toDate(timeuuid), toTimestamp(timeuuid) and toUnixTimestamp(timeuuid) functions have been added to allow
to convert from timeuuid into date type, timestamp type and bigint raw value.
The functions unixTimestampOf(timeuuid) and dateOf(timeuuid) have been deprecated.
- The toDate(timestamp) and toUnixTimestamp(timestamp) functions have been added to allow
to convert from timestamp into date type and bigint raw value.
- The toTimestamp(date) and toUnixTimestamp(date) functions have been added to allow
to convert from date into timestamp type and bigint raw value.
- SizeTieredCompactionStrategy parameter cold_reads_to_omit has been removed.
- The default JVM flag -XX:+PerfDisableSharedMem will cause the following tools JVM
to stop working: jps, jstack, jinfo, jmc, jcmd as well as 3rd party tools like Jolokia.
If you wish to use these tools you can comment this flag out in cassandra-env.{sh,ps1}
Upgrading
---------
- Thrift rpc is no longer being started by default.
Set `start_rpc` parameter to `true` to enable it.
- Pig's CqlStorage has been removed, use CqlNativeStorage instead
- Pig's CassandraStorage has been deprecated. CassandraStorage
should only be used against tables created via thrift.
Use CqlNativeStorage for all other tables.
- IAuthenticator been updated to remove responsibility for user/role
maintenance and is now solely responsible for validating credentials,
This is primarily done via SASL, though an optional method exists for
systems which need support for the Thrift login() method.
- IRoleManager interface has been added which takes over the maintenance
functions from IAuthenticator. IAuthorizer is mainly unchanged. Auth data
in systems using the stock internal implementations PasswordAuthenticator
& CassandraAuthorizer will be automatically converted during upgrade,
with minimal operator intervention required. Custom implementations will
require modification, though these can be used in conjunction with the
stock CassandraRoleManager so providing an IRoleManager implementation
should not usually be necessary.
- Fat client support has been removed since we have push notifications to clients
- cassandra-cli has been removed. Please use cqlsh instead.
- YamlFileNetworkTopologySnitch has been removed; switch to
GossipingPropertyFileSnitch instead.
- CQL2 has been removed entirely in this release (previously deprecated
in 2.0.0). Please switch to CQL3 if you haven't already done so.
- The results of CQL3 queries containing an IN restriction will be ordered
in the normal order and not anymore in the order in which the column values were
specified in the IN restriction.
- Some secondary index queries with restrictions on non-indexed clustering
columns were not requiring ALLOW FILTERING as they should. This has been
fixed, and those queries now require ALLOW FILTERING (see CASSANDRA-8418
for details).
- The SSTableSimpleWriter and SSTableSimpleUnsortedWriter classes have been
deprecated and will be removed in the next major Cassandra release. You
should use the CQLSSTableWriter class instead.
- The sstable2json and json2sstable tools have been deprecated and will be
removed in the next major Cassandra release. See CASSANDRA-9618
(https://issues.apache.org/jira/browse/CASSANDRA-9618) for details.
- nodetool enablehandoff will no longer support a list of data centers starting
with the next major release. Two new commands will be added, enablehintsfordc and disablehintsfordc,
to exclude data centers from using hinted handoff when the global status is enabled.
In cassandra.yaml, hinted_handoff_enabled will no longer support a list of data centers starting
with the next major release. A new setting will be added, hinted_handoff_disabled_datacenters,
to exclude data centers when the global status is enabled, see CASSANDRA-9035 for details.
2.1.13
======
New features
------------
- New options for cqlsh COPY FROM and COPY TO, see CASSANDRA-9303 for details.
2.1.10
=====
New features
------------
- The syntax TRUNCATE TABLE X is now accepted as an alias for TRUNCATE X
2.1.9
=====
Upgrading
---------
- cqlsh will now display timestamps with a UTC timezone. Previously,
timestamps were displayed with the local timezone.
- Commit log files are no longer recycled by default, due to negative
performance implications. This can be enabled again with the
commitlog_segment_recycling option in your cassandra.yaml
- JMX methods set/getCompactionStrategyClass have been deprecated, use
set/getCompactionParameters/set/getCompactionParametersJson instead
2.1.8
=====
Upgrading
---------
- Nothing specific to this release, but please see 2.1 if you are upgrading
from a previous version.
2.1.7
=====
2.1.6
=====
Upgrading
---------
- Nothing specific to this release, but please see 2.1 if you are upgrading
from a previous version.
2.1.5
=====
Upgrading
---------
- The option to omit cold sstables with size tiered compaction has been
removed - it is almost always better to use date tiered compaction for
workloads that have cold data.
2.1.4
=====
Upgrading
---------
The default JMX config now listens to localhost only. You must enable
the other JMX flags in cassandra-env.sh manually.
2.1.3
=====
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.
- Incremental replacement of compacted SSTables has been disabled for this
release.
2.1.2
=====
Upgrading
---------
- Nothing specific to this release, but please see 2.1 if you are upgrading
from a previous version.
2.1.1
=====
Upgrading
---------
- Nothing specific to this release, but please see 2.1 if you are upgrading
from a previous version.
New features
------------
- Netty support for epoll on linux is now enabled. If for some
reason you want to disable it pass, the following system property
-Dcassandra.native.epoll.enabled=false
2.1
===
New features
------------
- Default data and log locations have changed. If not set in
cassandra.yaml, the data file directory, commitlog directory,
and saved caches directory will default to $CASSANDRA_HOME/data/data,
$CASSANDRA_HOME/data/commitlog, and $CASSANDRA_HOME/data/saved_caches,
respectively. The log directory now defaults to $CASSANDRA_HOME/logs.
If not set, $CASSANDRA_HOME, defaults to the top-level directory of
the installation.