From 11424330ff569c56c073498bfd9b8ca2a5a5a699 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 8 Jul 2020 17:51:01 -0700 Subject: [PATCH 001/115] changes to python scripts, addition of modules --- build.xml | 4 +- .../cass_yaml_file.rst => cass_yaml.adoc | 1041 ++++---- doc/Makefile | 26 +- doc/README.md | 17 +- ...yaml_to_rst.py => convert_yaml_to_adoc.py} | 23 +- doc/gen-nodetool-docs.py | 29 +- doc/site.yml | 59 + doc/source/_static/extra.css | 76 - doc/source/_templates/indexcontent.html | 79 - .../_theme/cassandra_theme/defindex.html | 25 - doc/source/_theme/cassandra_theme/layout.html | 93 - doc/source/_theme/cassandra_theme/search.html | 53 - doc/source/_theme/cassandra_theme/theme.conf | 3 - doc/source/_util/cql.py | 267 --- doc/source/antora.yml | 6 + doc/source/architecture/dynamo.rst | 537 ----- doc/source/architecture/guarantees.rst | 76 - doc/source/architecture/index.rst | 29 - doc/source/architecture/overview.rst | 114 - doc/source/architecture/storage_engine.rst | 208 -- doc/source/bugs.rst | 30 - doc/source/conf.py | 441 ---- .../configuration/cass_cl_archive_file.rst | 46 - doc/source/configuration/cass_env_sh_file.rst | 132 -- .../configuration/cass_jvm_options_file.rst | 10 - .../configuration/cass_logback_xml_file.rst | 157 -- doc/source/configuration/cass_rackdc_file.rst | 67 - doc/source/configuration/cass_topo_file.rst | 48 - doc/source/configuration/index.rst | 31 - doc/source/contactus.rst | 50 - doc/source/cql/appendices.rst | 330 --- doc/source/cql/changes.rst | 211 -- doc/source/cql/ddl.rst | 852 ------- doc/source/cql/definitions.rst | 234 -- doc/source/cql/dml.rst | 522 ----- doc/source/cql/functions.rst | 581 ----- doc/source/cql/indexes.rst | 83 - doc/source/cql/json.rst | 115 - doc/source/cql/mvs.rst | 179 -- doc/source/cql/operators.rst | 74 - doc/source/cql/security.rst | 538 ----- doc/source/cql/triggers.rst | 63 - doc/source/cql/types.rst | 559 ----- .../data_modeling/data_modeling_logical.rst | 219 -- .../data_modeling/data_modeling_physical.rst | 117 - .../data_modeling/data_modeling_queries.rst | 85 - .../data_modeling/data_modeling_refining.rst | 218 -- .../data_modeling/data_modeling_schema.rst | 144 -- .../data_modeling/data_modeling_tools.rst | 64 - doc/source/data_modeling/index.rst | 36 - doc/source/data_modeling/intro.rst | 146 -- doc/source/development/ci.rst | 79 - doc/source/development/code_style.rst | 94 - doc/source/development/dependencies.rst | 53 - doc/source/development/documentation.rst | 104 - doc/source/development/gettingstarted.rst | 60 - doc/source/development/how_to_commit.rst | 75 - doc/source/development/how_to_review.rst | 73 - doc/source/development/ide.rst | 185 -- doc/source/development/index.rst | 33 - doc/source/development/patches.rst | 141 -- doc/source/development/release_process.rst | 251 -- doc/source/development/testing.rst | 98 - doc/source/faq/index.rst | 299 --- doc/source/getting_started/configuring.rst | 80 - doc/source/getting_started/drivers.rst | 123 - doc/source/getting_started/index.rst | 34 - doc/source/getting_started/installing.rst | 324 --- doc/source/getting_started/production.rst | 156 -- doc/source/getting_started/querying.rst | 52 - doc/source/glossary.rst | 35 - doc/source/index.rst | 43 - doc/source/modules/ROOT/nav.adoc | 4 + doc/source/modules/ROOT/pages/bugs.adoc | 17 + doc/source/modules/ROOT/pages/contactus.adoc | 30 + doc/source/modules/ROOT/pages/glossary.adoc | 38 + doc/source/modules/ROOT/pages/index.adoc | 46 + .../assets/images}/Figure_1_backups.jpg | Bin .../assets}/images/Figure_1_data_model.jpg | Bin .../assets/images}/Figure_1_guarantees.jpg | Bin .../assets/images}/Figure_1_read_repair.jpg | Bin .../assets}/images/Figure_2_data_model.jpg | Bin .../assets/images}/Figure_2_read_repair.jpg | Bin .../assets/images}/Figure_3_read_repair.jpg | Bin .../assets/images}/Figure_4_read_repair.jpg | Bin .../assets/images}/Figure_5_read_repair.jpg | Bin .../assets/images}/Figure_6_read_repair.jpg | Bin .../images/data_modeling_chebotko_logical.png | Bin .../data_modeling_chebotko_physical.png | Bin .../images/data_modeling_hotel_bucketing.png | Bin .../images/data_modeling_hotel_erd.png | Bin .../images/data_modeling_hotel_logical.png | Bin .../images/data_modeling_hotel_physical.png | Bin .../images/data_modeling_hotel_queries.png | Bin .../images/data_modeling_hotel_relational.png | Bin .../data_modeling_reservation_logical.png | Bin .../data_modeling_reservation_physical.png | Bin .../cassandra/assets}/images/docs_commit.png | Bin .../assets}/images/docs_create_branch.png | Bin .../assets}/images/docs_create_file.png | Bin .../cassandra/assets}/images/docs_editor.png | Bin .../cassandra/assets}/images/docs_fork.png | Bin .../cassandra/assets}/images/docs_pr.png | Bin .../cassandra/assets}/images/docs_preview.png | Bin .../assets}/images/eclipse_debug0.png | Bin .../assets}/images/eclipse_debug1.png | Bin .../assets}/images/eclipse_debug2.png | Bin .../assets}/images/eclipse_debug3.png | Bin .../assets}/images/eclipse_debug4.png | Bin .../assets}/images/eclipse_debug5.png | Bin .../assets}/images/eclipse_debug6.png | Bin .../assets/images}/example-stress-graph.png | Bin .../cassandra/assets}/images/hints.svg | 0 .../cassandra/assets}/images/ring.svg | 0 .../cassandra/assets}/images/vnodes.svg | 0 .../cassandra/examples/BASH/add_repo_keys.sh | 1 + .../cassandra/examples/BASH/apt-get_cass.sh | 1 + .../cassandra/examples/BASH/apt-get_update.sh | 1 + .../examples/BASH/cqlsh_localhost.sh | 1 + .../cassandra/examples/BASH/curl_install.sh | 1 + .../examples/BASH/curl_verify_sha.sh | 1 + .../cassandra/examples/BASH/find_sstables.sh | 1 + .../examples/BASH/get_deb_package.sh | 2 + .../cassandra/examples/BASH/java_verify.sh | 1 + .../examples/BASH/nodetool_status.sh | 1 + .../examples/BASH/nodetool_status_nobin.sh | 1 + .../cassandra/examples/BASH/run_cqlsh.sh | 1 + .../examples/BASH/run_cqlsh_nobin.sh | 1 + .../cassandra/examples/BASH/start_tarball.sh | 1 + .../cassandra/examples/BASH/tail_syslog.sh | 1 + .../examples/BASH/tail_syslog_package.sh | 1 + .../cassandra/examples/BASH/tarball.sh | 1 + .../cassandra/examples/BASH/verify_gpg.sh | 1 + .../cassandra/examples/BASH/yum_cass.sh | 1 + .../cassandra/examples/BASH/yum_start.sh | 1 + .../cassandra/examples/BASH/yum_update.sh | 1 + .../cassandra/examples/BNF/alter_ks.bnf | 2 + .../examples/BNF/alter_mv_statement.bnf | 1 + .../examples/BNF/alter_udt_statement.bnf | 3 + .../examples/BNF/collection_literal.bnf | 4 + .../examples/BNF/collection_type.bnf | 3 + .../modules/cassandra/examples/BNF/column.bnf | 1 + .../cassandra/examples/BNF/constant.bnf | 8 + .../cassandra/examples/BNF/cql_statement.bnf | 48 + .../cassandra/examples/BNF/cql_type.bnf | 1 + .../examples/BNF/create_index_statement.bnf | 5 + .../cassandra/examples/BNF/create_ks.bnf | 2 + .../examples/BNF/create_mv_statement.bnf | 4 + .../cassandra/examples/BNF/create_table.bnf | 12 + .../examples/BNF/create_trigger_statement.bnf | 3 + .../cassandra/examples/BNF/create_type.bnf | 3 + .../cassandra/examples/BNF/custom_type.bnf | 1 + .../examples/BNF/drop_index_statement.bnf | 1 + .../cassandra/examples/BNF/drop_ks.bnf | 1 + .../examples/BNF/drop_mv_statement.bnf | 1 + .../examples/BNF/drop_trigger_statement.bnf | 1 + .../examples/BNF/drop_udt_statement.bnf | 1 + .../cassandra/examples/BNF/identifier.bnf | 3 + .../cassandra/examples/BNF/index_name.bnf | 1 + .../cassandra/examples/BNF/ks_table.bnf | 5 + .../cassandra/examples/BNF/native_type.bnf | 4 + .../cassandra/examples/BNF/options.bnf | 4 + .../modules/cassandra/examples/BNF/term.bnf | 6 + .../cassandra/examples/BNF/trigger_name.bnf | 1 + .../modules/cassandra/examples/BNF/tuple.bnf | 2 + .../modules/cassandra/examples/BNF/udt.bnf | 2 + .../cassandra/examples/BNF/udt_literal.bnf | 1 + .../modules/cassandra/examples/BNF/use_ks.bnf | 1 + .../cassandra/examples/BNF/view_name.bnf | 1 + .../cassandra/examples/CQL/alter_ks.cql | 2 + .../examples/CQL/autoexpand_exclude_dc.cql | 4 + .../cassandra/examples/CQL/autoexpand_ks.cql | 4 + .../examples/CQL/autoexpand_ks_override.cql | 4 + .../cassandra/examples/CQL/create_index.cql | 8 + .../cassandra/examples/CQL/create_ks.cql | 6 + .../examples/CQL/create_ks_trans_repl.cql | 2 + .../examples/CQL/create_mv_statement.cql | 5 + .../examples/CQL/create_static_column.cql | 7 + .../cassandra/examples/CQL/create_table.cql | 23 + .../CQL/create_table_clustercolumn.cql | 7 + .../examples/CQL/create_table_compound_pk.cql | 7 + .../examples/CQL/create_table_single_pk.cql | 1 + .../cassandra/examples/CQL/create_trigger.cql | 1 + .../examples/CQL/datetime_arithmetic.cql | 1 + .../examples/CQL/delete_all_elements_list.cql | 1 + .../examples/CQL/delete_element_list.cql | 1 + .../cassandra/examples/CQL/delete_map.cql | 2 + .../cassandra/examples/CQL/delete_set.cql | 1 + .../cassandra/examples/CQL/drop_ks.cql | 1 + .../cassandra/examples/CQL/drop_trigger.cql | 1 + .../examples/CQL/insert_duration.cql | 6 + .../cassandra/examples/CQL/insert_json.cql | 1 + .../examples/CQL/insert_static_data.cql | 2 + .../examples/CQL/insert_table_cc_addl.cql | 1 + .../CQL/insert_table_clustercolumn.cql | 5 + .../CQL/insert_table_clustercolumn2.cql | 5 + .../examples/CQL/insert_table_compound_pk.cql | 5 + .../cassandra/examples/CQL/insert_udt.cql | 17 + .../modules/cassandra/examples/CQL/list.cql | 12 + .../modules/cassandra/examples/CQL/map.cql | 11 + .../cassandra/examples/CQL/mv_table_def.cql | 8 + .../cassandra/examples/CQL/mv_table_error.cql | 13 + .../examples/CQL/mv_table_from_base.cql | 9 + .../examples/CQL/rename_udt_field.cql | 1 + .../cassandra/examples/CQL/select_range.cql | 1 + .../examples/CQL/select_static_data.cql | 1 + .../CQL/select_table_clustercolumn.cql | 1 + .../examples/CQL/select_table_compound_pk.cql | 1 + .../modules/cassandra/examples/CQL/set.cql | 11 + .../modules/cassandra/examples/CQL/tuple.cql | 6 + .../modules/cassandra/examples/CQL/udt.cql | 16 + .../cassandra/examples/CQL/update_list.cql | 2 + .../cassandra/examples/CQL/update_map.cql | 2 + .../CQL/update_particular_list_element.cql | 1 + .../cassandra/examples/CQL/update_set.cql | 1 + .../cassandra/examples/CQL/update_ttl_map.cql | 1 + .../modules/cassandra/examples/CQL/use_ks.cql | 1 + .../examples/RESULTS/add_repo_keys.result | 4 + .../examples/RESULTS/add_yum_repo.result | 6 + .../RESULTS/autoexpand_exclude_dc.result | 1 + .../examples/RESULTS/autoexpand_ks.result | 1 + .../RESULTS/autoexpand_ks_override.result | 1 + .../examples/RESULTS/cqlsh_localhost.result | 11 + .../RESULTS/insert_table_cc_addl.result | 9 + .../examples/RESULTS/java_verify.result | 3 + .../examples/RESULTS/select_range.result | 6 + .../RESULTS/select_static_data.result | 4 + .../RESULTS/select_table_clustercolumn.result | 9 + .../RESULTS/select_table_compound_pk.result | 9 + .../examples/RESULTS/tail_syslog.result | 1 + .../examples/RESULTS/verify_gpg.result | 2 + .../examples/TEXT/tarball_install_dirs.txt | 11 + .../cassandra/examples/assassinate.txt | 38 + .../modules/cassandra/examples/bootstrap.txt | 37 + .../modules/cassandra/examples/cleanup.txt | 43 + .../cassandra/examples/clearsnapshot.txt | 46 + .../cassandra/examples/clientstats.txt | 39 + .../modules/cassandra/examples/compact.txt | 55 + .../cassandra/examples/compactionhistory.txt | 33 + .../cassandra/examples/compactionstats.txt | 33 + .../cassandra/examples/decommission.txt | 33 + .../cassandra/examples/describecluster.txt | 30 + .../cassandra/examples/describering.txt | 37 + .../cassandra/examples/disableauditlog.txt | 29 + .../examples/disableautocompaction.txt | 39 + .../cassandra/examples/disablebackup.txt | 29 + .../cassandra/examples/disablebinary.txt | 29 + .../examples/disablefullquerylog.txt | 29 + .../cassandra/examples/disablegossip.txt | 30 + .../cassandra/examples/disablehandoff.txt | 29 + .../cassandra/examples/disablehintsfordc.txt | 38 + .../examples/disableoldprotocolversions.txt | 29 + .../modules/cassandra/examples/drain.txt | 30 + .../cassandra/examples/enableauditlog.txt | 63 + .../examples/enableautocompaction.txt | 39 + .../cassandra/examples/enablebackup.txt | 29 + .../cassandra/examples/enablebinary.txt | 29 + .../cassandra/examples/enablefullquerylog.txt | 61 + .../cassandra/examples/enablegossip.txt | 29 + .../cassandra/examples/enablehandoff.txt | 30 + .../cassandra/examples/enablehintsfordc.txt | 39 + .../examples/enableoldprotocolversions.txt | 29 + .../cassandra/examples/failuredetector.txt | 30 + .../modules/cassandra/examples/flush.txt | 38 + .../cassandra/examples/garbagecollect.txt | 48 + .../modules/cassandra/examples/gcstats.txt | 29 + .../examples/getbatchlogreplaythrottle.txt | 31 + .../examples/getcompactionthreshold.txt | 39 + .../examples/getcompactionthroughput.txt | 30 + .../cassandra/examples/getconcurrency.txt | 38 + .../examples/getconcurrentcompactors.txt | 30 + .../examples/getconcurrentviewbuilders.txt | 30 + .../cassandra/examples/getendpoints.txt | 39 + .../examples/getinterdcstreamthroughput.txt | 30 + .../cassandra/examples/getlogginglevels.txt | 29 + .../cassandra/examples/getmaxhintwindow.txt | 29 + .../modules/cassandra/examples/getseeds.txt | 30 + .../cassandra/examples/getsstables.txt | 41 + .../examples/getstreamthroughput.txt | 30 + .../modules/cassandra/examples/gettimeout.txt | 39 + .../examples/gettraceprobability.txt | 29 + .../modules/cassandra/examples/gossipinfo.txt | 29 + .../modules/cassandra/examples/help.txt | 16 + .../modules/cassandra/examples/import.txt | 64 + .../modules/cassandra/examples/info.txt | 32 + .../examples/invalidatecountercache.txt | 29 + .../cassandra/examples/invalidatekeycache.txt | 29 + .../cassandra/examples/invalidaterowcache.txt | 29 + .../modules/cassandra/examples/join.txt | 29 + .../cassandra/examples/listsnapshots.txt | 32 + .../modules/cassandra/examples/move.txt | 37 + .../modules/cassandra/examples/netstats.txt | 34 + .../cassandra/examples/pausehandoff.txt | 29 + .../cassandra/examples/profileload.txt | 48 + .../cassandra/examples/proxyhistograms.txt | 30 + .../cassandra/examples/rangekeysample.txt | 30 + .../modules/cassandra/examples/rebuild.txt | 54 + .../cassandra/examples/rebuild_index.txt | 39 + .../modules/cassandra/examples/refresh.txt | 39 + .../examples/refreshsizeestimates.txt | 29 + .../cassandra/examples/reloadlocalschema.txt | 29 + .../cassandra/examples/reloadseeds.txt | 30 + .../modules/cassandra/examples/reloadssl.txt | 29 + .../cassandra/examples/reloadtriggers.txt | 29 + .../cassandra/examples/relocatesstables.txt | 42 + .../modules/cassandra/examples/removenode.txt | 40 + .../modules/cassandra/examples/repair.txt | 103 + .../cassandra/examples/repair_admin.txt | 43 + .../cassandra/examples/replaybatchlog.txt | 29 + .../cassandra/examples/resetfullquerylog.txt | 31 + .../cassandra/examples/resetlocalschema.txt | 29 + .../cassandra/examples/resumehandoff.txt | 29 + .../modules/cassandra/examples/ring.txt | 42 + .../modules/cassandra/examples/scrub.txt | 63 + .../examples/setbatchlogreplaythrottle.txt | 40 + .../cassandra/examples/setcachecapacity.txt | 39 + .../cassandra/examples/setcachekeystosave.txt | 41 + .../examples/setcompactionthreshold.txt | 39 + .../examples/setcompactionthroughput.txt | 39 + .../cassandra/examples/setconcurrency.txt | 40 + .../examples/setconcurrentcompactors.txt | 39 + .../examples/setconcurrentviewbuilders.txt | 39 + .../examples/sethintedhandoffthrottlekb.txt | 39 + .../examples/setinterdcstreamthroughput.txt | 39 + .../cassandra/examples/setlogginglevel.txt | 42 + .../cassandra/examples/setmaxhintwindow.txt | 38 + .../examples/setstreamthroughput.txt | 39 + .../modules/cassandra/examples/settimeout.txt | 42 + .../examples/settraceprobability.txt | 40 + doc/source/modules/cassandra/examples/sjk.txt | 38 + .../modules/cassandra/examples/snapshot.txt | 56 + .../modules/cassandra/examples/status.txt | 41 + .../examples/statusautocompaction.txt | 42 + .../cassandra/examples/statusbackup.txt | 29 + .../cassandra/examples/statusbinary.txt | 29 + .../cassandra/examples/statusgossip.txt | 29 + .../cassandra/examples/statushandoff.txt | 30 + .../modules/cassandra/examples/stop.txt | 46 + .../modules/cassandra/examples/stopdaemon.txt | 29 + .../cassandra/examples/tablehistograms.txt | 38 + .../modules/cassandra/examples/tablestats.txt | 73 + .../cassandra/examples/toppartitions.txt | 47 + .../modules/cassandra/examples/tpstats.txt | 33 + .../cassandra/examples/truncatehints.txt | 40 + .../cassandra/examples/upgradesstables.txt | 49 + .../modules/cassandra/examples/verify.txt | 58 + .../modules/cassandra/examples/version.txt | 29 + .../cassandra/examples/viewbuildstatus.txt | 38 + doc/source/modules/cassandra/nav.adoc | 104 + .../cassandra/pages/architecture/dynamo.adoc | 531 +++++ .../pages/architecture/guarantees.adoc | 108 + .../pages/architecture/images/ring.svg | 11 + .../pages/architecture/images/vnodes.svg | 11 + .../cassandra/pages/architecture/index.adoc | 8 + .../pages/architecture/overview.adoc | 101 + .../pages/architecture/storage_engine.adoc | 225 ++ .../configuration/cass_cl_archive_file.adoc | 48 + .../pages/configuration/cass_env_sh_file.adoc | 162 ++ .../configuration/cass_jvm_options_file.adoc | 22 + .../configuration/cass_logback_xml_file.adoc | 166 ++ .../pages/configuration/cass_rackdc_file.adoc | 79 + .../pages/configuration/cass_topo_file.adoc | 53 + .../pages/configuration/cass_yaml_file.adoc | 2085 +++++++++++++++++ .../cassandra/pages/configuration/index.adoc | 11 + .../cassandra/pages/cql/appendices.adoc | 179 ++ .../modules/cassandra/pages/cql/changes.adoc | 215 ++ .../cassandra/pages/cql/configuring.adoc | 83 + .../modules/cassandra/pages/cql/ddl.adoc | 938 ++++++++ .../cassandra/pages/cql/definitions.adoc | 190 ++ .../modules/cassandra/pages/cql/dml.adoc | 612 +++++ .../modules/cassandra/pages/cql/drivers.adoc | 92 + .../cassandra/pages/cql/functions.adoc | 678 ++++++ .../modules/cassandra/pages/cql/index.adoc | 24 + .../cassandra/pages}/cql/index.rst | 0 .../modules/cassandra/pages/cql/indexes.adoc | 63 + .../cassandra/pages/cql/installing.adoc | 374 +++ .../modules/cassandra/pages/cql/json.adoc | 130 + .../modules/cassandra/pages/cql/mvs.adoc | 161 ++ .../cassandra/pages/cql/operators.adoc | 68 + .../cassandra/pages/cql/production.adoc | 82 + .../modules/cassandra/pages/cql/querying.adoc | 38 + .../modules/cassandra/pages/cql/security.adoc | 672 ++++++ .../modules/cassandra/pages/cql/triggers.adoc | 50 + .../modules/cassandra/pages/cql/types.adoc | 539 +++++ .../data_modeling_conceptual.adoc} | 43 +- .../data_modeling/data_modeling_logical.adoc | 195 ++ .../data_modeling/data_modeling_physical.adoc | 96 + .../data_modeling/data_modeling_queries.adoc | 60 + .../data_modeling/data_modeling_rdbms.adoc} | 77 +- .../data_modeling/data_modeling_refining.adoc | 201 ++ .../data_modeling/data_modeling_schema.adoc | 130 + .../data_modeling/data_modeling_tools.adoc | 44 + .../images/Figure_1_data_model.jpg | Bin 0 -> 17469 bytes .../images/Figure_2_data_model.jpg | Bin 0 -> 20925 bytes .../images/data_modeling_chebotko_logical.png | Bin 0 -> 87366 bytes .../data_modeling_chebotko_physical.png | Bin 0 -> 4553809 bytes .../images/data_modeling_hotel_bucketing.png | Bin 0 -> 22009 bytes .../images/data_modeling_hotel_erd.png | Bin 0 -> 233309 bytes .../images/data_modeling_hotel_logical.png | Bin 0 -> 116998 bytes .../images/data_modeling_hotel_physical.png | Bin 0 -> 119795 bytes .../images/data_modeling_hotel_queries.png | Bin 0 -> 103940 bytes .../images/data_modeling_hotel_relational.png | Bin 0 -> 102656 bytes .../data_modeling_reservation_logical.png | Bin 0 -> 121750 bytes .../data_modeling_reservation_physical.png | Bin 0 -> 142416 bytes .../cassandra/pages/data_modeling/index.adoc | 11 + .../cassandra/pages/data_modeling/intro.adoc | 220 ++ .../cassandra/pages/development/ci.adoc | 83 + .../pages/development/code_style.adoc | 112 + .../pages/development/dependencies.adoc | 51 + .../pages/development/documentation.adoc | 137 ++ .../pages/development/gettingstarted.adoc | 62 + .../pages/development/how_to_commit.adoc | 71 + .../pages/development/how_to_review.adoc | 82 + .../cassandra/pages/development/ide.adoc | 234 ++ .../pages/development/images/docs_commit.png | Bin 0 -> 104667 bytes .../development/images/docs_create_branch.png | Bin 0 -> 181860 bytes .../development/images/docs_create_file.png | Bin 0 -> 209110 bytes .../pages/development/images/docs_editor.png | Bin 0 -> 106175 bytes .../pages/development/images/docs_fork.png | Bin 0 -> 76159 bytes .../pages/development/images/docs_pr.png | Bin 0 -> 156081 bytes .../pages/development/images/docs_preview.png | Bin 0 -> 123826 bytes .../development/images/eclipse_debug0.png | Bin 0 -> 48174 bytes .../development/images/eclipse_debug1.png | Bin 0 -> 34446 bytes .../development/images/eclipse_debug2.png | Bin 0 -> 57032 bytes .../development/images/eclipse_debug3.png | Bin 0 -> 58677 bytes .../development/images/eclipse_debug4.png | Bin 0 -> 24793 bytes .../development/images/eclipse_debug5.png | Bin 0 -> 66632 bytes .../development/images/eclipse_debug6.png | Bin 0 -> 87568 bytes .../cassandra/pages/development/index.adoc | 13 + .../cassandra/pages/development/patches.adoc | 218 ++ .../pages/development/release_process.adoc | 250 ++ .../cassandra/pages/development/testing.adoc | 145 ++ .../modules/cassandra/pages/faq/index.adoc | 290 +++ .../pages/getting_started/configuring.adoc | 83 + .../pages/getting_started/drivers.adoc | 92 + .../pages/getting_started/index.adoc | 30 + .../pages/getting_started/installing.adoc | 294 +++ .../pages/getting_started/production.adoc | 137 ++ .../pages/getting_started/querying.adoc | 30 + .../cassandra/pages}/new/Figure_1.jpg | Bin .../cassandra/pages}/new/Figure_2.jpg | Bin .../cassandra/pages/new/auditlogging.adoc | 468 ++++ .../cassandra/pages/new/fqllogging.adoc | 773 ++++++ .../modules/cassandra/pages/new/index.adoc | 11 + .../modules/cassandra/pages/new/java11.adoc | 292 +++ .../cassandra/pages/new/messaging.adoc | 360 +++ .../cassandra/pages/new/streaming.adoc | 217 ++ .../pages/new/transientreplication.adoc | 186 ++ .../cassandra/pages/new/virtualtables.adoc | 358 +++ .../pages/operating/audit_logging.adoc | 238 ++ .../cassandra/pages/operating/backups.adoc | 822 +++++++ .../pages/operating/bloom_filters.adoc | 64 + .../pages/operating/bulk_loading.adoc | 872 +++++++ .../cassandra/pages/operating/cdc.adoc | 86 + .../pages/operating/compaction/index.adoc | 339 +++ .../pages/operating/compaction/lcs.adoc | 79 + .../pages/operating/compaction/stcs.adoc | 40 + .../pages/operating/compaction/twcs.adoc | 72 + .../pages/operating/compression.adoc | 187 ++ .../cassandra/pages/operating/hardware.adoc | 95 + .../cassandra/pages/operating/hints.adoc | 250 ++ .../cassandra/pages/operating/index.adoc | 16 + .../cassandra/pages/operating/metrics.adoc | 1088 +++++++++ .../pages/operating/read_repair.adoc | 264 +++ .../cassandra/pages/operating/repair.adoc | 222 ++ .../cassandra/pages/operating/security.adoc | 527 +++++ .../cassandra/pages/operating/snitch.adoc | 74 + .../pages/operating/topo_changes.adoc | 133 ++ .../cassandra/pages/plugins/index.adoc | 36 + .../pages/tools/cassandra_stress.adoc | 324 +++ .../modules/cassandra/pages/tools/cqlsh.adoc | 483 ++++ .../modules/cassandra/pages/tools/index.adoc | 9 + .../pages/tools/nodetool/assassinate.adoc | 7 + .../pages/tools/nodetool/assassinate.txt | 38 + .../pages/tools/nodetool/bootstrap.adoc | 7 + .../pages/tools/nodetool/bootstrap.txt | 37 + .../pages/tools/nodetool/cleanup.adoc | 7 + .../pages/tools/nodetool/cleanup.txt | 43 + .../pages/tools/nodetool/clearsnapshot.adoc | 7 + .../pages/tools/nodetool/clearsnapshot.txt | 46 + .../pages/tools/nodetool/clientstats.adoc | 7 + .../pages/tools/nodetool/clientstats.txt | 39 + .../pages/tools/nodetool/compact.adoc | 7 + .../pages/tools/nodetool/compact.txt | 55 + .../tools/nodetool/compactionhistory.adoc | 7 + .../tools/nodetool/compactionhistory.txt | 33 + .../pages/tools/nodetool/compactionstats.adoc | 7 + .../pages/tools/nodetool/compactionstats.txt | 33 + .../cassandra/pages/tools/nodetool/convert.sh | 9 + .../pages/tools/nodetool/decommission.adoc | 7 + .../pages/tools/nodetool/decommission.txt | 33 + .../pages/tools/nodetool/describecluster.adoc | 7 + .../pages/tools/nodetool/describecluster.txt | 30 + .../pages/tools/nodetool/describering.adoc | 7 + .../pages/tools/nodetool/describering.txt | 37 + .../pages/tools/nodetool/disableauditlog.adoc | 7 + .../pages/tools/nodetool/disableauditlog.txt | 29 + .../tools/nodetool/disableautocompaction.adoc | 7 + .../tools/nodetool/disableautocompaction.txt | 39 + .../pages/tools/nodetool/disablebackup.adoc | 7 + .../pages/tools/nodetool/disablebackup.txt | 29 + .../pages/tools/nodetool/disablebinary.adoc | 7 + .../pages/tools/nodetool/disablebinary.txt | 29 + .../tools/nodetool/disablefullquerylog.adoc | 7 + .../tools/nodetool/disablefullquerylog.txt | 29 + .../pages/tools/nodetool/disablegossip.adoc | 7 + .../pages/tools/nodetool/disablegossip.txt | 30 + .../pages/tools/nodetool/disablehandoff.adoc | 7 + .../pages/tools/nodetool/disablehandoff.txt | 29 + .../tools/nodetool/disablehintsfordc.adoc | 7 + .../tools/nodetool/disablehintsfordc.txt | 38 + .../nodetool/disableoldprotocolversions.adoc | 7 + .../nodetool/disableoldprotocolversions.txt | 29 + .../cassandra/pages/tools/nodetool/drain.adoc | 7 + .../cassandra/pages/tools/nodetool/drain.txt | 30 + .../pages/tools/nodetool/enableauditlog.adoc | 7 + .../pages/tools/nodetool/enableauditlog.txt | 63 + .../tools/nodetool/enableautocompaction.adoc | 7 + .../tools/nodetool/enableautocompaction.txt | 39 + .../pages/tools/nodetool/enablebackup.adoc | 7 + .../pages/tools/nodetool/enablebackup.txt | 29 + .../pages/tools/nodetool/enablebinary.adoc | 7 + .../pages/tools/nodetool/enablebinary.txt | 29 + .../tools/nodetool/enablefullquerylog.adoc | 7 + .../tools/nodetool/enablefullquerylog.txt | 61 + .../pages/tools/nodetool/enablegossip.adoc | 7 + .../pages/tools/nodetool/enablegossip.txt | 29 + .../pages/tools/nodetool/enablehandoff.adoc | 7 + .../pages/tools/nodetool/enablehandoff.txt | 30 + .../tools/nodetool/enablehintsfordc.adoc | 7 + .../pages/tools/nodetool/enablehintsfordc.txt | 39 + .../nodetool/enableoldprotocolversions.adoc | 7 + .../nodetool/enableoldprotocolversions.txt | 29 + .../pages/tools/nodetool/failuredetector.adoc | 7 + .../pages/tools/nodetool/failuredetector.txt | 30 + .../cassandra/pages/tools/nodetool/flush.adoc | 7 + .../cassandra/pages/tools/nodetool/flush.txt | 38 + .../pages/tools/nodetool/garbagecollect.adoc | 7 + .../pages/tools/nodetool/garbagecollect.txt | 48 + .../pages/tools/nodetool/gcstats.adoc | 7 + .../pages/tools/nodetool/gcstats.txt | 29 + .../nodetool/getbatchlogreplaythrottle.adoc | 7 + .../nodetool/getbatchlogreplaythrottle.txt | 31 + .../nodetool/getcompactionthreshold.adoc | 7 + .../tools/nodetool/getcompactionthreshold.txt | 39 + .../nodetool/getcompactionthroughput.adoc | 7 + .../nodetool/getcompactionthroughput.txt | 30 + .../pages/tools/nodetool/getconcurrency.adoc | 7 + .../pages/tools/nodetool/getconcurrency.txt | 38 + .../nodetool/getconcurrentcompactors.adoc | 7 + .../nodetool/getconcurrentcompactors.txt | 30 + .../nodetool/getconcurrentviewbuilders.adoc | 7 + .../nodetool/getconcurrentviewbuilders.txt | 30 + .../pages/tools/nodetool/getendpoints.adoc | 7 + .../pages/tools/nodetool/getendpoints.txt | 39 + .../nodetool/getinterdcstreamthroughput.adoc | 7 + .../nodetool/getinterdcstreamthroughput.txt | 30 + .../tools/nodetool/getlogginglevels.adoc | 7 + .../pages/tools/nodetool/getlogginglevels.txt | 29 + .../tools/nodetool/getmaxhintwindow.adoc | 7 + .../pages/tools/nodetool/getmaxhintwindow.txt | 29 + .../pages/tools/nodetool/getseeds.adoc | 7 + .../pages/tools/nodetool/getseeds.txt | 30 + .../pages/tools/nodetool/getsstables.adoc | 7 + .../pages/tools/nodetool/getsstables.txt | 41 + .../tools/nodetool/getstreamthroughput.adoc | 7 + .../tools/nodetool/getstreamthroughput.txt | 30 + .../pages/tools/nodetool/gettimeout.adoc | 7 + .../pages/tools/nodetool/gettimeout.txt | 39 + .../tools/nodetool/gettraceprobability.adoc | 7 + .../tools/nodetool/gettraceprobability.txt | 29 + .../pages/tools/nodetool/gossipinfo.adoc | 7 + .../pages/tools/nodetool/gossipinfo.txt | 29 + .../cassandra/pages/tools/nodetool/help.adoc | 7 + .../cassandra/pages/tools/nodetool/help.txt | 16 + .../pages/tools/nodetool/import.adoc | 7 + .../cassandra/pages/tools/nodetool/import.txt | 64 + .../cassandra/pages/tools/nodetool/info.adoc | 7 + .../cassandra/pages/tools/nodetool/info.txt | 32 + .../nodetool/invalidatecountercache.adoc | 7 + .../tools/nodetool/invalidatecountercache.txt | 29 + .../tools/nodetool/invalidatekeycache.adoc | 7 + .../tools/nodetool/invalidatekeycache.txt | 29 + .../tools/nodetool/invalidaterowcache.adoc | 7 + .../tools/nodetool/invalidaterowcache.txt | 29 + .../cassandra/pages/tools/nodetool/join.adoc | 7 + .../cassandra/pages/tools/nodetool/join.txt | 29 + .../pages/tools/nodetool/listsnapshots.adoc | 7 + .../pages/tools/nodetool/listsnapshots.txt | 32 + .../cassandra/pages/tools/nodetool/move.adoc | 7 + .../cassandra/pages/tools/nodetool/move.txt | 37 + .../pages/tools/nodetool/netstats.adoc | 7 + .../pages/tools/nodetool/netstats.txt | 34 + .../pages/tools/nodetool/nodetool.adoc | 247 ++ .../pages/tools/nodetool/nodetool.txt | 125 + .../pages/tools/nodetool/pausehandoff.adoc | 7 + .../pages/tools/nodetool/pausehandoff.txt | 29 + .../pages/tools/nodetool/profileload.adoc | 7 + .../pages/tools/nodetool/profileload.txt | 48 + .../pages/tools/nodetool/proxyhistograms.adoc | 7 + .../pages/tools/nodetool/proxyhistograms.txt | 30 + .../pages/tools/nodetool/rangekeysample.adoc | 7 + .../pages/tools/nodetool/rangekeysample.txt | 30 + .../pages/tools/nodetool/rebuild.adoc | 7 + .../pages/tools/nodetool/rebuild.txt | 54 + .../pages/tools/nodetool/rebuild_index.adoc | 7 + .../pages/tools/nodetool/rebuild_index.txt | 39 + .../pages/tools/nodetool/refresh.adoc | 7 + .../pages/tools/nodetool/refresh.txt | 39 + .../tools/nodetool/refreshsizeestimates.adoc | 7 + .../tools/nodetool/refreshsizeestimates.txt | 29 + .../tools/nodetool/reloadlocalschema.adoc | 7 + .../tools/nodetool/reloadlocalschema.txt | 29 + .../pages/tools/nodetool/reloadseeds.adoc | 7 + .../pages/tools/nodetool/reloadseeds.txt | 30 + .../pages/tools/nodetool/reloadssl.adoc | 7 + .../pages/tools/nodetool/reloadssl.txt | 29 + .../pages/tools/nodetool/reloadtriggers.adoc | 7 + .../pages/tools/nodetool/reloadtriggers.txt | 29 + .../tools/nodetool/relocatesstables.adoc | 7 + .../pages/tools/nodetool/relocatesstables.txt | 42 + .../pages/tools/nodetool/removenode.adoc | 7 + .../pages/tools/nodetool/removenode.txt | 40 + .../pages/tools/nodetool/repair.adoc | 7 + .../cassandra/pages/tools/nodetool/repair.txt | 103 + .../pages/tools/nodetool/repair_admin.adoc | 7 + .../pages/tools/nodetool/repair_admin.txt | 43 + .../pages/tools/nodetool/replaybatchlog.adoc | 7 + .../pages/tools/nodetool/replaybatchlog.txt | 29 + .../tools/nodetool/resetfullquerylog.adoc | 7 + .../tools/nodetool/resetfullquerylog.txt | 31 + .../tools/nodetool/resetlocalschema.adoc | 7 + .../pages/tools/nodetool/resetlocalschema.txt | 29 + .../pages/tools/nodetool/resumehandoff.adoc | 7 + .../pages/tools/nodetool/resumehandoff.txt | 29 + .../cassandra/pages/tools/nodetool/ring.adoc | 7 + .../cassandra/pages/tools/nodetool/ring.txt | 42 + .../cassandra/pages/tools/nodetool/scrub.adoc | 7 + .../cassandra/pages/tools/nodetool/scrub.txt | 63 + .../nodetool/setbatchlogreplaythrottle.adoc | 7 + .../nodetool/setbatchlogreplaythrottle.txt | 40 + .../tools/nodetool/setcachecapacity.adoc | 7 + .../pages/tools/nodetool/setcachecapacity.txt | 39 + .../tools/nodetool/setcachekeystosave.adoc | 7 + .../tools/nodetool/setcachekeystosave.txt | 41 + .../nodetool/setcompactionthreshold.adoc | 7 + .../tools/nodetool/setcompactionthreshold.txt | 39 + .../nodetool/setcompactionthroughput.adoc | 7 + .../nodetool/setcompactionthroughput.txt | 39 + .../pages/tools/nodetool/setconcurrency.adoc | 7 + .../pages/tools/nodetool/setconcurrency.txt | 40 + .../nodetool/setconcurrentcompactors.adoc | 7 + .../nodetool/setconcurrentcompactors.txt | 39 + .../nodetool/setconcurrentviewbuilders.adoc | 7 + .../nodetool/setconcurrentviewbuilders.txt | 39 + .../nodetool/sethintedhandoffthrottlekb.adoc | 7 + .../nodetool/sethintedhandoffthrottlekb.txt | 39 + .../nodetool/setinterdcstreamthroughput.adoc | 7 + .../nodetool/setinterdcstreamthroughput.txt | 39 + .../pages/tools/nodetool/setlogginglevel.adoc | 7 + .../pages/tools/nodetool/setlogginglevel.txt | 42 + .../tools/nodetool/setmaxhintwindow.adoc | 7 + .../pages/tools/nodetool/setmaxhintwindow.txt | 38 + .../tools/nodetool/setstreamthroughput.adoc | 7 + .../tools/nodetool/setstreamthroughput.txt | 39 + .../pages/tools/nodetool/settimeout.adoc | 7 + .../pages/tools/nodetool/settimeout.txt | 42 + .../tools/nodetool/settraceprobability.adoc | 7 + .../tools/nodetool/settraceprobability.txt | 40 + .../cassandra/pages/tools/nodetool/sjk.adoc | 7 + .../cassandra/pages/tools/nodetool/sjk.txt | 38 + .../pages/tools/nodetool/snapshot.adoc | 7 + .../pages/tools/nodetool/snapshot.txt | 56 + .../pages/tools/nodetool/status.adoc | 7 + .../cassandra/pages/tools/nodetool/status.txt | 41 + .../tools/nodetool/statusautocompaction.adoc | 7 + .../tools/nodetool/statusautocompaction.txt | 42 + .../pages/tools/nodetool/statusbackup.adoc | 7 + .../pages/tools/nodetool/statusbackup.txt | 29 + .../pages/tools/nodetool/statusbinary.adoc | 7 + .../pages/tools/nodetool/statusbinary.txt | 29 + .../pages/tools/nodetool/statusgossip.adoc | 7 + .../pages/tools/nodetool/statusgossip.txt | 29 + .../pages/tools/nodetool/statushandoff.adoc | 7 + .../pages/tools/nodetool/statushandoff.txt | 30 + .../cassandra/pages/tools/nodetool/stop.adoc | 7 + .../cassandra/pages/tools/nodetool/stop.txt | 46 + .../pages/tools/nodetool/stopdaemon.adoc | 7 + .../pages/tools/nodetool/stopdaemon.txt | 29 + .../pages/tools/nodetool/tablehistograms.adoc | 7 + .../pages/tools/nodetool/tablehistograms.txt | 38 + .../pages/tools/nodetool/tablestats.adoc | 7 + .../pages/tools/nodetool/tablestats.txt | 73 + .../pages/tools/nodetool/toppartitions.adoc | 7 + .../pages/tools/nodetool/toppartitions.txt | 47 + .../pages/tools/nodetool/tpstats.adoc | 7 + .../pages/tools/nodetool/tpstats.txt | 33 + .../pages/tools/nodetool/truncatehints.adoc | 7 + .../pages/tools/nodetool/truncatehints.txt | 40 + .../pages/tools/nodetool/upgradesstables.adoc | 7 + .../pages/tools/nodetool/upgradesstables.txt | 49 + .../pages/tools/nodetool/verify.adoc | 7 + .../cassandra/pages/tools/nodetool/verify.txt | 58 + .../pages/tools/nodetool/version.adoc | 7 + .../pages/tools/nodetool/version.txt | 29 + .../pages/tools/nodetool/viewbuildstatus.adoc | 7 + .../pages/tools/nodetool/viewbuildstatus.txt | 38 + .../cassandra/pages/tools/sstable/index.adoc | 20 + .../pages/tools/sstable/sstabledump.adoc | 286 +++ .../tools/sstable/sstableexpiredblockers.adoc | 42 + .../tools/sstable/sstablelevelreset.adoc | 69 + .../pages/tools/sstable/sstableloader.adoc | 316 +++ .../pages/tools/sstable/sstablemetadata.adoc | 320 +++ .../tools/sstable/sstableofflinerelevel.adoc | 94 + .../tools/sstable/sstablerepairedset.adoc | 83 + .../pages/tools/sstable/sstablescrub.adoc | 102 + .../pages/tools/sstable/sstablesplit.adoc | 96 + .../pages/tools/sstable/sstableupgrade.adoc | 136 ++ .../pages/tools/sstable/sstableutil.adoc | 102 + .../pages/tools/sstable/sstableverify.adoc | 82 + .../pages}/tools/stress-example.yaml | 0 .../pages}/tools/stress-lwt-example.yaml | 0 .../pages/troubleshooting/finding_nodes.adoc | 134 ++ .../pages/troubleshooting/index.adoc | 19 + .../pages/troubleshooting/reading_logs.adoc | 269 +++ .../pages/troubleshooting/use_nodetool.adoc | 236 ++ .../pages/troubleshooting/use_tools.adoc | 564 +++++ .../partials/nodetool_and_cqlsh.adoc | 21 + .../partials/nodetool_and_cqlsh_nobin.adoc | 21 + .../cassandra/partials/package_versions.adoc | 5 + .../cassandra/partials/tail_syslog.adoc | 14 + doc/source/new/auditlogging.rst | 461 ---- doc/source/new/fqllogging.rst | 689 ------ doc/source/new/index.rst | 32 - doc/source/new/java11.rst | 274 --- doc/source/new/messaging.rst | 257 -- doc/source/new/streaming.rst | 162 -- doc/source/new/transientreplication.rst | 155 -- doc/source/new/virtualtables.rst | 342 --- doc/source/operating/audit_logging.rst | 236 -- doc/source/operating/backups.rst | 660 ------ doc/source/operating/bloom_filters.rst | 65 - doc/source/operating/bulk_loading.rst | 660 ------ doc/source/operating/cdc.rst | 96 - doc/source/operating/compaction/index.rst | 301 --- doc/source/operating/compaction/lcs.rst | 90 - doc/source/operating/compaction/stcs.rst | 58 - doc/source/operating/compaction/twcs.rst | 76 - doc/source/operating/compression.rst | 164 -- doc/source/operating/error_codes.txt | 31 - doc/source/operating/hardware.rst | 85 - doc/source/operating/hints.rst | 279 --- doc/source/operating/index.rst | 39 - doc/source/operating/metrics.rst | 793 ------- doc/source/operating/read_repair.rst | 169 -- doc/source/operating/repair.rst | 208 -- doc/source/operating/security.rst | 441 ---- doc/source/operating/snitch.rst | 82 - doc/source/operating/topo_changes.rst | 129 - doc/source/plugins/index.rst | 35 - doc/source/tools/cassandra_stress.rst | 273 --- doc/source/tools/cqlsh.rst | 458 ---- doc/source/tools/index.rst | 28 - doc/source/tools/sstable/index.rst | 39 - doc/source/tools/sstable/sstabledump.rst | 294 --- .../tools/sstable/sstableexpiredblockers.rst | 48 - .../tools/sstable/sstablelevelreset.rst | 82 - doc/source/tools/sstable/sstableloader.rst | 273 --- doc/source/tools/sstable/sstablemetadata.rst | 300 --- .../tools/sstable/sstableofflinerelevel.rst | 95 - .../tools/sstable/sstablerepairedset.rst | 79 - doc/source/tools/sstable/sstablescrub.rst | 93 - doc/source/tools/sstable/sstablesplit.rst | 93 - doc/source/tools/sstable/sstableupgrade.rst | 137 -- doc/source/tools/sstable/sstableutil.rst | 91 - doc/source/tools/sstable/sstableverify.rst | 91 - doc/source/troubleshooting/finding_nodes.rst | 149 -- doc/source/troubleshooting/index.rst | 39 - doc/source/troubleshooting/reading_logs.rst | 267 --- doc/source/troubleshooting/use_nodetool.rst | 245 -- doc/source/troubleshooting/use_tools.rst | 542 ----- source/tools/nodetool/nodetool.txt | 0 782 files changed, 35407 insertions(+), 21766 deletions(-) rename doc/source/configuration/cass_yaml_file.rst => cass_yaml.adoc (79%) rename doc/{convert_yaml_to_rst.py => convert_yaml_to_adoc.py} (87%) create mode 100644 doc/site.yml delete mode 100644 doc/source/_static/extra.css delete mode 100644 doc/source/_templates/indexcontent.html delete mode 100644 doc/source/_theme/cassandra_theme/defindex.html delete mode 100644 doc/source/_theme/cassandra_theme/layout.html delete mode 100644 doc/source/_theme/cassandra_theme/search.html delete mode 100644 doc/source/_theme/cassandra_theme/theme.conf delete mode 100644 doc/source/_util/cql.py create mode 100644 doc/source/antora.yml delete mode 100644 doc/source/architecture/dynamo.rst delete mode 100644 doc/source/architecture/guarantees.rst delete mode 100644 doc/source/architecture/index.rst delete mode 100644 doc/source/architecture/overview.rst delete mode 100644 doc/source/architecture/storage_engine.rst delete mode 100644 doc/source/bugs.rst delete mode 100644 doc/source/conf.py delete mode 100644 doc/source/configuration/cass_cl_archive_file.rst delete mode 100644 doc/source/configuration/cass_env_sh_file.rst delete mode 100644 doc/source/configuration/cass_jvm_options_file.rst delete mode 100644 doc/source/configuration/cass_logback_xml_file.rst delete mode 100644 doc/source/configuration/cass_rackdc_file.rst delete mode 100644 doc/source/configuration/cass_topo_file.rst delete mode 100644 doc/source/configuration/index.rst delete mode 100644 doc/source/contactus.rst delete mode 100644 doc/source/cql/appendices.rst delete mode 100644 doc/source/cql/changes.rst delete mode 100644 doc/source/cql/ddl.rst delete mode 100644 doc/source/cql/definitions.rst delete mode 100644 doc/source/cql/dml.rst delete mode 100644 doc/source/cql/functions.rst delete mode 100644 doc/source/cql/indexes.rst delete mode 100644 doc/source/cql/json.rst delete mode 100644 doc/source/cql/mvs.rst delete mode 100644 doc/source/cql/operators.rst delete mode 100644 doc/source/cql/security.rst delete mode 100644 doc/source/cql/triggers.rst delete mode 100644 doc/source/cql/types.rst delete mode 100644 doc/source/data_modeling/data_modeling_logical.rst delete mode 100644 doc/source/data_modeling/data_modeling_physical.rst delete mode 100644 doc/source/data_modeling/data_modeling_queries.rst delete mode 100644 doc/source/data_modeling/data_modeling_refining.rst delete mode 100644 doc/source/data_modeling/data_modeling_schema.rst delete mode 100644 doc/source/data_modeling/data_modeling_tools.rst delete mode 100644 doc/source/data_modeling/index.rst delete mode 100644 doc/source/data_modeling/intro.rst delete mode 100644 doc/source/development/ci.rst delete mode 100644 doc/source/development/code_style.rst delete mode 100644 doc/source/development/dependencies.rst delete mode 100644 doc/source/development/documentation.rst delete mode 100644 doc/source/development/gettingstarted.rst delete mode 100644 doc/source/development/how_to_commit.rst delete mode 100644 doc/source/development/how_to_review.rst delete mode 100644 doc/source/development/ide.rst delete mode 100644 doc/source/development/index.rst delete mode 100644 doc/source/development/patches.rst delete mode 100644 doc/source/development/release_process.rst delete mode 100644 doc/source/development/testing.rst delete mode 100644 doc/source/faq/index.rst delete mode 100644 doc/source/getting_started/configuring.rst delete mode 100644 doc/source/getting_started/drivers.rst delete mode 100644 doc/source/getting_started/index.rst delete mode 100644 doc/source/getting_started/installing.rst delete mode 100644 doc/source/getting_started/production.rst delete mode 100644 doc/source/getting_started/querying.rst delete mode 100644 doc/source/glossary.rst delete mode 100644 doc/source/index.rst create mode 100644 doc/source/modules/ROOT/nav.adoc create mode 100644 doc/source/modules/ROOT/pages/bugs.adoc create mode 100644 doc/source/modules/ROOT/pages/contactus.adoc create mode 100644 doc/source/modules/ROOT/pages/glossary.adoc create mode 100644 doc/source/modules/ROOT/pages/index.adoc rename doc/source/{operating => modules/cassandra/assets/images}/Figure_1_backups.jpg (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/Figure_1_data_model.jpg (100%) rename doc/source/{architecture => modules/cassandra/assets/images}/Figure_1_guarantees.jpg (100%) rename doc/source/{operating => modules/cassandra/assets/images}/Figure_1_read_repair.jpg (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/Figure_2_data_model.jpg (100%) rename doc/source/{operating => modules/cassandra/assets/images}/Figure_2_read_repair.jpg (100%) rename doc/source/{operating => modules/cassandra/assets/images}/Figure_3_read_repair.jpg (100%) rename doc/source/{operating => modules/cassandra/assets/images}/Figure_4_read_repair.jpg (100%) rename doc/source/{operating => modules/cassandra/assets/images}/Figure_5_read_repair.jpg (100%) rename doc/source/{operating => modules/cassandra/assets/images}/Figure_6_read_repair.jpg (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_chebotko_logical.png (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_chebotko_physical.png (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_hotel_bucketing.png (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_hotel_erd.png (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_hotel_logical.png (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_hotel_physical.png (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_hotel_queries.png (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_hotel_relational.png (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_reservation_logical.png (100%) rename doc/source/{data_modeling => modules/cassandra/assets}/images/data_modeling_reservation_physical.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/docs_commit.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/docs_create_branch.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/docs_create_file.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/docs_editor.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/docs_fork.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/docs_pr.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/docs_preview.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/eclipse_debug0.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/eclipse_debug1.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/eclipse_debug2.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/eclipse_debug3.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/eclipse_debug4.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/eclipse_debug5.png (100%) rename doc/source/{development => modules/cassandra/assets}/images/eclipse_debug6.png (100%) rename doc/source/{tools => modules/cassandra/assets/images}/example-stress-graph.png (100%) rename doc/source/{operating => modules/cassandra/assets}/images/hints.svg (100%) rename doc/source/{architecture => modules/cassandra/assets}/images/ring.svg (100%) rename doc/source/{architecture => modules/cassandra/assets}/images/vnodes.svg (100%) create mode 100644 doc/source/modules/cassandra/examples/BASH/add_repo_keys.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/apt-get_cass.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/apt-get_update.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/cqlsh_localhost.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/curl_install.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/curl_verify_sha.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/find_sstables.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/get_deb_package.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/java_verify.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/nodetool_status.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/nodetool_status_nobin.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/run_cqlsh.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/run_cqlsh_nobin.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/start_tarball.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/tail_syslog.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/tail_syslog_package.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/tarball.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/verify_gpg.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/yum_cass.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/yum_start.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/yum_update.sh create mode 100644 doc/source/modules/cassandra/examples/BNF/alter_ks.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/alter_mv_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/alter_udt_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/collection_literal.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/collection_type.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/column.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/constant.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/cql_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/cql_type.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/create_index_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/create_ks.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/create_mv_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/create_table.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/create_trigger_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/create_type.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/custom_type.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/drop_index_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/drop_ks.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/drop_mv_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/drop_trigger_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/drop_udt_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/identifier.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/index_name.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/ks_table.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/native_type.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/options.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/term.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/trigger_name.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/tuple.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/udt.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/udt_literal.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/use_ks.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/view_name.bnf create mode 100644 doc/source/modules/cassandra/examples/CQL/alter_ks.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/autoexpand_exclude_dc.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/autoexpand_ks.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/autoexpand_ks_override.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_index.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_ks.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_ks_trans_repl.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_mv_statement.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_static_column.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_table.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_table_clustercolumn.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_table_compound_pk.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_table_single_pk.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_trigger.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/datetime_arithmetic.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/delete_all_elements_list.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/delete_element_list.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/delete_map.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/delete_set.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/drop_ks.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/drop_trigger.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_duration.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_json.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_static_data.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_table_cc_addl.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn2.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_table_compound_pk.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_udt.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/list.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/map.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/mv_table_def.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/mv_table_error.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/mv_table_from_base.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/rename_udt_field.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/select_range.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/select_static_data.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/select_table_clustercolumn.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/select_table_compound_pk.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/set.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/tuple.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/udt.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/update_list.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/update_map.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/update_particular_list_element.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/update_set.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/update_ttl_map.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/use_ks.cql create mode 100644 doc/source/modules/cassandra/examples/RESULTS/add_repo_keys.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/add_yum_repo.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/autoexpand_exclude_dc.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks_override.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/cqlsh_localhost.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/insert_table_cc_addl.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/java_verify.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/select_range.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/select_static_data.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/select_table_clustercolumn.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/select_table_compound_pk.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/tail_syslog.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/verify_gpg.result create mode 100644 doc/source/modules/cassandra/examples/TEXT/tarball_install_dirs.txt create mode 100644 doc/source/modules/cassandra/examples/assassinate.txt create mode 100644 doc/source/modules/cassandra/examples/bootstrap.txt create mode 100644 doc/source/modules/cassandra/examples/cleanup.txt create mode 100644 doc/source/modules/cassandra/examples/clearsnapshot.txt create mode 100644 doc/source/modules/cassandra/examples/clientstats.txt create mode 100644 doc/source/modules/cassandra/examples/compact.txt create mode 100644 doc/source/modules/cassandra/examples/compactionhistory.txt create mode 100644 doc/source/modules/cassandra/examples/compactionstats.txt create mode 100644 doc/source/modules/cassandra/examples/decommission.txt create mode 100644 doc/source/modules/cassandra/examples/describecluster.txt create mode 100644 doc/source/modules/cassandra/examples/describering.txt create mode 100644 doc/source/modules/cassandra/examples/disableauditlog.txt create mode 100644 doc/source/modules/cassandra/examples/disableautocompaction.txt create mode 100644 doc/source/modules/cassandra/examples/disablebackup.txt create mode 100644 doc/source/modules/cassandra/examples/disablebinary.txt create mode 100644 doc/source/modules/cassandra/examples/disablefullquerylog.txt create mode 100644 doc/source/modules/cassandra/examples/disablegossip.txt create mode 100644 doc/source/modules/cassandra/examples/disablehandoff.txt create mode 100644 doc/source/modules/cassandra/examples/disablehintsfordc.txt create mode 100644 doc/source/modules/cassandra/examples/disableoldprotocolversions.txt create mode 100644 doc/source/modules/cassandra/examples/drain.txt create mode 100644 doc/source/modules/cassandra/examples/enableauditlog.txt create mode 100644 doc/source/modules/cassandra/examples/enableautocompaction.txt create mode 100644 doc/source/modules/cassandra/examples/enablebackup.txt create mode 100644 doc/source/modules/cassandra/examples/enablebinary.txt create mode 100644 doc/source/modules/cassandra/examples/enablefullquerylog.txt create mode 100644 doc/source/modules/cassandra/examples/enablegossip.txt create mode 100644 doc/source/modules/cassandra/examples/enablehandoff.txt create mode 100644 doc/source/modules/cassandra/examples/enablehintsfordc.txt create mode 100644 doc/source/modules/cassandra/examples/enableoldprotocolversions.txt create mode 100644 doc/source/modules/cassandra/examples/failuredetector.txt create mode 100644 doc/source/modules/cassandra/examples/flush.txt create mode 100644 doc/source/modules/cassandra/examples/garbagecollect.txt create mode 100644 doc/source/modules/cassandra/examples/gcstats.txt create mode 100644 doc/source/modules/cassandra/examples/getbatchlogreplaythrottle.txt create mode 100644 doc/source/modules/cassandra/examples/getcompactionthreshold.txt create mode 100644 doc/source/modules/cassandra/examples/getcompactionthroughput.txt create mode 100644 doc/source/modules/cassandra/examples/getconcurrency.txt create mode 100644 doc/source/modules/cassandra/examples/getconcurrentcompactors.txt create mode 100644 doc/source/modules/cassandra/examples/getconcurrentviewbuilders.txt create mode 100644 doc/source/modules/cassandra/examples/getendpoints.txt create mode 100644 doc/source/modules/cassandra/examples/getinterdcstreamthroughput.txt create mode 100644 doc/source/modules/cassandra/examples/getlogginglevels.txt create mode 100644 doc/source/modules/cassandra/examples/getmaxhintwindow.txt create mode 100644 doc/source/modules/cassandra/examples/getseeds.txt create mode 100644 doc/source/modules/cassandra/examples/getsstables.txt create mode 100644 doc/source/modules/cassandra/examples/getstreamthroughput.txt create mode 100644 doc/source/modules/cassandra/examples/gettimeout.txt create mode 100644 doc/source/modules/cassandra/examples/gettraceprobability.txt create mode 100644 doc/source/modules/cassandra/examples/gossipinfo.txt create mode 100644 doc/source/modules/cassandra/examples/help.txt create mode 100644 doc/source/modules/cassandra/examples/import.txt create mode 100644 doc/source/modules/cassandra/examples/info.txt create mode 100644 doc/source/modules/cassandra/examples/invalidatecountercache.txt create mode 100644 doc/source/modules/cassandra/examples/invalidatekeycache.txt create mode 100644 doc/source/modules/cassandra/examples/invalidaterowcache.txt create mode 100644 doc/source/modules/cassandra/examples/join.txt create mode 100644 doc/source/modules/cassandra/examples/listsnapshots.txt create mode 100644 doc/source/modules/cassandra/examples/move.txt create mode 100644 doc/source/modules/cassandra/examples/netstats.txt create mode 100644 doc/source/modules/cassandra/examples/pausehandoff.txt create mode 100644 doc/source/modules/cassandra/examples/profileload.txt create mode 100644 doc/source/modules/cassandra/examples/proxyhistograms.txt create mode 100644 doc/source/modules/cassandra/examples/rangekeysample.txt create mode 100644 doc/source/modules/cassandra/examples/rebuild.txt create mode 100644 doc/source/modules/cassandra/examples/rebuild_index.txt create mode 100644 doc/source/modules/cassandra/examples/refresh.txt create mode 100644 doc/source/modules/cassandra/examples/refreshsizeestimates.txt create mode 100644 doc/source/modules/cassandra/examples/reloadlocalschema.txt create mode 100644 doc/source/modules/cassandra/examples/reloadseeds.txt create mode 100644 doc/source/modules/cassandra/examples/reloadssl.txt create mode 100644 doc/source/modules/cassandra/examples/reloadtriggers.txt create mode 100644 doc/source/modules/cassandra/examples/relocatesstables.txt create mode 100644 doc/source/modules/cassandra/examples/removenode.txt create mode 100644 doc/source/modules/cassandra/examples/repair.txt create mode 100644 doc/source/modules/cassandra/examples/repair_admin.txt create mode 100644 doc/source/modules/cassandra/examples/replaybatchlog.txt create mode 100644 doc/source/modules/cassandra/examples/resetfullquerylog.txt create mode 100644 doc/source/modules/cassandra/examples/resetlocalschema.txt create mode 100644 doc/source/modules/cassandra/examples/resumehandoff.txt create mode 100644 doc/source/modules/cassandra/examples/ring.txt create mode 100644 doc/source/modules/cassandra/examples/scrub.txt create mode 100644 doc/source/modules/cassandra/examples/setbatchlogreplaythrottle.txt create mode 100644 doc/source/modules/cassandra/examples/setcachecapacity.txt create mode 100644 doc/source/modules/cassandra/examples/setcachekeystosave.txt create mode 100644 doc/source/modules/cassandra/examples/setcompactionthreshold.txt create mode 100644 doc/source/modules/cassandra/examples/setcompactionthroughput.txt create mode 100644 doc/source/modules/cassandra/examples/setconcurrency.txt create mode 100644 doc/source/modules/cassandra/examples/setconcurrentcompactors.txt create mode 100644 doc/source/modules/cassandra/examples/setconcurrentviewbuilders.txt create mode 100644 doc/source/modules/cassandra/examples/sethintedhandoffthrottlekb.txt create mode 100644 doc/source/modules/cassandra/examples/setinterdcstreamthroughput.txt create mode 100644 doc/source/modules/cassandra/examples/setlogginglevel.txt create mode 100644 doc/source/modules/cassandra/examples/setmaxhintwindow.txt create mode 100644 doc/source/modules/cassandra/examples/setstreamthroughput.txt create mode 100644 doc/source/modules/cassandra/examples/settimeout.txt create mode 100644 doc/source/modules/cassandra/examples/settraceprobability.txt create mode 100644 doc/source/modules/cassandra/examples/sjk.txt create mode 100644 doc/source/modules/cassandra/examples/snapshot.txt create mode 100644 doc/source/modules/cassandra/examples/status.txt create mode 100644 doc/source/modules/cassandra/examples/statusautocompaction.txt create mode 100644 doc/source/modules/cassandra/examples/statusbackup.txt create mode 100644 doc/source/modules/cassandra/examples/statusbinary.txt create mode 100644 doc/source/modules/cassandra/examples/statusgossip.txt create mode 100644 doc/source/modules/cassandra/examples/statushandoff.txt create mode 100644 doc/source/modules/cassandra/examples/stop.txt create mode 100644 doc/source/modules/cassandra/examples/stopdaemon.txt create mode 100644 doc/source/modules/cassandra/examples/tablehistograms.txt create mode 100644 doc/source/modules/cassandra/examples/tablestats.txt create mode 100644 doc/source/modules/cassandra/examples/toppartitions.txt create mode 100644 doc/source/modules/cassandra/examples/tpstats.txt create mode 100644 doc/source/modules/cassandra/examples/truncatehints.txt create mode 100644 doc/source/modules/cassandra/examples/upgradesstables.txt create mode 100644 doc/source/modules/cassandra/examples/verify.txt create mode 100644 doc/source/modules/cassandra/examples/version.txt create mode 100644 doc/source/modules/cassandra/examples/viewbuildstatus.txt create mode 100644 doc/source/modules/cassandra/nav.adoc create mode 100644 doc/source/modules/cassandra/pages/architecture/dynamo.adoc create mode 100644 doc/source/modules/cassandra/pages/architecture/guarantees.adoc create mode 100644 doc/source/modules/cassandra/pages/architecture/images/ring.svg create mode 100644 doc/source/modules/cassandra/pages/architecture/images/vnodes.svg create mode 100644 doc/source/modules/cassandra/pages/architecture/index.adoc create mode 100644 doc/source/modules/cassandra/pages/architecture/overview.adoc create mode 100644 doc/source/modules/cassandra/pages/architecture/storage_engine.adoc create mode 100644 doc/source/modules/cassandra/pages/configuration/cass_cl_archive_file.adoc create mode 100644 doc/source/modules/cassandra/pages/configuration/cass_env_sh_file.adoc create mode 100644 doc/source/modules/cassandra/pages/configuration/cass_jvm_options_file.adoc create mode 100644 doc/source/modules/cassandra/pages/configuration/cass_logback_xml_file.adoc create mode 100644 doc/source/modules/cassandra/pages/configuration/cass_rackdc_file.adoc create mode 100644 doc/source/modules/cassandra/pages/configuration/cass_topo_file.adoc create mode 100644 doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc create mode 100644 doc/source/modules/cassandra/pages/configuration/index.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/appendices.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/changes.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/configuring.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/ddl.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/definitions.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/dml.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/drivers.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/functions.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/index.adoc rename doc/source/{ => modules/cassandra/pages}/cql/index.rst (100%) create mode 100644 doc/source/modules/cassandra/pages/cql/indexes.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/installing.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/json.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/mvs.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/operators.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/production.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/querying.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/security.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/triggers.adoc create mode 100644 doc/source/modules/cassandra/pages/cql/types.adoc rename doc/source/{data_modeling/data_modeling_conceptual.rst => modules/cassandra/pages/data_modeling/data_modeling_conceptual.adoc} (52%) create mode 100644 doc/source/modules/cassandra/pages/data_modeling/data_modeling_logical.adoc create mode 100644 doc/source/modules/cassandra/pages/data_modeling/data_modeling_physical.adoc create mode 100644 doc/source/modules/cassandra/pages/data_modeling/data_modeling_queries.adoc rename doc/source/{data_modeling/data_modeling_rdbms.rst => modules/cassandra/pages/data_modeling/data_modeling_rdbms.adoc} (74%) create mode 100644 doc/source/modules/cassandra/pages/data_modeling/data_modeling_refining.adoc create mode 100644 doc/source/modules/cassandra/pages/data_modeling/data_modeling_schema.adoc create mode 100644 doc/source/modules/cassandra/pages/data_modeling/data_modeling_tools.adoc create mode 100644 doc/source/modules/cassandra/pages/data_modeling/images/Figure_1_data_model.jpg create mode 100644 doc/source/modules/cassandra/pages/data_modeling/images/Figure_2_data_model.jpg create mode 100755 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_logical.png create mode 100644 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_physical.png create mode 100644 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_bucketing.png create mode 100755 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_erd.png create mode 100755 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_logical.png create mode 100644 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_physical.png create mode 100755 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_queries.png create mode 100755 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_relational.png create mode 100755 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_logical.png create mode 100755 doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_physical.png create mode 100644 doc/source/modules/cassandra/pages/data_modeling/index.adoc create mode 100644 doc/source/modules/cassandra/pages/data_modeling/intro.adoc create mode 100644 doc/source/modules/cassandra/pages/development/ci.adoc create mode 100644 doc/source/modules/cassandra/pages/development/code_style.adoc create mode 100644 doc/source/modules/cassandra/pages/development/dependencies.adoc create mode 100644 doc/source/modules/cassandra/pages/development/documentation.adoc create mode 100644 doc/source/modules/cassandra/pages/development/gettingstarted.adoc create mode 100644 doc/source/modules/cassandra/pages/development/how_to_commit.adoc create mode 100644 doc/source/modules/cassandra/pages/development/how_to_review.adoc create mode 100644 doc/source/modules/cassandra/pages/development/ide.adoc create mode 100644 doc/source/modules/cassandra/pages/development/images/docs_commit.png create mode 100644 doc/source/modules/cassandra/pages/development/images/docs_create_branch.png create mode 100644 doc/source/modules/cassandra/pages/development/images/docs_create_file.png create mode 100644 doc/source/modules/cassandra/pages/development/images/docs_editor.png create mode 100644 doc/source/modules/cassandra/pages/development/images/docs_fork.png create mode 100644 doc/source/modules/cassandra/pages/development/images/docs_pr.png create mode 100644 doc/source/modules/cassandra/pages/development/images/docs_preview.png create mode 100644 doc/source/modules/cassandra/pages/development/images/eclipse_debug0.png create mode 100644 doc/source/modules/cassandra/pages/development/images/eclipse_debug1.png create mode 100644 doc/source/modules/cassandra/pages/development/images/eclipse_debug2.png create mode 100644 doc/source/modules/cassandra/pages/development/images/eclipse_debug3.png create mode 100644 doc/source/modules/cassandra/pages/development/images/eclipse_debug4.png create mode 100644 doc/source/modules/cassandra/pages/development/images/eclipse_debug5.png create mode 100644 doc/source/modules/cassandra/pages/development/images/eclipse_debug6.png create mode 100644 doc/source/modules/cassandra/pages/development/index.adoc create mode 100644 doc/source/modules/cassandra/pages/development/patches.adoc create mode 100644 doc/source/modules/cassandra/pages/development/release_process.adoc create mode 100644 doc/source/modules/cassandra/pages/development/testing.adoc create mode 100644 doc/source/modules/cassandra/pages/faq/index.adoc create mode 100644 doc/source/modules/cassandra/pages/getting_started/configuring.adoc create mode 100644 doc/source/modules/cassandra/pages/getting_started/drivers.adoc create mode 100644 doc/source/modules/cassandra/pages/getting_started/index.adoc create mode 100644 doc/source/modules/cassandra/pages/getting_started/installing.adoc create mode 100644 doc/source/modules/cassandra/pages/getting_started/production.adoc create mode 100644 doc/source/modules/cassandra/pages/getting_started/querying.adoc rename doc/source/{ => modules/cassandra/pages}/new/Figure_1.jpg (100%) rename doc/source/{ => modules/cassandra/pages}/new/Figure_2.jpg (100%) create mode 100644 doc/source/modules/cassandra/pages/new/auditlogging.adoc create mode 100644 doc/source/modules/cassandra/pages/new/fqllogging.adoc create mode 100644 doc/source/modules/cassandra/pages/new/index.adoc create mode 100644 doc/source/modules/cassandra/pages/new/java11.adoc create mode 100644 doc/source/modules/cassandra/pages/new/messaging.adoc create mode 100644 doc/source/modules/cassandra/pages/new/streaming.adoc create mode 100644 doc/source/modules/cassandra/pages/new/transientreplication.adoc create mode 100644 doc/source/modules/cassandra/pages/new/virtualtables.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/audit_logging.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/backups.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/bloom_filters.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/bulk_loading.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/cdc.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/compaction/index.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/compression.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/hardware.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/hints.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/index.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/metrics.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/read_repair.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/repair.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/security.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/snitch.adoc create mode 100644 doc/source/modules/cassandra/pages/operating/topo_changes.adoc create mode 100644 doc/source/modules/cassandra/pages/plugins/index.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/cqlsh.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/index.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/assassinate.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/cleanup.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/clientstats.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/compact.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.txt create mode 100755 doc/source/modules/cassandra/pages/tools/nodetool/convert.sh create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/decommission.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/describecluster.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/describering.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/drain.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/flush.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gcstats.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getseeds.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getsstables.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/help.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/help.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/import.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/import.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/info.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/info.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/join.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/join.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/move.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/move.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/netstats.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/nodetool.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/profileload.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/rebuild.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/refresh.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/removenode.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/repair.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/ring.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/scrub.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/settimeout.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/sjk.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/snapshot.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/status.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/status.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/stop.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/tablestats.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/tpstats.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/verify.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/version.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/version.txt create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.txt create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/index.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstabledump.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstableexpiredblockers.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstablelevelreset.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstableloader.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstablemetadata.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstableofflinerelevel.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstablerepairedset.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstablescrub.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstablesplit.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstableupgrade.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstableutil.adoc create mode 100644 doc/source/modules/cassandra/pages/tools/sstable/sstableverify.adoc rename doc/source/{ => modules/cassandra/pages}/tools/stress-example.yaml (100%) rename doc/source/{ => modules/cassandra/pages}/tools/stress-lwt-example.yaml (100%) create mode 100644 doc/source/modules/cassandra/pages/troubleshooting/finding_nodes.adoc create mode 100644 doc/source/modules/cassandra/pages/troubleshooting/index.adoc create mode 100644 doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc create mode 100644 doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc create mode 100644 doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc create mode 100644 doc/source/modules/cassandra/partials/nodetool_and_cqlsh.adoc create mode 100644 doc/source/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc create mode 100644 doc/source/modules/cassandra/partials/package_versions.adoc create mode 100644 doc/source/modules/cassandra/partials/tail_syslog.adoc delete mode 100644 doc/source/new/auditlogging.rst delete mode 100644 doc/source/new/fqllogging.rst delete mode 100644 doc/source/new/index.rst delete mode 100644 doc/source/new/java11.rst delete mode 100644 doc/source/new/messaging.rst delete mode 100644 doc/source/new/streaming.rst delete mode 100644 doc/source/new/transientreplication.rst delete mode 100644 doc/source/new/virtualtables.rst delete mode 100644 doc/source/operating/audit_logging.rst delete mode 100644 doc/source/operating/backups.rst delete mode 100644 doc/source/operating/bloom_filters.rst delete mode 100644 doc/source/operating/bulk_loading.rst delete mode 100644 doc/source/operating/cdc.rst delete mode 100644 doc/source/operating/compaction/index.rst delete mode 100644 doc/source/operating/compaction/lcs.rst delete mode 100644 doc/source/operating/compaction/stcs.rst delete mode 100644 doc/source/operating/compaction/twcs.rst delete mode 100644 doc/source/operating/compression.rst delete mode 100644 doc/source/operating/error_codes.txt delete mode 100644 doc/source/operating/hardware.rst delete mode 100644 doc/source/operating/hints.rst delete mode 100644 doc/source/operating/index.rst delete mode 100644 doc/source/operating/metrics.rst delete mode 100644 doc/source/operating/read_repair.rst delete mode 100644 doc/source/operating/repair.rst delete mode 100644 doc/source/operating/security.rst delete mode 100644 doc/source/operating/snitch.rst delete mode 100644 doc/source/operating/topo_changes.rst delete mode 100644 doc/source/plugins/index.rst delete mode 100644 doc/source/tools/cassandra_stress.rst delete mode 100644 doc/source/tools/cqlsh.rst delete mode 100644 doc/source/tools/index.rst delete mode 100644 doc/source/tools/sstable/index.rst delete mode 100644 doc/source/tools/sstable/sstabledump.rst delete mode 100644 doc/source/tools/sstable/sstableexpiredblockers.rst delete mode 100644 doc/source/tools/sstable/sstablelevelreset.rst delete mode 100644 doc/source/tools/sstable/sstableloader.rst delete mode 100644 doc/source/tools/sstable/sstablemetadata.rst delete mode 100644 doc/source/tools/sstable/sstableofflinerelevel.rst delete mode 100644 doc/source/tools/sstable/sstablerepairedset.rst delete mode 100644 doc/source/tools/sstable/sstablescrub.rst delete mode 100644 doc/source/tools/sstable/sstablesplit.rst delete mode 100644 doc/source/tools/sstable/sstableupgrade.rst delete mode 100644 doc/source/tools/sstable/sstableutil.rst delete mode 100644 doc/source/tools/sstable/sstableverify.rst delete mode 100644 doc/source/troubleshooting/finding_nodes.rst delete mode 100644 doc/source/troubleshooting/index.rst delete mode 100644 doc/source/troubleshooting/reading_logs.rst delete mode 100644 doc/source/troubleshooting/use_nodetool.rst delete mode 100644 doc/source/troubleshooting/use_tools.rst create mode 100644 source/tools/nodetool/nodetool.txt diff --git a/build.xml b/build.xml index 812efc0fcbff..de18369d1e21 100644 --- a/build.xml +++ b/build.xml @@ -304,14 +304,14 @@ - + -
{{ toc }}
- {% endif %} - {% endblock %} - - - - -
-
-
- {% block body %}{% endblock %} - - {% if next or prev %} - - {% endif %} -
-
-
- - diff --git a/doc/source/_theme/cassandra_theme/search.html b/doc/source/_theme/cassandra_theme/search.html deleted file mode 100644 index d5e26a993e10..000000000000 --- a/doc/source/_theme/cassandra_theme/search.html +++ /dev/null @@ -1,53 +0,0 @@ -{%- extends "layout.html" %} -{% block title %} -title: "{{_('Search')}}" -{% endblock %} -{% block extrafooter %} -extra-footer: ' - - - {# this is used when loading the search index using $.ajax fails, - such as on Chrome for documents on localhost #} - -' -{% endblock %} -{% block body %} - - - {% if search_performed %} -

{{ _('Search Results') }}

- {% if not search_results %} -

{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly.') }}

- {% endif %} - {% endif %} -
- {% if search_results %} -
    - {% for href, caption, context in search_results %} -
  • - {{ caption }} -

    {{ context|e }}

    -
  • - {% endfor %} -
- {% endif %} -
-{% endblock %} diff --git a/doc/source/_theme/cassandra_theme/theme.conf b/doc/source/_theme/cassandra_theme/theme.conf deleted file mode 100644 index 42c0704b507d..000000000000 --- a/doc/source/_theme/cassandra_theme/theme.conf +++ /dev/null @@ -1,3 +0,0 @@ -[theme] -inherit = basic -stylesheet = none diff --git a/doc/source/_util/cql.py b/doc/source/_util/cql.py deleted file mode 100644 index b1c8cde2a172..000000000000 --- a/doc/source/_util/cql.py +++ /dev/null @@ -1,267 +0,0 @@ -# -*- coding: utf-8 -*- -""" - CQL pygments lexer - ~~~~~~~~~~~~~~~~~~ - - Lexer for the Cassandra Query Language (CQL). - - This is heavily inspired from the pygments SQL lexer (and the Postgres one in particular) but adapted to CQL - keywords and specificities. - - TODO: This has been hacked quickly, but once it's more tested, we could submit it upstream. - In particular, we have alot of keywords whose meaning depends on the context and we could potentially improve - their handling. For instance, SET is a keyword, but also a type name (that's why currently we also consider - map and list as keywords, not types; we could disambiguate by looking if there is a '<' afterwards). Or things - like USERS, which can is used in some documentation example as a table name but is a keyword too (we could - only consider it a keyword if after LIST for instance). Similarly, type nanes are not reserved, so they and - are sometime used as column identifiers (also, timestamp is both a type and a keyword). I "think" we can - somewhat disambiguate through "states", but unclear how far it's worth going. - - We could also add the predefined functions? -""" - -import re - -from pygments.lexer import Lexer, RegexLexer, do_insertions, bygroups, words -from pygments.token import Punctuation, Whitespace, Error, \ - Text, Comment, Operator, Keyword, Name, String, Number, Generic, Literal -from pygments.lexers import get_lexer_by_name, ClassNotFound -from pygments.util import iteritems - -__all__ = [ 'CQLLexer' ] - -language_re = re.compile(r"\s+LANGUAGE\s+'?(\w+)'?", re.IGNORECASE) - -KEYWORDS = ( - 'SELECT', - 'FROM', - 'AS', - 'WHERE', - 'AND', - 'KEY', - 'KEYS', - 'ENTRIES', - 'FULL', - 'INSERT', - 'UPDATE', - 'WITH', - 'LIMIT', - 'PER', - 'PARTITION', - 'USING', - 'USE', - 'DISTINCT', - 'COUNT', - 'SET', - 'BEGIN', - 'UNLOGGED', - 'BATCH', - 'APPLY', - 'TRUNCATE', - 'DELETE', - 'IN', - 'CREATE', - 'KEYSPACE', - 'SCHEMA', - 'KEYSPACES', - 'COLUMNFAMILY', - 'TABLE', - 'MATERIALIZED', - 'VIEW', - 'INDEX', - 'CUSTOM', - 'ON', - 'TO', - 'DROP', - 'PRIMARY', - 'INTO', - 'VALUES', - 'TIMESTAMP', - 'TTL', - 'CAST', - 'ALTER', - 'RENAME', - 'ADD', - 'TYPE', - 'COMPACT', - 'STORAGE', - 'ORDER', - 'BY', - 'ASC', - 'DESC', - 'ALLOW', - 'FILTERING', - 'IF', - 'IS', - 'CONTAINS', - 'GRANT', - 'ALL', - 'PERMISSION', - 'PERMISSIONS', - 'OF', - 'REVOKE', - 'MODIFY', - 'AUTHORIZE', - 'DESCRIBE', - 'EXECUTE', - 'NORECURSIVE', - 'MBEAN', - 'MBEANS', - 'USER', - 'USERS', - 'ROLE', - 'ROLES', - 'SUPERUSER', - 'NOSUPERUSER', - 'PASSWORD', - 'LOGIN', - 'NOLOGIN', - 'OPTIONS', - 'CLUSTERING', - 'TOKEN', - 'WRITETIME', - 'NULL', - 'NOT', - 'EXISTS', - 'MAP', - 'LIST', - 'NAN', - 'INFINITY', - 'TUPLE', - 'TRIGGER', - 'STATIC', - 'FROZEN', - 'FUNCTION', - 'FUNCTIONS', - 'AGGREGATE', - 'SFUNC', - 'STYPE', - 'FINALFUNC', - 'INITCOND', - 'RETURNS', - 'CALLED', - 'INPUT', - 'LANGUAGE', - 'OR', - 'REPLACE', - 'JSON', - 'LIKE', -) - -DATATYPES = ( - 'ASCII', - 'BIGINT', - 'BLOB', - 'BOOLEAN', - 'COUNTER', - 'DATE', - 'DECIMAL', - 'DOUBLE', - 'EMPTY', - 'FLOAT', - 'INET', - 'INT', - 'SMALLINT', - 'TEXT', - 'TIME', - 'TIMESTAMP', - 'TIMEUUID', - 'TINYINT', - 'UUID', - 'VARCHAR', - 'VARINT', -) - -def language_callback(lexer, match): - """Parse the content of a $-string using a lexer - - The lexer is chosen looking for a nearby LANGUAGE or assumed as - java if no LANGUAGE has been found. - """ - l = None - m = language_re.match(lexer.text[max(0, match.start()-100):match.start()]) - if m is not None: - l = lexer._get_lexer(m.group(1)) - else: - l = lexer._get_lexer('java') - - # 1 = $, 2 = delimiter, 3 = $ - yield (match.start(1), String, match.group(1)) - yield (match.start(2), String.Delimiter, match.group(2)) - yield (match.start(3), String, match.group(3)) - # 4 = string contents - if l: - for x in l.get_tokens_unprocessed(match.group(4)): - yield x - else: - yield (match.start(4), String, match.group(4)) - # 5 = $, 6 = delimiter, 7 = $ - yield (match.start(5), String, match.group(5)) - yield (match.start(6), String.Delimiter, match.group(6)) - yield (match.start(7), String, match.group(7)) - - -class CQLLexer(RegexLexer): - """ - Lexer for the Cassandra Query Language. - """ - - name = 'Cassandra Query Language' - aliases = ['cql'] - filenames = ['*.cql'] - mimetypes = ['text/x-cql'] - - flags = re.IGNORECASE - tokens = { - 'root': [ - (r'\s+', Text), - (r'--.*\n?', Comment.Single), - (r'//.*\n?', Comment.Single), - (r'/\*', Comment.Multiline, 'multiline-comments'), - (r'(' + '|'.join(s.replace(" ", "\s+") - for s in DATATYPES) - + r')\b', Name.Builtin), - (words(KEYWORDS, suffix=r'\b'), Keyword), - (r'[+*/<>=~!@#%^&|`?-]+', Operator), - (r'\$\d+', Name.Variable), - - # Using Number instead of the more accurate Literal because the latter don't seem to e highlighted in most - # styles - (r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}', Number), # UUIDs - (r'0x[0-9a-fA-F]+', Number), # Blobs - - (r'([0-9]*\.[0-9]*|[0-9]+)(e[+-]?[0-9]+)?', Number.Float), - (r'[0-9]+', Number.Integer), - (r"((?:E|U&)?)(')", bygroups(String.Affix, String.Single), 'string'), - # quoted identifier - (r'((?:U&)?)(")', bygroups(String.Affix, String.Name), 'quoted-ident'), - (r'(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)', language_callback), - (r'[a-z_]\w*', Name), - (r'[;:()\[\]{},.]', Punctuation), - ], - 'multiline-comments': [ - (r'/\*', Comment.Multiline, 'multiline-comments'), - (r'\*/', Comment.Multiline, '#pop'), - (r'[^/*]+', Comment.Multiline), - (r'[/*]', Comment.Multiline) - ], - 'string': [ - (r"[^']+", String.Single), - (r"''", String.Single), - (r"'", String.Single, '#pop'), - ], - 'quoted-ident': [ - (r'[^"]+', String.Name), - (r'""', String.Name), - (r'"', String.Name, '#pop'), - ], - } - - def get_tokens_unprocessed(self, text, *args): - # Have a copy of the entire text to be used by `language_callback`. - self.text = text - for x in RegexLexer.get_tokens_unprocessed(self, text, *args): - yield x - - def _get_lexer(self, lang): - return get_lexer_by_name(lang, **self.options) diff --git a/doc/source/antora.yml b/doc/source/antora.yml new file mode 100644 index 000000000000..33e14f0cbcaf --- /dev/null +++ b/doc/source/antora.yml @@ -0,0 +1,6 @@ +name: Cassandra +version: '4.0' +prerelease: -rc.5 +nav: +- modules/ROOT/nav.adoc +- modules/cassandra/nav.adoc diff --git a/doc/source/architecture/dynamo.rst b/doc/source/architecture/dynamo.rst deleted file mode 100644 index 5b17d9a7ce6d..000000000000 --- a/doc/source/architecture/dynamo.rst +++ /dev/null @@ -1,537 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Dynamo -====== - -Apache Cassandra relies on a number of techniques from Amazon's `Dynamo -`_ -distributed storage key-value system. Each node in the Dynamo system has three -main components: - -- Request coordination over a partitioned dataset -- Ring membership and failure detection -- A local persistence (storage) engine - -Cassandra primarily draws from the first two clustering components, -while using a storage engine based on a Log Structured Merge Tree -(`LSM `_). -In particular, Cassandra relies on Dynamo style: - -- Dataset partitioning using consistent hashing -- Multi-master replication using versioned data and tunable consistency -- Distributed cluster membership and failure detection via a gossip protocol -- Incremental scale-out on commodity hardware - -Cassandra was designed this way to meet large-scale (PiB+) business-critical -storage requirements. In particular, as applications demanded full global -replication of petabyte scale datasets along with always available low-latency -reads and writes, it became imperative to design a new kind of database model -as the relational database systems of the time struggled to meet the new -requirements of global scale applications. - -Dataset Partitioning: Consistent Hashing ----------------------------------------- - -Cassandra achieves horizontal scalability by -`partitioning `_ -all data stored in the system using a hash function. Each partition is replicated -to multiple physical nodes, often across failure domains such as racks and even -datacenters. As every replica can independently accept mutations to every key -that it owns, every key must be versioned. Unlike in the original Dynamo paper -where deterministic versions and vector clocks were used to reconcile concurrent -updates to a key, Cassandra uses a simpler last write wins model where every -mutation is timestamped (including deletes) and then the latest version of data -is the "winning" value. Formally speaking, Cassandra uses a Last-Write-Wins Element-Set -conflict-free replicated data type for each CQL row (a.k.a `LWW-Element-Set CRDT -`_) -to resolve conflicting mutations on replica sets. - - .. _consistent-hashing-token-ring: - -Consistent Hashing using a Token Ring -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Cassandra partitions data over storage nodes using a special form of hashing -called `consistent hashing `_. -In naive data hashing, you typically allocate keys to buckets by taking a hash -of the key modulo the number of buckets. For example, if you want to distribute -data to 100 nodes using naive hashing you might assign every node to a bucket -between 0 and 100, hash the input key modulo 100, and store the data on the -associated bucket. In this naive scheme, however, adding a single node might -invalidate almost all of the mappings. - -Cassandra instead maps every node to one or more tokens on a continuous hash -ring, and defines ownership by hashing a key onto the ring and then "walking" -the ring in one direction, similar to the `Chord -`_ -algorithm. The main difference of consistent hashing to naive data hashing is -that when the number of nodes (buckets) to hash into changes, consistent -hashing only has to move a small fraction of the keys. - -For example, if we have an eight node cluster with evenly spaced tokens, and -a replication factor (RF) of 3, then to find the owning nodes for a key we -first hash that key to generate a token (which is just the hash of the key), -and then we "walk" the ring in a clockwise fashion until we encounter three -distinct nodes, at which point we have found all the replicas of that key. -This example of an eight node cluster with `RF=3` can be visualized as follows: - -.. figure:: images/ring.svg - :scale: 75 % - :alt: Dynamo Ring - -You can see that in a Dynamo like system, ranges of keys, also known as **token -ranges**, map to the same physical set of nodes. In this example, all keys that -fall in the token range excluding token 1 and including token 2 (`range(t1, t2]`) -are stored on nodes 2, 3 and 4. - -Multiple Tokens per Physical Node (a.k.a. `vnodes`) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Simple single token consistent hashing works well if you have many physical -nodes to spread data over, but with evenly spaced tokens and a small number of -physical nodes, incremental scaling (adding just a few nodes of capacity) is -difficult because there are no token selections for new nodes that can leave -the ring balanced. Cassandra seeks to avoid token imbalance because uneven -token ranges lead to uneven request load. For example, in the previous example -there is no way to add a ninth token without causing imbalance; instead we -would have to insert ``8`` tokens in the midpoints of the existing ranges. - -The Dynamo paper advocates for the use of "virtual nodes" to solve this -imbalance problem. Virtual nodes solve the problem by assigning multiple -tokens in the token ring to each physical node. By allowing a single physical -node to take multiple positions in the ring, we can make small clusters look -larger and therefore even with a single physical node addition we can make it -look like we added many more nodes, effectively taking many smaller pieces of -data from more ring neighbors when we add even a single node. - -Cassandra introduces some nomenclature to handle these concepts: - -- **Token**: A single position on the `dynamo` style hash ring. -- **Endpoint**: A single physical IP and port on the network. -- **Host ID**: A unique identifier for a single "physical" node, usually - present at one `Endpoint` and containing one or more `Tokens`. -- **Virtual Node** (or **vnode**): A `Token` on the hash ring owned by the same - physical node, one with the same `Host ID`. - -The mapping of **Tokens** to **Endpoints** gives rise to the **Token Map** -where Cassandra keeps track of what ring positions map to which physical -endpoints. For example, in the following figure we can represent an eight node -cluster using only four physical nodes by assigning two tokens to every node: - -.. figure:: images/vnodes.svg - :scale: 75 % - :alt: Virtual Tokens Ring - - -Multiple tokens per physical node provide the following benefits: - -1. When a new node is added it accepts approximately equal amounts of data from - other nodes in the ring, resulting in equal distribution of data across the - cluster. -2. When a node is decommissioned, it loses data roughly equally to other members - of the ring, again keeping equal distribution of data across the cluster. -3. If a node becomes unavailable, query load (especially token aware query load), - is evenly distributed across many other nodes. - -Multiple tokens, however, can also have disadvantages: - -1. Every token introduces up to ``2 * (RF - 1)`` additional neighbors on the - token ring, which means that there are more combinations of node failures - where we lose availability for a portion of the token ring. The more tokens - you have, `the higher the probability of an outage - `_. -2. Cluster-wide maintenance operations are often slowed. For example, as the - number of tokens per node is increased, the number of discrete repair - operations the cluster must do also increases. -3. Performance of operations that span token ranges could be affected. - -Note that in Cassandra ``2.x``, the only token allocation algorithm available -was picking random tokens, which meant that to keep balance the default number -of tokens per node had to be quite high, at ``256``. This had the effect of -coupling many physical endpoints together, increasing the risk of -unavailability. That is why in ``3.x +`` the new deterministic token allocator -was added which intelligently picks tokens such that the ring is optimally -balanced while requiring a much lower number of tokens per physical node. - - -Multi-master Replication: Versioned Data and Tunable Consistency ----------------------------------------------------------------- - -Cassandra replicates every partition of data to many nodes across the cluster -to maintain high availability and durability. When a mutation occurs, the -coordinator hashes the partition key to determine the token range the data -belongs to and then replicates the mutation to the replicas of that data -according to the :ref:`Replication Strategy `. - -All replication strategies have the notion of a **replication factor** (``RF``), -which indicates to Cassandra how many copies of the partition should exist. -For example with a ``RF=3`` keyspace, the data will be written to three -distinct **replicas**. Replicas are always chosen such that they are distinct -physical nodes which is achieved by skipping virtual nodes if needed. -Replication strategies may also choose to skip nodes present in the same failure -domain such as racks or datacenters so that Cassandra clusters can tolerate -failures of whole racks and even datacenters of nodes. - -.. _replication-strategy: - -Replication Strategy -^^^^^^^^^^^^^^^^^^^^ - -Cassandra supports pluggable **replication strategies**, which determine which -physical nodes act as replicas for a given token range. Every keyspace of -data has its own replication strategy. All production deployments should use -the :ref:`network-topology-strategy` while the :ref:`simple-strategy` replication -strategy is useful only for testing clusters where you do not yet know the -datacenter layout of the cluster. - -.. _network-topology-strategy: - -``NetworkTopologyStrategy`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -``NetworkTopologyStrategy`` allows a replication factor to be specified for each -datacenter in the cluster. Even if your cluster only uses a single datacenter, -``NetworkTopologyStrategy`` should be preferred over ``SimpleStrategy`` to make it -easier to add new physical or virtual datacenters to the cluster later. - -In addition to allowing the replication factor to be specified individually by -datacenter, ``NetworkTopologyStrategy`` also attempts to choose replicas within a -datacenter from different racks as specified by the :ref:`Snitch `. If -the number of racks is greater than or equal to the replication factor for the -datacenter, each replica is guaranteed to be chosen from a different rack. -Otherwise, each rack will hold at least one replica, but some racks may hold -more than one. Note that this rack-aware behavior has some potentially -`surprising implications -`_. For example, if -there are not an even number of nodes in each rack, the data load on the -smallest rack may be much higher. Similarly, if a single node is bootstrapped -into a brand new rack, it will be considered a replica for the entire ring. -For this reason, many operators choose to configure all nodes in a single -availability zone or similar failure domain as a single "rack". - -.. _simple-strategy: - -``SimpleStrategy`` -~~~~~~~~~~~~~~~~~~ - -``SimpleStrategy`` allows a single integer ``replication_factor`` to be defined. This determines the number of nodes that -should contain a copy of each row. For example, if ``replication_factor`` is 3, then three different nodes should store -a copy of each row. - -``SimpleStrategy`` treats all nodes identically, ignoring any configured datacenters or racks. To determine the replicas -for a token range, Cassandra iterates through the tokens in the ring, starting with the token range of interest. For -each token, it checks whether the owning node has been added to the set of replicas, and if it has not, it is added to -the set. This process continues until ``replication_factor`` distinct nodes have been added to the set of replicas. - -.. _transient-replication: - -Transient Replication -~~~~~~~~~~~~~~~~~~~~~ - -Transient replication is an experimental feature in Cassandra 4.0 not present -in the original Dynamo paper. It allows you to configure a subset of replicas -to only replicate data that hasn't been incrementally repaired. This allows you -to decouple data redundancy from availability. For instance, if you have a -keyspace replicated at rf 3, and alter it to rf 5 with 2 transient replicas, -you go from being able to tolerate one failed replica to being able to tolerate -two, without corresponding increase in storage usage. This is because 3 nodes -will replicate all the data for a given token range, and the other 2 will only -replicate data that hasn't been incrementally repaired. - -To use transient replication, you first need to enable it in -``cassandra.yaml``. Once enabled, both ``SimpleStrategy`` and -``NetworkTopologyStrategy`` can be configured to transiently replicate data. -You configure it by specifying replication factor as -``/` in the read path and -`Hinted handoff ` in the write path. - -These techniques are only best-effort, however, and to guarantee eventual -consistency Cassandra implements `anti-entropy repair ` where replicas -calculate hierarchical hash-trees over their datasets called `Merkle Trees -`_ that can then be compared across -replicas to identify mismatched data. Like the original Dynamo paper Cassandra -supports "full" repairs where replicas hash their entire dataset, create Merkle -trees, send them to each other and sync any ranges that don't match. - -Unlike the original Dynamo paper, Cassandra also implements sub-range repair -and incremental repair. Sub-range repair allows Cassandra to increase the -resolution of the hash trees (potentially down to the single partition level) -by creating a larger number of trees that span only a portion of the data -range. Incremental repair allows Cassandra to only repair the partitions that -have changed since the last repair. - -Tunable Consistency -^^^^^^^^^^^^^^^^^^^ - -Cassandra supports a per-operation tradeoff between consistency and -availability through **Consistency Levels**. Cassandra's consistency levels -are a version of Dynamo's ``R + W > N`` consistency mechanism where operators -could configure the number of nodes that must participate in reads (``R``) -and writes (``W``) to be larger than the replication factor (``N``). In -Cassandra, you instead choose from a menu of common consistency levels which -allow the operator to pick ``R`` and ``W`` behavior without knowing the -replication factor. Generally writes will be visible to subsequent reads when -the read consistency level contains enough nodes to guarantee a quorum intersection -with the write consistency level. - -The following consistency levels are available: - -``ONE`` - Only a single replica must respond. - -``TWO`` - Two replicas must respond. - -``THREE`` - Three replicas must respond. - -``QUORUM`` - A majority (n/2 + 1) of the replicas must respond. - -``ALL`` - All of the replicas must respond. - -``LOCAL_QUORUM`` - A majority of the replicas in the local datacenter (whichever datacenter the coordinator is in) must respond. - -``EACH_QUORUM`` - A majority of the replicas in each datacenter must respond. - -``LOCAL_ONE`` - Only a single replica must respond. In a multi-datacenter cluster, this also gaurantees that read requests are not - sent to replicas in a remote datacenter. - -``ANY`` - A single replica may respond, or the coordinator may store a hint. If a hint is stored, the coordinator will later - attempt to replay the hint and deliver the mutation to the replicas. This consistency level is only accepted for - write operations. - -Write operations **are always sent to all replicas**, regardless of consistency -level. The consistency level simply controls how many responses the coordinator -waits for before responding to the client. - -For read operations, the coordinator generally only issues read commands to -enough replicas to satisfy the consistency level. The one exception to this is -when speculative retry may issue a redundant read request to an extra replica -if the original replicas have not responded within a specified time window. - -Picking Consistency Levels -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -It is common to pick read and write consistency levels such that the replica -sets overlap, resulting in all acknowledged writes being visible to subsequent -reads. This is typically expressed in the same terms Dynamo does, in that ``W + -R > RF``, where ``W`` is the write consistency level, ``R`` is the read -consistency level, and ``RF`` is the replication factor. For example, if ``RF -= 3``, a ``QUORUM`` request will require responses from at least ``2/3`` -replicas. If ``QUORUM`` is used for both writes and reads, at least one of the -replicas is guaranteed to participate in *both* the write and the read request, -which in turn guarantees that the quorums will overlap and the write will be -visible to the read. - -In a multi-datacenter environment, ``LOCAL_QUORUM`` can be used to provide a -weaker but still useful guarantee: reads are guaranteed to see the latest write -from within the same datacenter. This is often sufficient as clients homed to -a single datacenter will read their own writes. - -If this type of strong consistency isn't required, lower consistency levels -like ``LOCAL_ONE`` or ``ONE`` may be used to improve throughput, latency, and -availability. With replication spanning multiple datacenters, ``LOCAL_ONE`` is -typically less available than ``ONE`` but is faster as a rule. Indeed ``ONE`` -will succeed if a single replica is available in any datacenter. - -Distributed Cluster Membership and Failure Detection ----------------------------------------------------- - -The replication protocols and dataset partitioning rely on knowing which nodes -are alive and dead in the cluster so that write and read operations can be -optimally routed. In Cassandra liveness information is shared in a distributed -fashion through a failure detection mechanism based on a gossip protocol. - -.. _gossip: - -Gossip -^^^^^^ - -Gossip is how Cassandra propagates basic cluster bootstrapping information such -as endpoint membership and internode network protocol versions. In Cassandra's -gossip system, nodes exchange state information not only about themselves but -also about other nodes they know about. This information is versioned with a -vector clock of ``(generation, version)`` tuples, where the generation is a -monotonic timestamp and version is a logical clock the increments roughly every -second. These logical clocks allow Cassandra gossip to ignore old versions of -cluster state just by inspecting the logical clocks presented with gossip -messages. - -Every node in the Cassandra cluster runs the gossip task independently and -periodically. Every second, every node in the cluster: - -1. Updates the local node's heartbeat state (the version) and constructs the - node's local view of the cluster gossip endpoint state. -2. Picks a random other node in the cluster to exchange gossip endpoint state - with. -3. Probabilistically attempts to gossip with any unreachable nodes (if one exists) -4. Gossips with a seed node if that didn't happen in step 2. - -When an operator first bootstraps a Cassandra cluster they designate certain -nodes as "seed" nodes. Any node can be a seed node and the only difference -between seed and non-seed nodes is seed nodes are allowed to bootstrap into the -ring without seeing any other seed nodes. Furthermore, once a cluster is -bootstrapped, seed nodes become "hotspots" for gossip due to step 4 above. - -As non-seed nodes must be able to contact at least one seed node in order to -bootstrap into the cluster, it is common to include multiple seed nodes, often -one for each rack or datacenter. Seed nodes are often chosen using existing -off-the-shelf service discovery mechanisms. - -.. note:: - Nodes do not have to agree on the seed nodes, and indeed once a cluster is - bootstrapped, newly launched nodes can be configured to use any existing - nodes as "seeds". The only advantage to picking the same nodes as seeds - is it increases their usefullness as gossip hotspots. - -Currently, gossip also propagates token metadata and schema *version* -information. This information forms the control plane for scheduling data -movements and schema pulls. For example, if a node sees a mismatch in schema -version in gossip state, it will schedule a schema sync task with the other -nodes. As token information propagates via gossip it is also the control plane -for teaching nodes which endpoints own what data. - -Ring Membership and Failure Detection -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Gossip forms the basis of ring membership, but the **failure detector** -ultimately makes decisions about if nodes are ``UP`` or ``DOWN``. Every node in -Cassandra runs a variant of the `Phi Accrual Failure Detector -`_, -in which every node is constantly making an independent decision of if their -peer nodes are available or not. This decision is primarily based on received -heartbeat state. For example, if a node does not see an increasing heartbeat -from a node for a certain amount of time, the failure detector "convicts" that -node, at which point Cassandra will stop routing reads to it (writes will -typically be written to hints). If/when the node starts heartbeating again, -Cassandra will try to reach out and connect, and if it can open communication -channels it will mark that node as available. - -.. note:: - UP and DOWN state are local node decisions and are not propagated with - gossip. Heartbeat state is propagated with gossip, but nodes will not - consider each other as "UP" until they can successfully message each other - over an actual network channel. - -Cassandra will never remove a node from gossip state without explicit -instruction from an operator via a decommission operation or a new node -bootstrapping with a ``replace_address_first_boot`` option. This choice is -intentional to allow Cassandra nodes to temporarily fail without causing data -to needlessly re-balance. This also helps to prevent simultaneous range -movements, where multiple replicas of a token range are moving at the same -time, which can violate monotonic consistency and can even cause data loss. - -Incremental Scale-out on Commodity Hardware --------------------------------------------- - -Cassandra scales-out to meet the requirements of growth in data size and -request rates. Scaling-out means adding additional nodes to the ring, and -every additional node brings linear improvements in compute and storage. In -contrast, scaling-up implies adding more capacity to the existing database -nodes. Cassandra is also capable of scale-up, and in certain environments it -may be preferable depending on the deployment. Cassandra gives operators the -flexibility to chose either scale-out or scale-up. - -One key aspect of Dynamo that Cassandra follows is to attempt to run on -commodity hardware, and many engineering choices are made under this -assumption. For example, Cassandra assumes nodes can fail at any time, -auto-tunes to make the best use of CPU and memory resources available and makes -heavy use of advanced compression and caching techniques to get the most -storage out of limited memory and storage capabilities. - -Simple Query Model -^^^^^^^^^^^^^^^^^^ - -Cassandra, like Dynamo, chooses not to provide cross-partition transactions -that are common in SQL Relational Database Management Systems (RDBMS). This -both gives the programmer a simpler read and write API, and allows Cassandra to -more easily scale horizontally since multi-partition transactions spanning -multiple nodes are notoriously difficult to implement and typically very -latent. - -Instead, Cassanda chooses to offer fast, consistent, latency at any scale for -single partition operations, allowing retrieval of entire partitions or only -subsets of partitions based on primary key filters. Furthermore, Cassandra does -support single partition compare and swap functionality via the lightweight -transaction CQL API. - -Simple Interface for Storing Records -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Cassandra, in a slight departure from Dynamo, chooses a storage interface that -is more sophisticated then "simple key value" stores but significantly less -complex than SQL relational data models. Cassandra presents a wide-column -store interface, where partitions of data contain multiple rows, each of which -contains a flexible set of individually typed columns. Every row is uniquely -identified by the partition key and one or more clustering keys, and every row -can have as many columns as needed. - -This allows users to flexibly add new columns to existing datasets as new -requirements surface. Schema changes involve only metadata changes and run -fully concurrently with live workloads. Therefore, users can safely add columns -to existing Cassandra databases while remaining confident that query -performance will not degrade. diff --git a/doc/source/architecture/guarantees.rst b/doc/source/architecture/guarantees.rst deleted file mode 100644 index 3cff808ec3f9..000000000000 --- a/doc/source/architecture/guarantees.rst +++ /dev/null @@ -1,76 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. _guarantees: - -Guarantees -============== -Apache Cassandra is a highly scalable and reliable database. Cassandra is used in web based applications that serve large number of clients and the quantity of data processed is web-scale (Petabyte) large. Cassandra makes some guarantees about its scalability, availability and reliability. To fully understand the inherent limitations of a storage system in an environment in which a certain level of network partition failure is to be expected and taken into account when designing the system it is important to first briefly introduce the CAP theorem. - -What is CAP? -^^^^^^^^^^^^^ -According to the CAP theorem it is not possible for a distributed data store to provide more than two of the following guarantees simultaneously. - -- Consistency: Consistency implies that every read receives the most recent write or errors out -- Availability: Availability implies that every request receives a response. It is not guaranteed that the response contains the most recent write or data. -- Partition tolerance: Partition tolerance refers to the tolerance of a storage system to failure of a network partition. Even if some of the messages are dropped or delayed the system continues to operate. - -CAP theorem implies that when using a network partition, with the inherent risk of partition failure, one has to choose between consistency and availability and both cannot be guaranteed at the same time. CAP theorem is illustrated in Figure 1. - -.. figure:: Figure_1_guarantees.jpg - -Figure 1. CAP Theorem - -High availability is a priority in web based applications and to this objective Cassandra chooses Availability and Partition Tolerance from the CAP guarantees, compromising on data Consistency to some extent. - -Cassandra makes the following guarantees. - -- High Scalability -- High Availability -- Durability -- Eventual Consistency of writes to a single table -- Lightweight transactions with linearizable consistency -- Batched writes across multiple tables are guaranteed to succeed completely or not at all -- Secondary indexes are guaranteed to be consistent with their local replicas data - -High Scalability -^^^^^^^^^^^^^^^^^ -Cassandra is a highly scalable storage system in which nodes may be added/removed as needed. Using gossip-based protocol a unified and consistent membership list is kept at each node. - -High Availability -^^^^^^^^^^^^^^^^^^^ -Cassandra guarantees high availability of data by implementing a fault-tolerant storage system. Failure detection in a node is detected using a gossip-based protocol. - -Durability -^^^^^^^^^^^^ -Cassandra guarantees data durability by using replicas. Replicas are multiple copies of a data stored on different nodes in a cluster. In a multi-datacenter environment the replicas may be stored on different datacenters. If one replica is lost due to unrecoverable node/datacenter failure the data is not completely lost as replicas are still available. - -Eventual Consistency -^^^^^^^^^^^^^^^^^^^^^^ -Meeting the requirements of performance, reliability, scalability and high availability in production Cassandra is an eventually consistent storage system. Eventually consistent implies that all updates reach all replicas eventually. Divergent versions of the same data may exist temporarily but they are eventually reconciled to a consistent state. Eventual consistency is a tradeoff to achieve high availability and it involves some read and write latencies. - -Lightweight transactions with linearizable consistency -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Data must be read and written in a sequential order. Paxos consensus protocol is used to implement lightweight transactions. Paxos protocol implements lightweight transactions that are able to handle concurrent operations using linearizable consistency. Linearizable consistency is sequential consistency with real-time constraints and it ensures transaction isolation with compare and set (CAS) transaction. With CAS replica data is compared and data that is found to be out of date is set to the most consistent value. Reads with linearizable consistency allow reading the current state of the data, which may possibly be uncommitted, without making a new addition or update. - -Batched Writes -^^^^^^^^^^^^^^^ - -The guarantee for batched writes across multiple tables is that they will eventually succeed, or none will. Batch data is first written to batchlog system data, and when the batch data has been successfully stored in the cluster the batchlog data is removed. The batch is replicated to another node to ensure the full batch completes in the event the coordinator node fails. - -Secondary Indexes -^^^^^^^^^^^^^^^^^^ -A secondary index is an index on a column and is used to query a table that is normally not queryable. Secondary indexes when built are guaranteed to be consistent with their local replicas. diff --git a/doc/source/architecture/index.rst b/doc/source/architecture/index.rst deleted file mode 100644 index 58eda137795e..000000000000 --- a/doc/source/architecture/index.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Architecture -============ - -This section describes the general architecture of Apache Cassandra. - -.. toctree:: - :maxdepth: 2 - - overview - dynamo - storage_engine - guarantees - diff --git a/doc/source/architecture/overview.rst b/doc/source/architecture/overview.rst deleted file mode 100644 index e5fcbe3b51a5..000000000000 --- a/doc/source/architecture/overview.rst +++ /dev/null @@ -1,114 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. _overview: - -Overview -======== - -Apache Cassandra is an open source, distributed, NoSQL database. It presents -a partitioned wide column storage model with eventually consistent semantics. - -Apache Cassandra was initially designed at `Facebook -`_ -using a staged event-driven architecture (`SEDA -`_) to implement a combination of -Amazon’s `Dynamo -`_ -distributed storage and replication techniques combined with Google's `Bigtable -`_ -data and storage engine model. Dynamo and Bigtable were both developed to meet -emerging requirements for scalable, reliable and highly available storage -systems, but each had areas that could be improved. - -Cassandra was designed as a best in class combination of both systems to meet -emerging large scale, both in data footprint and query volume, storage -requirements. As applications began to require full global replication and -always available low-latency reads and writes, it became imperative to design a -new kind of database model as the relational database systems of the time -struggled to meet the new requirements of global scale applications. - -Systems like Cassandra are designed for these challenges and seek the -following design objectives: - -- Full multi-master database replication -- Global availability at low latency -- Scaling out on commodity hardware -- Linear throughput increase with each additional processor -- Online load balancing and cluster growth -- Partitioned key-oriented queries -- Flexible schema - -Features --------- - -Cassandra provides the Cassandra Query Language (CQL), an SQL-like language, -to create and update database schema and access data. CQL allows users to -organize data within a cluster of Cassandra nodes using: - -- **Keyspace**: defines how a dataset is replicated, for example in which - datacenters and how many copies. Keyspaces contain tables. -- **Table**: defines the typed schema for a collection of partitions. Cassandra - tables have flexible addition of new columns to tables with zero downtime. - Tables contain partitions, which contain partitions, which contain columns. -- **Partition**: defines the mandatory part of the primary key all rows in - Cassandra must have. All performant queries supply the partition key in - the query. -- **Row**: contains a collection of columns identified by a unique primary key - made up of the partition key and optionally additional clustering keys. -- **Column**: A single datum with a type which belong to a row. - -CQL supports numerous advanced features over a partitioned dataset such as: - -- Single partition lightweight transactions with atomic compare and set - semantics. -- User-defined types, functions and aggregates -- Collection types including sets, maps, and lists. -- Local secondary indices -- (Experimental) materialized views - -Cassandra explicitly chooses not to implement operations that require cross -partition coordination as they are typically slow and hard to provide highly -available global semantics. For example Cassandra does not support: - -- Cross partition transactions -- Distributed joins -- Foreign keys or referential integrity. - -Operating ---------- - -Apache Cassandra configuration settings are configured in the ``cassandra.yaml`` -file that can be edited by hand or with the aid of configuration management tools. -Some settings can be manipulated live using an online interface, but others -require a restart of the database to take effect. - -Cassandra provides tools for managing a cluster. The ``nodetool`` command -interacts with Cassandra's live control interface, allowing runtime manipulation -of many settings from ``cassandra.yaml``. The ``auditlogviewer`` is used -to view the audit logs. The ``fqltool`` is used to view, replay and compare -full query logs. The ``auditlogviewer`` and ``fqltool`` are new tools in -Apache Cassandra 4.0. - -In addition, Cassandra supports out of the box atomic snapshot functionality, -which presents a point in time snapshot of Cassandra's data for easy -integration with many backup tools. Cassandra also supports incremental backups -where data can be backed up as it is written. - -Apache Cassandra 4.0 has added several new features including virtual tables. -transient replication, audit logging, full query logging, and support for Java -11. Two of these features are experimental: transient replication and Java 11 -support. diff --git a/doc/source/architecture/storage_engine.rst b/doc/source/architecture/storage_engine.rst deleted file mode 100644 index 23b738de759f..000000000000 --- a/doc/source/architecture/storage_engine.rst +++ /dev/null @@ -1,208 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Storage Engine --------------- - -.. _commit-log: - -CommitLog -^^^^^^^^^ - -Commitlogs are an append only log of all mutations local to a Cassandra node. Any data written to Cassandra will first be written to a commit log before being written to a memtable. This provides durability in the case of unexpected shutdown. On startup, any mutations in the commit log will be applied to memtables. - -All mutations write optimized by storing in commitlog segments, reducing the number of seeks needed to write to disk. Commitlog Segments are limited by the "commitlog_segment_size_in_mb" option, once the size is reached, a new commitlog segment is created. Commitlog segments can be archived, deleted, or recycled once all its data has been flushed to SSTables. Commitlog segments are truncated when Cassandra has written data older than a certain point to the SSTables. Running "nodetool drain" before stopping Cassandra will write everything in the memtables to SSTables and remove the need to sync with the commitlogs on startup. - -- ``commitlog_segment_size_in_mb``: The default size is 32, which is almost always fine, but if you are archiving commitlog segments (see commitlog_archiving.properties), then you probably want a finer granularity of archiving; 8 or 16 MB is reasonable. Max mutation size is also configurable via max_mutation_size_in_kb setting in cassandra.yaml. The default is half the size commitlog_segment_size_in_mb * 1024. - -***NOTE: If max_mutation_size_in_kb is set explicitly then commitlog_segment_size_in_mb must be set to at least twice the size of max_mutation_size_in_kb / 1024*** - -*Default Value:* 32 - -Commitlogs are an append only log of all mutations local to a Cassandra node. Any data written to Cassandra will first be written to a commit log before being written to a memtable. This provides durability in the case of unexpected shutdown. On startup, any mutations in the commit log will be applied. - -- ``commitlog_sync``: may be either “periodic” or “batch.” - - - ``batch``: In batch mode, Cassandra won’t ack writes until the commit log has been fsynced to disk. It will wait "commitlog_sync_batch_window_in_ms" milliseconds between fsyncs. This window should be kept short because the writer threads will be unable to do extra work while waiting. You may need to increase concurrent_writes for the same reason. - - - ``commitlog_sync_batch_window_in_ms``: Time to wait between "batch" fsyncs - *Default Value:* 2 - - - ``periodic``: In periodic mode, writes are immediately ack'ed, and the CommitLog is simply synced every "commitlog_sync_period_in_ms" milliseconds. - - - ``commitlog_sync_period_in_ms``: Time to wait between "periodic" fsyncs - *Default Value:* 10000 - -*Default Value:* batch - -*** NOTE: In the event of an unexpected shutdown, Cassandra can lose up to the sync period or more if the sync is delayed. If using "batch" mode, it is recommended to store commitlogs in a separate, dedicated device.** - - -- ``commitlog_directory``: This option is commented out by default When running on magnetic HDD, this should be a separate spindle than the data directories. If not set, the default directory is $CASSANDRA_HOME/data/commitlog. - -*Default Value:* /var/lib/cassandra/commitlog - -- ``commitlog_compression``: Compression to apply to the commitlog. If omitted, the commit log will be written uncompressed. LZ4, Snappy, Deflate and Zstd compressors are supported. - -(Default Value: (complex option):: - - # - class_name: LZ4Compressor - # parameters: - # - - -- ``commitlog_total_space_in_mb``: Total space to use for commit logs on disk. - -If space gets above this value, Cassandra will flush every dirty CF in the oldest segment and remove it. So a small total commitlog space will tend to cause more flush activity on less-active columnfamilies. - -The default value is the smaller of 8192, and 1/4 of the total space of the commitlog volume. - -*Default Value:* 8192 - -.. _memtables: - -Memtables -^^^^^^^^^ - -Memtables are in-memory structures where Cassandra buffers writes. In general, there is one active memtable per table. -Eventually, memtables are flushed onto disk and become immutable `SSTables`_. This can be triggered in several -ways: - -- The memory usage of the memtables exceeds the configured threshold (see ``memtable_cleanup_threshold``) -- The :ref:`commit-log` approaches its maximum size, and forces memtable flushes in order to allow commitlog segments to - be freed - -Memtables may be stored entirely on-heap or partially off-heap, depending on ``memtable_allocation_type``. - -SSTables -^^^^^^^^ - -SSTables are the immutable data files that Cassandra uses for persisting data on disk. - -As SSTables are flushed to disk from :ref:`memtables` or are streamed from other nodes, Cassandra triggers compactions -which combine multiple SSTables into one. Once the new SSTable has been written, the old SSTables can be removed. - -Each SSTable is comprised of multiple components stored in separate files: - -``Data.db`` - The actual data, i.e. the contents of rows. - -``Index.db`` - An index from partition keys to positions in the ``Data.db`` file. For wide partitions, this may also include an - index to rows within a partition. - -``Summary.db`` - A sampling of (by default) every 128th entry in the ``Index.db`` file. - -``Filter.db`` - A Bloom Filter of the partition keys in the SSTable. - -``CompressionInfo.db`` - Metadata about the offsets and lengths of compression chunks in the ``Data.db`` file. - -``Statistics.db`` - Stores metadata about the SSTable, including information about timestamps, tombstones, clustering keys, compaction, - repair, compression, TTLs, and more. - -``Digest.crc32`` - A CRC-32 digest of the ``Data.db`` file. - -``TOC.txt`` - A plain text list of the component files for the SSTable. - -Within the ``Data.db`` file, rows are organized by partition. These partitions are sorted in token order (i.e. by a -hash of the partition key when the default partitioner, ``Murmur3Partition``, is used). Within a partition, rows are -stored in the order of their clustering keys. - -SSTables can be optionally compressed using block-based compression. - -SSTable Versions -^^^^^^^^^^^^^^^^ - -This section was created using the following -`gist `_ -which utilized this original -`source `_. - -The version numbers, to date are: - -Version 0 -~~~~~~~~~ - -* b (0.7.0): added version to sstable filenames -* c (0.7.0): bloom filter component computes hashes over raw key bytes instead of strings -* d (0.7.0): row size in data component becomes a long instead of int -* e (0.7.0): stores undecorated keys in data and index components -* f (0.7.0): switched bloom filter implementations in data component -* g (0.8): tracks flushed-at context in metadata component - -Version 1 -~~~~~~~~~ - -* h (1.0): tracks max client timestamp in metadata component -* hb (1.0.3): records compression ration in metadata component -* hc (1.0.4): records partitioner in metadata component -* hd (1.0.10): includes row tombstones in maxtimestamp -* he (1.1.3): includes ancestors generation in metadata component -* hf (1.1.6): marker that replay position corresponds to 1.1.5+ millis-based id (see CASSANDRA-4782) -* ia (1.2.0): - - * column indexes are promoted to the index file - * records estimated histogram of deletion times in tombstones - * bloom filter (keys and columns) upgraded to Murmur3 -* ib (1.2.1): tracks min client timestamp in metadata component -* ic (1.2.5): omits per-row bloom filter of column names - -Version 2 -~~~~~~~~~ - -* ja (2.0.0): - - * super columns are serialized as composites (note that there is no real format change, this is mostly a marker to know if we should expect super columns or not. We do need a major version bump however, because we should not allow streaming of super columns into this new format) - * tracks max local deletiontime in sstable metadata - * records bloom_filter_fp_chance in metadata component - * remove data size and column count from data file (CASSANDRA-4180) - * tracks max/min column values (according to comparator) -* jb (2.0.1): - - * switch from crc32 to adler32 for compression checksums - * checksum the compressed data -* ka (2.1.0): - - * new Statistics.db file format - * index summaries can be downsampled and the sampling level is persisted - * switch uncompressed checksums to adler32 - * tracks presense of legacy (local and remote) counter shards -* la (2.2.0): new file name format -* lb (2.2.7): commit log lower bound included - -Version 3 -~~~~~~~~~ - -* ma (3.0.0): - - * swap bf hash order - * store rows natively -* mb (3.0.7, 3.7): commit log lower bound included -* mc (3.0.8, 3.9): commit log intervals included - -Example Code -~~~~~~~~~~~~ - -The following example is useful for finding all sstables that do not match the "ib" SSTable version - -.. code-block:: bash - - find /var/lib/cassandra/data/ -type f | grep -v -- -ib- | grep -v "/snapshots" diff --git a/doc/source/bugs.rst b/doc/source/bugs.rst deleted file mode 100644 index 32d676f9d3f4..000000000000 --- a/doc/source/bugs.rst +++ /dev/null @@ -1,30 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Reporting Bugs -============== - -If you encounter a problem with Cassandra, the first places to ask for help are the :ref:`user mailing list -` and the ``cassandra`` :ref:`Slack room `. - -If, after having asked for help, you suspect that you have found a bug in Cassandra, you should report it by opening a -ticket through the `Apache Cassandra JIRA `__. Please provide as much -details as you can on your problem, and don't forget to indicate which version of Cassandra you are running and on which -environment. - -Further details on how to contribute can be found at our :doc:`development/index` section. Please note that the source of -this documentation is part of the Cassandra git repository and hence contributions to the documentation should follow the -same path. diff --git a/doc/source/conf.py b/doc/source/conf.py deleted file mode 100644 index 48f87a89851a..000000000000 --- a/doc/source/conf.py +++ /dev/null @@ -1,441 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# -# Apache Cassandra Documentation documentation build configuration file -# -# This file is execfile()d with the current directory set to its containing -# dir. -import re, sys, os - -# Finds out the version (so we don't have to manually edit that file every -# time we change the version) -cassandra_build_file = '../../build.xml' -with open(cassandra_build_file) as f: - m = re.search("name=\"base\.version\" value=\"([^\"]+)\"", f.read()) - if not m or m.lastindex != 1: - raise RuntimeException("Problem finding version in build.xml file, this shouldn't happen.") - cassandra_version = m.group(1) - -def setup(sphinx): - sys.path.insert(0, os.path.abspath('./source/_util')) - from cql import CQLLexer - sphinx.add_lexer("cql", CQLLexer()) - -# Ugly way to find out if we're building for the website (the Makefile creates an empty file for us) -build_for_website = os.path.isfile('.build_for_website') - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.todo', - 'sphinx.ext.mathjax', - 'sphinx.ext.ifconfig', - 'sphinx.ext.extlinks', -] - -extlinks = { - 'jira': ( 'https://issues.apache.org/jira/browse/CASSANDRA-%s', 'CASSANDRA-') -} - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -source_suffix = ['.rst'] - -# The encoding of source files. -# -# source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Apache Cassandra' -copyright = u'2020, The Apache Cassandra team' -author = u'The Apache Cassandra team' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -version = cassandra_version - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# -# today = '' -# -# Else, today_fmt is used as the format for a strftime call. -# -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - - -# -- Options for HTML output ---------------------------------------------- - -if build_for_website: - html_theme = 'cassandra_theme' - html_theme_path = ['./_theme'] -else: - html_theme = 'sphinx_rtd_theme' - -html_context = { 'extra_css_files': [ '_static/extra.css' ] } - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# The name for this set of Sphinx documents. -# " v documentation" by default. -# -html_title = u'Apache Cassandra Documentation v%s' % version - -# A shorter title for the navigation bar. Default is the same as html_title. -# -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# -# html_logo = None - -# The name of an image file (relative to this directory) to use as a favicon of -# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# -# html_extra_path = [] - -# If not None, a 'Last updated on:' timestamp is inserted at every page -# bottom, using the given strftime format. -# The empty string is equivalent to '%b %d, %Y'. -# -# html_last_updated_fmt = None - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# -html_additional_pages = { - 'index': 'indexcontent.html' -} - -# If false, no module index is generated. -# -# html_domain_indices = True - -# If false, no index is generated. -# -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' -# -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# 'ja' uses this config value. -# 'zh' user can custom change `jieba` dictionary path. -# -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'ApacheCassandraDocumentationdoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'ApacheCassandra.tex', u'Apache Cassandra Documentation', - u'The Apache Cassandra team', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# -# latex_use_parts = False - -# If true, show page references after internal links. -# -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# -# latex_appendices = [] - -# If false, no module index is generated. -# -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'apachecassandra', u'Apache Cassandra Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -# -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'ApacheCassandra', u'Apache Cassandra Documentation', - author, 'ApacheCassandraDocumentation', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -# -# texinfo_appendices = [] - -# If false, no module index is generated. -# -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# -# texinfo_no_detailmenu = False - - -# -- Options for Epub output ---------------------------------------------- - -# Bibliographic Dublin Core info. -epub_title = project -epub_author = author -epub_publisher = author -epub_copyright = copyright - -# The basename for the epub file. It defaults to the project name. -# epub_basename = project - -# The HTML theme for the epub output. Since the default themes are not -# optimized for small screen space, using the same theme for HTML and epub -# output is usually not wise. This defaults to 'epub', a theme designed to save -# visual space. -# -# epub_theme = 'epub' - -# The language of the text. It defaults to the language option -# or 'en' if the language is not set. -# -# epub_language = '' - -# The scheme of the identifier. Typical schemes are ISBN or URL. -# epub_scheme = '' - -# The unique identifier of the text. This can be a ISBN number -# or the project homepage. -# -# epub_identifier = '' - -# A unique identification for the text. -# -# epub_uid = '' - -# A tuple containing the cover image and cover page html template filenames. -# -# epub_cover = () - -# A sequence of (type, uri, title) tuples for the guide element of content.opf. -# -# epub_guide = () - -# HTML files that should be inserted before the pages created by sphinx. -# The format is a list of tuples containing the path and title. -# -# epub_pre_files = [] - -# HTML files that should be inserted after the pages created by sphinx. -# The format is a list of tuples containing the path and title. -# -# epub_post_files = [] - -# A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] - -# The depth of the table of contents in toc.ncx. -# -# epub_tocdepth = 3 - -# Allow duplicate toc entries. -# -# epub_tocdup = True - -# Choose between 'default' and 'includehidden'. -# -# epub_tocscope = 'default' - -# Fix unsupported image types using the Pillow. -# -# epub_fix_images = False - -# Scale large images. -# -# epub_max_image_width = 0 - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# -# epub_show_urls = 'inline' - -# If false, no index is generated. -# -# epub_use_index = True diff --git a/doc/source/configuration/cass_cl_archive_file.rst b/doc/source/configuration/cass_cl_archive_file.rst deleted file mode 100644 index fc144401bb74..000000000000 --- a/doc/source/configuration/cass_cl_archive_file.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. _cassandra-cl-archive: - -commitlog-archiving.properties file -================================ - -The ``commitlog-archiving.properties`` configuration file can optionally set commands that are executed when archiving or restoring a commitlog segment. - -=========================== -Options -=========================== - -``archive_command=`` ------- -One command can be inserted with %path and %name arguments. %path is the fully qualified path of the commitlog segment to archive. %name is the filename of the commitlog. STDOUT, STDIN, or multiple commands cannot be executed. If multiple commands are required, add a pointer to a script in this option. - -**Example:** archive_command=/bin/ln %path /backup/%name - -**Default value:** blank - -``restore_command=`` ------- -One command can be inserted with %from and %to arguments. %from is the fully qualified path to an archived commitlog segment using the specified restore directories. %to defines the directory to the live commitlog location. - -**Example:** restore_command=/bin/cp -f %from %to - -**Default value:** blank - -``restore_directories=`` ------- -Defines the directory to scan the recovery files into. - -**Default value:** blank - -``restore_point_in_time=`` ------- -Restore mutations created up to and including this timestamp in GMT in the format ``yyyy:MM:dd HH:mm:ss``. Recovery will continue through the segment when the first client-supplied timestamp greater than this time is encountered, but only mutations less than or equal to this timestamp will be applied. - -**Example:** 2020:04:31 20:43:12 - -**Default value:** blank - -``precision=`` ------- -Precision of the timestamp used in the inserts. Choice is generally MILLISECONDS or MICROSECONDS - -**Default value:** MICROSECONDS diff --git a/doc/source/configuration/cass_env_sh_file.rst b/doc/source/configuration/cass_env_sh_file.rst deleted file mode 100644 index 457f39f7b12b..000000000000 --- a/doc/source/configuration/cass_env_sh_file.rst +++ /dev/null @@ -1,132 +0,0 @@ -.. _cassandra-envsh: - -cassandra-env.sh file -===================== - -The ``cassandra-env.sh`` bash script file can be used to pass additional options to the Java virtual machine (JVM), such as maximum and minimum heap size, rather than setting them in the environment. If the JVM settings are static and do not need to be computed from the node characteristics, the :ref:`cassandra-jvm-options` files should be used instead. For example, commonly computed values are the heap sizes, using the system values. - -For example, add ``JVM_OPTS="$JVM_OPTS -Dcassandra.load_ring_state=false"`` to the ``cassandra_env.sh`` file -and run the command-line ``cassandra`` to start. The option is set from the ``cassandra-env.sh`` file, and is equivalent to starting Cassandra with the command-line option ``cassandra -Dcassandra.load_ring_state=false``. - -The ``-D`` option specifies the start-up parameters in both the command line and ``cassandra-env.sh`` file. The following options are available: - -``cassandra.auto_bootstrap=false`` ----------------------------------- -Facilitates setting auto_bootstrap to false on initial set-up of the cluster. The next time you start the cluster, you do not need to change the ``cassandra.yaml`` file on each node to revert to true, the default value. - -``cassandra.available_processors=`` ---------------------------------------------------------- -In a multi-instance deployment, multiple Cassandra instances will independently assume that all CPU processors are available to it. This setting allows you to specify a smaller set of processors. - -``cassandra.boot_without_jna=true`` ------------------------------------ -If JNA fails to initialize, Cassandra fails to boot. Use this command to boot Cassandra without JNA. - -``cassandra.config=`` --------------------------------- -The directory location of the ``cassandra.yaml file``. The default location depends on the type of installation. - -``cassandra.ignore_dynamic_snitch_severity=true|false`` -------------------------------------------------------- -Setting this property to true causes the dynamic snitch to ignore the severity indicator from gossip when scoring nodes. Explore failure detection and recovery and dynamic snitching for more information. - -**Default:** false - -``cassandra.initial_token=`` ------------------------------------ -Use when virtual nodes (vnodes) are not used. Sets the initial partitioner token for a node the first time the node is started. -Note: Vnodes are highly recommended as they automatically select tokens. - -**Default:** disabled - -``cassandra.join_ring=true|false`` ----------------------------------- -Set to false to start Cassandra on a node but not have the node join the cluster. -You can use ``nodetool join`` and a JMX call to join the ring afterwards. - -**Default:** true - -``cassandra.load_ring_state=true|false`` ----------------------------------------- -Set to false to clear all gossip state for the node on restart. - -**Default:** true - -``cassandra.metricsReporterConfigFile=`` --------------------------------------------------- -Enable pluggable metrics reporter. Explore pluggable metrics reporting for more information. - -``cassandra.partitioner=`` ---------------------------------------- -Set the partitioner. - -**Default:** org.apache.cassandra.dht.Murmur3Partitioner - -``cassandra.prepared_statements_cache_size_in_bytes=`` ------------------------------------------------------------------- -Set the cache size for prepared statements. - -``cassandra.replace_address=|`` --------------------------------------------------------------------------------------------- -To replace a node that has died, restart a new node in its place specifying the ``listen_address`` or ``broadcast_address`` that the new node is assuming. The new node must not have any data in its data directory, the same state as before bootstrapping. -Note: The ``broadcast_address`` defaults to the ``listen_address`` except when using the ``Ec2MultiRegionSnitch``. - -``cassandra.replayList=`` --------------------------------- -Allow restoring specific tables from an archived commit log. - -``cassandra.ring_delay_ms=`` ------------------------------------------- -Defines the amount of time a node waits to hear from other nodes before formally joining the ring. - -**Default:** 1000ms - -``cassandra.native_transport_port=`` ------------------------------------------- -Set the port on which the CQL native transport listens for clients. - -**Default:** 9042 - -``cassandra.rpc_port=`` ------------------------------ -Set the port for the Thrift RPC service, which is used for client connections. - -**Default:** 9160 - -``cassandra.storage_port=`` ---------------------------------- -Set the port for inter-node communication. - -**Default:** 7000 - -``cassandra.ssl_storage_port=`` -------------------------------------- -Set the SSL port for encrypted communication. - -**Default:** 7001 - -``cassandra.start_native_transport=true|false`` ------------------------------------------------ -Enable or disable the native transport server. See ``start_native_transport`` in ``cassandra.yaml``. - -**Default:** true - -``cassandra.start_rpc=true|false`` ----------------------------------- -Enable or disable the Thrift RPC server. - -**Default:** true - -``cassandra.triggers_dir=`` --------------------------------------- -Set the default location for the trigger JARs. - -**Default:** conf/triggers - -``cassandra.write_survey=true`` -------------------------------- -For testing new compaction and compression strategies. It allows you to experiment with different strategies and benchmark write performance differences without affecting the production workload. - -``consistent.rangemovement=true|false`` ---------------------------------------- -Set to true makes Cassandra perform bootstrap safely without violating consistency. False disables this. diff --git a/doc/source/configuration/cass_jvm_options_file.rst b/doc/source/configuration/cass_jvm_options_file.rst deleted file mode 100644 index f5a632670d14..000000000000 --- a/doc/source/configuration/cass_jvm_options_file.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. _cassandra-jvm-options: - -jvm-* files -=========== - -Several files for JVM configuration are included in Cassandra. The ``jvm-server.options`` file, and corresponding files ``jvm8-server.options`` and ``jvm11-server.options`` are the main file for settings that affect the operation of the Cassandra JVM on cluster nodes. The file includes startup parameters, general JVM settings such as garbage collection, and heap settings. The ``jvm-clients.options`` and corresponding ``jvm8-clients.options`` and ``jvm11-clients.options`` files can be used to configure JVM settings for clients like ``nodetool`` and the ``sstable`` tools. - -See each file for examples of settings. - -.. note:: The ``jvm-*`` files replace the :ref:`cassandra-envsh` file used in Cassandra versions prior to Cassandra 3.0. The ``cassandra-env.sh`` bash script file is still useful if JVM settings must be dynamically calculated based on system settings. The ``jvm-*`` files only store static JVM settings. diff --git a/doc/source/configuration/cass_logback_xml_file.rst b/doc/source/configuration/cass_logback_xml_file.rst deleted file mode 100644 index 3de1c77954f4..000000000000 --- a/doc/source/configuration/cass_logback_xml_file.rst +++ /dev/null @@ -1,157 +0,0 @@ -.. _cassandra-logback-xml: - -logback.xml file -================================ - -The ``logback.xml`` configuration file can optionally set logging levels for the logs written to ``system.log`` and ``debug.log``. The logging levels can also be set using ``nodetool setlogginglevels``. - -=========================== -Options -=========================== - -``appender name=""...`` ------- - -Specify log type and settings. Possible appender names are: ``SYSTEMLOG``, ``DEBUGLOG``, ``ASYNCDEBUGLOG``, and ``STDOUT``. ``SYSTEMLOG`` ensures that WARN and ERROR message are written synchronously to the specified file. ``DEBUGLOG`` and ``ASYNCDEBUGLOG`` ensure that DEBUG messages are written either synchronously or asynchronously, respectively, to the specified file. ``STDOUT`` writes all messages to the console in a human-readable format. - -**Example:** - -`` `` ------- - -Specify the filename for a log. - -**Example:** ${cassandra.logdir}/system.log - -`` `` ------- - -Specify the level for a log. Part of the filter. Levels are: ``ALL``, ``TRACE``, ``DEBUG``, ``INFO``, ``WARN``, ``ERROR``, ``OFF``. ``TRACE`` creates the most verbose log, ``ERROR`` the least. - -.. note:: -Note: Increasing logging levels can generate heavy logging output on a moderately trafficked cluster. -You can use the ``nodetool getlogginglevels`` command to see the current logging configuration. - -**Default:** INFO - -**Example:** INFO - -`` ... `` ------- - -Specify the policy for rolling logs over to an archive. - -**Example:** - -`` `` ------- - -Specify the pattern information for rolling over the log to archive. Part of the rolling policy. - -**Example:** ${cassandra.logdir}/system.log.%d{yyyy-MM-dd}.%i.zip - -`` `` ------- - -Specify the maximum file size to trigger rolling a log. Part of the rolling policy. - -**Example:** 50MB - -`` `` ------- - -Specify the maximum history in days to trigger rolling a log. Part of the rolling policy. - -**Example:** 7 - -`` ... `` ------- - -Specify the format of the message. Part of the rolling policy. - -**Example:** 7 -**Example:** %-5level [%thread] %date{ISO8601} %F:%L - %msg%n - -Contents of default ``logback.xml`` ------------------------ - -.. code-block:: XML - - - - - - - - - - - INFO - - ${cassandra.logdir}/system.log - - - ${cassandra.logdir}/system.log.%d{yyyy-MM-dd}.%i.zip - - 50MB - 7 - 5GB - - - %-5level [%thread] %date{ISO8601} %F:%L - %msg%n - - - - - - - ${cassandra.logdir}/debug.log - - - ${cassandra.logdir}/debug.log.%d{yyyy-MM-dd}.%i.zip - - 50MB - 7 - 5GB - - - %-5level [%thread] %date{ISO8601} %F:%L - %msg%n - - - - - - - 1024 - 0 - true - - - - - - - - INFO - - - %-5level [%thread] %date{ISO8601} %F:%L - %msg%n - - - - - - - - - - - - - - - diff --git a/doc/source/configuration/cass_rackdc_file.rst b/doc/source/configuration/cass_rackdc_file.rst deleted file mode 100644 index 992109247439..000000000000 --- a/doc/source/configuration/cass_rackdc_file.rst +++ /dev/null @@ -1,67 +0,0 @@ -.. _cassandra-rackdc: - -cassandra-rackdc.properties file -================================ - -Several :term:`snitch` options use the ``cassandra-rackdc.properties`` configuration file to determine which :term:`datacenters` and racks cluster nodes belong to. Information about the -network topology allows requests to be routed efficiently and to distribute replicas evenly. The following snitches can be configured here: - -- GossipingPropertyFileSnitch -- AWS EC2 single-region snitch -- AWS EC2 multi-region snitch - -The GossipingPropertyFileSnitch is recommended for production. This snitch uses the datacenter and rack information configured in a local node's ``cassandra-rackdc.properties`` -file and propagates the information to other nodes using :term:`gossip`. It is the default snitch and the settings in this properties file are enabled. - -The AWS EC2 snitches are configured for clusters in AWS. This snitch uses the ``cassandra-rackdc.properties`` options to designate one of two AWS EC2 datacenter and rack naming conventions: - -- legacy: Datacenter name is the part of the availability zone name preceding the last "-" when the zone ends in -1 and includes the number if not -1. Rack name is the portion of the availability zone name following the last "-". - - Examples: us-west-1a => dc: us-west, rack: 1a; us-west-2b => dc: us-west-2, rack: 2b; - -- standard: Datacenter name is the standard AWS region name, including the number. Rack name is the region plus the availability zone letter. - - Examples: us-west-1a => dc: us-west-1, rack: us-west-1a; us-west-2b => dc: us-west-2, rack: us-west-2b; - -Either snitch can set to use the local or internal IP address when multiple datacenters are not communicating. - -=========================== -GossipingPropertyFileSnitch -=========================== - -``dc`` ------- -Name of the datacenter. The value is case-sensitive. - -**Default value:** DC1 - -``rack`` --------- -Rack designation. The value is case-sensitive. - -**Default value:** RAC1 - -=========================== -AWS EC2 snitch -=========================== - -``ec2_naming_scheme`` ---------------------- -Datacenter and rack naming convention. Options are ``legacy`` or ``standard`` (default). **This option is commented out by default.** - -**Default value:** standard - - -.. NOTE:: - YOU MUST USE THE ``legacy`` VALUE IF YOU ARE UPGRADING A PRE-4.0 CLUSTER. - -=========================== -Either snitch -=========================== - -``prefer_local`` ----------------- -Option to use the local or internal IP address when communication is not across different datacenters. **This option is commented out by default.** - -**Default value:** true - diff --git a/doc/source/configuration/cass_topo_file.rst b/doc/source/configuration/cass_topo_file.rst deleted file mode 100644 index 264addcadb38..000000000000 --- a/doc/source/configuration/cass_topo_file.rst +++ /dev/null @@ -1,48 +0,0 @@ -.. _cassandra-topology: - -cassandra-topologies.properties file -================================ - -The ``PropertyFileSnitch`` :term:`snitch` option uses the ``cassandra-topologies.properties`` configuration file to determine which :term:`datacenters` and racks cluster nodes belong to. If other snitches are used, the -:ref:cassandra_rackdc must be used. The snitch determines network topology (proximity by rack and datacenter) so that requests are routed efficiently and allows the database to distribute replicas evenly. - -Include every node in the cluster in the properties file, defining your datacenter names as in the keyspace definition. The datacenter and rack names are case-sensitive. - -The ``cassandra-topologies.properties`` file must be copied identically to every node in the cluster. - - -=========================== -Example -=========================== -This example uses three datacenters: - -.. code-block:: bash - - # datacenter One - - 175.56.12.105=DC1:RAC1 - 175.50.13.200=DC1:RAC1 - 175.54.35.197=DC1:RAC1 - - 120.53.24.101=DC1:RAC2 - 120.55.16.200=DC1:RAC2 - 120.57.102.103=DC1:RAC2 - - # datacenter Two - - 110.56.12.120=DC2:RAC1 - 110.50.13.201=DC2:RAC1 - 110.54.35.184=DC2:RAC1 - - 50.33.23.120=DC2:RAC2 - 50.45.14.220=DC2:RAC2 - 50.17.10.203=DC2:RAC2 - - # datacenter Three - - 172.106.12.120=DC3:RAC1 - 172.106.12.121=DC3:RAC1 - 172.106.12.122=DC3:RAC1 - - # default for unknown nodes - default =DC3:RAC1 diff --git a/doc/source/configuration/index.rst b/doc/source/configuration/index.rst deleted file mode 100644 index ea34af38405f..000000000000 --- a/doc/source/configuration/index.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Configuring Cassandra -===================== - -This section describes how to configure Apache Cassandra. - -.. toctree:: - :maxdepth: 1 - - cass_yaml_file - cass_rackdc_file - cass_env_sh_file - cass_topo_file - cass_cl_archive_file - cass_logback_xml_file - cass_jvm_options_file diff --git a/doc/source/contactus.rst b/doc/source/contactus.rst deleted file mode 100644 index 3ed9004ddcfc..000000000000 --- a/doc/source/contactus.rst +++ /dev/null @@ -1,50 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Contact us -========== - -You can get in touch with the Cassandra community either via the mailing lists or :ref:`Slack rooms `. - -.. _mailing-lists: - -Mailing lists -------------- - -The following mailing lists are available: - -- `Users `__ – General discussion list for users - `Subscribe - `__ -- `Developers `__ – Development related discussion - `Subscribe - `__ -- `Commits `__ – Commit notification source repository - - `Subscribe `__ -- `Client Libraries `__ – Discussion related to the - development of idiomatic client APIs - `Subscribe `__ - -Subscribe by sending an email to the email address in the Subscribe links above. Follow the instructions in the welcome -email to confirm your subscription. Make sure to keep the welcome email as it contains instructions on how to -unsubscribe. - -.. _slack: - -Slack ------ -To chat with developers or users in real-time, join our rooms on `ASF Slack `__: - -- ``cassandra`` - for user questions and general discussions. -- ``cassandra-dev`` - strictly for questions or discussions related to Cassandra development. - diff --git a/doc/source/cql/appendices.rst b/doc/source/cql/appendices.rst deleted file mode 100644 index 480b78ea297f..000000000000 --- a/doc/source/cql/appendices.rst +++ /dev/null @@ -1,330 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -Appendices ----------- - -.. _appendix-A: - -Appendix A: CQL Keywords -~~~~~~~~~~~~~~~~~~~~~~~~ - -CQL distinguishes between *reserved* and *non-reserved* keywords. -Reserved keywords cannot be used as identifier, they are truly reserved -for the language (but one can enclose a reserved keyword by -double-quotes to use it as an identifier). Non-reserved keywords however -only have a specific meaning in certain context but can used as -identifier otherwise. The only *raison d’être* of these non-reserved -keywords is convenience: some keyword are non-reserved when it was -always easy for the parser to decide whether they were used as keywords -or not. - -+--------------------+-------------+ -| Keyword | Reserved? | -+====================+=============+ -| ``ADD`` | yes | -+--------------------+-------------+ -| ``AGGREGATE`` | no | -+--------------------+-------------+ -| ``ALL`` | no | -+--------------------+-------------+ -| ``ALLOW`` | yes | -+--------------------+-------------+ -| ``ALTER`` | yes | -+--------------------+-------------+ -| ``AND`` | yes | -+--------------------+-------------+ -| ``APPLY`` | yes | -+--------------------+-------------+ -| ``AS`` | no | -+--------------------+-------------+ -| ``ASC`` | yes | -+--------------------+-------------+ -| ``ASCII`` | no | -+--------------------+-------------+ -| ``AUTHORIZE`` | yes | -+--------------------+-------------+ -| ``BATCH`` | yes | -+--------------------+-------------+ -| ``BEGIN`` | yes | -+--------------------+-------------+ -| ``BIGINT`` | no | -+--------------------+-------------+ -| ``BLOB`` | no | -+--------------------+-------------+ -| ``BOOLEAN`` | no | -+--------------------+-------------+ -| ``BY`` | yes | -+--------------------+-------------+ -| ``CALLED`` | no | -+--------------------+-------------+ -| ``CLUSTERING`` | no | -+--------------------+-------------+ -| ``COLUMNFAMILY`` | yes | -+--------------------+-------------+ -| ``COMPACT`` | no | -+--------------------+-------------+ -| ``CONTAINS`` | no | -+--------------------+-------------+ -| ``COUNT`` | no | -+--------------------+-------------+ -| ``COUNTER`` | no | -+--------------------+-------------+ -| ``CREATE`` | yes | -+--------------------+-------------+ -| ``CUSTOM`` | no | -+--------------------+-------------+ -| ``DATE`` | no | -+--------------------+-------------+ -| ``DECIMAL`` | no | -+--------------------+-------------+ -| ``DELETE`` | yes | -+--------------------+-------------+ -| ``DESC`` | yes | -+--------------------+-------------+ -| ``DESCRIBE`` | yes | -+--------------------+-------------+ -| ``DISTINCT`` | no | -+--------------------+-------------+ -| ``DOUBLE`` | no | -+--------------------+-------------+ -| ``DROP`` | yes | -+--------------------+-------------+ -| ``ENTRIES`` | yes | -+--------------------+-------------+ -| ``EXECUTE`` | yes | -+--------------------+-------------+ -| ``EXISTS`` | no | -+--------------------+-------------+ -| ``FILTERING`` | no | -+--------------------+-------------+ -| ``FINALFUNC`` | no | -+--------------------+-------------+ -| ``FLOAT`` | no | -+--------------------+-------------+ -| ``FROM`` | yes | -+--------------------+-------------+ -| ``FROZEN`` | no | -+--------------------+-------------+ -| ``FULL`` | yes | -+--------------------+-------------+ -| ``FUNCTION`` | no | -+--------------------+-------------+ -| ``FUNCTIONS`` | no | -+--------------------+-------------+ -| ``GRANT`` | yes | -+--------------------+-------------+ -| ``IF`` | yes | -+--------------------+-------------+ -| ``IN`` | yes | -+--------------------+-------------+ -| ``INDEX`` | yes | -+--------------------+-------------+ -| ``INET`` | no | -+--------------------+-------------+ -| ``INFINITY`` | yes | -+--------------------+-------------+ -| ``INITCOND`` | no | -+--------------------+-------------+ -| ``INPUT`` | no | -+--------------------+-------------+ -| ``INSERT`` | yes | -+--------------------+-------------+ -| ``INT`` | no | -+--------------------+-------------+ -| ``INTO`` | yes | -+--------------------+-------------+ -| ``JSON`` | no | -+--------------------+-------------+ -| ``KEY`` | no | -+--------------------+-------------+ -| ``KEYS`` | no | -+--------------------+-------------+ -| ``KEYSPACE`` | yes | -+--------------------+-------------+ -| ``KEYSPACES`` | no | -+--------------------+-------------+ -| ``LANGUAGE`` | no | -+--------------------+-------------+ -| ``LIMIT`` | yes | -+--------------------+-------------+ -| ``LIST`` | no | -+--------------------+-------------+ -| ``LOGIN`` | no | -+--------------------+-------------+ -| ``MAP`` | no | -+--------------------+-------------+ -| ``MODIFY`` | yes | -+--------------------+-------------+ -| ``NAN`` | yes | -+--------------------+-------------+ -| ``NOLOGIN`` | no | -+--------------------+-------------+ -| ``NORECURSIVE`` | yes | -+--------------------+-------------+ -| ``NOSUPERUSER`` | no | -+--------------------+-------------+ -| ``NOT`` | yes | -+--------------------+-------------+ -| ``NULL`` | yes | -+--------------------+-------------+ -| ``OF`` | yes | -+--------------------+-------------+ -| ``ON`` | yes | -+--------------------+-------------+ -| ``OPTIONS`` | no | -+--------------------+-------------+ -| ``OR`` | yes | -+--------------------+-------------+ -| ``ORDER`` | yes | -+--------------------+-------------+ -| ``PASSWORD`` | no | -+--------------------+-------------+ -| ``PERMISSION`` | no | -+--------------------+-------------+ -| ``PERMISSIONS`` | no | -+--------------------+-------------+ -| ``PRIMARY`` | yes | -+--------------------+-------------+ -| ``RENAME`` | yes | -+--------------------+-------------+ -| ``REPLACE`` | yes | -+--------------------+-------------+ -| ``RETURNS`` | no | -+--------------------+-------------+ -| ``REVOKE`` | yes | -+--------------------+-------------+ -| ``ROLE`` | no | -+--------------------+-------------+ -| ``ROLES`` | no | -+--------------------+-------------+ -| ``SCHEMA`` | yes | -+--------------------+-------------+ -| ``SELECT`` | yes | -+--------------------+-------------+ -| ``SET`` | yes | -+--------------------+-------------+ -| ``SFUNC`` | no | -+--------------------+-------------+ -| ``SMALLINT`` | no | -+--------------------+-------------+ -| ``STATIC`` | no | -+--------------------+-------------+ -| ``STORAGE`` | no | -+--------------------+-------------+ -| ``STYPE`` | no | -+--------------------+-------------+ -| ``SUPERUSER`` | no | -+--------------------+-------------+ -| ``TABLE`` | yes | -+--------------------+-------------+ -| ``TEXT`` | no | -+--------------------+-------------+ -| ``TIME`` | no | -+--------------------+-------------+ -| ``TIMESTAMP`` | no | -+--------------------+-------------+ -| ``TIMEUUID`` | no | -+--------------------+-------------+ -| ``TINYINT`` | no | -+--------------------+-------------+ -| ``TO`` | yes | -+--------------------+-------------+ -| ``TOKEN`` | yes | -+--------------------+-------------+ -| ``TRIGGER`` | no | -+--------------------+-------------+ -| ``TRUNCATE`` | yes | -+--------------------+-------------+ -| ``TTL`` | no | -+--------------------+-------------+ -| ``TUPLE`` | no | -+--------------------+-------------+ -| ``TYPE`` | no | -+--------------------+-------------+ -| ``UNLOGGED`` | yes | -+--------------------+-------------+ -| ``UPDATE`` | yes | -+--------------------+-------------+ -| ``USE`` | yes | -+--------------------+-------------+ -| ``USER`` | no | -+--------------------+-------------+ -| ``USERS`` | no | -+--------------------+-------------+ -| ``USING`` | yes | -+--------------------+-------------+ -| ``UUID`` | no | -+--------------------+-------------+ -| ``VALUES`` | no | -+--------------------+-------------+ -| ``VARCHAR`` | no | -+--------------------+-------------+ -| ``VARINT`` | no | -+--------------------+-------------+ -| ``WHERE`` | yes | -+--------------------+-------------+ -| ``WITH`` | yes | -+--------------------+-------------+ -| ``WRITETIME`` | no | -+--------------------+-------------+ - -Appendix B: CQL Reserved Types -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following type names are not currently used by CQL, but are reserved -for potential future use. User-defined types may not use reserved type -names as their name. - -+-----------------+ -| type | -+=================+ -| ``bitstring`` | -+-----------------+ -| ``byte`` | -+-----------------+ -| ``complex`` | -+-----------------+ -| ``enum`` | -+-----------------+ -| ``interval`` | -+-----------------+ -| ``macaddr`` | -+-----------------+ - - -Appendix C: Dropping Compact Storage -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -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: - -- CQL-created Compact Tables that have no clustering columns, will expose an - additional clustering column ``column1`` with ``UTF8Type``. -- CQL-created Compact Tables that had no regular columns, will expose a - regular column ``value`` with ``BytesType``. -- For CQL-Created Compact Tables, all columns originally defined as - ``regular`` will be come ``static`` -- CQL-created Compact Tables that have clustering but have no regular - columns will have an empty value column (of ``EmptyType``) -- SuperColumn Tables (can only be created through Thrift) will expose - a compact value map with an empty name. -- Thrift-created Compact Tables will have types corresponding to their - Thrift definition. diff --git a/doc/source/cql/changes.rst b/doc/source/cql/changes.rst deleted file mode 100644 index 6691f156a54b..000000000000 --- a/doc/source/cql/changes.rst +++ /dev/null @@ -1,211 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -Changes -------- - -The following describes the changes in each version of CQL. - -3.4.5 -^^^^^ - -- Adds support for arithmetic operators (:jira:`11935`) -- Adds support for ``+`` and ``-`` operations on dates (:jira:`11936`) -- Adds ``currentTimestamp``, ``currentDate``, ``currentTime`` and ``currentTimeUUID`` functions (:jira:`13132`) - - -3.4.4 -^^^^^ - -- ``ALTER TABLE`` ``ALTER`` has been removed; a column's type may not be changed after creation (:jira:`12443`). -- ``ALTER TYPE`` ``ALTER`` has been removed; a field's type may not be changed after creation (:jira:`12443`). - -3.4.3 -^^^^^ - -- Adds a new ``duration `` :ref:`data types ` (:jira:`11873`). -- Support for ``GROUP BY`` (:jira:`10707`). -- Adds a ``DEFAULT UNSET`` option for ``INSERT JSON`` to ignore omitted columns (:jira:`11424`). -- Allows ``null`` as a legal value for TTL on insert and update. It will be treated as equivalent to inserting a 0 (:jira:`12216`). - -3.4.2 -^^^^^ - -- If a table has a non zero ``default_time_to_live``, then explicitly specifying a TTL of 0 in an ``INSERT`` or - ``UPDATE`` statement will result in the new writes not having any expiration (that is, an explicit TTL of 0 cancels - the ``default_time_to_live``). This wasn't the case before and the ``default_time_to_live`` was applied even though a - TTL had been explicitly set. -- ``ALTER TABLE`` ``ADD`` and ``DROP`` now allow multiple columns to be added/removed. -- New ``PER PARTITION LIMIT`` option for ``SELECT`` statements (see `CASSANDRA-7017 - `__. -- :ref:`User-defined functions ` can now instantiate ``UDTValue`` and ``TupleValue`` instances via the - new ``UDFContext`` interface (see `CASSANDRA-10818 `__. -- :ref:`User-defined types ` may now be stored in a non-frozen form, allowing individual fields to be updated and - deleted in ``UPDATE`` statements and ``DELETE`` statements, respectively. (`CASSANDRA-7423 - `__). - -3.4.1 -^^^^^ - -- Adds ``CAST`` functions. - -3.4.0 -^^^^^ - -- Support for :ref:`materialized views `. -- ``DELETE`` support for inequality expressions and ``IN`` restrictions on any primary key columns. -- ``UPDATE`` support for ``IN`` restrictions on any primary key columns. - -3.3.1 -^^^^^ - -- The syntax ``TRUNCATE TABLE X`` is now accepted as an alias for ``TRUNCATE X``. - -3.3.0 -^^^^^ - -- :ref:`User-defined functions and aggregates ` are now supported. -- Allows double-dollar enclosed strings literals as an alternative to single-quote enclosed strings. -- Introduces Roles to supersede user based authentication and access control -- New ``date``, ``time``, ``tinyint`` and ``smallint`` :ref:`data types ` have been added. -- :ref:`JSON support ` has been added -- Adds new time conversion functions and deprecate ``dateOf`` and ``unixTimestampOf``. - -3.2.0 -^^^^^ - -- :ref:`User-defined types ` supported. -- ``CREATE INDEX`` now supports indexing collection columns, including indexing the keys of map collections through the - ``keys()`` function -- Indexes on collections may be queried using the new ``CONTAINS`` and ``CONTAINS KEY`` operators -- :ref:`Tuple types ` were added to hold fixed-length sets of typed positional fields. -- ``DROP INDEX`` now supports optionally specifying a keyspace. - -3.1.7 -^^^^^ - -- ``SELECT`` statements now support selecting multiple rows in a single partition using an ``IN`` clause on combinations - of clustering columns. -- ``IF NOT EXISTS`` and ``IF EXISTS`` syntax is now supported by ``CREATE USER`` and ``DROP USER`` statements, - respectively. - -3.1.6 -^^^^^ - -- A new ``uuid()`` method has been added. -- Support for ``DELETE ... IF EXISTS`` syntax. - -3.1.5 -^^^^^ - -- It is now possible to group clustering columns in a relation, see :ref:`WHERE ` clauses. -- Added support for :ref:`static columns `. - -3.1.4 -^^^^^ - -- ``CREATE INDEX`` now allows specifying options when creating CUSTOM indexes. - -3.1.3 -^^^^^ - -- Millisecond precision formats have been added to the :ref:`timestamp ` parser. - -3.1.2 -^^^^^ - -- ``NaN`` and ``Infinity`` has been added as valid float constants. They are now reserved keywords. In the unlikely case - you we using them as a column identifier (or keyspace/table one), you will now need to double quote them. - -3.1.1 -^^^^^ - -- ``SELECT`` statement now allows listing the partition keys (using the ``DISTINCT`` modifier). See `CASSANDRA-4536 - `__. -- The syntax ``c IN ?`` is now supported in ``WHERE`` clauses. In that case, the value expected for the bind variable - will be a list of whatever type ``c`` is. -- It is now possible to use named bind variables (using ``:name`` instead of ``?``). - -3.1.0 -^^^^^ - -- ``ALTER TABLE`` ``DROP`` option added. -- ``SELECT`` statement now supports aliases in select clause. Aliases in WHERE and ORDER BY clauses are not supported. -- ``CREATE`` statements for ``KEYSPACE``, ``TABLE`` and ``INDEX`` now supports an ``IF NOT EXISTS`` condition. - Similarly, ``DROP`` statements support a ``IF EXISTS`` condition. -- ``INSERT`` statements optionally supports a ``IF NOT EXISTS`` condition and ``UPDATE`` supports ``IF`` conditions. - -3.0.5 -^^^^^ - -- ``SELECT``, ``UPDATE``, and ``DELETE`` statements now allow empty ``IN`` relations (see `CASSANDRA-5626 - `__. - -3.0.4 -^^^^^ - -- Updated the syntax for custom :ref:`secondary indexes `. -- Non-equal condition on the partition key are now never supported, even for ordering partitioner as this was not - correct (the order was **not** the one of the type of the partition key). Instead, the ``token`` method should always - be used for range queries on the partition key (see :ref:`WHERE clauses `). - -3.0.3 -^^^^^ - -- Support for custom :ref:`secondary indexes ` has been added. - -3.0.2 -^^^^^ - -- Type validation for the :ref:`constants ` has been fixed. For instance, the implementation used to allow - ``'2'`` as a valid value for an ``int`` column (interpreting it has the equivalent of ``2``), or ``42`` as a valid - ``blob`` value (in which case ``42`` was interpreted as an hexadecimal representation of the blob). This is no longer - the case, type validation of constants is now more strict. See the :ref:`data types ` section for details - on which constant is allowed for which type. -- The type validation fixed of the previous point has lead to the introduction of blobs constants to allow the input of - blobs. Do note that while the input of blobs as strings constant is still supported by this version (to allow smoother - transition to blob constant), it is now deprecated and will be removed by a future version. If you were using strings - as blobs, you should thus update your client code ASAP to switch blob constants. -- A number of functions to convert native types to blobs have also been introduced. Furthermore the token function is - now also allowed in select clauses. See the :ref:`section on functions ` for details. - -3.0.1 -^^^^^ - -- Date strings (and timestamps) are no longer accepted as valid ``timeuuid`` values. Doing so was a bug in the sense - that date string are not valid ``timeuuid``, and it was thus resulting in `confusing behaviors - `__. However, the following new methods have been added to help - working with ``timeuuid``: ``now``, ``minTimeuuid``, ``maxTimeuuid`` , - ``dateOf`` and ``unixTimestampOf``. -- Float constants now support the exponent notation. In other words, ``4.2E10`` is now a valid floating point value. - -Versioning -^^^^^^^^^^ - -Versioning of the CQL language adheres to the `Semantic Versioning `__ guidelines. Versions take the -form X.Y.Z where X, Y, and Z are integer values representing major, minor, and patch level respectively. There is no -correlation between Cassandra release versions and the CQL language version. - -========= ============================================================================================================= - version description -========= ============================================================================================================= - Major The major version *must* be bumped when backward incompatible changes are introduced. This should rarely - occur. - Minor Minor version increments occur when new, but backward compatible, functionality is introduced. - Patch The patch version is incremented when bugs are fixed. -========= ============================================================================================================= diff --git a/doc/source/cql/ddl.rst b/doc/source/cql/ddl.rst deleted file mode 100644 index 88df05b4c75b..000000000000 --- a/doc/source/cql/ddl.rst +++ /dev/null @@ -1,852 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _data-definition: - -Data Definition ---------------- - -CQL stores data in *tables*, whose schema defines the layout of said data in the table, and those tables are grouped in -*keyspaces*. A keyspace defines a number of options that applies to all the tables it contains, most prominently of -which is the :ref:`replication strategy ` used by the keyspace. It is generally encouraged to use -one keyspace by *application*, and thus many cluster may define only one keyspace. - -This section describes the statements used to create, modify, and remove those keyspace and tables. - -Common definitions -^^^^^^^^^^^^^^^^^^ - -The names of the keyspaces and tables are defined by the following grammar: - -.. productionlist:: - keyspace_name: `name` - table_name: [ `keyspace_name` '.' ] `name` - name: `unquoted_name` | `quoted_name` - unquoted_name: re('[a-zA-Z_0-9]{1, 48}') - quoted_name: '"' `unquoted_name` '"' - -Both keyspace and table name should be comprised of only alphanumeric characters, cannot be empty and are limited in -size to 48 characters (that limit exists mostly to avoid filenames (which may include the keyspace and table name) to go -over the limits of certain file systems). By default, keyspace and table names are case insensitive (``myTable`` is -equivalent to ``mytable``) but case sensitivity can be forced by using double-quotes (``"myTable"`` is different from -``mytable``). - -Further, a table is always part of a keyspace and a table name can be provided fully-qualified by the keyspace it is -part of. If is is not fully-qualified, the table is assumed to be in the *current* keyspace (see :ref:`USE statement -`). - -Further, the valid names for columns is simply defined as: - -.. productionlist:: - column_name: `identifier` - -We also define the notion of statement options for use in the following section: - -.. productionlist:: - options: `option` ( AND `option` )* - option: `identifier` '=' ( `identifier` | `constant` | `map_literal` ) - -.. _create-keyspace-statement: - -CREATE KEYSPACE -^^^^^^^^^^^^^^^ - -A keyspace is created using a ``CREATE KEYSPACE`` statement: - -.. productionlist:: - create_keyspace_statement: CREATE KEYSPACE [ IF NOT EXISTS ] `keyspace_name` WITH `options` - -For instance:: - - CREATE KEYSPACE excelsior - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; - - CREATE KEYSPACE excalibur - WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 3} - AND durable_writes = false; - -Attempting to create a keyspace that already exists will return an error unless the ``IF NOT EXISTS`` option is used. If -it is used, the statement will be a no-op if the keyspace already exists. - -The supported ``options`` are: - -=================== ========== =========== ========= =================================================================== -name kind mandatory default description -=================== ========== =========== ========= =================================================================== -``replication`` *map* yes The replication strategy and options to use for the keyspace (see - details below). -``durable_writes`` *simple* no true Whether to use the commit log for updates on this keyspace - (disable this option at your own risk!). -=================== ========== =========== ========= =================================================================== - -The ``replication`` property is mandatory and must at least contains the ``'class'`` sub-option which defines the -:ref:`replication strategy ` class to use. The rest of the sub-options depends on what replication -strategy is used. By default, Cassandra support the following ``'class'``: - -.. _replication-strategy: - -``SimpleStrategy`` -"""""""""""""""""" - -A simple strategy that defines a replication factor for data to be spread -across the entire cluster. This is generally not a wise choice for production -because it does not respect datacenter layouts and can lead to wildly varying -query latency. For a production ready strategy, see -``NetworkTopologyStrategy``. ``SimpleStrategy`` supports a single mandatory argument: - -========================= ====== ======= ============================================= -sub-option type since description -========================= ====== ======= ============================================= -``'replication_factor'`` int all The number of replicas to store per range -========================= ====== ======= ============================================= - -``NetworkTopologyStrategy`` -""""""""""""""""""""""""""" - -A production ready replication strategy that allows to set the replication -factor independently for each data-center. The rest of the sub-options are -key-value pairs where a key is a data-center name and its value is the -associated replication factor. Options: - -===================================== ====== ====== ============================================= -sub-option type since description -===================================== ====== ====== ============================================= -``''`` int all The number of replicas to store per range in - the provided datacenter. -``'replication_factor'`` int 4.0 The number of replicas to use as a default - per datacenter if not specifically provided. - Note that this always defers to existing - definitions or explicit datacenter settings. - For example, to have three replicas per - datacenter, supply this with a value of 3. -===================================== ====== ====== ============================================= - -Note that when ``ALTER`` ing keyspaces and supplying ``replication_factor``, -auto-expansion will only *add* new datacenters for safety, it will not alter -existing datacenters or remove any even if they are no longer in the cluster. -If you want to remove datacenters while still supplying ``replication_factor``, -explicitly zero out the datacenter you want to have zero replicas. - -An example of auto-expanding datacenters with two datacenters: ``DC1`` and ``DC2``:: - - CREATE KEYSPACE excalibur - WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3} - - DESCRIBE KEYSPACE excalibur - CREATE KEYSPACE excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3', 'DC2': '3'} AND durable_writes = true; - - -An example of auto-expanding and overriding a datacenter:: - - CREATE KEYSPACE excalibur - WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3, 'DC2': 2} - - DESCRIBE KEYSPACE excalibur - CREATE KEYSPACE excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3', 'DC2': '2'} AND durable_writes = true; - -An example that excludes a datacenter while using ``replication_factor``:: - - CREATE KEYSPACE excalibur - WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3, 'DC2': 0} ; - - DESCRIBE KEYSPACE excalibur - CREATE KEYSPACE excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3'} AND durable_writes = true; - -If transient replication has been enabled, transient replicas can be configured for both -``SimpleStrategy`` and ``NetworkTopologyStrategy`` by defining replication factors in the format ``'/'`` - -For instance, this keyspace will have 3 replicas in DC1, 1 of which is transient, and 5 replicas in DC2, 2 of which are transient:: - - CREATE KEYSPACE some_keysopace - WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : '3/1'', 'DC2' : '5/2'}; - -.. _use-statement: - -USE -^^^ - -The ``USE`` statement allows to change the *current* keyspace (for the *connection* on which it is executed). A number -of objects in CQL are bound to a keyspace (tables, user-defined types, functions, ...) and the current keyspace is the -default keyspace used when those objects are referred without a fully-qualified name (that is, without being prefixed a -keyspace name). A ``USE`` statement simply takes the keyspace to use as current as argument: - -.. productionlist:: - use_statement: USE `keyspace_name` - -.. _alter-keyspace-statement: - -ALTER KEYSPACE -^^^^^^^^^^^^^^ - -An ``ALTER KEYSPACE`` statement allows to modify the options of a keyspace: - -.. productionlist:: - alter_keyspace_statement: ALTER KEYSPACE `keyspace_name` WITH `options` - -For instance:: - - ALTER KEYSPACE Excelsior - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4}; - -The supported options are the same than for :ref:`creating a keyspace `. - -.. _drop-keyspace-statement: - -DROP KEYSPACE -^^^^^^^^^^^^^ - -Dropping a keyspace can be done using the ``DROP KEYSPACE`` statement: - -.. productionlist:: - drop_keyspace_statement: DROP KEYSPACE [ IF EXISTS ] `keyspace_name` - -For instance:: - - DROP KEYSPACE Excelsior; - -Dropping a keyspace results in the immediate, irreversible removal of that keyspace, including all the tables, UTD and -functions in it, and all the data contained in those tables. - -If the keyspace does not exists, the statement will return an error, unless ``IF EXISTS`` is used in which case the -operation is a no-op. - -.. _create-table-statement: - -CREATE TABLE -^^^^^^^^^^^^ - -Creating a new table uses the ``CREATE TABLE`` statement: - -.. productionlist:: - create_table_statement: CREATE TABLE [ IF NOT EXISTS ] `table_name` - : '(' - : `column_definition` - : ( ',' `column_definition` )* - : [ ',' PRIMARY KEY '(' `primary_key` ')' ] - : ')' [ WITH `table_options` ] - column_definition: `column_name` `cql_type` [ STATIC ] [ PRIMARY KEY] - primary_key: `partition_key` [ ',' `clustering_columns` ] - partition_key: `column_name` - : | '(' `column_name` ( ',' `column_name` )* ')' - clustering_columns: `column_name` ( ',' `column_name` )* - table_options: COMPACT STORAGE [ AND `table_options` ] - : | CLUSTERING ORDER BY '(' `clustering_order` ')' [ AND `table_options` ] - : | `options` - clustering_order: `column_name` (ASC | DESC) ( ',' `column_name` (ASC | DESC) )* - -For instance:: - - CREATE TABLE monkeySpecies ( - species text PRIMARY KEY, - common_name text, - population varint, - average_size int - ) WITH comment='Important biological records'; - - CREATE TABLE timeline ( - userid uuid, - posted_month int, - posted_time uuid, - body text, - posted_by text, - PRIMARY KEY (userid, posted_month, posted_time) - ) WITH compaction = { 'class' : 'LeveledCompactionStrategy' }; - - CREATE TABLE loads ( - machine inet, - cpu int, - mtime timeuuid, - load float, - PRIMARY KEY ((machine, cpu), mtime) - ) WITH CLUSTERING ORDER BY (mtime DESC); - -A CQL table has a name and is composed of a set of *rows*. Creating a table amounts to defining which :ref:`columns -` the rows will be composed, which of those columns compose the :ref:`primary key `, as -well as optional :ref:`options ` for the table. - -Attempting to create an already existing table will return an error unless the ``IF NOT EXISTS`` directive is used. If -it is used, the statement will be a no-op if the table already exists. - - -.. _column-definition: - -Column definitions -~~~~~~~~~~~~~~~~~~ - -Every rows in a CQL table has a set of predefined columns defined at the time of the table creation (or added later -using an :ref:`alter statement`). - -A :token:`column_definition` is primarily comprised of the name of the column defined and it's :ref:`type `, -which restrict which values are accepted for that column. Additionally, a column definition can have the following -modifiers: - -``STATIC`` - it declares the column as being a :ref:`static column `. - -``PRIMARY KEY`` - it declares the column as being the sole component of the :ref:`primary key ` of the table. - -.. _static-columns: - -Static columns -`````````````` -Some columns can be declared as ``STATIC`` in a table definition. A column that is static will be “shared” by all the -rows belonging to the same partition (having the same :ref:`partition key `). For instance:: - - CREATE TABLE t ( - pk int, - t int, - v text, - s text static, - PRIMARY KEY (pk, t) - ); - - INSERT INTO t (pk, t, v, s) VALUES (0, 0, 'val0', 'static0'); - INSERT INTO t (pk, t, v, s) VALUES (0, 1, 'val1', 'static1'); - - SELECT * FROM t; - pk | t | v | s - ----+---+--------+----------- - 0 | 0 | 'val0' | 'static1' - 0 | 1 | 'val1' | 'static1' - -As can be seen, the ``s`` value is the same (``static1``) for both of the row in the partition (the partition key in -that example being ``pk``, both rows are in that same partition): the 2nd insertion has overridden the value for ``s``. - -The use of static columns as the following restrictions: - -- tables with the ``COMPACT STORAGE`` option (see below) cannot use them. -- a table without clustering columns cannot have static columns (in a table without clustering columns, every partition - has only one row, and so every column is inherently static). -- only non ``PRIMARY KEY`` columns can be static. - -.. _primary-key: - -The Primary key -~~~~~~~~~~~~~~~ - -Within a table, a row is uniquely identified by its ``PRIMARY KEY``, and hence all table **must** define a PRIMARY KEY -(and only one). A ``PRIMARY KEY`` definition is composed of one or more of the columns defined in the table. -Syntactically, the primary key is defined the keywords ``PRIMARY KEY`` followed by comma-separated list of the column -names composing it within parenthesis, but if the primary key has only one column, one can alternatively follow that -column definition by the ``PRIMARY KEY`` keywords. The order of the columns in the primary key definition matter. - -A CQL primary key is composed of 2 parts: - -- the :ref:`partition key ` part. It is the first component of the primary key definition. It can be a - single column or, using additional parenthesis, can be multiple columns. A table always have at least a partition key, - the smallest possible table definition is:: - - CREATE TABLE t (k text PRIMARY KEY); - -- the :ref:`clustering columns `. Those are the columns after the first component of the primary key - definition, and the order of those columns define the *clustering order*. - -Some example of primary key definition are: - -- ``PRIMARY KEY (a)``: ``a`` is the partition key and there is no clustering columns. -- ``PRIMARY KEY (a, b, c)`` : ``a`` is the partition key and ``b`` and ``c`` are the clustering columns. -- ``PRIMARY KEY ((a, b), c)`` : ``a`` and ``b`` compose the partition key (this is often called a *composite* partition - key) and ``c`` is the clustering column. - - -.. _partition-key: - -The partition key -````````````````` - -Within a table, CQL defines the notion of a *partition*. A partition is simply the set of rows that share the same value -for their partition key. Note that if the partition key is composed of multiple columns, then rows belong to the same -partition only they have the same values for all those partition key column. So for instance, given the following table -definition and content:: - - CREATE TABLE t ( - a int, - b int, - c int, - d int, - PRIMARY KEY ((a, b), c, d) - ); - - SELECT * FROM t; - a | b | c | d - ---+---+---+--- - 0 | 0 | 0 | 0 // row 1 - 0 | 0 | 1 | 1 // row 2 - 0 | 1 | 2 | 2 // row 3 - 0 | 1 | 3 | 3 // row 4 - 1 | 1 | 4 | 4 // row 5 - -``row 1`` and ``row 2`` are in the same partition, ``row 3`` and ``row 4`` are also in the same partition (but a -different one) and ``row 5`` is in yet another partition. - -Note that a table always has a partition key, and that if the table has no :ref:`clustering columns -`, then every partition of that table is only comprised of a single row (since the primary key -uniquely identifies rows and the primary key is equal to the partition key if there is no clustering columns). - -The most important property of partition is that all the rows belonging to the same partition are guarantee to be stored -on the same set of replica nodes. In other words, the partition key of a table defines which of the rows will be -localized together in the Cluster, and it is thus important to choose your partition key wisely so that rows that needs -to be fetch together are in the same partition (so that querying those rows together require contacting a minimum of -nodes). - -Please note however that there is a flip-side to this guarantee: as all rows sharing a partition key are guaranteed to -be stored on the same set of replica node, a partition key that groups too much data can create a hotspot. - -Another useful property of a partition is that when writing data, all the updates belonging to a single partition are -done *atomically* and in *isolation*, which is not the case across partitions. - -The proper choice of the partition key and clustering columns for a table is probably one of the most important aspect -of data modeling in Cassandra, and it largely impact which queries can be performed, and how efficiently they are. - - -.. _clustering-columns: - -The clustering columns -`````````````````````` - -The clustering columns of a table defines the clustering order for the partition of that table. For a given -:ref:`partition `, all the rows are physically ordered inside Cassandra by that clustering order. For -instance, given:: - - CREATE TABLE t ( - a int, - b int, - c int, - PRIMARY KEY (a, b, c) - ); - - SELECT * FROM t; - a | b | c - ---+---+--- - 0 | 0 | 4 // row 1 - 0 | 1 | 9 // row 2 - 0 | 2 | 2 // row 3 - 0 | 3 | 3 // row 4 - -then the rows (which all belong to the same partition) are all stored internally in the order of the values of their -``b`` column (the order they are displayed above). So where the partition key of the table allows to group rows on the -same replica set, the clustering columns controls how those rows are stored on the replica. That sorting allows the -retrieval of a range of rows within a partition (for instance, in the example above, ``SELECT * FROM t WHERE a = 0 AND b -> 1 and b <= 3``) to be very efficient. - - -.. _create-table-options: - -Table options -~~~~~~~~~~~~~ - -A CQL table has a number of options that can be set at creation (and, for most of them, :ref:`altered -` later). These options are specified after the ``WITH`` keyword. - -Amongst those options, two important ones cannot be changed after creation and influence which queries can be done -against the table: the ``COMPACT STORAGE`` option and the ``CLUSTERING ORDER`` option. Those, as well as the other -options of a table are described in the following sections. - -.. _compact-tables: - -Compact tables -`````````````` - -.. warning:: Since Cassandra 3.0, compact tables have the exact same layout internally than non compact ones (for the - same schema obviously), and declaring a table compact **only** creates artificial limitations on the table definition - and usage. It only exists for historical reason and is preserved for backward compatibility And as ``COMPACT - STORAGE`` cannot, as of Cassandra |version|, be removed, it is strongly discouraged to create new table with the - ``COMPACT STORAGE`` option. - -A *compact* table is one defined with the ``COMPACT STORAGE`` option. This option is only maintained for backward -compatibility for definitions created before CQL version 3 and shouldn't be used for new tables. Declaring a -table with this option creates limitations for the table which are largely arbitrary (and exists for historical -reasons). Amongst those limitation: - -- a compact table cannot use collections nor static columns. -- if a compact table has at least one clustering column, then it must have *exactly* one column outside of the primary - key ones. This imply you cannot add or remove columns after creation in particular. -- a compact table is limited in the indexes it can create, and no materialized view can be created on it. - -.. _clustering-order: - -Reversing the clustering order -`````````````````````````````` - -The clustering order of a table is defined by the :ref:`clustering columns ` of that table. By -default, that ordering is based on natural order of those clustering order, but the ``CLUSTERING ORDER`` allows to -change that clustering order to use the *reverse* natural order for some (potentially all) of the columns. - -The ``CLUSTERING ORDER`` option takes the comma-separated list of the clustering column, each with a ``ASC`` (for -*ascendant*, e.g. the natural order) or ``DESC`` (for *descendant*, e.g. the reverse natural order). Note in particular -that the default (if the ``CLUSTERING ORDER`` option is not used) is strictly equivalent to using the option with all -clustering columns using the ``ASC`` modifier. - -Note that this option is basically a hint for the storage engine to change the order in which it stores the row but it -has 3 visible consequences: - -# it limits which ``ORDER BY`` clause are allowed for :ref:`selects ` on that table. You can only - order results by the clustering order or the reverse clustering order. Meaning that if a table has 2 clustering column - ``a`` and ``b`` and you defined ``WITH CLUSTERING ORDER (a DESC, b ASC)``, then in queries you will be allowed to use - ``ORDER BY (a DESC, b ASC)`` and (reverse clustering order) ``ORDER BY (a ASC, b DESC)`` but **not** ``ORDER BY (a - ASC, b ASC)`` (nor ``ORDER BY (a DESC, b DESC)``). -# it also change the default order of results when queried (if no ``ORDER BY`` is provided). Results are always returned - in clustering order (within a partition). -# it has a small performance impact on some queries as queries in reverse clustering order are slower than the one in - forward clustering order. In practice, this means that if you plan on querying mostly in the reverse natural order of - your columns (which is common with time series for instance where you often want data from the newest to the oldest), - it is an optimization to declare a descending clustering order. - -.. _create-table-general-options: - -Other table options -``````````````````` - -.. todo:: review (misses cdc if nothing else) and link to proper categories when appropriate (compaction for instance) - -A table supports the following options: - -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| option | kind | default | description | -+================================+==========+=============+===========================================================+ -| ``comment`` | *simple* | none | A free-form, human-readable comment. | -| ``speculative_retry`` | *simple* | 99PERCENTILE| :ref:`Speculative retry options | -| | | | `. | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``cdc`` | *boolean*| false | Create a Change Data Capture (CDC) log on the table. | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``additional_write_policy`` | *simple* | 99PERCENTILE| :ref:`Speculative retry options | -| | | | `. | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``gc_grace_seconds`` | *simple* | 864000 | Time to wait before garbage collecting tombstones | -| | | | (deletion markers). | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``bloom_filter_fp_chance`` | *simple* | 0.00075 | The target probability of false positive of the sstable | -| | | | bloom filters. Said bloom filters will be sized to provide| -| | | | the provided probability (thus lowering this value impact | -| | | | the size of bloom filters in-memory and on-disk) | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``default_time_to_live`` | *simple* | 0 | The default expiration time (“TTL”) in seconds for a | -| | | | table. | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``compaction`` | *map* | *see below* | :ref:`Compaction options `. | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``compression`` | *map* | *see below* | :ref:`Compression options `. | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``caching`` | *map* | *see below* | :ref:`Caching options `. | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``memtable_flush_period_in_ms``| *simple* | 0 | Time (in ms) before Cassandra flushes memtables to disk. | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ -| ``read_repair`` | *simple* | BLOCKING | Sets read repair behavior (see below) | -+--------------------------------+----------+-------------+-----------------------------------------------------------+ - -.. _speculative-retry-options: - -Speculative retry options -######################### - -By default, Cassandra read coordinators only query as many replicas as necessary to satisfy -consistency levels: one for consistency level ``ONE``, a quorum for ``QUORUM``, and so on. -``speculative_retry`` determines when coordinators may query additional replicas, which is useful -when replicas are slow or unresponsive. Speculative retries are used to reduce the latency. The speculative_retry option may be -used to configure rapid read protection with which a coordinator sends more requests than needed to satisfy the Consistency level. - -Pre-4.0 speculative Retry Policy takes a single string as a parameter, this can be ``NONE``, ``ALWAYS``, ``99PERCENTILE`` (PERCENTILE), ``50MS`` (CUSTOM). - -Examples of setting speculative retry are: - -:: - - ALTER TABLE users WITH speculative_retry = '10ms'; - - -Or, - -:: - - ALTER TABLE users WITH speculative_retry = '99PERCENTILE'; - -The problem with these settings is when a single host goes into an unavailable state this drags up the percentiles. This means if we -are set to use ``p99`` alone, we might not speculate when we intended to to because the value at the specified percentile has gone so high. -As a fix 4.0 adds support for hybrid ``MIN()``, ``MAX()`` speculative retry policies (`CASSANDRA-14293 -`_). This means if the normal ``p99`` for the -table is <50ms, we will still speculate at this value and not drag the tail latencies up... but if the ``p99th`` goes above what we know we -should never exceed we use that instead. - -In 4.0 the values (case-insensitive) discussed in the following table are supported: - -============================ ======================== ============================================================================= - Format Example Description -============================ ======================== ============================================================================= - ``XPERCENTILE`` 90.5PERCENTILE Coordinators record average per-table response times for all replicas. - If a replica takes longer than ``X`` percent of this table's average - response time, the coordinator queries an additional replica. - ``X`` must be between 0 and 100. - ``XP`` 90.5P Synonym for ``XPERCENTILE`` - ``Yms`` 25ms If a replica takes more than ``Y`` milliseconds to respond, - the coordinator queries an additional replica. - ``MIN(XPERCENTILE,YMS)`` MIN(99PERCENTILE,35MS) A hybrid policy that will use either the specified percentile or fixed - milliseconds depending on which value is lower at the time of calculation. - Parameters are ``XPERCENTILE``, ``XP``, or ``Yms``. - This is helpful to help protect against a single slow instance; in the - happy case the 99th percentile is normally lower than the specified - fixed value however, a slow host may skew the percentile very high - meaning the slower the cluster gets, the higher the value of the percentile, - and the higher the calculated time used to determine if we should - speculate or not. This allows us to set an upper limit that we want to - speculate at, but avoid skewing the tail latencies by speculating at the - lower value when the percentile is less than the specified fixed upper bound. - ``MAX(XPERCENTILE,YMS)`` MAX(90.5P,25ms) A hybrid policy that will use either the specified percentile or fixed - milliseconds depending on which value is higher at the time of calculation. - ``ALWAYS`` Coordinators always query all replicas. - ``NEVER`` Coordinators never query additional replicas. -============================ =================== ============================================================================= - -As of version 4.0 speculative retry allows more friendly params (`CASSANDRA-13876 -`_). The ``speculative_retry`` is more flexible with case. As an example a -value does not have to be ``NONE``, and the following are supported alternatives. - -:: - - alter table users WITH speculative_retry = 'none'; - alter table users WITH speculative_retry = 'None'; - -The text component is case insensitive and for ``nPERCENTILE`` version 4.0 allows ``nP``, for instance ``99p``. -In a hybrid value for speculative retry, one of the two values must be a fixed millisecond value and the other a percentile value. - -Some examples: - -:: - - min(99percentile,50ms) - max(99p,50MS) - MAX(99P,50ms) - MIN(99.9PERCENTILE,50ms) - max(90percentile,100MS) - MAX(100.0PERCENTILE,60ms) - -Two values of the same kind cannot be specified such as ``min(90percentile,99percentile)`` as it wouldn’t be a hybrid value. -This setting does not affect reads with consistency level ``ALL`` because they already query all replicas. - -Note that frequently reading from additional replicas can hurt cluster performance. -When in doubt, keep the default ``99PERCENTILE``. - - -``additional_write_policy`` specifies the threshold at which a cheap quorum write will be upgraded to include transient replicas. - -.. _cql-compaction-options: - -Compaction options -################## - -The ``compaction`` options must at least define the ``'class'`` sub-option, that defines the compaction strategy class -to use. The supported class are ``'SizeTieredCompactionStrategy'`` (:ref:`STCS `), -``'LeveledCompactionStrategy'`` (:ref:`LCS `) and ``'TimeWindowCompactionStrategy'`` (:ref:`TWCS `) (the -``'DateTieredCompactionStrategy'`` is also supported but is deprecated and ``'TimeWindowCompactionStrategy'`` should be -preferred instead). The default is ``'SizeTieredCompactionStrategy'``. Custom strategy can be provided by specifying the full class name as a :ref:`string constant -`. - -All default strategies support a number of :ref:`common options `, as well as options specific to -the strategy chosen (see the section corresponding to your strategy for details: :ref:`STCS `, :ref:`LCS -` and :ref:`TWCS `). - -.. _cql-compression-options: - -Compression options -################### - -The ``compression`` options define if and how the sstables of the table are compressed. Compression is configured on a per-table -basis as an optional argument to ``CREATE TABLE`` or ``ALTER TABLE``. The following sub-options are -available: - -========================= =============== ============================================================================= - Option Default Description -========================= =============== ============================================================================= - ``class`` LZ4Compressor The compression algorithm to use. Default compressor are: LZ4Compressor, - SnappyCompressor, DeflateCompressor and ZstdCompressor. Use ``'enabled' : false`` to disable - compression. Custom compressor can be provided by specifying the full class - name as a “string constant”:#constants. - - ``enabled`` true Enable/disable sstable compression. If the ``enabled`` option is set to ``false`` no other - options must be specified. - - ``chunk_length_in_kb`` 64 On disk SSTables are compressed by block (to allow random reads). This - defines the size (in KB) of said block. Bigger values may improve the - compression rate, but increases the minimum size of data to be read from disk - for a read. The default value is an optimal value for compressing tables. Chunk length must - be a power of 2 because so is assumed so when computing the chunk number from an uncompressed - file offset. Block size may be adjusted based on read/write access patterns such as: - - - How much data is typically requested at once - - Average size of rows in the table - - ``crc_check_chance`` 1.0 Determines how likely Cassandra is to verify the checksum on each compression chunk during - reads. - - ``compression_level`` 3 Compression level. It is only applicable for ``ZstdCompressor`` and accepts values between - ``-131072`` and ``22``. -========================= =============== ============================================================================= - - -For instance, to create a table with LZ4Compressor and a chunk_lenth_in_kb of 4KB:: - - CREATE TABLE simple ( - id int, - key text, - value text, - PRIMARY KEY (key, value) - ) with compression = {'class': 'LZ4Compressor', 'chunk_length_in_kb': 4}; - - -.. _cql-caching-options: - -Caching options -############### - -Caching optimizes the use of cache memory of a table. The cached data is weighed by size and access frequency. The ``caching`` -options allows to configure both the *key cache* and the *row cache* for the table. The following -sub-options are available: - -======================== ========= ==================================================================================== - Option Default Description -======================== ========= ==================================================================================== - ``keys`` ALL Whether to cache keys (“key cache”) for this table. Valid values are: ``ALL`` and - ``NONE``. - ``rows_per_partition`` NONE The amount of rows to cache per partition (“row cache”). If an integer ``n`` is - specified, the first ``n`` queried rows of a partition will be cached. Other - possible options are ``ALL``, to cache all rows of a queried partition, or ``NONE`` - to disable row caching. -======================== ========= ==================================================================================== - - -For instance, to create a table with both a key cache and 10 rows per partition:: - - CREATE TABLE simple ( - id int, - key text, - value text, - PRIMARY KEY (key, value) - ) WITH caching = {'keys': 'ALL', 'rows_per_partition': 10}; - - -Read Repair options -################### - -The ``read_repair`` options configures the read repair behavior to allow tuning for various performance and -consistency behaviors. Two consistency properties are affected by read repair behavior. - -- Monotonic Quorum Reads: Provided by ``BLOCKING``. Monotonic quorum reads prevents reads from appearing to go back - in time in some circumstances. When monotonic quorum reads are not provided and a write fails to reach a quorum of - replicas, it may be visible in one read, and then disappear in a subsequent read. -- Write Atomicity: Provided by ``NONE``. Write atomicity prevents reads from returning partially applied writes. - Cassandra attempts to provide partition level write atomicity, but since only the data covered by a SELECT statement - is repaired by a read repair, read repair can break write atomicity when data is read at a more granular level than it - is written. For example read repair can break write atomicity if you write multiple rows to a clustered partition in a - batch, but then select a single row by specifying the clustering column in a SELECT statement. - -The available read repair settings are: - -Blocking -```````` -The default setting. When ``read_repair`` is set to ``BLOCKING``, and a read repair is triggered, the read will block -on writes sent to other replicas until the CL is reached by the writes. Provides monotonic quorum reads, but not partition -level write atomicity - -None -```` - -When ``read_repair`` is set to ``NONE``, the coordinator will reconcile any differences between replicas, but will not -attempt to repair them. Provides partition level write atomicity, but not monotonic quorum reads. - - -Other considerations: -##################### - -- Adding new columns (see ``ALTER TABLE`` below) is a constant time operation. There is thus no need to try to - anticipate future usage when creating a table. - -.. _alter-table-statement: - -ALTER TABLE -^^^^^^^^^^^ - -Altering an existing table uses the ``ALTER TABLE`` statement: - -.. productionlist:: - alter_table_statement: ALTER TABLE `table_name` `alter_table_instruction` - alter_table_instruction: ADD `column_name` `cql_type` ( ',' `column_name` `cql_type` )* - : | DROP `column_name` ( `column_name` )* - : | WITH `options` - -For instance:: - - ALTER TABLE addamsFamily ADD gravesite varchar; - - ALTER TABLE addamsFamily - WITH comment = 'A most excellent and useful table'; - -The ``ALTER TABLE`` statement can: - -- Add new column(s) to the table (through the ``ADD`` instruction). Note that the primary key of a table cannot be - changed and thus newly added column will, by extension, never be part of the primary key. Also note that :ref:`compact - tables ` have restrictions regarding column addition. Note that this is constant (in the amount of - data the cluster contains) time operation. -- Remove column(s) from the table. This drops both the column and all its content, but note that while the column - becomes immediately unavailable, its content is only removed lazily during compaction. Please also see the warnings - below. Due to lazy removal, the altering itself is a constant (in the amount of data removed or contained in the - cluster) time operation. -- Change some of the table options (through the ``WITH`` instruction). The :ref:`supported options - ` are the same that when creating a table (outside of ``COMPACT STORAGE`` and ``CLUSTERING - ORDER`` that cannot be changed after creation). Note that setting any ``compaction`` sub-options has the effect of - erasing all previous ``compaction`` options, so you need to re-specify all the sub-options if you want to keep them. - The same note applies to the set of ``compression`` sub-options. - -.. warning:: Dropping a column assumes that the timestamps used for the value of this column are "real" timestamp in - microseconds. Using "real" timestamps in microseconds is the default is and is **strongly** recommended but as - Cassandra allows the client to provide any timestamp on any table it is theoretically possible to use another - convention. Please be aware that if you do so, dropping a column will not work correctly. - -.. warning:: Once a column is dropped, it is allowed to re-add a column with the same name than the dropped one - **unless** the type of the dropped column was a (non-frozen) column (due to an internal technical limitation). - - -.. _drop-table-statement: - -DROP TABLE -^^^^^^^^^^ - -Dropping a table uses the ``DROP TABLE`` statement: - -.. productionlist:: - drop_table_statement: DROP TABLE [ IF EXISTS ] `table_name` - -Dropping a table results in the immediate, irreversible removal of the table, including all data it contains. - -If the table does not exist, the statement will return an error, unless ``IF EXISTS`` is used in which case the -operation is a no-op. - -.. _truncate-statement: - -TRUNCATE -^^^^^^^^ - -A table can be truncated using the ``TRUNCATE`` statement: - -.. productionlist:: - truncate_statement: TRUNCATE [ TABLE ] `table_name` - -Note that ``TRUNCATE TABLE foo`` is allowed for consistency with other DDL statements but tables are the only object -that can be truncated currently and so the ``TABLE`` keyword can be omitted. - -Truncating a table permanently removes all existing data from the table, but without removing the table itself. diff --git a/doc/source/cql/definitions.rst b/doc/source/cql/definitions.rst deleted file mode 100644 index 3df6f2099663..000000000000 --- a/doc/source/cql/definitions.rst +++ /dev/null @@ -1,234 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. _UUID: https://en.wikipedia.org/wiki/Universally_unique_identifier - -.. highlight:: cql - -Definitions ------------ - -.. _conventions: - -Conventions -^^^^^^^^^^^ - -To aid in specifying the CQL syntax, we will use the following conventions in this document: - -- Language rules will be given in an informal `BNF variant - `_ notation. In particular, we'll use square brakets - (``[ item ]``) for optional items, ``*`` and ``+`` for repeated items (where ``+`` imply at least one). -- The grammar will also use the following convention for convenience: non-terminal term will be lowercase (and link to - their definition) while terminal keywords will be provided "all caps". Note however that keywords are - :ref:`identifiers` and are thus case insensitive in practice. We will also define some early construction using - regexp, which we'll indicate with ``re()``. -- The grammar is provided for documentation purposes and leave some minor details out. For instance, the comma on the - last column definition in a ``CREATE TABLE`` statement is optional but supported if present even though the grammar in - this document suggests otherwise. Also, not everything accepted by the grammar is necessarily valid CQL. -- References to keywords or pieces of CQL code in running text will be shown in a ``fixed-width font``. - - -.. _identifiers: - -Identifiers and keywords -^^^^^^^^^^^^^^^^^^^^^^^^ - -The CQL language uses *identifiers* (or *names*) to identify tables, columns and other objects. An identifier is a token -matching the regular expression ``[a-zA-Z][a-zA-Z0-9_]*``. - -A number of such identifiers, like ``SELECT`` or ``WITH``, are *keywords*. They have a fixed meaning for the language -and most are reserved. The list of those keywords can be found in :ref:`appendix-A`. - -Identifiers and (unquoted) keywords are case insensitive. Thus ``SELECT`` is the same than ``select`` or ``sElEcT``, and -``myId`` is the same than ``myid`` or ``MYID``. A convention often used (in particular by the samples of this -documentation) is to use upper case for keywords and lower case for other identifiers. - -There is a second kind of identifiers called *quoted identifiers* defined by enclosing an arbitrary sequence of -characters (non empty) in double-quotes(``"``). Quoted identifiers are never keywords. Thus ``"select"`` is not a -reserved keyword and can be used to refer to a column (note that using this is particularly advised), while ``select`` -would raise a parsing error. Also, contrarily to unquoted identifiers and keywords, quoted identifiers are case -sensitive (``"My Quoted Id"`` is *different* from ``"my quoted id"``). A fully lowercase quoted identifier that matches -``[a-zA-Z][a-zA-Z0-9_]*`` is however *equivalent* to the unquoted identifier obtained by removing the double-quote (so -``"myid"`` is equivalent to ``myid`` and to ``myId`` but different from ``"myId"``). Inside a quoted identifier, the -double-quote character can be repeated to escape it, so ``"foo "" bar"`` is a valid identifier. - -.. note:: *quoted identifiers* allows to declare columns with arbitrary names, and those can sometime clash with - specific names used by the server. For instance, when using conditional update, the server will respond with a - result-set containing a special result named ``"[applied]"``. If you’ve declared a column with such a name, this - could potentially confuse some tools and should be avoided. In general, unquoted identifiers should be preferred but - if you use quoted identifiers, it is strongly advised to avoid any name enclosed by squared brackets (like - ``"[applied]"``) and any name that looks like a function call (like ``"f(x)"``). - -More formally, we have: - -.. productionlist:: - identifier: `unquoted_identifier` | `quoted_identifier` - unquoted_identifier: re('[a-zA-Z][a-zA-Z0-9_]*') - quoted_identifier: '"' (any character where " can appear if doubled)+ '"' - -.. _constants: - -Constants -^^^^^^^^^ - -CQL defines the following kind of *constants*: - -.. productionlist:: - constant: `string` | `integer` | `float` | `boolean` | `uuid` | `blob` | NULL - string: '\'' (any character where ' can appear if doubled)+ '\'' - : '$$' (any character other than '$$') '$$' - integer: re('-?[0-9]+') - float: re('-?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9+])?') | NAN | INFINITY - boolean: TRUE | FALSE - uuid: `hex`{8}-`hex`{4}-`hex`{4}-`hex`{4}-`hex`{12} - hex: re("[0-9a-fA-F]") - blob: '0' ('x' | 'X') `hex`+ - -In other words: - -- A string constant is an arbitrary sequence of characters enclosed by single-quote(``'``). A single-quote - can be included by repeating it, e.g. ``'It''s raining today'``. Those are not to be confused with quoted - :ref:`identifiers` that use double-quotes. Alternatively, a string can be defined by enclosing the arbitrary sequence - of characters by two dollar characters, in which case single-quote can be used without escaping (``$$It's raining - today$$``). That latter form is often used when defining :ref:`user-defined functions ` to avoid having to - escape single-quote characters in function body (as they are more likely to occur than ``$$``). -- Integer, float and boolean constant are defined as expected. Note however than float allows the special ``NaN`` and - ``Infinity`` constants. -- CQL supports UUID_ constants. -- Blobs content are provided in hexadecimal and prefixed by ``0x``. -- The special ``NULL`` constant denotes the absence of value. - -For how these constants are typed, see the :ref:`data-types` section. - -Terms -^^^^^ - -CQL has the notion of a *term*, which denotes the kind of values that CQL support. Terms are defined by: - -.. productionlist:: - term: `constant` | `literal` | `function_call` | `arithmetic_operation` | `type_hint` | `bind_marker` - literal: `collection_literal` | `udt_literal` | `tuple_literal` - function_call: `identifier` '(' [ `term` (',' `term`)* ] ')' - arithmetic_operation: '-' `term` | `term` ('+' | '-' | '*' | '/' | '%') `term` - type_hint: '(' `cql_type` `)` term - bind_marker: '?' | ':' `identifier` - -A term is thus one of: - -- A :ref:`constant `. -- A literal for either :ref:`a collection `, :ref:`a user-defined type ` or :ref:`a tuple ` - (see the linked sections for details). -- A function call: see :ref:`the section on functions ` for details on which :ref:`native function - ` exists and how to define your own :ref:`user-defined ones `. -- An arithmetic operation between terms. see :ref:`the section on arithmetic operations ` -- A *type hint*: see the :ref:`related section ` for details. -- A bind marker, which denotes a variable to be bound at execution time. See the section on :ref:`prepared-statements` - for details. A bind marker can be either anonymous (``?``) or named (``:some_name``). The latter form provides a more - convenient way to refer to the variable for binding it and should generally be preferred. - - -Comments -^^^^^^^^ - -A comment in CQL is a line beginning by either double dashes (``--``) or double slash (``//``). - -Multi-line comments are also supported through enclosure within ``/*`` and ``*/`` (but nesting is not supported). - -:: - - -- This is a comment - // This is a comment too - /* This is - a multi-line comment */ - -Statements -^^^^^^^^^^ - -CQL consists of statements that can be divided in the following categories: - -- :ref:`data-definition` statements, to define and change how the data is stored (keyspaces and tables). -- :ref:`data-manipulation` statements, for selecting, inserting and deleting data. -- :ref:`secondary-indexes` statements. -- :ref:`materialized-views` statements. -- :ref:`cql-roles` statements. -- :ref:`cql-permissions` statements. -- :ref:`User-Defined Functions ` statements. -- :ref:`udts` statements. -- :ref:`cql-triggers` statements. - -All the statements are listed below and are described in the rest of this documentation (see links above): - -.. productionlist:: - cql_statement: `statement` [ ';' ] - statement: `ddl_statement` - : | `dml_statement` - : | `secondary_index_statement` - : | `materialized_view_statement` - : | `role_or_permission_statement` - : | `udf_statement` - : | `udt_statement` - : | `trigger_statement` - ddl_statement: `use_statement` - : | `create_keyspace_statement` - : | `alter_keyspace_statement` - : | `drop_keyspace_statement` - : | `create_table_statement` - : | `alter_table_statement` - : | `drop_table_statement` - : | `truncate_statement` - dml_statement: `select_statement` - : | `insert_statement` - : | `update_statement` - : | `delete_statement` - : | `batch_statement` - secondary_index_statement: `create_index_statement` - : | `drop_index_statement` - materialized_view_statement: `create_materialized_view_statement` - : | `drop_materialized_view_statement` - role_or_permission_statement: `create_role_statement` - : | `alter_role_statement` - : | `drop_role_statement` - : | `grant_role_statement` - : | `revoke_role_statement` - : | `list_roles_statement` - : | `grant_permission_statement` - : | `revoke_permission_statement` - : | `list_permissions_statement` - : | `create_user_statement` - : | `alter_user_statement` - : | `drop_user_statement` - : | `list_users_statement` - udf_statement: `create_function_statement` - : | `drop_function_statement` - : | `create_aggregate_statement` - : | `drop_aggregate_statement` - udt_statement: `create_type_statement` - : | `alter_type_statement` - : | `drop_type_statement` - trigger_statement: `create_trigger_statement` - : | `drop_trigger_statement` - -.. _prepared-statements: - -Prepared Statements -^^^^^^^^^^^^^^^^^^^ - -CQL supports *prepared statements*. Prepared statements are an optimization that allows to parse a query only once but -execute it multiple times with different concrete values. - -Any statement that uses at least one bind marker (see :token:`bind_marker`) will need to be *prepared*. After which the statement -can be *executed* by provided concrete values for each of its marker. The exact details of how a statement is prepared -and then executed depends on the CQL driver used and you should refer to your driver documentation. diff --git a/doc/source/cql/dml.rst b/doc/source/cql/dml.rst deleted file mode 100644 index 1308de57ee87..000000000000 --- a/doc/source/cql/dml.rst +++ /dev/null @@ -1,522 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _data-manipulation: - -Data Manipulation ------------------ - -This section describes the statements supported by CQL to insert, update, delete and query data. - -.. _select-statement: - -SELECT -^^^^^^ - -Querying data from data is done using a ``SELECT`` statement: - -.. productionlist:: - select_statement: SELECT [ JSON | DISTINCT ] ( `select_clause` | '*' ) - : FROM `table_name` - : [ WHERE `where_clause` ] - : [ GROUP BY `group_by_clause` ] - : [ ORDER BY `ordering_clause` ] - : [ PER PARTITION LIMIT (`integer` | `bind_marker`) ] - : [ LIMIT (`integer` | `bind_marker`) ] - : [ ALLOW FILTERING ] - select_clause: `selector` [ AS `identifier` ] ( ',' `selector` [ AS `identifier` ] ) - selector: `column_name` - : | `term` - : | CAST '(' `selector` AS `cql_type` ')' - : | `function_name` '(' [ `selector` ( ',' `selector` )* ] ')' - : | COUNT '(' '*' ')' - where_clause: `relation` ( AND `relation` )* - relation: `column_name` `operator` `term` - : '(' `column_name` ( ',' `column_name` )* ')' `operator` `tuple_literal` - : TOKEN '(' `column_name` ( ',' `column_name` )* ')' `operator` `term` - operator: '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEY - group_by_clause: `column_name` ( ',' `column_name` )* - ordering_clause: `column_name` [ ASC | DESC ] ( ',' `column_name` [ ASC | DESC ] )* - -For instance:: - - SELECT name, occupation FROM users WHERE userid IN (199, 200, 207); - SELECT JSON name, occupation FROM users WHERE userid = 199; - SELECT name AS user_name, occupation AS user_occupation FROM users; - - SELECT time, value - FROM events - WHERE event_type = 'myEvent' - AND time > '2011-02-03' - AND time <= '2012-01-01' - - SELECT COUNT (*) AS user_count FROM users; - -The ``SELECT`` statements reads one or more columns for one or more rows in a table. It returns a result-set of the rows -matching the request, where each row contains the values for the selection corresponding to the query. Additionally, -:ref:`functions ` including :ref:`aggregation ` ones can be applied to the result. - -A ``SELECT`` statement contains at least a :ref:`selection clause ` and the name of the table on which -the selection is on (note that CQL does **not** joins or sub-queries and thus a select statement only apply to a single -table). In most case, a select will also have a :ref:`where clause ` and it can optionally have additional -clauses to :ref:`order ` or :ref:`limit ` the results. Lastly, :ref:`queries that require -filtering ` can be allowed if the ``ALLOW FILTERING`` flag is provided. - -.. _selection-clause: - -Selection clause -~~~~~~~~~~~~~~~~ - -The :token:`select_clause` determines which columns needs to be queried and returned in the result-set, as well as any -transformation to apply to this result before returning. It consists of a comma-separated list of *selectors* or, -alternatively, of the wildcard character (``*``) to select all the columns defined in the table. - -Selectors -````````` - -A :token:`selector` can be one of: - -- A column name of the table selected, to retrieve the values for that column. -- A term, which is usually used nested inside other selectors like functions (if a term is selected directly, then the - corresponding column of the result-set will simply have the value of this term for every row returned). -- A casting, which allows to convert a nested selector to a (compatible) type. -- A function call, where the arguments are selector themselves. See the section on :ref:`functions ` for - more details. -- The special call ``COUNT(*)`` to the :ref:`COUNT function `, which counts all non-null results. - -Aliases -``````` - -Every *top-level* selector can also be aliased (using `AS`). If so, the name of the corresponding column in the result -set will be that of the alias. For instance:: - - // Without alias - SELECT intAsBlob(4) FROM t; - - // intAsBlob(4) - // -------------- - // 0x00000004 - - // With alias - SELECT intAsBlob(4) AS four FROM t; - - // four - // ------------ - // 0x00000004 - -.. note:: Currently, aliases aren't recognized anywhere else in the statement where they are used (not in the ``WHERE`` - clause, not in the ``ORDER BY`` clause, ...). You must use the orignal column name instead. - - -``WRITETIME`` and ``TTL`` function -``````````````````````````````````` - -Selection supports two special functions (that aren't allowed anywhere else): ``WRITETIME`` and ``TTL``. Both function -take only one argument and that argument *must* be a column name (so for instance ``TTL(3)`` is invalid). - -Those functions allow to retrieve meta-information that are stored internally for each column, namely: - -- the timestamp of the value of the column for ``WRITETIME``. -- the remaining time to live (in seconds) for the value of the column if it set to expire (and ``null`` otherwise). - -.. _where-clause: - -The ``WHERE`` clause -~~~~~~~~~~~~~~~~~~~~ - -The ``WHERE`` clause specifies which rows must be queried. It is composed of relations on the columns that are part of -the ``PRIMARY KEY`` and/or have a `secondary index <#createIndexStmt>`__ defined on them. - -Not all relations are allowed in a query. For instance, non-equal relations (where ``IN`` is considered as an equal -relation) on a partition key are not supported (but see the use of the ``TOKEN`` method below to do non-equal queries on -the partition key). Moreover, for a given partition key, the clustering columns induce an ordering of rows and relations -on them is restricted to the relations that allow to select a **contiguous** (for the ordering) set of rows. For -instance, given:: - - CREATE TABLE posts ( - userid text, - blog_title text, - posted_at timestamp, - entry_title text, - content text, - category int, - PRIMARY KEY (userid, blog_title, posted_at) - ) - -The following query is allowed:: - - SELECT entry_title, content FROM posts - WHERE userid = 'john doe' - AND blog_title='John''s Blog' - AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31' - -But the following one is not, as it does not select a contiguous set of rows (and we suppose no secondary indexes are -set):: - - // Needs a blog_title to be set to select ranges of posted_at - SELECT entry_title, content FROM posts - WHERE userid = 'john doe' - AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31' - -When specifying relations, the ``TOKEN`` function can be used on the ``PARTITION KEY`` column to query. In that case, -rows will be selected based on the token of their ``PARTITION_KEY`` rather than on the value. Note that the token of a -key depends on the partitioner in use, and that in particular the RandomPartitioner won't yield a meaningful order. Also -note that ordering partitioners always order token values by bytes (so even if the partition key is of type int, -``token(-1) > token(0)`` in particular). Example:: - - SELECT * FROM posts - WHERE token(userid) > token('tom') AND token(userid) < token('bob') - -Moreover, the ``IN`` relation is only allowed on the last column of the partition key and on the last column of the full -primary key. - -It is also possible to “group” ``CLUSTERING COLUMNS`` together in a relation using the tuple notation. For instance:: - - SELECT * FROM posts - WHERE userid = 'john doe' - AND (blog_title, posted_at) > ('John''s Blog', '2012-01-01') - -will request all rows that sorts after the one having “John's Blog” as ``blog_tile`` and '2012-01-01' for ``posted_at`` -in the clustering order. In particular, rows having a ``post_at <= '2012-01-01'`` will be returned as long as their -``blog_title > 'John''s Blog'``, which would not be the case for:: - - SELECT * FROM posts - WHERE userid = 'john doe' - AND blog_title > 'John''s Blog' - AND posted_at > '2012-01-01' - -The tuple notation may also be used for ``IN`` clauses on clustering columns:: - - SELECT * FROM posts - WHERE userid = 'john doe' - AND (blog_title, posted_at) IN (('John''s Blog', '2012-01-01'), ('Extreme Chess', '2014-06-01')) - -The ``CONTAINS`` operator may only be used on collection columns (lists, sets, and maps). In the case of maps, -``CONTAINS`` applies to the map values. The ``CONTAINS KEY`` operator may only be used on map columns and applies to the -map keys. - -.. _group-by-clause: - -Grouping results -~~~~~~~~~~~~~~~~ - -The ``GROUP BY`` option allows to condense into a single row all selected rows that share the same values for a set -of columns. - -Using the ``GROUP BY`` option, it is only possible to group rows at the partition key level or at a clustering column -level. By consequence, the ``GROUP BY`` option only accept as arguments primary key column names in the primary key -order. If a primary key column is restricted by an equality restriction it is not required to be present in the -``GROUP BY`` clause. - -Aggregate functions will produce a separate value for each group. If no ``GROUP BY`` clause is specified, -aggregates functions will produce a single value for all the rows. - -If a column is selected without an aggregate function, in a statement with a ``GROUP BY``, the first value encounter -in each group will be returned. - -.. _ordering-clause: - -Ordering results -~~~~~~~~~~~~~~~~ - -The ``ORDER BY`` clause allows to select the order of the returned results. It takes as argument a list of column names -along with the order for the column (``ASC`` for ascendant and ``DESC`` for descendant, omitting the order being -equivalent to ``ASC``). Currently the possible orderings are limited by the :ref:`clustering order ` -defined on the table: - -- if the table has been defined without any specific ``CLUSTERING ORDER``, then then allowed orderings are the order - induced by the clustering columns and the reverse of that one. -- otherwise, the orderings allowed are the order of the ``CLUSTERING ORDER`` option and the reversed one. - -.. _limit-clause: - -Limiting results -~~~~~~~~~~~~~~~~ - -The ``LIMIT`` option to a ``SELECT`` statement limits the number of rows returned by a query, while the ``PER PARTITION -LIMIT`` option limits the number of rows returned for a given partition by the query. Note that both type of limit can -used in the same statement. - -.. _allow-filtering: - -Allowing filtering -~~~~~~~~~~~~~~~~~~ - -By default, CQL only allows select queries that don't involve “filtering” server side, i.e. queries where we know that -all (live) record read will be returned (maybe partly) in the result set. The reasoning is that those “non filtering” -queries have predictable performance in the sense that they will execute in a time that is proportional to the amount of -data **returned** by the query (which can be controlled through ``LIMIT``). - -The ``ALLOW FILTERING`` option allows to explicitly allow (some) queries that require filtering. Please note that a -query using ``ALLOW FILTERING`` may thus have unpredictable performance (for the definition above), i.e. even a query -that selects a handful of records **may** exhibit performance that depends on the total amount of data stored in the -cluster. - -For instance, considering the following table holding user profiles with their year of birth (with a secondary index on -it) and country of residence:: - - CREATE TABLE users ( - username text PRIMARY KEY, - firstname text, - lastname text, - birth_year int, - country text - ) - - CREATE INDEX ON users(birth_year); - -Then the following queries are valid:: - - SELECT * FROM users; - SELECT * FROM users WHERE birth_year = 1981; - -because in both case, Cassandra guarantees that these queries performance will be proportional to the amount of data -returned. In particular, if no users are born in 1981, then the second query performance will not depend of the number -of user profile stored in the database (not directly at least: due to secondary index implementation consideration, this -query may still depend on the number of node in the cluster, which indirectly depends on the amount of data stored. -Nevertheless, the number of nodes will always be multiple number of magnitude lower than the number of user profile -stored). Of course, both query may return very large result set in practice, but the amount of data returned can always -be controlled by adding a ``LIMIT``. - -However, the following query will be rejected:: - - SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR'; - -because Cassandra cannot guarantee that it won't have to scan large amount of data even if the result to those query is -small. Typically, it will scan all the index entries for users born in 1981 even if only a handful are actually from -France. However, if you “know what you are doing”, you can force the execution of this query by using ``ALLOW -FILTERING`` and so the following query is valid:: - - SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR' ALLOW FILTERING; - -.. _insert-statement: - -INSERT -^^^^^^ - -Inserting data for a row is done using an ``INSERT`` statement: - -.. productionlist:: - insert_statement: INSERT INTO `table_name` ( `names_values` | `json_clause` ) - : [ IF NOT EXISTS ] - : [ USING `update_parameter` ( AND `update_parameter` )* ] - names_values: `names` VALUES `tuple_literal` - json_clause: JSON `string` [ DEFAULT ( NULL | UNSET ) ] - names: '(' `column_name` ( ',' `column_name` )* ')' - -For instance:: - - INSERT INTO NerdMovies (movie, director, main_actor, year) - VALUES ('Serenity', 'Joss Whedon', 'Nathan Fillion', 2005) - USING TTL 86400; - - INSERT INTO NerdMovies JSON '{"movie": "Serenity", - "director": "Joss Whedon", - "year": 2005}'; - -The ``INSERT`` statement writes one or more columns for a given row in a table. Note that since a row is identified by -its ``PRIMARY KEY``, at least the columns composing it must be specified. The list of columns to insert to must be -supplied when using the ``VALUES`` syntax. When using the ``JSON`` syntax, they are optional. See the -section on :ref:`JSON support ` for more detail. - -Note that unlike in SQL, ``INSERT`` does not check the prior existence of the row by default: the row is created if none -existed before, and updated otherwise. Furthermore, there is no mean to know which of creation or update happened. - -It is however possible to use the ``IF NOT EXISTS`` condition to only insert if the row does not exist prior to the -insertion. But please note that using ``IF NOT EXISTS`` will incur a non negligible performance cost (internally, Paxos -will be used) so this should be used sparingly. - -All updates for an ``INSERT`` are applied atomically and in isolation. - -Please refer to the :ref:`UPDATE ` section for informations on the :token:`update_parameter`. - -Also note that ``INSERT`` does not support counters, while ``UPDATE`` does. - -.. _update-statement: - -UPDATE -^^^^^^ - -Updating a row is done using an ``UPDATE`` statement: - -.. productionlist:: - update_statement: UPDATE `table_name` - : [ USING `update_parameter` ( AND `update_parameter` )* ] - : SET `assignment` ( ',' `assignment` )* - : WHERE `where_clause` - : [ IF ( EXISTS | `condition` ( AND `condition` )*) ] - update_parameter: ( TIMESTAMP | TTL ) ( `integer` | `bind_marker` ) - assignment: `simple_selection` '=' `term` - :| `column_name` '=' `column_name` ( '+' | '-' ) `term` - :| `column_name` '=' `list_literal` '+' `column_name` - simple_selection: `column_name` - :| `column_name` '[' `term` ']' - :| `column_name` '.' `field_name - condition: `simple_selection` `operator` `term` - -For instance:: - - UPDATE NerdMovies USING TTL 400 - SET director = 'Joss Whedon', - main_actor = 'Nathan Fillion', - year = 2005 - WHERE movie = 'Serenity'; - - UPDATE UserActions - SET total = total + 2 - WHERE user = B70DE1D0-9908-4AE3-BE34-5573E5B09F14 - AND action = 'click'; - -The ``UPDATE`` statement writes one or more columns for a given row in a table. The :token:`where_clause` is used to -select the row to update and must include all columns composing the ``PRIMARY KEY``. Non primary key columns are then -set using the ``SET`` keyword. - -Note that unlike in SQL, ``UPDATE`` does not check the prior existence of the row by default (except through ``IF``, see -below): the row is created if none existed before, and updated otherwise. Furthermore, there are no means to know -whether a creation or update occurred. - -It is however possible to use the conditions on some columns through ``IF``, in which case the row will not be updated -unless the conditions are met. But, please note that using ``IF`` conditions will incur a non-negligible performance -cost (internally, Paxos will be used) so this should be used sparingly. - -In an ``UPDATE`` statement, all updates within the same partition key are applied atomically and in isolation. - -Regarding the :token:`assignment`: - -- ``c = c + 3`` is used to increment/decrement counters. The column name after the '=' sign **must** be the same than - the one before the '=' sign. Note that increment/decrement is only allowed on counters, and are the *only* update - operations allowed on counters. See the section on :ref:`counters ` for details. -- ``id = id + `` and ``id[value1] = value2`` are for collections, see the :ref:`relevant section - ` for details. -- ``id.field = 3`` is for setting the value of a field on a non-frozen user-defined types. see the :ref:`relevant section - ` for details. - -.. _update-parameters: - -Update parameters -~~~~~~~~~~~~~~~~~ - -The ``UPDATE``, ``INSERT`` (and ``DELETE`` and ``BATCH`` for the ``TIMESTAMP``) statements support the following -parameters: - -- ``TIMESTAMP``: sets the timestamp for the operation. If not specified, the coordinator will use the current time (in - microseconds) at the start of statement execution as the timestamp. This is usually a suitable default. -- ``TTL``: specifies an optional Time To Live (in seconds) for the inserted values. If set, the inserted values are - automatically removed from the database after the specified time. Note that the TTL concerns the inserted values, not - the columns themselves. This means that any subsequent update of the column will also reset the TTL (to whatever TTL - is specified in that update). By default, values never expire. A TTL of 0 is equivalent to no TTL. If the table has a - default_time_to_live, a TTL of 0 will remove the TTL for the inserted or updated values. A TTL of ``null`` is equivalent - to inserting with a TTL of 0. - -.. _delete_statement: - -DELETE -^^^^^^ - -Deleting rows or parts of rows uses the ``DELETE`` statement: - -.. productionlist:: - delete_statement: DELETE [ `simple_selection` ( ',' `simple_selection` ) ] - : FROM `table_name` - : [ USING `update_parameter` ( AND `update_parameter` )* ] - : WHERE `where_clause` - : [ IF ( EXISTS | `condition` ( AND `condition` )*) ] - -For instance:: - - DELETE FROM NerdMovies USING TIMESTAMP 1240003134 - WHERE movie = 'Serenity'; - - DELETE phone FROM Users - WHERE userid IN (C73DE1D3-AF08-40F3-B124-3FF3E5109F22, B70DE1D0-9908-4AE3-BE34-5573E5B09F14); - -The ``DELETE`` statement deletes columns and rows. If column names are provided directly after the ``DELETE`` keyword, -only those columns are deleted from the row indicated by the ``WHERE`` clause. Otherwise, whole rows are removed. - -The ``WHERE`` clause specifies which rows are to be deleted. Multiple rows may be deleted with one statement by using an -``IN`` operator. A range of rows may be deleted using an inequality operator (such as ``>=``). - -``DELETE`` supports the ``TIMESTAMP`` option with the same semantics as in :ref:`updates `. - -In a ``DELETE`` statement, all deletions within the same partition key are applied atomically and in isolation. - -A ``DELETE`` operation can be conditional through the use of an ``IF`` clause, similar to ``UPDATE`` and ``INSERT`` -statements. However, as with ``INSERT`` and ``UPDATE`` statements, this will incur a non-negligible performance cost -(internally, Paxos will be used) and so should be used sparingly. - -.. _batch_statement: - -BATCH -^^^^^ - -Multiple ``INSERT``, ``UPDATE`` and ``DELETE`` can be executed in a single statement by grouping them through a -``BATCH`` statement: - -.. productionlist:: - batch_statement: BEGIN [ UNLOGGED | COUNTER ] BATCH - : [ USING `update_parameter` ( AND `update_parameter` )* ] - : `modification_statement` ( ';' `modification_statement` )* - : APPLY BATCH - modification_statement: `insert_statement` | `update_statement` | `delete_statement` - -For instance:: - - BEGIN BATCH - INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user'); - UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3'; - INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c'); - DELETE name FROM users WHERE userid = 'user1'; - APPLY BATCH; - -The ``BATCH`` statement group multiple modification statements (insertions/updates and deletions) into a single -statement. It serves several purposes: - -- It saves network round-trips between the client and the server (and sometimes between the server coordinator and the - replicas) when batching multiple updates. -- All updates in a ``BATCH`` belonging to a given partition key are performed in isolation. -- By default, all operations in the batch are performed as *logged*, to ensure all mutations eventually complete (or - none will). See the notes on :ref:`UNLOGGED batches ` for more details. - -Note that: - -- ``BATCH`` statements may only contain ``UPDATE``, ``INSERT`` and ``DELETE`` statements (not other batches for instance). -- Batches are *not* a full analogue for SQL transactions. -- If a timestamp is not specified for each operation, then all operations will be applied with the same timestamp - (either one generated automatically, or the timestamp provided at the batch level). Due to Cassandra's conflict - resolution procedure in the case of `timestamp ties `__, operations may - be applied in an order that is different from the order they are listed in the ``BATCH`` statement. To force a - particular operation ordering, you must specify per-operation timestamps. -- A LOGGED batch to a single partition will be converted to an UNLOGGED batch as an optimization. - -.. _unlogged-batches: - -``UNLOGGED`` batches -~~~~~~~~~~~~~~~~~~~~ - -By default, Cassandra uses a batch log to ensure all operations in a batch eventually complete or none will (note -however that operations are only isolated within a single partition). - -There is a performance penalty for batch atomicity when a batch spans multiple partitions. If you do not want to incur -this penalty, you can tell Cassandra to skip the batchlog with the ``UNLOGGED`` option. If the ``UNLOGGED`` option is -used, a failed batch might leave the patch only partly applied. - -``COUNTER`` batches -~~~~~~~~~~~~~~~~~~~ - -Use the ``COUNTER`` option for batched counter updates. Unlike other -updates in Cassandra, counter updates are not idempotent. diff --git a/doc/source/cql/functions.rst b/doc/source/cql/functions.rst deleted file mode 100644 index 965125a79fc8..000000000000 --- a/doc/source/cql/functions.rst +++ /dev/null @@ -1,581 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _cql-functions: - -.. Need some intro for UDF and native functions in general and point those to it. -.. _udfs: -.. _native-functions: - -Functions ---------- - -CQL supports 2 main categories of functions: - -- the :ref:`scalar functions `, which simply take a number of values and produce an output with it. -- the :ref:`aggregate functions `, which are used to aggregate multiple rows results from a - ``SELECT`` statement. - -In both cases, CQL provides a number of native "hard-coded" functions as well as the ability to create new user-defined -functions. - -.. note:: By default, the use of user-defined functions is disabled by default for security concerns (even when - enabled, the execution of user-defined functions is sandboxed and a "rogue" function should not be allowed to do - evil, but no sandbox is perfect so using user-defined functions is opt-in). See the ``enable_user_defined_functions`` - in ``cassandra.yaml`` to enable them. - -A function is identifier by its name: - -.. productionlist:: - function_name: [ `keyspace_name` '.' ] `name` - -.. _scalar-functions: - -Scalar functions -^^^^^^^^^^^^^^^^ - -.. _scalar-native-functions: - -Native functions -~~~~~~~~~~~~~~~~ - -Cast -```` - -The ``cast`` function can be used to converts one native datatype to another. - -The following table describes the conversions supported by the ``cast`` function. Cassandra will silently ignore any -cast converting a datatype into its own datatype. - -=============== ======================================================================================================= - From To -=============== ======================================================================================================= - ``ascii`` ``text``, ``varchar`` - ``bigint`` ``tinyint``, ``smallint``, ``int``, ``float``, ``double``, ``decimal``, ``varint``, ``text``, - ``varchar`` - ``boolean`` ``text``, ``varchar`` - ``counter`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``double``, ``decimal``, ``varint``, - ``text``, ``varchar`` - ``date`` ``timestamp`` - ``decimal`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``double``, ``varint``, ``text``, - ``varchar`` - ``double`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``decimal``, ``varint``, ``text``, - ``varchar`` - ``float`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``double``, ``decimal``, ``varint``, ``text``, - ``varchar`` - ``inet`` ``text``, ``varchar`` - ``int`` ``tinyint``, ``smallint``, ``bigint``, ``float``, ``double``, ``decimal``, ``varint``, ``text``, - ``varchar`` - ``smallint`` ``tinyint``, ``int``, ``bigint``, ``float``, ``double``, ``decimal``, ``varint``, ``text``, - ``varchar`` - ``time`` ``text``, ``varchar`` - ``timestamp`` ``date``, ``text``, ``varchar`` - ``timeuuid`` ``timestamp``, ``date``, ``text``, ``varchar`` - ``tinyint`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``double``, ``decimal``, ``varint``, - ``text``, ``varchar`` - ``uuid`` ``text``, ``varchar`` - ``varint`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``double``, ``decimal``, ``text``, - ``varchar`` -=============== ======================================================================================================= - -The conversions rely strictly on Java's semantics. For example, the double value 1 will be converted to the text value -'1.0'. For instance:: - - SELECT avg(cast(count as double)) FROM myTable - -Token -````` - -The ``token`` function allows to compute the token for a given partition key. The exact signature of the token function -depends on the table concerned and of the partitioner used by the cluster. - -The type of the arguments of the ``token`` depend on the type of the partition key columns. The return type depend on -the partitioner in use: - -- For Murmur3Partitioner, the return type is ``bigint``. -- For RandomPartitioner, the return type is ``varint``. -- For ByteOrderedPartitioner, the return type is ``blob``. - -For instance, in a cluster using the default Murmur3Partitioner, if a table is defined by:: - - CREATE TABLE users ( - userid text PRIMARY KEY, - username text, - ) - -then the ``token`` function will take a single argument of type ``text`` (in that case, the partition key is ``userid`` -(there is no clustering columns so the partition key is the same than the primary key)), and the return type will be -``bigint``. - -Uuid -```` -The ``uuid`` function takes no parameters and generates a random type 4 uuid suitable for use in ``INSERT`` or -``UPDATE`` statements. - -.. _timeuuid-functions: - -Timeuuid functions -`````````````````` - -``now`` -####### - -The ``now`` function takes no arguments and generates, on the coordinator node, a new unique timeuuid at the -time the function is invoked. Note that this method is useful for insertion but is largely non-sensical in -``WHERE`` clauses. For instance, a query of the form:: - - SELECT * FROM myTable WHERE t = now() - -will never return any result by design, since the value returned by ``now()`` is guaranteed to be unique. - -``currentTimeUUID`` is an alias of ``now``. - -``minTimeuuid`` and ``maxTimeuuid`` -################################### - -The ``minTimeuuid`` (resp. ``maxTimeuuid``) function takes a ``timestamp`` value ``t`` (which can be `either a timestamp -or a date string `) and return a *fake* ``timeuuid`` corresponding to the *smallest* (resp. *biggest*) -possible ``timeuuid`` having for timestamp ``t``. So for instance:: - - SELECT * FROM myTable - WHERE t > maxTimeuuid('2013-01-01 00:05+0000') - AND t < minTimeuuid('2013-02-02 10:00+0000') - -will select all rows where the ``timeuuid`` column ``t`` is strictly older than ``'2013-01-01 00:05+0000'`` but strictly -younger than ``'2013-02-02 10:00+0000'``. Please note that ``t >= maxTimeuuid('2013-01-01 00:05+0000')`` would still -*not* select a ``timeuuid`` generated exactly at '2013-01-01 00:05+0000' and is essentially equivalent to ``t > -maxTimeuuid('2013-01-01 00:05+0000')``. - -.. note:: We called the values generated by ``minTimeuuid`` and ``maxTimeuuid`` *fake* UUID because they do no respect - the Time-Based UUID generation process specified by the `RFC 4122 `__. In - particular, the value returned by these 2 methods will not be unique. This means you should only use those methods - for querying (as in the example above). Inserting the result of those methods is almost certainly *a bad idea*. - -Datetime functions -`````````````````` - -Retrieving the current date/time -################################ - -The following functions can be used to retrieve the date/time at the time where the function is invoked: - -===================== =============== - Function name Output type -===================== =============== - ``currentTimestamp`` ``timestamp`` - ``currentDate`` ``date`` - ``currentTime`` ``time`` - ``currentTimeUUID`` ``timeUUID`` -===================== =============== - -For example the last 2 days of data can be retrieved using:: - - SELECT * FROM myTable WHERE date >= currentDate() - 2d - -Time conversion functions -######################### - -A number of functions are provided to “convert” a ``timeuuid``, a ``timestamp`` or a ``date`` into another ``native`` -type. - -===================== =============== =================================================================== - Function name Input type Description -===================== =============== =================================================================== - ``toDate`` ``timeuuid`` Converts the ``timeuuid`` argument into a ``date`` type - ``toDate`` ``timestamp`` Converts the ``timestamp`` argument into a ``date`` type - ``toTimestamp`` ``timeuuid`` Converts the ``timeuuid`` argument into a ``timestamp`` type - ``toTimestamp`` ``date`` Converts the ``date`` argument into a ``timestamp`` type - ``toUnixTimestamp`` ``timeuuid`` Converts the ``timeuuid`` argument into a ``bigInt`` raw value - ``toUnixTimestamp`` ``timestamp`` Converts the ``timestamp`` argument into a ``bigInt`` raw value - ``toUnixTimestamp`` ``date`` Converts the ``date`` argument into a ``bigInt`` raw value - ``dateOf`` ``timeuuid`` Similar to ``toTimestamp(timeuuid)`` (DEPRECATED) - ``unixTimestampOf`` ``timeuuid`` Similar to ``toUnixTimestamp(timeuuid)`` (DEPRECATED) -===================== =============== =================================================================== - -Blob conversion functions -````````````````````````` -A number of functions are provided to “convert” the native types into binary data (``blob``). For every -```` ``type`` supported by CQL (a notable exceptions is ``blob``, for obvious reasons), the function -``typeAsBlob`` takes a argument of type ``type`` and return it as a ``blob``. Conversely, the function ``blobAsType`` -takes a 64-bit ``blob`` argument and convert it to a ``bigint`` value. And so for instance, ``bigintAsBlob(3)`` is -``0x0000000000000003`` and ``blobAsBigint(0x0000000000000003)`` is ``3``. - -.. _user-defined-scalar-functions: - -User-defined functions -~~~~~~~~~~~~~~~~~~~~~~ - -User-defined functions allow execution of user-provided code in Cassandra. By default, Cassandra supports defining -functions in *Java* and *JavaScript*. Support for other JSR 223 compliant scripting languages (such as Python, Ruby, and -Scala) can be added by adding a JAR to the classpath. - -UDFs are part of the Cassandra schema. As such, they are automatically propagated to all nodes in the cluster. - -UDFs can be *overloaded* - i.e. multiple UDFs with different argument types but the same function name. Example:: - - CREATE FUNCTION sample ( arg int ) ...; - CREATE FUNCTION sample ( arg text ) ...; - -User-defined functions are susceptible to all of the normal problems with the chosen programming language. Accordingly, -implementations should be safe against null pointer exceptions, illegal arguments, or any other potential source of -exceptions. An exception during function execution will result in the entire statement failing. - -It is valid to use *complex* types like collections, tuple types and user-defined types as argument and return types. -Tuple types and user-defined types are handled by the conversion functions of the DataStax Java Driver. Please see the -documentation of the Java Driver for details on handling tuple types and user-defined types. - -Arguments for functions can be literals or terms. Prepared statement placeholders can be used, too. - -Note that you can use the double-quoted string syntax to enclose the UDF source code. For example:: - - CREATE FUNCTION some_function ( arg int ) - RETURNS NULL ON NULL INPUT - RETURNS int - LANGUAGE java - AS $$ return arg; $$; - - SELECT some_function(column) FROM atable ...; - UPDATE atable SET col = some_function(?) ...; - - CREATE TYPE custom_type (txt text, i int); - CREATE FUNCTION fct_using_udt ( udtarg frozen ) - RETURNS NULL ON NULL INPUT - RETURNS text - LANGUAGE java - AS $$ return udtarg.getString("txt"); $$; - -User-defined functions can be used in ``SELECT``, ``INSERT`` and ``UPDATE`` statements. - -The implicitly available ``udfContext`` field (or binding for script UDFs) provides the necessary functionality to -create new UDT and tuple values:: - - CREATE TYPE custom_type (txt text, i int); - CREATE FUNCTION fct\_using\_udt ( somearg int ) - RETURNS NULL ON NULL INPUT - RETURNS custom_type - LANGUAGE java - AS $$ - UDTValue udt = udfContext.newReturnUDTValue(); - udt.setString("txt", "some string"); - udt.setInt("i", 42); - return udt; - $$; - -The definition of the ``UDFContext`` interface can be found in the Apache Cassandra source code for -``org.apache.cassandra.cql3.functions.UDFContext``. - -.. code-block:: java - - public interface UDFContext - { - UDTValue newArgUDTValue(String argName); - UDTValue newArgUDTValue(int argNum); - UDTValue newReturnUDTValue(); - UDTValue newUDTValue(String udtName); - TupleValue newArgTupleValue(String argName); - TupleValue newArgTupleValue(int argNum); - TupleValue newReturnTupleValue(); - TupleValue newTupleValue(String cqlDefinition); - } - -Java UDFs already have some imports for common interfaces and classes defined. These imports are: - -.. code-block:: java - - import java.nio.ByteBuffer; - import java.util.List; - import java.util.Map; - import java.util.Set; - import org.apache.cassandra.cql3.functions.UDFContext; - import com.datastax.driver.core.TypeCodec; - import com.datastax.driver.core.TupleValue; - import com.datastax.driver.core.UDTValue; - -Please note, that these convenience imports are not available for script UDFs. - -.. _create-function-statement: - -CREATE FUNCTION -``````````````` - -Creating a new user-defined function uses the ``CREATE FUNCTION`` statement: - -.. productionlist:: - create_function_statement: CREATE [ OR REPLACE ] FUNCTION [ IF NOT EXISTS] - : `function_name` '(' `arguments_declaration` ')' - : [ CALLED | RETURNS NULL ] ON NULL INPUT - : RETURNS `cql_type` - : LANGUAGE `identifier` - : AS `string` - arguments_declaration: `identifier` `cql_type` ( ',' `identifier` `cql_type` )* - -For instance:: - - CREATE OR REPLACE FUNCTION somefunction(somearg int, anotherarg text, complexarg frozen, listarg list) - RETURNS NULL ON NULL INPUT - RETURNS text - LANGUAGE java - AS $$ - // some Java code - $$; - - CREATE FUNCTION IF NOT EXISTS akeyspace.fname(someArg int) - CALLED ON NULL INPUT - RETURNS text - LANGUAGE java - AS $$ - // some Java code - $$; - -``CREATE FUNCTION`` with the optional ``OR REPLACE`` keywords either creates a function or replaces an existing one with -the same signature. A ``CREATE FUNCTION`` without ``OR REPLACE`` fails if a function with the same signature already -exists. - -If the optional ``IF NOT EXISTS`` keywords are used, the function will -only be created if another function with the same signature does not -exist. - -``OR REPLACE`` and ``IF NOT EXISTS`` cannot be used together. - -Behavior on invocation with ``null`` values must be defined for each -function. There are two options: - -#. ``RETURNS NULL ON NULL INPUT`` declares that the function will always - return ``null`` if any of the input arguments is ``null``. -#. ``CALLED ON NULL INPUT`` declares that the function will always be - executed. - -Function Signature -################## - -Signatures are used to distinguish individual functions. The signature consists of: - -#. The fully qualified function name - i.e *keyspace* plus *function-name* -#. The concatenated list of all argument types - -Note that keyspace names, function names and argument types are subject to the default naming conventions and -case-sensitivity rules. - -Functions belong to a keyspace. If no keyspace is specified in ````, the current keyspace is used (i.e. -the keyspace specified using the ``USE`` statement). It is not possible to create a user-defined function in one of the -system keyspaces. - -.. _drop-function-statement: - -DROP FUNCTION -````````````` - -Dropping a function uses the ``DROP FUNCTION`` statement: - -.. productionlist:: - drop_function_statement: DROP FUNCTION [ IF EXISTS ] `function_name` [ '(' `arguments_signature` ')' ] - arguments_signature: `cql_type` ( ',' `cql_type` )* - -For instance:: - - DROP FUNCTION myfunction; - DROP FUNCTION mykeyspace.afunction; - DROP FUNCTION afunction ( int ); - DROP FUNCTION afunction ( text ); - -You must specify the argument types (:token:`arguments_signature`) of the function to drop if there are multiple -functions with the same name but a different signature (overloaded functions). - -``DROP FUNCTION`` with the optional ``IF EXISTS`` keywords drops a function if it exists, but does not throw an error if -it doesn't - -.. _aggregate-functions: - -Aggregate functions -^^^^^^^^^^^^^^^^^^^ - -Aggregate functions work on a set of rows. They receive values for each row and returns one value for the whole set. - -If ``normal`` columns, ``scalar functions``, ``UDT`` fields, ``writetime`` or ``ttl`` are selected together with -aggregate functions, the values returned for them will be the ones of the first row matching the query. - -Native aggregates -~~~~~~~~~~~~~~~~~ - -.. _count-function: - -Count -````` - -The ``count`` function can be used to count the rows returned by a query. Example:: - - SELECT COUNT (*) FROM plays; - SELECT COUNT (1) FROM plays; - -It also can be used to count the non null value of a given column:: - - SELECT COUNT (scores) FROM plays; - -Max and Min -``````````` - -The ``max`` and ``min`` functions can be used to compute the maximum and the minimum value returned by a query for a -given column. For instance:: - - SELECT MIN (players), MAX (players) FROM plays WHERE game = 'quake'; - -Sum -``` - -The ``sum`` function can be used to sum up all the values returned by a query for a given column. For instance:: - - SELECT SUM (players) FROM plays; - -Avg -``` - -The ``avg`` function can be used to compute the average of all the values returned by a query for a given column. For -instance:: - - SELECT AVG (players) FROM plays; - -.. _user-defined-aggregates-functions: - -User-Defined Aggregates -~~~~~~~~~~~~~~~~~~~~~~~ - -User-defined aggregates allow the creation of custom aggregate functions. Common examples of aggregate functions are -*count*, *min*, and *max*. - -Each aggregate requires an *initial state* (``INITCOND``, which defaults to ``null``) of type ``STYPE``. The first -argument of the state function must have type ``STYPE``. The remaining arguments of the state function must match the -types of the user-defined aggregate arguments. The state function is called once for each row, and the value returned by -the state function becomes the new state. After all rows are processed, the optional ``FINALFUNC`` is executed with last -state value as its argument. - -``STYPE`` is mandatory in order to be able to distinguish possibly overloaded versions of the state and/or final -function (since the overload can appear after creation of the aggregate). - -User-defined aggregates can be used in ``SELECT`` statement. - -A complete working example for user-defined aggregates (assuming that a keyspace has been selected using the ``USE`` -statement):: - - CREATE OR REPLACE FUNCTION averageState(state tuple, val int) - CALLED ON NULL INPUT - RETURNS tuple - LANGUAGE java - AS $$ - if (val != null) { - state.setInt(0, state.getInt(0)+1); - state.setLong(1, state.getLong(1)+val.intValue()); - } - return state; - $$; - - CREATE OR REPLACE FUNCTION averageFinal (state tuple) - CALLED ON NULL INPUT - RETURNS double - LANGUAGE java - AS $$ - double r = 0; - if (state.getInt(0) == 0) return null; - r = state.getLong(1); - r /= state.getInt(0); - return Double.valueOf(r); - $$; - - CREATE OR REPLACE AGGREGATE average(int) - SFUNC averageState - STYPE tuple - FINALFUNC averageFinal - INITCOND (0, 0); - - CREATE TABLE atable ( - pk int PRIMARY KEY, - val int - ); - - INSERT INTO atable (pk, val) VALUES (1,1); - INSERT INTO atable (pk, val) VALUES (2,2); - INSERT INTO atable (pk, val) VALUES (3,3); - INSERT INTO atable (pk, val) VALUES (4,4); - - SELECT average(val) FROM atable; - -.. _create-aggregate-statement: - -CREATE AGGREGATE -```````````````` - -Creating (or replacing) a user-defined aggregate function uses the ``CREATE AGGREGATE`` statement: - -.. productionlist:: - create_aggregate_statement: CREATE [ OR REPLACE ] AGGREGATE [ IF NOT EXISTS ] - : `function_name` '(' `arguments_signature` ')' - : SFUNC `function_name` - : STYPE `cql_type` - : [ FINALFUNC `function_name` ] - : [ INITCOND `term` ] - -See above for a complete example. - -``CREATE AGGREGATE`` with the optional ``OR REPLACE`` keywords either creates an aggregate or replaces an existing one -with the same signature. A ``CREATE AGGREGATE`` without ``OR REPLACE`` fails if an aggregate with the same signature -already exists. - -``CREATE AGGREGATE`` with the optional ``IF NOT EXISTS`` keywords either creates an aggregate if it does not already -exist. - -``OR REPLACE`` and ``IF NOT EXISTS`` cannot be used together. - -``STYPE`` defines the type of the state value and must be specified. - -The optional ``INITCOND`` defines the initial state value for the aggregate. It defaults to ``null``. A non-\ ``null`` -``INITCOND`` must be specified for state functions that are declared with ``RETURNS NULL ON NULL INPUT``. - -``SFUNC`` references an existing function to be used as the state modifying function. The type of first argument of the -state function must match ``STYPE``. The remaining argument types of the state function must match the argument types of -the aggregate function. State is not updated for state functions declared with ``RETURNS NULL ON NULL INPUT`` and called -with ``null``. - -The optional ``FINALFUNC`` is called just before the aggregate result is returned. It must take only one argument with -type ``STYPE``. The return type of the ``FINALFUNC`` may be a different type. A final function declared with ``RETURNS -NULL ON NULL INPUT`` means that the aggregate's return value will be ``null``, if the last state is ``null``. - -If no ``FINALFUNC`` is defined, the overall return type of the aggregate function is ``STYPE``. If a ``FINALFUNC`` is -defined, it is the return type of that function. - -.. _drop-aggregate-statement: - -DROP AGGREGATE -`````````````` - -Dropping an user-defined aggregate function uses the ``DROP AGGREGATE`` statement: - -.. productionlist:: - drop_aggregate_statement: DROP AGGREGATE [ IF EXISTS ] `function_name` [ '(' `arguments_signature` ')' ] - -For instance:: - - DROP AGGREGATE myAggregate; - DROP AGGREGATE myKeyspace.anAggregate; - DROP AGGREGATE someAggregate ( int ); - DROP AGGREGATE someAggregate ( text ); - -The ``DROP AGGREGATE`` statement removes an aggregate created using ``CREATE AGGREGATE``. You must specify the argument -types of the aggregate to drop if there are multiple aggregates with the same name but a different signature (overloaded -aggregates). - -``DROP AGGREGATE`` with the optional ``IF EXISTS`` keywords drops an aggregate if it exists, and does nothing if a -function with the signature does not exist. diff --git a/doc/source/cql/indexes.rst b/doc/source/cql/indexes.rst deleted file mode 100644 index 81fe429d0463..000000000000 --- a/doc/source/cql/indexes.rst +++ /dev/null @@ -1,83 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _secondary-indexes: - -Secondary Indexes ------------------ - -CQL supports creating secondary indexes on tables, allowing queries on the table to use those indexes. A secondary index -is identified by a name defined by: - -.. productionlist:: - index_name: re('[a-zA-Z_0-9]+') - - - -.. _create-index-statement: - -CREATE INDEX -^^^^^^^^^^^^ - -Creating a secondary index on a table uses the ``CREATE INDEX`` statement: - -.. productionlist:: - create_index_statement: CREATE [ CUSTOM ] INDEX [ IF NOT EXISTS ] [ `index_name` ] - : ON `table_name` '(' `index_identifier` ')' - : [ USING `string` [ WITH OPTIONS = `map_literal` ] ] - index_identifier: `column_name` - :| ( KEYS | VALUES | ENTRIES | FULL ) '(' `column_name` ')' - -For instance:: - - CREATE INDEX userIndex ON NerdMovies (user); - CREATE INDEX ON Mutants (abilityId); - CREATE INDEX ON users (keys(favs)); - CREATE CUSTOM INDEX ON users (email) USING 'path.to.the.IndexClass'; - CREATE CUSTOM INDEX ON users (email) USING 'path.to.the.IndexClass' WITH OPTIONS = {'storage': '/mnt/ssd/indexes/'}; - -The ``CREATE INDEX`` statement is used to create a new (automatic) secondary index for a given (existing) column in a -given table. A name for the index itself can be specified before the ``ON`` keyword, if desired. If data already exists -for the column, it will be indexed asynchronously. After the index is created, new data for the column is indexed -automatically at insertion time. - -Attempting to create an already existing index will return an error unless the ``IF NOT EXISTS`` option is used. If it -is used, the statement will be a no-op if the index already exists. - -Indexes on Map Keys -~~~~~~~~~~~~~~~~~~~ - -When creating an index on a :ref:`maps `, you may index either the keys or the values. If the column identifier is -placed within the ``keys()`` function, the index will be on the map keys, allowing you to use ``CONTAINS KEY`` in -``WHERE`` clauses. Otherwise, the index will be on the map values. - -.. _drop-index-statement: - -DROP INDEX -^^^^^^^^^^ - -Dropping a secondary index uses the ``DROP INDEX`` statement: - -.. productionlist:: - drop_index_statement: DROP INDEX [ IF EXISTS ] `index_name` - -The ``DROP INDEX`` statement is used to drop an existing secondary index. The argument of the statement is the index -name, which may optionally specify the keyspace of the index. - -If the index does not exists, the statement will return an error, unless ``IF EXISTS`` is used in which case the -operation is a no-op. diff --git a/doc/source/cql/json.rst b/doc/source/cql/json.rst deleted file mode 100644 index 539180aedda8..000000000000 --- a/doc/source/cql/json.rst +++ /dev/null @@ -1,115 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _cql-json: - -JSON Support ------------- - -Cassandra 2.2 introduces JSON support to :ref:`SELECT ` and :ref:`INSERT ` -statements. This support does not fundamentally alter the CQL API (for example, the schema is still enforced), it simply -provides a convenient way to work with JSON documents. - -SELECT JSON -^^^^^^^^^^^ - -With ``SELECT`` statements, the ``JSON`` keyword can be used to return each row as a single ``JSON`` encoded map. The -remainder of the ``SELECT`` statement behavior is the same. - -The result map keys are the same as the column names in a normal result set. For example, a statement like ``SELECT JSON -a, ttl(b) FROM ...`` would result in a map with keys ``"a"`` and ``"ttl(b)"``. However, this is one notable exception: -for symmetry with ``INSERT JSON`` behavior, case-sensitive column names with upper-case letters will be surrounded with -double quotes. For example, ``SELECT JSON myColumn FROM ...`` would result in a map key ``"\"myColumn\""`` (note the -escaped quotes). - -The map values will ``JSON``-encoded representations (as described below) of the result set values. - -INSERT JSON -^^^^^^^^^^^ - -With ``INSERT`` statements, the new ``JSON`` keyword can be used to enable inserting a ``JSON`` encoded map as a single -row. The format of the ``JSON`` map should generally match that returned by a ``SELECT JSON`` statement on the same -table. In particular, case-sensitive column names should be surrounded with double quotes. For example, to insert into a -table with two columns named "myKey" and "value", you would do the following:: - - INSERT INTO mytable JSON '{ "\"myKey\"": 0, "value": 0}' - -By default (or if ``DEFAULT NULL`` is explicitly used), a column omitted from the ``JSON`` map will be set to ``NULL``, -meaning that any pre-existing value for that column will be removed (resulting in a tombstone being created). -Alternatively, if the ``DEFAULT UNSET`` directive is used after the value, omitted column values will be left unset, -meaning that pre-existing values for those column will be preserved. - - -JSON Encoding of Cassandra Data Types -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Where possible, Cassandra will represent and accept data types in their native ``JSON`` representation. Cassandra will -also accept string representations matching the CQL literal format for all single-field types. For example, floats, -ints, UUIDs, and dates can be represented by CQL literal strings. However, compound types, such as collections, tuples, -and user-defined types must be represented by native ``JSON`` collections (maps and lists) or a JSON-encoded string -representation of the collection. - -The following table describes the encodings that Cassandra will accept in ``INSERT JSON`` values (and ``fromJson()`` -arguments) as well as the format Cassandra will use when returning data for ``SELECT JSON`` statements (and -``fromJson()``): - -=============== ======================== =============== ============================================================== - Type Formats accepted Return format Notes -=============== ======================== =============== ============================================================== - ``ascii`` string string Uses JSON's ``\u`` character escape - ``bigint`` integer, string integer String must be valid 64 bit integer - ``blob`` string string String should be 0x followed by an even number of hex digits - ``boolean`` boolean, string boolean String must be "true" or "false" - ``date`` string string Date in format ``YYYY-MM-DD``, timezone UTC - ``decimal`` integer, float, string float May exceed 32 or 64-bit IEEE-754 floating point precision in - client-side decoder - ``double`` integer, float, string float String must be valid integer or float - ``float`` integer, float, string float String must be valid integer or float - ``inet`` string string IPv4 or IPv6 address - ``int`` integer, string integer String must be valid 32 bit integer - ``list`` list, string list Uses JSON's native list representation - ``map`` map, string map Uses JSON's native map representation - ``smallint`` integer, string integer String must be valid 16 bit integer - ``set`` list, string list Uses JSON's native list representation - ``text`` string string Uses JSON's ``\u`` character escape - ``time`` string string Time of day in format ``HH-MM-SS[.fffffffff]`` - ``timestamp`` integer, string string A timestamp. Strings constant allows to input :ref:`timestamps - as dates `. Datestamps with format ``YYYY-MM-DD - HH:MM:SS.SSS`` are returned. - ``timeuuid`` string string Type 1 UUID. See :token:`constant` for the UUID format - ``tinyint`` integer, string integer String must be valid 8 bit integer - ``tuple`` list, string list Uses JSON's native list representation - ``UDT`` map, string map Uses JSON's native map representation with field names as keys - ``uuid`` string string See :token:`constant` for the UUID format - ``varchar`` string string Uses JSON's ``\u`` character escape - ``varint`` integer, string integer Variable length; may overflow 32 or 64 bit integers in - client-side decoder -=============== ======================== =============== ============================================================== - -The fromJson() Function -^^^^^^^^^^^^^^^^^^^^^^^ - -The ``fromJson()`` function may be used similarly to ``INSERT JSON``, but for a single column value. It may only be used -in the ``VALUES`` clause of an ``INSERT`` statement or as one of the column values in an ``UPDATE``, ``DELETE``, or -``SELECT`` statement. For example, it cannot be used in the selection clause of a ``SELECT`` statement. - -The toJson() Function -^^^^^^^^^^^^^^^^^^^^^ - -The ``toJson()`` function may be used similarly to ``SELECT JSON``, but for a single column value. It may only be used -in the selection clause of a ``SELECT`` statement. diff --git a/doc/source/cql/mvs.rst b/doc/source/cql/mvs.rst deleted file mode 100644 index 200090a60b23..000000000000 --- a/doc/source/cql/mvs.rst +++ /dev/null @@ -1,179 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _materialized-views: - -Materialized Views ------------------- - -Materialized views names are defined by: - -.. productionlist:: - view_name: re('[a-zA-Z_0-9]+') - - -.. _create-materialized-view-statement: - -CREATE MATERIALIZED VIEW -^^^^^^^^^^^^^^^^^^^^^^^^ - -You can create a materialized view on a table using a ``CREATE MATERIALIZED VIEW`` statement: - -.. productionlist:: - create_materialized_view_statement: CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] `view_name` AS - : `select_statement` - : PRIMARY KEY '(' `primary_key` ')' - : WITH `table_options` - -For instance:: - - CREATE MATERIALIZED VIEW monkeySpecies_by_population AS - SELECT * FROM monkeySpecies - WHERE population IS NOT NULL AND species IS NOT NULL - PRIMARY KEY (population, species) - WITH comment='Allow query by population instead of species'; - -The ``CREATE MATERIALIZED VIEW`` statement creates a new materialized view. Each such view is a set of *rows* which -corresponds to rows which are present in the underlying, or base, table specified in the ``SELECT`` statement. A -materialized view cannot be directly updated, but updates to the base table will cause corresponding updates in the -view. - -Creating a materialized view has 3 main parts: - -- The :ref:`select statement ` that restrict the data included in the view. -- The :ref:`primary key ` definition for the view. -- The :ref:`options ` for the view. - -Attempting to create an already existing materialized view will return an error unless the ``IF NOT EXISTS`` option is -used. If it is used, the statement will be a no-op if the materialized view already exists. - -.. note:: By default, materialized views are built in a single thread. The initial build can be parallelized by - increasing the number of threads specified by the property ``concurrent_materialized_view_builders`` in - ``cassandra.yaml``. This property can also be manipulated at runtime through both JMX and the - ``setconcurrentviewbuilders`` and ``getconcurrentviewbuilders`` nodetool commands. - -.. _mv-select: - -MV select statement -``````````````````` - -The select statement of a materialized view creation defines which of the base table is included in the view. That -statement is limited in a number of ways: - -- the :ref:`selection ` is limited to those that only select columns of the base table. In other - words, you can't use any function (aggregate or not), casting, term, etc. Aliases are also not supported. You can - however use `*` as a shortcut of selecting all columns. Further, :ref:`static columns ` cannot be - included in a materialized view (which means ``SELECT *`` isn't allowed if the base table has static columns). -- the ``WHERE`` clause have the following restrictions: - - - it cannot include any :token:`bind_marker`. - - the columns that are not part of the *base table* primary key can only be restricted by an ``IS NOT NULL`` - restriction. No other restriction is allowed. - - as the columns that are part of the *view* primary key cannot be null, they must always be at least restricted by a - ``IS NOT NULL`` restriction (or any other restriction, but they must have one). - -- it cannot have neither an :ref:`ordering clause `, nor a :ref:`limit `, nor :ref:`ALLOW - FILTERING `. - -.. _mv-primary-key: - -MV primary key -`````````````` - -A view must have a primary key and that primary key must conform to the following restrictions: - -- it must contain all the primary key columns of the base table. This ensures that every row of the view correspond to - exactly one row of the base table. -- it can only contain a single column that is not a primary key column in the base table. - -So for instance, give the following base table definition:: - - CREATE TABLE t ( - k int, - c1 int, - c2 int, - v1 int, - v2 int, - PRIMARY KEY (k, c1, c2) - ) - -then the following view definitions are allowed:: - - CREATE MATERIALIZED VIEW mv1 AS - SELECT * FROM t WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL - PRIMARY KEY (c1, k, c2) - - CREATE MATERIALIZED VIEW mv1 AS - SELECT * FROM t WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL - PRIMARY KEY (v1, k, c1, c2) - -but the following ones are **not** allowed:: - - // Error: cannot include both v1 and v2 in the primary key as both are not in the base table primary key - CREATE MATERIALIZED VIEW mv1 AS - SELECT * FROM t WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL AND v1 IS NOT NULL - PRIMARY KEY (v1, v2, k, c1, c2) - - // Error: must include k in the primary as it's a base table primary key column - CREATE MATERIALIZED VIEW mv1 AS - SELECT * FROM t WHERE c1 IS NOT NULL AND c2 IS NOT NULL - PRIMARY KEY (c1, c2) - - -.. _mv-options: - -MV options -`````````` - -A materialized view is internally implemented by a table and as such, creating a MV allows the :ref:`same options than -creating a table `. - - -.. _alter-materialized-view-statement: - -ALTER MATERIALIZED VIEW -^^^^^^^^^^^^^^^^^^^^^^^ - -After creation, you can alter the options of a materialized view using the ``ALTER MATERIALIZED VIEW`` statement: - -.. productionlist:: - alter_materialized_view_statement: ALTER MATERIALIZED VIEW `view_name` WITH `table_options` - -The options that can be updated are the same than at creation time and thus the :ref:`same than for tables -`. - -.. _drop-materialized-view-statement: - -DROP MATERIALIZED VIEW -^^^^^^^^^^^^^^^^^^^^^^ - -Dropping a materialized view users the ``DROP MATERIALIZED VIEW`` statement: - -.. productionlist:: - drop_materialized_view_statement: DROP MATERIALIZED VIEW [ IF EXISTS ] `view_name`; - -If the materialized view does not exists, the statement will return an error, unless ``IF EXISTS`` is used in which case -the operation is a no-op. - -MV Limitations -``````````````` - -.. Note:: Removal of columns not selected in the Materialized View (via ``UPDATE base SET unselected_column = null`` or - ``DELETE unselected_column FROM base``) may shadow missed updates to other columns received by hints or repair. - For this reason, we advise against doing deletions on base columns not selected in views until this is - fixed on CASSANDRA-13826. diff --git a/doc/source/cql/operators.rst b/doc/source/cql/operators.rst deleted file mode 100644 index 1faf0d045463..000000000000 --- a/doc/source/cql/operators.rst +++ /dev/null @@ -1,74 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _arithmetic_operators: - -Arithmetic Operators --------------------- - -CQL supports the following operators: - -=============== ======================================================================================================= - Operator Description -=============== ======================================================================================================= - \- (unary) Negates operand - \+ Addition - \- Substraction - \* Multiplication - / Division - % Returns the remainder of a division -=============== ======================================================================================================= - -.. _number-arithmetic: - -Number Arithmetic -^^^^^^^^^^^^^^^^^ - -All arithmetic operations are supported on numeric types or counters. - -The return type of the operation will be based on the operand types: - -============= =========== ========== ========== ========== ========== ========== ========== ========== ========== - left/right tinyint smallint int bigint counter float double varint decimal -============= =========== ========== ========== ========== ========== ========== ========== ========== ========== - **tinyint** tinyint smallint int bigint bigint float double varint decimal - **smallint** smallint smallint int bigint bigint float double varint decimal - **int** int int int bigint bigint float double varint decimal - **bigint** bigint bigint bigint bigint bigint double double varint decimal - **counter** bigint bigint bigint bigint bigint double double varint decimal - **float** float float float double double float double decimal decimal - **double** double double double double double double double decimal decimal - **varint** varint varint varint decimal decimal decimal decimal decimal decimal - **decimal** decimal decimal decimal decimal decimal decimal decimal decimal decimal -============= =========== ========== ========== ========== ========== ========== ========== ========== ========== - -``*``, ``/`` and ``%`` operators have a higher precedence level than ``+`` and ``-`` operator. By consequence, -they will be evaluated before. If two operator in an expression have the same precedence level, they will be evaluated -left to right based on their position in the expression. - -.. _datetime--arithmetic: - -Datetime Arithmetic -^^^^^^^^^^^^^^^^^^^ - -A ``duration`` can be added (+) or substracted (-) from a ``timestamp`` or a ``date`` to create a new -``timestamp`` or ``date``. So for instance:: - - SELECT * FROM myTable WHERE t = '2017-01-01' - 2d - -will select all the records with a value of ``t`` which is in the last 2 days of 2016. diff --git a/doc/source/cql/security.rst b/doc/source/cql/security.rst deleted file mode 100644 index 429a1ef0d67d..000000000000 --- a/doc/source/cql/security.rst +++ /dev/null @@ -1,538 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _cql-security: - -Security --------- - -.. _cql-roles: - -Database Roles -^^^^^^^^^^^^^^ - -CQL uses database roles to represent users and group of users. Syntactically, a role is defined by: - -.. productionlist:: - role_name: `identifier` | `string` - -.. _create-role-statement: - -CREATE ROLE -~~~~~~~~~~~ - -Creating a role uses the ``CREATE ROLE`` statement: - -.. productionlist:: - create_role_statement: CREATE ROLE [ IF NOT EXISTS ] `role_name` - : [ WITH `role_options` ] - role_options: `role_option` ( AND `role_option` )* - role_option: PASSWORD '=' `string` - :| LOGIN '=' `boolean` - :| SUPERUSER '=' `boolean` - :| OPTIONS '=' `map_literal` - :| ACCESS TO DATACENTERS `set_literal` - :| ACCESS TO ALL DATACENTERS - -For instance:: - - CREATE ROLE new_role; - CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; - CREATE ROLE bob WITH PASSWORD = 'password_b' AND LOGIN = true AND SUPERUSER = true; - CREATE ROLE carlos WITH OPTIONS = { 'custom_option1' : 'option1_value', 'custom_option2' : 99 }; - CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO DATACENTERS {'DC1', 'DC3'}; - CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO ALL DATACENTERS; - -By default roles do not possess ``LOGIN`` privileges or ``SUPERUSER`` status. - -:ref:`Permissions ` on database resources are granted to roles; types of resources include keyspaces, -tables, functions and roles themselves. Roles may be granted to other roles to create hierarchical permissions -structures; in these hierarchies, permissions and ``SUPERUSER`` status are inherited, but the ``LOGIN`` privilege is -not. - -If a role has the ``LOGIN`` privilege, clients may identify as that role when connecting. For the duration of that -connection, the client will acquire any roles and privileges granted to that role. - -Only a client with with the ``CREATE`` permission on the database roles resource may issue ``CREATE ROLE`` requests (see -the :ref:`relevant section ` below), unless the client is a ``SUPERUSER``. Role management in Cassandra -is pluggable and custom implementations may support only a subset of the listed options. - -Role names should be quoted if they contain non-alphanumeric characters. - -.. _setting-credentials-for-internal-authentication: - -Setting credentials for internal authentication -``````````````````````````````````````````````` - -Use the ``WITH PASSWORD`` clause to set a password for internal authentication, enclosing the password in single -quotation marks. - -If internal authentication has not been set up or the role does not have ``LOGIN`` privileges, the ``WITH PASSWORD`` -clause is not necessary. - -Restricting connections to specific datacenters -``````````````````````````````````````````````` - -If a ``network_authorizer`` has been configured, you can restrict login roles to specific datacenters with the -``ACCESS TO DATACENTERS`` clause followed by a set literal of datacenters the user can access. Not specifiying -datacenters implicitly grants access to all datacenters. The clause ``ACCESS TO ALL DATACENTERS`` can be used for -explicitness, but there's no functional difference. - -Creating a role conditionally -````````````````````````````` - -Attempting to create an existing role results in an invalid query condition unless the ``IF NOT EXISTS`` option is used. -If the option is used and the role exists, the statement is a no-op:: - - CREATE ROLE other_role; - CREATE ROLE IF NOT EXISTS other_role; - - -.. _alter-role-statement: - -ALTER ROLE -~~~~~~~~~~ - -Altering a role options uses the ``ALTER ROLE`` statement: - -.. productionlist:: - alter_role_statement: ALTER ROLE `role_name` WITH `role_options` - -For instance:: - - ALTER ROLE bob WITH PASSWORD = 'PASSWORD_B' AND SUPERUSER = false; - -Restricting connections to specific datacenters -``````````````````````````````````````````````` - -If a ``network_authorizer`` has been configured, you can restrict login roles to specific datacenters with the -``ACCESS TO DATACENTERS`` clause followed by a set literal of datacenters the user can access. To remove any -data center restrictions, use the ``ACCESS TO ALL DATACENTERS`` clause. - -Conditions on executing ``ALTER ROLE`` statements: - -- A client must have ``SUPERUSER`` status to alter the ``SUPERUSER`` status of another role -- A client cannot alter the ``SUPERUSER`` status of any role it currently holds -- A client can only modify certain properties of the role with which it identified at login (e.g. ``PASSWORD``) -- To modify properties of a role, the client must be granted ``ALTER`` :ref:`permission ` on that role - -.. _drop-role-statement: - -DROP ROLE -~~~~~~~~~ - -Dropping a role uses the ``DROP ROLE`` statement: - -.. productionlist:: - drop_role_statement: DROP ROLE [ IF EXISTS ] `role_name` - -``DROP ROLE`` requires the client to have ``DROP`` :ref:`permission ` on the role in question. In -addition, client may not ``DROP`` the role with which it identified at login. Finally, only a client with ``SUPERUSER`` -status may ``DROP`` another ``SUPERUSER`` role. - -Attempting to drop a role which does not exist results in an invalid query condition unless the ``IF EXISTS`` option is -used. If the option is used and the role does not exist the statement is a no-op. - -.. note:: DROP ROLE intentionally does not terminate any open user sessions. Currently connected sessions will remain - connected and will retain the ability to perform any database actions which do not require :ref:`authorization`. - However, if authorization is enabled, :ref:`permissions` of the dropped role are also revoked, - subject to the :ref:`caching options` configured in :ref:`cassandra.yaml`. - Should a dropped role be subsequently recreated and have new :ref:`permissions` or - :ref:`roles` granted to it, any client sessions still connected will acquire the newly granted - permissions and roles. - -.. _grant-role-statement: - -GRANT ROLE -~~~~~~~~~~ - -Granting a role to another uses the ``GRANT ROLE`` statement: - -.. productionlist:: - grant_role_statement: GRANT `role_name` TO `role_name` - -For instance:: - - GRANT report_writer TO alice; - -This statement grants the ``report_writer`` role to ``alice``. Any permissions granted to ``report_writer`` are also -acquired by ``alice``. - -Roles are modelled as a directed acyclic graph, so circular grants are not permitted. The following examples result in -error conditions:: - - GRANT role_a TO role_b; - GRANT role_b TO role_a; - - GRANT role_a TO role_b; - GRANT role_b TO role_c; - GRANT role_c TO role_a; - -.. _revoke-role-statement: - -REVOKE ROLE -~~~~~~~~~~~ - -Revoking a role uses the ``REVOKE ROLE`` statement: - -.. productionlist:: - revoke_role_statement: REVOKE `role_name` FROM `role_name` - -For instance:: - - REVOKE report_writer FROM alice; - -This statement revokes the ``report_writer`` role from ``alice``. Any permissions that ``alice`` has acquired via the -``report_writer`` role are also revoked. - -.. _list-roles-statement: - -LIST ROLES -~~~~~~~~~~ - -All the known roles (in the system or granted to specific role) can be listed using the ``LIST ROLES`` statement: - -.. productionlist:: - list_roles_statement: LIST ROLES [ OF `role_name` ] [ NORECURSIVE ] - -For instance:: - - LIST ROLES; - -returns all known roles in the system, this requires ``DESCRIBE`` permission on the database roles resource. And:: - - LIST ROLES OF alice; - -enumerates all roles granted to ``alice``, including those transitively acquired. But:: - - LIST ROLES OF bob NORECURSIVE - -lists all roles directly granted to ``bob`` without including any of the transitively acquired ones. - -Users -^^^^^ - -Prior to the introduction of roles in Cassandra 2.2, authentication and authorization were based around the concept of a -``USER``. For backward compatibility, the legacy syntax has been preserved with ``USER`` centric statements becoming -synonyms for the ``ROLE`` based equivalents. In other words, creating/updating a user is just a different syntax for -creating/updating a role. - -.. _create-user-statement: - -CREATE USER -~~~~~~~~~~~ - -Creating a user uses the ``CREATE USER`` statement: - -.. productionlist:: - create_user_statement: CREATE USER [ IF NOT EXISTS ] `role_name` [ WITH PASSWORD `string` ] [ `user_option` ] - user_option: SUPERUSER | NOSUPERUSER - -For instance:: - - CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; - CREATE USER bob WITH PASSWORD 'password_b' NOSUPERUSER; - -``CREATE USER`` is equivalent to ``CREATE ROLE`` where the ``LOGIN`` option is ``true``. So, the following pairs of -statements are equivalent:: - - CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; - CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; - - CREATE USER IF NOT EXISTS alice WITH PASSWORD 'password_a' SUPERUSER; - CREATE ROLE IF NOT EXISTS alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; - - CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; - CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = false; - - CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; - CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; - - CREATE USER alice WITH PASSWORD 'password_a'; - CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; - -.. _alter-user-statement: - -ALTER USER -~~~~~~~~~~ - -Altering the options of a user uses the ``ALTER USER`` statement: - -.. productionlist:: - alter_user_statement: ALTER USER `role_name` [ WITH PASSWORD `string` ] [ `user_option` ] - -For instance:: - - ALTER USER alice WITH PASSWORD 'PASSWORD_A'; - ALTER USER bob SUPERUSER; - -.. _drop-user-statement: - -DROP USER -~~~~~~~~~ - -Dropping a user uses the ``DROP USER`` statement: - -.. productionlist:: - drop_user_statement: DROP USER [ IF EXISTS ] `role_name` - -.. _list-users-statement: - -LIST USERS -~~~~~~~~~~ - -Existing users can be listed using the ``LIST USERS`` statement: - -.. productionlist:: - list_users_statement: LIST USERS - -Note that this statement is equivalent to:: - - LIST ROLES; - -but only roles with the ``LOGIN`` privilege are included in the output. - -Data Control -^^^^^^^^^^^^ - -.. _cql-permissions: - -Permissions -~~~~~~~~~~~ - -Permissions on resources are granted to roles; there are several different types of resources in Cassandra and each type -is modelled hierarchically: - -- The hierarchy of Data resources, Keyspaces and Tables has the structure ``ALL KEYSPACES`` -> ``KEYSPACE`` -> - ``TABLE``. -- Function resources have the structure ``ALL FUNCTIONS`` -> ``KEYSPACE`` -> ``FUNCTION`` -- Resources representing roles have the structure ``ALL ROLES`` -> ``ROLE`` -- Resources representing JMX ObjectNames, which map to sets of MBeans/MXBeans, have the structure ``ALL MBEANS`` -> - ``MBEAN`` - -Permissions can be granted at any level of these hierarchies and they flow downwards. So granting a permission on a -resource higher up the chain automatically grants that same permission on all resources lower down. For example, -granting ``SELECT`` on a ``KEYSPACE`` automatically grants it on all ``TABLES`` in that ``KEYSPACE``. Likewise, granting -a permission on ``ALL FUNCTIONS`` grants it on every defined function, regardless of which keyspace it is scoped in. It -is also possible to grant permissions on all functions scoped to a particular keyspace. - -Modifications to permissions are visible to existing client sessions; that is, connections need not be re-established -following permissions changes. - -The full set of available permissions is: - -- ``CREATE`` -- ``ALTER`` -- ``DROP`` -- ``SELECT`` -- ``MODIFY`` -- ``AUTHORIZE`` -- ``DESCRIBE`` -- ``EXECUTE`` - -Not all permissions are applicable to every type of resource. For instance, ``EXECUTE`` is only relevant in the context -of functions or mbeans; granting ``EXECUTE`` on a resource representing a table is nonsensical. Attempting to ``GRANT`` -a permission on resource to which it cannot be applied results in an error response. The following illustrates which -permissions can be granted on which types of resource, and which statements are enabled by that permission. - -=============== =============================== ======================================================================= - Permission Resource Operations -=============== =============================== ======================================================================= - ``CREATE`` ``ALL KEYSPACES`` ``CREATE KEYSPACE`` and ``CREATE TABLE`` in any keyspace - ``CREATE`` ``KEYSPACE`` ``CREATE TABLE`` in specified keyspace - ``CREATE`` ``ALL FUNCTIONS`` ``CREATE FUNCTION`` in any keyspace and ``CREATE AGGREGATE`` in any - keyspace - ``CREATE`` ``ALL FUNCTIONS IN KEYSPACE`` ``CREATE FUNCTION`` and ``CREATE AGGREGATE`` in specified keyspace - ``CREATE`` ``ALL ROLES`` ``CREATE ROLE`` - ``ALTER`` ``ALL KEYSPACES`` ``ALTER KEYSPACE`` and ``ALTER TABLE`` in any keyspace - ``ALTER`` ``KEYSPACE`` ``ALTER KEYSPACE`` and ``ALTER TABLE`` in specified keyspace - ``ALTER`` ``TABLE`` ``ALTER TABLE`` - ``ALTER`` ``ALL FUNCTIONS`` ``CREATE FUNCTION`` and ``CREATE AGGREGATE``: replacing any existing - ``ALTER`` ``ALL FUNCTIONS IN KEYSPACE`` ``CREATE FUNCTION`` and ``CREATE AGGREGATE``: replacing existing in - specified keyspace - ``ALTER`` ``FUNCTION`` ``CREATE FUNCTION`` and ``CREATE AGGREGATE``: replacing existing - ``ALTER`` ``ALL ROLES`` ``ALTER ROLE`` on any role - ``ALTER`` ``ROLE`` ``ALTER ROLE`` - ``DROP`` ``ALL KEYSPACES`` ``DROP KEYSPACE`` and ``DROP TABLE`` in any keyspace - ``DROP`` ``KEYSPACE`` ``DROP TABLE`` in specified keyspace - ``DROP`` ``TABLE`` ``DROP TABLE`` - ``DROP`` ``ALL FUNCTIONS`` ``DROP FUNCTION`` and ``DROP AGGREGATE`` in any keyspace - ``DROP`` ``ALL FUNCTIONS IN KEYSPACE`` ``DROP FUNCTION`` and ``DROP AGGREGATE`` in specified keyspace - ``DROP`` ``FUNCTION`` ``DROP FUNCTION`` - ``DROP`` ``ALL ROLES`` ``DROP ROLE`` on any role - ``DROP`` ``ROLE`` ``DROP ROLE`` - ``SELECT`` ``ALL KEYSPACES`` ``SELECT`` on any table - ``SELECT`` ``KEYSPACE`` ``SELECT`` on any table in specified keyspace - ``SELECT`` ``TABLE`` ``SELECT`` on specified table - ``SELECT`` ``ALL MBEANS`` Call getter methods on any mbean - ``SELECT`` ``MBEANS`` Call getter methods on any mbean matching a wildcard pattern - ``SELECT`` ``MBEAN`` Call getter methods on named mbean - ``MODIFY`` ``ALL KEYSPACES`` ``INSERT``, ``UPDATE``, ``DELETE`` and ``TRUNCATE`` on any table - ``MODIFY`` ``KEYSPACE`` ``INSERT``, ``UPDATE``, ``DELETE`` and ``TRUNCATE`` on any table in - specified keyspace - ``MODIFY`` ``TABLE`` ``INSERT``, ``UPDATE``, ``DELETE`` and ``TRUNCATE`` on specified table - ``MODIFY`` ``ALL MBEANS`` Call setter methods on any mbean - ``MODIFY`` ``MBEANS`` Call setter methods on any mbean matching a wildcard pattern - ``MODIFY`` ``MBEAN`` Call setter methods on named mbean - ``AUTHORIZE`` ``ALL KEYSPACES`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any table - ``AUTHORIZE`` ``KEYSPACE`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any table in - specified keyspace - ``AUTHORIZE`` ``TABLE`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on specified table - ``AUTHORIZE`` ``ALL FUNCTIONS`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any function - ``AUTHORIZE`` ``ALL FUNCTIONS IN KEYSPACE`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` in specified keyspace - ``AUTHORIZE`` ``FUNCTION`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on specified function - ``AUTHORIZE`` ``ALL MBEANS`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any mbean - ``AUTHORIZE`` ``MBEANS`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any mbean matching - a wildcard pattern - ``AUTHORIZE`` ``MBEAN`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on named mbean - ``AUTHORIZE`` ``ALL ROLES`` ``GRANT ROLE`` and ``REVOKE ROLE`` on any role - ``AUTHORIZE`` ``ROLES`` ``GRANT ROLE`` and ``REVOKE ROLE`` on specified roles - ``DESCRIBE`` ``ALL ROLES`` ``LIST ROLES`` on all roles or only roles granted to another, - specified role - ``DESCRIBE`` ``ALL MBEANS`` Retrieve metadata about any mbean from the platform's MBeanServer - ``DESCRIBE`` ``MBEANS`` Retrieve metadata about any mbean matching a wildcard patter from the - platform's MBeanServer - ``DESCRIBE`` ``MBEAN`` Retrieve metadata about a named mbean from the platform's MBeanServer - ``EXECUTE`` ``ALL FUNCTIONS`` ``SELECT``, ``INSERT`` and ``UPDATE`` using any function, and use of - any function in ``CREATE AGGREGATE`` - ``EXECUTE`` ``ALL FUNCTIONS IN KEYSPACE`` ``SELECT``, ``INSERT`` and ``UPDATE`` using any function in specified - keyspace and use of any function in keyspace in ``CREATE AGGREGATE`` - ``EXECUTE`` ``FUNCTION`` ``SELECT``, ``INSERT`` and ``UPDATE`` using specified function and use - of the function in ``CREATE AGGREGATE`` - ``EXECUTE`` ``ALL MBEANS`` Execute operations on any mbean - ``EXECUTE`` ``MBEANS`` Execute operations on any mbean matching a wildcard pattern - ``EXECUTE`` ``MBEAN`` Execute operations on named mbean -=============== =============================== ======================================================================= - -.. _grant-permission-statement: - -GRANT PERMISSION -~~~~~~~~~~~~~~~~ - -Granting a permission uses the ``GRANT PERMISSION`` statement: - -.. productionlist:: - grant_permission_statement: GRANT `permissions` ON `resource` TO `role_name` - permissions: ALL [ PERMISSIONS ] | `permission` [ PERMISSION ] - permission: CREATE | ALTER | DROP | SELECT | MODIFY | AUTHORIZE | DESCRIBE | EXECUTE - resource: ALL KEYSPACES - :| KEYSPACE `keyspace_name` - :| [ TABLE ] `table_name` - :| ALL ROLES - :| ROLE `role_name` - :| ALL FUNCTIONS [ IN KEYSPACE `keyspace_name` ] - :| FUNCTION `function_name` '(' [ `cql_type` ( ',' `cql_type` )* ] ')' - :| ALL MBEANS - :| ( MBEAN | MBEANS ) `string` - -For instance:: - - GRANT SELECT ON ALL KEYSPACES TO data_reader; - -This gives any user with the role ``data_reader`` permission to execute ``SELECT`` statements on any table across all -keyspaces:: - - GRANT MODIFY ON KEYSPACE keyspace1 TO data_writer; - -This give any user with the role ``data_writer`` permission to perform ``UPDATE``, ``INSERT``, ``UPDATE``, ``DELETE`` -and ``TRUNCATE`` queries on all tables in the ``keyspace1`` keyspace:: - - GRANT DROP ON keyspace1.table1 TO schema_owner; - -This gives any user with the ``schema_owner`` role permissions to ``DROP`` ``keyspace1.table1``:: - - GRANT EXECUTE ON FUNCTION keyspace1.user_function( int ) TO report_writer; - -This grants any user with the ``report_writer`` role permission to execute ``SELECT``, ``INSERT`` and ``UPDATE`` queries -which use the function ``keyspace1.user_function( int )``:: - - GRANT DESCRIBE ON ALL ROLES TO role_admin; - -This grants any user with the ``role_admin`` role permission to view any and all roles in the system with a ``LIST -ROLES`` statement - -.. _grant-all: - -GRANT ALL -````````` - -When the ``GRANT ALL`` form is used, the appropriate set of permissions is determined automatically based on the target -resource. - -Automatic Granting -`````````````````` - -When a resource is created, via a ``CREATE KEYSPACE``, ``CREATE TABLE``, ``CREATE FUNCTION``, ``CREATE AGGREGATE`` or -``CREATE ROLE`` statement, the creator (the role the database user who issues the statement is identified as), is -automatically granted all applicable permissions on the new resource. - -.. _revoke-permission-statement: - -REVOKE PERMISSION -~~~~~~~~~~~~~~~~~ - -Revoking a permission from a role uses the ``REVOKE PERMISSION`` statement: - -.. productionlist:: - revoke_permission_statement: REVOKE `permissions` ON `resource` FROM `role_name` - -For instance:: - - REVOKE SELECT ON ALL KEYSPACES FROM data_reader; - REVOKE MODIFY ON KEYSPACE keyspace1 FROM data_writer; - REVOKE DROP ON keyspace1.table1 FROM schema_owner; - REVOKE EXECUTE ON FUNCTION keyspace1.user_function( int ) FROM report_writer; - REVOKE DESCRIBE ON ALL ROLES FROM role_admin; - -Because of their function in normal driver operations, certain tables cannot have their `SELECT` permissions -revoked. The following tables will be available to all authorized users regardless of their assigned role:: - -* `system_schema.keyspaces` -* `system_schema.columns` -* `system_schema.tables` -* `system.local` -* `system.peers` - -.. _list-permissions-statement: - -LIST PERMISSIONS -~~~~~~~~~~~~~~~~ - -Listing granted permissions uses the ``LIST PERMISSIONS`` statement: - -.. productionlist:: - list_permissions_statement: LIST `permissions` [ ON `resource` ] [ OF `role_name` [ NORECURSIVE ] ] - -For instance:: - - LIST ALL PERMISSIONS OF alice; - -Show all permissions granted to ``alice``, including those acquired transitively from any other roles:: - - LIST ALL PERMISSIONS ON keyspace1.table1 OF bob; - -Show all permissions on ``keyspace1.table1`` granted to ``bob``, including those acquired transitively from any other -roles. This also includes any permissions higher up the resource hierarchy which can be applied to ``keyspace1.table1``. -For example, should ``bob`` have ``ALTER`` permission on ``keyspace1``, that would be included in the results of this -query. Adding the ``NORECURSIVE`` switch restricts the results to only those permissions which were directly granted to -``bob`` or one of ``bob``'s roles:: - - LIST SELECT PERMISSIONS OF carlos; - -Show any permissions granted to ``carlos`` or any of ``carlos``'s roles, limited to ``SELECT`` permissions on any -resource. diff --git a/doc/source/cql/triggers.rst b/doc/source/cql/triggers.rst deleted file mode 100644 index db3f53e3869c..000000000000 --- a/doc/source/cql/triggers.rst +++ /dev/null @@ -1,63 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _cql-triggers: - -Triggers --------- - -Triggers are identified by a name defined by: - -.. productionlist:: - trigger_name: `identifier` - - -.. _create-trigger-statement: - -CREATE TRIGGER -^^^^^^^^^^^^^^ - -Creating a new trigger uses the ``CREATE TRIGGER`` statement: - -.. productionlist:: - create_trigger_statement: CREATE TRIGGER [ IF NOT EXISTS ] `trigger_name` - : ON `table_name` - : USING `string` - -For instance:: - - CREATE TRIGGER myTrigger ON myTable USING 'org.apache.cassandra.triggers.InvertedIndex'; - -The actual logic that makes up the trigger can be written in any Java (JVM) language and exists outside the database. -You place the trigger code in a ``lib/triggers`` subdirectory of the Cassandra installation directory, it loads during -cluster startup, and exists on every node that participates in a cluster. The trigger defined on a table fires before a -requested DML statement occurs, which ensures the atomicity of the transaction. - -.. _drop-trigger-statement: - -DROP TRIGGER -^^^^^^^^^^^^ - -Dropping a trigger uses the ``DROP TRIGGER`` statement: - -.. productionlist:: - drop_trigger_statement: DROP TRIGGER [ IF EXISTS ] `trigger_name` ON `table_name` - -For instance:: - - DROP TRIGGER myTrigger ON myTable; diff --git a/doc/source/cql/types.rst b/doc/source/cql/types.rst deleted file mode 100644 index 509a7565e791..000000000000 --- a/doc/source/cql/types.rst +++ /dev/null @@ -1,559 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -.. _UUID: https://en.wikipedia.org/wiki/Universally_unique_identifier - -.. _data-types: - -Data Types ----------- - -CQL is a typed language and supports a rich set of data types, including :ref:`native types `, -:ref:`collection types `, :ref:`user-defined types `, :ref:`tuple types ` and :ref:`custom -types `: - -.. productionlist:: - cql_type: `native_type` | `collection_type` | `user_defined_type` | `tuple_type` | `custom_type` - - -.. _native-types: - -Native Types -^^^^^^^^^^^^ - -The native types supported by CQL are: - -.. productionlist:: - native_type: ASCII - : | BIGINT - : | BLOB - : | BOOLEAN - : | COUNTER - : | DATE - : | DECIMAL - : | DOUBLE - : | DURATION - : | FLOAT - : | INET - : | INT - : | SMALLINT - : | TEXT - : | TIME - : | TIMESTAMP - : | TIMEUUID - : | TINYINT - : | UUID - : | VARCHAR - : | VARINT - -The following table gives additional informations on the native data types, and on which kind of :ref:`constants -` each type supports: - -=============== ===================== ================================================================================== - type constants supported description -=============== ===================== ================================================================================== - ``ascii`` :token:`string` ASCII character string - ``bigint`` :token:`integer` 64-bit signed long - ``blob`` :token:`blob` Arbitrary bytes (no validation) - ``boolean`` :token:`boolean` Either ``true`` or ``false`` - ``counter`` :token:`integer` Counter column (64-bit signed value). See :ref:`counters` for details - ``date`` :token:`integer`, A date (with no corresponding time value). See :ref:`dates` below for details - :token:`string` - ``decimal`` :token:`integer`, Variable-precision decimal - :token:`float` - ``double`` :token:`integer` 64-bit IEEE-754 floating point - :token:`float` - ``duration`` :token:`duration`, A duration with nanosecond precision. See :ref:`durations` below for details - ``float`` :token:`integer`, 32-bit IEEE-754 floating point - :token:`float` - ``inet`` :token:`string` An IP address, either IPv4 (4 bytes long) or IPv6 (16 bytes long). Note that - there is no ``inet`` constant, IP address should be input as strings - ``int`` :token:`integer` 32-bit signed int - ``smallint`` :token:`integer` 16-bit signed int - ``text`` :token:`string` UTF8 encoded string - ``time`` :token:`integer`, A time (with no corresponding date value) with nanosecond precision. See - :token:`string` :ref:`times` below for details - ``timestamp`` :token:`integer`, A timestamp (date and time) with millisecond precision. See :ref:`timestamps` - :token:`string` below for details - ``timeuuid`` :token:`uuid` Version 1 UUID_, generally used as a “conflict-free” timestamp. Also see - :ref:`timeuuid-functions` - ``tinyint`` :token:`integer` 8-bit signed int - ``uuid`` :token:`uuid` A UUID_ (of any version) - ``varchar`` :token:`string` UTF8 encoded string - ``varint`` :token:`integer` Arbitrary-precision integer -=============== ===================== ================================================================================== - -.. _counters: - -Counters -~~~~~~~~ - -The ``counter`` type is used to define *counter columns*. A counter column is a column whose value is a 64-bit signed -integer and on which 2 operations are supported: incrementing and decrementing (see the :ref:`UPDATE statement -` for syntax). Note that the value of a counter cannot be set: a counter does not exist until first -incremented/decremented, and that first increment/decrement is made as if the prior value was 0. - -.. _counter-limitations: - -Counters have a number of important limitations: - -- They cannot be used for columns part of the ``PRIMARY KEY`` of a table. -- A table that contains a counter can only contain counters. In other words, either all the columns of a table outside - the ``PRIMARY KEY`` have the ``counter`` type, or none of them have it. -- Counters do not support :ref:`expiration `. -- The deletion of counters is supported, but is only guaranteed to work the first time you delete a counter. In other - words, you should not re-update a counter that you have deleted (if you do, proper behavior is not guaranteed). -- Counter updates are, by nature, not `idemptotent `__. An important - consequence is that if a counter update fails unexpectedly (timeout or loss of connection to the coordinator node), - the client has no way to know if the update has been applied or not. In particular, replaying the update may or may - not lead to an over count. - -.. _timestamps: - -Working with timestamps -^^^^^^^^^^^^^^^^^^^^^^^ - -Values of the ``timestamp`` type are encoded as 64-bit signed integers representing a number of milliseconds since the -standard base time known as `the epoch `__: January 1 1970 at 00:00:00 GMT. - -Timestamps can be input in CQL either using their value as an :token:`integer`, or using a :token:`string` that -represents an `ISO 8601 `__ date. For instance, all of the values below are -valid ``timestamp`` values for Mar 2, 2011, at 04:05:00 AM, GMT: - -- ``1299038700000`` -- ``'2011-02-03 04:05+0000'`` -- ``'2011-02-03 04:05:00+0000'`` -- ``'2011-02-03 04:05:00.000+0000'`` -- ``'2011-02-03T04:05+0000'`` -- ``'2011-02-03T04:05:00+0000'`` -- ``'2011-02-03T04:05:00.000+0000'`` - -The ``+0000`` above is an RFC 822 4-digit time zone specification; ``+0000`` refers to GMT. US Pacific Standard Time is -``-0800``. The time zone may be omitted if desired (``'2011-02-03 04:05:00'``), and if so, the date will be interpreted -as being in the time zone under which the coordinating Cassandra node is configured. There are however difficulties -inherent in relying on the time zone configuration being as expected, so it is recommended that the time zone always be -specified for timestamps when feasible. - -The time of day may also be omitted (``'2011-02-03'`` or ``'2011-02-03+0000'``), in which case the time of day will -default to 00:00:00 in the specified or default time zone. However, if only the date part is relevant, consider using -the :ref:`date ` type. - -.. _dates: - -Working with dates -^^^^^^^^^^^^^^^^^^ - -Values of the ``date`` type are encoded as 32-bit unsigned integers representing a number of days with “the epoch” at -the center of the range (2^31). Epoch is January 1st, 1970 - -As for :ref:`timestamp `, a date can be input either as an :token:`integer` or using a date -:token:`string`. In the later case, the format should be ``yyyy-mm-dd`` (so ``'2011-02-03'`` for instance). - -.. _times: - -Working with times -^^^^^^^^^^^^^^^^^^ - -Values of the ``time`` type are encoded as 64-bit signed integers representing the number of nanoseconds since midnight. - -As for :ref:`timestamp `, a time can be input either as an :token:`integer` or using a :token:`string` -representing the time. In the later case, the format should be ``hh:mm:ss[.fffffffff]`` (where the sub-second precision -is optional and if provided, can be less than the nanosecond). So for instance, the following are valid inputs for a -time: - -- ``'08:12:54'`` -- ``'08:12:54.123'`` -- ``'08:12:54.123456'`` -- ``'08:12:54.123456789'`` - -.. _durations: - -Working with durations -^^^^^^^^^^^^^^^^^^^^^^ - -Values of the ``duration`` type are encoded as 3 signed integer of variable lengths. The first integer represents the -number of months, the second the number of days and the third the number of nanoseconds. This is due to the fact that -the number of days in a month can change, and a day can have 23 or 25 hours depending on the daylight saving. -Internally, the number of months and days are decoded as 32 bits integers whereas the number of nanoseconds is decoded -as a 64 bits integer. - -A duration can be input as: - - #. ``(quantity unit)+`` like ``12h30m`` where the unit can be: - - * ``y``: years (12 months) - * ``mo``: months (1 month) - * ``w``: weeks (7 days) - * ``d``: days (1 day) - * ``h``: hours (3,600,000,000,000 nanoseconds) - * ``m``: minutes (60,000,000,000 nanoseconds) - * ``s``: seconds (1,000,000,000 nanoseconds) - * ``ms``: milliseconds (1,000,000 nanoseconds) - * ``us`` or ``µs`` : microseconds (1000 nanoseconds) - * ``ns``: nanoseconds (1 nanosecond) - #. ISO 8601 format: ``P[n]Y[n]M[n]DT[n]H[n]M[n]S or P[n]W`` - #. ISO 8601 alternative format: ``P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]`` - -For example:: - - INSERT INTO RiderResults (rider, race, result) VALUES ('Christopher Froome', 'Tour de France', 89h4m48s); - INSERT INTO RiderResults (rider, race, result) VALUES ('BARDET Romain', 'Tour de France', PT89H8M53S); - INSERT INTO RiderResults (rider, race, result) VALUES ('QUINTANA Nairo', 'Tour de France', P0000-00-00T89:09:09); - -.. _duration-limitation: - -Duration columns cannot be used in a table's ``PRIMARY KEY``. This limitation is due to the fact that -durations cannot be ordered. It is effectively not possible to know if ``1mo`` is greater than ``29d`` without a date -context. - -A ``1d`` duration is not equals to a ``24h`` one as the duration type has been created to be able to support daylight -saving. - -.. _collections: - -Collections -^^^^^^^^^^^ - -CQL supports 3 kind of collections: :ref:`maps`, :ref:`sets` and :ref:`lists`. The types of those collections is defined -by: - -.. productionlist:: - collection_type: MAP '<' `cql_type` ',' `cql_type` '>' - : | SET '<' `cql_type` '>' - : | LIST '<' `cql_type` '>' - -and their values can be inputd using collection literals: - -.. productionlist:: - collection_literal: `map_literal` | `set_literal` | `list_literal` - map_literal: '{' [ `term` ':' `term` (',' `term` : `term`)* ] '}' - set_literal: '{' [ `term` (',' `term`)* ] '}' - list_literal: '[' [ `term` (',' `term`)* ] ']' - -Note however that neither :token:`bind_marker` nor ``NULL`` are supported inside collection literals. - -Noteworthy characteristics -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Collections are meant for storing/denormalizing relatively small amount of data. They work well for things like “the -phone numbers of a given user”, “labels applied to an email”, etc. But when items are expected to grow unbounded (“all -messages sent by a user”, “events registered by a sensor”...), then collections are not appropriate and a specific table -(with clustering columns) should be used. Concretely, (non-frozen) collections have the following noteworthy -characteristics and limitations: - -- Individual collections are not indexed internally. Which means that even to access a single element of a collection, - the while collection has to be read (and reading one is not paged internally). -- While insertion operations on sets and maps never incur a read-before-write internally, some operations on lists do. - Further, some lists operations are not idempotent by nature (see the section on :ref:`lists ` below for - details), making their retry in case of timeout problematic. It is thus advised to prefer sets over lists when - possible. - -Please note that while some of those limitations may or may not be removed/improved upon in the future, it is a -anti-pattern to use a (single) collection to store large amounts of data. - -.. _maps: - -Maps -~~~~ - -A ``map`` is a (sorted) set of key-value pairs, where keys are unique and the map is sorted by its keys. You can define -and insert a map with:: - - CREATE TABLE users ( - id text PRIMARY KEY, - name text, - favs map // A map of text keys, and text values - ); - - INSERT INTO users (id, name, favs) - VALUES ('jsmith', 'John Smith', { 'fruit' : 'Apple', 'band' : 'Beatles' }); - - // Replace the existing map entirely. - UPDATE users SET favs = { 'fruit' : 'Banana' } WHERE id = 'jsmith'; - -Further, maps support: - -- Updating or inserting one or more elements:: - - UPDATE users SET favs['author'] = 'Ed Poe' WHERE id = 'jsmith'; - UPDATE users SET favs = favs + { 'movie' : 'Cassablanca', 'band' : 'ZZ Top' } WHERE id = 'jsmith'; - -- Removing one or more element (if an element doesn't exist, removing it is a no-op but no error is thrown):: - - DELETE favs['author'] FROM users WHERE id = 'jsmith'; - UPDATE users SET favs = favs - { 'movie', 'band'} WHERE id = 'jsmith'; - - Note that for removing multiple elements in a ``map``, you remove from it a ``set`` of keys. - -Lastly, TTLs are allowed for both ``INSERT`` and ``UPDATE``, but in both case the TTL set only apply to the newly -inserted/updated elements. In other words:: - - UPDATE users USING TTL 10 SET favs['color'] = 'green' WHERE id = 'jsmith'; - -will only apply the TTL to the ``{ 'color' : 'green' }`` record, the rest of the map remaining unaffected. - - -.. _sets: - -Sets -~~~~ - -A ``set`` is a (sorted) collection of unique values. You can define and insert a map with:: - - CREATE TABLE images ( - name text PRIMARY KEY, - owner text, - tags set // A set of text values - ); - - INSERT INTO images (name, owner, tags) - VALUES ('cat.jpg', 'jsmith', { 'pet', 'cute' }); - - // Replace the existing set entirely - UPDATE images SET tags = { 'kitten', 'cat', 'lol' } WHERE name = 'cat.jpg'; - -Further, sets support: - -- Adding one or multiple elements (as this is a set, inserting an already existing element is a no-op):: - - UPDATE images SET tags = tags + { 'gray', 'cuddly' } WHERE name = 'cat.jpg'; - -- Removing one or multiple elements (if an element doesn't exist, removing it is a no-op but no error is thrown):: - - UPDATE images SET tags = tags - { 'cat' } WHERE name = 'cat.jpg'; - -Lastly, as for :ref:`maps `, TTLs if used only apply to the newly inserted values. - -.. _lists: - -Lists -~~~~~ - -.. note:: As mentioned above and further discussed at the end of this section, lists have limitations and specific - performance considerations that you should take into account before using them. In general, if you can use a - :ref:`set ` instead of list, always prefer a set. - -A ``list`` is a (sorted) collection of non-unique values where elements are ordered by there position in the list. You -can define and insert a list with:: - - CREATE TABLE plays ( - id text PRIMARY KEY, - game text, - players int, - scores list // A list of integers - ) - - INSERT INTO plays (id, game, players, scores) - VALUES ('123-afde', 'quake', 3, [17, 4, 2]); - - // Replace the existing list entirely - UPDATE plays SET scores = [ 3, 9, 4] WHERE id = '123-afde'; - -Further, lists support: - -- Appending and prepending values to a list:: - - UPDATE plays SET players = 5, scores = scores + [ 14, 21 ] WHERE id = '123-afde'; - UPDATE plays SET players = 6, scores = [ 3 ] + scores WHERE id = '123-afde'; - -- Setting the value at a particular position in the list. This imply that the list has a pre-existing element for that - position or an error will be thrown that the list is too small:: - - UPDATE plays SET scores[1] = 7 WHERE id = '123-afde'; - -- Removing an element by its position in the list. This imply that the list has a pre-existing element for that position - or an error will be thrown that the list is too small. Further, as the operation removes an element from the list, the - list size will be diminished by 1, shifting the position of all the elements following the one deleted:: - - DELETE scores[1] FROM plays WHERE id = '123-afde'; - -- Deleting *all* the occurrences of particular values in the list (if a particular element doesn't occur at all in the - list, it is simply ignored and no error is thrown):: - - UPDATE plays SET scores = scores - [ 12, 21 ] WHERE id = '123-afde'; - -.. warning:: The append and prepend operations are not idempotent by nature. So in particular, if one of these operation - timeout, then retrying the operation is not safe and it may (or may not) lead to appending/prepending the value - twice. - -.. warning:: Setting and removing an element by position and removing occurences of particular values incur an internal - *read-before-write*. They will thus run more slowly and take more ressources than usual updates (with the exclusion - of conditional write that have their own cost). - -Lastly, as for :ref:`maps `, TTLs when used only apply to the newly inserted values. - -.. _udts: - -User-Defined Types -^^^^^^^^^^^^^^^^^^ - -CQL support the definition of user-defined types (UDT for short). Such a type can be created, modified and removed using -the :token:`create_type_statement`, :token:`alter_type_statement` and :token:`drop_type_statement` described below. But -once created, a UDT is simply referred to by its name: - -.. productionlist:: - user_defined_type: `udt_name` - udt_name: [ `keyspace_name` '.' ] `identifier` - - -Creating a UDT -~~~~~~~~~~~~~~ - -Creating a new user-defined type is done using a ``CREATE TYPE`` statement defined by: - -.. productionlist:: - create_type_statement: CREATE TYPE [ IF NOT EXISTS ] `udt_name` - : '(' `field_definition` ( ',' `field_definition` )* ')' - field_definition: `identifier` `cql_type` - -A UDT has a name (used to declared columns of that type) and is a set of named and typed fields. Fields name can be any -type, including collections or other UDT. For instance:: - - CREATE TYPE phone ( - country_code int, - number text, - ) - - CREATE TYPE address ( - street text, - city text, - zip text, - phones map - ) - - CREATE TABLE user ( - name text PRIMARY KEY, - addresses map> - ) - -Note that: - -- Attempting to create an already existing type will result in an error unless the ``IF NOT EXISTS`` option is used. If - it is used, the statement will be a no-op if the type already exists. -- A type is intrinsically bound to the keyspace in which it is created, and can only be used in that keyspace. At - creation, if the type name is prefixed by a keyspace name, it is created in that keyspace. Otherwise, it is created in - the current keyspace. -- As of Cassandra |version|, UDT have to be frozen in most cases, hence the ``frozen
`` in the table definition - above. Please see the section on :ref:`frozen ` for more details. - -UDT literals -~~~~~~~~~~~~ - -Once a used-defined type has been created, value can be input using a UDT literal: - -.. productionlist:: - udt_literal: '{' `identifier` ':' `term` ( ',' `identifier` ':' `term` )* '}' - -In other words, a UDT literal is like a :ref:`map ` literal but its keys are the names of the fields of the type. -For instance, one could insert into the table define in the previous section using:: - - INSERT INTO user (name, addresses) - VALUES ('z3 Pr3z1den7', { - 'home' : { - street: '1600 Pennsylvania Ave NW', - city: 'Washington', - zip: '20500', - phones: { 'cell' : { country_code: 1, number: '202 456-1111' }, - 'landline' : { country_code: 1, number: '...' } } - }, - 'work' : { - street: '1600 Pennsylvania Ave NW', - city: 'Washington', - zip: '20500', - phones: { 'fax' : { country_code: 1, number: '...' } } - } - }) - -To be valid, a UDT literal should only include fields defined by the type it is a literal of, but it can omit some field -(in which case those will be ``null``). - -Altering a UDT -~~~~~~~~~~~~~~ - -An existing user-defined type can be modified using an ``ALTER TYPE`` statement: - -.. productionlist:: - alter_type_statement: ALTER TYPE `udt_name` `alter_type_modification` - alter_type_modification: ADD `field_definition` - : | RENAME `identifier` TO `identifier` ( `identifier` TO `identifier` )* - -You can: - -- add a new field to the type (``ALTER TYPE address ADD country text``). That new field will be ``null`` for any values - of the type created before the addition. -- rename the fields of the type (``ALTER TYPE address RENAME zip TO zipcode``). - -Dropping a UDT -~~~~~~~~~~~~~~ - -You can drop an existing user-defined type using a ``DROP TYPE`` statement: - -.. productionlist:: - drop_type_statement: DROP TYPE [ IF EXISTS ] `udt_name` - -Dropping a type results in the immediate, irreversible removal of that type. However, attempting to drop a type that is -still in use by another type, table or function will result in an error. - -If the type dropped does not exist, an error will be returned unless ``IF EXISTS`` is used, in which case the operation -is a no-op. - -.. _tuples: - -Tuples -^^^^^^ - -CQL also support tuples and tuple types (where the elements can be of different types). Functionally, tuples can be -though as anonymous UDT with anonymous fields. Tuple types and tuple literals are defined by: - -.. productionlist:: - tuple_type: TUPLE '<' `cql_type` ( ',' `cql_type` )* '>' - tuple_literal: '(' `term` ( ',' `term` )* ')' - -and can be used thusly:: - - CREATE TABLE durations ( - event text, - duration tuple, - ) - - INSERT INTO durations (event, duration) VALUES ('ev1', (3, 'hours')); - -Unlike other "composed" types (collections and UDT), a tuple is always :ref:`frozen ` (without the need of the -`frozen` keyword) and it is not possible to update only some elements of a tuple (without updating the whole tuple). -Also, a tuple literal should always have the same number of value than declared in the type it is a tuple of (some of -those values can be null but they need to be explicitly declared as so). - -.. _custom-types: - -Custom Types -^^^^^^^^^^^^ - -.. note:: Custom types exists mostly for backward compatiliby purposes and their usage is discouraged. Their usage is - complex, not user friendly and the other provided types, particularly :ref:`user-defined types `, should almost - always be enough. - -A custom type is defined by: - -.. productionlist:: - custom_type: `string` - -A custom type is a :token:`string` that contains the name of Java class that extends the server side ``AbstractType`` -class and that can be loaded by Cassandra (it should thus be in the ``CLASSPATH`` of every node running Cassandra). That -class will define what values are valid for the type and how the time sorts when used for a clustering column. For any -other purpose, a value of a custom type is the same than that of a ``blob``, and can in particular be input using the -:token:`blob` literal syntax. diff --git a/doc/source/data_modeling/data_modeling_logical.rst b/doc/source/data_modeling/data_modeling_logical.rst deleted file mode 100644 index 27fa4beb74a5..000000000000 --- a/doc/source/data_modeling/data_modeling_logical.rst +++ /dev/null @@ -1,219 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Logical Data Modeling -===================== - -Now that you have defined your queries, you’re ready to begin designing -Cassandra tables. First, create a logical model containing a table -for each query, capturing entities and relationships from the conceptual -model. - -To name each table, you’ll identify the primary entity type for which you -are querying and use that to start the entity name. If you are querying -by attributes of other related entities, append those to the table -name, separated with ``_by_``. For example, ``hotels_by_poi``. - -Next, you identify the primary key for the table, adding partition key -columns based on the required query attributes, and clustering columns -in order to guarantee uniqueness and support desired sort ordering. - -The design of the primary key is extremely important, as it will -determine how much data will be stored in each partition and how that -data is organized on disk, which in turn will affect how quickly -Cassandra processes reads. - -Complete each table by adding any additional attributes identified by -the query. If any of these additional attributes are the same for every -instance of the partition key, mark the column as static. - -Now that was a pretty quick description of a fairly involved process, so -it will be worthwhile to work through a detailed example. First, -let’s introduce a notation that you can use to represent logical -models. - -Several individuals within the Cassandra community have proposed -notations for capturing data models in diagrammatic form. This document -uses a notation popularized by Artem Chebotko which provides a simple, -informative way to visualize the relationships between queries and -tables in your designs. This figure shows the Chebotko notation for a -logical data model. - -.. image:: images/data_modeling_chebotko_logical.png - -Each table is shown with its title and a list of columns. Primary key -columns are identified via symbols such as **K** for partition key -columns and **C**\ ↑ or **C**\ ↓ to represent clustering columns. Lines -are shown entering tables or between tables to indicate the queries that -each table is designed to support. - -Hotel Logical Data Model ------------------------- - -The figure below shows a Chebotko logical data model for the queries -involving hotels, points of interest, rooms, and amenities. One thing you'll -notice immediately is that the Cassandra design doesn’t include dedicated -tables for rooms or amenities, as you had in the relational design. This -is because the workflow didn’t identify any queries requiring this -direct access. - -.. image:: images/data_modeling_hotel_logical.png - -Let’s explore the details of each of these tables. - -The first query Q1 is to find hotels near a point of interest, so you’ll -call this table ``hotels_by_poi``. Searching by a named point of -interest is a clue that the point of interest should be a part -of the primary key. Let’s reference the point of interest by name, -because according to the workflow that is how users will start their -search. - -You’ll note that you certainly could have more than one hotel near a -given point of interest, so you’ll need another component in the primary -key in order to make sure you have a unique partition for each hotel. So -you add the hotel key as a clustering column. - -An important consideration in designing your table’s primary key is -making sure that it defines a unique data element. Otherwise you run the -risk of accidentally overwriting data. - -Now for the second query (Q2), you’ll need a table to get information -about a specific hotel. One approach would have been to put all of the -attributes of a hotel in the ``hotels_by_poi`` table, but you added -only those attributes that were required by the application workflow. - -From the workflow diagram, you know that the ``hotels_by_poi`` table is -used to display a list of hotels with basic information on each hotel, -and the application knows the unique identifiers of the hotels returned. -When the user selects a hotel to view details, you can then use Q2, which -is used to obtain details about the hotel. Because you already have the -``hotel_id`` from Q1, you use that as a reference to the hotel you’re -looking for. Therefore the second table is just called ``hotels``. - -Another option would have been to store a set of ``poi_names`` in the -hotels table. This is an equally valid approach. You’ll learn through -experience which approach is best for your application. - -Q3 is just a reverse of Q1—looking for points of interest near a hotel, -rather than hotels near a point of interest. This time, however, you need -to access the details of each point of interest, as represented by the -``pois_by_hotel`` table. As previously, you add the point of -interest name as a clustering key to guarantee uniqueness. - -At this point, let’s now consider how to support query Q4 to help the -user find available rooms at a selected hotel for the nights they are -interested in staying. Note that this query involves both a start date -and an end date. Because you’re querying over a range instead of a single -date, you know that you’ll need to use the date as a clustering key. -Use the ``hotel_id`` as a primary key to group room data for each hotel -on a single partition, which should help searches be super fast. Let’s -call this the ``available_rooms_by_hotel_date`` table. - -To support searching over a range, use :ref:`clustering columns -` to store -attributes that you need to access in a range query. Remember that the -order of the clustering columns is important. - -The design of the ``available_rooms_by_hotel_date`` table is an instance -of the **wide partition** pattern. This -pattern is sometimes called the **wide row** pattern when discussing -databases that support similar models, but wide partition is a more -accurate description from a Cassandra perspective. The essence of the -pattern is to group multiple related rows in a partition in order to -support fast access to multiple rows within the partition in a single -query. - -In order to round out the shopping portion of the data model, add the -``amenities_by_room`` table to support Q5. This will allow users to -view the amenities of one of the rooms that is available for the desired -stay dates. - -Reservation Logical Data Model ------------------------------- - -Now let's switch gears to look at the reservation queries. The figure -shows a logical data model for reservations. You’ll notice that these -tables represent a denormalized design; the same data appears in -multiple tables, with differing keys. - -.. image:: images/data_modeling_reservation_logical.png - -In order to satisfy Q6, the ``reservations_by_guest`` table can be used -to look up the reservation by guest name. You could envision query Q7 -being used on behalf of a guest on a self-serve website or a call center -agent trying to assist the guest. Because the guest name might not be -unique, you include the guest ID here as a clustering column as well. - -Q8 and Q9 in particular help to remind you to create queries -that support various stakeholders of the application, not just customers -but staff as well, and perhaps even the analytics team, suppliers, and so -on. - -The hotel staff might wish to see a record of upcoming reservations by -date in order to get insight into how the hotel is performing, such as -what dates the hotel is sold out or undersold. Q8 supports the retrieval -of reservations for a given hotel by date. - -Finally, you create a ``guests`` table. This provides a single -location that used to store guest information. In this case, you specify a -separate unique identifier for guest records, as it is not uncommon -for guests to have the same name. In many organizations, a customer -database such as the ``guests`` table would be part of a separate -customer management application, which is why other guest -access patterns were omitted from the example. - - -Patterns and Anti-Patterns --------------------------- - -As with other types of software design, there are some well-known -patterns and anti-patterns for data modeling in Cassandra. You’ve already -used one of the most common patterns in this hotel model—the wide -partition pattern. - -The **time series** pattern is an extension of the wide partition -pattern. In this pattern, a series of measurements at specific time -intervals are stored in a wide partition, where the measurement time is -used as part of the partition key. This pattern is frequently used in -domains including business analysis, sensor data management, and -scientific experiments. - -The time series pattern is also useful for data other than measurements. -Consider the example of a banking application. You could store each -customer’s balance in a row, but that might lead to a lot of read and -write contention as various customers check their balance or make -transactions. You’d probably be tempted to wrap a transaction around -writes just to protect the balance from being updated in error. In -contrast, a time series–style design would store each transaction as a -timestamped row and leave the work of calculating the current balance to -the application. - -One design trap that many new users fall into is attempting to use -Cassandra as a queue. Each item in the queue is stored with a timestamp -in a wide partition. Items are appended to the end of the queue and read -from the front, being deleted after they are read. This is a design that -seems attractive, especially given its apparent similarity to the time -series pattern. The problem with this approach is that the deleted items -are now :ref:`tombstones ` that Cassandra must scan past -in order to read from the front of the queue. Over time, a growing number -of tombstones begins to degrade read performance. - -The queue anti-pattern serves as a reminder that any design that relies -on the deletion of data is potentially a poorly performing design. - -*Material adapted from Cassandra, The Definitive Guide. Published by -O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. -All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_physical.rst b/doc/source/data_modeling/data_modeling_physical.rst deleted file mode 100644 index 7584004967e0..000000000000 --- a/doc/source/data_modeling/data_modeling_physical.rst +++ /dev/null @@ -1,117 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Physical Data Modeling -====================== - -Once you have a logical data model defined, creating the physical model -is a relatively simple process. - -You walk through each of the logical model tables, assigning types to -each item. You can use any valid :ref:`CQL data type `, -including the basic types, collections, and user-defined types. You may -identify additional user-defined types that can be created to simplify -your design. - -After you’ve assigned data types, you analyze the model by performing -size calculations and testing out how the model works. You may make some -adjustments based on your findings. Once again let's cover the data -modeling process in more detail by working through an example. - -Before getting started, let’s look at a few additions to the Chebotko -notation for physical data models. To draw physical models, you need to -be able to add the typing information for each column. This figure -shows the addition of a type for each column in a sample table. - -.. image:: images/data_modeling_chebotko_physical.png - -The figure includes a designation of the keyspace containing each table -and visual cues for columns represented using collections and -user-defined types. Note the designation of static columns and -secondary index columns. There is no restriction on assigning these as -part of a logical model, but they are typically more of a physical data -modeling concern. - -Hotel Physical Data Model -------------------------- - -Now let’s get to work on the physical model. First, you need keyspaces -to contain the tables. To keep the design relatively simple, create a -``hotel`` keyspace to contain tables for hotel and availability -data, and a ``reservation`` keyspace to contain tables for reservation -and guest data. In a real system, you might divide the tables across even -more keyspaces in order to separate concerns. - -For the ``hotels`` table, use Cassandra’s ``text`` type to -represent the hotel’s ``id``. For the address, create an -``address`` user defined type. Use the ``text`` type to represent the -phone number, as there is considerable variance in the formatting of -numbers between countries. - -While it would make sense to use the ``uuid`` type for attributes such -as the ``hotel_id``, this document uses mostly ``text`` attributes as -identifiers, to keep the samples simple and readable. For example, a -common convention in the hospitality industry is to reference properties -by short codes like "AZ123" or "NY229". This example uses these values -for ``hotel_ids``, while acknowledging they are not necessarily globally -unique. - -You’ll find that it’s often helpful to use unique IDs to uniquely -reference elements, and to use these ``uuids`` as references in tables -representing other entities. This helps to minimize coupling between -different entity types. This may prove especially effective if you are -using a microservice architectural style for your application, in which -there are separate services responsible for each entity type. - -As you work to create physical representations of various tables in the -logical hotel data model, you use the same approach. The resulting design -is shown in this figure: - -.. image:: images/data_modeling_hotel_physical.png - -Note that the ``address`` type is also included in the design. It -is designated with an asterisk to denote that it is a user-defined type, -and has no primary key columns identified. This type is used in -the ``hotels`` and ``hotels_by_poi`` tables. - -User-defined types are frequently used to help reduce duplication of -non-primary key columns, as was done with the ``address`` -user-defined type. This can reduce complexity in the design. - -Remember that the scope of a UDT is the keyspace in which it is defined. -To use ``address`` in the ``reservation`` keyspace defined below -design, you’ll have to declare it again. This is just one of the many -trade-offs you have to make in data model design. - -Reservation Physical Data Model -------------------------------- - -Now, let’s examine reservation tables in the design. -Remember that the logical model contained three denormalized tables to -support queries for reservations by confirmation number, guest, and -hotel and date. For the first iteration of your physical data model -design, assume you're going to manage this denormalization -manually. Note that this design could be revised to use Cassandra’s -(experimental) materialized view feature. - -.. image:: images/data_modeling_reservation_physical.png - -Note that the ``address`` type is reproduced in this keyspace and -``guest_id`` is modeled as a ``uuid`` type in all of the tables. - -*Material adapted from Cassandra, The Definitive Guide. Published by -O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. -All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_queries.rst b/doc/source/data_modeling/data_modeling_queries.rst deleted file mode 100644 index d0119944f402..000000000000 --- a/doc/source/data_modeling/data_modeling_queries.rst +++ /dev/null @@ -1,85 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Defining Application Queries -============================ - -Let’s try the query-first approach to start designing the data model for -a hotel application. The user interface design for the application is -often a great artifact to use to begin identifying queries. Let’s assume -that you’ve talked with the project stakeholders and your UX designers -have produced user interface designs or wireframes for the key use -cases. You’ll likely have a list of shopping queries like the following: - -- Q1. Find hotels near a given point of interest. - -- Q2. Find information about a given hotel, such as its name and - location. - -- Q3. Find points of interest near a given hotel. - -- Q4. Find an available room in a given date range. - -- Q5. Find the rate and amenities for a room. - -It is often helpful to be able to refer -to queries by a shorthand number rather that explaining them in full. -The queries listed here are numbered Q1, Q2, and so on, which is how they -are referenced in diagrams throughout the example. - -Now if the application is to be a success, you’ll certainly want -customers to be able to book reservations at hotels. This includes -steps such as selecting an available room and entering their guest -information. So clearly you will also need some queries that address the -reservation and guest entities from the conceptual data model. Even -here, however, you’ll want to think not only from the customer -perspective in terms of how the data is written, but also in terms of -how the data will be queried by downstream use cases. - -You natural tendency as might be to focus first on -designing the tables to store reservation and guest records, and only -then start thinking about the queries that would access them. You may -have felt a similar tension already when discussing the -shopping queries before, thinking “but where did the hotel and point of -interest data come from?” Don’t worry, you will see soon enough. -Here are some queries that describe how users will access -reservations: - -- Q6. Lookup a reservation by confirmation number. - -- Q7. Lookup a reservation by hotel, date, and guest name. - -- Q8. Lookup all reservations by guest name. - -- Q9. View guest details. - -All of the queries are shown in the context of the workflow of the -application in the figure below. Each box on the diagram represents a -step in the application workflow, with arrows indicating the flows -between steps and the associated query. If you’ve modeled the application -well, each step of the workflow accomplishes a task that “unlocks” -subsequent steps. For example, the “View hotels near POI” task helps -the application learn about several hotels, including their unique keys. -The key for a selected hotel may be used as part of Q2, in order to -obtain detailed description of the hotel. The act of booking a room -creates a reservation record that may be accessed by the guest and -hotel staff at a later time through various additional queries. - -.. image:: images/data_modeling_hotel_queries.png - -*Material adapted from Cassandra, The Definitive Guide. Published by -O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. -All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_refining.rst b/doc/source/data_modeling/data_modeling_refining.rst deleted file mode 100644 index 13a276ed740a..000000000000 --- a/doc/source/data_modeling/data_modeling_refining.rst +++ /dev/null @@ -1,218 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. role:: raw-latex(raw) - :format: latex -.. - -Evaluating and Refining Data Models -=================================== - -Once you’ve created a physical model, there are some steps you’ll want -to take to evaluate and refine table designs to help ensure optimal -performance. - -Calculating Partition Size --------------------------- - -The first thing that you want to look for is whether your tables will have -partitions that will be overly large, or to put it another way, too -wide. Partition size is measured by the number of cells (values) that -are stored in the partition. Cassandra’s hard limit is 2 billion cells -per partition, but you’ll likely run into performance issues before -reaching that limit. - -In order to calculate the size of partitions, use the following -formula: - -.. math:: N_v = N_r (N_c - N_{pk} - N_s) + N_s - -The number of values (or cells) in the partition (N\ :sub:`v`) is equal to -the number of static columns (N\ :sub:`s`) plus the product of the number -of rows (N\ :sub:`r`) and the number of of values per row. The number of -values per row is defined as the number of columns (N\ :sub:`c`) minus the -number of primary key columns (N\ :sub:`pk`) and static columns -(N\ :sub:`s`). - -The number of columns tends to be relatively static, although it -is possible to alter tables at runtime. For this reason, a -primary driver of partition size is the number of rows in the partition. -This is a key factor that you must consider in determining whether a -partition has the potential to get too large. Two billion values sounds -like a lot, but in a sensor system where tens or hundreds of values are -measured every millisecond, the number of values starts to add up pretty -fast. - -Let’s take a look at one of the tables to analyze the partition size. -Because it has a wide partition design with one partition per hotel, -look at the ``available_rooms_by_hotel_date`` table. The table has -four columns total (N\ :sub:`c` = 4), including three primary key columns -(N\ :sub:`pk` = 3) and no static columns (N\ :sub:`s` = 0). Plugging these -values into the formula, the result is: - -.. math:: N_v = N_r (4 - 3 - 0) + 0 = 1N_r - -Therefore the number of values for this table is equal to the number of -rows. You still need to determine a number of rows. To do this, make -estimates based on the application design. The table is -storing a record for each room, in each of hotel, for every night. -Let's assume the system will be used to store two years of -inventory at a time, and there are 5,000 hotels in the system, with an -average of 100 rooms in each hotel. - -Since there is a partition for each hotel, the estimated number of rows -per partition is as follows: - -.. math:: N_r = 100 rooms/hotel \times 730 days = 73,000 rows - -This relatively small number of rows per partition is not going to get -you in too much trouble, but if you start storing more dates of inventory, -or don’t manage the size of the inventory well using TTL, you could start -having issues. You still might want to look at breaking up this large -partition, which you'll see how to do shortly. - -When performing sizing calculations, it is tempting to assume the -nominal or average case for variables such as the number of rows. -Consider calculating the worst case as well, as these sorts of -predictions have a way of coming true in successful systems. - -Calculating Size on Disk ------------------------- - -In addition to calculating the size of a partition, it is also an -excellent idea to estimate the amount of disk space that will be -required for each table you plan to store in the cluster. In order to -determine the size, use the following formula to determine the size -S\ :sub:`t` of a partition: - -.. math:: S_t = \displaystyle\sum_i sizeOf\big (c_{k_i}\big) + \displaystyle\sum_j sizeOf\big(c_{s_j}\big) + N_r\times \bigg(\displaystyle\sum_k sizeOf\big(c_{r_k}\big) + \displaystyle\sum_l sizeOf\big(c_{c_l}\big)\bigg) + - -.. math:: N_v\times sizeOf\big(t_{avg}\big) - -This is a bit more complex than the previous formula, but let's break it -down a bit at a time. Let’s take a look at the notation first: - -- In this formula, c\ :sub:`k` refers to partition key columns, - c\ :sub:`s` to static columns, c\ :sub:`r` to regular columns, and - c\ :sub:`c` to clustering columns. - -- The term t\ :sub:`avg` refers to the average number of bytes of - metadata stored per cell, such as timestamps. It is typical to use an - estimate of 8 bytes for this value. - -- You'll recognize the number of rows N\ :sub:`r` and number of values - N\ :sub:`v` from previous calculations. - -- The **sizeOf()** function refers to the size in bytes of the CQL data - type of each referenced column. - -The first term asks you to sum the size of the partition key columns. For -this example, the ``available_rooms_by_hotel_date`` table has a single -partition key column, the ``hotel_id``, which is of type -``text``. Assuming that hotel identifiers are simple 5-character codes, -you have a 5-byte value, so the sum of the partition key column sizes is -5 bytes. - -The second term asks you to sum the size of the static columns. This table -has no static columns, so the size is 0 bytes. - -The third term is the most involved, and for good reason—it is -calculating the size of the cells in the partition. Sum the size of -the clustering columns and regular columns. The two clustering columns -are the ``date``, which is 4 bytes, and the ``room_number``, -which is a 2-byte short integer, giving a sum of 6 bytes. -There is only a single regular column, the boolean ``is_available``, -which is 1 byte in size. Summing the regular column size -(1 byte) plus the clustering column size (6 bytes) gives a total of 7 -bytes. To finish up the term, multiply this value by the number of -rows (73,000), giving a result of 511,000 bytes (0.51 MB). - -The fourth term is simply counting the metadata that that Cassandra -stores for each cell. In the storage format used by Cassandra 3.0 and -later, the amount of metadata for a given cell varies based on the type -of data being stored, and whether or not custom timestamp or TTL values -are specified for individual cells. For this table, reuse the number -of values from the previous calculation (73,000) and multiply by 8, -which gives 0.58 MB. - -Adding these terms together, you get a final estimate: - -.. math:: Partition size = 16 bytes + 0 bytes + 0.51 MB + 0.58 MB = 1.1 MB - -This formula is an approximation of the actual size of a partition on -disk, but is accurate enough to be quite useful. Remembering that the -partition must be able to fit on a single node, it looks like the table -design will not put a lot of strain on disk storage. - -Cassandra’s storage engine was re-implemented for the 3.0 release, -including a new format for SSTable files. The previous format stored a -separate copy of the clustering columns as part of the record for each -cell. The newer format eliminates this duplication, which reduces the -size of stored data and simplifies the formula for computing that size. - -Keep in mind also that this estimate only counts a single replica of -data. You will need to multiply the value obtained here by the number of -partitions and the number of replicas specified by the keyspace’s -replication strategy in order to determine the total required total -capacity for each table. This will come in handy when you -plan your cluster. - -Breaking Up Large Partitions ----------------------------- - -As discussed previously, the goal is to design tables that can provide -the data you need with queries that touch a single partition, or failing -that, the minimum possible number of partitions. However, as shown in -the examples, it is quite possible to design wide -partition-style tables that approach Cassandra’s built-in limits. -Performing sizing analysis on tables may reveal partitions that are -potentially too large, either in number of values, size on disk, or -both. - -The technique for splitting a large partition is straightforward: add an -additional column to the partition key. In most cases, moving one of the -existing columns into the partition key will be sufficient. Another -option is to introduce an additional column to the table to act as a -sharding key, but this requires additional application logic. - -Continuing to examine the available rooms example, if you add the ``date`` -column to the partition key for the ``available_rooms_by_hotel_date`` -table, each partition would then represent the availability of rooms -at a specific hotel on a specific date. This will certainly yield -partitions that are significantly smaller, perhaps too small, as the -data for consecutive days will likely be on separate nodes. - -Another technique known as **bucketing** is often used to break the data -into moderate-size partitions. For example, you could bucketize the -``available_rooms_by_hotel_date`` table by adding a ``month`` column to -the partition key, perhaps represented as an integer. The comparision -with the original design is shown in the figure below. While the -``month`` column is partially duplicative of the ``date``, it provides -a nice way of grouping related data in a partition that will not get -too large. - -.. image:: images/data_modeling_hotel_bucketing.png - -If you really felt strongly about preserving a wide partition design, you -could instead add the ``room_id`` to the partition key, so that each -partition would represent the availability of the room across all -dates. Because there was no query identified that involves searching -availability of a specific room, the first or second design approach -is most suitable to the application needs. - -*Material adapted from Cassandra, The Definitive Guide. Published by -O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. -All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_schema.rst b/doc/source/data_modeling/data_modeling_schema.rst deleted file mode 100644 index 1876ec3faab1..000000000000 --- a/doc/source/data_modeling/data_modeling_schema.rst +++ /dev/null @@ -1,144 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: cql - -Defining Database Schema -======================== - -Once you have finished evaluating and refining the physical model, you’re -ready to implement the schema in CQL. Here is the schema for the -``hotel`` keyspace, using CQL’s comment feature to document the query -pattern supported by each table:: - - CREATE KEYSPACE hotel WITH replication = - {‘class’: ‘SimpleStrategy’, ‘replication_factor’ : 3}; - - CREATE TYPE hotel.address ( - street text, - city text, - state_or_province text, - postal_code text, - country text ); - - CREATE TABLE hotel.hotels_by_poi ( - poi_name text, - hotel_id text, - name text, - phone text, - address frozen
, - PRIMARY KEY ((poi_name), hotel_id) ) - WITH comment = ‘Q1. Find hotels near given poi’ - AND CLUSTERING ORDER BY (hotel_id ASC) ; - - CREATE TABLE hotel.hotels ( - id text PRIMARY KEY, - name text, - phone text, - address frozen
, - pois set ) - WITH comment = ‘Q2. Find information about a hotel’; - - CREATE TABLE hotel.pois_by_hotel ( - poi_name text, - hotel_id text, - description text, - PRIMARY KEY ((hotel_id), poi_name) ) - WITH comment = Q3. Find pois near a hotel’; - - CREATE TABLE hotel.available_rooms_by_hotel_date ( - hotel_id text, - date date, - room_number smallint, - is_available boolean, - PRIMARY KEY ((hotel_id), date, room_number) ) - WITH comment = ‘Q4. Find available rooms by hotel date’; - - CREATE TABLE hotel.amenities_by_room ( - hotel_id text, - room_number smallint, - amenity_name text, - description text, - PRIMARY KEY ((hotel_id, room_number), amenity_name) ) - WITH comment = ‘Q5. Find amenities for a room’; - - -Notice that the elements of the partition key are surrounded -with parentheses, even though the partition key consists -of the single column ``poi_name``. This is a best practice that makes -the selection of partition key more explicit to others reading your CQL. - -Similarly, here is the schema for the ``reservation`` keyspace:: - - CREATE KEYSPACE reservation WITH replication = {‘class’: - ‘SimpleStrategy’, ‘replication_factor’ : 3}; - - CREATE TYPE reservation.address ( - street text, - city text, - state_or_province text, - postal_code text, - country text ); - - CREATE TABLE reservation.reservations_by_confirmation ( - confirm_number text, - hotel_id text, - start_date date, - end_date date, - room_number smallint, - guest_id uuid, - PRIMARY KEY (confirm_number) ) - WITH comment = ‘Q6. Find reservations by confirmation number’; - - CREATE TABLE reservation.reservations_by_hotel_date ( - hotel_id text, - start_date date, - end_date date, - room_number smallint, - confirm_number text, - guest_id uuid, - PRIMARY KEY ((hotel_id, start_date), room_number) ) - WITH comment = ‘Q7. Find reservations by hotel and date’; - - CREATE TABLE reservation.reservations_by_guest ( - guest_last_name text, - hotel_id text, - start_date date, - end_date date, - room_number smallint, - confirm_number text, - guest_id uuid, - PRIMARY KEY ((guest_last_name), hotel_id) ) - WITH comment = ‘Q8. Find reservations by guest name’; - - CREATE TABLE reservation.guests ( - guest_id uuid PRIMARY KEY, - first_name text, - last_name text, - title text, - emails set, - phone_numbers list, - addresses map, - confirm_number text ) - WITH comment = ‘Q9. Find guest by ID’; - -You now have a complete Cassandra schema for storing data for a hotel -application. - -*Material adapted from Cassandra, The Definitive Guide. Published by -O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. -All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_tools.rst b/doc/source/data_modeling/data_modeling_tools.rst deleted file mode 100644 index 46fad33465ab..000000000000 --- a/doc/source/data_modeling/data_modeling_tools.rst +++ /dev/null @@ -1,64 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Cassandra Data Modeling Tools -============================= - -There are several tools available to help you design and -manage your Cassandra schema and build queries. - -* `Hackolade `_ - is a data modeling tool that supports schema design for Cassandra and - many other NoSQL databases. Hackolade supports the unique concepts of - CQL such as partition keys and clustering columns, as well as data types - including collections and UDTs. It also provides the ability to create - Chebotko diagrams. - -* `Kashlev Data Modeler `_ is a Cassandra - data modeling tool that automates the data modeling methodology - described in this documentation, including identifying - access patterns, conceptual, logical, and physical data modeling, and - schema generation. It also includes model patterns that you can - optionally leverage as a starting point for your designs. - -* DataStax DevCenter is a tool for managing - schema, executing queries and viewing results. While the tool is no - longer actively supported, it is still popular with many developers and - is available as a `free download `_. - DevCenter features syntax highlighting for CQL commands, types, and name - literals. DevCenter provides command completion as you type out CQL - commands and interprets the commands you type, highlighting any errors - you make. The tool provides panes for managing multiple CQL scripts and - connections to multiple clusters. The connections are used to run CQL - commands against live clusters and view the results. The tool also has a - query trace feature that is useful for gaining insight into the - performance of your queries. - -* IDE Plugins - There are CQL plugins available for several Integrated - Development Environments (IDEs), such as IntelliJ IDEA and Apache - NetBeans. These plugins typically provide features such as schema - management and query execution. - -Some IDEs and tools that claim to support Cassandra do not actually support -CQL natively, but instead access Cassandra using a JDBC/ODBC driver and -interact with Cassandra as if it were a relational database with SQL -support. Wnen selecting tools for working with Cassandra you’ll want to -make sure they support CQL and reinforce Cassandra best practices for -data modeling as presented in this documentation. - -*Material adapted from Cassandra, The Definitive Guide. Published by -O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. -All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/index.rst b/doc/source/data_modeling/index.rst deleted file mode 100644 index 2f799dc32c31..000000000000 --- a/doc/source/data_modeling/index.rst +++ /dev/null @@ -1,36 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Data Modeling -************* - -.. toctree:: - :maxdepth: 2 - - intro - data_modeling_conceptual - data_modeling_rdbms - data_modeling_queries - data_modeling_logical - data_modeling_physical - data_modeling_refining - data_modeling_schema - data_modeling_tools - - - - - diff --git a/doc/source/data_modeling/intro.rst b/doc/source/data_modeling/intro.rst deleted file mode 100644 index 630a7d1b5ba7..000000000000 --- a/doc/source/data_modeling/intro.rst +++ /dev/null @@ -1,146 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Introduction -============ - -Apache Cassandra stores data in tables, with each table consisting of rows and columns. CQL (Cassandra Query Language) is used to query the data stored in tables. Apache Cassandra data model is based around and optimized for querying. Cassandra does not support relational data modeling intended for relational databases. - -What is Data Modeling? -^^^^^^^^^^^^^^^^^^^^^^ - -Data modeling is the process of identifying entities and their relationships. In relational databases, data is placed in normalized tables with foreign keys used to reference related data in other tables. Queries that the application will make are driven by the structure of the tables and related data are queried as table joins. - -In Cassandra, data modeling is query-driven. The data access patterns and application queries determine the structure and organization of data which then used to design the database tables. - -Data is modeled around specific queries. Queries are best designed to access a single table, which implies that all entities involved in a query must be in the same table to make data access (reads) very fast. Data is modeled to best suit a query or a set of queries. A table could have one or more entities as best suits a query. As entities do typically have relationships among them and queries could involve entities with relationships among them, a single entity may be included in multiple tables. - -Query-driven modeling -^^^^^^^^^^^^^^^^^^^^^ - -Unlike a relational database model in which queries make use of table joins to get data from multiple tables, joins are not supported in Cassandra so all required fields (columns) must be grouped together in a single table. Since each query is backed by a table, data is duplicated across multiple tables in a process known as denormalization. Data duplication and a high write throughput are used to achieve a high read performance. - -Goals -^^^^^ - -The choice of the primary key and partition key is important to distribute data evenly across the cluster. Keeping the number of partitions read for a query to a minimum is also important because different partitions could be located on different nodes and the coordinator would need to send a request to each node adding to the request overhead and latency. Even if the different partitions involved in a query are on the same node, fewer partitions make for a more efficient query. - -Partitions -^^^^^^^^^^ - -Apache Cassandra is a distributed database that stores data across a cluster of nodes. A partition key is used to partition data among the nodes. Cassandra partitions data over the storage nodes using a variant of consistent hashing for data distribution. Hashing is a technique used to map data with which given a key, a hash function generates a hash value (or simply a hash) that is stored in a hash table. A partition key is generated from the first field of a primary key. Data partitioned into hash tables using partition keys provides for rapid lookup. Fewer the partitions used for a query faster is the response time for the query. - -As an example of partitioning, consider table ``t`` in which ``id`` is the only field in the primary key. - -:: - - CREATE TABLE t ( - id int, - k int, - v text, - PRIMARY KEY (id) - ); - -The partition key is generated from the primary key ``id`` for data distribution across the nodes in a cluster. - -Consider a variation of table ``t`` that has two fields constituting the primary key to make a composite or compound primary key. - -:: - - CREATE TABLE t ( - id int, - c text, - k int, - v text, - PRIMARY KEY (id,c) - ); - -For the table ``t`` with a composite primary key the first field ``id`` is used to generate the partition key and the second field ``c`` is the clustering key used for sorting within a partition. Using clustering keys to sort data makes retrieval of adjacent data more efficient. - -In general, the first field or component of a primary key is hashed to generate the partition key and the remaining fields or components are the clustering keys that are used to sort data within a partition. Partitioning data improves the efficiency of reads and writes. The other fields that are not primary key fields may be indexed separately to further improve query performance. - -The partition key could be generated from multiple fields if they are grouped as the first component of a primary key. As another variation of the table ``t``, consider a table with the first component of the primary key made of two fields grouped using parentheses. - -:: - - CREATE TABLE t ( - id1 int, - id2 int, - c1 text, - c2 text - k int, - v text, - PRIMARY KEY ((id1,id2),c1,c2) - ); - -For the preceding table ``t`` the first component of the primary key constituting fields ``id1`` and ``id2`` is used to generate the partition key and the rest of the fields ``c1`` and ``c2`` are the clustering keys used for sorting within a partition. - -Comparing with Relational Data Model -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Relational databases store data in tables that have relations with other tables using foreign keys. A relational database’s approach to data modeling is table-centric. Queries must use table joins to get data from multiple tables that have a relation between them. Apache Cassandra does not have the concept of foreign keys or relational integrity. Apache Cassandra’s data model is based around designing efficient queries; queries that don’t involve multiple tables. Relational databases normalize data to avoid duplication. Apache Cassandra in contrast de-normalizes data by duplicating data in multiple tables for a query-centric data model. If a Cassandra data model cannot fully integrate the complexity of relationships between the different entities for a particular query, client-side joins in application code may be used. - -Examples of Data Modeling -^^^^^^^^^^^^^^^^^^^^^^^^^ - -As an example, a ``magazine`` data set consists of data for magazines with attributes such as magazine id, magazine name, publication frequency, publication date, and publisher. A basic query (Q1) for magazine data is to list all the magazine names including their publication frequency. As not all data attributes are needed for Q1 the data model would only consist of ``id`` ( for partition key), magazine name and publication frequency as shown in Figure 1. - -.. figure:: images/Figure_1_data_model.jpg - -Figure 1. Data Model for Q1 - -Another query (Q2) is to list all the magazine names by publisher. For Q2 the data model would consist of an additional attribute ``publisher`` for the partition key. The ``id`` would become the clustering key for sorting within a partition. Data model for Q2 is illustrated in Figure 2. - -.. figure:: images/Figure_2_data_model.jpg - -Figure 2. Data Model for Q2 - -Designing Schema -^^^^^^^^^^^^^^^^ - -After the conceptual data model has been created a schema may be designed for a query. For Q1 the following schema may be used. - -:: - - CREATE TABLE magazine_name (id int PRIMARY KEY, name text, publicationFrequency text) - -For Q2 the schema definition would include a clustering key for sorting. - -:: - - CREATE TABLE magazine_publisher (publisher text,id int,name text, publicationFrequency text, - PRIMARY KEY (publisher, id)) WITH CLUSTERING ORDER BY (id DESC) - -Data Model Analysis -^^^^^^^^^^^^^^^^^^^ - -The data model is a conceptual model that must be analyzed and optimized based on storage, capacity, redundancy and consistency. A data model may need to be modified as a result of the analysis. Considerations or limitations that are used in data model analysis include: - -- Partition Size -- Data Redundancy -- Disk space -- Lightweight Transactions (LWT) - -The two measures of partition size are the number of values in a partition and partition size on disk. Though requirements for these measures may vary based on the application a general guideline is to keep number of values per partition to below 100,000 and disk space per partition to below 100MB. - -Data redundancies as duplicate data in tables and multiple partition replicates are to be expected in the design of a data model , but nevertheless should be kept in consideration as a parameter to keep to the minimum. LWT transactions (compare-and-set, conditional update) could affect performance and queries using LWT should be kept to the minimum. - -Using Materialized Views -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. warning:: Materialized views (MVs) are experimental in the latest (4.0) release. - -Materialized views (MVs) could be used to implement multiple queries for a single table. A materialized view is a table built from data from another table, the base table, with new primary key and new properties. Changes to the base table data automatically add and update data in a MV. Different queries may be implemented using a materialized view as an MV's primary key differs from the base table. Queries are optimized by the primary key definition. diff --git a/doc/source/development/ci.rst b/doc/source/development/ci.rst deleted file mode 100644 index a6620b32f556..000000000000 --- a/doc/source/development/ci.rst +++ /dev/null @@ -1,79 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Jenkins CI Environment -********************** - -About CI testing and Apache Cassandra -===================================== - -Cassandra can be automatically tested using various test suites, that are either implemented based on JUnit or the `dtest `_ scripts written in Python. As outlined in :doc:`testing`, each kind of test suite addresses a different way how to test Cassandra. But in the end, all of them will be executed together on our CI platform at `builds.apache.org `_, running `Jenkins `_. - - - -Setting up your own Jenkins server -================================== - -Jenkins is an open source solution that can be installed on a large number of platforms. Setting up a custom Jenkins instance for Cassandra may be desirable for users who have hardware to spare, or organizations that want to run Cassandra tests for custom patches before contribution. - -Please refer to the Jenkins download and documentation pages for details on how to get Jenkins running, possibly also including slave build executor instances. The rest of the document will focus on how to setup Cassandra jobs in your Jenkins environment. - -Required plugins ----------------- - -The following plugins need to be installed additionally to the standard plugins (git, ant, ..). - -You can install any missing plugins through the install manager. - -Go to ``Manage Jenkins -> Manage Plugins -> Available`` and install the following plugins and respective dependencies: - -* Job DSL -* Javadoc Plugin -* description setter plugin -* Throttle Concurrent Builds Plug-in -* Test stability history -* Hudson Post build task - - -Configure Throttle Category ---------------------------- - -Builds that are not containerized (e.g. cqlshlib tests and in-jvm dtests) use local resources for Cassandra (ccm). To prevent these builds running concurrently the ``Cassandra`` throttle category needs to be created. - -This is done under ``Manage Jenkins -> System Configuration -> Throttle Concurrent Builds``. Enter "Cassandra" for the ``Category Name`` and "1" for ``Maximum Concurrent Builds Per Node``. - -Setup seed job --------------- - -Config ``New Item`` - -* Name it ``Cassandra-Job-DSL`` -* Select ``Freestyle project`` - -Under ``Source Code Management`` select Git using the repository: ``https://github.com/apache/cassandra-builds`` - -Under ``Build``, confirm ``Add build step`` -> ``Process Job DSLs`` and enter at ``Look on Filesystem``: ``jenkins-dsl/cassandra_job_dsl_seed.groovy`` - -Generated jobs will be created based on the Groovy script's default settings. You may want to override settings by checking ``This project is parameterized`` and add ``String Parameter`` for on the variables that can be found in the top of the script. This will allow you to setup jobs for your own repository and branches (e.g. working branches). - -**When done, confirm "Save"** - -You should now find a new entry with the given name in your project list. However, building the project will still fail and abort with an error message `"Processing DSL script cassandra_job_dsl_seed.groovy ERROR: script not yet approved for use"`. Goto ``Manage Jenkins`` -> ``In-process Script Approval`` to fix this issue. Afterwards you should be able to run the script and have it generate numerous new jobs based on the found branches and configured templates. - -Jobs are triggered by either changes in Git or are scheduled to execute periodically, e.g. on daily basis. Jenkins will use any available executor with the label "cassandra", once the job is to be run. Please make sure to make any executors available by selecting ``Build Executor Status`` -> ``Configure`` -> Add "``cassandra``" as label and save. - -Executors need to have "JDK 1.8 (latest)" installed. This is done under ``Manage Jenkins -> Global Tool Configuration -> JDK Installations…``. Executors also need to have the virtualenv package installed on their system. - diff --git a/doc/source/development/code_style.rst b/doc/source/development/code_style.rst deleted file mode 100644 index 5a486a4a38e3..000000000000 --- a/doc/source/development/code_style.rst +++ /dev/null @@ -1,94 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Code Style -========== - -General Code Conventions ------------------------- - - - The Cassandra project follows `Sun's Java coding conventions `_ with an important exception: ``{`` and ``}`` are always placed on a new line - -Exception handling ------------------- - - - Never ever write ``catch (...) {}`` or ``catch (...) { logger.error() }`` merely to satisfy Java's compile-time exception checking. Always propagate the exception up or throw ``RuntimeException`` (or, if it "can't happen," ``AssertionError``). This makes the exceptions visible to automated tests. - - Avoid propagating up checked exceptions that no caller handles. Rethrow as ``RuntimeException`` (or ``IOError``, if that is more applicable). - - Similarly, logger.warn() is often a cop-out: is this an error or not? If it is don't hide it behind a warn; if it isn't, no need for the warning. - - If you genuinely know an exception indicates an expected condition, it's okay to ignore it BUT this must be explicitly explained in a comment. - -Boilerplate ------------ - - - Avoid redundant ``@Override`` annotations when implementing abstract or interface methods. - - Do not implement equals or hashcode methods unless they are actually needed. - - Prefer public final fields to private fields with getters. (But prefer encapsulating behavior in "real" methods to either.) - - Prefer requiring initialization in the constructor to setters. - - Avoid redundant ``this`` references to member fields or methods. - - Do not extract interfaces (or abstract classes) unless you actually need multiple implementations of it. - - Always include braces for nested levels of conditionals and loops. Only avoid braces for single level. - -Multiline statements --------------------- - - - Try to keep lines under 120 characters, but use good judgement -- it's better to exceed 120 by a little, than split a line that has no natural splitting points. - - When splitting inside a method call, use one line per parameter and align them, like this: - - :: - - SSTableWriter writer = new SSTableWriter(cfs.getTempSSTablePath(), - columnFamilies.size(), - StorageService.getPartitioner()); - - - When splitting a ternary, use one line per clause, carry the operator, and align like this: - - :: - - var = bar == null - ? doFoo() - : doBar(); - -Whitespace ----------- - - - Please make sure to use 4 spaces instead of the tab character for all your indentation. - - Many lines in many files have a bunch of trailing whitespace... Please either clean these up in a separate patch, or leave them alone, so that reviewers now and anyone reading code history later doesn't have to pay attention to whitespace diffs. - -Imports -------- - -Please observe the following order for your imports:: - - java - [blank line] - com.google.common - org.apache.commons - org.junit - org.slf4j - [blank line] - everything else alphabetically - -Format files for IDEs ---------------------- - - - IntelliJ: `intellij-codestyle.jar `_ - - IntelliJ 13: `gist for IntelliJ 13 `_ (this is a work in progress, still working on javadoc, ternary style, line continuations, etc) - - Eclipse (https://github.com/tjake/cassandra-style-eclipse) - - - diff --git a/doc/source/development/dependencies.rst b/doc/source/development/dependencies.rst deleted file mode 100644 index 6dd1cc46bc8f..000000000000 --- a/doc/source/development/dependencies.rst +++ /dev/null @@ -1,53 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Dependency Management -********************* - -Managing libraries for Cassandra is a bit less straight forward compared to other projects, as the build process is based on ant, maven and manually managed jars. Make sure to follow the steps below carefully and pay attention to any emerging issues in the :doc:`ci` and reported related issues on Jira/ML, in case of any project dependency changes. - -As Cassandra is an Apache product, all included libraries must follow Apache's `software license requirements `_. - -Required steps to add or update libraries -========================================= - -* Add or replace jar file in ``lib`` directory -* Add or update ``lib/license`` files -* Update dependencies in ``build.xml`` - - * Add to ``parent-pom`` with correct version - * Add to ``all-pom`` if simple Cassandra dependency (see below) - - -POM file types -============== - -* **parent-pom** - contains all dependencies with the respective version. All other poms will refer to the artifacts with specified versions listed here. -* **build-deps-pom(-sources)** + **coverage-deps-pom** - used by ``ant build`` compile target. Listed dependenices will be resolved and copied to ``build/lib/{jar,sources}`` by executing the ``maven-ant-tasks-retrieve-build`` target. This should contain libraries that are required for build tools (grammar, docs, instrumentation), but are not shipped as part of the Cassandra distribution. -* **test-deps-pom** - refered by ``maven-ant-tasks-retrieve-test`` to retrieve and save dependencies to ``build/test/lib``. Exclusively used during JUnit test execution. -* **all-pom** - pom for `cassandra-all.jar `_ that can be installed or deployed to public maven repos via ``ant publish`` - - -Troubleshooting and conflict resolution -======================================= - -Here are some useful commands that may help you out resolving conflicts. - -* ``ant realclean`` - gets rid of the build directory, including build artifacts. -* ``mvn dependency:tree -f build/apache-cassandra-*-SNAPSHOT.pom -Dverbose -Dincludes=org.slf4j`` - shows transitive dependency tree for artifacts, e.g. org.slf4j. In case the command above fails due to a missing parent pom file, try running ``ant mvn-install``. -* ``rm ~/.m2/repository/org/apache/cassandra/apache-cassandra/`` - removes cached local Cassandra maven artifacts - - diff --git a/doc/source/development/documentation.rst b/doc/source/development/documentation.rst deleted file mode 100644 index c623d54b9507..000000000000 --- a/doc/source/development/documentation.rst +++ /dev/null @@ -1,104 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - - -Working on Documentation -************************* - -How Cassandra is documented -=========================== - -The official Cassandra documentation lives in the project's git repository. We use a static site generator, `Sphinx `_, to create pages hosted at `cassandra.apache.org `_. You'll also find developer centric content about Cassandra internals in our retired `wiki `_ (not covered by this guide). - -Using a static site generator often requires to use a markup language instead of visual editors (which some people would call good news). Sphinx, the tool-set we use to generate our documentation, uses `reStructuredText `_ for that. Markup languages allow you to format text by making use of certain syntax elements. Your document structure will also have to follow specific conventions. Feel free to take a look at `existing documents <..>`_ to get a better idea how we use reStructuredText to write our documents. - -So how do you actually start making contributions? - -GitHub based work flow -====================== - -*Recommended for shorter documents and minor changes on existing content (e.g. fixing typos or updating descriptions)* - -Follow these steps to contribute using GitHub. It's assumed that you're logged in with an existing account. - -1. Fork the GitHub mirror of the `Cassandra repository `_ - -.. image:: images/docs_fork.png - -2. Create a new branch that you can use to make your edits. It's recommended to have a separate branch for each of your working projects. It will also make it easier to create a pull request later to when you decide you’re ready to contribute your work. - -.. image:: images/docs_create_branch.png - -3. Navigate to document sources ``doc/source`` to find the ``.rst`` file to edit. The URL of the document should correspond to the directory structure. New files can be created using the "Create new file" button: - -.. image:: images/docs_create_file.png - -4. At this point you should be able to edit the file using the GitHub web editor. Start by naming your file and add some content. Have a look at other existing ``.rst`` files to get a better idea what format elements to use. - -.. image:: images/docs_editor.png - -Make sure to preview added content before committing any changes. - -.. image:: images/docs_preview.png - -5. Commit your work when you're done. Make sure to add a short description of all your edits since the last time you committed before. - -.. image:: images/docs_commit.png - -6. Finally if you decide that you're done working on your branch, it's time to create a pull request! - -.. image:: images/docs_pr.png - -Afterwards the GitHub Cassandra mirror will list your pull request and you're done. Congratulations! Please give us some time to look at your suggested changes before we get back to you. - - -Jira based work flow -==================== - -*Recommended for major changes* - -Significant changes to the documentation are best managed through our Jira issue tracker. Please follow the same `contribution guides `_ as for regular code contributions. Creating high quality content takes a lot of effort. It’s therefor always a good idea to create a ticket before you start and explain what you’re planing to do. This will create the opportunity for other contributors and committers to comment on your ideas and work so far. Eventually your patch gets a formal review before it is committed. - -Working on documents locally using Sphinx -========================================= - -*Recommended for advanced editing* - -Using the GitHub web interface should allow you to use most common layout elements including images. More advanced formatting options and navigation elements depend on Sphinx to render correctly. Therefor it’s a good idea to setup Sphinx locally for any serious editing. Please follow the instructions in the Cassandra source directory at ``doc/README.md``. Setup is very easy (at least on OSX and Linux). - -Notes for committers -==================== - -Please feel free to get involved and merge pull requests created on the GitHub mirror if you're a committer. As this is a read-only repository, you won't be able to merge a PR directly on GitHub. You'll have to commit the changes against the Apache repository with a comment that will close the PR when the committ syncs with GitHub. - -You may use a git work flow like this:: - - git remote add github https://github.com/apache/cassandra.git - git fetch github pull//head: - git checkout - -Now either rebase or squash the commit, e.g. for squashing:: - - git reset --soft origin/trunk - git commit --author - -Make sure to add a proper commit message including a "Closes #" text to automatically close the PR. - -Publishing ----------- - -Details for building and publishing of the site at cassandra.apache.org can be found `here `_. - diff --git a/doc/source/development/gettingstarted.rst b/doc/source/development/gettingstarted.rst deleted file mode 100644 index c2f5ef36e82d..000000000000 --- a/doc/source/development/gettingstarted.rst +++ /dev/null @@ -1,60 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none -.. _gettingstarted: - -Getting Started -************************* - -Initial Contributions -======================== - -Writing a new feature is just one way to contribute to the Cassandra project. In fact, making sure that supporting tasks, such as QA, documentation and helping users, keep up with the development of new features is an ongoing challenge for the project (and most open source projects). So, before firing up your IDE to create that new feature, we'd suggest you consider some of the following activities as a way of introducing yourself to the project and getting to know how things work. - * Add to or update the documentation - * Answer questions on the user list - * Review and test a submitted patch - * Investigate and fix a reported bug - * Create unit tests and d-tests - -Updating documentation -======================== - -The Cassandra documentation is maintained in the Cassandra source repository along with the Cassandra code base. To submit changes to the documentation, follow the standard process for submitting a patch (:ref:`patches`). - -Answering questions on the user list -==================================== - -Subscribe to the user list, look out for some questions you know the answer to and reply with an answer. Simple as that! -See the `community `_ page for details on how to subscribe to the mailing list. - -Reviewing and testing a submitted patch -======================================= - -Reviewing patches is not the sole domain of committers, if others have reviewed a patch it can reduce the load on the committers allowing them to write more great features or review more patches. Follow the instructions in :ref:`_development_how_to_review` or create a build with the patch and test it with your own workload. Add a comment to the JIRA ticket to let others know what you have done and the results of your work. (For example, "I tested this performance enhacement on our application's standard production load test and found a 3% improvement.") - -Investigate and/or fix a reported bug -===================================== - -Often, the hardest work in fixing a bug is reproducing it. Even if you don't have the knowledge to produce a fix, figuring out a way to reliable reproduce an issues can be a massive contribution to getting a bug fixed. Document your method of reproduction in a JIRA comment or, better yet, produce an automated test that reproduces the issue and attach it to the ticket. If you go as far as producing a fix, follow the process for submitting a patch (:ref:`patches`). - -Create unit tests and Dtests -============================ - -Test coverage in Cassandra is improving but, as with most code bases, it could benefit from more automated test coverage. Before starting work in an area, consider reviewing and enhancing the existing test coverage. This will both improve your knowledge of the code before you start on an enhancement and reduce the chances of your change in introducing new issues. See :ref:`testing` and :ref:`patches` for more detail. - - - diff --git a/doc/source/development/how_to_commit.rst b/doc/source/development/how_to_commit.rst deleted file mode 100644 index dff39832d8c2..000000000000 --- a/doc/source/development/how_to_commit.rst +++ /dev/null @@ -1,75 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -How-to Commit -============= - -If you are a committer, feel free to pick any process that works for you - so long as you are planning to commit the work yourself. - -Here is how committing and merging will usually look for merging and pushing for tickets that follow the convention (if patch-based): - -Hypothetical CASSANDRA-12345 ticket is a cassandra-3.0 based bug fix that requires different code for cassandra-3.3, and trunk. Contributor Jackie supplied a patch for the root branch (12345-3.0.patch), and patches for the remaining branches (12345-3.3.patch, 12345-trunk.patch). - -On cassandra-3.0: - #. ``git am -3 12345-3.0.patch`` (if we have a problem b/c of CHANGES.txt not merging anymore, we fix it ourselves, in place) - -On cassandra-3.3: - #. ``git merge cassandra-3.0 -s ours`` - #. ``git apply -3 12345-3.3.patch`` (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) - #. ``git commit -amend`` - -On trunk: - #. ``git merge cassandra-3.3 -s ours`` - #. ``git apply -3 12345-trunk.patch`` (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) - #. ``git commit -amend`` - -On any branch: - #. ``git push origin cassandra-3.0 cassandra-3.3 trunk -atomic`` - -Same scenario, but a branch-based contribution: - -On cassandra-3.0: - #. ``git cherry-pick `` (if we have a problem b/c of CHANGES.txt not merging anymore, we fix it ourselves, in place) - -On cassandra-3.3: - #. ``git merge cassandra-3.0 -s ours`` - #. ``git format-patch -1 `` - #. ``git apply -3 .patch`` (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) - #. ``git commit -amend`` - -On trunk: - #. ``git merge cassandra-3.3 -s ours`` - #. ``git format-patch -1 `` - #. ``git apply -3 .patch`` (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) - #. ``git commit -amend`` - -On any branch: - #. ``git push origin cassandra-3.0 cassandra-3.3 trunk -atomic`` - -.. tip:: - - Notes on git flags: - ``-3`` flag to am and apply will instruct git to perform a 3-way merge for you. If a conflict is detected, you can either resolve it manually or invoke git mergetool - for both am and apply. - - ``-atomic`` flag to git push does the obvious thing: pushes all or nothing. Without the flag, the command is equivalent to running git push once per each branch. This is nifty in case a race condition happens - you won’t push half the branches, blocking other committers’ progress while you are resolving the issue. - -.. tip:: - - The fastest way to get a patch from someone’s commit in a branch on GH - if you don’t have their repo in remotes - is to append .patch to the commit url, e.g. - curl -O https://github.com/apache/cassandra/commit/7374e9b5ab08c1f1e612bf72293ea14c959b0c3c.patch - diff --git a/doc/source/development/how_to_review.rst b/doc/source/development/how_to_review.rst deleted file mode 100644 index 4778b6946788..000000000000 --- a/doc/source/development/how_to_review.rst +++ /dev/null @@ -1,73 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. _how_to_review: - -Review Checklist -**************** - -When reviewing tickets in Apache JIRA, the following items should be covered as part of the review process: - -**General** - - * Does it conform to the :doc:`code_style` guidelines? - * Is there any redundant or duplicate code? - * Is the code as modular as possible? - * Can any singletons be avoided? - * Can any of the code be replaced with library functions? - * Are units of measurement used in the code consistent, both internally and with the rest of the ecosystem? - -**Error-Handling** - - * Are all data inputs and outputs checked (for the correct type, length, format, and range) and encoded? - * Where third-party utilities are used, are returning errors being caught? - * Are invalid parameter values handled? - * Are any Throwable/Exceptions passed to the JVMStabilityInspector? - * Are errors well-documented? Does the error message tell the user how to proceed? - * Do exceptions propagate to the appropriate level in the code? - -**Documentation** - - * Do comments exist and describe the intent of the code (the "why", not the "how")? - * Are javadocs added where appropriate? - * Is any unusual behavior or edge-case handling described? - * Are data structures and units of measurement explained? - * Is there any incomplete code? If so, should it be removed or flagged with a suitable marker like ‘TODO’? - * Does the code self-document via clear naming, abstractions, and flow control? - * Have NEWS.txt, the cql3 docs, and the native protocol spec been updated if needed? - * Is the ticket tagged with "client-impacting" and "doc-impacting", where appropriate? - * Has lib/licences been updated for third-party libs? Are they Apache License compatible? - * Is the Component on the JIRA ticket set appropriately? - -**Testing** - - * Is the code testable? i.e. don’t add too many or hide dependencies, unable to initialize objects, test frameworks can use methods etc. - * Do tests exist and are they comprehensive? - * Do unit tests actually test that the code is performing the intended functionality? - * Could any test code use common functionality (e.g. ccm, dtest, or CqlTester methods) or abstract it there for reuse? - * If the code may be affected by multi-node clusters, are there dtests? - * If the code may take a long time to test properly, are there CVH tests? - * Is the test passing on CI for all affected branches (up to trunk, if applicable)? Are there any regressions? - * If patch affects read/write path, did we test for performance regressions w/multiple workloads? - * If adding a new feature, were tests added and performed confirming it meets the expected SLA/use-case requirements for the feature? - -**Logging** - - * Are logging statements logged at the correct level? - * Are there logs in the critical path that could affect performance? - * Is there any log that could be added to communicate status or troubleshoot potential problems in this feature? - * Can any unnecessary logging statement be removed? - diff --git a/doc/source/development/ide.rst b/doc/source/development/ide.rst deleted file mode 100644 index 97c73ae6183b..000000000000 --- a/doc/source/development/ide.rst +++ /dev/null @@ -1,185 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Building and IDE Integration -**************************** - -Building From Source -==================== - -Getting started with Cassandra and IntelliJ IDEA or Eclipse is simple, once you manage to build Cassandra from source using `Java 8 `_, `Git `_ and `Ant `_. - -The source code for Cassandra is shared through the central Apache Git repository and organized by different branches. You can access the code for the current development branch through git as follows:: - - git clone https://gitbox.apache.org/repos/asf/cassandra.git cassandra-trunk - -Other branches will point to different versions of Cassandra. Switching to a different branch requires checking out the branch by its name:: - - git checkout cassandra-3.0 - -You can get a list of available branches with ``git branch``. - -Finally build Cassandra using ant:: - - ant - -This may take a significant amount of time depending on whether artifacts have to be downloaded and the number of classes that need to be compiled. - -.. hint:: - - You can setup multiple working trees for different Cassandra versions from the same repository using `git-worktree `_. - -| - -Setting up Cassandra in IntelliJ IDEA -===================================== - -`IntelliJ IDEA `_ by JetBrains is one of the most popular IDEs for Cassandra and Java development in general. The Community Edition is provided as a free download with all features needed to get started developing Cassandra. - -Setup Cassandra as a Project (C* 2.1 and newer) ------------------------------------------------ - -Since 2.1.5, there is a new ant target: ``generate-idea-files``. Please see our `wiki `_ for instructions for older Cassandra versions. - -Please clone and build Cassandra as described above and execute the following steps: - -1. Once Cassandra is built, generate the IDEA files using ant: - -:: - - ant generate-idea-files - -2. Start IDEA - -3. Open the IDEA project from the checked out Cassandra directory using the menu item Open in IDEA's File menu - -The project generated by the ant task ``generate-idea-files`` contains nearly everything you need to debug Cassandra and execute unit tests. - - * Run/debug defaults for JUnit - * Run/debug configuration for Cassandra daemon - * License header for Java source files - * Cassandra code style - * Inspections - -| - -Opening Cassandra in Apache NetBeans -======================================= - -`Apache NetBeans `_ is the elder of the open sourced java IDEs, and can be used for Cassandra development. There is no project setup or generation required to open Cassandra in NetBeans. - -Open Cassandra as a Project (C* 4.0 and newer) ------------------------------------------------ - -Please clone and build Cassandra as described above and execute the following steps: - -1. Start Apache NetBeans - -2. Open the NetBeans project from the `ide/` folder of the checked out Cassandra directory using the menu item "Open Project…" in NetBeans' File menu - -The project opened supports building, running, debugging, and profiling Cassandra from within the IDE. These actions delegate to the ant `build.xml` script. - - * Build/Run/Debug Project is available via the Run/Debug menus, or the project context menu. - * Profile Project is available via the Profile menu. In the opened Profiler tab, click the green "Profile" button. - * Cassandra's code style is honored in `ide/nbproject/project.properties` - -The `JAVA8_HOME` system variable must be set in the environment that NetBeans starts in for the Run/Debug/Profile ant targets to execute. - -| - -Setting up Cassandra in Eclipse -=============================== - -Eclipse is a popular open source IDE that can be used for Cassandra development. Various Eclipse environments are available from the `download page `_. The following guide was created with "Eclipse IDE for Java Developers". - -These instructions were tested on Ubuntu 16.04 with Eclipse Neon (4.6) using Cassandra 2.1, 2.2 and 3.x. - -Project Settings ----------------- - -**It is important that you generate the Eclipse files with Ant before trying to set up the Eclipse project.** - - * Clone and build Cassandra as described above. - * Run ``ant generate-eclipse-files`` to create the Eclipse settings. - * Start Eclipse. - * Select ``File->Import->Existing Projects into Workspace->Select git directory``. - * Make sure "cassandra-trunk" is recognized and selected as a project (assuming you checked the code out into the folder cassandra-trunk as described above). - * Confirm "Finish" to have your project imported. - -You should now be able to find the project as part of the "Package Explorer" or "Project Explorer" without having Eclipse complain about any errors after building the project automatically. - -Unit Tests ----------- - -Unit tests can be run from Eclipse by simply right-clicking the class file or method and selecting ``Run As->JUnit Test``. Tests can be debugged this way as well by defining breakpoints (double-click line number) and selecting ``Debug As->JUnit Test``. - -Alternatively all unit tests can be run from the command line as described in :doc:`testing` - -Debugging Cassandra Using Eclipse ---------------------------------- - -There are two ways how to start and debug a local Cassandra instance with Eclipse. You can either start Cassandra just as you normally would by using the ``./bin/cassandra`` script and connect to the JVM through `remotely `_ from Eclipse or start Cassandra from Eclipse right away. - -Starting Cassandra From Command Line -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - * Set environment variable to define remote debugging options for the JVM: - ``export JVM_EXTRA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1414"`` - * Start Cassandra by executing the ``./bin/cassandra`` - -Afterwards you should be able to connect to the running Cassandra process through the following steps: - -From the menu, select ``Run->Debug Configurations..`` - -.. image:: images/eclipse_debug0.png - -Create new remote application - -.. image:: images/eclipse_debug1.png - -Configure connection settings by specifying a name and port 1414 - -.. image:: images/eclipse_debug2.png - -Afterwards confirm "Debug" to connect to the JVM and start debugging Cassandra! - -Starting Cassandra From Eclipse -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Cassandra can also be started directly from Eclipse if you don't want to use the command line. - -From the menu, select ``Run->Run Configurations..`` - -.. image:: images/eclipse_debug3.png - -Create new application - -.. image:: images/eclipse_debug4.png - -Specify name, project and main class ``org.apache.cassandra.service.CassandraDaemon`` - -.. image:: images/eclipse_debug5.png - -Configure additional JVM specific parameters that will start Cassandra with some of the settings created by the regular startup script. Change heap related values as needed. - -:: - - -Xms1024M -Xmx1024M -Xmn220M -Xss256k -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCondCardMark -javaagent:./lib/jamm-0.3.0.jar -Djava.net.preferIPv4Stack=true - -.. image:: images/eclipse_debug6.png - -Now just confirm "Debug" and you should see the output of Cassandra starting up in the Eclipse console and should be able to set breakpoints and start debugging! - diff --git a/doc/source/development/index.rst b/doc/source/development/index.rst deleted file mode 100644 index ffa7134ddec0..000000000000 --- a/doc/source/development/index.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Contributing to Cassandra -************************* - -.. toctree:: - :maxdepth: 2 - - gettingstarted - ide - testing - patches - code_style - how_to_review - how_to_commit - documentation - ci - dependencies - release_process diff --git a/doc/source/development/patches.rst b/doc/source/development/patches.rst deleted file mode 100644 index 92c05531e5a5..000000000000 --- a/doc/source/development/patches.rst +++ /dev/null @@ -1,141 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none -.. _patches: - -Contributing Code Changes -************************* - -Choosing What to Work on -======================== - -Submitted patches can include bug fixes, changes to the Java code base, improvements for tooling (both Java or Python), documentation, testing or any other changes that requires changing the code base. Although the process of contributing code is always the same, the amount of work and time it takes to get a patch accepted also depends on the kind of issue you're addressing. - -As a general rule of thumb: - * Major new features and significant changes to the code based will likely not going to be accepted without deeper discussion within the `developer community `_ - * Bug fixes take higher priority compared to features - * The extend to which tests are required depend on how likely your changes will effect the stability of Cassandra in production. Tooling changes requires fewer tests than storage engine changes. - * Less complex patches will be faster to review: consider breaking up an issue into individual tasks and contributions that can be reviewed separately - -.. hint:: - - Not sure what to work? Just pick an issue marked as `Low Hanging Fruit `_ Complexity in JIRA, which we use to flag issues that could turn out to be good starter tasks for beginners. - -Before You Start Coding -======================= - -Although contributions are highly appreciated, we do not guarantee that each contribution will become a part of Cassandra. Therefore it's generally a good idea to first get some feedback on the things you plan to work on, especially about any new features or major changes to the code base. You can reach out to other developers on the mailing list or :ref:`Slack `. - -You should also - * Avoid redundant work by searching for already reported issues in `JIRA `_ - * Create a new issue early in the process describing what you're working on - not just after finishing your patch - * Link related JIRA issues with your own ticket to provide a better context - * Update your ticket from time to time by giving feedback on your progress and link a GitHub WIP branch with your current code - * Ping people who you actively like to ask for advice on JIRA by `mentioning users `_ - -There are also some fixed rules that you need to be aware: - * Patches will only be applied to branches by following the release model - * Code must be testable - * Code must follow the :doc:`code_style` convention - * Changes must not break compatibility between different Cassandra versions - * Contributions must be covered by the Apache License - -Choosing the Right Branches to Work on -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are currently multiple Cassandra versions maintained in individual branches: - -======= ====== -Version Policy -======= ====== -4.0 Code freeze (see below) -3.11 Critical bug fixes only -3.0 Critical bug fixes only -2.2 Critical bug fixes only -2.1 Critical bug fixes only -======= ====== - -Corresponding branches in git are easy to recognize as they are named ``cassandra-`` (e.g. ``cassandra-3.0``). The ``trunk`` branch is an exception, as it contains the most recent commits from all other branches and is used for creating new branches for future tick-tock releases. - -4.0 Code Freeze -""""""""""""""" - -Patches for new features are currently not accepted for 4.0 or any earlier versions. Starting with the code freeze in September, all efforts should focus on stabilizing the 4.0 branch before the first official release. During that time, only the following patches will be considered for acceptance: - - * Bug fixes - * Measurable performance improvements - * Changes not distributed as part of the release such as: - * Testing related improvements and fixes - * Build and infrastructure related changes - * Documentation - -Bug Fixes -""""""""" - -Creating patches for bug fixes is a bit more complicated as this will depend on how many different versions of Cassandra are affected. In each case, the order for merging such changes will be ``cassandra-2.1`` -> ``cassandra-2.2`` -> ``cassandra-3.0`` -> ``cassandra-3.x`` -> ``trunk``. But don't worry, merging from 2.1 would be the worst case for bugs that affect all currently supported versions, which isn't very common. As a contributor, you're also not expected to provide a single patch for each version. What you need to do however is: - - * Be clear about which versions you could verify to be affected by the bug - * For 2.x: ask if a bug qualifies to be fixed in this release line, as this may be handled on case by case bases - * If possible, create a patch against the lowest version in the branches listed above (e.g. if you found the bug in 3.9 you should try to fix it already in 3.0) - * Test if the patch can be merged cleanly across branches in the direction listed above - * Be clear which branches may need attention by the committer or even create custom patches for those if you can - -Creating a Patch -================ - -So you've finished coding and the great moment arrives: it's time to submit your patch! - - 1. Create a branch for your changes if you haven't done already. Many contributors name their branches based on ticket number and Cassandra version, e.g. ``git checkout -b 12345-3.0`` - 2. Verify that you follow Cassandra's :doc:`code_style` - 3. Make sure all tests (including yours) pass using ant as described in :doc:`testing`. If you suspect a test failure is unrelated to your change, it may be useful to check the test's status by searching the issue tracker or looking at `CI `_ results for the relevant upstream version. Note that the full test suites take many hours to complete, so it is common to only run specific relevant tests locally before uploading a patch. Once a patch has been uploaded, the reviewer or committer can help setup CI jobs to run the full test suites. - 4. Consider going through the :doc:`how_to_review` for your code. This will help you to understand how others will consider your change for inclusion. - 5. Don’t make the committer squash commits for you in the root branch either. Multiple commits are fine - and often preferable - during review stage, especially for incremental review, but once +1d, do either: - - a. Attach a patch to JIRA with a single squashed commit in it (per branch), or - b. Squash the commits in-place in your branches into one - - 6. Include a CHANGES.txt entry (put it at the top of the list), and format the commit message appropriately in your patch as below. Please note that only user-impacting items `should `_ be listed in CHANGES.txt. If you fix a test that does not affect users and does not require changes in runtime code, then no CHANGES.txt entry is necessary. - - :: - - - - patch by ; reviewed by for CASSANDRA-##### - - 7. When you're happy with the result, create a patch: - - :: - - git add - git commit -m '' - git format-patch HEAD~1 - mv (e.g. 12345-trunk.txt, 12345-3.0.txt) - - Alternatively, many contributors prefer to make their branch available on GitHub. In this case, fork the Cassandra repository on GitHub and push your branch: - - :: - - git push --set-upstream origin 12345-3.0 - - 8. To make life easier for your reviewer/committer, you may want to make sure your patch applies cleanly to later branches and create additional patches/branches for later Cassandra versions to which your original patch does not apply cleanly. That said, this is not critical, and you will receive feedback on your patch regardless. - 9. Attach the newly generated patch to the ticket/add a link to your branch and click "Submit Patch" at the top of the ticket. This will move the ticket into "Patch Available" status, indicating that your submission is ready for review. - 10. Wait for other developers or committers to review it and hopefully +1 the ticket (see :doc:`how_to_review`). If your change does not receive a +1, do not be discouraged. If possible, the reviewer will give suggestions to improve your patch or explain why it is not suitable. - 11. If the reviewer has given feedback to improve the patch, make the necessary changes and move the ticket into "Patch Available" once again. - -Once the review process is complete, you will receive a +1. Wait for a committer to commit it. Do not delete your branches immediately after they’ve been committed - keep them on GitHub for a while. Alternatively, attach a patch to JIRA for historical record. It’s not that uncommon for a committer to mess up a merge. In case of that happening, access to the original code is required, or else you’ll have to redo some of the work. - - diff --git a/doc/source/development/release_process.rst b/doc/source/development/release_process.rst deleted file mode 100644 index fd86238d9c87..000000000000 --- a/doc/source/development/release_process.rst +++ /dev/null @@ -1,251 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none -.. release_process: - -Release Process -*************** - -.. contents:: :depth: 3 - -|  -| - - - -The steps for Release Managers to create, vote and publish releases for Apache Cassandra. - -While a committer can perform the initial steps of creating and calling a vote on a proposed release, only a PMC member can complete the process of publishing and announcing the release. - - -Prerequisites -============= - -Background docs - * `ASF Release Policy `_ - * `ASF Release Distribution Policy `_ - * `ASF Release Best Practices `_ - - -A debian based linux OS is required to run the release steps from. Debian-based distros provide the required RPM, dpkg and repository management tools. - - -Create and publish your GPG key -------------------------------- - -To create a GPG key, follow the `guidelines `_. -The key must be 4096 bit RSA. -Include your public key in:: - - https://dist.apache.org/repos/dist/release/cassandra/KEYS - - -Publish your GPG key in a PGP key server, such as `MIT Keyserver `_. - -Bintray account with access to Apache organisation --------------------------------------------------- - -Publishing a successfully voted upon release requires bintray access to the Apache organisation. Please verify that you have a bintray account and the Apache organisation is listed `here `_. - - -Create Release Artifacts -======================== - -Any committer can perform the following steps to create and call a vote on a proposed release. - -Check that there are no open urgent jira tickets currently being worked on. Also check with the PMC that there's security vulnerabilities currently being worked on in private.' -Current project habit is to check the timing for a new release on the dev mailing lists. - -Perform the Release -------------------- - -Run the following commands to generate and upload release artifacts, to the ASF nexus staging repository and dev distribution location:: - - - cd ~/git - git clone https://github.com/apache/cassandra-builds.git - git clone https://github.com/apache/cassandra.git - - # Edit the variables at the top of the `prepare_release.sh` file - edit cassandra-builds/cassandra-release/prepare_release.sh - - # Ensure your 4096 RSA key is the default secret key - edit ~/.gnupg/gpg.conf # update the `default-key` line - edit ~/.rpmmacros # update the `%gpg_name ` line - - # Ensure DEBFULLNAME and DEBEMAIL is defined and exported, in the debian scripts configuration - edit ~/.devscripts - - # The prepare_release.sh is run from the actual cassandra git checkout, - # on the branch/commit that we wish to tag for the tentative release along with version number to tag. - cd cassandra - git switch cassandra- - - # The following cuts the release artifacts (including deb and rpm packages) and deploy to staging environments - ../cassandra-builds/cassandra-release/prepare_release.sh -v - -Follow the prompts. - -If building the deb or rpm packages fail, those steps can be repeated individually using the `-d` and `-r` flags, respectively. - -Call for a Vote -=============== - -Fill out the following email template and send to the dev mailing list:: - - I propose the following artifacts for release as . - - sha1: - - Git: https://gitbox.apache.org/repos/asf?p=cassandra.git;a=shortlog;h=refs/tags/-tentative - - Artifacts: https://repository.apache.org/content/repositories/orgapachecassandra-/org/apache/cassandra/apache-cassandra// - - Staging repository: https://repository.apache.org/content/repositories/orgapachecassandra-/ - - The distribution packages are available here: https://dist.apache.org/repos/dist/dev/cassandra/${version}/ - - The vote will be open for 72 hours (longer if needed). - - [1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=-tentative - [2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=-tentative - - - -Post-vote operations -==================== - -Any PMC member can perform the following steps to formalize and publish a successfully voted release. - -Publish Artifacts ------------------ - -Run the following commands to publish the voted release artifacts:: - - cd ~/git - # edit the variables at the top of the `finish_release.sh` file - edit cassandra-builds/cassandra-release/finish_release.sh - - # After cloning cassandra-builds repo, `finish_release.sh` is run from the actual cassandra git checkout, - # on the tentative release tag that we wish to tag for the final release version number tag. - cd ~/git/cassandra/ - git checkout -tentative - ../cassandra-builds/cassandra-release/finish_release.sh -v - -If successful, take note of the email text output which can be used in the next section "Send Release Announcement". -The output will also list the next steps that are required. - - -Promote Nexus Repository ------------------------- - -* Login to `Nexus repository `_ again. -* Click on "Staging" and then on the repository with id "cassandra-staging". -* Find your closed staging repository, right click on it and choose "Promote". -* Select the "Releases" repository and click "Promote". -* Next click on "Repositories", select the "Releases" repository and validate that your artifacts exist as you expect them. - -Publish the Bintray Uploaded Distribution Packages ---------------------------------------- - -Log into bintray and publish the uploaded artifacts. - -Update and Publish Website --------------------------- - -See `docs `_ for building and publishing the website. - -Also update the CQL doc if appropriate. - -Release version in JIRA ------------------------ - -Release the JIRA version. - -* In JIRA go to the version that you want to release and release it. -* Create a new version, if it has not been done before. - -Update to Next Development Version ----------------------------------- - -Update the codebase to point to the next development version:: - - cd ~/git/cassandra/ - git checkout cassandra- - edit build.xml # update ` ` - edit debian/changelog # add entry for new version - edit CHANGES.txt # add entry for new version - git commit -m "Increment version to " build.xml debian/changelog CHANGES.txt - - # …and forward merge and push per normal procedure - - -Wait for Artifacts to Sync --------------------------- - -Wait for the artifacts to sync at https://downloads.apache.org/cassandra/ - -Send Release Announcement -------------------------- - -Fill out the following email template and send to both user and dev mailing lists:: - - The Cassandra team is pleased to announce the release of Apache Cassandra version . - - Apache Cassandra is a fully distributed database. It is the right choice - when you need scalability and high availability without compromising - performance. - - http://cassandra.apache.org/ - - Downloads of source and binary distributions are listed in our download - section: - - http://cassandra.apache.org/download/ - - This version is release[1] on the series. As always, - please pay attention to the release notes[2] and let us know[3] if you - were to encounter any problem. - - Enjoy! - - [1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb= - [2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb= - [3]: https://issues.apache.org/jira/browse/CASSANDRA - -Update Slack Cassandra topic ---------------------------- - -Update topic in ``cassandra`` :ref:`Slack room ` - /topic cassandra.apache.org | Latest releases: 3.11.4, 3.0.18, 2.2.14, 2.1.21 | ask, don't ask to ask - -Tweet from @Cassandra ---------------------- - -Tweet the new release, from the @Cassandra account - -Delete Old Releases -------------------- - -As described in `When to Archive `_. - -An example of removing old releases:: - - svn co https://dist.apache.org/repos/dist/release/cassandra/ cassandra-dist - svn rm debian/pool/main/c/cassandra/* - svn st - # check and commit \ No newline at end of file diff --git a/doc/source/development/testing.rst b/doc/source/development/testing.rst deleted file mode 100644 index 7f38fe590f50..000000000000 --- a/doc/source/development/testing.rst +++ /dev/null @@ -1,98 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none -.. _testing: - -Testing -******* - -Creating tests is one of the most important and also most difficult parts of developing Cassandra. There are different ways to test your code depending on what you're working on. - - -Unit Testing -============ - -The most simple way to test code in Cassandra is probably by writing a unit test. Cassandra uses JUnit as a testing framework and test cases can be found in the ``test/unit`` directory. Ideally you’d be able to create a unit test for your implementation that would exclusively cover the class you created (the unit under test). Unfortunately this is not always possible and Cassandra doesn’t have a very mock friendly code base. Often you’ll find yourself in a situation where you have to make use of an embedded Cassandra instance that you’ll be able to interact with in your test. If you want to make use of CQL in your test, you can simply extend CQLTester and use some of the convenient helper methods such as in the following example. - -.. code-block:: java - - @Test - public void testBatchAndList() throws Throwable - { - createTable("CREATE TABLE %s (k int PRIMARY KEY, l list)"); - execute("BEGIN BATCH " + - "UPDATE %1$s SET l = l +[ 1 ] WHERE k = 0; " + - "UPDATE %1$s SET l = l + [ 2 ] WHERE k = 0; " + - "UPDATE %1$s SET l = l + [ 3 ] WHERE k = 0; " + - "APPLY BATCH"); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), - row(list(1, 2, 3))); - } - -Unit tests can be run from the command line using the ``ant test`` command, ``ant test -Dtest.name=`` to execute a test suite or ``ant testsome -Dtest.name= -Dtest.methods=[,testmethod2]`` for individual tests. For example, to run all test methods in the ``org.apache.cassandra.cql3.SimpleQueryTest`` class, you would run:: - - ant test -Dtest.name=SimpleQueryTest - -To run only the ``testStaticCompactTables()`` test method from that class, you would run:: - - ant testsome -Dtest.name=org.apache.cassandra.cql3.SimpleQueryTest -Dtest.methods=testStaticCompactTables - -If you see an error like this:: - - Throws: cassandra-trunk/build.xml:1134: taskdef A class needed by class org.krummas.junit.JStackJUnitTask cannot be found: - org/apache/tools/ant/taskdefs/optional/junit/JUnitTask using the classloader - AntClassLoader[/.../cassandra-trunk/lib/jstackjunit-0.0.1.jar] - -You will need to install the ant-optional package since it contains the ``JUnitTask`` class. - -Long running tests ------------------- - -Test that consume a significant amount of time during execution can be found in the ``test/long`` directory and executed as a regular JUnit test or standalone program. Except for the execution time, there’s nothing really special about them. However, ant will execute tests under ``test/long`` only when using the ``ant long-test`` target. - -DTests -====== - -One way of doing integration or system testing at larger scale is by using `dtest `_, which stands for “Cassandra Distributed Tests”. The idea is to automatically setup Cassandra clusters using various configurations and simulate certain use cases you want to test. This is done using Python scripts and ``ccmlib`` from the `ccm `_ project. Dtests will setup clusters using this library just as you do running ad-hoc ``ccm`` commands on your local machine. Afterwards dtests will use the `Python driver `_ to interact with the nodes, manipulate the file system, analyze logs or mess with individual nodes. - -Using dtests helps us to prevent regression bugs by continually executing tests on the `CI server `_ against new patches. Committers will be able to set up build branches there and your reviewer may use the CI environment to run tests for your patch. Read more on the motivation behind continuous integration `here `_. - -The best way to learn how to write dtests is probably by reading the introduction "`How to Write a Dtest `_" and by looking at existing, recently updated tests in the project. New tests must follow certain `style conventions `_ that are being checked before accepting contributions. In contrast to Cassandra, dtest issues and pull-requests are managed on github, therefor you should make sure to link any created dtests in your Cassandra ticket and also refer to the ticket number in your dtest PR. - -Creating a good dtest can be tough, but it should not prevent you from submitting patches! Please ask in the corresponding JIRA ticket how to write a good dtest for the patch. In most cases a reviewer or committer will able to support you, and in some cases they may offer to write a dtest for you. - -Performance Testing -=================== - -Performance tests for Cassandra are a special breed of tests that are not part of the usual patch contribution process. In fact you can contribute tons of patches to Cassandra without ever running performance tests. They are important however when working on performance improvements, as such improvements must be measurable. - -Cassandra Stress Tool ---------------------- - -See :ref:`cassandra_stress` - -cstar_perf ----------- - -Another tool available on github is `cstar_perf `_ that can be used for intensive performance testing in large clusters or locally. Please refer to the project page on how to set it up and how to use it. - -CircleCI --------- -Cassandra ships with a default `CircleCI `_ configuration, to enable running tests on your branches, you need to go the CircleCI website, click "Login" and log in with your github account. Then you need to give CircleCI permission to watch your repositories. Once you have done that, you can optionally configure CircleCI to run tests in parallel - click "Projects", then your github account and then click the settings for the project. If you leave the parallelism at 1 for Cassandra, only ``ant eclipse-warnings`` and ``ant test`` will be run. If you up the parallelism to 4, it also runs ``ant long-test``, ``ant test-compression`` and ``ant stress-test`` - - diff --git a/doc/source/faq/index.rst b/doc/source/faq/index.rst deleted file mode 100644 index acb7538d68ab..000000000000 --- a/doc/source/faq/index.rst +++ /dev/null @@ -1,299 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Frequently Asked Questions -========================== - -- :ref:`why-cant-list-all` -- :ref:`what-ports` -- :ref:`what-happens-on-joins` -- :ref:`asynch-deletes` -- :ref:`one-entry-ring` -- :ref:`can-large-blob` -- :ref:`nodetool-connection-refused` -- :ref:`to-batch-or-not-to-batch` -- :ref:`selinux` -- :ref:`how-to-unsubscribe` -- :ref:`cassandra-eats-all-my-memory` -- :ref:`what-are-seeds` -- :ref:`are-seeds-SPOF` -- :ref:`why-message-dropped` -- :ref:`oom-map-failed` -- :ref:`what-on-same-timestamp-update` -- :ref:`why-bootstrapping-stream-error` - -.. _why-cant-list-all: - -Why can't I set ``listen_address`` to listen on 0.0.0.0 (all my addresses)? ---------------------------------------------------------------------------- - -Cassandra is a gossip-based distributed system and ``listen_address`` is the address a node tells other nodes to reach -it at. Telling other nodes "contact me on any of my addresses" is a bad idea; if different nodes in the cluster pick -different addresses for you, Bad Things happen. - -If you don't want to manually specify an IP to ``listen_address`` for each node in your cluster (understandable!), leave -it blank and Cassandra will use ``InetAddress.getLocalHost()`` to pick an address. Then it's up to you or your ops team -to make things resolve correctly (``/etc/hosts/``, dns, etc). - -One exception to this process is JMX, which by default binds to 0.0.0.0 (Java bug 6425769). - -See :jira:`256` and :jira:`43` for more gory details. - -.. _what-ports: - -What ports does Cassandra use? ------------------------------- - -By default, Cassandra uses 7000 for cluster communication (7001 if SSL is enabled), 9042 for native protocol clients, -and 7199 for JMX. The internode communication and native protocol ports -are configurable in the :ref:`cassandra-yaml`. The JMX port is configurable in ``cassandra-env.sh`` (through JVM -options). All ports are TCP. - -.. _what-happens-on-joins: - -What happens to existing data in my cluster when I add new nodes? ------------------------------------------------------------------ - -When a new nodes joins a cluster, it will automatically contact the other nodes in the cluster and copy the right data -to itself. See :ref:`topology-changes`. - -.. _asynch-deletes: - -I delete data from Cassandra, but disk usage stays the same. What gives? ------------------------------------------------------------------------- - -Data you write to Cassandra gets persisted to SSTables. Since SSTables are immutable, the data can't actually be removed -when you perform a delete, instead, a marker (also called a "tombstone") is written to indicate the value's new status. -Never fear though, on the first compaction that occurs between the data and the tombstone, the data will be expunged -completely and the corresponding disk space recovered. See :ref:`compaction` for more detail. - -.. _one-entry-ring: - -Why does nodetool ring only show one entry, even though my nodes logged that they see each other joining the ring? ------------------------------------------------------------------------------------------------------------------- - -This happens when you have the same token assigned to each node. Don't do that. - -Most often this bites people who deploy by installing Cassandra on a VM (especially when using the Debian package, which -auto-starts Cassandra after installation, thus generating and saving a token), then cloning that VM to other nodes. - -The easiest fix is to wipe the data and commitlog directories, thus making sure that each node will generate a random -token on the next restart. - -.. _change-replication-factor: - -Can I change the replication factor (a a keyspace) on a live cluster? ---------------------------------------------------------------------- - -Yes, but it will require running a full repair (or cleanup) to change the replica count of existing data: - -- :ref:`Alter ` the replication factor for desired keyspace (using cqlsh for instance). -- If you're reducing the replication factor, run ``nodetool cleanup`` on the cluster to remove surplus replicated data. - Cleanup runs on a per-node basis. -- If you're increasing the replication factor, run ``nodetool repair -full`` to ensure data is replicated according to the new - configuration. Repair runs on a per-replica set basis. This is an intensive process that may result in adverse cluster - performance. It's highly recommended to do rolling repairs, as an attempt to repair the entire cluster at once will - most likely swamp it. Note that you will need to run a full repair (``-full``) to make sure that already repaired - sstables are not skipped. - -.. _can-large-blob: - -Can I Store (large) BLOBs in Cassandra? ---------------------------------------- - -Cassandra isn't optimized for large file or BLOB storage and a single ``blob`` value is always read and send to the -client entirely. As such, storing small blobs (less than single digit MB) should not be a problem, but it is advised to -manually split large blobs into smaller chunks. - -Please note in particular that by default, any value greater than 16MB will be rejected by Cassandra due the -``max_mutation_size_in_kb`` configuration of the :ref:`cassandra-yaml` file (which default to half of -``commitlog_segment_size_in_mb``, which itself default to 32MB). - -.. _nodetool-connection-refused: - -Nodetool says "Connection refused to host: 127.0.1.1" for any remote host. What gives? --------------------------------------------------------------------------------------- - -Nodetool relies on JMX, which in turn relies on RMI, which in turn sets up its own listeners and connectors as needed on -each end of the exchange. Normally all of this happens behind the scenes transparently, but incorrect name resolution -for either the host connecting, or the one being connected to, can result in crossed wires and confusing exceptions. - -If you are not using DNS, then make sure that your ``/etc/hosts`` files are accurate on both ends. If that fails, try -setting the ``-Djava.rmi.server.hostname=`` JVM option near the bottom of ``cassandra-env.sh`` to an -interface that you can reach from the remote machine. - -.. _to-batch-or-not-to-batch: - -Will batching my operations speed up my bulk load? --------------------------------------------------- - -No. Using batches to load data will generally just add "spikes" of latency. Use asynchronous INSERTs instead, or use -true :ref:`bulk-loading`. - -An exception is batching updates to a single partition, which can be a Good Thing (as long as the size of a single batch -stay reasonable). But never ever blindly batch everything! - -.. _selinux: - -On RHEL nodes are unable to join the ring ------------------------------------------ - -Check if `SELinux `__ is on; if it is, turn it off. - -.. _how-to-unsubscribe: - -How do I unsubscribe from the email list? ------------------------------------------ - -Send an email to ``user-unsubscribe@cassandra.apache.org``. - -.. _cassandra-eats-all-my-memory: - -Why does top report that Cassandra is using a lot more memory than the Java heap max? -------------------------------------------------------------------------------------- - -Cassandra uses `Memory Mapped Files `__ (mmap) internally. That is, we -use the operating system's virtual memory system to map a number of on-disk files into the Cassandra process' address -space. This will "use" virtual memory; i.e. address space, and will be reported by tools like top accordingly, but on 64 -bit systems virtual address space is effectively unlimited so you should not worry about that. - -What matters from the perspective of "memory use" in the sense as it is normally meant, is the amount of data allocated -on brk() or mmap'd /dev/zero, which represent real memory used. The key issue is that for a mmap'd file, there is never -a need to retain the data resident in physical memory. Thus, whatever you do keep resident in physical memory is -essentially just there as a cache, in the same way as normal I/O will cause the kernel page cache to retain data that -you read/write. - -The difference between normal I/O and mmap() is that in the mmap() case the memory is actually mapped to the process, -thus affecting the virtual size as reported by top. The main argument for using mmap() instead of standard I/O is the -fact that reading entails just touching memory - in the case of the memory being resident, you just read it - you don't -even take a page fault (so no overhead in entering the kernel and doing a semi-context switch). This is covered in more -detail `here `__. - -.. _what-are-seeds: - -What are seeds? ---------------- - -Seeds are used during startup to discover the cluster. - -If you configure your nodes to refer some node as seed, nodes in your ring tend to send Gossip message to seeds more -often (also see the :ref:`section on gossip `) than to non-seeds. In other words, seeds are worked as hubs of -Gossip network. With seeds, each node can detect status changes of other nodes quickly. - -Seeds are also referred by new nodes on bootstrap to learn other nodes in ring. When you add a new node to ring, you -need to specify at least one live seed to contact. Once a node join the ring, it learns about the other nodes, so it -doesn't need seed on subsequent boot. - -You can make a seed a node at any time. There is nothing special about seed nodes. If you list the node in seed list it -is a seed - -Seeds do not auto bootstrap (i.e. if a node has itself in its seed list it will not automatically transfer data to itself) -If you want a node to do that, bootstrap it first and then add it to seeds later. If you have no data (new install) you -do not have to worry about bootstrap at all. - -Recommended usage of seeds: - -- pick two (or more) nodes per data center as seed nodes. -- sync the seed list to all your nodes - -.. _are-seeds-SPOF: - -Does single seed mean single point of failure? ----------------------------------------------- - -The ring can operate or boot without a seed; however, you will not be able to add new nodes to the cluster. It is -recommended to configure multiple seeds in production system. - -.. _cant-call-jmx-method: - -Why can't I call jmx method X on jconsole? ------------------------------------------- - -Some of JMX operations use array argument and as jconsole doesn't support array argument, those operations can't be -called with jconsole (the buttons are inactive for them). You need to write a JMX client to call such operations or need -array-capable JMX monitoring tool. - -.. _why-message-dropped: - -Why do I see "... messages dropped ..." in the logs? ----------------------------------------------------- - -This is a symptom of load shedding -- Cassandra defending itself against more requests than it can handle. - -Internode messages which are received by a node, but do not get not to be processed within their proper timeout (see -``read_request_timeout``, ``write_request_timeout``, ... in the :ref:`cassandra-yaml`), are dropped rather than -processed (since the as the coordinator node will no longer be waiting for a response). - -For writes, this means that the mutation was not applied to all replicas it was sent to. The inconsistency will be -repaired by read repair, hints or a manual repair. The write operation may also have timeouted as a result. - -For reads, this means a read request may not have completed. - -Load shedding is part of the Cassandra architecture, if this is a persistent issue it is generally a sign of an -overloaded node or cluster. - -.. _oom-map-failed: - -Cassandra dies with ``java.lang.OutOfMemoryError: Map failed`` --------------------------------------------------------------- - -If Cassandra is dying **specifically** with the "Map failed" message, it means the OS is denying java the ability to -lock more memory. In linux, this typically means memlock is limited. Check ``/proc//limits`` to verify -this and raise it (eg, via ulimit in bash). You may also need to increase ``vm.max_map_count.`` Note that the debian -package handles this for you automatically. - - -.. _what-on-same-timestamp-update: - -What happens if two updates are made with the same timestamp? -------------------------------------------------------------- - -Updates must be commutative, since they may arrive in different orders on different replicas. As long as Cassandra has a -deterministic way to pick the winner (in a timestamp tie), the one selected is as valid as any other, and the specifics -should be treated as an implementation detail. That said, in the case of a timestamp tie, Cassandra follows two rules: -first, deletes take precedence over inserts/updates. Second, if there are two updates, the one with the lexically larger -value is selected. - -.. _why-bootstrapping-stream-error: - -Why bootstrapping a new node fails with a "Stream failed" error? ----------------------------------------------------------------- - -Two main possibilities: - -#. the GC may be creating long pauses disrupting the streaming process -#. compactions happening in the background hold streaming long enough that the TCP connection fails - -In the first case, regular GC tuning advices apply. In the second case, you need to set TCP keepalive to a lower value -(default is very high on Linux). Try to just run the following:: - - $ sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5 - -To make those settings permanent, add them to your ``/etc/sysctl.conf`` file. - -Note: `GCE `__'s firewall will always interrupt TCP connections that are inactive for -more than 10 min. Running the above command is highly recommended in that environment. - - - - - - - - - - - diff --git a/doc/source/getting_started/configuring.rst b/doc/source/getting_started/configuring.rst deleted file mode 100644 index adb86fa2fcec..000000000000 --- a/doc/source/getting_started/configuring.rst +++ /dev/null @@ -1,80 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Configuring Cassandra ---------------------- - -The :term:`Cassandra` configuration files location varies, depending on the type of installation: - -- tarball: ``conf`` directory within the tarball install location -- package: ``/etc/cassandra`` directory - -Cassandra's default configuration file, ``cassandra.yaml``, is sufficient to explore a simple single-node :term:`cluster`. -However, anything beyond running a single-node cluster locally requires additional configuration to various Cassandra configuration files. -Some examples that require non-default configuration are deploying a multi-node cluster or using clients that are not running on a cluster node. - -- ``cassandra.yaml``: the main configuration file for Cassandra -- ``cassandra-env.sh``: environment variables can be set -- ``cassandra-rackdc.properties`` OR ``cassandra-topology.properties``: set rack and datacenter information for a cluster -- ``logback.xml``: logging configuration including logging levels -- ``jvm-*``: a number of JVM configuration files for both the server and clients -- ``commitlog_archiving.properties``: set archiving parameters for the :term:`commitlog` - -Two sample configuration files can also be found in ``./conf``: - -- ``metrics-reporter-config-sample.yaml``: configuring what the metrics-report will collect -- ``cqlshrc.sample``: how the CQL shell, cqlsh, can be configured - -Main runtime properties -^^^^^^^^^^^^^^^^^^^^^^^ - -Configuring Cassandra is done by setting yaml properties in the ``cassandra.yaml`` file. At a minimum you -should consider setting the following properties: - -- ``cluster_name``: Set the name of your cluster. -- ``seeds``: A comma separated list of the IP addresses of your cluster :term:`seed nodes`. -- ``storage_port``: Check that you don't have the default port of 7000 blocked by a firewall. -- ``listen_address``: The :term:`listen address` is the IP address of a node that allows it to communicate with other nodes in the cluster. Set to `localhost` by default. Alternatively, you can set ``listen_interface`` to tell Cassandra which interface to use, and consecutively which address to use. Set one property, not both. -- ``native_transport_port``: Check that you don't have the default port of 9042 blocked by a firewall, so that clients like cqlsh can communicate with Cassandra on this port. - -Changing the location of directories -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The following yaml properties control the location of directories: - -- ``data_file_directories``: One or more directories where data files, like :term:`SSTables` are located. -- ``commitlog_directory``: The directory where commitlog files are located. -- ``saved_caches_directory``: The directory where saved caches are located. -- ``hints_directory``: The directory where :term:`hints` are located. - -For performance reasons, if you have multiple disks, consider putting commitlog and data files on different disks. - -Environment variables -^^^^^^^^^^^^^^^^^^^^^ - -JVM-level settings such as heap size can be set in ``cassandra-env.sh``. You can add any additional JVM command line -argument to the ``JVM_OPTS`` environment variable; when Cassandra starts, these arguments will be passed to the JVM. - -Logging -^^^^^^^ - -The default logger is `logback`. By default it will log: - -- **INFO** level in ``system.log`` -- **DEBUG** level in ``debug.log`` - -When running in the foreground, it will also log at INFO level to the console. You can change logging properties by editing ``logback.xml`` or by running the `nodetool setlogginglevel` command. - diff --git a/doc/source/getting_started/drivers.rst b/doc/source/getting_started/drivers.rst deleted file mode 100644 index 9a2c1567abec..000000000000 --- a/doc/source/getting_started/drivers.rst +++ /dev/null @@ -1,123 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. _client-drivers: - -Client drivers --------------- - -Here are known Cassandra client drivers organized by language. Before choosing a driver, you should verify the Cassandra -version and functionality supported by a specific driver. - -Java -^^^^ - -- `Achilles `__ -- `Astyanax `__ -- `Casser `__ -- `Datastax Java driver `__ -- `Kundera `__ -- `PlayORM `__ - -Python -^^^^^^ - -- `Datastax Python driver `__ - -Ruby -^^^^ - -- `Datastax Ruby driver `__ - -C# / .NET -^^^^^^^^^ - -- `Cassandra Sharp `__ -- `Datastax C# driver `__ -- `Fluent Cassandra `__ - -Nodejs -^^^^^^ - -- `Datastax Nodejs driver `__ -- `Node-Cassandra-CQL `__ - -PHP -^^^ - -- `CQL \| PHP `__ -- `Datastax PHP driver `__ -- `PHP-Cassandra `__ -- `PHP Library for Cassandra `__ - -C++ -^^^ - -- `Datastax C++ driver `__ -- `libQTCassandra `__ - -Scala -^^^^^ - -- `Datastax Spark connector `__ -- `Phantom `__ -- `Quill `__ - -Clojure -^^^^^^^ - -- `Alia `__ -- `Cassaforte `__ -- `Hayt `__ - -Erlang -^^^^^^ - -- `CQerl `__ -- `Erlcass `__ - -Go -^^ - -- `CQLc `__ -- `Gocassa `__ -- `GoCQL `__ - -Haskell -^^^^^^^ - -- `Cassy `__ - -Rust -^^^^ - -- `Rust CQL `__ - -Perl -^^^^ - -- `Cassandra::Client and DBD::Cassandra `__ - -Elixir -^^^^^^ - -- `Xandra `__ -- `CQEx `__ - -Dart -^^^^ - -- `dart_cassandra_cql `__ diff --git a/doc/source/getting_started/index.rst b/doc/source/getting_started/index.rst deleted file mode 100644 index a699aee97daf..000000000000 --- a/doc/source/getting_started/index.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Getting Started -=============== - -This section covers how to get started using Apache Cassandra and should be the first thing to read if you are new to -Cassandra. - -.. toctree:: - :maxdepth: 2 - - installing - configuring - querying - drivers - production - - diff --git a/doc/source/getting_started/installing.rst b/doc/source/getting_started/installing.rst deleted file mode 100644 index f3a22f21a30d..000000000000 --- a/doc/source/getting_started/installing.rst +++ /dev/null @@ -1,324 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Installing Cassandra --------------------- - -These are the instructions for deploying the supported releases of Apache Cassandra on Linux servers. - -Cassandra runs on a wide array of Linux distributions including (but not limited to): - -- Ubuntu, most notably LTS releases 16.04 to 18.04 -- CentOS & RedHat Enterprise Linux (RHEL) including 6.6 to 7.7 -- Amazon Linux AMIs including 2016.09 through to Linux 2 -- Debian versions 8 & 9 -- SUSE Enterprise Linux 12 - -This is not an exhaustive list of operating system platforms, nor is it prescriptive. However users will be -well-advised to conduct exhaustive tests of their own particularly for less-popular distributions of Linux. -Deploying on older versions is not recommended unless you have previous experience with the older distribution -in a production environment. - -Prerequisites -^^^^^^^^^^^^^ - -- Install the latest version of Java 8, either the `Oracle Java Standard Edition 8 - `__ or `OpenJDK 8 `__. To - verify that you have the correct version of java installed, type ``java -version``. -- **NOTE**: *Experimental* support for Java 11 was added in Cassandra 4.0 (`CASSANDRA-9608 `__). - Running Cassandra on Java 11 is *experimental*. Do so at your own risk. For more information, see - `NEWS.txt `__. -- For using cqlsh, the latest version of `Python 2.7 `__ or Python 3.6+. To verify that you have - the correct version of Python installed, type ``python --version``. - -Choosing an installation method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For most users, installing the binary tarball is the simplest choice. The tarball unpacks all its contents -into a single location with binaries and configuration files located in their own subdirectories. The most -obvious attribute of the tarball installation is it does not require ``root`` permissions and can be -installed on any Linux distribution. - -Packaged installations require ``root`` permissions. Install the RPM build on CentOS and RHEL-based -distributions if you want to install Cassandra using YUM. Install the Debian build on Ubuntu and other -Debian-based distributions if you want to install Cassandra using APT. Note that both the YUM and APT -methods required ``root`` permissions and will install the binaries and configuration files as the -``cassandra`` OS user. - -Installing the binary tarball -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -1. Verify the version of Java installed. For example: - -:: - - $ java -version - openjdk version "1.8.0_222" - OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) - OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) - -2. Download the binary tarball from one of the mirrors on the `Apache Cassandra Download `__ - site. For example, to download 4.0: - -:: - - $ curl -OL http://apache.mirror.digitalpacific.com.au/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz - -NOTE: The mirrors only host the latest versions of each major supported release. To download an earlier -version of Cassandra, visit the `Apache Archives `__. - -3. OPTIONAL: Verify the integrity of the downloaded tarball using one of the methods `here `__. - For example, to verify the hash of the downloaded file using GPG: - -:: - - $ gpg --print-md SHA256 apache-cassandra-4.0.0-bin.tar.gz - apache-cassandra-4.0.0-bin.tar.gz: 28757DDE 589F7041 0F9A6A95 C39EE7E6 - CDE63440 E2B06B91 AE6B2006 14FA364D - -Compare the signature with the SHA256 file from the Downloads site: - -:: - - $ curl -L https://downloads.apache.org/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz.sha256 - 28757dde589f70410f9a6a95c39ee7e6cde63440e2b06b91ae6b200614fa364d - -4. Unpack the tarball: - -:: - - $ tar xzvf apache-cassandra-4.0.0-bin.tar.gz - -The files will be extracted to the ``apache-cassandra-4.0.0/`` directory. This is the tarball installation -location. - -5. Located in the tarball installation location are the directories for the scripts, binaries, utilities, configuration, data and log files: - -:: - - / - bin/ - conf/ - data/ - doc/ - interface/ - javadoc/ - lib/ - logs/ - pylib/ - tools/ - -For information on how to configure your installation, see -`Configuring Cassandra `__. - -6. Start Cassandra: - -:: - - $ cd apache-cassandra-4.0.0/ - $ bin/cassandra - -NOTE: This will run Cassandra as the authenticated Linux user. - -You can monitor the progress of the startup with: - -:: - - $ tail -f logs/system.log - -Cassandra is ready when you see an entry like this in the ``system.log``: - -:: - - INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... - -7. Check the status of Cassandra: - -:: - - $ bin/nodetool status - -The status column in the output should report UN which stands for "Up/Normal". - -Alternatively, connect to the database with: - -:: - - $ bin/cqlsh - -Installing the Debian packages -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -1. Verify the version of Java installed. For example: - -:: - - $ java -version - openjdk version "1.8.0_222" - OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) - OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) - -2. Add the Apache repository of Cassandra to the file ``cassandra.sources.list``. The latest major version - is 4.0 and the corresponding distribution name is ``40x`` (with an "x" as the suffix). - For older releases use ``311x`` for C* 3.11 series, ``30x`` for 3.0, ``22x`` for 2.2 and ``21x`` for 2.1. - For example, to add the repository for version 4.0 (``40x``): - -:: - - $ echo "deb http://www.apache.org/dist/cassandra/debian 40x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list - deb http://www.apache.org/dist/cassandra/debian 40x main - -3. Add the Apache Cassandra repository keys to the list of trusted keys on the server: - -:: - - $ curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add - - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed - 100 266k 100 266k 0 0 320k 0 --:--:-- --:--:-- --:--:-- 320k - OK - -4. Update the package index from sources: - -:: - - $ sudo apt-get update - -5. Install Cassandra with APT: - -:: - - $ sudo apt-get install cassandra - - -NOTE: A new Linux user ``cassandra`` will get created as part of the installation. The Cassandra service -will also be run as this user. - -6. The Cassandra service gets started automatically after installation. Monitor the progress of - the startup with: - -:: - - $ tail -f /var/log/cassandra/system.log - -Cassandra is ready when you see an entry like this in the ``system.log``: - -:: - - INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... - -NOTE: For information on how to configure your installation, see -`Configuring Cassandra `__. - -7. Check the status of Cassandra: - -:: - - $ nodetool status - -The status column in the output should report ``UN`` which stands for "Up/Normal". - -Alternatively, connect to the database with: - -:: - - $ cqlsh - -Installing the RPM packages -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -1. Verify the version of Java installed. For example: - -:: - - $ java -version - openjdk version "1.8.0_222" - OpenJDK Runtime Environment (build 1.8.0_232-b09) - OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode) - -2. Add the Apache repository of Cassandra to the file ``/etc/yum.repos.d/cassandra.repo`` (as the ``root`` - user). The latest major version is 4.0 and the corresponding distribution name is ``40x`` (with an "x" as the suffix). - For older releases use ``311x`` for C* 3.11 series, ``30x`` for 3.0, ``22x`` for 2.2 and ``21x`` for 2.1. - For example, to add the repository for version 4.0 (``40x``): - -:: - - [cassandra] - name=Apache Cassandra - baseurl=https://downloads.apache.org/cassandra/redhat/40x/ - gpgcheck=1 - repo_gpgcheck=1 - gpgkey=https://downloads.apache.org/cassandra/KEYS - -3. Update the package index from sources: - -:: - - $ sudo yum update - -4. Install Cassandra with YUM: - -:: - - $ sudo yum install cassandra - - -NOTE: A new Linux user ``cassandra`` will get created as part of the installation. The Cassandra service -will also be run as this user. - -5. Start the Cassandra service: - -:: - - $ sudo service cassandra start - -6. Monitor the progress of the startup with: - -:: - - $ tail -f /var/log/cassandra/system.log - -Cassandra is ready when you see an entry like this in the ``system.log``: - -:: - - INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... - -NOTE: For information on how to configure your installation, see -`Configuring Cassandra `__. - -7. Check the status of Cassandra: - -:: - - $ nodetool status - -The status column in the output should report ``UN`` which stands for "Up/Normal". - -Alternatively, connect to the database with: - -:: - - $ cqlsh - -Further installation info -^^^^^^^^^^^^^^^^^^^^^^^^^ - -For help with installation issues, see the `Troubleshooting `__ section. - - diff --git a/doc/source/getting_started/production.rst b/doc/source/getting_started/production.rst deleted file mode 100644 index fe0c4a591f27..000000000000 --- a/doc/source/getting_started/production.rst +++ /dev/null @@ -1,156 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Production Recommendations ----------------------------- - -The ``cassandra.yaml`` and ``jvm.options`` files have a number of notes and recommendations for production usage. This page -expands on some of the notes in these files with additional information. - -Tokens -^^^^^^^ - -Using more than 1 token (referred to as vnodes) allows for more flexible expansion and more streaming peers when -bootstrapping new nodes into the cluster. This can limit the negative impact of streaming (I/O and CPU overhead) -as well as allow for incremental cluster expansion. - -As a tradeoff, more tokens will lead to sharing data with more peers, which can result in decreased availability. To learn more about this we -recommend reading `this paper `_. - -The number of tokens can be changed using the following setting: - -``num_tokens: 16`` - - -Here are the most common token counts with a brief explanation of when and why you would use each one. - -+-------------+---------------------------------------------------------------------------------------------------+ -| Token Count | Description | -+=============+===================================================================================================+ -| 1 | Maximum availablility, maximum cluster size, fewest peers, | -| | but inflexible expansion. Must always | -| | double size of cluster to expand and remain balanced. | -+-------------+---------------------------------------------------------------------------------------------------+ -| 4 | A healthy mix of elasticity and availability. Recommended for clusters which will eventually | -| | reach over 30 nodes. Requires adding approximately 20% more nodes to remain balanced. | -| | Shrinking a cluster may result in cluster imbalance. | -+-------------+---------------------------------------------------------------------------------------------------+ -| 16 | Best for heavily elastic clusters which expand and shrink regularly, but may have issues | -| | availability with larger clusters. Not recommended for clusters over 50 nodes. | -+-------------+---------------------------------------------------------------------------------------------------+ - - -In addition to setting the token count, it's extremely important that ``allocate_tokens_for_local_replication_factor`` be -set as well, to ensure even token allocation. - -.. _read-ahead: - -Read Ahead -^^^^^^^^^^^ - -Read ahead is an operating system feature that attempts to keep as much data loaded in the page cache as possible. The -goal is to decrease latency by using additional throughput on reads where the latency penalty is high due to seek times -on spinning disks. By leveraging read ahead, the OS can pull additional data into memory without the cost of additional -seeks. This works well when available RAM is greater than the size of the hot dataset, but can be problematic when the -hot dataset is much larger than available RAM. The benefit of read ahead decreases as the size of your hot dataset gets -bigger in proportion to available memory. - -With small partitions (usually tables with no partition key, but not limited to this case) and solid state drives, read -ahead can increase disk usage without any of the latency benefits, and in some cases can result in up to -a 5x latency and throughput performance penalty. Read heavy, key/value tables with small (under 1KB) rows are especially -prone to this problem. - -We recommend the following read ahead settings: - -+----------------+-------------------------+ -| Hardware | Initial Recommendation | -+================+=========================+ -|Spinning Disks | 64KB | -+----------------+-------------------------+ -|SSD | 4KB | -+----------------+-------------------------+ - -Read ahead can be adjusted on Linux systems by using the `blockdev` tool. - -For example, we can set read ahead of ``/dev/sda1` to 4KB by doing the following:: - - blockdev --setra 8 /dev/sda1 - -**Note**: blockdev accepts the number of 512 byte sectors to read ahead. The argument of 8 above is equivilent to 4KB. - -Since each system is different, use the above recommendations as a starting point and tuning based on your SLA and -throughput requirements. To understand how read ahead impacts disk resource usage we recommend carefully reading through the -:ref:`troubleshooting ` portion of the documentation. - - -Compression -^^^^^^^^^^^^ - -Compressed data is stored by compressing fixed size byte buffers and writing the data to disk. The buffer size is -determined by the ``chunk_length_in_kb`` element in the compression map of the schema settings. - -The default setting is 16KB starting with Cassandra 4.0. - -Since the entire compressed buffer must be read off disk, using too high of a compression chunk length can lead to -significant overhead when reading small records. Combined with the default read ahead setting this can result in massive -read amplification for certain workloads. - -LZ4Compressor is the default and recommended compression algorithm. - -There is additional information on this topic on `The Last Pickle Blog `_. - -Compaction -^^^^^^^^^^^^ - -There are different :ref:`compaction ` strategies available for different workloads. -We recommend reading up on the different strategies to understand which is the best for your environment. Different tables -may (and frequently do) use different compaction strategies on the same cluster. - -Encryption -^^^^^^^^^^^ - -It is significantly easier to set up peer to peer encryption and client server encryption when setting up your production -cluster as opposed to setting it up once the cluster is already serving production traffic. If you are planning on using network encryption -eventually (in any form), we recommend setting it up now. Changing these configurations down the line is not impossible, -but mistakes can result in downtime or data loss. - -Ensure Keyspaces are Created with NetworkTopologyStrategy -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Production clusters should never use SimpleStrategy. Production keyspaces should use the NetworkTopologyStrategy (NTS). - -For example:: - - create KEYSPACE mykeyspace WITH replication = - {'class': 'NetworkTopologyStrategy', 'datacenter1': 3}; - -NetworkTopologyStrategy allows Cassandra to take advantage of multiple racks and data centers. - -Configure Racks and Snitch -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -**Correctly configuring or changing racks after a cluster has been provisioned is an unsupported process**. Migrating from -a single rack to multiple racks is also unsupported and can result in data loss. - -Using ``GossipingPropertyFileSnitch`` is the most flexible solution for on premise or mixed cloud environments. ``Ec2Snitch`` -is reliable for AWS EC2 only environments. - - - - - - - diff --git a/doc/source/getting_started/querying.rst b/doc/source/getting_started/querying.rst deleted file mode 100644 index 55b162bb43fc..000000000000 --- a/doc/source/getting_started/querying.rst +++ /dev/null @@ -1,52 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Inserting and querying ----------------------- - -The API to Cassandra is :ref:`CQL `, the Cassandra Query Language. To use CQL, you will need to connect to the -cluster, which can be done: - -- either using cqlsh, -- or through a client driver for Cassandra. - -CQLSH -^^^^^ - -cqlsh is a command line shell for interacting with Cassandra through CQL. It is shipped with every Cassandra package, -and can be found in the bin/ directory alongside the cassandra executable. It connects to the single node specified on -the command line. For example:: - - $ bin/cqlsh localhost - Connected to Test Cluster at localhost:9042. - [cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4] - Use HELP for help. - cqlsh> SELECT cluster_name, listen_address FROM system.local; - - cluster_name | listen_address - --------------+---------------- - Test Cluster | 127.0.0.1 - - (1 rows) - cqlsh> - -See the :ref:`cqlsh section ` for full documentation. - -Client drivers -^^^^^^^^^^^^^^ - -A lot of client drivers are provided by the Community and a list of known drivers is provided in :ref:`the next section -`. You should refer to the documentation of each drivers for more information on how to use them. diff --git a/doc/source/glossary.rst b/doc/source/glossary.rst deleted file mode 100644 index 7f1d92f4c886..000000000000 --- a/doc/source/glossary.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. glossary:: - -Glossary -======== - Cassandra - Apache Cassandra is a distributed, high-available, eventually consistent NoSQL open-source database. - - cluster - Two or more database instances that exchange messages using the gossip protocol. - - commitlog - A file to which the database appends changed data for recovery in the event of a hardware failure. - - datacenter - A group of related nodes that are configured together within a cluster for replication and workload segregation purposes. - Not necessarily a separate location or physical data center. Datacenter names are case-sensitive and cannot be changed. - - gossip - A peer-to-peer communication protocol for exchanging location and state information between nodes. - - hint - One of the three ways, in addition to read-repair and full/incremental anti-entropy repair, that Cassandra implements the eventual consistency guarantee that all updates are eventually received by all replicas. - - listen address - Address or interface to bind to and tell other Cassandra nodes to connect to - - seed node - A seed node is used to bootstrap the gossip process for new nodes joining a cluster. To learn the topology of the ring, a joining node contacts one of the nodes in the -seeds list in cassandra. yaml. The first time you bring up a node in a new cluster, only one node is the seed node. - - snitch - The mapping from the IP addresses of nodes to physical and virtual locations, such as racks and data centers. There are several types of snitches. - The type of snitch affects the request routing mechanism. - - SSTable - An SSTable provides a persistent,ordered immutable map from keys to values, where both keys and values are arbitrary byte strings. diff --git a/doc/source/index.rst b/doc/source/index.rst deleted file mode 100644 index 302f8e7faa6e..000000000000 --- a/doc/source/index.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Welcome to Apache Cassandra's documentation! -============================================ - -This is the official documentation for `Apache Cassandra `__ |version|. If you would like -to contribute to this documentation, you are welcome to do so by submitting your contribution like any other patch -following `these instructions `__. - -Contents: - -.. toctree:: - :maxdepth: 2 - - getting_started/index - new/index - architecture/index - cql/index - data_modeling/index - configuration/index - operating/index - tools/index - troubleshooting/index - development/index - faq/index - plugins/index - - bugs - contactus diff --git a/doc/source/modules/ROOT/nav.adoc b/doc/source/modules/ROOT/nav.adoc new file mode 100644 index 000000000000..cc31a0498060 --- /dev/null +++ b/doc/source/modules/ROOT/nav.adoc @@ -0,0 +1,4 @@ +* xref:index.adoc[Main] +** xref:glossary.adoc[Glossary] +** xref:bugs.adoc[How to report bugs] +** xref:contactus.adoc[Contact us] diff --git a/doc/source/modules/ROOT/pages/bugs.adoc b/doc/source/modules/ROOT/pages/bugs.adoc new file mode 100644 index 000000000000..d2d06de6d074 --- /dev/null +++ b/doc/source/modules/ROOT/pages/bugs.adoc @@ -0,0 +1,17 @@ += Reporting Bugs + +If you encounter a problem with Cassandra, the first places to ask for help are the +link:++https://lists.apache.org/list.html?user@cassandra.apache.org++[user mailing list] and +the https://s.apache.org/slack-invite[Cassandra slack room]. + +If, after having asked for help, you suspect that you have found a bug +in Cassandra, you should report it by opening a ticket through the +xref:https://issues.apache.org/jira/browse/CASSANDRA[Apache Cassandra JIRA]. +Please provide as much details as you can on your problem, and don't +forget to indicate which version of Cassandra you are running and on +which environment. + +Further details on how to contribute can be found at our +xref:cassandra:development/index.adoc[Contributing to Cassandra] section. Please note that the source of this +documentation is part of the Cassandra git repository and hence +contributions to the documentation should follow the same path. diff --git a/doc/source/modules/ROOT/pages/contactus.adoc b/doc/source/modules/ROOT/pages/contactus.adoc new file mode 100644 index 000000000000..7382f109f037 --- /dev/null +++ b/doc/source/modules/ROOT/pages/contactus.adoc @@ -0,0 +1,30 @@ += Contact us + +You can get in touch with the Cassandra community either via the mailing +lists or Slack rooms. + +== Mailing lists + +The following mailing lists are available: + +* http://www.mail-archive.com/user@cassandra.apache.org/[Users]: +General discussion list for users - link:mail-to:user-subscribe@cassandra.apache.org[Subscribe] +* http://www.mail-archive.com/dev@cassandra.apache.org/[Developers]: +Development related discussion - link:mail-to:dev-subscribe@cassandra.apache.org[Subscribe] +* http://www.mail-archive.com/commits@cassandra.apache.org/[Commits]: +Commit notification source repository - link:mail-to:commits-subscribe@cassandra.apache.org[Subscribe] +* http://www.mail-archive.com/client-dev@cassandra.apache.org/[Client Libraries]: +Discussion related to the development of idiomatic client APIs - link:mail-to:client-dev-subscribe@cassandra.apache.org[Subscribe] + +Subscribe by clicking on the Subscribe links above. Follow the instructions +in the welcome email to confirm your subscription. Make sure to keep the welcome email +as it contains instructions on how to unsubscribe. + +== Slack + +To chat with users or developers in real-time, join our rooms on +https://s.apache.org/slack-invite[ASF Slack]: + +* `cassandra` - for user questions and general discussions. +* `cassandra-dev` - strictly for questions or discussions related to +Cassandra development. diff --git a/doc/source/modules/ROOT/pages/glossary.adoc b/doc/source/modules/ROOT/pages/glossary.adoc new file mode 100644 index 000000000000..f7fa0b31df3c --- /dev/null +++ b/doc/source/modules/ROOT/pages/glossary.adoc @@ -0,0 +1,38 @@ +Cassandra:: + Apache Cassandra is a distributed, high-available, eventually + consistent NoSQL open-source database. +cluster:: + Two or more database instances that exchange messages using the gossip + protocol. +commitlog:: + A file to which the database appends changed data for recovery in the + event of a hardware failure. +datacenter:: + A group of related nodes that are configured together within a cluster + for replication and workload segregation purposes. Not necessarily a + separate location or physical data center. Datacenter names are + case-sensitive and cannot be changed. +gossip:: + A peer-to-peer communication protocol for exchanging location and + state information between nodes. +hint:: + One of the three ways, in addition to read-repair and full/incremental + anti-entropy repair, that Cassandra implements the eventual + consistency guarantee that all updates are eventually received by all + replicas. +listen address:: + Address or interface to bind to and tell other Cassandra nodes to + connect to +seed node:: + A seed node is used to bootstrap the gossip process for new nodes + joining a cluster. To learn the topology of the ring, a joining node + contacts one of the nodes in the -seeds list in cassandra. yaml. The + first time you bring up a node in a new cluster, only one node is the + seed node. +snitch:: + The mapping from the IP addresses of nodes to physical and virtual + locations, such as racks and data centers. There are several types of + snitches. The type of snitch affects the request routing mechanism. +SSTable:: + An SSTable provides a persistent,ordered immutable map from keys to + values, where both keys and values are arbitrary byte strings. diff --git a/doc/source/modules/ROOT/pages/index.adoc b/doc/source/modules/ROOT/pages/index.adoc new file mode 100644 index 000000000000..3c7fbc1733bf --- /dev/null +++ b/doc/source/modules/ROOT/pages/index.adoc @@ -0,0 +1,46 @@ += Welcome to Apache Cassandra's documentation! + +:description: Starting page for Apache Cassandra documentation. +:keywords: Apache, Cassandra, NoSQL, database +:cass-url: http://cassandra.apache.org +:cass-contrib-url: https://wiki.apache.org/cassandra/HowToContribute + +This is the official documentation for {cass-url}[Apache Cassandra]. +If you would like to contribute to this documentation, you are welcome +to do so by submitting your contribution like any other patch following +{cass-contrib-url}[these instructions]. + +== Main documentation + +[cols="a,a"] +|=== + +| xref:cassandra:getting_started/index.adoc[Getting started] | Newbie starting point + +| xref:cassandra:operating/index.adoc[Operation] | The operator's corner + +| xref:cassandra:architecture/index.adoc[Architecture] | Cassandra's big picture + +| xref:cassandra:tools/index.adoc[Tools] | cqlsh, nodetool, and others + +| xref:cassandra:data_modeling/index.adoc[Data modeling] | Hint: it's not relational + +| xref:cassandra:troubleshooting/index.adoc[Troubleshooting] | What to look for when you have a problem + +| xref:cassandra:cql/index.adoc[Cassandra Query Language (CQL)] | CQL reference documentation + +| xref:cassandra:development/index.adoc[Development] | Learn how to improve Cassandra and contribute patches + +| xref:cassandra:faq/index.adoc[FAQ] | Frequently asked questions + +| xref:cassandra:configuration/index.adoc[Configuration] | Cassandra's handles and knobs + +| xref:cassandra:new/index.adoc[New in 4.0] | What's new in Cassandra 4.0 + +| xref:cassandra:plugins/index.adoc[Plug-ins] | Third-party plug-ins + +|=== + +== Meta information +* xref:bugs.adoc[Reporting bugs] +* xref:contactus.adoc[Contact us] diff --git a/doc/source/operating/Figure_1_backups.jpg b/doc/source/modules/cassandra/assets/images/Figure_1_backups.jpg similarity index 100% rename from doc/source/operating/Figure_1_backups.jpg rename to doc/source/modules/cassandra/assets/images/Figure_1_backups.jpg diff --git a/doc/source/data_modeling/images/Figure_1_data_model.jpg b/doc/source/modules/cassandra/assets/images/Figure_1_data_model.jpg similarity index 100% rename from doc/source/data_modeling/images/Figure_1_data_model.jpg rename to doc/source/modules/cassandra/assets/images/Figure_1_data_model.jpg diff --git a/doc/source/architecture/Figure_1_guarantees.jpg b/doc/source/modules/cassandra/assets/images/Figure_1_guarantees.jpg similarity index 100% rename from doc/source/architecture/Figure_1_guarantees.jpg rename to doc/source/modules/cassandra/assets/images/Figure_1_guarantees.jpg diff --git a/doc/source/operating/Figure_1_read_repair.jpg b/doc/source/modules/cassandra/assets/images/Figure_1_read_repair.jpg similarity index 100% rename from doc/source/operating/Figure_1_read_repair.jpg rename to doc/source/modules/cassandra/assets/images/Figure_1_read_repair.jpg diff --git a/doc/source/data_modeling/images/Figure_2_data_model.jpg b/doc/source/modules/cassandra/assets/images/Figure_2_data_model.jpg similarity index 100% rename from doc/source/data_modeling/images/Figure_2_data_model.jpg rename to doc/source/modules/cassandra/assets/images/Figure_2_data_model.jpg diff --git a/doc/source/operating/Figure_2_read_repair.jpg b/doc/source/modules/cassandra/assets/images/Figure_2_read_repair.jpg similarity index 100% rename from doc/source/operating/Figure_2_read_repair.jpg rename to doc/source/modules/cassandra/assets/images/Figure_2_read_repair.jpg diff --git a/doc/source/operating/Figure_3_read_repair.jpg b/doc/source/modules/cassandra/assets/images/Figure_3_read_repair.jpg similarity index 100% rename from doc/source/operating/Figure_3_read_repair.jpg rename to doc/source/modules/cassandra/assets/images/Figure_3_read_repair.jpg diff --git a/doc/source/operating/Figure_4_read_repair.jpg b/doc/source/modules/cassandra/assets/images/Figure_4_read_repair.jpg similarity index 100% rename from doc/source/operating/Figure_4_read_repair.jpg rename to doc/source/modules/cassandra/assets/images/Figure_4_read_repair.jpg diff --git a/doc/source/operating/Figure_5_read_repair.jpg b/doc/source/modules/cassandra/assets/images/Figure_5_read_repair.jpg similarity index 100% rename from doc/source/operating/Figure_5_read_repair.jpg rename to doc/source/modules/cassandra/assets/images/Figure_5_read_repair.jpg diff --git a/doc/source/operating/Figure_6_read_repair.jpg b/doc/source/modules/cassandra/assets/images/Figure_6_read_repair.jpg similarity index 100% rename from doc/source/operating/Figure_6_read_repair.jpg rename to doc/source/modules/cassandra/assets/images/Figure_6_read_repair.jpg diff --git a/doc/source/data_modeling/images/data_modeling_chebotko_logical.png b/doc/source/modules/cassandra/assets/images/data_modeling_chebotko_logical.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_chebotko_logical.png rename to doc/source/modules/cassandra/assets/images/data_modeling_chebotko_logical.png diff --git a/doc/source/data_modeling/images/data_modeling_chebotko_physical.png b/doc/source/modules/cassandra/assets/images/data_modeling_chebotko_physical.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_chebotko_physical.png rename to doc/source/modules/cassandra/assets/images/data_modeling_chebotko_physical.png diff --git a/doc/source/data_modeling/images/data_modeling_hotel_bucketing.png b/doc/source/modules/cassandra/assets/images/data_modeling_hotel_bucketing.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_hotel_bucketing.png rename to doc/source/modules/cassandra/assets/images/data_modeling_hotel_bucketing.png diff --git a/doc/source/data_modeling/images/data_modeling_hotel_erd.png b/doc/source/modules/cassandra/assets/images/data_modeling_hotel_erd.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_hotel_erd.png rename to doc/source/modules/cassandra/assets/images/data_modeling_hotel_erd.png diff --git a/doc/source/data_modeling/images/data_modeling_hotel_logical.png b/doc/source/modules/cassandra/assets/images/data_modeling_hotel_logical.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_hotel_logical.png rename to doc/source/modules/cassandra/assets/images/data_modeling_hotel_logical.png diff --git a/doc/source/data_modeling/images/data_modeling_hotel_physical.png b/doc/source/modules/cassandra/assets/images/data_modeling_hotel_physical.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_hotel_physical.png rename to doc/source/modules/cassandra/assets/images/data_modeling_hotel_physical.png diff --git a/doc/source/data_modeling/images/data_modeling_hotel_queries.png b/doc/source/modules/cassandra/assets/images/data_modeling_hotel_queries.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_hotel_queries.png rename to doc/source/modules/cassandra/assets/images/data_modeling_hotel_queries.png diff --git a/doc/source/data_modeling/images/data_modeling_hotel_relational.png b/doc/source/modules/cassandra/assets/images/data_modeling_hotel_relational.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_hotel_relational.png rename to doc/source/modules/cassandra/assets/images/data_modeling_hotel_relational.png diff --git a/doc/source/data_modeling/images/data_modeling_reservation_logical.png b/doc/source/modules/cassandra/assets/images/data_modeling_reservation_logical.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_reservation_logical.png rename to doc/source/modules/cassandra/assets/images/data_modeling_reservation_logical.png diff --git a/doc/source/data_modeling/images/data_modeling_reservation_physical.png b/doc/source/modules/cassandra/assets/images/data_modeling_reservation_physical.png similarity index 100% rename from doc/source/data_modeling/images/data_modeling_reservation_physical.png rename to doc/source/modules/cassandra/assets/images/data_modeling_reservation_physical.png diff --git a/doc/source/development/images/docs_commit.png b/doc/source/modules/cassandra/assets/images/docs_commit.png similarity index 100% rename from doc/source/development/images/docs_commit.png rename to doc/source/modules/cassandra/assets/images/docs_commit.png diff --git a/doc/source/development/images/docs_create_branch.png b/doc/source/modules/cassandra/assets/images/docs_create_branch.png similarity index 100% rename from doc/source/development/images/docs_create_branch.png rename to doc/source/modules/cassandra/assets/images/docs_create_branch.png diff --git a/doc/source/development/images/docs_create_file.png b/doc/source/modules/cassandra/assets/images/docs_create_file.png similarity index 100% rename from doc/source/development/images/docs_create_file.png rename to doc/source/modules/cassandra/assets/images/docs_create_file.png diff --git a/doc/source/development/images/docs_editor.png b/doc/source/modules/cassandra/assets/images/docs_editor.png similarity index 100% rename from doc/source/development/images/docs_editor.png rename to doc/source/modules/cassandra/assets/images/docs_editor.png diff --git a/doc/source/development/images/docs_fork.png b/doc/source/modules/cassandra/assets/images/docs_fork.png similarity index 100% rename from doc/source/development/images/docs_fork.png rename to doc/source/modules/cassandra/assets/images/docs_fork.png diff --git a/doc/source/development/images/docs_pr.png b/doc/source/modules/cassandra/assets/images/docs_pr.png similarity index 100% rename from doc/source/development/images/docs_pr.png rename to doc/source/modules/cassandra/assets/images/docs_pr.png diff --git a/doc/source/development/images/docs_preview.png b/doc/source/modules/cassandra/assets/images/docs_preview.png similarity index 100% rename from doc/source/development/images/docs_preview.png rename to doc/source/modules/cassandra/assets/images/docs_preview.png diff --git a/doc/source/development/images/eclipse_debug0.png b/doc/source/modules/cassandra/assets/images/eclipse_debug0.png similarity index 100% rename from doc/source/development/images/eclipse_debug0.png rename to doc/source/modules/cassandra/assets/images/eclipse_debug0.png diff --git a/doc/source/development/images/eclipse_debug1.png b/doc/source/modules/cassandra/assets/images/eclipse_debug1.png similarity index 100% rename from doc/source/development/images/eclipse_debug1.png rename to doc/source/modules/cassandra/assets/images/eclipse_debug1.png diff --git a/doc/source/development/images/eclipse_debug2.png b/doc/source/modules/cassandra/assets/images/eclipse_debug2.png similarity index 100% rename from doc/source/development/images/eclipse_debug2.png rename to doc/source/modules/cassandra/assets/images/eclipse_debug2.png diff --git a/doc/source/development/images/eclipse_debug3.png b/doc/source/modules/cassandra/assets/images/eclipse_debug3.png similarity index 100% rename from doc/source/development/images/eclipse_debug3.png rename to doc/source/modules/cassandra/assets/images/eclipse_debug3.png diff --git a/doc/source/development/images/eclipse_debug4.png b/doc/source/modules/cassandra/assets/images/eclipse_debug4.png similarity index 100% rename from doc/source/development/images/eclipse_debug4.png rename to doc/source/modules/cassandra/assets/images/eclipse_debug4.png diff --git a/doc/source/development/images/eclipse_debug5.png b/doc/source/modules/cassandra/assets/images/eclipse_debug5.png similarity index 100% rename from doc/source/development/images/eclipse_debug5.png rename to doc/source/modules/cassandra/assets/images/eclipse_debug5.png diff --git a/doc/source/development/images/eclipse_debug6.png b/doc/source/modules/cassandra/assets/images/eclipse_debug6.png similarity index 100% rename from doc/source/development/images/eclipse_debug6.png rename to doc/source/modules/cassandra/assets/images/eclipse_debug6.png diff --git a/doc/source/tools/example-stress-graph.png b/doc/source/modules/cassandra/assets/images/example-stress-graph.png similarity index 100% rename from doc/source/tools/example-stress-graph.png rename to doc/source/modules/cassandra/assets/images/example-stress-graph.png diff --git a/doc/source/operating/images/hints.svg b/doc/source/modules/cassandra/assets/images/hints.svg similarity index 100% rename from doc/source/operating/images/hints.svg rename to doc/source/modules/cassandra/assets/images/hints.svg diff --git a/doc/source/architecture/images/ring.svg b/doc/source/modules/cassandra/assets/images/ring.svg similarity index 100% rename from doc/source/architecture/images/ring.svg rename to doc/source/modules/cassandra/assets/images/ring.svg diff --git a/doc/source/architecture/images/vnodes.svg b/doc/source/modules/cassandra/assets/images/vnodes.svg similarity index 100% rename from doc/source/architecture/images/vnodes.svg rename to doc/source/modules/cassandra/assets/images/vnodes.svg diff --git a/doc/source/modules/cassandra/examples/BASH/add_repo_keys.sh b/doc/source/modules/cassandra/examples/BASH/add_repo_keys.sh new file mode 100644 index 000000000000..cdb5881e5638 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/add_repo_keys.sh @@ -0,0 +1 @@ +$ curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add - diff --git a/doc/source/modules/cassandra/examples/BASH/apt-get_cass.sh b/doc/source/modules/cassandra/examples/BASH/apt-get_cass.sh new file mode 100644 index 000000000000..9614b29ab2b3 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/apt-get_cass.sh @@ -0,0 +1 @@ +$ sudo apt-get install cassandra diff --git a/doc/source/modules/cassandra/examples/BASH/apt-get_update.sh b/doc/source/modules/cassandra/examples/BASH/apt-get_update.sh new file mode 100644 index 000000000000..b50b7ac768e3 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/apt-get_update.sh @@ -0,0 +1 @@ +$ sudo apt-get update diff --git a/doc/source/modules/cassandra/examples/BASH/cqlsh_localhost.sh b/doc/source/modules/cassandra/examples/BASH/cqlsh_localhost.sh new file mode 100644 index 000000000000..7bc1c39525d3 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/cqlsh_localhost.sh @@ -0,0 +1 @@ +$ bin/cqlsh localhost diff --git a/doc/source/modules/cassandra/examples/BASH/curl_install.sh b/doc/source/modules/cassandra/examples/BASH/curl_install.sh new file mode 100644 index 000000000000..1f1c2c9f45e6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/curl_install.sh @@ -0,0 +1 @@ +$ curl -OL http://apache.mirror.digitalpacific.com.au/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz diff --git a/doc/source/modules/cassandra/examples/BASH/curl_verify_sha.sh b/doc/source/modules/cassandra/examples/BASH/curl_verify_sha.sh new file mode 100644 index 000000000000..dcb5314e1474 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/curl_verify_sha.sh @@ -0,0 +1 @@ +$ curl -L https://downloads.apache.org/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz.sha256 diff --git a/doc/source/modules/cassandra/examples/BASH/find_sstables.sh b/doc/source/modules/cassandra/examples/BASH/find_sstables.sh new file mode 100644 index 000000000000..51569035c178 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/find_sstables.sh @@ -0,0 +1 @@ +find /var/lib/cassandra/data/ -type f | grep -v -- -ib- | grep -v "/snapshots" diff --git a/doc/source/modules/cassandra/examples/BASH/get_deb_package.sh b/doc/source/modules/cassandra/examples/BASH/get_deb_package.sh new file mode 100644 index 000000000000..891bed642723 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/get_deb_package.sh @@ -0,0 +1,2 @@ +$ echo "deb http://www.apache.org/dist/cassandra/debian 40x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list +deb http://www.apache.org/dist/cassandra/debian 40x main diff --git a/doc/source/modules/cassandra/examples/BASH/java_verify.sh b/doc/source/modules/cassandra/examples/BASH/java_verify.sh new file mode 100644 index 000000000000..da7832fdea80 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/java_verify.sh @@ -0,0 +1 @@ +$ java -version diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_status.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_status.sh new file mode 100644 index 000000000000..a9b768d9a0cc --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_status.sh @@ -0,0 +1 @@ +$ bin/nodetool status diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_status_nobin.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_status_nobin.sh new file mode 100644 index 000000000000..d7adbd3d4da4 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_status_nobin.sh @@ -0,0 +1 @@ +$ nodetool status diff --git a/doc/source/modules/cassandra/examples/BASH/run_cqlsh.sh b/doc/source/modules/cassandra/examples/BASH/run_cqlsh.sh new file mode 100644 index 000000000000..ae8cbbdf801c --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/run_cqlsh.sh @@ -0,0 +1 @@ +$ bin/cqlsh diff --git a/doc/source/modules/cassandra/examples/BASH/run_cqlsh_nobin.sh b/doc/source/modules/cassandra/examples/BASH/run_cqlsh_nobin.sh new file mode 100644 index 000000000000..5517fbf5322c --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/run_cqlsh_nobin.sh @@ -0,0 +1 @@ +$ cqlsh diff --git a/doc/source/modules/cassandra/examples/BASH/start_tarball.sh b/doc/source/modules/cassandra/examples/BASH/start_tarball.sh new file mode 100644 index 000000000000..7ec066f95ad5 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/start_tarball.sh @@ -0,0 +1 @@ +$ cd apache-cassandra-4.0.0/ && bin/cassandra diff --git a/doc/source/modules/cassandra/examples/BASH/tail_syslog.sh b/doc/source/modules/cassandra/examples/BASH/tail_syslog.sh new file mode 100644 index 000000000000..b47575035db5 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/tail_syslog.sh @@ -0,0 +1 @@ +$ tail -f logs/system.log diff --git a/doc/source/modules/cassandra/examples/BASH/tail_syslog_package.sh b/doc/source/modules/cassandra/examples/BASH/tail_syslog_package.sh new file mode 100644 index 000000000000..c9f00ede0579 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/tail_syslog_package.sh @@ -0,0 +1 @@ +$ tail -f /var/log/cassandra/system.log diff --git a/doc/source/modules/cassandra/examples/BASH/tarball.sh b/doc/source/modules/cassandra/examples/BASH/tarball.sh new file mode 100644 index 000000000000..4b25ecff09cb --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/tarball.sh @@ -0,0 +1 @@ +$ tar xzvf apache-cassandra-4.0.0-bin.tar.gz diff --git a/doc/source/modules/cassandra/examples/BASH/verify_gpg.sh b/doc/source/modules/cassandra/examples/BASH/verify_gpg.sh new file mode 100644 index 000000000000..3046e578f16b --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/verify_gpg.sh @@ -0,0 +1 @@ +$ gpg --print-md SHA256 apache-cassandra-4.0.0-bin.tar.gz diff --git a/doc/source/modules/cassandra/examples/BASH/yum_cass.sh b/doc/source/modules/cassandra/examples/BASH/yum_cass.sh new file mode 100644 index 000000000000..cd8217b112ee --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/yum_cass.sh @@ -0,0 +1 @@ +$ sudo yum install cassandra diff --git a/doc/source/modules/cassandra/examples/BASH/yum_start.sh b/doc/source/modules/cassandra/examples/BASH/yum_start.sh new file mode 100644 index 000000000000..4930d1ab11fc --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/yum_start.sh @@ -0,0 +1 @@ +$ sudo service cassandra start diff --git a/doc/source/modules/cassandra/examples/BASH/yum_update.sh b/doc/source/modules/cassandra/examples/BASH/yum_update.sh new file mode 100644 index 000000000000..2e815b2a0651 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/yum_update.sh @@ -0,0 +1 @@ +$ sudo yum update diff --git a/doc/source/modules/cassandra/examples/BNF/alter_ks.bnf b/doc/source/modules/cassandra/examples/BNF/alter_ks.bnf new file mode 100644 index 000000000000..7327972bf5fa --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/alter_ks.bnf @@ -0,0 +1,2 @@ +alter_keyspace_statement:=: ALTER KEYSPACE keyspace_name + WITH options diff --git a/doc/source/modules/cassandra/examples/BNF/alter_mv_statement.bnf b/doc/source/modules/cassandra/examples/BNF/alter_mv_statement.bnf new file mode 100644 index 000000000000..ff97edb96176 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/alter_mv_statement.bnf @@ -0,0 +1 @@ +alter_materialized_view_statement::= ALTER MATERIALIZED VIEW view_name WITH table_options diff --git a/doc/source/modules/cassandra/examples/BNF/alter_udt_statement.bnf b/doc/source/modules/cassandra/examples/BNF/alter_udt_statement.bnf new file mode 100644 index 000000000000..4f409e609e5e --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/alter_udt_statement.bnf @@ -0,0 +1,3 @@ +alter_type_statement::= ALTER TYPE udt_name alter_type_modification +alter_type_modification::= ADD field_definition + | RENAME identifier TO identifier( identifier TO identifier )* diff --git a/doc/source/modules/cassandra/examples/BNF/collection_literal.bnf b/doc/source/modules/cassandra/examples/BNF/collection_literal.bnf new file mode 100644 index 000000000000..83a46a240523 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/collection_literal.bnf @@ -0,0 +1,4 @@ +collection_literal::= map_literal | set_literal | list_literal +map_literal::= '\{' [ term ':' term (',' term : term)* ] '}' +set_literal::= '\{' [ term (',' term)* ] '}' +list_literal::= '[' [ term (',' term)* ] ']' diff --git a/doc/source/modules/cassandra/examples/BNF/collection_type.bnf b/doc/source/modules/cassandra/examples/BNF/collection_type.bnf new file mode 100644 index 000000000000..37e6cd1de894 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/collection_type.bnf @@ -0,0 +1,3 @@ +collection_type::= MAP '<' cql_type',' cql_type'>' + | SET '<' cql_type '>' + | LIST '<' cql_type'>' diff --git a/doc/source/modules/cassandra/examples/BNF/column.bnf b/doc/source/modules/cassandra/examples/BNF/column.bnf new file mode 100644 index 000000000000..136a45c7e5d2 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/column.bnf @@ -0,0 +1 @@ +column_name::= identifier diff --git a/doc/source/modules/cassandra/examples/BNF/constant.bnf b/doc/source/modules/cassandra/examples/BNF/constant.bnf new file mode 100644 index 000000000000..4a2953aa21fa --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/constant.bnf @@ -0,0 +1,8 @@ +constant::= string | integer | float | boolean | uuid | blob | NULL +string::= ''' (any character where ' can appear if doubled)+ ''' : '$$' (any character other than '$$') '$$' +integer::= re('-?[0-9]+') +float::= re('-?[0-9]+(.[0-9]*)?([eE][+-]?[0-9+])?') | NAN | INFINITY +boolean::= TRUE | FALSE +uuid::= hex\{8}-hex\{4}-hex\{4}-hex\{4}-hex\{12} +hex::= re("[0-9a-fA-F]") +blob::= '0' ('x' | 'X') hex+ diff --git a/doc/source/modules/cassandra/examples/BNF/cql_statement.bnf b/doc/source/modules/cassandra/examples/BNF/cql_statement.bnf new file mode 100644 index 000000000000..8d4ae2148302 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/cql_statement.bnf @@ -0,0 +1,48 @@ +cql_statement::= statement [ ';' ] +statement:=: ddl_statement : + | dml_statement + | secondary_index_statement + | materialized_view_statement + | role_or_permission_statement + | udf_statement + | udt_statement + | trigger_statement +ddl_statement::= use_statement + | create_keyspace_statement + | alter_keyspace_statement + | drop_keyspace_statement + | create_table_statement + | alter_table_statement + | drop_table_statement + | truncate_statement +dml_statement::= select_statement + | insert_statement + | update_statement + | delete_statement + | batch_statement +secondary_index_statement::= create_index_statement + | drop_index_statement +materialized_view_statement::= create_materialized_view_statement + | drop_materialized_view_statement +role_or_permission_statement::= create_role_statement + | alter_role_statement + | drop_role_statement + | grant_role_statement + | revoke_role_statement + | list_roles_statement + | grant_permission_statement + | revoke_permission_statement + | list_permissions_statement + | create_user_statement + | alter_user_statement + | drop_user_statement + | list_users_statement +udf_statement::= create_function_statement + | drop_function_statement + | create_aggregate_statement + | drop_aggregate_statement +udt_statement::= create_type_statement + | alter_type_statement + | drop_type_statement +trigger_statement::= create_trigger_statement + | drop_trigger_statement diff --git a/doc/source/modules/cassandra/examples/BNF/cql_type.bnf b/doc/source/modules/cassandra/examples/BNF/cql_type.bnf new file mode 100644 index 000000000000..4e2e5d1765dd --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/cql_type.bnf @@ -0,0 +1 @@ +cql_type::= native_type| collection_type| user_defined_type | tuple_type | custom_type diff --git a/doc/source/modules/cassandra/examples/BNF/create_index_statement.bnf b/doc/source/modules/cassandra/examples/BNF/create_index_statement.bnf new file mode 100644 index 000000000000..6e7694724342 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/create_index_statement.bnf @@ -0,0 +1,5 @@ +create_index_statement::= CREATE [ CUSTOM ] INDEX [ IF NOT EXISTS ] [ index_name ] + ON table_name '(' index_identifier ')' + [ USING string [ WITH OPTIONS = map_literal ] ] +index_identifier::= column_name + | ( KEYS | VALUES | ENTRIES | FULL ) '(' column_name ')' diff --git a/doc/source/modules/cassandra/examples/BNF/create_ks.bnf b/doc/source/modules/cassandra/examples/BNF/create_ks.bnf new file mode 100644 index 000000000000..ba3e240e0fae --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/create_ks.bnf @@ -0,0 +1,2 @@ +create_keyspace_statement::= CREATE KEYSPACE [ IF NOT EXISTS ] keyspace_name + WITH options diff --git a/doc/source/modules/cassandra/examples/BNF/create_mv_statement.bnf b/doc/source/modules/cassandra/examples/BNF/create_mv_statement.bnf new file mode 100644 index 000000000000..9bdb60dc5b15 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/create_mv_statement.bnf @@ -0,0 +1,4 @@ +create_materialized_view_statement::= CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] view_name + AS select_statement + PRIMARY KEY '(' primary_key')' + WITH table_options diff --git a/doc/source/modules/cassandra/examples/BNF/create_table.bnf b/doc/source/modules/cassandra/examples/BNF/create_table.bnf new file mode 100644 index 000000000000..840573c7b08a --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/create_table.bnf @@ -0,0 +1,12 @@ +create_table_statement::= CREATE TABLE [ IF NOT EXISTS ] table_name '(' + column_definition ( ',' column_definition )* + [ ',' PRIMARY KEY '(' primary_key ')' ] + ')' [ WITH table_options ] +column_definition::= column_name cql_type [ STATIC ] [ PRIMARY KEY] +primary_key::= partition_key [ ',' clustering_columns ] +partition_key::= column_name | '(' column_name ( ',' column_name )* ')' +clustering_columns::= column_name ( ',' column_name )* +table_options:=: COMPACT STORAGE [ AND table_options ] + | CLUSTERING ORDER BY '(' clustering_order ')' + [ AND table_options ] | options +clustering_order::= column_name (ASC | DESC) ( ',' column_name (ASC | DESC) )* diff --git a/doc/source/modules/cassandra/examples/BNF/create_trigger_statement.bnf b/doc/source/modules/cassandra/examples/BNF/create_trigger_statement.bnf new file mode 100644 index 000000000000..f7442da15d74 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/create_trigger_statement.bnf @@ -0,0 +1,3 @@ +create_trigger_statement ::= CREATE TRIGGER [ IF NOT EXISTS ] trigger_name + ON table_name + USING string diff --git a/doc/source/modules/cassandra/examples/BNF/create_type.bnf b/doc/source/modules/cassandra/examples/BNF/create_type.bnf new file mode 100644 index 000000000000..aebe9ebfbac6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/create_type.bnf @@ -0,0 +1,3 @@ +create_type_statement::= CREATE TYPE [ IF NOT EXISTS ] udt_name + '(' field_definition ( ',' field_definition)* ')' +field_definition::= identifier cql_type diff --git a/doc/source/modules/cassandra/examples/BNF/custom_type.bnf b/doc/source/modules/cassandra/examples/BNF/custom_type.bnf new file mode 100644 index 000000000000..ce4890f61762 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/custom_type.bnf @@ -0,0 +1 @@ +custom_type::= string diff --git a/doc/source/modules/cassandra/examples/BNF/drop_index_statement.bnf b/doc/source/modules/cassandra/examples/BNF/drop_index_statement.bnf new file mode 100644 index 000000000000..49f36d1eb32c --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/drop_index_statement.bnf @@ -0,0 +1 @@ +drop_index_statement::= DROP INDEX [ IF EXISTS ] index_name diff --git a/doc/source/modules/cassandra/examples/BNF/drop_ks.bnf b/doc/source/modules/cassandra/examples/BNF/drop_ks.bnf new file mode 100644 index 000000000000..4e21b7bbce35 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/drop_ks.bnf @@ -0,0 +1 @@ +drop_keyspace_statement::= DROP KEYSPACE [ IF EXISTS ] keyspace_name diff --git a/doc/source/modules/cassandra/examples/BNF/drop_mv_statement.bnf b/doc/source/modules/cassandra/examples/BNF/drop_mv_statement.bnf new file mode 100644 index 000000000000..1a9d8dc980e3 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/drop_mv_statement.bnf @@ -0,0 +1 @@ +drop_materialized_view_statement::= DROP MATERIALIZED VIEW [ IF EXISTS ] view_name; diff --git a/doc/source/modules/cassandra/examples/BNF/drop_trigger_statement.bnf b/doc/source/modules/cassandra/examples/BNF/drop_trigger_statement.bnf new file mode 100644 index 000000000000..c1d3e594230b --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/drop_trigger_statement.bnf @@ -0,0 +1 @@ +drop_trigger_statement ::= DROP TRIGGER [ IF EXISTS ] trigger_nameON table_name diff --git a/doc/source/modules/cassandra/examples/BNF/drop_udt_statement.bnf b/doc/source/modules/cassandra/examples/BNF/drop_udt_statement.bnf new file mode 100644 index 000000000000..276b57c60b8d --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/drop_udt_statement.bnf @@ -0,0 +1 @@ +drop_type_statement::= DROP TYPE [ IF EXISTS ] udt_name diff --git a/doc/source/modules/cassandra/examples/BNF/identifier.bnf b/doc/source/modules/cassandra/examples/BNF/identifier.bnf new file mode 100644 index 000000000000..7bc34314f933 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/identifier.bnf @@ -0,0 +1,3 @@ +identifier::= unquoted_identifier | quoted_identifier +unquoted_identifier::= re('[a-zA-Z][link:[a-zA-Z0-9]]*') +quoted_identifier::= '"' (any character where " can appear if doubled)+ '"' diff --git a/doc/source/modules/cassandra/examples/BNF/index_name.bnf b/doc/source/modules/cassandra/examples/BNF/index_name.bnf new file mode 100644 index 000000000000..c322755839a0 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/index_name.bnf @@ -0,0 +1 @@ +index_name::= re('[a-zA-Z_0-9]+') diff --git a/doc/source/modules/cassandra/examples/BNF/ks_table.bnf b/doc/source/modules/cassandra/examples/BNF/ks_table.bnf new file mode 100644 index 000000000000..20ee6dababcb --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/ks_table.bnf @@ -0,0 +1,5 @@ +keyspace_name::= name +table_name::= [keyspace_name '.' ] name +name::= unquoted_name | quoted_name +unquoted_name::= re('[a-zA-Z_0-9]\{1, 48}') +quoted_name::= '"' unquoted_name '"' diff --git a/doc/source/modules/cassandra/examples/BNF/native_type.bnf b/doc/source/modules/cassandra/examples/BNF/native_type.bnf new file mode 100644 index 000000000000..c4e9c268db3e --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/native_type.bnf @@ -0,0 +1,4 @@ +native_type::= ASCII | BIGINT | BLOB | BOOLEAN | COUNTER | DATE +| DECIMAL | DOUBLE | DURATION | FLOAT | INET | INT | +SMALLINT | TEXT | TIME | TIMESTAMP | TIMEUUID | TINYINT | +UUID | VARCHAR | VARINT diff --git a/doc/source/modules/cassandra/examples/BNF/options.bnf b/doc/source/modules/cassandra/examples/BNF/options.bnf new file mode 100644 index 000000000000..9887165a263a --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/options.bnf @@ -0,0 +1,4 @@ +options::= option ( AND option )* +option::= identifier '=' ( identifier + | constant + | map_literal ) diff --git a/doc/source/modules/cassandra/examples/BNF/term.bnf b/doc/source/modules/cassandra/examples/BNF/term.bnf new file mode 100644 index 000000000000..4e70984c2922 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/term.bnf @@ -0,0 +1,6 @@ +term::= constant | literal | function_call | arithmetic_operation | type_hint | bind_marker +literal::= collection_literal | udt_literal | tuple_literal +function_call::= identifier '(' [ term (',' term)* ] ')' +arithmetic_operation::= '-' term | term ('+' | '-' | '*' | '/' | '%') term +type_hint::= '(' cql_type ) term +bind_marker::= '?' | ':' identifier diff --git a/doc/source/modules/cassandra/examples/BNF/trigger_name.bnf b/doc/source/modules/cassandra/examples/BNF/trigger_name.bnf new file mode 100644 index 000000000000..18a4a7e22238 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/trigger_name.bnf @@ -0,0 +1 @@ +trigger_name ::= identifier diff --git a/doc/source/modules/cassandra/examples/BNF/tuple.bnf b/doc/source/modules/cassandra/examples/BNF/tuple.bnf new file mode 100644 index 000000000000..f339d5758460 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/tuple.bnf @@ -0,0 +1,2 @@ +tuple_type::= TUPLE '<' cql_type( ',' cql_type)* '>' +tuple_literal::= '(' term( ',' term )* ')' diff --git a/doc/source/modules/cassandra/examples/BNF/udt.bnf b/doc/source/modules/cassandra/examples/BNF/udt.bnf new file mode 100644 index 000000000000..c06a5f638b79 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/udt.bnf @@ -0,0 +1,2 @@ +user_defined_type::= udt_name +udt_name::= [ keyspace_name '.' ] identifier diff --git a/doc/source/modules/cassandra/examples/BNF/udt_literal.bnf b/doc/source/modules/cassandra/examples/BNF/udt_literal.bnf new file mode 100644 index 000000000000..8c996e5ed143 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/udt_literal.bnf @@ -0,0 +1 @@ +udt_literal::= '{' identifier ':' term ( ',' identifier ':' term)* '}' diff --git a/doc/source/modules/cassandra/examples/BNF/use_ks.bnf b/doc/source/modules/cassandra/examples/BNF/use_ks.bnf new file mode 100644 index 000000000000..0347e52d5a2a --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/use_ks.bnf @@ -0,0 +1 @@ +use_statement::= USE keyspace_name diff --git a/doc/source/modules/cassandra/examples/BNF/view_name.bnf b/doc/source/modules/cassandra/examples/BNF/view_name.bnf new file mode 100644 index 000000000000..69253677dd84 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/view_name.bnf @@ -0,0 +1 @@ +view_name::= re('[a-zA-Z_0-9]+') diff --git a/doc/source/modules/cassandra/examples/CQL/alter_ks.cql b/doc/source/modules/cassandra/examples/CQL/alter_ks.cql new file mode 100644 index 000000000000..319ed241b1d8 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/alter_ks.cql @@ -0,0 +1,2 @@ +ALTER KEYSPACE excelsior + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4}; diff --git a/doc/source/modules/cassandra/examples/CQL/autoexpand_exclude_dc.cql b/doc/source/modules/cassandra/examples/CQL/autoexpand_exclude_dc.cql new file mode 100644 index 000000000000..c320c52fc158 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/autoexpand_exclude_dc.cql @@ -0,0 +1,4 @@ +CREATE KEYSPACE excalibur + WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3, 'DC2': 0}; + +DESCRIBE KEYSPACE excalibur; diff --git a/doc/source/modules/cassandra/examples/CQL/autoexpand_ks.cql b/doc/source/modules/cassandra/examples/CQL/autoexpand_ks.cql new file mode 100644 index 000000000000..d5bef55acad0 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/autoexpand_ks.cql @@ -0,0 +1,4 @@ +CREATE KEYSPACE excalibur + WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3}; + +DESCRIBE KEYSPACE excalibur; diff --git a/doc/source/modules/cassandra/examples/CQL/autoexpand_ks_override.cql b/doc/source/modules/cassandra/examples/CQL/autoexpand_ks_override.cql new file mode 100644 index 000000000000..d6800fbe0512 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/autoexpand_ks_override.cql @@ -0,0 +1,4 @@ +CREATE KEYSPACE excalibur + WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3, 'DC2': 2}; + +DESCRIBE KEYSPACE excalibur; diff --git a/doc/source/modules/cassandra/examples/CQL/create_index.cql b/doc/source/modules/cassandra/examples/CQL/create_index.cql new file mode 100644 index 000000000000..f84452aa1d59 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_index.cql @@ -0,0 +1,8 @@ +CREATE INDEX userIndex ON NerdMovies (user); +CREATE INDEX ON Mutants (abilityId); +CREATE INDEX ON users (keys(favs)); +CREATE CUSTOM INDEX ON users (email) + USING 'path.to.the.IndexClass'; +CREATE CUSTOM INDEX ON users (email) + USING 'path.to.the.IndexClass' + WITH OPTIONS = {'storage': '/mnt/ssd/indexes/'}; diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks.cql b/doc/source/modules/cassandra/examples/CQL/create_ks.cql new file mode 100644 index 000000000000..e81d7f7bf36c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_ks.cql @@ -0,0 +1,6 @@ +CREATE KEYSPACE excelsior + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; + +CREATE KEYSPACE excalibur + WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 3} + AND durable_writes = false; diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks_trans_repl.cql b/doc/source/modules/cassandra/examples/CQL/create_ks_trans_repl.cql new file mode 100644 index 000000000000..afff433eec8f --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_ks_trans_repl.cql @@ -0,0 +1,2 @@ +CREATE KEYSPACE some_keyspace + WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : '3/1'', 'DC2' : '5/2'}; diff --git a/doc/source/modules/cassandra/examples/CQL/create_mv_statement.cql b/doc/source/modules/cassandra/examples/CQL/create_mv_statement.cql new file mode 100644 index 000000000000..0792c3e027d8 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_mv_statement.cql @@ -0,0 +1,5 @@ +CREATE MATERIALIZED VIEW monkeySpecies_by_population AS + SELECT * FROM monkeySpecies + WHERE population IS NOT NULL AND species IS NOT NULL + PRIMARY KEY (population, species) + WITH comment='Allow query by population instead of species'; diff --git a/doc/source/modules/cassandra/examples/CQL/create_static_column.cql b/doc/source/modules/cassandra/examples/CQL/create_static_column.cql new file mode 100644 index 000000000000..95e8ff21ec25 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_static_column.cql @@ -0,0 +1,7 @@ +CREATE TABLE t ( + pk int, + t int, + v text, + s text static, + PRIMARY KEY (pk, t) +); diff --git a/doc/source/modules/cassandra/examples/CQL/create_table.cql b/doc/source/modules/cassandra/examples/CQL/create_table.cql new file mode 100644 index 000000000000..57b557dace86 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_table.cql @@ -0,0 +1,23 @@ +CREATE TABLE monkey_species ( + species text PRIMARY KEY, + common_name text, + population varint, + average_size int +) WITH comment='Important biological records'; + +CREATE TABLE timeline ( + userid uuid, + posted_month int, + posted_time uuid, + body text, + posted_by text, + PRIMARY KEY (userid, posted_month, posted_time) +) WITH compaction = { 'class' : 'LeveledCompactionStrategy' }; + +CREATE TABLE loads ( + machine inet, + cpu int, + mtime timeuuid, + load float, + PRIMARY KEY ((machine, cpu), mtime) +) WITH CLUSTERING ORDER BY (mtime DESC); diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_clustercolumn.cql b/doc/source/modules/cassandra/examples/CQL/create_table_clustercolumn.cql new file mode 100644 index 000000000000..f7de266b1b8a --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_table_clustercolumn.cql @@ -0,0 +1,7 @@ +CREATE TABLE t2 ( + a int, + b int, + c int, + d int, + PRIMARY KEY (a, b, c) +); diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_compound_pk.cql b/doc/source/modules/cassandra/examples/CQL/create_table_compound_pk.cql new file mode 100644 index 000000000000..eb199c73146c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_table_compound_pk.cql @@ -0,0 +1,7 @@ +CREATE TABLE t ( + a int, + b int, + c int, + d int, + PRIMARY KEY ((a, b), c, d) +); diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_single_pk.cql b/doc/source/modules/cassandra/examples/CQL/create_table_single_pk.cql new file mode 100644 index 000000000000..ce6fff8d720e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_table_single_pk.cql @@ -0,0 +1 @@ +CREATE TABLE t (k text PRIMARY KEY); diff --git a/doc/source/modules/cassandra/examples/CQL/create_trigger.cql b/doc/source/modules/cassandra/examples/CQL/create_trigger.cql new file mode 100644 index 000000000000..9bbf2f240577 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_trigger.cql @@ -0,0 +1 @@ +CREATE TRIGGER myTrigger ON myTable USING 'org.apache.cassandra.triggers.InvertedIndex'; diff --git a/doc/source/modules/cassandra/examples/CQL/datetime_arithmetic.cql b/doc/source/modules/cassandra/examples/CQL/datetime_arithmetic.cql new file mode 100644 index 000000000000..310bf3bab69d --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/datetime_arithmetic.cql @@ -0,0 +1 @@ +SELECT * FROM myTable WHERE t = '2017-01-01' - 2d; diff --git a/doc/source/modules/cassandra/examples/CQL/delete_all_elements_list.cql b/doc/source/modules/cassandra/examples/CQL/delete_all_elements_list.cql new file mode 100644 index 000000000000..3d026683b39c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/delete_all_elements_list.cql @@ -0,0 +1 @@ +UPDATE plays SET scores = scores - [ 12, 21 ] WHERE id = '123-afde'; diff --git a/doc/source/modules/cassandra/examples/CQL/delete_element_list.cql b/doc/source/modules/cassandra/examples/CQL/delete_element_list.cql new file mode 100644 index 000000000000..26b3e58f00b0 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/delete_element_list.cql @@ -0,0 +1 @@ +DELETE scores[1] FROM plays WHERE id = '123-afde'; diff --git a/doc/source/modules/cassandra/examples/CQL/delete_map.cql b/doc/source/modules/cassandra/examples/CQL/delete_map.cql new file mode 100644 index 000000000000..e16b1340553c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/delete_map.cql @@ -0,0 +1,2 @@ +DELETE favs['author'] FROM users WHERE id = 'jsmith'; +UPDATE users SET favs = favs - { 'movie', 'band'} WHERE id = 'jsmith'; diff --git a/doc/source/modules/cassandra/examples/CQL/delete_set.cql b/doc/source/modules/cassandra/examples/CQL/delete_set.cql new file mode 100644 index 000000000000..308da3ceace9 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/delete_set.cql @@ -0,0 +1 @@ +UPDATE images SET tags = tags - { 'cat' } WHERE name = 'cat.jpg'; diff --git a/doc/source/modules/cassandra/examples/CQL/drop_ks.cql b/doc/source/modules/cassandra/examples/CQL/drop_ks.cql new file mode 100644 index 000000000000..46a920dbbd7c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/drop_ks.cql @@ -0,0 +1 @@ +DROP KEYSPACE excelsior; diff --git a/doc/source/modules/cassandra/examples/CQL/drop_trigger.cql b/doc/source/modules/cassandra/examples/CQL/drop_trigger.cql new file mode 100644 index 000000000000..05a7a95c1172 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/drop_trigger.cql @@ -0,0 +1 @@ +DROP TRIGGER myTrigger ON myTable; diff --git a/doc/source/modules/cassandra/examples/CQL/insert_duration.cql b/doc/source/modules/cassandra/examples/CQL/insert_duration.cql new file mode 100644 index 000000000000..b52801bbc2a2 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_duration.cql @@ -0,0 +1,6 @@ +INSERT INTO RiderResults (rider, race, result) + VALUES ('Christopher Froome', 'Tour de France', 89h4m48s); +INSERT INTO RiderResults (rider, race, result) + VALUES ('BARDET Romain', 'Tour de France', PT89H8M53S); +INSERT INTO RiderResults (rider, race, result) + VALUES ('QUINTANA Nairo', 'Tour de France', P0000-00-00T89:09:09); diff --git a/doc/source/modules/cassandra/examples/CQL/insert_json.cql b/doc/source/modules/cassandra/examples/CQL/insert_json.cql new file mode 100644 index 000000000000..d3a5deca8b89 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_json.cql @@ -0,0 +1 @@ +INSERT INTO mytable JSON '{ "\"myKey\"": 0, "value": 0}'; diff --git a/doc/source/modules/cassandra/examples/CQL/insert_static_data.cql b/doc/source/modules/cassandra/examples/CQL/insert_static_data.cql new file mode 100644 index 000000000000..c6a588f95981 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_static_data.cql @@ -0,0 +1,2 @@ +INSERT INTO t (pk, t, v, s) VALUES (0, 0, 'val0', 'static0'); +INSERT INTO t (pk, t, v, s) VALUES (0, 1, 'val1', 'static1'); diff --git a/doc/source/modules/cassandra/examples/CQL/insert_table_cc_addl.cql b/doc/source/modules/cassandra/examples/CQL/insert_table_cc_addl.cql new file mode 100644 index 000000000000..f574d539120b --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_table_cc_addl.cql @@ -0,0 +1 @@ +INSERT INTO t3 (a,b,c,d) VALUES (0,0,0,9); diff --git a/doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn.cql b/doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn.cql new file mode 100644 index 000000000000..449f921d5ca9 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn.cql @@ -0,0 +1,5 @@ +INSERT INTO t2 (a, b, c, d) VALUES (0,0,0,0); +INSERT INTO t2 (a, b, c, d) VALUES (0,0,1,1); +INSERT INTO t2 (a, b, c, d) VALUES (0,1,2,2); +INSERT INTO t2 (a, b, c, d) VALUES (0,1,3,3); +INSERT INTO t2 (a, b, c, d) VALUES (1,1,4,4); diff --git a/doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn2.cql b/doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn2.cql new file mode 100644 index 000000000000..a048c9f7fb0e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn2.cql @@ -0,0 +1,5 @@ +INSERT INTO t3 (a, b, c, d) VALUES (0,0,0,0); +INSERT INTO t3 (a, b, c, d) VALUES (0,0,1,1); +INSERT INTO t3 (a, b, c, d) VALUES (0,1,2,2); +INSERT INTO t3 (a, b, c, d) VALUES (0,1,3,3); +INSERT INTO t3 (a, b, c, d) VALUES (1,1,4,4); diff --git a/doc/source/modules/cassandra/examples/CQL/insert_table_compound_pk.cql b/doc/source/modules/cassandra/examples/CQL/insert_table_compound_pk.cql new file mode 100644 index 000000000000..3ce1953fe86a --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_table_compound_pk.cql @@ -0,0 +1,5 @@ +INSERT INTO t (a, b, c, d) VALUES (0,0,0,0); +INSERT INTO t (a, b, c, d) VALUES (0,0,1,1); +INSERT INTO t (a, b, c, d) VALUES (0,1,2,2); +INSERT INTO t (a, b, c, d) VALUES (0,1,3,3); +INSERT INTO t (a, b, c, d) VALUES (1,1,4,4); diff --git a/doc/source/modules/cassandra/examples/CQL/insert_udt.cql b/doc/source/modules/cassandra/examples/CQL/insert_udt.cql new file mode 100644 index 000000000000..5c6f1766ef48 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_udt.cql @@ -0,0 +1,17 @@ +INSERT INTO user (name, addresses) + VALUES ('z3 Pr3z1den7', { + 'home' : { + street: '1600 Pennsylvania Ave NW', + city: 'Washington', + zip: '20500', + phones: { 'cell' : { country_code: 1, number: '202 456-1111' }, + 'landline' : { country_code: 1, number: '...' } } + }, + 'work' : { + street: '1600 Pennsylvania Ave NW', + city: 'Washington', + zip: '20500', + phones: { 'fax' : { country_code: 1, number: '...' } } + } + } +); diff --git a/doc/source/modules/cassandra/examples/CQL/list.cql b/doc/source/modules/cassandra/examples/CQL/list.cql new file mode 100644 index 000000000000..4d1ef13f863b --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/list.cql @@ -0,0 +1,12 @@ +CREATE TABLE plays ( + id text PRIMARY KEY, + game text, + players int, + scores list // A list of integers +) + +INSERT INTO plays (id, game, players, scores) + VALUES ('123-afde', 'quake', 3, [17, 4, 2]); + +// Replace the existing list entirely +UPDATE plays SET scores = [ 3, 9, 4] WHERE id = '123-afde'; diff --git a/doc/source/modules/cassandra/examples/CQL/map.cql b/doc/source/modules/cassandra/examples/CQL/map.cql new file mode 100644 index 000000000000..ca9ca5e2e4df --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/map.cql @@ -0,0 +1,11 @@ +CREATE TABLE users ( + id text PRIMARY KEY, + name text, + favs map // A map of text keys, and text values +); + +INSERT INTO users (id, name, favs) + VALUES ('jsmith', 'John Smith', { 'fruit' : 'Apple', 'band' : 'Beatles' }); + +// Replace the existing map entirely. +UPDATE users SET favs = { 'fruit' : 'Banana' } WHERE id = 'jsmith'; diff --git a/doc/source/modules/cassandra/examples/CQL/mv_table_def.cql b/doc/source/modules/cassandra/examples/CQL/mv_table_def.cql new file mode 100644 index 000000000000..106fe1181390 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/mv_table_def.cql @@ -0,0 +1,8 @@ +CREATE TABLE t ( + k int, + c1 int, + c2 int, + v1 int, + v2 int, + PRIMARY KEY (k, c1, c2) +); diff --git a/doc/source/modules/cassandra/examples/CQL/mv_table_error.cql b/doc/source/modules/cassandra/examples/CQL/mv_table_error.cql new file mode 100644 index 000000000000..e7560f92a16f --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/mv_table_error.cql @@ -0,0 +1,13 @@ +// Error: cannot include both v1 and v2 in the primary key as both are not in the base table primary key + +CREATE MATERIALIZED VIEW mv1 AS + SELECT * FROM t + WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL AND v1 IS NOT NULL + PRIMARY KEY (v1, v2, k, c1, c2); + +// Error: must include k in the primary as it's a base table primary key column + +CREATE MATERIALIZED VIEW mv1 AS + SELECT * FROM t + WHERE c1 IS NOT NULL AND c2 IS NOT NULL + PRIMARY KEY (c1, c2); diff --git a/doc/source/modules/cassandra/examples/CQL/mv_table_from_base.cql b/doc/source/modules/cassandra/examples/CQL/mv_table_from_base.cql new file mode 100644 index 000000000000..bd2f9f2d5e8e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/mv_table_from_base.cql @@ -0,0 +1,9 @@ +CREATE MATERIALIZED VIEW mv1 AS + SELECT * FROM t + WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL + PRIMARY KEY (c1, k, c2); + +CREATE MATERIALIZED VIEW mv1 AS + SELECT * FROM t + WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL + PRIMARY KEY (v1, k, c1, c2); diff --git a/doc/source/modules/cassandra/examples/CQL/rename_udt_field.cql b/doc/source/modules/cassandra/examples/CQL/rename_udt_field.cql new file mode 100644 index 000000000000..7718788b3e83 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/rename_udt_field.cql @@ -0,0 +1 @@ +ALTER TYPE address RENAME zip TO zipcode; diff --git a/doc/source/modules/cassandra/examples/CQL/select_range.cql b/doc/source/modules/cassandra/examples/CQL/select_range.cql new file mode 100644 index 000000000000..fcf3bd583338 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/select_range.cql @@ -0,0 +1 @@ +SELECT * FROM t2 WHERE a = 0 AND b > 0 and b <= 3; diff --git a/doc/source/modules/cassandra/examples/CQL/select_static_data.cql b/doc/source/modules/cassandra/examples/CQL/select_static_data.cql new file mode 100644 index 000000000000..8bca9375bfe4 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/select_static_data.cql @@ -0,0 +1 @@ +SELECT * FROM t; diff --git a/doc/source/modules/cassandra/examples/CQL/select_table_clustercolumn.cql b/doc/source/modules/cassandra/examples/CQL/select_table_clustercolumn.cql new file mode 100644 index 000000000000..60bb2cf95b07 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/select_table_clustercolumn.cql @@ -0,0 +1 @@ +SELECT * FROM t2; diff --git a/doc/source/modules/cassandra/examples/CQL/select_table_compound_pk.cql b/doc/source/modules/cassandra/examples/CQL/select_table_compound_pk.cql new file mode 100644 index 000000000000..8bca9375bfe4 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/select_table_compound_pk.cql @@ -0,0 +1 @@ +SELECT * FROM t; diff --git a/doc/source/modules/cassandra/examples/CQL/set.cql b/doc/source/modules/cassandra/examples/CQL/set.cql new file mode 100644 index 000000000000..607981b8be5e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/set.cql @@ -0,0 +1,11 @@ +CREATE TABLE images ( + name text PRIMARY KEY, + owner text, + tags set // A set of text values +); + +INSERT INTO images (name, owner, tags) + VALUES ('cat.jpg', 'jsmith', { 'pet', 'cute' }); + +// Replace the existing set entirely +UPDATE images SET tags = { 'kitten', 'cat', 'lol' } WHERE name = 'cat.jpg'; diff --git a/doc/source/modules/cassandra/examples/CQL/tuple.cql b/doc/source/modules/cassandra/examples/CQL/tuple.cql new file mode 100644 index 000000000000..b612d078aa1e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/tuple.cql @@ -0,0 +1,6 @@ +CREATE TABLE durations ( + event text, + duration tuple, +); + +INSERT INTO durations (event, duration) VALUES ('ev1', (3, 'hours')); diff --git a/doc/source/modules/cassandra/examples/CQL/udt.cql b/doc/source/modules/cassandra/examples/CQL/udt.cql new file mode 100644 index 000000000000..defcc821e62b --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/udt.cql @@ -0,0 +1,16 @@ +CREATE TYPE phone ( + country_code int, + number text, +); + +CREATE TYPE address ( + street text, + city text, + zip text, + phones map +); + +CREATE TABLE user ( + name text PRIMARY KEY, + addresses map> +); diff --git a/doc/source/modules/cassandra/examples/CQL/update_list.cql b/doc/source/modules/cassandra/examples/CQL/update_list.cql new file mode 100644 index 000000000000..70aacf55d94a --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/update_list.cql @@ -0,0 +1,2 @@ +UPDATE plays SET players = 5, scores = scores + [ 14, 21 ] WHERE id = '123-afde'; +UPDATE plays SET players = 6, scores = [ 3 ] + scores WHERE id = '123-afde'; diff --git a/doc/source/modules/cassandra/examples/CQL/update_map.cql b/doc/source/modules/cassandra/examples/CQL/update_map.cql new file mode 100644 index 000000000000..870f46343b5e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/update_map.cql @@ -0,0 +1,2 @@ +UPDATE users SET favs['author'] = 'Ed Poe' WHERE id = 'jsmith'; +UPDATE users SET favs = favs + { 'movie' : 'Cassablanca', 'band' : 'ZZ Top' } WHERE id = 'jsmith'; diff --git a/doc/source/modules/cassandra/examples/CQL/update_particular_list_element.cql b/doc/source/modules/cassandra/examples/CQL/update_particular_list_element.cql new file mode 100644 index 000000000000..604ad34cc977 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/update_particular_list_element.cql @@ -0,0 +1 @@ +UPDATE plays SET scores[1] = 7 WHERE id = '123-afde'; diff --git a/doc/source/modules/cassandra/examples/CQL/update_set.cql b/doc/source/modules/cassandra/examples/CQL/update_set.cql new file mode 100644 index 000000000000..16e6eb23e4b7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/update_set.cql @@ -0,0 +1 @@ +UPDATE images SET tags = tags + { 'gray', 'cuddly' } WHERE name = 'cat.jpg'; diff --git a/doc/source/modules/cassandra/examples/CQL/update_ttl_map.cql b/doc/source/modules/cassandra/examples/CQL/update_ttl_map.cql new file mode 100644 index 000000000000..d2db9bdcdf1c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/update_ttl_map.cql @@ -0,0 +1 @@ +UPDATE users USING TTL 10 SET favs['color'] = 'green' WHERE id = 'jsmith'; diff --git a/doc/source/modules/cassandra/examples/CQL/use_ks.cql b/doc/source/modules/cassandra/examples/CQL/use_ks.cql new file mode 100644 index 000000000000..b3aaaf3ea848 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/use_ks.cql @@ -0,0 +1 @@ +USE excelsior; diff --git a/doc/source/modules/cassandra/examples/RESULTS/add_repo_keys.result b/doc/source/modules/cassandra/examples/RESULTS/add_repo_keys.result new file mode 100644 index 000000000000..4736ecea23fa --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/add_repo_keys.result @@ -0,0 +1,4 @@ +% Total % Received % Xferd Average Speed Time Time Time Current + Dload Upload Total Spent Left Speed +100 266k 100 266k 0 0 320k 0 --:--:-- --:--:-- --:--:-- 320k +OK diff --git a/doc/source/modules/cassandra/examples/RESULTS/add_yum_repo.result b/doc/source/modules/cassandra/examples/RESULTS/add_yum_repo.result new file mode 100644 index 000000000000..ba06f540f340 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/add_yum_repo.result @@ -0,0 +1,6 @@ +[cassandra] +name=Apache Cassandra +baseurl=https://downloads.apache.org/cassandra/redhat/40x/ +gpgcheck=1 +repo_gpgcheck=1 +gpgkey=https://downloads.apache.org/cassandra/KEYS diff --git a/doc/source/modules/cassandra/examples/RESULTS/autoexpand_exclude_dc.result b/doc/source/modules/cassandra/examples/RESULTS/autoexpand_exclude_dc.result new file mode 100644 index 000000000000..6d5a8a42244b --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/autoexpand_exclude_dc.result @@ -0,0 +1 @@ +CREATE KEYSPACE excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3'} AND durable_writes = true; diff --git a/doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks.result b/doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks.result new file mode 100644 index 000000000000..fcc8855e4bef --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks.result @@ -0,0 +1 @@ +CREATE KEYSPACE excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3', 'DC2': '3'} AND durable_writes = true; diff --git a/doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks_override.result b/doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks_override.result new file mode 100644 index 000000000000..b76189dcedea --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks_override.result @@ -0,0 +1 @@ +CREATE KEYSPACE excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3', 'DC2': '2'} AND durable_writes = true; diff --git a/doc/source/modules/cassandra/examples/RESULTS/cqlsh_localhost.result b/doc/source/modules/cassandra/examples/RESULTS/cqlsh_localhost.result new file mode 100644 index 000000000000..b5a19082d6b8 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/cqlsh_localhost.result @@ -0,0 +1,11 @@ +Connected to Test Cluster at localhost:9042. +[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4] +Use HELP for help. +cqlsh> SELECT cluster_name, listen_address FROM system.local; + + cluster_name | listen_address +--------------+---------------- + Test Cluster | 127.0.0.1 + +(1 rows) +cqlsh> diff --git a/doc/source/modules/cassandra/examples/RESULTS/insert_table_cc_addl.result b/doc/source/modules/cassandra/examples/RESULTS/insert_table_cc_addl.result new file mode 100644 index 000000000000..d9af0c6192e7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/insert_table_cc_addl.result @@ -0,0 +1,9 @@ + a | b | c | d +---+---+---+--- + 1 | 1 | 4 | 4 + 0 | 0 | 0 | 9 <1> + 0 | 0 | 1 | 1 + 0 | 1 | 2 | 2 + 0 | 1 | 3 | 3 + +(5 rows) diff --git a/doc/source/modules/cassandra/examples/RESULTS/java_verify.result b/doc/source/modules/cassandra/examples/RESULTS/java_verify.result new file mode 100644 index 000000000000..3ea962560c18 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/java_verify.result @@ -0,0 +1,3 @@ +openjdk version "1.8.0_222" +OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) +OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_range.result b/doc/source/modules/cassandra/examples/RESULTS/select_range.result new file mode 100644 index 000000000000..a3d1c7651446 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/select_range.result @@ -0,0 +1,6 @@ + a | b | c | d +---+---+---+--- + 0 | 1 | 2 | 2 + 0 | 1 | 3 | 3 + +(2 rows) diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_static_data.result b/doc/source/modules/cassandra/examples/RESULTS/select_static_data.result new file mode 100644 index 000000000000..f1e8decde8c7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/select_static_data.result @@ -0,0 +1,4 @@ + pk | t | v | s + ----+---+--------+----------- + 0 | 0 | 'val0' | 'static1' + 0 | 1 | 'val1' | 'static1' diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_table_clustercolumn.result b/doc/source/modules/cassandra/examples/RESULTS/select_table_clustercolumn.result new file mode 100644 index 000000000000..1d3899db9298 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/select_table_clustercolumn.result @@ -0,0 +1,9 @@ + a | b | c | d +---+---+---+--- + 1 | 1 | 4 | 4 <1> + 0 | 0 | 0 | 0 + 0 | 0 | 1 | 1 + 0 | 1 | 2 | 2 + 0 | 1 | 3 | 3 + +(5 rows) diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_table_compound_pk.result b/doc/source/modules/cassandra/examples/RESULTS/select_table_compound_pk.result new file mode 100644 index 000000000000..d098516b1125 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/select_table_compound_pk.result @@ -0,0 +1,9 @@ + a | b | c | d +---+---+---+--- + 0 | 0 | 0 | 0 <1> + 0 | 0 | 1 | 1 + 0 | 1 | 2 | 2 <2> + 0 | 1 | 3 | 3 + 1 | 1 | 4 | 4 <3> + +(5 rows) diff --git a/doc/source/modules/cassandra/examples/RESULTS/tail_syslog.result b/doc/source/modules/cassandra/examples/RESULTS/tail_syslog.result new file mode 100644 index 000000000000..cb32dc04388d --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/tail_syslog.result @@ -0,0 +1 @@ +INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... diff --git a/doc/source/modules/cassandra/examples/RESULTS/verify_gpg.result b/doc/source/modules/cassandra/examples/RESULTS/verify_gpg.result new file mode 100644 index 000000000000..443e23d3786b --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/verify_gpg.result @@ -0,0 +1,2 @@ +apache-cassandra-4.0.0-bin.tar.gz: 28757DDE 589F7041 0F9A6A95 C39EE7E6 + CDE63440 E2B06B91 AE6B2006 14FA364D diff --git a/doc/source/modules/cassandra/examples/TEXT/tarball_install_dirs.txt b/doc/source/modules/cassandra/examples/TEXT/tarball_install_dirs.txt new file mode 100644 index 000000000000..99b1a1487491 --- /dev/null +++ b/doc/source/modules/cassandra/examples/TEXT/tarball_install_dirs.txt @@ -0,0 +1,11 @@ +/ + bin/ <1> + conf/ <2> + data/ <3> + doc/ + interface/ + javadoc/ + lib/ + logs/ <4> + pylib/ + tools/ <5> diff --git a/doc/source/modules/cassandra/examples/assassinate.txt b/doc/source/modules/cassandra/examples/assassinate.txt new file mode 100644 index 000000000000..baa42ed8feae --- /dev/null +++ b/doc/source/modules/cassandra/examples/assassinate.txt @@ -0,0 +1,38 @@ +NAME + nodetool assassinate - Forcefully remove a dead node without + re-replicating any data. Use as a last resort if you cannot removenode + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] assassinate [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + IP address of the endpoint to assassinate + + diff --git a/doc/source/modules/cassandra/examples/bootstrap.txt b/doc/source/modules/cassandra/examples/bootstrap.txt new file mode 100644 index 000000000000..6e065f95a56b --- /dev/null +++ b/doc/source/modules/cassandra/examples/bootstrap.txt @@ -0,0 +1,37 @@ +NAME + nodetool bootstrap - Monitor/manage node's bootstrap process + +SYNOPSIS + nodetool bootstrap + nodetool + [(-pwf | --password-file )] + [(-h | --host )] [(-u | --username )] + [(-pp | --print-port)] [(-p | --port )] + [(-pw | --password )] bootstrap resume + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + +COMMANDS + With no arguments, Display help information + + resume + Resume bootstrap streaming + + diff --git a/doc/source/modules/cassandra/examples/cleanup.txt b/doc/source/modules/cassandra/examples/cleanup.txt new file mode 100644 index 000000000000..e99479c7a838 --- /dev/null +++ b/doc/source/modules/cassandra/examples/cleanup.txt @@ -0,0 +1,43 @@ +NAME + nodetool cleanup - Triggers the immediate cleanup of keys no longer + belonging to a node. By default, clean all keyspaces + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] cleanup + [(-j | --jobs )] [--] [ ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to cleanup simultanously, set to 0 to use all + available compaction threads + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/clearsnapshot.txt b/doc/source/modules/cassandra/examples/clearsnapshot.txt new file mode 100644 index 000000000000..1955217eb292 --- /dev/null +++ b/doc/source/modules/cassandra/examples/clearsnapshot.txt @@ -0,0 +1,46 @@ +NAME + nodetool clearsnapshot - Remove the snapshot with the given name from + the given keyspaces. If no snapshotName is specified we will remove all + snapshots + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] clearsnapshot [--all] + [-t ] [--] [...] + +OPTIONS + --all + Removes all snapshots + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -t + Remove the snapshot with a given name + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Remove snapshots from the given keyspaces + + diff --git a/doc/source/modules/cassandra/examples/clientstats.txt b/doc/source/modules/cassandra/examples/clientstats.txt new file mode 100644 index 000000000000..2a0fd7d9e701 --- /dev/null +++ b/doc/source/modules/cassandra/examples/clientstats.txt @@ -0,0 +1,39 @@ +NAME + nodetool clientstats - Print information about connected clients + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] clientstats [--all] + [--by-protocol] [--clear-history] + +OPTIONS + --all + Lists all connections + + --by-protocol + Lists most recent client connections by protocol version + + --clear-history + Clear the history of connected clients + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/compact.txt b/doc/source/modules/cassandra/examples/compact.txt new file mode 100644 index 000000000000..8f0f70656e9a --- /dev/null +++ b/doc/source/modules/cassandra/examples/compact.txt @@ -0,0 +1,55 @@ +NAME + nodetool compact - Force a (major) compaction on one or more tables or + user-defined compaction on given SSTables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] compact + [(-et | --end-token )] [(-s | --split-output)] + [(-st | --start-token )] [--user-defined] + [--] [ ...] or ... + +OPTIONS + -et , --end-token + Use -et to specify a token at which compaction range ends + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s, --split-output + Use -s to not create a single big file + + -st , --start-token + Use -st to specify a token at which the compaction range starts + + -u , --username + Remote jmx agent username + + --user-defined + Use --user-defined to submit listed files for user-defined + compaction + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] or ... + The keyspace followed by one or many tables or list of SSTable data + files when using --user-defined + + diff --git a/doc/source/modules/cassandra/examples/compactionhistory.txt b/doc/source/modules/cassandra/examples/compactionhistory.txt new file mode 100644 index 000000000000..44b711cf8ccd --- /dev/null +++ b/doc/source/modules/cassandra/examples/compactionhistory.txt @@ -0,0 +1,33 @@ +NAME + nodetool compactionhistory - Print history of compaction + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] compactionhistory + [(-F | --format )] + +OPTIONS + -F , --format + Output format (json, yaml) + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/compactionstats.txt b/doc/source/modules/cassandra/examples/compactionstats.txt new file mode 100644 index 000000000000..f1910d2d3f55 --- /dev/null +++ b/doc/source/modules/cassandra/examples/compactionstats.txt @@ -0,0 +1,33 @@ +NAME + nodetool compactionstats - Print statistics on compactions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] compactionstats + [(-H | --human-readable)] + +OPTIONS + -h , --host + Node hostname or ip address + + -H, --human-readable + Display bytes in human readable form, i.e. KiB, MiB, GiB, TiB + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/decommission.txt b/doc/source/modules/cassandra/examples/decommission.txt new file mode 100644 index 000000000000..33fde516a852 --- /dev/null +++ b/doc/source/modules/cassandra/examples/decommission.txt @@ -0,0 +1,33 @@ +NAME + nodetool decommission - Decommission the *node I am connecting to* + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] decommission [(-f | --force)] + +OPTIONS + -f, --force + Force decommission of this node even when it reduces the number of + replicas to below configured RF + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/describecluster.txt b/doc/source/modules/cassandra/examples/describecluster.txt new file mode 100644 index 000000000000..e5307b5eae2f --- /dev/null +++ b/doc/source/modules/cassandra/examples/describecluster.txt @@ -0,0 +1,30 @@ +NAME + nodetool describecluster - Print the name, snitch, partitioner and + schema version of a cluster + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] describecluster + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/describering.txt b/doc/source/modules/cassandra/examples/describering.txt new file mode 100644 index 000000000000..02a85fdc978d --- /dev/null +++ b/doc/source/modules/cassandra/examples/describering.txt @@ -0,0 +1,37 @@ +NAME + nodetool describering - Shows the token ranges info of a given keyspace + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] describering [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The keyspace name + + diff --git a/doc/source/modules/cassandra/examples/disableauditlog.txt b/doc/source/modules/cassandra/examples/disableauditlog.txt new file mode 100644 index 000000000000..950060406e67 --- /dev/null +++ b/doc/source/modules/cassandra/examples/disableauditlog.txt @@ -0,0 +1,29 @@ +NAME + nodetool disableauditlog - Disable the audit log + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disableauditlog + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/disableautocompaction.txt b/doc/source/modules/cassandra/examples/disableautocompaction.txt new file mode 100644 index 000000000000..2c0fb3cc8e29 --- /dev/null +++ b/doc/source/modules/cassandra/examples/disableautocompaction.txt @@ -0,0 +1,39 @@ +NAME + nodetool disableautocompaction - Disable autocompaction for the given + keyspace and table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disableautocompaction [--] + [ ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/disablebackup.txt b/doc/source/modules/cassandra/examples/disablebackup.txt new file mode 100644 index 000000000000..5c51261dc569 --- /dev/null +++ b/doc/source/modules/cassandra/examples/disablebackup.txt @@ -0,0 +1,29 @@ +NAME + nodetool disablebackup - Disable incremental backup + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablebackup + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/disablebinary.txt b/doc/source/modules/cassandra/examples/disablebinary.txt new file mode 100644 index 000000000000..2ea676afa6ed --- /dev/null +++ b/doc/source/modules/cassandra/examples/disablebinary.txt @@ -0,0 +1,29 @@ +NAME + nodetool disablebinary - Disable native transport (binary protocol) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablebinary + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/disablefullquerylog.txt b/doc/source/modules/cassandra/examples/disablefullquerylog.txt new file mode 100644 index 000000000000..00cc2cddbf74 --- /dev/null +++ b/doc/source/modules/cassandra/examples/disablefullquerylog.txt @@ -0,0 +1,29 @@ +NAME + nodetool disablefullquerylog - Disable the full query log + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablefullquerylog + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/disablegossip.txt b/doc/source/modules/cassandra/examples/disablegossip.txt new file mode 100644 index 000000000000..603a65cc1998 --- /dev/null +++ b/doc/source/modules/cassandra/examples/disablegossip.txt @@ -0,0 +1,30 @@ +NAME + nodetool disablegossip - Disable gossip (effectively marking the node + down) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablegossip + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/disablehandoff.txt b/doc/source/modules/cassandra/examples/disablehandoff.txt new file mode 100644 index 000000000000..ccb9a58e66d1 --- /dev/null +++ b/doc/source/modules/cassandra/examples/disablehandoff.txt @@ -0,0 +1,29 @@ +NAME + nodetool disablehandoff - Disable storing hinted handoffs + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablehandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/disablehintsfordc.txt b/doc/source/modules/cassandra/examples/disablehintsfordc.txt new file mode 100644 index 000000000000..8e6e3bb7d534 --- /dev/null +++ b/doc/source/modules/cassandra/examples/disablehintsfordc.txt @@ -0,0 +1,38 @@ +NAME + nodetool disablehintsfordc - Disable hints for a data center + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablehintsfordc [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The data center to disable + + diff --git a/doc/source/modules/cassandra/examples/disableoldprotocolversions.txt b/doc/source/modules/cassandra/examples/disableoldprotocolversions.txt new file mode 100644 index 000000000000..689e1dd1c057 --- /dev/null +++ b/doc/source/modules/cassandra/examples/disableoldprotocolversions.txt @@ -0,0 +1,29 @@ +NAME + nodetool disableoldprotocolversions - Disable old protocol versions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disableoldprotocolversions + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/drain.txt b/doc/source/modules/cassandra/examples/drain.txt new file mode 100644 index 000000000000..24bddbcbca66 --- /dev/null +++ b/doc/source/modules/cassandra/examples/drain.txt @@ -0,0 +1,30 @@ +NAME + nodetool drain - Drain the node (stop accepting writes and flush all + tables) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] drain + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/enableauditlog.txt b/doc/source/modules/cassandra/examples/enableauditlog.txt new file mode 100644 index 000000000000..150821a5ee44 --- /dev/null +++ b/doc/source/modules/cassandra/examples/enableauditlog.txt @@ -0,0 +1,63 @@ +NAME + nodetool enableauditlog - Enable the audit log + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableauditlog + [--excluded-categories ] + [--excluded-keyspaces ] + [--excluded-users ] + [--included-categories ] + [--included-keyspaces ] + [--included-users ] [--logger ] + +OPTIONS + --excluded-categories + Comma separated list of Audit Log Categories to be excluded for + audit log. If not set the value from cassandra.yaml will be used + + --excluded-keyspaces + Comma separated list of keyspaces to be excluded for audit log. If + not set the value from cassandra.yaml will be used + + --excluded-users + Comma separated list of users to be excluded for audit log. If not + set the value from cassandra.yaml will be used + + -h , --host + Node hostname or ip address + + --included-categories + Comma separated list of Audit Log Categories to be included for + audit log. If not set the value from cassandra.yaml will be used + + --included-keyspaces + Comma separated list of keyspaces to be included for audit log. If + not set the value from cassandra.yaml will be used + + --included-users + Comma separated list of users to be included for audit log. If not + set the value from cassandra.yaml will be used + + --logger + Logger name to be used for AuditLogging. Default BinAuditLogger. If + not set the value from cassandra.yaml will be used + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/enableautocompaction.txt b/doc/source/modules/cassandra/examples/enableautocompaction.txt new file mode 100644 index 000000000000..1b52c4098b10 --- /dev/null +++ b/doc/source/modules/cassandra/examples/enableautocompaction.txt @@ -0,0 +1,39 @@ +NAME + nodetool enableautocompaction - Enable autocompaction for the given + keyspace and table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableautocompaction [--] + [ ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/enablebackup.txt b/doc/source/modules/cassandra/examples/enablebackup.txt new file mode 100644 index 000000000000..7c4b1c4ed3f7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/enablebackup.txt @@ -0,0 +1,29 @@ +NAME + nodetool enablebackup - Enable incremental backup + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablebackup + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/enablebinary.txt b/doc/source/modules/cassandra/examples/enablebinary.txt new file mode 100644 index 000000000000..3d8c330e6a31 --- /dev/null +++ b/doc/source/modules/cassandra/examples/enablebinary.txt @@ -0,0 +1,29 @@ +NAME + nodetool enablebinary - Reenable native transport (binary protocol) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablebinary + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/enablefullquerylog.txt b/doc/source/modules/cassandra/examples/enablefullquerylog.txt new file mode 100644 index 000000000000..fdc380da2447 --- /dev/null +++ b/doc/source/modules/cassandra/examples/enablefullquerylog.txt @@ -0,0 +1,61 @@ +NAME + nodetool enablefullquerylog - Enable full query logging, defaults for + the options are configured in cassandra.yaml + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablefullquerylog + [--archive-command ] [--blocking ] + [--max-archive-retries ] + [--max-log-size ] [--max-queue-weight ] + [--path ] [--roll-cycle ] + +OPTIONS + --archive-command + Command that will handle archiving rolled full query log files. + Format is "/path/to/script.sh %path" where %path will be replaced + with the file to archive + + --blocking + If the queue is full whether to block producers or drop samples + [true|false]. + + -h , --host + Node hostname or ip address + + --max-archive-retries + Max number of archive retries. + + --max-log-size + How many bytes of log data to store before dropping segments. Might + not be respected if a log file hasn't rolled so it can be deleted. + + --max-queue-weight + Maximum number of bytes of query data to queue to disk before + blocking or dropping samples. + + -p , --port + Remote jmx agent port number + + --path + Path to store the full query log at. Will have it's contents + recursively deleted. + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + --roll-cycle + How often to roll the log file (MINUTELY, HOURLY, DAILY). + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/enablegossip.txt b/doc/source/modules/cassandra/examples/enablegossip.txt new file mode 100644 index 000000000000..ccbb4987390d --- /dev/null +++ b/doc/source/modules/cassandra/examples/enablegossip.txt @@ -0,0 +1,29 @@ +NAME + nodetool enablegossip - Reenable gossip + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablegossip + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/enablehandoff.txt b/doc/source/modules/cassandra/examples/enablehandoff.txt new file mode 100644 index 000000000000..9386ea72f8d2 --- /dev/null +++ b/doc/source/modules/cassandra/examples/enablehandoff.txt @@ -0,0 +1,30 @@ +NAME + nodetool enablehandoff - Reenable future hints storing on the current + node + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablehandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/enablehintsfordc.txt b/doc/source/modules/cassandra/examples/enablehintsfordc.txt new file mode 100644 index 000000000000..3893b47f6646 --- /dev/null +++ b/doc/source/modules/cassandra/examples/enablehintsfordc.txt @@ -0,0 +1,39 @@ +NAME + nodetool enablehintsfordc - Enable hints for a data center that was + previsouly disabled + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablehintsfordc [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The data center to enable + + diff --git a/doc/source/modules/cassandra/examples/enableoldprotocolversions.txt b/doc/source/modules/cassandra/examples/enableoldprotocolversions.txt new file mode 100644 index 000000000000..0e9b4beb5c66 --- /dev/null +++ b/doc/source/modules/cassandra/examples/enableoldprotocolversions.txt @@ -0,0 +1,29 @@ +NAME + nodetool enableoldprotocolversions - Enable old protocol versions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableoldprotocolversions + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/failuredetector.txt b/doc/source/modules/cassandra/examples/failuredetector.txt new file mode 100644 index 000000000000..f6d698a0cbd1 --- /dev/null +++ b/doc/source/modules/cassandra/examples/failuredetector.txt @@ -0,0 +1,30 @@ +NAME + nodetool failuredetector - Shows the failure detector information for + the cluster + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] failuredetector + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/flush.txt b/doc/source/modules/cassandra/examples/flush.txt new file mode 100644 index 000000000000..60a598b8f7af --- /dev/null +++ b/doc/source/modules/cassandra/examples/flush.txt @@ -0,0 +1,38 @@ +NAME + nodetool flush - Flush one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] flush [--] [ + ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/garbagecollect.txt b/doc/source/modules/cassandra/examples/garbagecollect.txt new file mode 100644 index 000000000000..c4bfe01ff3e1 --- /dev/null +++ b/doc/source/modules/cassandra/examples/garbagecollect.txt @@ -0,0 +1,48 @@ +NAME + nodetool garbagecollect - Remove deleted data from one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] garbagecollect + [(-g | --granularity )] + [(-j | --jobs )] [--] [ ...] + +OPTIONS + -g , --granularity + Granularity of garbage removal. ROW (default) removes deleted + partitions and rows, CELL also removes overwritten or deleted cells. + + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to cleanup simultanously, set to 0 to use all + available compaction threads. Defaults to 1 so that collections of + newer tables can see the data is deleted and also remove tombstones. + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/gcstats.txt b/doc/source/modules/cassandra/examples/gcstats.txt new file mode 100644 index 000000000000..a4368dd94e63 --- /dev/null +++ b/doc/source/modules/cassandra/examples/gcstats.txt @@ -0,0 +1,29 @@ +NAME + nodetool gcstats - Print GC Statistics + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] gcstats + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/getbatchlogreplaythrottle.txt b/doc/source/modules/cassandra/examples/getbatchlogreplaythrottle.txt new file mode 100644 index 000000000000..71e4f9ca5e66 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getbatchlogreplaythrottle.txt @@ -0,0 +1,31 @@ +NAME + nodetool getbatchlogreplaythrottle - Print batchlog replay throttle in + KB/s. This is reduced proportionally to the number of nodes in the + cluster. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getbatchlogreplaythrottle + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/getcompactionthreshold.txt b/doc/source/modules/cassandra/examples/getcompactionthreshold.txt new file mode 100644 index 000000000000..57b71db97e5a --- /dev/null +++ b/doc/source/modules/cassandra/examples/getcompactionthreshold.txt @@ -0,0 +1,39 @@ +NAME + nodetool getcompactionthreshold - Print min and max compaction + thresholds for a given table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getcompactionthreshold [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace with a table + + diff --git a/doc/source/modules/cassandra/examples/getcompactionthroughput.txt b/doc/source/modules/cassandra/examples/getcompactionthroughput.txt new file mode 100644 index 000000000000..97d69e609792 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getcompactionthroughput.txt @@ -0,0 +1,30 @@ +NAME + nodetool getcompactionthroughput - Print the MB/s throughput cap for + compaction in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getcompactionthroughput + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/getconcurrency.txt b/doc/source/modules/cassandra/examples/getconcurrency.txt new file mode 100644 index 000000000000..bc54ae83ca65 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getconcurrency.txt @@ -0,0 +1,38 @@ +NAME + nodetool getconcurrency - Get maximum concurrency for processing stages + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getconcurrency [--] + [stage-names] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [stage-names] + optional list of stage names, otherwise display all stages + + diff --git a/doc/source/modules/cassandra/examples/getconcurrentcompactors.txt b/doc/source/modules/cassandra/examples/getconcurrentcompactors.txt new file mode 100644 index 000000000000..2671c31b34b6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getconcurrentcompactors.txt @@ -0,0 +1,30 @@ +NAME + nodetool getconcurrentcompactors - Get the number of concurrent + compactors in the system. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getconcurrentcompactors + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/getconcurrentviewbuilders.txt b/doc/source/modules/cassandra/examples/getconcurrentviewbuilders.txt new file mode 100644 index 000000000000..ce326d5f90b8 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getconcurrentviewbuilders.txt @@ -0,0 +1,30 @@ +NAME + nodetool getconcurrentviewbuilders - Get the number of concurrent view + builders in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getconcurrentviewbuilders + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/getendpoints.txt b/doc/source/modules/cassandra/examples/getendpoints.txt new file mode 100644 index 000000000000..08831d7afaa5 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getendpoints.txt @@ -0,0 +1,39 @@ +NAME + nodetool getendpoints - Print the end points that owns the key + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getendpoints [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace, the table, and the partition key for which we need to + find the endpoint + + diff --git a/doc/source/modules/cassandra/examples/getinterdcstreamthroughput.txt b/doc/source/modules/cassandra/examples/getinterdcstreamthroughput.txt new file mode 100644 index 000000000000..f4b43b429354 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getinterdcstreamthroughput.txt @@ -0,0 +1,30 @@ +NAME + nodetool getinterdcstreamthroughput - Print the Mb/s throughput cap for + inter-datacenter streaming in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getinterdcstreamthroughput + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/getlogginglevels.txt b/doc/source/modules/cassandra/examples/getlogginglevels.txt new file mode 100644 index 000000000000..09324b0c706c --- /dev/null +++ b/doc/source/modules/cassandra/examples/getlogginglevels.txt @@ -0,0 +1,29 @@ +NAME + nodetool getlogginglevels - Get the runtime logging levels + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getlogginglevels + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/getmaxhintwindow.txt b/doc/source/modules/cassandra/examples/getmaxhintwindow.txt new file mode 100644 index 000000000000..9b6123a53160 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getmaxhintwindow.txt @@ -0,0 +1,29 @@ +NAME + nodetool getmaxhintwindow - Print the max hint window in ms + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getmaxhintwindow + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/getseeds.txt b/doc/source/modules/cassandra/examples/getseeds.txt new file mode 100644 index 000000000000..0e9b25103cb4 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getseeds.txt @@ -0,0 +1,30 @@ +NAME + nodetool getseeds - Get the currently in use seed node IP list excluding + the node IP + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getseeds + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/getsstables.txt b/doc/source/modules/cassandra/examples/getsstables.txt new file mode 100644 index 000000000000..f03e1faf7ede --- /dev/null +++ b/doc/source/modules/cassandra/examples/getsstables.txt @@ -0,0 +1,41 @@ +NAME + nodetool getsstables - Print the sstable filenames that own the key + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getsstables + [(-hf | --hex-format)] [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -hf, --hex-format + Specify the key in hexadecimal string format + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The keyspace, the column family, and the key + + diff --git a/doc/source/modules/cassandra/examples/getstreamthroughput.txt b/doc/source/modules/cassandra/examples/getstreamthroughput.txt new file mode 100644 index 000000000000..3355745a3ef7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/getstreamthroughput.txt @@ -0,0 +1,30 @@ +NAME + nodetool getstreamthroughput - Print the Mb/s throughput cap for + streaming in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getstreamthroughput + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/gettimeout.txt b/doc/source/modules/cassandra/examples/gettimeout.txt new file mode 100644 index 000000000000..93fd18306600 --- /dev/null +++ b/doc/source/modules/cassandra/examples/gettimeout.txt @@ -0,0 +1,39 @@ +NAME + nodetool gettimeout - Print the timeout of the given type in ms + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] gettimeout [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The timeout type, one of (read, range, write, counterwrite, + cascontention, truncate, internodeconnect, internodeuser, misc + (general rpc_timeout_in_ms)) + + diff --git a/doc/source/modules/cassandra/examples/gettraceprobability.txt b/doc/source/modules/cassandra/examples/gettraceprobability.txt new file mode 100644 index 000000000000..36fb9e590d85 --- /dev/null +++ b/doc/source/modules/cassandra/examples/gettraceprobability.txt @@ -0,0 +1,29 @@ +NAME + nodetool gettraceprobability - Print the current trace probability value + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] gettraceprobability + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/gossipinfo.txt b/doc/source/modules/cassandra/examples/gossipinfo.txt new file mode 100644 index 000000000000..99e0cf492752 --- /dev/null +++ b/doc/source/modules/cassandra/examples/gossipinfo.txt @@ -0,0 +1,29 @@ +NAME + nodetool gossipinfo - Shows the gossip information for the cluster + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] gossipinfo + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/help.txt b/doc/source/modules/cassandra/examples/help.txt new file mode 100644 index 000000000000..0d5111318c6c --- /dev/null +++ b/doc/source/modules/cassandra/examples/help.txt @@ -0,0 +1,16 @@ +NAME + nodetool help - Display help information + +SYNOPSIS + nodetool help [--] [...] + +OPTIONS + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + + + diff --git a/doc/source/modules/cassandra/examples/import.txt b/doc/source/modules/cassandra/examples/import.txt new file mode 100644 index 000000000000..375a31716f87 --- /dev/null +++ b/doc/source/modules/cassandra/examples/import.txt @@ -0,0 +1,64 @@ +NAME + nodetool import - Import new SSTables to the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] import + [(-c | --no-invalidate-caches)] [(-e | --extended-verify)] + [(-l | --keep-level)] [(-q | --quick)] [(-r | --keep-repaired)] + [(-t | --no-tokens)] [(-v | --no-verify)] [--]
+ ... + +OPTIONS + -c, --no-invalidate-caches + Don't invalidate the row cache when importing + + -e, --extended-verify + Run an extended verify, verifying all values in the new sstables + + -h , --host + Node hostname or ip address + + -l, --keep-level + Keep the level on the new sstables + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -q, --quick + Do a quick import without verifying sstables, clearing row cache or + checking in which data directory to put the file + + -r, --keep-repaired + Keep any repaired information from the sstables + + -t, --no-tokens + Don't verify that all tokens in the new sstable are owned by the + current node + + -u , --username + Remote jmx agent username + + -v, --no-verify + Don't verify new sstables + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
... + The keyspace, table name and directories to import sstables from + + diff --git a/doc/source/modules/cassandra/examples/info.txt b/doc/source/modules/cassandra/examples/info.txt new file mode 100644 index 000000000000..6769f8672355 --- /dev/null +++ b/doc/source/modules/cassandra/examples/info.txt @@ -0,0 +1,32 @@ +NAME + nodetool info - Print node information (uptime, load, ...) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] info [(-T | --tokens)] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -T, --tokens + Display all tokens + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/invalidatecountercache.txt b/doc/source/modules/cassandra/examples/invalidatecountercache.txt new file mode 100644 index 000000000000..88e1f0459c62 --- /dev/null +++ b/doc/source/modules/cassandra/examples/invalidatecountercache.txt @@ -0,0 +1,29 @@ +NAME + nodetool invalidatecountercache - Invalidate the counter cache + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] invalidatecountercache + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/invalidatekeycache.txt b/doc/source/modules/cassandra/examples/invalidatekeycache.txt new file mode 100644 index 000000000000..a09cc07e063e --- /dev/null +++ b/doc/source/modules/cassandra/examples/invalidatekeycache.txt @@ -0,0 +1,29 @@ +NAME + nodetool invalidatekeycache - Invalidate the key cache + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] invalidatekeycache + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/invalidaterowcache.txt b/doc/source/modules/cassandra/examples/invalidaterowcache.txt new file mode 100644 index 000000000000..c78f1b6083bf --- /dev/null +++ b/doc/source/modules/cassandra/examples/invalidaterowcache.txt @@ -0,0 +1,29 @@ +NAME + nodetool invalidaterowcache - Invalidate the row cache + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] invalidaterowcache + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/join.txt b/doc/source/modules/cassandra/examples/join.txt new file mode 100644 index 000000000000..d636fd1577a2 --- /dev/null +++ b/doc/source/modules/cassandra/examples/join.txt @@ -0,0 +1,29 @@ +NAME + nodetool join - Join the ring + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] join + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/listsnapshots.txt b/doc/source/modules/cassandra/examples/listsnapshots.txt new file mode 100644 index 000000000000..3cdafd62863b --- /dev/null +++ b/doc/source/modules/cassandra/examples/listsnapshots.txt @@ -0,0 +1,32 @@ +NAME + nodetool listsnapshots - Lists all the snapshots along with the size on + disk and true size. True size is the total size of all SSTables which + are not backed up to disk. Size on disk is total size of the snapshot on + disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] listsnapshots + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/move.txt b/doc/source/modules/cassandra/examples/move.txt new file mode 100644 index 000000000000..29f228e96fcc --- /dev/null +++ b/doc/source/modules/cassandra/examples/move.txt @@ -0,0 +1,37 @@ +NAME + nodetool move - Move node on the token ring to a new token + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] move [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The new token. + + diff --git a/doc/source/modules/cassandra/examples/netstats.txt b/doc/source/modules/cassandra/examples/netstats.txt new file mode 100644 index 000000000000..4d4792ef5847 --- /dev/null +++ b/doc/source/modules/cassandra/examples/netstats.txt @@ -0,0 +1,34 @@ +NAME + nodetool netstats - Print network information on provided host + (connecting node by default) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] netstats + [(-H | --human-readable)] + +OPTIONS + -h , --host + Node hostname or ip address + + -H, --human-readable + Display bytes in human readable form, i.e. KiB, MiB, GiB, TiB + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/pausehandoff.txt b/doc/source/modules/cassandra/examples/pausehandoff.txt new file mode 100644 index 000000000000..4419935ce01c --- /dev/null +++ b/doc/source/modules/cassandra/examples/pausehandoff.txt @@ -0,0 +1,29 @@ +NAME + nodetool pausehandoff - Pause hints delivery process + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] pausehandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/profileload.txt b/doc/source/modules/cassandra/examples/profileload.txt new file mode 100644 index 000000000000..b6f30fcc9f17 --- /dev/null +++ b/doc/source/modules/cassandra/examples/profileload.txt @@ -0,0 +1,48 @@ +NAME + nodetool profileload - Low footprint profiling of activity for a period + of time + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] profileload [-a ] + [-k ] [-s ] [--] + +OPTIONS + -a + Comma separated list of samplers to use (Default: all) + + -h , --host + Node hostname or ip address + + -k + Number of the top samples to list (Default: 10) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s + Capacity of the sampler, higher for more accuracy (Default: 256) + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The keyspace, column family name, and duration in milliseconds + + diff --git a/doc/source/modules/cassandra/examples/proxyhistograms.txt b/doc/source/modules/cassandra/examples/proxyhistograms.txt new file mode 100644 index 000000000000..e01922678f68 --- /dev/null +++ b/doc/source/modules/cassandra/examples/proxyhistograms.txt @@ -0,0 +1,30 @@ +NAME + nodetool proxyhistograms - Print statistic histograms for network + operations + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] proxyhistograms + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/rangekeysample.txt b/doc/source/modules/cassandra/examples/rangekeysample.txt new file mode 100644 index 000000000000..a58506bb756e --- /dev/null +++ b/doc/source/modules/cassandra/examples/rangekeysample.txt @@ -0,0 +1,30 @@ +NAME + nodetool rangekeysample - Shows the sampled keys held across all + keyspaces + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] rangekeysample + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/rebuild.txt b/doc/source/modules/cassandra/examples/rebuild.txt new file mode 100644 index 000000000000..1f1c35c25d5a --- /dev/null +++ b/doc/source/modules/cassandra/examples/rebuild.txt @@ -0,0 +1,54 @@ +NAME + nodetool rebuild - Rebuild data by streaming from other nodes (similarly + to bootstrap) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] rebuild + [(-ks | --keyspace )] + [(-s | --sources )] + [(-ts | --tokens )] [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -ks , --keyspace + Use -ks to rebuild specific keyspace. + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s , --sources + Use -s to specify hosts that this node should stream from when -ts + is used. Multiple hosts should be separated using commas (e.g. + 127.0.0.1,127.0.0.2,...) + + -ts , --tokens + Use -ts to rebuild specific token ranges, in the format of "(start_token_1,end_token_1],(start_token_2,end_token_2],...(start_token_n,end_token_n]". + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Name of DC from which to select sources for streaming. By default, + pick any DC + + diff --git a/doc/source/modules/cassandra/examples/rebuild_index.txt b/doc/source/modules/cassandra/examples/rebuild_index.txt new file mode 100644 index 000000000000..cef436b29a67 --- /dev/null +++ b/doc/source/modules/cassandra/examples/rebuild_index.txt @@ -0,0 +1,39 @@ +NAME + nodetool rebuild_index - A full rebuild of native secondary indexes for + a given table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] rebuild_index [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace and table name followed by a list of index names + + diff --git a/doc/source/modules/cassandra/examples/refresh.txt b/doc/source/modules/cassandra/examples/refresh.txt new file mode 100644 index 000000000000..befabc11dcfa --- /dev/null +++ b/doc/source/modules/cassandra/examples/refresh.txt @@ -0,0 +1,39 @@ +NAME + nodetool refresh - Load newly placed SSTables to the system without + restart + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] refresh [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace and table name + + diff --git a/doc/source/modules/cassandra/examples/refreshsizeestimates.txt b/doc/source/modules/cassandra/examples/refreshsizeestimates.txt new file mode 100644 index 000000000000..63a9b65bc52d --- /dev/null +++ b/doc/source/modules/cassandra/examples/refreshsizeestimates.txt @@ -0,0 +1,29 @@ +NAME + nodetool refreshsizeestimates - Refresh system.size_estimates + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] refreshsizeestimates + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/reloadlocalschema.txt b/doc/source/modules/cassandra/examples/reloadlocalschema.txt new file mode 100644 index 000000000000..694d0321a0e5 --- /dev/null +++ b/doc/source/modules/cassandra/examples/reloadlocalschema.txt @@ -0,0 +1,29 @@ +NAME + nodetool reloadlocalschema - Reload local node schema from system tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] reloadlocalschema + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/reloadseeds.txt b/doc/source/modules/cassandra/examples/reloadseeds.txt new file mode 100644 index 000000000000..b529d3846955 --- /dev/null +++ b/doc/source/modules/cassandra/examples/reloadseeds.txt @@ -0,0 +1,30 @@ +NAME + nodetool reloadseeds - Reload the seed node list from the seed node + provider + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] reloadseeds + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/reloadssl.txt b/doc/source/modules/cassandra/examples/reloadssl.txt new file mode 100644 index 000000000000..a1ab81851163 --- /dev/null +++ b/doc/source/modules/cassandra/examples/reloadssl.txt @@ -0,0 +1,29 @@ +NAME + nodetool reloadssl - Signals Cassandra to reload SSL certificates + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] reloadssl + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/reloadtriggers.txt b/doc/source/modules/cassandra/examples/reloadtriggers.txt new file mode 100644 index 000000000000..47dda2eb4c03 --- /dev/null +++ b/doc/source/modules/cassandra/examples/reloadtriggers.txt @@ -0,0 +1,29 @@ +NAME + nodetool reloadtriggers - Reload trigger classes + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] reloadtriggers + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/relocatesstables.txt b/doc/source/modules/cassandra/examples/relocatesstables.txt new file mode 100644 index 000000000000..851db8049a94 --- /dev/null +++ b/doc/source/modules/cassandra/examples/relocatesstables.txt @@ -0,0 +1,42 @@ +NAME + nodetool relocatesstables - Relocates sstables to the correct disk + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] relocatesstables + [(-j | --jobs )] [--]
+ +OPTIONS + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to relocate simultanously, set to 0 to use all + available compaction threads + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace and table name + + diff --git a/doc/source/modules/cassandra/examples/removenode.txt b/doc/source/modules/cassandra/examples/removenode.txt new file mode 100644 index 000000000000..c8285c913caa --- /dev/null +++ b/doc/source/modules/cassandra/examples/removenode.txt @@ -0,0 +1,40 @@ +NAME + nodetool removenode - Show status of current node removal, force + completion of pending removal or remove provided ID + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] removenode [--] + || + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + || + Show status of current node removal, force completion of pending + removal, or remove provided ID + + diff --git a/doc/source/modules/cassandra/examples/repair.txt b/doc/source/modules/cassandra/examples/repair.txt new file mode 100644 index 000000000000..e570a8337421 --- /dev/null +++ b/doc/source/modules/cassandra/examples/repair.txt @@ -0,0 +1,103 @@ +NAME + nodetool repair - Repair one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] repair + [(-dc | --in-dc )...] + [(-dcpar | --dc-parallel)] [(-et | --end-token )] + [(-force | --force)] [(-full | --full)] + [(-hosts | --in-hosts )...] + [(-j | --job-threads )] + [(-local | --in-local-dc)] [(-os | --optimise-streams)] [(-pl | --pull)] + [(-pr | --partitioner-range)] [(-prv | --preview)] + [(-seq | --sequential)] + [(-st | --start-token )] [(-tr | --trace)] + [(-vd | --validate)] [--] [ ...] + +OPTIONS + -dc , --in-dc + Use -dc to repair specific datacenters + + -dcpar, --dc-parallel + Use -dcpar to repair data centers in parallel. + + -et , --end-token + Use -et to specify a token at which repair range ends (inclusive) + + -force, --force + Use -force to filter out down endpoints + + -full, --full + Use -full to issue a full repair. + + -h , --host + Node hostname or ip address + + -hosts , --in-hosts + Use -hosts to repair specific hosts + + -j , --job-threads + Number of threads to run repair jobs. Usually this means number of + CFs to repair concurrently. WARNING: increasing this puts more load + on repairing nodes, so be careful. (default: 1, max: 4) + + -local, --in-local-dc + Use -local to only repair against nodes in the same datacenter + + -os, --optimise-streams + Use --optimise-streams to try to reduce the number of streams we do + (EXPERIMENTAL, see CASSANDRA-3200). + + -p , --port + Remote jmx agent port number + + -pl, --pull + Use --pull to perform a one way repair where data is only streamed + from a remote node to this node. + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pr, --partitioner-range + Use -pr to repair only the first range returned by the partitioner + + -prv, --preview + Determine ranges and amount of data to be streamed, but don't + actually perform repair + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -seq, --sequential + Use -seq to carry out a sequential repair + + -st , --start-token + Use -st to specify a token at which the repair range starts + (exclusive) + + -tr, --trace + Use -tr to trace the repair. Traces are logged to + system_traces.events. + + -u , --username + Remote jmx agent username + + -vd, --validate + Checks that repaired data is in sync between nodes. Out of sync + repaired data indicates a full repair should be run. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/repair_admin.txt b/doc/source/modules/cassandra/examples/repair_admin.txt new file mode 100644 index 000000000000..71123ba31854 --- /dev/null +++ b/doc/source/modules/cassandra/examples/repair_admin.txt @@ -0,0 +1,43 @@ +NAME + nodetool repair_admin - list and fail incremental repair sessions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] repair_admin [(-a | --all)] + [(-f | --force)] [(-l | --list)] [(-x | --cancel )] + +OPTIONS + -a, --all + include completed and failed sessions + + -f, --force + cancel repair session from a node other than the repair coordinator. + Attempting to cancel FINALIZED or FAILED sessions is an error. + + -h , --host + Node hostname or ip address + + -l, --list + list repair sessions (default behavior) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -x , --cancel + cancel an incremental repair session + + diff --git a/doc/source/modules/cassandra/examples/replaybatchlog.txt b/doc/source/modules/cassandra/examples/replaybatchlog.txt new file mode 100644 index 000000000000..4425e7eb2383 --- /dev/null +++ b/doc/source/modules/cassandra/examples/replaybatchlog.txt @@ -0,0 +1,29 @@ +NAME + nodetool replaybatchlog - Kick off batchlog replay and wait for finish + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] replaybatchlog + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/resetfullquerylog.txt b/doc/source/modules/cassandra/examples/resetfullquerylog.txt new file mode 100644 index 000000000000..452b4a696d23 --- /dev/null +++ b/doc/source/modules/cassandra/examples/resetfullquerylog.txt @@ -0,0 +1,31 @@ +NAME + nodetool resetfullquerylog - Stop the full query log and clean files in + the configured full query log directory from cassandra.yaml as well as + JMX + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] resetfullquerylog + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/resetlocalschema.txt b/doc/source/modules/cassandra/examples/resetlocalschema.txt new file mode 100644 index 000000000000..01dcaddc64cc --- /dev/null +++ b/doc/source/modules/cassandra/examples/resetlocalschema.txt @@ -0,0 +1,29 @@ +NAME + nodetool resetlocalschema - Reset node's local schema and resync + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] resetlocalschema + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/resumehandoff.txt b/doc/source/modules/cassandra/examples/resumehandoff.txt new file mode 100644 index 000000000000..927c82efef51 --- /dev/null +++ b/doc/source/modules/cassandra/examples/resumehandoff.txt @@ -0,0 +1,29 @@ +NAME + nodetool resumehandoff - Resume hints delivery process + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] resumehandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/ring.txt b/doc/source/modules/cassandra/examples/ring.txt new file mode 100644 index 000000000000..d50e004ec39d --- /dev/null +++ b/doc/source/modules/cassandra/examples/ring.txt @@ -0,0 +1,42 @@ +NAME + nodetool ring - Print information about the token ring + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] ring [(-r | --resolve-ip)] + [--] [] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -r, --resolve-ip + Show node domain names instead of IPs + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Specify a keyspace for accurate ownership information (topology + awareness) + + diff --git a/doc/source/modules/cassandra/examples/scrub.txt b/doc/source/modules/cassandra/examples/scrub.txt new file mode 100644 index 000000000000..22b3ea7d2e10 --- /dev/null +++ b/doc/source/modules/cassandra/examples/scrub.txt @@ -0,0 +1,63 @@ +NAME + nodetool scrub - Scrub (rebuild sstables for) one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] scrub + [(-j | --jobs )] [(-n | --no-validate)] + [(-ns | --no-snapshot)] [(-r | --reinsert-overflowed-ttl)] + [(-s | --skip-corrupted)] [--] [ ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to scrub simultanously, set to 0 to use all + available compaction threads + + -n, --no-validate + Do not validate columns using column validator + + -ns, --no-snapshot + Scrubbed CFs will be snapshotted first, if disableSnapshot is false. + (default false) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -r, --reinsert-overflowed-ttl + Rewrites rows with overflowed expiration date affected by + CASSANDRA-14092 with the maximum supported expiration date of + 2038-01-19T03:14:06+00:00. The rows are rewritten with the original + timestamp incremented by one millisecond to override/supersede any + potential tombstone that may have been generated during compaction + of the affected rows. + + -s, --skip-corrupted + Skip corrupted partitions even when scrubbing counter tables. + (default false) + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/setbatchlogreplaythrottle.txt b/doc/source/modules/cassandra/examples/setbatchlogreplaythrottle.txt new file mode 100644 index 000000000000..a88af25dc24d --- /dev/null +++ b/doc/source/modules/cassandra/examples/setbatchlogreplaythrottle.txt @@ -0,0 +1,40 @@ +NAME + nodetool setbatchlogreplaythrottle - Set batchlog replay throttle in KB + per second, or 0 to disable throttling. This will be reduced + proportionally to the number of nodes in the cluster. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setbatchlogreplaythrottle [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in KB per second, 0 to disable throttling + + diff --git a/doc/source/modules/cassandra/examples/setcachecapacity.txt b/doc/source/modules/cassandra/examples/setcachecapacity.txt new file mode 100644 index 000000000000..57a5e77d7f2b --- /dev/null +++ b/doc/source/modules/cassandra/examples/setcachecapacity.txt @@ -0,0 +1,39 @@ +NAME + nodetool setcachecapacity - Set global key, row, and counter cache + capacities (in MB units) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setcachecapacity [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Key cache, row cache, and counter cache (in MB) + + diff --git a/doc/source/modules/cassandra/examples/setcachekeystosave.txt b/doc/source/modules/cassandra/examples/setcachekeystosave.txt new file mode 100644 index 000000000000..ec0eb4f10aea --- /dev/null +++ b/doc/source/modules/cassandra/examples/setcachekeystosave.txt @@ -0,0 +1,41 @@ +NAME + nodetool setcachekeystosave - Set number of keys saved by each cache for + faster post-restart warmup. 0 to disable + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setcachekeystosave [--] + + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + + The number of keys saved by each cache. 0 to disable + + diff --git a/doc/source/modules/cassandra/examples/setcompactionthreshold.txt b/doc/source/modules/cassandra/examples/setcompactionthreshold.txt new file mode 100644 index 000000000000..10071919c7f7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/setcompactionthreshold.txt @@ -0,0 +1,39 @@ +NAME + nodetool setcompactionthreshold - Set min and max compaction thresholds + for a given table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setcompactionthreshold [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace, the table, min and max threshold + + diff --git a/doc/source/modules/cassandra/examples/setcompactionthroughput.txt b/doc/source/modules/cassandra/examples/setcompactionthroughput.txt new file mode 100644 index 000000000000..c1b5efad2ab2 --- /dev/null +++ b/doc/source/modules/cassandra/examples/setcompactionthroughput.txt @@ -0,0 +1,39 @@ +NAME + nodetool setcompactionthroughput - Set the MB/s throughput cap for + compaction in the system, or 0 to disable throttling + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setcompactionthroughput [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in MB, 0 to disable throttling + + diff --git a/doc/source/modules/cassandra/examples/setconcurrency.txt b/doc/source/modules/cassandra/examples/setconcurrency.txt new file mode 100644 index 000000000000..ea0e3b3fbbc4 --- /dev/null +++ b/doc/source/modules/cassandra/examples/setconcurrency.txt @@ -0,0 +1,40 @@ +NAME + nodetool setconcurrency - Set maximum concurrency for processing stage + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setconcurrency [--] + | + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + | + + Set concurrency for processing stage + + diff --git a/doc/source/modules/cassandra/examples/setconcurrentcompactors.txt b/doc/source/modules/cassandra/examples/setconcurrentcompactors.txt new file mode 100644 index 000000000000..843ae72f5bb6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/setconcurrentcompactors.txt @@ -0,0 +1,39 @@ +NAME + nodetool setconcurrentcompactors - Set number of concurrent compactors + in the system. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setconcurrentcompactors [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Number of concurrent compactors, greater than 0. + + diff --git a/doc/source/modules/cassandra/examples/setconcurrentviewbuilders.txt b/doc/source/modules/cassandra/examples/setconcurrentviewbuilders.txt new file mode 100644 index 000000000000..9f2a23444b8b --- /dev/null +++ b/doc/source/modules/cassandra/examples/setconcurrentviewbuilders.txt @@ -0,0 +1,39 @@ +NAME + nodetool setconcurrentviewbuilders - Set the number of concurrent view + builders in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setconcurrentviewbuilders [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Number of concurrent view builders, greater than 0. + + diff --git a/doc/source/modules/cassandra/examples/sethintedhandoffthrottlekb.txt b/doc/source/modules/cassandra/examples/sethintedhandoffthrottlekb.txt new file mode 100644 index 000000000000..b588ba99adbd --- /dev/null +++ b/doc/source/modules/cassandra/examples/sethintedhandoffthrottlekb.txt @@ -0,0 +1,39 @@ +NAME + nodetool sethintedhandoffthrottlekb - Set hinted handoff throttle in kb + per second, per delivery thread. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] sethintedhandoffthrottlekb + [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in KB per second + + diff --git a/doc/source/modules/cassandra/examples/setinterdcstreamthroughput.txt b/doc/source/modules/cassandra/examples/setinterdcstreamthroughput.txt new file mode 100644 index 000000000000..a29f6a84f81d --- /dev/null +++ b/doc/source/modules/cassandra/examples/setinterdcstreamthroughput.txt @@ -0,0 +1,39 @@ +NAME + nodetool setinterdcstreamthroughput - Set the Mb/s throughput cap for + inter-datacenter streaming in the system, or 0 to disable throttling + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setinterdcstreamthroughput + [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in Mb, 0 to disable throttling + + diff --git a/doc/source/modules/cassandra/examples/setlogginglevel.txt b/doc/source/modules/cassandra/examples/setlogginglevel.txt new file mode 100644 index 000000000000..a798c68971a2 --- /dev/null +++ b/doc/source/modules/cassandra/examples/setlogginglevel.txt @@ -0,0 +1,42 @@ +NAME + nodetool setlogginglevel - Set the log level threshold for a given + component or class. Will reset to the initial configuration if called + with no parameters. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setlogginglevel [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The component or class to change the level for and the log level + threshold to set. Will reset to initial level if omitted. Available + components: bootstrap, compaction, repair, streaming, cql, ring + + diff --git a/doc/source/modules/cassandra/examples/setmaxhintwindow.txt b/doc/source/modules/cassandra/examples/setmaxhintwindow.txt new file mode 100644 index 000000000000..1289b1ac0a25 --- /dev/null +++ b/doc/source/modules/cassandra/examples/setmaxhintwindow.txt @@ -0,0 +1,38 @@ +NAME + nodetool setmaxhintwindow - Set the specified max hint window in ms + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setmaxhintwindow [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value of maxhintwindow in ms + + diff --git a/doc/source/modules/cassandra/examples/setstreamthroughput.txt b/doc/source/modules/cassandra/examples/setstreamthroughput.txt new file mode 100644 index 000000000000..2b61e5bd3cbb --- /dev/null +++ b/doc/source/modules/cassandra/examples/setstreamthroughput.txt @@ -0,0 +1,39 @@ +NAME + nodetool setstreamthroughput - Set the Mb/s throughput cap for streaming + in the system, or 0 to disable throttling + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setstreamthroughput [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in Mb, 0 to disable throttling + + diff --git a/doc/source/modules/cassandra/examples/settimeout.txt b/doc/source/modules/cassandra/examples/settimeout.txt new file mode 100644 index 000000000000..318b34e68c7c --- /dev/null +++ b/doc/source/modules/cassandra/examples/settimeout.txt @@ -0,0 +1,42 @@ +NAME + nodetool settimeout - Set the specified timeout in ms, or 0 to disable + timeout + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] settimeout [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Timeout type followed by value in ms (0 disables socket streaming + timeout). Type should be one of (read, range, write, counterwrite, + cascontention, truncate, internodeconnect, internodeuser, misc + (general rpc_timeout_in_ms)) + + diff --git a/doc/source/modules/cassandra/examples/settraceprobability.txt b/doc/source/modules/cassandra/examples/settraceprobability.txt new file mode 100644 index 000000000000..c0e4439105e2 --- /dev/null +++ b/doc/source/modules/cassandra/examples/settraceprobability.txt @@ -0,0 +1,40 @@ +NAME + nodetool settraceprobability - Sets the probability for tracing any + given request to value. 0 disables, 1 enables for all requests, 0 is the + default + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] settraceprobability [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Trace probability between 0 and 1 (ex: 0.2) + + diff --git a/doc/source/modules/cassandra/examples/sjk.txt b/doc/source/modules/cassandra/examples/sjk.txt new file mode 100644 index 000000000000..eab1e7bf9a25 --- /dev/null +++ b/doc/source/modules/cassandra/examples/sjk.txt @@ -0,0 +1,38 @@ +NAME + nodetool sjk - Run commands of 'Swiss Java Knife'. Run 'nodetool sjk + --help' for more information. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] sjk [--] [...] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Arguments passed as is to 'Swiss Java Knife'. + + diff --git a/doc/source/modules/cassandra/examples/snapshot.txt b/doc/source/modules/cassandra/examples/snapshot.txt new file mode 100644 index 000000000000..5a7119f2ae79 --- /dev/null +++ b/doc/source/modules/cassandra/examples/snapshot.txt @@ -0,0 +1,56 @@ +NAME + nodetool snapshot - Take a snapshot of specified keyspaces or a snapshot + of the specified table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] snapshot + [(-cf
| --column-family
| --table
)] + [(-kt | --kt-list | -kc | --kc.list )] + [(-sf | --skip-flush)] [(-t | --tag )] [--] [] + +OPTIONS + -cf
, --column-family
, --table
+ The table name (you must specify one and only one keyspace for using + this option) + + -h , --host + Node hostname or ip address + + -kt , --kt-list , -kc , --kc.list + The list of Keyspace.table to take snapshot.(you must not specify + only keyspace) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -sf, --skip-flush + Do not flush memtables before snapshotting (snapshot will not + contain unflushed data) + + -t , --tag + The name of the snapshot + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [] + List of keyspaces. By default, all keyspaces + + diff --git a/doc/source/modules/cassandra/examples/status.txt b/doc/source/modules/cassandra/examples/status.txt new file mode 100644 index 000000000000..45997fdb79d6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/status.txt @@ -0,0 +1,41 @@ +NAME + nodetool status - Print cluster information (state, load, IDs, ...) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] status [(-r | --resolve-ip)] + [--] [] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -r, --resolve-ip + Show node domain names instead of IPs + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [] + The keyspace name + + diff --git a/doc/source/modules/cassandra/examples/statusautocompaction.txt b/doc/source/modules/cassandra/examples/statusautocompaction.txt new file mode 100644 index 000000000000..05eb4bc37e5c --- /dev/null +++ b/doc/source/modules/cassandra/examples/statusautocompaction.txt @@ -0,0 +1,42 @@ +NAME + nodetool statusautocompaction - status of autocompaction of the given + keyspace and table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statusautocompaction + [(-a | --all)] [--] [ ...] + +OPTIONS + -a, --all + Show auto compaction status for each keyspace/table + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/statusbackup.txt b/doc/source/modules/cassandra/examples/statusbackup.txt new file mode 100644 index 000000000000..727e72a41302 --- /dev/null +++ b/doc/source/modules/cassandra/examples/statusbackup.txt @@ -0,0 +1,29 @@ +NAME + nodetool statusbackup - Status of incremental backup + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statusbackup + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/statusbinary.txt b/doc/source/modules/cassandra/examples/statusbinary.txt new file mode 100644 index 000000000000..05034de3bec0 --- /dev/null +++ b/doc/source/modules/cassandra/examples/statusbinary.txt @@ -0,0 +1,29 @@ +NAME + nodetool statusbinary - Status of native transport (binary protocol) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statusbinary + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/statusgossip.txt b/doc/source/modules/cassandra/examples/statusgossip.txt new file mode 100644 index 000000000000..35d8734132bd --- /dev/null +++ b/doc/source/modules/cassandra/examples/statusgossip.txt @@ -0,0 +1,29 @@ +NAME + nodetool statusgossip - Status of gossip + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statusgossip + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/statushandoff.txt b/doc/source/modules/cassandra/examples/statushandoff.txt new file mode 100644 index 000000000000..c48d8fc6ab62 --- /dev/null +++ b/doc/source/modules/cassandra/examples/statushandoff.txt @@ -0,0 +1,30 @@ +NAME + nodetool statushandoff - Status of storing future hints on the current + node + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statushandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/stop.txt b/doc/source/modules/cassandra/examples/stop.txt new file mode 100644 index 000000000000..ee0934989f70 --- /dev/null +++ b/doc/source/modules/cassandra/examples/stop.txt @@ -0,0 +1,46 @@ +NAME + nodetool stop - Stop compaction + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] stop + [(-id | --compaction-id )] [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -id , --compaction-id + Use -id to stop a compaction by the specified id. Ids can be found + in the transaction log files whose name starts with compaction_, + located in the table transactions folder. + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Supported types are COMPACTION, VALIDATION, CLEANUP, SCRUB, + UPGRADE_SSTABLES, INDEX_BUILD, TOMBSTONE_COMPACTION, ANTICOMPACTION, + VERIFY, VIEW_BUILD, INDEX_SUMMARY, RELOCATE, GARBAGE_COLLECT + + diff --git a/doc/source/modules/cassandra/examples/stopdaemon.txt b/doc/source/modules/cassandra/examples/stopdaemon.txt new file mode 100644 index 000000000000..c538203b5d9f --- /dev/null +++ b/doc/source/modules/cassandra/examples/stopdaemon.txt @@ -0,0 +1,29 @@ +NAME + nodetool stopdaemon - Stop cassandra daemon + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] stopdaemon + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/tablehistograms.txt b/doc/source/modules/cassandra/examples/tablehistograms.txt new file mode 100644 index 000000000000..1ebf4f095d55 --- /dev/null +++ b/doc/source/modules/cassandra/examples/tablehistograms.txt @@ -0,0 +1,38 @@ +NAME + nodetool tablehistograms - Print statistic histograms for a given table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] tablehistograms [--] + [
| ] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [
| ] + The keyspace and table name + + diff --git a/doc/source/modules/cassandra/examples/tablestats.txt b/doc/source/modules/cassandra/examples/tablestats.txt new file mode 100644 index 000000000000..fb0563c6f1a3 --- /dev/null +++ b/doc/source/modules/cassandra/examples/tablestats.txt @@ -0,0 +1,73 @@ +NAME + nodetool tablestats - Print statistics on tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] tablestats + [(-F | --format )] [(-H | --human-readable)] [-i] + [(-s | --sort )] [(-t | --top )] [--] + [...] + +OPTIONS + -F , --format + Output format (json, yaml) + + -h , --host + Node hostname or ip address + + -H, --human-readable + Display bytes in human readable form, i.e. KiB, MiB, GiB, TiB + + -i + Ignore the list of tables and display the remaining tables + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s , --sort + Sort tables by specified sort key + (average_live_cells_per_slice_last_five_minutes, + average_tombstones_per_slice_last_five_minutes, + bloom_filter_false_positives, bloom_filter_false_ratio, + bloom_filter_off_heap_memory_used, bloom_filter_space_used, + compacted_partition_maximum_bytes, compacted_partition_mean_bytes, + compacted_partition_minimum_bytes, + compression_metadata_off_heap_memory_used, dropped_mutations, + full_name, index_summary_off_heap_memory_used, local_read_count, + local_read_latency_ms, local_write_latency_ms, + maximum_live_cells_per_slice_last_five_minutes, + maximum_tombstones_per_slice_last_five_minutes, memtable_cell_count, + memtable_data_size, memtable_off_heap_memory_used, + memtable_switch_count, number_of_partitions_estimate, + off_heap_memory_used_total, pending_flushes, percent_repaired, + read_latency, reads, space_used_by_snapshots_total, space_used_live, + space_used_total, sstable_compression_ratio, sstable_count, + table_name, write_latency, writes) + + -t , --top + Show only the top K tables for the sort key (specify the number K of + tables to be shown + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + List of tables (or keyspace) names + + diff --git a/doc/source/modules/cassandra/examples/toppartitions.txt b/doc/source/modules/cassandra/examples/toppartitions.txt new file mode 100644 index 000000000000..0837d31ce4b6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/toppartitions.txt @@ -0,0 +1,47 @@ +NAME + nodetool toppartitions - Sample and print the most active partitions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] toppartitions [-a ] + [-k ] [-s ] [--] + +OPTIONS + -a + Comma separated list of samplers to use (Default: all) + + -h , --host + Node hostname or ip address + + -k + Number of the top samples to list (Default: 10) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s + Capacity of the sampler, higher for more accuracy (Default: 256) + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The keyspace, column family name, and duration in milliseconds + + diff --git a/doc/source/modules/cassandra/examples/tpstats.txt b/doc/source/modules/cassandra/examples/tpstats.txt new file mode 100644 index 000000000000..d3c4a20ff25c --- /dev/null +++ b/doc/source/modules/cassandra/examples/tpstats.txt @@ -0,0 +1,33 @@ +NAME + nodetool tpstats - Print usage statistics of thread pools + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] tpstats + [(-F | --format )] + +OPTIONS + -F , --format + Output format (json, yaml) + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/truncatehints.txt b/doc/source/modules/cassandra/examples/truncatehints.txt new file mode 100644 index 000000000000..367f19e1269a --- /dev/null +++ b/doc/source/modules/cassandra/examples/truncatehints.txt @@ -0,0 +1,40 @@ +NAME + nodetool truncatehints - Truncate all hints on the local node, or + truncate hints for the endpoint(s) specified. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] truncatehints [--] [endpoint + ... ] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [endpoint ... ] + Endpoint address(es) to delete hints for, either ip address + ("127.0.0.1") or hostname + + diff --git a/doc/source/modules/cassandra/examples/upgradesstables.txt b/doc/source/modules/cassandra/examples/upgradesstables.txt new file mode 100644 index 000000000000..f5cf0f1335cc --- /dev/null +++ b/doc/source/modules/cassandra/examples/upgradesstables.txt @@ -0,0 +1,49 @@ +NAME + nodetool upgradesstables - Rewrite sstables (for the requested tables) + that are not on the current version (thus upgrading them to said current + version) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] upgradesstables + [(-a | --include-all-sstables)] [(-j | --jobs )] [--] + [ ...] + +OPTIONS + -a, --include-all-sstables + Use -a to include all sstables, even those already on the current + version + + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to upgrade simultanously, set to 0 to use all + available compaction threads + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/verify.txt b/doc/source/modules/cassandra/examples/verify.txt new file mode 100644 index 000000000000..92572cbef8b8 --- /dev/null +++ b/doc/source/modules/cassandra/examples/verify.txt @@ -0,0 +1,58 @@ +NAME + nodetool verify - Verify (check data checksum for) one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] verify + [(-c | --check-version)] [(-d | --dfp)] [(-e | --extended-verify)] + [(-q | --quick)] [(-r | --rsc)] [(-t | --check-tokens)] [--] [ + ...] + +OPTIONS + -c, --check-version + Also check that all sstables are the latest version + + -d, --dfp + Invoke the disk failure policy if a corrupt sstable is found + + -e, --extended-verify + Verify each cell data, beyond simply checking sstable checksums + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -q, --quick + Do a quick check - avoid reading all data to verify checksums + + -r, --rsc + Mutate the repair status on corrupt sstables + + -t, --check-tokens + Verify that all tokens in sstables are owned by this node + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/examples/version.txt b/doc/source/modules/cassandra/examples/version.txt new file mode 100644 index 000000000000..9c5a7b4f9768 --- /dev/null +++ b/doc/source/modules/cassandra/examples/version.txt @@ -0,0 +1,29 @@ +NAME + nodetool version - Print cassandra version + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] version + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/examples/viewbuildstatus.txt b/doc/source/modules/cassandra/examples/viewbuildstatus.txt new file mode 100644 index 000000000000..30429c3fee3b --- /dev/null +++ b/doc/source/modules/cassandra/examples/viewbuildstatus.txt @@ -0,0 +1,38 @@ +NAME + nodetool viewbuildstatus - Show progress of a materialized view build + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] viewbuildstatus [--] + | + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + | + The keyspace and view name + + diff --git a/doc/source/modules/cassandra/nav.adoc b/doc/source/modules/cassandra/nav.adoc new file mode 100644 index 000000000000..fc50542e3d3a --- /dev/null +++ b/doc/source/modules/cassandra/nav.adoc @@ -0,0 +1,104 @@ +* Cassandra +** xref:getting_started/index.adoc[Getting Started] +*** xref:getting_started/installing.adoc[Installing Cassandra] +*** xref:getting_started/configuring.adoc[Configuring Cassandra] +*** xref:getting_started/querying.adoc[Inserting and querying] +*** xref:getting_started/drivers.adoc[Client drivers] +*** xref:getting_started/production.adoc[Production recommendations] + +** xref:new/index.adoc[What's new] +*** xref:new/java11.adoc[Support for Java 11] +*** xref:new/virtualtables.adoc[Virtual tables] +*** xref:new/auditlogging.adoc[Audit logging] +*** xref:new/fqllogging.adoc[Full query logging] +*** xref:new/messaging.adoc[Improved internode Messaging] +*** xref:new/streaming.adoc[Improved streaming] +*** xref:new/transientreplication.adoc[Transient replication] + +** xref:architecture/index.adoc[Architecture] +*** xref:architecture/overview.adoc[Overview] +*** xref:architecture/dynamo.adoc[Dynamo] +*** xref:architecture/storage_engine.adoc[Storage engine] +*** xref:architecture/guarantees.adoc[Guarantees] + +** xref:data_modeling/index.adoc[Data modeling] +*** xref:data_modeling/intro.adoc[Introduction] +*** xref:data_modeling/data_modeling_conceptual.adoc[Conceptual data modeling] +*** xref:data_modeling/data_modeling_rdbms.adoc[RDBMS design] +*** xref:data_modeling/data_modeling_queries.adoc[Defining application queries] +*** xref:data_modeling/data_modeling_logical.adoc[Logical data modeling] +*** xref:data_modeling/data_modeling_physical.adoc[Physical data modeling] +*** xref:data_modeling/data_modeling_refining.adoc[Evaluating and refining data models] +*** xref:data_modeling/data_modeling_schema.adoc[Defining database schema] +*** xref:data_modeling/data_modeling_tools.adoc[Cassandra data modeling tools] + +** xref:cql/index.adoc[Cassandra Query Language (CQL)] +*** xref:cql/definitions.adoc[Definitions] +*** xref:cql/types.adoc[Data types] +*** xref:cql/ddl.adoc[Data definition (DDL)] +*** xref:cql/dml.adoc[Data manipulation (DML)] +*** xref:cql/indexes.adoc[Secondary indexes] +*** xref:cql/mvs.adoc[Materialized views] +*** xref:cql/security.adoc[Security] +*** xref:cql/functions.adoc[Functions] +*** xref:cql/operators.adoc[Operators] +*** xref:cql/json.adoc[JSON] +*** xref:cql/triggers.adoc[Triggers] +*** xref:cql/appendices.adoc[Appendices] +*** xref:cql/changes.adoc[Changes] + +** xref:configuration/index.adoc[Configuration] +*** xref:configuration/cass_yaml_file.adoc[cassandra.yaml] +*** xref:configuration/cass_rackdc_file.adoc[cassandra-rackdc.properties] +*** xref:configuration/cass_env_sh_file.adoc[cassandra-env.sh] +*** xref:configuration/cass_topo_file.adoc[cassandra-topologies.properties] +*** xref:configuration/cass_cl_archive_file.adoc[commitlog-archiving.properties] +*** xref:configuration/cass_logback_xml_file.adoc[logback.xml] +*** xref:configuration/cass_jvm_options_file.adoc[jvm-* files] + +** xref:operating/index.adoc[Operating] +*** xref:operating/snitch.adoc[Snitches] +*** xref:operating/topo_changes.adoc[Topology changes] +*** xref:operating/repair.adoc[Repair] +*** xref:operating/read_repair.adoc[Read repair] +*** xref:operating/hints.adoc[Hints] +*** xref:operating/bloom_filters.adoc[Bloom filters] +*** xref:operating/compression.adoc[Compression] +*** xref:operating/cdc.adoc[Change Data Capture (CDC)] +*** xref:operating/backups.adoc[Backups] +*** xref:operating/bulk_loading.adoc[Bulk loading] +*** xref:operating/metrics.adoc[Metrics] +*** xref:operating/security.adoc[Security] +*** xref:operating/hardware.adoc[Hardware] +*** xref:operating/audit_logging.adoc[Audit logging] +*** xref:operating/compaction/index.adoc[Compaction] + +** xref:tools/index.adoc[Tools] +*** xref:tools/cqlsh.adoc[cqlsh: the CQL shell] +*** xref:tools/nodetool/nodetool.adoc[nodetool] +*** xref:tools/sstable/index.adoc[SSTable tools] +*** xref:tools/cassandra_stress.adoc[cassandra-stress] + +** xref:troubleshooting/index.adoc[Troubleshooting] +*** xref:troubleshooting/finding_nodes.adoc[Finding misbehaving nodes] +*** xref:troubleshooting/reading_logs.adoc[Reading Cassandra logs] +*** xref:troubleshooting/use_nodetool.adoc[Using nodetool] +*** xref:troubleshooting/use_tools.adoc[Using external tools to deep-dive] + +** xref:development/index.adoc[Development] +*** xref:development/gettingstarted.adoc[Getting started] +*** xref:development/ide.adoc[Building and IDE integration] +*** xref:development/testing.adoc[Testing] +*** xref:development/patches.adoc[Contributing code changes] +*** xref:development/code_style.adoc[Code style] +*** xref:development/how_to_review.adoc[Review checklist] +*** xref:development/how_to_commit.adoc[How to commit] +*** xref:development/documentation.adoc[Working on documentation] +*** xref:development/ci.adoc[Jenkins CI environment] +*** xref:development/dependencies.adoc[Dependency management] +*** xref:development/release_process.adoc[Release process] + +** xref:faq/index.adoc[FAQ] + +** xref:plugins/index.adoc[Plug-ins] + diff --git a/doc/source/modules/cassandra/pages/architecture/dynamo.adoc b/doc/source/modules/cassandra/pages/architecture/dynamo.adoc new file mode 100644 index 000000000000..e90390a7cbb8 --- /dev/null +++ b/doc/source/modules/cassandra/pages/architecture/dynamo.adoc @@ -0,0 +1,531 @@ += Dynamo + +Apache Cassandra relies on a number of techniques from Amazon's +http://courses.cse.tamu.edu/caverlee/csce438/readings/dynamo-paper.pdf[Dynamo] +distributed storage key-value system. Each node in the Dynamo system has +three main components: + +* Request coordination over a partitioned dataset +* Ring membership and failure detection +* A local persistence (storage) engine + +Cassandra primarily draws from the first two clustering components, +while using a storage engine based on a Log Structured Merge Tree +(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.44.2782&rep=rep1&type=pdf[LSM]). +In particular, Cassandra relies on Dynamo style: + +* Dataset partitioning using consistent hashing +* Multi-master replication using versioned data and tunable consistency +* Distributed cluster membership and failure detection via a gossip +protocol +* Incremental scale-out on commodity hardware + +Cassandra was designed this way to meet large-scale (PiB+) +business-critical storage requirements. In particular, as applications +demanded full global replication of petabyte scale datasets along with +always available low-latency reads and writes, it became imperative to +design a new kind of database model as the relational database systems +of the time struggled to meet the new requirements of global scale +applications. + +== Dataset Partitioning: Consistent Hashing + +Cassandra achieves horizontal scalability by +https://en.wikipedia.org/wiki/Partition_(database)[partitioning] all +data stored in the system using a hash function. Each partition is +replicated to multiple physical nodes, often across failure domains such +as racks and even datacenters. As every replica can independently accept +mutations to every key that it owns, every key must be versioned. Unlike +in the original Dynamo paper where deterministic versions and vector +clocks were used to reconcile concurrent updates to a key, Cassandra +uses a simpler last write wins model where every mutation is timestamped +(including deletes) and then the latest version of data is the "winning" +value. Formally speaking, Cassandra uses a Last-Write-Wins Element-Set +conflict-free replicated data type for each CQL row, or +https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type LWW-Element-Set_(Last-Write-Wins-Element-Set)[LWW-Element-Set +CRDT], to resolve conflicting mutations on replica sets. + +=== Consistent Hashing using a Token Ring + +Cassandra partitions data over storage nodes using a special form of +hashing called +https://en.wikipedia.org/wiki/Consistent_hashing[consistent hashing]. In +naive data hashing, you typically allocate keys to buckets by taking a +hash of the key modulo the number of buckets. For example, if you want +to distribute data to 100 nodes using naive hashing you might assign +every node to a bucket between 0 and 100, hash the input key modulo 100, +and store the data on the associated bucket. In this naive scheme, +however, adding a single node might invalidate almost all of the +mappings. + +Cassandra instead maps every node to one or more tokens on a continuous +hash ring, and defines ownership by hashing a key onto the ring and then +"walking" the ring in one direction, similar to the +https://pdos.csail.mit.edu/papers/chord:sigcomm01/chord_sigcomm.pdf[Chord] +algorithm. The main difference of consistent hashing to naive data +hashing is that when the number of nodes (buckets) to hash into changes, +consistent hashing only has to move a small fraction of the keys. + +For example, if we have an eight node cluster with evenly spaced tokens, +and a replication factor (RF) of 3, then to find the owning nodes for a +key we first hash that key to generate a token (which is just the hash +of the key), and then we "walk" the ring in a clockwise fashion until we +encounter three distinct nodes, at which point we have found all the +replicas of that key. This example of an eight node cluster with +gRF=3 can be visualized as follows: + +image::ring.svg[image] + +You can see that in a Dynamo like system, ranges of keys, also known as +*token ranges*, map to the same physical set of nodes. In this example, +all keys that fall in the token range excluding token 1 and including +token 2 (grange(t1, t2]) are stored on nodes 2, 3 and 4. + +=== Multiple Tokens per Physical Node (vnodes) + +Simple single token consistent hashing works well if you have many +physical nodes to spread data over, but with evenly spaced tokens and a +small number of physical nodes, incremental scaling (adding just a few +nodes of capacity) is difficult because there are no token selections +for new nodes that can leave the ring balanced. Cassandra seeks to avoid +token imbalance because uneven token ranges lead to uneven request load. +For example, in the previous example there is no way to add a ninth +token without causing imbalance; instead we would have to insert `8` +tokens in the midpoints of the existing ranges. + +The Dynamo paper advocates for the use of "virtual nodes" to solve this +imbalance problem. Virtual nodes solve the problem by assigning multiple +tokens in the token ring to each physical node. By allowing a single +physical node to take multiple positions in the ring, we can make small +clusters look larger and therefore even with a single physical node +addition we can make it look like we added many more nodes, effectively +taking many smaller pieces of data from more ring neighbors when we add +even a single node. + +Cassandra introduces some nomenclature to handle these concepts: + +* *Token*: A single position on the dynamo style hash +ring. +* *Endpoint*: A single physical IP and port on the network. +* *Host ID*: A unique identifier for a single "physical" node, usually +present at one gEndpoint and containing one or more +gTokens. +* *Virtual Node* (or *vnode*): A gToken on the hash ring +owned by the same physical node, one with the same gHost +ID. + +The mapping of *Tokens* to *Endpoints* gives rise to the *Token Map* +where Cassandra keeps track of what ring positions map to which physical +endpoints. For example, in the following figure we can represent an +eight node cluster using only four physical nodes by assigning two +tokens to every node: + +image::vnodes.svg[image] + +Multiple tokens per physical node provide the following benefits: + +[arabic] +. When a new node is added it accepts approximately equal amounts of +data from other nodes in the ring, resulting in equal distribution of +data across the cluster. +. When a node is decommissioned, it loses data roughly equally to other +members of the ring, again keeping equal distribution of data across the +cluster. +. If a node becomes unavailable, query load (especially token aware +query load), is evenly distributed across many other nodes. + +Multiple tokens, however, can also have disadvantages: + +[arabic] +. Every token introduces up to `2 * (RF - 1)` additional neighbors on +the token ring, which means that there are more combinations of node +failures where we lose availability for a portion of the token ring. The +more tokens you have, +https://jolynch.github.io/pdf/cassandra-availability-virtual.pdf[the +higher the probability of an outage]. +. Cluster-wide maintenance operations are often slowed. For example, as +the number of tokens per node is increased, the number of discrete +repair operations the cluster must do also increases. +. Performance of operations that span token ranges could be affected. + +Note that in Cassandra `2.x`, the only token allocation algorithm +available was picking random tokens, which meant that to keep balance +the default number of tokens per node had to be quite high, at `256`. +This had the effect of coupling many physical endpoints together, +increasing the risk of unavailability. That is why in `3.x +` the new +deterministic token allocator was added which intelligently picks tokens +such that the ring is optimally balanced while requiring a much lower +number of tokens per physical node. + +== Multi-master Replication: Versioned Data and Tunable Consistency + +Cassandra replicates every partition of data to many nodes across the +cluster to maintain high availability and durability. When a mutation +occurs, the coordinator hashes the partition key to determine the token +range the data belongs to and then replicates the mutation to the +replicas of that data according to the +`Replication Strategy`. + +All replication strategies have the notion of a *replication factor* +(`RF`), which indicates to Cassandra how many copies of the partition +should exist. For example with a `RF=3` keyspace, the data will be +written to three distinct *replicas*. Replicas are always chosen such +that they are distinct physical nodes which is achieved by skipping +virtual nodes if needed. Replication strategies may also choose to skip +nodes present in the same failure domain such as racks or datacenters so +that Cassandra clusters can tolerate failures of whole racks and even +datacenters of nodes. + +=== Replication Strategy + +Cassandra supports pluggable *replication strategies*, which determine +which physical nodes act as replicas for a given token range. Every +keyspace of data has its own replication strategy. All production +deployments should use the `NetworkTopologyStrategy` while the +`SimpleStrategy` replication strategy is useful only for testing +clusters where you do not yet know the datacenter layout of the cluster. + +[[network-topology-strategy]] +==== `NetworkTopologyStrategy` + +`NetworkTopologyStrategy` requires a specified replication factor +for each datacenter in the cluster. Even if your cluster only uses a +single datacenter, `NetworkTopologyStrategy` is recommended over +`SimpleStrategy` to make it easier to add new physical or virtual +datacenters to the cluster later, if required. + +In addition to allowing the replication factor to be specified +individually by datacenter, `NetworkTopologyStrategy` also attempts to +choose replicas within a datacenter from different racks as specified by +the `Snitch`. If the number of racks is greater than or equal +to the replication factor for the datacenter, each replica is guaranteed +to be chosen from a different rack. Otherwise, each rack will hold at +least one replica, but some racks may hold more than one. Note that this +rack-aware behavior has some potentially +https://issues.apache.org/jira/browse/CASSANDRA-3810[surprising +implications]. For example, if there are not an even number of nodes in +each rack, the data load on the smallest rack may be much higher. +Similarly, if a single node is bootstrapped into a brand new rack, it +will be considered a replica for the entire ring. For this reason, many +operators choose to configure all nodes in a single availability zone or +similar failure domain as a single "rack". + +[[simple-strategy]] +==== `SimpleStrategy` + +`SimpleStrategy` allows a single integer `replication_factor` to be +defined. This determines the number of nodes that should contain a copy +of each row. For example, if `replication_factor` is 3, then three +different nodes should store a copy of each row. + +`SimpleStrategy` treats all nodes identically, ignoring any configured +datacenters or racks. To determine the replicas for a token range, +Cassandra iterates through the tokens in the ring, starting with the +token range of interest. For each token, it checks whether the owning +node has been added to the set of replicas, and if it has not, it is +added to the set. This process continues until `replication_factor` +distinct nodes have been added to the set of replicas. + +==== Transient Replication + +Transient replication is an experimental feature in Cassandra {40_version} not +present in the original Dynamo paper. This feature allows configuration of a +subset of replicas to replicate only data that hasn't been incrementally +repaired. This configuration decouples data redundancy from availability. +For instance, if you have a keyspace replicated at RF=3, and alter it to +RF=5 with two transient replicas, you go from tolerating one +failed replica to tolerating two, without corresponding +increase in storage usage. Now, three nodes will replicate all +the data for a given token range, and the other two will only replicate +data that hasn't been incrementally repaired. + +To use transient replication, first enable the option in +`cassandra.yaml`. Once enabled, both `SimpleStrategy` and +`NetworkTopologyStrategy` can be configured to transiently replicate +data. Configure it by specifying replication factor as +`/` in the read path and +`Hinted handoff ` in the write path. + +These techniques are only best-effort, however, and to guarantee +eventual consistency Cassandra implements `anti-entropy +repair ` where replicas calculate hierarchical hash-trees over +their datasets called https://en.wikipedia.org/wiki/Merkle_tree[Merkle +trees] that can then be compared across replicas to identify mismatched +data. Like the original Dynamo paper Cassandra supports full repairs +where replicas hash their entire dataset, create Merkle trees, send them +to each other and sync any ranges that don't match. + +Unlike the original Dynamo paper, Cassandra also implements sub-range +repair and incremental repair. Sub-range repair allows Cassandra to +increase the resolution of the hash trees (potentially down to the +single partition level) by creating a larger number of trees that span +only a portion of the data range. Incremental repair allows Cassandra to +only repair the partitions that have changed since the last repair. + +=== Tunable Consistency + +Cassandra supports a per-operation tradeoff between consistency and +availability through *Consistency Levels*. Cassandra's consistency +levels are a version of Dynamo's `R + W > N` consistency mechanism where +operators could configure the number of nodes that must participate in +reads (`R`) and writes (`W`) to be larger than the replication factor +(`N`). In Cassandra, you instead choose from a menu of common +consistency levels which allow the operator to pick `R` and `W` behavior +without knowing the replication factor. Generally writes will be visible +to subsequent reads when the read consistency level contains enough +nodes to guarantee a quorum intersection with the write consistency +level. + +The following consistency levels are available: + +`ONE`:: + Only a single replica must respond. +`TWO`:: + Two replicas must respond. +`THREE`:: + Three replicas must respond. +`QUORUM`:: + A majority (n/2 + 1) of the replicas must respond. +`ALL`:: + All of the replicas must respond. +`LOCAL_QUORUM`:: + A majority of the replicas in the local datacenter (whichever + datacenter the coordinator is in) must respond. +`EACH_QUORUM`:: + A majority of the replicas in each datacenter must respond. +`LOCAL_ONE`:: + Only a single replica must respond. In a multi-datacenter cluster, + this also gaurantees that read requests are not sent to replicas in a + remote datacenter. +`ANY`:: + A single replica may respond, or the coordinator may store a hint. If + a hint is stored, the coordinator will later attempt to replay the + hint and deliver the mutation to the replicas. This consistency level + is only accepted for write operations. + +Write operations *are always sent to all replicas*, regardless of +consistency level. The consistency level simply controls how many +responses the coordinator waits for before responding to the client. + +For read operations, the coordinator generally only issues read commands +to enough replicas to satisfy the consistency level. The one exception +to this is when speculative retry may issue a redundant read request to +an extra replica if the original replicas have not responded within a +specified time window. + +==== Picking Consistency Levels + +It is common to pick read and write consistency levels such that the +replica sets overlap, resulting in all acknowledged writes being visible +to subsequent reads. This is typically expressed in the same terms +Dynamo does, in that `W + R > RF`, where `W` is the write consistency +level, `R` is the read consistency level, and `RF` is the replication +factor. For example, if `RF = 3`, a `QUORUM` request will require +responses from at least `2/3` replicas. If `QUORUM` is used for both +writes and reads, at least one of the replicas is guaranteed to +participate in _both_ the write and the read request, which in turn +guarantees that the quorums will overlap and the write will be visible +to the read. + +In a multi-datacenter environment, `LOCAL_QUORUM` can be used to provide +a weaker but still useful guarantee: reads are guaranteed to see the +latest write from within the same datacenter. This is often sufficient +as clients homed to a single datacenter will read their own writes. + +If this type of strong consistency isn't required, lower consistency +levels like `LOCAL_ONE` or `ONE` may be used to improve throughput, +latency, and availability. With replication spanning multiple +datacenters, `LOCAL_ONE` is typically less available than `ONE` but is +faster as a rule. Indeed `ONE` will succeed if a single replica is +available in any datacenter. + +== Distributed Cluster Membership and Failure Detection + +The replication protocols and dataset partitioning rely on knowing which +nodes are alive and dead in the cluster so that write and read +operations can be optimally routed. In Cassandra liveness information is +shared in a distributed fashion through a failure detection mechanism +based on a gossip protocol. + +=== Gossip + +Gossip is how Cassandra propagates basic cluster bootstrapping +information such as endpoint membership and internode network protocol +versions. In Cassandra's gossip system, nodes exchange state information +not only about themselves but also about other nodes they know about. +This information is versioned with a vector clock of +`(generation, version)` tuples, where the generation is a monotonic +timestamp and version is a logical clock the increments roughly every +second. These logical clocks allow Cassandra gossip to ignore old +versions of cluster state just by inspecting the logical clocks +presented with gossip messages. + +Every node in the Cassandra cluster runs the gossip task independently +and periodically. Every second, every node in the cluster: + +[arabic] +. Updates the local node's heartbeat state (the version) and constructs +the node's local view of the cluster gossip endpoint state. +. Picks a random other node in the cluster to exchange gossip endpoint +state with. +. Probabilistically attempts to gossip with any unreachable nodes (if +one exists) +. Gossips with a seed node if that didn't happen in step 2. + +When an operator first bootstraps a Cassandra cluster they designate +certain nodes as seed nodes. Any node can be a seed node and the only +difference between seed and non-seed nodes is seed nodes are allowed to +bootstrap into the ring without seeing any other seed nodes. +Furthermore, once a cluster is bootstrapped, seed nodes become +hotspots for gossip due to step 4 above. + +As non-seed nodes must be able to contact at least one seed node in +order to bootstrap into the cluster, it is common to include multiple +seed nodes, often one for each rack or datacenter. Seed nodes are often +chosen using existing off-the-shelf service discovery mechanisms. + +[NOTE] +.Note +==== +Nodes do not have to agree on the seed nodes, and indeed once a cluster +is bootstrapped, newly launched nodes can be configured to use any +existing nodes as seeds. The only advantage to picking the same nodes +as seeds is it increases their usefullness as gossip hotspots. +==== + +Currently, gossip also propagates token metadata and schema +_version_ information. This information forms the control plane for +scheduling data movements and schema pulls. For example, if a node sees +a mismatch in schema version in gossip state, it will schedule a schema +sync task with the other nodes. As token information propagates via +gossip it is also the control plane for teaching nodes which endpoints +own what data. + +=== Ring Membership and Failure Detection + +Gossip forms the basis of ring membership, but the *failure detector* +ultimately makes decisions about if nodes are `UP` or `DOWN`. Every node +in Cassandra runs a variant of the +https://www.computer.org/csdl/proceedings-article/srds/2004/22390066/12OmNvT2phv[Phi +Accrual Failure Detector], in which every node is constantly making an +independent decision of if their peer nodes are available or not. This +decision is primarily based on received heartbeat state. For example, if +a node does not see an increasing heartbeat from a node for a certain +amount of time, the failure detector "convicts" that node, at which +point Cassandra will stop routing reads to it (writes will typically be +written to hints). If/when the node starts heartbeating again, Cassandra +will try to reach out and connect, and if it can open communication +channels it will mark that node as available. + +[NOTE] +.Note +==== +`UP` and `DOWN` state are local node decisions and are not propagated with +gossip. Heartbeat state is propagated with gossip, but nodes will not +consider each other as `UP` until they can successfully message each +other over an actual network channel. +==== + +Cassandra will never remove a node from gossip state without +explicit instruction from an operator via a decommission operation or a +new node bootstrapping with a `replace_address_first_boot` option. This +choice is intentional to allow Cassandra nodes to temporarily fail +without causing data to needlessly re-balance. This also helps to +prevent simultaneous range movements, where multiple replicas of a token +range are moving at the same time, which can violate monotonic +consistency and can even cause data loss. + +== Incremental Scale-out on Commodity Hardware + +Cassandra scales-out to meet the requirements of growth in data size and +request rates. Scaling-out means adding additional nodes to the ring, +and every additional node brings linear improvements in compute and +storage. In contrast, scaling-up implies adding more capacity to the +existing database nodes. Cassandra is also capable of scale-up, and in +certain environments it may be preferable depending on the deployment. +Cassandra gives operators the flexibility to chose either scale-out or +scale-up. + +One key aspect of Dynamo that Cassandra follows is to attempt to run on +commodity hardware, and many engineering choices are made under this +assumption. For example, Cassandra assumes nodes can fail at any time, +auto-tunes to make the best use of CPU and memory resources available +and makes heavy use of advanced compression and caching techniques to +get the most storage out of limited memory and storage capabilities. + +=== Simple Query Model + +Cassandra, like Dynamo, chooses not to provide cross-partition +transactions that are common in SQL Relational Database Management +Systems (RDBMS). This both gives the programmer a simpler read and write +API, and allows Cassandra to more easily scale horizontally since +multi-partition transactions spanning multiple nodes are notoriously +difficult to implement and typically very latent. + +Instead, Cassanda chooses to offer fast, consistent, latency at any +scale for single partition operations, allowing retrieval of entire +partitions or only subsets of partitions based on primary key filters. +Furthermore, Cassandra does support single partition compare and swap +functionality via the lightweight transaction CQL API. + +=== Simple Interface for Storing Records + +Cassandra, in a slight departure from Dynamo, chooses a storage +interface that is more sophisticated then "simple key value" stores but +significantly less complex than SQL relational data models. Cassandra +presents a wide-column store interface, where partitions of data contain +multiple rows, each of which contains a flexible set of individually +typed columns. Every row is uniquely identified by the partition key and +one or more clustering keys, and every row can have as many columns as +needed. + +This allows users to flexibly add new columns to existing datasets as +new requirements surface. Schema changes involve only metadata changes +and run fully concurrently with live workloads. Therefore, users can +safely add columns to existing Cassandra databases while remaining +confident that query performance will not degrade. diff --git a/doc/source/modules/cassandra/pages/architecture/guarantees.adoc b/doc/source/modules/cassandra/pages/architecture/guarantees.adoc new file mode 100644 index 000000000000..3313a1140cf6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/architecture/guarantees.adoc @@ -0,0 +1,108 @@ += Guarantees + +Apache Cassandra is a highly scalable and reliable database. Cassandra +is used in web based applications that serve large number of clients and +the quantity of data processed is web-scale (Petabyte) large. Cassandra +makes some guarantees about its scalability, availability and +reliability. To fully understand the inherent limitations of a storage +system in an environment in which a certain level of network partition +failure is to be expected and taken into account when designing the +system it is important to first briefly introduce the CAP theorem. + +== What is CAP? + +According to the CAP theorem it is not possible for a distributed data +store to provide more than two of the following guarantees +simultaneously. + +* Consistency: Consistency implies that every read receives the most +recent write or errors out +* Availability: Availability implies that every request receives a +response. It is not guaranteed that the response contains the most +recent write or data. +* Partition tolerance: Partition tolerance refers to the tolerance of a +storage system to failure of a network partition. Even if some of the +messages are dropped or delayed the system continues to operate. + +CAP theorem implies that when using a network partition, with the +inherent risk of partition failure, one has to choose between +consistency and availability and both cannot be guaranteed at the same +time. CAP theorem is illustrated in Figure 1. + +image::Figure_1_guarantees.jpg[image] + +Figure 1. CAP Theorem + +High availability is a priority in web based applications and to this +objective Cassandra chooses Availability and Partition Tolerance from +the CAP guarantees, compromising on data Consistency to some extent. + +Cassandra makes the following guarantees. + +* High Scalability +* High Availability +* Durability +* Eventual Consistency of writes to a single table +* Lightweight transactions with linearizable consistency +* Batched writes across multiple tables are guaranteed to succeed +completely or not at all +* Secondary indexes are guaranteed to be consistent with their local +replicas data + +== High Scalability + +Cassandra is a highly scalable storage system in which nodes may be +added/removed as needed. Using gossip-based protocol a unified and +consistent membership list is kept at each node. + +== High Availability + +Cassandra guarantees high availability of data by implementing a +fault-tolerant storage system. Failure detection in a node is detected +using a gossip-based protocol. + +== Durability + +Cassandra guarantees data durability by using replicas. Replicas are +multiple copies of a data stored on different nodes in a cluster. In a +multi-datacenter environment the replicas may be stored on different +datacenters. If one replica is lost due to unrecoverable node/datacenter +failure the data is not completely lost as replicas are still available. + +== Eventual Consistency + +Meeting the requirements of performance, reliability, scalability and +high availability in production Cassandra is an eventually consistent +storage system. Eventually consistent implies that all updates reach all +replicas eventually. Divergent versions of the same data may exist +temporarily but they are eventually reconciled to a consistent state. +Eventual consistency is a tradeoff to achieve high availability and it +involves some read and write latencies. + +== Lightweight transactions with linearizable consistency + +Data must be read and written in a sequential order. Paxos consensus +protocol is used to implement lightweight transactions. Paxos protocol +implements lightweight transactions that are able to handle concurrent +operations using linearizable consistency. Linearizable consistency is +sequential consistency with real-time constraints and it ensures +transaction isolation with compare and set (CAS) transaction. With CAS +replica data is compared and data that is found to be out of date is set +to the most consistent value. Reads with linearizable consistency allow +reading the current state of the data, which may possibly be +uncommitted, without making a new addition or update. + +== Batched Writes + +The guarantee for batched writes across multiple tables is that they +will eventually succeed, or none will. Batch data is first written to +batchlog system data, and when the batch data has been successfully +stored in the cluster the batchlog data is removed. The batch is +replicated to another node to ensure the full batch completes in the +event the coordinator node fails. + +== Secondary Indexes + +A secondary index is an index on a column and is used to query a table +that is normally not queryable. Secondary indexes when built are +guaranteed to be consistent with their local replicas. diff --git a/doc/source/modules/cassandra/pages/architecture/images/ring.svg b/doc/source/modules/cassandra/pages/architecture/images/ring.svg new file mode 100644 index 000000000000..d0db8c579e3e --- /dev/null +++ b/doc/source/modules/cassandra/pages/architecture/images/ring.svg @@ -0,0 +1,11 @@ + + + + + ... + diff --git a/doc/source/modules/cassandra/pages/architecture/images/vnodes.svg b/doc/source/modules/cassandra/pages/architecture/images/vnodes.svg new file mode 100644 index 000000000000..71b4fa2d8b90 --- /dev/null +++ b/doc/source/modules/cassandra/pages/architecture/images/vnodes.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/doc/source/modules/cassandra/pages/architecture/index.adoc b/doc/source/modules/cassandra/pages/architecture/index.adoc new file mode 100644 index 000000000000..27c5173bbf9b --- /dev/null +++ b/doc/source/modules/cassandra/pages/architecture/index.adoc @@ -0,0 +1,8 @@ += Architecture + +This section describes the general architecture of Apache Cassandra. + +* xref:architecture/overview.adoc[Overview] +* xref:architecture/dynamo.adoc[Dynamo] +* xref:architecture/storage_engine.adoc[Storage Engine] +* xref:architecture/guarantees.adoc[Guarantees] diff --git a/doc/source/modules/cassandra/pages/architecture/overview.adoc b/doc/source/modules/cassandra/pages/architecture/overview.adoc new file mode 100644 index 000000000000..7e771e1b7402 --- /dev/null +++ b/doc/source/modules/cassandra/pages/architecture/overview.adoc @@ -0,0 +1,101 @@ += Overview +:exper: experimental + +Apache Cassandra is an open source, distributed, NoSQL database. It +presents a partitioned wide column storage model with eventually +consistent semantics. + +Apache Cassandra was initially designed at +https://www.cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf[Facebook] +using a staged event-driven architecture +(http://www.sosp.org/2001/papers/welsh.pdf[SEDA]) to implement a +combination of Amazon’s +http://courses.cse.tamu.edu/caverlee/csce438/readings/dynamo-paper.pdf[Dynamo] +distributed storage and replication techniques and Google's +https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf[Bigtable] +data and storage engine model. Dynamo and Bigtable were both developed +to meet emerging requirements for scalable, reliable and highly +available storage systems, but each had areas that could be improved. + +Cassandra was designed as a best-in-class combination of both systems to +meet emerging largescale, both in data footprint and query volume, +storage requirements. As applications began to require full global +replication and always available low-latency reads and writes, it became +imperative to design a new kind of database model as the relational +database systems of the time struggled to meet the new requirements of +global scale applications. + +Systems like Cassandra are designed for these challenges and seek the +following design objectives: + +* Full multi-master database replication +* Global availability at low latency +* Scaling out on commodity hardware +* Linear throughput increase with each additional processor +* Online load balancing and cluster growth +* Partitioned key-oriented queries +* Flexible schema + +== Features + +Cassandra provides the Cassandra Query Language (xref:cql/ddl.adoc[CQL]), an SQL-like +language, to create and update database schema and access data. CQL +allows users to organize data within a cluster of Cassandra nodes using: + +* *Keyspace*: defines how a dataset is replicated, for example in which +datacenters and how many copies. Keyspaces contain tables. +* *Table*: defines the typed schema for a collection of partitions. +Cassandra tables have flexible addition of new columns to tables with +zero downtime. Tables contain partitions, which contain partitions, +which contain columns. +* *Partition*: defines the mandatory part of the primary key all rows in +Cassandra must have. All performant queries supply the partition key in +the query. +* *Row*: contains a collection of columns identified by a unique primary +key made up of the partition key and optionally additional clustering +keys. +* *Column*: A single datum with a type which belong to a row. + +CQL supports numerous advanced features over a partitioned dataset such +as: + +* Single partition lightweight transactions with atomic compare and set +semantics. +* User-defined types, functions and aggregates +* Collection types including sets, maps, and lists. +* Local secondary indices +* (Experimental) materialized views + +Cassandra explicitly chooses not to implement operations that require +cross partition coordination as they are typically slow and hard to +provide highly available global semantics. For example Cassandra does +not support: + +* Cross partition transactions +* Distributed joins +* Foreign keys or referential integrity. + +== Operating + +Apache Cassandra configuration settings are configured in the +`cassandra.yaml` file that can be edited by hand or with the aid of +configuration management tools. Some settings can be manipulated live +using an online interface, but others require a restart of the database +to take effect. + +Cassandra provides tools for managing a cluster. The `nodetool` command +interacts with Cassandra's live control interface, allowing runtime +manipulation of many settings from `cassandra.yaml`. The +`auditlogviewer` is used to view the audit logs. The `fqltool` is used +to view, replay and compare full query logs. The `auditlogviewer` and +`fqltool` are new tools in Apache Cassandra {40_version}. + +In addition, Cassandra supports out of the box atomic snapshot +functionality, which presents a point in time snapshot of Cassandra's +data for easy integration with many backup tools. Cassandra also +supports incremental backups where data can be backed up as it is +written. + +Apache Cassandra {40_version} has added several new features including virtual +tables, transient replication ({exper}), audit logging, full query logging, and +support for Java 11 ({exper}). diff --git a/doc/source/modules/cassandra/pages/architecture/storage_engine.adoc b/doc/source/modules/cassandra/pages/architecture/storage_engine.adoc new file mode 100644 index 000000000000..77c52e5d52f1 --- /dev/null +++ b/doc/source/modules/cassandra/pages/architecture/storage_engine.adoc @@ -0,0 +1,225 @@ += Storage Engine + +[[commit-log]] +== CommitLog + +Commitlogs are an append only log of all mutations local to a Cassandra +node. Any data written to Cassandra will first be written to a commit +log before being written to a memtable. This provides durability in the +case of unexpected shutdown. On startup, any mutations in the commit log +will be applied to memtables. + +All mutations write optimized by storing in commitlog segments, reducing +the number of seeks needed to write to disk. Commitlog Segments are +limited by the `commitlog_segment_size_in_mb` option, once the size is +reached, a new commitlog segment is created. Commitlog segments can be +archived, deleted, or recycled once all its data has been flushed to +SSTables. Commitlog segments are truncated when Cassandra has written +data older than a certain point to the SSTables. Running "nodetool +drain" before stopping Cassandra will write everything in the memtables +to SSTables and remove the need to sync with the commitlogs on startup. + +* `commitlog_segment_size_in_mb`: The default size is 32, which is +almost always fine, but if you are archiving commitlog segments (see +commitlog_archiving.properties), then you probably want a finer +granularity of archiving; 8 or 16 MB is reasonable. Max mutation size is +also configurable via `max_mutation_size_in_kb` setting in `cassandra.yaml`. +The default is half the size `commitlog_segment_size_in_mb * 1024`. + +**NOTE: If `max_mutation_size_in_kb` is set explicitly then +`commitlog_segment_size_in_mb` must be set to at least twice the size of +`max_mutation_size_in_kb / 1024`**. + +Commitlogs are an append only log of all mutations local to a Cassandra +node. Any data written to Cassandra will first be written to a commit +log before being written to a memtable. This provides durability in the +case of unexpected shutdown. On startup, any mutations in the commit log +will be applied. + +* `commitlog_sync`: may be either _periodic_ or _batch_. +** `batch`: In batch mode, Cassandra won’t ack writes until the commit +log has been fsynced to disk. It will wait +"commitlog_sync_batch_window_in_ms" milliseconds between fsyncs. This +window should be kept short because the writer threads will be unable to +do extra work while waiting. You may need to increase concurrent_writes +for the same reason. ++ +- `commitlog_sync_batch_window_in_ms`: Time to wait between "batch" +fsyncs _Default Value:_ 2 +** `periodic`: In periodic mode, writes are immediately ack'ed, and the +CommitLog is simply synced every "commitlog_sync_period_in_ms" +milliseconds. ++ +- `commitlog_sync_period_in_ms`: Time to wait between "periodic" fsyncs +_Default Value:_ 10000 + +_Default Value:_ batch + +** NOTE: In the event of an unexpected shutdown, Cassandra can lose up +to the sync period or more if the sync is delayed. If using "batch" +mode, it is recommended to store commitlogs in a separate, dedicated +device.* + +* `commitlog_directory`: This option is commented out by default When +running on magnetic HDD, this should be a separate spindle than the data +directories. If not set, the default directory is +$CASSANDRA_HOME/data/commitlog. + +_Default Value:_ /var/lib/cassandra/commitlog + +* `commitlog_compression`: Compression to apply to the commitlog. If +omitted, the commit log will be written uncompressed. LZ4, Snappy, +Deflate and Zstd compressors are supported. + +(Default Value: (complex option): + +[source, yaml] +---- +# - class_name: LZ4Compressor +# parameters: +---- + +* `commitlog_total_space_in_mb`: Total space to use for commit logs on +disk. + +If space gets above this value, Cassandra will flush every dirty CF in +the oldest segment and remove it. So a small total commitlog space will +tend to cause more flush activity on less-active columnfamilies. + +The default value is the smaller of 8192, and 1/4 of the total space of +the commitlog volume. + +_Default Value:_ 8192 + +== Memtables + +Memtables are in-memory structures where Cassandra buffers writes. In +general, there is one active memtable per table. Eventually, memtables +are flushed onto disk and become immutable link:#sstables[SSTables]. +This can be triggered in several ways: + +* The memory usage of the memtables exceeds the configured threshold +(see `memtable_cleanup_threshold`) +* The `commit-log` approaches its maximum size, and forces memtable +flushes in order to allow commitlog segments to be freed + +Memtables may be stored entirely on-heap or partially off-heap, +depending on `memtable_allocation_type`. + +== SSTables + +SSTables are the immutable data files that Cassandra uses for persisting +data on disk. + +As SSTables are flushed to disk from `memtables` or are streamed from +other nodes, Cassandra triggers compactions which combine multiple +SSTables into one. Once the new SSTable has been written, the old +SSTables can be removed. + +Each SSTable is comprised of multiple components stored in separate +files: + +`Data.db`:: + The actual data, i.e. the contents of rows. +`Index.db`:: + An index from partition keys to positions in the `Data.db` file. For + wide partitions, this may also include an index to rows within a + partition. +`Summary.db`:: + A sampling of (by default) every 128th entry in the `Index.db` file. +`Filter.db`:: + A Bloom Filter of the partition keys in the SSTable. +`CompressionInfo.db`:: + Metadata about the offsets and lengths of compression chunks in the + `Data.db` file. +`Statistics.db`:: + Stores metadata about the SSTable, including information about + timestamps, tombstones, clustering keys, compaction, repair, + compression, TTLs, and more. +`Digest.crc32`:: + A CRC-32 digest of the `Data.db` file. +`TOC.txt`:: + A plain text list of the component files for the SSTable. + +Within the `Data.db` file, rows are organized by partition. These +partitions are sorted in token order (i.e. by a hash of the partition +key when the default partitioner, `Murmur3Partition`, is used). Within a +partition, rows are stored in the order of their clustering keys. + +SSTables can be optionally compressed using block-based compression. + +== SSTable Versions + +This section was created using the following +https://gist.github.com/shyamsalimkumar/49a61e5bc6f403d20c55[gist] which +utilized this original +http://www.bajb.net/2013/03/cassandra-sstable-format-version-numbers/[source]. + +The version numbers, to date are: + +=== Version 0 + +* b (0.7.0): added version to sstable filenames +* c (0.7.0): bloom filter component computes hashes over raw key bytes +instead of strings +* d (0.7.0): row size in data component becomes a long instead of int +* e (0.7.0): stores undecorated keys in data and index components +* f (0.7.0): switched bloom filter implementations in data component +* g (0.8): tracks flushed-at context in metadata component + +=== Version 1 + +* h (1.0): tracks max client timestamp in metadata component +* hb (1.0.3): records compression ration in metadata component +* hc (1.0.4): records partitioner in metadata component +* hd (1.0.10): includes row tombstones in maxtimestamp +* he (1.1.3): includes ancestors generation in metadata component +* hf (1.1.6): marker that replay position corresponds to 1.1.5+ +millis-based id (see CASSANDRA-4782) +* ia (1.2.0): +** column indexes are promoted to the index file +** records estimated histogram of deletion times in tombstones +** bloom filter (keys and columns) upgraded to Murmur3 +* ib (1.2.1): tracks min client timestamp in metadata component +* ic (1.2.5): omits per-row bloom filter of column names + +=== Version 2 + +* ja (2.0.0): +** super columns are serialized as composites (note that there is no +real format change, this is mostly a marker to know if we should expect +super columns or not. We do need a major version bump however, because +we should not allow streaming of super columns into this new format) +** tracks max local deletiontime in sstable metadata +** records bloom_filter_fp_chance in metadata component +** remove data size and column count from data file (CASSANDRA-4180) +** tracks max/min column values (according to comparator) +* jb (2.0.1): +** switch from crc32 to adler32 for compression checksums +** checksum the compressed data +* ka (2.1.0): +** new Statistics.db file format +** index summaries can be downsampled and the sampling level is +persisted +** switch uncompressed checksums to adler32 +** tracks presense of legacy (local and remote) counter shards +* la (2.2.0): new file name format +* lb (2.2.7): commit log lower bound included + +=== Version 3 + +* ma (3.0.0): +** swap bf hash order +** store rows natively +* mb (3.0.7, 3.7): commit log lower bound included +* mc (3.0.8, 3.9): commit log intervals included + +=== Example Code + +The following example is useful for finding all sstables that do not +match the "ib" SSTable version + +[source,bash] +---- +include:example$find_sstables.sh[] +---- diff --git a/doc/source/modules/cassandra/pages/configuration/cass_cl_archive_file.adoc b/doc/source/modules/cassandra/pages/configuration/cass_cl_archive_file.adoc new file mode 100644 index 000000000000..f7b07887ed23 --- /dev/null +++ b/doc/source/modules/cassandra/pages/configuration/cass_cl_archive_file.adoc @@ -0,0 +1,48 @@ +[[cassandra-cl-archive]] +== commitlog-archiving.properties file + +The `commitlog-archiving.properties` configuration file can optionally +set commands that are executed when archiving or restoring a commitlog +segment. + +== Options + +`archive_command=` ------One command can be inserted with %path +and %name arguments. %path is the fully qualified path of the commitlog +segment to archive. %name is the filename of the commitlog. STDOUT, +STDIN, or multiple commands cannot be executed. If multiple commands are +required, add a pointer to a script in this option. + +*Example:* archive_command=/bin/ln %path /backup/%name + +*Default value:* blank + +`restore_command=` ------One command can be inserted with %from +and %to arguments. %from is the fully qualified path to an archived +commitlog segment using the specified restore directories. %to defines +the directory to the live commitlog location. + +*Example:* restore_command=/bin/cp -f %from %to + +*Default value:* blank + +`restore_directories=` ------Defines the directory to scan +the recovery files into. + +*Default value:* blank + +`restore_point_in_time=` ------Restore mutations created up +to and including this timestamp in GMT in the format +`yyyy:MM:dd HH:mm:ss`. Recovery will continue through the segment when +the first client-supplied timestamp greater than this time is +encountered, but only mutations less than or equal to this timestamp +will be applied. + +*Example:* 2020:04:31 20:43:12 + +*Default value:* blank + +`precision=` ------Precision of the timestamp used +in the inserts. Choice is generally MILLISECONDS or MICROSECONDS + +*Default value:* MICROSECONDS diff --git a/doc/source/modules/cassandra/pages/configuration/cass_env_sh_file.adoc b/doc/source/modules/cassandra/pages/configuration/cass_env_sh_file.adoc new file mode 100644 index 000000000000..d895186246e5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/configuration/cass_env_sh_file.adoc @@ -0,0 +1,162 @@ += cassandra-env.sh file + +The `cassandra-env.sh` bash script file can be used to pass additional +options to the Java virtual machine (JVM), such as maximum and minimum +heap size, rather than setting them in the environment. If the JVM +settings are static and do not need to be computed from the node +characteristics, the `cassandra-jvm-options` files should be used +instead. For example, commonly computed values are the heap sizes, using +the system values. + +For example, add +`JVM_OPTS="$JVM_OPTS -Dcassandra.load_ring_state=false"` to the +`cassandra_env.sh` file and run the command-line `cassandra` to start. +The option is set from the `cassandra-env.sh` file, and is equivalent to +starting Cassandra with the command-line option +`cassandra -Dcassandra.load_ring_state=false`. + +The `-D` option specifies the start-up parameters in both the command +line and `cassandra-env.sh` file. The following options are available: + +== `cassandra.auto_bootstrap=false` + +Facilitates setting auto_bootstrap to false on initial set-up of the +cluster. The next time you start the cluster, you do not need to change +the `cassandra.yaml` file on each node to revert to true, the default +value. + +== `cassandra.available_processors=` + +In a multi-instance deployment, multiple Cassandra instances will +independently assume that all CPU processors are available to it. This +setting allows you to specify a smaller set of processors. + +== `cassandra.boot_without_jna=true` + +If JNA fails to initialize, Cassandra fails to boot. Use this command to +boot Cassandra without JNA. + +== `cassandra.config=` + +The directory location of the `cassandra.yaml file`. The default +location depends on the type of installation. + +== `cassandra.ignore_dynamic_snitch_severity=true|false` + +Setting this property to true causes the dynamic snitch to ignore the +severity indicator from gossip when scoring nodes. Explore failure +detection and recovery and dynamic snitching for more information. + +*Default:* false + +== `cassandra.initial_token=` + +Use when virtual nodes (vnodes) are not used. Sets the initial +partitioner token for a node the first time the node is started. Note: +Vnodes are highly recommended as they automatically select tokens. + +*Default:* disabled + +== `cassandra.join_ring=true|false` + +Set to false to start Cassandra on a node but not have the node join the +cluster. You can use `nodetool join` and a JMX call to join the ring +afterwards. + +*Default:* true + +== `cassandra.load_ring_state=true|false` + +Set to false to clear all gossip state for the node on restart. + +*Default:* true + +== `cassandra.metricsReporterConfigFile=` + +Enable pluggable metrics reporter. Explore pluggable metrics reporting +for more information. + +== `cassandra.partitioner=` + +Set the partitioner. + +*Default:* org.apache.cassandra.dht.Murmur3Partitioner + +== `cassandra.prepared_statements_cache_size_in_bytes=` + +Set the cache size for prepared statements. + +== `cassandra.replace_address=|` + +To replace a node that has died, restart a new node in its place +specifying the `listen_address` or `broadcast_address` that the new node +is assuming. The new node must not have any data in its data directory, +the same state as before bootstrapping. Note: The `broadcast_address` +defaults to the `listen_address` except when using the +`Ec2MultiRegionSnitch`. + +== `cassandra.replayList=
` + +Allow restoring specific tables from an archived commit log. + +== `cassandra.ring_delay_ms=` + +Defines the amount of time a node waits to hear from other nodes before +formally joining the ring. + +*Default:* 1000ms + +== `cassandra.native_transport_port=` + +Set the port on which the CQL native transport listens for clients. + +*Default:* 9042 + +== `cassandra.rpc_port=` + +Set the port for the Thrift RPC service, which is used for client +connections. + +*Default:* 9160 + +== `cassandra.storage_port=` + +Set the port for inter-node communication. + +*Default:* 7000 + +== `cassandra.ssl_storage_port=` + +Set the SSL port for encrypted communication. + +*Default:* 7001 + +== `cassandra.start_native_transport=true|false` + +Enable or disable the native transport server. See +`start_native_transport` in `cassandra.yaml`. + +*Default:* true + +== `cassandra.start_rpc=true|false` + +Enable or disable the Thrift RPC server. + +*Default:* true + +== `cassandra.triggers_dir=` + +Set the default location for the trigger JARs. + +*Default:* conf/triggers + +== `cassandra.write_survey=true` + +For testing new compaction and compression strategies. It allows you to +experiment with different strategies and benchmark write performance +differences without affecting the production workload. + +== `consistent.rangemovement=true|false` + +Set to true makes Cassandra perform bootstrap safely without violating +consistency. False disables this. diff --git a/doc/source/modules/cassandra/pages/configuration/cass_jvm_options_file.adoc b/doc/source/modules/cassandra/pages/configuration/cass_jvm_options_file.adoc new file mode 100644 index 000000000000..b9a312c34092 --- /dev/null +++ b/doc/source/modules/cassandra/pages/configuration/cass_jvm_options_file.adoc @@ -0,0 +1,22 @@ += jvm-* files + +Several files for JVM configuration are included in Cassandra. The +`jvm-server.options` file, and corresponding files `jvm8-server.options` +and `jvm11-server.options` are the main file for settings that affect +the operation of the Cassandra JVM on cluster nodes. The file includes +startup parameters, general JVM settings such as garbage collection, and +heap settings. The `jvm-clients.options` and corresponding +`jvm8-clients.options` and `jvm11-clients.options` files can be used to +configure JVM settings for clients like `nodetool` and the `sstable` +tools. + +See each file for examples of settings. + +[NOTE] +.Note +==== +The `jvm-*` files replace the `cassandra-envsh` file used in Cassandra +versions prior to Cassandra 3.0. The `cassandra-env.sh` bash script file +is still useful if JVM settings must be dynamically calculated based on +system settings. The `jvm-*` files only store static JVM settings. +==== diff --git a/doc/source/modules/cassandra/pages/configuration/cass_logback_xml_file.adoc b/doc/source/modules/cassandra/pages/configuration/cass_logback_xml_file.adoc new file mode 100644 index 000000000000..e673622099d6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/configuration/cass_logback_xml_file.adoc @@ -0,0 +1,166 @@ += logback.xml file + +The `logback.xml` configuration file can optionally set logging levels +for the logs written to `system.log` and `debug.log`. The logging levels +can also be set using `nodetool setlogginglevels`. + +== Options + +=== `appender name=""...` + +Specify log type and settings. Possible appender names are: `SYSTEMLOG`, +`DEBUGLOG`, `ASYNCDEBUGLOG`, and `STDOUT`. `SYSTEMLOG` ensures that WARN +and ERROR message are written synchronously to the specified file. +`DEBUGLOG` and `ASYNCDEBUGLOG` ensure that DEBUG messages are written +either synchronously or asynchronously, respectively, to the specified +file. `STDOUT` writes all messages to the console in a human-readable +format. + +*Example:* + +=== ` ` + +Specify the filename for a log. + +*Example:* $\{cassandra.logdir}/system.log + +=== ` ` + +Specify the level for a log. Part of the filter. Levels are: `ALL`, +`TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, `OFF`. `TRACE` creates the +most verbose log, `ERROR` the least. + +[NOTE] +.Note +==== +Note: Increasing logging levels can generate heavy logging output on +a moderately trafficked cluster. You can use the +`nodetool getlogginglevels` command to see the current logging +configuration. +==== + +*Default:* INFO + +*Example:* INFO + +=== ` ... ` + +Specify the policy for rolling logs over to an archive. + +*Example:* + +=== ` ` + +Specify the pattern information for rolling over the log to archive. +Part of the rolling policy. + +*Example:* +$\{cassandra.logdir}/system.log.%d\{yyyy-MM-dd}.%i.zip + +=== ` ` + +Specify the maximum file size to trigger rolling a log. Part of the +rolling policy. + +*Example:* 50MB + +=== ` ` + +Specify the maximum history in days to trigger rolling a log. Part of +the rolling policy. + +*Example:* 7 + +=== ` ... ` + +Specify the format of the message. Part of the rolling policy. + +*Example:* 7 *Example:* +%-5level [%thread] %date\{ISO8601} %F:%L - %msg%n + + +=== Contents of default `logback.xml` + +[source,XML] +---- + + + + + + + + + + INFO + + ${cassandra.logdir}/system.log + + + ${cassandra.logdir}/system.log.%d{yyyy-MM-dd}.%i.zip + + 50MB + 7 + 5GB + + + %-5level [%thread] %date{ISO8601} %F:%L - %msg%n + + + + + + + ${cassandra.logdir}/debug.log + + + ${cassandra.logdir}/debug.log.%d{yyyy-MM-dd}.%i.zip + + 50MB + 7 + 5GB + + + %-5level [%thread] %date{ISO8601} %F:%L - %msg%n + + + + + + + 1024 + 0 + true + + + + + + + + INFO + + + %-5level [%thread] %date{ISO8601} %F:%L - %msg%n + + + + + + + + + + + + + + + +---- diff --git a/doc/source/modules/cassandra/pages/configuration/cass_rackdc_file.adoc b/doc/source/modules/cassandra/pages/configuration/cass_rackdc_file.adoc new file mode 100644 index 000000000000..0b370c9cc591 --- /dev/null +++ b/doc/source/modules/cassandra/pages/configuration/cass_rackdc_file.adoc @@ -0,0 +1,79 @@ += cassandra-rackdc.properties file + +Several `snitch` options use the `cassandra-rackdc.properties` +configuration file to determine which `datacenters` and racks cluster +nodes belong to. Information about the network topology allows requests +to be routed efficiently and to distribute replicas evenly. The +following snitches can be configured here: + +* GossipingPropertyFileSnitch +* AWS EC2 single-region snitch +* AWS EC2 multi-region snitch + +The GossipingPropertyFileSnitch is recommended for production. This +snitch uses the datacenter and rack information configured in a local +node's `cassandra-rackdc.properties` file and propagates the information +to other nodes using `gossip`. It is the default snitch and the settings +in this properties file are enabled. + +The AWS EC2 snitches are configured for clusters in AWS. This snitch +uses the `cassandra-rackdc.properties` options to designate one of two +AWS EC2 datacenter and rack naming conventions: + +* legacy: Datacenter name is the part of the availability zone name +preceding the last "-" when the zone ends in -1 and includes the number +if not -1. Rack name is the portion of the availability zone name +following the last "-". ++ +____ +Examples: us-west-1a => dc: us-west, rack: 1a; us-west-2b => dc: +us-west-2, rack: 2b; +____ +* standard: Datacenter name is the standard AWS region name, including +the number. Rack name is the region plus the availability zone letter. ++ +____ +Examples: us-west-1a => dc: us-west-1, rack: us-west-1a; us-west-2b => +dc: us-west-2, rack: us-west-2b; +____ + +Either snitch can set to use the local or internal IP address when +multiple datacenters are not communicating. + +== GossipingPropertyFileSnitch + +=== `dc` + +Name of the datacenter. The value is case-sensitive. + +*Default value:* DC1 + +=== `rack` + +Rack designation. The value is case-sensitive. + +*Default value:* RAC1 + +== AWS EC2 snitch + +=== `ec2_naming_scheme` + +Datacenter and rack naming convention. Options are `legacy` or +`standard` (default). *This option is commented out by default.* + +*Default value:* standard + +[NOTE] +.Note +==== +YOU MUST USE THE `legacy` VALUE IF YOU ARE UPGRADING A PRE-4.0 CLUSTER. +==== + +== Either snitch + +=== `prefer_local` + +Option to use the local or internal IP address when communication is not +across different datacenters. *This option is commented out by default.* + +*Default value:* true diff --git a/doc/source/modules/cassandra/pages/configuration/cass_topo_file.adoc b/doc/source/modules/cassandra/pages/configuration/cass_topo_file.adoc new file mode 100644 index 000000000000..5ca82219b5c2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/configuration/cass_topo_file.adoc @@ -0,0 +1,53 @@ +[[cassandra-topology]] +cassandra-topologies.properties file ================================ + +The `PropertyFileSnitch` `snitch` option uses the +`cassandra-topologies.properties` configuration file to determine which +`datacenters` and racks cluster nodes belong to. If other snitches are +used, the :ref:cassandra_rackdc must be used. The snitch determines +network topology (proximity by rack and datacenter) so that requests are +routed efficiently and allows the database to distribute replicas +evenly. + +Include every node in the cluster in the properties file, defining your +datacenter names as in the keyspace definition. The datacenter and rack +names are case-sensitive. + +The `cassandra-topologies.properties` file must be copied identically to +every node in the cluster. + +== Example + +This example uses three datacenters: + +[source,bash] +---- +# datacenter One + +175.56.12.105=DC1:RAC1 +175.50.13.200=DC1:RAC1 +175.54.35.197=DC1:RAC1 + +120.53.24.101=DC1:RAC2 +120.55.16.200=DC1:RAC2 +120.57.102.103=DC1:RAC2 + +# datacenter Two + +110.56.12.120=DC2:RAC1 +110.50.13.201=DC2:RAC1 +110.54.35.184=DC2:RAC1 + +50.33.23.120=DC2:RAC2 +50.45.14.220=DC2:RAC2 +50.17.10.203=DC2:RAC2 + +# datacenter Three + +172.106.12.120=DC3:RAC1 +172.106.12.121=DC3:RAC1 +172.106.12.122=DC3:RAC1 + +# default for unknown nodes +default =DC3:RAC1 +---- diff --git a/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc b/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc new file mode 100644 index 000000000000..b7927b24cb0d --- /dev/null +++ b/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc @@ -0,0 +1,2085 @@ += cassandra.yaml file configuration + +== `cluster_name` + +The name of the cluster. This is mainly used to prevent machines in +one logical cluster from joining another. + +_Default Value:_ 'Test Cluster' + +== `num_tokens` + + +This defines the number of tokens randomly assigned to this node on the ring +The more tokens, relative to other nodes, the larger the proportion of data +that this node will store. You probably want all nodes to have the same number +of tokens assuming they have equal hardware capability. + +If you leave this unspecified, Cassandra will use the default of 1 token for legacy compatibility, +and will use the initial_token as described below. + +Specifying initial_token will override this setting on the node's initial start, +on subsequent starts, this setting will apply even if initial token is set. + + +_Default Value:_ 256 + +== `allocate_tokens_for_keyspace` + +*This option is commented out by default.* + +Triggers automatic allocation of num_tokens tokens for this node. The allocation +algorithm attempts to choose tokens in a way that optimizes replicated load over +the nodes in the datacenter for the replica factor. + +The load assigned to each node will be close to proportional to its number of +vnodes. + +Only supported with the Murmur3Partitioner. + +Replica factor is determined via the replication strategy used by the specified +keyspace. + +_Default Value:_ KEYSPACE + +== `allocate_tokens_for_local_replication_factor` + +*This option is commented out by default.* + +Replica factor is explicitly set, regardless of keyspace or datacenter. +This is the replica factor within the datacenter, like NTS. + +_Default Value:_ 3 + +== `initial_token` + +*This option is commented out by default.* + +initial_token allows you to specify tokens manually. While you can use it with +vnodes (num_tokens > 1, above) -- in which case you should provide a +comma-separated list -- it's primarily used when adding nodes to legacy clusters +that do not have vnodes enabled. + +== `hinted_handoff_enabled` + + +May either be "true" or "false" to enable globally + +_Default Value:_ true + +== `hinted_handoff_disabled_datacenters` + +*This option is commented out by default.* + +When hinted_handoff_enabled is true, a black list of data centers that will not +perform hinted handoff + +_Default Value (complex option)_: + +.... + # - DC1 + # - DC2 +.... + +== `max_hint_window_in_ms` + +this defines the maximum amount of time a dead host will have hints +generated. After it has been dead this long, new hints for it will not be +created until it has been seen alive and gone down again. + +_Default Value:_ 10800000 # 3 hours + +== `hinted_handoff_throttle_in_kb` + + +Maximum throttle in KBs per second, per delivery thread. This will be +reduced proportionally to the number of nodes in the cluster. (If there +are two nodes in the cluster, each delivery thread will use the maximum +rate; if there are three, each will throttle to half of the maximum, +since we expect two nodes to be delivering hints simultaneously.) + +_Default Value:_ 1024 + +== `max_hints_delivery_threads` + + +Number of threads with which to deliver hints; +Consider increasing this number when you have multi-dc deployments, since +cross-dc handoff tends to be slower + +_Default Value:_ 2 + +== `hints_directory` + +*This option is commented out by default.* + +Directory where Cassandra should store hints. +If not set, the default directory is $CASSANDRA_HOME/data/hints. + +_Default Value:_ /var/lib/cassandra/hints + +== `hints_flush_period_in_ms` + + +How often hints should be flushed from the internal buffers to disk. +Will *not* trigger fsync. + +_Default Value:_ 10000 + +== `max_hints_file_size_in_mb` + + +Maximum size for a single hints file, in megabytes. + +_Default Value:_ 128 + +== `hints_compression` + +*This option is commented out by default.* + +Compression to apply to the hint files. If omitted, hints files +will be written uncompressed. LZ4, Snappy, and Deflate compressors +are supported. + +_Default Value (complex option)_: + +.... + # - class_name: LZ4Compressor + # parameters: + # - +.... + +== `batchlog_replay_throttle_in_kb` + +Maximum throttle in KBs per second, total. This will be +reduced proportionally to the number of nodes in the cluster. + +_Default Value:_ 1024 + +== `authenticator` + + +Authentication backend, implementing IAuthenticator; used to identify users +Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllAuthenticator, +PasswordAuthenticator}. + +- AllowAllAuthenticator performs no checks - set it to disable authentication. +- PasswordAuthenticator relies on username/password pairs to authenticate + users. It keeps usernames and hashed passwords in system_auth.roles table. + Please increase system_auth keyspace replication factor if you use this authenticator. + If using PasswordAuthenticator, CassandraRoleManager must also be used (see below) + +_Default Value:_ AllowAllAuthenticator + +== `authorizer` + + +Authorization backend, implementing IAuthorizer; used to limit access/provide permissions +Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllAuthorizer, +CassandraAuthorizer}. + +- AllowAllAuthorizer allows any action to any user - set it to disable authorization. +- CassandraAuthorizer stores permissions in system_auth.role_permissions table. Please + increase system_auth keyspace replication factor if you use this authorizer. + +_Default Value:_ AllowAllAuthorizer + +== `role_manager` + + +Part of the Authentication & Authorization backend, implementing IRoleManager; used +to maintain grants and memberships between roles. +Out of the box, Cassandra provides org.apache.cassandra.auth.CassandraRoleManager, +which stores role information in the system_auth keyspace. Most functions of the +IRoleManager require an authenticated login, so unless the configured IAuthenticator +actually implements authentication, most of this functionality will be unavailable. + +- CassandraRoleManager stores role data in the system_auth keyspace. Please + increase system_auth keyspace replication factor if you use this role manager. + +_Default Value:_ CassandraRoleManager + +== `network_authorizer` + + +Network authorization backend, implementing INetworkAuthorizer; used to restrict user +access to certain DCs +Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllNetworkAuthorizer, +CassandraNetworkAuthorizer}. + +- AllowAllNetworkAuthorizer allows access to any DC to any user - set it to disable authorization. +- CassandraNetworkAuthorizer stores permissions in system_auth.network_permissions table. Please + increase system_auth keyspace replication factor if you use this authorizer. + +_Default Value:_ AllowAllNetworkAuthorizer + +== `roles_validity_in_ms` + + +Validity period for roles cache (fetching granted roles can be an expensive +operation depending on the role manager, CassandraRoleManager is one example) +Granted roles are cached for authenticated sessions in AuthenticatedUser and +after the period specified here, become eligible for (async) reload. +Defaults to 2000, set to 0 to disable caching entirely. +Will be disabled automatically for AllowAllAuthenticator. + +_Default Value:_ 2000 + +== `roles_update_interval_in_ms` + +*This option is commented out by default.* + +Refresh interval for roles cache (if enabled). +After this interval, cache entries become eligible for refresh. Upon next +access, an async reload is scheduled and the old value returned until it +completes. If roles_validity_in_ms is non-zero, then this must be +also. +Defaults to the same value as roles_validity_in_ms. + +_Default Value:_ 2000 + +== `permissions_validity_in_ms` + + +Validity period for permissions cache (fetching permissions can be an +expensive operation depending on the authorizer, CassandraAuthorizer is +one example). Defaults to 2000, set to 0 to disable. +Will be disabled automatically for AllowAllAuthorizer. + +_Default Value:_ 2000 + +== `permissions_update_interval_in_ms` + +*This option is commented out by default.* + +Refresh interval for permissions cache (if enabled). +After this interval, cache entries become eligible for refresh. Upon next +access, an async reload is scheduled and the old value returned until it +completes. If permissions_validity_in_ms is non-zero, then this must be +also. +Defaults to the same value as permissions_validity_in_ms. + +_Default Value:_ 2000 + +== `credentials_validity_in_ms` + + +Validity period for credentials cache. This cache is tightly coupled to +the provided PasswordAuthenticator implementation of IAuthenticator. If +another IAuthenticator implementation is configured, this cache will not +be automatically used and so the following settings will have no effect. +Please note, credentials are cached in their encrypted form, so while +activating this cache may reduce the number of queries made to the +underlying table, it may not bring a significant reduction in the +latency of individual authentication attempts. +Defaults to 2000, set to 0 to disable credentials caching. + +_Default Value:_ 2000 + +== `credentials_update_interval_in_ms` + +*This option is commented out by default.* + +Refresh interval for credentials cache (if enabled). +After this interval, cache entries become eligible for refresh. Upon next +access, an async reload is scheduled and the old value returned until it +completes. If credentials_validity_in_ms is non-zero, then this must be +also. +Defaults to the same value as credentials_validity_in_ms. + +_Default Value:_ 2000 + +== `partitioner` + + +The partitioner is responsible for distributing groups of rows (by +partition key) across nodes in the cluster. The partitioner can NOT be +changed without reloading all data. If you are adding nodes or upgrading, +you should set this to the same partitioner that you are currently using. + +The default partitioner is the Murmur3Partitioner. Older partitioners +such as the RandomPartitioner, ByteOrderedPartitioner, and +OrderPreservingPartitioner have been included for backward compatibility only. +For new clusters, you should NOT change this value. + + +_Default Value:_ org.apache.cassandra.dht.Murmur3Partitioner + +== `data_file_directories` + +*This option is commented out by default.* + +Directories where Cassandra should store data on disk. If multiple +directories are specified, Cassandra will spread data evenly across +them by partitioning the token ranges. +If not set, the default directory is $CASSANDRA_HOME/data/data. + +_Default Value (complex option)_: + +.... + # - /var/lib/cassandra/data +.... + +== `commitlog_directory` + +*This option is commented out by default.* +commit log. when running on magnetic HDD, this should be a +separate spindle than the data directories. +If not set, the default directory is $CASSANDRA_HOME/data/commitlog. + +_Default Value:_ /var/lib/cassandra/commitlog + +== `cdc_enabled` + + +Enable / disable CDC functionality on a per-node basis. This modifies the logic used +for write path allocation rejection (standard: never reject. cdc: reject Mutation +containing a CDC-enabled table if at space limit in cdc_raw_directory). + +_Default Value:_ false + +== `cdc_raw_directory` + +*This option is commented out by default.* + +CommitLogSegments are moved to this directory on flush if cdc_enabled: true and the +segment contains mutations for a CDC-enabled table. This should be placed on a +separate spindle than the data directories. If not set, the default directory is +$CASSANDRA_HOME/data/cdc_raw. + +_Default Value:_ /var/lib/cassandra/cdc_raw + +== `disk_failure_policy` + + +Policy for data disk failures: + +die + shut down gossip and client transports and kill the JVM for any fs errors or + single-sstable errors, so the node can be replaced. + +stop_paranoid + shut down gossip and client transports even for single-sstable errors, + kill the JVM for errors during startup. + +stop + shut down gossip and client transports, leaving the node effectively dead, but + can still be inspected via JMX, kill the JVM for errors during startup. + +best_effort + stop using the failed disk and respond to requests based on + remaining available sstables. This means you WILL see obsolete + data at CL.ONE! + +ignore + ignore fatal errors and let requests fail, as in pre-1.2 Cassandra + +_Default Value:_ stop + +== `commit_failure_policy` + + +Policy for commit disk failures: + +die + shut down the node and kill the JVM, so the node can be replaced. + +stop + shut down the node, leaving the node effectively dead, but + can still be inspected via JMX. + +stop_commit + shutdown the commit log, letting writes collect but + continuing to service reads, as in pre-2.0.5 Cassandra + +ignore + ignore fatal errors and let the batches fail + +_Default Value:_ stop + +== `prepared_statements_cache_size_mb` + + +Maximum size of the native protocol prepared statement cache + +Valid values are either "auto" (omitting the value) or a value greater 0. + +Note that specifying a too large value will result in long running GCs and possbily +out-of-memory errors. Keep the value at a small fraction of the heap. + +If you constantly see "prepared statements discarded in the last minute because +cache limit reached" messages, the first step is to investigate the root cause +of these messages and check whether prepared statements are used correctly - +i.e. use bind markers for variable parts. + +Do only change the default value, if you really have more prepared statements than +fit in the cache. In most cases it is not neccessary to change this value. +Constantly re-preparing statements is a performance penalty. + +Default value ("auto") is 1/256th of the heap or 10MB, whichever is greater + +== `key_cache_size_in_mb` + + +Maximum size of the key cache in memory. + +Each key cache hit saves 1 seek and each row cache hit saves 2 seeks at the +minimum, sometimes more. The key cache is fairly tiny for the amount of +time it saves, so it's worthwhile to use it at large numbers. +The row cache saves even more time, but must contain the entire row, +so it is extremely space-intensive. It's best to only use the +row cache if you have hot rows or static rows. + +NOTE: if you reduce the size, you may not get you hottest keys loaded on startup. + +Default value is empty to make it "auto" (min(5% of Heap (in MB), 100MB)). Set to 0 to disable key cache. + +== `key_cache_save_period` + + +Duration in seconds after which Cassandra should +save the key cache. Caches are saved to saved_caches_directory as +specified in this configuration file. + +Saved caches greatly improve cold-start speeds, and is relatively cheap in +terms of I/O for the key cache. Row cache saving is much more expensive and +has limited use. + +Default is 14400 or 4 hours. + +_Default Value:_ 14400 + +== `key_cache_keys_to_save` + +*This option is commented out by default.* + +Number of keys from the key cache to save +Disabled by default, meaning all keys are going to be saved + +_Default Value:_ 100 + +== `row_cache_class_name` + +*This option is commented out by default.* + +Row cache implementation class name. Available implementations: + +org.apache.cassandra.cache.OHCProvider + Fully off-heap row cache implementation (default). + +org.apache.cassandra.cache.SerializingCacheProvider + This is the row cache implementation availabile + in previous releases of Cassandra. + +_Default Value:_ org.apache.cassandra.cache.OHCProvider + +== `row_cache_size_in_mb` + + +Maximum size of the row cache in memory. +Please note that OHC cache implementation requires some additional off-heap memory to manage +the map structures and some in-flight memory during operations before/after cache entries can be +accounted against the cache capacity. This overhead is usually small compared to the whole capacity. +Do not specify more memory that the system can afford in the worst usual situation and leave some +headroom for OS block level cache. Do never allow your system to swap. + +Default value is 0, to disable row caching. + +_Default Value:_ 0 + +== `row_cache_save_period` + + +Duration in seconds after which Cassandra should save the row cache. +Caches are saved to saved_caches_directory as specified in this configuration file. + +Saved caches greatly improve cold-start speeds, and is relatively cheap in +terms of I/O for the key cache. Row cache saving is much more expensive and +has limited use. + +Default is 0 to disable saving the row cache. + +_Default Value:_ 0 + +== `row_cache_keys_to_save` + +*This option is commented out by default.* + +Number of keys from the row cache to save. +Specify 0 (which is the default), meaning all keys are going to be saved + +_Default Value:_ 100 + +== `counter_cache_size_in_mb` + + +Maximum size of the counter cache in memory. + +Counter cache helps to reduce counter locks' contention for hot counter cells. +In case of RF = 1 a counter cache hit will cause Cassandra to skip the read before +write entirely. With RF > 1 a counter cache hit will still help to reduce the duration +of the lock hold, helping with hot counter cell updates, but will not allow skipping +the read entirely. Only the local (clock, count) tuple of a counter cell is kept +in memory, not the whole counter, so it's relatively cheap. + +NOTE: if you reduce the size, you may not get you hottest keys loaded on startup. + +Default value is empty to make it "auto" (min(2.5% of Heap (in MB), 50MB)). Set to 0 to disable counter cache. +NOTE: if you perform counter deletes and rely on low gcgs, you should disable the counter cache. + +== `counter_cache_save_period` + + +Duration in seconds after which Cassandra should +save the counter cache (keys only). Caches are saved to saved_caches_directory as +specified in this configuration file. + +Default is 7200 or 2 hours. + +_Default Value:_ 7200 + +== `counter_cache_keys_to_save` + +*This option is commented out by default.* + +Number of keys from the counter cache to save +Disabled by default, meaning all keys are going to be saved + +_Default Value:_ 100 + +== `saved_caches_directory` + +*This option is commented out by default.* + +saved caches +If not set, the default directory is $CASSANDRA_HOME/data/saved_caches. + +_Default Value:_ /var/lib/cassandra/saved_caches + +== `commitlog_sync_batch_window_in_ms` + +*This option is commented out by default.* + +commitlog_sync may be either "periodic", "group", or "batch." + +When in batch mode, Cassandra won't ack writes until the commit log +has been flushed to disk. Each incoming write will trigger the flush task. +commitlog_sync_batch_window_in_ms is a deprecated value. Previously it had +almost no value, and is being removed. + + +_Default Value:_ 2 + +== `commitlog_sync_group_window_in_ms` + +*This option is commented out by default.* + +group mode is similar to batch mode, where Cassandra will not ack writes +until the commit log has been flushed to disk. The difference is group +mode will wait up to commitlog_sync_group_window_in_ms between flushes. + + +_Default Value:_ 1000 + +== `commitlog_sync` + + +the default option is "periodic" where writes may be acked immediately +and the CommitLog is simply synced every commitlog_sync_period_in_ms +milliseconds. + +_Default Value:_ periodic + +== `commitlog_sync_period_in_ms` + + +_Default Value:_ 10000 + +== `periodic_commitlog_sync_lag_block_in_ms` + +*This option is commented out by default.* + +When in periodic commitlog mode, the number of milliseconds to block writes +while waiting for a slow disk flush to complete. + +== `commitlog_segment_size_in_mb` + + +The size of the individual commitlog file segments. A commitlog +segment may be archived, deleted, or recycled once all the data +in it (potentially from each columnfamily in the system) has been +flushed to sstables. + +The default size is 32, which is almost always fine, but if you are +archiving commitlog segments (see commitlog_archiving.properties), +then you probably want a finer granularity of archiving; 8 or 16 MB +is reasonable. +Max mutation size is also configurable via max_mutation_size_in_kb setting in +cassandra.yaml. The default is half the size commitlog_segment_size_in_mb * 1024. +This should be positive and less than 2048. + +NOTE: If max_mutation_size_in_kb is set explicitly then commitlog_segment_size_in_mb must +be set to at least twice the size of max_mutation_size_in_kb / 1024 + + +_Default Value:_ 32 + +== `commitlog_compression` + +*This option is commented out by default.* + +Compression to apply to the commit log. If omitted, the commit log +will be written uncompressed. LZ4, Snappy, and Deflate compressors +are supported. + +_Default Value (complex option)_: + +.... + # - class_name: LZ4Compressor + # parameters: + # - +.... + +== `table` + +*This option is commented out by default.* +Compression to apply to SSTables as they flush for compressed tables. +Note that tables without compression enabled do not respect this flag. + +As high ratio compressors like LZ4HC, Zstd, and Deflate can potentially +block flushes for too long, the default is to flush with a known fast +compressor in those cases. Options are: + +none : Flush without compressing blocks but while still doing checksums. +fast : Flush with a fast compressor. If the table is already using a + fast compressor that compressor is used. + +_Default Value:_ Always flush with the same compressor that the table uses. This + +== `flush_compression` + +*This option is commented out by default.* + was the pre 4.0 behavior. + + +_Default Value:_ fast + +== `seed_provider` + + +any class that implements the SeedProvider interface and has a +constructor that takes a Map of parameters will do. + +_Default Value (complex option)_: + +.... + # Addresses of hosts that are deemed contact points. + # Cassandra nodes use this list of hosts to find each other and learn + # the topology of the ring. You must change this if you are running + # multiple nodes! + - class_name: org.apache.cassandra.locator.SimpleSeedProvider + parameters: + # seeds is actually a comma-delimited list of addresses. + # Ex: ",," + - seeds: "127.0.0.1:7000" +.... + +== `concurrent_reads` + +For workloads with more data than can fit in memory, Cassandra's +bottleneck will be reads that need to fetch data from +disk. "concurrent_reads" should be set to (16 * number_of_drives) in +order to allow the operations to enqueue low enough in the stack +that the OS and drives can reorder them. Same applies to +"concurrent_counter_writes", since counter writes read the current +values before incrementing and writing them back. + +On the other hand, since writes are almost never IO bound, the ideal +number of "concurrent_writes" is dependent on the number of cores in +your system; (8 * number_of_cores) is a good rule of thumb. + +_Default Value:_ 32 + +== `concurrent_writes` + + +_Default Value:_ 32 + +== `concurrent_counter_writes` + + +_Default Value:_ 32 + +== `concurrent_materialized_view_writes` + + +For materialized view writes, as there is a read involved, so this should +be limited by the less of concurrent reads or concurrent writes. + +_Default Value:_ 32 + +== `file_cache_size_in_mb` + +*This option is commented out by default.* + +Maximum memory to use for sstable chunk cache and buffer pooling. +32MB of this are reserved for pooling buffers, the rest is used as an +cache that holds uncompressed sstable chunks. +Defaults to the smaller of 1/4 of heap or 512MB. This pool is allocated off-heap, +so is in addition to the memory allocated for heap. The cache also has on-heap +overhead which is roughly 128 bytes per chunk (i.e. 0.2% of the reserved size +if the default 64k chunk size is used). +Memory is only allocated when needed. + +_Default Value:_ 512 + +== `buffer_pool_use_heap_if_exhausted` + +*This option is commented out by default.* + +Flag indicating whether to allocate on or off heap when the sstable buffer +pool is exhausted, that is when it has exceeded the maximum memory +file_cache_size_in_mb, beyond which it will not cache buffers but allocate on request. + + +_Default Value:_ true + +== `disk_optimization_strategy` + +*This option is commented out by default.* + +The strategy for optimizing disk read +Possible values are: +ssd (for solid state disks, the default) +spinning (for spinning disks) + +_Default Value:_ ssd + +== `memtable_heap_space_in_mb` + +*This option is commented out by default.* + +Total permitted memory to use for memtables. Cassandra will stop +accepting writes when the limit is exceeded until a flush completes, +and will trigger a flush based on memtable_cleanup_threshold +If omitted, Cassandra will set both to 1/4 the size of the heap. + +_Default Value:_ 2048 + +== `memtable_offheap_space_in_mb` + +*This option is commented out by default.* + +_Default Value:_ 2048 + +== `memtable_cleanup_threshold` + +*This option is commented out by default.* + +memtable_cleanup_threshold is deprecated. The default calculation +is the only reasonable choice. See the comments on memtable_flush_writers +for more information. + +Ratio of occupied non-flushing memtable size to total permitted size +that will trigger a flush of the largest memtable. Larger mct will +mean larger flushes and hence less compaction, but also less concurrent +flush activity which can make it difficult to keep your disks fed +under heavy write load. + +memtable_cleanup_threshold defaults to 1 / (memtable_flush_writers + 1) + +_Default Value:_ 0.11 + +== `memtable_allocation_type` + + +Specify the way Cassandra allocates and manages memtable memory. +Options are: + +heap_buffers + on heap nio buffers + +offheap_buffers + off heap (direct) nio buffers + +offheap_objects + off heap objects + +_Default Value:_ heap_buffers + +== `repair_session_space_in_mb` + +*This option is commented out by default.* + +Limit memory usage for Merkle tree calculations during repairs. The default +is 1/16th of the available heap. The main tradeoff is that smaller trees +have less resolution, which can lead to over-streaming data. If you see heap +pressure during repairs, consider lowering this, but you cannot go below +one megabyte. If you see lots of over-streaming, consider raising +this or using subrange repair. + +For more details see https://issues.apache.org/jira/browse/CASSANDRA-14096. + + +== `commitlog_total_space_in_mb` + +*This option is commented out by default.* + +Total space to use for commit logs on disk. + +If space gets above this value, Cassandra will flush every dirty CF +in the oldest segment and remove it. So a small total commitlog space +will tend to cause more flush activity on less-active columnfamilies. + +The default value is the smaller of 8192, and 1/4 of the total space +of the commitlog volume. + + +_Default Value:_ 8192 + +== `memtable_flush_writers` + +*This option is commented out by default.* + +This sets the number of memtable flush writer threads per disk +as well as the total number of memtables that can be flushed concurrently. +These are generally a combination of compute and IO bound. + +Memtable flushing is more CPU efficient than memtable ingest and a single thread +can keep up with the ingest rate of a whole server on a single fast disk +until it temporarily becomes IO bound under contention typically with compaction. +At that point you need multiple flush threads. At some point in the future +it may become CPU bound all the time. + +You can tell if flushing is falling behind using the MemtablePool.BlockedOnAllocation +metric which should be 0, but will be non-zero if threads are blocked waiting on flushing +to free memory. + +memtable_flush_writers defaults to two for a single data directory. +This means that two memtables can be flushed concurrently to the single data directory. +If you have multiple data directories the default is one memtable flushing at a time +but the flush will use a thread per data directory so you will get two or more writers. + +Two is generally enough to flush on a fast disk [array] mounted as a single data directory. +Adding more flush writers will result in smaller more frequent flushes that introduce more +compaction overhead. + +There is a direct tradeoff between number of memtables that can be flushed concurrently +and flush size and frequency. More is not better you just need enough flush writers +to never stall waiting for flushing to free memory. + + +_Default Value:_ 2 + +== `cdc_total_space_in_mb` + +*This option is commented out by default.* + +Total space to use for change-data-capture logs on disk. + +If space gets above this value, Cassandra will throw WriteTimeoutException +on Mutations including tables with CDC enabled. A CDCCompactor is responsible +for parsing the raw CDC logs and deleting them when parsing is completed. + +The default value is the min of 4096 mb and 1/8th of the total space +of the drive where cdc_raw_directory resides. + +_Default Value:_ 4096 + +== `cdc_free_space_check_interval_ms` + +*This option is commented out by default.* + +When we hit our cdc_raw limit and the CDCCompactor is either running behind +or experiencing backpressure, we check at the following interval to see if any +new space for cdc-tracked tables has been made available. Default to 250ms + +_Default Value:_ 250 + +== `index_summary_capacity_in_mb` + + +A fixed memory pool size in MB for for SSTable index summaries. If left +empty, this will default to 5% of the heap size. If the memory usage of +all index summaries exceeds this limit, SSTables with low read rates will +shrink their index summaries in order to meet this limit. However, this +is a best-effort process. In extreme conditions Cassandra may need to use +more than this amount of memory. + +== `index_summary_resize_interval_in_minutes` + + +How frequently index summaries should be resampled. This is done +periodically to redistribute memory from the fixed-size pool to sstables +proportional their recent read rates. Setting to -1 will disable this +process, leaving existing index summaries at their current sampling level. + +_Default Value:_ 60 + +== `trickle_fsync` + + +Whether to, when doing sequential writing, fsync() at intervals in +order to force the operating system to flush the dirty +buffers. Enable this to avoid sudden dirty buffer flushing from +impacting read latencies. Almost always a good idea on SSDs; not +necessarily on platters. + +_Default Value:_ false + +== `trickle_fsync_interval_in_kb` + + +_Default Value:_ 10240 + +== `storage_port` + + +TCP port, for commands and data +For security reasons, you should not expose this port to the internet. Firewall it if needed. + +_Default Value:_ 7000 + +== `ssl_storage_port` + + +SSL port, for legacy encrypted communication. This property is unused unless enabled in +server_encryption_options (see below). As of cassandra 4.0, this property is deprecated +as a single port can be used for either/both secure and insecure connections. +For security reasons, you should not expose this port to the internet. Firewall it if needed. + +_Default Value:_ 7001 + +== `listen_address` + + +Address or interface to bind to and tell other Cassandra nodes to connect to. +You _must_ change this if you want multiple nodes to be able to communicate! + +Set listen_address OR listen_interface, not both. + +Leaving it blank leaves it up to InetAddress.getLocalHost(). This +will always do the Right Thing _if_ the node is properly configured +(hostname, name resolution, etc), and the Right Thing is to use the +address associated with the hostname (it might not be). + +Setting listen_address to 0.0.0.0 is always wrong. + + +_Default Value:_ localhost + +== `listen_interface` + +*This option is commented out by default.* + +Set listen_address OR listen_interface, not both. Interfaces must correspond +to a single address, IP aliasing is not supported. + +_Default Value:_ eth0 + +== `listen_interface_prefer_ipv6` + +*This option is commented out by default.* + +If you choose to specify the interface by name and the interface has an ipv4 and an ipv6 address +you can specify which should be chosen using listen_interface_prefer_ipv6. If false the first ipv4 +address will be used. If true the first ipv6 address will be used. Defaults to false preferring +ipv4. If there is only one address it will be selected regardless of ipv4/ipv6. + +_Default Value:_ false + +== `broadcast_address` + +*This option is commented out by default.* + +Address to broadcast to other Cassandra nodes +Leaving this blank will set it to the same value as listen_address + +_Default Value:_ 1.2.3.4 + +== `listen_on_broadcast_address` + +*This option is commented out by default.* + +When using multiple physical network interfaces, set this +to true to listen on broadcast_address in addition to +the listen_address, allowing nodes to communicate in both +interfaces. +Ignore this property if the network configuration automatically +routes between the public and private networks such as EC2. + +_Default Value:_ false + +== `internode_authenticator` + +*This option is commented out by default.* + +Internode authentication backend, implementing IInternodeAuthenticator; +used to allow/disallow connections from peer nodes. + +_Default Value:_ org.apache.cassandra.auth.AllowAllInternodeAuthenticator + +== `start_native_transport` + + +Whether to start the native transport server. +The address on which the native transport is bound is defined by rpc_address. + +_Default Value:_ true + +== `native_transport_port` + +port for the CQL native transport to listen for clients on +For security reasons, you should not expose this port to the internet. Firewall it if needed. + +_Default Value:_ 9042 + +== `native_transport_port_ssl` + +*This option is commented out by default.* +Enabling native transport encryption in client_encryption_options allows you to either use +encryption for the standard port or to use a dedicated, additional port along with the unencrypted +standard native_transport_port. +Enabling client encryption and keeping native_transport_port_ssl disabled will use encryption +for native_transport_port. Setting native_transport_port_ssl to a different value +from native_transport_port will use encryption for native_transport_port_ssl while +keeping native_transport_port unencrypted. + +_Default Value:_ 9142 + +== `native_transport_max_threads` + +*This option is commented out by default.* +The maximum threads for handling requests (note that idle threads are stopped +after 30 seconds so there is not corresponding minimum setting). + +_Default Value:_ 128 + +== `native_transport_max_frame_size_in_mb` + +*This option is commented out by default.* + +The maximum size of allowed frame. Frame (requests) larger than this will +be rejected as invalid. The default is 256MB. If you're changing this parameter, +you may want to adjust max_value_size_in_mb accordingly. This should be positive and less than 2048. + +_Default Value:_ 256 + +== `native_transport_frame_block_size_in_kb` + +*This option is commented out by default.* + +If checksumming is enabled as a protocol option, denotes the size of the chunks into which frame +are bodies will be broken and checksummed. + +_Default Value:_ 32 + +== `native_transport_max_concurrent_connections` + +*This option is commented out by default.* + +The maximum number of concurrent client connections. +The default is -1, which means unlimited. + +_Default Value:_ -1 + +== `native_transport_max_concurrent_connections_per_ip` + +*This option is commented out by default.* + +The maximum number of concurrent client connections per source ip. +The default is -1, which means unlimited. + +_Default Value:_ -1 + +== `native_transport_allow_older_protocols` + + +Controls whether Cassandra honors older, yet currently supported, protocol versions. +The default is true, which means all supported protocols will be honored. + +_Default Value:_ true + +== `native_transport_idle_timeout_in_ms` + +*This option is commented out by default.* + +Controls when idle client connections are closed. Idle connections are ones that had neither reads +nor writes for a time period. + +Clients may implement heartbeats by sending OPTIONS native protocol message after a timeout, which +will reset idle timeout timer on the server side. To close idle client connections, corresponding +values for heartbeat intervals have to be set on the client side. + +Idle connection timeouts are disabled by default. + +_Default Value:_ 60000 + +== `rpc_address` + + +The address or interface to bind the native transport server to. + +Set rpc_address OR rpc_interface, not both. + +Leaving rpc_address blank has the same effect as on listen_address +(i.e. it will be based on the configured hostname of the node). + +Note that unlike listen_address, you can specify 0.0.0.0, but you must also +set broadcast_rpc_address to a value other than 0.0.0.0. + +For security reasons, you should not expose this port to the internet. Firewall it if needed. + +_Default Value:_ localhost + +== `rpc_interface` + +*This option is commented out by default.* + +Set rpc_address OR rpc_interface, not both. Interfaces must correspond +to a single address, IP aliasing is not supported. + +_Default Value:_ eth1 + +== `rpc_interface_prefer_ipv6` + +*This option is commented out by default.* + +If you choose to specify the interface by name and the interface has an ipv4 and an ipv6 address +you can specify which should be chosen using rpc_interface_prefer_ipv6. If false the first ipv4 +address will be used. If true the first ipv6 address will be used. Defaults to false preferring +ipv4. If there is only one address it will be selected regardless of ipv4/ipv6. + +_Default Value:_ false + +== `broadcast_rpc_address` + +*This option is commented out by default.* + +RPC address to broadcast to drivers and other Cassandra nodes. This cannot +be set to 0.0.0.0. If left blank, this will be set to the value of +rpc_address. If rpc_address is set to 0.0.0.0, broadcast_rpc_address must +be set. + +_Default Value:_ 1.2.3.4 + +== `rpc_keepalive` + + +enable or disable keepalive on rpc/native connections + +_Default Value:_ true + +== `internode_send_buff_size_in_bytes` + +*This option is commented out by default.* + +Uncomment to set socket buffer size for internode communication +Note that when setting this, the buffer size is limited by net.core.wmem_max +and when not setting it it is defined by net.ipv4.tcp_wmem +See also: +/proc/sys/net/core/wmem_max +/proc/sys/net/core/rmem_max +/proc/sys/net/ipv4/tcp_wmem +/proc/sys/net/ipv4/tcp_wmem +and 'man tcp' + +== `internode_recv_buff_size_in_bytes` + +*This option is commented out by default.* + +Uncomment to set socket buffer size for internode communication +Note that when setting this, the buffer size is limited by net.core.wmem_max +and when not setting it it is defined by net.ipv4.tcp_wmem + +== `incremental_backups` + + +Set to true to have Cassandra create a hard link to each sstable +flushed or streamed locally in a backups/ subdirectory of the +keyspace data. Removing these links is the operator's +responsibility. + +_Default Value:_ false + +== `snapshot_before_compaction` + + +Whether or not to take a snapshot before each compaction. Be +careful using this option, since Cassandra won't clean up the +snapshots for you. Mostly useful if you're paranoid when there +is a data format change. + +_Default Value:_ false + +== `auto_snapshot` + + +Whether or not a snapshot is taken of the data before keyspace truncation +or dropping of column families. The STRONGLY advised default of true +should be used to provide data safety. If you set this flag to false, you will +lose data on truncation or drop. + +_Default Value:_ true + +== `column_index_size_in_kb` + + +Granularity of the collation index of rows within a partition. +Increase if your rows are large, or if you have a very large +number of rows per partition. The competing goals are these: + +- a smaller granularity means more index entries are generated + and looking up rows withing the partition by collation column + is faster +- but, Cassandra will keep the collation index in memory for hot + rows (as part of the key cache), so a larger granularity means + you can cache more hot rows + +_Default Value:_ 64 + +== `column_index_cache_size_in_kb` + + +Per sstable indexed key cache entries (the collation index in memory +mentioned above) exceeding this size will not be held on heap. +This means that only partition information is held on heap and the +index entries are read from disk. + +Note that this size refers to the size of the +serialized index information and not the size of the partition. + +_Default Value:_ 2 + +== `concurrent_compactors` + +*This option is commented out by default.* + +Number of simultaneous compactions to allow, NOT including +validation "compactions" for anti-entropy repair. Simultaneous +compactions can help preserve read performance in a mixed read/write +workload, by mitigating the tendency of small sstables to accumulate +during a single long running compactions. The default is usually +fine and if you experience problems with compaction running too +slowly or too fast, you should look at +compaction_throughput_mb_per_sec first. + +concurrent_compactors defaults to the smaller of (number of disks, +number of cores), with a minimum of 2 and a maximum of 8. + +If your data directories are backed by SSD, you should increase this +to the number of cores. + +_Default Value:_ 1 + +== `concurrent_validations` + +*This option is commented out by default.* + +Number of simultaneous repair validations to allow. Default is unbounded +Values less than one are interpreted as unbounded (the default) + +_Default Value:_ 0 + +== `concurrent_materialized_view_builders` + + +Number of simultaneous materialized view builder tasks to allow. + +_Default Value:_ 1 + +== `compaction_throughput_mb_per_sec` + + +Throttles compaction to the given total throughput across the entire +system. The faster you insert data, the faster you need to compact in +order to keep the sstable count down, but in general, setting this to +16 to 32 times the rate you are inserting data is more than sufficient. +Setting this to 0 disables throttling. Note that this account for all types +of compaction, including validation compaction. + +_Default Value:_ 16 + +== `sstable_preemptive_open_interval_in_mb` + + +When compacting, the replacement sstable(s) can be opened before they +are completely written, and used in place of the prior sstables for +any range that has been written. This helps to smoothly transfer reads +between the sstables, reducing page cache churn and keeping hot rows hot + +_Default Value:_ 50 + +== `stream_entire_sstables` + +*This option is commented out by default.* + +When enabled, permits Cassandra to zero-copy stream entire eligible +SSTables between nodes, including every component. +This speeds up the network transfer significantly subject to +throttling specified by stream_throughput_outbound_megabits_per_sec. +Enabling this will reduce the GC pressure on sending and receiving node. +When unset, the default is enabled. While this feature tries to keep the +disks balanced, it cannot guarantee it. This feature will be automatically +disabled if internode encryption is enabled. Currently this can be used with +Leveled Compaction. Once CASSANDRA-14586 is fixed other compaction strategies +will benefit as well when used in combination with CASSANDRA-6696. + +_Default Value:_ true + +== `stream_throughput_outbound_megabits_per_sec` + +*This option is commented out by default.* + +Throttles all outbound streaming file transfers on this node to the +given total throughput in Mbps. This is necessary because Cassandra does +mostly sequential IO when streaming data during bootstrap or repair, which +can lead to saturating the network connection and degrading rpc performance. +When unset, the default is 200 Mbps or 25 MB/s. + +_Default Value:_ 200 + +== `inter_dc_stream_throughput_outbound_megabits_per_sec` + +*This option is commented out by default.* + +Throttles all streaming file transfer between the datacenters, +this setting allows users to throttle inter dc stream throughput in addition +to throttling all network stream traffic as configured with +stream_throughput_outbound_megabits_per_sec +When unset, the default is 200 Mbps or 25 MB/s + +_Default Value:_ 200 + +== `read_request_timeout_in_ms` + + +How long the coordinator should wait for read operations to complete. +Lowest acceptable value is 10 ms. + +_Default Value:_ 5000 + +== `range_request_timeout_in_ms` + +How long the coordinator should wait for seq or index scans to complete. +Lowest acceptable value is 10 ms. + +_Default Value:_ 10000 + +== `write_request_timeout_in_ms` + +How long the coordinator should wait for writes to complete. +Lowest acceptable value is 10 ms. + +_Default Value:_ 2000 + +== `counter_write_request_timeout_in_ms` + +How long the coordinator should wait for counter writes to complete. +Lowest acceptable value is 10 ms. + +_Default Value:_ 5000 + +== `cas_contention_timeout_in_ms` + +How long a coordinator should continue to retry a CAS operation +that contends with other proposals for the same row. +Lowest acceptable value is 10 ms. + +_Default Value:_ 1000 + +== `truncate_request_timeout_in_ms` + +How long the coordinator should wait for truncates to complete +(This can be much longer, because unless auto_snapshot is disabled +we need to flush first so we can snapshot before removing the data.) +Lowest acceptable value is 10 ms. + +_Default Value:_ 60000 + +== `request_timeout_in_ms` + +The default timeout for other, miscellaneous operations. +Lowest acceptable value is 10 ms. + +_Default Value:_ 10000 + +== `internode_application_send_queue_capacity_in_bytes` + +*This option is commented out by default.* + +Defensive settings for protecting Cassandra from true network partitions. +See (CASSANDRA-14358) for details. + +The amount of time to wait for internode tcp connections to establish. +internode_tcp_connect_timeout_in_ms = 2000 + +The amount of time unacknowledged data is allowed on a connection before we throw out the connection +Note this is only supported on Linux + epoll, and it appears to behave oddly above a setting of 30000 +(it takes much longer than 30s) as of Linux 4.12. If you want something that high set this to 0 +which picks up the OS default and configure the net.ipv4.tcp_retries2 sysctl to be ~8. +internode_tcp_user_timeout_in_ms = 30000 + +The maximum continuous period a connection may be unwritable in application space +internode_application_timeout_in_ms = 30000 + +Global, per-endpoint and per-connection limits imposed on messages queued for delivery to other nodes +and waiting to be processed on arrival from other nodes in the cluster. These limits are applied to the on-wire +size of the message being sent or received. + +The basic per-link limit is consumed in isolation before any endpoint or global limit is imposed. +Each node-pair has three links: urgent, small and large. So any given node may have a maximum of +N*3*(internode_application_send_queue_capacity_in_bytes+internode_application_receive_queue_capacity_in_bytes) +messages queued without any coordination between them although in practice, with token-aware routing, only RF*tokens +nodes should need to communicate with significant bandwidth. + +The per-endpoint limit is imposed on all messages exceeding the per-link limit, simultaneously with the global limit, +on all links to or from a single node in the cluster. +The global limit is imposed on all messages exceeding the per-link limit, simultaneously with the per-endpoint limit, +on all links to or from any node in the cluster. + + +_Default Value:_ 4194304 #4MiB + +== `internode_application_send_queue_reserve_endpoint_capacity_in_bytes` + +*This option is commented out by default.* + +_Default Value:_ 134217728 #128MiB + +== `internode_application_send_queue_reserve_global_capacity_in_bytes` + +*This option is commented out by default.* + +_Default Value:_ 536870912 #512MiB + +== `internode_application_receive_queue_capacity_in_bytes` + +*This option is commented out by default.* + +_Default Value:_ 4194304 #4MiB + +== `internode_application_receive_queue_reserve_endpoint_capacity_in_bytes` + +*This option is commented out by default.* + +_Default Value:_ 134217728 #128MiB + +== `internode_application_receive_queue_reserve_global_capacity_in_bytes` + +*This option is commented out by default.* + +_Default Value:_ 536870912 #512MiB + +== `slow_query_log_timeout_in_ms` + + + +How long before a node logs slow queries. Select queries that take longer than +this timeout to execute, will generate an aggregated log message, so that slow queries +can be identified. Set this value to zero to disable slow query logging. + +_Default Value:_ 500 + +== `cross_node_timeout` + +*This option is commented out by default.* + +Enable operation timeout information exchange between nodes to accurately +measure request timeouts. If disabled, replicas will assume that requests +were forwarded to them instantly by the coordinator, which means that +under overload conditions we will waste that much extra time processing +already-timed-out requests. + +Warning: It is generally assumed that users have setup NTP on their clusters, and that clocks are modestly in sync, +since this is a requirement for general correctness of last write wins. + +_Default Value:_ true + +== `streaming_keep_alive_period_in_secs` + +*This option is commented out by default.* + +Set keep-alive period for streaming +This node will send a keep-alive message periodically with this period. +If the node does not receive a keep-alive message from the peer for +2 keep-alive cycles the stream session times out and fail +Default value is 300s (5 minutes), which means stalled stream +times out in 10 minutes by default + +_Default Value:_ 300 + +== `streaming_connections_per_host` + +*This option is commented out by default.* + +Limit number of connections per host for streaming +Increase this when you notice that joins are CPU-bound rather that network +bound (for example a few nodes with big files). + +_Default Value:_ 1 + +== `phi_convict_threshold` + +*This option is commented out by default.* + + +phi value that must be reached for a host to be marked down. +most users should never need to adjust this. + +_Default Value:_ 8 + +== `endpoint_snitch` + + +endpoint_snitch -- Set this to a class that implements +IEndpointSnitch. The snitch has two functions: + +- it teaches Cassandra enough about your network topology to route + requests efficiently +- it allows Cassandra to spread replicas around your cluster to avoid + correlated failures. It does this by grouping machines into + "datacenters" and "racks." Cassandra will do its best not to have + more than one replica on the same "rack" (which may not actually + be a physical location) + +CASSANDRA WILL NOT ALLOW YOU TO SWITCH TO AN INCOMPATIBLE SNITCH +ONCE DATA IS INSERTED INTO THE CLUSTER. This would cause data loss. +This means that if you start with the default SimpleSnitch, which +locates every node on "rack1" in "datacenter1", your only options +if you need to add another datacenter are GossipingPropertyFileSnitch +(and the older PFS). From there, if you want to migrate to an +incompatible snitch like Ec2Snitch you can do it by adding new nodes +under Ec2Snitch (which will locate them in a new "datacenter") and +decommissioning the old ones. + +Out of the box, Cassandra provides: + +SimpleSnitch: + Treats Strategy order as proximity. This can improve cache + locality when disabling read repair. Only appropriate for + single-datacenter deployments. + +GossipingPropertyFileSnitch + This should be your go-to snitch for production use. The rack + and datacenter for the local node are defined in + cassandra-rackdc.properties and propagated to other nodes via + gossip. If cassandra-topology.properties exists, it is used as a + fallback, allowing migration from the PropertyFileSnitch. + +PropertyFileSnitch: + Proximity is determined by rack and data center, which are + explicitly configured in cassandra-topology.properties. + +Ec2Snitch: + Appropriate for EC2 deployments in a single Region. Loads Region + and Availability Zone information from the EC2 API. The Region is + treated as the datacenter, and the Availability Zone as the rack. + Only private IPs are used, so this will not work across multiple + Regions. + +Ec2MultiRegionSnitch: + Uses public IPs as broadcast_address to allow cross-region + connectivity. (Thus, you should set seed addresses to the public + IP as well.) You will need to open the storage_port or + ssl_storage_port on the public IP firewall. (For intra-Region + traffic, Cassandra will switch to the private IP after + establishing a connection.) + +RackInferringSnitch: + Proximity is determined by rack and data center, which are + assumed to correspond to the 3rd and 2nd octet of each node's IP + address, respectively. Unless this happens to match your + deployment conventions, this is best used as an example of + writing a custom Snitch class and is provided in that spirit. + +You can use a custom Snitch by setting this to the full class name +of the snitch, which will be assumed to be on your classpath. + +_Default Value:_ SimpleSnitch + +== `dynamic_snitch_update_interval_in_ms` + + +controls how often to perform the more expensive part of host score +calculation + +_Default Value:_ 100 + +== `dynamic_snitch_reset_interval_in_ms` + +controls how often to reset all host scores, allowing a bad host to +possibly recover + +_Default Value:_ 600000 + +== `dynamic_snitch_badness_threshold` + +if set greater than zero, this will allow +'pinning' of replicas to hosts in order to increase cache capacity. +The badness threshold will control how much worse the pinned host has to be +before the dynamic snitch will prefer other replicas over it. This is +expressed as a double which represents a percentage. Thus, a value of +0.2 means Cassandra would continue to prefer the static snitch values +until the pinned host was 20% worse than the fastest. + +_Default Value:_ 0.1 + +== `server_encryption_options` + + +Enable or disable inter-node encryption +JVM and netty defaults for supported SSL socket protocols and cipher suites can +be replaced using custom encryption options. This is not recommended +unless you have policies in place that dictate certain settings, or +need to disable vulnerable ciphers or protocols in case the JVM cannot +be updated. +FIPS compliant settings can be configured at JVM level and should not +involve changing encryption settings here: +https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/FIPS.html + +*NOTE* No custom encryption options are enabled at the moment +The available internode options are : all, none, dc, rack +If set to dc cassandra will encrypt the traffic between the DCs +If set to rack cassandra will encrypt the traffic between the racks + +The passwords used in these options must match the passwords used when generating +the keystore and truststore. For instructions on generating these files, see: +http://download.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore + + +_Default Value (complex option)_: + +.... + # set to true for allowing secure incoming connections + enabled: false + # If enabled and optional are both set to true, encrypted and unencrypted connections are handled on the storage_port + optional: false + # if enabled, will open up an encrypted listening socket on ssl_storage_port. Should be used + # during upgrade to 4.0; otherwise, set to false. + enable_legacy_ssl_storage_port: false + # on outbound connections, determine which type of peers to securely connect to. 'enabled' must be set to true. + internode_encryption: none + keystore: conf/.keystore + keystore_password: cassandra + truststore: conf/.truststore + truststore_password: cassandra + # More advanced defaults below: + # protocol: TLS + # store_type: JKS + # cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA] + # require_client_auth: false + # require_endpoint_verification: false +.... + +== `client_encryption_options` + +enable or disable client-to-server encryption. + +_Default Value (complex option)_: + +.... + enabled: false + # If enabled and optional is set to true encrypted and unencrypted connections are handled. + optional: false + keystore: conf/.keystore + keystore_password: cassandra + # require_client_auth: false + # Set trustore and truststore_password if require_client_auth is true + # truststore: conf/.truststore + # truststore_password: cassandra + # More advanced defaults below: + # protocol: TLS + # store_type: JKS + # cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA] +.... + +== `internode_compression` + +internode_compression controls whether traffic between nodes is +compressed. +Can be: + +all + all traffic is compressed + +dc + traffic between different datacenters is compressed + +none + nothing is compressed. + +_Default Value:_ dc + +== `inter_dc_tcp_nodelay` + + +Enable or disable tcp_nodelay for inter-dc communication. +Disabling it will result in larger (but fewer) network packets being sent, +reducing overhead from the TCP protocol itself, at the cost of increasing +latency if you block for cross-datacenter responses. + +_Default Value:_ false + +== `tracetype_query_ttl` + + +TTL for different trace types used during logging of the repair process. + +_Default Value:_ 86400 + +== `tracetype_repair_ttl` + + +_Default Value:_ 604800 + +== `enable_user_defined_functions` + + +If unset, all GC Pauses greater than gc_log_threshold_in_ms will log at +INFO level +UDFs (user defined functions) are disabled by default. +As of Cassandra 3.0 there is a sandbox in place that should prevent execution of evil code. + +_Default Value:_ false + +== `enable_scripted_user_defined_functions` + + +Enables scripted UDFs (JavaScript UDFs). +Java UDFs are always enabled, if enable_user_defined_functions is true. +Enable this option to be able to use UDFs with "language javascript" or any custom JSR-223 provider. +This option has no effect, if enable_user_defined_functions is false. + +_Default Value:_ false + +== `windows_timer_interval` + + +The default Windows kernel timer and scheduling resolution is 15.6ms for power conservation. +Lowering this value on Windows can provide much tighter latency and better throughput, however +some virtualized environments may see a negative performance impact from changing this setting +below their system default. The sysinternals 'clockres' tool can confirm your system's default +setting. + +_Default Value:_ 1 + +== `transparent_data_encryption_options` + + + +Enables encrypting data at-rest (on disk). Different key providers can be plugged in, but the default reads from +a JCE-style keystore. A single keystore can hold multiple keys, but the one referenced by +the "key_alias" is the only key that will be used for encrypt opertaions; previously used keys +can still (and should!) be in the keystore and will be used on decrypt operations +(to handle the case of key rotation). + +It is strongly recommended to download and install Java Cryptography Extension (JCE) +Unlimited Strength Jurisdiction Policy Files for your version of the JDK. +(current link: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html) + +Currently, only the following file types are supported for transparent data encryption, although +more are coming in future cassandra releases: commitlog, hints + +_Default Value (complex option)_: + +.... + enabled: false + chunk_length_kb: 64 + cipher: AES/CBC/PKCS5Padding + key_alias: testing:1 + # CBC IV length for AES needs to be 16 bytes (which is also the default size) + # iv_length: 16 + key_provider: + - class_name: org.apache.cassandra.security.JKSKeyProvider + parameters: + - keystore: conf/.keystore + keystore_password: cassandra + store_type: JCEKS + key_password: cassandra +.... + +== `tombstone_warn_threshold` + + +#################### +SAFETY THRESHOLDS # +#################### + +When executing a scan, within or across a partition, we need to keep the +tombstones seen in memory so we can return them to the coordinator, which +will use them to make sure other replicas also know about the deleted rows. +With workloads that generate a lot of tombstones, this can cause performance +problems and even exaust the server heap. +(http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets) +Adjust the thresholds here if you understand the dangers and want to +scan more tombstones anyway. These thresholds may also be adjusted at runtime +using the StorageService mbean. + +_Default Value:_ 1000 + +== `tombstone_failure_threshold` + + +_Default Value:_ 100000 + +== `batch_size_warn_threshold_in_kb` + + +Log WARN on any multiple-partition batch size exceeding this value. 5kb per batch by default. +Caution should be taken on increasing the size of this threshold as it can lead to node instability. + +_Default Value:_ 5 + +== `batch_size_fail_threshold_in_kb` + + +Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default. + +_Default Value:_ 50 + +== `unlogged_batch_across_partitions_warn_threshold` + + +Log WARN on any batches not of type LOGGED than span across more partitions than this limit + +_Default Value:_ 10 + +== `compaction_large_partition_warning_threshold_mb` + + +Log a warning when compacting partitions larger than this value + +_Default Value:_ 100 + +== `gc_log_threshold_in_ms` + +*This option is commented out by default.* + +GC Pauses greater than 200 ms will be logged at INFO level +This threshold can be adjusted to minimize logging if necessary + +_Default Value:_ 200 + +== `gc_warn_threshold_in_ms` + +*This option is commented out by default.* + +GC Pauses greater than gc_warn_threshold_in_ms will be logged at WARN level +Adjust the threshold based on your application throughput requirement. Setting to 0 +will deactivate the feature. + +_Default Value:_ 1000 + +== `max_value_size_in_mb` + +*This option is commented out by default.* + +Maximum size of any value in SSTables. Safety measure to detect SSTable corruption +early. Any value size larger than this threshold will result into marking an SSTable +as corrupted. This should be positive and less than 2048. + +_Default Value:_ 256 + +== `back_pressure_enabled` + + +Back-pressure settings # +If enabled, the coordinator will apply the back-pressure strategy specified below to each mutation +sent to replicas, with the aim of reducing pressure on overloaded replicas. + +_Default Value:_ false + +== `back_pressure_strategy` + +The back-pressure strategy applied. +The default implementation, RateBasedBackPressure, takes three arguments: +high ratio, factor, and flow type, and uses the ratio between incoming mutation responses and outgoing mutation requests. +If below high ratio, outgoing mutations are rate limited according to the incoming rate decreased by the given factor; +if above high ratio, the rate limiting is increased by the given factor; +such factor is usually best configured between 1 and 10, use larger values for a faster recovery +at the expense of potentially more dropped mutations; +the rate limiting is applied according to the flow type: if FAST, it's rate limited at the speed of the fastest replica, +if SLOW at the speed of the slowest one. +New strategies can be added. Implementors need to implement org.apache.cassandra.net.BackpressureStrategy and +provide a public constructor accepting a Map. + +== `otc_coalescing_strategy` + +*This option is commented out by default.* + +Coalescing Strategies # +Coalescing multiples messages turns out to significantly boost message processing throughput (think doubling or more). +On bare metal, the floor for packet processing throughput is high enough that many applications won't notice, but in +virtualized environments, the point at which an application can be bound by network packet processing can be +surprisingly low compared to the throughput of task processing that is possible inside a VM. It's not that bare metal +doesn't benefit from coalescing messages, it's that the number of packets a bare metal network interface can process +is sufficient for many applications such that no load starvation is experienced even without coalescing. +There are other benefits to coalescing network messages that are harder to isolate with a simple metric like messages +per second. By coalescing multiple tasks together, a network thread can process multiple messages for the cost of one +trip to read from a socket, and all the task submission work can be done at the same time reducing context switching +and increasing cache friendliness of network message processing. +See CASSANDRA-8692 for details. + +Strategy to use for coalescing messages in OutboundTcpConnection. +Can be fixed, movingaverage, timehorizon, disabled (default). +You can also specify a subclass of CoalescingStrategies.CoalescingStrategy by name. + +_Default Value:_ DISABLED + +== `otc_coalescing_window_us` + +*This option is commented out by default.* + +How many microseconds to wait for coalescing. For fixed strategy this is the amount of time after the first +message is received before it will be sent with any accompanying messages. For moving average this is the +maximum amount of time that will be waited as well as the interval at which messages must arrive on average +for coalescing to be enabled. + +_Default Value:_ 200 + +== `otc_coalescing_enough_coalesced_messages` + +*This option is commented out by default.* + +Do not try to coalesce messages if we already got that many messages. This should be more than 2 and less than 128. + +_Default Value:_ 8 + +== `otc_backlog_expiration_interval_ms` + +*This option is commented out by default.* + +How many milliseconds to wait between two expiration runs on the backlog (queue) of the OutboundTcpConnection. +Expiration is done if messages are piling up in the backlog. Droppable messages are expired to free the memory +taken by expired messages. The interval should be between 0 and 1000, and in most installations the default value +will be appropriate. A smaller value could potentially expire messages slightly sooner at the expense of more CPU +time and queue contention while iterating the backlog of messages. +An interval of 0 disables any wait time, which is the behavior of former Cassandra versions. + + +_Default Value:_ 200 + +== `ideal_consistency_level` + +*This option is commented out by default.* + +Track a metric per keyspace indicating whether replication achieved the ideal consistency +level for writes without timing out. This is different from the consistency level requested by +each write which may be lower in order to facilitate availability. + +_Default Value:_ EACH_QUORUM + +== `automatic_sstable_upgrade` + +*This option is commented out by default.* + +Automatically upgrade sstables after upgrade - if there is no ordinary compaction to do, the +oldest non-upgraded sstable will get upgraded to the latest version + +_Default Value:_ false + +== `max_concurrent_automatic_sstable_upgrades` + +*This option is commented out by default.* +Limit the number of concurrent sstable upgrades + +_Default Value:_ 1 + +== `audit_logging_options` + + +Audit logging - Logs every incoming CQL command request, authentication to a node. See the docs +on audit_logging for full details about the various configuration options. + +== `full_query_logging_options` + +*This option is commented out by default.* + + +default options for full query logging - these can be overridden from command line when executing +nodetool enablefullquerylog + +== `corrupted_tombstone_strategy` + +*This option is commented out by default.* + +validate tombstones on reads and compaction +can be either "disabled", "warn" or "exception" + +_Default Value:_ disabled + +== `diagnostic_events_enabled` + + +Diagnostic Events # +If enabled, diagnostic events can be helpful for troubleshooting operational issues. Emitted events contain details +on internal state and temporal relationships across events, accessible by clients via JMX. + +_Default Value:_ false + +== `native_transport_flush_in_batches_legacy` + +*This option is commented out by default.* + +Use native transport TCP message coalescing. If on upgrade to 4.0 you found your throughput decreasing, and in +particular you run an old kernel or have very fewer client connections, this option might be worth evaluating. + +_Default Value:_ false + +== `repaired_data_tracking_for_range_reads_enabled` + + +Enable tracking of repaired state of data during reads and comparison between replicas +Mismatches between the repaired sets of replicas can be characterized as either confirmed +or unconfirmed. In this context, unconfirmed indicates that the presence of pending repair +sessions, unrepaired partition tombstones, or some other condition means that the disparity +cannot be considered conclusive. Confirmed mismatches should be a trigger for investigation +as they may be indicative of corruption or data loss. +There are separate flags for range vs partition reads as single partition reads are only tracked +when CL > 1 and a digest mismatch occurs. Currently, range queries don't use digests so if +enabled for range reads, all range reads will include repaired data tracking. As this adds +some overhead, operators may wish to disable it whilst still enabling it for partition reads + +_Default Value:_ false + +== `repaired_data_tracking_for_partition_reads_enabled` + + +_Default Value:_ false + +== `report_unconfirmed_repaired_data_mismatches` + +If false, only confirmed mismatches will be reported. If true, a separate metric for unconfirmed +mismatches will also be recorded. This is to avoid potential signal:noise issues are unconfirmed +mismatches are less actionable than confirmed ones. + +_Default Value:_ false + +== `enable_materialized_views` + + +######################## +EXPERIMENTAL FEATURES # +######################## + +Enables materialized view creation on this node. +Materialized views are considered experimental and are not recommended for production use. + +_Default Value:_ false + +== `enable_sasi_indexes` + + +Enables SASI index creation on this node. +SASI indexes are considered experimental and are not recommended for production use. + +_Default Value:_ false + +== `enable_transient_replication` + + +Enables creation of transiently replicated keyspaces on this node. +Transient replication is experimental and is not recommended for production use. + +_Default Value:_ false diff --git a/doc/source/modules/cassandra/pages/configuration/index.adoc b/doc/source/modules/cassandra/pages/configuration/index.adoc new file mode 100644 index 000000000000..7c8ee367a90f --- /dev/null +++ b/doc/source/modules/cassandra/pages/configuration/index.adoc @@ -0,0 +1,11 @@ += Configuring Cassandra + +This section describes how to configure Apache Cassandra. + +* xref:configuration/cass_yaml_file.adoc[cassandra.yaml] +* xref:configuration/cass_rackdc_file.adoc[cassandra-rackdc.properties] +* xref:configuration/cass_env_sh_file.adoc[cassandra-env.sh] +* xref:configuration/cass_topo_file.adoc[cassandra-topologies.properties] +* xref:configuration/cass_cl_archive_file.adoc[commitlog-archiving.properties] +* xref:configuration/cass_cl_logback_xml_file.adoc[logback.xml] +* xref:configuration/cass_jvm_options_file.adoc[jvm-* files] diff --git a/doc/source/modules/cassandra/pages/cql/appendices.adoc b/doc/source/modules/cassandra/pages/cql/appendices.adoc new file mode 100644 index 000000000000..7e17266a3f7e --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/appendices.adoc @@ -0,0 +1,179 @@ += Appendices + +[[appendix-A]] +== Appendix A: CQL Keywords + +CQL distinguishes between _reserved_ and _non-reserved_ keywords. +Reserved keywords cannot be used as identifier, they are truly reserved +for the language (but one can enclose a reserved keyword by +double-quotes to use it as an identifier). Non-reserved keywords however +only have a specific meaning in certain context but can used as +identifier otherwise. The only _raison d’être_ of these non-reserved +keywords is convenience: some keyword are non-reserved when it was +always easy for the parser to decide whether they were used as keywords +or not. + +[width="48%",cols="60%,40%",options="header",] +|=== +|Keyword |Reserved? +|`ADD` |yes +|`AGGREGATE` |no +|`ALL` |no +|`ALLOW` |yes +|`ALTER` |yes +|`AND` |yes +|`APPLY` |yes +|`AS` |no +|`ASC` |yes +|`ASCII` |no +|`AUTHORIZE` |yes +|`BATCH` |yes +|`BEGIN` |yes +|`BIGINT` |no +|`BLOB` |no +|`BOOLEAN` |no +|`BY` |yes +|`CALLED` |no +|`CLUSTERING` |no +|`COLUMNFAMILY` |yes +|`COMPACT` |no +|`CONTAINS` |no +|`COUNT` |no +|`COUNTER` |no +|`CREATE` |yes +|`CUSTOM` |no +|`DATE` |no +|`DECIMAL` |no +|`DELETE` |yes +|`DESC` |yes +|`DESCRIBE` |yes +|`DISTINCT` |no +|`DOUBLE` |no +|`DROP` |yes +|`ENTRIES` |yes +|`EXECUTE` |yes +|`EXISTS` |no +|`FILTERING` |no +|`FINALFUNC` |no +|`FLOAT` |no +|`FROM` |yes +|`FROZEN` |no +|`FULL` |yes +|`FUNCTION` |no +|`FUNCTIONS` |no +|`GRANT` |yes +|`IF` |yes +|`IN` |yes +|`INDEX` |yes +|`INET` |no +|`INFINITY` |yes +|`INITCOND` |no +|`INPUT` |no +|`INSERT` |yes +|`INT` |no +|`INTO` |yes +|`JSON` |no +|`KEY` |no +|`KEYS` |no +|`KEYSPACE` |yes +|`KEYSPACES` |no +|`LANGUAGE` |no +|`LIMIT` |yes +|`LIST` |no +|`LOGIN` |no +|`MAP` |no +|`MODIFY` |yes +|`NAN` |yes +|`NOLOGIN` |no +|`NORECURSIVE` |yes +|`NOSUPERUSER` |no +|`NOT` |yes +|`NULL` |yes +|`OF` |yes +|`ON` |yes +|`OPTIONS` |no +|`OR` |yes +|`ORDER` |yes +|`PASSWORD` |no +|`PERMISSION` |no +|`PERMISSIONS` |no +|`PRIMARY` |yes +|`RENAME` |yes +|`REPLACE` |yes +|`RETURNS` |no +|`REVOKE` |yes +|`ROLE` |no +|`ROLES` |no +|`SCHEMA` |yes +|`SELECT` |yes +|`SET` |yes +|`SFUNC` |no +|`SMALLINT` |no +|`STATIC` |no +|`STORAGE` |no +|`STYPE` |no +|`SUPERUSER` |no +|`TABLE` |yes +|`TEXT` |no +|`TIME` |no +|`TIMESTAMP` |no +|`TIMEUUID` |no +|`TINYINT` |no +|`TO` |yes +|`TOKEN` |yes +|`TRIGGER` |no +|`TRUNCATE` |yes +|`TTL` |no +|`TUPLE` |no +|`TYPE` |no +|`UNLOGGED` |yes +|`UPDATE` |yes +|`USE` |yes +|`USER` |no +|`USERS` |no +|`USING` |yes +|`UUID` |no +|`VALUES` |no +|`VARCHAR` |no +|`VARINT` |no +|`WHERE` |yes +|`WITH` |yes +|`WRITETIME` |no +|=== + +== Appendix B: CQL Reserved Types + +The following type names are not currently used by CQL, but are reserved +for potential future use. User-defined types may not use reserved type +names as their name. + +[width="25%",cols="100%",options="header",] +|=== +|type +|`bitstring` +|`byte` +|`complex` +|`enum` +|`interval` +|`macaddr` +|=== + +== Appendix C: Dropping Compact Storage + +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: + +* CQL-created Compact Tables that have no clustering columns, will +expose an additional clustering column `column1` with `UTF8Type`. +* CQL-created Compact Tables that had no regular columns, will expose a +regular column `value` with `BytesType`. +* For CQL-Created Compact Tables, all columns originally defined as +`regular` will be come `static` +* CQL-created Compact Tables that have clustering but have no regular +columns will have an empty value column (of `EmptyType`) +* SuperColumn Tables (can only be created through Thrift) will expose a +compact value map with an empty name. +* Thrift-created Compact Tables will have types corresponding to their +Thrift definition. diff --git a/doc/source/modules/cassandra/pages/cql/changes.adoc b/doc/source/modules/cassandra/pages/cql/changes.adoc new file mode 100644 index 000000000000..1f89469a328d --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/changes.adoc @@ -0,0 +1,215 @@ += Changes + +The following describes the changes in each version of CQL. + +== 3.4.5 + +* Adds support for arithmetic operators (`11935`) +* Adds support for `+` and `-` operations on dates (`11936`) +* Adds `currentTimestamp`, `currentDate`, `currentTime` and +`currentTimeUUID` functions (`13132`) + +== 3.4.4 + +* `ALTER TABLE` `ALTER` has been removed; a column's type may not be +changed after creation (`12443`). +* `ALTER TYPE` `ALTER` has been removed; a field's type may not be +changed after creation (`12443`). + +== 3.4.3 + +* Adds a new `duration` `data types ` (`11873`). +* Support for `GROUP BY` (`10707`). +* Adds a `DEFAULT UNSET` option for `INSERT JSON` to ignore omitted +columns (`11424`). +* Allows `null` as a legal value for TTL on insert and update. It will +be treated as equivalent to inserting a 0 (`12216`). + +== 3.4.2 + +* If a table has a non zero `default_time_to_live`, then explicitly +specifying a TTL of 0 in an `INSERT` or `UPDATE` statement will result +in the new writes not having any expiration (that is, an explicit TTL of +0 cancels the `default_time_to_live`). This wasn't the case before and +the `default_time_to_live` was applied even though a TTL had been +explicitly set. +* `ALTER TABLE` `ADD` and `DROP` now allow multiple columns to be +added/removed. +* New `PER PARTITION LIMIT` option for `SELECT` statements (see +https://issues.apache.org/jira/browse/CASSANDRA-7017)[CASSANDRA-7017]. +* `User-defined functions ` can now instantiate +`UDTValue` and `TupleValue` instances via the new `UDFContext` interface +(see +https://issues.apache.org/jira/browse/CASSANDRA-10818)[CASSANDRA-10818]. +* `User-defined types ` may now be stored in a non-frozen form, +allowing individual fields to be updated and deleted in `UPDATE` +statements and `DELETE` statements, respectively. +(https://issues.apache.org/jira/browse/CASSANDRA-7423)[CASSANDRA-7423]). + +== 3.4.1 + +* Adds `CAST` functions. + +== 3.4.0 + +* Support for `materialized views `. +* `DELETE` support for inequality expressions and `IN` restrictions on +any primary key columns. +* `UPDATE` support for `IN` restrictions on any primary key columns. + +== 3.3.1 + +* The syntax `TRUNCATE TABLE X` is now accepted as an alias for +`TRUNCATE X`. + +== 3.3.0 + +* `User-defined functions and aggregates ` are now +supported. +* Allows double-dollar enclosed strings literals as an alternative to +single-quote enclosed strings. +* Introduces Roles to supersede user based authentication and access +control +* New `date`, `time`, `tinyint` and `smallint` `data types ` +have been added. +* `JSON support ` has been added +* Adds new time conversion functions and deprecate `dateOf` and +`unixTimestampOf`. + +== 3.2.0 + +* `User-defined types ` supported. +* `CREATE INDEX` now supports indexing collection columns, including +indexing the keys of map collections through the `keys()` function +* Indexes on collections may be queried using the new `CONTAINS` and +`CONTAINS KEY` operators +* `Tuple types ` were added to hold fixed-length sets of typed +positional fields. +* `DROP INDEX` now supports optionally specifying a keyspace. + +== 3.1.7 + +* `SELECT` statements now support selecting multiple rows in a single +partition using an `IN` clause on combinations of clustering columns. +* `IF NOT EXISTS` and `IF EXISTS` syntax is now supported by +`CREATE USER` and `DROP USER` statements, respectively. + +== 3.1.6 + +* A new `uuid()` method has been added. +* Support for `DELETE ... IF EXISTS` syntax. + +== 3.1.5 + +* It is now possible to group clustering columns in a relation, see +`WHERE ` clauses. +* Added support for `static columns `. + +== 3.1.4 + +* `CREATE INDEX` now allows specifying options when creating CUSTOM +indexes. + +== 3.1.3 + +* Millisecond precision formats have been added to the +`timestamp ` parser. + +== 3.1.2 + +* `NaN` and `Infinity` has been added as valid float constants. They are +now reserved keywords. In the unlikely case you we using them as a +column identifier (or keyspace/table one), you will now need to double +quote them. + +== 3.1.1 + +* `SELECT` statement now allows listing the partition keys (using the +`DISTINCT` modifier). See +https://issues.apache.org/jira/browse/CASSANDRA-4536[CASSANDRA-4536]. +* The syntax `c IN ?` is now supported in `WHERE` clauses. In that case, +the value expected for the bind variable will be a list of whatever type +`c` is. +* It is now possible to use named bind variables (using `:name` instead +of `?`). + +== 3.1.0 + +* `ALTER TABLE` `DROP` option added. +* `SELECT` statement now supports aliases in select clause. Aliases in +WHERE and ORDER BY clauses are not supported. +* `CREATE` statements for `KEYSPACE`, `TABLE` and `INDEX` now supports +an `IF NOT EXISTS` condition. Similarly, `DROP` statements support a +`IF EXISTS` condition. +* `INSERT` statements optionally supports a `IF NOT EXISTS` condition +and `UPDATE` supports `IF` conditions. + +== 3.0.5 + +* `SELECT`, `UPDATE`, and `DELETE` statements now allow empty `IN` +relations (see +https://issues.apache.org/jira/browse/CASSANDRA-5626)[CASSANDRA-5626]. + +== 3.0.4 + +* Updated the syntax for custom `secondary indexes `. +* Non-equal condition on the partition key are now never supported, even +for ordering partitioner as this was not correct (the order was *not* +the one of the type of the partition key). Instead, the `token` method +should always be used for range queries on the partition key (see +`WHERE clauses `). + +== 3.0.3 + +* Support for custom `secondary indexes ` has been +added. + +== 3.0.2 + +* Type validation for the `constants ` has been fixed. For +instance, the implementation used to allow `'2'` as a valid value for an +`int` column (interpreting it has the equivalent of `2`), or `42` as a +valid `blob` value (in which case `42` was interpreted as an hexadecimal +representation of the blob). This is no longer the case, type validation +of constants is now more strict. See the `data types ` +section for details on which constant is allowed for which type. +* The type validation fixed of the previous point has lead to the +introduction of blobs constants to allow the input of blobs. Do note +that while the input of blobs as strings constant is still supported by +this version (to allow smoother transition to blob constant), it is now +deprecated and will be removed by a future version. If you were using +strings as blobs, you should thus update your client code ASAP to switch +blob constants. +* A number of functions to convert native types to blobs have also been +introduced. Furthermore the token function is now also allowed in select +clauses. See the `section on functions ` for details. + +== 3.0.1 + +* Date strings (and timestamps) are no longer accepted as valid +`timeuuid` values. Doing so was a bug in the sense that date string are +not valid `timeuuid`, and it was thus resulting in +https://issues.apache.org/jira/browse/CASSANDRA-4936[confusing +behaviors]. However, the following new methods have been added to help +working with `timeuuid`: `now`, `minTimeuuid`, `maxTimeuuid` , `dateOf` +and `unixTimestampOf`. +* Float constants now support the exponent notation. In other words, +`4.2E10` is now a valid floating point value. + +== Versioning + +Versioning of the CQL language adheres to the http://semver.org[Semantic +Versioning] guidelines. Versions take the form X.Y.Z where X, Y, and Z +are integer values representing major, minor, and patch level +respectively. There is no correlation between Cassandra release versions +and the CQL language version. + +[cols=",",options="header",] +|=== +|version |description +| Major | The major version _must_ be bumped when backward incompatible changes +are introduced. This should rarely occur. +| Minor | Minor version increments occur when new, but backward compatible, +functionality is introduced. +| Patch | The patch version is incremented when bugs are fixed. +|=== diff --git a/doc/source/modules/cassandra/pages/cql/configuring.adoc b/doc/source/modules/cassandra/pages/cql/configuring.adoc new file mode 100644 index 000000000000..fd028078e13d --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/configuring.adoc @@ -0,0 +1,83 @@ += Configuring Cassandra + +The `Cassandra` configuration files location varies, depending on the +type of installation: + +* tarball: `conf` directory within the tarball install location +* package: `/etc/cassandra` directory + +Cassandra's default configuration file, `cassandra.yaml`, is sufficient +to explore a simple single-node `cluster`. However, anything beyond +running a single-node cluster locally requires additional configuration +to various Cassandra configuration files. Some examples that require +non-default configuration are deploying a multi-node cluster or using +clients that are not running on a cluster node. + +* `cassandra.yaml`: the main configuration file for Cassandra +* `cassandra-env.sh`: environment variables can be set +* `cassandra-rackdc.properties` OR `cassandra-topology.properties`: set +rack and datacenter information for a cluster +* `logback.xml`: logging configuration including logging levels +* `jvm-*`: a number of JVM configuration files for both the server and +clients +* `commitlog_archiving.properties`: set archiving parameters for the +`commitlog` + +Two sample configuration files can also be found in `./conf`: + +* `metrics-reporter-config-sample.yaml`: configuring what the +metrics-report will collect +* `cqlshrc.sample`: how the CQL shell, cqlsh, can be configured + +== Main runtime properties + +Configuring Cassandra is done by setting yaml properties in the +`cassandra.yaml` file. At a minimum you should consider setting the +following properties: + +* `cluster_name`: Set the name of your cluster. +* `seeds`: A comma separated list of the IP addresses of your cluster +`seed nodes`. +* `storage_port`: Check that you don't have the default port of 7000 +blocked by a firewall. +* `listen_address`: The `listen address` is the IP address of a node +that allows it to communicate with other nodes in the cluster. Set to +[.title-ref]#localhost# by default. Alternatively, you can set +`listen_interface` to tell Cassandra which interface to use, and +consecutively which address to use. Set one property, not both. +* `native_transport_port`: Check that you don't have the default port of +9042 blocked by a firewall, so that clients like cqlsh can communicate +with Cassandra on this port. + +== Changing the location of directories + +The following yaml properties control the location of directories: + +* `data_file_directories`: One or more directories where data files, +like `SSTables` are located. +* `commitlog_directory`: The directory where commitlog files are +located. +* `saved_caches_directory`: The directory where saved caches are +located. +* `hints_directory`: The directory where `hints` are located. + +For performance reasons, if you have multiple disks, consider putting +commitlog and data files on different disks. + +== Environment variables + +JVM-level settings such as heap size can be set in `cassandra-env.sh`. +You can add any additional JVM command line argument to the `JVM_OPTS` +environment variable; when Cassandra starts, these arguments will be +passed to the JVM. + +== Logging + +The default logger is [.title-ref]#logback#. By default it will log: + +* *INFO* level in `system.log` +* *DEBUG* level in `debug.log` + +When running in the foreground, it will also log at INFO level to the +console. You can change logging properties by editing `logback.xml` or +by running the [.title-ref]#nodetool setlogginglevel# command. diff --git a/doc/source/modules/cassandra/pages/cql/ddl.adoc b/doc/source/modules/cassandra/pages/cql/ddl.adoc new file mode 100644 index 000000000000..0d3908d20872 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/ddl.adoc @@ -0,0 +1,938 @@ += Data Definition + +CQL stores data in _tables_, whose schema defines the layout of said +data in the table, and those tables are grouped in _keyspaces_. A +keyspace defines a number of options that applies to all the tables it +contains, most prominently of which is the +`replication strategy ` used by the keyspace. It +is generally encouraged to use one keyspace by _application_, and thus +many cluster may define only one keyspace. + +This section describes the statements used to create, modify, and remove +those keyspace and tables. + +== Common definitions + +The names of the keyspaces and tables are defined by the following +grammar: + +[source,bnf] +---- +include::example$BNF/ks_table.bnf[] +---- + +Both keyspace and table name should be comprised of only alphanumeric +characters, cannot be empty and are limited in size to 48 characters +(that limit exists mostly to avoid filenames (which may include the +keyspace and table name) to go over the limits of certain file systems). +By default, keyspace and table names are case-insensitive (`myTable` is +equivalent to `mytable`) but case sensitivity can be forced by using +double-quotes (`"myTable"` is different from `mytable`). + +Further, a table is always part of a keyspace and a table name can be +provided fully-qualified by the keyspace it is part of. If is is not +fully-qualified, the table is assumed to be in the _current_ keyspace +(see `USE statement `). + +Further, the valid names for columns is simply defined as: + +[source,bnf] +---- +include::example$BNF/column.bnf[] +---- + +We also define the notion of statement options for use in the following +section: + +[source,bnf] +---- +include::example$BNF/options.bnf[] +---- + +[[create-keyspace-statement]] +== CREATE KEYSPACE + +A keyspace is created using a `CREATE KEYSPACE` statement: + +[source,bnf] +---- +include::example$BNF/create_ks.bnf[] +---- + +For instance: + +[source,cql] +---- +include::example$CQL/create_ks.cql[] +---- + +Attempting to create a keyspace that already exists will return an error +unless the `IF NOT EXISTS` option is used. If it is used, the statement +will be a no-op if the keyspace already exists. + +The supported `options` are: + +[cols=",,,,",options="header",] +|=== +|name |kind |mandatory |default |description +|`replication` | _map_ | yes | The replication strategy and options to use for the keyspace (see +details below). +|`durable_writes` | _simple_ | no | true | Whether to use the commit log for updates on this keyspace (disable this +option at your own risk!). +|=== + +The `replication` property is mandatory and must at least contains the +`'class'` sub-option which defines the +`replication strategy ` class to use. The rest of +the sub-options depends on what replication strategy is used. By +default, Cassandra support the following `'class'`: + +[[replication-strategy]] +=== `SimpleStrategy` + +A simple strategy that defines a replication factor for data to be +spread across the entire cluster. This is generally not a wise choice +for production because it does not respect datacenter layouts and can +lead to wildly varying query latency. For a production ready strategy, +see `NetworkTopologyStrategy`. `SimpleStrategy` supports a single +mandatory argument: + +[cols=",,,",options="header",] +|=== +|sub-option |type |since |description +|`'replication_factor'` | int | all | The number of replicas to store per range +|=== + +=== `NetworkTopologyStrategy` + +A production ready replication strategy that allows to set the +replication factor independently for each data-center. The rest of the +sub-options are key-value pairs where a key is a data-center name and +its value is the associated replication factor. Options: + +[cols=",,,",options="header",] +|=== +|sub-option |type |since |description +|`''` | int | all | The number of replicas to store per range in the provided datacenter. +|`'replication_factor'` | int | 4.0 | The number of replicas to use as a default per datacenter if not +specifically provided. Note that this always defers to existing +definitions or explicit datacenter settings. For example, to have three +replicas per datacenter, supply this with a value of 3. +|=== + +Note that when altering keyspaces and supplying `replication_factor`, +auto-expansion will only _add_ new datacenters for safety, it will not +alter existing datacenters or remove any even if they are no longer in +the cluster. If you want to remove datacenters while still supplying +`replication_factor`, explicitly zero out the datacenter you want to +have zero replicas. + +An example of auto-expanding datacenters with two datacenters: `DC1` and +`DC2`: + +[source,cql] +---- +include::example$CQL/autoexpand_ks.cql[] +---- +will result in: +[source,plaintext] +---- +include::example$RESULTS/autoexpand_ks.result[] +---- + +An example of auto-expanding and overriding a datacenter: + +[source,cql] +---- +include::example$CQL/autoexpand_ks_override.cql[] +---- +will result in: +[source,plaintext] +---- +include::example$RESULTS/autoexpand_ks_override.result[] +---- + +An example that excludes a datacenter while using `replication_factor`: + +[source,cql] +---- +include::example$CQL/autoexpand_exclude_dc.cql[] +---- +will result in: +[source,plaintext] +---- +include::example$RESULTS/autoexpand_exclude_dc.result[] +---- + +If transient replication has been enabled, transient replicas can be +configured for both `SimpleStrategy` and `NetworkTopologyStrategy` by +defining replication factors in the format +`'/'` + +For instance, this keyspace will have 3 replicas in DC1, 1 of which is +transient, and 5 replicas in DC2, 2 of which are transient: + +[source,cql] +---- +include::example$CQL/create_ks_trans_repl.cql[] +---- + +[[use-statement]] +== USE + +The `USE` statement allows to change the _current_ keyspace (for the +_connection_ on which it is executed). A number of objects in CQL are +bound to a keyspace (tables, user-defined types, functions, ...) and the +current keyspace is the default keyspace used when those objects are +referred without a fully-qualified name (that is, without being prefixed +a keyspace name). A `USE` statement simply takes the keyspace to use as +current as argument: + +[source,bnf] +---- +include::example$BNF/use_ks.bnf[] +---- +Using CQL: +[source,cql] +---- +include::example$CQL/use_ks.cql[] +---- + +[[alter-keyspace-statement]] +== ALTER KEYSPACE + +An `ALTER KEYSPACE` statement allows to modify the options of a +keyspace: + +[source,bnf] +---- +include::example$BNF/alter_ks.bnf[] +---- + +For instance: + +[source,cql] +---- +include::example$CQL/alter_ks.cql[] +---- + +The supported options are the same than for +`creating a keyspace `. + +[[drop-keyspace-statement]] +== DROP KEYSPACE + +Dropping a keyspace can be done using the `DROP KEYSPACE` statement: + +[source,bnf] +---- +include::example$BNF/drop_ks.bnf[] +---- + +For instance: + +[source,cql] +---- +include::example$CQL/drop_ks.cql[] +---- + +Dropping a keyspace results in the immediate, irreversible removal of +that keyspace, including all the tables, UTD and functions in it, and +all the data contained in those tables. + +If the keyspace does not exists, the statement will return an error, +unless `IF EXISTS` is used in which case the operation is a no-op. + +[[create-table-statement]] +== CREATE TABLE + +Creating a new table uses the `CREATE TABLE` statement: + +[source,bnf] +---- +include::example$BNF/create_table.bnf[] +---- + +For example, here are some CQL statements to create tables: + +[source,cql] +---- +include::example$CQL/create_table.cql[] +---- + +A CQL table has a name and is composed of a set of _rows_. Creating a +table amounts to defining which `columns +` the rows will be composed, which of those columns +compose the `primary key `, as well as optional +`options ` for the table. + +Attempting to create an already existing table will return an error +unless the `IF NOT EXISTS` directive is used. If it is used, the +statement will be a no-op if the table already exists. + +[[column-definition]] +=== Column definitions + +Every rows in a CQL table has a set of predefined columns defined at the +time of the table creation (or added later using an +`alter statement`). + +A `column_definition` is primarily comprised of the name of the column +defined and it's `type `, which restrict which values are +accepted for that column. Additionally, a column definition can have the +following modifiers: + +`STATIC`:: + it declares the column as being a `static column `. +`PRIMARY KEY`:: + it declares the column as being the sole component of the + `primary key ` of the table. + +==== Static columns + +Some columns can be declared as `STATIC` in a table definition. A column +that is static will be “shared” by all the rows belonging to the same +partition (having the same `partition key `). For +instance: + +[source,cql] +---- +include::example$CQL/create_static_column.cql[] +include::example$CQL/insert_static_data.cql[] +include::example$CQL/select_static_data.cql[] +---- +results in: +[source,cql] +---- +include::example$RESULTS/select_static_data.result[] +---- + +As can be seen, the `s` value is the same (`static1`) for both of the +row in the partition (the partition key in that example being `pk`, both +rows are in that same partition): the 2nd insertion has overridden the +value for `s`. + +The use of static columns as the following restrictions: + +* tables with the `COMPACT STORAGE` option (see below) cannot use them. +* a table without clustering columns cannot have static columns (in a +table without clustering columns, every partition has only one row, and +so every column is inherently static). +* only non `PRIMARY KEY` columns can be static. + +[[primary-key]] +=== The Primary key + +Within a table, a row is uniquely identified by its `PRIMARY KEY`, and +hence all tables *must* define one PRIMARY KEY. +A `PRIMARY KEY` is composed of one or more of the defined columns in the table. +Syntactically, the primary key is defined the keywords `PRIMARY KEY` +followed by a comma-separated list of the column names within parenthesis. +If the primary key has only one column, you can alternatively add the `PRIMARY KEY` phrase to +that column in the table definition. +The order of the columns in the primary key definition define the partition key and +clustering columns. + +A CQL primary key is composed of two parts: + +`partition key `:: +* It is the first component of the primary key definition. +It can be a single column or, using an additional set of parenthesis, can be multiple columns. +A table must have at least one partition key, the smallest possible table definition is: ++ +[source,cql] +---- +include::example$CQL/create_table_single_pk.cql[] +---- +`clustering columns `:: +* The columns are the columns that follow the partition key in the primary key definition. +The order of those columns define the _clustering order_. + +Some examples of primary key definition are: + +* `PRIMARY KEY (a)`: `a` is the single partition key and there are no clustering columns +* `PRIMARY KEY (a, b, c)` : `a` is the single partition key and `b` and `c` are the clustering columns +* `PRIMARY KEY ((a, b), c)` : `a` and `b` compose the _composite_ partition key and `c` is the clustering column + +[IMPORTANT] +==== +The primary key uniquely identifies a row in the table, as described above. +A consequence of this uniqueness is that if another row is inserted using the same primary key, +then an `UPSERT` occurs and an existing row with the same primary key is replaced. +Columns that are not part of the primary key cannot define uniqueness. +==== + +[[partition-key]] +==== Partition key + +Within a table, CQL defines the notion of a _partition_ that defines the location of data within a Cassandra cluster. +A partition is the set of rows that share the same value for their partition key. + +Note that if the partition key is composed of multiple columns, then rows belong to the same partition +when they have the same values for all those partition key columns. +A hash is computed from the partition key columns and that hash value defines the partition location. +So, for instance, given the following table definition and content: + +[source,cql] +---- +include::example$CQL/create_table_compound_pk.cql[] +include::example$CQL/insert_table_compound_pk.cql[] +include::example$CQL/select_table_compound_pk.cql[] +---- + +will result in +[source,cql] +---- +include::example$RESULTS/select_table_compound_pk.result[] +---- +<1> Rows 1 and 2 are in the same partition, because both columns `a` and `b` are zero. +<2> Rows 3 and 4 are in the same partition, but a different one, because column `a` is zero and column `b` is 1 in both rows. +<3> Row 5 is in a third partition by itself, because both columns `a` and `b` are 1. + +Note that a table always has a partition key, and that if the table has +no `clustering columns`, then every partition of that table has a single row. +because the partition key, compound or otherwise, identifies a single location. + +The most important property of partition is that all the rows belonging +to the same partition are guaranteed to be stored on the same set of +replica nodes. +In other words, the partition key of a table defines which rows will be localized on the same +node in the cluster. +The localization of data is important to the efficient retrieval of data, requiring the Cassandra coordinator +to contact as few nodes as possible. +However, there is a flip-side to this guarantee, and all rows sharing a partition key will be stored on the same +node, creating a hotspot for both reading and writing. +While selecting a primary key that groups table rows assists batch updates and can ensure that the updates are +_atomic_ and done in _isolation_, the partitions must be sized "just right, not too big nor too small". + +Data modeling that considers the querying patterns and assigns primary keys based on the queries will have the lowest +latency in fetching data. + +[[clustering-columns]] +==== Clustering columns + +The clustering columns of a table define the clustering order for the partition of that table. +For a given `partition`, all rows are ordered by that clustering order. Clustering columns also add uniqueness to +a row in a table. + +For instance, given: + +[source,cql] +---- +include::example$CQL/create_table_clustercolumn.cql[] +include::example$CQL/insert_table_clustercolumn.cql[] +include::example$CQL/select_table_clustercolumn.cql[] +---- + +will result in +[source,cql] +---- +include::example$RESULTS/select_table_clustercolumn.result[] +---- +<1> Row 1 is in one partition, and Rows 2-5 are in a different one. The display order is also different. + +Looking more closely at the four rows in the same partition, the `b` clustering column defines the order in which those rows +are displayed. +Whereas the partition key of the table groups rows on the same node, the clustering columns control +how those rows are stored on the node. + +That sorting allows the very efficient retrieval of a range of rows within a partition: + +[source,cql] +---- +include::example$CQL/select_range.cql[] +---- + +will result in +[source,cql] +---- +include::example$RESULTS/select_range.result[] +---- + +[[create-table-options]] +=== Table options + +A CQL table has a number of options that can be set at creation (and, +for most of them, altered later). These options are specified after the +`WITH` keyword. + +Amongst those options, however, are two important ones that cannot be changed after +creation and influence which queries can be done against the table: +* `COMPACT STORAGE` +* `CLUSTERING ORDER` +Those, as well as the other options of a table, are described in the following +sections. + +==== Compact tables + +[WARNING] +.Warning +==== +Since Cassandra 3.0, compact tables have the exact same layout +internally than non compact ones (for the same schema obviously), and +declaring a table compact *only* creates artificial limitations on the +table definition and usage. It only exists for historical reason and is +preserved for backward compatibility And as `COMPACT STORAGE` cannot, as +of Cassandra , be removed, it is strongly discouraged to create new +table with the `COMPACT STORAGE` option. +==== + +A _compact_ table is one defined with the `COMPACT STORAGE` option. +This option is only maintained for backward compatibility for +definitions created before CQL version 3 and shouldn't be used for new +tables. Declaring a table with this option creates limitations for the +table which are largely arbitrary (and exists for historical reasons). +Amongst those limitation: + +* a compact table cannot use collections nor static columns. +* if a compact table has at least one clustering column, then it must +have _exactly_ one column outside of the primary key ones. This imply +you cannot add or remove columns after creation in particular. +* a compact table is limited in the indexes it can create, and no +materialized view can be created on it. + +[[clustering-order]] +==== Reversing the clustering order + +The clustering order of a table is defined by the +`clustering columns ` of that table. By default, +that ordering is based on natural order of those clustering order, but +the `CLUSTERING ORDER` allows to change that clustering order to use the +_reverse_ natural order for some (potentially all) of the columns. + +The `CLUSTERING ORDER` option takes the comma-separated list of the +clustering column, each with a `ASC` (for _ascendant_, e.g. the natural +order) or `DESC` (for _descendant_, e.g. the reverse natural order). +Note in particular that the default (if the `CLUSTERING ORDER` option is +not used) is strictly equivalent to using the option with all clustering +columns using the `ASC` modifier. + +Note that this option is basically a hint for the storage engine to +change the order in which it stores the row but it has 3 visible +consequences: + +* it limits which `ORDER BY` clause are allowed for +`selects ` on that table. You can only:: + order results by the clustering order or the reverse clustering order. + Meaning that if a table has 2 clustering column `a` and `b` and you + defined `WITH CLUSTERING ORDER (a DESC, b ASC)`, then in queries you + will be allowed to use `ORDER BY (a DESC, b ASC)` and (reverse + clustering order) `ORDER BY (a ASC, b DESC)` but *not* + `ORDER BY (a ASC, b ASC)` (nor `ORDER BY (a DESC, b DESC)`). +* it also change the default order of results when queried (if no +`ORDER BY` is provided). Results are always returned:: + in clustering order (within a partition). +* it has a small performance impact on some queries as queries in +reverse clustering order are slower than the one in:: + forward clustering order. In practice, this means that if you plan on + querying mostly in the reverse natural order of your columns (which is + common with time series for instance where you often want data from + the newest to the oldest), it is an optimization to declare a + descending clustering order. + +[[create-table-general-options]] +==== Other table options + +review (misses cdc if nothing else) and link to proper categories when +appropriate (compaction for instance) + +A table supports the following options: + +[width="100%",cols="30%,9%,11%,50%",options="header",] +|=== +|option | kind | default | description + +| `comment` | _simple_ | none | A free-form, human-readable comment. +| `speculative_retry` | _simple_ | 99PERCENTILE | Speculative retry options +| `cdc` |_boolean_ |false |Create a Change Data Capture (CDC) log on the table. +| `additional_write_policy` |_simple_ |99PERCENTILE |`Speculative retry options +| `gc_grace_seconds` |_simple_ |864000 |Time to wait before garbage +collecting tombstones (deletion markers). +| `bloom_filter_fp_chance` |_simple_ |0.00075 |The target probability of +false positive of the sstable bloom filters. Said bloom filters will be +sized to provide the provided probability (thus lowering this value +impact the size of bloom filters in-memory and on-disk) +| `default_time_to_live` |_simple_ |0 |The default expiration time (“TTL”) in seconds for a table. +| `compaction` |_map_ |_see below_ |`Compaction options `. +| `compression` |_map_ |_see below_ |`Compression options `. +| `caching` |_map_ |_see below_ |Caching options +| `memtable_flush_period_in_ms` |_simple_ |0 |Time (in ms) before Cassandra flushes memtables to disk. +| `read_repair` |_simple_ |BLOCKING |Sets read repair behavior (see below) +|=== + +===== Speculative retry options + +By default, Cassandra read coordinators only query as many replicas as +necessary to satisfy consistency levels: one for consistency level +`ONE`, a quorum for `QUORUM`, and so on. `speculative_retry` determines +when coordinators may query additional replicas, which is useful when +replicas are slow or unresponsive. Speculative retries are used to +reduce the latency. The speculative_retry option may be used to +configure rapid read protection with which a coordinator sends more +requests than needed to satisfy the Consistency level. + +Pre-4.0 speculative Retry Policy takes a single string as a parameter, +this can be `NONE`, `ALWAYS`, `99PERCENTILE` (PERCENTILE), `50MS` +(CUSTOM). + +Examples of setting speculative retry are: + +[source,cql] +---- +ALTER TABLE users WITH speculative_retry = '10ms'; +---- + +Or, + +[source,cql] +---- +ALTER TABLE users WITH speculative_retry = '99PERCENTILE'; +---- + +The problem with these settings is when a single host goes into an +unavailable state this drags up the percentiles. This means if we are +set to use `p99` alone, we might not speculate when we intended to to +because the value at the specified percentile has gone so high. As a fix +4.0 adds support for hybrid `MIN()`, `MAX()` speculative retry policies +(https://issues.apache.org/jira/browse/CASSANDRA-14293[CASSANDRA-14293]). +This means if the normal `p99` for the table is <50ms, we will still +speculate at this value and not drag the tail latencies up... but if the +`p99th` goes above what we know we should never exceed we use that +instead. + +In 4.0 the values (case-insensitive) discussed in the following table +are supported: + +[cols=",,",options="header",] +|=== +|Format |Example |Description +| `XPERCENTILE` | 90.5PERCENTILE | Coordinators record average per-table response times +for all replicas. If a replica takes longer than `X` percent of this +table's average response time, the coordinator queries an additional +replica. `X` must be between 0 and 100. +| `XP` | 90.5P | Synonym for `XPERCENTILE` +| `Yms` | 25ms | If a replica takes more than `Y` milliseconds to respond, the +coordinator queries an additional replica. +| `MIN(XPERCENTILE,YMS)` | MIN(99PERCENTILE,35MS) | A hybrid policy that will use either the +specified percentile or fixed milliseconds depending on which value is +lower at the time of calculation. Parameters are `XPERCENTILE`, `XP`, or +`Yms`. This is helpful to help protect against a single slow instance; +in the happy case the 99th percentile is normally lower than the +specified fixed value however, a slow host may skew the percentile very +high meaning the slower the cluster gets, the higher the value of the +percentile, and the higher the calculated time used to determine if we +should speculate or not. This allows us to set an upper limit that we +want to speculate at, but avoid skewing the tail latencies by +speculating at the lower value when the percentile is less than the +specified fixed upper bound. + +| `MAX(XPERCENTILE,YMS)` `ALWAYS` `NEVER` | MAX(90.5P,25ms) | A hybrid policy that will use either the specified +percentile or fixed milliseconds depending on which value is higher at +the time of calculation. Coordinators always query all replicas. +Coordinators never query additional replicas. +|=== + +As of version 4.0 speculative retry allows more friendly params +(https://issues.apache.org/jira/browse/CASSANDRA-13876[CASSANDRA-13876]). +The `speculative_retry` is more flexible with case. As an example a +value does not have to be `NONE`, and the following are supported +alternatives. + +[source,cql] +---- +alter table users WITH speculative_retry = 'none'; +alter table users WITH speculative_retry = 'None'; +---- + +The text component is case insensitive and for `nPERCENTILE` version 4.0 +allows `nP`, for instance `99p`. In a hybrid value for speculative +retry, one of the two values must be a fixed millisecond value and the +other a percentile value. + +Some examples: + +[source,cql] +---- +min(99percentile,50ms) +max(99p,50MS) +MAX(99P,50ms) +MIN(99.9PERCENTILE,50ms) +max(90percentile,100MS) +MAX(100.0PERCENTILE,60ms) +---- + +Two values of the same kind cannot be specified such as +`min(90percentile,99percentile)` as it wouldn’t be a hybrid value. This +setting does not affect reads with consistency level `ALL` because they +already query all replicas. + +Note that frequently reading from additional replicas can hurt cluster +performance. When in doubt, keep the default `99PERCENTILE`. + +`additional_write_policy` specifies the threshold at which a cheap +quorum write will be upgraded to include transient replicas. + +[[cql-compaction-options]] +===== Compaction options + +The `compaction` options must at least define the `'class'` sub-option, +that defines the compaction strategy class to use. The supported class +are `'SizeTieredCompactionStrategy'` (`STCS `), +`'LeveledCompactionStrategy'` (`LCS `) and +`'TimeWindowCompactionStrategy'` (`TWCS `) (the +`'DateTieredCompactionStrategy'` is also supported but is deprecated and +`'TimeWindowCompactionStrategy'` should be preferred instead). The +default is `'SizeTieredCompactionStrategy'`. Custom strategy can be +provided by specifying the full class name as a `string constant +`. + +All default strategies support a number of +`common options `, as well as options specific to +the strategy chosen (see the section corresponding to your strategy for +details: `STCS `, `LCS +` and `TWCS `). + +[[cql-compression-options]] +===== Compression options + +The `compression` options define if and how the sstables of the table +are compressed. Compression is configured on a per-table basis as an +optional argument to `CREATE TABLE` or `ALTER TABLE`. The following +sub-options are available: + +[cols=",,",options="header",] +|=== +|Option |Default |Description + +| `class` | LZ4Compressor | The compression algorithm to use. Default compressor are: LZ4Compressor, +SnappyCompressor, DeflateCompressor and ZstdCompressor. Use +`'enabled' : false` to disable compression. Custom compressor can be +provided by specifying the full class name as a “string constant”:constants. + +| `enabled` | true | Enable/disable sstable compression. If the `enabled` option is set to +`false` no other options must be specified. + +| `chunk_length_in_kb` | 64 | On disk SSTables are compressed by block (to allow random reads). This +defines the size (in KB) of said block. Bigger values may improve the +compression rate, but increases the minimum size of data to be read from +disk for a read. The default value is an optimal value for compressing +tables. Chunk length must be a power of 2 because so is assumed so when +computing the chunk number from an uncompressed file offset. Block size +may be adjusted based on read/write access patterns such as: + +* How much data is typically requested at once +* Average size of rows in the table + +| `crc_check_chance` | 1.0 | Determines how likely Cassandra is to verify the checksum on each +compression chunk during reads. + +| `compression_level` | 3 | Compression level. It is only applicable for `ZstdCompressor` and +accepts values between `-131072` and `22`. +|=== + +For instance, to create a table with LZ4Compressor and a +chunk_lenth_in_kb of 4KB: + +[source,cql] +---- +CREATE TABLE simple ( + id int, + key text, + value text, + PRIMARY KEY (key, value) +) with compression = {'class': 'LZ4Compressor', 'chunk_length_in_kb': 4}; +---- + +[[cql-caching-options]] +===== Caching options + +Caching optimizes the use of cache memory of a table. The cached data is +weighed by size and access frequency. The `caching` options allows to +configure both the _key cache_ and the _row cache_ for the table. The +following sub-options are available: + +[cols=",,",options="header",] +|=== +|Option |Default |Description +a| +____ +`keys` +____ + +a| +____ +ALL +____ + +a| +____ +Whether to cache keys (“key cache”) for this table. Valid values are: +`ALL` and `NONE`. +____ + +a| +____ +`rows_per_partition` +____ + +a| +____ +NONE +____ + +a| +____ +The amount of rows to cache per partition (“row cache”). If an integer +`n` is specified, the first `n` queried rows of a partition will be +cached. Other possible options are `ALL`, to cache all rows of a queried +partition, or `NONE` to disable row caching. +____ + +|=== + +For instance, to create a table with both a key cache and 10 rows per +partition: + +[source,cql] +---- +CREATE TABLE simple ( +id int, +key text, +value text, +PRIMARY KEY (key, value) +) WITH caching = {'keys': 'ALL', 'rows_per_partition': 10}; +---- + +===== Read Repair options + +The `read_repair` options configures the read repair behavior to allow +tuning for various performance and consistency behaviors. Two +consistency properties are affected by read repair behavior. + +* Monotonic Quorum Reads: Provided by `BLOCKING`. Monotonic quorum reads +prevents reads from appearing to go back in time in some circumstances. +When monotonic quorum reads are not provided and a write fails to reach +a quorum of replicas, it may be visible in one read, and then disappear +in a subsequent read. +* Write Atomicity: Provided by `NONE`. Write atomicity prevents reads +from returning partially applied writes. Cassandra attempts to provide +partition level write atomicity, but since only the data covered by a +SELECT statement is repaired by a read repair, read repair can break +write atomicity when data is read at a more granular level than it is +written. For example read repair can break write atomicity if you write +multiple rows to a clustered partition in a batch, but then select a +single row by specifying the clustering column in a SELECT statement. + +The available read repair settings are: + +==== Blocking + +The default setting. When `read_repair` is set to `BLOCKING`, and a read +repair is triggered, the read will block on writes sent to other +replicas until the CL is reached by the writes. Provides monotonic +quorum reads, but not partition level write atomicity + +==== None + +When `read_repair` is set to `NONE`, the coordinator will reconcile any +differences between replicas, but will not attempt to repair them. +Provides partition level write atomicity, but not monotonic quorum +reads. + +===== Other considerations: + +* Adding new columns (see `ALTER TABLE` below) is a constant time +operation. There is thus no need to try to anticipate future usage when +creating a table. + +[[alter-table-statement]] +== ALTER TABLE + +Altering an existing table uses the `ALTER TABLE` statement: + +alter_table_statement: ALTER TABLE table_name +alter_table_instruction alter_table_instruction: ADD +column_name cql_type ( ',' +column_name cql_type )* : | DROP +column_name ( column_name )* : | WITH +options + +For instance: + +[source,cql] +---- +ALTER TABLE addamsFamily ADD gravesite varchar; + +ALTER TABLE addamsFamily + WITH comment = 'A most excellent and useful table'; +---- + +The `ALTER TABLE` statement can: + +* Add new column(s) to the table (through the `ADD` instruction). Note +that the primary key of a table cannot be changed and thus newly added +column will, by extension, never be part of the primary key. Also note +that `compact +tables ` have restrictions regarding column addition. +Note that this is constant (in the amount of data the cluster contains) +time operation. +* Remove column(s) from the table. This drops both the column and all +its content, but note that while the column becomes immediately +unavailable, its content is only removed lazily during compaction. +Please also see the warnings below. Due to lazy removal, the altering +itself is a constant (in the amount of data removed or contained in the +cluster) time operation. +* Change some of the table options (through the `WITH` instruction). The +`supported options +` are the same that when creating a table (outside +of `COMPACT STORAGE` and `CLUSTERING ORDER` that cannot be changed after +creation). Note that setting any `compaction` sub-options has the effect +of erasing all previous `compaction` options, so you need to re-specify +all the sub-options if you want to keep them. The same note applies to +the set of `compression` sub-options. + +[WARNING] +.Warning +==== +Dropping a column assumes that the timestamps used for the value of this +column are "real" timestamp in microseconds. Using "real" timestamps in +microseconds is the default is and is *strongly* recommended but as +Cassandra allows the client to provide any timestamp on any table it is +theoretically possible to use another convention. Please be aware that +if you do so, dropping a column will not work correctly. +==== + +[WARNING] +.Warning +==== +Once a column is dropped, it is allowed to re-add a column with the same +name than the dropped one *unless* the type of the dropped column was a +(non-frozen) column (due to an internal technical limitation). +==== + +[[drop-table-statement]] +== DROP TABLE + +Dropping a table uses the `DROP TABLE` statement: + +drop_table_statement: DROP TABLE [ IF EXISTS ] table_name + +Dropping a table results in the immediate, irreversible removal of the +table, including all data it contains. + +If the table does not exist, the statement will return an error, unless +`IF EXISTS` is used in which case the operation is a no-op. + +[[truncate-statement]] +== TRUNCATE + +A table can be truncated using the `TRUNCATE` statement: + +truncate_statement: TRUNCATE [ TABLE ] table_name + +Note that `TRUNCATE TABLE foo` is allowed for consistency with other DDL +statements but tables are the only object that can be truncated +currently and so the `TABLE` keyword can be omitted. + +Truncating a table permanently removes all existing data from the table, +but without removing the table itself. diff --git a/doc/source/modules/cassandra/pages/cql/definitions.adoc b/doc/source/modules/cassandra/pages/cql/definitions.adoc new file mode 100644 index 000000000000..95e8672d6e01 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/definitions.adoc @@ -0,0 +1,190 @@ += Definitions + +== Conventions + +To aid in specifying the CQL syntax, we will use the following +conventions in this document: + +* Language rules will be given in an informal +http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form#Variants[BNF +variant] notation. In particular, we'll use square brakets (`[ item ]`) +for optional items, `*` and `+` for repeated items (where `+` imply at +least one). +* The grammar will also use the following convention for convenience: +non-terminal term will be lowercase (and link to their definition) while +terminal keywords will be provided "all caps". Note however that +keywords are `identifiers` and are thus case insensitive in practice. We +will also define some early construction using regexp, which we'll +indicate with `re()`. +* The grammar is provided for documentation purposes and leave some +minor details out. For instance, the comma on the last column definition +in a `CREATE TABLE` statement is optional but supported if present even +though the grammar in this document suggests otherwise. Also, not +everything accepted by the grammar is necessarily valid CQL. +* References to keywords or pieces of CQL code in running text will be +shown in a `fixed-width font`. + +[[identifiers]] +== Identifiers and keywords + +The CQL language uses _identifiers_ (or _names_) to identify tables, +columns and other objects. An identifier is a token matching the regular +expression `[a-zA-Z][a-zA-Z0-9_]*`. + +A number of such identifiers, like `SELECT` or `WITH`, are _keywords_. +They have a fixed meaning for the language and most are reserved. The +list of those keywords can be found in xref:cql/appendices.adoc#appendix-A[Appendix A]. + +Identifiers and (unquoted) keywords are case insensitive. Thus `SELECT` +is the same than `select` or `sElEcT`, and `myId` is the same than +`myid` or `MYID`. A convention often used (in particular by the samples +of this documentation) is to use uppercase for keywords and lowercase +for other identifiers. + +There is a second kind of identifier called a _quoted identifier_ +defined by enclosing an arbitrary sequence of characters (non-empty) in +double-quotes(`"`). Quoted identifiers are never keywords. Thus +`"select"` is not a reserved keyword and can be used to refer to a +column (note that using this is particularly ill-advised), while `select` +would raise a parsing error. Also, unlike unquoted identifiers +and keywords, quoted identifiers are case sensitive (`"My Quoted Id"` is +_different_ from `"my quoted id"`). A fully lowercase quoted identifier +that matches `[a-zA-Z][a-zA-Z0-9_]*` is however _equivalent_ to the +unquoted identifier obtained by removing the double-quote (so `"myid"` +is equivalent to `myid` and to `myId` but different from `"myId"`). +Inside a quoted identifier, the double-quote character can be repeated +to escape it, so `"foo "" bar"` is a valid identifier. + +[NOTE] +.Note +==== +The _quoted identifier_ can declare columns with arbitrary names, and +these can sometime clash with specific names used by the server. For +instance, when using conditional update, the server will respond with a +result set containing a special result named `"[applied]"`. If you’ve +declared a column with such a name, this could potentially confuse some +tools and should be avoided. In general, unquoted identifiers should be +preferred but if you use quoted identifiers, it is strongly advised that you +avoid any name enclosed by squared brackets (like `"[applied]"`) and any +name that looks like a function call (like `"f(x)"`). +==== + +More formally, we have: + +[source, bnf] +---- +include::example$BNF/identifier.bnf[] +---- + +== Constants + +CQL defines the following _constants_: + +[source, bnf] +---- +include::example$BNF/constant.bnf[] +---- + +In other words: + +* A string constant is an arbitrary sequence of characters enclosed by +single-quote(`'`). A single-quote can be included by repeating it, e.g. +`'It''s raining today'`. Those are not to be confused with quoted +`identifiers` that use double-quotes. Alternatively, a string can be +defined by enclosing the arbitrary sequence of characters by two dollar +characters, in which case single-quote can be used without escaping +(`$$It's raining today$$`). That latter form is often used when defining +`user-defined functions ` to avoid having to escape single-quote +characters in function body (as they are more likely to occur than +`$$`). +* Integer, float and boolean constant are defined as expected. Note +however than float allows the special `NaN` and `Infinity` constants. +* CQL supports +https://en.wikipedia.org/wiki/Universally_unique_identifier[UUID] +constants. +* Blobs content are provided in hexadecimal and prefixed by `0x`. +* The special `NULL` constant denotes the absence of value. + +For how these constants are typed, see the xref:cxql/types.adoc[Data types] section. + +== Terms + +CQL has the notion of a _term_, which denotes the kind of values that +CQL support. Terms are defined by: + +[source, bnf] +---- +include::example$BNF/term.bnf[] +---- + +A term is thus one of: + +* A `constant `. +* A literal for either `a collection `, +`a user-defined type ` or `a tuple ` (see the linked +sections for details). +* A function call: see `the section on functions ` for +details on which `native function +` exists and how to define your own +`user-defined ones `. +* An arithmetic operation between terms. see +`the section on arithmetic operations ` +* A _type hint_: see the `related section ` for details. +* A bind marker, which denotes a variable to be bound at execution time. +See the section on `prepared-statements` for details. A bind marker can +be either anonymous (`?`) or named (`:some_name`). The latter form +provides a more convenient way to refer to the variable for binding it +and should generally be preferred. + +== Comments + +A comment in CQL is a line beginning by either double dashes (`--`) or +double slash (`//`). + +Multi-line comments are also supported through enclosure within `/*` and +`*/` (but nesting is not supported). + +[source,cql] +---- +-- This is a comment +// This is a comment too +/* This is + a multi-line comment */ +---- + +== Statements + +CQL consists of statements that can be divided in the following +categories: + +* `data-definition` statements, to define and change how the data is +stored (keyspaces and tables). +* `data-manipulation` statements, for selecting, inserting and deleting +data. +* `secondary-indexes` statements. +* `materialized-views` statements. +* `cql-roles` statements. +* `cql-permissions` statements. +* `User-Defined Functions ` statements. +* `udts` statements. +* `cql-triggers` statements. + +All the statements are listed below and are described in the rest of +this documentation (see links above): + +[source, bnf] +---- +include::example$BNF/cql_statement.bnf[] +---- + +== Prepared Statements + +CQL supports _prepared statements_. Prepared statements are an +optimization that allows to parse a query only once but execute it +multiple times with different concrete values. + +Any statement that uses at least one bind marker (see `bind_marker`) +will need to be _prepared_. After which the statement can be _executed_ +by provided concrete values for each of its marker. The exact details of +how a statement is prepared and then executed depends on the CQL driver +used and you should refer to your driver documentation. diff --git a/doc/source/modules/cassandra/pages/cql/dml.adoc b/doc/source/modules/cassandra/pages/cql/dml.adoc new file mode 100644 index 000000000000..8a3e07af36c3 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/dml.adoc @@ -0,0 +1,612 @@ += Data Manipulation + +This section describes the statements supported by CQL to insert, +update, delete and query data. + +[[select-statement]] +== SELECT + +Querying data from data is done using a `SELECT` statement: + +select_statement: SELECT [ JSON | DISTINCT ] ( +[.title-ref]#select_clause# | '_' ) : FROM `table_name` : [ WHERE +`where_clause` ] : [ GROUP BY `group_by_clause` ] : [ ORDER BY +`ordering_clause` ] : [ PER PARTITION LIMIT (`integer` | `bind_marker`) +] : [ LIMIT (`integer` | `bind_marker`) ] : [ ALLOW FILTERING ] +select_clause: `selector` [ AS `identifier` ] ( ',' `selector` [ AS +`identifier` ] ) selector: `column_name` : | `term` : | CAST '(' +`selector` AS `cql_type` ')' : | `function_name` '(' [ `selector` ( ',' +`selector` )_ ] ')' : | COUNT '(' '_' ')' where_clause: `relation` ( AND +`relation` )_ relation: [.title-ref]#column_name# [.title-ref]#operator# +[.title-ref]#term# : '(' [.title-ref]#column_name# ( ',' +[.title-ref]#column_name# )* ')' [.title-ref]#operator# +[.title-ref]#tuple_literal# : TOKEN '(' [.title-ref]#column_name# ( ',' +[.title-ref]#column_name# )* ')' [.title-ref]#operator# +[.title-ref]#term# operator: '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | +CONTAINS | CONTAINS KEY group_by_clause: [.title-ref]#column_name# ( ',' +[.title-ref]#column_name# )* ordering_clause: [.title-ref]#column_name# +[ ASC | DESC ] ( ',' [.title-ref]#column_name# [ ASC | DESC ] )* + +For instance: + +[source,cql] +---- +SELECT name, occupation FROM users WHERE userid IN (199, 200, 207); +SELECT JSON name, occupation FROM users WHERE userid = 199; +SELECT name AS user_name, occupation AS user_occupation FROM users; + +SELECT time, value +FROM events +WHERE event_type = 'myEvent' + AND time > '2011-02-03' + AND time <= '2012-01-01' + +SELECT COUNT (*) AS user_count FROM users; +---- + +The `SELECT` statements reads one or more columns for one or more rows +in a table. It returns a result-set of the rows matching the request, +where each row contains the values for the selection corresponding to +the query. Additionally, `functions ` including +`aggregation ` ones can be applied to the result. + +A `SELECT` statement contains at least a +`selection clause ` and the name of the table on which +the selection is on (note that CQL does *not* joins or sub-queries and +thus a select statement only apply to a single table). In most case, a +select will also have a `where clause ` and it can +optionally have additional clauses to `order ` or +`limit ` the results. Lastly, `queries that require +filtering ` can be allowed if the `ALLOW FILTERING` +flag is provided. + +=== Selection clause + +The `select_clause` determines which columns needs to be queried and +returned in the result-set, as well as any transformation to apply to +this result before returning. It consists of a comma-separated list of +_selectors_ or, alternatively, of the wildcard character (`*`) to select +all the columns defined in the table. + +==== Selectors + +A `selector` can be one of: + +* A column name of the table selected, to retrieve the values for that +column. +* A term, which is usually used nested inside other selectors like +functions (if a term is selected directly, then the corresponding column +of the result-set will simply have the value of this term for every row +returned). +* A casting, which allows to convert a nested selector to a (compatible) +type. +* A function call, where the arguments are selector themselves. See the +section on `functions ` for more details. +* The special call `COUNT(*)` to the `COUNT function `, +which counts all non-null results. + +==== Aliases + +Every _top-level_ selector can also be aliased (using [.title-ref]#AS#). +If so, the name of the corresponding column in the result set will be +that of the alias. For instance: + +[source,cql] +---- +// Without alias +SELECT intAsBlob(4) FROM t; + +// intAsBlob(4) +// -------------- +// 0x00000004 + +// With alias +SELECT intAsBlob(4) AS four FROM t; + +// four +// ------------ +// 0x00000004 +---- + +[NOTE] +.Note +==== +Currently, aliases aren't recognized anywhere else in the statement +where they are used (not in the `WHERE` clause, not in the `ORDER BY` +clause, ...). You must use the orignal column name instead. +==== + +==== `WRITETIME` and `TTL` function + +Selection supports two special functions (that aren't allowed anywhere +else): `WRITETIME` and `TTL`. Both function take only one argument and +that argument _must_ be a column name (so for instance `TTL(3)` is +invalid). + +Those functions allow to retrieve meta-information that are stored +internally for each column, namely: + +* the timestamp of the value of the column for `WRITETIME`. +* the remaining time to live (in seconds) for the value of the column if +it set to expire (and `null` otherwise). + +[[where-clause]] +=== The `WHERE` clause + +The `WHERE` clause specifies which rows must be queried. It is composed +of relations on the columns that are part of the `PRIMARY KEY` and/or +have a link:#createIndexStmt[secondary index] defined on them. + +Not all relations are allowed in a query. For instance, non-equal +relations (where `IN` is considered as an equal relation) on a partition +key are not supported (but see the use of the `TOKEN` method below to do +non-equal queries on the partition key). Moreover, for a given partition +key, the clustering columns induce an ordering of rows and relations on +them is restricted to the relations that allow to select a *contiguous* +(for the ordering) set of rows. For instance, given: + +[source,cql] +---- +CREATE TABLE posts ( + userid text, + blog_title text, + posted_at timestamp, + entry_title text, + content text, + category int, + PRIMARY KEY (userid, blog_title, posted_at) +) +---- + +The following query is allowed: + +[source,cql] +---- +SELECT entry_title, content FROM posts + WHERE userid = 'john doe' + AND blog_title='John''s Blog' + AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31' +---- + +But the following one is not, as it does not select a contiguous set of +rows (and we suppose no secondary indexes are set): + +[source,cql] +---- +// Needs a blog_title to be set to select ranges of posted_at +SELECT entry_title, content FROM posts + WHERE userid = 'john doe' + AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31' +---- + +When specifying relations, the `TOKEN` function can be used on the +`PARTITION KEY` column to query. In that case, rows will be selected +based on the token of their `PARTITION_KEY` rather than on the value. +Note that the token of a key depends on the partitioner in use, and that +in particular the RandomPartitioner won't yield a meaningful order. Also +note that ordering partitioners always order token values by bytes (so +even if the partition key is of type int, `token(-1) > token(0)` in +particular). Example: + +[source,cql] +---- +SELECT * FROM posts + WHERE token(userid) > token('tom') AND token(userid) < token('bob') +---- + +Moreover, the `IN` relation is only allowed on the last column of the +partition key and on the last column of the full primary key. + +It is also possible to “group” `CLUSTERING COLUMNS` together in a +relation using the tuple notation. For instance: + +[source,cql] +---- +SELECT * FROM posts + WHERE userid = 'john doe' + AND (blog_title, posted_at) > ('John''s Blog', '2012-01-01') +---- + +will request all rows that sorts after the one having “John's Blog” as +`blog_tile` and '2012-01-01' for `posted_at` in the clustering order. In +particular, rows having a `post_at <= '2012-01-01'` will be returned as +long as their `blog_title > 'John''s Blog'`, which would not be the case +for: + +[source,cql] +---- +SELECT * FROM posts + WHERE userid = 'john doe' + AND blog_title > 'John''s Blog' + AND posted_at > '2012-01-01' +---- + +The tuple notation may also be used for `IN` clauses on clustering +columns: + +[source,cql] +---- +SELECT * FROM posts + WHERE userid = 'john doe' + AND (blog_title, posted_at) IN (('John''s Blog', '2012-01-01'), ('Extreme Chess', '2014-06-01')) +---- + +The `CONTAINS` operator may only be used on collection columns (lists, +sets, and maps). In the case of maps, `CONTAINS` applies to the map +values. The `CONTAINS KEY` operator may only be used on map columns and +applies to the map keys. + +[[group-by-clause]] +=== Grouping results + +The `GROUP BY` option allows to condense into a single row all selected +rows that share the same values for a set of columns. + +Using the `GROUP BY` option, it is only possible to group rows at the +partition key level or at a clustering column level. By consequence, the +`GROUP BY` option only accept as arguments primary key column names in +the primary key order. If a primary key column is restricted by an +equality restriction it is not required to be present in the `GROUP BY` +clause. + +Aggregate functions will produce a separate value for each group. If no +`GROUP BY` clause is specified, aggregates functions will produce a +single value for all the rows. + +If a column is selected without an aggregate function, in a statement +with a `GROUP BY`, the first value encounter in each group will be +returned. + +[[ordering-clause]] +=== Ordering results + +The `ORDER BY` clause allows to select the order of the returned +results. It takes as argument a list of column names along with the +order for the column (`ASC` for ascendant and `DESC` for descendant, +omitting the order being equivalent to `ASC`). Currently the possible +orderings are limited by the `clustering order ` +defined on the table: + +* if the table has been defined without any specific `CLUSTERING ORDER`, +then then allowed orderings are the order induced by the clustering +columns and the reverse of that one. +* otherwise, the orderings allowed are the order of the +`CLUSTERING ORDER` option and the reversed one. + +[[limit-clause]] +=== Limiting results + +The `LIMIT` option to a `SELECT` statement limits the number of rows +returned by a query, while the `PER PARTITION LIMIT` option limits the +number of rows returned for a given partition by the query. Note that +both type of limit can used in the same statement. + +[[allow-filtering]] +=== Allowing filtering + +By default, CQL only allows select queries that don't involve +“filtering” server side, i.e. queries where we know that all (live) +record read will be returned (maybe partly) in the result set. The +reasoning is that those “non filtering” queries have predictable +performance in the sense that they will execute in a time that is +proportional to the amount of data *returned* by the query (which can be +controlled through `LIMIT`). + +The `ALLOW FILTERING` option allows to explicitly allow (some) queries +that require filtering. Please note that a query using `ALLOW FILTERING` +may thus have unpredictable performance (for the definition above), i.e. +even a query that selects a handful of records *may* exhibit performance +that depends on the total amount of data stored in the cluster. + +For instance, considering the following table holding user profiles with +their year of birth (with a secondary index on it) and country of +residence: + +[source,cql] +---- +CREATE TABLE users ( + username text PRIMARY KEY, + firstname text, + lastname text, + birth_year int, + country text +) + +CREATE INDEX ON users(birth_year); +---- + +Then the following queries are valid: + +[source,cql] +---- +SELECT * FROM users; +SELECT * FROM users WHERE birth_year = 1981; +---- + +because in both case, Cassandra guarantees that these queries +performance will be proportional to the amount of data returned. In +particular, if no users are born in 1981, then the second query +performance will not depend of the number of user profile stored in the +database (not directly at least: due to secondary index implementation +consideration, this query may still depend on the number of node in the +cluster, which indirectly depends on the amount of data stored. +Nevertheless, the number of nodes will always be multiple number of +magnitude lower than the number of user profile stored). Of course, both +query may return very large result set in practice, but the amount of +data returned can always be controlled by adding a `LIMIT`. + +However, the following query will be rejected: + +[source,cql] +---- +SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR'; +---- + +because Cassandra cannot guarantee that it won't have to scan large +amount of data even if the result to those query is small. Typically, it +will scan all the index entries for users born in 1981 even if only a +handful are actually from France. However, if you “know what you are +doing”, you can force the execution of this query by using +`ALLOW FILTERING` and so the following query is valid: + +[source,cql] +---- +SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR' ALLOW FILTERING; +---- + +[[insert-statement]] +== INSERT + +Inserting data for a row is done using an `INSERT` statement: + +insert_statement: INSERT INTO [.title-ref]#table_name# ( +[.title-ref]#names_values# | [.title-ref]#json_clause# ) : [ IF NOT +EXISTS ] : [ USING [.title-ref]#update_parameter# ( AND +[.title-ref]#update_parameter# )* ] names_values: [.title-ref]#names# +VALUES [.title-ref]#tuple_literal# json_clause: JSON +[.title-ref]#string# [ DEFAULT ( NULL | UNSET ) ] names: '(' +[.title-ref]#column_name# ( ',' [.title-ref]#column_name# )* ')' + +For instance: + +[source,cql] +---- +INSERT INTO NerdMovies (movie, director, main_actor, year) + VALUES ('Serenity', 'Joss Whedon', 'Nathan Fillion', 2005) + USING TTL 86400; + +INSERT INTO NerdMovies JSON '{"movie": "Serenity", + "director": "Joss Whedon", + "year": 2005}'; +---- + +The `INSERT` statement writes one or more columns for a given row in a +table. Note that since a row is identified by its `PRIMARY KEY`, at +least the columns composing it must be specified. The list of columns to +insert to must be supplied when using the `VALUES` syntax. When using +the `JSON` syntax, they are optional. See the section on +`JSON support ` for more detail. + +Note that unlike in SQL, `INSERT` does not check the prior existence of +the row by default: the row is created if none existed before, and +updated otherwise. Furthermore, there is no mean to know which of +creation or update happened. + +It is however possible to use the `IF NOT EXISTS` condition to only +insert if the row does not exist prior to the insertion. But please note +that using `IF NOT EXISTS` will incur a non negligible performance cost +(internally, Paxos will be used) so this should be used sparingly. + +All updates for an `INSERT` are applied atomically and in isolation. + +Please refer to the `UPDATE ` section for +informations on the `update_parameter`. + +Also note that `INSERT` does not support counters, while `UPDATE` does. + +[[update-statement]] +== UPDATE + +Updating a row is done using an `UPDATE` statement: + +[source, bnf] +---- +update_statement ::= UPDATE table_name + [ USING update_parameter ( AND update_parameter )* ] + SET assignment( ',' assignment )* + WHERE where_clause + [ IF ( EXISTS | condition ( AND condition)*) ] +update_parameter ::= ( TIMESTAMP | TTL ) ( integer | bind_marker ) +assignment: simple_selection'=' term + `| column_name'=' column_name ( '+' | '-' ) term + | column_name'=' list_literal'+' column_name +simple_selection ::= column_name + | column_name '[' term']' + | column_name'.' field_name +condition ::= `simple_selection operator term +---- + +For instance: + +[source,cql] +---- +UPDATE NerdMovies USING TTL 400 + SET director = 'Joss Whedon', + main_actor = 'Nathan Fillion', + year = 2005 + WHERE movie = 'Serenity'; + +UPDATE UserActions + SET total = total + 2 + WHERE user = B70DE1D0-9908-4AE3-BE34-5573E5B09F14 + AND action = 'click'; +---- + +The `UPDATE` statement writes one or more columns for a given row in a +table. The `where_clause` is used to select the row to update and must +include all columns composing the `PRIMARY KEY`. Non primary key columns +are then set using the `SET` keyword. + +Note that unlike in SQL, `UPDATE` does not check the prior existence of +the row by default (except through `IF`, see below): the row is created +if none existed before, and updated otherwise. Furthermore, there are no +means to know whether a creation or update occurred. + +It is however possible to use the conditions on some columns through +`IF`, in which case the row will not be updated unless the conditions +are met. But, please note that using `IF` conditions will incur a +non-negligible performance cost (internally, Paxos will be used) so this +should be used sparingly. + +In an `UPDATE` statement, all updates within the same partition key are +applied atomically and in isolation. + +Regarding the `assignment`: + +* `c = c + 3` is used to increment/decrement counters. The column name +after the '=' sign *must* be the same than the one before the '=' sign. +Note that increment/decrement is only allowed on counters, and are the +_only_ update operations allowed on counters. See the section on +`counters ` for details. +* `id = id + ` and `id[value1] = value2` are for +collections, see the `relevant section +` for details. +* `id.field = 3` is for setting the value of a field on a non-frozen +user-defined types. see the `relevant section +` for details. + +=== Update parameters + +The `UPDATE`, `INSERT` (and `DELETE` and `BATCH` for the `TIMESTAMP`) +statements support the following parameters: + +* `TIMESTAMP`: sets the timestamp for the operation. If not specified, +the coordinator will use the current time (in microseconds) at the start +of statement execution as the timestamp. This is usually a suitable +default. +* `TTL`: specifies an optional Time To Live (in seconds) for the +inserted values. If set, the inserted values are automatically removed +from the database after the specified time. Note that the TTL concerns +the inserted values, not the columns themselves. This means that any +subsequent update of the column will also reset the TTL (to whatever TTL +is specified in that update). By default, values never expire. A TTL of +0 is equivalent to no TTL. If the table has a default_time_to_live, a +TTL of 0 will remove the TTL for the inserted or updated values. A TTL +of `null` is equivalent to inserting with a TTL of 0. + +[[delete_statement]] +== DELETE + +Deleting rows or parts of rows uses the `DELETE` statement: + +delete_statement: DELETE [ [.title-ref]#simple_selection# ( ',' +[.title-ref]#simple_selection# ) ] : FROM [.title-ref]#table_name# : [ +USING [.title-ref]#update_parameter# ( AND +[.title-ref]#update_parameter# )* ] : WHERE [.title-ref]#where_clause# : +[ IF ( EXISTS | [.title-ref]#condition# ( AND [.title-ref]#condition# +)*) ] + +For instance: + +[source,cql] +---- +DELETE FROM NerdMovies USING TIMESTAMP 1240003134 + WHERE movie = 'Serenity'; + +DELETE phone FROM Users + WHERE userid IN (C73DE1D3-AF08-40F3-B124-3FF3E5109F22, B70DE1D0-9908-4AE3-BE34-5573E5B09F14); +---- + +The `DELETE` statement deletes columns and rows. If column names are +provided directly after the `DELETE` keyword, only those columns are +deleted from the row indicated by the `WHERE` clause. Otherwise, whole +rows are removed. + +The `WHERE` clause specifies which rows are to be deleted. Multiple rows +may be deleted with one statement by using an `IN` operator. A range of +rows may be deleted using an inequality operator (such as `>=`). + +`DELETE` supports the `TIMESTAMP` option with the same semantics as in +`updates `. + +In a `DELETE` statement, all deletions within the same partition key are +applied atomically and in isolation. + +A `DELETE` operation can be conditional through the use of an `IF` +clause, similar to `UPDATE` and `INSERT` statements. However, as with +`INSERT` and `UPDATE` statements, this will incur a non-negligible +performance cost (internally, Paxos will be used) and so should be used +sparingly. + +[[batch_statement]] +== BATCH + +Multiple `INSERT`, `UPDATE` and `DELETE` can be executed in a single +statement by grouping them through a `BATCH` statement: + +[source, bnf] +---- +batch_statement ::= BEGIN [ UNLOGGED | COUNTER ] BATCH + [ USING update_parameter( AND update_parameter)* ] + modification_statement ( ';' modification_statement )* + APPLY BATCH +modification_statement ::= insert_statement | update_statement | delete_statement +---- + +For instance: + +[source,cql] +---- +BEGIN BATCH + INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user'); + UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3'; + INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c'); + DELETE name FROM users WHERE userid = 'user1'; +APPLY BATCH; +---- + +The `BATCH` statement group multiple modification statements +(insertions/updates and deletions) into a single statement. It serves +several purposes: + +* It saves network round-trips between the client and the server (and +sometimes between the server coordinator and the replicas) when batching +multiple updates. +* All updates in a `BATCH` belonging to a given partition key are +performed in isolation. +* By default, all operations in the batch are performed as _logged_, to +ensure all mutations eventually complete (or none will). See the notes +on `UNLOGGED batches ` for more details. + +Note that: + +* `BATCH` statements may only contain `UPDATE`, `INSERT` and `DELETE` +statements (not other batches for instance). +* Batches are _not_ a full analogue for SQL transactions. +* If a timestamp is not specified for each operation, then all +operations will be applied with the same timestamp (either one generated +automatically, or the timestamp provided at the batch level). Due to +Cassandra's conflict resolution procedure in the case of +http://wiki.apache.org/cassandra/FAQ#clocktie[timestamp ties], +operations may be applied in an order that is different from the order +they are listed in the `BATCH` statement. To force a particular +operation ordering, you must specify per-operation timestamps. +* A LOGGED batch to a single partition will be converted to an UNLOGGED +batch as an optimization. + +=== `UNLOGGED` batches + +By default, Cassandra uses a batch log to ensure all operations in a +batch eventually complete or none will (note however that operations are +only isolated within a single partition). + +There is a performance penalty for batch atomicity when a batch spans +multiple partitions. If you do not want to incur this penalty, you can +tell Cassandra to skip the batchlog with the `UNLOGGED` option. If the +`UNLOGGED` option is used, a failed batch might leave the patch only +partly applied. + +=== `COUNTER` batches + +Use the `COUNTER` option for batched counter updates. Unlike other +updates in Cassandra, counter updates are not idempotent. diff --git a/doc/source/modules/cassandra/pages/cql/drivers.adoc b/doc/source/modules/cassandra/pages/cql/drivers.adoc new file mode 100644 index 000000000000..e05d9c89c1e0 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/drivers.adoc @@ -0,0 +1,92 @@ += Client drivers + +Here are known Cassandra client drivers organized by language. Before +choosing a driver, you should verify the Cassandra version and +functionality supported by a specific driver. + +== Java + +* http://achilles.archinnov.info/[Achilles] +* https://github.com/Netflix/astyanax/wiki/Getting-Started[Astyanax] +* https://github.com/noorq/casser[Casser] +* https://github.com/datastax/java-driver[Datastax Java driver] +* https://github.com/impetus-opensource/Kundera[Kundera] +* https://github.com/deanhiller/playorm[PlayORM] + +== Python + +* https://github.com/datastax/python-driver[Datastax Python driver] + +== Ruby + +* https://github.com/datastax/ruby-driver[Datastax Ruby driver] + +== C# / .NET + +* https://github.com/pchalamet/cassandra-sharp[Cassandra Sharp] +* https://github.com/datastax/csharp-driver[Datastax C# driver] +* https://github.com/managedfusion/fluentcassandra[Fluent Cassandra] + +== Nodejs + +* https://github.com/datastax/nodejs-driver[Datastax Nodejs driver] +* https://github.com/jorgebay/node-cassandra-cql[Node-Cassandra-CQL] + +== PHP + +* http://code.google.com/a/apache-extras.org/p/cassandra-pdo[CQL | PHP] +* https://github.com/datastax/php-driver/[Datastax PHP driver] +* https://github.com/aparkhomenko/php-cassandra[PHP-Cassandra] +* http://evseevnn.github.io/php-cassandra-binary/[PHP Library for +Cassandra] + +== C++ + +* https://github.com/datastax/cpp-driver[Datastax C++ driver] +* http://sourceforge.net/projects/libqtcassandra[libQTCassandra] + +== Scala + +* https://github.com/datastax/spark-cassandra-connector[Datastax Spark +connector] +* https://github.com/newzly/phantom[Phantom] +* https://github.com/getquill/quill[Quill] + +== Clojure + +* https://github.com/mpenet/alia[Alia] +* https://github.com/clojurewerkz/cassaforte[Cassaforte] +* https://github.com/mpenet/hayt[Hayt] + +== Erlang + +* https://github.com/matehat/cqerl[CQerl] +* https://github.com/silviucpp/erlcass[Erlcass] + +== Go + +* http://relops.com/cqlc/[CQLc] +* https://github.com/hailocab/gocassa[Gocassa] +* https://github.com/gocql/gocql[GoCQL] + +== Haskell + +* https://github.com/ozataman/cassy[Cassy] + +== Rust + +* https://github.com/neich/rust-cql[Rust CQL] + +== Perl + +* https://github.com/tvdw/perl-dbd-cassandra[Cassandra::Client and +DBD::Cassandra] + +== Elixir + +* https://github.com/lexhide/xandra[Xandra] +* https://github.com/matehat/cqex[CQEx] + +== Dart + +* https://github.com/achilleasa/dart_cassandra_cql[dart_cassandra_cql] diff --git a/doc/source/modules/cassandra/pages/cql/functions.adoc b/doc/source/modules/cassandra/pages/cql/functions.adoc new file mode 100644 index 000000000000..bc70de2fd09e --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/functions.adoc @@ -0,0 +1,678 @@ +// Need some intro for UDF and native functions in general and point those to it. +// [[cql-functions]][[native-functions]] + +== Functions + +CQL supports 2 main categories of functions: + +* the `scalar functions `, which simply take a number +of values and produce an output with it. +* the `aggregate functions `, which are used to +aggregate multiple rows results from a `SELECT` statement. + +In both cases, CQL provides a number of native "hard-coded" functions as +well as the ability to create new user-defined functions. + +[NOTE] +.Note +==== +By default, the use of user-defined functions is disabled by default for +security concerns (even when enabled, the execution of user-defined +functions is sandboxed and a "rogue" function should not be allowed to +do evil, but no sandbox is perfect so using user-defined functions is +opt-in). See the `enable_user_defined_functions` in `cassandra.yaml` to +enable them. +==== + +A function is identifier by its name: + +[source, bnf] +---- +function_name ::= [ keyspace_name'.' ] name +---- + +=== Scalar functions + +[[scalar-native-functions]] +==== Native functions + +===== Cast + +The `cast` function can be used to converts one native datatype to +another. + +The following table describes the conversions supported by the `cast` +function. Cassandra will silently ignore any cast converting a datatype +into its own datatype. + +[cols=",",options="header",] +|=== +|From |To + +| `ascii` | `text`, `varchar` + +| `bigint` | `tinyint`, `smallint`, `int`, `float`, `double`, `decimal`, `varint`, +`text`, `varchar` + +| `boolean` | `text`, `varchar` + +| `counter` | `tinyint`, `smallint`, `int`, `bigint`, `float`, `double`, `decimal`, +`varint`, `text`, `varchar` + +| `date` | `timestamp` + +| `decimal` | `tinyint`, `smallint`, `int`, `bigint`, `float`, `double`, `varint`, +`text`, `varchar` + +| `double` | `tinyint`, `smallint`, `int`, `bigint`, `float`, `decimal`, `varint`, +`text`, `varchar` + +| `float` | `tinyint`, `smallint`, `int`, `bigint`, `double`, `decimal`, `varint`, +`text`, `varchar` + +| `inet` | `text`, `varchar` + +| `int` | `tinyint`, `smallint`, `bigint`, `float`, `double`, `decimal`, `varint`, +`text`, `varchar` + +| `smallint` | `tinyint`, `int`, `bigint`, `float`, `double`, `decimal`, `varint`, +`text`, `varchar` + +| `time` | `text`, `varchar` + +| `timestamp` | `date`, `text`, `varchar` + +| `timeuuid` | `timestamp`, `date`, `text`, `varchar` + +| `tinyint` | `tinyint`, `smallint`, `int`, `bigint`, `float`, `double`, `decimal`, +`varint`, `text`, `varchar` + +| `uuid` | `text`, `varchar` + +| `varint` | `tinyint`, `smallint`, `int`, `bigint`, `float`, `double`, `decimal`, +`text`, `varchar` +|=== + +The conversions rely strictly on Java's semantics. For example, the +double value 1 will be converted to the text value '1.0'. For instance: + +[source,cql] +---- +SELECT avg(cast(count as double)) FROM myTable +---- + +===== Token + +The `token` function allows to compute the token for a given partition +key. The exact signature of the token function depends on the table +concerned and of the partitioner used by the cluster. + +The type of the arguments of the `token` depend on the type of the +partition key columns. The return type depend on the partitioner in use: + +* For Murmur3Partitioner, the return type is `bigint`. +* For RandomPartitioner, the return type is `varint`. +* For ByteOrderedPartitioner, the return type is `blob`. + +For instance, in a cluster using the default Murmur3Partitioner, if a +table is defined by: + +[source,cql] +---- +CREATE TABLE users ( + userid text PRIMARY KEY, + username text, +) +---- + +then the `token` function will take a single argument of type `text` (in +that case, the partition key is `userid` (there is no clustering columns +so the partition key is the same than the primary key)), and the return +type will be `bigint`. + +===== Uuid + +The `uuid` function takes no parameters and generates a random type 4 +uuid suitable for use in `INSERT` or `UPDATE` statements. + +===== Timeuuid functions + +====== `now` + +The `now` function takes no arguments and generates, on the coordinator +node, a new unique timeuuid at the time the function is invoked. Note +that this method is useful for insertion but is largely non-sensical in +`WHERE` clauses. For instance, a query of the form: + +[source,cql] +---- +SELECT * FROM myTable WHERE t = now() +---- + +will never return any result by design, since the value returned by +`now()` is guaranteed to be unique. + +`currentTimeUUID` is an alias of `now`. + +====== `minTimeuuid` and `maxTimeuuid` + +The `minTimeuuid` (resp. `maxTimeuuid`) function takes a `timestamp` +value `t` (which can be [.title-ref]#either a timestamp or a date string +#) and return a _fake_ `timeuuid` corresponding to the +_smallest_ (resp. _biggest_) possible `timeuuid` having for timestamp +`t`. So for instance: + +[source,cql] +---- +SELECT * FROM myTable + WHERE t > maxTimeuuid('2013-01-01 00:05+0000') + AND t < minTimeuuid('2013-02-02 10:00+0000') +---- + +will select all rows where the `timeuuid` column `t` is strictly older +than `'2013-01-01 00:05+0000'` but strictly younger than +`'2013-02-02 10:00+0000'`. Please note that +`t >= maxTimeuuid('2013-01-01 00:05+0000')` would still _not_ select a +`timeuuid` generated exactly at '2013-01-01 00:05+0000' and is +essentially equivalent to `t > maxTimeuuid('2013-01-01 00:05+0000')`. + +[NOTE] +.Note +==== +We called the values generated by `minTimeuuid` and `maxTimeuuid` _fake_ +UUID because they do no respect the Time-Based UUID generation process +specified by the http://www.ietf.org/rfc/rfc4122.txt[RFC 4122]. In +particular, the value returned by these 2 methods will not be unique. +This means you should only use those methods for querying (as in the +example above). Inserting the result of those methods is almost +certainly _a bad idea_. +==== + +===== Datetime functions + +====== Retrieving the current date/time + +The following functions can be used to retrieve the date/time at the +time where the function is invoked: + +[cols=",",options="header",] +|=== +|Function name |Output type + +| `currentTimestamp` | `timestamp` + +| `currentDate` | `date` + +| `currentTime` | `time` + +| `currentTimeUUID` | `timeUUID` +|=== + +For example the last 2 days of data can be retrieved using: + +[source,cql] +---- +SELECT * FROM myTable WHERE date >= currentDate() - 2d +---- + +====== Time conversion functions + +A number of functions are provided to “convert” a `timeuuid`, a +`timestamp` or a `date` into another `native` type. + +[cols=",,",options="header",] +|=== +|Function name |Input type |Description + +| `toDate` | `timeuuid` | Converts the `timeuuid` argument into a `date` type + +| `toDate` | `timestamp` | Converts the `timestamp` argument into a `date` type + +| `toTimestamp` | `timeuuid` | Converts the `timeuuid` argument into a `timestamp` type + +| `toTimestamp` | `date` | Converts the `date` argument into a `timestamp` type + +| `toUnixTimestamp` | `timeuuid` | Converts the `timeuuid` argument into a `bigInt` raw value + +| `toUnixTimestamp` | `timestamp` | Converts the `timestamp` argument into a `bigInt` raw value + +| `toUnixTimestamp` | `date` | Converts the `date` argument into a `bigInt` raw value + +| `dateOf` | `timeuuid` | Similar to `toTimestamp(timeuuid)` (DEPRECATED) + +| `unixTimestampOf` | `timeuuid` | Similar to `toUnixTimestamp(timeuuid)` (DEPRECATED) +|=== + +===== Blob conversion functions + +A number of functions are provided to “convert” the native types into +binary data (`blob`). For every `` `type` supported by CQL +(a notable exceptions is `blob`, for obvious reasons), the function +`typeAsBlob` takes a argument of type `type` and return it as a `blob`. +Conversely, the function `blobAsType` takes a 64-bit `blob` argument and +convert it to a `bigint` value. And so for instance, `bigintAsBlob(3)` +is `0x0000000000000003` and `blobAsBigint(0x0000000000000003)` is `3`. + +[[user-defined-scalar-functions]] +==== User-defined functions + +User-defined functions allow execution of user-provided code in +Cassandra. By default, Cassandra supports defining functions in _Java_ +and _JavaScript_. Support for other JSR 223 compliant scripting +languages (such as Python, Ruby, and Scala) can be added by adding a JAR +to the classpath. + +UDFs are part of the Cassandra schema. As such, they are automatically +propagated to all nodes in the cluster. + +UDFs can be _overloaded_ - i.e. multiple UDFs with different argument +types but the same function name. Example: + +[source,cql] +---- +CREATE FUNCTION sample ( arg int ) ...; +CREATE FUNCTION sample ( arg text ) ...; +---- + +User-defined functions are susceptible to all of the normal problems +with the chosen programming language. Accordingly, implementations +should be safe against null pointer exceptions, illegal arguments, or +any other potential source of exceptions. An exception during function +execution will result in the entire statement failing. + +It is valid to use _complex_ types like collections, tuple types and +user-defined types as argument and return types. Tuple types and +user-defined types are handled by the conversion functions of the +DataStax Java Driver. Please see the documentation of the Java Driver +for details on handling tuple types and user-defined types. + +Arguments for functions can be literals or terms. Prepared statement +placeholders can be used, too. + +Note that you can use the double-quoted string syntax to enclose the UDF +source code. For example: + +[source,cql] +---- +CREATE FUNCTION some_function ( arg int ) + RETURNS NULL ON NULL INPUT + RETURNS int + LANGUAGE java + AS $$ return arg; $$; + +SELECT some_function(column) FROM atable ...; +UPDATE atable SET col = some_function(?) ...; + +CREATE TYPE custom_type (txt text, i int); +CREATE FUNCTION fct_using_udt ( udtarg frozen ) + RETURNS NULL ON NULL INPUT + RETURNS text + LANGUAGE java + AS $$ return udtarg.getString("txt"); $$; +---- + +User-defined functions can be used in `SELECT`, `INSERT` and `UPDATE` +statements. + +The implicitly available `udfContext` field (or binding for script UDFs) +provides the necessary functionality to create new UDT and tuple values: + +[source,cql] +---- +CREATE TYPE custom_type (txt text, i int); +CREATE FUNCTION fct\_using\_udt ( somearg int ) + RETURNS NULL ON NULL INPUT + RETURNS custom_type + LANGUAGE java + AS $$ + UDTValue udt = udfContext.newReturnUDTValue(); + udt.setString("txt", "some string"); + udt.setInt("i", 42); + return udt; + $$; +---- + +The definition of the `UDFContext` interface can be found in the Apache +Cassandra source code for +`org.apache.cassandra.cql3.functions.UDFContext`. + +[source,java] +---- +public interface UDFContext +{ + UDTValue newArgUDTValue(String argName); + UDTValue newArgUDTValue(int argNum); + UDTValue newReturnUDTValue(); + UDTValue newUDTValue(String udtName); + TupleValue newArgTupleValue(String argName); + TupleValue newArgTupleValue(int argNum); + TupleValue newReturnTupleValue(); + TupleValue newTupleValue(String cqlDefinition); +} +---- + +Java UDFs already have some imports for common interfaces and classes +defined. These imports are: + +[source,java] +---- +import java.nio.ByteBuffer; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.cassandra.cql3.functions.UDFContext; +import com.datastax.driver.core.TypeCodec; +import com.datastax.driver.core.TupleValue; +import com.datastax.driver.core.UDTValue; +---- + +Please note, that these convenience imports are not available for script +UDFs. + +[[create-function-statement]] +===== CREATE FUNCTION + +Creating a new user-defined function uses the `CREATE FUNCTION` +statement: + +create_function_statement: CREATE [ OR REPLACE ] FUNCTION [ IF NOT +EXISTS] : [.title-ref]#function_name# '(' +[.title-ref]#arguments_declaration# ')' : [ CALLED | RETURNS NULL ] ON +NULL INPUT : RETURNS [.title-ref]#cql_type# : LANGUAGE +[.title-ref]#identifier# : AS [.title-ref]#string# +arguments_declaration: [.title-ref]#identifier# [.title-ref]#cql_type# ( +',' [.title-ref]#identifier# [.title-ref]#cql_type# )* + +For instance: + +[source,cql] +---- +CREATE OR REPLACE FUNCTION somefunction(somearg int, anotherarg text, complexarg frozen, listarg list) + RETURNS NULL ON NULL INPUT + RETURNS text + LANGUAGE java + AS $$ + // some Java code + $$; + +CREATE FUNCTION IF NOT EXISTS akeyspace.fname(someArg int) + CALLED ON NULL INPUT + RETURNS text + LANGUAGE java + AS $$ + // some Java code + $$; +---- + +`CREATE FUNCTION` with the optional `OR REPLACE` keywords either creates +a function or replaces an existing one with the same signature. A +`CREATE FUNCTION` without `OR REPLACE` fails if a function with the same +signature already exists. + +If the optional `IF NOT EXISTS` keywords are used, the function will +only be created if another function with the same signature does not +exist. + +`OR REPLACE` and `IF NOT EXISTS` cannot be used together. + +Behavior on invocation with `null` values must be defined for each +function. There are two options: + +. `RETURNS NULL ON NULL INPUT` declares that the function will always +return `null` if any of the input arguments is `null`. +. `CALLED ON NULL INPUT` declares that the function will always be +executed. + +====== Function Signature + +Signatures are used to distinguish individual functions. The signature +consists of: + +. The fully qualified function name - i.e _keyspace_ plus +_function-name_ +. The concatenated list of all argument types + +Note that keyspace names, function names and argument types are subject +to the default naming conventions and case-sensitivity rules. + +Functions belong to a keyspace. If no keyspace is specified in +``, the current keyspace is used (i.e. the keyspace +specified using the `USE` statement). It is not possible to create a +user-defined function in one of the system keyspaces. + +[[drop-function-statement]] +===== DROP FUNCTION + +Dropping a function uses the `DROP FUNCTION` statement: + +drop_function_statement: DROP FUNCTION [ IF EXISTS ] +[.title-ref]#function_name# [ '(' [.title-ref]#arguments_signature# ')' +] arguments_signature: [.title-ref]#cql_type# ( ',' +[.title-ref]#cql_type# )* + +For instance: + +[source,cql] +---- +DROP FUNCTION myfunction; +DROP FUNCTION mykeyspace.afunction; +DROP FUNCTION afunction ( int ); +DROP FUNCTION afunction ( text ); +---- + +You must specify the argument types (`arguments_signature`) of the +function to drop if there are multiple functions with the same name but +a different signature (overloaded functions). + +`DROP FUNCTION` with the optional `IF EXISTS` keywords drops a function +if it exists, but does not throw an error if it doesn't + +=== Aggregate functions + +Aggregate functions work on a set of rows. They receive values for each +row and returns one value for the whole set. + +If `normal` columns, `scalar functions`, `UDT` fields, `writetime` or +`ttl` are selected together with aggregate functions, the values +returned for them will be the ones of the first row matching the query. + +==== Native aggregates + +[[count-function]] +===== Count + +The `count` function can be used to count the rows returned by a query. +Example: + +[source,cql] +---- +SELECT COUNT (*) FROM plays; +SELECT COUNT (1) FROM plays; +---- + +It also can be used to count the non null value of a given column: + +[source,cql] +---- +SELECT COUNT (scores) FROM plays; +---- + +===== Max and Min + +The `max` and `min` functions can be used to compute the maximum and the +minimum value returned by a query for a given column. For instance: + +[source,cql] +---- +SELECT MIN (players), MAX (players) FROM plays WHERE game = 'quake'; +---- + +===== Sum + +The `sum` function can be used to sum up all the values returned by a +query for a given column. For instance: + +[source,cql] +---- +SELECT SUM (players) FROM plays; +---- + +===== Avg + +The `avg` function can be used to compute the average of all the values +returned by a query for a given column. For instance: + +[source,cql] +---- +SELECT AVG (players) FROM plays; +---- + +[[user-defined-aggregates-functions]] +==== User-Defined Aggregates + +User-defined aggregates allow the creation of custom aggregate +functions. Common examples of aggregate functions are _count_, _min_, +and _max_. + +Each aggregate requires an _initial state_ (`INITCOND`, which defaults +to `null`) of type `STYPE`. The first argument of the state function +must have type `STYPE`. The remaining arguments of the state function +must match the types of the user-defined aggregate arguments. The state +function is called once for each row, and the value returned by the +state function becomes the new state. After all rows are processed, the +optional `FINALFUNC` is executed with last state value as its argument. + +`STYPE` is mandatory in order to be able to distinguish possibly +overloaded versions of the state and/or final function (since the +overload can appear after creation of the aggregate). + +User-defined aggregates can be used in `SELECT` statement. + +A complete working example for user-defined aggregates (assuming that a +keyspace has been selected using the `USE` statement): + +[source,cql] +---- +CREATE OR REPLACE FUNCTION averageState(state tuple, val int) + CALLED ON NULL INPUT + RETURNS tuple + LANGUAGE java + AS $$ + if (val != null) { + state.setInt(0, state.getInt(0)+1); + state.setLong(1, state.getLong(1)+val.intValue()); + } + return state; + $$; + +CREATE OR REPLACE FUNCTION averageFinal (state tuple) + CALLED ON NULL INPUT + RETURNS double + LANGUAGE java + AS $$ + double r = 0; + if (state.getInt(0) == 0) return null; + r = state.getLong(1); + r /= state.getInt(0); + return Double.valueOf(r); + $$; + +CREATE OR REPLACE AGGREGATE average(int) + SFUNC averageState + STYPE tuple + FINALFUNC averageFinal + INITCOND (0, 0); + +CREATE TABLE atable ( + pk int PRIMARY KEY, + val int +); + +INSERT INTO atable (pk, val) VALUES (1,1); +INSERT INTO atable (pk, val) VALUES (2,2); +INSERT INTO atable (pk, val) VALUES (3,3); +INSERT INTO atable (pk, val) VALUES (4,4); + +SELECT average(val) FROM atable; +---- + +[[create-aggregate-statement]] +===== CREATE AGGREGATE + +Creating (or replacing) a user-defined aggregate function uses the +`CREATE AGGREGATE` statement: + +[source, bnf] +---- +create_aggregate_statement ::= CREATE [ OR REPLACE ] AGGREGATE [ IF NOT EXISTS ] + function_name '(' arguments_signature')' + SFUNC function_name + STYPE cql_type: + [ FINALFUNC function_name] + [ INITCOND term ] +---- + +See above for a complete example. + +`CREATE AGGREGATE` with the optional `OR REPLACE` keywords either +creates an aggregate or replaces an existing one with the same +signature. A `CREATE AGGREGATE` without `OR REPLACE` fails if an +aggregate with the same signature already exists. + +`CREATE AGGREGATE` with the optional `IF NOT EXISTS` keywords either +creates an aggregate if it does not already exist. + +`OR REPLACE` and `IF NOT EXISTS` cannot be used together. + +`STYPE` defines the type of the state value and must be specified. + +The optional `INITCOND` defines the initial state value for the +aggregate. It defaults to `null`. A non-`null` `INITCOND` must be +specified for state functions that are declared with +`RETURNS NULL ON NULL INPUT`. + +`SFUNC` references an existing function to be used as the state +modifying function. The type of first argument of the state function +must match `STYPE`. The remaining argument types of the state function +must match the argument types of the aggregate function. State is not +updated for state functions declared with `RETURNS NULL ON NULL INPUT` +and called with `null`. + +The optional `FINALFUNC` is called just before the aggregate result is +returned. It must take only one argument with type `STYPE`. The return +type of the `FINALFUNC` may be a different type. A final function +declared with `RETURNS NULL ON NULL INPUT` means that the aggregate's +return value will be `null`, if the last state is `null`. + +If no `FINALFUNC` is defined, the overall return type of the aggregate +function is `STYPE`. If a `FINALFUNC` is defined, it is the return type +of that function. + +[[drop-aggregate-statement]] +===== DROP AGGREGATE + +Dropping an user-defined aggregate function uses the `DROP AGGREGATE` +statement: + +drop_aggregate_statement: DROP AGGREGATE [ IF EXISTS ] +[.title-ref]#function_name# [ '(' [.title-ref]#arguments_signature# ')' +] + +For instance: + +[source,cql] +---- +DROP AGGREGATE myAggregate; +DROP AGGREGATE myKeyspace.anAggregate; +DROP AGGREGATE someAggregate ( int ); +DROP AGGREGATE someAggregate ( text ); +---- + +The `DROP AGGREGATE` statement removes an aggregate created using +`CREATE AGGREGATE`. You must specify the argument types of the aggregate +to drop if there are multiple aggregates with the same name but a +different signature (overloaded aggregates). + +`DROP AGGREGATE` with the optional `IF EXISTS` keywords drops an +aggregate if it exists, and does nothing if a function with the +signature does not exist. diff --git a/doc/source/modules/cassandra/pages/cql/index.adoc b/doc/source/modules/cassandra/pages/cql/index.adoc new file mode 100644 index 000000000000..366628da2307 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/index.adoc @@ -0,0 +1,24 @@ += The Cassandra Query Language (CQL) + +This document describes the Cassandra Query Language +(CQL) version 3. +Note that this document describes the last version of the language. +However, the xref:cql/changes.adoc[changes] section provides the differences between the versions of CQL since version 3.0. + +CQL offers a model similar to SQL. +The data is stored in *tables* containing *rows* of *columns*. +For that reason, when used in this document, these terms (tables, rows and columns) have the same definition that they have in SQL. + +* xref:cql/definitions.adoc[Definitions] +* xref:cql/types.adoc[Data types] +* xref:cql/ddl.adoc[Data definition language] +* xref:cql/dml.adoc[Data manipulation language] +* xref:cql/indexes.adoc[Secondary indexes] +* xref:cql/mvs.adoc[Materialized views] +* xref:cql/security.adoc[CQL security] +* xref:cql/functions.adoc[Functions] +* xref:cql/operators.adoc[Operators] +* xref:cql/json.adoc[JSON] +* xref:cql/triggers.adoc[Triggers] +* xref:cql/appendices.adoc[Appendices] +* xref:cql/changes.adoc[Changes] diff --git a/doc/source/cql/index.rst b/doc/source/modules/cassandra/pages/cql/index.rst similarity index 100% rename from doc/source/cql/index.rst rename to doc/source/modules/cassandra/pages/cql/index.rst diff --git a/doc/source/modules/cassandra/pages/cql/indexes.adoc b/doc/source/modules/cassandra/pages/cql/indexes.adoc new file mode 100644 index 000000000000..32b45b59f595 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/indexes.adoc @@ -0,0 +1,63 @@ += Secondary Indexes + +CQL supports creating secondary indexes on tables, allowing queries on +the table to use those indexes. A secondary index is identified by a +name defined by: + +[source,bnf] +---- +include::example$BNF/index_name.bnf[] +---- + +[[create-index-statement]] +== CREATE INDEX + +Creating a secondary index on a table uses the `CREATE INDEX` statement: + +[source,bnf] +---- +include::example$BNF/create_index_statement.bnf[] +---- + +For instance: + +[source,cql] +---- +include::example$CQL/create_index.cql[] +---- + +The `CREATE INDEX` statement is used to create a new (automatic) +secondary index for a given (existing) column in a given table. A name +for the index itself can be specified before the `ON` keyword, if +desired. If data already exists for the column, it will be indexed +asynchronously. After the index is created, new data for the column is +indexed automatically at insertion time. + +Attempting to create an already existing index will return an error +unless the `IF NOT EXISTS` option is used. If it is used, the statement +will be a no-op if the index already exists. + +=== Indexes on Map Keys + +When creating an index on a `maps `, you may index either the keys +or the values. If the column identifier is placed within the `keys()` +function, the index will be on the map keys, allowing you to use +`CONTAINS KEY` in `WHERE` clauses. Otherwise, the index will be on the +map values. + +[[drop-index-statement]] +== DROP INDEX + +Dropping a secondary index uses the `DROP INDEX` statement: + +[source,bnf] +---- +include::example$BNF/drop_index_statement.bnf[] +---- + +The `DROP INDEX` statement is used to drop an existing secondary index. +The argument of the statement is the index name, which may optionally +specify the keyspace of the index. + +If the index does not exists, the statement will return an error, unless +`IF EXISTS` is used in which case the operation is a no-op. diff --git a/doc/source/modules/cassandra/pages/cql/installing.adoc b/doc/source/modules/cassandra/pages/cql/installing.adoc new file mode 100644 index 000000000000..949c5fc8c9ee --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/installing.adoc @@ -0,0 +1,374 @@ += Installing Cassandra + +These are the instructions for deploying the supported releases of +Apache Cassandra on Linux servers. + +Cassandra runs on a wide array of Linux distributions including (but not +limited to): + +* Ubuntu, most notably LTS releases 16.04 to 18.04 +* CentOS & RedHat Enterprise Linux (RHEL) including 6.6 to 7.7 +* Amazon Linux AMIs including 2016.09 through to Linux 2 +* Debian versions 8 & 9 +* SUSE Enterprise Linux 12 + +This is not an exhaustive list of operating system platforms, nor is it +prescriptive. However users will be well-advised to conduct exhaustive +tests of their own particularly for less-popular distributions of Linux. +Deploying on older versions is not recommended unless you have previous +experience with the older distribution in a production environment. + +== Prerequisites + +* Install the latest version of Java 8, either the +http://www.oracle.com/technetwork/java/javase/downloads/index.html[Oracle +Java Standard Edition 8] or http://openjdk.java.net/[OpenJDK 8]. To +verify that you have the correct version of java installed, type +`java -version`. +* *NOTE*: _Experimental_ support for Java 11 was added in Cassandra 4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-9608[CASSANDRA-9608]). +Running Cassandra on Java 11 is _experimental_. Do so at your own risk. +For more information, see +https://github.com/apache/cassandra/blob/trunk/NEWS.txt[NEWS.txt]. +* For using cqlsh, the latest version of +https://www.python.org/downloads/[Python 2.7] or Python 3.6+. To verify +that you have the correct version of Python installed, type +`python --version`. + +== Choosing an installation method + +For most users, installing the binary tarball is the simplest choice. +The tarball unpacks all its contents into a single location with +binaries and configuration files located in their own subdirectories. +The most obvious attribute of the tarball installation is it does not +require `root` permissions and can be installed on any Linux +distribution. + +Packaged installations require `root` permissions. Install the RPM build +on CentOS and RHEL-based distributions if you want to install Cassandra +using YUM. Install the Debian build on Ubuntu and other Debian-based +distributions if you want to install Cassandra using APT. Note that both +the YUM and APT methods required `root` permissions and will install the +binaries and configuration files as the `cassandra` OS user. + +== Installing the binary tarball + +[arabic] +. Verify the version of Java installed. For example: + +[source,none] +---- +$ java -version +openjdk version "1.8.0_222" +OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) +OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) +---- + +[arabic, start=2] +. Download the binary tarball from one of the mirrors on the +http://cassandra.apache.org/download/[Apache Cassandra Download] site. +For example, to download 4.0: + +[source,none] +---- +$ curl -OL http://apache.mirror.digitalpacific.com.au/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz +---- + +NOTE: The mirrors only host the latest versions of each major supported +release. To download an earlier version of Cassandra, visit the +http://archive.apache.org/dist/cassandra/[Apache Archives]. + +[arabic, start=3] +. OPTIONAL: Verify the integrity of the downloaded tarball using one of +the methods https://www.apache.org/dyn/closer.cgi#verify[here]. For +example, to verify the hash of the downloaded file using GPG: + +[source,none] +---- +$ gpg --print-md SHA256 apache-cassandra-4.0.0-bin.tar.gz +apache-cassandra-4.0.0-bin.tar.gz: 28757DDE 589F7041 0F9A6A95 C39EE7E6 + CDE63440 E2B06B91 AE6B2006 14FA364D +---- + +Compare the signature with the SHA256 file from the Downloads site: + +[source,none] +---- +$ curl -L https://downloads.apache.org/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz.sha256 +28757dde589f70410f9a6a95c39ee7e6cde63440e2b06b91ae6b200614fa364d +---- + +[arabic, start=4] +. Unpack the tarball: + +[source,none] +---- +$ tar xzvf apache-cassandra-4.0.0-bin.tar.gz +---- + +The files will be extracted to the `apache-cassandra-4.0.0/` directory. +This is the tarball installation location. + +[arabic, start=5] +. Located in the tarball installation location are the directories for +the scripts, binaries, utilities, configuration, data and log files: + +[source,none] +---- +/ + bin/ + conf/ + data/ + doc/ + interface/ + javadoc/ + lib/ + logs/ + pylib/ + tools/ +---- + +For information on how to configure your installation, see +http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +Cassandra]. + +[arabic, start=6] +. Start Cassandra: + +[source,none] +---- +$ cd apache-cassandra-4.0.0/ +$ bin/cassandra +---- + +NOTE: This will run Cassandra as the authenticated Linux user. + +You can monitor the progress of the startup with: + +[source,none] +---- +$ tail -f logs/system.log +---- + +Cassandra is ready when you see an entry like this in the `system.log`: + +[source,none] +---- +INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... +---- + +[arabic, start=7] +. Check the status of Cassandra: + +[source,none] +---- +$ bin/nodetool status +---- + +The status column in the output should report UN which stands for +"Up/Normal". + +Alternatively, connect to the database with: + +[source,none] +---- +$ bin/cqlsh +---- + +== Installing the Debian packages + +[arabic] +. Verify the version of Java installed. For example: + +[source,none] +---- +$ java -version +openjdk version "1.8.0_222" +OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) +OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) +---- + +[arabic, start=2] +. Add the Apache repository of Cassandra to the file +`cassandra.sources.list`. The latest major version is 4.0 and the +corresponding distribution name is `40x` (with an "x" as the suffix). +For older releases use `311x` for C* 3.11 series, `30x` for 3.0, `22x` +for 2.2 and `21x` for 2.1. For example, to add the repository for +version 4.0 (`40x`): + +[source,none] +---- +$ echo "deb http://www.apache.org/dist/cassandra/debian 40x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list +deb http://www.apache.org/dist/cassandra/debian 40x main +---- + +[arabic, start=3] +. Add the Apache Cassandra repository keys to the list of trusted keys +on the server: + +[source,none] +---- +$ curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add - + % Total % Received % Xferd Average Speed Time Time Time Current + Dload Upload Total Spent Left Speed +100 266k 100 266k 0 0 320k 0 --:--:-- --:--:-- --:--:-- 320k +OK +---- + +[arabic, start=4] +. Update the package index from sources: + +[source,none] +---- +$ sudo apt-get update +---- + +[arabic, start=5] +. Install Cassandra with APT: + +[source,none] +---- +$ sudo apt-get install cassandra +---- + +NOTE: A new Linux user `cassandra` will get created as part of the +installation. The Cassandra service will also be run as this user. + +[arabic, start=6] +. The Cassandra service gets started automatically after installation. +Monitor the progress of the startup with: + +[source,none] +---- +$ tail -f /var/log/cassandra/system.log +---- + +Cassandra is ready when you see an entry like this in the `system.log`: + +[source,none] +---- +INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... +---- + +NOTE: For information on how to configure your installation, see +http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +Cassandra]. + +[arabic, start=7] +. Check the status of Cassandra: + +[source,none] +---- +$ nodetool status +---- + +The status column in the output should report `UN` which stands for +"Up/Normal". + +Alternatively, connect to the database with: + +[source,none] +---- +$ cqlsh +---- + +== Installing the RPM packages + +[arabic] +. Verify the version of Java installed. For example: + +[source,none] +---- +$ java -version +openjdk version "1.8.0_222" +OpenJDK Runtime Environment (build 1.8.0_232-b09) +OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode) +---- + +[arabic, start=2] +. Add the Apache repository of Cassandra to the file +`/etc/yum.repos.d/cassandra.repo` (as the `root` user). The latest major +version is 4.0 and the corresponding distribution name is `40x` (with an +"x" as the suffix). For older releases use `311x` for C* 3.11 series, +`30x` for 3.0, `22x` for 2.2 and `21x` for 2.1. For example, to add the +repository for version 4.0 (`40x`): + +[source,none] +---- +[cassandra] +name=Apache Cassandra +baseurl=https://downloads.apache.org/cassandra/redhat/40x/ +gpgcheck=1 +repo_gpgcheck=1 +gpgkey=https://downloads.apache.org/cassandra/KEYS +---- + +[arabic, start=3] +. Update the package index from sources: + +[source,none] +---- +$ sudo yum update +---- + +[arabic, start=4] +. Install Cassandra with YUM: + +[source,none] +---- +$ sudo yum install cassandra +---- + +NOTE: A new Linux user `cassandra` will get created as part of the +installation. The Cassandra service will also be run as this user. + +[arabic, start=5] +. Start the Cassandra service: + +[source,none] +---- +$ sudo service cassandra start +---- + +[arabic, start=6] +. Monitor the progress of the startup with: + +[source,none] +---- +$ tail -f /var/log/cassandra/system.log +---- + +Cassandra is ready when you see an entry like this in the `system.log`: + +[source,none] +---- +INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... +---- + +NOTE: For information on how to configure your installation, see +http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +Cassandra]. + +[arabic, start=7] +. Check the status of Cassandra: + +[source,none] +---- +$ nodetool status +---- + +The status column in the output should report `UN` which stands for +"Up/Normal". + +Alternatively, connect to the database with: + +[source,none] +---- +$ cqlsh +---- + +== Further installation info + +For help with installation issues, see the +http://cassandra.apache.org/doc/latest/troubleshooting/index.html[Troubleshooting] +section. diff --git a/doc/source/modules/cassandra/pages/cql/json.adoc b/doc/source/modules/cassandra/pages/cql/json.adoc new file mode 100644 index 000000000000..f8c1a93b3ef9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/json.adoc @@ -0,0 +1,130 @@ += JSON Support + +Cassandra 2.2 introduces JSON support to `SELECT ` and +`INSERT ` statements. This support does not +fundamentally alter the CQL API (for example, the schema is still +enforced), it simply provides a convenient way to work with JSON +documents. + +== SELECT JSON + +With `SELECT` statements, the `JSON` keyword can be used to return each +row as a single `JSON` encoded map. The remainder of the `SELECT` +statement behavior is the same. + +The result map keys are the same as the column names in a normal result +set. For example, a statement like `SELECT JSON a, ttl(b) FROM ...` +would result in a map with keys `"a"` and `"ttl(b)"`. However, this is +one notable exception: for symmetry with `INSERT JSON` behavior, +case-sensitive column names with upper-case letters will be surrounded +with double quotes. For example, `SELECT JSON myColumn FROM ...` would +result in a map key `"\"myColumn\""` (note the escaped quotes). + +The map values will `JSON`-encoded representations (as described below) +of the result set values. + +== INSERT JSON + +With `INSERT` statements, the new `JSON` keyword can be used to enable +inserting a `JSON` encoded map as a single row. The format of the `JSON` +map should generally match that returned by a `SELECT JSON` statement on +the same table. In particular, case-sensitive column names should be +surrounded with double quotes. For example, to insert into a table with +two columns named "myKey" and "value", you would do the following: + +[source,cql] +---- +include::example$CQL/insert_json.cql[] +---- + +By default (or if `DEFAULT NULL` is explicitly used), a column omitted +from the `JSON` map will be set to `NULL`, meaning that any pre-existing +value for that column will be removed (resulting in a tombstone being +created). Alternatively, if the `DEFAULT UNSET` directive is used after +the value, omitted column values will be left unset, meaning that +pre-existing values for those column will be preserved. + +== JSON Encoding of Cassandra Data Types + +Where possible, Cassandra will represent and accept data types in their +native `JSON` representation. Cassandra will also accept string +representations matching the CQL literal format for all single-field +types. For example, floats, ints, UUIDs, and dates can be represented by +CQL literal strings. However, compound types, such as collections, +tuples, and user-defined types must be represented by native `JSON` +collections (maps and lists) or a JSON-encoded string representation of +the collection. + +The following table describes the encodings that Cassandra will accept +in `INSERT JSON` values (and `fromJson()` arguments) as well as the +format Cassandra will use when returning data for `SELECT JSON` +statements (and `fromJson()`): + +[cols=",,,",options="header",] +|=== +|Type |Formats accepted |Return format |Notes + +| `ascii` | string | string | Uses JSON's `\u` character escape + +| `bigint` | integer, string | integer | String must be valid 64 bit integer + +| `blob` | string | string | String should be 0x followed by an even number of hex digits + +| `boolean` | boolean, string | boolean | String must be "true" or "false" + +| `date` | string | string | Date in format `YYYY-MM-DD`, timezone UTC + +| `decimal` | integer, float, string | float | May exceed 32 or 64-bit IEEE-754 floating point precision in client-side decoder + +| `double` | integer, float, string | float | String must be valid integer or float + +| `float` | integer, float, string | float | String must be valid integer or float + +| `inet` | string | string | IPv4 or IPv6 address + +| `int` | integer, string | integer | String must be valid 32 bit integer + +| `list` | list, string | list | Uses JSON's native list representation + +| `map` | map, string | map | Uses JSON's native map representation + +| `smallint` | integer, string | integer | String must be valid 16 bit integer + +| `set` | list, string | list | Uses JSON's native list representation + +| `text` | string | string | Uses JSON's `\u` character escape + +| `time` | string | string | Time of day in format `HH-MM-SS[.fffffffff]` + +| `timestamp` | integer, string | string | A timestamp. Strings constant allows to input `timestamps +as dates `. Datestamps with format `YYYY-MM-DD HH:MM:SS.SSS` +are returned. + +| `timeuuid` | string | string | Type 1 UUID. See `constant` for the UUID format + +| `tinyint` | integer, string | integer | String must be valid 8 bit integer + +| `tuple` | list, string | list | Uses JSON's native list representation + +| `UDT` | map, string | map | Uses JSON's native map representation with field names as keys + +| `uuid` | string | string | See `constant` for the UUID format + +| `varchar` | string | string | Uses JSON's `\u` character escape + +| `varint` | integer, string | integer | Variable length; may overflow 32 or 64 bit integers in client-side decoder +|=== + +== The fromJson() Function + +The `fromJson()` function may be used similarly to `INSERT JSON`, but +for a single column value. It may only be used in the `VALUES` clause of +an `INSERT` statement or as one of the column values in an `UPDATE`, +`DELETE`, or `SELECT` statement. For example, it cannot be used in the +selection clause of a `SELECT` statement. + +== The toJson() Function + +The `toJson()` function may be used similarly to `SELECT JSON`, but for +a single column value. It may only be used in the selection clause of a +`SELECT` statement. diff --git a/doc/source/modules/cassandra/pages/cql/mvs.adoc b/doc/source/modules/cassandra/pages/cql/mvs.adoc new file mode 100644 index 000000000000..2afac582d571 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/mvs.adoc @@ -0,0 +1,161 @@ += Materialized Views + +Materialized views names are defined by: + +[source,bnf] +---- +include::example$BNF/view_name.bnf[] +---- + +[[create-materialized-view-statement]] +== CREATE MATERIALIZED VIEW + +You can create a materialized view on a table using a +`CREATE MATERIALIZED VIEW` statement: + +[source,bnf] +---- +include::example$BNF/create_mv_statement.bnf[] +---- + +For instance: + +[source,cql] +---- +include::example$CQL/create_mv_statement.cql[] +---- + +The `CREATE MATERIALIZED VIEW` statement creates a new materialized +view. Each such view is a set of _rows_ which corresponds to rows which +are present in the underlying, or base, table specified in the `SELECT` +statement. A materialized view cannot be directly updated, but updates +to the base table will cause corresponding updates in the view. + +Creating a materialized view has 3 main parts: + +* The `select statement ` that restrict the data included in +the view. +* The `primary key ` definition for the view. +* The `options ` for the view. + +Attempting to create an already existing materialized view will return +an error unless the `IF NOT EXISTS` option is used. If it is used, the +statement will be a no-op if the materialized view already exists. + +[NOTE] +.Note +==== +By default, materialized views are built in a single thread. The initial +build can be parallelized by increasing the number of threads specified +by the property `concurrent_materialized_view_builders` in +`cassandra.yaml`. This property can also be manipulated at runtime +through both JMX and the `setconcurrentviewbuilders` and +`getconcurrentviewbuilders` nodetool commands. +==== + +[[mv-select]] +=== MV select statement + +The select statement of a materialized view creation defines which of +the base table is included in the view. That statement is limited in a +number of ways: + +* the `selection ` is limited to those that only +select columns of the base table. In other words, you can't use any +function (aggregate or not), casting, term, etc. Aliases are also not +supported. You can however use [.title-ref]#*# as a shortcut of +selecting all columns. Further, `static columns ` cannot +be included in a materialized view (which means `SELECT *` isn't allowed +if the base table has static columns). +* the `WHERE` clause have the following restrictions: +** it cannot include any `bind_marker`. +** the columns that are not part of the _base table_ primary key can +only be restricted by an `IS NOT NULL` restriction. No other restriction +is allowed. +** as the columns that are part of the _view_ primary key cannot be +null, they must always be at least restricted by a `IS NOT NULL` +restriction (or any other restriction, but they must have one). +* it cannot have neither an `ordering clause `, nor a +`limit `, nor `ALLOW +FILTERING `. + +=== MV primary key + +A view must have a primary key and that primary key must conform to the +following restrictions: + +* it must contain all the primary key columns of the base table. This +ensures that every row of the view correspond to exactly one row of the +base table. +* it can only contain a single column that is not a primary key column +in the base table. + +So for instance, give the following base table definition: + +[source,cql] +---- +include::example$CQL/mv_table_def.cql[] +---- + +then the following view definitions are allowed: + +[source,cql] +---- +include::example$CQL/mv_table_from_base.cql[] +---- + +but the following ones are *not* allowed: + +[source,cql] +---- +include::example$CQL/mv_table_error.cql[] +---- + +=== MV options + +A materialized view is internally implemented by a table and as such, +creating a MV allows the `same options than +creating a table `. + +[[alter-materialized-view-statement]] +== ALTER MATERIALIZED VIEW + +After creation, you can alter the options of a materialized view using +the `ALTER MATERIALIZED VIEW` statement: + +[source,bnf] +---- +include::example$BNF/alter_mv_statement.bnf[] +---- + +The options that can be updated are the same than at creation time and +thus the `same than for tables +`. + +[[drop-materialized-view-statement]] +== DROP MATERIALIZED VIEW + +Dropping a materialized view using the `DROP MATERIALIZED VIEW` +statement: + +[source, bnf] +---- +include::example$BNF/drop_mv_statement.bnf[] +---- + +If the materialized view does not exists, the statement will return an +error, unless `IF EXISTS` is used in which case the operation is a +no-op. + +=== MV Limitations + +[NOTE] +.Note +==== +Removal of columns not selected in the Materialized View (via +`UPDATE base SET unselected_column = null` or +`DELETE unselected_column FROM base`) may shadow missed updates to other +columns received by hints or repair. For this reason, we advise against +doing deletions on base columns not selected in views until this is +fixed on CASSANDRA-13826. +==== diff --git a/doc/source/modules/cassandra/pages/cql/operators.adoc b/doc/source/modules/cassandra/pages/cql/operators.adoc new file mode 100644 index 000000000000..9d858f91821b --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/operators.adoc @@ -0,0 +1,68 @@ += Arithmetic Operators + +CQL supports the following operators: + +[cols=",",options="header",] +|=== +|Operator |Description + +| - (unary) | Negates operand + +| + | Addition + +| - | Substraction + +| * | Multiplication + +| / | Division + +| % | Returns the remainder of a division +|=== + +== Number Arithmetic + +All arithmetic operations are supported on numeric types or counters. + +The return type of the operation will be based on the operand types: + +[cols=",,,,,,,,,",options="header",] +|=== +|left/right |tinyint |smallint |int |bigint |counter |float |double |varint |decimal + +| *tinyint* | tinyint | smallint | int | bigint | bigint | float | double | varint | decimal + +| *smallint* | smallint | smallint | int | bigint | bigint | float | double | varint | decimal + +| *int* | int | int | int | bigint | bigint | float | double | varint | decimal + +| *bigint* | bigint | bigint | bigint | bigint | bigint | double | double | varint | decimal + +| *counter* | bigint | bigint | bigint | bigint | bigint | double | double | varint | decimal + +| *float* | float | float | float | double | double | float | double | decimal | decimal + +| *double* | double | double | double | double | double | double | double | decimal | decimal + +| *varint* | varint | varint | varint | decimal | decimal | decimal | decimal | decimal | decimal + +| *decimal* | decimal | decimal | decimal | decimal | decimal | decimal | decimal | decimal | decimal +|=== + +`*`, `/` and `%` operators have a higher precedence level than `+` and +`-` operator. By consequence, they will be evaluated before. If two +operator in an expression have the same precedence level, they will be +evaluated left to right based on their position in the expression. + +[[datetime--arithmetic]] +== Datetime Arithmetic + +A `duration` can be added (+) or substracted (-) from a `timestamp` or a +`date` to create a new `timestamp` or `date`. So for instance: + +[source,cql] +---- +include::example$CQL/datetime_arithmetic.cql[] +---- + +will select all the records with a value of `t` which is in the last 2 +days of 2016. diff --git a/doc/source/modules/cassandra/pages/cql/production.adoc b/doc/source/modules/cassandra/pages/cql/production.adoc new file mode 100644 index 000000000000..1954ee9b15b8 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/production.adoc @@ -0,0 +1,82 @@ += Production Recommendations + +The `cassandra.yaml` and `jvm.options` files have a number of notes and +recommendations for production usage. This page expands on some of the +notes in these files with additional information. + +== Tokens + +Using more than 1 token (referred to as vnodes) allows for more flexible +expansion and more streaming peers when bootstrapping new nodes into the +cluster. This can limit the negative impact of streaming (I/O and CPU +overhead) as well as allow for incremental cluster expansion. + +As a tradeoff, more tokens will lead to sharing data with more peers, +which can result in decreased availability. To learn more about this we +recommend reading +https://github.com/jolynch/python_performance_toolkit/raw/master/notebooks/cassandra_availability/whitepaper/cassandra-availability-virtual.pdf[this +paper]. + +The number of tokens can be changed using the following setting: + +`num_tokens: 16` + +Here are the most common token counts with a brief explanation of when +and why you would use each one. + +[width="100%",cols="13%,87%",options="header",] +|=== +|Token Count |Description +|1 |Maximum availablility, maximum cluster size, fewest peers, but +inflexible expansion. Must always double size of cluster to expand and +remain balanced. + +|4 |A healthy mix of elasticity and availability. Recommended for +clusters which will eventually reach over 30 nodes. Requires adding +approximately 20% more nodes to remain balanced. Shrinking a cluster may +result in cluster imbalance. + +|16 |Best for heavily elastic clusters which expand and shrink +regularly, but may have issues availability with larger clusters. Not +recommended for clusters over 50 nodes. +|=== + +In addition to setting the token count, it's extremely important that +`allocate_tokens_for_local_replication_factor` be set as well, to ensure +even token allocation. + +== Read Ahead + +Read ahead is an operating system feature that attempts to keep as much +data loaded in the page cache as possible. The goal is to decrease +latency by using additional throughput on reads where the latency +penalty is high due to seek times on spinning disks. By leveraging read +ahead, the OS can pull additional data into memory without the cost of +additional seeks. This works well when available RAM is greater than the +size of the hot dataset, but can be problematic when the hot dataset is +much larger than available RAM. The benefit of read ahead decreases as +the size of your hot dataset gets bigger in proportion to available +memory. + +With small partitions (usually tables with no partition key, but not +limited to this case) and solid state drives, read ahead can increase +disk usage without any of the latency benefits, and in some cases can +result in up to a 5x latency and throughput performance penalty. Read +heavy, key/value tables with small (under 1KB) rows are especially prone +to this problem. + +We recommend the following read ahead settings: + +[width="59%",cols="40%,60%",options="header",] +|=== +|Hardware |Initial Recommendation +|Spinning Disks |64KB +|SSD |4KB +|=== + +Read ahead can be adjusted on Linux systems by using the +[.title-ref]#blockdev# tool. + +For example, we can set read ahead of +`/dev/sda1\` to 4KB by doing the following:: blockdev --setra 8 /dev/sda1 **Note**: blockdev accepts the number of 512 byte sectors to read ahead. The argument of 8 above is equivilent to 4KB. Since each system is different, use the above recommendations as a starting point and tuning based on your SLA and throughput requirements. To understand how read ahead impacts disk resource usage we recommend carefully reading through the :ref:\`troubleshooting \` portion of the documentation. Compression ^^^^^^^^^^^^ Compressed data is stored by compressing fixed size byte buffers and writing the data to disk. The buffer size is determined by the`chunk_length_in_kb`element in the compression map of the schema settings. The default setting is 16KB starting with Cassandra 4.0. Since the entire compressed buffer must be read off disk, using too high of a compression chunk length can lead to significant overhead when reading small records. Combined with the default read ahead setting this can result in massive read amplification for certain workloads. LZ4Compressor is the default and recommended compression algorithm. There is additional information on this topic on \`The Last Pickle Blog \`_. Compaction ^^^^^^^^^^^^ There are different :ref:\`compaction \` strategies available for different workloads. We recommend reading up on the different strategies to understand which is the best for your environment. Different tables may (and frequently do) use different compaction strategies on the same cluster. Encryption ^^^^^^^^^^^ It is significantly easier to set up peer to peer encryption and client server encryption when setting up your production cluster as opposed to setting it up once the cluster is already serving production traffic. If you are planning on using network encryption eventually (in any form), we recommend setting it up now. Changing these configurations down the line is not impossible, but mistakes can result in downtime or data loss. Ensure Keyspaces are Created with NetworkTopologyStrategy ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Production clusters should never use SimpleStrategy. Production keyspaces should use the NetworkTopologyStrategy (NTS). For example:: create KEYSPACE mykeyspace WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': 3}; NetworkTopologyStrategy allows Cassandra to take advantage of multiple racks and data centers. Configure Racks and Snitch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Correctly configuring or changing racks after a cluster has been provisioned is an unsupported process**. Migrating from a single rack to multiple racks is also unsupported and can result in data loss. Using`GossipingPropertyFileSnitch`is the most flexible solution for on premise or mixed cloud environments.`Ec2Snitch`` +is reliable for AWS EC2 only environments. diff --git a/doc/source/modules/cassandra/pages/cql/querying.adoc b/doc/source/modules/cassandra/pages/cql/querying.adoc new file mode 100644 index 000000000000..683e3e384853 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/querying.adoc @@ -0,0 +1,38 @@ += Inserting and querying + +The API to Cassandra is `CQL `, the Cassandra Query Language. To +use CQL, you will need to connect to the cluster, which can be done: + +* either using cqlsh, +* or through a client driver for Cassandra. + +== CQLSH + +cqlsh is a command line shell for interacting with Cassandra through +CQL. It is shipped with every Cassandra package, and can be found in the +bin/ directory alongside the cassandra executable. It connects to the +single node specified on the command line. For example: + +.... +$ bin/cqlsh localhost +Connected to Test Cluster at localhost:9042. +[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4] +Use HELP for help. +cqlsh> SELECT cluster_name, listen_address FROM system.local; + + cluster_name | listen_address +--------------+---------------- + Test Cluster | 127.0.0.1 + +(1 rows) +cqlsh> +.... + +See the `cqlsh section ` for full documentation. + +== Client drivers + +A lot of client drivers are provided by the Community and a list of +known drivers is provided in `the next section +`. You should refer to the documentation of each drivers +for more information on how to use them. diff --git a/doc/source/modules/cassandra/pages/cql/security.adoc b/doc/source/modules/cassandra/pages/cql/security.adoc new file mode 100644 index 000000000000..a435086bf8ea --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/security.adoc @@ -0,0 +1,672 @@ += Security + +[[cql-roles]] +== Database Roles + +CQL uses database roles to represent users and group of users. +Syntactically, a role is defined by: + +[source, bnf] +---- +role_name ::= identifier | string +---- + + +[[create-role-statement]] +=== CREATE ROLE + +Creating a role uses the `CREATE ROLE` statement: + +[source, bnf] +---- +create_role_statement ::= CREATE ROLE [ IF NOT EXISTS ] role_name + [ WITH role_options# ] +role_options ::= role_option ( AND role_option)* +role_option ::= PASSWORD '=' string + | LOGIN '=' boolean + | SUPERUSER '=' boolean + | OPTIONS '=' map_literal + | ACCESS TO DATACENTERS set_literal + | ACCESS TO ALL DATACENTERS +---- + +For instance: + +[source,cql] +---- +CREATE ROLE new_role; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; +CREATE ROLE bob WITH PASSWORD = 'password_b' AND LOGIN = true AND SUPERUSER = true; +CREATE ROLE carlos WITH OPTIONS = { 'custom_option1' : 'option1_value', 'custom_option2' : 99 }; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO DATACENTERS {'DC1', 'DC3'}; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO ALL DATACENTERS; +---- + +By default roles do not possess `LOGIN` privileges or `SUPERUSER` +status. + +`Permissions ` on database resources are granted to +roles; types of resources include keyspaces, tables, functions and roles +themselves. Roles may be granted to other roles to create hierarchical +permissions structures; in these hierarchies, permissions and +`SUPERUSER` status are inherited, but the `LOGIN` privilege is not. + +If a role has the `LOGIN` privilege, clients may identify as that role +when connecting. For the duration of that connection, the client will +acquire any roles and privileges granted to that role. + +Only a client with with the `CREATE` permission on the database roles +resource may issue `CREATE ROLE` requests (see the +`relevant section ` below), unless the client is a +`SUPERUSER`. Role management in Cassandra is pluggable and custom +implementations may support only a subset of the listed options. + +Role names should be quoted if they contain non-alphanumeric characters. + +==== Setting credentials for internal authentication + +Use the `WITH PASSWORD` clause to set a password for internal +authentication, enclosing the password in single quotation marks. + +If internal authentication has not been set up or the role does not have +`LOGIN` privileges, the `WITH PASSWORD` clause is not necessary. + +==== Restricting connections to specific datacenters + +If a `network_authorizer` has been configured, you can restrict login +roles to specific datacenters with the `ACCESS TO DATACENTERS` clause +followed by a set literal of datacenters the user can access. Not +specifiying datacenters implicitly grants access to all datacenters. The +clause `ACCESS TO ALL DATACENTERS` can be used for explicitness, but +there's no functional difference. + +==== Creating a role conditionally + +Attempting to create an existing role results in an invalid query +condition unless the `IF NOT EXISTS` option is used. If the option is +used and the role exists, the statement is a no-op: + +[source,cql] +---- +CREATE ROLE other_role; +CREATE ROLE IF NOT EXISTS other_role; +---- + +[[alter-role-statement]] +=== ALTER ROLE + +Altering a role options uses the `ALTER ROLE` statement: + +[source, bnf] +---- +alter_role_statement ::= ALTER ROLE role_name WITH role_options +---- + +For instance: + +[source,cql] +---- +ALTER ROLE bob WITH PASSWORD = 'PASSWORD_B' AND SUPERUSER = false; +---- + +==== Restricting connections to specific datacenters + +If a `network_authorizer` has been configured, you can restrict login +roles to specific datacenters with the `ACCESS TO DATACENTERS` clause +followed by a set literal of datacenters the user can access. To remove +any data center restrictions, use the `ACCESS TO ALL DATACENTERS` +clause. + +Conditions on executing `ALTER ROLE` statements: + +* A client must have `SUPERUSER` status to alter the `SUPERUSER` status +of another role +* A client cannot alter the `SUPERUSER` status of any role it currently +holds +* A client can only modify certain properties of the role with which it +identified at login (e.g. `PASSWORD`) +* To modify properties of a role, the client must be granted `ALTER` +`permission ` on that role + +[[drop-role-statement]] +=== DROP ROLE + +Dropping a role uses the `DROP ROLE` statement: + +[source, bnf] +---- +drop_role_statement ::= DROP ROLE [ IF EXISTS ] role_name +---- + +`DROP ROLE` requires the client to have `DROP` +`permission ` on the role in question. In addition, +client may not `DROP` the role with which it identified at login. +Finally, only a client with `SUPERUSER` status may `DROP` another +`SUPERUSER` role. + +Attempting to drop a role which does not exist results in an invalid +query condition unless the `IF EXISTS` option is used. If the option is +used and the role does not exist the statement is a no-op. + +[NOTE] +.Note +==== +DROP ROLE intentionally does not terminate any open user sessions. +Currently connected sessions will remain connected and will retain the +ability to perform any database actions which do not require +`authorization`. However, if authorization is enabled, +`permissions` of the dropped role are also revoked, +subject to the `caching options` configured in +`cassandra.yaml`. Should a dropped role be subsequently +recreated and have new `permissions` or +`roles` granted to it, any client sessions still +connected will acquire the newly granted permissions and roles. +==== + +[[grant-role-statement]] +=== GRANT ROLE + +Granting a role to another uses the `GRANT ROLE` statement: + +[source, bnf] +---- +grant_role_statement ::= GRANT role_name TO role_name# +---- + +For instance: + +[source,cql] +---- +GRANT report_writer TO alice; +---- + +This statement grants the `report_writer` role to `alice`. Any +permissions granted to `report_writer` are also acquired by `alice`. + +Roles are modelled as a directed acyclic graph, so circular grants are +not permitted. The following examples result in error conditions: + +[source,cql] +---- +GRANT role_a TO role_b; +GRANT role_b TO role_a; + +GRANT role_a TO role_b; +GRANT role_b TO role_c; +GRANT role_c TO role_a; +---- + +[[revoke-role-statement]] +=== REVOKE ROLE + +Revoking a role uses the `REVOKE ROLE` statement: + +[source, bnf] +---- +revoke_role_statement ::= REVOKE role_name FROM role_name +---- + +For instance: + +[source,cql] +---- +REVOKE report_writer FROM alice; +---- + +This statement revokes the `report_writer` role from `alice`. Any +permissions that `alice` has acquired via the `report_writer` role are +also revoked. + +[[list-roles-statement]] +=== LIST ROLES + +All the known roles (in the system or granted to specific role) can be +listed using the `LIST ROLES` statement: + +[source, bnf] +---- +list_roles_statement ::= LIST ROLES [ OF role_name] [ NORECURSIVE ] +---- + +For instance: + +[source,cql] +---- +LIST ROLES; +---- + +returns all known roles in the system, this requires `DESCRIBE` +permission on the database roles resource. And: + +[source,cql] +---- +LIST ROLES OF alice; +---- + +enumerates all roles granted to `alice`, including those transitively +acquired. But: + +[source,cql] +---- +LIST ROLES OF bob NORECURSIVE +---- + +lists all roles directly granted to `bob` without including any of the +transitively acquired ones. + +== Users + +Prior to the introduction of roles in Cassandra 2.2, authentication and +authorization were based around the concept of a `USER`. For backward +compatibility, the legacy syntax has been preserved with `USER` centric +statements becoming synonyms for the `ROLE` based equivalents. In other +words, creating/updating a user is just a different syntax for +creating/updating a role. + +[[create-user-statement]] +=== CREATE USER + +Creating a user uses the `CREATE USER` statement: + +[source, bnf] +---- +create_user_statement ::= CREATE USER [ IF NOT EXISTS ] role_name + [ WITH PASSWORD string ] + [ user_option ] +user_option: SUPERUSER | NOSUPERUSER +---- + +For instance: + +[source,cql] +---- +CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; +CREATE USER bob WITH PASSWORD 'password_b' NOSUPERUSER; +---- + +`CREATE USER` is equivalent to `CREATE ROLE` where the `LOGIN` option is +`true`. So, the following pairs of statements are equivalent: + +[source,cql] +---- +CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; + +CREATE USER IF NOT EXISTS alice WITH PASSWORD 'password_a' SUPERUSER; +CREATE ROLE IF NOT EXISTS alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; + +CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = false; + +CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; + +CREATE USER alice WITH PASSWORD 'password_a'; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; +---- + +[[alter-user-statement]] +=== ALTER USER + +Altering the options of a user uses the `ALTER USER` statement: + +[source, bnf] +---- +alter_user_statement ::= ALTER USER role_name [ WITH PASSWORD string] [ user_option] +---- + +For instance: + +[source,cql] +---- +ALTER USER alice WITH PASSWORD 'PASSWORD_A'; +ALTER USER bob SUPERUSER; +---- + +[[drop-user-statement]] +=== DROP USER + +Dropping a user uses the `DROP USER` statement: + +[source, bnf] +---- +drop_user_statement ::= DROP USER [ IF EXISTS ] role_name +---- + +[[list-users-statement]] +=== LIST USERS + +Existing users can be listed using the `LIST USERS` statement: + +list_users_statement: LIST USERS + +Note that this statement is equivalent to: + +[source,cql] +---- +LIST ROLES; +---- + +but only roles with the `LOGIN` privilege are included in the output. + +== Data Control + +[[cql-permissions]] +=== Permissions + +Permissions on resources are granted to roles; there are several +different types of resources in Cassandra and each type is modelled +hierarchically: + +* The hierarchy of Data resources, Keyspaces and Tables has the +structure `ALL KEYSPACES` -> `KEYSPACE` -> `TABLE`. +* Function resources have the structure `ALL FUNCTIONS` -> `KEYSPACE` -> +`FUNCTION` +* Resources representing roles have the structure `ALL ROLES` -> `ROLE` +* Resources representing JMX ObjectNames, which map to sets of +MBeans/MXBeans, have the structure `ALL MBEANS` -> `MBEAN` + +Permissions can be granted at any level of these hierarchies and they +flow downwards. So granting a permission on a resource higher up the +chain automatically grants that same permission on all resources lower +down. For example, granting `SELECT` on a `KEYSPACE` automatically +grants it on all `TABLES` in that `KEYSPACE`. Likewise, granting a +permission on `ALL FUNCTIONS` grants it on every defined function, +regardless of which keyspace it is scoped in. It is also possible to +grant permissions on all functions scoped to a particular keyspace. + +Modifications to permissions are visible to existing client sessions; +that is, connections need not be re-established following permissions +changes. + +The full set of available permissions is: + +* `CREATE` +* `ALTER` +* `DROP` +* `SELECT` +* `MODIFY` +* `AUTHORIZE` +* `DESCRIBE` +* `EXECUTE` + +Not all permissions are applicable to every type of resource. For +instance, `EXECUTE` is only relevant in the context of functions or +mbeans; granting `EXECUTE` on a resource representing a table is +nonsensical. Attempting to `GRANT` a permission on resource to which it +cannot be applied results in an error response. The following +illustrates which permissions can be granted on which types of resource, +and which statements are enabled by that permission. + +[cols=",,",options="header",] +|=== +|Permission |Resource |Operations + +| `CREATE` | `ALL KEYSPACES` | `CREATE KEYSPACE` and `CREATE TABLE` in any keyspace + +| `CREATE` | `KEYSPACE` | `CREATE TABLE` in specified keyspace + +| `CREATE` | `ALL FUNCTIONS` | `CREATE FUNCTION` in any keyspace and `CREATE AGGREGATE` in any keyspace + +| `CREATE` | `ALL FUNCTIONS IN KEYSPACE` | `CREATE FUNCTION` and `CREATE AGGREGATE` in specified keyspace + +| `CREATE` | `ALL ROLES` | `CREATE ROLE` + +| `ALTER` | `ALL KEYSPACES` | `ALTER KEYSPACE` and `ALTER TABLE` in any keyspace + +| `ALTER` | `KEYSPACE` | `ALTER KEYSPACE` and `ALTER TABLE` in specified keyspace + +| `ALTER` | `TABLE` | `ALTER TABLE` + +| `ALTER` | `ALL FUNCTIONS` | `CREATE FUNCTION` and `CREATE AGGREGATE`: replacing any existing + +| `ALTER` | `ALL FUNCTIONS IN KEYSPACE` | `CREATE FUNCTION` and `CREATE AGGREGATE`: replacing existing in specified keyspace + +| `ALTER` | `FUNCTION` | `CREATE FUNCTION` and `CREATE AGGREGATE`: replacing existing + +| `ALTER` | `ALL ROLES` | `ALTER ROLE` on any role + +| `ALTER` | `ROLE` | `ALTER ROLE` + +| `DROP` | `ALL KEYSPACES` | `DROP KEYSPACE` and `DROP TABLE` in any keyspace + +| `DROP` | `KEYSPACE` | `DROP TABLE` in specified keyspace + +| `DROP` | `TABLE` | `DROP TABLE` + +| `DROP` | `ALL FUNCTIONS` | `DROP FUNCTION` and `DROP AGGREGATE` in any keyspace + +| `DROP` | `ALL FUNCTIONS IN KEYSPACE` | `DROP FUNCTION` and `DROP AGGREGATE` in specified keyspace + +| `DROP` | `FUNCTION` | `DROP FUNCTION` + +| `DROP` | `ALL ROLES` | `DROP ROLE` on any role + +| `DROP` | `ROLE` | `DROP ROLE` + +| `SELECT` | `ALL KEYSPACES` | `SELECT` on any table + +| `SELECT` | `KEYSPACE` | `SELECT` on any table in specified keyspace + +| `SELECT` | `TABLE` | `SELECT` on specified table + +| `SELECT` | `ALL MBEANS` | Call getter methods on any mbean + +| `SELECT` | `MBEANS` | Call getter methods on any mbean matching a wildcard pattern + +| `SELECT` | `MBEAN` | Call getter methods on named mbean + +| `MODIFY` | `ALL KEYSPACES` | `INSERT`, `UPDATE`, `DELETE` and `TRUNCATE` on any table + +| `MODIFY` | `KEYSPACE` | `INSERT`, `UPDATE`, `DELETE` and `TRUNCATE` on any table in specified +keyspace + +| `MODIFY` | `TABLE` | `INSERT`, `UPDATE`, `DELETE` and `TRUNCATE` on specified table + +| `MODIFY` | `ALL MBEANS` | Call setter methods on any mbean + +| `MODIFY` | `MBEANS` | Call setter methods on any mbean matching a wildcard pattern + +| `MODIFY` | `MBEAN` | Call setter methods on named mbean + +| `AUTHORIZE` | `ALL KEYSPACES` | `GRANT PERMISSION` and `REVOKE PERMISSION` on any table + +| `AUTHORIZE` | `KEYSPACE` | `GRANT PERMISSION` and `REVOKE PERMISSION` on any table in specified keyspace + +| `AUTHORIZE` | `TABLE` | `GRANT PERMISSION` and `REVOKE PERMISSION` on specified table + +| `AUTHORIZE` | `ALL FUNCTIONS` | `GRANT PERMISSION` and `REVOKE PERMISSION` on any function + +| `AUTHORIZE` | `ALL FUNCTIONS IN KEYSPACE` | `GRANT PERMISSION` and `REVOKE PERMISSION` in specified keyspace + +| `AUTHORIZE` | `FUNCTION` | `GRANT PERMISSION` and `REVOKE PERMISSION` on specified function + +| `AUTHORIZE` | `ALL MBEANS` | `GRANT PERMISSION` and `REVOKE PERMISSION` on any mbean + +| `AUTHORIZE` | `MBEANS` | `GRANT PERMISSION` and `REVOKE PERMISSION` on any mbean matching a wildcard pattern + +| `AUTHORIZE` | `MBEAN` | `GRANT PERMISSION` and `REVOKE PERMISSION` on named mbean + +| `AUTHORIZE` | `ALL ROLES` | `GRANT ROLE` and `REVOKE ROLE` on any role + +| `AUTHORIZE` | `ROLES` | `GRANT ROLE` and `REVOKE ROLE` on specified roles + +| `DESCRIBE` | `ALL ROLES` | `LIST ROLES` on all roles or only roles granted to another, specified role + +| `DESCRIBE` | `ALL MBEANS` | Retrieve metadata about any mbean from the platform's MBeanServer + + +| `DESCRIBE` | `MBEANS` | Retrieve metadata about any mbean matching a wildcard patter from the +platform's MBeanServer + +| `DESCRIBE` | `MBEAN` | Retrieve metadata about a named mbean from the platform's MBeanServer + +| `EXECUTE` | `ALL FUNCTIONS` | `SELECT`, `INSERT` and `UPDATE` using any function, and use of any +function in `CREATE AGGREGATE` + +| `EXECUTE` | `ALL FUNCTIONS IN KEYSPACE` | `SELECT`, `INSERT` and `UPDATE` using any function in specified keyspace +and use of any function in keyspace in `CREATE AGGREGATE` + +| `EXECUTE` | `FUNCTION` | `SELECT`, `INSERT` and `UPDATE` using specified function and use of the function in `CREATE AGGREGATE` + +| `EXECUTE` | `ALL MBEANS` | Execute operations on any mbean + +| `EXECUTE` | `MBEANS` | Execute operations on any mbean matching a wildcard pattern + +| `EXECUTE` | `MBEAN` | Execute operations on named mbean +|=== + +[[grant-permission-statement]] +=== GRANT PERMISSION + +Granting a permission uses the `GRANT PERMISSION` statement: + +[source, bnf] +---- +grant_permission_statement ::= GRANT permissions ON resource TO role_name +permissions ::= ALL [ PERMISSIONS ] | permission [ PERMISSION ] +permission ::= CREATE | ALTER | DROP | SELECT | MODIFY | AUTHORIZE | DESCRIBE | EXECUTE +resource ::= ALL KEYSPACES + | KEYSPACE keyspace_name + | [ TABLE ] table_name + | ALL ROLES + | ROLE role_name + | ALL FUNCTIONS [ IN KEYSPACE keyspace_name ] + | FUNCTION function_name '(' [ cql_type( ',' cql_type )* ] ')' + | ALL MBEANS + | ( MBEAN | MBEANS ) string +---- + +For instance: + +[source,cql] +---- +GRANT SELECT ON ALL KEYSPACES TO data_reader; +---- + +This gives any user with the role `data_reader` permission to execute +`SELECT` statements on any table across all keyspaces: + +[source,cql] +---- +GRANT MODIFY ON KEYSPACE keyspace1 TO data_writer; +---- + +This give any user with the role `data_writer` permission to perform +`UPDATE`, `INSERT`, `UPDATE`, `DELETE` and `TRUNCATE` queries on all +tables in the `keyspace1` keyspace: + +[source,cql] +---- +GRANT DROP ON keyspace1.table1 TO schema_owner; +---- + +This gives any user with the `schema_owner` role permissions to `DROP` +`keyspace1.table1`: + +[source,cql] +---- +GRANT EXECUTE ON FUNCTION keyspace1.user_function( int ) TO report_writer; +---- + +This grants any user with the `report_writer` role permission to execute +`SELECT`, `INSERT` and `UPDATE` queries which use the function +`keyspace1.user_function( int )`: + +[source,cql] +---- +GRANT DESCRIBE ON ALL ROLES TO role_admin; +---- + +This grants any user with the `role_admin` role permission to view any +and all roles in the system with a `LIST ROLES` statement + +==== GRANT ALL + +When the `GRANT ALL` form is used, the appropriate set of permissions is +determined automatically based on the target resource. + +==== Automatic Granting + +When a resource is created, via a `CREATE KEYSPACE`, `CREATE TABLE`, +`CREATE FUNCTION`, `CREATE AGGREGATE` or `CREATE ROLE` statement, the +creator (the role the database user who issues the statement is +identified as), is automatically granted all applicable permissions on +the new resource. + +[[revoke-permission-statement]] +=== REVOKE PERMISSION + +Revoking a permission from a role uses the `REVOKE PERMISSION` +statement: + +[source, bnf] +---- +revoke_permission_statement ::= REVOKE permissions ON resource FROM role_name +---- + +For instance: + +[source,cql] +---- +REVOKE SELECT ON ALL KEYSPACES FROM data_reader; +REVOKE MODIFY ON KEYSPACE keyspace1 FROM data_writer; +REVOKE DROP ON keyspace1.table1 FROM schema_owner; +REVOKE EXECUTE ON FUNCTION keyspace1.user_function( int ) FROM report_writer; +REVOKE DESCRIBE ON ALL ROLES FROM role_admin; +---- + +Because of their function in normal driver operations, certain tables +cannot have their `SELECT` permissions revoked. The +following tables will be available to all authorized users regardless of +their assigned role: + +[source,cql] +---- +* `system_schema.keyspaces` +* `system_schema.columns` +* `system_schema.tables` +* `system.local` +* `system.peers` +---- + +[[list-permissions-statement]] +=== LIST PERMISSIONS + +Listing granted permissions uses the `LIST PERMISSIONS` statement: + +[source, bnf] +---- +list_permissions_statement ::= LIST permissions [ ON resource] [ OF role_name[ NORECURSIVE ] ] +---- + +For instance: + +[source,cql] +---- +LIST ALL PERMISSIONS OF alice; +---- + +Show all permissions granted to `alice`, including those acquired +transitively from any other roles: + +[source,cql] +---- +LIST ALL PERMISSIONS ON keyspace1.table1 OF bob; +---- + +Show all permissions on `keyspace1.table1` granted to `bob`, including +those acquired transitively from any other roles. This also includes any +permissions higher up the resource hierarchy which can be applied to +`keyspace1.table1`. For example, should `bob` have `ALTER` permission on +`keyspace1`, that would be included in the results of this query. Adding +the `NORECURSIVE` switch restricts the results to only those permissions +which were directly granted to `bob` or one of `bob`'s roles: + +[source,cql] +---- +LIST SELECT PERMISSIONS OF carlos; +---- + +Show any permissions granted to `carlos` or any of `carlos`'s roles, +limited to `SELECT` permissions on any resource. diff --git a/doc/source/modules/cassandra/pages/cql/triggers.adoc b/doc/source/modules/cassandra/pages/cql/triggers.adoc new file mode 100644 index 000000000000..9ec675790615 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/triggers.adoc @@ -0,0 +1,50 @@ += Triggers + +Triggers are identified with a name defined by: + +[source,bnf] +---- +include::example$BNF/trigger_name.bnf[] +---- + +[[create-trigger-statement]] +== CREATE TRIGGER + +Creating a new trigger uses the `CREATE TRIGGER` statement: + +[source,bnf] +---- +include::example$BNF/create_trigger_statement.bnf[] +---- + +For instance: + +[source,cql] +---- +include::example$CQL/create_trigger.cql[] +---- + +The actual logic that makes up the trigger can be written in any Java +(JVM) language and exists outside the database. You place the trigger +code in a `lib/triggers` subdirectory of the Cassandra installation +directory, it loads during cluster startup, and exists on every node +that participates in a cluster. The trigger defined on a table fires +before a requested DML statement occurs, which ensures the atomicity of +the transaction. + +[[drop-trigger-statement]] +== DROP TRIGGER + +Dropping a trigger uses the `DROP TRIGGER` statement: + +[source,bnf] +---- +include::example$BNF/drop_trigger_statement.bnf[] +---- + +For instance: + +[source,cql] +---- +include::example$CQL/drop_trigger.cql[] +---- diff --git a/doc/source/modules/cassandra/pages/cql/types.adoc b/doc/source/modules/cassandra/pages/cql/types.adoc new file mode 100644 index 000000000000..d72c2e905835 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/types.adoc @@ -0,0 +1,539 @@ += Data Types + +CQL is a typed language and supports a rich set of data types, including +`native types `, `collection types `, +`user-defined types `, `tuple types ` and `custom +types `: + +[source, bnf] +---- +include::example$BNF/cql_type.bnf[] +---- + +== Native Types + +The native types supported by CQL are: + +[source, bnf] +---- +include::example$BNF/native_type.bnf[] +---- + +The following table gives additional informations on the native data +types, and on which kind of `constants ` each type supports: + +[cols=",,",options="header",] +|=== +| Type | Constants supported | Description + +| `ascii` | `string` | ASCII character string +| `bigint` | `integer` | 64-bit signed long +| `blob` | `blob` | Arbitrary bytes (no validation) +| `boolean` | `boolean` | Either `true` or `false` +| `counter` | `integer` | Counter column (64-bit signed value). See `counters` for details. +| `date` | `integer`, `string` | A date (with no corresponding time value). See `dates` below for details. +| `decimal` | `integer`, `float` | Variable-precision decimal +| `double` | `integer` `float` | 64-bit IEEE-754 floating point +| `duration` | `duration`, | A duration with nanosecond precision. See `durations` below for details. +| `float` | `integer`, `float` | 32-bit IEEE-754 floating point +| `inet` | `string` | An IP address, either IPv4 (4 bytes long) or IPv6 (16 bytes long). Note +that there is no `inet` constant, IP address should be input as strings. +| `int` | `integer` | 32-bit signed int +| `smallint` | `integer` | 16-bit signed int +| `text` | `string` | UTF8 encoded string +| `time` | `integer`, `string` | A time (with no corresponding date value) with nanosecond precision. See +`times` below for details. +| `timestamp` | `integer`, `string` | A timestamp (date and time) with millisecond precision. See `timestamps` +below for details. +| `timeuuid` | `uuid` | Version 1 https://en.wikipedia.org/wiki/Universally_unique_identifier[UUID], +generally used as a “conflict-free” timestamp. Also see `timeuuid-functions`. +| `tinyint` | `integer` | 8-bit signed int +| `uuid` | `uuid` | A https://en.wikipedia.org/wiki/Universally_unique_identifier[UUID] (of any version) +| `varchar` | `string` | UTF8 encoded string +| `varint` | `integer` | Arbitrary-precision integer +|=== + +=== Counters + +The `counter` type is used to define _counter columns_. A counter column +is a column whose value is a 64-bit signed integer and on which 2 +operations are supported: incrementing and decrementing (see the +`UPDATE statement +` for syntax). Note that the value of a counter cannot +be set: a counter does not exist until first incremented/decremented, +and that first increment/decrement is made as if the prior value was 0. + +[[counter-limitations]] +Counters have a number of important limitations: + +* They cannot be used for columns part of the `PRIMARY KEY` of a table. +* A table that contains a counter can only contain counters. In other +words, either all the columns of a table outside the `PRIMARY KEY` have +the `counter` type, or none of them have it. +* Counters do not support `expiration `. +* The deletion of counters is supported, but is only guaranteed to work +the first time you delete a counter. In other words, you should not +re-update a counter that you have deleted (if you do, proper behavior is +not guaranteed). +* Counter updates are, by nature, not +https://en.wikipedia.org/wiki/Idempotence[idemptotent]. An important +consequence is that if a counter update fails unexpectedly (timeout or +loss of connection to the coordinator node), the client has no way to +know if the update has been applied or not. In particular, replaying the +update may or may not lead to an over count. + +[[timestamps]] +== Working with timestamps + +Values of the `timestamp` type are encoded as 64-bit signed integers +representing a number of milliseconds since the standard base time known +as https://en.wikipedia.org/wiki/Unix_time[the epoch]: January 1 1970 at +00:00:00 GMT. + +Timestamps can be input in CQL either using their value as an `integer`, +or using a `string` that represents an +https://en.wikipedia.org/wiki/ISO_8601[ISO 8601] date. For instance, all +of the values below are valid `timestamp` values for Mar 2, 2011, at +04:05:00 AM, GMT: + +* `1299038700000` +* `'2011-02-03 04:05+0000'` +* `'2011-02-03 04:05:00+0000'` +* `'2011-02-03 04:05:00.000+0000'` +* `'2011-02-03T04:05+0000'` +* `'2011-02-03T04:05:00+0000'` +* `'2011-02-03T04:05:00.000+0000'` + +The `+0000` above is an RFC 822 4-digit time zone specification; `+0000` +refers to GMT. US Pacific Standard Time is `-0800`. The time zone may be +omitted if desired (`'2011-02-03 04:05:00'`), and if so, the date will +be interpreted as being in the time zone under which the coordinating +Cassandra node is configured. There are however difficulties inherent in +relying on the time zone configuration being as expected, so it is +recommended that the time zone always be specified for timestamps when +feasible. + +The time of day may also be omitted (`'2011-02-03'` or +`'2011-02-03+0000'`), in which case the time of day will default to +00:00:00 in the specified or default time zone. However, if only the +date part is relevant, consider using the `date ` type. + +[[dates]] +== Working with dates + +Values of the `date` type are encoded as 32-bit unsigned integers +representing a number of days with “the epoch” at the center of the +range (2^31). Epoch is January 1st, 1970 + +As for `timestamp `, a date can be input either as an +`integer` or using a date `string`. In the later case, the format should +be `yyyy-mm-dd` (so `'2011-02-03'` for instance). + +[[times]] +== Working with times + +Values of the `time` type are encoded as 64-bit signed integers +representing the number of nanoseconds since midnight. + +As for `timestamp `, a time can be input either as an +`integer` or using a `string` representing the time. In the later case, +the format should be `hh:mm:ss[.fffffffff]` (where the sub-second +precision is optional and if provided, can be less than the nanosecond). +So for instance, the following are valid inputs for a time: + +* `'08:12:54'` +* `'08:12:54.123'` +* `'08:12:54.123456'` +* `'08:12:54.123456789'` + +[[durations]] +== Working with durations + +Values of the `duration` type are encoded as 3 signed integer of +variable lengths. The first integer represents the number of months, the +second the number of days and the third the number of nanoseconds. This +is due to the fact that the number of days in a month can change, and a +day can have 23 or 25 hours depending on the daylight saving. +Internally, the number of months and days are decoded as 32 bits +integers whereas the number of nanoseconds is decoded as a 64 bits +integer. + +A duration can be input as: + +* `(quantity unit)+` like `12h30m` where the unit can be: +** `y`: years (12 months) +** `mo`: months (1 month) +** `w`: weeks (7 days) +** `d`: days (1 day) +** `h`: hours (3,600,000,000,000 nanoseconds) +** `m`: minutes (60,000,000,000 nanoseconds) +** `s`: seconds (1,000,000,000 nanoseconds) +** `ms`: milliseconds (1,000,000 nanoseconds) +** `us` or `µs` : microseconds (1000 nanoseconds) +** `ns`: nanoseconds (1 nanosecond) +* ISO 8601 format: `P[n]Y[n]M[n]DT[n]H[n]M[n]S or P[n]W` +* ISO 8601 alternative format: `P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]` + +For example: + +[source,cql] +---- +include::example$CQL/insert_duration.cql[] +---- + +[[duration-limitation]] +Duration columns cannot be used in a table's `PRIMARY KEY`. This +limitation is due to the fact that durations cannot be ordered. It is +effectively not possible to know if `1mo` is greater than `29d` without +a date context. + +A `1d` duration is not equals to a `24h` one as the duration type has +been created to be able to support daylight saving. + +== Collections + +CQL supports 3 kind of collections: `maps`, `sets` and `lists`. The +types of those collections is defined by: + +[source,bnf] +---- +include::example$BNF/collection_type.bnf[] +---- + +and their values can be inputd using collection literals: + +[source,bnf] +---- +include::example$BNF/collection_literal.bnf[] +---- + +Note however that neither `bind_marker` nor `NULL` are supported inside +collection literals. + +=== Noteworthy characteristics + +Collections are meant for storing/denormalizing relatively small amount +of data. They work well for things like “the phone numbers of a given +user”, “labels applied to an email”, etc. But when items are expected to +grow unbounded (“all messages sent by a user”, “events registered by a +sensor”...), then collections are not appropriate and a specific table +(with clustering columns) should be used. Concretely, (non-frozen) +collections have the following noteworthy characteristics and +limitations: + +* Individual collections are not indexed internally. Which means that +even to access a single element of a collection, the while collection +has to be read (and reading one is not paged internally). +* While insertion operations on sets and maps never incur a +read-before-write internally, some operations on lists do. Further, some +lists operations are not idempotent by nature (see the section on +`lists ` below for details), making their retry in case of +timeout problematic. It is thus advised to prefer sets over lists when +possible. + +Please note that while some of those limitations may or may not be +removed/improved upon in the future, it is a anti-pattern to use a +(single) collection to store large amounts of data. + +=== Maps + +A `map` is a (sorted) set of key-value pairs, where keys are unique and +the map is sorted by its keys. You can define and insert a map with: + +[source,cql] +---- +include::example$CQL/map.cql[] +---- + +Further, maps support: + +* Updating or inserting one or more elements: ++ +[source,cql] +---- +include::example$CQL/update_map.cql[] +---- +* Removing one or more element (if an element doesn't exist, removing it +is a no-op but no error is thrown): ++ +[source,cql] +---- +include::example$CQL/delete_map.cql[] +---- ++ +Note that for removing multiple elements in a `map`, you remove from it +a `set` of keys. + +Lastly, TTLs are allowed for both `INSERT` and `UPDATE`, but in both +case the TTL set only apply to the newly inserted/updated elements. In +other words: + +[source,cql] +---- +include::example$CQL/update_ttl_map.cql[] +---- + +will only apply the TTL to the `{ 'color' : 'green' }` record, the rest +of the map remaining unaffected. + +=== Sets + +A `set` is a (sorted) collection of unique values. You can define and +insert a map with: + +[source,cql] +---- +include::example$CQL/set.cql[] +---- + +Further, sets support: + +* Adding one or multiple elements (as this is a set, inserting an +already existing element is a no-op): ++ +[source,cql] +---- +include::example$CQL/update_set.cql[] +---- +* Removing one or multiple elements (if an element doesn't exist, +removing it is a no-op but no error is thrown): ++ +[source,cql] +---- +include::example$CQL/delete_set.cql[] +---- + +Lastly, as for `maps `, TTLs are only applied to newly inserted values. + +=== Lists + +[NOTE] +.Note +==== +As mentioned above and further discussed at the end of this section, +lists have limitations and specific performance considerations that you +should take into account before using them. In general, if you can use a +`set ` instead of list, always prefer a set. +==== + +A `list` is a (sorted) collection of non-unique values where +elements are ordered by there position in the list. You can define and +insert a list with: + +[source,cql] +---- +include::example$CQL/list.cql[] +---- + +Further, lists support: + +* Appending and prepending values to a list: ++ +[source,cql] +---- +include::example$CQL/update_list.cql[] +---- + +[WARNING] +.Warning +==== +The append and prepend operations are not idempotent by nature. So in +particular, if one of these operation timeout, then retrying the +operation is not safe and it may (or may not) lead to +appending/prepending the value twice. +==== + +* Setting the value at a particular position in a list that has a pre-existing element for that position. An error +will be thrown if the list does not have the position.: ++ +[source,cql] +---- +include::example$CQL/update_particular_list_element.cql[] +---- +* Removing an element by its position in the list that has a pre-existing element for that position. An error +will be thrown if the list does not have the position. Further, as the operation removes an +element from the list, the list size will decrease by one element, shifting +the position of all the following elements one forward: ++ +[source,cql] +---- +include::example$CQL/delete_element_list.cql[] +---- + +* Deleting _all_ the occurrences of particular values in the list (if a +particular element doesn't occur at all in the list, it is simply +ignored and no error is thrown): ++ +[source,cql] +---- +include::example$CQL/delete_all_elements_list.cql[] +---- + +[WARNING] +.Warning +==== +Setting and removing an element by position and removing occurences of +particular values incur an internal _read-before-write_. These operations will +run slowly and use more resources than usual updates (with the +exclusion of conditional write that have their own cost). +==== + +Lastly, as for `maps `, TTLs only apply to newly inserted values. + +[[udts]] +== User-Defined Types (UDTs) + +CQL support the definition of user-defined types (UDTs). Such a +type can be created, modified and removed using the +`create_type_statement`, `alter_type_statement` and +`drop_type_statement` described below. But once created, a UDT is simply +referred to by its name: + +[source, bnf] +---- +include::example$BNF/udt.bnf[] +---- + +=== Creating a UDT + +Creating a new user-defined type is done using a `CREATE TYPE` statement +defined by: + +[source, bnf] +---- +include::example$BNF/create_type.bnf[] +---- + +A UDT has a name (used to declared columns of that type) and is a set of +named and typed fields. Fields name can be any type, including +collections or other UDT. For instance: + +[source,cql] +---- +include::example$CQL/udt.cql[] +---- + +Things to keep in mind about UDTs: + +* Attempting to create an already existing type will result in an error +unless the `IF NOT EXISTS` option is used. If it is used, the statement +will be a no-op if the type already exists. +* A type is intrinsically bound to the keyspace in which it is created, +and can only be used in that keyspace. At creation, if the type name is +prefixed by a keyspace name, it is created in that keyspace. Otherwise, +it is created in the current keyspace. +* As of Cassandra , UDT have to be frozen in most cases, hence the +`frozen
` in the table definition above. Please see the section +on `frozen ` for more details. + +=== UDT literals + +Once a used-defined type has been created, value can be input using a +UDT literal: + +[source,bnf] +---- +include::example$BNF/udt_literal.bnf[] +---- + +In other words, a UDT literal is like a `map ` literal but its +keys are the names of the fields of the type. For instance, one could +insert into the table define in the previous section using: + +[source,cql] +---- +include::example$CQL/insert_udt.cql[] +---- + +To be valid, a UDT literal can only include fields defined by the +type it is a literal of, but it can omit some fields (these will be set to `NULL`). + +=== Altering a UDT + +An existing user-defined type can be modified using an `ALTER TYPE` +statement: + +[source,bnf] +---- +include::example$BNF/alter_udt_statement.bnf[] +---- + +You can: + +* Add a new field to the type (`ALTER TYPE address ADD country text`). +That new field will be `NULL` for any values of the type created before +the addition. +* Rename the fields of the type. + +[source,cql] +---- +include::example$CQL/rename_udt_field.cql[] +---- + +=== Dropping a UDT + +You can drop an existing user-defined type using a `DROP TYPE` +statement: + +[source,bnf] +---- +include::example$BNF/drop_udt_statement.bnf[] +---- + +Dropping a type results in the immediate, irreversible removal of that +type. However, attempting to drop a type that is still in use by another +type, table or function will result in an error. + +If the type dropped does not exist, an error will be returned unless +`IF EXISTS` is used, in which case the operation is a no-op. + +== Tuples + +CQL also support tuples and tuple types (where the elements can be of +different types). Functionally, tuples can be though as anonymous UDT +with anonymous fields. Tuple types and tuple literals are defined by: + +[source,bnf] +---- +include::example$BNF/tuple.bnf[] +---- + +and can be created: + +[source,cql] +---- +include::example$CQL/tuple.cql[] +---- + +Unlike other composed types, like collections and UDTs, a tuple is always +`frozen ` (without the need of the `frozen` keyword) +and it is not possible to update only some elements of a tuple (without +updating the whole tuple). Also, a tuple literal should always have the +same number of value than declared in the type it is a tuple of (some of +those values can be null but they need to be explicitly declared as so). + +== Custom Types + +[NOTE] +.Note +==== +Custom types exists mostly for backward compatiliby purposes and their +usage is discouraged. Their usage is complex, not user friendly and the +other provided types, particularly `user-defined types `, should +almost always be enough. +==== + +A custom type is defined by: + +[source,bnf] +---- +include::example$BNF/custom_type.bnf[] +---- + +A custom type is a `string` that contains the name of Java class that +extends the server side `AbstractType` class and that can be loaded by +Cassandra (it should thus be in the `CLASSPATH` of every node running +Cassandra). That class will define what values are valid for the type +and how the time sorts when used for a clustering column. For any other +purpose, a value of a custom type is the same than that of a `blob`, and +can in particular be input using the `blob` literal syntax. diff --git a/doc/source/data_modeling/data_modeling_conceptual.rst b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_conceptual.adoc similarity index 52% rename from doc/source/data_modeling/data_modeling_conceptual.rst rename to doc/source/modules/cassandra/pages/data_modeling/data_modeling_conceptual.adoc index 8749b799ea31..c1e1027f6dc2 100644 --- a/doc/source/data_modeling/data_modeling_conceptual.rst +++ b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_conceptual.adoc @@ -1,33 +1,14 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. conceptual_data_modeling - -Conceptual Data Modeling -^^^^^^^^^^^^^^^^^^^^^^^^ += Conceptual Data Modeling First, let’s create a simple domain model that is easy to understand in -the relational world, and then see how you might map it from a relational -to a distributed hashtable model in Cassandra. +the relational world, and then see how you might map it from a +relational to a distributed hashtable model in Cassandra. -Let's use an example that is complex enough -to show the various data structures and design patterns, but not -something that will bog you down with details. Also, a domain that’s -familiar to everyone will allow you to concentrate on how to work with -Cassandra, not on what the application domain is all about. +Let's use an example that is complex enough to show the various data +structures and design patterns, but not something that will bog you down +with details. Also, a domain that’s familiar to everyone will allow you +to concentrate on how to work with Cassandra, not on what the +application domain is all about. For example, let's use a domain that is easily understood and that everyone can relate to: making hotel reservations. @@ -49,7 +30,7 @@ underlined. Relationships between entities are represented as diamonds, and the connectors between the relationship and each entity show the multiplicity of the connection. -.. image:: images/data_modeling_hotel_erd.png +image::data_modeling_hotel_erd.png[image] Obviously, in the real world, there would be many more considerations and much more complexity. For example, hotel rates are notoriously @@ -58,6 +39,6 @@ you’re defining something complex enough to be interesting and touch on the important points, but simple enough to maintain the focus on learning Cassandra. -*Material adapted from Cassandra, The Definitive Guide. Published by -O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. -All rights reserved. Used with permission.* \ No newline at end of file +_Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All +rights reserved. Used with permission._ diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_logical.adoc b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_logical.adoc new file mode 100644 index 000000000000..bcbfa781b09d --- /dev/null +++ b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_logical.adoc @@ -0,0 +1,195 @@ += Logical Data Modeling + +Now that you have defined your queries, you’re ready to begin designing +Cassandra tables. First, create a logical model containing a table for +each query, capturing entities and relationships from the conceptual +model. + +To name each table, you’ll identify the primary entity type for which +you are querying and use that to start the entity name. If you are +querying by attributes of other related entities, append those to the +table name, separated with `_by_`. For example, `hotels_by_poi`. + +Next, you identify the primary key for the table, adding partition key +columns based on the required query attributes, and clustering columns +in order to guarantee uniqueness and support desired sort ordering. + +The design of the primary key is extremely important, as it will +determine how much data will be stored in each partition and how that +data is organized on disk, which in turn will affect how quickly +Cassandra processes reads. + +Complete each table by adding any additional attributes identified by +the query. If any of these additional attributes are the same for every +instance of the partition key, mark the column as static. + +Now that was a pretty quick description of a fairly involved process, so +it will be worthwhile to work through a detailed example. First, let’s +introduce a notation that you can use to represent logical models. + +Several individuals within the Cassandra community have proposed +notations for capturing data models in diagrammatic form. This document +uses a notation popularized by Artem Chebotko which provides a simple, +informative way to visualize the relationships between queries and +tables in your designs. This figure shows the Chebotko notation for a +logical data model. + +image::data_modeling_chebotko_logical.png[image] + +Each table is shown with its title and a list of columns. Primary key +columns are identified via symbols such as *K* for partition key columns +and **C**↑ or **C**↓ to represent clustering columns. Lines are shown +entering tables or between tables to indicate the queries that each +table is designed to support. + +== Hotel Logical Data Model + +The figure below shows a Chebotko logical data model for the queries +involving hotels, points of interest, rooms, and amenities. One thing +you'll notice immediately is that the Cassandra design doesn’t include +dedicated tables for rooms or amenities, as you had in the relational +design. This is because the workflow didn’t identify any queries +requiring this direct access. + +image::data_modeling_hotel_logical.png[image] + +Let’s explore the details of each of these tables. + +The first query Q1 is to find hotels near a point of interest, so you’ll +call this table `hotels_by_poi`. Searching by a named point of interest +is a clue that the point of interest should be a part of the primary +key. Let’s reference the point of interest by name, because according to +the workflow that is how users will start their search. + +You’ll note that you certainly could have more than one hotel near a +given point of interest, so you’ll need another component in the primary +key in order to make sure you have a unique partition for each hotel. So +you add the hotel key as a clustering column. + +An important consideration in designing your table’s primary key is +making sure that it defines a unique data element. Otherwise you run the +risk of accidentally overwriting data. + +Now for the second query (Q2), you’ll need a table to get information +about a specific hotel. One approach would have been to put all of the +attributes of a hotel in the `hotels_by_poi` table, but you added only +those attributes that were required by the application workflow. + +From the workflow diagram, you know that the `hotels_by_poi` table is +used to display a list of hotels with basic information on each hotel, +and the application knows the unique identifiers of the hotels returned. +When the user selects a hotel to view details, you can then use Q2, +which is used to obtain details about the hotel. Because you already +have the `hotel_id` from Q1, you use that as a reference to the hotel +you’re looking for. Therefore the second table is just called `hotels`. + +Another option would have been to store a set of `poi_names` in the +hotels table. This is an equally valid approach. You’ll learn through +experience which approach is best for your application. + +Q3 is just a reverse of Q1—looking for points of interest near a hotel, +rather than hotels near a point of interest. This time, however, you +need to access the details of each point of interest, as represented by +the `pois_by_hotel` table. As previously, you add the point of interest +name as a clustering key to guarantee uniqueness. + +At this point, let’s now consider how to support query Q4 to help the +user find available rooms at a selected hotel for the nights they are +interested in staying. Note that this query involves both a start date +and an end date. Because you’re querying over a range instead of a +single date, you know that you’ll need to use the date as a clustering +key. Use the `hotel_id` as a primary key to group room data for each +hotel on a single partition, which should help searches be super fast. +Let’s call this the `available_rooms_by_hotel_date` table. + +To support searching over a range, use `clustering columns +` to store attributes that you need to access in a +range query. Remember that the order of the clustering columns is +important. + +The design of the `available_rooms_by_hotel_date` table is an instance +of the *wide partition* pattern. This pattern is sometimes called the +*wide row* pattern when discussing databases that support similar +models, but wide partition is a more accurate description from a +Cassandra perspective. The essence of the pattern is to group multiple +related rows in a partition in order to support fast access to multiple +rows within the partition in a single query. + +In order to round out the shopping portion of the data model, add the +`amenities_by_room` table to support Q5. This will allow users to view +the amenities of one of the rooms that is available for the desired stay +dates. + +== Reservation Logical Data Model + +Now let's switch gears to look at the reservation queries. The figure +shows a logical data model for reservations. You’ll notice that these +tables represent a denormalized design; the same data appears in +multiple tables, with differing keys. + +image::data_modeling_reservation_logical.png[image] + +In order to satisfy Q6, the `reservations_by_guest` table can be used to +look up the reservation by guest name. You could envision query Q7 being +used on behalf of a guest on a self-serve website or a call center agent +trying to assist the guest. Because the guest name might not be unique, +you include the guest ID here as a clustering column as well. + +Q8 and Q9 in particular help to remind you to create queries that +support various stakeholders of the application, not just customers but +staff as well, and perhaps even the analytics team, suppliers, and so +on. + +The hotel staff might wish to see a record of upcoming reservations by +date in order to get insight into how the hotel is performing, such as +what dates the hotel is sold out or undersold. Q8 supports the retrieval +of reservations for a given hotel by date. + +Finally, you create a `guests` table. This provides a single location +that used to store guest information. In this case, you specify a +separate unique identifier for guest records, as it is not uncommon for +guests to have the same name. In many organizations, a customer database +such as the `guests` table would be part of a separate customer +management application, which is why other guest access patterns were +omitted from the example. + +== Patterns and Anti-Patterns + +As with other types of software design, there are some well-known +patterns and anti-patterns for data modeling in Cassandra. You’ve +already used one of the most common patterns in this hotel model—the +wide partition pattern. + +The *time series* pattern is an extension of the wide partition pattern. +In this pattern, a series of measurements at specific time intervals are +stored in a wide partition, where the measurement time is used as part +of the partition key. This pattern is frequently used in domains +including business analysis, sensor data management, and scientific +experiments. + +The time series pattern is also useful for data other than measurements. +Consider the example of a banking application. You could store each +customer’s balance in a row, but that might lead to a lot of read and +write contention as various customers check their balance or make +transactions. You’d probably be tempted to wrap a transaction around +writes just to protect the balance from being updated in error. In +contrast, a time series–style design would store each transaction as a +timestamped row and leave the work of calculating the current balance to +the application. + +One design trap that many new users fall into is attempting to use +Cassandra as a queue. Each item in the queue is stored with a timestamp +in a wide partition. Items are appended to the end of the queue and read +from the front, being deleted after they are read. This is a design that +seems attractive, especially given its apparent similarity to the time +series pattern. The problem with this approach is that the deleted items +are now `tombstones ` that Cassandra must scan past in +order to read from the front of the queue. Over time, a growing number +of tombstones begins to degrade read performance. + +The queue anti-pattern serves as a reminder that any design that relies +on the deletion of data is potentially a poorly performing design. + +_Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All +rights reserved. Used with permission._ diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_physical.adoc b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_physical.adoc new file mode 100644 index 000000000000..093406701454 --- /dev/null +++ b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_physical.adoc @@ -0,0 +1,96 @@ += Physical Data Modeling + +Once you have a logical data model defined, creating the physical model +is a relatively simple process. + +You walk through each of the logical model tables, assigning types to +each item. You can use any valid `CQL data type `, including +the basic types, collections, and user-defined types. You may identify +additional user-defined types that can be created to simplify your +design. + +After you’ve assigned data types, you analyze the model by performing +size calculations and testing out how the model works. You may make some +adjustments based on your findings. Once again let's cover the data +modeling process in more detail by working through an example. + +Before getting started, let’s look at a few additions to the Chebotko +notation for physical data models. To draw physical models, you need to +be able to add the typing information for each column. This figure shows +the addition of a type for each column in a sample table. + +image::data_modeling_chebotko_physical.png[image] + +The figure includes a designation of the keyspace containing each table +and visual cues for columns represented using collections and +user-defined types. Note the designation of static columns and secondary +index columns. There is no restriction on assigning these as part of a +logical model, but they are typically more of a physical data modeling +concern. + +== Hotel Physical Data Model + +Now let’s get to work on the physical model. First, you need keyspaces +to contain the tables. To keep the design relatively simple, create a +`hotel` keyspace to contain tables for hotel and availability data, and +a `reservation` keyspace to contain tables for reservation and guest +data. In a real system, you might divide the tables across even more +keyspaces in order to separate concerns. + +For the `hotels` table, use Cassandra’s `text` type to represent the +hotel’s `id`. For the address, create an `address` user defined type. +Use the `text` type to represent the phone number, as there is +considerable variance in the formatting of numbers between countries. + +While it would make sense to use the `uuid` type for attributes such as +the `hotel_id`, this document uses mostly `text` attributes as +identifiers, to keep the samples simple and readable. For example, a +common convention in the hospitality industry is to reference properties +by short codes like "AZ123" or "NY229". This example uses these values +for `hotel_ids`, while acknowledging they are not necessarily globally +unique. + +You’ll find that it’s often helpful to use unique IDs to uniquely +reference elements, and to use these `uuids` as references in tables +representing other entities. This helps to minimize coupling between +different entity types. This may prove especially effective if you are +using a microservice architectural style for your application, in which +there are separate services responsible for each entity type. + +As you work to create physical representations of various tables in the +logical hotel data model, you use the same approach. The resulting +design is shown in this figure: + +image::data_modeling_hotel_physical.png[image] + +Note that the `address` type is also included in the design. It is +designated with an asterisk to denote that it is a user-defined type, +and has no primary key columns identified. This type is used in the +`hotels` and `hotels_by_poi` tables. + +User-defined types are frequently used to help reduce duplication of +non-primary key columns, as was done with the `address` user-defined +type. This can reduce complexity in the design. + +Remember that the scope of a UDT is the keyspace in which it is defined. +To use `address` in the `reservation` keyspace defined below design, +you’ll have to declare it again. This is just one of the many trade-offs +you have to make in data model design. + +== Reservation Physical Data Model + +Now, let’s examine reservation tables in the design. Remember that the +logical model contained three denormalized tables to support queries for +reservations by confirmation number, guest, and hotel and date. For the +first iteration of your physical data model design, assume you're going +to manage this denormalization manually. Note that this design could be +revised to use Cassandra’s (experimental) materialized view feature. + +image::data_modeling_reservation_physical.png[image] + +Note that the `address` type is reproduced in this keyspace and +`guest_id` is modeled as a `uuid` type in all of the tables. + +_Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All +rights reserved. Used with permission._ diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_queries.adoc b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_queries.adoc new file mode 100644 index 000000000000..21f980181223 --- /dev/null +++ b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_queries.adoc @@ -0,0 +1,60 @@ += Defining Application Queries + +Let’s try the query-first approach to start designing the data model for +a hotel application. The user interface design for the application is +often a great artifact to use to begin identifying queries. Let’s assume +that you’ve talked with the project stakeholders and your UX designers +have produced user interface designs or wireframes for the key use +cases. You’ll likely have a list of shopping queries like the following: + +* Q1. Find hotels near a given point of interest. +* Q2. Find information about a given hotel, such as its name and +location. +* Q3. Find points of interest near a given hotel. +* Q4. Find an available room in a given date range. +* Q5. Find the rate and amenities for a room. + +It is often helpful to be able to refer to queries by a shorthand number +rather that explaining them in full. The queries listed here are +numbered Q1, Q2, and so on, which is how they are referenced in diagrams +throughout the example. + +Now if the application is to be a success, you’ll certainly want +customers to be able to book reservations at hotels. This includes steps +such as selecting an available room and entering their guest +information. So clearly you will also need some queries that address the +reservation and guest entities from the conceptual data model. Even +here, however, you’ll want to think not only from the customer +perspective in terms of how the data is written, but also in terms of +how the data will be queried by downstream use cases. + +You natural tendency as might be to focus first on designing the tables +to store reservation and guest records, and only then start thinking +about the queries that would access them. You may have felt a similar +tension already when discussing the shopping queries before, thinking +“but where did the hotel and point of interest data come from?” Don’t +worry, you will see soon enough. Here are some queries that describe how +users will access reservations: + +* Q6. Lookup a reservation by confirmation number. +* Q7. Lookup a reservation by hotel, date, and guest name. +* Q8. Lookup all reservations by guest name. +* Q9. View guest details. + +All of the queries are shown in the context of the workflow of the +application in the figure below. Each box on the diagram represents a +step in the application workflow, with arrows indicating the flows +between steps and the associated query. If you’ve modeled the +application well, each step of the workflow accomplishes a task that +“unlocks” subsequent steps. For example, the “View hotels near POI” task +helps the application learn about several hotels, including their unique +keys. The key for a selected hotel may be used as part of Q2, in order +to obtain detailed description of the hotel. The act of booking a room +creates a reservation record that may be accessed by the guest and hotel +staff at a later time through various additional queries. + +image::data_modeling_hotel_queries.png[image] + +_Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All +rights reserved. Used with permission._ diff --git a/doc/source/data_modeling/data_modeling_rdbms.rst b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_rdbms.adoc similarity index 74% rename from doc/source/data_modeling/data_modeling_rdbms.rst rename to doc/source/modules/cassandra/pages/data_modeling/data_modeling_rdbms.adoc index 7d67d69fcc04..b478df14a1c4 100644 --- a/doc/source/data_modeling/data_modeling_rdbms.rst +++ b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_rdbms.adoc @@ -1,46 +1,25 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -RDBMS Design -============ += RDBMS Design When you set out to build a new data-driven application that will use a relational database, you might start by modeling the domain as a set of properly normalized tables and use foreign keys to reference related data in other tables. -The figure below shows how you might represent the data storage for your application -using a relational database model. The relational model includes a -couple of “join” tables in order to realize the many-to-many +The figure below shows how you might represent the data storage for your +application using a relational database model. The relational model +includes a couple of “join” tables in order to realize the many-to-many relationships from the conceptual model of hotels-to-points of interest, rooms-to-amenities, rooms-to-availability, and guests-to-rooms (via a reservation). -.. image:: images/data_modeling_hotel_relational.png +image::data_modeling_hotel_relational.png[image] -.. design_differences_between_rdbms_and_cassandra - -Design Differences Between RDBMS and Cassandra -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +== Design Differences Between RDBMS and Cassandra Let’s take a minute to highlight some of the key differences in doing ata modeling for Cassandra versus a relational database. -No joins -~~~~~~~~ +=== No joins You cannot perform joins in Cassandra. If you have designed a data model and find that you need something like a join, you’ll have to either do @@ -49,8 +28,7 @@ represents the join results for you. This latter option is preferred in Cassandra data modeling. Performing joins on the client should be a very rare case; you really want to duplicate (denormalize) the data instead. -No referential integrity -~~~~~~~~~~~~~~~~~~~~~~~~ +=== No referential integrity Although Cassandra supports features such as lightweight transactions and batches, Cassandra itself has no concept of referential integrity @@ -60,8 +38,7 @@ But Cassandra does not enforce this. It is still a common design requirement to store IDs related to other entities in your tables, but operations such as cascading deletes are not available. -Denormalization -~~~~~~~~~~~~~~~ +=== Denormalization In relational database design, you are often taught the importance of normalization. This is not an advantage when working with Cassandra @@ -93,16 +70,14 @@ perfectly normal. It’s not required if your data model is simple. But don’t be afraid of it. Historically, denormalization in Cassandra has required designing and -managing multiple tables using techniques described in this documentation. -Beginning with the 3.0 release, Cassandra provides a feature known -as :ref:`materialized views ` -which allows you to create multiple denormalized -views of data based on a base table design. Cassandra manages -materialized views on the server, including the work of keeping the -views in sync with the table. +managing multiple tables using techniques described in this +documentation. Beginning with the 3.0 release, Cassandra provides a +feature known as `materialized views ` which allows +you to create multiple denormalized views of data based on a base table +design. Cassandra manages materialized views on the server, including +the work of keeping the views in sync with the table. -Query-first design -~~~~~~~~~~~~~~~~~~ +=== Query-first design Relational modeling, in simple terms, means that you start from the conceptual domain and then represent the nouns in the domain in tables. @@ -134,8 +109,7 @@ over time, and then you’ll have to work to update your data set. But this is no different from defining the wrong tables, or needing additional tables, in an RDBMS. -Designing for optimal storage -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +=== Designing for optimal storage In a relational database, it is frequently transparent to the user how tables are stored on disk, and it is rare to hear of recommendations @@ -150,11 +124,10 @@ in order to satisfy a given query. Because the partition is a unit of storage that does not get divided across nodes, a query that searches a single partition will typically yield the best performance. -Sorting is a design decision -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +=== Sorting is a design decision In an RDBMS, you can easily change the order in which records are -returned to you by using ``ORDER BY`` in your query. The default sort +returned to you by using `ORDER BY` in your query. The default sort order is not configurable; by default, records are returned in the order in which they are written. If you want to change the order, you just modify your query, and you can sort by any list of columns. @@ -162,10 +135,10 @@ modify your query, and you can sort by any list of columns. In Cassandra, however, sorting is treated differently; it is a design decision. The sort order available on queries is fixed, and is determined entirely by the selection of clustering columns you supply in -the ``CREATE TABLE`` command. The CQL ``SELECT`` statement does support -``ORDER BY`` semantics, but only in the order specified by the -clustering columns. +the `CREATE TABLE` command. The CQL `SELECT` statement does support +`ORDER BY` semantics, but only in the order specified by the clustering +columns. -*Material adapted from Cassandra, The Definitive Guide. Published by -O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. -All rights reserved. Used with permission.* \ No newline at end of file +_Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All +rights reserved. Used with permission._ diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_refining.adoc b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_refining.adoc new file mode 100644 index 000000000000..09f16da094b6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_refining.adoc @@ -0,0 +1,201 @@ += Evaluating and Refining Data Models + +Once you’ve created a physical model, there are some steps you’ll want +to take to evaluate and refine table designs to help ensure optimal +performance. + +== Calculating Partition Size + +The first thing that you want to look for is whether your tables will +have partitions that will be overly large, or to put it another way, too +wide. Partition size is measured by the number of cells (values) that +are stored in the partition. Cassandra’s hard limit is 2 billion cells +per partition, but you’ll likely run into performance issues before +reaching that limit. + +In order to calculate the size of partitions, use the following formula: + +[latexmath] +++++ +\[N_v = N_r (N_c - N_{pk} - N_s) + N_s\] +++++ + +The number of values (or cells) in the partition (N~v~) is equal to the +number of static columns (N~s~) plus the product of the number of rows +(N~r~) and the number of of values per row. The number of values per row +is defined as the number of columns (N~c~) minus the number of primary +key columns (N~pk~) and static columns (N~s~). + +The number of columns tends to be relatively static, although it is +possible to alter tables at runtime. For this reason, a primary driver +of partition size is the number of rows in the partition. This is a key +factor that you must consider in determining whether a partition has the +potential to get too large. Two billion values sounds like a lot, but in +a sensor system where tens or hundreds of values are measured every +millisecond, the number of values starts to add up pretty fast. + +Let’s take a look at one of the tables to analyze the partition size. +Because it has a wide partition design with one partition per hotel, +look at the `available_rooms_by_hotel_date` table. The table has four +columns total (N~c~ = 4), including three primary key columns (N~pk~ = +3) and no static columns (N~s~ = 0). Plugging these values into the +formula, the result is: + +[latexmath] +++++ +\[N_v = N_r (4 - 3 - 0) + 0 = 1N_r\] +++++ + +Therefore the number of values for this table is equal to the number of +rows. You still need to determine a number of rows. To do this, make +estimates based on the application design. The table is storing a record +for each room, in each of hotel, for every night. Let's assume the +system will be used to store two years of inventory at a time, and there +are 5,000 hotels in the system, with an average of 100 rooms in each +hotel. + +Since there is a partition for each hotel, the estimated number of rows +per partition is as follows: + +[latexmath] +++++ +\[N_r = 100 rooms/hotel \times 730 days = 73,000 rows\] +++++ + +This relatively small number of rows per partition is not going to get +you in too much trouble, but if you start storing more dates of +inventory, or don’t manage the size of the inventory well using TTL, you +could start having issues. You still might want to look at breaking up +this large partition, which you'll see how to do shortly. + +When performing sizing calculations, it is tempting to assume the +nominal or average case for variables such as the number of rows. +Consider calculating the worst case as well, as these sorts of +predictions have a way of coming true in successful systems. + +== Calculating Size on Disk + +In addition to calculating the size of a partition, it is also an +excellent idea to estimate the amount of disk space that will be +required for each table you plan to store in the cluster. In order to +determine the size, use the following formula to determine the size S~t~ +of a partition: + +[latexmath] +++++ +\[S_t = \displaystyle\sum_i sizeOf\big (c_{k_i}\big) + \displaystyle\sum_j sizeOf\big(c_{s_j}\big) + N_r\times \bigg(\displaystyle\sum_k sizeOf\big(c_{r_k}\big) + \displaystyle\sum_l sizeOf\big(c_{c_l}\big)\bigg) +\] +++++ + +[latexmath] +++++ +\[N_v\times sizeOf\big(t_{avg}\big)\] +++++ + +This is a bit more complex than the previous formula, but let's break it +down a bit at a time. Let’s take a look at the notation first: + +* In this formula, c~k~ refers to partition key columns, c~s~ to static +columns, c~r~ to regular columns, and c~c~ to clustering columns. +* The term t~avg~ refers to the average number of bytes of metadata +stored per cell, such as timestamps. It is typical to use an estimate of +8 bytes for this value. +* You'll recognize the number of rows N~r~ and number of values N~v~ +from previous calculations. +* The *sizeOf()* function refers to the size in bytes of the CQL data +type of each referenced column. + +The first term asks you to sum the size of the partition key columns. +For this example, the `available_rooms_by_hotel_date` table has a single +partition key column, the `hotel_id`, which is of type `text`. Assuming +that hotel identifiers are simple 5-character codes, you have a 5-byte +value, so the sum of the partition key column sizes is 5 bytes. + +The second term asks you to sum the size of the static columns. This +table has no static columns, so the size is 0 bytes. + +The third term is the most involved, and for good reason—it is +calculating the size of the cells in the partition. Sum the size of the +clustering columns and regular columns. The two clustering columns are +the `date`, which is 4 bytes, and the `room_number`, which is a 2-byte +short integer, giving a sum of 6 bytes. There is only a single regular +column, the boolean `is_available`, which is 1 byte in size. Summing the +regular column size (1 byte) plus the clustering column size (6 bytes) +gives a total of 7 bytes. To finish up the term, multiply this value by +the number of rows (73,000), giving a result of 511,000 bytes (0.51 MB). + +The fourth term is simply counting the metadata that that Cassandra +stores for each cell. In the storage format used by Cassandra 3.0 and +later, the amount of metadata for a given cell varies based on the type +of data being stored, and whether or not custom timestamp or TTL values +are specified for individual cells. For this table, reuse the number of +values from the previous calculation (73,000) and multiply by 8, which +gives 0.58 MB. + +Adding these terms together, you get a final estimate: + +[latexmath] +++++ +\[Partition size = 16 bytes + 0 bytes + 0.51 MB + 0.58 MB = 1.1 MB\] +++++ + +This formula is an approximation of the actual size of a partition on +disk, but is accurate enough to be quite useful. Remembering that the +partition must be able to fit on a single node, it looks like the table +design will not put a lot of strain on disk storage. + +Cassandra’s storage engine was re-implemented for the 3.0 release, +including a new format for SSTable files. The previous format stored a +separate copy of the clustering columns as part of the record for each +cell. The newer format eliminates this duplication, which reduces the +size of stored data and simplifies the formula for computing that size. + +Keep in mind also that this estimate only counts a single replica of +data. You will need to multiply the value obtained here by the number of +partitions and the number of replicas specified by the keyspace’s +replication strategy in order to determine the total required total +capacity for each table. This will come in handy when you plan your +cluster. + +== Breaking Up Large Partitions + +As discussed previously, the goal is to design tables that can provide +the data you need with queries that touch a single partition, or failing +that, the minimum possible number of partitions. However, as shown in +the examples, it is quite possible to design wide partition-style tables +that approach Cassandra’s built-in limits. Performing sizing analysis on +tables may reveal partitions that are potentially too large, either in +number of values, size on disk, or both. + +The technique for splitting a large partition is straightforward: add an +additional column to the partition key. In most cases, moving one of the +existing columns into the partition key will be sufficient. Another +option is to introduce an additional column to the table to act as a +sharding key, but this requires additional application logic. + +Continuing to examine the available rooms example, if you add the `date` +column to the partition key for the `available_rooms_by_hotel_date` +table, each partition would then represent the availability of rooms at +a specific hotel on a specific date. This will certainly yield +partitions that are significantly smaller, perhaps too small, as the +data for consecutive days will likely be on separate nodes. + +Another technique known as *bucketing* is often used to break the data +into moderate-size partitions. For example, you could bucketize the +`available_rooms_by_hotel_date` table by adding a `month` column to the +partition key, perhaps represented as an integer. The comparision with +the original design is shown in the figure below. While the `month` +column is partially duplicative of the `date`, it provides a nice way of +grouping related data in a partition that will not get too large. + +image::data_modeling_hotel_bucketing.png[image] + +If you really felt strongly about preserving a wide partition design, +you could instead add the `room_id` to the partition key, so that each +partition would represent the availability of the room across all dates. +Because there was no query identified that involves searching +availability of a specific room, the first or second design approach is +most suitable to the application needs. + +_Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All +rights reserved. Used with permission._ diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_schema.adoc b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_schema.adoc new file mode 100644 index 000000000000..7b0cf5cd3550 --- /dev/null +++ b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_schema.adoc @@ -0,0 +1,130 @@ += Defining Database Schema + +Once you have finished evaluating and refining the physical model, +you’re ready to implement the schema in CQL. Here is the schema for the +`hotel` keyspace, using CQL’s comment feature to document the query +pattern supported by each table: + +[source,cql] +---- +CREATE KEYSPACE hotel WITH replication = + {‘class’: ‘SimpleStrategy’, ‘replication_factor’ : 3}; + +CREATE TYPE hotel.address ( + street text, + city text, + state_or_province text, + postal_code text, + country text ); + +CREATE TABLE hotel.hotels_by_poi ( + poi_name text, + hotel_id text, + name text, + phone text, + address frozen
, + PRIMARY KEY ((poi_name), hotel_id) ) + WITH comment = ‘Q1. Find hotels near given poi’ + AND CLUSTERING ORDER BY (hotel_id ASC) ; + +CREATE TABLE hotel.hotels ( + id text PRIMARY KEY, + name text, + phone text, + address frozen
, + pois set ) + WITH comment = ‘Q2. Find information about a hotel’; + +CREATE TABLE hotel.pois_by_hotel ( + poi_name text, + hotel_id text, + description text, + PRIMARY KEY ((hotel_id), poi_name) ) + WITH comment = Q3. Find pois near a hotel’; + +CREATE TABLE hotel.available_rooms_by_hotel_date ( + hotel_id text, + date date, + room_number smallint, + is_available boolean, + PRIMARY KEY ((hotel_id), date, room_number) ) + WITH comment = ‘Q4. Find available rooms by hotel date’; + +CREATE TABLE hotel.amenities_by_room ( + hotel_id text, + room_number smallint, + amenity_name text, + description text, + PRIMARY KEY ((hotel_id, room_number), amenity_name) ) + WITH comment = ‘Q5. Find amenities for a room’; +---- + +Notice that the elements of the partition key are surrounded with +parentheses, even though the partition key consists of the single column +`poi_name`. This is a best practice that makes the selection of +partition key more explicit to others reading your CQL. + +Similarly, here is the schema for the `reservation` keyspace: + +[source,cql] +---- +CREATE KEYSPACE reservation WITH replication = {‘class’: + ‘SimpleStrategy’, ‘replication_factor’ : 3}; + +CREATE TYPE reservation.address ( + street text, + city text, + state_or_province text, + postal_code text, + country text ); + +CREATE TABLE reservation.reservations_by_confirmation ( + confirm_number text, + hotel_id text, + start_date date, + end_date date, + room_number smallint, + guest_id uuid, + PRIMARY KEY (confirm_number) ) + WITH comment = ‘Q6. Find reservations by confirmation number’; + +CREATE TABLE reservation.reservations_by_hotel_date ( + hotel_id text, + start_date date, + end_date date, + room_number smallint, + confirm_number text, + guest_id uuid, + PRIMARY KEY ((hotel_id, start_date), room_number) ) + WITH comment = ‘Q7. Find reservations by hotel and date’; + +CREATE TABLE reservation.reservations_by_guest ( + guest_last_name text, + hotel_id text, + start_date date, + end_date date, + room_number smallint, + confirm_number text, + guest_id uuid, + PRIMARY KEY ((guest_last_name), hotel_id) ) + WITH comment = ‘Q8. Find reservations by guest name’; + +CREATE TABLE reservation.guests ( + guest_id uuid PRIMARY KEY, + first_name text, + last_name text, + title text, + emails set, + phone_numbers list, + addresses map, + confirm_number text ) + WITH comment = ‘Q9. Find guest by ID’; +---- + +You now have a complete Cassandra schema for storing data for a hotel +application. + +_Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All +rights reserved. Used with permission._ diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_tools.adoc b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_tools.adoc new file mode 100644 index 000000000000..0f3556f5b534 --- /dev/null +++ b/doc/source/modules/cassandra/pages/data_modeling/data_modeling_tools.adoc @@ -0,0 +1,44 @@ += Cassandra Data Modeling Tools + +There are several tools available to help you design and manage your +Cassandra schema and build queries. + +* https://hackolade.com/nosqldb.html#cassandra[Hackolade] is a data +modeling tool that supports schema design for Cassandra and many other +NoSQL databases. Hackolade supports the unique concepts of CQL such as +partition keys and clustering columns, as well as data types including +collections and UDTs. It also provides the ability to create Chebotko +diagrams. +* http://kdm.dataview.org/[Kashlev Data Modeler] is a Cassandra data +modeling tool that automates the data modeling methodology described in +this documentation, including identifying access patterns, conceptual, +logical, and physical data modeling, and schema generation. It also +includes model patterns that you can optionally leverage as a starting +point for your designs. +* DataStax DevCenter is a tool for managing schema, executing queries +and viewing results. While the tool is no longer actively supported, it +is still popular with many developers and is available as a +https://academy.datastax.com/downloads[free download]. DevCenter +features syntax highlighting for CQL commands, types, and name literals. +DevCenter provides command completion as you type out CQL commands and +interprets the commands you type, highlighting any errors you make. The +tool provides panes for managing multiple CQL scripts and connections to +multiple clusters. The connections are used to run CQL commands against +live clusters and view the results. The tool also has a query trace +feature that is useful for gaining insight into the performance of your +queries. +* IDE Plugins - There are CQL plugins available for several Integrated +Development Environments (IDEs), such as IntelliJ IDEA and Apache +NetBeans. These plugins typically provide features such as schema +management and query execution. + +Some IDEs and tools that claim to support Cassandra do not actually +support CQL natively, but instead access Cassandra using a JDBC/ODBC +driver and interact with Cassandra as if it were a relational database +with SQL support. Wnen selecting tools for working with Cassandra you’ll +want to make sure they support CQL and reinforce Cassandra best +practices for data modeling as presented in this documentation. + +_Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All +rights reserved. Used with permission._ diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/Figure_1_data_model.jpg b/doc/source/modules/cassandra/pages/data_modeling/images/Figure_1_data_model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3b330e7a391146bcc8ce6098fa44f566f8a80bd GIT binary patch literal 17469 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 RXQ$wwV|B{^FWBhu{{>4UePRFr literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/Figure_2_data_model.jpg b/doc/source/modules/cassandra/pages/data_modeling/images/Figure_2_data_model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7acdeac02abcd20125bc036339f2376e57ab615c GIT binary patch literal 20925 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 IjzE0=A06=;dH?_b literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_logical.png b/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_logical.png new file mode 100755 index 0000000000000000000000000000000000000000..e54b5f2740af3a7300cd0cef3374d867e26496d5 GIT binary patch literal 87366 zcmeFZXH-*L+cp|?Z&4B0HmZP%(u+zDRgogS_aX?=JE22xyAcrq>C!<6J=D-kRGNTv z2%U&XNkZ?0l5d9ReZKR)=Ztg4d;Waq$NAWWlX7_UGe z5US@&&$J%q^IDY%Wg_Wo)E}mHu8VxdY9tH!Nof-m9*6$5dQ}d zNXQ!qe5(uJ7c^2|S)@;q?-Un<1Jf z)o><7{^z%_D~#Oe#% zMblRyZS-r_wzt2mt~_LZob7yl-$?TD8q1SDdo`C5b|%W}BQw?uM&(V#HQ)Ic8cWt$ zH9jLHH41gP6GpgkC(yJwL%xKf4F96srJSYCBYv}n-xmgAXlZFP{1zE9`{^$I(XxXO z(7FRY5Asudoo(VAbQm|B@7i*>XjQ>^>Nf)$J2~i-$ulJ1@Wo_S;~FF#_vQ741;fsz z?R4oN;~nfd@=v~(x~K=TLBB=PWHCbQ-0w?}|Aj!z#h%O=z;Q?wnDx{&`19H|Gid{$4PGEG5t&1hfSL?yM(c$lVDqu zo>x_L{H713hp<@eYlN~mZ_>ns(Y#D!L&Lq8cRVKi3Cgy8X^*6@UkQDht@(!fA8QIb zQOdLSi-h$WR=ar#A{*PYa3%EHM3rs3%t{Gtmw4{LXGoOP0-Pv z>>XLIbFv)6FsZn%AHBV}hSF2v1Z6N3UrCm$7rA&K5J@niji%7hP>Hp=`H@1MJh)U4 zaR)dSR{!Pf{LEl~YwLf0oe$~L<-8fiDr3%_z?%`*zr?}LZdE~#zI8!%Y5;cfyDP5V zv~OuUv~|u`Qk|xEuk~toNUfT>dhkvTEAl2G{#Hc0iEHz2l*C#AiCH64I%vCB6y5)G zG1YbP8AO%`$neIE8<+}pBWSuhd)!S%2udyBNgGr;Qy{5Figdi4CnY*(e_tXbOltdw zVC}4bvCwfh@o;}OplrUDhc<%zNBW)1kO8Piy(#j!nn-G|_2Zk&5MMKqRKA;6Iuw-= zL&wLG4~AbUc|*#eK}6IWX))|UhbTJ-2XoVmXv=2g?Ch*-;5<{jB*a%KTT{$$E0^f| zkp6>0PK6=w_3%&LJsJpY?U!WFI}~d|OY?0Q^rXQ}8-b@UkiD}pS{A(9DRa7sP)P!Q zduK>RAX&Y{vy<6pe0_0#`%pa{x;q#hyfYiHj>PFfLi9hXvLnp*Q}QA|eE1L*)iJ+$ zdV2co-Xjqa+K6^l3zc){d$S493)W&)@z-wyM=$xj*XaD~FDe4fD4+FNLTRJAq{pzD zC|NQZGAF1V<3|PEeT}@lywm;!q$oCU8%!UUCuHMx^^KNyun|3jqobqw&AOcz*_z*9 zRo!G8&h;dtBW*(AQdp}9Ywl?PqvOkSvsLBg8$Sg5m1v|v_Y10>c1L@w z$*KyB^1I;b%1oorOam-o_Ol@`iA2>}<^8-~~voL;{LlpY!H>g&bOe@XmSdN*(Tmt;43tP72xd$H^ZmDyaIL z=6Ck@!&>LIik5m<2%03O*Mo*3odwL^K+?0#0Z0pk^pn-ym${422pD7l4v}Q;k9!c2 zA)P*K$lWisIq6uY#c>YhM0o1o=JlAF4UH|^8?cn61xojjer289Ttf{hB4sNt_J23KynOZ z>nh?isZokH+?lx6Puh%zAMXrn7_9y^a(Bcq%t-zminlr^^28)@vRbh>90HLgytrud zMFnW~1F6q@ZH3R6RjSL&HF;@y{uJG-oxc1I2Juyq&J;b>85TP7yXY)s3aPi&*brKP1W9*%1Z?*86B)GoaL9`Pigu4(M=O_tHo(OXwSxo2|7lF;hZpt^c> z9Db-KI&jj5_(&_3d0kP`&!fFK2*4N93qtgeNV6;q(QanjqLPA1Rl%oZjgl^POQ%hjI_G{C3 zH1@}}z?LOT306HGr1{ zt>e~2H^+B%L-y4-6)vALf;Q7mPlG9pK9mx0UeMHD<$S}mprd?M?j>LgTb7F+^}5_P zypb;++64yJ^EvRERL2)#8lVDH!#A=s6wz4LNChO_n5P+kl1lzC-fqB7h!L3YXn}U2 z_3`AZC5$fa?JLRbJ;%RIY%#=}5l4oSEVY6|HJE^E&g1%e@!?c-!POY0T+F-PcJ1z0 zRomO!3B@=XJMURuYU>MVjk_`u+Y4C`8X?I2|Nh6~;7S=yes{a%l2 zqRaa6eTg0@9!4 zji;{HJ8J5P*e7Zg?l_sMqLu?ZWI+4x35B2TMveS^eTZxJYdfWsg{(& z7*@?v-M?f~?}2E{3A>GgmqZM1UcRo8k)B@7A6A6a9M;$?3W)7}l|ITTaWtKh^wzH1 zI4RdoS9EURnZ@PKPK0@ro}*HsZY<*v^5M@%KxFS>-P|yOXP~?R^5R13RAv10QA0&2 ztu3oL_+X4c{N$yz;J-E0)%B$mgo*b-Op{Bu&d1n%AEhraOzkuz@}@R8Ux0Z#c32 z&dt=`hZ1_IypB&$-+`GRmueL`=JJ=^>FT2XzxYyZ?A%SMEA4mjrG>>W*?xP7r(Vkz zS}SAO%lS)K+A%7{#lNAHRVKLU$v(?uuspo<^I^MU3L?@9nt>x*B6DlP|w8=BgZ`p9*2RmLaJJ`p$g+Jk3_Re{Z%ylQT^!KwtIY;Bh~Dp-Y+!d{%5U z6uVB>C?q3OmiSf-rM#^JJm@^bAZ+H~3GYQ)q-njjf9F=5Muw!l)P~yCyM?;tz&wEY zk4mTZ?(OXvj~r`q-fwP$ia*A*Qqu7&A>D^r%=3a;Oq+zd^E-q%u7tHFnRzFBJ!NV( z%-9qH-cr~RW7_1a#mH?FWV**eSykuj_}*p)TBXo&Ux@zd`}+v(lg#vVB;0LaWu?TJ z8W??Tt-*@3bS9nflVKr>%uA*5+V`(t^HD-$1@dBOo5Q@!=tLEO_Gx$hs(DE~=fL~V z)`?|susN0K5DxX`@NJ1F=X|4G3T^K+>nt?&m$VYXAwn%=kCez`9g43a+zu4`>r?ihQM96Q~Wprde z1nySqUeHzWS$0C)DLg$bN|6;Y4AGrEz4;*33Y0GMMpR(`ie)tDFmeUS;pTiNf>wQW z<03EXzRh`#(A(=@L6-*559T${er>Y?^+i0q5nUtbJ}32TGl zu*bO%gm;~DeL>PPO@rLWMrXF6Y#qwclBNx*_YTL=Q+*9tMb~s);p5u zuKZb8^|pU0H8Zme{Tq=Qoo7EJDV(jTWIEaRR;*rI*(ykAcw%3^#c%8PbFSket_d!S zZ$l66u)gn(?=iKhaJWR~RuCp>QXqn(>bK*vlk*#y(ljCtI z1D}&^;n#1>*Hd16lXKQSYuAr2^zN$2tuAKSPcHVRBBlrWRGax385v`#zj{%$8UMuh zI5Mko-BRaKtz=VgTV5_e3Ep!r@Fx`L@h4T)GiF^%N~$naP*C6w5~q8e zKy+FZGstUeDD6duxhHF0We3q*SK3>aR@n=$!3Xyt?W5FU?JK!j9CSIMBf`n^&X44$fh&!jdFV#kg%(2NjK@QV$tOrbrd z4t+|?j1yLiONqfdba%uiL8Zk~trexdU}P+4&BR9nzka@|W?^1 z6Gxkj;oQv~6Ouw6RHL7ar4y3gPLAbB8pZbBn7l;0J~TFFyOdiT#KXIG)xjr2f4S;q z(7iOiS=%Sf(Tg+vPpYRKQua*LG)l_qQl!0jQ|@-ajjf4e<^f0?H89>UWosbugbduv z&6GvbS!#v#kGqB$Fq>JyW%bhq%l(s5?kG`Zr%aCPnb=|A!p_r0=mL|m0w{c=Rw>7L zV@Q*-vmw=x^QOa2lNmcOfnCkIBz8FstMfhLo zBwp7f8N)M~g{5mU>SlJLlmUoE9)WT0TNG?tkIG_X^eeaUwc=BLXPJbLEI!5Vh69PlntcuI?`+S+q0>cQ3kW0oj=~4IMhi zsABv@h1B9oseRUOA>m7f{`=*gc;@&fLy^IQcaxS?eFP}|Rpa0JDS6KoJMDNO8;2k= zXSEktd_|hXI?Q7ilY9yK?g+PRZ8i)1s;lk1o(Y?DkI`$BXQM2)qw<~cczh8NGt`*s zQjZx>n<+VYm0h*n@&RNU?5%wRT3E zl-kJ;Hlw&W6I;uY1-?C9?$Ot5O)IA79jHn?idN~iOB{E70JO_J_td|QO;x9|U zA~?1ycLyZ5S{!3P7Cgu~0h8++x(rFbA>s|G+tf5vRDS!Rhk?Nk4&B7iyy89o<*clh97 z$!KTyeYk2*i9&Db`=5oOY`4ZjDd|4g>N~qnT>dc9OMB%{iTtc=&w;vNdta{(mm`YV zsVT>m-Bsoj2By*joG z{@)KbCCi^wO#JpV`wJzXd4b5%ZS-G#EsOYuweD`VC^R%R3Rj-dmYt!)8r=!NmfY)~ z($c_!8Tc({&qSD+tL9F9Q}b0u|54GoAw!VH(G}|;%*pHfPb=?Up}jVhnf;8do3|H- zh4^SAKx%-ia54QQcPK}V!B;`2 z^oIRzuNP#d~Adv35sEDzf#(L;8sJ z5on@%J^%_*mF`RK9Mx}TrNLfTRN3sB(wk)CyDB}Mi`Z&Lyy^~3(Ly8NDgPc+#$M`($l^x<_sPl`r))k$x8ul#z+ybK~dYvi4~BiL4p_8YfEX0mN7Bj)& ze`wS6*>6+ZK4y5yX5s&Lqa&e!Rbyd4{nMv+o%0!~*Gt`{o)nqe;T7}K9jk=r1;+%a zs@JA;E_5$#4=v1Fg*A#i6cQ2=7ca!1RN3Qt7DQZUr|-@0g7xC#WYba_ zN*@{Q4D?DY^B2MMuOXp7p^vT<9&6|SHT6+TmWf8-_wS0gIuC3N>RUe@5NPOS+_$#zZjtiRTE_r+4}6> zwdhX!@vH=aNDK#6WPGVUU8hzJ)wMO<_pY&B)}wbfsPu4abXP)uZ6198{(XFWe8vaM z9MKM49m?yc{>gCR!i6EWe2vUfdrJIvS>qb?3T8i5Ci1;o=c|5Zh}{!2Gqa&fCB{oa z?jpj^-+U@P!W`#Cp&EvPV)w+=D>)MC#>D`Fm#w*cusM(a2;EGU?@w39TuD+O=;WXF zE^RMR;Hq?RQAq%w%KnJ^wsg^;Jrk&J|A_hPcM?{+920fnT|%7^ClM>SsZfuJaMC0vj`Rf+hj;d{A@ zkrnTz)1{3N_9^r>S&NQ1FMmI}!g3A&JF!buE3@lj zWi8f<%~#XSfaeTJDll_$z}MtR*T*GEmi^;K5i&M6SXO@mc-~#!FT|Tl3+X zr5sb(*B6@3UA*f~c^f;3K@sMd5*lEO%2clIo0YTmK_IndzA^bD71YvVrBnR_0!;GH zk5zHt9sm8JI8F@>jVbtHp-z6TB7LOId-BVe#I@^k2n{Dkg3>Y}HB-ti`vh@q$JgU(e4`Lo{?! zIrreE>6w{HEHT6)L$?Q3nvK=9-!EM&)NPM7>?KWDNHOclWHU0J=+4xoNEt<^b5#jS zM57)igVh4fPdwX@$_i>4EQxq_sNGJ6G(`()GE>VOB0UDai>i5lvd(9>3jdO_CduzG zsX^_%mbk`_#!Gciz|=r;*##Rj<4~&xSnmr@S&c+;$#Zr1j?w!F z2O7#$6AV~DSS8n#8F8Pgyjn+|pb?DdDbI7Mu>mRq&{${c+hQ-4LU$(IL%^gd7H%uYD?gB!@pizM z>kzi^BCgqZ({_j1k$Y-{KxtP=&ZG2HMzz(O^WBB+m_7rZ1k{!4dD@mu*k<_U;jb9=OKz)H7z#;O{;SC1r!QZ3;Y-eliv)n^FalgRuME{b z2avE!=eS`Jt_KB+7;LyZbB{;%ITpRNxHx?h>>4&1Yv6f%cf=5-hj%Jo+V&&3J%O&{ zB{gYFj#3JRyLWCDM0yj74EsZ#`Sd&8;EyzZDR5*^@e<=~3}ZJ-&HkV(`hm_>4OaQY z7IP!FFKCT_*UXX22!6M0DPs?y)53?RS(rH|5fjJPATMX}1oh#O6* zu~xsta%GtP8#BcGW~2gQF{n_tlG+EPX${vRmWrM4MzALn+3NokR!>Py)yWsJlg1s@ zKJu~inlD#<-!G)5Gi88x0U#}Y(CB7V8CTC;T!YIdKVI#}y`Y)`-;VBi7k0wR5C6Y!CXEOx zS75ZY`(xU-2_*#*a4P5lF0qc+_^3a8Z7 zp5#s*7+CNZNR*f>mTGQ`Nz7O>y4x4%)oRaKKTcj$warjQs75QT8WhkfAq`6VSEY^m z`kZ*mOXcxWxf%984tx)UFIO&)YFEE;(4$QX@hbBqoMyRj#C46_)B?IT>j}y`g)`ou zBu72$wgl>CA771M{^PuZ$Uj9OPWVPmIx7ZRrl+S12j2x1MvzV8MZfo^iW&q_?$&ne zazAh`(&ZMfv+bC7uht@CfSWoFg}M$;(HY8-vbDi`nQ3Vtoyeom2HXRY%w*)({a}qy%{~g{DK^6h%GNv2dv>%pJ{4DYV$;ksp69H+S9@_Wz)^R1j(u%m9bqm z#VDmr>JDyqfN<4ipo^iEG=)q&|>mNZ3m@-XN zadrfYPh2%vgaigk-li@ys>*8$u$rZMGzk)c!d_h;VN`#V813M ze^uY1MB(1G!sl58Vq4oYvD>sSs~4A+%#Oo9YjWNe_qcyO{GG?A%uLY}d9%P+%;e9s zPoMrW!3ZJ2Iz}cnqN&yYhwi2fDLTLwU|V_9<^Mo(D5eRJ#T#WzD-e}yMh zd@aFgvjQ^Ljf_1Te-?55bd#tZW3?9iSd0^?(X)ht;D^lqr9b zdOo2Enc$e^1%GIM-sabNcf!rK`OWa~%eb$gNY!QChA;~*3zUYR9{WA&oB(+oIm(QK zD6tT-?TSV3~=VB8l5VTabImvJrU%!X_y9!@g^ux~i&6JdZ4v)T9RkY|OQ28qo7P)z) z&?dHjiSI4l#1B#Ch-dfkKLzGv5>rbeTZF7CK0#}h5Z`bFLY%^%nBi3we`gB|i^BnB zL~J{!I)P|WNL@f9V&(7DY3uD5m%hbN(K6lUT%I?pT^b*&R6H6LmRF4$qR52p-l#3y zD%rs7hrM{Xyhd~R>x+jmN(DiorW6+Y;1xvP5zIHK@Edvw}28W|hq_>07aBJ(_Jn20VCWDkb=h-H|h3*6lwrDibM9oOnll`1l>fbKH z)Q*gmAoJ$)pg?0?t8lljUZkL)C>HTeTYX!hr%xykot-t85O_30Qf_oWyC~j^@xPcl z9!P21EDu&$Z434s>41PhHe-{qVU?$5vd|c%@rk&Ym>6S~epG-u8%Dw>@KsVoDPd2- z;62^|p17J7@6-bH2*18=F!oou&dG5wIz7YxS5@UT;e5=I_2CdZ0OVFcvGx>ifOc3) z76lbvP+@#&#as)_VQ_E|bgr;}NCBx`GZsPrmDDLc&S7k&$E0g@;DD6Tp?LEZ+>?@G zuJ*|x-#tfd{OEn3!t-_|SOEZ7hZvWoL|p(uX}rF~o%ZbtSaz zbP7#dB$D>5b@VIsSdl}w%ak2WZAmH35sY>V{+L; z0AWmEeGeO6fw^=J*k5C&r}qUV?Gg%0vfcw9UbmDHK>vQ>*BJGcb0J~x?3EuU|CpXm zllS=mOh`Rn-s19+Xaj&qu3pqBjGq*cRh`r7za5v7M@2=ouzd)sZ4nj;@=m}wQ#W+# zh05F8{h&oG_Gc`Gy`xwlNI+uHZevopYS2_pGSwWx?dY>%Mhqm9}Of3(L*@f?UwbWiQxN zlFR-mHV)Nj;6!ch6jY~xn&qo9dIknA(Y+71vM@f^C}9k&kJO1gdFQV4N!1qVgZd7r zLDlb$*V&ZcUilz4wzuCoqaw%cOwqh*iZ(h7X4V?@L@arT+bj5W2EkLjU!`h{AUsCy zam(hcS5PY#idT<_jrLVe-vfz-P+?--l@Wgc_M)5zUe3fUH4sXtKu!Pq_e%t8z}mSH z_tm7VnDHtoMZWvQn|vJu;}i#mal!Le9`%> zHN~>2YS{&dtR6xe2k?i6QYKbVkD7D)^zEFnk#wd3-7a7X)hvJbS>~Am0RR>Sg+ihe~10s0Xpk;GQqf*yBLV)F#8J;FajZ3w$7x0=Z0=b#7;u z^$^7ShSJ4%OHd=(Jh2oTqxR$>uD@>a=@^GHd5)1+p-VMrSia-Hdz#2~ZBDo7P?`>H#S#=R`-Z~U7Uc3mD0kjQT zg_r*#9{S!on-{84B>|*|mW~c2nmG3L*8jwk76;2k;Dg8nvox|r zLF^cbpyI3>1^Wjq>=!|hwp*kIj32k3U(Tshk#7*X0elyG3d7o`4!}p$2>OG3aX=HG z6C6mBTJ@lE@i}#bVg8W$nbt6d0XAhW*-PX_i$bR>-oZ*6*BX=q&KRtAe}QFd9J!dO zmONeO2Cz0i;H3d@n}4Q}DdFJRqSdKdQNiiEz{dd1qkRUlXv5)eX^hRkInOg(e08z<1WN*&u-#=#nY8vX6 z!M{7-05Eda%m~98s27125(ZEM=kMUVrS8&40YK63};1f)SQRBG=CPmE{41#z|ADIqC|s+k>FQz-v#$ zDSbex4799WpkmC~7`L$h==3!()0=z${=~CEz8Sy#A9sI|o83=e4_vBW%E-9`fh?r0(Y z4P=A+|E*gCR8Yu3;la*XH^4^Dn(ye9_mK3T9Xv--L3;Y-~MWFRTJ!z>2{V8YsY|N2+#nxeKRBE|L`0Ij&&-yG*!B`-m={MUhKM*aiYPIancq3;3P?n^AT<)X~%+vbjSm4 zUgx>hvo+}^UuR-sBT47V->i4Kw8}cMa|HTlDqGgQ!hb5$hVKb!X6?{v^} z@5_Z~_Q3=keeH+)9xutDs=m6c$}yGJbsvDYp|zxu4s&R~Ib;(2kwM``V>OL)3-PTC zaf6Sw{#Vh~xt8OIdi0?N+(JW7hz|vB+V3T;TO&isPAY4-Xd?8!g7l-Q;XOlI2gekXiSj*#D8wj!|?Mx%oJ zl26*>0mym(MN(N~DQh8W6WPBWu)CVJ+hK7a=V!A&hdz0qu9ly2w@Ilhqh0+PQbtpts_i zgm;mwN3Ajf`-^U4Z+X5Aztk{ZKLo;Ps~D6iV{}9P4Za08zT8SXQ{7NaBPH%-F)CO+ z_kIH>BYm8}bXuLB(?TG|6fIQcqIGa1CW;@m=dhTf8dtB=X286N$A?0IHPO+}W)ftQ7 z?Xnf)lLRJd+oj~0$*_zP_xVwgI{alD&HmWa9c6;NNjjE6 z?){#Z2|&~^*AZ{z#fj=|B{0d@qT|NQ#-g3-eigCRu2ml%SI-o$6AzR|$ttD8Gn%U6 z+6=T-G-+1b)`wX2wQ=Ql2pA3o`j;SQtBn9!e7}5siqv=unacsxV6}+JXb3BQTE*(p zLc9TtYIg+=-P}s`T(EZpwmf^>C^`*0c{eg(Hq}hri*~A%VGG|}5FlBt3BZN?=4O0K zSIo(ul`oPFoQXiNO{U2<19o@wn*EPHQMk}yFRPTmVmJBW@88XFmwn9O1W}TEC8kuh z*OIps7&)+pZkpgzIjv9doftJy?&KbzDVWg1H<={O`vSo1+rY1_nN24OezbGF2G|Wn z)>*IlNog*+qwdH|m6KI;b$x4xng1RKN6TT(^T9IP?NQOdg}42Mt%Xta7cHCXcQCDG zfhM|DR0gInfVHNUwLFdGzuU{DApQQ0CM`y12(ab}Woy*#WtUBF)Hmj{ zEKrkE2U$STO+o}evUNhG-j@)7PxX19F3O}IeC@Z;ic0}vCW1$0PPYy6YER&~w7cu1 zHLB`9;l^Cj7O+P%7p=XZzt9Vvtx86GbAtz~ zpA-r`tulxrtt7}WHL0X9<3L0LGgk^@CBW+6O87 z38%!xArrXAR_f53)Uwlm+=X2v%!57q#y|6m9*o|K0Gri9>wzsB0zw`%x&QN zvh^Ph#|p4!J;GGXCQ~IDq$$>$n1DH~Jym#c9Qyo$>WP*5OtW$HH8*c@FjZiq9|?_~ z+GHgO+j^@f)dU{H;_7`xOt00*JYO#Rb+>8>zFF5*o&>Z=v-N83tNs=9dIz8_N{8Qo z(G>Ov?v38iMpe`V?7r60u2 z5a%tB{5mG?_}uoo_~?4oXv!&Wv=*x=dU|94|J)Ze8(2MEM0&DN|9R9tS9GlTLgdTA zuiajz+UeWpiWj_X_?RStz3Qi+zN5^IShKqNbk}BKW1X%EzuJ}OYeqUnO|O+!8!&?R zgw%lbB8^J3(O7&3CT{Dvw|L9K@qMJ~$*HUN__b{+1OKhf%wnpeV&m;+P4zp8yT<|! z`W`kxa#O*duO4aJO4k&LC&pQ#iHVZ5>!Y=vv=j%F3mOR?#V*bXpvc|xrMYBegQ~dI z^Z>jJ@PT#mA%)y6+B;=DCiU*CuGVr6lABESf5!@#P81Q$(WXa5max5v zLeG1agjj>dZPRkogcZFWq>(PfV)VoF36GOa@&>aI5jik;ovEc6)`O3|WBOEVsz=%5 z*cOM@TL#bNDoS!52wM~snkWnE^%~(<%oZ9DK5(Pq?U_kZU2Ko;^ZoebCWf=^a%2nE z-HD*|c%h{ceYv_*ZB+J|^LXp6y?}{26=oG1Gm4Rxryn}VY118}&0>#IU)%n8om zJu`JRuFm@og8>M_g<@5a;I7%!Nkh8D(OM67t-c3gOa=kd$4`0LZ3fHX1}@{BWh;)= zrviN%j(h?}z~!+Sm{wcD3|EQ2t=}Xu!b4v5C%vNcuQLAAP2ctP;`B#gSp)a+ z0tpEon7vcW;@kIX#16yCG&6)gUMxjMZ5r`PRDsnfNG~jt=;A!O$|N$=VyV*;^{hBt zs8MsDLciJVDAPm|d%uyq8VkWbt9+yHdReCaFc>yFv2Yz-xo(+XrdJidr^Lg!#IxBy zv%6`MdV5J&2lzQm;ncFO*CZImM$@gpTDcyP`!3jWTvsnm9qL4ddhhpws9+0|%#t06 zN%U2ojpBTr_!oO16{*dm{jrwoMk+L&?;B}){lQ9 z)B2qlaC`bo4%m$Hx%b6UCxe+LyytiEQ?91I`$?=u%&)S^xjN*|#1ozd!hCH}MPKY` zUyp0wNpCR+a4e;g7y95Q-SC|?%NElk)9-vSE91#>lQ+&H;EDsi!&IfxphKT2&4hoVCIh?TQdu=$rpr7J-cH3W%}j^c7%{2%{pN68 zkUkN$SWG1MoW-&;@ucTbB5 z>Od-)%zt;bE@tSWHjaQc_mMk{wtq8vDlJ+X>Cr(>yAxxh9-O4Rp3ZN_p8-RLK%|aZ z0grCOgC_Dm%#=fUrM9+G89GgLj*h$p={sea!(hj|to$k#$PO*RZmMEj4LRIp@q@*| z?&8VgzDI#J`wqC62Q!Cuyw&~GZ`?m%yh*G>Y^$|xM*{I|#P7E()uq4_A^znev?*(` zj{WPWU$`6l4Op5g17N#)4e`GhMoC+5XM*%aP9r`8cB{LyMQu%yS_5LFd2;09gLz-S zM>$0l+FGSJ-xYwJHx&m>h@%8hpm) z(m{VPr_`2WQ08w*s2F;N)o`Jm!C}O${OCgQh*2v!(tVMRWfn?>X)q+nUpU?8%SkR8 z5w1Z_P3`tCl)RD?EnU@-pn$Q*$$#a^^pEz28Ts!sSJMV9Shy^#kj3X#lD1;{OXk$E z4UWHG2lTtf_q5ox>&65yia4C0XbCmeE+hPt%Y@|1BGhK172D9ytR!q&fF}+;j;+H9 zMx#$Fjqkwyd(6mQZ>+B*{c+jq1H5K6)7YNgq;Y7AdXiJ-oiUn$H51^?1(X#VfM5(x z7nbS_HY|Ef`@j%394ape{nJ1{fDWH|wRxP`#_$AH;EeQ-`JrS}QLA&z1tH4SvMxZ^aM_LB)7E{fWD2q|E3KQ2IC&m2v zGW6%X0E=+f=AaAnTi|UFu}y+?7?$_2>=CIj$j!xcYXA4T%m5PkIH;vTo$R2Pk8;q4 zJc*SJzqie{kgMiFE77N)e`zvT^(sG+tsnkp+&9n}b^K#WG*G+OD0s_z?ZB~YWbchn zC~p%X$|TKoOQp7k9I_=33n|n|SjEZao~U)Qk{LgSd-tI0gIYNv zH5z%m37Iont`6MWj2ROf{1VdG2Uzsck!z6#d`pKW@Q9|R;SkT1%Ms!0NbEy5@p$v> z-#E?bAup_T0Zb~S>+mSYyRoi$J+5{?Nc#tS!2D#(9BE@=#47Lj*Z}JQX8dB@E+AG$$ z8K0Je6UC?#0{SBhkT0=IL+a=DVOz#QptQYhgUkRwA;(~EL+19i&^z)hKJ6}2r$ipG zOu>%dsQ#3158{z9lS6OBFW{6$30B*}qVF2`_#^pO`=tB%$jCy-KZAyL zyu%e7-y$84R69pL?b-dcI$L(!gX}O|0@mXT@*V0uJcsL2Zuu+ceLPvkz}BU&aVAs& z5d}&s;SGYK-d~>e^!GK}HK2~)jvA2lycviEJg=dCj4<_jO={&)B!Zza?tl3Y;HK(| zo<}lvN=oeino)LmxdT=$7qCRpvX=MkQ!Uvk5GaFgHlvJr^;dC=ZWK+ zA3j|id)+sKh5x1~LvJO(>qqG?^EDs!ZH`&^ff0^7sT5Z|n^LvZjz}hCO#265IpCxe zCe_Zrn~4}E89zeg2w0BIJO8O|IeD4c!M_WrRSFd#K#?-)EEe>3-+KbQ1y9Bc7E>HY&@BKjDAq?3e^SUOJpogOsPc;{ zo#kyAT}~4FxhB*_%?m_Pxh_YEFL<2&k~$?)gB-Hg{~s|YD`(y>0jEyG=tBFTed0;) zbObF=8`=Fr5-Gc=e@Zdwhqj}c=vB+SK;kK7`x(y0w`|Zw-CS{w#%~uX%J~OmcYc@^1WBrg zjFjZp0Th&6q4{?f)dI4pvtd9sIR7V3_}{FZ{AZ96^i%)ue*Sx47(9npXjbxu5?Ng8N@D72UcC-j==s zKaM7C_DQT4L|Zg?;WAIE;0lM}PBLl^-Zbe-+H-YG$&)@spN^6INk_OTFhv9Sv-!~k zXgpxx^5~ZwtYS}{cgxnB_h$hZEv*c|qpWu1!{Gmzw~(-b9`efR-!n`8>pwx>|0>7* z|L&5$*P>-66y^Z-OdNa%2LkM`&8UQuMS};GaSjfS$mlk!3b6NDIWIx#@ONAX{O!|h zz@B*jr(F=x4{!{`Gb7DQkcU!Ie1BpAlbu5&qlEYk6k%~Vd)!yiS>Ko79EEsp)<8pA zu$MfuKS>$!H2Y4(I>S(4Jtgm zbk&XjJR5_(#LVx5^Bs-=D`V+q%o!66aHN*OUZU02Q6c2Dbx`8>s88!(0tMeTTS&-7 zP!At)k7AMX#|G{5@$$yAPBi+gXGjHbGIX-|FW<$*fI~xK&a(hYSZvpCu!#a}fRVTx zG5`Z-F=+3+0vZ*JCSgom0qtU~MMWf4jXmxcDSz0$%cOih{W9s&}5iXjJM zq%k^ImpfhDlRdRJQ5m7hsk_SuSnemm=n9#5?0RjLD+DqEN>s7|MK=l40GbD*tex>@ zlGo*U1dB0lD)Cwy2ggDHw%WJkK%B{tdv<~ze5&&3XR*Qzj-bo&{ybB8Bg zLLby?$@MgLJ84*!=2Y3oKOwRK;6MtN1NA9T5UMDA)f$kKMxMF0Ffi4rrL3=6dai|7|{mHWA^?eHo+i_sRuM_E?V9s zz<=Q5P3T`*{Xq-zh{S7M;C^|!*ozZDBS$R568h5bVxAONptnRpiI%x1ZUu-CkeF;9 zCvSPwkD2+H2{F!8+C-#VjOFL&)38bhg7bA$*#U>+{Ob^3=QqJ=N$e)KTx~axf!(yX z%g?ic^8vg%bNQI2gs5O8@mVC1@*!iSxz7v?D2E88MUf!b`_WOw z%iVM$*a!~pkd{qN$S?8;y|M3DuNu`UEoDe@Y3|FeR6QWk71Tkx>$&uDg=d+Nvd z5{-o)E+hd;Ec^BFanmcxDFcf52l2hHswPT&)g@V?6>>V3iibH=W}^N9JD{f-%*GJ; zFc^&C4N|+%3+#CNQ+xaR`;$Zg{|%gcasPTn{WTmt zVumL{x!%+zIJhP74j{1Hydr-u#)jdqqKs?1CCS_g%E_vEpbH9cXa--b^6rSztuKq} zMI6n2l-!y9OdNmGaWvP~j`bnp`){^?^E3RrKR=R`k_rOBR^Q+6&R=BG-%81k$3Wa-Vs?SnfVY%j zeqe&$HPKdham-%|+!|JnM#?(yH?WjEq=kLY(*NM?tpcL{qHl3b{Gxy;qLM1oC5@y? zw{(Nj3?Vguq<%3#N~FO7sez$u=ujl2g&Bqh1(61kl)QWV{{HcBAMVrj!3TwjbI#}N zz1LoA?Y^|D939_3zh0|blU`t3FN1fQD{W_td5{Dg!c6T_xy=5xfHgn8luh8nwh3j` z_YvqUs$3>^8h51jRaJ!|bSvTA&1=q1KAl6wb$UH|^v!Q-KNVGwXUHvmv^xVt>D&s8 z`ya{eVJp2;%$VL-O}A3R`jyHtPM#mu#=D3uLEq)lc6v{%yYRq`DrP!$#q(%NZN*k8 zNDg|E&I=*FD~UG1y{KdCsn)>piL101G9DZ#AtwHJjkCKJ=CJzzzlgbH(9_$C#yQLY zIguH?k_{#u5)zIL>~Uy^fPetKDg4~Ve-Sk@GV%?<9XNM^2i2v*?2!+A8yN+&#R z+4DdG2fy8>2o_G+B=f6vYn3r>)&keVyeVHkSof(%e7M1o>9$i4#Y-Cj{z|L{50DA? z-@50)4Z=i-i+d7S^U8b`9{5G7(A?6avd&p|@FEh5rM?vUqV)k13|+v|!nfv-ORM1; zPw#`m!Lh)Ax0RAYLevzm<-fRtVnC$|^^hI3dAHA06GMAN2@351WM(}NZ3nwf?{^?5 zQ)A_dtC?Dxs(&h2{xdx(Sv1(a)R3N@p19E5t4+61n9ZEeuPG@hD2(gtVP}Bg2>VHh zSczw$Sb@M-9>ORmxL-NuBG}kjYY1G?tsx7GRYtuS_@$s_E2i?{-R9;I4PQ?UPdEGNJ3KBR#|s1j zqJMbCBd%6)uhd63Q+kZ2P@v6iX*u0>K7%}lq5o1P?x>jB4{p|7NR=x#%yBqe+qcgq zAP*>@@VMiwx;9p&Sy8qulqWwFW&HU}e?x0;OySHs{kI*~aB`$2{s}{sW!b__+<{Ez8SJI0}Ct7K#s*8g^$i z1t0#Kr+X;JbP?;1sJ*wy^hOVyUg+;y&PnRm&XjTH2r<()pz*N`GTO>~h zs&G`lE&1K2zpV$~8jr@9^4gVm=b+Jsk1wj@!mSl6_LeISS~*)6XJ8S~RI=H3B_Qey z{!~2w&MOeCw0sgR#p6_B5<}eXX|FM^`{VTWSz}6FGKgMuZ9%-eyrbbrxeHp3nr~SX zRv^l($l1>B=?M3}J!=@MYzI6!&IsS~)$NSbSxC+Lb_I2XXbUUc_<5bcgUaWbWe_LJ zLlMn*+AE+U)%YN^`_N-SVMk)`S z>|D6n-JYREbN!|HC~!VyEqGP54SUh~eF<<1E0~*oE3$fH=u8jRS?>byeF$+nPb`^~`hPfJJVA!)H(#?EAW88-kTpvi2BfucUNg>+S=O(Z^}TL8VJ8*yq)7WLlIW< zT3#ro!db~0WXu$HVN6Cc5)>=o9J)R$t{o=V2zGoqvLuD=HIcRM&N2l z$bYT-6zn~T2YZ1;et+E8E-UxT+y(^oLP^zCNc8b8o^YUljmy7I&Q1CTVjAQda4K`o z)a6v>`J+M(bjRI8Fa-(3G~E7q2n=y;KjD}TpqHyWnHU_j@pt5BD{3vGWjngK!9{nB z5GPeH4B#RZTRf5UcktA{b4|CMZ1C>mJlcC9-W+SM<~<&B8}_?Yup0^&@CVj$X~vs6 zyi0)er}Kpb0grwHE==rd!f67%_b*4agV0BpMH_<$9}we+?30k9(mYlNRVM;Vdv7>r zsWw(WR+fIo`lF?`HLl^(VPzJnd_9YbrY*a)U7zq|^!wbBR5+GwWjI9GML7P{g3dpp~I9BYx*j ziCrHfPJ=v3=BT>jj6?E|dpB;-zSrI^g&pMM9lCVxvU;WMe z{N6oUy^4|&xL6Pj%8*EjSXq}t8Yblj%=OJ&x0J&lme-Y$nreK7k#{ehuQGZ;ZBprk z5#p~*6gE<6U(S+8zvM$1@h7Yh@AZXl{X9v_cpGF{Rvw!w*%~~3c=5{WYI}cUh$Ku* zcAarv!cbsN{0rjE=1%(-aeFpI;;pS7euZmsw)zAi_05#GZ2@?EeRMM7yX!8f0r{Pkxr zrdc@$nj2cwatI?$n_|J$;{l{uax@!Fn6l1!wo9Sl7B*gB=%F%Nu*bV-FP90Jh;kHO zhg6O91ZIQ(^#ib(3B(0TfsNqk10h;r4W$ByWTnF_S355+LLlw1Hr^pi-c8y2f>nW_ zfPiKF3J||R%|@3q!(p&xoT3!1)Z(LgS=k$S{Ipd)V3gM#NM4;?npujEf7UnW2ek+1 z)}-jl`c2`et{z)#D{sRAWX-*3a&vRP?PdOka$RFzP=zF)HAF`gL1sP(&HtIjr=ToI zNj{Gkk5k*2faeO0T!Z{gTlRh4YpV&g9vc&tL-b)oq3&R2zkT+@pYVSIg_4MNvL)r> zaMY_#6A>u|%s2wYMa!76jkl8Gwq&Td+&|Q2Tc(3m=X!S%`_wAPF5J21cc)lm?S5-T zfs+WAurSy#CJ&ts{?yngz3|Dnedq!OMV_7FY2|_7Y;8=x)pV9^3EF{Rqz!IqG_m#? zDGDTrfAU{)=&>yYBi$M{z`00c9J~@ZU!F$~nyXZU(8i%36N(T?aqbn9@CL;i&OdA5 z_jZO#zC6&b2gAOI<8{si-^ZoefNXC6y|lmK;ujr^;L!peq|4^Qc~9}ZTq-Ij1x zj#wBRiG2))frWjZaoKrhYDNDzC77qm_P(Jq~@b!kd>G0Q?2_gBXS z;7{1=_4)87#B8@`m?Z77NjS!v2sLMuE&IG<;1}xNRmx6Pq{$M~1l?tZ&ari}2eu6A zDgGZ{D`*W(1wOpK9-(kl~_y&B)#ma#G|&f&S%Nbfw?&`?It_;vr5a` zyXw#{{+z|4GEH9ZhkhJxCSAW_>wB(^-f?N}ScMEN7hnvUiiJm8pg_rYu+vDBcAm=+ zT=BOqO~Xd+$}Z_x?Wu@9RSH3V-TVFL;Kz@w(eC`9PEDwyd6dpS(VOkZ+@pW!aee9N z210^xWO!+bCqH7&SP_HY{C*4Tlb`Cw(F-1nk#KDrC*ev-}MtyjI>h|)u>_+x_>GLm0UZPs6BQ`ul%gTf=k+v z??uBXmxn2_8MEYm^0536-s%9jl|8W?zo zS}H=6Drp*;n*L}TwdI@;Md#!=l7&f-LmJofXJc-oDZXnKqR;MbwYWo3akDNJg%VGG zGJ3n@D73LhX+e4LA5(hnA+yOcBt|?{46P3~8jB^D!&>uF-4^cf)h(ALN6HsI4{WmV zHO_t)i`LY)uur4zH1w`2)uE84V+g^s`EWVrVkh;%lqg|1sx~im4{fISOe^yp1G3C; z$xXq_IMIuC4lzS8A*USr{L(l6X0h=oPhDG0d6_fjvzwG~d64G-(m+@$_5nMeh6zP` z7Dv)Ug@Rz3*sfXDAZG+Z1vM=fB6q9st5KU}topvzRf*!gOW5JNE%Y_09Y zw21-LX^>DyO`53h;=|bc@~>=o6W~ZQ^)(SWe&c3PX!np;y}h#KC&EiSbV%iBt&yh zYN4vMhqlyMt@!`_JpFRSiD1b)On91J-GA5baafo_W`z0dD697n^%EOJnL!=|RIxPh@U$Fp4v8`{*U2A94CyKfMX^cdoPRtJt=ry_)iXT}f0e*dXI zJE}}vd%0J^(&rFxZ%;iR{rHO@Depnc!0e&_A8$++*r&nRykjn3kq79oti%7l{ak-fHNI!=EyVvcqzS^PN~fFN#<}t zvv7((p(`RHLU|36jzJp>CvelbKDGH0phRst^dG)%Yk^+#;ZAUh=BCLP)TEMa;5Dyj zPyV{)NtQcm|AY?l=|`4Th*7mFa6SIK8f=YP))8I(HV^~MI5M53@Sh~crZIcV zV&`qLyvll<>>oY)IK1}Jb|@6wlWUO6ye@gI-gQZeqh%mA@CG5qkRL`U-AR4wL65bB z^&3;paxCPsp;TDNoIn%bM#lH9$C&NQlP5%}28w_kKmPnGFRsUP+OVCk z9-us)z(gtU)$#7`?yq0p;vW;ayCzkuAXOd|a&CQdMYtg|kqo~#^v%~ixAI^5ricE; z_CL=jfLD@0Zw4*dO8|2hFFb5f>o)J8HjXJr2eMPY^KJA2Q>+!QCr^rd9z9@?`az)o z2sme(Iwl2~|2fh(`Ta|QfurI2L8TKk2|QnI^@Vcvm}fZv-;1kqt)$x0LywgZD)A@@@&Je z95{%88<0x>I;@QuV7(@Mzlk(?I;4eok(ueZ>=LOARC`~bt&XJG`B&mT{ zU<49iVNpn?0bh+o84*mv(4REU6MQt*0L5SU2U3K^3+fE3keN38`I*vn>`&A!`mG4R zIpZulwAIm}j5AckRe%F3qz!3U(v|j#-tOLBk+}&j$k@+5eb z7I84pu(Gm(4sVnjKL@hbsE?>09h@!2-*~1n(B|vwn{~e!0O|F1ChrmwOTQT3)sW-Q zqjUDBZV|NFF9NuzblcKtv$wamR@nTkb9Z1BgL2{JO+&S=iLtSi9^0qEd=S z!~$?p=`)~gS^}J}Y|?wc2xUR`ts$u}tV5{WgHG6z<=-0fW8h_WkW;iYdk?fo&)9@G zN1}~udgF(pjVVM#Z}D`se!N(%if9Dnm|UtY>3o!%?6u&0Ei<{jf*-%WOGD>Z!D zP;r*dZ{Kc|YDnR4KJX$e>U&%)et)K4G^e<@7%})RxBN%7SWX$*LHmRV`$%+T^UvDl zOAca*JrPP>?rtL|ozZaZ#O8?Y*YY8kt7@nmj4%6Yf0Tz3Any@u(2CGWdG!Yp)`K2+ zgp-q6Z5z`vdQvknnl{VUP7Ns8Q7(seCaC2&EPZW zB0)4T-3%!=%(}!;#zFbT-TNH_ho&2ihO)y4_!O;6p=75%HnMJwxB{bh zrLej|$czRyzI;-^>n-9VNPboPWRaj4eN7>fp&(PlxAgg2tOlC*@nj&XIctd*%+#Gp z(JjB{27=)>M_Y4WT>XfX6hE1}rJVEaws=%fBI+1a89(ERwWWmbtaSsb>#yd9GY=vP2~Dg%gM0o?C(}cZ`Fd( z_FB#*G$@o=r2xnvNhluuaL1kLLprTkU!-`b zd*O;Kgs_>L4z#hbUqTtGFOhXG_0<(ibKin>6@n>^pvZS&SX4v=%^TF~B%w#O`oY;y z^oQx1c7G9`h(uz20wJ+x)RJiO`4{aV%=0drl@>-ZxVZ)4PZ&YZp6eJF*U>!auQG&m zuyiM-gWenAYUU=*ch_nvhSh>{I?$!1Pfk^X^UUldBq~_1F)dL`D$0ncDAh4<8!r>= zP?UIt3$zI}KS1;8!InKUjO0(}%zSi@lrgUR8pq~^M~y>UQ9 zYxb6f(oZa`n&kF43D=eGu72OyZ;<%j5BNp4B6sad?g;|e0)%a_lLp_nDt-?L-}q(W zXC4YtZ*)2Jmb7x|N<&`5^~?NI+Q1RjDlK-dgan`Uyd!cUxjOCmU~b7t5c-V8+L9H3 zRLsbndj9d(FV{m-cQ61_jxtoE;#@g38eaSHsfqq8;w=^Bf3%TiSIID3z$3l)bVRoL zRG-%C3`0+zQuDbl@>mKR_gOPfGjGwVceIO8qYh{)B7S}Er;wOcu?eaKd2()QNDP~% z$h@5D>@uN62+B;d-}Lk^9n$sQyw3WK7wU<#p8MU!m%vCg$1Vy3$N{?muUrZ-?3K0@yr zF)H;PuJ9d~wL-`Rl!tnon;+bYzA^qBRaX&p!l;sJ^`i+u@c3Kc7mIFCh1z1v=hjtB zunN7J>GU_VaR$(KpIYnH+j4Us$?dg2*w* zZ?)sV7alseDb%aPjxqECHdY@4fRvk{$r|$qhWr#oKBW%wg@}JS^t5o6AO@Rl$X#|& zqYjr0%~sA4?1#$6!VmYFj*brW3K5d?y9e5G5l=E zENX#^Hf~@ZTtDX0U~WentpLn_kmp=gc#aslsioSbs0BGvM^;!r-7^(^AmOvHjaY>ha<(S^jbJ0<_<-L`&!Y1Mf|g9C+}&1xz%FA@ zMAiaA{JX}Di{~KkJEGn6v}Xf=hnOT~@A*U1gNSkF~tp$?@;5!EtM_<1Fe%nTm*r*vd>E5vm$lgk6ky@=O zOhDX7qR|fOOI=0|8A%7lHSXWgGoE09;}f=5cP^CBIJ!vlB;A($ukmDsVgvLA5bOGj zl>p(te)WpeInRF}f<+(aKe?D%4X%I5Zic2evhgG#{wooUEvg&_%U_)pLcfMlj(%^dr?19a*E5gnY+!?p&k4e!X;qcROw2 z$|7Enrkn_M8dFYH2i6E9zs1!#C>cTHJBT{22qkyxu?N|TAvYm}(Hy!(y#r2=nleV^ zFD;#L?b=V-5P?R%3|xvUa)LCc5{TbS3i`P;>z#n!fxBj~uQK$B!5L(|;U;aw5qyJ7 z3~txo4oseWeh-EN%wJ{YtatnJPH}5KK6rfxC6G4T=U4`?_4n`J z>0GLxXWR=@y?qHS<$bzoN=96q(>O&vjB$FsT7G}~;LpZZ6L{5ExxB6$IC1mZ1?brt z^L+-B8Ze`*uN$brxQZ2Qhm{&WhE9+3MD3t$E*06!Wjiv&dwlg^`!dr@d5hk^Mxi_i zbZ#vmD0Vf|;W;m=-!*8+9<{{hkZjylNk|B}n+5OE-rf$8T;7I8_$fRcZ7WLh*5a4d zW&50@kd6N5AU=tM?+G!*r=bbYJWqNSQtFR?|2%t5_?ep{B!1J>)ypi!b_c4Q+Y=wl zfRpvE`Dzuxi3U!|P_ac?hjr&?^On;rfNu}0MabRq+WRo#pDf(}6ndOsQap2-3oK3% zd>8CyFJCwd4gO>pa^v}6w#|#3`uF}J0yjG17V70Aot6;E^4Cl!ne|4TQoB9dgzK+M zRh*B(Al(l=Uu(`$ev$bI-qNFH9B4pbh1{7Qo*Q9#0VO7}?QJp&E>TloFZTFQL)i}n zvgsf8gTP~=`?YOPavq!6g|2r9w3xq^-SS#gFxibVIxVX%=F7tBm)BhCZz}0!473gU zY9mDv6VCfjzCW^~uRopp|Iuvwr1!ajHhE9+&w^%9ZP4)%5CnFT9gDP%_kc88XpCJ9 zW;(cW=FA5VdU4M$!}rnmgA++Unh^^~_;UjW8qB0ZYe}<|#6IA^nRGY$mUWhtcu5RF zvqAhBaa1jBLapUhk_y(pluHr@^`R{=@Aq$6+Yz;I@E~!W0L?nNJCNP3U)4hV+s^3M zE!!oCZCGDl2M9!TgP{t#G*Gm4oFaK<3@j*zR}5f?^6e&Ytz*?#fhIH2?M=P(HB%nY zAfcL*CGOxY;0mA27A#(wVKh&*sVLAf|6{DqKddq3O;S^#WWDr{%30u5{-u`QV}r>k z1DnKgR`e9FAKWA(C7LUI(862DeAR*)0bm}bX^%+Hm!zgSk9?}81JJ+)ONqi`XRstl? zdNX(f;*@S1Ql5XN_@8yhJa@l+#lf+#Ivp+TEdqFb{%5K3p&SM=gvvoy3HH{vF9kNG z3BdpT&kAb@(UQM>;5m5W>)HRfpq}p^-TC6*K{9%3l_wwZYw{z#gv;{)fPL zT95v3m|7AMh5h;Sr zu>FAcu~TlPo1mS^3HyCaS2pvyI+!p9oZGQGl3jBs9aG^oaK>I;J9)2`K}?S=pK0|Ye>q%*z0e||5&C2B2j(TEzhC)FB?U57VI9KPiYhG%G7GYSiIU zt9G?6+}y^Qlg}Z5!NfA1tb2}NZ-q)pDgVQKw^V}*Mv=j+yaPWZH;qY~7759yGDcSb z%?7p0VzbfKsx@sStcUMjIS~0g#hvFiRKppHI7X=IYK1}WR2IqqJCg8HJzHo@k- zfFS!RdlNxH!4wha+Szy$Xy~h3g|xP|29r{n2W$-vw3yrxmX;3O8Z-#{DVT=QO_fe7 zHsp?sg3j{pOfPYiT5or^?x@(ayC3f!IL*3(~tyT{9flA z7Tp%trbH0*0&oqgXVZgouSNLg|!k%uyzPHH#Zzw9Tuu2sYZ-(!RyzzPbTnl@g^?m-6y<54Rg>>2D{U7ooaIl zPXV%LzfQ6`X^vPaVXl0%w+ojQYDHThNr>UOO*)ZB*Cv=0e#nzztI+mKb#Wap1pZ?m z$Qkas|A1`}ZUBQAr_l-yl!lHknng!v8S6HqK>9?Nn}(86a(?3vc=SM!H7dU78Ybk_ zuGD=5F6x~Y<3N=;IPgaW{Oo_>f!MfDlDid_ww^}u>Z!hpD<_LI0qD#Q4`HGrkYKw` zWwszlz?y7Y!`_2EUfvc6T0;d!R^vzTNx{E(p^tIEiD=5(!}J#1az2ogQ&Q%iDgY$= z#>HQM{2?-<12lnKb+|KiJf9h*{j5y@BTV2(@F?6~o3aSZJlx-*q@DH*LF*vyccXB#SZ$2xHjLf?Yb zz>Dx0dYsoZUnib)fZuq3=EKo>BUB*EwF?lJ!itAbmzS)|jruQyv|2K%c(qJ7YCrOZ zo!0(-0x!E)@A_6<38V7oe9c40G9aO3-GSeW3=cOvJpy@3uS=Lwd^Rb>4|@8F`8BKc zM(D4KZXdFNL5(*Q2rE-fK>)6x7w*AR3Gg(yp?fb6-#m0UK016&!H_``);b-@AfaZ3 zg6DE=yhdl`p`fHBSg5`433Bqi_3HKOt}vC8uJ?wJ$hR0sE02uF@3QDPEO=|e9o%6( zP%WZgsCsbnSxaJb$oE>T%YBvif4AEfo+*yChx_>3m;N!3Zo(6-If#R_%&7;~c7TB3 zUIGN(l=1yIB2D^|luCi$6nt8^+*YTWrgk3z#9NUMd!4`00k_6l;7%Q(!JU57r}p@0 zUwy7C?c{+3uNJisBn3otMG6ENIIhXluE= zk67BNUfU8hOJ$}BtND$+#&hf1g;x)5f^XDTjI;o~=kWUBPkZilH>>5UTg~<yt<+85oJ6bZ>&lHypPLQa@sjyg0es`MWbqI-> zFJ$Jq?BemAGtH=MM&-B#Sm^4$x9KVBgl|U91Q#*^eOn_(1SwwM7b&#<_S>F-UaKYX zMij|0nJl$Zq)VgbAp9Zr?%Zcpc-8P630)Ye$&`8xQj(9dX|!!YD*wDx*S>lMCoRzy z>XWQVJgKo^=g+Hz0?FPVN8vnT`>+=RhZ_0-MLhnQS}7YYZ?H(gzh<9(b4#nMkqVhB zRWDRnWA1t_8`kjShK8U+aw9&qls!Hv>AF_l#Kgq(pQ3`P@vjl0Q`6Ja5YV6;Nr;b! zF%|GwwMEcn>y@q~Kqo6ax6jgX+FCxdA9&!ioCn5SQHNwk(%rsfg@Yw+HO5m}q)?ZP zqs$ds#0MUNvg1*I(3~JdhS1Awqs8sdX_r8VQ1q}#UEx-A<@*TG7657l2FM991pwMY zV7BF@jw4Q|eNa;ayli;XW;!Wg_XO>FLwI&zFv#?Wzu{lPZ@Yl~UTJ+;d6G`V8TajF zqy9E<{qIQ@PAv+|2M>UbVri|IMq!7`84F2Mx)q-TSXgm^-?SmzbP zac#hzS})i{REJ~gC-CsLCT2tRq8Fhc!*$qQ6KAxgf%Df3n57CM}9uc2BpJ9l{ zu){;>1(_n;UK{<2OohIQ5cmZet)8Y8ib_jL`p?63ZKp8i{B;EA=Qd5h4dVLqR9{P3%c^#Gsv6fgSJF> zwdADbY5}R|0WmQ#1EQmKYmH;IQg?u2>wlXj%&3nHIN3y-S*43>OFJMQ3UNEX$a_5- z=YV{uCnlbr(M>xJ?4pikn8zxdFyzA?ZuESRP{HSBFbK$326BE4hgD$Nttdfv^#tXzpSO zvbRts;fWq^`ti$7lU`XoaLa@KYKaT1y`jiLuG|g_Q^HmFNSb4FvRZp#`X_)PzJC2e zh5q+zX2)wh+Bm=8xJOl!&OdWe??EkJXwJw;;GJu+ot0D_kxNXG2^N7h>jkqLe}4KO zi6DgtM~C}hQ9Y_AEOG-1e(vN1qC-?`7a#;rAj!hHold>sYe+BQrAB6yWxov1SUA5O zRUt#zbp<#*kbJ%Gp#xZ^g`?d5G?;3q%y7g{z?}wte%;E9H!ha7aT^MoefK;IZ?3JS{hU=wjUSlZp)<*6FiUhss&-ey^9JjYea3uFZ!IFH`= zMS0ZQWu>UoC!dQ;`0GU=y;jGQG;*>pc*21vo}!46>;=bABuU)DG_wm2$G|NRctO9u z^+^+K8%iVJ+1-2RF_A>_Pe%PII5ybTk5E?1b=d&{JH4t77~1^&j~S54D~ov%wHOQs z_9o&W-$!DfYo;1Pgpvg4)(Wj4EV};qLKP;M*kKLie05621DE2;?<=PD+9~Bn)meXS zPLt1GoGrI%ctS`>DO$>?6!IuD^k%-j9%O50$5Uia_37IAyoc;SajGqXLUr()pc z5a(f{sIJD=evGjixGm8;a2a#*8tG$Yx(Xvb{6y|?d{HXjkPLlxv4{FnB`(Wa(VwBp zJ~Ljg_Oq=(l6s2BNGKa5bwRLHew&VP`GJV5LH^Eo}%e! zgeaT`tH0s1>EbALSt}HbhMrgptkQ03hC&1?i33w`u%tMtV#(l1yX9wn=bBT_cVbra zb7#M8)<|UM(@_yEO7dx$Tf`4|{CaHRyAQsQ_r#Ud01)4ir+Q#4ltQN>M>!BoFw>Qz z)y9T!r=quWaz{Vv2pZXWppV7CB&PCq2(IUeYXEaly zmqUtwdl@%BzxPpSgsR72zd-{k3PY^&I9XQkl`}RQ*joX^aLM-Q?*Vyg>mUjfpOLpkA^zBnH!A8&V>MP4q`@>ZP7Ovx_9`W}b)=)FSiaRqt8bp=$ zI<_3#M{91k$lIxO58DJNh=c8|Rpcfl3b&5SIX904}p|3yMqu_~EB^?U4+r z6krPZ)gHnA&~9fd9x6`9@@yyu=wj`XDv{vx>~J?fSRx!R1sod}EP)e?S)LP4Qft$Y z==3yv@9I zu=x6gM?zs6ejo)QG`-HvnLLtDU#gwwuquBff8AJ8hhY-p=5oRxs2a=`PP3W)9C+U@ zV$_YFDd+=--$mC-cz)Vn7c@S3`o(aDGtsl%@x5(#`Nl|JAVDbLjz-5_2p3XPW|+ed z3KuL7&H5QH#w;s6flMHB$Renrb61RXfdsU+6O|VmPal8e{G{@WSGr91iV;E zIPP{nK0ZXgc>!b4fg9FhU?xfi&_@PFMrlY`Zd@D&cPsXeJ!!C2?2j7$M(y+m);e@(8KKhseY1$t;KxJvyL+Os-2JXVTz*bL3!W`CI zJpHFIod$hzA?y`~P`OU>EqG*L7_|SbfwcyhPCD*?@S+Fy0y()J;?%VvihX>)$zlpoD zh3>O40x~jbfWM|Bd$BvZqt^Ei0hAZ75fowgi=}a1g$d5l+Rq@H50%S0rFFhXBaPu| z3 zz;E(v!V_h4{LB7Q!7iVHVI+VoWnC^L&QZqbvM%<%hsk+9$k_b&b#Va~$&?<#aZDDq zg!ulKJ1FTI?J}5bgi^|GYO<)ES|sXo?g|J@--yUzjLIxRrH{k&#A_RJCtmVc|dAO=lki9riJ9CadpseFaKSiHw~hp*EDLe(Jp& zcL1n`468?YNa^Yj+%(8cV_Jz39L{Py=H3n0`L8z}s8~v;6R*;ZE$(Plm4%C(tAQqS z-Q5KKS4CSdGkjA53&7nr!jY+Rmq8+0=~@u}%4IeffB+&8EK9iN<%OvAVnFOlN9f~> zx4yd$ixsu6?Z7NGH8r(s% zmF20&dN2<;wOmqII9o(aeQvX7)*bDaooZy&Jo{JPT~}M1mDAJHQzM^)VGs8Q#Z7@>6Op6ln1D=$gQO&x}HI|-hW((r(EF;mC3m;aMu?CChGhIqR z7W4FK^yj=2)6i%HX}4p~%fUd8ElM9D7PEbkwPPe=*}ec&sMw%Skm&tM2wE_ybI6XZ zgqABv9`9mT)*+%9_>T~PQUr();*g>cn840355K=qj z8c2~x!7MgRh+LOGk0??&N#%@oZ)H|QNI}k@D+&?6pddl|X{-DT(?E=WgCKh}WHbo^ zgZ<%BL#q%AR@*N*B*xLVA(6KCst9>UOe{Bb3ADpKMvv=5)a)F! znPPvkRetuoSpuYq?ISK|*=Rn|J?3s2pus1lyjRBpKmb6{;KsDmo4wgRSEt@*1#PSn zhyrF`wc)8|xHg5}%B`?yxdo=d<%;O@f(?D!P z5t#H-akihg&C6Z=$?d(9LPayO*?)pt?Wy+*rMId%SG)$XxwQB9FjGRIiHFY zhzXsr4775r*)k%BLS&OeDk|??qHt5IqLH{URO?$yLt~Pz_dT)sY~oah=`eRa z_<5kPo6Tcx;e=QbF7-|;=Z&8|i)PvNdxla^)q|z!VJ2xkYB^VCKa7fA*jWz6t>FCJ z$QM4*Kzxj4kX?%*V^~D~KgC?RNEBc3?U6!w=}?+p>We*ctp!2 zZ!y`kN7)N>0BETw?p!;OOQE`)WXR+(kl@!``O0Hy2_sxa6WTMB22C^3=5z#uH?@|! zD6S4dVD(pMT?JMznO|R3@C4pI8IQ z*7E$K4{slf1VJY)x823;#-jRtl-%d_-b9zCxP3=M?-u)(QWz4b;oEX#&%JcwKAO#} z`yaC)n}>=KMzxAZ;V0g^QNKjBuJc4;}w5#Bj%A--b@Fy-66n30je6DUl*Gns#chL#06;DBG z;0*RH!E2gxw5=kn@Mwq&0y7V<(5{3-Mm)4qpZsx^Ly zV8KxTQZ6)I8nt2QRH}R2KY_l4J&xWA)j2lC8K&qzLfzG8FuASOzKf4t#@D)e=R~<( zY)X~zE?PVqiwfs?W8>*rq5VB1+K5LRmF4kcrQZ;kZ`ui@AQV93AEFlzt}b4#9}NC@ zMEmi<;H^U1i+J5cz0W5#6P%@Nu*<^f2%D1skqa!Zu8JJtOg5Hb{*;_=R!j^7&SR*f zoMJG_kkmC{)K{0TG$Qk;*;JUxt#aFW&^3#S#R$7#pL5qPM^(dPZy6?RAHKJ>6MILk zfcFgy*jCWhdn1|E((ZN|-R4Yz&dfvF38{NX%D6aAn&g#HbS+}$^t{`)!jw>_8wfnZ z^@d@otC@eEEXplQj$SlIDh;m+K%dyWwY*4#`l ztJS42O8sO^1F{+Q)1?2yN}jp|sSX+=Ymg^WTR-+i&JW5qNCqKeW-RnU6qA!0tWHm7 zu>Gb&t~aWLg`L1cE0y*(ZG_6yC@2{~&j45lT~)Ylwt`Y2xorx$SuwXYnno$iT6?kc zp@_ltn8+`m0>&y{LOVEOs#tBGqgt#ZQn!cxwp=fovk9=xtQsV*Y4uk|kE%?9xRnfy zWSo&bu@J}76kpJrh{2No=JXcGQiVwE!K$I*@=IhqpyM$$y{1cV-la-A>i7z z-?VrWAij)4PQl>qQ6kH*on3U#ItOK;CmWS7xOM5&t-{U@%7sU<8wZ#2d^0%Iy;Mz`j(;hT64RZvi?*fjU5Xj{+e|{=(f29ikdc#%pwlUYJU3~g3V*hqR zm!9)V#h3Ga@9*M%Tork}u$BgTW#`}j%H87U=f5dT+d9f#YFNKXubnT-~Er z!=oq(F|8SuwiAoxGb)MG%iYN$qbYYBsEt?jAFUf@9$|VZRn&26 zpBc=C?Ck6Y<)L>PQxxr+k*$x*ed?7ZnVsa}N)Xo+{08$T>!BS1Xj6P;DAJ!n(03i` z>4E6g@tPP42?~YDPqF+aPiNx{!au!1H68*=uA4^qdi7}g$#Lag{~w8_4GFJCEzH!w zato<>P&(?#^DVU)EjHYaa}HBq>xE?W34L)?YGR`O*JVaE+Ub85pVR_hwsfO;FNe0Y znodcS9C^vcs;(ln?lp?zJ)L)=Zd32=!kQun<3<6D%TUv+ZK?T3opK&RBGI+NA2+7>{3E{sPN?$UBWxGc@G9y?222T6&yp zBAk9V&hBaPP8;Y62QC0N^cjUjA-dHu8mk$ws55nZw9|T(f&bc~PTF4VZf6}3m1K5< zWlD}{A1Aj8&A)_Oa_VTis_EBDz5>%4ZRZQnf^-0d2aN>*SXp~Rkg>xoUaD&zB0xbGS> zk-*ao{2h}fgmUtME*YJu3-`{^aD_vR5V`tHo>8zyd`K>0bQww{lNzH&t9A;9>UriU z$$^Q9l?C>6w>PcR?s4JXeP24`xUya6_F*M*q_;StQx7(Rj`~mxe$3|3NQVv^@gc@- z7C*oD=zq-X87gWSM2E(XUaFs$&MNL&5#@&d5Ud*#&_3q}^TY~qNuc+2{jSf z*6)B1%pPD}eTipeq=B`*i!6`%VLqS#_w(8XP$dv8Q!3v_{)kp&bjX<@lBWR92#<0a zuXY2=9y|gXoQkwLZMrtShOZ^=Z8XWLG|Z0uyaQwlh_8cxT#_%Z-ck1I(hrC1hL+S) zY^f4z?eXMF<;^2Ok!Ju~JzZhEdbRB&{o703$+e~UwD4+Sa?{(Fl3=ox`7W_7mHwvK zu4t`^gJT8JdlIvj!+A;=I$hBj&jF~L4&xK(a$1719TvOISF=34p`27ftD&57Wzpt{ z(^RY13|jYKXvdTWDzLv3KXuTDk{Bu?9h)Lj;t=9~|8DN{i2r4CehG1r=&Cay3W0)X zB`B(e!JaR?;+3xYW5vVr@Hzp_nh##dG1B|^VO`G;9t}zN~VO^t)iz0=-V3Z}Zj0UuPWX3Bi=oUwE3?A==E4Dtj&7?_&TfFdIY8 zI8U=DLmV2xpT5n{+k+_0Cx4h)i;u3qWQ9hfRSXi_9pRT_3vY4FUbniUQdblCR2`H01G<}C|X zg2+5D9!sb=-sOy(y$Wqqm6b_QQ&s9bVc0Uvn%OD>+(!jf2+#sV1m(ga-_K4d;w9Yk zHNiG+;2e}s2~Iy%J6g~T$IA0dNGuVy2U8#N9^see5p)>0F4Yl(RDIdJ3wm`cxzQ?z z`P+t0O_CC!x?zj&trbCj!PYvGq&GIV(r>(aI`Xn6ziQ+<75}ULJs2HowDrFY#Lg{?V__C%{*?fQG99*N z2BEa6HH&z@;=-?a2^96ZoII+?GC^qVNlicU%&(2kBfqd^2BMCw z)29JUoy^`INlHz137*+owv*wC`0NWlKQIkQuNHCUSJIi}+$-NHk~L8-HxjzABcpR@ zqu{-oW&M=<&Xiy6?5?NSd2t5g51R-s5=ChixD`4((c++Y3|Jt{bM)5oVQ>|KS1PJp zQYp-{3A_?l3YyB(Syqh7Onos1$7*Vo? z&sRjpHN`VT=8M;{#R2N#ZkBGoi{%_xI%C$D?~MjBuu@42YNTBfp-vuq6x9N>t+C<` zU&;|&+)D*Z0Z9pI#iqSHI?P^# z+<)2>9$n|}K*@9Ues-g0ZsngM)A~XyTU&+XO_;zg{rd~EuEzeAk8>Lgl0I+WVVGbk z4}{H}jf6dfR0?&F)q}Q<YAeY-@qmV(iKb?v+6UgAO^ScVXOg z;)2lRA|Dfww^~hNHfz3C46f1++bQnN2D!PF61LN8qpzC#eA;6fFad(@UY)L|x3_8( z+;~NHfxmKLJo~b$llTXUN1HBXI@~le;4?|f^w<}bR|%k*v=4Mv9K`6}-yFX$h>>ww zs15x6qXRv-oosBAnn<2=_p*>rNV1$#R}99krelIPYql>S{twzW(2Obbv40qF$hJJR zNVRIURT=yl3bE|?^YAExjVGWFP+L=i279_~vS01A8}KOe`43x>(t z{F)a-6Rn{T`IDK!Zg`tsrl&us;&Y3QI|l2#OAS3;Pbp^qzM_(Y(=$m&HommCBlrej=t_A>7mAb7HSe@BmorT8MHEp+OScF8u^Xy`2N~#d znN;PT(E3`4R*C!S>9DPh$#VIWB%APbaywXlynVU3Q_|DA|?HtBFfxt5DE8XfwP zoPS~EE0c{ixa>Z_g9y9`dJ9GR#G4yAbC%#gmT4jhgh2!Gs{Dh<)w{p@CP{ue>pCFZ zTx-&86Nt|NS2q{+%S+xYN@zJts+wvy(U>{L)ukt??H+OUlI{qPl0)TZXb)wjtMY@Z zBXdAGMmF|PcwMv3gYDZ__--?W@#;=o8kk=K;WFk280zeJkQx6SnjbS9zR_XN2YsJ4 zjvn}a0IH&;(SWB%PztIKOJ~T@0HaQkq6e_`D19nmfS^F%G`#Ao7%~4n@&PXum59uV zD<~Wsh2$-*tlH~)O)H;4k9wid8QOCqzrS1<>V4y)yXWMURgQhJSDu`yl7_nglt6H) zsQsu&KjToGAkBa=y*kY2m#SKFrjWafEI|~g=F+^WbK=9lnyVCm6l!FBB^9DdAzN#x zESg$ZL?iC|qBfxbQ@|M`)&~a+O@5>igi|Be07WqyE#zt4$q*2@%1fQcV<;s$lhtd5 zuNZg~|F)#l;zO$Lt_joPnbVA@{QIHggfvKE=Pgbe`rz3d}pUhS?;s>2%CNCn19N6CqrUgQY)=;Xb|GIxl9?{V~w+iD_iClv| zDn2=Rb8QXeNQjol4xakc#Xxx6VcFVR=zxl>V2m?ZIvsjthqK9w^guvO*-#f;t?}4O zTSZtpJPx&cuUx?h%trbI9-u@gDRV4n%0p9dsP=PWVm`77Dn_(CEAdrmGH-cIS77y- zWBNV`YS`Mj6r-3dS zN87c3bY~rl1zvNzJ(z64143JQgK~+d?|?Za$TPLEEYMAY9&pP~XOMThu)T)W)2qm+ z!NbMI=DSrVk9Fg=6&;wZiAIS02|Cm`gFYBE`fFSk+W#09f<*xI@1VZdj7kEO8jffh znCxAQIM+=yl zk}vU@Q@6%jDQw2RL?d%b?|nsT)0oc&(HArppC;LCE=R|3sl_Yq142AXkbcT}QfoYh+RB{R3D|X4 z50XyDw6_Vr_W`Xfth& z`dT}j@#i*y0l7Fn50Vl%8{JMMxa7}g9eX9<2?q77?$&crnD?@_nS9wuVpy{O8Ri1r zgEt&HD*y&U$FV39NO#~&xiv3UsaA-KxOL}DyBgS{E_Lf?_}u0us4uK$E1%zZCDqHL zd~5;ela5QFs0MreI@f9s$Ss)gnVLgnwLJuol;AIx^eaFtLyMw6?E z)nn`yY=6sB&;W&w_UfI7s2cgqL6#e0e}BL(h}P`3;EEAa2klAyl)EWRYm=kNF*JSM zigm_YdDiVg6~3U&5mOI3@?p8tXUw7&`JwU(9^AcsL4VtT8!5b*tm-BAPLlm+MIHZqfAbhemO=NGB3rX}h% z=BcODq`1Fv&mz@gfXj8Kxh6kK00esr_ce{OM-RIjC#k;dCoUkFPe#Gr04C(>W?~i2ZmtALT0A914W{X(wf0CtJ z=h=S!^~b<~>WKBE$&oaVU19U|)M}B_7LneXooH!6y*Vg`F}0-Dp0#_bRJ0bHQ{jJm zo3q3&@AVhgo!9YC@S`27^dycMeF9y&V99TVA$@w&rsV{Tml7)Nd?zW}J3k|hs#hv# z7t1jXf^K~UJ3-M)!a*-Yx?k^cUyY+65G)&s$#gT4#fVn1o*i$kk;qLTtPmMMA zQ0eq}_tQL+4u`%ukZ^$lVm;Isv$BF1goXuH(cq*K@IRR|1Lupor!d<6 zm2I?oX~E;4ig#c++UOO;L=|kI@r(o3uQiw0? zcBMfv=vIRN&YOLp3JGSDG`UjB7t3QJ{XdBSEVT}Og~Ky5Y`ogo24|R`utMX=fjnoj z@Qm^Ck1nHEY~_mODT;T8zkPL_@`L>EG9dnpnGE&(&P?TiEf1*Vu%*A@;bOUYd40Ne zSYRepQxXs-jGo;}d|`H9NOqEdi`hScf?<+p_KU4|Yh!Jlg_wpZRs|9S%v3v*qlDG8 zH!*OQto&9Z!tquZq{4^If630$;+ub`3dCK)JhQUO5}D1*16~#w^!81V4Y-a7xy=99HfsZ*=fSY}$?*SwsoKbFsOap-uFEti zUnFJj=#aicA56}_5|`3 ziimF#{?i{7*}94O7Ejz4^8)EWCF5;;gMfgyc0ulTkwjwX^W&-7%(Xg4Lw3F6yuqGt zdZmWenWuce|D2}vZ5}w6a(M@>q_)UyKBh(J85)YX{tDueYuFMrTjc@c5bB|xs`&aS z!Wyvvi6p7PUrZz-nEAF4D&JDs;T!x#Pc{6*pJ409+N%o)>FV5L&JMtPrBbtOxToC2 zPKd*3vNz(IwyMuLJU$>;;R@fyHhif~sXF%ac=jLK1(5p5*HF7WwpO=IJ%i85Eb242 z-~XUD^-QsqN6Bu5Q9%Qz84Fx#yo{F<%)^1o4%3U0P6HA168{;V9WZ7-ihmY-p4Hr( zY*tF&YcK|nV;>LkY+SO!MYCh*c-~q5-#QADW~jxM>e}nI$A16`9`Mc*=SmnRY^ltcG9d(GW2RmXvMp@%hOVbK zDa*To#Usz9@jm4X5y+&f3V^N7j%lDI1*|Lx z>r4+3L-R?0d^pkmKK7d(-mM(*E=u zA5^;Bjp4jX!!R`UEv#kT1{jf?SZAmvCD}lZD9Xv<>M0B68H<%YP~qQGV%GqJ$fZ5@ z*njTEBaVb$O`%SBkGSyV|D=MHAFTQZQAS>pAUf5=$HKyAX(Tlio}a|4UTei8Hs zdhPb6C}yfJ3QvK83|wTBs&yq|AkJll zvDR>-a?F_flsN~a)77(HENtv}E01B$E#jm?ZDyRq5g&k|`ywIZ(>!$eW@l$*>C$ZV z3%y;JddPQWE+%e(4M$!-OeXjp(3`2VE*_!G;5Z5ly?^S^-h(e;ZDxxWU_1=!4;vo+ z-7s84LM;FZu-Sk)6v#EAX`t6(4t#x(mnd0_;!!)pkI+cq{_Yb)B0LMjwor(PQ z$5Z78B-)oR`4?_4Qsn(JuIR$%1Lt^fP|fNqo@z5(n)NSclg~QhfdwuuE-oN&hcGa1 z{|*X=$yCHE#)y+9?!B^GuS);NP!vM%{7<|rlvkEO?UYS&exThLTFy9}L_tA8D;emm z!*g?IpkC4exG8hmUSD570X|q_A{?O>p8$y(sv7_dU~~d`AuIZ&c9bGLU}q=G!{;($ z;Ig|GXaKGO9r1t*U)rWZ*0>kf>cn_?!PqX=MVl4BH2mZ3Y+ITd_3EVB+FBbP#L4q( zK5#oy0iP5uRi41P5+1z}gW?%Vwa*^&!8lBIr+9t~-WkU3?+}w?+O~@ogdtAxAT<&2 zUj?wFO{WtMQmT$@-AJ)P^<2qLyqu_tOJ+(`ZXj$0jNtM;q!AUOLv0x!)^Axi#2;UVva4c?TaU3j& zpPCOYz8T`?<>%jDrCne%T5}c5!k4(`!~B*#JAy7(>u>=KjXR+-DPH;h4cpU`av~v=}a{bovDjdy9=EMbEm9*0|Mg4_NpezKZ>!_aL*=LMhBu@8-Wo>j=$mqU zn0T}CgkzmAqyAc9Qfg{FjpnEJ<2!*jg^>t{YS~mNs&`b0#jZrOR;(;Y)g`mzlLhw4 z;Uh62p~KbZ8OsY8RLu9GLBV~&Lziac+@`nU2{rlE01QKYrzPamAdx%ZnVG7|f@TLx zgkr3%N8@bS&R0A%w{3$Q`5L8n<1Fm=iw^*l>(ygE>Elo`-1QLgWQmUN`P_B-ilwqy z-&iSxQy331+;T(QUbSNk>*jX`O=MV%*rWtuyCn`9oGi2K275#aZY$wi6NoNWx*NJ3 z0DI|UBWV2JsuzC zBRoWAM@O|QJ4*lz!&s+TiaWR2SFTTUmiD|TBH*&Zf9%jzFA_C{ovpNsLz)*&e%ZA( zHNB@(0CKqfZ7{OJu`y1cIyIl{_4}RT?8`|+Nv=Kilv})2HisrJ)Zhj_F03U61{9@) zFNfqtteH8#YB0Ax0H-5u?43-D?13jwM$W#(^u7N2!2n7w%owhLx=LzgZW;Wc6N820 zUq}Zo3_~^BFu1IPl~cO{ly7Gkon|j6+-R;K-yICOL50L~Sw36&`~K017Q5yZypoHhvYva%nZ>N1Lv-~F>jv+Y zFg`$KZoBrL&!5IG8eT>7=?EqD#k>ZoW{%w(;yQpm(VUrJtOR^n?O9t##@9ipvUF75 zb~g#afGb{;gN}LqJRVYRIGVX`^s|smr|AbGni~2*EUVSUMObgw`xjtoxwuOT%OC)3 zD;_~8T|}AHGN8QhDEG;OG#&ElA($}m6Mze(%7GzR6v~3uL@tbgr4g`!*snGLExQPQ zyh82E90R1BQe8!RrB4Nq@2R$bPYG)0*qP__l(4!{-YV_i2C_GU#w{3iVx`ItWlQ@; zbWCu@ugzI{sJ9rvwXG0jt=qjw*&w!~ z7fn}Vnn;B??v|vcrtT;_jOq-En*aM7-@2X*OB$d6JtDh>pt7;N;Z@e1#}yp>5gpGb zEaOIIDMI$nlR7bZF0V(QNM#(+tL{~k&E(U1qhsuz@$%gw)7q7ZiCwI&koWr`zdXOQ zI$T#eNJ}RSlLM;431yTvsO^EM0v>pwNAKXLV8YW8K@;cbUO!`Ub~pxJBHDZ59d8LJ zD$a-l=&o;wLqv#(NI~P`&p?_{Y@mXH@9DvEx!hOqi7}55rRR-o`3ar$DVPG2lJIgj zM0egFQg~}<{F|a#DXUY0)pHq$JTgW8lo)qT%a${ zq!LW*O~9+fCp;M9h4Xi!4;pS5n0yx+|E}fxET38BGw(BQAU|jk&->t%V}QK+QHWy0W&I|4N>r=+z-j9bb^kX3%2v0 z#sQ7F1b#$E&R8-tEPHPEr;dfK;cOKJ{-v2fq>!kfVD6D!IUu^1{5^%4p~-dB50;wi zPqVVJ0MxIby5Yb8F+mFbiFQP!t4tLPPu3eItBDlGi3cmYNA4LHSEr{xMWR4HR;iR! z9ocOO7Lh{g+$vNN9jLelms&#r7Id%}SaOQ|?2m7K-~BddeCy$!sfpjoF667Bp1kW{ zwsUl3-&mwqcC@pzoA7^0J9}HP2`g(rs#E{XH$fxHamLBf@ z{Dnf8O5iF)MEVP3j0+Aykntal1wwuU1RSJx8FX30y`)lbfnqQz&}4Bjs={2i=cf1vJ14zLM2w4{x0%@!>~GnxGO$wY zeF<}ys~(h}2=ovU6BVVp8W39VHpKogN^USU;p0cuYy37~RiY5lTggx-lcY%B(cbR5 zivWqF0HvdYgM*zNx8E%YYCw~WZM3954TP4ZA^R9Oa8=e@On+beAWN6AQ8&EGv*80d zTZ4mxhGU9CNz_zS5KBizMTIdjVvlp9)T`3k-rI(BlnmD59bM>EN~WttdMtSjfw|Vr zggYh}Gs)mi#&XxqD@${rAZ3V>Bg%qe9*W+X7UHj?AUV*{(cx2prRb-#z*q=lq%0hr zO&@*a=Ng__1~;B`nTRFCbC)jIk4=jB-EzMxOPMFFYse}=)0gE$5PSqbDQ8z{wMpiw zbCqFU{P1d=T}RO>#~xa#Hwp=Z0m5v_v!_L{suYP?Gsn~cn7{p&HCGeS@|K|1j4&iI zF%kHea2vA24CLqxCyws43hBX$1CNVXMdp}W4xinLR^Vz ztRR$*15a;|cL>oB#~OOG7;|}2xLH_OfU0XLS(eUc$z9r>+ez&iH(4rgZk)Tfw|A2J z9Bvw6{z1x;#4g(Anp}TOCYowxM#(c0*N)j zl6i9nIt<+&jmG{oBiG*jf;Nof_3XD?p8Os_lUBINuFBh-rb#O3*9&7X02yG(i8eJKVFwb3!PdE2j89tx)| z#bw+rFNH1OGmFo6-$)X1qUA&5d{R%MVJ*pnJ8CsDQ)k4_gM7gV)Bw1~^p{~|_EBej zjG>>uu!|=ZBA0a5)YJsswZZ!|ckZZ`2Se+UM!@-t1@Rx)QV>&yniBd=FAkss=135S zovKdET`JdgID+wKdq#fwKS_M>LC8B92Uo6X?X*fMG1_;xt=Ap`M;VyP`AV=uMvJC; zQkYydY0cbltGBkYg5rH-i`eY0`5vCsmCvwgK*7&W&3k>QaFmYsH8Dx;%tj!M@84@C ze_u~wN7))H;D$PgK3Kb*`f)F|*zaU5R8fuNjvCRYBCb+G`=s>(-O@BZLZxHH!o8bt z&}=1}LkcCy(n(rgU8QK)ODyHteQYm@-OQ~P5c||Y=TKW&IkLPB>k8~8wzKkJL?oSF zo5gF}F@9|klV=<8B+(8m>uj4M{t_L5f4EjXBtBU|%hUZ^}x@ECbc@TAii zi!-z_8}Ol>;a=PIf?ca<6>=cruEfH3Au?2#2nVVWuf5Y62ah2 z5OhlC@Qtzy4a4qHWTn$jO8#Xa{T#sYhj2qAt3=bGOUGh4b8Q+wWv#EkbDY7 zhxbX}C#=QZ?yjx*#hD980ZR927n!Q=lW*5JEb5Kn$*_%0QMpgwwvIE2K=8$kBRvd#5rKSKq&X2Qw%1>Bk(`#%C>;m<%cI z+<7#cRmF+wFBq>8+LiN8%M6jxe26=^6uy;c&y34(R-KH3lRFfva&fO@DcDGUlbhTc z8h1aFkYe|1keARR%F~(MFAB4m{dEOW8vQQ$= zEneI50AOonL^w&gd2VydBZC@6cWbb)G4E)LE{wgCo?}rcc)~ZRdl4d5ha9!9Z@t&o z)xV~fsXXE$lr(w%DQsRB2~HS`ZFrcm#&&l3U*Erxq`iNUAGW25&*dEptLy8O6cod5 zf2D{>u@~tRbn=K;=ncq4D$xckrQgFhzO%X{+3icvMbveMdszWvxr#P*ZZj_7NyB5- z&+99nk-LT=nr&;l@^M9sUox7Gsc1-}#E>iRcbH+AF13(h6AUL0Cu)sl;M|qTAdHz( zCh(JlNJUWH$u09x5|Zgu=Lpf%4Dq3EPj&UR-!iw(pa7F#IAlHNecl=VH8Lk;Q|x4C zSX~4(eHAE+=b{6oVB(&=cNRwW>x0nQYe%hxC;1W~VG0Zi$Uh@QG^528v|JLogZy~HO}{y}vB!MX>I)*fVVQ)h;SALZ`k?szbr{a>HOUJ)=p^fzuVl*E z8knZoQhdgf@u|VV`@F?>zL_^H*V=GjjOc)`j(d#a9@?|BWpJ}rS0lZyr6n@YaDz3H zqLwO!vt5X+->Ic`oP|@c zP;^Rq`h)r>@q6;`xpEDyN0+yAmB!$`vDtUh%sQ&$;LUaoDOe#Zv$g^@!$TboROKf( zV^|MnY8W*Nn{1=SBIN4y^R^>Xo1}EC$HO-aDlV_T%c<3XEzCACMAh2b)bue%IM}%2 zU?WPuyS%tq#oZJadYiG)0n6pcyXKFPcDgb}SF>uD{#uObFh88=tn4eD!fKPfXQt)L z^PR#}J-c_4v9S<+O&w7Oe$fMbM~8>5r~_95HnsFv!~KXhvr89|89I(dBx|6J-AM!T zN2h_KCsA+!hTnd?1Xj}3-!~`)9^+5_bcXeL&A6xHdMV+0k<|yP)iwKFGM?zV6SFtr zUi_#x%BdugQs32UP5MS2Gaoe|#79%gawh|w92`bw9Gd4$PEsj>;G>>BCSa<*aD4{d zvWk=+GX^n#;uAJw^MMb5{!Wghg+N{^IqJV6p1Th@cAb%lPxkk^M$U?Cy58HNjf?i< z4eefeHX4H$$bkMUSRbLPsCAPjki0tSQDoPC&pG!dsxH4XNS^g|Y}{AU$;nA%)G!$1 zdENhg)d$XSQZt=bAsVOuG@SB+Txj|IRZ@SF+>yR)?1v<1?D}IE>MD&0mLhVRE6DU0 zMokwG#AaLP>(cHi7d5}TCABE}=~iM+3isM0!^ZDexBL#r->EDFjZ7{{2-jaO?Zs=-la2PG^ieKv`Kri3746?dcuXyDY^fObP+c}TvhXG|FuY`{h?}XD F-ymdW(UqJo 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 PROS2`z0-w1Sl#$Hyi!;a literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_physical.png b/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_physical.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdaec552726990c77bc3985725e8d7f79a52532 GIT binary patch literal 4553809 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

SQr;jP9`B{<`^ zK2PWr*-8N6?y{;$DhhnG;!|_dVUu=Nj#9`9^^%o|jV;W%zu&~FuT}@-A!p{>geNr4 zz-^cmAOHafKmY;|fB*y_fF!{+0D&e)Ae_Ml5cmnXozf!-e)gWxi8WMVr_B=2KImN) z{wY`Xd(8M;Nw|4FHNF~Re$prWW|py#6{U>cq8r2+c=S}Q|00Izz00baV^#o$} z#trR)#uo%2ke)!a9~12+uxIx@dT!QD--G_#c7ws%#PNzXs~h&53w`Nb6}C8{L#wup zYy$RP7YFqmW-5a=Zs@#8hlbrT17BWqrSW~Y+G*a$Zv{*WcIfrh;L{5=Wfy@ajqS2S z9dMO%@4lbLPGSeVF)ofEP#FaLAF;}am?$9t0SG`K4T0J9v(lX9RM`o{OqVD-4+4Nd zR`3$p) zf#-vTwh({-1Rwwb2tWV=F(eQ-NrGDwF}z3!sq6#-KNo?+M0lNBcbL7;#P9YyBvF;J z6mSwg4Ae9@TJhDY#{PU8zbq>qZm8L&!)A?JML9||k7AvrP0CO`KVcj1WKB(xQD^AA zQ79V@5>4UbOM_b+#Vk@{c#^_s^PCSJrDsZGg^sspvdRuRBUKEref0SG_<0uX=z z1Rzif0!R|2piCbSC;@@fhaTgvkNC~=fBVIwH`+Tc59~R-1TkdnLVH>EzWP5hn#J6p zB2YVq)d4)_*8|}}00Izz00bZa0SM$wAWo8m)=08UGUu73VHFby{9FVM*AKjNn+_-K zagZ_i^Q&_k^oTE4SWWPUE8rx27^rcMyvl|bQ+S7s$}-lejb~SC$4vigW4&Kj(sCdG zFVsXBVVjNTN`X3c?;E2C{oiX6JK&*Usek|kAOHafKmY;|fPf>wn?Sh|AW#hij@otf zE?abWBU!#?)rAlLwvirDgdzIx%1rOxxAb>jOy4TDXG@PdTNG6WJlo-84*>{300Izz z00baVK?IN_Drm9@6#^*<`0v-4x8%)*%a)`x&Etf<&{ID2L_kDO&wTKzS?VpHdQYVt zR$`$vsPiFHWx(@6L0bqw00Izz00bZaftV9Ol8E^P5gr605%5D8#Ac`R8WZKxZf2-|E7udt{CpfdKpF^bUt8wVUO z;GtltfItNhX#6u(0Ra;t1Rwwb2tc4R39wY6GUtt`n=paC+w2q`eWN`DTDJ=u^xPtg z1q%KH3g${1DRkUqgJ&&$c;fweb}D1x%}*1nH->H7yL;ztGB$~=L19rBX_(anyhw;} z3jqi~00Izz00bZq2LebEahL^SfIvC|E7q>^PupIWe&vca37dXhdTK?3e|F?{eRoeL zWcW6IdG~F040zDlVcYgGo5w?IDC|_y!XM||zi9c#?$oxOwyqm=L{hVgs4Oh%A`Q8k zfENi7ZXo~x2tWV=5P$##;y?gNA`Y`a3=l|1;K@a=eBr4QNtZCZ^wAsULXSwCI`~LC zl(;Z{;9;Fxx3`*%g+X0+J#Fw&zL_?rJaFgXu12r*xc-GZ{j(X%+T!5$*B&*qllve1 zz5a*Tp%t`xLh6Yf#uTp z1KMxW=7Be#>DqD2LwDKp@LfiQ29V)7=@a+Zf92X$S3Pr^8jkATZ~C4mZn|;h#a~~Y ztKKs?l>bIuT=vB8$MziJmUwh(-R_Emr)t@SUJ&udr|-*E=QiyR>ouxxm!8iqdi9C- zgWFhy`pUDSQDE!i4Ag}ECk*mNop80j8yyB}R2`@Z9EQUSH>rse@T37#34xdsi1Kq6 z^C1u(1Rwwb2tc3$2*gT~2z?H(0Dy!Dfl?5-dESF2Noc*pIeVS#dcFGT+s=FNT9ucr zUh(^v?lVb3%MGRs`?mgBa1X!x;+P%-HXQ1ccIpq?x4-ttpl-X$!v*_I+GmGBAFurU z_`YM!&)j!jnElY4G|kO2V510UKX~262cBUYNyx45*){xp)$%~Ygu~*MQq$Pbr)N+= z)M4kzhv@a5Fz_o?_7B$^#Ts~G7?dCoR|27*skjD8To8Z&1Rwx`$|k^r8!h`kSO8I{;-gEJzH->Fg^Sc-C`QBeHw5LDXw{HCQjhY(&6`$JlVdlM8 z>FEqL+-Ju@zH0FN2d|xV&o7sKxgu#V87uF5^XYT$yGl;dSoZJQE4+AaDubejIC~bIQ&fO{LCMx{$i9hDqMR-KTs3{2Q z0tGg^epY%LCCDBcR0u8IyNCB;od&uvVkC?`P%5-h0W)D#*C|rd?dkyd~PI zBC!}EN?&RyGyfH(0VjT6fpSFufmZn(MhVpiqP_yS0=;L2x=_7~wp_VLG+zQ9h$_`# z>4B$;gn9_XnLx+YEr$K84bz-0#;GWw zrU4QTDU2=+ibC}sU4sY&9C1PetvG}L1Rwwb2tWV=5P(222*gQ}&~lB$ij86n7M~D+ z00bZa0SG`K0s%gdM1X_|1Rwwb2tXiz0&$Wg@*fQzAOL|XBH%x1QjlRqf1IQs-QffR z5P$##AOHafKmY;|NKXJsB0V3@LI46~BXGw_mln3~aW|cv=8=lR_JubHKmY;|fB*y_ z009UW_1Rwwb2tc6p1b7i>>6z0b1Rwwb2sBLstdeM&^UkOt009U<00Izz z00bZa0SG_<0%ax;qg4_$ER!hn#X$EEfB*y_009U<00Izz00bZafzlCRl|<=S(-QelOezdk|s0N3={$ofB*!_N`MD9%8H-PApijgKmY;|fB*y_009U<00K>w z0Fp#goq5I$0SG_<0uX=z1Rwwb2tWV=5GX4FB#E-(r*jBE00Izz00bZa0SG_<0uX>e zQza0my(IM5CQoiQ)eDhvLjVF0fB*zyM1T(@F`5iQfdB*`0D)>Iz$%Gqo?XTU0SG_< z0uZPa0<-I9RZ6JD2>}Q|00IzzKtTzhOB56*&L98*2tWV=5P$##AOHafKmY;|h(-WO zA{r;GAOHafKmY;|fB*y_009U<00IywD1o?aD6wYw>fOHVxa+4K3pzTSK>z{}fB*y_ z0D-ItG^?p;-csNAf&c^{009UX}15qV}}nPUfkj09Rd)500bZa0SIIw z@X<#f{pL5n$z;WO2tWV=5P$##@+A-#NkZf3(xpqEK7H~X5bYrV0SG_<0uX>eegxXL zZ=at7T0;N=5P$##AP|W_T=tS^);uneM8bv<1Rwwb2tWV=5P$##AOHafKmY>y5r~Tr zu<7QV@*4=PApijgKmY;|fB*y_009U<00I!GBm!}fBr1s+u|lBo3CymaRr!Np1Q37# z1Rwwb2tWV=5P(1x5Qx!+5>-HxAwU2E5P$##AW$^~TGX^?JeFqKlDlyYM-YGj1Rwwb z2;@ZoNg^+NG==~KAOHafK%iO)v}o2UFtnC6t!nDO3{-Lm0SG_<0uX>e&IFJoaz;l( z2tWV=5P$##s+&N4e+zIg7jkwPc@j(Cr)kf^!Uau zyY|t)Lk~aZ-FM!4=)rr>J@?#^d+zz&Q%>1*(@h(hasUAcKp+Z%+4Zxcm|+6}2tWV= z2?FR62^N$f009UToWM8VeDkM2{poLi``gfAdrp`%wL^!F1@8ifg(A>nhn>dPp8nwn z@85dM4O7oLYw~HQ4Ie(dP|ooK0SG_<0uX=z1RxM5fFu!SLJb5U0D-~~ShZ@^rI%j% z{`-q2pE0A?F1-um6fZ?4phs%X{K1bNp8LR+S6=zX8*iL+(n-ylH7jzTxQ74)AOHaf zKmY0cVe-uoP|{q{S~ z`OTF}mo7d1^wXO+=f&BDB#bWzKmY;|fB*y_;0W*;iz@*F5P(48325iUpZ)A-o3w5> zW$L-;5ryYl5|2CV*z?S3KYID)dDmWhZAm($69_;60uX=z1R&7l2*hiZgtnz`ax=hy zApn7@BcNYpS6=zwYrk4I<@Bko+q9{=@in0VZL`g{PCI@2l~??{Teoh99d=j~8hMi+ zDj!Ii{3QSY2tWV=5GWA=R!NiyG~GY|0!@d&-FM&p`s=UPojO&obZ9!GuGW!iYl)Li zsr$np{-Av&s&$Nv3jz>;00bZa0SJ_f0Fp$x$kQ(bAW)qImMmFv^UXJ(@SX9SZN5cy zjhedM95es%e>rAwXj!^a(c(kT=68of`TuRHJf%UyT;Ro`8` zY)(3P!XEtw1kBvw%o$T|y5YAf%j}ZNewEZFT&X5%7_JZ0Y`^^uPd+<8P+7>s+4Zvu z=`Ovm!;d)jXXl@L-+lKTa>ya+EsK42?%cW7MUVAgcIX%0UH@e@{rmUdbkj}kkOBmX zMBtTIURkqd&7wt%-hco7Ko@=b^y$>8Q_r3~^*wNk!x$3KHqAHQc%ucTt$wXcAq{~5 zx06pknF~G*E>1zf5kQyVN`L?aAW$#@N&}yN{<(Ai^JfL~xY5z6wI`d-u(7U2HHVEm z$_`y2Y$**v|D-ucc?cMD7?D7mHf;|&-=bh(i z)23Z^*=6Bg^s0~(PdxGIr=NDGx_9q>`|Yk)QVD;rWdF&heL2n-*wm(D)^_~U78Vsh&G z>#sLGLLp6=GNoU?eldxSFd*>en{WQ^ApQi9ByyRfx8HtSFRHgM9p>VNHV}Y7brI0pKc9K#nUSORF6^+5|Mp>eZo~Q1 zgBrh?bK{2}uhhTS7JTrZ=Uv#@TaB-!5GFckL4-4tz1jTy!k^faA9)68{#`Hj*oPk1 za5e6GaUb2ta|~HFZ_%>l(BY#V@}8T>(m{#LwM62!+itVY1`QfCefo4eqyT}E5zxv4 zt@d|c#~pW^9^A05^>BwCgVGXrtBGMD5Z=chf1F#8h4PbI@3evd1RxN90!R|^pCclK z00b(7z>6=wsO9~=cIjQfaHTSs9w7nZmfP;qCKArSgoe|nO!NEt*-y`NhpIP?K=#+p zxyjYP_ue}<-Po{q1Yfxk7(8U;zg~Y`Ie%`=OVjG7KmDn{L}K>r*`?{1ULX)4(7JVN ztJ!L+t@hq~?{VYCS&dW)e`6G@k53`+Xvx-FZ=G9gh4PbI@3evd1RxN90!R|^pCclK zKrZPxb2nY~?UL;<)6%djt z&Y05ZuDI4#n2=%1C<4tnj6y(<zR=29*B zz@D@C(Rml7ccC|OI0LB<_N0b2(Jq)yjL@13{Y&)<4zs6_ia^hucm3DD7K|D-DwRQb z>$OBeFFSBCbne`F=FFMpji)rduU)%V+qmc@ym}vsUP4luPU$5#0(yKyLV!KXpvzS{ zMQ*NgZl&I}H-xr$$ml^zguYUl70OR4|I|YO0uX2-1Xv}}L?)VHLLeQ1i!Z)dw}a3l z(lN?(Zr!?dAAPjAup3+2iUz3++M^+T2#-AS4`&d5F{tW&ox;S6^bR?jlt7m*T|f9> zL(ZSnpp2Dz;fueE#Kegco5HS^(j)G;;|}Q&BCoX)W#muS5eewejaimumBg}T%cAHJ z7G$bIq5P!sPdx-60D&e#07;^WOmrcJIlF#VA>802egvdN=p&*QNyIO-3X4dq<|R#R zxz#p>id%~$Oh5>~?laJfRzKLHiolCF%+i#NrAt4z$`TaxSV`Bd+w0$My}E_F``Lx( zxwCpJh@EvcBZlm*8jZ_rR3mR@7B1+lUQuGr(;J7IN2%FztF3e1eLsr-d~7bd=%R%S z7dj8S?Y7&GfBfToyj4V7CrY@@2Zs+IzQYa~*ruKmiDEA#hLa1SrN^pd}o#DobGHuYY~QtaN15b*cD)NTxEEI9=M2tWV=O@RO#N;HL8W{eO>PQd>J|Lt#oTen!HNAL_sa#)#a zzx?vcmMvR0Z{8x4Vbt@Mt7~;bDwV-}EnBwXMG&?W!cJMiPMK#rRn&rlmm1=f0LTx2ys7I4U0My^{p<%I`{QB3w)>?Ac%VCEdR`qZHM2{%;6;(X{+Ug{ubGPZlE3dp_mfCk> z+ikb?|7_W*R0S<)k{|b=hF(aT$}Cp(iuSFy-m-^Fw2V=s_Ftl!Fv3Kv@<&DQ(7&c5@REo!6yknRg3#suvLEADMe!myb~r(cyYU~(uB&XN+f_JQHirg%n&FHfw5!9%F&=fgCs_{ za$)>7NiTY8qgAU-3OICoyrTQ|Ju^upcN2KlCUKVu6Kp)o;Q(dkW_Y& zgrO1rX3mW=PnuwTA9eCh@f#yl=8|EYRj08M{4>flG zvb2lMw-hwZxU12X9028eNHytdt}lrWZqhZ7d+)v1#0clvO`k>`P%d;<11#fp<)fh7 zbO`X^M$?&VMhbx-fz3AC?3P<@dG^_7(IbLrVsM;T_|PMZ$K#VG_HHztJ8$X=reBn7 zl%@#Snh4jmDHKVc+Hf{E-*%_;1(juU$z{KCl@caw15nl2o)NxIA$!+Qy;w)CdG&q& z{qKLT-AvrL>gwvM`|Y3T5tV)c+j1Ta#D9pxjZ5iMngP1xDlBUF$*|5U`|=aNG!A2O zO5?iy_S=L}>_{%1&N4UUrO45Ty8i>=M zh>Tqn_PPp0!eP@PP_>eT?icAf`R3l24xfMi`J_`TV?9xCwkltH?X^iQ%UJpMzyIA2 z^0d=VQ%xWqy*y#akRdh@9s1h@1dNj&%BMV=2leRRc}v=)*p<13q_O)0(TEN>-~d%- z8*Q<%2d+H@Sz_RNUL#v3*vF8-d+!FHZirQok_MbsA}PTaL`*4g+CeyGt$Og+eMs6c zOKWTLgiiU!@@7hhmQjSAS53{`ci(;8b=SG!bno8%```b5)eJ2>5cG&JlZvbHQ=o7j zt5xwDk(QL}{;lpIyD$F^znW*vf|P?*78czYH!K>vZvJcFQBNzQzwm0qZMZuMyd8d7X9h=-=>HJOP2ge?G<92HYAY)rWP2fUzB_RZ>mI z48rP0{xf3E3tMQ@rj0q&ViPy5`T=o-{cA>MI;$_il*(W~Q2xtpr8vmI9EJ-ezOKRn zP}4*RRN;dgO2Sj6>pG=-!v54IHC9fjFMYz3ac*1vDUVfdX&rs@%{NxIf`T;RW74Ea z*IaXro${NjUT3AJ1k!1>)tA=WYd=CY)IcO31T+`5y5y2eG>WA6z%@oSah;~>Wj%>o z<=pjR5f-UXkdOpQ0}n?is`_%%sz())8rZC*0+K&=>-Y1|Ki4&&AzO_KF31NTe9*rh zd;`i&hk$!Rp=!pfts>mI21yAf9GI-&ZzSOl*(|M6DuZifZEfX+sTF3t>86{xvONW3 zr>d#&o8SD#hI8z($5!#%KhYy>qAR-KXPejZhOmc6WER*Uz~7a_s46>k zIj4O3d9|2`OjtXxFrpXaS+1PDX2DN!U8M|6Hd2o^BB674-JRKsFTUtcv@bCjkU&&^ zz27!q7C4kdrGBkaA&HXf&SCMpmRZg-VqFxk;9vHRhWMLiCnnN;?DE!C;VukaNH#_p z`$~kS(wB-9dAY8u;z7f6{0UUsDhcJ}S|*^pE-8BZiFId{X)6UyWh_@ZtGqF(tCCeJ zfUq86z3Y^6TG@p42xsF?X{6S~3R<*p<&3>36*uGJ6$%p4JMW~sUF@_QjW_)$G6KmN zyY;K9E1*Z%DbY@9pUCBs4>03qy%;P^2;ykyH2GVtUYXE z5t>M0n{-;iPMNVax2It2RMiyz_{Trqb=O^PIKzewtKt`bqDNH6Me8y^8%xp*Iccit z)CAX136-Cks?xu8>~b(wYKehzEqC|WdW>PgzfB!T?==L!M*CK#k6*@SFO1rE!?!mw zeq|12(}vVmAFXXEhq;p0U}cNP)%fFI|NXW+LTAg89{TCI?wY$r5?ZXF z@B$I)lGS1eeMv=en*%r-EupZhSwLi9he->!-F91GDMr97qlbWf{)ah-wBLUFsdr7N z)`&P7`tC3F(6lC%SxSjr*Pg9wQK&9Xe|dzaBb8#7KU+Lh7J;mu%t*7q!gBL){$2tg z;Rh)sP`GIARFp7Gfw8ARY#D^!ywP>*_WnP6XJ{HMQ96yYjdTeMZ_hpVtk$=GB1+gS zS9-xuX~PLrn$al__48KCPhAuL{;{i3zNUQ=eKjME^D>@N%4}m%^5~DzMdjD%u6ELF z-G&@UvE|TLe*E-2=OO!PzWfJzlv@qQ@?7;ERxSLHY{`Wh2BZdaVxcO28@`Xl43ZXn zkwLA(0S8(Ya7F^2i*cCr3J<{Xfx8$2sMB8KCdZn)}Bb96+Rl=swH?zuO7yR7V1*zcm<@!~Ge(tKw)~N{! zTSIm>%E0|3Jn1cYQ(n}>(qpx9#C&N+21?_TI&s|<>U%*#5(EXW2{jrD&j+YODJ=e_ z;^Hq2cJ-w>HBCf8DpVJM9@DW|c0sy&zBf$*CLEZQkcNY;39$S;o$;m{HoHt?Q}9!^ z9>SCe(-dqKMQ)u&;!}Z|XYBz~&gV9SlKKyuP(tq~8j%f--tU6-=UrppOvR7{O2Wq(}G?LzH3q_8F6?q^VkzUP^4^r`f4u z_Or)uqHX~vZ5|z(`AJjI5(&%jwUXa=Zms+Xlcw}rZ@sk{2UHS2`}N5OY;^k zXctJU6rZH=n1L(!{U${!vxqYi@LY^TKN9mFkR+_$FZeb-Sl`B#lS1&PK7I4BLuw!p zCQv5FAGSYwm5g55Xw^_2MOg@~!s>UAK(CPps#{MnzfVW~F>a}j+E)=0J!DwHz zfQ6 zw1;Q}KmC<#tteC<0e|g)vUmS5JXkv`-9Zm2B;B9EB!KSQ_Xv9^L5&6JbQAX~3{@tL zHivkkESJc^ZTy?)BdL9?*FuTu)2GKj=7Yu9eK-FDMUmaP8Wci;81BUj(7Su@>V?b4--nd$TNYp=cb)mL9xjS70Rs9|D)tE{iDU%GhN*K31j&6+psymhBmZCaV- znpJDR`1cpGw;C0if8C;Oo3?(9${Mo0?A1?)e{i@%Q}-zgrCg@h9i3g>?T(~ zyejzdn^@q?QpM@lTN71AyyX0l@|+PrlFBU?`?{)JGDKcL0*OCP1$0_^SAqM<{sMud z!T1Xwk|yfP#`WcraCb*tiDFV$C8$&+;a>a)hMoElwo$rkIzsrPOu#0N~z7OKWpLpX87#go-W5{krj*08l6Rsrro=*6Ii9(ri$BPm9YN@$%PvBw^J*zZQI4N3L)sBPP} z_IrNSs#W*gb5GK!=Fgx1z3+X`PQCQfOV2&`oE=(0u0C3{q+5@!RM4FIZx&{KA(j)@<85;c)SSk5(;R?Hj1vyrzW`p$|X&Q0jm?_1R~i zJ@CK-0W){_#v5;(c;bn6>X~Pr(dg{ZFG#=GefQm6&AN5#bg6`89i5fgsi&UmD?7fE z{L2!0bay>zrW$sx9iSnt|rdrdxu7uOpbk7=3=NiTp>5#}COTZxO2C*Ozfd{E#R^ zprQ#>i6o&tAZ;3yNhVbp%s>UZO|7zh%JB_U_VaoD7EYQT2bvV=&^}=K{{2-OemRv* zcu)_`(RmS1?W4Bg5YQJm-D){x`UVN1y>4oY`A*nug z``uBF2?6CoT4AocodwKS?d_R2-T2%8JnzCZBh^9!2@NjQ*Y~g_p(P2n#iL0BX&e^g zlm#i#L_xZE((5DPg%74X*jkUQo^Z*3T;F_C-zIbiJAb!1d(aX&EfRd_p@&R>);r*; zMv~Zh=baZWT&N!_tr5@)h%L6*LZI|AM5X9Tssqs4w{P#?&C`#hEd3j{&R##Eev+d~ z$vP6L_4DgH)Ix(#KKZ2c=AHe@t-iJ8ryqY-U(;w&gACerYU?kiXxphx+fHr6t0bB? zZ`Nt6j=n=Jn)rIny1*)luhy(xyXLFSH{aYWl}ahd@E;Tj2fOaNtC^{wKXcMD0xLdL zFB;vtbu-HrEn29de*@W0DcLKA9w7}v*yTK;7@%y^Q9}xUwky&o0&XpBP<_$?`WIwVxbOmeD)&&I_!a!>Rjb;yZ(pcUoOH?rt&fm5 zW$#!2>Wb5+OiSZgGK7;Pq+gsdWqROg2ho0|HSjOJHNK{yglk!|Zp)?> zqF1k85*oDbZr{WA z_UpU%?A~Rkt=H5iZfpBzt*l2gb{N>*4$~Ai>$<7_1q@z(YTjobedfQ~QV(1le)!=5 zv!sVoF7%c3RG@O7ef9~|6#P&((v!XpAY(_;?)?{YWV8<(_&I#|Y6n;jRbWqAg{dCmNx_x`Up3KlEQ$b}-oc3kVXHDJn(U^K zRIYAq&p5N38x4#ev#$%%#iP-s*GHtJ*s=&Ul;U6_g{=gU6Q5EVL z`Z#>qTR*@1-S1i=s*lv#M=%cI6(k1T+t;EG<>XG4(CfMj;x>LxX4lV(Ur=R>C?HDc zrnsK=sI9F%{q)mQJuy(WSj*9IxpWDCp{L4)3d2wE9Zt=-zFgVYB5d7*&W2l+V=6ZE zStt}`90FZKpzH*yVX1^AdX8q&+s{7eK(3c6J@j>nKoj2^<#-a1R3#O{UqcgzIQnHRs z3zyn!Uj?nDP>qcBUC%wZcTFglpHzF2^We92H6{M8$Q7-W6Q?$qwvZ-_Q)^HD&72!G zI)5O(7NNF+F!QA;DoC|B{@BB$y%?f2o^w03WXWQC%s)2|#b~9C4z(=cy6diU&b3VOnNctRSDMN}|UvbFBm4s{MM8>Jn z(u9*wJ~;<~S_$D6NvI8F6VT(*Z@;y`ugSlx+}nSPrB)aycvb!R& zfvDfW_8NN3#av0b@DZt@DCHJv(pGQ3xgf9|K~l5QSAOR^-!TnBFTcC~`s+&{L-BfS zG7Bb(hp;j{`+9^j-i%3aWsE9yl>Re1sjV8FDPsaWZrnHvCDlTS97be5tzfGpRO1#( zIBmii_-Cz2(n1cw=FR6?K<2~>k5Q3CG%&FvC&M;G}JkRIVbrJ+?bdXcLZ z{Az#kYp%H_AJ3(4>+52r@0}jAC7?G0{OeyEwgAhvZ5n&!+gc`&>L~|h;MP_)H{W)r zJ<4G9D#*#b4?LF2iEml#vV|x0#LB5U^+gu5k+5O{gjHTU=cZKNd_-oSTVdJK&$UXz z-d&KJlOnYmJ$m%0Q5zQ2sEeC#zPU&pmCG%vM7hY9tY6&^*O%)~X`Yryl&tG=bri^E z?b(DtJbrzkNx-srhnfy8PcT8&EtCj%=Z7boutAg>e;tIoBy5RlWt4aV zO?>ixUw(a{iEl<30uYEu07)VeC^ExHm||e0l@Y!kAu;0FXP?zRWigyVE$5L+lK!iD zADxcDwNiu-bVKjcPyW5|y>|-kTMszAw%`LT4G3i2sh)-YpU|etnf-db zCAKU>b1PPQ_wH@ICtWDv?<1+O{m89h#)6pGQV1tTm{z5FpICZV0ldDBkg8#zNvin$ z`f|-ksv%Ghfl4G$4U$B**=Dx(n%5kfRN~c81u^@2gp>$<#cEJoNU@rZf(N5z^Ly;k z@2MvqDY$3nP+LVP>;CZLmG)0HNw;HA{gcnmmzlnsf%FKe5_*t9J5AV5k@BoG-W(<^ zB$WUHW0Z|+s~!WV0*8-0{0~=Sfdvc#htgIgLpbMJEn@OSz|0*g3^P^}={Q1>zDZI) zNh|fb#;2crWXzb+NzcZia?+$p{%%Tl-E~(SqAF|*s1k+c87psonr9hltRgH%Fn$i7 z>YWeqAtR~C)FMUYzl+1*_;cs4ZZLx=1zV0G9YGzLBw@WraUvTZudjKfY3?^E_>2Vf zizq5dnov0ffvO=;g_1dOsEQ>G;naT}n2A!WQ! z;}$&eL?Ljzl0DB+Jt``VasRt4XQbPXfm>m5-X z`hHU34fu)D#Ntugd}bu+C7rX56Br1G5U3ym)gVb|0lc5-`BFmCnF!dY$_)Mbj9X?V z?TE?}6Y%%596NSwiF=RIoqr+e0`sr2D9y2nKY@Pz`fa~`k9+UAJyxMgn9x!Pw`4$p z=}>D2$`aws=?(A2(3jqk;R==Vecifsci;8rgAP8pLx&D=j@f@DsN($n?|&cXXmgGY zRU&6}ac<}@$WNN8MNBE>M#I6So->wH=FNorK+ikZsGX)c6Re~RX!DqzKxv0Ya{pq&IDL|m=2~>k5p-J*H zJwGo^HGjT+DhXrh(!_nvZ1;Tj{VRr4U8D++`rHWQGiAB;m_sXnS+%X{$iWXy@*ps~ zepVi>BQ+gA{(Db8@$kFvycNm1ghp<61wGTC#SxF3tVN zeXCZkJnG0JV;o~cXzrDu7NlMY`tG~$+F>;nkS3~WHr-e(57lAPd@Wp=8w9^2d5Ds$ zChe#oexx&)A0^=7G5U#r*+mJ*!T)F+UM-;@E&CQ*KmMc`Q&pM-p)Q<_FIJ>#6{z=B z6rD0x0W<%w*fZkm9$`3h=g#$mp$vg0LZC`?3ID!$lwUVd?0tPBpfhB9aU{JXPEMLF z#*Fq!Is2_L8u-RVD*M;ogAYDfq+W1aMgsaYGj{C$H~!x>t5>fsV;E_=F3V#R5+m%5 zoIg76f;8d9@YMSY-@WIqztq-FY}>YN48seARha#o=NRh={G6(jQFF_{N8cL9d3a7e&2of z<-E8g)mW&9Kt&L!5=mme{q{55x88bd#-$1V?;2lvFel1gO)}7aP?x9wDvLO{X@ zcj5bw;t-oC1pJ41{ACl?Hp<^2GcHoWzxH&k7O5B9mY2XOr<~lbUAvop_Zz)drM!{E zq<5{4IR4lTZ-mg+mJxTij7jjzmoNL@Ialqy_ufN?4vk4j>B9)T5>yK%lKwtS@1#=B z22_bu8`4$EaGH3WNO}C4kSfEr*<--02_d8O~nR6ak5I=r~uk2lUsmoDSzW3gH zU0K(LK0lZcQ1(kjF zHkCxzm_z|PbWVyoBmM&=>P`X7nKS3=tFP8~cO4qKR3oAu0@X*LN+b#0dG=L+OD?%2 z{ZvU}u=G{ZLs&BKU!az)9^tz77wKPj-F1O@PCM zT~2nbN;~tfw35X@N5v-4s#U9*Gtd5D(ZXB)@V}@M+Sl@`UtR8)Yk@|&9vjJR(pRlo zdCk?Af9qRa#*ZJLn}@Qr@^`w_9&^`Ue|=fPC{3rnDv|T;?$U%xFBu7p7%{?Z+zn)x zs=3_NKWk>W75q0^D(6>@s*d!PK1mMuRS-W~ZE?^+2id|6<)to1Rnl&$vb2u^4nI7Q zY-^OXTfhPs7K}6^UqF!%aN~_PI>`F2Lk-PFm$Y{^_mgvV=N~3*lB!agvfoyO#nuHQ zJwm@X0^3R!bw)Im`brh5M!nBI``Fol)?@V)AW&rlszj2|tjwG_)8DB9zWJ5Dl6 zD*Hh2GArtgNFqr(*AAMxP8BEh5U5rH)gwvh6PUl8L7AR1e@pgsdt9P`9cnsdZ#Sz| zFJqSh`em7&bIv(tmeobzKTD#93Sf&ZwrJkGxxPC+!e2&_m1m4o5fD;emC#ZYw=6<4 zt8zw_DwW%U*ZbLmVjD7Kh+^}fHqxOgSwK;6@+EfIy?ghc{`99Ge6aA!D}MIrr~fW- z@3HFcuyIG}y&uunN9fh1+J;mA%D4;Wf`7ew`NijNv&~jN`N>ZzVhf4DjQa~E^mnc5 zf1l_>eE^j`c}j0luwVm$I1s3$+ddh2U31Mf z%Ii#bQ0DKFe`|Q`vB#Papa(Z@x#bpHybv~4E9JKrU38H(&#Iud`bzbrfMgCutF+Vk z^wZI-dcinAK=WnH-QpDAKxYFhV*InEEW2yZ=3P;R1ItYdE9EHYD;Jjr=jR=A_%VBp-nV)478zSrpMe%iY=6oQl`^hXt5)89$Df~g{NbaIKI)ibj**lc ztH>|C^iqpQ@7J($pfGjn)G=emSY;YZv!MWi{0S7~X1-EEeJN24$D^DrT&WtRaHpSs zdeT#ADkXO4E0sZXpM~;3S>RRO7OGTSlS2 z(#(|EXDql&D>`90Tt6WLGkP|IjNHsJjptO?x!OkYFNGzk$YNcqAc00-evOr*bdmFQ zWxY^qd(Ek4O>-JHmL8!sFZTFGc^`{#*MP0#2uG_L(^it6rLs~8v~S;j z#*FEYKKkelH{AHdqYv%7{~?2ijA+rKDGC$upE8LNkIeo1BXb|va?35wKYw^KBW3=n`o&IF2m^JjMbtej)Zr=ipU zsS`>)=|-n)355)ly-GL8QI_D-qxG+@dYOKDzIdXu> z|7Y(_z^^E-{O_>u0T)0J1x0X)0Zif=1@{#}Gek5IGf8lw<1#ZbGEv7!G|`Mp@+L+T z6UHn!;~HmBOfYVUzHtvxBO2U5R0I`4QFea+kCr(etC!o|w{PFR_n!OsVD;%!r%rvV zx_^DXeX6?A4-FMFZ*PCvb{`9;j*REY#>!!_q5(M6P=k3QHeel=+b;Y@7 z{mbKXAO6RG{0bLfIZ25m-7y_Qzz{G5ng9X4Z>I4QO)#L=1w$YPfp%?eZE~6w439ne z=phpi5=mi&nZN!0{-X~#{P4pIYtb4q1PlQ~pm+qJAs&77(fjYepO-*u*REp&ufF{T zbnnrlYu9eYJJZT7wzX|!q3+u&mM>khc-gWyH`!#Lia@|9 zi6T(8HVgqnz!2~dU{8smAN)MI9U20LfFWQA7y>Pe0Gmk6m@z|dCEox=p zD;NSzkASV-X!;?pNe6AQMNMFhFluN=0Apf9zz{G53;{#H5NHwv*vpc&8tiV#q76%u zXp%v-ZWsc|5HLz28BV5U2p9r}fFWQA7y^cXAz%m?0yRSbGNNCfFNKSN(dBIFa!(%L%%d1()DU>eQuc*Up{obL_>Ob4uiJZ>eD;#JaXj7 zop;{3UAuP0Ibkgs0)~JgU&_~3IBM~j-MLA%XxL)iuFODN6%hEx8uLz`yFuTs#Wj(`O$}F-*fw|x88d6(MOLR zJGNs-`x9B8aj{kn0YktLFa!(%L!fmKu;;DT8EfmQAz%p92LaL|rcIl++2;NJ<(ubh zv+Z{Eal%@ygh01$-9Nw2etYe`@1u`AaLfN*KWEOI(@#Hr$dDnG>e+cizz{G53;{#H z5HJJ`f$RtvC6OIFt7!-r0){|50vk7O{ME01b@$zOA36Su`|f{;?NbmBR~gPSM!W8| z*QZD9a?=gh{KtQsd*X?c$BY?M2FJ_?L%U>v+t%M9^B^$-UAuNW{)7`*&~epOzgV$i#kg_f5?3`vL%iH7FJHdAPoF-uZ^v3N1d<}~`s=SRTD0i7=bob=bw2f} zPxbBFmw%mv&m~WvK3&dEnl$N?pZug8TA@J^@P_r2Q%-5njuh;+hnrmv74hfxa{KMK zqt>NMm+|Arb8o3wC9{INp*{7~Qw)$lUfa9(Ci@?FXzngP@%Y^P=G^ns%P(88e7Q4z zVhPt6@p`POOI{Pt?fs9k*N<)J!3 zAyudtlzWoFgSUC$k-vJvhCAe2921ZG#|tkwn~%Egwbx!H^#2#X_yvzI_uhN&{Q2|6 zy@L)qXz0+P-~ayijiC@stWYolJa+R`4IdF~mj`+tvU!eg`bX_x-!n*nk!zfad+xbs zs>mlpTUNyoXgCC1^p4wH9ToWqxtd%z3HU2kahhw^teHJ~HuQ&w4>vk~+|%~mci*kH z+R8iY9io}!u1H5-e)(l?o)8~cZu+a<7H)X+#10JsL%V9eU8--@o8o;Umz3bXdOpEl(Xy{u4fev(N|Bb-aV8Y=;RE*mSea4>;(s zn{N7DTU%SgD#fTlf$h5Mt|y;-GPyaLkD&EC?zn@q3l}a-;>imyym0Zw7bnp)9YY`? z0z5|FaKjCue1x;Wv%B#TNx&ooa(o2J1T%y*NotvnA1vrQm0N+Qc3^61t<{W#2G#p)OW zhCtIHaOw#Wd%c^#StKLLH-EJLa-Q2(Dz6^?=ZA3wPwwlJobWZNF6%g&W2J`lOBZ_d?Dd(??J;}yy}R$eyO!6h ze9}oL!6U@CK48Frcm;P>QY5$!oOt4i+yRo*G95!83ISdu@>)-y<-vN;ph5BilP7z0 z5++M)JFQvvxSM|c`n4tw)@wr`hyZy9@CC?8xk^Gw1al%HIlifF=Y6a_SXNC+a0BC( z#^N)lgctY%zaccj$0~ntknPq8(c!$tJ}r9pgJ3I-D=}W8amUU)Hw3Ch06Kz~qwo@* zAqWcO{4ToaA_xlatQ|%n@c848Z`iPY#K;tz97UNDIq|-b66c(I!6~PGQ%*rI=tJb+ z|K7RoEOL}x84{yUpG_uC7|Y?pg)c&7c(t6G{hI`V-S*h~@*n-+-FM&Z(W6Ha{o3iA zfByL%DY4sbyKTSy_Fw(#S6!peJoC)lxpRjPAD+YqE_SEpu6@2SlBAaD7y_XP@O17a zNd)&mNSI_DYQJEi3pRL9IeGHrf}57+hiQ-Co$B!s@y)rj)!Y?fB^({ezfDX@ zv`>Pg=@&!j?lbg?6)SWoQZSO% zoFQNcR78LeQ#c)%f`r*ak|jYE$&3(TXp6#Pa2A3fR3}DQo@%U_s2i}@qhyk&<)tOcN&eTGC|SeS6|(7%MW)Wic(7@ zcX`#oef1`%RyVqGf=2Pt%bMUcH7LEGo=+W z8pw~3!&C*9X&ig(v9gnl)QyshLa7Q|daOQ!Ct9^?Rj@CmaV<$1pc1#od!nfaHfE8%S>i)|NyNZ-LgGWaQRQ8c7GY1E!TLUa=uYKcHcBFQNX?)j z&@c$_a+Plgz(?pLZTJXS2~J5jcwegXx4uFI7AsF z@j>z_ybp0m6(Kc(9}g9sS`=7OGO%9{{@Zc*mO=Y`+ti(9BThN%Bzx|*>Pa^5tZ;RLJ`YN7JyJ$a8KmGJ<`4P<6Lk>A4DjS0AiHQ>@>W0c$ zc6`LM&pwNL!-frGH;r=o**adi1Y_4jA9w2Em?~}DuiT1$XQnyF>)8DCd!^djSfliaC8IY z0!`zFZs?_j3*2F7atHfy9y{Sk{&hMOF!jU}b1%O1a&5$wy|17;W&V|&K7&; z`R)f}ouO{^Ramb9hbVT&jvaf%5l6^jssfAy*R`v{2X?sF`MJeh6p)j8aPYwgLr|tN zTconbM?j~tvZhD}tSt`#9U*Wk{-bza-NFuWl9!e`NFbGieeyHB{0#LO^;**@TCLUbrCv3=S|H3Egn5yC4l%SbCGNVnW|Cs8x?@ zhDPJ7;F23DQFB0rP9)EN@Z>8r8I}M@TeT=KXV@vpO+4)59&^U~goK_O=y2`Om*mW2 zHPbTKWz8>y!XB*RW;Jr>vn<>|!l@`DC`+P5T6zMrx=OaYqBw@B7(avkZ6JwJ5)Cw1 z=Bgo390EipBudDV4GCR}^PtgMTD^L8hYlS&cFgUjDzQ4*4N)wEfV5)8hdT>MDukSp zf}9e|a;l~UoEJ8Pybq6(5avbGF1QMn@II$-#%cWPxkv5;3f?B2WKy_wF7CS|a33%f z)V<>JAJQVUh-W18VW&==Rs%&dg*5#E@V;ZTAZoZ(sD3udbHknrP{TW%2}p|Lt&`j8-;fGW5PomLQ2 z>^#Sh;L2@#fd%i2Ax`s(E3S|#6oL*AEl^Q|fEsS|Bi%aa3}^PxzXnDlmBQWglizxKmoc%JTa4 z>#DSnx%$2L-Ya!`_wN0LFQleg;2ks{K|U0D5PGLuE_~K=$BH_YyQnN(5_p z5`rC(U_?jyB6kH&#UQ{K(glh2bX|g6&hm3Y-J(`YTgIT~PY8iEAkJDUREaCKZxV!h zjxAlfR3zzU>jy*)oJN#oFR-P9_#dSV)SP9=#F@GjD$W^ZH9A33!gt2+}V--!xCH&3+4~N=Gwndj0T{01QvCZo)=?I5W zi-o0%SHLEg#R4tXeJ6ozF41@05qiXfkQ$C9YJMi zk)T~d8s4Nj<2pTp*gGmTmF9^0q@1llA9au)G!k>x@eaW%NC@OO8+xi5p{8j7jh|;N z1FD)@k`eLD>Yy&wM5SUpiQvVY8d7>keuol*sB5xv`SK6TGXG0%0AtgZ&PFzPU?ZuxQdJ;xXlyw|PnP`?Lu(a{KOa&g` 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 B3sL|8 literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_erd.png b/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_erd.png new file mode 100755 index 0000000000000000000000000000000000000000..e86fe68f34f91ab91768609610a1cbd39f090413 GIT binary patch literal 233309 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�&Lr0_1qQzmf^0{H3L?E(P*m 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∠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 literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_logical.png b/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_logical.png new file mode 100755 index 0000000000000000000000000000000000000000..e920f12486d19196c6198f4bbee8e771e7c4efef GIT binary patch literal 116998 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

-cK^AjHgWY3*Kp`M-#7j%-`8h# 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 tB`N#J zEaVQ#ibp9JvoQ`R^DC5-P%5gaIA`Os?~JjQqs~NpG_R4@bjp1C<;|(zbCPs-leYD5 zlh|4`h~iwn`|d}9oFE5R(zu+VEU95&>Cz}BI+HL{_lWs{p5T()K|dq6Q{x=DJPP+0 zE}Gdj^IqO{z+W)5pz*KO{A;7hA1Jo;aA@V|wkGAJ-Ano~6zsyB{tmkob6sG(cSOI< za6Yw87EwbxDrA}pb#U{pVl|8(6;Xw*$^Fr}7gT22$U^0nvM#+`lUUdU+4Pc897%JB zmdYkoWYx=kIqp<^J*4#dZ@5fhF8gDT?EN0c zyrz*Lt+v)rs)rN?S}nY_AkZsEd{{LzZ=b;iInB?msRoY1U>>8lJOh`8h&1;YGO=I# zJsrzP`9Rj~UOrDHEH!vKTVZWZB8G06-l=_Z!~*5eI(yeQLL|rA#m_{N>T2t69DSrD zRo&%zj>ctIPLZ^dep$YX#>Iln@T_TK^e~hsQfztC%&? zug{DImo{QdIJ%kP`)Hs{0;p9(MWEo_%7r>v;Y#n^UG zia8Od?YQ%eEs||g>M8d6;M zI&2A3og~X9t8`a_`Hrl?k30IcH3Y=zZGL{T3+@{qodclLncv{3qafMWM$9rm*jcqD zixseI$+}BpOhP~~(_;;Y&NHd(2c~F2ehFFOVoR09+^E-ddy!qN>O}g}a z{l10PV!g6a-GepuETQZ2I^RO_x*0{>_*Hb?&ka19p?3gHV$qXr6!R8dP#Mp@2Hk$; z)YILRIZb!zTV5%$3P`D}CYTn98tuOK>YGa`Lz`3cs@a4|TWN~CP_C*Fh**!wPN*RX z_=TqusJUDo<@FF@Ow*xg&B%uaGXmCC!>qbffmQPuHS6)4<|@x=hoEktx>z=+sJUglki2g1!9rXH>tXB zG47N~6pn(}?~bo#vby4BGgwvFIBsVt z*|qodQ;Bup=jjh{3Z%gN1wkYFpV>NP23sUncV$XKAN$Vr1Fvi?Z&rYhv;z43J7g!w z=b~d%7~eIF9hdjwY`3`I!r;a> z?DQn3s@8f4sPp)kA-^-2H(N*4e+1CSOLmK&82~Df{s9Fh%s};d&7JQ;r92t=*yT`> z21uDb9ldA&{|ys+)Mnpm@|IUZmuVdR!bHweyvcfjvop}&0{?HW-n!`nQFmQ5KY)nGdz!<32=}}9f72=Q z=nP;*^%IoaqqtrJz=!#eZ>0HulLaqBFg5pMqxoTaaTQ>?-+isWui;!V5CgzUVIcru z`vK_j0pi+=5++Lv zS2yut?n3P02{3z&iJm)uy<86l_vIa z_t9UHJZo3Rj^I{4H79NMnLo=P~3o*=Ge(wBZ0HsalDMEep(k2RZS(7?XUkyoi`+V_B z>k08A;{0(00~EkUnm@=8a~Y1Z;<7{g1n+qW-P6im3cQFruns!#-D8C3uUN!cXPwxnO)$%cIs$lW5(7>s~a)8zw?D5JGAN4R+sm8&(JPtQpWCc zk{XL9c1T zO?+O|KvVjW1T<%^z95E-uTcYH{}{?@{JfL0Qo^`?oqux1YvXXJJ-gIiXEih`(fi

    5P&uA&IvX7o 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 N5S0?ieysE6{{XP=D-i$y literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_logical.png b/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_logical.png new file mode 100755 index 0000000000000000000000000000000000000000..0460633b68fa478dc8651ba1e97d1e8e3e4c4428 GIT binary patch literal 121750 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%0Dc-aDZQQ^Pd-TX3y5=2d8EEPd_a2_ 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%0AC-wRfR4(DQR|y8K5L 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 Manage Plugins -> Available` and install the +following plugins and respective dependencies: + +* Job DSL +* Javadoc Plugin +* description setter plugin +* Throttle Concurrent Builds Plug-in +* Test stability history +* Hudson Post build task + +=== Setup seed job + +Config `New Item` + +* Name it `Cassandra-Job-DSL` +* Select `Freestyle project` + +Under `Source Code Management` select Git using the repository: +`https://github.com/apache/cassandra-builds` + +Under `Build`, confirm `Add build step` -> `Process Job DSLs` and enter +at `Look on Filesystem`: `jenkins-dsl/cassandra_job_dsl_seed.groovy` + +Generated jobs will be created based on the Groovy script's default +settings. You may want to override settings by checking +`This project is parameterized` and add `String Parameter` for on the +variables that can be found in the top of the script. This will allow +you to setup jobs for your own repository and branches (e.g. working +branches). + +*When done, confirm "Save"* + +You should now find a new entry with the given name in your project +list. However, building the project will still fail and abort with an +error message [.title-ref]#"Processing DSL script +cassandra_job_dsl_seed.groovy ERROR: script not yet approved for use"#. +Goto `Manage Jenkins` -> `In-process Script Approval` to fix this issue. +Afterwards you should be able to run the script and have it generate +numerous new jobs based on the found branches and configured templates. + +Jobs are triggered by either changes in Git or are scheduled to execute +periodically, e.g. on daily basis. Jenkins will use any available +executor with the label "cassandra", once the job is to be run. Please +make sure to make any executors available by selecting +`Build Executor Status` -> `Configure` -> Add "`cassandra`" as label and +save. + +Executors need to have "JDK 1.8 (latest)" installed. This is done under +`Manage Jenkins -> Global Tool Configuration -> JDK Installations…`. +Executors also need to have the virtualenv package installed on their +system. diff --git a/doc/source/modules/cassandra/pages/development/code_style.adoc b/doc/source/modules/cassandra/pages/development/code_style.adoc new file mode 100644 index 000000000000..dc7320df431d --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/code_style.adoc @@ -0,0 +1,112 @@ += Code Style + +== General Code Conventions + +____ +* The Cassandra project follows +http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html[Sun's Java +coding conventions] with an important exception: `{` and `}` are always +placed on a new line +____ + +== Exception handling + +____ +* Never ever write `catch (...) {}` or `catch (...) { logger.error() }` +merely to satisfy Java's compile-time exception checking. Always +propagate the exception up or throw `RuntimeException` (or, if it "can't +happen," `AssertionError`). This makes the exceptions visible to +automated tests. +* Avoid propagating up checked exceptions that no caller handles. +Rethrow as `RuntimeException` (or `IOError`, if that is more +applicable). +* Similarly, logger.warn() is often a cop-out: is this an error or not? +If it is don't hide it behind a warn; if it isn't, no need for the +warning. +* If you genuinely know an exception indicates an expected condition, +it's okay to ignore it BUT this must be explicitly explained in a +comment. +____ + +== Boilerplate + +____ +* Avoid redundant `@Override` annotations when implementing abstract or +interface methods. +* Do not implement equals or hashcode methods unless they are actually +needed. +* Prefer public final fields to private fields with getters. (But prefer +encapsulating behavior in "real" methods to either.) +* Prefer requiring initialization in the constructor to setters. +* Avoid redundant `this` references to member fields or methods. +* Do not extract interfaces (or abstract classes) unless you actually +need multiple implementations of it. +* Always include braces for nested levels of conditionals and loops. +Only avoid braces for single level. +____ + +== Multiline statements + +____ +* Try to keep lines under 120 characters, but use good judgement -- it's +better to exceed 120 by a little, than split a line that has no natural +splitting points. +* When splitting inside a method call, use one line per parameter and +align them, like this: + +[source,none] +---- +SSTableWriter writer = new SSTableWriter(cfs.getTempSSTablePath(), + columnFamilies.size(), + StorageService.getPartitioner()); +---- + +* When splitting a ternary, use one line per clause, carry the operator, +and align like this: + +[source,none] +---- +var = bar == null + ? doFoo() + : doBar(); +---- +____ + +== Whitespace + +____ +* Please make sure to use 4 spaces instead of the tab character for all +your indentation. +* Many lines in many files have a bunch of trailing whitespace... Please +either clean these up in a separate patch, or leave them alone, so that +reviewers now and anyone reading code history later doesn't have to pay +attention to whitespace diffs. +____ + +== Imports + +Please observe the following order for your imports: + +[source,none] +---- +java +[blank line] +com.google.common +org.apache.commons +org.junit +org.slf4j +[blank line] +everything else alphabetically +---- + +== Format files for IDEs + +____ +* IntelliJ: +https://wiki.apache.org/cassandra/CodeStyle?action=AttachFile&do=view&target=intellij-codestyle.jar[intellij-codestyle.jar] +* IntelliJ 13: +https://gist.github.com/jdsumsion/9ab750a05c2a567c6afc[gist for IntelliJ +13] (this is a work in progress, still working on javadoc, ternary +style, line continuations, etc) +* Eclipse (https://github.com/tjake/cassandra-style-eclipse) +____ diff --git a/doc/source/modules/cassandra/pages/development/dependencies.adoc b/doc/source/modules/cassandra/pages/development/dependencies.adoc new file mode 100644 index 000000000000..3e147541d6ef --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/dependencies.adoc @@ -0,0 +1,51 @@ += Dependency Management + +Managing libraries for Cassandra is a bit less straight forward compared +to other projects, as the build process is based on ant, maven and +manually managed jars. Make sure to follow the steps below carefully and +pay attention to any emerging issues in the `ci` and reported related +issues on Jira/ML, in case of any project dependency changes. + +As Cassandra is an Apache product, all included libraries must follow +Apache's https://www.apache.org/legal/resolved.html[software license +requirements]. + +== Required steps to add or update libraries + +* Add or replace jar file in `lib` directory +* Add or update `lib/license` files +* Update dependencies in `build.xml` +** Add to `parent-pom` with correct version +** Add to `all-pom` if simple Cassandra dependency (see below) + +== POM file types + +* *parent-pom* - contains all dependencies with the respective version. +All other poms will refer to the artifacts with specified versions +listed here. +* *build-deps-pom(-sources)* + *coverage-deps-pom* - used by `ant build` +compile target. Listed dependenices will be resolved and copied to +`build/lib/{jar,sources}` by executing the +`maven-ant-tasks-retrieve-build` target. This should contain libraries +that are required for build tools (grammar, docs, instrumentation), but +are not shipped as part of the Cassandra distribution. +* *test-deps-pom* - refered by `maven-ant-tasks-retrieve-test` to +retrieve and save dependencies to `build/test/lib`. Exclusively used +during JUnit test execution. +* *all-pom* - pom for +https://mvnrepository.com/artifact/org.apache.cassandra/cassandra-all[cassandra-all.jar] +that can be installed or deployed to public maven repos via +`ant publish` + +== Troubleshooting and conflict resolution + +Here are some useful commands that may help you out resolving conflicts. + +* `ant realclean` - gets rid of the build directory, including build +artifacts. +* `mvn dependency:tree -f build/apache-cassandra-*-SNAPSHOT.pom -Dverbose -Dincludes=org.slf4j` +- shows transitive dependency tree for artifacts, e.g. org.slf4j. In +case the command above fails due to a missing parent pom file, try +running `ant mvn-install`. +* `rm ~/.m2/repository/org/apache/cassandra/apache-cassandra/` - removes +cached local Cassandra maven artifacts diff --git a/doc/source/modules/cassandra/pages/development/documentation.adoc b/doc/source/modules/cassandra/pages/development/documentation.adoc new file mode 100644 index 000000000000..ca2ee829312b --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/documentation.adoc @@ -0,0 +1,137 @@ += Working on Documentation + +== How Cassandra is documented + +The official Cassandra documentation lives in the project's git +repository. We use a static site generator, +http://www.sphinx-doc.org/[Sphinx], to create pages hosted at +https://cassandra.apache.org/doc/latest/[cassandra.apache.org]. You'll +also find developer centric content about Cassandra internals in our +retired https://wiki.apache.org/cassandra[wiki] (not covered by this +guide). + +Using a static site generator often requires to use a markup language +instead of visual editors (which some people would call good news). +Sphinx, the tool-set we use to generate our documentation, uses +http://www.sphinx-doc.org/en/stable/rest.html[reStructuredText] for +that. Markup languages allow you to format text by making use of certain +syntax elements. Your document structure will also have to follow +specific conventions. Feel free to take a look at link:..[existing +documents] to get a better idea how we use reStructuredText to write our +documents. + +So how do you actually start making contributions? + +== GitHub based work flow + +_Recommended for shorter documents and minor changes on existing content +(e.g. fixing typos or updating descriptions)_ + +Follow these steps to contribute using GitHub. It's assumed that you're +logged in with an existing account. + +[arabic] +. Fork the GitHub mirror of the +https://github.com/apache/cassandra[Cassandra repository] + +image::docs_fork.png[image] + +[arabic, start=2] +. Create a new branch that you can use to make your edits. It's +recommended to have a separate branch for each of your working projects. +It will also make it easier to create a pull request later to when you +decide you’re ready to contribute your work. + +image::docs_create_branch.png[image] + +[arabic, start=3] +. Navigate to document sources `doc/source` to find the `.rst` file to +edit. The URL of the document should correspond to the directory +structure. New files can be created using the "Create new file" button: + +image::docs_create_file.png[image] + +[arabic, start=4] +. At this point you should be able to edit the file using the GitHub web +editor. Start by naming your file and add some content. Have a look at +other existing `.rst` files to get a better idea what format elements to +use. + +image::docs_editor.png[image] + +Make sure to preview added content before committing any changes. + +image::docs_preview.png[image] + +[arabic, start=5] +. Commit your work when you're done. Make sure to add a short +description of all your edits since the last time you committed before. + +image::docs_commit.png[image] + +[arabic, start=6] +. Finally if you decide that you're done working on your branch, it's +time to create a pull request! + +image::docs_pr.png[image] + +Afterwards the GitHub Cassandra mirror will list your pull request and +you're done. Congratulations! Please give us some time to look at your +suggested changes before we get back to you. + +== Jira based work flow + +_Recommended for major changes_ + +Significant changes to the documentation are best managed through our +Jira issue tracker. Please follow the same +https://cassandra.apache.org/doc/latest/development/patches.html[contribution +guides] as for regular code contributions. Creating high quality content +takes a lot of effort. It’s therefor always a good idea to create a +ticket before you start and explain what you’re planing to do. This will +create the opportunity for other contributors and committers to comment +on your ideas and work so far. Eventually your patch gets a formal +review before it is committed. + +== Working on documents locally using Sphinx + +_Recommended for advanced editing_ + +Using the GitHub web interface should allow you to use most common +layout elements including images. More advanced formatting options and +navigation elements depend on Sphinx to render correctly. Therefor it’s +a good idea to setup Sphinx locally for any serious editing. Please +follow the instructions in the Cassandra source directory at +`doc/README.md`. Setup is very easy (at least on OSX and Linux). + +== Notes for committers + +Please feel free to get involved and merge pull requests created on the +GitHub mirror if you're a committer. As this is a read-only repository, +you won't be able to merge a PR directly on GitHub. You'll have to +commit the changes against the Apache repository with a comment that +will close the PR when the committ syncs with GitHub. + +You may use a git work flow like this: + +.... +git remote add github https://github.com/apache/cassandra.git +git fetch github pull//head: +git checkout +.... + +Now either rebase or squash the commit, e.g. for squashing: + +.... +git reset --soft origin/trunk +git commit --author +.... + +Make sure to add a proper commit message including a "Closes #" +text to automatically close the PR. + +=== Publishing + +Details for building and publishing of the site at cassandra.apache.org +can be found +https://github.com/apache/cassandra-website/blob/master/README.md[here]. diff --git a/doc/source/modules/cassandra/pages/development/gettingstarted.adoc b/doc/source/modules/cassandra/pages/development/gettingstarted.adoc new file mode 100644 index 000000000000..0e7d2c3cf293 --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/gettingstarted.adoc @@ -0,0 +1,62 @@ += Getting Started + +== Initial Contributions + +Writing a new feature is just one way to contribute to the Cassandra +project. In fact, making sure that supporting tasks, such as QA, +documentation and helping users, keep up with the development of new +features is an ongoing challenge for the project (and most open source +projects). So, before firing up your IDE to create that new feature, +we'd suggest you consider some of the following activities as a way of +introducing yourself to the project and getting to know how things +work.:: + * Add to or update the documentation + * Answer questions on the user list + * Review and test a submitted patch + * Investigate and fix a reported bug + * Create unit tests and d-tests + +== Updating documentation + +The Cassandra documentation is maintained in the Cassandra source +repository along with the Cassandra code base. To submit changes to the +documentation, follow the standard process for submitting a patch +(`patches`). + +== Answering questions on the user list + +Subscribe to the user list, look out for some questions you know the +answer to and reply with an answer. Simple as that! See the +http://cassandra.apache.org/community/[community] page for details on +how to subscribe to the mailing list. + +== Reviewing and testing a submitted patch + +Reviewing patches is not the sole domain of committers, if others have +reviewed a patch it can reduce the load on the committers allowing them +to write more great features or review more patches. Follow the +instructions in `_development_how_to_review` or create a build with the +patch and test it with your own workload. Add a comment to the JIRA +ticket to let others know what you have done and the results of your +work. (For example, "I tested this performance enhacement on our +application's standard production load test and found a 3% +improvement.") + +== Investigate and/or fix a reported bug + +Often, the hardest work in fixing a bug is reproducing it. Even if you +don't have the knowledge to produce a fix, figuring out a way to +reliable reproduce an issues can be a massive contribution to getting a +bug fixed. Document your method of reproduction in a JIRA comment or, +better yet, produce an automated test that reproduces the issue and +attach it to the ticket. If you go as far as producing a fix, follow the +process for submitting a patch (`patches`). + +== Create unit tests and Dtests + +Test coverage in Cassandra is improving but, as with most code bases, it +could benefit from more automated test coverage. Before starting work in +an area, consider reviewing and enhancing the existing test coverage. +This will both improve your knowledge of the code before you start on an +enhancement and reduce the chances of your change in introducing new +issues. See `testing` and `patches` for more detail. diff --git a/doc/source/modules/cassandra/pages/development/how_to_commit.adoc b/doc/source/modules/cassandra/pages/development/how_to_commit.adoc new file mode 100644 index 000000000000..2018606806ac --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/how_to_commit.adoc @@ -0,0 +1,71 @@ += How-to Commit + +If you are a committer, feel free to pick any process that works for you +- so long as you are planning to commit the work yourself. + +Here is how committing and merging will usually look for merging and +pushing for tickets that follow the convention (if patch-based): + +Hypothetical CASSANDRA-12345 ticket is a cassandra-3.0 based bug fix +that requires different code for cassandra-3.3, and trunk. Contributor +Jackie supplied a patch for the root branch (12345-3.0.patch), and +patches for the remaining branches (12345-3.3.patch, 12345-trunk.patch). + +On cassandra-3.0::: + . `git am -3 12345-3.0.patch` (if we have a problem b/c of CHANGES.txt + not merging anymore, we fix it ourselves, in place) +On cassandra-3.3::: + . `git merge cassandra-3.0 -s ours` + . `git apply -3 12345-3.3.patch` (likely to have an issue with + CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) + . `git commit -amend` +On trunk::: + . `git merge cassandra-3.3 -s ours` + . `git apply -3 12345-trunk.patch` (likely to have an issue with + CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) + . `git commit -amend` +On any branch::: + . `git push origin cassandra-3.0 cassandra-3.3 trunk -atomic` + +Same scenario, but a branch-based contribution: + +On cassandra-3.0::: + . `git cherry-pick ` (if we have a problem b/c of + CHANGES.txt not merging anymore, we fix it ourselves, in place) +On cassandra-3.3::: + . `git merge cassandra-3.0 -s ours` + . `git format-patch -1 ` + . `git apply -3 .patch` (likely to have an issue + with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) + . `git commit -amend` +On trunk::: + . `git merge cassandra-3.3 -s ours` + . `git format-patch -1 ` + . `git apply -3 .patch` (likely to have an issue + with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) + . `git commit -amend` +On any branch::: + . `git push origin cassandra-3.0 cassandra-3.3 trunk -atomic` + +[TIP] +.Tip +==== +Notes on git flags: `-3` flag to am and apply will instruct git to +perform a 3-way merge for you. If a conflict is detected, you can either +resolve it manually or invoke git mergetool - for both am and apply. + +`-atomic` flag to git push does the obvious thing: pushes all or +nothing. Without the flag, the command is equivalent to running git push +once per each branch. This is nifty in case a race condition happens - +you won’t push half the branches, blocking other committers’ progress +while you are resolving the issue. +==== + +[TIP] +.Tip +==== +The fastest way to get a patch from someone’s commit in a branch on GH - +if you don’t have their repo in remotes - is to append .patch to the +commit url, e.g. curl -O +https://github.com/apache/cassandra/commit/7374e9b5ab08c1f1e612bf72293ea14c959b0c3c.patch +==== diff --git a/doc/source/modules/cassandra/pages/development/how_to_review.adoc b/doc/source/modules/cassandra/pages/development/how_to_review.adoc new file mode 100644 index 000000000000..f24cefb619b3 --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/how_to_review.adoc @@ -0,0 +1,82 @@ += Review Checklist + +When reviewing tickets in Apache JIRA, the following items should be +covered as part of the review process: + +*General* + +____ +* Does it conform to the `code_style` guidelines? +* Is there any redundant or duplicate code? +* Is the code as modular as possible? +* Can any singletons be avoided? +* Can any of the code be replaced with library functions? +* Are units of measurement used in the code consistent, both internally +and with the rest of the ecosystem? +____ + +*Error-Handling* + +____ +* Are all data inputs and outputs checked (for the correct type, length, +format, and range) and encoded? +* Where third-party utilities are used, are returning errors being +caught? +* Are invalid parameter values handled? +* Are any Throwable/Exceptions passed to the JVMStabilityInspector? +* Are errors well-documented? Does the error message tell the user how +to proceed? +* Do exceptions propagate to the appropriate level in the code? +____ + +*Documentation* + +____ +* Do comments exist and describe the intent of the code (the "why", not +the "how")? +* Are javadocs added where appropriate? +* Is any unusual behavior or edge-case handling described? +* Are data structures and units of measurement explained? +* Is there any incomplete code? If so, should it be removed or flagged +with a suitable marker like ‘TODO’? +* Does the code self-document via clear naming, abstractions, and flow +control? +* Have NEWS.txt, the cql3 docs, and the native protocol spec been +updated if needed? +* Is the ticket tagged with "client-impacting" and "doc-impacting", +where appropriate? +* Has lib/licences been updated for third-party libs? Are they Apache +License compatible? +* Is the Component on the JIRA ticket set appropriately? +____ + +*Testing* + +____ +* Is the code testable? i.e. don’t add too many or hide dependencies, +unable to initialize objects, test frameworks can use methods etc. +* Do tests exist and are they comprehensive? +* Do unit tests actually test that the code is performing the intended +functionality? +* Could any test code use common functionality (e.g. ccm, dtest, or +CqlTester methods) or abstract it there for reuse? +* If the code may be affected by multi-node clusters, are there dtests? +* If the code may take a long time to test properly, are there CVH +tests? +* Is the test passing on CI for all affected branches (up to trunk, if +applicable)? Are there any regressions? +* If patch affects read/write path, did we test for performance +regressions w/multiple workloads? +* If adding a new feature, were tests added and performed confirming it +meets the expected SLA/use-case requirements for the feature? +____ + +*Logging* + +____ +* Are logging statements logged at the correct level? +* Are there logs in the critical path that could affect performance? +* Is there any log that could be added to communicate status or +troubleshoot potential problems in this feature? +* Can any unnecessary logging statement be removed? +____ diff --git a/doc/source/modules/cassandra/pages/development/ide.adoc b/doc/source/modules/cassandra/pages/development/ide.adoc new file mode 100644 index 000000000000..5a48cbfbe059 --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/ide.adoc @@ -0,0 +1,234 @@ += Building and IDE Integration + +== Building From Source + +Getting started with Cassandra and IntelliJ IDEA or Eclipse is simple, +once you manage to build Cassandra from source using +http://www.oracle.com/technetwork/java/javase/downloads/index.html[Java +8], https://git-scm.com/[Git] and http://ant.apache.org/[Ant]. + +The source code for Cassandra is shared through the central Apache Git +repository and organized by different branches. You can access the code +for the current development branch through git as follows: + +.... +git clone https://gitbox.apache.org/repos/asf/cassandra.git cassandra-trunk +.... + +Other branches will point to different versions of Cassandra. Switching +to a different branch requires checking out the branch by its name: + +.... +git checkout cassandra-3.0 +.... + +You can get a list of available branches with `git branch`. + +Finally build Cassandra using ant: + +.... +ant +.... + +This may take a significant amount of time depending on whether +artifacts have to be downloaded and the number of classes that need to +be compiled. + +[TIP] +.Hint +==== +You can setup multiple working trees for different Cassandra versions +from the same repository using +https://git-scm.com/docs/git-worktree[git-worktree]. +==== + +== Setting up Cassandra in IntelliJ IDEA + +https://www.jetbrains.com/idea/[IntelliJ IDEA] by JetBrains is one of +the most popular IDEs for Cassandra and Java development in general. The +Community Edition is provided as a free download with all features +needed to get started developing Cassandra. + +=== Setup Cassandra as a Project (C* 2.1 and newer) + +Since 2.1.5, there is a new ant target: `generate-idea-files`. Please +see our https://wiki.apache.org/cassandra/RunningCassandraInIDEA[wiki] +for instructions for older Cassandra versions. + +Please clone and build Cassandra as described above and execute the +following steps: + +[arabic] +. Once Cassandra is built, generate the IDEA files using ant: + +.... +ant generate-idea-files +.... + +[arabic, start=2] +. Start IDEA +. Open the IDEA project from the checked out Cassandra directory using +the menu item Open in IDEA's File menu + +The project generated by the ant task `generate-idea-files` contains +nearly everything you need to debug Cassandra and execute unit tests. + +____ +* Run/debug defaults for JUnit +* Run/debug configuration for Cassandra daemon +* License header for Java source files +* Cassandra code style +* Inspections +____ + +[verse] +-- + +-- + +== Opening Cassandra in Apache NetBeans + +https://netbeans.apache.org/[Apache NetBeans] is the elder of the open +sourced java IDEs, and can be used for Cassandra development. There is +no project setup or generation required to open Cassandra in NetBeans. + +=== Open Cassandra as a Project (C* 4.0 and newer) + +Please clone and build Cassandra as described above and execute the +following steps: + +[arabic] +. Start Apache NetBeans +. Open the NetBeans project from the [.title-ref]#ide/# folder of the +checked out Cassandra directory using the menu item "Open Project…" in +NetBeans' File menu + +The project opened supports building, running, debugging, and profiling +Cassandra from within the IDE. These actions delegate to the ant +[.title-ref]#build.xml# script. + +____ +* Build/Run/Debug Project is available via the Run/Debug menus, or the +project context menu. +* Profile Project is available via the Profile menu. In the opened +Profiler tab, click the green "Profile" button. +* Cassandra's code style is honored in +[.title-ref]#ide/nbproject/project.properties# +____ + +The [.title-ref]#JAVA8_HOME# system variable must be set in the +environment that NetBeans starts in for the Run/Debug/Profile ant +targets to execute. + +[verse] +-- + +-- + +== Setting up Cassandra in Eclipse + +Eclipse is a popular open source IDE that can be used for Cassandra +development. Various Eclipse environments are available from the +https://www.eclipse.org/downloads/eclipse-packages/[download page]. The +following guide was created with "Eclipse IDE for Java Developers". + +These instructions were tested on Ubuntu 16.04 with Eclipse Neon (4.6) +using Cassandra 2.1, 2.2 and 3.x. + +=== Project Settings + +*It is important that you generate the Eclipse files with Ant before +trying to set up the Eclipse project.* + +____ +* Clone and build Cassandra as described above. +* Run `ant generate-eclipse-files` to create the Eclipse settings. +* Start Eclipse. +* Select +`File->Import->Existing Projects into Workspace->Select git directory`. +* Make sure "cassandra-trunk" is recognized and selected as a project +(assuming you checked the code out into the folder cassandra-trunk as +described above). +* Confirm "Finish" to have your project imported. +____ + +You should now be able to find the project as part of the "Package +Explorer" or "Project Explorer" without having Eclipse complain about +any errors after building the project automatically. + +=== Unit Tests + +Unit tests can be run from Eclipse by simply right-clicking the class +file or method and selecting `Run As->JUnit Test`. Tests can be debugged +this way as well by defining breakpoints (double-click line number) and +selecting `Debug As->JUnit Test`. + +Alternatively all unit tests can be run from the command line as +described in `testing` + +=== Debugging Cassandra Using Eclipse + +There are two ways how to start and debug a local Cassandra instance +with Eclipse. You can either start Cassandra just as you normally would +by using the `./bin/cassandra` script and connect to the JVM through +https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/introclientissues005.html[remotely] +from Eclipse or start Cassandra from Eclipse right away. + +==== Starting Cassandra From Command Line + +____ +* Set environment variable to define remote debugging options for the +JVM: +`export JVM_EXTRA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1414"` +* Start Cassandra by executing the `./bin/cassandra` +____ + +Afterwards you should be able to connect to the running Cassandra +process through the following steps: + +From the menu, select `Run->Debug Configurations..` + +image::eclipse_debug0.png[image] + +Create new remote application + +image::eclipse_debug1.png[image] + +Configure connection settings by specifying a name and port 1414 + +image::eclipse_debug2.png[image] + +Afterwards confirm "Debug" to connect to the JVM and start debugging +Cassandra! + +==== Starting Cassandra From Eclipse + +Cassandra can also be started directly from Eclipse if you don't want to +use the command line. + +From the menu, select `Run->Run Configurations..` + +image::eclipse_debug3.png[image] + +Create new application + +image::eclipse_debug4.png[image] + +Specify name, project and main class +`org.apache.cassandra.service.CassandraDaemon` + +image::eclipse_debug5.png[image] + +Configure additional JVM specific parameters that will start Cassandra +with some of the settings created by the regular startup script. Change +heap related values as needed. + +.... +-Xms1024M -Xmx1024M -Xmn220M -Xss256k -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCondCardMark -javaagent:./lib/jamm-0.3.0.jar -Djava.net.preferIPv4Stack=true +.... + +image::eclipse_debug6.png[image] + +Now just confirm "Debug" and you should see the output of Cassandra +starting up in the Eclipse console and should be able to set breakpoints +and start debugging! diff --git a/doc/source/modules/cassandra/pages/development/images/docs_commit.png b/doc/source/modules/cassandra/pages/development/images/docs_commit.png new file mode 100644 index 0000000000000000000000000000000000000000..d90d96a88ba55b758f377519b25a956fbbe23bc2 GIT binary patch literal 104667 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 literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/development/images/docs_create_branch.png b/doc/source/modules/cassandra/pages/development/images/docs_create_branch.png new file mode 100644 index 0000000000000000000000000000000000000000..a04cb54f34d6079728cfcb2eb4a4fca365b99648 GIT binary patch literal 181860 zcmeFYWmp_tvn~uI1b25Q1b5e9!QI`0>);v!1b27W;BEs1cMa|?gF6gz$n(5s?|rWC zPxk+BuAb?h)vK1&y{fvZR&}VNyd)AlK0E{j1d`MjF=Yq{m}3YCC|TGKZzYq~28s|6 zh`5%bqKZ;mX}$nbEhW_9i*HCzs;;}Uq~1K6KP1&lxK zucW5qLG0LSL5X}QgAk?`(!kw3>x&3iFpTqrfMU);q!G^Q8%J~h5gZIbWAePdyUJjJ zwALUApLNjPx)88Lid9@6HAwsI$<(nwe}_OF zGR`3H!#B>L>`OvVFM+iW@qr*!(V{nkhj7}uALVz2kD&PYZ6R)A^MY&*x`u!+vCqGm zU`r}BRSR`Qg^W}Fkx_nl-IzLZz_doWzlI$rG{(oB=R4wD`)eKHs}3uhmCz(E51(bf> zi`Wg)s@95YQ6;+_l#7Iqc{Fxh$!LyYK_;w>u1a{K2*<$42;vpXKhz-lyEqPKy zw1W5wYnfR?!Q&BY(xKPl;4cOGCLnJD9VGK$a`wJuQ%Tv58~O7$u5(CP((ep#rvB_* z)+8ka-#QB@e7`{ll0rN9Ka_kOrBG+>4xacDgYps>g5cEu+)kOV8v}D=(BCj!%=0BF zVo!>H`j<)wo1@DLlG`uQjhT0x)+=ak_*W*w(PPrrRFA0dLVU&I9f@rQdEar8Z9Eg` zF(0=u^ReK(XdoKVUukp zA#b1e+tB}{2Qvu0nz+u2Fz-diDB6KM$LWFgBR^ui3 zXBwh#Lm&s_=OD9xuiJoXhT`p#b0DdV6g-DQ{O)FmD}svtS@a+TKQ9uO^lJ#mR!B2h z#}`<1|6YpFFYw)xVuMhoJj#KX6lQ~V1?Uf0JfRuljAWUEdId0tlKK?ciim}I!zI*K zA@UMLN($__k)O@;K3Q<4MOO;X=M`E&d%{+TPvmJ#rdx15LJ@UCP=~WH6O9rAdfRK5 z=^ z{+6pTQcdWB)G-xu>=#OoIJ}`mObO#yCn@NHiUQFBwgN_FlEZgeN#$~l)Zkc*LGMde zC%6aF2lkfmrwD%fd{PtAZF&sqp4ilnb@E@UWCKPyQUz0u!pQqVwxmPz3Y3zRr9aIk zTqVFHaMjkiFYzon-q{**wMq1s%*T<}GsUKvqkR8=?MUGXAr3qTbYmm61wE@>GwOl*I%keo~&#sg`?PeIZ;34zeRm9Z<22tuda->t3PF3 z#a|8f#1xPOngZoK$2-Ne7K170Y@9nY;R%FAJg*0oyeb+o{E&=4tz66Uq8X`k$*X^v{5qKpao52SdRZ z!63nt4(X1m4zrHvC+BD7r?RIH&nHj&U@mA>sPFGM->)G5Ml^*{|A72~=RE_W6)iWXnLjSNu^uo2n%p!VOX5Xqmx7?k{lF$^V z53z_WkQ|TV$9-TNrnA!f{cN#qq2vsR@E(mw8BV#Y5v=K}S#^xx#_rb()rj8joBtSt zZj63Qg(!EI+2P^2j@X6=&1N^op2p+0SEzMV$NDuhjX@}#1FT6-#=?1FxMi-6`|~?T z0%l4*gJsOg*jl&muZs0rGjfhgrLZC8Q%x5T!Zw*Q_17iV#T$pTk+Rq>->>pdN8syHU_y7!{qT-{os*nQ*1B zrh`}E$Z+P*bG3H0lb^Qg_Il3^F)HpYgS90E2UqyFX(K{9&$^FSgG)ONC!pi`6HNu( z2?Iat0Pv4@ePMkMeL#X@yYkiE71id$lfA`sro@G$#Ce;Ug+|Y1@JYsr9v{D}>e=rVt@^7O#D}M0GYKO$Q00O_scoG#pX2Q5QK&2UcF7uf{)jJw7oWG-IqTHvjMr;*|1pTb zpQ~~O5xD3<_c)ii%x34dzPaMz%e8&_)63)T#~G7{u)E^D;-=9MMWiHFXZn-=jP1Hl z*+6meiQ~>T7Hl2_>viRJ z`hNGKlmEqvAcEl7i^`kh(sPWUfeXC8)L}~uPvUvac(r;C?nbd9LH2fjT6p|)J5#sG zlP#4k)0yIJd5`~e^XtprV8}NrQ>iE@TpJ4~R*0&*cf#Sp<}mKj`GZnt2IwLMZW3@% zuW&MF7U(rFhMh1FQ!)^+{^kip)p)|PLBRWaqFqQug7gbcTAm@!xoJ&R_i!?ATs)6_ zIEYfnZ%o~>v709p6b84SYuz9%hLhI7y`KZkpY-AY<7&Xf4aonG)ZW;P(cRYJtu_P%zdP^SrLCE> z5vjYajU9m3U4ZPfAM4?_~Ow zS6NKrKjd%!1jsF%ogH|YnB3gl7~R+y?VZe-Sa^7Nn3!3aSXmj~YA^si?3|6<8SDTQ z|2Fb}+YvJZm^fKFI9uA=k^X7d$k^V+S%94UPe=dt`FEUV?w0@ElO5nc(|VgA)1Ny` zER4)d|JC*zDgU2RUPViHGaF4YOItHLz*`@Jtjw(3{QnUAe{TJEm;ZxQ>%U1kxc?u@ z|8eI(l>AJ8X7E2|^e?;qDShLYAUr?QfAL-r{>I*_;|&f%OECr2w=>iqY~GNge*2;M z_xyGZDfB)?F7@r6Focwth^jl}aVA2B{Osd^pWY8$f|dem^cFe_JPu5iG~I4IvmN#^ zDP*$)ZpOYZc0-DcLls}+(wyOmt`uS^h%$zGl<>^LdL5Z#Wm1fAF`ly<)|Z#StKdwx zugq1CClkSLC%}1Izje2{C2N5u8Q;Wr{9nGk|NDcH#$Se}x-+MJ5f?57;%^V!_cYb} zDE|M8ex&^&pl=HyGUej_x|5hUiYKJMA5@I+C)Av-4$Pc7DRffEzddrgvO52|@>{bs z&`_8Q$xzOmQc#q_e|umqTygz%<+o-Fg}*_8mA{QsOZ_jfgz|d%@b|!f$-#tGG&F#p zT%`P4)Zd^`G@MxfUjPV~00jwuECb1#PWiv!G5qlZ!QTT&>aR>H?Cv$CNd{T;XbPNta1FQ)sOd4mUr*uQ6=a4ejz(-0Lb zLK`90aB@##A}w~y(*q-_G8EXr_W>FPndH~u4D>#@MN8%L0@>ipAiw&tP&2=s0?({NC=vC-w^rRrTxZ3ajG2t)@=U7=zN|QeXZ*T4GktM zj(rBdLD=I&f+q?|Ku+Mz{O=M8k!KI^uolbTj`gVnmgd)U$Gc#}T%W}AVX|#vA=CG_ z#Gps~*~-rkP8v@gzC_;Ie=Fyt{#VkZXFHz=xv%St#E5CtZ^kCXMzJ(77M_bJN>p{~9lcSaev97IubXrfCxNHo3p1Q)GWre0=Bd z9L&h8J7#}Bz3>F#lA%INBfr>}m<8Lvr^`dj>00yGDDihZpl148SRmkZ3*LX0W0XSx zhhGQx+WkEpX5`!B2D$w+QiLd%N9tb-`35-^s+E(a_JToy5T$GSU(@ASyy+9S4J<1| z!q%aYzgI*!pZ+YCneG?zXR?~*zo!$Y5cUVYt5SToJt?P8{nyI4`3qcNnr<5QEzTiI z=<46o(cr)7eIoZDeB5BWOV+=Y_?RwnY0}?2)AiMzU;MrtbN)4*@YLJ0?5vCKcNe#F zeDdEvG#Qnla;cMxf}X`6MU9*Oo-Rz{8{d**%pgOx#42F{!Fr0b5{%a-NpP(sPqZDsX%P_gL z_JRJbjT6&V)%g;}c6#y1ikHsRvJ;1}z?)9~?@IQML*sV3PEis`Jg1XUN0a#@_TT^8Uk>ygnC5P_W2(z z>d*m4lRM$2)3jZOWI)DrRzP+?WhO+9^Bo;ojm7}k*4{pd8p)o2UC;RW-#H<_=k&ed zc)7UfbU2?hqL6f1q-ec6<(oQ6N+*&&|G#1r_`yHESbj5~Bik4pr6&=5H2*We%Xleo z1&duCG15K+Na`P+{vRFd_?qSLnRBqw_x0VJ&n?djxD$A;*{tijSjY|7qaO~*(bp2m zVx(ctx~?5zWP5+-w(7xWSFSU#Al5dBRt^3StG{(^W=9*#Yqzpw|E^Hcd4CJN0N(Z$ zCA~@>AQp){QezTkT6q5t^um@HirtT$op)rM-Ys}<1_eT8r4muHfp4lo({JE2405il zCT^Zili1xjk#M+|kZk)uX7GMumyXO@&*MaAy{%~E7|PADo!0~)HtB&F{pnwp(;z{~ ztiQqt>ffc79=0tvh(uT3rBz-8{!y@DqJN~%>L2MVboJOha{2M0{6pY$OrBA zl`<)+mTZrQR--H=#JaM-;ZngijEL8}x4Pr?aDz+%TQtVc<;LnDeF0(ir~WQ*{B17Z z!iCqOZte#@@+lR0vh_NLig|n|^Izxj=fW`~y-K&A0{h!Fb6ir3D!#hRsgL>rSnRB( zQJ-I~H_kF*Koc7<8d1x56i&N{$L~{!Fzyx6scQ>ESOZ!>oJb2Q;DcR z>5=;zqu;*-zZ&n2AV4J%Ke>~zH(z{M=C2=Z>gx{QPZ7Q?9ywn`;VD^T$7iWHO0$~a zi`(X9GQis%NwfRIwGB66;ZKor+0V4DFZR)gmY^`4&D?;O(Q`&>+WnV6lk*nyVSLf( zf0q%7XD3=G@h7^ZO$DJ~FTRyf|=V&)oM%lRS>JG&)R z+N5yw<75Vv{t&&YmECL}zy~3j(aoy5M!dQEVOC{1&rJ>W{(w6-jz9)qB%IyP`kXJo zM~w1EQ?}c^UFjj|5`6|JxxBo|mvI_hjZe+Pw|0x)8h#4(Yb@6p{Z{V4x0M=W0>A8;oQ>P;z}(Sv=q77O0GDRH z_mN98j%^4>x#sm7ZCrG5&?xzXJv~}*-(NNv-fsh9PZ;qZgjpq=OVuL6Gy~uJ61-1H z+^J(4)wJ2OQuK}@Kk+_p7Y@%7SKakbV{z2(AYXb z!fqt;JqVTuY{^MxYp2W6RXM! zO8c-Q_@C!K%nvP*vKPaQo9u794e?6l)WfzjnpB~;!tf^OJW0OXe=|rDPI@>oqd$8H z9``j118nL>E;HY{vzkVm2OLukwE>S4H`DqL=2~!!O^&cFN7X=qW-@Hmr{S6XyqhV3 zavhb9n5}(o65z+6vlGnVp0ftoU-JmD+$O-g3vhIHc*@f0%#$plJ3p4>tYx3YXm+Bo zC_K|A>Mt92qJ~H1>=(2)*b6_aJA1MZ+%`#fNct-?D}73;&#ikE-|$#}ydb~}sN))5 za`3@+eYT-LLRH_CW)F{$NOz5e6@o!vH9Noi1p_k6zQm=~RU-Z<4~b-F7qoCngsODW z^g{7q%TMxV7_OWAF+{(X>Z*6&pqUg4!=3U;XVm<(R_)n}*zMn2pqkF7jwHw#@VUc3 z4M6~~mFn)1aJ%Eu32Fy0u{GgN!1&7cY0W_~kk6J#OS{;-mp zB-beUl8cnG(n*4C*8n_e)vRONYv+ZpaT!bh1}VL;wp8QI$t#%p^-WFI?BBD?9^vis zxcKbZO5EvSTvR+*p_)fl--nA^pbd(FCqIUC08o*&t$*?$8oaPg#in!cO-!KqZ>L^v zB_Cle1UDT;dq~9=4I@Nl2clVg)|$!+fLl}LQTRgI3tRGFJ{-=p?F9Gp^7qDoEHM3M zm_V`SB(ZDl2;Bp8OQhLo%;Dq|O+ajL^t(eoq4!ku!ATrrlz1h>U+9h)$KlC#nhFm< zEf@lVfA$*f15Y6JPBw9-XZ3hb!^UHeicHLjug36&M&$NX--ndRy}zv!Gn~M2X45{g z0fQzCM_YUP6Bz@jDRK*EbiS*HyoGZ7m8q)Fir;N*TCVc z1CI37(*yEmxgRT(sMdTh&0h9hu%sa%85!!!Y?92iE=E=)Yad^X&5oo}iD#kRSkOlj z)t44khN-*BDn${Qoq?q=$c*ZkLMzI1{rC{fY2y7VM$b~=_+67=LCsa9(vi50G-VMM zP8R~o>dbt)zD04{HD^2Rr?uhlYD$&CxH#=S7^?{{rjiTJ5Jw%_l^R|oqF2^sod$!v zuY}l4#KG7>9ZUNrC+)rmTq7QtiokvDb}nk<+3>;@(0pC^<>##9pb`q%Tl5}j?!16`)j8VxwHtuiWO@pG;FHyF5l!?j}Vi}iKQ}^o+#xVG)!hRN#krebe=0notp~(kDn-duj+nZG82>HbMB$$ z)%9w}%bvY>CpNHJeF9Upm1hl1P9#SNecO_p?m z@6Rn*Y!1vhZD=k5CpwY6N-}!=s3o-U6BCb^S)vk}rWb;ug~#N6WAy*VhTK}(--+^j zWOfJtoZqT@^)^zSk(fiv0DJb@mK>)6ZOxsAKcxwK~1-W#}&Ptw<4q5VBFfo|{SK z2+crx=OcsTfrqu0ciS;hdBY0EMJcRlKbD7My-6ypkHjN_PwTBWss`aBvdr8)!ll=E z>`Q+$SjPqdyk~5beQIHJ_M7RQ1O?gxQ(@N{xTiTLwC8S)w3 zD>t>bS%?myQZBvj{LYL-`aVhG2f^5gX#n$NY^Mrl>*&dBdtK(>H%b^L!4yC&)K_j=cVC4lOy*2M|?ggm-*IcUlPEE4lFD zOeR!h*p=nW1CXe-OYrmiTNN4FY7L0!{f&cCsDx70*<+yMy4xo;QMk$rU;9pgp#35G zn+tT-`26io!#864qdabAtPFbCMM|t|5R~gpjd2kC!P12tyPdm9=njQ{mL|y^|3mlD zjqu|Ea@NfHp7~(JFY!Jv^btwKp3hYQxx-(+;D<0)Sm9w2J=+oKr?!2mYex}%m108! z$eo`MYI0x%tgr1cprS1z<&&IQG%rkGjJ#->^woBD0n*pF1Smh>u>BK5L76oOn`8Ru z|4h=_i|+^;NvMIvXs8XMQd_lW(xN`S==`;7luS`-{~gx&2vc45bl*5vGbnm~j%~Ir z#JYMY&AOUGhvnr(U$X>Z#UAe?_O_#b_{9^$p#^poQ+1iq^m6!QU5f(mo?<^qEwfK)c%Kyd^2 zHaSsz{LymDNl5f3<+r|lG{>Oz{(h{EVs_|TV)Wb_4_AaZ@OU5N>`&U07(pOT*sBJv zc69$*j4&ybmQLru6BiDJ&})5cg>ld&F6q?|CzmP`^NAN)>|_8E-D81}(6JtODTry@ z3(359OHxlGDP=rZvxPDwFnZAutujnvyO*-^PKtS#ob)hjfv;7 zj?3_==ee4)Yw5!SA4|QsE}8lx=ECw5y?f}Jt4D}IQ`yx)ne-qc(9MJ2G@F&sS=`MR z^HR0gyb4rZX!GPWeu?{fl+=k9x-y=49$dk&iDD90^HK=2T6xyjwgU*oy-#X{r0y&7 ztJg~Cl%0LuQ-JT#3GCgU$D6>LVuVv6v2=aO;xP>rhep4(spdOQb%%7VCYqip}2|x;XQ71l{m^YWLOo?L^;gm(gxMn)NJiw^X;SpFbIn z-jCDyxHK7Ez#3aUa5i9InmMP$QuK?kKr<%8cIi4HONI# zPM2!j^0W6mg)Dy+<4*J5YuBzu(Pw2P0nL51`bGVl}UR<(HYQ1}=* z;Y}|a((NwSl|ZWgXdKF+&@fKzE`GL7s#-%h#pM(23VN49P@LYBk+dju{<$Me#uBrx-ySvAHM#ZZfT5 z8sx}4R1bh$dU4X@?TJ_;e_h#6`E6}R|MqLgdCsYW(e)4(zW*`!2 zr4|_!Zzm;Wa_U`k{m_THpfhslB8*wFMTHn@p9Ptb(D1^5%@W!w9-+Bt-=w*yvyX;# zYYGe$s3GRr5-2J>6(}mAv3s5=ZZ;dU7i@w(Hb}y~txW}Nw8@&poS+kVFbkrcMDw9lI+Z2Etn$O2tb2wtl{6qdw9~uv2 z-&~4!G(R_BY+w}M%CY&rw*j)RFgTX~_bgDAb|&pit#AfP%Y;blHVaO!b<|EDE37 z=9oC1#Nw^3ooMmGEi8t=pAw3YNSi1uBSXp6yZl1;-FvkIBEH>mGr7*OR&f*pT z>+)#X?N?L#nyk6##p(Yv_a!f)-H_MmE0uArn~x%*KX9zA%6e4otmCpny94huJlq*r z<;h3KND|J^sJ&MMVdodF-!xZaJgTK_Iis7q*9Jdpo##KwCY&i`@PABJTDOUB5xbda z@U>WFoVL%-+n6L?B>B`8YM*4h70joHqS8jBjIIM&Y(`wBsFTp_V{-0)*0`BMuRE+! zWnM0>3zpW2@wqNIPS*{+1@h(n06)KUArE=ALKr3S8q(3n-3%uaoIgiBi=2RH_6HWH zaT*Zm{3^=BuLWqH>3BLw+FXg_R*Xv4s&l=nWD^t3834El9~s4pVucVdq@+TWy%d$r z19uqgKejh{cUtMGba>jbheU{pVF8U8^vYY-+9!6kt>?s_i(*SQe@D$x##1V$y?^t~ zMT7MDudmQ9Zb3`yf5N`10RC@du9 zPamD4NF=Ei<7rij5EIjVO?Qj|~1Xb)z$1tlj8L2D7f>A|QOHcT zjq)v2&scEL2@I=#?b+iy*@8XsdVEJk-GdAqHpDy@JEM}Gt=I1@RqgJwBUH3fbymQ8 zale3_2E~qSCI%~&A%|&Zx|a!V2`HNV8`oNJuxvnt5k7Z!vqc?yqeVZihO$h|LEjlq zQ?sFtc5k;MFak=I_3>Sa&ojVf=U-o$y$m5-R`_wlV!153GBq6XP$$Am{1Vqh8MY)0 zF0a?D28Z=%beZNk1#|?{P0qs9&^d_g9!UQ0CYm6oA61gzCk^I_4rYX4@tjJML@`BW z;F22pyIL%53CJ%RcED zdR!86s8`C5{(kz5PUFpVt>uWc%N;(;oTl4xa+vQru=*g`{ z(E|V#AN}B%`t{RsQhQklp(W^Ty0vWp3~9$&C7Y@eZd zv@Cm=9f5RFGB#)WUEuKQqh>#(tlK(`LgV}8%H3!VjTzTxmPa%I$;}WKc`JeO)ts?N zkxi>sRJAA3`Q-sIO{WP*+($+iprO{)AUWV@L4U0;57bDUFKb*gp7ym@X=b@WbzAUe z*F}#;cy6nuHs_{gh$R_8)aH!xI@H#pW0VaYRtahme7pUCW55D;EctZfsIwVS+xzOe z?0WsGV$WV~Fz=p+WMJ1neWwwYC#!OOyf(xKvnW`pwmI?@Fs3uE@Xa{OniML*H_xt-DiVMZXg?S7mybTBjBl(Woe^6ZQUisrp$)$Q-b#6#$jySs5M zV3M*u|FvS)xJ^mR*%JsSRdQB;2rxy!mX+@*dxu;XNpB+=A^o{Pd`K8)Vc_P33D5^+ zx-h4N?DHc+{CKRxoKpZE*(7mP10iGYC++mBdB)>}%Fh147i4_mMP!y1P;8AT0iZ|Q$k&QQZbNs) zQ7L;MV}%R5$qr|2YfS63N<(L130{GG|BAi-m~9zAo9+7D=cG}T74z1zm695Q z4#)TbvQ7RmI{1+|S`Y5vYVzVO;!8f;z!~cz_IZS#UUwh+k|3zT2LlZj$$ceLqe^sl zCPf6x5D;eudN_Jbfrrd0k9xO{yf2!M3eHPkYKI?lb^F9 z_bZPlCgjAA`USEOe6zEjT{;O)5&F{H=uOTKqC8SkPO*h`@Zs%O&}OoZ_C~irX6~;2 z(%@(6Qo14?^v8izGo2*r?}7{qHRvY#y4DVMOD;LbE#MIbRkK!MAPp2)FI*+&DHqfR zYrP^<4q9HkJ2~c*J?5LSHp^!Aq;CBU_*ArjvoSkO{wKZQ;ZJ(Om~vZr{kW63$*3od zzt^sGqGHDi)|!qqf$ebk6{1YC45K5bl!~LF1de%;1C;IpZb7^GI9r zojp5dldWiMYLtaF0&;qUOos#Rl`(T{#2bB0$~3n}_+vM+K3+D3@IBpQ8UV;k78$?e zXABKQF{EFd+$|c<#zxmB(r&l5jycNI!B(LTXwal22)e$HC;5WQilk>Z7j&D&`@6(O z2o^*jy1Xv^D`j>Zfyp`rO;#`FJ!sDC*Xiv2$U@;Qfq4=B zNbc*wP{b?d0(+9XvJE^1?1C-W1B(w!LoHJ&* zkHsd+O?#)072P?;u*aSHAsuXU1ZSW|wgAQ*nyKcJ2_#M^F#0S5RIKrY*7wUnPehVd z=5s!vNIO~4I7tNT3@i72gHm#bNzCM&4MSf`_p{30fViZv7G>r0wGbq@f}ivDDWDyv zEqY6P&ubXwO6$^bnYR*3z(Ctyim2Satc;7bUnYfN6(P@3NJ^ugmDfN{ch%44>}YKw z(@$yOYGWX8dabyo!wW~s@C@yeo6)@92SY)>uS2>XwiDeOg!PTH!Yr!kCEWy%naofPwoOa$1j9lx(;1~qEVHPo17A)ljXxGX|ts3r%KNS z<4(`@&Zu-=Zp+4v{p=2Uc*2X)0TPbpU7rd$hUV*o#t)-ltH)>*XVI(lG+{hEbq6me z)vGvGLM5=$QAl$Ub=D)uq*>RL{D_Tr;}BGiqzYTL zMYN}R0H+Yz)!-Plhpcx?qaPyxKSCT(%rLQDzu!JN5mvzrP$x-|qXAG7gTF8kw*eS# z?dD~e&)!@lz|Ri8#>&lI*W0od1^_pFcuT=uFmsyu0~7wh7%nxCnsjoQCGR-1X9IUZAC*Wm`mvlya=ygdXB@ zZP? z`U&CdY7l?Cwd*NsTF3lJxK7^9`^%g9!sDy;g-2Q#mRB~+Qm(|qh@67!lzslX#I!lM-m#p8>?|)%f+$a!R}2>oD|i zj^yHwT|9Ng_I|^xW_snsOAtUJR(D!VPoGvNT=$`&pA4{2j(L{}<2(E=%C7f(Ke46trR8Kr%M)g;~sqC(8?lT*UI>=igno5wcXbR#zM)mzjg zv|H44zDawH7pD26&h&4<8@bsmzQeLrKTUVZJN>eS!f=w0f`rs>;o(Z-juDiU>qzEa z0jM@I+E>yitu6(#H$}Bw8NY>%)ozLRf3E+|x5B+t#*gD|=6{!B2hBeKQE(wl z(knhMj)#Z#()MzeVtnas{0wgTnNMik<{~;e)}ZLXj-tVdk!&taP1PL^N#5>om^aeh z;K;{+YY6kZrIi)l>CQx@|MRH+8OGj#5Qm&@vq!=^naUZQyn?K3|3-&HRN_cNSK z6dkoNOKWYyts?p1YsbVe^QFIO#KBfwQB7qeIXR!;GQGKHr2J*JaM=TmnKlP#EdwUvtaXmQoKsyXSQNLtzxy|>vGN&EnlSH{I`Kxb?5 zqD7${$Qs0Ojj;fOpIXxS+4GnN161phG#>3ce7kb0b(v| zB_aaXav_o)a3JmD?MYrr!InYb-7+GZN<5;`BcqbAoGXFc0>Y3U!_u=HUDKmzoM*0< z9@^#0u@Ix?Kxunq>6ZHHeho#LC{yqHG86}GVh`Nn@{8e1y5{NX>#f^_ex8RUfsg=V zk6Alj!U7zU>4a26HW@LMhKGQ`BCZx;9Pr|!kJmQpSun+i+qg^C>HX6rN0wQ3#{N(d znf9TazL`s&mlYs-sL3k$QQ5^0@1x0g{EvMURpp7S5$4G8PHgXzmS5)Bj19Nb@{Prt z*FS!9cqJ4f`$_lbjR7LVe=n9V}p(oV=! zwIiGDqC1Ywx?7!Z2MyG?l`S-%c3wcQ_}_J;L{hIcoqfYbH0k}HeWz~Izp3>bL%}AC|CUjBu>PG!FW!5}sz=WhxtsX%nH(5_1t~`o z|4qW>nHf9UT|yV9jijfRh84l6%((a39IcdKCalP*w)xBQE+ev|J*Qt-U*x1f`hb)u9$;{WQmtX`N%B4X5Yh$MDvvx-5>BC9kyirm-^y*gSUfd&%Fs(i105 zaJ8U?Pd{9C=u;*sf+Fh9)!|Z-O=rH9y;ick324#E5DKaY@4?Fj(C+N>kS8+}f6tJlt1g|MCG6|VLLqcmah>c+hYlsM&i1uO`s{ic#k z_3W+~M(ONFjw=^bW3Ba_egW_TS$?oc58PNWMRm&wZ5L8=M?OMO!Y## z-waQ-H^WoT@VeL1xAG#9?kO}scu`Qpk^ah-j&{5+r{DI~(d7c?&|$b#g=3?_@Ke@nsJAT>40#=at@in&}|I4654L>UZ@{4~Cr+ z|JccSsu%T`$JU{CuHB#Fn5kwY<5a(KI4eAjtl~QNm3?eKq+m5wfOVq)zz&jKR2&{U zxw&s3J?k#_)T(X9K!{P8fKTYKY2TDrd^~>Xl()eYDJ#I)usnOksu*%EFSwN&nvsJ-Sr&aW_K!zC9kwmxO^5_>G zG5=}pVrhu&n~(LcQJ9Xn*5kg`?7fjbRZEP2U#*Y<j=}R(%t%L@=HhNysyaK^y)-e*6%bG9q#z`S(_Za z*pBlCu(OPgQ0qZ8)9~%1BqwQyoKT&ifFhzv@bHr^na*VcD&$Mz0H@)JMliiwf&-0c zplFbe=3`&JTm5^iUvbT2*~e^^0|h9YIp%tIvNm;^E9BUGr)|E^b!~>eWasmhS4pwS zPrq5h9X8;no`9`HKcsEwILM9=utFdXPA*p4#brYwpj?2+S3gpVe?U1NvMqq7CEd=B zhjKX)eYCB=%HYhfEx~~c(VzQhb&V6p>O$3u?q;5p^A)=G8Y5p0nHc883&D`^VuslV zZ;5(1$Zg5!>vgQ+P&hFDdGN=H2=Wb^`#h=CV=d4) z;pcMehxU#yTiiq|3L!0Dx}=3$s&pS;q@S#xC3;jeK0lF6R{L(Ajm&wL@2{WTGrhd+ zy8{3U8(D3qF{pZO+I5&0PcbyktF}r9R#AP~;fe#TlswlgN9#PlmHhy+o-Tx^Kq>FG zr?`MB^@7}W0A3RRk!rWCt+a^1KxsGa2AnC-QU$2X3IwP18v|bAqQd>(-%?dAue@c> z3Imcf3{fz}?+x)m;`i(dfeM?PkvLzLLr)*jm%zYM{`EuK!HelW;VyYY1G+8z2twAb z8ZfP{loI_F5gqMxB}WcPF@O<0LpCxVyV+SjJh)pU(>dqf`@d`EojFF z+qG-gQ}yiHRrR=xc0Xbq?cQn|@3aVa9FMm3>T16I^W8RLbQc1SDK1eEF@S5`KK!hl z?jWe*+_FB817Rq=pK@lS4%Z10EqI1H+&`d{cYIrfX>E-{ZFR_&))w%@(x`v!F~FCQ ziWPC~^D9j6(I?!a><4P_424+s+SN!K=fy?ysm9r@aoM`w&@@$__VTAnX|H^)cv2#} zlL4#N1o%vpYbBmkA*b(pUw#U+xo&Q+TfrUEuxz6^^z+$FF+fkjyU)I@XL8=QCkj@cKbF&te)K z^RwGI+6SduYU+a-G^y9`zj2dok?3tjl9}JZM0n*9uXDm#dtaRL?>-6kITnU4Ia2*p z4b>$+QT%lizu3wH&Ft#|PX0WKT57yH$KAc34>o6}JHCPA=2N0;eWy*|3K(0;zYdl% zaHHqexbOW$Cs^@?xufmCD~!9*hAo@^ z@fwN0+@top^ct%A%ms?G$Sl1Jn&KD-d}A>excC$k4pZFVb>sDf8Czd4JRZ2OkdPFE z9!+;3x)*TDg5yo#452TvM$zsPJ04rQfA1V|vb0)?S?~7D8}jNDwm=phBi~(Q9pio% z<%lb9+FvN(Iv60+c*?XJi?PODMTyIVAe~0XRTgi#|FDJMyh$z>ZZ$lEUb4NZF3mh; z<6xvmasWW8qMoMbdJobZto^b!6Z?pJ%%+~?kpwDEj6UXnFKW8Zo)dcz85G|W6KRQ? z(caheWjSp&9&J`PYKDiq;4=vcM16L`MHh|tVS9$Y(=d$?N)DtQ_G?n#VZsttJ7;ao{T&~iCi{rQ+tD~#;6`hlw`vG>PhesnMf=BA z2P3TWI57RcJ}ph5xoEOb!si_@t`Nl4EQ01WFUI};8U5|F`sbNJ*O2hYek2#GY;V8M zTKX7SdMKm5HIWuVO}f?|r5F$jr{?b7Whe3m;cn&whf4U#wOh zU^v%FE&^I}J?l%Y&sN|b-)ioysG(o?kw&Zx!@m+O1zw!4K@q8!TS4d=L?1^}ATB6u zfL@_d7r%82$bxJ3$mLqoOAk7&pa3%LmGpItS{saT7O`2g8>F6IcPCiceawa9cW|1K zkhnv@SoBS=#{w731w0zbZk)*j`!+9d+AeN4vTySq1uqATG?#FWHNtvBOLgz9`JpzW?0VL*b^o&N)Y2X%gZNN_gnh63F3sP*UXq-noLlkXol~T%-Qr+MC*Hk zmDUg$qPv=OVJNR< zV~?>wV(r;K^gnNTjLB(Ae^DY3n#=i)N^Ds^fBVE*eV=(!eUGClkvXM|cEmwlO~2_@ zef}WC_#>Set0(b)S6Xm0^Y7kZ2M*ePVlI!WWDJi(yi)Gb8U_JS96D zWI3HUbM=qJ!mHZRrpXg*yhWc1` zQj_O=p|e0AUAyVTfi}E@k!?P>LqaR!=jm{;$BPJ zZ}U?~itB1u%Q^wz2Q_%8W2oD0iI+KrYo%vi@SC?v2Dldj$yB#eq}e@+r@pesIQsgl z5-II)OfAJ*`t1Q|1|?QxvR1zOy;+itVjgS^hrOP*c;nqT9GADMuq6p+!^E{?fX1*<$2pb!IWpBAF?!OeYwqsnm z7vIfUzE7y}6ugmTdv1Z}B~=rVO)r$vr>cv)!Ywm(#3V}Irv-|2*1aJ9h}m`)(rWt* z2?19$R)tkMZ**e*Dx4pNWtzK#B5@Gw7YyHAylT*X=o%?#IT{=XIm zGo6Noo+vPBM2aJww@NL|?L;p$@w3O?{*Y~h7m$5+w69@MX&02tNQqBJxcp!@KlTnSebA)(OAEl zD0Q{VU_z{3jBRiwp-5kCBatg4sGIJp+y%-_Z}xWveAs8I!=&TWFO{YDYW~0_igwe? zeoMiDqJ?GKbL`tkFFWe98O#RksXNV4D+HvrcDbrHFRNyqAt8?&FIDo0EoW(5@p2ZR zK4n+jUrd1L8FaDH2BBOFQ~JPED;pVYA;c{;qeCA=aYV66HDdQ&X#Sp zm@TpZjyR#iB0-vur**Y0taqRCFC9D!an?087f&(g8zekFu6&Ju&hiP}`go77vHQLy z7hpdZ6^v;U~w?~a&ezozW-%WMwu)-QCzNkU8S_n6Zq+1B8!%V3mYl+oW6MPoZi*r zM&ZL@I{?<8^~WPSK!Dnt7~B^@#%!h=rRe{9SF$kTY>EE6G1}+f{V3RUwR#?JhhYIcf&JFX=(U#&wO)!E<1}fjgC9a3{J?YXFWU*W z>HE#)zK7w&v8A8Nk!M_hRaEJLyT+Ma-D?@ax%(~8g&zK>CcIz|fYi91jQb)+Q=_U( zlVMWQ8(U{Le^FvbR29|biB{-ycom<~@x5-$C~DjJ!>D^I6eKD&xW9Dd^+I0MqH><< zORmgE3#@%Ek4sE5a5EQyn_!NUH6qW(Ogrw}BElL1&b(L3@IYfJj$vBcTTt+4%UQgc z0c6nyiEpSIIf;zc>e(M!%OEp46S6Wg4l=viKr|o18PnqQTE5p=>hNV6+kW1oyJLMn z+#8^2XEbNKKQp2++sZ>aR0(GKfIe9+ z-8yg%Ts=n-`P|bKqr)e{2W0wmAhv9pDo&4~8lNu5iiudtt{)8v%$32T@lbk+Tw{^# zJlD;Xln#iG1GCp_b$QpQbe@^l=987$VP5jlKFx@=`ud?|+w0Okp&Az=^HlTtpVt`4 z7{7NyQ)WS3RnpmOE(l&uzLi+@n1kM>6ns9(H!|%&KnYLvHZ>*wG@e~{w1IhdcXKo^ zY;;DXcXuZ>e(|V%hOc%Tee;m3{+)Q%IAiT=D8Rf$x9*)Pq$|;v@Jmi`;NAR0S%4_( z^6lftHpa&nx1l{kOKAc@+3k{i0=bFgyIqm%bm01r*7KP~;n=Cd{1H|gwPhw5owKKP zyIC`>k;R1$s|yu!--8-wb?zJ@T!wYoFjfvJE~pERw4X$7>D?dPJ<;54FLt)f|2wB( z0wVUQ!=~NIoc8fy`yj9>hG9YK^u-q3wIYEC!q`$0w~2D0*@9U@Mw@r5Lz~ALs?o!i z5;e^>!J01w#4#k?2!AR`CmNS9$gJ8_j&FJO{y3D&d~rKkyE_i+2TFwGRF0oBgx~1Zs^k!_@slY1 zr>P9E7T?W~<)f|T9s!$<#&d%AtID;p?cO<|d=9~F)^1=aQ7;av`Fe$GW${De)2lU_ zZRJ)8g>PYRL7QEgnkoB|4rtNPshm6@UZfwn{9S>&9_5`;*Fv_oV^K+u6{o09YC%Ym zC&lm}NaVrZ0qu1TlDxxeKY(`7HLagl*?VLw(s10k3VFCVbMK+V^4rUSleQ^l8gf}1 zDz+X08upR2yw&@{zZwn1$+Fr?O}wk7?W6U<!@Z&jp-!>^f#(?))c^0jA908$jd2Z)aS@e8y*qsUf-3yctk zz74%`i>)xByY3bn=OfL>;k#5I7j%!{>h{9I=ANg1YKBTz4FA0Vt2A9$BMGY&Rn3?( zY1(ZM-|oX_NSqYEny^eB+OhNT#R^%go+?qiz@jSPfTLr!&MqUsmm-C&ZR(um{ikte zyB87f){}QjPKOpv?Hx*dJT#03;0o8x(lPDx${Pav6Lxju`z)WY^*&4!CEBg;VmAhr zTgj#e+%SAg+Iy}!*W`5i1hNIaRy@v(MJ%a`<>5tBs|-f^ONCy z#YZ}Nd6wA=3rj<^v8m1=hO#K9Y?#6w&#kR{XNdLja)9&6cR)W5ErIr`Oj`tJU zYRjfGb#foMbhRrrG!zv))CkyB`yc{vgV*f9r1>;iIq^r#{Oiwxep096xj2v zUTud%d$>h5>lC9gxL3@sFVnN#m9=zF$R3$+@Jp6hM{8qaw^0k`rb4vlOp(!c>1Rb=h+rxQU4 ztB5{7SgQhg3FSt6nMzS#&B>M9T?h2*1B_Je=$8n&a0Y()pMWa4v~e4P3Dh0w@Rznd zXNZ~wy6)cV8@&;)LV=W#iwG#GL?K1!+qn`w3V4GP`;~I~u&E30<9qM7t~(H>dDp*K zO&zplFlh)NJ)K-0wAY1e?=d&TOKGJA?WiGE%^r7=OiZ_}rsJmvkVy=$Wt<&CzL{#Z zg|NRoX%gY+c@pkbPpqbB)-HS&T~t(FnVM^B#xgJeQcGcOn9@gW((XX?Hr?ZX56!`R zUcIhrrKPTlUS45TIcla4YQU&N8FH9xaU-!g=$57c=xDQ4_01~gnRD|U}Ig3%XK zbsw?8;MWJo=6yP1*;X)EYzC8J!y*W6A#(T7B=j+Y8l^hh@|?1S4o;x<;Thp6MFRZL zYoarsjIz633&&|bcpCP!Jg8{RXz*>+vQi6=?6i!7N+i@sV6f=p)XG_X<| znXEuwG|x+4XLs(kz;OBMq7?42Y4c_}+lxKOorQoOkC_7`Ew^qbdx9e>V1O@J?`CCn zcH=5zoEXv3Lwx6M8qv!K_ZH8V-aBI=+E&L8!im#UyO<0f`r~sN7F8SGTXN@Jcqsfc z`i%{ei_Q7Hls8ycYQ<>(dM7w3RH*x^`W}?1=b^g=`HCW?easjw7?8q#eB6XKsT!eM z3PO3`E6vzpYf(Md`qT4iw^}kFO25On8TKfX4dG}7MP76{*S}1L4)`6;HV(GkrSY

    F2JAd)%bUhp<YR|+u$%ER@o52E#b5Zu}=-oKjj!Jj`mCkQ+P{^d&Rhcg0}k_<_Qf@PF?m$ z0vv1H&@A5^3wQ*_xl*yx8&!2Hih?VhQ5#YQs(P!F0qNC;3~UNgf-^eThnHs~M)HC$ z#`dFJ*2x(AI5nm-R_NHKhi2t-TxAbt?<;B*F(+A?V;`F+e4lSTNdV68UacKX$9lVR zpil6Nd+_f>9+gk55AE@ZRn>syB}q)LnzM~~=FTVjGh0I{0z$lxl!>M>1q+eOYbM4e zxgfkz;>Rsk+exc9f`!eQ1rIcnkQz`9$(r0O`1{!+xoSnqWBGUE z4qE%8Y;bXDop?(c+6`M|-j`>Q{hqsBM7mQ|?WUs*Y**mEDR-NnM#szPk-WBcsxl*< zXpa$C!P>HmkSaZc(68Uxk%{W**8Em8H?4}cs|FYkhXaLYz9O(ynGjwNN&zH}gHCYS`e z2S_7&zBGeb7L(NBN)~GIB8` z6F>TLcH`LZEi0>)b(N#?cYN>ZL7}7njI+5%ERLPv7~RdwW(P>-&{wT(okk~l{SwaoVgEZ z!~|sOpN!!WEg@XNc-^kGC5C5k)giyl(AiO)wMXwgL${+DvbCf6erDJ1?TgK&G zk#^t=+vSXftDEuQ4(2SnZ(rf)8q4^ld}80p8c%M%{FhJVYc+=arLbP;iPq5 z$ih`yY5=DS4Y9gPxX1!7;4Kqzsh&*NFj*(okL@^%4P?UDA~=m2=G@QbqwK2A?+QB7 zBNintUA-uA^y%ee$I{$nxHt3i(>t)9$z6A~=-qxaEfJ#|C^Nl&;sE!CHl{?05PNJV zitqOT2P_%px4yp!3(j)IMh~+eh0)5DcfA=>z3kp}P(|5w-3vBhV+ZyUV>j|l7+gT8 zQ&49Apiq-{-;PSURpFe;Q>yyA!J(rw#5K3CUYF(odhycz5Ff@$L>J0jb$`B+qk2N! z9zUZoh8(fv=a&(Klhg=zy>;T?N)`o*Cn-r3CeLJpX`e7frK0_r+L&2-_=R}J@IYR{ z{-RS+S!3oj9c3bPoCLQ+2D*HfWGifWPgL28gl0BIf{{H+<5}$#1^pT}JO*rzXbzNu z)*q6@jXL6_yf*_O?pJLsx?ARvQ(NZA^cOcgqsE!d7-k4}N$W!g#M&cq6kg3uFP?7U zcPSoih&6V6F>ma#{TwgX#|kN@ip+f^|v#x zSvgG&DpuhHM|yVJ%{686UfVWL@~fM)Zb>N4oCpfm2oJh(?43^O%;)r(rg^mCZTsOu z{XX;`N<(YV4k(>M)sJbde)!}FwW(Ehn7yCYJN&jnAem+T@}bPr_&v<{qu2!6&U=TS zP`A`So7`XeSJB5cTTR>Xj*{($4MSi>a%8LsHV+DogjqLigpHN9XgV*^0;?y1r^4}S zNh#Cs_Cl(w6{+EY$ z5l@DnaM@sVwOTMsbX0c?9(v8ICd*;VZ#$Iss6ccV`N);Qg_!4eQfhvqb#O^FFI9z- z91J^SPD#(}k){=BeU)$@0~Pggu7_It19plvcGuqqROnEaA9-o)xuiB)NsxjqVb<3z z`p75=IQPYDnRVSfCm5JaJRuU;DgO@nr|CtN%VyRM;rg6ledX+H%z6=EtsVm0>0cx^ z=X7sAL7edL0DeLEIzaLDd5)cqF>23xopnuHGJ9PiZ+1#vdH0!hMs=Nq^3Zpt0#TLO zprW1+*WP!HZw2lfY(&Zt1h?* zjX1E}OL!goZM1GHwjh~^)x`amt0$%CB~t*sOguARcR#MURn7U%=^QSTYw<#8DTqanN22k~;kHb70pT@E70%`W*#yAkOyB&+u@q+*ReXK#(Z z`3eJL0{q`?VeKkDFnv}ka0?smptE}(E86aE2FZmex9#zRd7t_7E^y7l+)Il5OC-4A z-?}NKx!IEJsrc@hT3ZbYCzvRwcr};4KXn&BI6(>T8d~Wk!P&u>kG{yUK!*KWD7#lq z!%zd(1*y=+&e)C}R&0l^5w08Y{ur8!(c?QKUHyd;9t3ZY8flAQp{4=0kuI@}wggdV z=Dhq?VfhValQ^9a&ZD-Ur!B8fN}ZQ(bI!7h*l48sRws()phjaKuVry7px4H!Y)@_A zIv|H7NLAdskfTTuLdgdM+s>I0d6r+L??5xhu#8?T0ImD}k_#>`Etu_5I(kM#V!{|; z$lOBz`tYbA=FdN>74Ti(C{a$ah&0V;YZ-4C>7CkG?`C78N6HVlcDzStAO=zeTu)bd zvc~l~&#@!I_hVd71Qub)4q_7*vwJ-S zUeo~AjBPp-IBEt;I9}2?ywHA~>@ddM#S2-{+U-Y%?D(YF#GxrB2yjG`7GOGvJ41@VR=o54e4zh3`zMI$8eh`w`=;qjN12US#+$J|Ur=7U| zvWP35Mg{OqJTCE+Eu9=?I^q-zxHu670?VaInNVWqYiQJ}8PHoKa^>P7kB5i5-xWMm zRM5SA^}Csy#$1%P zqQJwM*iX`~;kN3~IFLElIuN4EFydJaOwz_DDKik{D1Sf=XXQ`zXCZd|Br+^I*0y2b zudzt}1)HP9+qzILq(mJ_(#<-C{le44gF`A`CG%n{dldL#xVbw#CKQz_>(>8kWQxTR z+>wYg5S%k^8SD^=cH*+#{;sjKVcAfFvgjid=Dv7%yl*HS&)ww1k@K2{UDf0>GoG91 zv%vvCJD$PhKrzU4r^nm9&?1%pc=mG9I42T(D2qlgGkLQZTt+No4Y@maW*L0Q7A2um z7jZGrK(Y1yO>V(dti;+{{*;l+TfLXLccH)5xFX0>>Cugf zMHmUAo*+8o)iTr~8V?CCmdvfFY^F9m%uIMHF>|=Hsnyzpl(sEcJ5AKvQq@jlP?cv7~xkJP6~cDrV70(S!J*!A=dn0K2}9_D0a zysm2>Ze1H*1l=#07x3o}zWXXIw#l_ zde1gb6}P~@RT80AQGl9ABbpTFTSj{r^zG-tLMgLDvUX@s)BZ6~V{K3I@vjLu$bV13 zd9JAuN`Bol5_OV+n{Vx14+b~hd_k`%4Yl4vsC791ZZ(tR$&OYez&(grDh~H5_&kB5 z(SDez@T){!Re0muwgZ6P>%+I#KyA*9Cnql5DdX;ayTqoRHRZG#9(}twy6SGCYjDZq z>7>!IE+MZ6bd{CGU>eq^u> zXt3YjXt6KvE2=-UN9cOg>iNQ8EIe?uA6peg2M60ld?EQW0{X+ zsi;}=R4rvHX3ljQS39(FM$(bXt3}JcKxjl%9MYgn4_Vk>Buq2Uqg=@v$C7&xmzGG| zb%hbo22j!(s2!a+&x~HO_Mq5$RJ}cixS2nZP(*64#t!` zO6HbIvc^W`lTgr2!KGaCRW;KG`0b9%)kdoor->J3-%9rA-P;Fg76t|)p3xJCVIO1~ z*ENci+FqsIR#W$8RKxOQwH_4Vhzgl)I30 zwY!kh@W>Ilf)va95#qUueL=-h?r!y^XHWee zw!M=0p1!yR%IyI@e(*ML1=>REN^MN2J0e|WbhwnM&k29hxFZ{oAxu>fN&TV!Lso zgIS(PcnC!?!!hU=iCTpoZM9KDPFB_%DJS}BbriOa;_4W|rdKfoK_>XzFf<~Y z9~$L%&f4WT1BYt|nc}R=H1~EF&M?@5CO!{0eCp%3@=P92Tyzh^>nC!t41wQSNYP|V zlF6wvw!o8X-h(IC{N#6YPCXkz^On;2iHPNvcIG9;MNQ;xi}Tpbh=HKzjZunhfgN=! z^0S`oLSw5Zq|6*ca3FoZvp+v6reQg+`q;A8vNY;orZH7~a;K$K`?gm)B7-Xxmw#o$ z6UJDLHu#M%0zjRfst>Ts)Cd~ZN;-FBIc)7fUz6(pBE0=ee|;gRim7M!>rzSc@zD0_ z1f+vHr%pFKHAI~9EByC*cL=l8x)0Bs9F2_nAq#3@^SNgA+m;=2+pg}{Q+h@EV@|=D zHZ2IERj46!jjP?{*M9o0gROFsh7D5^lK)nEeP~sO*@t)?} zV77t^JQ01j64Y>fL+9%qC2MT5kktayS*`UJxajY-8#X96&@190{w|A znG5fba|?gfZu$PjD9*!K@%&B-5iWaPY~pZ;OeMQs!RfQO&79B4)$zdP;UWWF8V8QF zD-W+mdf@B}O74P-Nek7sN$O~I}E>q@c3F|g#Pi`C21$&n21s>{?R zFD02QCGZv%-*d>^ekI{O%yVi!@mkkemHj*Gtk@wIJ48ssBiQr zjj);KFHw#|<&x|3yeqJp=zbfM@B-y4hrIgFe515vhJ@v*Az=8%nv@{ZKKua|X3*Nl=qrg(s@+et*rN%=T6NW!+%|Y|r2kUo4*R3C>R;}A{-sRgIH*@COj4H0r zS^s$c_Ok$?J#Oma^jA2bp4jvgXff4EZQ0D^Ga&Pc1XM+$p#j%82e6&iip-kckg*@zh7h5xl$~emnQ0V=J7SWD-r{U1!?Vi)^-St7^zDj~RlA8@~U3YkDs$%h)5f zIjBnK+anU**He1n1eCqe9Zu5A@Ya)W$MA6g3g0cNk{n%vHdafee*5w!+UQx-F8*;E z{gl-4LcR1Bp>#o8Xz;^wxrzOw2i&xO>${f5E24qw(~-=D`KSBZb}z!_^srvSQO{@> zsb?C;@Yta!?X&{|f$EdDPuqRFdb~zO#n-Rgwj}uT*Mc}Ywa!quRd+v$Y?%aV@HoOd z} zp#=lqI|rd#MP&xjX-T1@(9NV(H&Tskyn7vY`8>Kqs zqDENHTH1Z`@AL`--QHod2&kB=4=b6f2LqwOP%O_I-GvK zFM3)(et95~E8c)@?kFhrq+_s|e~5R=uzuI&M~)0^v28tH zanrsie}d`d2oZ0X#mONc&;G1jOohoLBDncB)g7DhaOIa`T ztmxQIj>N>Ps%^20$5wuRTy3|T6~dyv6G{fLV{pRYm0OVxaY^qmJ=L=n>kvQX$?&wf z@EYWWyRFMFYkaY9X{0Zwm_DiAOROOO%b{ zMSM5pNVik%E_%+Ii$H}mT<0J-wofhSkqmHKPxtZ66)LNcKd}?{U_n~~Jrqs+b6$^v zBWgz9p4^MSJ$5MpQ|6ve=AJc6#KkQ~R8ZL1`F-SUGhDNo=WXZ&zxe)IhQsOC&B~A7 z@pbKBeXpCLlS>>R!`iG@&=gVCU-#+OeEp-4e+?s((>Ubu!-Kkw*0%H(qeNdAR^3J> zUhV#ei)koCV5|O;6GC7msi%+EL=z4~ zEM4uoVs&_oed-CvHyHF22uTo*z%o@!7O@-Ja-q%EKA<%qZsB(v0WZ%4iMR+-K;XnB zUP2t{JL0tID$K0x>k|D&PQnP(MsP1O@Uc$kIiQI&`NHP2c?9V7!0M&*?`L{R$&^{0J7__gg*vTEllQgo28HSuL zzXqq+pldIb|2mJq{s%t3-)H>S4j`fQd;lCQEWVOs_@|0j&}CnI@+7v2d3|(JZSG&Z zV3J0pLC|k+^8qkTzVP={oqj-+Li@mrn6VJ8vQxZbqWED?yZxD8xN~$^uTv9p9qMX^ zPcB_+6B-*(nSZPE4TQ@+6Z>;MJ~$lybsGO!{6BJpk!B$Y#Kl|*^P7;jKh}OdS`q(Qlby1A9XSeRTyiH z`00?z_{ZPo`S1PxFMpzvLckmYI=>P`L|Z#D|KG^;m+=4d8L=XvroMdcZUGSl^jg{f z-xhn8JzXdt{Qlo#D@Q~SbxDv1iG7^VGQjSP3wD-%|GnpUkk#@_(6CP>-~h; zCQH?k`7_bbX#O_7=*fUyYvuph=Kq7@gbaRT@*Ms*CU=bfOtcUMfBSH0ryxKOHn~~q zzijRwB!t8;=v@D%-qdwJNQv`@q6NYKZ53p7B+M&+TlPP!LXDdA=IyOOTQ^d_Bu8`7 zpNU4QLbAFw{oar`8#;8U;5UB$X%!*=&c8?$)^8Fu)c1#?W&bM_z|wyj<@l3TAmE`W ze?znKH#B7#{!lbnEZD{-HpxXv3t^*%KeSJ#-_UUn{@>84`u{F;JUv@(hi=uEA2b60 z%1AGsM zf}O}M#+V;)jqJb;aq*q(K+vCPg&Pg*<9u@Psv5nZo}(Z@S-+CL|A7mlrUJX*6?wL| zx31Ay8_Wj8Y=jtp(Y1dNbyo}=AwZ#Ko$IG)*Ss*tfd$4Qf8fBg(*8QUssCRbp4aVh z*HW!{_4bV%SGpI?!3oo!7!H_J)BLu$Q5f{9$`I;VK`vq}8WkaL?>2yF{&htF)X+r2 zbh}OK*x;bw$ZmJc80*D|y4{k%Ho+h09~_q7fXy;7KnU`-p0-YM>@`wEMFn$fYwMVR zCg05vqe{^Go(Y+dCrHX%&Hyx;%01j32M^^Y{RaRGs{C!aPTO{!J~y0R3a`CRouLSd zg>rq&ba$tdPa_ z;5Edm;*64zjrM)Ici7q4**spV?KcwmGsf@+`U$&8Asezptvn2${Y%go+x`6LH`C7b z6yf$ii=JQ~B@W)?$d=|Vv*Mo-s6_-O1LE7l5WGKeE#TWl4Rxm6tK(IiDzF|qif2L9DaInKo z?5iC%&iMxy`?tpZt8ffD1&-y>SpOu*fyuV1q8|jP#$C-r=Fg4{^%gA9x95*WFn3HpY-Qo4Z z1rM|921odC)6`X1u=DeV1V`#l?tPWmGasATQZJtinkaDc%5f4#yE8gdwt%YMy$-%^Dgo2&^51b;s z=lA4n)*(ejB@`V_r!oHnT#{obmBJ%k!KXn_-Nke~v!XIsdks-d?pQu#c!f@4|C|Qi zXV)h;zP1<5tN00;>6(`^Ex; zQq5qHZ!3#)>|XmXFCP>ul%iKzO3BJHSFVl2ZZ+$dk{pQwc3|#M4Ze54hHNw0RLlvO zW-Rz1|2HEpxM@L5BO(sp#SO`{b?^JO|RlzNmTAp`2xYDXry>!DMtqQRKDxdU?!XNvR7IvyWa*ck1 zf={}5tYt9;?&xPW_(VrU3DO9IN-M32&adxj&hNDQ1&R!w`*3tI{i#P;poa^E9y9p0 zCfkKqp;`ES)-FRkbN`D(OhTyu8AK0VXf!fWi6?~kN1&laNIE;sU=^B&lyD518E%wO z8}O*5T4%IdvA6qd>_niCXkS0lSVza;ft5$9O~R;bd*XeGNc4#)q!qo#*z*az1%lio z0^NC7_VMB<_-SLQwL3A8JoItB0T8bx`uIoZs&ZBk^lG)|gF2`Ke(~rvojZJ+N`6x^ z`H?9}@wWfqG3fql(FZc7doVajMTKtMn>u@`dE-WBA7jRv78 z=GG&b;f@+K&iJTT4J8Pd>i4|*5N^LWil^hT8?W`fJqPM&?%ImRfbkXg!ZX`&vK?yV zotr8Q)Nz+5HwnK+WxJjEj*G1=LxbH$1z_Xx<`>>1ns2RXD)!TUoGnDPgDHGmOXshd z!fH{o2E~qQb^REf!v{l{{~{bx@&>hfl~$|wj!_kiz?n||Ly;WQa<1l-8p89k6~g1Y!6=gZWi{Dn)QVuJ?@7=kEj`*G<5@JM-!k z@?@~0{g9?SpeW!*t5YwsPW@Hc-|L1c^BU(g|0xj?^PH4q`(RBvk_xL#{WUf`2D?gK z*z4gebu6|1=5b?vWkk)JahbfaS^))|Q6ad%fDbD5Q>?cA(AcvH&U60TXJ$RY7p-8F zNGh*uw?1J*5_t?lM?B)J$cxC05yoYKkpO2Txmgi$iDuENd>N2hms|b=%+a7ST+Nap z(I~#B`iP92HLMeV6>slhFxaROM^GtKfs4QP19A`RHH~HgG$xrbFhl4d*pb>ji_FP1 ze6^sDP4iCrWmD@WAdwgC%sTY~w*@gngdl3SoUz{CqPagNnf`}7DOf{p9Nh509EV57 z5#$I7K;*vk`2hs*8A1#o5{_U6JSe`q%uST5$*Ym5QLvU3(iD@q6 zr$f}l5buun-4>7&$&Se`%2+3UZ=Tg)V?VcQ(0wto%5JR$i$=AAPS{Jnv)w2-3?Caz z7!}QuLSeC(Bo;HPp^oKC{Q!DI?ckacUK*HVvg;j|6--zWlEpA()K(+(|ENaDp9vex z1ta8+X;*mtBkC#5ou}w)o zEQq6AJGTbADiMrT!13Zdc(Cwg8FPm5Tik2LetFH9_x)8-xbQX+(gW4(H=K4tBZ}osadvLAn?&E4! zj7&5m?|q8=%aCf_@TySyQ!T;as1thB@A(9r0l1FvduF#;24{0(e-glBX8Kk7Jtyh| z@=t;wKwGtY3Dl^kkX>qN-Oo))g8!w2-|0`3(Qqqe65PLygUM3{qXLp{;isorH<`Y~ z11y)ps~qRa8!ieT_cY1907z5KPQ=BH3kQw&W{a|+zGLj*n{{46Z)M(dp~O7F>qq9O zI+Sq79vQJDKW4&qv?}$9!}XiPj`%2vuPflAa|I{2NH%D;g~A z@B7iAGZU++N@tNTvw^;ZygfHRUBZ#0=hicyHTXyftD-AU_cNOC!R*(66Uy-}Z4%wq zymKAdBBIL9YmD8jN)P&EuI^sq`?`BW;STTbunS=|`7(;v>;@zP%W~BIq_hGhxdfC?z*ijU0QSNyNUIxd*P6QFw+2p#-w7TK(O3DSCgyDd9oWR}rjjj$PP%;FkO z_yNe%ZTI3K(LNeL9fOln>pm~m5TM~N&cKM8eg5Nn3`BwQat= zCFuAGL=JbCN=k#wr!-JW)6yIBT1;I2yczYM3xg0YtTo%I;YQwP+?}tQSwc&gOo#g5 zYtGn}wqA7DZcAH+$7|FIHL-sKFME2ad?>MRlrQg=)^CIbU=FT1DM>%*3d)7rk=4CB zrX8ufKb^YihxLl8Xmq$hf(}5hf;m>56p)XsnHWLv4B`jp;L>3zbA&Wtp|l;~!$(;$ z{tK#o;H)*ETG3Gy^ZcX1YzMg9;Bzkuse<1w52U;noY~S}Xx%XDY=@G^a1-};q&I*$ zJ~QcDS3?EoMI6qNphdv>KENl9W<_|hyx%7t!lz-D@;~0Qvk>eH1T60%pu=SUK5^^3 zRRvsFaFIpVXV`5z++DIwzvr}yWkuDWuplOZ)=_-u;jeypRc9S^bjU>kQ0L=cMdiSk z(4=KWipFi&b>;CGz+&qeZb^x8kp~1mM-g6(WRD*}ETaL{gy$We z;E8Yp%@nuLYW_vYJbdFZ4HdyJLDTMMMYb)*auhuZ5qtP^o23vQC$;xu@%|eNWNfx`VBY4rzWPB*|z5;hkiXvoS|6ud|mPe zLq4NYQ0#Dx93E|M0@)SFv?<{zB66hqzSc%4UCjB+0|EUD2=GZwq+&nJY@9k~v z8rTR8-&e_pwjva>PdE)|IL@5Ad%8n`j?J?WJ4%<}jJHy<5Am|_UpfzoH$;}W-;Obr zC{m?WzCf11T5~fYA-uqDI3+uGo!}~z68#@ky@g*BaQiMSA&3ZwNS6wVO1CtKlpsh+ zw{%Q8#u%t5NC`-ZfJ#Y@9Npc`Ms0MnksC0^-aY5{o^zh_AMCSzcHP%~#r@SCXlS3a zIXc%P&?1LJ2F$WWA76(bK2_P^wMBOdD_yU)hKI;JQ+6~e(We&O>iezE2;u*c71=;3 z0vud`L*oB!*0LPcG2Q9C@D2c{OS6y_;gQOIX)F6*xF`0Y!kfrC z_#=RD?kiWG)MhM+B0iLd)-9kiO8c9}S6W!^+L=Kbb?yy!))%$(A-CpCW!B7Me?k{i z2{>e8i2IsLX$JgW7ZXtN=hcL|Uoix+WgCzN4N`GGOuDfTsy>|i?v%}_eUYM1cutg{ z@%3U-xMNrA@=rjj4w{j?5voyIZwZd56s@BVy*~-di?2(;Kotw0fylGKo9@PT!goK6w0!F(p`v>z#PU8{M0qr!GcSZ@I8Io5 zFG7@ZxGoX@7e!{8GmVIybJT2a1a{xbM+9Vk~WAvTW#+QRU#t_fkW`r zujNCQA|D0wDuN#y%Q0a;_FvT16M?jqO26Hjbg)H`WCN}^Rk53xiul91M_Wgp)55oG zU@Xch#5g4>+w*DiaKeU7ak}el>QUZl=sQ9lD^qD^BrnCjf5Nz;E91n7nONv63`261 z7xCtT+RIAk+|?iVY6$Op<1cxPkUy-X^N}z8&*(Do%RdAOg>82kia;x++u9VhJ>-Fg zpD{&+ikS|$(u@9vbnyohRgse**Xg#G3>9M?92(A%#;vmaFXrDG^-<*PQD~+rf_V*c z%(is>H(Wf@XT(F>hHlox+z)^|*2XdgEFu)?JR2yC_`W05`R)Q(D+I&`tM&@9`Br;W zV|>vDOj~KnX74kO)Au0%!$ha%tZD>}yn=LFJ(;#XuDr47U1rf6hvA^Ul`F8KdOlF? z!P=1^)1w)di{MS^STkQRE8B{v+;m0g)LB)U=nm=H;)ea)sI?=XEjXKeKUprlEeD8c z`#3E^3)i>|dXa&k<%02@>hxs)1z=t6`!~;&+zsg zj_py)-q*T#ec=PTzDByyGxD4R{^P7?Z^JW~D$tHpa0pQ-_M<+cE_)=~BhF@bP&FQ} zevZPSYk6+htlqb$@XG$bBZ#<$y?h4|kLLk0_gXH{akHbTgX0g51QfY|S#xjA`gils zE6KHRgHc|1y>s}V9_Dj_o=?v=teoxKU_$AC5|SwIiN5z!;_cr~$Q!k)nLDkL9#v}s zo|&zbvqU63Zs#r>=`W<*udAo~a}gy%4c|M16!a{G{pIw!(T8%Od#cMPXiF$1QWKTQ z;Kz4)X`tP*99IDC=S_|hEU$B|9!hMmRiqTX6ieqtUfeY2%Muu7oxUl&4g0tG3CuyIN<1Okz;u_kr#k|cx@#@h6xn41>knS_DLr?ZM0t2C%Uixy}S+n-$Nug zWhkcrO>q2^m)FD}1Q&hVtSf#k!4iwewCiQA{=Ujlv1|$>yiUbBJZILX7IA2AJ$b`DD^B^g#&^Hdm%}>@s9;((s^`6)udQm^{1C`uK-HLb zj-3vrGfy}KFEdI>hC%${I3U@OvIW1S_*Qdr=l)TXV9}j4ee}(O<$U#~mjmSc4&P zS+Pz8TLr;N9sbp~U9q!`+NnM40T~7=X5~YI3!>`9_H)N79rIXc97V9!w7DMMk|;0J z*gvuCmkre!0&Ms?eDF$r?K5S&E=MU=t zGn1n@6Z%K(P;h^&L;EXi*&GO4S#;*#TD6bGxucgX{~O| zBqG5oy%DNaO81+UG}^7%?a;CxZNdh+SCWaZ1U85j&y>c*2z`5&T6CO1d=`7I928W7 zBs+gQ7C3CvyJAx}bPM;3qg$$;MRG>|qA+3QYYq2$yo0_^UD?n2#(|#x#Q6J!rE|_I zM}=QN#_P!<`r=KFPCDd)n(hx^i&IrLUP@gCo`&HOn`x=HRK^cwE)!9SW8o`0?7Pj( z(~IAmjxHhIZ#Zxlz|e*rx&35ZXb}}o*kzIp?6tG_RI|gHuY=(0&>im7 zW5fP}ZebMHYW(fIfhP(zu-9~+7XC|>6Doz5=%48$A>v?&nVbTWSW^YMw`#K(PlJD>*Z}Uo|0XH1? z;ZZaTn9hwPT$I%eMLXN|Yma?5HjIkEK{f7i)hY4oigm#ia#lV-P6=SnTU(qssA z&!(2E>x*i>_KN?UUi{*GDj=_f)q|J%U7$(oFNhyLRE@76b8r#9#$kzg!8I|zeFrG? zaTMMA243Z!VA=N`=rdJYA9AGWmLU)fTC?v`QYIA&3|1C7;C_g2`l(!5ePCESB`0XI#y7I`+SBDe)0r$v{!*=-e zaS4q5oAJ;(+Ad}CNE-NUI@287(&z&l9aYrO;`ox;z zNp@|e!V~-6@b^W(8$MjC89+W_QF*F8S3B{<+jxK%8M5%AQxu6c8bLhl)t2%t^y+cVc z4BSR3%L%v64Eg}iMjxmA2d7Z3Dob>@|scjIdOz?EKf{%Sjgg- z`)&QA6erK^hyP;Srqg>xI;ipbQ^Yp7wOfFfd){Anl1u)KUy8%@OHoFAb2^ahhki~v z`2ojff5VFqF-~!)o|*;~96Lc8T2(cM{^+P`hnc(u2P?U#nXZ>|=tc|YZfW#y2V*5i zeeNAscp~l#jC~NUqS!wPLw+9cZTkTJpd~Ibiiqc=l-F87Dsp)4Hi3H+u9~TQnL&0G z*9z_pHnnIO7Ed84Inq~L6gVjF!Wq769Wi=DdAM__<199<*+}vU;FgL`h-~I*v)yP` zgKwhrz6)Drq5}WmH&S2!l(YqFX`H$~XC`1_TiRcLj)>SU)BM{y-&+sb)D1mbf*82B z+!eI26v|>g<~tKeEII`C8=VtQ1iV`tw`vnaervs1&l7C-S1s7#hIM!bT1R3LP|K*% zHadPLth(_+NSp{hIm5+`eBF3AS;>Bx=F`!q*2fOG-2=K43WsG0koC2C(WEwz`$@}D zZEL~C&XrN~$*86&AldM3`!!`l8(w+s8sjD&#|xSldIJ38^u>hP#H z`tlT*^oosH)*6^IS1%HZab}qu)^zup3|*NQWqyW_4VCO#-)RxSA-p$TNPX3U69Kn{ z{gDj;pVsMaV0j3wJ|b=I7CMtcLIx_8x?`r{W+KEGlM%{FWPMN}-H!EPGB3{Bc2P-> z&16$v>XvY6Dg~2p0ZDSqAh8r#MLHu=vzRvOuo7e&Ixl zbkue8VCwRWKssBoRd@fYpCdC+lLv++(!dMRMcUOZpw}Y1W8ap?oI~ldwHZl~3N>=fh z$zOJaOa%%MMQ!($S!&#D^>tRxCrNR2hx3v>dAZuwVm_L~6Lp>LU8rS#|hs9zx1Rs2X;XbQ!B&IP5IyU)%8U z;!)Aqt0G^&0a(1z+oji!b+cYDGc>aMqdat4c0-28>)7O6*xu0qTv0r0xry6SqYer? z__*zWKS$nDPMY&Y>gMiQ)22N^0nKh1qOf0YvKrss^RfC6A-geIG=vy5#;gfA`3g4`o6r>`iCYf&GBVQ13d$( zm5v+N_~bEd(jM$B{?bvd_)!~`XF~w_ehba&5%GMDdrj?|p4sb1urn%{v;D_9B=tp^ z>2bFA2zEcO`Ny*{dgg-^eZ|gawmE(~;-()GkJ$P80t1u^!onaIa?WzAmunRdcihJO zg|^rwY~=JU@`)dMFn>+tqO*j)j1-FC3f@U?48HGVYA?IQrq`3FBsmUCjrZ@nR{j`! zIz}KWNXUY}1iE-`LI_zU?+z2MsT_~#y(XV2(cqD%!*v4u`;H=gqD5yf{YuIMoxW#K zi|Lvq(o$Xm=l<-iyXA#SHdI)xb?_JDf;j+*1TPtBfRB#x5Oo6@K&Ih}N zKkIvIr`{|l)pCc54NC@o64mwG$%;)dzt@dMvXquTY@duNUMkLehD?PjU9f4D$kMwd zAVpTHS4<7`KBC^pt6)F%g{k_DP-IuVFBKZ2ObCmO&&>1va`cp_Hj@}yAY(8yOA%n6 zj58Teg4}i%#PAj0aQ!A%o{>1+^v_qoEMejKN!s)YrxymJM@hP}-#tc(_&s+no$tW6 z#A*CgWbVL$+;%yEL3{;cSEh6|eQREpU`{3vQzgqLRDV5r<^;Okx>xEX9@q*S1{p{h}B1>ZY;TI8WYHRGM z&Nl-gO;HdnT~oVA3T9egR%i&szgJL4nW2Im$)|lM z)0P`ago717v`&6nHul_;?8wZ~>2jP62aP5K{adpQ%`fCuT;n-?ElZcDwJdrIGJTk>N*Z;20;m;qWNrJaI>_EQsX zgMzWYBUmI3%U{Aypf9~C_hI0ZGH9kfMlFK&Won#Fy>5vAjuLsizlKbR8rtld z+<+U1>`Rr8>C?9>Goa60>7fNL5Jt8jV<6c@84&)T1aDRuG1|^BG`_Nyg!B{Yrmb%pl z^70FL%&d!e>qft~)|Sgj{V`hY=04?KRvj56c@vrK94+_MbNWPnsHJW9avGOD-7^)R z=Opjqn0eF=Yz)X%;M}MiP*}ya6?2!mmQ8M8p$B@TzsT~E8|VdUXQz%2jAsuVcD`q$ zeH+qRb}h?xVVGmvvg&!y>3;8OS^;(e#L0K1uaSbHyEZ+D<1>e(oGqY56vpQ>T()6KXPlQALhs%wJtZ)j zD$YDnwN^g?=S+K@C~?3b43oMuqX^v;r8t2~P+&_r{dDJes`~}Pd?B;BW+!N@295sY z2}CdeQv-sTEV3I%Pg?&6_K4cBBB^Jf+i@?=e5Arc%qB&47l3wwDTZ+6zj!*b>>YmjWy_xU6a zKUasfjR~9}SZaTe7p75d4I*c+Sqkh;+WW%u=dYabX5~!qUH0-*^8L79mm!EoXO7Fl zz1#&(*IIfE5?svpruUaS-`@r<^V3>|TKP4wSh)AXBTx#tju$T0PhfoQ*-hRWG+p|9 z0R22JQFkHlHr%3>8WC_(_gRsJ4GCM&h!g_)kI6Tua%rX|zm%r({fuAAx!>wTRjN-* zh9M$@H4z!2p_|W^#fA2fC!C5`_Dutz0h+*7=z8NOPF}$lAoQKt+r&C1Rjk$rab)-} z?Wy6a#>UEmjN#!938<|8-L|iT_;iUrO<~n!UdaQkU&|3Rqmm*>1g-r#q%G~*QvP?%5G0tP9|T}#H2l2sB1|8 z_Kr-BMq(0l8tT;xER9rFJ*z4I5booD+7{id4@>Edv*-<;>@O*2$S28bY9i^zd~JK2 zB^a?0*Yc<1`~iIzAFY~?j#R3=BJEJALf#%t=b)qN($q^Pzs322P?NW}#j3Xk=Fjcc zg$dOM^&<%k6F?W{UxYquqZC}!SsE@XKiZwU%Xn5hiC%!=vR2K{nj%%+pWA6Si+cJ= zX%>T&{K8G_@R(SgfC+7Eh}}OOo0LeI)QA;v!9Qvq4pRT8Qp5Tu_arxy+VJ}hJy!C!4OjI;jw$7Zlw~kgMJZPb=w~U z;-9GsvZ%D(fv(;^rOo)S5bgtkn=grBfr&=4_ci786}2}h$i7z)Mo?Pt^0BvhzXI>F z8biANkq9O_>?sTGJw|*iT0?~!5h@Pw(JbOaQz!=-30b-Eg7_dNJS2^_?`xplbxdw$ zyMZ2So2hJqbm=#Rk~D{*j!&kC-S_qS?B|f@VS*39ow>njLMZ(!m02wXjh#?O$QEl( zL40~td9=RiS))Q*vG{4o&Yc6=pR#gq`&}+4g#UmoTyri#>`&lMK<(~5oBr4j_Gv9v zvITVMf6;>m8mE(gIIW)8;|)>zc+AP>EipD$>1@YuJGE%=7s5bnYJy%c()781FFnf# zM~V1G`-ualBDvSV7*JE{)i%$5+~^(X@w@%4j^V$^|Ja{I52lGWD{7kmZz6QvSO+>> zK*?HueCh17K)v%mmrHREd2tmHP&KlW#o&For^a$!O8@o)pifrhQ98PCe$d=igT>2T zQgrJ6hMLQe|Fzf#O2XJQ{s5-6SKIzh{cPml-tZwi z!%^FqP0t#WaG5U*Hrb#JU>6d0EEZW(R+Jvp7$?ESl;xh1&Q+uR`D&o#^BaMx)Th@d zAjl>M4$b}eBZrj)NVRN@rdoE}(HoLL9m{2cMmM%i`xFOdas3803)@`Numc}q5}df$ zPkHU7MoE>hZ=V%+<)cGL52A?1&m zK~~CwOhcS|bjvlvl{egD*mG-nIhyQ)u_9eL4>ym02}Jkaa}}l1-RY^NYtKC9uQmHi z9|n#j(u&Rw=y1V)=KpBFxKg(Ej*8b#w0eoz3o?CQ2BHayA8VAf!dr^?+Ou2rJlag4 z_Z|?c#g)T2PGHD*tz#@#XuhEewnToxcgw`-&5NWjvEu&gXcM5!2Tq)ktf-DZWK%P< zRj;5MMusVRW79$I%S3_QWz}fy`03D>=o9A7+b5Z7(X3SF-*tocGvtyJxjG0`yY9KDTh~qa6?|6iOV0q{iQI<6H>rNa{Z_ zpq}R=XQ}~9ww!-Ddu|b|lr!yvCB_>t)kZ$piaIpxq8w2x_N^r!4`C*De5-XL!1;G;|rIWM^&d(xJZtP2Y9l8}}!kkgDCY=PXdnL>5z#(HZ9 zJIQviRc{6HHyWcIrwc;RvQ#BoB-NA>$Jc`Rkp&pPd3)=~c1F;(aNKYxybuccbacYB z{DlG)^Gnbc8NhL^aR1z0348wqipH-~E+@A7O)kKzKAbs%{2+#{)MV}{CLCWdGC#ox zj5NHNyRaBt+qiU&on8F~;8xjXxD3=3)JypiUMc-rg8|o=i?EKozC6XSa>uD+!KLGM zlXoDHkgihA;>bBMP+YBjE+&`F#!?QUQX&^e5e+pxo{2Hv3RkFVG4cgoI>~7&TK@?B z*Be1Ozv7KWYPnz!UuHD6{b^0Y^1-|$JFjJizIr}R5H>%4O7lE0P@*uzgg@TqX>jwa zK}V9l1H|w3Ew6zDME!JV_d@!T4O`Z9?td7w)>_|BX?Y&K#iA2@lk+v1CTP^x%f2bL zCkc%3Xk)(GX<+)&2{~}Wo(T`s;z3IcFbRroxEc<%MhMrq@9{o25Ua-YaNsBYwo{rd+~VS`-W7o`A5lCjigd(JvW++I{9c zK^sL|oQtib+OQ#f*@pF!KC|^#1WeMXq=|cuc=LZOd#<(ApQg66s>x8K_n)s8=Lcvm zEsIB%5wa%?QMC5656eb=jQZCizZ zmvOn*&ih0Ce?y>YllvgaBy%X_(KmUQ?&AeuPji7Ij<`*NsUGIqgD)_`OByX~+yB z;~!)Z(5P<%mw_g7y4n^=A?TA8c)-z*iDiflYe|kOmXc{_?jSk^Depn$<7hW`HTJ|M^qWqkzQ^YYFQ^}E&xFNuy^F!(fbDY$DB$CpCHD&#vw^a}( z(^95`DAdBeY+P_ zj)UuZAe#3r#MCR#wJ?s_Ul|Xu86^?A{%B&UTXjy94LFkG{J$; z8=Q_;D}eTMRivqj@pL5S7KY!R`G9KJ%pd!?IJCzR`l3|)2`dQ>=VTvZ)AUE-F5R8< zD|(dcPWB+8Q3V&GMg^Dd@XOF`E2_;!{DF9%2qq|78P0SOc1|s{w>~-_`wM*lh)r2ObM0xT3ex?1ug4SU&g*S0A-cg+H2_m-nXTvb6uD z-$0lyZhLs?7vCCD93@*xqv{1}=b*QH_sWsC{}6+rB`ePAoW1ehNtKPa)qv(6CcK9J zO4{V)xDzq{AonbP(k-j}t@fk1=O#h!M&3qw3VojY{ed?h*N^~NqmPhvwTUe1x;0zF zjN7Ma-kSncEjcz(D`Eznk3qktd0sz)%Q+9lG6Qz`Oy9ts(0CYg#wiz#3HO}u?KUy& z5E?OI4`|f%(uYc!po69lNN^8MN`5v;4L47Tby_>!+ZMa8Y5-B0%s-zi7) z6y6SVB?b(avHd^(E5Nw&^sXxju4C$*T@ZgCaiEJI1r3&EKeNWkf06{dlbFO?6H0hV zHm!Uo@QT={Qj+d4j-6loXG~588s1thqJ0}l`j`a~%iUOuGY01}_kZ*jigH@+d(3}y zcdLKHu{&iBohnqz{$gZ7*=xh+S5$uBZ8Ff1Xpr5`%RHm82#$PARPk=-N5mwnc}_>^ zMU-^jRG|39aH}4V^4^`!-OPw4ArFWWyKAg}s3NoZSch|LvDSqnXaL>wk`Zmz>O0}#(@QW-XJB95ViuiJ zYtHB>Zv>PFP6s~{y6;$X3nsj!e4iH)b)@Rm!5AI=&qkO{Keau6P4nA^ClLwL!doDg z3-iEzn1K5hrv>X7M(%qpZI)M1yGN5)`Nc+&&c!2Irv{>2K?@%fA;rvmob!xuePVe6 z0JeuM*eIw>lN!z|)p%|VLxTMB z?ka)>k0U;h&T+6t`L~7jJD!n&w@qE+hWMWiHU0Q5CmtA9QttYjU7MMdb^lPG`Iu^s zIagQN4v+Vi9tt?ZuEp)nv-gU9FX+yR+53^6Go*k-lIs`|m+cBRvQKw1gxyKJEn1BW zzZmo6>%&^hD<8rp5_mr-Sdq@BHt)LD#NU0s9d=gh)JFoNk}+|&5lI^IC3UjK-7|+VrxANt$P=RaR>Wz5Nq{){sv@zcfSXj@$MhC z;=gP828zSDarO-}*;{_0os%ldFPuUrP4+BT=dv9*hXOmQV07Y)463e1eE zf8J|3cG2m-&Fq1w;Z(Z1Cgwn1pswI}YZMJy(iSaw=#_PeV5q30n4um@7G#*EB|Y>Q zYt)_H>pcf1#3qTDKBC+k1evQx+Xgcr`m{}R|-=O<=Q>^pKRXf2I#F(Quu=(_qL!j1($@l@jNJu6~ zN0ve$d0G_oWVJ{ewu<0;=d!@o=11mLRzqs?T6rE{PakupfAf+Qq9+6W@`XkIEXQ%% zEkRAY#a|c&SYx%z<_-Q;s6MFuc%me+flr2ln70|L9JqZmuXd}5b@PHaCB9COnRy9T z9Ir))iDu&yt5uyC>Q7{Fouo*~E{|F?Xx8kO{oyg+(6|t?7i95oFg-)Mg>-9&`RRSA z@3IWS_N0XEs%p0Fo34}U?~?}(TS+L3bj^vF>w=r#V45FYEzq{oJnmh2cHA4tM!C#|@`Tap> zl9_Mi>B$?-g`5q4Q0@3nb%Tp?UssE#ud}92nD%i-hPbin5zEb{_+%-9*D1)W2|}}F zBXm|c6EbcTmx{I$O_zF@>Ui zjuGcSY2JI_IBh*zGa@&?9DCxfROr~O!?@0|>`V;o*DMts?LE8$uk$D0m)2@Wz?lDq zuVvXT#osmv+ogpo2@Z|Wk2+(uo0aGmvT8vN9}TOZ+Ug!!3uZ~R)Vw?jIS{?w^m zk&@r>;wjO!u#Ab!;(leIhP@|fE3C5YHNtBJ()*39ZiSeHgadORV~%+N^h8iv>uSel zlQ>_p+MiePsC+XWsWElU;#v>dXOe**uDRUNt)s-%{tlqldn@Na@bgu@iM+Eq~d1t>_<%6x7xJ65~YFu%exeNGeRTb zcm-nFL|0|tO*D4`2@mjh_O)7-lRW{NAcAAyxeveH#pOmhqu0k&(T34ooR}1gY<46w zlT++q=f>$@95GhZ2}#%O5tUb(;y%Xje7@qnF;TbRKvo&ZRvVm1$#{+~_=_+~?|j34 z#OyB<Ch7**rTSnb?KvR9je_o8^;KOFDf{J+yNp1ybp0Esv2^KqR z^#%xtm*rO3zLU6J#yg*Y)G3s*R5k}@mojRLYg|~vpUa!{*PH-OYru8WLY@&vp_zwO z5A;bf069{OV(j~$gZz#^U$5C2{hJ0_AV{g;lo>V-pLKh8rM;)fAZ%vGmy2gB(uYPl zPMgk=8#9)b>DI)m#q)wCU-AF?>)SoLTNU0C+YPex0yz4WtM7`R2kiTkaM!j7t>nh9 z{#!e*PPUsA4XyCIV>0C(SfSHr_14_os*AP0W~QMg4!-yPrYG!t*ql!?buQ;%VYp4t zd1+|Pu>=5@-oKPq0u~2#ya3RU&^LJjp~`fR z5V3U9u`>l5*jAn)gTCMzU=!@biYs&uo@RmBJaJsv>Tov5;bu95Xx@e^6(g_P!``BH z7M8Lk*BRXVXd#@N2iL8#DELs}G#;jji}H)2+r+sF^F-9~z!PBq;Ud$OZ~C}eS|!VE zcDsJrz*bZ;sNR>sB+nu_d+pCo;w_k&YFcx0BB7RY^M3Ec`@d?V+b`V2%!Ct)d$-3) zWew*BGwLw>eGMYzDjQ`w!7DUwiT}$yCfM>*wa-eaJCRvnV|%icSgfe=N;)Bd_U;1=<0BwT9u7JMys1;(i@H&AxtD#O3$UPYb%UHv+$x4Q9t>q_8oUH!|K;$;r` zFA*Ws^J%XttQ}*Br^WaR*GVx5jTHB}!J$r|a7*OUJo}j6Q5dl)IEXW`wz}h>1B$D6 zazXy3chgXNSR6uQG&IzG+Hkos$Ch44F|#+!CXQrZ@5 zw`2p4ufR&%BF#xR#^7Wd*YQaJUJ{&H4`T)MDm3@#VruE+=CgzI$hK;VgBUqe2*#R; z6tnwcTA>r2gKoj)9`)52?NuljjDthcUO%Lx`YX)!q(k4~^((BwLR+mp+aq;?@n|Ii zDeV0qyHSQAL80!Y1)+%Gp$rQVJGKIRkJ>pF;fl41?>ogk3_(YFEu>(2uPK!d|LNe7 zO_jM{Gjj|5F z(@`(t5(Z!CDl>M?V2^!vVnA%QkueyH(mivkd9 zWsKf+I=cV2N`Kdh^dU7|?&Fhtb0>sjzhHr_$`_2amJ%-xIadk(Wv4;0FRbzbC z7dt`wMBjPl0OM|JQyVtNCBvP}tlRI;%E`FZ`__YAMa6M6qjK$a;ZOWCVD*NPIzBnbnUP~pm=tO7)1i!ikLTgz$y8kS$}c*pa1{=Gw1=CcH`Ph zu;HEP1F@5yC4_V9hjTuqD=8RkKEWz5$A6Wg@d(eAnf`>_;N?U*x8w+nt zn=Zu#tUNkuRAW zKN7bU8n}&OOEvUhkeQkAfT7Ji24ILI<1@i+?^ZGmHDT}n|z>l zaA$B|NH8v_2`g{7r~UmnQ4cjmdNNi6rdx7jIY{lR407O(4V0k7Xl8%u8=*hCXM_l0 z=b9@de&1cROvUsV!CCnPuc{Vj;>~+GEa)@M@rl=ZXR~TFzjwN`MbvvX@JG$52G`MvpqiR}o)eq;o&X>j(y`y!T%&cS=1Q6r&>-EmMvRW25jILGtgx4qui$3MhPdv{B3#}36I?^nw&)a8F9B!r4R zvZ4IpyxwFx`rNL-|NT%xovPyxJSYuOUM6!;82E=2^Z1CkJIbMJi9S3pW*@}8@!@r- z-UCJMft9SFfP#swf$D4}5?nK~&h~iG81?4$GU)SSuHs-7*`Aaw&9DX8_Uwj}Ihq8x zfcgHpNyA?wR*~~tqJ;a_lhDlI*NAt$j%5~Wk31X0$tIr>y=}wJaC(rwUfZpVo!6k( zpUKY!3>I{GiQt9NQt`2 zA{RTV(NU>aMz(maNAi@-3}^G{-B`ftpX;yaN1x%sS;4uqnL>;`Oc(s$WG4T-#8qpc zTpT`6Jg-tr!^tVuXxiBRuhj(l z-t&GrCTIVSoix1M*iM{B|l2t3_l4IWIz!_-R`somqb!x0W^5$H&jYw27 z9;gBBekA-R!!R>~+qr5fR)(NOn@`>RKg)r`xLN|>8cHP_OFzxYw(mVqI(lrr-2oDO z%2`H`BzlMZizK*Kld*0G|GlF1c^*&>xm%qnS%eSzINor4@JdzlL;>O6_B5?}S+w>B0}c$qdb3u;tyW6X@r-QDQ$yh$YU&(&mTZKT|quH{km zT{yuntT>zGwTu3w>AHtPTnTUDEYiJY$_zh=Rms;Z`^P$`MxNf$6Tx3g-Gf7i+iiJ= zM$Mz#rJCd3#TD9a_E7cOk5!YO0?RI&`Xp!RE9&;UG}osFoae1g5gWSQMYQC*4>!D; ze>C-=0#RUgEwlP*L#Eg@*vDP<;FO1b!oqu>V1hf@JGMJ6_Rq$quCKV}a~$r^a+J<_ zv!ifxNp}NRPs&^Fx(ih0Niy9$majU>h~;rf%9EUXoOVhE zAE)D=9a(9Fb!?q5*)53jXqzk}zRJE_QeR@@z)Iqq6>Py}3j*ISS4D{)HoenQ{%tfcu05slxX2%@5?e7g ze<7*3_*8%Q`Psz9X8b>N19S(7!Tk7y{o>!d?s@4Phw5%~zSDa%Rf(56Yu8%O%|?$2 z${7tNh%++(+v`otIl3gni!R)IMMqpq({%~`PIsDjNUnZwy-|qEz(4bPEh1!}O4qsW zSV_4r?KK-;3g`bt6j0nz5``yhk{WGaTYB^}lhBYg0qsTMvOOn22m|N!W=3lBQrFa> z4?yp+poO|g;I?OMd8##x`u*o7$5Tu(U(@QJ$LdjYE%kuz1Tp2Ny%s2VeOU{DZFGu@mP$;N+m&oS^yi}rc=-j zmL^VQx86?~OR}qsYqC-7qM)8vdFh^ZbEX(NU32BiMyPI$+dV0XnHo159- z{544kU1(=%cyZ*cnC(zz=q!p*uyV6Ou>|0XK{2u*fWKs_l;iFnaR9zwj3g3|mb38a zy$6duTG>D}HtmZ$Lt?iHC0MaEXnTmBmJE!$IU-;;^vky0J7N)^@vp*%>i^ov5+77p zLtv7wlX>UWnGnRIrtL!!CM5*JQ3zq_S80o>NHE6}2z+C%jZI5t$_jE=7hh#p;0F&I zsgBdIvG{@z9KKCC$@_Z|tCidN5R3yq^UrFwVi{l2t=1hs%b`9ps{4Wp{WaP-2|n#w z29TZGm80+*Vn?j?YUN+f^T5pKhIt4Ut)aYK`%ems{uuB7}m99Yp3M=G|3|R ztOcbw)}pZ?Um9A@XCDjA*tZJWZ@@Ltn-E0fFmeQRLb_e=DX zKxLE6e4!aLjWnPF#B{T~OV%I+wD(jv01$XPr>{^}{Ji4X^~tg%_NI`;{{-gH#(Vop zgCSw>pL~|)`|B>=QvJDx!QfobC_5Fg@gMe3zjNl zBO}eK$KY?TWA3-PsQi1H_~WITe(IxqgS;O<9#b(2RwaY@7T|GC6!-T9UzH%qtZJ{g8?6UKB>3%b2=#FhYE`L>3uTt%%imchU zGfUULivKjVLwFZfnuIW0qX}t!`AbxB|K>^paJwhBJgL}(Q(e4VVlN<)(ApsF&ycMa zGG3KAAJpn>HQ{%<-RC#NJ?{}ursmgH9&MZ;6S!!$e=^R&pcJejaq-REVgY>kC`o*1 zJ31dye4$#|vRyboQuNtw8iy4!i>-oNGmj;V)sI0Maf?N$h0{F_MdsJkD_*VIY>eZu2>GzevNFo zU+sL+cX|O)@1pLR5Tt?pKGA?qj+F$wzK8WzP&hh$WAqj^`3TO(U66pdhEJu{Lr*<2 zpEur9+Tt}oob)_Rav1G<%NTN;>^u)GD~Y)9Dpbq~+{`pV}^}ayxil<5>1* zx+(Y3BRKo)#SvKdFBD{Db6);DbD~g*_V4XY=9Iz=)-c9r9g6$H0q2xH!m4jkYibqD z=~W*ILVJ-h)DQ(hiwu~%hWP(S*jGSBwYF^of)YwIs7Q;_s34sRf*@T|LkN=6HH-rS zA|--Sk|W*SF?6@&(A`}#z!3lTyyqOx|GnS)erxT;+H08E`+4rX?(4bteqJ4D>J3nE zEv|KJK=|Hdt$K$c&(0=i#~s0R&!+uF_h#Ng=U6tZL_ZIDpE@f}N(om9x9@dr(ATZ+SfdO>Ny;}K1z#;Se7o9tr2TC))JZ53fLTA&n_m>vq@`1Dgx zR593k`0I`>kon3lo;7EzQGX=&Vun@O@M$`G8E(O^2&awR3BxEKrtzCPdW@x(KIr|>S(Y!w`Jzw^Tc4rTof5m#G zT%5OJ~ee02Izc;qN#Mz&|@8A0~dZ7HAZW(V=EGQspX7*NPOJ8TX z+r7scHMX2Aw6A63Z06gX9Pf(5F{_7A+*SV)4X$j1BP_2~LCpNQjl%5vd&DnLySUnk zVJjA_vxfQ!HZ1nDx8K;DCTPRI2&e|8((+v#vyGbEw~V=+1$0AXRqDo-*MChMt6Pnz zcg0+C%aw^rEXEnEL`W1jwymF%Z9y|O7MVGa>Ra^ zpL{&qd&)^fX{%Hv$+-WXeA#6s+^4s;eCF*8jY6SU4b_bffbl24hQ zdd12}9#8QHT&S=z&1$Wp6F;5`fgVzi`%p)+V&d&5z1H{)O*lePBC`!TbySnw?>L3) z79ZK@pc*zIIv8R_*}qL_{_{c|G;P2czg+dL1>+dFTey+Y9j894RK}U(Dcf2;$y*zg zCA0go{880UpKA3&c%{+35$E&fbl%-Flv%ZxsS!PcLEX~y@$#bcl^(Zu(9NF)(F!m1 zvM_nm76_4s#0rVki(aZ`$g0;sB4O3g#W7f5@RGauo6)Qv z9;VFJc82bQzG?;p?;8VUcnRwqI6}1%h?>Af`1FQjF@RJEP{^5IdfdN6g4>qCAO*Vr^PHZOx`# z3&`p^0j?O=`Xb$ZzTPz`$1OKbrM)Q4rY&Gk+NSHfkc5j{d58>wzVx;PF|DJS&4pI_ zl)ChXug1b`_8n>TY6T5xk!^k2#*82R&*mtfX?Eb?Fkt<4gar~v>lQ}m@5WyVPd^bqunP%^LmQV2IkW33~X&101c%#g3 zd9EW&2%qxTR<9qGJ6l2?jNs|6-j6kYeGG+a?R5vs9CwnGr?|ny-KyEMr>&pxoaCF0 zY*fp!RSUztsBe`(vnaHehH&%;@;8ivH@H8^l!c_!Jgvh-6UG&O@x7*qRdII8;pihK zz~qVNV!7|0y(^*NG~Na4WNp5yheK;(_DU19jtH1!m$A@uTj$L*Fyo+xw&5QicJ2nBh&8FecgajD@%FViYI~n@4AutB-Mh7n z2}bg^NjCF-8rL`!UYY-CqrY$fviy{BEIfEPu^WFd?mjz^W~^=;b+!)AQAf{lCshRdAsCTft1^Y~ULP1s#TvW=gc<`PQjsYA*piHu#sFiT zN4ArJgW)F!Jqf2zPy|UHy%K-%_j!?mWeh>>f~77vCvbI^)Lade*-5?=-qDx+1Tpfx zLXspKQ{W&h@n?vu4N=j`aAw@q|iZwOD3h$`eSXj)ea+q4m>o(CDe|nMf zkfHV@9;TeQai+5~_Bki=YMB(%TN?@%N%V;PNhFf{R*1WA&~0-k=@L5C_yr|MK4}N} z^7`HUcad=%ueIe*cy(e=c`W9z#6a-^sr#-`F<;QSg|oPgGfHB`-201=Sro}MrhIbq zc#0~ut88;{WNbKDo+W~-n#$#JP5AC{k~Q9EONbpyAvd{Y_krKhae?bd9Ul+Y+CU}c zg(&LzSm;U@r*nlH(e!FadCa_4Of9JqhzA$RjZL+lG~*_WikDD^j&dj2QRluj2cc4& z_1{=QtPR)`X1PWc_{IeMb!;?VTC0v_#HxQL<7(Wuu21PC(uWo5ujd>Emb#9L@F|!1 zWlFWvIXgi_I3j!6;a->LUuI||0zo!nZ`0PgxtDfLs1IIZKx+O?eau~VgtM2P8KbsOv54|^6S@q%7#FmZ;L4_X3tbBI}>6l$z{;f{&E zuSJZ0P2%Wle)(!U!o?@rN~s_PT;W^-JjZwG)J4@yP_wpZ>}y%NZt~MWV;hCY+-;^E z2|A2OgQs_*pB~osWKMK5-lw=Y@Gvh|8HhULJh|ixw1Osbse>#(-hT(Te2o-H<%uRv zQ`|)*c@J&-xawoPkIs1CP46sx#yL@&T0w7#BKIZfo-2R8E34QK>*8sBn{%@a9wSe0 zHD=!9#&DRh$!+zB*LoFf#>G8pxAv%qcF2dT!Cx0Nx6?qGadGGm;cVU{PMv*FR_0ZH zPso+~BH}uVHoQsK&%F!^pFylAf@~}oJ5pLMvkKJFkMl3r)+#~$1BDN>f2NjC=UyJg zREN>=f$w%aADJ3ccMP!{4xWKl)4`_7OQ1hxo}*YF3Aci1Z+&gffSYls8WC zV?;>Un7>F|H78cWC9d8E=5G#2z-#fngzIJ9r%&mUZrq|7U>xap?TWIO`?&fG`dRg4 z?74mKO@Y@OYtjrFdG-(PoDqU+!bcnA`Zp75jTZBbcdDiWW(7hHuIf5R=*tUNcX1G} zQ$_~X`Etv0u7LO~e+)C_k5RWwxV>}k;fafxVY8je%l;@=)q-{|5K^=q49VwNQka!X zrri&=L>^Rdb$cYZ8KvB@Dcb6DOXP}KJ$4KjRJ71vv>nbYoZc{4u6K{}oE3UEotD>&7 zTiFd9hH1wRbR2GF_9pwAS{^Q{OOJJDVx1oYm@jh&ZQAQ#)Nx zn3Hu;(<~I6@x^)@VpkykF){1)?8+sW+Vc!(c{>$_xyt)j_Kk3eKDTRqn%YepwJ#gW z^W$+l`_Mp_t?Gfm^Cf)FKmdO9kyd5ZWO3)QwlQlB+zI-Q|~6Y=((G5d!SwRKRxa z?-Pmo6sw+dNw5WO+Z?JS>g#_#r{8d34D5>+eV!3c&Zd0XL`jkNZss}H-e7;U87@Zd zmQ0hSFpN7;iKUn#z7~>YI)B^oJdQpq77=Alz13PB*Xjvzh-k32bO%%PJ1kTgAdzux z)>8M}&!k0JSndzjLx|Knzc-=$O$=k62%aAW4n?$J)-JjYdbNMxwhDrKAn(BBq4Sn2 z--5kzm&y3!|7WP9|_phSc>*eOjHIPMykz;3{8wMu2-$2evt^4-t zZ^#6-RZiGMY#txrxCOUMgdXv7&4z=C-0(h~%`IifNqb}AfB5S#mBLwPL0a==ERqcT ze4fGf72e4@&&sl2BH7x_j*Ak}p(bw-3iR@aub@c|FcS0<52=XfgkE|ct}espGWv_$ zd)Ix1aUf$~V-jDULY^mT4m+iKXc26U^RhmOdFpWev#;l6P^D2p%;Cw7g#CvF5?Ysc z1YK|Rlb!LhU-$Lby5gf?>6bmh^QYGso&076GTkUS87YaE#tkZ(Cu1ZyvPC^d#aiK2 zOplAOVVBP@-&b#TcOSE?IM&PVjpo0i1a+aK?>^k*?cLQmLCC%e+ZFSX3EMdoMqYox z4s!+Eb17q0cEIPNrXo9*nFm=T^14_^%%EC0aw)nc@Vu)CpN5Q1=vV+&2Kk~bCBVul zvoVnHnDfUW+G76P?8I!A4%ne?;YSd@xPw`BiHQsQ*BZg)H{Qpy_QNrZ7xu^JXWcrb z{Vt!bxEA+?iayji;s3lm)kvQ#$W)SX+;3Rne$KLf`=apa&BcxSLFZsZqL`7k$uz^` zB8JFiNX-R&J?kK=50YIX99!e<+VIu z<2XKuTaMCPTkoFEU&k%x@wO*Ib>|_7nQNb&lhZyS+oE|5MRs4VhiAs(4+#1&&v|C; z<%mS%qezgPTfQ9JHL0T{O1Cx)!wsrGd;0uk0e~sEGk#bV=20QV#W8;H171I~)!Ffk5;eJ6!rJ=$=jU6FKa`^~M! znZ9do45S1&q+85VPmi83BK`aNq9}N%Yy@!-1jmhR0|#G;aV4?-IvA`;KN!KEwh`p@ zOyC|JQsZKB#lBb|5+tL(kD(qca?=t3n70&o!>{^CmpWvHjRwoiWykdxBjYHuyBGJ97V^BAAFE(Ay`{2cy)1! z+doPMzY(pAr(*&(v>GT;@j5!UAYFoH2;!r3EFyktkakSqG9WRxC0-*jSiVN2_{`Y& zDC3WJqLRO{UcytB9BaQt%Y#ATET}{hg|TM+fGuB0PzCe1=i6TGlUwt9$_&Fd9$uv} zf&P*XASQ+!GC)8hFK%x41_1)nP6ut>;Y`dcS=j2TZVF^T=^LOrgtdJToGk?_=X8-=FWKCelk0q24ec{cqCVk;20DVKO2> zAsCR84N`>_^9{G~r9Vnm;$h6}6K;QXc$UNvMu&UktKQ6D5S}JGsdD3Y%=sXBM%LhD za8~p}aXk8i=cSJk9Jbn!hIH!LRB+H}9(yPz;RD;HMDycf_Cj#vaj;4EWE;r0pwEHV z_WBsvHG9*L2H<<|5uv=YTo=4~nVS8cNiihjijpXey(p!l1Pt?c{aHo8iMiJA5(E7> zP_5t%+^h)`u3*gf^M)eUp>BA?I1RR##9c7;6g0!iZZKIsGg;t*D;Jd}LY=pgA&$mRPrv)hXd7zJE!$UyD;y)R1aEodGkSHyy^X=d2<8}ZX zfoC841^NjdAW*zUarK)w?vgzKg!0g)~l;vXR6dAcCIN)ynWq!j{+Zv6z5!0fxoqgg>&a6mJjU3pzQRx-@gpT;Dspkh~iKf z`q?QHF?`7Uy0LB}^Fg*eJ}T*(tT-u_whgI;#^eQ#B9J;F*^i7I6%~F@@ruT%fkP7 zHW!g4?A`Wv-ULokW3X^Be9Y3=3}Nj5(yyk5T$mre5!gJbvFk(n#vj4!?VAx@eAJys z7MbL@#dok33U@2+s~?Fv5u&Q33*9aX@SsU7O=85rhzIZkUi0|J^RO3P;t-+ouK?k+ zQC3MZaQq<=4)mROH~yl90qM*Al8F2Rd~9#~e@VVs5wvV}AG>Gsb1M9FbM%newDIzw zHl{w@f)S8<)B}5CuVkw$5Izd!aK3cN6A|DJu+CAhd6E$UM@$o&*OCzrym|3)l_Z0Y zzddj9s2VeYnV2wLT(;A1IH4L4wAXkd)VVQl(%6Ye;-!qAn~-+c;~bpMmRgpa36#&f zjG4Ma2eAGTPrN@f7oIDRIT`5dyLfVcOpJHf3_r=0Dz2^;V6EK)>P?M$7h@+A5_V}|kzSZ@ANE(=@wLoR! zCa|ZjtRE3|-yZ4*HiJDI`G-OX+ZXn;kB|_dxnN1%8IkGJ&Xm&2fwx^cOhJxI$G08N zvWez@SurW0_Z2zMU~5XJMv3#&vkhu#@T8%TM z+{7YMl=wJ00Urb!J*TT(oEMf}R--nAoi&due|VH!!Jn5}_lvWur9SHHro9JTU&prr z82(x=XL(gJr-7%=dhX9Ph0@5^VeWy%oYi=L#tGnhqGQ`LHK7N~-R;3e98F!~L?N`X zu`c+M$R6Q0eo@zzunvXowZ^&3fVn819Xj2uau!|gXm5*utU7*+_KXOJAxsIEo9<=$ z)i>_Jk`THS+v8ou4BZRua7$dMWqNrrPiHc0yx1&DCFxnjLuI-xgI%wiWJEaFWCKLn zrG6KI6b~&P2D>^Ew^oC-v-7rON_oJdp9~L{G>L4TMf-r6#Q1**IFkKxPs>Cscayij zGBu5b^nBm{-rol((bb>B?A=`*xTZK>hc)*LJ5~MKCTP1 z7{?GVwwt17fJD7N1RRIhTFLoAykD`l*9QicLNDz^#E5PL{G zpzidEb?jvP`dwi{;F9^kCB1TbNvo4BY^p~$3yNPcBCWd(r&Sz6>#fmr!k!EFJH;n| zU86~X0obw#FnvBvRxg?_VM1ak<}X@bj;RHc^Saw!W>MV_7AyP;QCPY$>b}4mGyim}D61Y2fCq{CEkxjkaE~jfo2U8WqV56{sR?ubY7xY(`)WqizoLTm)^B-oYvP>8 zZ6J%>g`HMPi_3YSr^`_R1)l0srS%%JbQb``{+I3l``?Zx+(DVbiom0r3ez>M9<&c_ z_ZCBGQ<8tmuvNd_=lo2m_#2e~Dc_#+k~Kjb7Gx4cT`{%D(G5Y{@w}7S72O1F+QUNs z4^LV8g?GnrYHf=lJYyR(jH3$3%WF5*X1%V`4wgC8zQhZ;xc+}8;KQ&t+ZtR7MJshh z^Uxd6(OBz@KQAT0Vfyx4+BT5lw!4R4m=EwD*@%?_!f}EoW+c6{D_d^?wav=&^}T!GciuL^Bu{!#?6nCiu@-_)*ema}bh{wHmDFxQq$LxI{;?rp>~ zg5SCh3n8$XE`CXH1neWI!t`DVv{3e_p#R<+p_5Z_(=A)lty{M%asRVdVtE5)dazLe z=UPbHI&_oMVW!2SsBo2)Y(u6n`Uv=S*gt;lO^VNXacXX6Y*=oi(-p&iU)>;$_5vF;+eXZ^KE#6!A_;7!FMlq9j2#o-%8=9&s zI^*6BVpFl=M7NT<;^crvQ5wS4vstoJaR~PRXBPOam%p45K!9t5fq^fbH+ppBm6RTk zZNE{7?%`8Zrf!^>ygZh#G{5N>Mcul|Z<`wauwNy-E#%3+jp7!~C}2zGjbLdA%Yc(? zsfr!J5!0|!rOR#|KjvoROsco_fAPFrdC89$=Kc0a3&UKCudf#ABo2HKpKrT?vDU82 zB7eyrc+-u3t39_$_zMB^k;gA;ekVr;by6e)2sK4sR7m|59Eh^z@bF4T@XfFdi0typ z-1v$ApYMxJitpV}fAv7^e4iqwt4kb6r~!wLC#CtT?#txxR*#o8TcK1o@2=>lafmRa z>7e4@arJ|L17L*a-gW0x+LgH*I;CUW`!E93x5?7du{5c|vHSM_1=w_K;7Uh}+wT>6 zQ0vxhnZ+cF7*lU?C5b<6Ospy3+}0_KK6E78(wX)*g0rpQ-Tj;W2=gNdFtXD{c8jCr zGgrj}vFw6S_kIk@yOjwR^xyUVzZD(QaOp*y^+21II*u(i5x^$v#D*;wS5rP0#j`Sn zSD~@|mho&20L%E7X)uIo66EUDE9nedN1reuIg)0A_1*(4pi9J0+y5+AZxwvWLbsX* zY6ox&bbJ=v*L``SkO0*9Px8WU{5D=u+z6w7CKz6Y!h5pi)@*Q1tM&pyuf^YJcm5N{ zf4RB>919of|10X}i)}F?4bO(?#r}>TawIrFLRhF>CpWBV9y7;Btv_bUy!QL1|1*X% zl#q6e`XH8x4W&Kk$Xxoz9Kn~X@~@HRQ941cf9u=S5{C)-NA0anvDLcxl^i7$de8A4 zT_2Q}_`ia{u*iRj!i^BMKyJvnUE-^7u9>4X)Fcy}DfgAh8E6O9D3%Tk=r=a5c{k}= z{R1SY|ASo{{8Cj_)iNL5(ivXrb>(?%QV-xYXS|x3-h5d#HS%|pbqPSUNpsiNsVa7q zh&O=znEj>%_lSa4$Ri@?1$A1JACW51#g{2_IGL$G zUQCt{t+tw1QC7NP0hOikI8CEge_gCY(B$lZvcZ`iEq~N$ffRNPE)*hD#S!+h*QoAay>5KoEXa(q93Ze=&3Ylj+8_rTM zJ+GJ@dFG3QN2uaUlOKBW{-$!bD&a5iVtUj2x$Kw0qBjq-q+dN|S4|egV;-j$zpK2z z|ByA^T@_r|4xx?On&0?2;bJ{f-+sxtm1gS@T;P?{iLeb7-$V)Sx(NOQoBVD3f1iYn z;G60-f`gBv?E9I`t6QiW!8>+{w3pIt8XL5j9rswi(`)t1ZtLd^Vk0%?Ez+yBB5rCm zA|kr)G9j9`&P+G_wO}=FyGiw0`KeP?P9>zI&u`tGGD3(}Jn^&N=h4HN@st%Qlang; z5ejYv(XLQ_}craK$SqHmOwrgLpk%^Cz=z(_= zJxk_=waeu0ULq;76Iz3*Gh`%s)Ze(D9a)~ux64H6iC!=KF|<(r7T_roU(M3m1@;$Y6E{Wt+18uG|B1Nd_Ung`upw`hW6p)|^y)57mJ3V=0)l!_@{=w$S z^nfCOE^jjI*_kkHPnCs|Lx?D0g*!?`X7U+UmON3%H*|8NXR*&Zx`Th@vr;PnWWbn| zvB(W}WOoy`PK2M>R`Vx1yx%D9-;lDYBfwx!`&`I~cXt~@9JsDz2b(;vF0Tz|E9zNW zbk3-qRAfV=Q^*XWIh=F!J z9YVlZUs4O2RYu|iv-&tlw@bNI;-m2XbW04mOr~35i@BXKLOQTGeZ zIj3KNwNJ`YYN1a6?ga~HJo1C3alxGqyTESwXf@j%gibeoh=kJBJ>lfs1DC`jfc?wg zZRPl&&yfUf@xVuU$o<#6^8i@(u>LAei-#Gp9#u03u^d0%UJT8A+naNgCoEzxLgIBy zWi_465{Tr%%mfFYou3}6mSt<^y~$&Hu31D7dxL~78HPdYL2|UR zlEI(trmI8x9^Bsx#vE!Sy~hg*WK&x3JVzES^1WGkb#@YNnf>LNAK_1b`r3kgg-Fhq zGQps-jVPiluaWGL(uIOZ=Xs`@m1XL^<*ul-i83qI@#5&oL18?M^7yU#M<*`hj^9un zs=2RKtBZ`Uv3I)Qd3@*IFY|+)7ri;U!Q&&?2~Bxe^wcC|VS6-07qCo9JB4`q*7BRw8}wHnK{bee>>fI@PFY!}lN?_ZF8ZPfPi>s{&9lgni^ zv#}b<&O+S=m!AtvltM~2z+ahUGA+X&Z1q)^_U|N$xP9@&T#)G28())=kx@;|6xGO5 zlgZYrP$G0gD>Zs{Ci_`E?)sJ{F*M&STZw2{RMUFg2cNBYy8Jaoc74^*GYtkstIoWK zyj+nAsT9ms&u}ID^tSnFO?ZY9JOAUYnL679;h>zt1J`OnGOaa}GgGJ(t4{uss9 zV5$@`D0*<#%Ptwazy3#YCsTCb;;b3b;O(xshdc(JklegVqqeplRwtwN{(4sN!T#F0v@m#unJy`C|0gVsm=|v}}1m9+JAoyi@ z^DGS9`y@qJ1t9wB;HZM}?yd+EYV_lBv2B?-33sHe4v&tB=ETutGZ^OY$PDCmH|`&N z|0QYX%3}G55oL8{C-$$K8A~h%#~gL#G>_PjsXAVwo#ap({3K-V^$CZx3F1zlWLEB1 z@3&pQkApcO*!_7DxSN&wZM7ZGNyn%!Z6_fL^W6Vty6e?y(GvWqk@7At${@1bG?2VD z;}k6~w|!Q>BX1fVU~5311XdPTO6PbV*|;y8G1SPUCO)y~V6E&yo8OO~n*N%&dG(pa z5wNj3n8#2%z1POmt4x6xY9)Gc8_DO1ij9})G&F;~0@Kn3A-7|gLh) zu?Ul!Lo#WCBv3QfX$R;gJ+GU$ zKi&NuVe{L&t1gQ#1coM4W;M1Q2vL2deVFl*x>Q1{E)ie#sW=~4keuv?*D5?l6&rp? z58W@r2jctgBpa9YwpI?!%+vbG#VK-=d2czr8&T-Zg1R5_R2;g?Fw8WXZ_lrB6j2Z? zbq${Jg;w8o@wl?X=L-=v_eocBQ}7Gfp->>pYGKG34j0PE3WipP%ujkBnxJZT>&sfu zxTxWQ%lw*1YJ9IdW$0@ek!MS6^n;UcW>j@*oIO=w+&zd*M5HAE3a1&7MPHw^4oQW! z!;iGy2R%BSx_IQ3Ke8$$%HMzE5r6oDFBzNpIq+mr++R3NvJ#(l^OQ0Q#n}=4R{7~U zf_tC(v)E?ZjGW%+X5If)cwk|R02%rmN930-ByDFlTrqNc(<57>wPe8)WBRbCnz^qV z$#Hu>nqNw;Qys z(9_UR!hnr0c1%LJ{9EeJ2T5H^=w)lrTWL}}b*5!{ zT=?HbWUIo^BeRXZ;2$`m;yfhK-mZtsu@_VV`+2(-vJ=9F3ucc$^hB0fkLk|by|2Ha z-_iuFdw&{XjY84xL>X;ns@L#~O{JAg=*}Mt$m+~H?spEeSz&OhW?F#l4C}_;jBxAm z-1L|idit;)-6X(^56WvRi-f=TA#!$9CIc0G73j=+S?v&_0d&R?l- zzCTzuzYnH6n%Dox==3vQVR7cp^97c9N;|W?<|cZ}!>GJ+JX|$%hw{52E3MZn_z^Nx zG+oFJ5Z?CAR_4^sW_f4)*Va4x?V&>h(T1wrXD;!dt3X=`@4f`*yjWPDJ3w|@-thX= z!t9gSzVLK@IU1}1=5p5ggA0Ada{@B9W^`o<-I+o7?^vuBuSH>$&@+nH5@BuRED1z-rKH=Gg{_D)>LH1e+-aFqpe*ub zagCk9Nu@LNS9h+jX*M`Ice=>q-yJXU->Jrc6+TdHZt3uvtL#iwslP^6*!&~#@aPXZYXVFhon^+Yt>KoR^9i^>fMD*IeeqR z_fiF8-!M4zapA;+)^y#+fYHkmvpIFlQFDT50IEa@4FyT9aZ#Eo)$$!too#H|X^0nn zx;jZ=8yzJg7mTdnaep&xL1otm?7C)7CuZ_FM+dTP`MpP*nDh;8$D z;Ch&wt()l-Z2B1$y!>x59Sg@5fXlpch0(?*o;#v<_s)q>Wc!W}^BdtC(?jICimJLb zF|##pa7Dqf*4jsVLgYU^E`8|NVlMl$j1pw0zGgf?#<@V8-q=>pqaPH@`!U_57jumG zrZbhRmB${*p~vqRd{Sf=lH3+Tv;H>cP-GF<-(y!r!(J zHEj~)UOnZ8i2MrYEb{wTt4m&Q1~&nJ1E;Ez{O0TbEZqODWhAwju^Pp%;Xz|KnOJQB zj^I*%pZenbkmsl!&QaUPs6N1-x7?}*-47+Q*#DN+bpXa~2hd}hl&?RlHI!_%z3{fU zk3o+z=6y9gbdRV%JfP4q6)4AA`y^#tvc}kqyp~*l@;IE~r`hl-BdiOOUhXOu0&n(m zgb~!g1>5-)_3@ZH+yQDM_<{SyOQ3}0Psz1bN4lWgnrhx;88=_o(ye;5ImRhdC?Lje zp*kJ)vpuB1b7QHlZDyTHDg*6yX@7um?tQ8qUb$PJXJ*~)>&+YL&Q+PfwQ0AKhZm0- z^Ez1PyL1GmI4xLG=aB_%MM zJUXI@=_vFl&Lt5ivOlg~vI=o^Ia#niZyU-UY|XZp!;?M~sja1Dh9Q6F(yH|MFg%NX z;-ePtOtfTv_mh4lY(1j7w|7fyxQs+(z`O|kILP}lbCF%HnM>}mnVs~LyK>;HMFrQ* z%fasErNLd}sO_y?S^8JWIR*LF-FBk|7!H%5Dl_jHwFW@eidHxk1x0SNWoMU{#fXZ?%*)}U2ElftgI;<1FG<{B8fA(t+S`3%Wp(nOd~cAb9%@zSU3@!V z;I30klh>$qccAlCDTOezFlz6Jg}KnS8BT6pZ&_o4w^$I&aFmK2@u9g zL>TM~cv76LO@|ZzxV7Toi}96)dv0t{^p04m)Z)@4MJ^|zqPDrP^ zcxpv^ZA$i|?qQd%#KZo>g_~K6Q&nE;eycaa0-Cc3rs~?jpkUDs%s_!&1z3|2THO7N zc$INdD4>$tU%b1_wch5_%NUMJ-A=6|1gG2S%0k#J8UeKojEI73wGZ0!>MVyxZOaX= z>-7qyru5?t^R~xFF_pFEsVC2xK89B*Bb;tJd$Ht=n~&2;>M!@7A8-UN_z5MpGO}ZN z{TZ%W@Gd24-4H{?bvJjldHe%T-^QP#3|fq5SuT6Z@CsVXG)p&)GQNtL_95 z0h+5!%@ek>YLgLR-7;Hdmvv`q8ntC5vQVIn&3l*t7htzv^W62m=b*_hRjN$Oq4rS@ zsMoy)mgpOU54?xQ-q&x1)@z*PRqzpz<)Lj38u`)T(HhNQ&p=zd>8|41NWR&=(=RP~ z2=VyjtfAP~gMqJ4w#N*A(KsB|Yy9sfIVw)8Zwl3)p5a&Ljpu2F4KMdMUFPT*4uvHZ zWF9dI_QhXTk^8z}XDB5k1Bi#Eh&$@J{y~4dc!nmOx9vejAEr@YP`M&um( zrT9oKV=(utp9aY?VOK|sBw0`N8WapO4(bl=zIb$ZS=v4|S~*@(lzbACTr|~xvZWpr zobw>s>IwxF7BhM*;5S`*ppG zZ~5BC%QnxAcK9Go%8SiZK8N#~;ki$ndC(a6wHt`cowO~0ZPk7wVY=3BrH2z}&;5jq z=prg_cTOxaH2Zxz)N82A0QH{!MBgj2?R=4PsWq*R^K!s{+>n6C*(RP2@BXgS1w2h; zr!t}C;Hqq%*%C<1wUof^B`X8Y5AF^Z=>t&BU#_P-V#y$i`mi!N0NyFH?* zV1eIFHUvHiNJ$_#w*eC7U8XAOzu|)h7WuigqQz3rMbNL-s^H_Qh_5<%cQsG-TQ-Vn zhc2vpuj`h%`abE}e6I{erN>pb>*ZkS1Ky6r{|;trm+^4W?g6?*w zxdf1U&cVGnIo<_^oz=s6uT zyYET*$l}6UJKVE4B*&(C??8bkn?4|Yk2?k+K;>y6U_+p=eNZRyvZ{8>&uaI^An{P# zM<>-lC9k;#>@q>=*>0VcUu=<_?~Plj2q-#jkDaUoDJKM1hD#L`Kceq2E~YHHDv!#0 z_r`u#%uRh-xNN;*_UcDLeat&5h{1)&(acAO(WZMGIMl!LV%Q6unUC&lYWg$L?04Qk zM!r5GJ0_tG)UIb<0u!5A8h%2ThLWLA@(b;+{EX;rlUe`0V{A^1$^N{BO?Pjo-#KwM zr3=$8TDzT#f8s|7`Y{F1))Fa`#^r_NbPb)@(eK;r1m zvty@MU?g3!iM@D>(BKjf-QEtrxTTEx`cXtF1%LR z=9h#tT`2WHOPy3nk$6eY#E@TU;C~zpA-JHc1Ci~C8hGr?`)iSi^Cw-MyTTPVvocHr zzzVNISwT=ry?~uI`mN>yzv0X~5VwX3*8~rZ-Y0hL%BEM}SPH`X<4t&)rj9btHGYIO z`${ed$;+vH)%fxHl5<>wPZ&mUPtg5!;I=suOIcjco30PB$vAOCo_PHkBUWSL)nf%a zBB+=OQ$XF*x4FH#I_;f0`ax(fl%-jk&8JQ4)yw_AFiXn1#e31R>I-588vz;D1i8z{ z0y0Xgm($;DXX`F%snIojc9%E_A+Ow4$XS=)pN??;K@#1CFt1z&s@b(<*zM)^$4|El_2kvuG#$b_{czdOioOz~^ZHh9JDuM3Rf37I zo`1{C?2aAYf#14f1N>>}k!EhIS>s1Y00$a~H|ZZ;$Z}ip&PWdHQhL{Us z3^$%%OB&WmAFB#~SUB@toHUEhxOMI`_ZWQR#`uy*l&+KsX(fFQ8ShYxs|d5X<`CA- z^RT8GXbI1rXp$1eEv;L;(ooAV;_)s%_I)3f5KM4i>AR~}Y1})T`}h8M5+ybAL++2+ zDrTz6dWMN_F2PuXxgeu7gkDskIl2aPT(K?oO?dd`74)X^yUJ=x{P(Ekiu)#r zdsRA<_)B|bZm?8o%(a}T1FdOmi^)WH;Wz;as#I2Xo$8wgIwiy-d2UoPG;nXpiBLYB zP@vYkNx60GEaZ7!NuEzZ-p4kt*V5%^)~$9^ugWa_If(!MAqmduGm6I1Nr(9+JYmQ| z>e)Pl1RWuWQ~GBcoyg2Vs_b`n!j4D|0hV|LBeayv$mli8Jnb`&C@)R|YAqSg;LXyg zI9*S&yfp9~qQpnPiUXj1&(Laokdo)Tg~R7_R!{%;@8313mGP-#h*kyRr6rP$KHxhs ziMJ*ytQDSLCpqAFvi>DNa@m^uIxj!dL3c9tc+QJlc@C}2Fq6g)RUv-(C?z|*YQ-n~ z#R-1)-$wGD@H@8s(K7OtiJ=KIpRx};?jdtLt@CMmE}9km`Kq@&#wzmL?tpP8RO<3h z${>rvo)&W}?2-m<3ISDQ`Kcd=pxinn;76oJ3rKD`KekXj9=T4SY+A>MKL z_uqOVprr(P7C;{dfk@hCk?Q#vtS#E=W!t`Int68#FPbh(iJxuDAlD&JkVos>`;;iL zOlVN)6JY*!85_-p7e!@?yXqX{H360PGq-IyN=k^k7`iAKLf9&FDNbNZDO(jx-db~n z-!?JmbSa|;ep=%9$h}jzF_S!NrXITcjR7rIDl!B?`MQEwwMkQnY;PaFfcXV5!gGHQ zjWO8epX=P2n6@U`#FMP6Y!~MbUdTU81vYBEPixbvjm`x(R$I)@3z2Be>|Lv6(etbE zh%U{yWGhTea~y|^*9j@5c{mzzlTv6eQeJu9>1ULx&*d?6@MgVlaMJcAX&)Kp@u2EQ z!hp_ojMKgGsv4tw*fFF^HJ)H`PSgO`dqF~fwW-V@jqCGijDDU{D?uXWmx=gXRfgoJ z#l~L&_5m8vaWRZ{+GzrPP0SxiW1;}iQ;jb9tISw&-2qx1G>qYQB_e!2Xz4t0e6DQeSTFGEAuBUeWv&AKGVux;lZN^4{)GFBU2*riz+CX%|&C zQR4iEI<@79EuSS-@wl%L)znx?L7P%O07tvI({1#piydFrwzzA>+}0ZLmfU)WGtRnO z%zf!{t42O-aeC!CfgDmV+G3yv~+puuQb^CLxRr7^Lyvq zDq7?}@J(#rQYhI}T*sx}S7@AO&r1Rh=S6OElE%LqS%=KFjV;p7vr}OHWEojng9S84 zOswmKmJE?U|7{ZOyw2Ev&{}%-<0uIN0sbvc;t_# zk!&n}Q91GFHE)Sm5ArA6s{z}KUo<@xSI??#mOMrrEmAE4vl#7LUd8g)Lt|i@wTtGY zDB@p#D$M;#*+k}~I^M0_#VNXvcbm9_tV~8|_EzriVU%$>>V*tKYIe~AtS~VxpW8#q zyNFg#RUm#`id8S{=Y$@QClh=eO&Qdk6ML&Ict$C1yVm5($4Dlr{x2<3PiwT`#|lbo zn<|<6x#{?GD>DB1{n^3=bgsRcol*7-fmE%rZnv>N zxL7YNnG_zf>a#o%$`Ggh6D#-&LU9tJBI6x-PUk%1+R~5K?`yzH>>GoD*)lm>E41vh zWu~KxBzvG#xeP9IWHQxTX1-7Mp1VV;xvKpnm(7@8UkSwA-mJhXmS1!bQE9tEn%8&h zyL;Z$-dptge1V-NtzIBKDjGB!^g(F5Z4^CgepFSowAk>OO)W!H;7yF2_SX8P39Dij zk+UhAnO|c0CJfJId0jv{i+J2Kss5V!Am#2 zj*VG2lB_>95|d9)lJ?`KxtM4&UnNAEY*p#0X7}?V)VoFN7rxi&AABEvTQ;U`juomM ziFur>`*|ri?(~LpeLa`=3{uG9@=7nofi^2EyP$^`FJIXC?f!jvN)5Y=1xa0J?n1G9 z@nz~Cth(YIP2_UXQrw&{j?ZSS$1NhmBD3%pycI`@Qrm-q6r-UBOeD;4>qceOHT>U+iL4+j%x#U zY~iR)&dY)aPd8xHF3PoY%k|zHyyq9qX#%Yt#Tq3Uk;r__s34XCCcaXd$%5@v;!>+K zi0)9DbSV$EH~&a-y!Mt&fQ7WE*B6{4^K8FtLDja)hiBCj4T6=%c(&SgAENrct!9h4 zSQg&bh%a?Xv}K$i*SqrgGN{?CeARc_(55!AbG!3k>2+yD|MAJ?hWpoR>KMu6b@#8l zyBh^Y5x;yUaAsx}k#B@PrjWm6Hv4>=vY15+x%lk+VNZuvhCW;_=O2y%v4Ot}NV=|WP)o6DvdBija8LdH_RJv_US+0F8sbhCc ztX}azV3<*Y&-hVm71@a`gTaAgI`D1;jTG;jHg(A$bU3$lzBy2e(;X39YUF;4eKrGP z=hP0VqMq-ye=;&6Kv_%z4X2-|clWnaA4e_+znLhY6HAV+lhO=YaQj!mF_rV4hv)C6 z462pKPWBL_=d28h(?uJJX5SN)VEHtk$F$%ZRwzl_BNFFC*nW)1b6JC3z5YE0^gXVG z;4Yy5&?w^R?#b%QWFaqh-`Y>)Y#t&;`PQw7i5J5hd?^vlxlB&bammVZ3}mzyX0m)Z zbT&(`_S?n9sa9cg05-Ir$K62xYOlO89HphR^3%0wkJlW3tVc^jf|LiECS((yuK~Hs z^2YL%n{v?ZGKG;nr@&e{%2PEbmj_x8RW<0Pr#PEspWV;-lJ690ae+%sjjKOAY90-c zah?np(hK6gel`m|U{0=|_KG!+ivtRZECS!@+H&F_yWG}zk;v7)~ilD>q z$?y6`h$hgJCZ7lhusM1F)cbI4!4>Eo1^0rHm6_#ey%y#{2nN zbH$sh*_hi!9dYseo!D(%-19lKr`?aNbq}{M`#)gL5Tgq{?W24>+AW)S(cdK3EoPj8 zqd)^uQ_Ue`ZDmUW$p#>b;&7I{oE`_Mj^dRBzs&3-};;O+rFqm{0MjWeI86Yvg41G zU_tNwL2e6w zMhQl)pLaL0VzPPubY+my?*yN0SN~LV>UFWk_oIJ{p#FPLfDV_a&noby=aUUeO9!LH zwDl6utA?{E-`Y^tE|tF8TvHYW#PSv%j{Cvj&=OrKvvT6{_MLJh+sXK+SS8h!oiOPm z(Mk{0bNGa@7Oi$3%lVEA8|e_GxH;@bN`=Yqr8WCA(2QRe+EPRYiZfJ;S3JH*@`lDv zK~36GL`Y*~k03Xv+{3*R=Uq8hSKy6>N;$-L?6w#FO}m8oRa%3)v9*Vu&S#%5e8VXc z#$=wt_qrB;=n)AvHa&iuzyOHI@#C)j?hMJRg}G->MS^VsjckB=V}YSmgR}N>B66jq ztX0cRy4oELTn5dNLm2xcWWg*J+>~We@E{DQZKHm2k4Nv@lP;Mis(R-Q`ff_2sx@6EO$J2Hxn$$lO=aYBYj43}qFFQEBA2?BM)}ULkbFZ9#60a{-{}g& zI}gpWAV=unwd^iM=nn7x+q8F6d07}=EMX@CXVARC$Zp1A&?JkV*z=L9_un+tpkyN- ztyEX`dA=x&st*JFdT`kMFLOn8A4Pw8={hey*PLQctWr#DI1^?xoY8IgSuR~@PQf2N{e_dB^9Qgq zf_u5L($Rzy=1OR2`$5N?bz8YlH%T%@7z}Vchv_S z#RTxcUNm$1f!;v}bc`{0o&Q$5NZ0`D$n#geVQue()B zBd=FInUOYLyJ+P5mz^z>yOiwswlnv-XpN7H`QBOaHS!K+p+ z^4hT0QA1MD)Y%7*aFmUT49%bGm~6uZ`>0HnCfCU{J^wV+My%7T`vH1O)&Y9GNh_P_ z(BYHEzKVe&&XjHQaR#(x6^Z0#$dh=}t5{i@>Gqu}KlrmEk;~8{V2w8{jK{}FKg^XY z^(mlg45+>kqL}BEJM$tM(q@hqO(>k3?U@;1D|+1Ip9*P)I~&8O42Cfa0`k%7>PyDQ zUkQT>P=xbzr1FKi*gdqk*d4T+xnxLYQX#A$a}kY&eip+?p2eunnr?Ifvho*j%{)1U z9hiT*IBvteF#UlgTYb$AeN0zNnyd}0}FWCz7oKHO&NFs0`3dL`Tu z2YFFTA_cN17!zvpaWyzk@Jsa91!a)$@Q2kvzDKaD%5W_MVI#O?;SL! zH3E!j!smq}I9}SMVV~Un>453-?tS@ldQQyYX95ygV+xUK22ztEuRH^Pzcr1CwFQ0M zz?*Y+Fknx&JP(P^he}K38&dA;=HW$p5qVEx^3(tOA??2<_jv}(gs(lFzc!m<17~FB z4S7MJjc4<%fpFTHN0>TcNdtkgwNCVT4NF84YI#~6%d!B5uD_#UWjTxioV1@Oy>IzS zpKOnaD$NW6b}lZ_7$JCh5JK{EQ>WEG!EF(5V*3TYOeCC4VG=u#vVO*o$utDuf2QM#dM=kb*$FE zVU%WftawQQUUC-Gc*F#jDVeR*3%WjY_++nrf7P7kuJq%tm$kWwB4tUB)pt?&H}@=!R#!sth$_*ud@Bv5Eg-F z0mDyD&jD;(yn3?V79Y-v5cfGWfH*N9e0TyDB&FnE_X zysaureZuC{aa;}GfoF}c7d)>FaQqNKFIk3UclW}XhE?3c$S!tN=(Q;T+qFFMG5zjh z?Aka4{#~{LzK*nVeojFfRtpK?ku1pYb(u)YC0W;bxZm9BO;nkP>9<2=;yu@!%-q=P zm-StBky_Ny<&mKxOw5JSiQ!EjIolR$E#ZJVF>pp$1YdE-5UAJ||3Q3;g zt1gq|ZNq~+7K{8sz00oRoB@WtPRRnkqBr&Y8>^41I1oCkNcLXoRn{Zw;UVqR?*!3Wl1IsXYgeg#Hh{eM=HEBiYN&Qf}zVYq~60nT*Vz zOygjl8btMKEbpCy4f__7vZ%BHZp+>G27lRAT2_jED@NbQ`q{uIe6oWm+U0Y_P%{__8;|%O6DFMdT z>N^m@ua{pPsh6&qe|xvsS`|^=Mt1^+5Q93pTA~ zqG1MrSaPBvb=*%)2|FTB3u)vYz&=kO5+6Qn3VDU}#D~6SbR>V2u;UF~Q=l)&WWH(; z-$7{IJBYmk3mYNl|Nc7%X>{p`iTi87h0Ad+ zX1k3aIXS87m^DjT@ch4XG6G$%y4*|#RDuRHkn2b@zom{0wpL5(eUlABz)fgF%aw~G zZu5*Udx;}|)oWO~YS{}Vr!UzH$XmBfXBL_h#UFH)_7d34yw#pA%Ox$U9ZBwt!ob6K zR4OhC{eUDN9@E~Afmv1Rt&}RRwN!=k;2HDt= zU91y2_Y(e*=o#8P@-kZI@#`PSE2R`V{zE*&^@Zb}o5iP9+ZRo(+!0n_GLJ2y^`_{a zYkTw(#h2;zz;Xoc&M{P3q2rZlfo<#+5}G|={mKO(4dr}=0V>T%w;y)Tar_}wb<=Xy z2fY98MKwTfVfU(O+F~|RP+va?z>fgjDv1v&*(6=3*9LoF{Dj`2Dws2WxJ>sHbp@%L zW&6^`-V-?s+>)aim+5LX=LZKMf){T5J^?lO1%KZD3X>Y`?u`~`o2Q(PxxnmjA(wpdkd!jx?i63kA5Ri5=EGo_ zhwF?9kg|j4m{j2JN3NgF6@Jui6X2u7=P|twh6#%O3hDl9n2#`8kM` zRw?=ur?!boSNyBQQ=!=71NSGRdpmx`+dGSe@x9i)6th>+Y#Fbb1xfa6eMBoQ(b9yu zRz_7@%x2 zQTRkpq*QwYPG6pgF$DuuN;4As8mgOr;N$X^)y@_f%yBWachENaOnt9@T+gC#Wv!6} zM;inSu1G%|NV9RSULyaREmAzolwjqnyS|CDp$*zp(*v3LYud&~fBhEE2C?+9K}XS^ zR?eH0;mcoi-&?M^fIQK#_@Z8xlIVcHl1rh+K9`TCM;-8f44_|MB{S1Z;C|!X*KWm; z@1ayOD!9p6rkXUT1GOF^nCkgBfjpFlvujE9-7q6ZVlcs@m!L)AlXF1czS4f0KdlHs zU)v(Jmv1IsGfnGOM}c#-g`MLxC4)SV1zcsfW_!p&yNVuBzVNU|B(r&Th+$BJbHw~+ zzr?t;Frj2p-rf#6Z-n~;(uI2JN3gd~f%9akBp#5Q;Lse&Wjpc(()5X{c<5?24bTT- zNiG?<9Hk`73bH-iSM1K7%i>3w8EAuK3QcdRn~qDdS8YFT0;yG=#@*a2O1{_~pQ zrk$9X**@6ix^-m(Jn>iE>8RlN^wRmMSk%7T6vi#pL`+(En2g%Vr7*R3ou0OvHfTRc zu;F8~HaXXn8NbdwyWQxvMfwqb{fQgv)#jx%N`e8i`P}~L^@8&SUoTUI$Q^|)E_xal z$*G#=TBTDzGHS9VUDFMjJWHRb^Ils&nG`ok@1vd~MRNOH0g-91t6o|LUgsVc(pl|G zC}o)y@}?=D*eVh%W`KK2@on_eE%?Ay&rI;)BJ< zc}_R!BWb2e>-3A1)XrPBn9*yWNkv=w6Zq$$b+4})`P!Kz;N*eEE*7cM0d770l z2yi~WyxgPsxOXDim9CYSBDMvkG8aEE@-(;PzwR&P$!NPOh%T6OADhd#xLa2dtNIN- zZgiw8MyqM8J~g<`MK^zOElr8P1c&R*rQ;>TT!eoRY$zxr57h7qYhNvMHCCSwC1};Hb#B9b1R$3~M%Hz1>F4KHx*ec$>~}X4uSj+F;)k!3+S1!Z zPp4i>q2Cv~gM$3ZphP8@hl}ve`DuAFzJqNoP}p^z^!Gp;!Iw)3T$K>$6{LC@0GsvN z4og9ZNBgz*=^m;swb;kfXx=ix-Xb0yFOWhN<|skdi~f5jdaS)4=Znrh&g0&NKEmDe zcZ1fq8^u@rFU@-|MvMDGWS24pzsTiXMJfA(-MfdwyMWuAVZ7x$-~Ar2`}%T$kI}nuw<#YcP81fV-d-nX&I1*A+9T4-%4OZb4&2zY-h zK3R3rD({9be@Xk}M&3rHT-5xvL_o93$Se5yV7h9_;UfMJSzu~pxC zUxLG9z&|$B-`b~skA~9oB%y0@83AKeLn;xImbPouGHtD>Bdxyyt@6ru_DNb{8bAT3 zO#iHEW32}J)RU!r^mZeGY0_HPIQBXRnufO15GLoF!CU*xxoi*rw;}LIn zYh(ss`Y=fdCI(~9p_dWtJojZcHQKkQ06@P;Oe1U>ojF$mwrVV%G5bAXv?~bK*u= zP*!)e*z=u>xx;JKwW+nF(EKSW7XjIP9QxchOWh0PKDnveXwm z2fBF5pC~f>Tvez0uGCR@&R{KwI(zL^rwQz*oydz+wYpl{`0fOkyQvG?bh=0qtvjWx zd6~IH?M|2~+gtkDrXX&}gWIbB@=Vsw{(93)AR0zMY6i&j?(7oQpo3axE|hs)PKWKfmYOGL+fO zdPy~l2(-ntuFgF1oNVAHyQl+yUR(=PMJ#x$@;tkQukNJ{8;o{%QXt@JQ?dL+I8W}T z9ve^E&t&kWT*7#^UD$3m?Z2VY#mK3&XM~}42`u#cH?(T%KVCCsBt2z({HO> zrUB$^LRthX!(@}!UfF!Jp?5xI)4$*~w{+UJZ8#Ll8IV$+f?5>&Dye}~nIa?{;2)xQ zODXA{^CXAM>~Hbz?jhc{@S}R?iRRHjRtTVt{%XBy+UGJQ3eR@}H9}64E~iffSP@1B z?@;YSww%8g$g9PJw&FWm(sxE}1un(C4BCBJspig4S80`unik$yKJUk4Mhri1r@30R zyztIlI$!JM=z}hr`x^lBHWZ3S3dn7)q^)DydoQw-Mb4IOBIRdu>D2-JMQzcf0xCG{ z6)YIFT)Ov@hUt$U9uD)~1?4z`PT$@BC!-E^ibaXg`T30uw6+o;|U=3%G{fq&cKKF~4x$^~=hMQKkRZ1=5m(JKJ~oVwXa zDu$l?ZogK53hAcMQ<||6F5Pj-B>qS0|kR6cu69~FMEOl zY@phh#LT2aOHxAlaY?F1w=tk`WqHS-3buc|D^zbdq-qsKWa!6k2QQ) zW4<18DjE4@+`8p5J9}W@DlS(W3t)DZKM`y@C@C3jDS2*}w!P=#y#o{^os#U0Vi97K zshhucjU3qRc1#&h$ENhA7c*EQF8Kl7-+$j+w>!93cvqVR6@JiUj1EPIE?6?{efWjN zP1wZ@fX}Egesk?#3i>g$Ewgi|(0k2)(rCro9Kyu=sQ`-?DXzW9Dy!{@9;C|^3hZI_72wZ~AECNIW|E8- zJw+2k_|2QS7uH~q`EB_d56*ME$jbfMCXb3*8rRY({>O-s?-zFZi~%=VsPNs}<10Jk zN`~Ju6w?SG0NA{^bq2eOa7_K4lz$`Cr_1PqC5cU^4yf(2H1eL|A};-mN%5fduW|jd z8ICeJ2{v1a-&pvP?Ktu%*zog%Q=B~`^0qR(Msk2qv>BfLU#NZ>ps%&Gx1>Q{pM3M2U1(-vL-_QZ@S3C zkkcjLCU`8N9{+EKJjg(f4(%**rTYJ-Yq<$23t})3CeerecQ7?Z1uq z_c*cWo__y}Uzi%<8#aGS#b5;cKA51PE`s=fW0QXw2xOS&1B-y0TeLfOZf_MOxeI>X zTfdiv`(EA@(c8+&Wo9ui9`W2Za^Z=Lw6+zYG|`l)E*WDz&*+21&l7P$Iz4Yo`0q`F*m2|WtH7GFR~i)6+n1Q+c7lRrc7bj;8n%m!T$WO zPg{=M@?crZ8)V*PN43t6J$17oO|kK6wDy6@1GN|p9g-nV22^AkknmOIa>74V6knh-gURtF6JGt7cCN4#%lS)oCWTR) zfn?B}LwU%1!(4#uJaK}p z*X_^nf3^EJH|}7Q@S@;A$={X(ybt)Vza&M*npZkXKwSpJD!kOF02|FyKbWwD|qP(TCCLozV{=(w#S*&i^6|`OPej&Kb=d z&1RiIe%zvynNErUf7RXJ@%BCXfBHxhA_?tg2K(Q%R=tIH>xS9UrsMpQs+i^D`&ymB zyQTSx7I_lwEhCDRbboW5Z1AU)iK?iPb(rJg6HK#6>-QY(qzq^)Z3)orN z7%4XFe&rae(B4wL$SBP9U)l>K$}rHs7kHBgS5PVD+DaR^{>__id9hDWen~Y}hh~yJ z+=$N@zd8TULYy*E*x{Pxd6d`6SA#2-e+!|F@m0pt`8AdD);D%!=}&%*`5&VEES8R~ zSWZ9>F1tPRHn~lROt&>Uxi|UaNM_S>Ptajj_}<0hv9I{vO$F+hLPF=|-g}F?e~1u^ zA!61b%h%WtPS*1yvn>@St}Z2uWX+V=aC*7s9PVK(i8GME67F?g_9m&)R7o9?Df=-0 zcEayr4cBeNQz=YO0C%+7OizpYryI@iRnGrRKlu zZuJz*HkM*IGc!X!EK{@S;HvW=u=!mbqBp`BCC~XxRg3+m@HxKOy8p6JhT^{yj)KJ# z`XU--+C0llbD6zkkYRvwcLq}Dfdjo{?DhFAiGLOnagZt%%nk;Mz$j}E2c4SyiQIL~ zLeHNi-hRyFZ*X+Jsmj+}e8z$%^;<17`mj=CJcEHWh3_$djh|19A2N@Mwse<8oiB{O zpduX@?CSNg0p6&v?{$Ac41Cm}NPy-B`)VQcA!vb-*?nDY-hopR&Nl0`YHq;yApHN8 zOFXEzh|zJQzeuDNb)@kgM_pK9V}h4&6K3T<}3WS!*~9zXChRZ_Qfg_MK`ED_|n(& zo`2&jMK<`-WWoETNym*M4wAjo;K-!kQ|+GxPL!Xs;BEQsmA`omG+bzz%*(}_H#ITG z5a7>@Ygk(O(Oa|grpO6Jrd{+sIoj_A!alwy+KYE>zRG*TmF{G|)06t&|uc7_2h4rA`4Usm#uS@`wjI|*_cahbLIolRNw_(IPa^6)D3w7`_R z-=&$SjhjjQ1BK219`N_4=y8f=e4XQ;k=Y*2fxWJvkcWmh+!jNLK2GI8a(6ktA~JVq^Sk!JN=OS&;C#hHTd=WKqP4$ z^|6|NT*N0Nds@15pYwhF!{Xn{^LHU5jxfUjY4GC~#)PSV_o?{Ptj3d!|8a`HiTqs< z8@>NmO^XBe1nFP2IgBDbv;U|*J>Td5)+h3%pM5T^3XA;i(*WtaF&R1?em(fVSj$X< zoGC0|a!^{&J8AR)Ys8UccG~UbG(hH!_srYBY6b)%2c-Yh?}ywkn*QOdk#-RSDQhIB zUmiZ%gK}p&@e01k3*Ct^$;0e)dGXx7Hic zDRgM}934*JZX;1+H7UJ6lrsLQ%P&=CzWEl!fDGO!n@+bCP^ zp-d*7HAOaN!K`)vr@@HBLTb58m#GoMA2s0!Wx;RU|*$lN({L2 zrSr1X&si&`h-~9SmLd8t3-nug|E)lR`&S#`8xm{>(qYOIoCnSo({*+?LJw}Xj3tgJ z*%C6hX;Z+l>+r9EzAdBA82+N}?N92~O^vhv8+AXiE2CohQtRy<(OV;e%Bm_Qt*NJF zDtY+HJfB|XgpnTilLZXU9Z3*mCEcEbWT5h z5hLG|Q_?O|NjoGx-&y%+=Fc-MQuqAaxrEu1O`|lTD4QbF@vH{Ly3gFy^wIwEBWA+& zfsZj*xVX5?h>R|vpf3dk1nlK)g;Nj2vsp`JpZJ{uZ>2p1bkuWjI9r?W5sB$h+~&hZ z-2?pP>yxGuS5m~i*^~Pmjyn^UI-IbV=R1?^8~JEzQ>}<*0+tT#{UU2M@d1|xb&@@_ zqi27~P?{Iz-2LT^$|1>5y@ENjK7a@nEgZi;jVfO0aMkcwMWc7dzSsk@Fl*NqU+Xpz znGVMBLN^HV_Yz+|#OBIw8A66{N1jj@WvQjM%tW8RIQTEX=Cha-asn<2y-nj-vU1SG z(=77e1>Dfgw3=p{r+oF%1(n^plUcTYM>~mH+#yuG6*(z>G*;Md?fhPlu7X1hyPX*5 zfwRkRQ{CNme{0Fd7$f1vH~7((I>|AjlRAaE8#bg}x3(g=iZ<{RjfRr{F6{g^#r)~Q zy@{51vD1-F63tcmCmLr_fzC}5ZbCi^hbl2hYIekJ`QLtc?dz&VzmWmgZ=g3EGtO5n$RZR+UK$PKmfx4hHNYL}Dstl_RTIkch?fF;Moily9hp!kSF zrL5nJqXpRaDr0j7Jzv?BlekBza8wgWiR zFw#Tn6#mdjUsJ_$_cvW)KdmWq%}-xBD>F#^8yx)~R_@Wym+rLd;pGBEOeqptp$&(% zVbPRPtk*c%D`bXf&V3G)_mn z5GFF0@8sZLVyD4-Pat~rfI%YaI38Xn+I&yOnOiJvcfn|-#s3zC;q9lBDs$ORpuP2{ zlaA}~X78NlY#)f%jH%kusJAvA4CbXLGS5D@$k&)(RtmfLq+l?ly?YOYEiGH7+ej8g zEo4{i+g~*38_P+Omr%EeYFb09#M{B&zXD;9bl3&XC96?Pzp#WluXX?^%oofnRu<&G z#yy=OU#gX}ehiX(<08w=um`xk%HxU>`q$zvClTrF#=LE1PLt|E-&YE^ScmfZod36Q z0>Wd(YPEZ^bjO$)U!?S^|K%X0kPxT^9SbV$V>{lGU99id^Btu3HaSvg4&JRvn!oA= zYh2RI)1jWj@MfgHtvS4NeL7gC%0olLhwjK=gfi@`k z5q34_E0G$D(HvH;JzA#QJmwHXD;vazbL!_4f5O{vGr1pr~Zxhp9%AZU9)9{6=Uz6?Oz

    }VT6_6aNtKkdCP*9a^lwy+<8@>U7w@1_QS8btK(yG8as;KWEkZfg%@bq z;QmiX-G)KGELu(&EvFxHub@@$)bH&BpIr>?z}>?00{m5lLYrp}{_wOwy5JZB(O z%JI1O==m6Qt?v{2cOA|+g0kRuF}yh#nRa&H@^V*$BGA+nwOFTLsb)81nhonWa6f!| ziwxn*EG*I?H6&D1Dl&V67#J|-L^^G;@@b5Bjl8vf&9EH558k(9<5-or(5vJvdG#eT zfd<#_INTV9ycuQ1kR`%Fo0^Ts`Svrl3+2mhK%tNeNt&KXC8dvww(lZ~u8TAf)N-ZK zN{!-`+dpyvLJzH|J>ae?@zJ$dO zICCC9O*+n#2TG*4xx<@Cw}|il;Ms&ZS8W=Mt}^yy7Fu8Zcw-C=?Kad91XgED+sJh<>L*OQI{3Bh$H zNROrF)I3Z7jMEY|%fj-oy&Z%ryG*i}f_R}$joy)ZAVnBnlt8{xqxaYj;Vi@x&eDG~ zuL7>R#$ZPvLromAom9KEa)hv@pMIDkYQi0 zo3(h&awDd(_|aff+}FF_SJ}PIa%ppWaw!$=cxIrbFc%p;0S9rTk)s$3!j2^o_gVQL z3hzFsUTS}e5qn3k&fnN=7#{$Vm zcA#@qb`PS@-GB&~F^t?BjeXCx9nl^DGn@x2MVaQeP3zraru%q>5dxX*mW39a>%_a% zSCJXorZe>xnnWgYhrR}P%OqUwP_q+!C`}W3Xx&S0((I)lFdM~bl@g0zZDFhd49ZY& zC=W^D+}^*ObTl)2GP^k0f4_I~-4U(LQiOCo>${H0F|<$Id6c{06g?bO-`y^F+w15q zN;_D5?}wP@^)GFAr&>RZMvI#53CY=vfH=MyEI~`X@8SBwE72t~XG82vm$J1r@+&7L z+Vwtk>Hg*Ly3sjV+Y$O@#(UQa_u5+)mRYtIJM5stwjGcWpJX41I}R5nAnDNnqbK66Cr_-}%&NhrLS`B!fq8KCAC{wbVWH)V|1S zqJA~Yj+XM@&_p7AKylngC=gcRxU(N3_c}Va+wca`lP=C(;dYB1S2j+u7Kr_(+xKPI zccAiop7XQm#1`8pM2m{Pd^0-yj~oxgE^Zu2H*aD-mGPCe7g_VIv?*y3m3+aCx1N%m zsNv7BZREQcuW=Q&#k%-mFS@*(m~ymZZGF^T*Nak6_HIKk)P^LI5;1?**1n!B9&LwJ z>^+>R2|h5WdF~hXe1(()#lmM$*W;+g&f>GNxZO(SJ+6|OC|b4f$7>ts_L9I5_=-Y| zfawqW7SvSZ3UiU*8e$3K&WihNrHdqMG}M9lU-)tzT(~wBbVEg$YEFxtinbJPs+Y3( z502y?KQ6vU(o|DyRX6DH>|-d4j&Z0+c#kpSpiK%jp^#zjk)u&vo10A5S!DlP4;epN z0UK&e1&PE>-VeE8m>Ut%QbpKd`>mdt!C;(}W<1%`#x~^^wg&F>*j8TzB%QIL4HNl~ zfm6F4dGzEY{u9xn7a}E`VnyHUrb>Fj$HbGIsl~OCScf48_J|Hd|+^8wcaW3%9Nn)XsK z(OO!qV)2=4^j)dbFVDC0xnm_bs86?V&{C8{h7xt_x2XR`L-NPB?YIymwwMGJc)m;Ad8f$?0 z=N6bTm3ryK4&Q58m!l|T+V^n&pun4MZ(H#5Kep++CbrIlc0KfpXY`>gnap3sTu|PV zx&k&(Q^&-0HdyxN>T&aiQEHMG!}^jNa;zRL&>kFq7B-@)rN#@)RAyq=odPI|f$T+1 zRzIvueXUwk{ESodXeA!wyC{>0@LT!bWqp;;M{OoP8xOQ-jbqK%6l&7wxht*;Fpu8d z$2&bxsybfgIH!KT$q#(3MD9AmVspRUujCQ9apZ-dv`v<&5Zi56VuR2wmhyO1m`Fp5 zxBS!2XD z=EFD{_v~wbl=0J+$DZK+3y()VoC~{ygfmTOS8f&o<<227CkIx=S7WzpQ8wJ@(J-qW znIgCO0=8%KN66UqD2oXkf^%CY8Twqq(+)=PNtGw5uF+mh5Sd$}(J^be)s?K2Im^@w ztS8_@>4?r%)hZpj&D!Cu*+P~9AUHaDQ7e)IQ~nYsd|MEOLGaC06s~g!a#!#E9_>S3 zGD?2iXT_UKx^+F}Z`~WP<2-!KdpR!}iKf;@&`xZ?UHT zZo;}%Gt7NS&$w8Cu=+C{q1A%>hTB5*x|=kakjv9mi7pDVZTaKOpl!&mNpR@^lCE7y zVbB>~$9xN-apt3eX}-sTvR=HSt183%LVb#%5-qTn1pPlln{5zSh!r}lNO=7SGOWpaTF)^#;$=c6LE#HBIqep>-SeOprCX$nZg;?vA1I((<(sl8R1nEUR`LojU0$n9*H^BQSzqC`7z4o+X-rmYI1`3rG zK8@Pe?OHU`pF%xEnh})1n|1R%EU%)K z$NSwoFnq=#`se-|Ck86{t8xHzfBM4h_R)7;QYDU6C)MzXSJ{1qFSt05B|k0`0d^f& z@vnDpp!nf*L@=)8SYMNKCS=I z((?JVp74ZP^qZg$HFbrIn#skTmaBq#P3Y2#@4jf%2%Ybuy~v!U9=$(0ltQsmc(0~D zI(KC*PL*o-1*V3F=Y-9D2JVji@gNb)a}Yy;cg1ZA?Po^Fnp3>wWP?(u9R(@)nOf4Y z3EfQ|aV2q-S4`pQibR9Qw3Lv=X0({0ESnl_yx$(dC)rf8hnAfYT?Ml$^z(!Fl7bFSRLYq`_O22+0?TOfYdKPouXH-~7 z)}Y8%S$gPG85H{fjGO%~Uv2!dp#Wd!YEc9XbbE6$=!&0+Kf4k0UGNDOxs>bU{c@jy z`iVs6nCaZ&YLa@rF*jGdVC$hRWT->mtYPeWaHUc?7fA$r(4YN&P8QT)da(JR_i3wg z4#44o)=sm=Vv03iXvgGeObg7OxNv95_UMQQ{`RZO+`wK@?swaoX4r=kD@%nbp zPQ?Zk=BjX)5DHgxoRj)7C)wYC#2x>SvcG_es$Czr;Ri%gS~?Y^yO9>@2I=kw5ov}L z1xZ0#7!c|19J*6LLIj4cff;gW_y(V&KL2yhci#713)b2Uv+sS!b;rKqclmj|ZHW!M zjBex9sFva*zv(zCgR)8huOFJ;(29_u!7WUSjz2`TN;Y(SS*H0M74R&MEpsX1U2a?I z%C_s^`P+9gSvp;I&+m(XgKkpy=RjBz=$!RykZAV&a;%>Vvmq`3h@1o; zc?8;7r!}Jqs!7j(7R&5XWZy3d|2UqUT6wr99uwMUY^UB_Ma%@uJIMN6$ ztcP}<|t9vBB zWm|hVJ-KN=FEeIGk^VAFF3aQv&KQc4$+hH>$)gVT=9rEkkp*uCfdR`Wu$Qfuy6>gB zamKKxUIm38)T74OTJ4#HpUL<|zklpP9YS_5l=rJ)!s<=xLs0~~(q1=+)OBOHy$FA` zQifXNZO2=v`N6DeR7S-FYlR%0c>v{3>i1z7uU~FVm`Edqs5KCFF(=XVrGp6D+JS6yN=)s@mYH(4!U#|m-f!yr- z)j}FFBmx)Fb(2=JofI1a0$g~Kd>I+m82C1I@8f= zstsd*7E6BX!H@WLJ7Cw|fCU>de7{Rh?^n>6CC6D?n%<-@^d&dF5^6eak|$}e+jA;2 zsL&q1XaYD|?G=qo*A@?7mCdPeJA8EB=@TB&@>SKQi98w*rP9z!;B)9k!Q zO^>XuzXw1>Y}lV&YQ zKu5qpE6ZsB5jnpYIB$?BIZ2UA_11n4@sOQq5GOFnjD~RXuD-fJEDKA;x^j=qL2|oL z(QWJbndc-B_ad#8`Bb5}3vBrHCI#iwSCqCg{l&C|Q;;Dm*v5#ZdS7+{Zr*9vr!nlF zF$e6x8xiGgF&xtr?P*w8u6xsY3p(XIH*9MifKdwj7zQprNWjB1_QU0zLuzS0 z`aCW|LF-f9?d;bw=Ir;7AifU;esaVOwLthvL-~0GDyMv$I<*P!Svh^qJ&)q&y?+gl z38TfNW9S`l)#RwSA||w=q%&T3!`qDwzr5OZEyf4FT@er;J@gkS9+=Bu3jx`_=oc@u z%tNSx^`PaxuW-Jt<}a(<PKwF4I>oOEAM@g+_l)sVA{e>T(>Ko z$y|P;MnqA5&{iyjh6Am^QP-_$>GtAKH+wo?7r8Z!FAH^}tFtp}w5zoc0XwU2oWx5@ z^n>Sea$-7=xr{kVjH-Oo+4eAB9ECLMyGPZoYd4`mVX+voF&fQCKMrS1`n1NB`8$8q z-0*IUDOEKb0*|h+yv=W(eJeA@N}eeU{aAiWw6wG6RGissG`VQs8JcRM?O?D2!PX+Y z58a;YdI>7;3}p|_QX^L1W>BGw9ni`vG{%IZ-VeAlq)Toysyl^Tqq(k3ojZQeP}tav zRCOiU)y|5CJ?RX074*hziae=f%s{aYh;Fnr?Vf2gj^9D3PQL|Ll_j=DG?#3za6lx@ zNYvGGyXVge4=qdU%wh}rVPP%M zluwxS#N}ueEsO-&Ani?Dqq0{ozi0yO`$KaLr{oPuceH7oV zdj@kJ59FP23l?yW7`%>DY%1h7HxX9TfC6sZKbl>mIh13s%fFBwlkhdITkn72co0_` zY{*in!^S|^Z83rOmXcR5xu&WC$5Xi+Ifu(-gY>!fI05A~DF$J(;f`CQk-BB?#dOse z;Yw2@$Kiz9_>suoyScvi50&Qo*pnLaD`e(*%U`AJJC-sc(^<{)%ksXOD$nLG-78Q; zd8}$9q#CgQ<$+P3K1qR7u09T3kzBap-V#7ee}GJDqwnH!)&M*(qc*yFZEhbF@X}7i zH`d7P*xlH-fla0M@!QZ?=wY*U6L|V68%0~X4IX%`<#whHKZr-Y|^zm4C(*f?1 z_LEY1H9pVLS2d+D1&7Mn(+#Njy7e)C3(A@xus-Wkt7@JZG{s8p-d{=r@3_;{VJh0H zBxI9Y1=03;gE&H8d$A}{c7xUiEyL@2o5AYs2|V9yLjdzK>#BYt3iJ7BsqH!ZUslcB zK#N9xOm=SYg=-NB+0q}bGH;k4I=0C$b}VLsw}k+f@ygQ&HPxx2y6*iX@re$AEdtIo)%f|e7sAeBBkgn)@_Gt2pSG*OTOrS*FUPqRT--M zR-Ia*J3V)~R>S{=4iW4Vx6G!8hOO#PYs;WT)1L9^(k3vLbf)ao)Q{GD;(27sbz%eW z-eh3bqyFOOo=67R{prv{?JJr9Fljl5$x?N@uKA#%sLQvU*}7FR5ACV_>|D~_kpeHslbxQ;#XU@Trc;zOv&@t zF+UF7w%()O&(#na6l;a`(S7G9A1*_4W{-NGRra4Y zKzJAk^lZ+klVV0DGh?EyJY*K%Xmt5T*27JkyucINC zla+6VTMl)SRKSDm70SoByyzegUallOk=I+UY_a<;H~r{Ri`~jvVN+%Y?xf@B!=Dpi zR}NpXka*y-y}#>Yi9sCbkeR$Ow>!+ddXdW(FyG8zNcvXAAC;TOr!)Exy?liqHx2?a z4=J(EV>8*M+V7&^<}=Tzr&^JwZK9H02;|(+_8NGF(&=Bxb?Wv3NoHX^&67&({_}n@ zfo}KMffIQjM~n^Vz8cCFF9$~H9v0?>!{{Xr!pn`<66YUU!*3W{FgOzObJdq?3xZOj z5veQ9JMUgQyJxT=Z2(*YI>5SaGF}O_!JzA$gu_wj(-3XK{1s4wrc`2{dW$QHkP{WSAOJuG z7B{CROfDDonW!gQU~6URaY9~M-nv+|z<5GDqWlQCov%b;<~gXJQyZ$hXq39B^^fMj zvBAn#@^EFVxG(S03gEv%Bw3 zisQl1S;gVT(zhrM3I!(_Y}ae*FkEf@ICd?DKwNK!X#5}71NZHcubE8%?jksYhfa)Y zk)Ye!k*}cS5?fQSLsKT$zh7Bu{yM=;-NEUrB|#?Wp5DP>`Wef0%D3bQmXk7>cWuYL z3o1KkHA1}BsWl!T#uiO}BN}&h@^1wpq0RNHtXZ{@!C1TJ(1H4M=(mq8J^KCA(kGl<_;RjfMa7#4}QiI~#@ZTUf08Zq^ToIOUIFQD zS2-%g?$MFgcGBT`N`GNnO-ZaHp-AFLsKjuem!TlRnCQ*wm~$P!al%NGixpxB#9}zR zB|c6~iJJCtv&%|O>;qiuySDZES&>DZo3e;oyx`S}ayV8nHW0fwnmlBim`G{95VO7Y zD@-Q*Zi9ZIb4@x4R^+ZWXe)kB7ZBpjitZc}#_t-AIMyo#nU$BVOX!q#bTeii8tYh7 zNx1AX={HxSdbXU3n-CmmgO!o$4ES$bxB#G6i8>fNv1;BAPs$sRC9bck!|SULAmtmA zU%&hQs38@EXigs?a#HXO`szMk;debpQ%r;atiw#}ob(Y<7pu_G1%DlI5nwgQ(xTWY@YL_F)+cKlXs>9ObuLv4ciC(1f^Fpw1pEkuK!LMMwE({3swDxcrE zF%-~RZfqk|YF(!iS7wyOv1n+Ew#uDCesDJ8wyK8?A#WO^|2Bxy%v>$U%HkoEwGVzN zYneDYT2H~yJ|8JEokG+LwUm(boxzW0m3f@3w}btDot!kSQEvkMx1G!bj{#BX$GGME zQYddDZPOu+5l>p{^lil<5Z!G@<$BkPJ$))^N474Y$DDFf_n9ZkjBF zNl|+bO-(v>1K%L`lG|%m8SM1Bt+r8Oz)x$Xq7yHrbfro>lGI`^gK2t^C-1Yf<|#dX zZ6F+_Hi_&9poO>YBqrRzT@%=|tH2HkkN)7%9W^862x3{xsG{uJ1US*xj)|YHd0EcH zTlxDMz1?IniIl=odWa&znFt0)V3z#QYVDn3n9Y~ZcPSe$Oz6nlxQ^pG(@`S^=NpQ$ zM;-VWggX&N_NmM`&3U|lilRLkeuf2U(cCqp4}I4x7WyuDW>Qz7)sty<6N`fPj{|J` z6BWt8`g$xp;Sk|!n&SAGrGEWXZ$A~Z2U{BlAJ>O+n$d{8b|QEaxm;Z4E*nDoSQA-f zrjaup%kHzm<_|VR>h<5~@ru*Ad=i`V?%DA#(#!AzeFD%wUeYW_7qWBUG4SpZ)6Xrh zWWoU6JeEt=za(!w)fyhmXk!PkZ8JUzueB93)C@G0VL*#~S4sBvU1itG^tpYxp>0-e z3E@IttLibCTRo+1lOb{B^0EatEzH*=+!aT^$$ShO?X@B}4qjlV_5Hwa) zKSQ0*vsJ=Q$lJ16I^*2fR@16w*4PN9SzMuN<7vb12>2{l;ibHU-Ll*|kTSb%U>bk5 zk$_XC*P;eDXt{ikHS4x;_7`z%^U!AIqWr!ircHR{1rER(S?Y^vpoSY7*fgl2@kg{( znW5~`iAFuyr7r;6S6Nn*(*vjPV4@=1TQ}lL*Xx;6H7u@WkdD|hK-1{BuV4TpRgXR7 z+EKBh9IRrre#$eqQa{*+SxM*8{<$$Tf(QGl%CiZ;j#mcQKb}8-ub_lmeB8)V^sD=u zL2~~nS=i~2YoP+?aQF!+-bIlpL#6eRokPHFIDR;(y%X0Qk&{t>x_0`@IK#`6&Fpm_1{wX#E+j@L<-*D^*}>-_7*dP` zvjm&xaR>_#{_a%JMGaZ?{vj*;yUvYcS;m#Ux1Z_V|FE4oS zfA@Q2F93A{3()G+u14f%c0g|Ri16~!n37K&b=zVF6R&v}KR!7J1#WL2A!p^!oF;OK z2QD5Vt<+~S)L*OLzm)671gz$<$FzK-4|R)G=`@5)Z|W^XkGQrg9c}85P7P;yry|yz z3bQikNd(^V^75HkpUrcljTU(|8=E|Dqb(~oDzoXFRvPj{TG?pIWvr(GS3*xcx1mSF zOOX|O-8fWH4fvJ4-I$ng0U=TPJ11X6o~{OzOX|n7tP$5mNnKpoU>dQZKD!V=Do=jp zcEo{RppoXlZIjX!-49^j7i}=9?q`#s4sXqQ+_bX8lcAikeK;rx!kg~CwMF&4nUMLN zTE}`(q>XbA`7@#tkARTYD>RiHk9JDP)XIqh@*Kwb!V3ctWGI&j#f)H#Tsd?IH`;H_ROIQ_jW@S;-!J+(A6#H;Bd<$de}-b_jx^GKqbmzAA@@!RLM5Yq84z}E$P7HzeJB*y{! zd^}@7gf1y6itJym^a$PDQaqzNDQu&I)+O~}q_zWc#m%S_Jq}#lCF!-^;t&wtk{r1& zCjG`0FjtkzVm!^Hx?iSIa>{y@l*se_B2(`{!;C;`J6k*4Se>}pihZqTu{JJLbyUoq zv{?Yge?h=+X^`zkhre)glNY+=B5)Mmkde9NAwpFWIBme-b6Tlo0$>dcoYd#~2AM9`7`8*G0+u-(wH2oXhe?InMp%_O^ILvx9I1V2?H@XoF4o!j z-kHAhX1MK)5yMWH(sSW)#px0HF29KR_SFq_rD^fl!ztVnU=(+`?@ok@NyHXz-y>)( zEQ;qk=mg8t)M5Vfq*o!`3^f zcIV3b`J^tlDA|cKm1wLs6UwvnsY<}FLYj$Zz?dVn{l zC%{wBz?53Uc`n<8Xei>1XI8W&ig>X*OJ{T}L7!RSX=;8;?r@55_kn(f7V~+8JI!qP z+4dqg88hw6_ykXEs@^Cz4~I?Hz#ILEf#BOrETb-yHnd^?w~RwlD+5(!qMOxf5i=jA zh|B51cY}NgMM!ouBWxBBXOVC-SCfhniwN)OOg@iqlHtASqhWh?uZbsN*=^9HdpE1c@~gFb`WJ zb2OJ=db%v2oRqqGkuXWL_BIr49holFI`IlCJW^D(A>>$don>= zC-s*v2rQ%hCV7MLm-e%hNWB9VBZ*l9ClyW9%94cjm|B2=%Q9lKv#yj>(Tp@SxctlQ z^Gvhp^k+Y#E|O7$SBQ6E0d~Yq0vHI!GmAt4QD3^e8Wyy&$(`c*-mo4RE zJMxXQ%(z-zo9)rl;R$}UhgEQnWUg2lZx_yeBwf*u$+ubdHL7n{+oOqTz7Vd!)VDHP z9+VJaonbSIl{)()oTG|aGQ^Zthaw|^<&}dFUlR#e5Z#K?Bit>=lvK)*mD2MbM@g;x zWkEHE)5iT?&%N-bAFM1tpL~t-g$<-78Rz6>e4V&%02TnVYgQc$PvA7Q_UOe($ND45=@j%@xKQ~A`Qr$^k z-A~ai(P7?8Ixd9dFIVcGdSgbAy`NHhkL&mSFrD)#o!?>{hTo_y?5T7y>^g1vwcC2} z#*>#Gk?IV4u<+x}2;d6O6L#^C`8JV^gTo`RX{l(RYP$6F{dHbD2lvlCUQRRLlJxa0 zpJitdb5(xXL)79{UY30fIMlV9u$?}ZG3WxcfAOh#-{BT*zl>o?7Y~L40xe<;SH*$- zW%oKHUVCkH^b);r$>$~~g0`I^_o2LKnY*$G+~>>ucwx&i#wb?kW$Ky(?lhqgjC<`v z?lm3&@gW?iB2PAqgBuPj88fely)2vY%OX!62Yp)8u?}9rg*|`PsW=8EX6`>oO-ddh zCwJVex+*;Zy9bYnTs#C>GuS4V$&cc^&S4TU>4RS|7O4c!k&AsV zWP+5BNM)zu7HQhr@?dnsO)E5yQO$;YooQx|zi37>ktOly#rr|8i*NQ!_0Ysl76q~? z>8B)!Gm;vm;9(J_Hb}d8Fuc01kS|{?9pYn$FT7iXaqryxgY*a4j|6-Om*N=kTHDd) zC`AIX!%SIXjyljVH4MLe{zvmdRa3E1pa--=AQ3u~z^Gxu!1ZZ(_*t$Zkw&#_bkG_i z5+RQ3Uy%sGD@41jmfxz!9yR&u%XQpbwVCwwp92xz!I!r;C^r6IuBc_r)~dC}^=wQ< zK!V$x-#3PusPk}9!d`3Cj>hVnNVaC#zk)D19N=`;7WIL%zls$2wgycLq1h4N5L0)3 zx__FL^ib26>D-M0n_^?QWA0ufsB3$3-M;Ba7?Pix(I)Oqdi-?DXR0;Hbdy@~hO$I= zw|4DBNG;@goRiyekYHDYuJ(oFV?sN$6^GR0($T%i8Pj$pn*J{&-(4Vr)Taxt8Y=_W zim|;dZip?j3U^M7x$N~E$%L>0#TuLMzY_93`J;u6ldQx;-(C=vSDLq{u?&c>Q+*xx zI{0xMT)ea`HvPQz)Pa|&9u~eK&1G4^%xAllvzA}+t@&G`Sb4D`{nJ5$EGk18!_SzV zofC3jFI1C+=5D2au>debDD`%*^-xuYzPOJ!=pTw4j~#pWi5KdWiHX;@CQ68_w`;P` zKsY!$7E2>Wzp_sPm~hQy$28(J?qy9-$r}hf#I_P_J7)_K*s)w0s&)$8jNyfh!( zR9tm4w>o?^Z(^v;k$#D%GnN@PBYt|^CK`+bOfxH=@dAJk8qV9?D_4>DG*G~;IZR7Pg<+#cCo?x(l64h6n6I+S44sco2`$Qi1jtdi>CvO^p zp#K|z2{K-IInwMzL{T1aQ3u$`7YwA1B4XP?*yy-FU6MW$GMRL=ilR!SzM-&2R%&_y>%0f67xs4gkp1=&q6gauuuy@T_OgK4qAY6NpYajIudY$e8JJek zffjAVfbA7^9vKNcMh^8|EdvX0VzilF?EtseMc`UBul5caPfD*2NMg;(BS*1)`=9QD zcHe%SOWS>1!Pvq>F%!9G9&ohnI0$j0J&DUOR-MP@2-n1- z(bgEhOdeitrr9HgyJ(zXrAWyGOn8;Rb)5Ycv-o@l%B5?PO6UAo_Xz-pb;)oFJ#mfYp^O)PGFxnm2F5H zbeRMK1z0D*L&f!-A%&pf6#u|xHR_(_TWH6-VsNjYL^^UIIzYi96;j*sO<(9l>s6VN zR|E|MG~4zOLwHXGh|)1o>-3?SlFw_#-uDm>em8xX;m)3C(_7z`9NI)_njTJd;mFT7 zXO9VXGoZK>#FyqagFFws9YFXck>fY7Q@uTA@9E_?B{Z1<$9}1HzcQ&#zXj4cc3raa z!dngaUR;!CB69eVoNTsrr7W(BcKYQKdkgsReRfVdhxDFy7K0V>o5DaQz>^{i6<>>0*6Q?;%h2-t$eumcJ|xT6Sz0{$GpSKGtNiz6(6*2kHt-| z=zmsocLaimw-M63a&?+{1R`@Fucp4O7Z_a;!dX=-gdbzv?>&33=PpM!_7OR%d238E zxddCH9)0HROu%g;23*dQqr01kI$J-(@3JFdJjVx*_f=xnR{`!F(j&e_k!^PMOf23! zc!Ea7l3|)Rl6NoUK5dl>B{hs_FGa|D+|F$ecCec=2`J#XgbBaf%n&F;cyzzVP zMdL~(IZ&EY(6gyffp)B_FocxAy`;0Lsxz&i*4Oi7de1?%b?z96CLbw#eq!s~5blF~ z&p@AD9?nh^+l?y*KN@xX-dJg^NvT7|J9|%L^G5Xr!f2BkW`mTU=T`l?J=S6>MPb(B zHL@{jT-=+a>Ad@&B&`18)b7pC2^qYGIy+6oZdGPNr=&bEgYVM4YJ4eZCUR+)WTO!*?Wq;wG zylAW4)M~FD0uIh5fZabw5s{4vV}!>=T=Jp{oIDx4ZBTj}r4n@-qk>Y8H#XOd8Y!4N zpcjo*zaU7;?J*VosZWI>2i;%ia%ga_nc(0EM7%~YU$u$yz|Qf+VMWb2#gA;3%f4kS z6sd?$rqf;e)v4Jl?_%#@{nZ0x!q*dB0mD=RguU!ER>~?8gtymgw6jVoH*PEtP*HMr zfUR%S*ITH8(!gH$-G(v`#qTwJhL~rj&q&hqf5IG|-D&dP-FmjY4hybOTy7}s6S_L_ zB%A+=AfxzwpY%ScHjUzHHY+cg1x5pL%e7={AQBj2h6bC>d7z9pwu=fUMq0X24=8(l z(PHMkT@@*Hym{rGdnHvpJwtJ#lb(}(0IV9FBvaRcY?SQmz8H>HIrRLC(gg-Uedg*yCBrT*zu5`SuJE*Ahc@9cJNBxe>+!nW4i=`gcDYYP!#*J8`-$CCy^z$Y z7?n}Ae^pI8Zd}qM529;1@#TmbmR(GWdLt-m%(6{Dw^(PA!Esif6r3hLQc8T4g!If1 z%?KD4{kNaVbVpYLbBe?xGQSpC;iO>E(i}%njLp!x$nQxgI4I_U$v6s3z+gyzG(S-; z!FUhI)1Qj{BD$iAm*J(=P?p`BwE?A7dUnJPjcobqkMWcV75T!?uWwml#eDeCg7nLM z7k@s$gCuHo&K^|=NpmHuk0^1vWB-rE#;MD*IgA_xiW(Wbshyj2dMKYtFETEoFg^3Q zIDAshh?>HY38E7-k*^ddo>4o)=t#jBL)>AaqFkpsF;WU#DSp}?bJEh;K<_ORfJaaH4h}D8m$cg1)ZvNVM%d zsQh`H+CJu?vs}bkK%~j?qv0)K%&M0_r6zW-rCjXcB@pCfk{D68&&P z?oJmm>j?J2VGjXSy`f=D+Fxv-kTW|GnrxyLYOo|;iJzJ~maG*x6p3=S*)7IBt#|zD zccln(!)jr2T)bo;p`4>9L^pxYTP8v~SFCZ{MI)~^jew9`+8?Rfk zP76I^0Oz$uuwi#11!X}Vn21CST9!!oLl!?AS;R$Aeyy?S3S;j}N|0L~# z{jrTd;;_C~qyuwGrUb}>z)F9Q@;-P;n?Nn_>6kvI#TlI%wh2_ues&tJ8+pC~E~G^j z$ehm{GXi?0`2iX}ADj&fjU7f9Ji72so}vp)D!}t(p4F=0eDfn*<|FYPbYUoQ&F7~( zmEBL5iIZdX5@j(;8_y&XbE4*w9j*qtDRN0N4kFm-pktQ0Ti!X^Gj(5rY9+euPz0Y1!J~7FX zd}s}oB(1iQqBKyKL^~(#J%tL{^RF{E@l_TskSM=2fq2zJ4gZ7Dr;VyM%`a5oM^#NE zS_f2qp0clN(fOQ+Ltl1v%8Gc2=z^+?-X{-`h+Vwyo8li@-Hr9DJi`V_b0j?7NKbf5 zUzjxGOBEd=N|XI%Jbu$!a4ZC1g30-&1_3HVdK~#Dls)(vLsnb8-1FY>nOrW@wqBFO z%THK>r(5rsd~EB{cNWD*v7@_drv~oLwpdWXy=4e;9$bplqZnMsPt=pYgsBveQAhNu zfQZvq3U^bvu>gc+Q=0nsplu`?9!5fy688-k7sDS`<0ze5WJo+KIRX(niCx$Ejh_t~ z^k3Oai2FLG9=i_*n0_qbm*{mZOjVNT8Kv9TV`H@be9GdU)Ie`Hoksz+#}6AmcHLk6 z0kat6t~SSC5eQ5hb8ZcwdeM02)mz|*^@7Na6#&y=yMEbL{`6W0Ed2g zo7$U0)qrfooTs($^1^QxOUKHP6ANu+FGCKv#wl0vqlC1cn4G4d?O!B#`Jk9pX2lX> z`F16?%C7<##e$(KU)Z6mXKS^MDV5?qhME4~QT*1iv+9*q1z~x0l?mKuW6}Gonf&4D zt-Z;x*6%~(!kWqHfzPVE@6CG7C48A8aQZY2F_dl6MOm*UkfWIwhhss+tm@Xdh1q zai4^H~;5?_FFR7rpIIZ#GX6)$MXaZq{iDA~L-g zf)a2p>U=Im#e(ac!x%R=Gq`0L6UwK_7iqO!8f^e;X);64KWfQUY?iL;rSFvUR;iRU z?8H{;YBBZwq$CYScR%}Wn^L3>ULn|(xZIRGdwKJCSD1C-iN=PQ<5$**8$ocubE0iR z+ah^=NWlKX*RBRrn-{Ihsgpb+UIa-1OPsGl)iDnv-}a%QmT3W7owM~kVIHGaZ=dR0 z8=?jbzZnHjBRw2B?B+qY-k4gUdgGWl2oo63CiLUcF6l||=dBvi+yjp^skT?(1nAmc z1jSAU#SH@8$$!wM)jvyCew`wyr=lbDgc@7+Qk2{~C)8i~Q*y&cN)C=Edkb>6zE;I7EaJ38-;NFNv{t`#P|Q3SXz@hCjlsa- zvsIFEUCa!lA({=(v!(|m!R)dmv#%ieD9rM>bw28oImg%27Ao_7HY!etH%TqW%i12S zS*?}(%I+uSzcA-A(z_?Zv_i zSr#&x^g3(UY>h|hxblf7V49<{TNmaDFLi9X1d=8ATY*Y4cDOZ8;|U zD`)Q0nge8BrhFL7csLE=yWWf0piFV#Du*n-y&<>fV46`c!{hGNUOr$SHfSdfUJL$w z7i2MDM<0-ObW-_kwFx7_9qocacxw!u5%+yk%SEtga_``m(ocQX#}9&Fums{3HBmVR zUokm{j-&;f({A%w(5T})1mpTN;pk{o-Vx}ON0PPI{P@RmW5k00r<#Ii-*fL!TIw$J z#J`cD>WAnLfo8zRkm+W(mCzCI^+*`tF$fVP>ae_M()E?&&^_u?YY*No46r3k7KAZ_ z;`aoql<&MsFl>71vlJPaD1W>yh*z493b8Mg$|==r*>bMjs2J)nw*%M)S~66+!fQR5 z7ZAE%x5HPJ1z(Y^1s@;ki1HLLdnzmR%4u4yIrDVY0foDCY%J5O-Pf%HGFyfr?yFOC zx(LG~U1yzx(nD%Ba>6ASR_76A(Q18t%Woe$$_H9II89lrVpl*tSd|v_t}b<)MVZ4U z(D8af3-awyJqLBQX^!;zNqG_{;#Xz%F}Y?_o$F~tZQdk!B-R+>B-UiJwN{Uk0-C@K zEpl0ESC--84bK_W3f8gKTCC24dj;wp^qF5}+;Gec*mgX24989n<4~E3vX6G$^OXOz z`&B`6Pst>N-9DIVvUfxz>o#jNNs8y*TLE6sL55qEO|JAi&X0Vu=03Lwo}8D>u+$$u zTJlq*Ymk^1F~@N@FanFmwgyReyW)SNDpE%Y(vbjngxo*-ffS| zOG|>nMrm9dYx0R}^Jg!wM!V4>GkZUcfbVw;I2`>&P2)>al!z4`kMMjW#J|3_Cgt@4 zmEy8e6PC5!BkaTNIhoo$v0h2gwKXi=j;6QBl~}=V@Dz=mVx9ocupiYv#%aCfS=n%z zcqZB$*yKvk>&eqcg#39~^%9RzcBBW%@I|d5b$f|MXAiLpH6qYCRbsZDJjX{P^FC7B zG-a>dt7buMerT$ZbgN z&>=IS^)^8pyZqP3QRqX5@xqM!mLfRG+`yD}TgRrW($vFVTckFn^@FU{pbuNG9POeN z2@h_`q_4aJ7E|}yQ~8_}Ov1Gb18{+@LR~|hlE+(kSEt)*>9=A(;f8^yT#UagDv}Wl z>WFM@`bOXP6+e0adn%(Q(Tnv^zqf_uIFt^)O zKuvMY!KW_Ijmcs{xAhB5U@YGn+1@=^EV$YT6(K~^#BKMmrqdr=ic>Z#j76>8gYVQ` z@W!sTFDt)D0;+D*!T=j8ku(^0+NVK~-3lfT^mDI(l~X5WHO4uax0KoqS5l1k z9G5E6=MP*G9Nj0Iky+!mF&4Mbho1`c2+gYk6--eGiM^}{ydAb__^#r5w&`{q8PpC5eEZNzO7YNu5VY#;;2KG=u)@-YhNz zyG7T+`?IZZ&)-%IN(R^ddMJ7T2jDcb7qhx}yl<({n^ep7r9%$wgMmdQ5tvN8g$ zSb|$l5d1z-w0Jg=G|P$UzceFGvK9S{tJ1Shio*DrFewZLJ1LO3DdkZ@#9dpi<^_j; z!VG_g$Yb6SChwDc$p3F7%fCbE!z5{0t?6_?Z8YeS&tikA-dpd%pV@g9GKJg~r|Cv_ zME|?ihpGrv;bJN`+JCFoubzI$@DmM)brfKs|2ta$N%$RF@pa|wi$5o<-$$)~T?A_? z{6vvz`dA))`TfjS2(qcTm#p$XHl5$4{=Sg;`_9iTZF&N~>eeoU04rY0_`A*W{f}oV zh5U7=OHS^N9!!0F#(2yA%ha2IFYuF*fRaA9-?QPLg7@oMkpR*4G6+)cF9NaO zBexlAp%e|A0prn}y{Wc=rP>EN#liO9h0Z90B9Z>|-*d@`6NjPE(WJmO^B?urc+GW` zOAW zf8(k1m0A6s%;B~@p^f} z!FOotHNX=I1QPQ~-IDr$iOwCk9bwLy8mZoV$9u*tE!*k*V_eI+^0;{Lt)su;!=HBL zzsF`N1W(=K8sVX+!OJF+b%Wq;=jeC6M_SHC{eQ&e8aW`;t0dWGw?EP3cw5BamVu9c zS0D);$%}zkLNr1GE)1*xpkqJ82u6sQul8up_PQ`nEW{%T^)r0zvFS8`ZqhIj&tZB^(PCRiNhF`Ph-{&&| z`qy(;^-8mHXolJ;u(z`0DECZYrSNxgA7zoJx`viF3KZ{)^JBvA%l0Gxmznlkx|tE8 z)kAxSAWyH%6qC8sykK4V1%8)grqAm3t#tu}9a>}hd;Y)V$4gZR!l;`11Qqtve@)dT z3kG#km;IBY9JBJtCGlUY$*(!4z7-gisT)co-dEhJxc-M!X+B4+vD{ej4N%Vf+U@_pECU)wi@Jq+I?pev z!d7k;w<(!sMKsJw|666-Z>zl+f;6;kDFQ+X<!m|rg$6ZVRCUpxZ5`&S?Sg$cK&pRGRn(+`r?j}TH-Rl^5S_%j3leeqD& zLue`yh~~O6F3~?NdH5bN%bqP;{6=&Cr?>?xBKi!mSt)*7(AWOewZT=ih)1#&@csk! z{_heRd?@+z#>1~_`m(=oe02xp6?PFN{;!+--_n@%0x|aaW~N0{Q4#-ur{4F2|7Z37 z@yWi*-ShmwVxeAt5V%=y?sn-%amsIh$>1-E|1%k~I{$`kcX~MJg#Y>)ZOt8Vx)g3^ z|L2SUaqF{pKR3ASNeX>}-%Z3s?3aKrCmo&lzsmZL`{c7w5TzrUh`bQ4@JH%{0uh6B zUA;{BtE_*t?$y8prg*?kD!2iU-V+V7Y2d6zujoX^ngXV|&uIp=A zUEE0jvFWnh&ta{~?tul!$J$Mwkuzho2*I93FD47nU0Mym*FOrOipH zE2Pf;nf!B+ZuuJ&J?o$S96X4asQ_y`>*)`F9`x_!XE7nFlN@XocwoUXYAO^vKi~4X zhHUkPI`Z-|&bRQQ;3DlVRy%Bc_J0+rcvqye&-CxL|G!KET15X1NmfXBT+}?8W;L(# ze68~Qy@y8%Pwj@rHu@FYHK$Sw+ou5`wAwi72)GC2Tj6U;J@daG@E$P_06i|I(=q>} z&Rd8&o7!}kGA*egtxcIl zkXV0uU=tzc;3ei}}*R^^7>)5UUOJ{(GV`IxpaykOlrI?O}~#7r1+oH!(m@;iSLshed4icXL0w z-^qZ_y{fbSoI1Zh$(3#YhW69wR;$|kCX~^vH4Z^hx9yGl`y1J62vOLo$5;Bt3H0~9 z|GH2YKv4$7-ECx5+rh(A&)WSTG0z%S?1%i6o~%!IT{ub+*YiKRkcl5TPh9@)ZL`pW zhk;TQ(RW|WXheD6{{3o$4nVX-x-DAo+5hSI|06`fRgcVeLhm->WEEViGGgQnEQOB6 zkT8V*x4x`D?IV1HpvkIDChQh!-6p7-#>;s!4JoF zSvwN)ETbSEJeCrQZOy}wzKyoxG54A(rvZ&8rf-wVf-Hr5a;;zUyY<9g8s0zbYW;E&I174`Fg}V0^w^#wM5Q#ZP;>MM8H|>yRwDKFJo6 z$k!iXfQ1)`keFL~5&3jPrn`DLZCdQJ<@~&uT=kT9-5Se(6@Q9iI~sK>w|3-*x(`dk zNMyPqRKr-0X2tOz>Sr-=VM21|$bZZ4%1ZE;-O#}3^$(J zHGP9bW|bgQZh8s|m0UHdpUPLx^8cZ*VNk>CoMs}#cjZbgeNl?`fMf#1xU6G;`WL?A zNDDb#ToieI-|#{mJz;dKm<51Ah`3X7ish1&Ge=8IDcVA=bcqnLQ)SuDR<`J~Ah%ac z`;h)h^|PZvW!n*d0yMk4?FN8oU=9b+e(_Pn=64}@syV)zc2<4QF3u4vj&g9Esm2z` zeFASSBbryqWK19<;2*S9(X5}8iqPm$*29Ifu+5zTQc#{7g#S8t^2(fU{v_M7t=PZA zu!2AXl4B=F?X+Hg>gFVw$Wx5T`5?%85`Bj5%pvxbm3{~XaYGv;PUXUgzr@F5lmF)> zLiN5<-1v?^kSRJm49#R|X}Mkg3H2Kn#Yv71zJR-m>|;vs_>B+x<`*FkS4514`Q*g3XR2+IKq+F?1?qAI&c(*+_NpHvDb9tu3 zkQr#Xn$|UIYcYzW z{uzIn1t==XeZO{!pW$LZ`DTL_>V)1uzc630m2Fns28l+u7juJ(3aQr-fOK7uYv zD?VZ;rN|)<4Gj(FuD84j3K?Hs^u3xY*2WQE8l#SVEGkrUa{b;0Wh8-dAVBe^>leIS z5iswY@QQ?&8Z@Q*Z$(;8H1v`&nojD!?Gy?`g8fc5+Z9!^BPeN-hpj4JI_}Y+ac^T{ zJm#uAXoNz6hemZ{1t&@NE9V~>5@Z1g*bDY-Mnr)G20?4G26?fSTrgIX$2A z6zOc8i_IQ|EKz^@-%pPflQ;$J6H$InQ*f@#4_q^%JgNGDCE&x1doIRptUaT;j=fTC zG>hW)o2jU)e$z>;uh#C0mw=eJ8VcZ4=2l?*yhj@3EEP|S^xx9|At8D9*3a$}64aYY z1C}^g^c1jNUNzcuf1!1TvD+1SLO&zoDd5yYv1@SnY1{mP55{v6uUI4TUx=LL4*|o< z*M!lhO;KCD2ZjL{2AAyx;I%1@t~XY%W&I1!7U+|=UC6)|!H&_o zgDFN!N!*r;t7h=QWKfrR(WuCPknbOY;)8RYqL>5f;q>)ePsi9=*{gHm7+*Gpt_cQy zVo}GLHWa)$mK*e$Pxal^Bc^MCsh3zb<99<-{ocLZ*^RofT z9_D@=b6Vb~f>Y%>i={@{oX+i1aG*WG1tNUF6g`I#!T4S2X55wCwJ|Y>FV8VOXY0e{ z-|t{rBMkK#aimAIUy!BW)0MOAS*|^Ly_3Z4mu?}ah^Pc5hfkTB zThGR;W|S2W$5wod`Gbg3??5R2bGgi*f$3fS zVdETACv_#1gR8JsekKy;(JQ)G@}_i#FZv$f74mi1IjC00&`oJZ;c>p%1PE}{bu{%| z1+79qY)v*h;*ho$w|k&;A-u;8iO*DQ;0cS3tB6$@Hd2=>4KbPTu^8gkR9JMZX1$Ys zhh$XwRjUO}O;$0S485&)o%oi($xAa&kGzPu*ymRE5%;H(I)rl=dD6+5?^+s+GB{25sI-rEbnUu6OgL7Ot9@l0pYZF;vd=x+N3~5k z{Aw9%t8~ns-@TU8y^O9yaAJ*WYg>?ZS{6vMD;GDVJR9yS&BR^REtL3`)D_xOPzP=T zHt+GhSY6Ul{q~8A#BkNQElEkQN;C=ZP55%t$vG*Lr0B}ApCI5eQJuDvx zKO7qI5*4?K4bU(x;-4|W{?wH1y;c|W8J68ln{A-HPUZVX3JS+*dXyQVa2O>q`+iEW z)=Vl%<=ff4j}J3H4eZUWIyw~CFSkSQAuca%fuj$d4(YDco z$hk~dO%JgfhZ*c066QY2{5vR$UZ>uH!@9&``~0iwL^9*6r1m_a2fAkx-X9HlqbJ_lO%r)FzI45$P106 zqyFYPU1=5^e@~952-U2*udC7fZpp6rk>} z+@3y|LaTQc+ONt>e0fk1d2~J{hQ+Qbx88#AJl$pQJnq_zr;Gn_aOrn_uBaB}aowZu z&9M-8xgr%2*|;#f`Eps<{1s%)v{)&MR$}q#oR$V{sAOGvP2xZa`l7HDdppNl1GxWM zsqZC`r+=e0r(W}gW}C!zXAlypuoEX9ffva1Ys8n>aAUY_HP>uwyp#Fm(Da)dymjE; z10+(`<8$ly%~t`mAC>x<;iq_Jw_yR^wrdwI?dYWzegVKq(Oa}$fY)vLFD3s?x7x1! z@7I>d)w{S+zCOm@N2#Ky041qx-+-*;@X)gqE3hT&UZZoCa&M1iN65*_$xMukKRL4? znw7;(_X}tBg6?6QZ)3e&PhZ||ELCdwZ1h`9%=|6O z@oRw%>mIby5YU}s;`RyEd>J>n%F1S){7XFjqaGT*m9HX-Zs!SK*zb4tJW}j!lFi!6 zZu^;H-uvs8k8Fnf72`RREVhjCJpQ@Qs{p`nf|RDZI;Q!cI3#gTrLobzxam$2rX_k% z=3!`qBDfdmT<3kGkwR;V4-EhOa)VrM=)G}lQhhbraCe03qJ}CJ71!(Bj0(z7>Or(^ zE{|9vxYJ`75s_rTPaHz^+%C4XEgsX1bf{)#iFoAm>;jfH8?u89P zefG2Bt--L-H(N(jiXxb`j`Y>udUSc8g z9g=@_(OBdJkFXo@$pvrgczc$V2QOKLToBN2;?_GKH4HW~m`|7-=X*Zu*l6r{RJoA@d)qN znsvuCldZMbez!xA(7}wk2yL9P9!@D?vej&e4e`EbTFATmG%ay`w#$N+?@3yXNnvR3 z=hQ9WQT_K{#iKiG@vQ|M2i{q$;{;mQp2Nk~1I=GQlt?*m7~<&uv60&UR}Ww6iG4as z3Lnf3g_8eC5^y#O3%niX>-@L^%cbbySc?y&buy^@?dR2Q7FlMk5-Xx)7oM@|(|Z`^ zd6Vu6b$*gtHf;c;jCwTA!U+pWiUJ5^z#h`FyP zM-tQBz`LDn|1Y~gMIW7rxAe*!g<=7a%|w9-5>d;iRIVF=ca3AOj7#xp zWG?*&5m2;bMk16UDG6P%JksAkFZ^o*jOK}l2B1e%W$lZ1 zas?ZOv&l^pM4ik5fY$ZV6#TgPlNoVH6dO#z;!P#d{zEBgjQP8GgUW2Z1SySqA|nxrhPD!K&D1{3Hkif zf%YHiqxHz$z|5y;>eP7NAU&Dmo8zPUbf3BN1%|TuP1mX~oZbyxcaSa;!0H5^A9DB} zXSvO>_?+-15$S|~0Z}t!c+{7<5q9hn0f%f}D)G%0dMV^r;8f^pB-g{U-YA)^Bim?U}ERR2OY5uUl<#R}6aNeCDZ)lt~ sz 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 G^1lG2{5`?| literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/development/images/docs_create_file.png b/doc/source/modules/cassandra/pages/development/images/docs_create_file.png new file mode 100644 index 0000000000000000000000000000000000000000..b51e370353250b39be08c1484a89b020e81ca074 GIT binary patch literal 209110 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%0Adn+wIs)h*VW%;w+n@4C4s!x``Sp}clA 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

    Qre}HwckW zUTvhFuvEc=)xh7^)iKZC($m~H?NX$bU8OhFwQougdqOk3jzV8 zw=9+bW7_XTg5#Xo-MhhqbO{5CZ?k)677Xh>P!oVw<&tn!haCK2=Re=ZhXn~ueB3_} zjHYDjw$|8A%L6lS-9N0yy-IX>#Pnw*BS6fu}?wH6|HAjQm9s(6xhrz!e|lPFC9=&5cH3Ru|#?ycA&2>u#a z-ajF+Gb=~F+c4!ZTeV$f+Jbof)v)lQ1~N0`jODDUh6&sdX#zUXFKpy-L_H<&CjA63EFV=` z@?406>QJII#@;X@Zsk0;a8NJ|xkL4$>lwwT*aLXAs7#=nUlqcG5h*)x<1s_rkN@V> z1gFp+k~lX03JL|?be+}*cSidOi%OB2;dnH&wlrwvoIE)#NI>E*L_%4v!&<%n3< zq?Ue{=_teo!JeSr*sPQ@On%#~AB^k>$szMvvy! zya@!byxfU@rk9)O2?v7?!)ic&_I-ineQpmMu7c0zJ^GC7%Jq&shK-5HBsmM|u$=~R zG_(HfYFE3+>%AZG)-6Ijrw{?tbQD-b9d{d z15*|{mx91`?k8QvbOtimK*Q9^V zKG34aruDb@o-fS6^bMQsYVZ+*L_*3{7+k&dwm-dkwq;z*Akw*gwn3#ALwymc(sIcA z#+T6lc)MLdrDz=NL0Rx>xz*tA@TdD+##=q(&XOLty#s)Z!f`6 znW1CbfgW0}{o|4$&};P1BHy5pssmBg;zz+-c6IM-OY%|Wm!{gV=eY_OnJA`&bWR{F zHtj8W{p&4mQ@PrktSrzyHSUFR?(5r8FR;fp$E993Wi7hTC7tt0_32}&9;k_yjEmUL zNXE>I3bkWxrCiY=$lK&gPz{z3siDq$89W|zmF`ZL2`#^Yj^JA$>ze7sUlEELt-3TO z!RvP1bSWlvSo_J|bBBDA4YfkJ<<~KvWJ`I}J{op6p2V;Cz*D_HGh>&E+SN-9azRBa z4kz(kovi}vK5<@4mYhC!Err20H{tI^aKjexgG#-;P` zn^V`B9D~b7!7sWSZd`;C^Xek?j`%#H8fhBsb1 zK&GlshaSsMt_X*;<73=iXWFxvEq%8CKvpja_QRI0T$Z=e1b5Bg`xcOb~DQfmlBLrf1;yc3mF;y*qdRCiC z3d;x!8SE4Ftqicx`sms55@aCe>F*RO$ zpPAz&c5j#FOJ4AB4p>Mjrs{KdR2Fx&2|T7)jVt*1PvP}{m-YW^0Ei!l5+hz-%pJKu zXUn~_A9dMZ`hCBXW9TN%oOclU16B*%c}hv|z0W-ccYM2e+lRqg66s>{l>}tZOSuY; zm~5H6gE``QmkahOtqAsPb@o1RzP}=@Ga3U-Pjq*7ri9s65r5ckx}pFyKof&Ed4aF^V#j^notIVEUX!A%$c0 zQST?RB5kYN-+;zBq;^G#m*zU$14AJ5)~F5dqV~c8!3w(tp+@Q2Q}xpKQ{(3ED^nZW zss@L*HjU)<70Ccwep3YZCwLCV_+m5`9~nrE$#g-yV#CStEe_74ed!axFBqP>5G?gO zHyEAemVy2$1(9+~*+RmtgGk zaiV{!u3J-RO_?IvlfqKt>p;i9hpQ?-6aG2_XRzPZMet1GwPdlF`%rvSgl*<2GAqmvY+<-6b%R`n{-C6lSE*LL)|xet9`GQNy-Xm z1}<%!%=N44dTkDAKamU?&ZPUs4vVI#Llm65-QJx@%{?0Afp~MP(In;G>8f(zso$7& z)+65k?we;ANn}HnyK|0+J(`-+x{{~GAfb*>r|8EBa+yi?WeWA0Qt>dU$%*C8JQXS7 zcYC#4?eJrJY`yh~?^aI9P>*^h!iJnbuGNYtDk_2&myE^3DDF;m*}gq{D+MCG-HyB! zt$tqC_X)P^x$P*p4CPUvs@0pWOs5AWS+owQkM$0i@VY|S(QAdVbN6zfU2vfNU+leQ zP@K)yHu_)zf&~u{BoHh(1PJbK0Rn@&I|SDd+}(l)5AHS$!3i4N-F2{GaL%yz_q~s#_X#sKS;y*?oG|yGr~ZFmwDC zg)1?&n>TY6Mj9Z=?~k$^3L|(=a-`vo@LK~`vEK+W_mWLpcYP-Qa6*F+PUT2WLg7(Jz4 z6m2;|1B?9Rvh+TlS2=o*my!>DJ=*5kh`o$?&T!EBIN?S|F$C6*8R3?{Bt4`fIQPRc zX3IY3<%Oo(1=gdS7df4rP$QgtWx?mKzHxEJH6Fv+p_aJM{oHM48+W)W$oqm~1eWF) z@EL-2Gp@6QWIPA0^G8}(%^*`5W!UTzTKr40>67O(%v-~A^gyW5Mr25pQTu4NtySgP zOHWfupwQgi!n4j>SN@#_@o>X6%P8`fh&4gb`$>%+jZ~;CA1T*DM(8Ab0?kVBC%?Cn z^!36{Azac94ys_L_n&n&je;nXnKkEHyJK}g!2uQiTMI1 zXc}3e@kHYHQN0EAE>Ru^zo`5~AE#XnFA?={Q>Lwl9lIrGeiENIHnn`79Q=lu_i0oB zAoMZsDF;i97spUf^X+~`fP#kXRa3=GeK3QXkAnU=u-UcprhKGSflwn7f%$P)J+#HN zMb2TT3w!w>xnAff*}Ea}(+q!@42gGw+Qm-Z0mtEmqNb;jvcX=MKQvn8#)JL3yK$(I z39>pGNKj)Fh(pfATqnll9l+KJZcZL$(h6gYiEksF)2=;T!*mqWHh=|`T-@YDNn;9^ zv;#eK0{gPbBVx_K_uMqgjlXs-)y9?LIk&T;9HOqjE+0=puHJA=RD}X=Z?;R0L?X7C z&?Bx9kTDH*Dk>opy`Y*Ohl!qSu+kfZ9nkIZi_62MjajUj5^X6R`Xc1c7Vz#p(~EKQ zW~sW2F|gy4k41DL;bGBHNsOrg+pyiM@MuM)>nj8nmQ_=axV~%b2^cE{)lcLm(`vEP z)cjN>7+mE_y&iI}JM*L5hgoChwxP&{&zKy}IaBg{&U=gX8_96uag-n3X?lkiR$D!6 zz}Cs$Em(aSxggW*jN`gRNQ6lkRW_Z)UINvjIg>}wfw}P{^!-#WFF6ANOQ62@DN-~! z3+6{v1&5Z4_>lq-_`B~-1WRL>p;%RRrM?iHWr`kgTw{lDu<{X};cz0o`$jB_iop`( zr2q#NEJn=ga-njl)>BmiBYVIU9T^ewF@* z5~qU-i?!;-{hVtf5d*jMz1UMwkE zxxi(c@hym_uo8lqFW3Zc4R$3jX2l(!iC2OZP~h~LTUL;_@5LOjJYN!D_mLNA<0t!448PQvz!jBjF>vk&gL@V`k?<=(HX?3$r>fMHsZIS>U7dZu z!Wz86`Zj6z`8d@_V-phtIW=#4JMbF0aHq#*e$@ zjG3{zQ5*Bhd~t9~e~7W_P>-x;=$?F#3BsLr5fL9%7b0T@rGaj=2@C}nIYd~L`h8)a zxQ9EDK|u|+a(!u)ZT}&U4TOUq2i7_VmKuYlLT(3!or}%V5mxv}OB2Yf4xQeMi(`T^ zJ&c)m0!J&23hRz6*#z7}6^#b8)69C|-12CRDA}YiKZ!t1U=Ni)HRI>kG54rG>DmWY zeq1`fGavaK>W}7DRbpUw4xeD^(&e;AykNOn!MeXI1dHk*f@N5>ccpf7Wx8BD&vxOL zplVx4Ha`*Xgld@RHb-Z?Mn6_tRJUZRo7-Ud4*tB`9vCIrmoI;48sYf9B1>O$zMV7s z>&4)*QW`Yg16W3ITF?{owfaGkHqL9A{`jzxdC8{z=4RJl#;t{=)Pqs8tswmA3AGC+M&D)>iO}f$+YH4x zCs>^MJTFrD!R@S!U`XxJe7(ehdijM|!SN2LRThY_O$0TVXM*OsnIkJnYQ6P>`L`z( zK&Gl+R^C>7nC(MdXK$Il-2zw=%2z_^K&=d35CwuO8u2SZ%76Oq&)HuzC=wgj4|16x zbY}mN)S2^CZ4z<{;pTaH*V>AX#*h%>Wc|3>gzRt|`^dFeoYptBlHJYwkfi3P7Sq{MLQTK~n$o4^w(L3O% z6{>P<$cF${(#)t%)(Xc^=82JNgq5eC-#MM|Kl+2*tq*MKRFiRwFvIJ;RzBCaX1TI9 z%qKXMbT|-1c<|gFmmRPgZ5dL@?!Qd4amYS53Hav2S9Py#daaL~+2SnzE#1F8PR0AN zM7|R^;SbIj%naNNP>v=DFHo3k}z-NezjpiBw zagRgC#Lx5XbFQ;G#C3BX)Ckqy^;jpEFA>T($s0=~VVwX|IVyanUSGaQ4wJhyDnLS=HqmB0+q~=jsoxc!( zecSwN#lzk6O5WQj%VH9D^x;%}5HYy(pN1T5!IpRrM}7nKo`28fFb?O=h8 zee#kX@Av9vo`oNbf}@gpy!!=g%s$NP-|Jz~z5%a%HsqMTZd31PCp@!p1}51st0OC> zGEg?#uktK%Fp72G?YLc;4FtNlWF!RXuH3wx;uXMciDpXcRI5MNDu10Tay(!VulsDKv?(d#}E z1dA;~`eh$oURYmQANSQZY7bg!f<&|Ap`+Kh72&^1l@;uvm)0AXtyNVovVCuee5c{x z73-6?-))(~o$B%72k71}z2WKv(%QaAjylHHYWRXK|FvlV?D)D4?1aBPnzJG>aY?Qf z_SLcb5b)6!f~vdiSliBao2G#ZHO(y*@`6jd;ss1cU~$6@n&I1kHyB3`Sf{sc?mcVe z=ZSY&ElW?9de$F2TPw91d_RmzAvImY?Qv&xPqO;x=O+k2fQ*nR)fLs`1C6PT!?{+% zm41zIA64ASL^;o`c@Qk~ymyb>?{3UN_t91_Yoq1N6nh(D>Oc9W&y@Y=7;n8I%N#0@ z$COh2mTB8-Ffcjy0hOuR-AwD4yU2~KmhQ&u+kscqveeuSh5)GCCrz`sJ^4&yzRn#p zl`ab*5=`#_jssc8iLGo6Ylg(taw9Is%mzER{7WKJ4Q>u=W%cbvZTU+qt4Y{Vu*lVTc@lSUbfWlC<8A;R#pw$2fgw8n1@m= z9!hN>JXd5l`a<*e)aXNgd}!QrUy7Ty>eXlr^)No#-`{;A0-mH%efR$n!Q9gSayK-v z54z%KuaQ#%Cs9v7SQo*k7g&hRT$|(fD?5y}-E6&kwXZ$EMd1Otly%KCJEwHO^7;gT z-1(1>^?LB!#ZAy=Nnb+8P{}%hXXT@Y>dpmR*~|MkTsO|F8jKqSks^bL zM1NsFQwk4?V;i1sw)4rA@qt&}(d?zZCu}qKweoP%l`CA0PosrTDSTX+&Mq z!N2llf!siAMfdh7@q49 zQIL_pq>v22Oy&B7&OC`RBhWG_@$H=fPcQH=TV;}hG=gx^(8E>h`Q{_`Q!S60pZkjgh2D6{6*dmm zH^ba(G~DNE@;X4C)TjgAiw=q#J(yJBjc~Z_iy;ruve)q7`;h)s+P!BhWzeMXX6;*M z2aoOr$`K2df`)y-i@`3#1oK>T?Q;Djw*XGnZ1g5Y%)JF_D&5`5+ar!Wx6!71spmOg zgKD4hAC`xmAy5z9D;8YICDQshVai~ElNX+@n3=04(27-O@+Ym^%_ySBd;Tx%3s22( z{ft^T4zo%$5W`%cm;kxHcnDN^3aStf8oirrXm^vmIgei;BXxLKgtq6~rSVg>C-7c&!17RI53@7U7*@7bw-y#3HA|nH z+zXnMu&18x8@s5I+)UF8ZHtTMG%2kM+dA3JcB96 z(&s0oHfxne`zkAr%}@c!hpU=}G6)10ENuUX9*!O&c79FO;-WnRFM^aG=Yqg-1b=;{D9ao z_nHiSIoGq0Sr`9{w?;)ZDCbtOTFuw00Uo_AlkBOEA87)LJN6@Zo#|YT1oiJ&PHTzu z4afvs@yxRey6-WKII};#)$p}xALXx2XMVyTIUL zF$S3L8#KX%I_wM~>OSm4(0)!3m{*pa@=vw*);bOpi*eUkZQ@6a+LZYzm9-%_&WGj* zEWfB57Mo+}ruyME&%2jJ@N%{YE#Bl#@UfK1-8jT`B-Df?FwQvLJf^QEWA%lM?1J+J zcv?gf;A(u{O4QGV%zB@;k8szU8=txU)=$|0Cz3aLx}4C{%@z&3_NtkHDA_uWX8jRS z^)3Z&HMfS$&_H#I{1<}d(btaKBSjm%cDQsbq(RqngxYR+S@Ks6T8E_~Yb3Y%8#+qH z7l&XH;aV-fpS6_b$aX*)jGy(21~b#>WwUhx?}aCekqJggH(5^z=yI#iYa`(wKAZ&f zJf9%$yevKW6#2DEyfyiA(VWDtvtX6L!Ai#+wbnRi&B(`LrL$OQG6vr^R&E# zk&f>WWmx1UDKdz)ay-lg!;?cu)j+v@iA$G);V5l2S#owKi7CEDlDIHz#i=pZyi!lv zHvaR*IL(aRK+R%=>tN@}C@Txs$jcb~+kiBhpB%>0SRTjj=do=^pMY_up1ZNEwmols zow5xK<|df>BXOg6VGh6jIUmHdOY_Er0w5ZbM*-PwCAyq<7Z_**=cd%$~~jHhdR`)UGsDr{Jz;jgET9RCMgxX zQ!Z3^T}4$(c6Ru_;JSR|nu+my?w0?o4Su$!;m)MBaTVnjcKJbxkYFrw9{8T}0N_rY z#TdU$1_xhB1R2cVy=A+w9wnJ111S|?v5F)I{p{5mZ1v|QnQuH8C6#OUk%W1x8~xPg zzc$R>($}uA#bZ>y?IiLiY#f-K`jW0VmSfX-=TA>91Edp-&w(O+V$xdW~e6w z;J$f`X%LG^jTx*c_Shv{X$3d`BgZA^o(oI=XW)00i_2nzV*AD2tb3{M8!t}-_$HQG z@r%P{jJ=e)z_0TzC+VZ7+lBI*&xBN8EqfT93^777`@{{w+@kGa>r6wX7cO8pv!C(A zKO410;y;u(`_+E*^4eDt{ zn-f0HrCtm8?04<@O;nP0C2bkVjCd~2+t*0&qos`8qsr!~Pr5zIT| zRh#A1P1}SI^y69 z=ca$cT~chFw8G?wcB60f7jj?W9mSIOVBqYl3wM%5M>2ho&;bVJ^B zZZMriwC4su`xm~jsp@}v#mF{cHN}qYb&pV$4Cl)soTZVe#92Nv9DwPkec8EgiNM$i zU9OK{by-pj`7te4-d*EbI9#J1RMnJ@E?yEMgSJhnrinV(?H|PM_`|u890jLlLR6!a)?zK57yQ-#UHx&H$;%?I*m%^#9Csq+juzRiY zB@{Flgy+JnGAMpe7PXm{vqLgF!<2hCS}L5gs+j9O_|o_^8JoWd3<0?SL)UFD#0(b` zzjmBed9E`8H4PqIZy9W@{OjnKv{q2G0=doP`@Y`aSTu+c*8qDnkf`Et&WH_lO9fv{ zP$h#$uNhY&+{(IAJwyN{{;Zdoh3rJ;>U#-}Ll$EVw}+2u0kqSWwJ(PP>)Ok2qk1;l z!)(~2!+TvTJ0c7KnnOEVJ|X8lrAkt#$9X!ipl$7Pdi1?%VA@W^!ZB*$f?eNxNPatS z*dhE>wCJrXz)(*#Tk{|OxN7#Pn;iP8QrZ3cU=LsoDl8Cv4Q5Wct-Ro-#aFj&LyqkD z1+p?qbcwjj)Ie+_TF2xc+F&m+CY~qn7cKnCYIT4N@#c@xqG(?I%c)$V`p)TW8fUMy zJu9V6DF(1&Oz+M4c)HbK``(#ukxt~|udnYcZOW9$)rKZotL2l`W^K}Q4!=qUyc;T|@&axz*?mkvD7>EqFE$6oU?Yr0)Y*}(?#+{%=V zR4c|}B}%Uk_w zLkh-b#&=6TW0X2LNPH)YRC!ga`XNkv-;DK#{4C(@T53=>RDGDQDm@Ne7>OpQiAS!~ zzC_M!8+YdUVc=h<7Z@&rr8X}0_5HiuqdRyL2lhU|Or{ktu+Jn6Att4$2swNY;)wyM zv^rW;EGemA)>F#l4Z`Ahz=G^giQTZUpmhVRNBolRlgfC&Foh6#0t2z?$la9wi(xJI zb#(ZLR{21!VUbcMXL=ze@{Zme0>dD)``w5&5zk6KhZQCW>!|(klI-+WdP${(P7SH5 z6w75ZYooSlFdslR4#=19d+rU1n8e|L2Fz4BY!Q@B1;xc6m+URET};DCTW)4KUe5QV zHY(QMT_W2~RTK6`x5A~V4%cJZ2C$mNOVv~vJviA+mQDD~argdMkX-LYV~3v^veUJu zfpf&Z>E#%#?zNkG1IHgVZ(#5U*K}%C`j9NGvzty^Ikjr^yM0^TA=m zcFSVBb@GNs1a)G0mQ%I~EP7MAys*a#Cvv=_$GsZ8aw!_$G!x^jdX!uB%Zf=|YjIs5 zdsWHLn`n+Y_qA#zx&O*zLxkzLs0G~tHYX7ch%$k*ec);kW*E#F(GRswO=V@%&$b2u z`k)nQELm*c%K|F5ksbN|x$6>5SG_zQG{bQ_Y7IBoxv7W439fAx1@4&+RshQ;`yoMT8-3Vcjt~0;LJemwaY#;)TA($Q&ewJl90?_Af)K zQ227~32`2p%`b}-c*(yeLmyIK{(nS7Ny8LWqsdnc`s*9w&4H(`HJoGN4pW%KwHV}e zX#v*U?yrzknF3gz{TdX#BZ#@uVyq39@b#yl3$(Kev(~MDMB6crXr`Ntz2)j>Z$#wU zr>xPp7aicw%@`$;bwA?A$OeFup;|>dcCfE?!8ARrisNT1&E4?mXdi&jwcl+^Ca*;% zEX=~wSJl}24Y(Dov(h$dJt>{6CdWmizCFmHuOJRcmrB+-aCek?r=ZB?D+P^NOeh5y zHoMQfb&j9|^K)Oesx8xxcY2Rzt#NR~yOHI27x>`r`6R-ejwb@DZlmPKeB6EqG&Xkz zd`|5wT=TU>zQ*~FQdm0FS*-jE>V~@$Bb`8HjE2{ZtxEthRcH`n@&6G-_G5TME zrI}4dKN}Aey#asA{^0Z-G=;ln+&hsnf8$5nGixJNMyFMbu;e2#^`-bCDgHi<*HGaPGB z*TXuE-S8$H?W|j(HJs&<`kkbc@s3vq!SGG3_<&>C3nBdMME_K+;+0~ycw!ACIBUcs zKv)wGBi-ec$U3phufS(a`5P6`SyZagK*XP;LE6<#?*#SAI!kzIWJz6SuA+aokTE7Z zPim!(+3IZ$oI`UMJu(;>f;I%ucykj0pf-1I@!C=wfDppkg(JYOhxRq zD8Ayq-^r+DN)F#XwRoIAj}T9d;fhHON!c-8W82F)aCZQ%BJOhw2-&1x41C_JazH5b zgj4cTW*lAK(6dw>FCI8sWL=kAfcC`HD15)$(#*^9KvfayQ|QF|ZeIGFR@(=AD}gwv z?I^Ki2`yWo)#)Tap0gOsqc<$*Q%E#Zm%NTc8R|kCM{<=E8X8&@syqg<_;oBsy47_S z;|Skpa`XcB0YT1qqb!+rl7LHc8SGNe)bSe(7d>0M`=4o9LaM%c9^69$SESK|1cT?( z(1*ld`AAxgDb!`_<7Jy^nY0PAk%FbtH)UJ}+s4@2tr&e7trL+}UImW~$qz~pn-!)N*O;=*4vI!8HWq)F^DJo zU@!_s@??O%smAiJ{9bgAFNjOu4ZImR;0fI+z2|duSi#0i2lF`zQ8!xqt261E6=>w$ z`eyENsP?cNW%gy;zgZDilwgc8_ViMSzijDW(Gxo}BY7^;iSUPKeiep32_zvRs~kgo z3&ToFf*^q&AH4Dlbgi0d0EAny8Z?LV&4U``Fg%)*=>UD7dW03y8%4$gzSlg>VQbGH zW6`td09QMlyh=KYZe?RL%}(li`sdSTGI~5{It8+7ADt&({>3;dS_(JNEv^h{CQ4Rr zVeq21*(C_3p`?`)Ki7HZCx@%?O{TOacv!a`B|#6$#DeYmqpn6h=hZ-ut3GC|abl2F zt$7&jTZj-hPB99+S-at-Sm7@{JyS>AyFrG>vwkVUo5PCgK`Os(Y%ll$v8WceqtW9w zFX$Rc+UoaYW7Txex<<<-V%zyTRQfCt zC>@K0knFEg#AFY+^>h|O^je>Php(mnLr;18glU@8=FI5MkNS}S7Cw&ldGJWCF8ksX z;-$4{1~cv_HMm5|v0(Tmcm!S5#(lBW$W&C*FkPB~i~ zLWSE(Gxyk$Fa!a^06M;XJzBm8)1$e`Dyr#y8zO{h4q0@};AS;O|4uhTS3X?o+xJNozP+X&F!Rkk zhKvpOZbNgsf1J5<|F&pVVXzZK%DNN8CQYx8L0_}3{^f%WG-;Kx3gyiQ36%F9PV|-E zR8v`4#)pc4C?>u)C5)QR&trM2_uCH71}6p?thaHKg~`-o(u25T<`C!&m(RXfB1-?W zh^q>D+x|}kLVxxrG~H(wkt+A7A88Di^GTiI+><@%zPAfvpY2$^k(W@re~UL80W+rz zdVK3aPH6uCr6RT-1?0Z{=>P3IT<1n##K!itUf3z*fcBTl@|xb&Y8Te&Mhtatn!7gT zSArOfZsYzWfZp1NuirhTp=E0#TAnQEpjvX3t1=WXk-6ip^)(sTs-lE}w9%HDny$uM zY`yUo)VFIekNjyZcaFwDK{p5$@AmB+ez=e0(B((mWAN-mgmHM$`N?)dL=|rlojgt0 zOZOdzMQ={s*%1G3)jtHq3w)TnPI=8}^{Z$OI}AiPNZ>#QeoH2&=_)X^Td4QlV2jH^ zxKxBEn?fxwb#iugOa`p=lc4ge8Uo9*gA$r|Qx&=-r1OnZPEJl`36&=oKx#er{VSbl zb$7$>AK+$>OMmqkDgRH(%)0CkZHK>F*&C_6{K!5iB@@x{!rQm?TKLHj=DXNZDIPZe zQ3&xDYIi&g+f-xRL~H5^S<$Y2cb65shhJJr$09RJ81p~`X{{B#FU_*?-nqK2Zo#HtbRCj ze((b=^9PWDN7|@*R;6sgplqebSCrEX*bj`FwRf-tVm5L2m?8pxGNr}x_Q7nFPjCG9 zm0+-!H~PlYv45l<{7)X;6PW3fZ!~F3w(3<<_!F$H3y;RjKUwZ~iS*mJc>D5Cs40{fRf(_*lREz(J4l67Un@}n+%-@O_wq(wu z@LJH{n(&1XjD{P1$@Bn2*r4>J$9U|24*z#b{OdR;{s}(!Co@WfD$moBU(NUz{I3|Y z|N2k=ePNhja%l=L6B~jZWDJiAjr8AYZ@`%hBM7nAp600oY^x!8U7!Be28H3rU_yZ$ zgDJS24ffnjs@!n+ALV+#7xMf*7G8W>9-oof2mB|73kO7*{w*@g75N)`{Xta!uZpk<71|Lr{GKpR zNUKjM{wB{5!A_0^;hkj318hFPqxBH+-=mDj)7k6grzs^ptyorc zb-FpLa=@2>EmX8hx;cM^PNfL42Ofgf$ekuo8Mpi|1w605yXS){{v|D$h;Q? zc!#|wQY1e=7!sE_OYw}J4HYMp$-ncPF&)1re?u5M=id?q6#m3AIh}zX;b)v@zNIQj zh41wXm-+LAg7!a30vLM<<3AzIhU*IxWdE&mc_Ltr(-X5c zS7OOY{jHTfUA_-JPd8(oFt+Cpq>SGf_3H7k4Z|D1r|t34{{;>O#n|Uu{*T{K=wv@s z*6TDcf2@0kmwp)>j&v_)U4dm`T}2s6VF70w#sm)u{@y6;v#w@Y5H7(0DJn=r`ywk5 z{%k-j3`ZIr&Ix_>vDIrNi-V)p%PBqsS22DRr1x_!WG)R1gmqzY6XIC;!>9F+6-nE{ zm?5Fn+k*7(U5_V1qCF8Zh>&9VKW*@joA}>pp1AVAMEftN{rBGdSJ?blbpHSTdm~Kp z#$nZf`n#Y|EhJ!? zXXCd{6ZPMfI4v%J7Ep1Q5cIgOdR};N1f~4xN&olQyNOxBm6v-#(WI&ycvN}+{*9;b zR~7r*c~`PF^6?Kd=7)rV)SR7mVq;+O@e+G1jc6jLQzF`v9#BUOpIj9C+4>$%o5HybPW=`vt{_iw6*@RMPcZGt5F>353E z)4-Y6-2rN9f6+5x94$1Wp`K6MFPL=dz$}Y80eBI^Wt^?{?w<+z>lzfF{gRORm>eg) z7fP{)*#32bIvN;PYO7kZv;1y8F(v;%UJz^uDz0t6!N=ZG-DG)hwCrRG!;|hIV8DP; z-+}^8E)^>}xiRoM;mi#_`|e!dRjL5(S@y(_*_RpriCv=Ae^V!a1)~BV z*D(2@2shAr2@mUTAoYkg+D=*{+X*>LaUh{E2!lmK@wS*89}ry+7p=jqCqTGMmdF1^ z_Z60V15?eYlZkDAx5_MB5MLQSEN1vh%UD)MrP{lsnFc@6k>WX=OZQzEF6~K7jex5K z%!871`r=|T?op{L z4?perUIck$;y3<&UjH0x5x}e!rc$5<({ED=Gf=<4-fkbjJ}<9}Ok;xa^(@LR)wYt+ zE$w5SQa&p=iBRyr+kMiCPr{^D#{&QNSCKsRqKU$PUkkG)R-bYwScu8~T_d&Vc)Db( zoq2n|A9?xH0ZpqW523;+KLIna?1_c46n;CbfBGe2Ghh$Xnm7M?`;wCbAgPJp>8XVUqe^)ZV;U}O?}adKUwP-t|7ZEf zKaPwC_OQ~3Q?Aq%VU+d3{eeWZHWoxM+MdH+w*myF5&w2_ zFg5u}Q$B~eCRX?}(qxTM5eFQXmXb8ev$DSie+}Z120$GJm=UcSkHvd&>vNk_PCD*B zvAw5aR_4Hgk!_oX0y-+%>{o$a(0W+m`;t4K$<6Ay!B&7N-5n$1n_66}?aZEr{N@Ad ziHN8ETOaxPVP2MB!B5957BpP;uXesL$&)3If$thI^c_V`f|607oH#p;*+}+LovHBf zYFKB;-55)SdZn$Bu5&>!+~dOPxM z=D@5Zpqwp^^zoL$4Cum|TAxK#eKBUgkZFgL1=x6yG0f`p?mW<`q51F$MVpH>fgb&{ zRz8KByDK~&l(QV8h&8(`Dby7vqTX@C_;FYvWAER^)jQ;;pG49u-(`JGt=gN&OBMBHXFRDc1K~DgY@R3ecCzh#sgJ5iud85?N5lj@o{BL8O|X>=;#azH zPWsZ``-D#Zplh0`A_8xxPYt#Twq5ivp%O0nbhp=^cudEUo&7f%@lP*+{~Op!1ZAFo zF}r%f8c5Ce5jLIDmc`LF9*ei^-6U8rNp!ztRDdaz!@n@xS%JN;$xkJ^S}sFHDdX?#YN4fLHW-vV|%nM_*GpKz=RD7~)1*csvO@ zAiG>~4<~1Fc>UHVXE3&VeO)>jt2CZRLXWs zc`^(A)MkZjNonw}uk1LQdYGl~YbZS+=lmiU3myMV^iZEOLSDW$pXcKot?!tbZ_5xj z0rkCg+7KP}CR8#F$e5`)b+OGs* zQnU8~+wxZf^s^#5_G={<&!#W9?h;YX{bN{NXWgpj)?)>Tv{!(rQ9k(*B(jo|MyQCc z{4uX*MllxJcOg&*&iZRstcva@kKtjNmY=joa5|6#*QzX|p$i%9nIS95_i6pZq1S)h zu{sra8QP%~`}u$(KQ}}U!P{}%>+Xzq@^|V4%p|kJ=S|JER=0w{iveuLWnXyhp@5pq z?6fam)^r^<>f7ST2BqeO@uw^K1Fyk|Rpa~Bw#-CFtX|UQc#%A~0i(r_w$)Y#g8a7w zhKst}nJZsFB~6aqmUKp zL3T;7nQwfFbt4NhKFIh`?|~(&SKN^yE5OjKLX#ks73@egiYTt}7TAizFh!x)2}~IV zgbrU9b;+8a%1LGp$V&|aAEW^r_0t93jdvnv?aZHxjtKpzgsu4ScAUGT^1LYBa-0uC zq47V)=C{(J>jj)r)i<>U=J9%&3siiq2q3{ShO-dl13+HjbpUeJC8SH^9?DWRd~5)B z5s%5a#4&IDi)Zg8B+ACbyjPu;@;w6G$_0_0=fTVAV?Ika4H+dQb`F(TFLmOxV7I>2 zjM-zjxcA1|a-p%r#l6Xmr6=2kT6gs-XH?K=XTwRMT7h8QSyYdd%sEy`b#HsJPFNqR zs*PHwWah0op>on1ucFs}n|m)88?$aS>9;Po*(RUQXf;otR~!W#D}(*}s?W>sXV0!v zq#F;(XGuN8BH7<-MnU|FzqrWEOxJhKw9gUF8A;mC`IdQapiC!|_C5Ua`DCQ5kB5G7 z?ER5?4ZyHgUem~HiIH%-#{F>gPKWEznPHHPW!lFPLLzmlG8g8cTeD7*kr{3u!!K50 zN=44rr=$O)Fv8iFe)5>UZ(u6qG``MOJ%qXR4tbE1+ueb7)327hMSECDfhU{>u)g=< z4IApY`qIsY2=KxW&IVI=blPXU4XfG*yg<Okq$K}=8{23?-MXt|1d5d^+migwzYnR6Wz0o?K= zUfWE<5;R$_)lI2rb6LSNDd(geDi8G&tyf%`3%TD9U(x`{_bi|qdW7f+%4^9{1lb}h zSI?huH)Wnlzr*~8__N11d>BFUV8kMpD%L5L2H9rL=~1_ z(3F5`qZ|I(cqasF@qCf5$=G7%gbP54*vW{iV-|;}Jxv^Rovfx8R&*viYa^W%aYSY5iPISiB+DdH=7sZq-0y%HDzL(kFJ)ONg zJpECWZ&TWpgRKFG{7AmEnh==6`)5AXS=ab%MIX9f zsiCv<^O4FudnKZ7xto`r)zVOZxUKh+wzK3>C18r$%W=sSJc6=z{$|vx$XVp)eaHu# zWqJnK^$i)uJ#X0{d)13%O+~)ZHRg_T&Id@zJ#ni}u|EwxcDM1abbx{5%k*0urS5Az z*UQcd0OolmDF?9=iwJt6U*7L32h@+=p#jRFtJXhK1$c2Mdb?>(CX4P`%woTq%Cg7U&SCJ&UGZsOe zNk@_)QZeF+1AE~csyE^dV%7@vOfREulmVCS_0(Der>%WyGYiP=uLAY#!QK7l)_H=e z^1vnr0zAm6&$MF?9}9`L?4_}2qIot9f$+GgbN}u`&<+_>A7V_jt0DS$*lIw?Xxy!h zd(4jP(PdleY4@5Zcwr)6H_Io$api;2;^mN3lY!6f+>f`}nwe};S#aCp)>!P_y_Vwy zFGuZpNvN@7rjW*!ccUYGNcdtnfNni`7(!c}cNEy$`rlZ=x}7pW0K_x)2m42FYT!PyY)<5j=xZ`4x=iibGWH~vk#L7;nucS<*j(oU@5i&Eik84@ z0WamN{AwJG7^mtIhA;3CexWpoP!xyImAtp}Mqn zHIH*Vm$Gi6hyT@k3Kwhhfc<3i1+&n@Ys%$Hc0T*S3G@mJ(XvA=SAb9?$v01x&;(mo zCr{Gow?lo`WJUV+^cs#X$aocDr+PDhESEwr{sZZ(3wQr8${ZnE_gvKY>Bn|KiSASU zTSv7t(25rWzSrZ$AvS$)h~@=nTp+VUE&!hmwLF0 zOPX;bNoRM3(IY&z6aN`+WQYZO5g-?YW7ME=eyBp-N9*cRw9c#;>Q zY`e71>n73oUf>&NsFWPaqP*!e&WEcxX~X3hdF{nY!7k-g`v}g@9>4n~DEz0zDNqAF zh%oL~ve!Y9Dw*ys1hVaUXe-(TVK297^};mL87ys2#|+L{j%h?i?U#tVNUJ%qMcDi-DR^vtTtuRRsWw2iBJ!P|fk}%%d`rVR8lxV` z$)3X+bWAMp;V0!4iM*4SED+#avs4Q>F75ebZFO4bnCYRX|N41-y4wJX-C%VUNWQfU zO%fv!4QfHUyyQG-JdeEhp;nl8vU{z|o4Y_oMb!~6=I~2L=l8SPysHBe z&I-%d1pW6rn9W#eg9Jn}o?#sElRT+kzl;M%nsyoY-m7YcaIf%wxgCnDA+jt^&E6p9 zsYLViH9dM`a{ryYoA~w6;JX(S&)m8-OK4BWvRF=!zWFu{?R{8VJMEOM7It59)FftC zZSQU3waGY`3Cve&l&%XNNLN8I_6=r|0EdL^9Zl1EtDlo}99F6J2A<5~BJ<1Z& zzWI34CMz$Km^QO1|I)1%T(_lSKA24qliS_ImC11z=rPJAv*=m*a!#|b;4fH)TF?$e z=WSjjtyNxRX|?;f;36sLI1jC5I@Gp2;j43Wv4(rJI$*;*T|%U?>!H*84(xaX*-n(+ z1!%Ceeyd$1++<(I|6zoEs20PiUc89bYPgZvTN`!=jcLrBj9_jm26#2QMjMCg$&8-eRx*Iaf@ zb=9DNwyYtjDBo(5>Lqz)@?a=}ShWh+-?H?5iYIiI?Wp!6lZaa{FrPQgWGzcLsa+Rj z_CCLDl3XMy?5QHk=E~^wMlUAnR#+7$vTMtsct_eH#!f0CB3ej=l33myYfWA=L4Nr| z7I@Y6s*!0Cm&D)fZS8EN%*cm-__q|J)b=@a7{N?My|RV>)^WP}#rv&JAXs{964QOB zf{Z-{*ffaoO5}PvfX-t(G$efzk4VDT&IIrJCqfhW^7#^^IhHQjLpnkV8tah}u&--- zUF3cV2>Gz-ly*pP%`c@J_PNT@Q-9Np!79faG3#8K+AL5a%mAAa*KK^G^Ar7`+?I)> ztt|@eL9y)fb%4cZQU+;N6_$ZtWK=)VNUpZ*Z^aq~j;|5NZtZ!o5 zc&X~xcs0GqPNmHhv-`ytvO8q77=CVXbT-A;jrLg&hK*~s79AH{PFq@aR&=YpOU$#U z92}3&0>*Awuvy@&`3guQFt`?S4CAzJ#} zyQq8DJ8N7=FB?kKznO+yp_cSj>xqAyDsSYbTBC;taY=|P1~;7@m!^9=R63LKl!cAs zvK#~>HD0)e^=}=xejA0svS3b_XhqFk^OEcSI%l?CLV*NmbOm0IcTTW5=C_-py6sRp zs`&xPH?i1)E0Hk`w?>5$TD~umY-YLZ9Ea_%hmU@JZW1n!WaOMvvIIiL74K1(_=UtR z*B82W9F1*tS6$vGm5)|bFQo$#a(V-_EXNB?KR0FO-Wm5;yUuJfDfd0nUK0rN*h_WJ zbe31)`yy~z&X^Y5)1(wy+}7}spR1URB0oSi$k{<9a~^zmB*bcAQ|{ zD$K4|LhIPTq;4pP4Sf#-1dyd_8Y1&)kw4GfoLgpMz92ku@nAhU6W_qMuZXPjGyclP z8BhgO8qiE9=#?Ej!#l0wp$=Va&5rYG=C#KM{E6n!-<2f~9lDeJV=h{iBh_yS5v6rSBmy{V05qu%3g`i^v06(A{G}?5Thxpe;TS|j7f(3UlJFDQ1qp6m! z;AdMQ0yfJHSlM!ar4_s?f*ePkKf@Bu{>9Pan-!QsZwK$BEi<@(gey7nUdvzUQf;B= zayKO}W?Yc5Z(u8RXk&?1>Wm@x(r(FM!Js~QFRhL3a6Q*^(ZB1;VUWPPrd5>JLF4)` z{2b&;KQf|{b$c|q`1pNrxl4PzK`y(Hg38cG&o1$k(yL^Cvd^49fZE_!7cUyY{^9Jv z)-9^T^191lo5YLTRMq;3%u*gL)lFTToHVv$3|*TMLBjH~^5zg&*>^5H`%&&_L~>rBCTvxJR2tZjprR3u+j zEBcf=hshx~m7ToL_lnsN1cH=0yVu$UcI{9y!Mi??fqD8nhEcIomy(4jUChL=d-Y6Q z8lU{3^1JrdJ%Lt!_}yT8-&@&>Si!h`qphtaR;3aSP0jbm;42SarcYD-%c~&HbE+$#$4F>0|$A`DtA+Ao@G9rGbZxi^${mh`@4GniM1n0E^ zZ1HK2x<;AkzaJ&d>bv2jX%h915P-!wVKobTtPMvg7p5{PBUu5#rbbo3 zh{;yO?*$15JF}DlxQq*N^JMpqK?Po487zoI0+B9uWiCos(V)G<9Ayz)jvYwM$)p1Q3%H-?5pVn-3A!PPjhas5t zqkU(*?U_dI_G#o?scj2gxF%XR^HX$SxY7^Y-Z;N4^%6ZegTLt~8)8Y}*N{O1b^CgR z`I@&-4$)GygF1ncG)uP=uWT>cO)aLhDH#Px?i^mS>-a9R4Cxt#;4j-(Tr#bXPvf~9 zU6IfYv9w;xr=2f9BJ_={9KU$I_ufftMYUlv%zX7vWrYDdgx4P$0Fon~cp|J?s#Ot#(mU?YOQfpKI+p0rWAv0HqME*3 zl7%rl*T-3NtND%^)o<_%lASz^Zu8TcjBd53iKGz1Vo!bI#_Yg(=yz&!;) zD{H&_@#sdzZ7pun4a503;Q;Ug+i|hwVdOOJc^B`P4R@qh1A}0RTzg{6rW+H{Ix9bt z^wjFh83b)MNJGyo{&PX!8y41^LrL#Cj7(+5rtX>2Uz1&~< zf7pA=u(+0OT{t0-KyZhkL4pMju7Mx{f`s7i7M#Z2y&=J&AwZDe?h@P@cWI=7#_?}*hPLx`bh#f_~(lle!7H?^sWZ@(UE z@1VZE1|AtF0>JjZr(I^6-Vdej-nJp6k`7*R;T?IZC+Ccv0Kj|}$JK(dy%1dz{5e%; zxjDgh;MVx1!yP@}nxw$;dRd;P+l}(*nV83Qa|6tRYQFE#=8SVB7y(x2a;r~G-Z41qo@^t#9n(>Bn+w{ z_JY2utPQ!2ttYM$egNt^)C(6nMzXt`U-bMoHuEd1tQ$Noux7H`xCUAnq;6?ALBYVU zT+u3WyG6skbK_JWxCz<%qUTTScZ2gT3!R<0>sS#$@5RO2>Y>VEKQX?3ZM0H5gt6<( zYau52_+&~^4050rb|kXuNC_R_0WA~(l`0w+ZbDj43rtHVb{YAPcn>g*E`YW zazfM*#g5;@n*$nojGML?XU$-m^kH-lCO;^pvmWfehdan8xV?1qoOoP*W-u|&$r#=Y ztnaEyuim_yUT-ZuRei1hDWdsKuwqE)S5;2AVTKjZ{cDq*lUW6AzPHUh|Eaug4j?5; z)5xd3;wh1Pd;Oz7Y(o`sw&ysS!3$(P3D7m4TNM!rRLCtdoSvSmUCH%eET~H&fj|#!DE+^-oGg;nD_# zM625#)4*qz-RcE$#88gFgB@m>&Q*N;A%zUxUkt>Id_%mC>vZLtiR)26hm50;IS$`^ zYv~RP8B~5v6G)M);=UX;DnN-8kTpCWf_?NU_b?Hcdlpg-WIM-`&*@!rcIdOG?2hKc zdJ4Q~ekyMf^ETH^c!zr8tzdXC@zo<$T9DqYXvN%`Zf=!`sHbHv*5+&A_~6$ zvq_ea=8W1AUPa;Fqa=&_fM@ktHSkaA3%Em+Gct!SI`&qgi{q>jZgFX+8H-exHYPkJ ze5J6i)Z5Ny35nMzQ=#Z;n8dKV{2FD99>vsUV}Gtzsn@fr(@k6ozYd7Gnxq$kn=af} z`{Hj3Jlf0rkXx7zNhR8?KR=mSr=OUA&s&6*LO~)d4NgCZcX2pLyAU6$<8%^xs8Voz zU*?+4S#BZbb`k1h9u^)vmp^Nybi{(z*!Nz92a!r3h~Frf+ECETxej8bsK~zp{N&nI zIUAwqokA;foqcU_gnO(F;S_r1$-xogVUNucuQ@#OR3D^NGA76XtYgJ9%bkTzhxX~D zlrJ~o5d(b~FT6bv?h=S!=bTMskc7=tN|o|yn1&;$uNt~si!QaVk9Yq0#_*z4v)L2x znje@>b1LXuAd^0M`*lU3lSd3Ka{jXY7gifPEjvg`1hx;qVSUZ~GxDQaFd&S)eOoDo zY5B_(eZ`S&bgT8pyJ)twXuyzt;O^IVpnAQSNqe8$91Z%rRUuhPspX$oj#7SilD;Y| zH!^Fr!_JPbh2$@o!9r%CQTdTNcVwU0Q4}{m6e}Shhy0lGufkUqU&I^yP@nb+-pi(0w zmWIJqe0oQfG-WFcP|pYrLzAp~O15VdK==FkF_X9e%s#y*WZ$_@azNUM`ljFeleUD! z!5+yLkpf%Pml)GsY1bIZDXzlCBC~(QMEu_?btSUm4~}v_MohCeyW5N`3Xjw_BUc%{ zCcIoP9p{N6Cog4mvqj;YY-2E6*Y@pHDnu0~v+stfU}B&7IJWH-9nYGZn0|~b!&3KA zJsS$9whDYZ@?{hY&@?7Q1mdBcomSPIv~nEPoR-k{%;mgd_ICFAnbWzMpi{nAEVQ4~ zW|-%6c3}q()ieuU*&#@&e~X;$;2&E4X>fb_W_r9;ls1fvyc#~v;10dIx-`C?>klss zm9}t7*JCsumIbO1Yj>YkZjN*5s=@Zp8i+6)nTk+1-qE&uhT&AhW3>42lVe#lDsfRTxzvNXzURMJ>PkSdVUIjVAM|pMuf(1M%z%Q=xkIUbKOXu$J&EwuLA{ z;)CnES-lxM)ibA4g0YxAj%(B{!{_-p7O`ori?}{ON`vPY_oI#XnZyz*skDA3J0y6J z=hXT%AW*D#IBNoSWxU{++OGH=SCD{&Ry%_{SQ-*(D;G`+Pq2-cV z{V1fyzk}>o|GppX(75ZAU4yN6)y_#tmh@O%GSsgX>1r`Xslu zGnRHd-$8!ro!E4(GlR3{!mNm+J0l(JsvI5yr5JD1rbEMTjvg+Bd+*)f|0-;S;=wMB zW;}8$gvpr+`i}2q<*$&u_*w&@RA4n^D_j>boVOat{l_1#ctamrS9g!u?H zum>f?b;sIocJY>qqGbDVSpdvM>I@%VOn)7|Yt$c}&cDRn+q^-ok8VOMN? zyak%aedgK{q-Bz*GEbc9+@P^~0x#<}UNqcWQ65;))#ao{w}R&1LuQGf`Kcomx~C^U z(Yg3;zByR38{Ic~$t&wRG#<>{|CI5QIBEESd!ix8UgG8aQF%!W7pMLZ%H8hyq>R`e z`B{l(wf#?g z83t@4Q7-}_))Z5CUH%(Q_}&jjHlNYD@oT<&jfr^UhUIt~?=c&x+7$s&O9HvWR?@C( zmv;cbi;=o~|2PxB`+>xUbH11Ccu*_Do$^;}djemQDjrPNvpCL^WE%l4xMOHU71*R=0CVzPSE|2S_X;NpQl=&~EW;BP%PkMZS4p>GM5J z;r-e?L*0~XO41~*L3;ytn{RfDLm$mlA4@wW`=LWC`JSuS=KBZnLmtex7_@#dxW2AM zYysjIyq)GE&pJvMPM^$GX~CLVk_D@e=mu>R7XW7MQ>m;YVOZ9g8EkkVBid>|1l|0Q4*$v+Ibl+YssbO?}2rIOue(DmA&``48h}CX$fq zb=}1YT#JY_kIjZ#(An2+)YCp8&!#4p<>NVR zI(alSbP-Urg%zQckCXDv9hTyw)ue!XOn-K$8~;`4y~qBNb`b51@QUUqbFzf-XYSqfumi+v1Da6vYcLS<%F03qzpqE+K!_`FpUVt6 zm9jiN7aw?MqnnjETj3Pg+iALKoxYgu5?qMa26(nj_XNj4n}znE%c|i>NIUIZ*lli{ zME~<`nI7n?5TxRLj9!EZ8KsiZ{m+F)5?>4DceP9Q>>fT$_to`flqiGxQp>ffv^kA0 z!Bm>{I9+}fbnna=lkVH|pk>RC)UGJ)?k>|i*><~-Od014{Om(a%`tt% z+S9Whc)0XfYDweW#4l7hZN-^A`pJ2}zh`Qep7dta-l>?-{Gb#v=I23`O<7Je)U?gu1Jbo|W4|MAg0pJV0h+7uP8?(;?Qxw!^U?Fi@(_nfRu zxFIa(R^uSqP~`cR@j;2oLgB;eyzvl-%hRv4mPdAX8r`$?ORIJ3jG&-qLH9><^#?D zo2fnF!+w(~hkZOW%c81+CoApPQrTM*5gHcRXF^Fp%pGw(n%rsDHJyAt9hD`6{6TIu zLyrsgFFVi zsIl1a>CwAWrVb*j>A_Hay?ov2@hNL9y2UEqA?RO&U%zDiWFmx}$E&{8tbC4jp3UlK z!(gZ8r8ny)@vGr7DpP|Y@R&)I1zkETR;V{)$MKVX3d2y8b4=gMEWO4FTAz8~wNb_C zTYbzIv$rqU4_yUeG9EmL+N+}ZVX;>1@JtZdQtm^vWh;ssyUq)v>Lhi9C%Jx`yEM7o zRd`U^2P&PQ+7-5I>U)(Az zX$=eqk1(5yOs~h}y`IK476lbX?+-FBRrecaFe+_nHW%k}j|%=JMTLm7Xh zi@Kbr*1(&W_2*p;n!Eld0h8clQhSlcQ_+3e%-!4^1$L4qvYRFHlSdp<5BwP z<4JTIlv~VQp2#jCH3J=IT)9-`TY|i0O7P5YbT;MIuNBmLeHMlJ>TK&OQXxX%&NqM^do+q|AJgC+FP*lX&d zM@doW=UR2>05y_XQV2X6Z2!QccJ3y=XH|H3p;k#2WLkESEa6-$R1oSr3vR)4D=Vz1 zH*afrydK7wlhHXq&=q5uW1oo=@DLdHvwS*a)vBnpZF9{gYNSZz{QYjk?%;BBN%xFT zx$#dm)gb8`z^7x{>;?8^Y+Vp_=T-!(kr8DI-0R2UlLRibFu0b=D%pkU$(Js>aaeSd6lMA%iW#N&j)$GG( z{<^#t2m(kE9g=u7S@2&f?%cYzD^OTOT}zV{*Ct=fdh<|DFMhdJ%&*T?5uBCpYyBc4 zD$}U@d`Cpc#8u_^O7Xxlh5c5Y(4(Gymq5d_!1$bWq(43FaoN8F-XYS%sN-BZz3bR{RGIYn-`=~JX-Fbf1VLQ-ZXYKSPn?A~;$wi3&a z{=?cyP3Q8PX=6juCu!5-zUgyl%c1-JQy&tgPp-QIuqMY3DZ1zG5Hnk8i^y$rZ&!EP z4+oU1vC0>PRP&~jG8^Z@)6NJ9ut>RfV`JQn5@NFhD;F9roe=DlkepX>m1SAZb4v51 zZyNQIu`;ii{IDw2N};urJ?|kuDQm3eTblFwKoR$c6qM0#P%>Da-F7>*hPX%82V*HA zi;d`bOeu+ONSJ(4v3r<7%=4i<1ye{tbc87ecJxkp)LwY; zxEmGDm3GO_l{S0iAx{xgiWXdix+_A%9}U~~BJmpd@X~EB{;Ebzw?2) zM6LH&WpO|9pGdn-2)cGRi;;z-OW2L7y%l&>xj5Jt`M$v%w&)5rr{o#YCVdf_k`7ge zoW7$%^$zf_)o*+377Kboo_d6T=LA$zO=aWmNeylqYLMmM~wCqFPk~G=J-cJCXnAAQlW^agfLQO!nwBa z9ei-?_Pm!nU_oEnYgv66WqJ#_mSULr$h`Q)Hbi0grlymd^QJ1c5HkjhZJ{D;p=P@f zBs%&Odz&(O%7UNPehszZ&nXc9h>T|q`mG}L;0b8l=O`7Ns6G%GdDANq)#LO1i|yq` z5iTKsxU0I*XMH_~Si_1hs^48Zt!85_mQo*eorr5L_~5fo9$cHbxZ=PE zcV~7MI$wn^dU&3QFNORA2e;cXAuH~-i2YD;0--@H{I)fG=3TLNsQR&uM!qX?N_ss8 zPAo1*bmJuLL-gz3bixerc--wyDHV=S^{Ls)qMW~Hng;JG)DyTQ1F1Ah$GOHg1a16| zBjA>{kPj|CfQ10e!dwDsyRTv?VzSQckU95k?~Tfjle?kgR=Gbe{blWp4WjDfc2k`` z)cTa#j?39A0zC>L!n>!A6Ek05!yxDoZ=X- zO2l@d4V^-cM)7v|lw%#lpTlw}Aciti51AuEOPN7ylx&f9qL3Ky^NYNZz}+;Mp(wUP za}^vvqJ>#rucAd%4i{2U+D6!=-%xH3(JzQ7Dsq+A$2i#!$7CPLT#-@bjz-F+SC?qE z&|^fqgE`iDj^@)^d(W+w@oOrovTOHVv8=bnWbVxUvOQ5-iL=2x;M|6C*D6w|OuoUa zsf!U#1uO~Vz0Jt@YJ4A4-j~>bKo8uuXw+X}ESnAL5`ze+b`>FIGuzD&KQqldx9=C; z+f+Y`SLrQ^LkG~cE zyQP07VuyTX3r(+-on3{HRowo_`?bDkzb@I_vShR`Vy%aY5;34Irt?PqeCmDHwJE?O zJUT^Vumc>Jg=x-Teh`|WbHZEp0DPa#^z^LXQ}@mD^>V5RdzfBqb+vH9Qt0ew&X=5*nAX zAihhNdNl6&Cm6YP$>!;0ba{2jyUu|NqQuesdS#OA<^FQ-7K%0?Db{jA`}NuLKTf$% zVQ!+Af6*ad@P2=TT|>8y2Zjf5lIsqy1~b;j{d#;BgP?7!8?g&$>5KLF_s6-SnG#X= zxXXgM0qmXuFA|Q5IuIcq6`p#maxL9;V8y~zx1@`c`N|IuBC!iW({qh?;Uc3~$XVlO z@x)iin;JfjZWvSg(I8N~!MPb^zSxgi!yq4o6L)no)woV`(`D1!FXz>s%oX7BZbPhaK5I0e^3K7P&< zgq7)$sZjdxDVah12=9F1lS*HlQiyJ7Gz0BAuimCnx6Mp^K6GLcMaF*?GUqiz%d!?c zXI>*od70L|w60*Zyq!USQsb-S>SjJ!ZgMH26SdGF>N6jvI59YC3iv3v2w?*qWFTLg zul_pg6>S!XpPD44#(Q05zA=EX8@(j!X2SFOY~yIxwf+h`)Usn@wtP0M&Spw^2;jo5 z=aH}6`gp~F@#_-0`cf@=8k$1qxU@?Z1~e=h(OO>jLa#gwz|DO1>+ngzI!T_(mMqtpBrVF$kX7N9QU}fJ;Wk4)$w+zSI?S&Re7||1ByMzyb9< zaE&4oGs{WlSju&ROJ_?@-YMAJdMM-gFDs4@VM@s26D1e@Wpv#YM=3 zu&~s)XD}&lI-AEC>gsk94b108=hP|19!+r_AOSdpp}?QLfw4mfK+bl%VosFcIn6 z3nFb{!5=9nME#6&gxM+;@$O)r>iuCGurOAOs0GLA2*)~S9X4g>$mnCzT&Bw>C!fb= z`&dF8)4aGJOB4ykGkO)75e$ebpt><~9cq27uN|Q#g$jDNEdm-+{XIUU<(3Rrm1v~! z?H`w1_5uo5o+zLPE$)Vi+Kld#c^NGb#wy_)IpY*2VW~jdR2LrG2)mbOOm`iWX z@_Qz*O|)s|$(H(p>Qm(J5s`H+LnCj2anFKMy6qxLesp>p_Q_#1-e-qv1xXvhE@jsC zMMcJ{on^iQ4nyq%FdKd?{OI7I+$8*3Dwk?yR#sV5pm;sakcCAZuMjeG``H2IY;Jtc z`AOKxK&9DK%;HPPE{5_Y{h+E4w35jp1Tr9WGT+W1Cbf1D zc6K#Lh@0mMw*$NXAle~4*k7&XF)-Hjt&1MHAR=^QdwBM=rL?^!Y4ElW|KJLUA8)`Z zk5DvR#G5F~&vSefut6ri2tBh6vMgPhNcS>=I@IH6)Rtjrwet?iC>~ek;qvNO6;n}_ z*xH;BR~Da~-Q6gg0>7h%*532ouD{#RwXvN=xC*Bbu0ppzT!mlD+ZKJj$l#^|$;UaEW7^Bgy6 z8jtysUkJNRPu>py4$)aDP?B zEz;c=S9@Kk38$o+ZCtyr)W^Nsc)aB1g(BDaWPMQEZ47{>PXmwv!?snrg2!H#z3{p+y2Vp)RJv^pY z&5YhBB)SH@F}W*Uyg;(^+%Hu=CI|cM>Ss)+c>bW@Zo8Zk$_scIsWaX&9TwbjHtbx^@Tq4gKr*5GO9FRKEF*wRzvMl`pJk%}nW4hsI<4j`RxSWmwo>96T z&_d_SH?NFheQlZ>;l@{Yuv;RMGK+-F2}h_=>v}L{xyR91M4D~$7Eeh=PVF8dV8K;) zgoUV_9LS_EkWkoJyqSJsq>~3Y7&I^^-q0gIff}JqK+j~k$>Xc>)K*!hp8_p=%*jj^-ZcRUX?&PoP zp3;cMQV_jp1gf~(!gVtaY^8D9&l%%#5`vlarBjcD7H;=`Yrl^O?H5=%D1n)KSZ=ZG zLa(!HtzcZAfm2!ONDCA5zJ8_qP<^@oee^~jP2YP}&Ih?3@DBMzCoiZctMuF*9gbP} zwe9?UlqBo3Awx5jy%-tMgt)`${EXsmB7WUaLb3EnEfxvdou1ea>=2w5wh{+NIhprW z)1|yxDYLM!XLh*drW!XM^otKq?b0sr_BEoS{kl|@mI4h|Qr!_*KV+A83tPd_b zHaF(i&Ats2(~2~SJrwW@5x`TI!SRryS0J~~Bl zS}!5rNITrW*q2(P4I^}%e!hqmk3AUCUrv|Z)}ZrVTRwr@zbvyGF6_x3m{p-Xm=xMEJS4_)itKebvCYW&VjA+zJP;c+3%PF|8X2#Wnte@bmcPuJ&ZI9a6}C|qPFO+dz_Mv-XqMwwq#kco-Yea35D&;{}&0Zv=Y;{=4{LQLS#%=_OE`?U5r zcJ&CDem~TAyrbGlP+`(NbH&zIp;0w;g<}RlAUiVP(-7 zC6lpG9o%5<;!tm59dn2cwyXj@rVdE!Tp&UnAEmL z#x>fS-|XH|t>p|b;76k5bK?X?-^qggaUj^y7~OX3tNG7%-Ci+tZu7nM-GbB-w72^d zGUV<;sMd~dO5K2OGO~nFArd*-OCcUvSQzobNZbz6*GxP58v+E55tRl1zc&)i}<#~=Y{z`)vC~kS@Kj-h7tiuj4ceXjy z1qDCX@q(RHCOLtPCe~lQ(%8UH{5&?oG=IH67GU7HY}UN)ViDH5_ZhfzH`N0iYmUZi zUT@b+Qsg0wyBe+Zqq?Jlqq_H#tUpE-5#DJt(aX=Jt?Y3lH7qTHlhy}SCko%{l2sNo zYFno=@uRV_ioerZv}wpF^5~j3DQwNI_-4*7LvjG%1bb1PI<3orul%-#MAunsXQIl# z4g4NSjBbB@)5iN9hOR>}ZnSBUPp!9ks*PJe}`5Hq};I*;S(h3aB(D%?ISxQ z*=TU)y{9kBZV~oR<{ema8ELM=+cANrHO@H>@8fmRJVx&(gv4;2H3%sh z!t1n`G|XKk;wos;KD`!ZcpZ4X@aipDx&eH>)z;|u3DI!D2@&m(Oi8|D>!2l=xf)2s zE!Ghx5$roKVAq)fVk#nHghx2HW+ic4u{Px(&9eJDY*bI>MB$84%HjvPAwK!LONLlVmsV~kQe$d#MeS!-W-^v58xffQlhXN~W=Nj`KdCAznlcYB?p z*0o+Sy(&T7UfaOe=y`azTW(TxzNeOq&bA-OU{@oZu0v%Oo9jCIw#56&S;1Y5t7%!# zZQj<0(@s-TMqkt7RliAqO?Q*aYQ-syGa@osj3Yvso4Sr!L%jjIg5?( zMe2rCA{5CpQXe)Kq1n_QbDC4C(k5ZSvRBIW_Xsn-l`TlUAOkxIi)l~e;h0qTi&zCd zQMg;|@v}B@%(_xBM739uoCcH_7^mci4ttS%8a;mc)Jd;U@Qw&W3vEM{`0mecds&JK zHr&QT*D|s28(&tCNVLODzMF@;N10Wa8DG}ROx=uF&JG*m;@6|2jWtxRDVqL5BY=Lc!zdPLEI?{Vs`0e5L!)53oqVSXrEHbtkkEW+Y>Rph}2xb zO8`9b2Z<1TTJ{j*r5f3XBmBNUViY?a$S>O)9&eD=cyvd*a_=uk+5u=64P;45p)nHHKifcQl+}*|5f8}Dk<17$G1}u^o+XnU?wEuR zU{%TK@@^H=>f#|xU_B7d*MsOSgzs)rCfNnUnw0@Izik?~D9)>^s{siH4@ore8NS=$+fy4QLn3(^xng?wxE4(; z^4!8`XL$}Y_BgE}0t5$c7xg3EHMhz#7_^2pPA+?kL)+tp}z%`jYzUCFOY7JOBI-HwK{Gi7R1e<;z5-#4YV zc7BZrP&CrdiE9FY+}|n7hzj9u$@@UqRm)b@KP)u8>&Pm%Rw5ieI8)lIHKNW zbg}I&BEM+4m=%o__h8|;hP!6+h_b+UJJz*rrBbbD;sW~Ht(yr z6sf+iHJdtw058k2Nx2<7?Tf#&WJqQazI)LYDK?OR($m3&UP3_( z@fR=&qY<&eDI=rYJ;PO-bFHpA2yYaXVtKaMx!P{Y+s|2B9abFlw#GS;?mGhbgC)^Z z1l0}9+?f)UXD0{pyG+bWK@^U-&Z<^7exJR-nSakU`Nbv(k>m#}B@XA|_6xUgm3fqZ zK^}Obkr_4Blsi|u##%C8Dy(CsA5b9IM&@K<55ku*(l=&F{?Td!~)*+wm_y>=G!W$vOS4i*7w6j2qv1?Wb-tv;90QqVdP^AjDL`h}tNkHi(S|1*5pwVnsdBXDk({`V{-qhM5;e=d_1u;=DoC}~idZ^{ z5>Bw6U>Q_=dSbbLRzB#0X=n5vTPG+HI7ooCi|QoeU#I3^^fU>wvwo_JzEd5q{IYg! z_KJ&CfNR7-tyJrflgHn6X-@MMZFe80+e!dU2NI3p(HT(%ZNPr*d~S30!_Bl2@zp=h z3m?RJu{2^{0+_~P*C%jQ7=7z!AcNNVK-xH3c6pcr{Z4wH$ZOVD;+)e>jJ4DJ1vP#| zp~SUXLFnYWz(FvnTwUH|=du<^g{zdyyFF5ylE$Anf}hHUjNG;eZSn;>5EVVr)OS3} z2VDtBV^{Zs3P6umUia?3K;|XCo_O-jT0)uo#dv=>KfRVoErouv6~*c8QrA!oDe0OO zcg{-nha(h31k;zMnKBs@K-Kfn;iV(U54ng@tr%W4DX^7bJkM(8Iv#Qc{|4V~ZFVrX z2L5T3hzS6aESo~Og?E|?8fuAouzn`aS$Q3ak zTMq|r@i{#;h@1@*;6(D=E#F@lA}gV$8SkNI-!@2{$TqAlc&wxcNAa=-D})@V5`V%PoS)}`Lx2&s%#E}S~y3I=`@E?bVc=it*n|5%qGhh9?$NU+knLLSg6H#b zryqw?QwM(7LV8nuRn^>0wtz!e^AFW5pZf1qGXi3xUK3Q(tDP!y-&aPt^1L5ohe8zg zCb}7_U{>H&>pJQye7C>VuqeM;?U@2h;y)dI*BEVmkUQ*{MdJ+4+7oFno2xf7Lm?_h zU$p{`8^sc$aMAn`5yl5a?GA&=txctquRLEe`?lL6o=iH94&QP9ibiDNwzG6f zBm)k+aSL+a43ZCd3hvHuws4toC54INfwKJA^MPtI6NN_Ub^6Ud?63sNUh;BJmf5Mu zBhzfdhUlUs0e_+35RXP8qW;=%J{es5g~I+@nYbGJi+8&f3YQK5jinRNvZn{>cuM-F z{Xu6mA(vBU?(32Y6rar(&ErnaWxf@hCO`a|wSqr2j$|e7we(*K5=(oKrf7~mgXC6X zSrk0o%VKwHbit-dBAg}Hq5Ur`fW2#`wnnNdlWx^EJ3ezwHi(G(mbvTCt`G}q13`>J zw$}`U8OeEETX}W;08Ki0tq}CEs(FKwQM?LG9a1(ea z^>Pp%l}MTkdYvR-O$ATO<^A+D&0%%=FtiiJFVO28Pvm0-hr`xKhb~-kFe@mX9MdL(yFJAdc6q?V4)De~yxMu=ZP4v_>Cus}|BytH2Uocb=JH$; z5JrS4=PPsq4E7H8$NgBuI-xsm(34ui>-&A&6zDWpk4W_d?@=HuxkUiOsUN8%}D zUbW~H4pT;Y`MyD0FCE`w((YD=I(HK{3FBy))qEPX%>F2y z|IEMZ*PcC*@u|`hum0svyo7MR5H&Zf7=2=-n~L3J^gL0f&BBp*O2)1lBNR=eRNwfp zXDCAQF{Mh@TS)Cramd}F#+4n1s9*RrcF!2|?4BNPWvvA3$OqZIcy1OMCa_C@z0l}8 z8w8426+2m~@OF$?T=xgK#7&JhN2;W3U3yc=r!ra9R!;vygA+9f-rn`lYc_ZmD_wdrX&vj3p=7t3FtZm`OXLq*52t`;huLaq1of>h$@`8GuQd(R7u;|G z)!?gVX5B4!%lm6QoOmdIO%B;Xqf6#ES`{P}pKhZqylug%1sKpcoXUT%wFiQINx8(T zALKKgn=V-3wdw~qNVQNHri>EJ-J8^|)@(;h+)!TTVikQ-95SW33oWVzrJ?UIq z4RQrBFQ&NzozdWMsT8*~w*gh#JOC>TKrfTNDJp6S3-$4?rICoX$QA$EEuQ7;`Dke+RLJfX2G0E|cg zRi~w;OiVY+wNDwmUyl@Yj{H<94yHSJvu5prjGD&At4>~rB4qg3ay^o^wr#Tjq{P*tu+(BGb5tn*7^AQgb)VGm|e4! z;<4Tks5gOZO{leSdtL~3NyfQ#GW?qLSgy_dpejV&T+kvkfQXk&S_o1*^?o&q=EPol zkTG*?Pj^m_GvrvzTKYpW@jSz>wd)dWDelEQik>L5DWbF-QQ{^%;B`p?r;M_~KtNso zGmPqh0<}QMmFX+#MOkV^Ks6e}lb@`5P@U^rI=IHeG;Tdur4V`+c;9<)as` zK|HXjm>J7>3hKs_7&Q{8#s_EOqK{h*;P}wry#$xFLG}vN|GA zoIEz`9z9xA=hX#l;xn@A?NLz5$xMf#r$~=UNA8*C*ym#%J&C@GDt9jZ5)AWb3R`Wx z$9w{k1hDjIjz$_;Lo!7p(ZLX;Ll3cq;cd;yHe^|hAK0Dsv#oZh@|OMCI4)q@amS7Gez)yJDVVbk7YQ(T z+#XdqbL#Ji+;Ds2wz_gtnfrl^={BWG>wlwq8Z8>F-y#B9!*@PCm6Jw7`-}kGWH1Ss ze1+hN>f7Ha*WX6o{3~#qKQi721h!)i8n^F%W#$LeeV|s30SU!E{&AoZMSwx+?zsr- zSh_*5^(ZRz86qKXfdqk0YFqL%Rqwy<`LApjOWNP-9Uo}U`{#kar2octW~0(ZlnNR1 zM)csLvdMq<7asjLO>Kx9ZgSQTL;Mqr@IRyYE};G<>HD|T4}T&lVB-}6Otf(*Z00xG zDixx~a995w@rV73;q`K8+N$&dB*%dm6ZDjNfHS5kuh1CfBn;Tqi+1Y(GE|u z0SNINmO=D@SDMTHi>Us$O@BgWwlw+8&q^c<*FW>~ABcM~zp;R&pQp_upr!whm-5e* zB*fvriS{l@#rr38&Od;J|83K+|Nkv<0Ct@ZhJ3UjUjdb%i|pH*i-YkpJ)xV?OS*pm zV^UxNv8u~Hk-)Qs!b>ctqHcK}*2ELwN(qmBx1hzh0V}K?mIm89o9RD3& zebR5}TzOW3g+D`Yj}@Vk^J_-jWvS0WCpB(NY3b=hXkj{PXx!Y0T~>+bAPvsqcSL$v z(y?>X-UXNwd1l0u+7Mv;yV5=He{a_bLNv@j&(X3NIYR|L)2}S=zdMnKzffPTyHKx2 z1Li}3QtQwnP}mtZkNV?HDg<9^WxnIrZY!Nef+3*3|5--084wbPcyCB$`M(>MI)F%a zHHv-L)MeXOC)_#!Hfj31Fr}rc4I$QNp!pK^Yee1gY*4W!tP?6 z#OF{RR054p%)RK+to3rrgPY~ZdZ>h$>Oav@XHca&+O@tbvr{v&mAp>MH?EN~uJtbq z$UzIl4Z0DsfTcR8rpB#eq@rbcv~GYiZalJ_Gb7+4qi|~fM@Xpubmj>P!aBbpz=2j)G1pp{s-N}sbi6l;f~#A)Bnu8zf$>|LL9I&=0EZH-*=3?Ye{*feW6fc3KYQTHxU&1})0I*0 zz(mtI+JtVF;c5ti2bxHJOe^M+836NF)c-+vr{q_gkJ`Ta+!Sp_wR-hD-x6}&*DT+J z3aI9yz}4aB2A_QB)fo}sJwK37PlSg`$O7mHsZ*3D@cZok_DDvfR@T!q3xkXO>cD={ zs&ylc4*OtxHK`;bHL;M9@~9w0Py7)gyB+bU8t%^fzdZ{FXbq<`R!)FQcsVoP2&!H= z?77YWf3Ri=&$4+%{!}64*hKy?Po?I{8~S(a|AsWc&-=9U&E(-!v&+szVc*nt$8Ec5 z)_CEg&*YDh@iY(znByp>*WW&bF36t{tWypKBS0?n00>r-(QK#5X z6eI`z?NCrQaSkO8s>`ToOzOCOgjyQ#eLC;=H)Du@b3|xFG#J_CbJIOkx&Q>Bco}rA zxPM2NtRdnU54=Kd6Q1Wm#*;)ak8|XSSHRz`0A2Avrc$Nfyw8Uu^TFTnzEGw5<=@iv z9-;p6!F&Vg=|K|INrCzGql28*Mw2-#r^X_kt?|a^Nk8#eg^XKsI z9)mG*-*aBqT(hiot$Z@Jr-`5(X#UMY!4es*E>8H}<7_YL?hww!+y{#7XI{puBmNl9R`~U{@}Li^QG}7h(4B zaGG+3IvRTBkp;G;ii7jO{=3%9T2a@J+eQ}p(izt#F(8=j8F~HqX^o4F6!&ZU*M1`J%Rsfw%d8ly6>#J=qN&mTN#dD^o%p)>hNyyjUZC3qg<~hbFcL=XNC&xpPuM;! z94FALzM;Bh+j2Z&cTD3zw{u!-cV&HKw}4Tn%?n_AEU$M=742@%s?RtisH`LPLxYRx zFZg-N=0>a}8Sdm^`fu)Z`EZhWl8CjmfBV<*rwmdQc1r(;eD2YUW9%BanbQ`Qjc)j| zJNXOHAv|yNar`x6Q&ZDU%X{!ImO2(JgzXaf%lj#kg0=z3?dH`R7bGtb$ivV7;1gwi z_T0sL0`D1N=JHjo|HJ`F`>3zq)@ey3Pj{_Ca>3~psO*05YpgrlQ{FDi8QIqC{<5di*Ce-{41riF8!70$iAsh19~ z1!zr?@QSSVDhd>-p`ABV{hwpiPgjL(B(*qc#9IKHR0Fr)$gDT~bXrw!GEO^R@H0^3 z8Kv5#w9;JB?!8O8Zn5XYbPzxa;WIdTCss*>4ES_kttQ#8;d!j@&d@rD(c%+XtrcY= zV)!Wrww9##=G{lI`i7yDNU9X4=hft?j^X7c-U4lf8`UzHo@AlIrT(N*)!)m@S1pKn z`d9Z}Z?NFKh8FA)t#gn2>j)b{|6CFb9tkwxPkBVr)0A=h<{!Yqnr$IwbVTHK$$g}w zKEm>5uIowVH&PJ`_8?8C3y$e$nIatIjm$lZLlY+S)q?kp;KjmEx_e ze?DaU!raR0HV|niP!;bZ)Pf2t^zrBhOg@)L^qx|m>tt$hTE*guLr+w^_O?^it&0_hfZ3Yk3x^-BgV(8(?G6|v0lWXHD%B-LkEB@CjIM9V};`27q zq+(NPaI3!|F>*Nw{&+HzDO5kD>O(c~NJKFEfi#>@K{Y%Y6$5SVDIllaf7ZGt_}`?b zaX02Db=*ggTqW%kZC#$LF7Wd%`oDKN*pL7zu%#I#ZKt8kgxPiLDJ%&(v(0>`;LJx0FE=p5Xz{YDp79t;b1eaX!i4$Q<7`2(b z6X65=%DcJd;pUnl)Y|ZvkFX^UrFLRjqVSaGT&&O=Kl+i{UY3Hi5hujQG?LO9aDqeU ztpy;NNwB1!oB4!_>=U%znA-Gg{G-$6fye(*nna#D(^XJ&PoGP9bJ?-aR0LSe0$g0Q`%d^liKp|3-2;gAJ;bOzCjc-F!IQQDC0- z7>_d^8a1`x=gzv_5CvZcnz!lPUJ`N~LPwO}$p<5(SErZyJiwt*q)8xI;x$4GuPX^VqnMPAU$0HOSU z%VQR9o$e8TJ1WUjGa<>-vZC&aR<}z-2iW$sgZJ`yxFDlhDUw3jQ;%xwHA}MAJj%+; z636eZCb>AL%mArBf`SINxmIt`E7Lw!Ta1cQr57apS-gU6d+5yku^;l7*rmt-#x>Yx zwtU378FCdH~Ws|Bt1cBq>tl*v-36GNDYng^FXuB zc?tQZvZNAcm-6O$nB%PWPJ*t)RjZ=@X|)Cz>769B@IfhE_GfB^iFe>2@>~_7A>Y#0 z)O5YsaQ2ZU_dKuyIbZ2qEjiX4*n)M)Oq#cV^9N5KH&~>}mL}P&AB!dd(y5x>Q2(MZ zQt=p@fA-xf=g}HMqGvS?q7<~h^@fxFu!QbXVr-@&YC7BOzBA75kIBgaZzHYHY>QoC z)hRGl-N)4CAMP?Jc)j3;qq^}`<|&-}016)WDBtt;O}a?5jX^1=$JlCgHj+Oy@w}4l zQnS>UH&aO^TUEpn|G>?GZm$B+H`F2g;~8xC+j#8h+bQ|mTN`h)VZJN!eyiU(HFI3F zEC*2l=rR*=L>4CR^L2MMJkr%VT)j1#WE6rHmEDocNZ2}hF~RN!UJWe}HS>rg7K|&h zfwoTlBRCv8xh8U}$%2OHOXcv`$ER$nRA{mXuZF~&(%tu-?E6wNoLpuZ z-AW$E6}J+FS3~uJ&A!b0NTs$^{Fkt*$&GG7`Rtl2 z&p8aFK9wP&Owx1TXw;w5>)&`cT2TmSt@oe-M5a)tPO;^9&6n3RJDjS|^>4>&%Gdi^ z)GZtM$`ko5rS(cw)y!gY33kGA4-H{uz*|n|m&vb*{g;qF;Ic>FVNOji*A#T}0;bXw zPKUs)DBx^Iy~xhQ^&^No#hxdu%I|(qNOdrR(2*oY->=p_ zf~W#c>OYv5y22msG?d5#4lBRw3^0sA`x&|AkO!km^G8ZHa063z>qhsw%v{nXWj1N# zA{;~w`89;CI|?LmwFCI8z3_RQc&Kkv%KAffuidiY=1pbY1Y3yAy|bfF9C+qbz|wY2 zUdgZ>nzs@vFHdYk+@k05u)phVuLv?Ml{>~4iFRzu4XoMJ$&NE^5;pM7thx+%` ztZSQI6U}>VxoZo7qnIy|IGq_m(c z&;|w^k*G!Kg#L!|st}$lT}wYf^)-E|)dA`hOTk&RWb*Ld)_~rQ^AAhyujG{*T(b`k z?%$>~({(R^sH_o^>VCi`!oo+8+JciQa5`#x&pRGv zIULTWdey~yA}2q1I3uK{x3ZHRdC+FyGIxyxepW?NP*=6(qYM1x54XwR{d(hkR>pG~|2Ebht*6$aSP z(1z8MY@mCml&h<9(kA-z@ZuPlN-NICaDOs%Cusg4Z9k&8-+kV%Q7HQSkUlndT8f&p zQz(l`N$&RiolULda1V{a17AO=t$#r67zy_V)$>`s-pts%qw$ZXtUy20GY$<%lvV}f zF4I!IHQvjsHJSC#e}QCHfr}Yj$^&C0d-{!OW!b5{Y?rvotDwBgtr0EB=Z~`IU5{qJ zu4CvnCi`ZOB57%mZ}JJ|fMc&82zfqeLxy{$T4PyoEpWM~)fu$|?Z&^z7lBoYb)1TD zn>4A(G{sUS311f{%%dNi&W8Az$&_NB{#x$<+7qtkTn(;~PmFwom>Bbi_Ss7x?^cT4 z9`QCh!IuBgW+&}qpU#lK53ik(A|0#x{cpAp96zNmk$8QAP0zMg6SXliQ{E>vESudF z%OJkE?AJ7BL8%m-Ska{zqTs5#Xv)4@Cu3k>YSSVW$U4^cjR8E>3Ya|__Kcb>l;-;;qA_}u^Hwe3HIEM z^>Dq9KTFGggyfa@xqKDBojM!Cp=C3f<=?q{NwlNu%uP=*-Qro3H$%E1uL0-kwi6?g z6o&Vh4_JxLvrY%;R)_qnWAs`b&vxxc7-ZUhdjID33mPPa_y9EPY!!% zDov{V*3?kq)l3`jj}G;WaY@5o(7eA-&l7b^1CkHCX@+_997%CX@b&!-H+fvu3tD0( z+gtfcLdEqiN>>#;eGxu?)jYt{Ybe6BR*4+$EEBR}^b9~8J$hcH1Gh`7r1v$Qt#bNS z$t<;geFwx$y(_S?4MLWqI(53&nav_ zCi$wke!D+kv*-e!u@OJZ$Fp&k!ZyG!!r6Ce-JLt!*>2A>Q@U>|+a~TPj^(I7Q^t|z z=KiZi!+xIf;UDGEJ(<%zGH*iy-rqHXBLl`QATrLu)w@UiN~2{B6G-1ivtVh!Gb~Z& z3plM^-+5Y$sy0HB@Y@)>=9I^OT1E}dZP_H^iqkQJf?TRzG_+|{OQ)ta#^6k=7Txz9 zmgJ}szP?*68V7#lAVkIR<$=EGu9*WoX1_Z9Y=pAdRbgkH?WAX1pByJ{?Rn|>H3@q> z{VZHg<8$-S(lhN4xBDbD-Gwa-f>Cpt&po+(&(}xfn$huiK+=;wo*#*?i3T?^YDQuo zv}MOWs4rRuF3FYi3i~=v49M?536u z*x0;Qe_g)~_iip~D~ zFk;85VdG51ZU4s`?;Pxm*`3!vOvTb-JF{?oaT^kH1Au-Gq?PK2b`kM9&ep zsDOO4fiE~3d>^#9CQA)M;8V>=Wnau*meYm+x4j9fP}DebNQ`xvIoOXcF`mi zK_=ogadbu3POqu6FV5oTlw@o4R&>4ZkP`?d{)C8LW?G;@z|BiXW{x+S}Nv|4kcI^ElN{d3~W=j)nGh66kSKRJ$Tw%Ps!J_H?v zG=1-Kw>4cjRy=Mt_CndmJH6O*Hkc}?DaAW{YsD4YRoFRa)R@D~A&z^{v^viy z00}?0J>?U&O(I9HOgtjZv^d4?OQErisL}Ovgk#2D8G<;J%O+f*#t$dXrGQLiO%7Fw zwQnD*Z@Pz=yjLMo9a{kN-xiHIzTH7bR$oFgrjS1J_kG^%c%o0A6v8g+LxPgdafjrR z%xf0E2n{2~nM*>ko1r7a8!u2Em*DC(we}s|w?MePFrBl;U*ljbc85?$j0RP3ueh6sL&X`vTy43m3=B*_DR=08 z=tjvLWK!Cq-93wsc6>ynO+DWq@II#>Yx73=KmK_o=c=i>si%<$jyX&D4#J9>p`V#} zdvn5dDd}B(-;{MKbiq!cIDc8nKmPj|Qnx3d6cHBgR{>mDynPYPsrTc81hVvq#ox8} zI6)2x-Y7Y4F?H7@uu_7Un=HOMreM-RY19gdyLG6(|wZ(iV7ObA#QDI8;Y50NoT`*%jmeTSdtRkkJ>^$+R`X*@HXFX{Kw_DXR(wAE(vQG z)E8>UPSdoE_bPhh0QCuqXZ&I})6NR>kP#E74ecxh``%yf9^h7LHeG;C0(JEqIbdS5 zvFR0abQRM|Z(Q5PQkQeAM=RJlZ7io9=Wr^tMh=!=xY%BCNPnSIFh@V)3tbaZ;M7F{ zAC|$@;=%tM(7Nd!zr*_FdB(Nr`W+DHd6#Vc&;it`&%pC*%|zBx?gKgi&+>jbWD^W} z*7L&kyV{HsRo7Djm6cksrxk3}5u9>Y5RM|MSPxDzdVEcq`*Ypc>XF#LkZf^m=o+ znDa*lGd-+>v)$kyR1R+y1RTC#95q`^a}SiIYBCjTfF*b%waV(WrXoWA0VMe=4II-h?#YzrPZBoK^C{6+yKtVm7@iRpI=;4Hvad-9cg1Hhd}u zXe-$m)j9dyaL-=_HXn9b110=^O(upTcIp=YW+LB3q=FxViTrA$jW(2p8QrOcK4AU3Qn4;b1Q9BRqa5r}ky?If4sqX7s_v zv#NPsk4rt4(q_6S@f6z3uu)E|R4JB^JtsCLMNY;i-yQgk+(NmZ<$uVKjeY31hY*<27({HFzN5!5DwU z?itb0sWVj%*>??wfJ14%j`(wNGmv$oOx1uG9_5#}^BDQgg7l70h4Wv|Y11_2Xc8iDdyk z9?Po5%zt-lqXr*9`qnSw=$MMT+P&{tKe^nJ-8RL1k#9VUvZ>lYJoayEoX~|afdLVt z!o~e~FK`;;`ewbf!3fD;*1j)Bh6W#kd}RkR`K5;PfGibAr>!0F4!I{m@(cj8&?gdS8@~^6MY0f+9QGUuV0ZX_ zYM1Zh3ub~fkNYQtX*TfeHB~N4kVjuCWVCb&G^!^1t&OsdZIHN7V}C2}AW|v7iX%RW zaW!qVUARTl2fMME?-IxPNi7k_x0UHG>v!7ETU)#`;xo7Md*HpE+%Nh75>-)IFScV- zk;+@;f}6JqHb*E)l~PiUn(>r=F{P#V_s-t@F6D{n&218jU5EyrXrv#03oMSb+z?*! zHMx~jyDY(#$6mRISN`D!dN(~>{@!3`^tR_R&^A9x=_j2XB-O?iYNJF8BS5j{_h%Ael?%^@ zmVg5r5MVF|T##BLW71;p(BvOy{lfkJN`jmxcjUL>7I`xV*OJ4t z=}#PZbGiWY9`DuQuAd>7LpdbI*NHtT(|KG+ElboJXNEAVjyk;%_`OOg?&0p!C>I@M zV522eevKYM3mZdnoa~R;qkVLc_ z8vO)lJK?#@{n~yu+z>X}tqx$CJuQ;!=yPviklp(Eq=_I3Y?>{WZ>Wxs z<(mJ2)AYfF*^qv9kZHq#Y^f3((VU1@56Q{sSg~oC@flv3(ZuIIVT_RWry0GJ4kMRk zQnX(pH9xig>~~=QTD!~kWiHyiI_vT4hm3y+^@L;#RW9E5st*sY?GJRHH*y(n)0t^= zJ>3B~j2t?6QTzQ;klnszX!stL$#5s3^CRk&RWB%t+|X3BuVNG4q|Jt%m!F*7AI~}r zdOg+C(tNm`gzjsvA=E0MO!@UQ!ad`us0JIL(OzgHiTVIaqNYr``+e&WQ=uHFk8kA# zp4fUF_Pna!j2%$xN7MXAYvi;0nI5^f<;g$L{Pl0ymleAVZ4BTO&fxS#>IWn~-Yo(d|j#D%5l8mWqa(xXl)Gb8_~#x)&Fq@2Z`3 zM-!!_t_j(!k6^yKLL9dq!lDX-(af`UVkx(UQ%(*4vIl|uuj9z4tI@%^;D+0Oi- zpeB*B(G}Q04&?mqp7nj@#IaP<_<9m(wa%;KCAYG+S&=i=WzbXK0`oT!n)Yg0G7|%J z_**TjZKSdTVh6~4Z|Va^?4c&d=+E$#)zzEi^d(~AnI1AtHdIp@{i`c%+sB#q4Gr=r zK*{1IA={i&dKIP@k7Vzv{Mgv4-`6F)1rC-^>p+g$xY_=+Xwz~PuDTFqH zC`-L-MjC=qz>AP<-FjTbl4!{j{zqL`ju4R0rn{QB?gY|Y3CbgVyp`yv&UeMI5%B81bz;~D$*FYT_&WBp~4<;7_YqF z%gFl~d#MsGGS7BBCvZD=r}O6)v)~5r68}Fp8f3k_ryu<_BxA$erf5(I;5xiY>A;>O znvM;XFd5L-a?tZR=yNUN$T7>lE)GSN<$+zD=;B`Y)ugN}G51yX9TY6z6TW46du$K- zl}LWxb{XERd+Mc}MD9_`3e8&LLyXN;w*gzL<2GbM`U>IJQM5~nnTKVYQ{#4xndiHR zdLtB>C=7C>idi&{PWZX;E*hm6-0WFlEW7Xa(1|c_I5n`2=Gk}Kw(E&1A)0rFIT&rv zzhGJm`S`g??ytX2#p-C>H#W8cZ}L@kPknL(_JIC$9Gd?(C8TS(=jsfz;#!1L;6fw`8#X_Kj1Erf7scHEIE(ptd)dfv9uxiFAK z9@_FyI(YxC?Xd_Dq;GXPvv`k3TeV&5RD`*Jnf};Lc}>i+zs+^X`qkW>xhBt}=JHC7 zA>M1jt(_k4Kt1C+qqrQ&ncUd45wFoAEY-Ehr#6A~whN{>xEVTC35fO?^VT`Vv{U3Z zdmuHIqOQ=y=nHZ)cF8g(kr$|m+PHylu6gn}4aUB)>r3)E@YNsO8wUkv_JWNVTLp$y zq2_$!Pf#H~wk@cag>&*QPVL_!4hH$m)wQvbTq0a{Q+-n|Z}0`)*zx=vk=!V|W*PS_i{eK-1L_xFdb4;m53P4rR7$ROds{E?fhh~*!#tri>aOL zniyBgM_)g$wWpHxYbaH`E397L*)G2!WuD9_BUzJvC0|7e+yL#4U*mOxJKQFjYNTX`8{+ys;OHBMBY*;CbEFNDW8PA?8|rA zO=!tQ?N%w=LcCC~isQ0ne+CzuE^t#9Wpfsd2DJNp2>WM8`?JpJ9V@5)XoG(@~K%Xr>-LcO3G+)$k^n(hJE zYnbvp+w&N(U*ep&!7V(1fxdT2!@HUTcB&m;4)_x!v-Zpj!nP4d0>-XB*Ewer+~lzV z0V78VL3~IS?7hT1t1bNFWb$|l9^mhH`cE3u^0+B+O7p-WP8Yv&?2DWO;GI^gP0RT}am3NWube#Rhe1jnG>EPI*HyavbEbZxSO z3@XwihwN}+5zGhamEbJT*#P+7wFxz!uo7WCX&>J3RXuRZ=#`^ohu2ea4{H+jq&jZN zeP`Jrgf84y+G;vT%r@=impVYJpvGJ&o;C36!;+xujg{oV|0=GZK1D-MID3|)Tm~-l zS>qLz1j#&Hif*+|`PT|CpN>uug_4_G+FIayUsX7=e(DOlea)R$mU}Re$0Nn&bAEh{ zP2LsWqA&artQ%<2pjp|(ua*IJpag^5YZ_=F?Rq1Ygajs!b}J&(v%}TSM1cKNK%&BX z7MT1pAk-!X&FyyPGp;Gw8CfiX_|tGs8m^LW<(H{dCqDSMB!%S<+NWL*Pe%Ms*WM7Z zjlQ+%(=PA}-A1%3RmtF7jR<-tE^jl*G(F!GpNqe3Bd@9QF*(R~I9cw%-7iRVjl^61 zfTa;LeD8Z6k0@#Q((1%e`)Bg?SEy?l!*wV8OA|t?oRk}kOAZd0j#Q@fXe&xPB+eV@ zoP((sai!}%T@}ke%1qB5<8|)wd0&(ur8u+mHW02ftV_-{{cA2XNu0oa={&FdEgy@U zM$&eSE?S$7^TdN@TO}EKQ&KIFKO>Do7bcSwTm}9n#1w&=7!AtRiw**s^-Mvg-y z&eu>tmY9RFD%It4KDF)6i?_VwHL^RWrY?A;MTCIut~&zXZ2@0br_57-LCHP}db5Lb zP&0zER;j9jKXc4uX?`~jxS8~NU8#rJO(Us6) zl}c$BkE76*@X9a`v4eaiyLXq6^qRjIe{}kEq7~x5A=KvFVLU*8A7SomWqKvcPY@6Y;un?blcPC=Mf7 z$eH6werEHpB(n30%M1m+f9Y>(%$AcNl85j^LqRUCfeP7RXul_aLM@a?Am`%3Tn%^f z2tmSJYeJ4&M>fH(jpOjlAk@_qZ%)!tKJ8`;xLtQ9FHG#t_UomDbSd!aDbh3dcRc>c zJMUI)`B5S35+r;~2x$mhnNI7DW&a=!TXr-A^?HEFtED0(#pIuGqPAaGYS8S5LDBTh z!TePA4N*}5WD4N5ddj^f7>-khM%`Ynhvw-Zp?isTdi_iyA|0jKQdE^9xh>$%ZO^#- zlM|K_UP{=gvH`#0$e&20w1SZK!L9;ZsxlxPn2x$ueHi$;5+@Z;L zw|qP|-fSp|3;dZ78*1CE#f2Y!A?acxg6(kKf8ib2(;P57Ll%N99q7!08K2kRLTH=6 zL)`;xCdY!uZ`Qz$EMFd35EPB7sT&h(S-x40kZgDeltPkHi+9JS2j%)V8%J!W6|F|F z+j_JbiRF|0U+&LxSW6v%7azbisig;S0XwUwB4D}njOKeCq3BE79{3vShAm_d2X&lP z3N4uPpAX|wR9t}D_z!KD_NllI`-#i`+{;Lro9D>gZ$6veN4?F_*I|c}a!%;^C{)xv(H3K!e-FfC}SP7VI8g*V&=7nNFdwh08 zbB>Z{xy=tNczP&Jlh@UMU^+i3W_CEesTiHaIX)!|*wKWzPLtNg@{1P{K?C421AYal z`5Iz4EmW5fS0zgpbH8QhRy}z3pB)2ViJv5L^$Lx;2Stk}i}15kRo07il6xpz9>1&%76m=WvaDYDB~W#Rfp-RJ=i$9;Q`-y3oB}+Dx}JK=sj(|#*VLj zpXz7zEUyn%9E51k2g7sx9>8I{`P@#^Hk0Um4LtQbz3&RHhjxuz0ad?V+@S^lva!Z8ypqv|Zn$Zdw#WXsy^;M%)1%o8vva}#XrXd+&N{S8o3dmdo z>*bl;YFan#>m4$ZjqkX=D8iqNu`7Ew;rlp~(hSPXc{ZWIhMuailfnYar&tx{1hBwn zDOuq=U?lv2U+pN3La1J`>vZ}GPUmSR3UoM9Yt#j&tlMskm@X&zxtrg$I%3;{2HH@= zDK*%>UMXX*8^d;_Fp9*HgBSA*ntY-nLOdbNA>QQUQaBy#^9kNw{UZgOXBN=~^7cyeApNUnpt(&0J9>iIi+_GPwdq%f2qBG4lKyme-95eX(@c%6 z5FyVuYJ+gZ4>`c5?i|{B>bQC@!L%xzv0)iL04W99jF7iC^wg{YOeHODji8zNd6Q_SkiC84A z@yDBncn-$3^Q(mz-wh*>4UNb)+P8dSwprP#)2Er3hOUf;`BNMRtW9lhfh(d&`t*^M z#tu-|T#00c&ICXJZE@%Tk@9u83UM*VhmzUsrc!AUmP2=++L#AY7<`?u3sTF2PcH)#R>L$*{ly7#l@+{`P ztX*pF!#c1&LNiD#xN}7LlJsC_MnCb}&f~&V2 z%KEK-OMr+V5(Tvj$KuuQu4<&(HLD4+QMW{N*7b8`G->D-_;qY(iIiFfz=(->@X=lx z>=s%WwvBGlsMv4*VDgzJbylXT#8XLSfdiCKIsc*%_QbbPPD5%UWTm!W!l@;W;sD?_*6r*{Aa@hB4%GIUnq!92ABV`Tb6Y`7%0W@aM~zR+F2m32wIO! zss|S_U|ar*-&pYw_k}OAhiw1czPqGvuNeK6O0POzw7&6|=#`0ffYIU+$TVu1l5JPM zr*6CLI9>bl@v}r)wSiw(>2ENzzW(0fXF9K>GWnG%EtL&1z>(n0o-CPistI^@Bf_wr z{)WFFE!m+`_j)R}v;5SRZx*={MGef)w>vN9tu z1JJt`6T89rqUf;YQp3uCwO#XD?n#1(tv-Xh=6DpZBu>K(>;tx>Qd-o03zRBT{{G6#k^c>V^e?VKc(a2 zQzNevuYxzX2q3}-n)K9f_f~wi1@oG=FY$X*5{=OZ1R3cUH}7~J?XK>0$MU84qty;o zB$J{7{@mXhh5Bf>_Q1GYQUg9}db)DvGp%kv!s|UtuoXT9(eVs@#$)K^zpzXxstucD z+0*NI`IED(5tET>#OXjsk=FP>BPIa%^5r-`wpTw1x-*~slG6zOoR$#kjIev0X7pHD zfIMMisX(_XDC~gpnG~L$+y2) zwqkANjC3`+s8A{(A!g!+QStM^YmgT)ChXL3`0M=er(c2^^g|Pn+5Y9~vPYx@04XhO z6JYl=KOuQooLcmpm8LrB2yR}hvZeJGVW^?V53uId2*_UD;oDPVlBQ}j`gB7te0L*_ z^BdXZUF>p^5+_0h824t=)FH5jy0nbs>K*V@yC`3A4-c|0&H?E^7bRm)hG&-fjj4Gq z|6ZPNygR7!ZxGkAH;=wm{A@o8=HmrX(2HGR=<7&z$Lj(@n(^ln0CoPa+|@18_?*GfFNr z-bIOfIZx$o>%I^dHDW58xoFb$ zJMfBld^*RcgkH4rweAo#W2K+EsV6ekhT0o0R2c6??3$2{ir?(iPV0;b3Miz9Vc`79 zsTdFA^Zs0$@<5x1_>L-LtWtH^%yCim{ffjVQitQYBSNsX)|z%L^ccpJ6ZPAplC+HkFSP8&HdFpMJC~Md(?@LmmwLw4fHwsonfw zS$w$8y*vrberQ-W5o(({2)LD=x^7qd!7L~iqAj=uJv(`)GG*pl&G@`^@ir8)!CDRl zf~)aAa@7vOSSP2?EV_`nTU@JTm23ILI~fW#$iD;nuJK)$R3Lx4|KkTto)4uVXH`+{)Uty7m3lmr?6_&o7(kRYC|qpc zf=LseOVp)~(xFb<-zQUn`KxG0+i~e#JEQKOy{9UlJ{-2Q7DpeZCzStX z8`{42Uas=c^ySqM|1}t}D#fbiWn9D#?yl$`2F5XO2h2YlUw??Q$_56=zG^y0_{UL? z(;wL*9az7}CDRx^-qiM*0oviud6Asp`Xj65=Smn2uYw+Jm5iy-w5-_`f*IIKo}Q#c zTy9*{dkK>NZ+^{fGdbKvoEvVK0Axi0CF(uccI_cpRBB1FD=;zdO&JSmFp5$7kA z?S=uK@H1F{=?n$7p_=^p8wh$p@t=`jNabU7P}bc3L`|RTd)kO{;K)I~9NoBsRON$+ zJW*#)>tP3`%z)u$>Xd@#vCmDXRH%@9@uP;}nT2`7+m2)sPfhaxD7{+0DGH|=w3XMY z_&q&vSb@;kw%LwS>z%kt8BzwNUCqv5q$_oD1r0aV8hRvuZea3)QORmb?yq01R2I2r z_n5vw*EJDz0u-ipe$89&3)dJXu(pmZ)g9Zv6p=3@^W=7^wRhu3O5n5CB{)xMAHR%6 z3Vh0YYeUILU7N39w_OkMKh2-5d9VMN1V!LDpwPqmv z!&!_<^>yte7Gw6~3gwGb_-;gv#TUTr&E|VM#JnOLczJ*=RXH}cjbb}Z+5`rB%g*;O zYFaHuP0QDHj|-xG@{@y%ZVRAW36LKR8tdYT@7RxIR*Mewr`_r0DU29@qt%WIK|BHY zXab;g$5SK(9n*H7&924=R~*Aq7N(^}v~I6I{}vr~-@6_1*j83S#w+p~OT@c_CtKLC zy_tgzwxSI({9U-tHX3vmeyc@N9Ub(JA;TSn`SJPMjyf%5HfkM1>miO;mQ99gMED^j z>g#$bcq-2kXGc(J<@}DTClmT$n6hrOvw9X5f~nw^s&wtsp4#WDM)U2coA#8_1LDFM zt$+^9ofH2oFSl0D;4otca!3xt%>tfaR^GJ|GkM=VP*rcuU&kx)z}EUBWfaC_^yS8^ei}o8V*ENg>+ZAKD3Yu@TFC?DXJ7gP8izlIzY5% zF`k|Z{k-X|`P)ujH}^u5nnGN3>w0C4lG4T!-t8k(-P}8d*{-!cU2Eq;K}d`u>Y5Lq z>dgeNxtrLn-D#L)hg-**DBKvyM|=pPZi^h0yEYNxy`P~(d{V3c#Jnz_YC5Ct{~qM1 zP@F@1O2XTG7mWrrym}bg{AiwY}$Sg}3I z;qqRkXsq%z%m?)JC9?9v`J&n%OTtXO(iGQz1&+$Q+OX@1cMfwu8F9I^^ARt&;_^(S(4Bq4B7vH0 zZBZ2=iWEymH%s_C103z(@64kU)#>6!Q6wJ5d?i|r4@C||eG1o}Xh;&Sh`p369W~6P zRGtU-)wtqYshcYk{CM>3OnKV|;py<@cj~UXn+MBA;|*WN{WVYbJl|KnbB(PF_Qw0X z5qftlA2DQ8_hK#!e-MF!o?Tu8Q;c7>hQgh9+>bi5$(WznvC9ju+Me(PRqE&8(US>Q zoq0?6U62PrbkUA+J=s&nx0cCJca1Quj#@Btmj8ZC`wunj=guzcUT{`d0Kr4-$!A1L zBJf+S0D%pA-N;0i7(a~aBM1>`TzG?fgx_CdtWX=BM4#X5{W>srfaK%go$0ETK0mB= z#MakwVl5~tGd)+|O-}Xe!`XpH`C!w{KL>iNnmZY}@Zsr?rS_9MGSz$AOFKwp+8CyR$h@oCogPWyqdt+4pp%)mHn#$ zGl&}m=7oLKH%$2Pw?NPTJV|(sVaWhSaakxu^{f-($j%{X5k_n}+SA@JFsw~eN_JrE3_ zRJE7#nqPtmeiD}+#pRpaV93hACOCq%|2oFckaFR_`k&NDlqBz6NL^xnyQXwfOYG`z z)fdvZjr2ri+T{7M^WtYv7awt4T_p~S{jKWYaTX@{>Q%yDT`;zD$^Ui^@UKW7hMvK| z_6dzWp5uZHJp(?)4F7$^pKpx)zkcH@dlYj_|39-afmiq9&tA~L93J};a{doy6xn!? zN@VAvcz9EH;|aZ}pp!{VT1S)y-J2OA87(u%8Ts4-Lve+0qWeEsOQ4tO^cO$MUr*Iy zJ0CGU%wax{&7sQt@vX!E)wco}2aygk|6IRM3w&BSe)6eO#H+7)5C4S|X8)lGu0N4p zdb2ZWfj81AlEK-^OMg^T{tKlSkmOEjuK$2J-#?fG+%q1&&WH;aaFNkUuJDiJ+bw|^ zf%ZCE@%QRG{~-R|AIT0=s|5yX!x)ks;r1CH{}FZ=kISu{@ww3d#ol{HHJP>jqob%` z0W6?&5CjyY3rO!xKsrcA>4X4MrK=!{bfx#+J0#SAfb?EMsEL4t5&}X<=x`$Q%ro=O zsPmrl;jDAk`hQ@pn?W_ED`=R-Pw^bTbC!L6XxDb*e;eoB@Hfv|mV=PPh zOS&txLeAQL2&{8;$$(IqnIcs(q0BrrC`Ms**HA=Kr2Nhc1qOYy>_Lel+3)BpMI7Jo z_Dvj*z9P=8@&m{}XCt$n-m*ugrp?K2$Q9=;CDsBnKg|cpf&XaBDOm`*NQCpX;8&A96PHA^0?~_gP|9-w{-d>Ap z2gi(BI<Lw1rN4M!mt+3eW9jjlBhSZ{|z~Hld^H<_}udD)iScFSSJO z$^#cq1$^lLwt$OXE%ypeoIAA58;Jb)IFYSWh4*dsU_g&n`$Zfv;ab;%8fy> zVRgTUUcH7dlL=#G9hxGxH*0W-r#yYh!ELaVrhlrMvs=4?znx9R6FBw0%HMOo_@vmD z^p|g+UN%l0lwtG2r zY|lFOyBXO)Y{duQVP5d6Pj&VOl6-O&$vtpDN)vs2-1ZC?zVJq}^rDJp+rwn1)=lT0 zZdPK?U9V=}1<`LGDGye%p5v`c_NjHbdV`__a|(3if(JSp!6Vn?op~nk&lmg!Wl-|b zDU?(+abN-w1A{cT8vEaujQ^Pfq`)J`h_)Q6Pm!V+xo_izp7rxnE7pHnoIiEy)ipfQ z7;8LzMMrzkH3}{~O&1mwE9w7fSpHO^4f8NA^!2jwZ5>wKzX?jlH_@$ZOSob|V;LqP{ zg8!rkg&uzJ_~92yRq+vp2L9G^sF+`=`imPR&E`)hqLw^9kjfaDg9qJ-bt?WP$Qi>` zJj5Go{E{{vqU{0xb+#|#e*mxamo+R>^K{~t1W#Gc61}_HH+t#k6Zk%rAja<)T@ul_ zwt6BJB0R+9#pm&pO23@M=Tkx{6hE(cdafe`KkXMnAJzzeC05)5r<5`u-MUNuO7uEI z{9smqoX#($ga!{6#u`7^Vx<&wwTlBkt{Gvvv43_G|7CJrf~TVE1E?Ci^-ALwLp;5k z^Q9js>z}uD#GDFmt=-Vtm9tE@&CX*+5$-*T_NhR|zo^8Ya`?wpsLLy+Bf>2Ft_-)v zGdrpjJ^`h)fZ@*{+2r{MT16-BR$=3XiNS7-hee}7krR~eVD z_VGm@4H;fD{OL3Q{NmfGnC<{+`u_avr&kp9r*!{6kN(5D{QsOF8l1qnce)AYpg}+S zl0`oKaYt&Il;e(@`q)Lg6`kpeJ_Wk5ro8M298DuEMQnlvSnIA4M_olTD_qjE{`=>P z1;|YyYQAZ_%)P)0szX_un>H?)QaQxGi2!5RZkihZFrmEi9P78?m&?IhqMf zrsx5xWNYhHTg757Sr@36Gvdek4y*4QCvV54`9#I@ zxJMZ@-J9JisENhSG@-G)SO`o3Hkc2;_h@w*o(~2+sF$4uzl%1KWK4byn6P#ecLnts zj;~eBzKkx>XJ&?RMAgmQpPS=*^f7$w5Oe@Wncs zzFrf3>W4DAVr6y)#jp1iM$Tj0)vy&;Dh`5p;^W|tZT&K}!cxSI#cORc`WWMO96FgE z=#U~W!>SdrnS9ya9(nfr5jmB(iw#4PmPLV0;Gxt{c^cP-20_DA8qXf~tj!LyBnf+2 z_Eev}*T@*T6_lm%D*Ng$EEh%fceCQ7nI%*$a~`AC8L)THF^<${*T)lGAmHgK$&onP z;*<8kgij|{+-_Yn!IfBBS?awt&vcti$T<-S#0Tqn3l&f zpnDCw1D&v*Mzyj>DmGK*io^QBWj++dui~gIM?5Qr@6B{te|}FN!mD6!J;D8RG7?#w zayMQyn5=5iy9nc}re@MpH+=(y;(en6nN)dU zeNz$J-EatGHNdMN^=p+?$JrMmve4Kt4(7@l89SJE_xpn}FtX@rXPTZ`X`1OB{urIg z!}r>Qr5iCwN7y54Q`t+L#>~o`Hz&8vKx2MOoRb!~uX<&z^OyAfrrGW#J5IgNzKj&1 zFN;Gi?G!RI@h-m3(R7cg@^LxNm55jC2b=o(YGs#K%OX48ms@|9a1+;MZ$Z!UE*R_e zZq4&$?;YC}G+CD9LqeP0_XKDf*2!A!%}fmK^xP~ks54skdeGEyC|yu5H)+H;vaO!9 z-9xFl%ZwGp&iMrGq(>-~+1EGg3fDs`?iyrBe_LPXF}9=|U1nz>C&pG95VMy}w_96b zt!nOFE2Ep-?`L=ekRI70kGPE{grs@t9Aqy%cUwEo(p^m}56`u8$sw<-eo;VX%&V7c z(>Z2ms09b9_lVa>BGk8CI!OVRqsoPOxVkr*;D;tK6U@xS9f(#|-p6W0wJ>h?ogDdf zyC=-P5jx$3j!&qk$209N3dXe$$n1+a>?7K2m+6a>pdB*Z7v#4`WKd!w`_Z5^Xz;JfHT$QMGRy}5UPHxqkse()u_NEbC ztw}u=ugu-t&=c_6KsB(^=nYl72bcP*YgOLgQ~ z?7iy(@8^4O>Wov6W5mWIV)bv8y*0?;i@&RejrXwU98>=gpO?v>1)1iVzCVRmb6D&ep^PKELW2Zl-`d`DLe;EA4c zBljuC!{aU?KgPjfb`x-Nr6zrJo=#6wq(-cje@dq;fG}hYX9FCtHw<>q?2oYTUEA#( zkXbaEvT)=*F7S47TNTJ2;5kZupx0YHQ`o<+lsORbfF;ZOggLMp7{*95eH|{IFAm}v0**a_@uwY?PEUP&B8rm|8L*?>aPAj=VM=O5y} zd;wiHh$l-##b*Ii5Ym3hiMyLbpC65nQF2fxh1T<1R-pT80@NV`UflEsrrFS(KB78I z^$X%wpcK3@!g6Nmzh7Kwhq~L?j}3oMhXDp`r$k!Q$93y`kgb?pbUVYRC#M zjZtX>Nuy_hpfAEBb60R7Y)~Ez?3Dud;xv(0kCudxcLm`N>{JG!>Iy{~##BQCF?Koj z&Gj{4sum=R+cAiu#o4>=1AohMH48u2{^-QBK+*|RLfV>{xLLGLp-XMQ0LbA}unCuu zpvRS*z9+<9p}KD3hD&Zb6*`Wn{l(%uYzb(@U_g}QO(AhL)osv;n;>eGK)!**0{-%; z@nu49vGPmEAH*R4>)DRrF_A~j#eqyb+Vp!qD?E-DP`VL=Px6bUSxY=>DKiVKl|^3n zwYp^lzM`AIRpN3XK;ENhoWSr+Vd+(_`l#%e+UHl-hXhATTJd-s30_}p&STK1wU@@( zjQ6-zir0?IN7sEft~|w_H@}rKl`7a9Epxd)*>hvee>+7=J^5C-u zMar=)KG@hNtpLJ_XWCE1#z9dGiSt={6l}a@usxeGnwA@cMAtbJpB}p>!vJDjs6}ysg8c)wpY9ed*7%D>do|an* z>xTQTJWBQ$5LkFJ_Ixyy%DByK*4Ee@k*-}0Z$io`$ScMdN%~)f5h(2We8+bGbCdQz zu3kl-ZY1wfE81JpoyV|+g1jm_q}RXFty%V4QP`+)DV+n)%Ih%NxZt)xkS4u8>2kVwhwd%lp-8iI@pl zFJ`zlOqVQ!V+AMA?LFm6Ti4Q?A3k3?Oj=Ej^dBh-nV&5ZQ%gNB98_Fb<%((*u$VP_xpLi!vP|`6uuajo+Tx~ zbh-HI^rN*ne!k68!etYwGyzk8@mjddL}w?-ReqRkoxTr656^JK8$Dmpo@GCd=z{(j zZ^fhiBbYr@eIYn?R%S*GWkpt3$E*>zO91?CbV z?cn|Z_vewC6%u4`BHD~MfFR~+gc*m8;a4}zOL0?bqzP$62x!Hiefu^P(k2C*QxPXw zj9*6Kd&1YlZx#3Nh{h(24T3^x)AwiN(h>&W}OanbJ3;p0N6+-3M^ zKWrK>PXWjxy_0KuV4*tNX6|9Qvu{!hcR2B?<2R%wRf^EnPjig1-cVlCV(EQ2t^sW7 z!QQ=6=Jh`Rn!tA6IU8z9*MzD1afJrs93mtZexQ`4A8$AkUIWK%uLRW5J&E~I>gB&? zj~5@p!3Ss3GrnqZmx(zxR8JA*vKc`lEVw0> z%`@pQb9_2F?UGbA z!Jt4cRAP8tG*F%45<4tlTdjMcn(p|G zJaj)-*0;YNrZ0G=Abr}=HKZlBAkNVjJRRc>skG`qpe+v_t`9jFY+XhY4wD$QW5|DM zp?;6E-ssD-WkjwWUP5|LtyyyzLJZ9Z17N8!_F~E=*i^M`2sFTY@Z}?oJ6=;E89PW- z2D_)()=p_phK|z-J)B*%T;+GHP#tHgcKqKA^P6#{t$u7Ok(ErWetomc>%y8i2C9y; zyeQaAhhYw87;QexzO<)?S2-n*`y>53WicBxA~aZhRzrbZmbT~$p!|Y)Jg#a8VDTGb zib{U8e{-058^ci1=ppjW-aOHAzSdg>1-Gd|ePM8T$W!!H-yySfWvQX&+FG@YKadZn zP;$)M+=HQ6v#XwJ@HZ=ki2xJaSHji4D_5t9{FM#o>V=isD9I%8c+{(`pkJDA*HiPo zGW9Mo&9tSFF0lReo-`8~{ZyTA7|zJ1%DSFvUHsbMid3>qMga@HrYV*vwP@;kR1+i+ z9A^L86VmAtLY|m-+rhKQSpL1*eiQ52k?h4P;`wSUO-riIOK}8iJosk+wlOBUh3*E> zc+fn`!7tZsEOxX_gX?5SxZy}Bs2H~Tq2JFyW-=t&^Fo&aIW0YU-|JkHS4#D#@v1P} zUKSia=hx(*lqIGD$rZs=aF&$saAwB&brvXJcLkE?;FG3*R zyZV<&a#aAdFz=oPGSl%UCCSkD{d5Pph$no_Q%$$Kd7>fiVk%=&(`qHOcdY)=CjVDq z`mbuy@EG`id%5|EV0DSGMBe`bAasRsim%38rfqsq!(%7cgAnXRVFGEVZSX;{hOig0{-T0*oR9mSvNIsYCDk z#bdFT)cQvV4|?|FZTv{|iq5Ve4SR{_jdz~oh$1L5E*#{NjOIaOQmi0pg?=TAxJVQ; zDy5TI<0#c3YZ|-u{3u~#U4g~baa=xi=&b(HL)P#Ls|4r7g&FO(<_5J2Sxe$9?+BM% z>$<6}6{Nx~=qlxt(NcUuUV{U09%Isr!{ciO9?nxx!9gW0(JKbfeY+ZVeiaB}nbO-} zZU5oxoeAA~Y?LgG;QnsfMg{+9e~n%DKdLMLl03*hHBCGA^ambqLdVB-7Yad41UWKi9jkzIv3(Fkz2&eG_+tLjRMpIxj zuZ=4bC zEUe>(K~*BUq<|!Y1MUcYXoq@c>g^h}9y1f~bF%fk3ziDo7+uaMrM4E z<}_Mst;}fOBAqXhgfAU!qEk^3Xju*$UILIn31CaIMk6Cv|4f12r@S3;aI8zyEf%c% zXQzv6e$^G{9*~$qcJ^gwFw6?Gg!bwU~@7y4DD!^!tYv(T%fGZNkz;e zF9Cgfu$69TuMX2HVV0HfHEW(yaDaa^+A|8iU{(?_H6e=hZpah>-Zg*t=)e zD`&;$KJ$HrMC3r4R*%YNWv@!y39f00wx#1)yjy0V=8m)!d2U@0 z4!lZhHy*S(9#A@O$CPXr`CEyCgHnM1Z-AH^zOXc@S(=TEjVI}y`Bh%Uh4sraQ#Cd+ z@zb|6JRehG&)=BFScPQ=h%J&$?HgV$^Y3*SRz zHY5wwre{a(qL+c9`$A@8z>Acsx(6fEuf|Q1+&g5Ra>SE*siMYO7hd?bC82x>mOo`) z&&t)us>5*oL()s>bn=G1Yt;&I-~2;m?4MSxeUN)2|7kdAR;=5+H;4*ScAlIV9pqa) zb`=xeV-Qn`;N#Q+)T|8Hy7;wDv)P#{g3fFJULsU)%RuO!$oHm4&0_U=3eJOB&Bu#hn0H~Z|qPa&+t-NO^Gj! z(YJ$4@X)TD;F>B8>%9+T!&4afa#dqi_;e=kp@c{HwY~^4FHVb7brs z_tT607{Oxvu8j|T9oD}H4p9BV3Ve@Qh02^J_MT4^Pv%6CEzhI}6*afel){%l`SSIG zoN@Zwu{&p;{h$QoF9EMlvZq<+G#g;*5pAaA2Bu&0C?$Oc)IvKzm|b6C63a!RSSrTo z^RA(9^#0hb#qI7JBc@KH&qJ1iujrgj@XoW=f|? zaSt#N7LBDH?5=9|)qp>I@xV4!XzugqV4QN0@UJRu`fZ zc$dmf4B$H7ND`jgH?NUMunxX4t%;L3@^x;LxUjb2^Y=dTAH;hUPu(~V{`Xm1^IAaX zFKav9gjQ-E{aQyWH7C-36UWZ>`#jb?F);r}@YHJUb=8T=InDwERTMKm`QbFquv+60 zQrrYF`RdE8sZ(!umHoYiArihsWr^LHvS^uSyH{s%HAbvbkIJzuRv>|0Cx)39HPKg; zq-Po4!V~4g=8{<*aC^-fykunpB5>QcZb&nKF4lEu*Z$$>l>M3~S$YohEOZzED>V+< zYh%}X1?f-|6g3n5_HqxCUUAf~0>d{LGs-(fQLK{juY%<+=tOma>zBPM^9LxtChEsg znwXMtR5|&+P$KT^mBH z{DV`Q{xir(|Fd-;lyCGcsZQ@@4dc(k>Njf|o|sJYCXd+Ou4T)4UHc5*X?C55kzli( zkWoH@eJI@Z!a|D=_r3TCo6FY5$X9d?hcEbBiJ6CaLq5Fr)M+Nbm11oc74k>|!#=#= zrgz_X>+nI%GQ6FqyNZ`pRz#gxbo!`of2Oa>Jre5|-j4m$6uS9$pc$LWDtA(A$Vl~aRJ0Ad2Dgq`qV0Pt2y2fmv5(-SFu3*Z z!aP4UI(0R*#Yb%-zhTlyz^ppa(!$s(LW2*{_%!{q&7>7VaOhbC>g3a+fOLkBk$My*-r6-7G1XzTqOF!I;S@F7GsMC) zmmLwceq0?BoLZu(q%|o(KKFgn4nOh$i( zLH9&DtF*+BW7;xWu13eoHDP-4`h!ag)8U*oir9Tbf`X;P2E~y%?@hEBk>%re?%aVm zc!C-%;C6LDWBrA&fwHrYejbNqSUN2M;&X^jIoXRGH#`ou8AONb(Y2rV1{c5=!@uB> zp-{Ko4qXyfpTmK~2M#z+Q~Jy8=C5i15Ss`$_F67J17U3nI)6)JqOk;D&x$k|&g8 z>@L-$$qrr>%#0s;;_GMs&Y=Hr&g|^(F}<-FQ{VMG_q!*ODc8J?6y;H2i_*r0oiBpv zase%F8lFQ$(^;J&MV{%sM7qM>aMsqXJvsUEe!5k7UFK5@L#x37_pHJ(k#tfrJ<5_4 z@fe-Cr{3l|_KJSMlVZuH!VD<>mpYU9QC zBIV=_-a_StGj5t{TN6&(I$?G%Jh1oOm)M^LCKma6rFXuq;3^f6Mq-wX%ZhtLU8z+8 zK3>b6C==~T3s-t4^86-uN8lDMIm0->1p5tPM_QLQA&ob57dmB$Q^Z$Kr8Cq$(${-% ze}<-&r@M%^bKWbmmSXeoSc89Z{#Ed)3$igi646-Sp6~tTl`Qwk=#mN6Sist9J21@5 zQ=_=^h3HtR4H1>)<{&dFKwhWfcx_iYi&Ol8ub$!1-4U5XIURYY6!Q2u%9bFuPWQ_t zbKj~sMty=n-bpcT@~XCte)yKAmPfFr;s|0@L{$|u-{9+1L`S0Rksa0Sf#x-85{bbc z8mxIHmGgg13c4=A8vUuuUE=!;_?qwM|DvQN>-S2K*?ALEN>aOw!w7%qBE%?M73~0i z?MiNtBsRT}(jKtMEj~e6r_+O%#3>gSHDr%V@}~>Epzv4MMM@gI;}k+-6hJ>dg%ff z`TnFMHQA;CcF|h5(SvJYaPn3azKbIycTh)t z|NHUb{YyH`K&-cGji}~{@`~GI?4En3kLwDEmvt$?GYYOJY*|BfA^pqiI^LrvX|tP& zKG}N0H5)e*bQxR*Q`SL&8`Z_VYqRXM{>!m^aPmm~0Cr8>`f~I-6W<-Dmiq`V&w;Ky zyh(}ws-JKplQusn8SQ7~>wwf3>GJw60ADU1AVV;`&ibC>9kdnqJNmw|;m{wmg=h~J-bDM@mAHt&*IRraHQ{qd(={K={K0&Izr z1hJnl@qetOe=Vf`R&#;m_^DANPiSZ{~Tu zw>g?PdE@6s@jnA$AUr+y*`-`x^WV#J%??lZ%@JwieW^cRwg1>}3*G&`B~J_J|G;+p zkI#N8CjSpa+7n^rxocL|xEV(`>HjT~MlAED2u?P^6DPEV`^a)o+IHn%XaC!oyzhi< ztdh%jEIZm6TwLO6jD0Yh=yX_shbrv7*(1cNul2n@>ffI9?KIA#W=Aa|;BT6G+%}iJ zGH{W#w>2kZ(Wupv^)liQzW@A5_#?#eBPmjP*I2#x)b^n5nh?f#NlB_DffqAI>72RU zTO{JoI@nZh7;XSiIibE+ha_nIgu6-fk5=`6a7ME7_w}zxk!NukF!<Nee zJ$~hcKKer9`Ea+Ih8HG`RH;Mmt95U;0AJ<&+%^4=D!sb+d%5lN0Ez89+O1wwQI0YN z@7^NlWB;_7ZxOFTVb)Ur#wJNK##57ZP;=1Muox9&`e@^8H}BrEhR}X2cv)$w%d$PL zTc{H-x{E*m_@}b^hb6glD&J#wuiqePx{GbGUbK1k`e@GaxI$LkY2U*8EdEIBf0Z23 zQ}q+0mUo>WhAmF^(>hCHMbG zY!>j4n4~vE?MOTI2m#*}9$l>b0QgEHJV4qSDfe%rHp@KSwUAc!)5k2)6~rOhtM**9 z%l3Mg`6U!(ZvLA(yb3-gjKnhTxFM}HZt0lJFwD$v$fx*Ujld230pj===a8yj=M6+$ z-VRN8sRFlzjkxZ=(ec$qmhZgSu-kfTu`?j}m3AqGsj~qo+kCv}v2~Ot%3ATn#9{#9 zZz3){?V?l$O89m6%lCn*Jp67&J*~4Ob~DEa(_*qZX}BCEtifc-F5teyq8pZ5*T^R} zc2f@5b6}uF1g9R{DW}mmsa4@$W$;gw(n@* z2zJNDI@5hpx^QfIT5(W~1d7&qYxCSzlg0nhUd^4x6zK{u`104?+IlCrH#PN<+wJ*T(f#Hy%j!qZUV^Ic6U|!Jgv3d{ao*qNhU3qNk59 z+iZNBrf6|OHxGRb9jWy$BRdzX+`e=c9^+{qQoQdBTJv)WiY_jSYIVtb!PPl-NVbfM z8K7;**?3oYOy-uVl5qR{Mq}_MqI_1xRun|jyVuTbHkI?%Y`Hv*&Z$XtTw1Qv6z-u5TxlKF!cV$ldTfTtCy6$0{#%`xLZg-QBZ=dJv+Kk>%EOR}~ z)zSv$e0lw{FHyjmQwHIj7B6V!GoK4eO=4psedLR8(s>-eu)?<-?3?0@9rGM1*1c~; z9~(PT7XX(PFCMDN(#Rb!rYc!|V#Kx8VxzqpFXv6&1JadPmn-xY3>(FXv2{93T+(P> zD8v8J^9w#ml(2Mn%aGkvR!-Y2C)PJxZ({-1?%Iqzk(3QuDl}g?;^(aWTSL?1* z^DV3HhFbee3*;2)zrQLBwPWH{d&3%6R6bDbXlAS^Ef|g@Ch*lPd%cJ1H}h+{gcR|4 zy~jg5rAApZA;43BLdqrSvlp3^(B9FcZBg3 z&Fp!E-O_3(Q;PG^b4<1g)KQc$&P!66TOuf|qD2Pb z15#wj7`8DO<$3dc@elVLpVUv6mC>4vW>>`{HSi<*s|UODZ1K&y=P^Rl=Ewacb^BjK zGQ~8r_)WB#GqAnP=|N>1-de zslVB~Y1XuG+`E{WH1E3@5-@^!M-?;;y8MiU|JWzu9OppH5@J0T#o8Z^%>=5qo%nI? z1l5ca+*06n6l-t~eA@wRvie{IBxx@SFUSbDecWtf7p=6^9<)i~PE~2~cpVDf5CrjJ zec9*9*`w6eQqFyNOcphOa8+zM{B1CC5O=kHkd(a7w8X0~NoF#l=*tKs%`PxZ>563< zu!wRL8{}L9^;Zim!inW7SmeLC(MPHiiT$BlM?rGB8H`3RV}}O6S~q)&)%PWnHmTvj zjxi<}Lry}BfulC|oVD$SZPal#VWSsuv>H!ih5Pi3_;-4Dxk1t4SWS_2%>mF=5P51~y^c(an14sD)d zO>up@*9ET(?PC4Ae8nZ(1*PeQaLXPT3fcfswS$$!K&jUVsn6Yv>0Wg#)r7R+>+=LY zv{Vmt+A-Hc^sMst-6iTCjVDH2P%mp8xupNXBomxTl6SvRNyw92Y#Dru-Td2$j#NMK zYC;?JGk~t+N>nAOgtyvwGJVw0<^Wy-6zD zqs-n@9*XT|vGuCdpN+gx7ROdrtQb@CqTv2RJqglhm=X*hFGx~1`j*m8R$&vs2<@BV zN%IjF<{$+HZB7?iuAq_WSfp}FNK8@As`7bF-zm9gV5{aYl{T=rF5+U z#T$Ja{5u#hn_H=?qM3%IaNo}SrGk234B5brEkST0PN{Q2s^BQXpg<3$&xP?ZG-%X* zKgRF+zJVkEO{Igk?itT-@CM@)Q?<35ON$V-OJf_ct(QfO-mVw`MwXjd52tF9oK(WQ zsZ&-x77frIIfXHM-p4p-}-jlPrKT#l~E_(h2vsYvmKd8~pXTu!CswV3oL>8jiTSRG9H= zPmiR9AJ+w%-;QK&X{0dUo&o{lo*sYOy1I<872WI9VMGC0g&a;)!1+0YDJS%3wL|f4X<#%r~fEt zGQE?!VW==z2@qYSTz{#sf3`H`LFhNH67;SElUX%OnH|M}bYhwR9$T#n8!Xu@&e&qCm>n~_lqf6G z<0m1;9y#|pwFHOl6vuTR6v&|xfdGXuSV>$+LOnNk?sCdBC}6D>_x&Q;H<0aHrgemR2=}Tq$yc|k zz?)Rd7^Ycyfa{52^jp6xk3!S8Y=?aez^*Ijs#gzNw2?Flg9(Z29&KJ|&|QLuq%JWp?O`N7y4y!S^52;PW-Jqzp5P~6cfC%Gd8D9JZX9czqBs8h8^E#SY8j|L=-9ip zMilUd=OIfJ$x{CvxtLWCkmr%+Qr@w*sQSvGm?I(POjdE_fQ@a{bh7WqkHTtV(yrFt z5jA>lrGemTDz}&lfwXOrsmAapg4G28wJs)=2>U8WJbL5`qkPFxxXv_Vd<_-Dk7I+O zrFeHo3@K(f(}Hje$42W(9Y&<>ncGv6_py2nEje-1JCwJ9zot&7HYCMU7+AmUl|v=_ zM+<5@8aL=Q?laZV71zJctdzGN6vQ{65Wga ztuYkn^}rXV4ZeJ@wTp->;!Q=+pJc_%#nJ32aGZND{IUhz@{1CB9%;7Fjgi4KzzSV- zZeV)R?8>6o+tO?JvTxY%&{WqU)!+j8%DRA;XrgD_rDkby$WDXcl;G#+2f~i)LxYA< zyw>qK4v!TBpJR$>1sNU=e3au4_YAW0z`1>XS;7UC4tYydOeM~oi<$jvby(1ivN-i(!=`A0c1(V5CWwZgMq+Jn>2$S z{$lY93^6)yW1>*3T;s>wfl+8y3|AC0hzm6{qXHW!$ukUNnitH9Ld_Xy80ICPG3S8{ zxq3DTDH6guxlA^(wslW+BX$kEaRxbAAl6|l{;Z3t&FJ6GoIOW$l|l05e=j~kZd~oV zjHE6^bB#iuSsYSZ{^pK2hp~L3O&mZ~Z{TSgNyj0dEU0#oI^vVKzRGP{_v`2Bl`2JV zhUVSAGtgFxZzCEOw<1=nMCwU@x-VLM{%i~z(wGAs9_Zy@nqT^ZMdZvL}5Ec@`#W%(|;f_X^W)$Z(UAK|#Q7?71*L*U!_sz|n8#bDdY$ zV-uVbACW^Nr(ujoI+K|v~0x|_QBZ`dzr`DvSx6Jwo=$0pFkl5mm3 zO13s+gfPkEFIIGvPKZD58fPDahSDS*7;Z z)sH>iwG)at5*#0)*NJmS>K~qYv7kK(xyD96(K+2DD!%9{n%PuoJQHg} zUxNCK+7Jz&9;4b9wAb^s1v9XS>tYmJ!BM5Z^KnXlyxW_6ykF+svzvh_w%-g>^;(;K z1U`U>=%zOXu$@@0yU{Jqn65QvPnu5(Zc`6G_#B)0VOKwY z)VMzbln9~i!!R84D(zl>e01Nsfz7wjbm$#|x|0i(T=i`Gx!d%EzMd#T3>L!=*=s0+ ztQ?e&Wi6=U~WK8A&Z#0F0u)Hn6vYM2Y>B81{eHTFu&2r)8&iJ}_t)m*Ho ztUuGu1w+-qL;`Qy8(^1TW1pO-%scG ztSwcqESoU>#lroeXbh)@j(sEWMfIU$(=mE`2l0Z*m+53jqDemx*PJlxE#7#H7Cctl zUyopKn82_GxL6YD?Wy}3^v-|FMAK~y`?j&4QD_7nO8NQq+4fdpt@K$DrrRRNLw=&? z!gP~&x%VUeTi@a~D-snpNwTKTR0qazXz8gncOKaTXV$H%9fx5mZSrfm#eGz0u)z*Y5^|4Q@kmJ-tx`Ko^D#~1M4m=6lqBa)8T+yGa zrvhuzOS7sY4=I06*(+aWHn-K|Z=2mKMjVzF{X{`MOeMLw;>)z5F(*2Y z&C}j&jGm;ZoUB25IB|zcH2ZhLZaXR8Sh$uBoR-^3EeSjxeI0>kG>cqk8mrU$1H+5u z2KAGNTlP{aKE+5$p0zw8)^OccDD;-QbV!G-tF@3{_2cQiU}3$-tm5Y7lt6Dmx(;2f zX6|b#2jhvrBFL-&_iry;joGA&iaVrd<$wrL9X}it51*Z8`sI# zu(tYi4efjob{1m(CVmfA7r_`|1qcX)O-N?bui zksqry2XE|Z|2Oh}KwKFY^W_~!$&<&oG=_O(Bh`nN&c8GS>%j3F*n5b#Fw>1}5ruJ5C z`gubYM>Y>eNk_8UyJn`kz_u-&)r(p3a`bD1n@_!I9#s3~o4VGcrCir8GTm7)x76Aj zZ{Aj~3;Wc2i;Xa318vxB?cQiCHWcBZ85GgKa~KW_BYruba5)`UFlON_|E`_anVS zjv;ZDs)A~GuC>D@WQ~J7Qy#$geqMsZWju;D%M3!8v{u>>m0_vx*e_)`y*1Zv-hS&! zM_vM*?5Ji0J>Q1zbQ5L~i&)&p>{K8F)78^JZd*tBt++bRHeu6}8gsyFiSv^y03 zAU_I)Sxa_JfpO1-dS0x2_HuD~8{q0x1zskxD+A{ppln?^>_}od8~Ex{J75Sb`_6uH z;LC=?X9~5tDvBUNSmv7+Zba#d7oC4FLqlx%thry&(G)p?%3{rnvZa*VRHZkskF@5R z5S06}Vzuff_hE{m2y~Qwli9Vc^Fll9KWnnsNkR-Ku2H=L$^lV1P3XoV5JpYNLZ=?B8$kD1&~E( zM_GgdG7(}66fFj13rk2MAkwfTB4XGVg|LK_5C|b8kV#?(YT=}vbLN~mbB_7zotH1~ zd+&FD_jm8RUy{cudW3yD;8D)Mr)oE)$gJ0NddbV*dAW*^;S23O9mh-ZvN2U@(hqwG zgDBNmcJOJGL0i7F{^y|{Uj;(ZKK=a5mQ2(yAHmx5I^{VfVvBbwO7%QhU#=btjh@y0K1IT@q+uXORMZ8rOj2z4ihdireryenmk50vjvLLNnl-9^2|9R4r3t=?Sza&% z;3NXz)$}U{S^xxw6ac$@#s|M%3*YUa$ZW%hmUOy$D*tah)$4{lX@unX}z-b9Ji!x(Oc`);CbQMkW{?Q-u zg6<9=hWZbt2D}pK^`o@EfkBUS`7iDjDw-VJSPX<65^bcllV7wwDV#@NW0W!cMMjkG z<9a`B+JI~25)l2>j4qd`iI$^EThh`G61(9gM;DfYwr*G780GvcaqSlKt{V|KDlw&8IGE@0213;IiMQ88@G8?{Ebc zxc9UZh3k$KzxF;`bWaE3nAr&K_g$E2W$q9QJX#!|#wP8-{j>6V41De^2w-W>CKKwK z+=e)VC&sJ}p^hLzSiw$B=nOgr$V0%hzeJ_fMO_ONp43VBRQDUrsNT*Q&jXF*o(AqC zr9rE?;%A{>Y&+>ismv;1wmAZP0S6$*Aa1i!DL|v#+X{#pyYAr5EoA*hG|CCF;|^gH zpXEYw7XM@oRSH=|zwMzK&j(zezz{O?D-n}4>}Ru2zSa(cDrY8C2L$gk06;Hp)zZdw z8j&|&MJeizOt)t6!d2>ub?N1Cm7PV~>N@;&oM7N{6XoGLDI*CvaA3QYpock+^1vrt z{jy?v8oQd22F-`6Zh&*|&JB{;^>@|^?ArpTzk)ioqH`|aR{<6rD&?R3><2WVLTCHY zUeKpON8Kw09j$JSal{FDWpuB_MM$c7DkD zUtJFG_3}Dzc2GPzUB-H9&o=TV0(I5h3OZq*BQfIW6fMr%ZYr@q!f@+V#KI9<70}{W+_`K= zLPm81)QB|oE0H>I@~0VB?lU?lbwWH->brq4=|cq1jjf}qCqlA7bLwq`O68`KX@TZo z#o*-x?;YFG;%wn$OVNnWBD5Wf>G21vPCzz$hevR{C!Z1_ia$->3OOGNvry~PZKI26 zkMa(t~3WWf^P!To1r9NvC zYQKUaze@b|=chVZDO!Wu%qoh)HkotAC|Zj~F{~Fk5MC!5H6q?rj6%CVXTAP~72IKV znNKKYK|=>?I8dZFlix_B`t1YV#Vk0KSZLdtK|pCB)4?v#u`KZ_a=GKho=C~liztD8 z>aFKX?+02B^g`wesp=FiE1Mb9U9Sfh-?*1ptGZgg%}~xt%7>9)#mfSG z1Xd)9m?zme-AOC-54Bn;HUs2Oq*^nXAJy*sTjlYozU2U3EZ_}|ouCx;wnxV$dx(b_ zDZ1jmEwi|o8-ALvR$7RJWzOOyA@rptcw4)+%hGK6rcc&C-~|9#Ksx6%?(|J`%1HvX{` z`~H|Sj?%5_B>W2N)74D7Jm#^_rJJgdoGqr&?~ky=nco`!F^u)ZwmS}CZwVrispegH}l5>$2ZDZWh7K)*!Wwb zRt10_z|^P{dA*-J6v-(>K%xW%nQH8vD@nWDBLxzG*6gX8SD>=QLVOV;9|-y$vxtD5 z$qIWgKMsXRo_zDR`eWo;WL!oC((Yu*De7U=5pwbOnAyRi7XHlo8c`P4{D_?Sul?I5 zS?c3_;aQDnotTp`)TysymrTLqXG3&s!9qG13p$5J7UDi;^5-`m0m~gKNX9g%daByA z!vd>t7fhtDjV%m+TtBQFC3sn@D|Zo9JEdev{MsGlzG#9IdvkN)brOLXvN4Xp-8X1i z#rKzB*MyoH8TP8#euuleMZ>cu!eebtGGeS+qc#9fJC?%4nq)11nu z@Ph+beogIs@f*r1vWQMJ4UklJvjB;5S2r3f^==6CJ3v@cPbkE8R!o`?ox4QEVT6~c z;)Q(GU_vJjbA7Cd>L`33Qsh*q$mHAgU0*F*UP8=MR=4c-&K~BKr}$;g*#~%(&O{E~ zfC(;gJL4{$?~P7hKaIZmYm!{=JT22ueT^^LY9|+eoz#mE(PkeC=$J)_9t<^m_ow#R zAyWyDpO_mg0liv7{UfPxDh;<*j|xYi4m5E+zSXJ*Q*zfy?izL^$sTeb_czZ8PjZQc z;fBbOx@){JDsZ9eTrr0a@0rngeD#^g;&`y4T>dg;9F+V`lqHu|=Em)ygEidwQ@HYe zP$p)Cs~Vyq@#{gUUn5;HBofNnnBv4uIJK<&D+TE|R#vme$MY#zQF$uF9z0KtOQwSs zPIF5fz!{+VHb^RFrcX6x5?Xbyn#btor_s$&qZvRw*g~yIJDWe3;ToRkaIdlNwD=<{_on8UQ_^M91>_sn|sV`+rD zV){)Y7^N>cJzcyo#O6bOCPP8p=^(*0?o{|N42%u*+#vihC`u4jyG|~e??T7n^fwCS z$=J!>)4t>g!^$AEc}_o{qf3RLxJC9GxJZ4;SM_2fCt=8$SfI5mSlR9GOAS_JPJW!7 zDd*zNJNz|e@t5dqkETd+&OY3_{Y!LTt?^*53_Zg);E3J#D0GJhOnG3B{vZpn`NbN4 zHL#EjhN{&iKY6V6lM7eXyGWa>QT8X1mLzjF^o5RNf0D2i$l{vIBWw0*%U-7Kai9z^ zs0P9QPZE|r*Q)leS)=s8_V1Qo8OkD-llPbA@@%(x$BR?4kdl52?@QQA$!&83Y9S;^X=l2I}LtiFEx01Ox%w zQba^iN<@T6(aGM-(#8}7L^3i}16osM1T#-Z83vXf1(dpwL&z(2BRasP7BvZ^Fa!mL z=C1z7mbM~lZ&Y;@RV$_-CI;$25X=%VC}MQ9U9-0EiUPI(*mVWC_H{m-%5a23q9)EqKgH!RphP2_ z!(4e1@-XNI6L@BZ72ptqHDPz6dE@%^W6n#Wz=|YJp_jNeYRv*bLEt#)@(m-5=#|2# z_*R@h=`@6(8Cb-JT{(dli#sMU(Hei@&l;M7LBxq|ph?B!40CsI_8}dzN%HgyMCnTn zBbZW%jY_=|)w%LuE<_mM0iUgbBm)Q{uD^e+}Us z#xl2#l*=>Gq)V^OAy5h!z$b4487lK=at_h9t)y(ni6k7raRDkz6hsgEHSkN1HQ^7u zfbMUkegTjnM34@Fk3Y=DN!3|?hEGW*Aisq~z&j1Tc9IqACP3dB3^vV_a!IDe97yrb z^r}R#I=ZeQy7!7~&4ROAuc5l*UYm@@Pe|X8KcRp}_=zSv64(rLgR>KFz2fOHowPCW zFk`)GB5m%V=Am)J#=~;Ju7`9GLGdPv;xuJV=uo@_a-qvYt}|tATDVCunZ0Kq+QDe8 zZtJ(w?jg7BBIx30>^3u@E3Dxkm_avfvVMwnepVkNJVbAJHfKUl{{twlXyD~Y4>8# zhOUC{nO@-C#BG5Jyl~GqSodsA_cH8a5^Ws)N?F-CGw&jL+!X3+88bO!Ax#|#B%=F# zW@-p8Y_B7hiNSx?lmm226(*H>(}j)?M4lfq;O#71{+w-19|+1h--`)*{f%4qg(%{k zb!$=)Tw4$syDz6Qkk0{>pa%;gkO>8HriDqCnYe~5SbGM zDY&=*=}S<<7Fa77caNL{VRbD31sFn*yCJp^3YxIUQ3P&LEH;r@1lvwTD{+@33|e46 zX{03FPYKasu&-RoA)iQ1hwZ+hJz{W0=7=#6=ML+AgZ?d{PnxfYP*ODdgTg98UL0RZ z;R|-Guz3-+1$$O}wcuh=i3Ow=OqJMFk;Zhk1;-N@{!b8!Xl5q-@z2ivopnrfpfZCY zOC*&jw7oR7R+XS#K%gcEdw_3$BqzT4&Vhq3)YdOfys1H~ZR-n`7ZCmEmaWB00w0uj z=>pU*FlG?u!bHSz3Bnm7R75E#cc}6xlYM|$2@eS}G#pXVBJj2B%lrCc+`b0Ye%&lQUk>?6_R zm$vAa7+$(!A`_xrI&_M@#7xQtd9xbX;BmH0{!F7Nl7WaF>BypQN@>c{)blCVDbOh# z_4W1b_44(zUp?z(zRH-!59_C#Cca9l6=f*{%2{^oHMCbVf=o3`g-zo@ zTl)!>NbJ=d;v8)q zc=#gZ9CQeA7BY`sPU#}&QNyh?FOpiJ{X@IhOXW5hS7kzjUe7jIJ9kCIRd-$0H|y#1 zE&lQ0JTwK3f=lLbo+jtzQNK6tkFYZFkU^hVK3rQ|ku2@3w=A%Us;t8=(2dyI1lpF` z*^Tnnx7M>w>y4f(*^N^c@4c!&9u*@fH1qYy=xNOnm+rNICGqb%35+_LRA8|&QoMvQs$dZja(QPM2g+qWpG zmWi^1yaUezwF5p(glLp#Q%qM(MoOT9d`72{6L7C4%`FWl&71yQhgu6#i@w3C*2~t` zYNDB;rOQa9;j%%?M#cVmbYVQrx})zd4u9RQd|kT3tb_3m=}!3B>e&z4H(WH_7O4e4 z6~7OEkyGD=gwvCY-p$J8>B#0h2k0~R$cW{f?vftNFja~zw=KWSQ?jVGn7ZG-+O!(` zJME}>tZG$nD0g3f`)x^NDtNbUYB#eq(md;scq&~#O<%YMUH=@A3&8T?cr@gH;}7LO z?UL^L)n(ch|Kjqh{8Ih`^?Lep_{;%`0u}_$4zY$bhwv3z9SRAG3xXcO3idmc1XMbt z01`7IYS5d1pN<4*ACJ$KFl(`Sba@Jp(6$O5nXPy%^R2 zFj^^%KRoL;b}*u!(;gVPYE$aJ`2L;ABY-w901^z+EuRiuc@~FK0R2@W=vg5J6RK6CRv%$!&TPqR`UlwRppNhbWpsh-cRX*FKYGHg`ybiBGRs$;9CoDiRltX{j=k8dm(eD*I} zEA6VW*i3(Yd0mGlL26XxR#hjM<7};lt3p$|CCqaCv0FQ}{bY50yv`PrRYbZKaWqWW zP4VUhw7B?nU=lY}9*_5V(=Euas1~y;$(uuNa%CY|5v=8suT zKk5Cs_SuwKTKV{#5dqdYG7DVJY^UZHPq*t=XU9XkMp^Rcx`EJD;Y4MmRhZ~o>)FtoC>73hp{qQLiFOZ{p z4FRz1N&B>ryUJ?kzPY{T>Bq5qR^jb=A9l{@Dd?g2ptx-`LK-W9(VhLGKWn?`TRv1; zdg{2h`wTeQz*2C^^EuPGOu1{^%e-qCJzSW=dwzZ5dCPc{*o5zm-VO{Bz<6J~n|av3 z?B;#5!i&K>@h10SyYiaAYvOp`TalOMTq3%^0M?qeK*^%&6O{e zFVmgjWBGvla@#9;FdPv;{#7at4BN)Si3OzQ9$YXw+#K2?zIa&b+yG7Jo4YtH*gLGu zxdmDsv|%?i$S)ZXm_YLs{8}7A*-*g41O7g!B3||-I}O(e`@)Q-sz)@j4>pcxF)TXyVK)@9b&kV&p+@=S=#~ zPX3>ML`|JdoGcw&EbZ-x{_5Ar*xuEJkA&neM*sWsPdQCJEdLKDJLmsW>q9}tziJqn z8JHOVCo&gHv%ewxtLC3%|Iq87?0Em`j9byt!_-Dg)Y8_}&iO+$eiqg*y#HYH-)jDk zp#MUt`7e}AtStXZ`Y%=gLi(2|+zL*XrXQp9*I4i~^D_Rod;is*m+`NG`j>(Gr&a!O z_romwaJ-EF+r<2EH4wvFARvMuQldht9-t?=u)1odPecCDpVm<1P!=K96jkPQS!QLe zSxQ-e=gOI>rqL=UW2!4f%^9crn$4VS^zxSKW^!i9)FrA`WvxZuw}PS!qllc8xZV%> z?(@8-+Te8|K3(4Xb>=y5yuRk`>rbBh=4sIKy6HlL!zO_Iap|!nM{&~DG2bN<1pD&> z1q%1ji6R*Q@u#H#4W%H!09GEX<3C~Z>B1B7KhQ;xoJbI~8!ZRIE%1*83xJ^7y2d2} zMf=kdC@mNO=10y6djj^ygA4+z*mKDCpJ<*M00Q|U?SQrf`Nx8Rq7?*8S^v370w8EW zKg^iAMOF*{=awfE1kGRk^XUZws|p78>4LUb$`I>M=gMCyfbrM-xk*6Len5PfQ6nh1 zhv7e%E+CLT`r!Y8=8CW|iaj+Dl!1DGI#>Qu;bWmd{Rf)=|GrRE`M@OL%QrGOi)a)I zv{MO*p(X!l;bVwxZ4npv@tL2FX@C(M3#`8SC|G-X3dZ6JvZd3x??4oce&&G^WdoV3 zlh)Xt64-Y}iLl)sIhO@RlFAfl2A{70ha{2ZhytDDf{yrMa!_l(SObkj2x=w0ZmSL2 zWDV|p2PQ#QEoE|8M^opFg`%awpV)J`+jBrK*a1OwSlhtwY;(7gYr-@;hpq4l)Rh!O zuHjJCwY={A9Gb{lV7d@|x-FSCURs63J0pggcMYdBuAx5XHb-T1c}llz(>ure4g?X8 z8>nsqgK-vXsvFgf6BSa`U9h6)tA1MU2yDOR{n1%i*u%b^lS*$3*Kj@Q{Jo6V>htku z>N7Ex4bsO+H|qt6xi&^lxJFyxo>oPg{aDod-4`PMNl&El&*gTmaz8H16S}}PyFpu> z60S4e^VJ}96`~rf#y`{j(N2*P+p|MvQK3@s+6gB1{=hR$jyk*)obc`g_ga%KLdYlG zf4L6R_KtdlSX^M>#QcSvyEKv$ZxL*%9r4KonJ3hW+=ucV?i2_)eRme@cPTdQor7$9 zcR0EGpjn`$Vz|sW{W)~fPXjCSe97^Xoc{>*F)gU~DYwOMo?O?rl#@^0sfv1A0e+gap9~PaTB@gqVngo+(xeH)@Pz(uvQtcGNof{3|#Dmr>)PmiW z0z}E6jT+xYRCc_Z6ptpdg=JPPZEl%cKHjp!3 zB0YS`q74jbp6+^qTX}(`YPSrj(kIB_gJ}F|GGr?Kr;b^$7NRjyL1Z<->g%F)bW;;r z1zt{YLc9P*v>o&G+ag}rZHLl})^ z2>(O>xY;Vr_HyllM%r)V+iGg1C57pMavk&vzgJ<@jprNj;p-aQpH0hM`XY3j9iw}} zwwBW@16S*4H|+F?iCQvR_K}F46$WgI6kri3^!kvE(1RjlSkW$vqTtqLMZjuI#}3HG zmbd-!UFkWz$kuhK5L-4Sq0!^2-PjT6EZG>rLOaiNm?O(3j$>+yRCjTY z`3q4pEV?6q zyjD~$+rhSbfJ~=&zZ(XjO%IT4@Elz#hs#ji%k!iTd8Je;Z8k=FfKdfC`)FHNPG9<(PGr&1%-eUd*{%+ z!VkN9MRUg_N5NZIdwd+ky+4CkRtjn`N;eQzqTZBtLD){T2ejQ%#3Cqw1*Qp5;rih-ovZ}x zXDYJ6hVU~x?(CIweTj?uBk)NR5YSq%cy~g*VXOyx>V1c6ccX@U6T;r3ggQyTQ=0`+ zKrL_~CN?QgbE(@F)&c>@)Jz&%Ie+psDSQ{xT{L*r&>G{@URyi_M+(<`I25U2G_IT1 z1C&d&=}nD>rTO;gwR~UrJ~ffd|2dezongANtTi*;Upf5XIJkPjUxVR7t%HWIo zPC>H$ih;2gf17Y-N1@z?pTeZtV>~-2V+M@j z&92$3*7^iYcSweh(pr;5Lv;F;kN~9`+>ZSm+_Uq|eDY+dH)z`-20;pOY!kEtamArg z?RSg7Yh6i$o9h*+>~P-2z-6yu?1JaV1Jo9C*biuBJ`#DrB=rZFcQihr`O4j+BS%C1 z#@rycNUCSi*2ZTVzdLxE;+45mYC{1@JyFO=j?`ibLofC}{W!byRE@;Af;z z%EV~h3rxQW++ah^g6XnY#T=ewfw0z{7NG$D49S3J7|~5EH5L>2d%a!Ie-G61p4TzC z8`pvXtTSTaX;uN-dZzdTIX&LNPD{jth3O(jI8>F`g)umCQh>E+#^I?03yG&|I-pt) zXbPr61JIWDi;-KgE$GsApIHLKl%`9&!ETcMqPA*EDuWsJQRhLPVwb&vyCQG5S7zyRG;3QmH;He<~GU$FMz+O1F z`s{^zqrcvN>)$TxmH>-9=AZ5-jqhtZ&hlHh`#^fvM_AO2O8j^YaPj2^FHCCl82o-6 z+y~IZIW$^Nc+5#2w9MCdH)O^Z<9 zk&EagB|W&^H76NWyD22=sG#KB!4LCAVU#_cc^>o9fP%O&&1Jqh2i$g>1a-weWd!M` z#PLkcL$qd>d$J>8YCTV2qsvk5o~|DGX*m%IfH|_DLAKiC!I7%M`?X#sVEdgi8EWsP zjHQkRR**R+f{B0SUSPO6?xuzTWp;W*woZ`%=4(>mDtvGQWS`S!EBguz>qwu&9ZJIU zO{?D>LOSW6_%EWsdh}@uxy0L34sKdBM=cG86|oZruScy?j|ye=D%3iT1(caO5mCMU zYCXD%U+N)dj)1rrgsso0eN|vpP8~H6>+K{jQ4f`(U#U=A0{4>HeS${q;g)FP;iO$O zgyt*g-o-vGLhGAp#?#U|kPjA%c$dOdRX(?rfOglgthE9U-4mrCa|84JAt!-bpMYw5 zRwO;Rs28cBzNDymsn}IPSxf~KSQ$ol=JJjPkuRf7FY-7o9`H;Muh^NID5UDgJ5L6% zhj#HGqp#gg&ox0iMM1_y1c)(DyT-Y^{Xo#GYtZ>2?&>==eT-(<)ijb(+R0lW&ov%8 zGE!7a!0R9x7+WI9&gAA+>z>52fCT3-83abTlur4ZHe2p1n*2)odua7w8HBr9&GBke zaPA|AyTAW7Ner2 z&|v#)0o#?tC{7D8DSrfRhyt&Oh%gsMA-ixINsTcGFe$>b>ijy`->pkAnlra;R@B)q z_3LV4b^yoe9x&649dnk;j51V$o+7njUbkOIf~7exdsZaQ(s@3-%YIx6M$#X|I#eye zR%Z*T-5(YTbSr7^PwK@x{MJ!A;9afx&yoYA1m)Z~)nQ)K5=rL51y=z>lE0>GDTYXn zDoj7o?1sQJysxRld~m}EN=^MEZdzcLBwIDQrg(XGCo&|11i|dD^jig$9g~7!&OP2q5t)IjG;$xYt5kl#=g)ueL@L;ZZjotB zJ5_QDA?oWJ5|f=Z)1XstgV+0lMrO0SmH=eWzwq7V?owYvg~go2?=%V>`3 zeKsIsqi__GK=R=!Vb4Bc!9P9DR+a(Guhv+Cn>o-W-ypr_xCB*de9S1u(xwREV`$p( zj@}kUTjOIYqjz^`x_{N}PRnzKzTB9_I!-QB{dk@bJ~>)K3RNmS=%|g_LFTM1IKK~I zQL623@;{B%zmDj}hv zYQqi>on(0mp2*-(X1SGOYWIShgv#Hq!*xjr05wa6cbygLa^tKZ;b;VVMA ziQEnRi0fe8fb6x%7W5n{5V5FHcJ)6S@XBETxbdHkU7Llh0p7yEdGx135tufs1o~L$ zeF>tYXTVDqLOI2gBODw$YvSLmuN)dMt$MS{`c91<-)QG4vD1|%>WzGw2b*vR8rZ;u z1e88szp)3-xk|0s+I|6tEy1??xT$O>iBUMItr$v_n`;Tb{15O3GHGju*FcdcvKJ0N zUCN;dXs4g>>N$*09bE3Hv0nz;I}qa8nPSB)S&QoA4(i&Ztw;AeKG3=c z4^{fR2w`b_PvPfMcx_Y9sgKC6gB!Xc6+;TZdKfhoT87fxu!ZgaPY=WCF_seBN_$>yU@Qo*V$!P4u1Fs0^S!1u>bPtfmm z1D6HHFex708nO+b)>W8Hp|F1^3z-8h%x8=-wx$CUdedb$+!ga=GDS?VPO~xLDgR|| z*JEs0r0_ofFqZx+PZcN+I@~Xy{8&NaYQI@9pI;J9`5SAxL;Xg?0xC`H;04G<)?h&K zSC)&apncvnEmhZF(azt~E_(t6KraPN8=A404HQ;khm#NxO2Y)}?w`wk2X$a*Z*?d+ zg#XQxPXPCP|zfE!r+$gr9B$*&n1sVgT!iq+cJJ2D=uTQ+eWe zFk}jro&m<$cV)Sl5B!qYLVtrB9kgLHo&arpRk=pHWQx*Yopv&?Ctu7trqbK^Cf1Fv z)lxueYRWy0%mxe7e=ZL>G-oGRU_9Y9vT#4w$ z{X?^$Y-d=ff#MGe=5(-{us=$Si;6*-*lIFONRDNu)9E1H%r%{z-#@wseW&9b`AqUB zJ31E{Cj*!@TSu`qKwr-soKhZy7}r5Q*vTeAP0bWcdv&3wdR=e>b<-#;{CSZ1yEJ;O zfL8gEB7U4Ooz`6ibGZydJIMAnsF|=@on!uGpW|?Po~&-NJ^y16&#putXhKgJxdRn+ zrl;5sB|W=56EUhE`iRWTIs2Yg3Sc^<|95bLiU+i`Mrr+2r}>1f9tw@q6+-$d)%)1% zXIjw5z9Yw!l2KX-@t{jZ+bga0wwOBYwoG5#BoZE5eZ1Zdc8VUr=N>5k>f7mbNOPCsNG(irREjfjZDf!AXhAiq3AL{=V z00lac5Q!JJYj^WjayRDa>Xc}Yav$aLfVMTKH#PI}5`hNy)R`F1(WqC^Yl9fj2jn%Q zue8Y(o{tACl!4#KksRbZBN^qILX_tO)IfNXuhD{T;;OzBefuiXqan;+by?*?Gv(K- zWNqNWxz`p-L%u~gpb^g(Hib0Wx>x9PyF~ra&A^b(y-?_!4%1 zQ2~m)@_DyYD3c1d7?$Rj^AlpllFuo$zx1_MDr{XdtDG#mH_lkg?$mPF;&~EzQqu%e z(FyQ%YMr{rr4?Dr$>yrH8fNOvhyFhkB48*HmM}MMFq&O693nFcJGf8Is28~mx4x{Z zKC*s({46YYL?%-NpA%n`{&L23?&ti}CI*-V-<)I_Ndu`+4{u41SOrjIo}VU1@62#@ z=(`|=1^logwpiLszxfPe+?!N*4#xI6B-=N&YuH`M(R$0x#(%;V=yMCUUgc6kjW1`X5tEOE5>(CBhR`^oh`9iX*TW?Nxh}!xi2Kk1Q?vBc(S? zkB0^^cU}fdz?9~(L7F^4)7CB;zZ7#L_)$fBEf$oWy3~0_LXg*;=mNkSyP}Bfr&Myk z07HGO19rh?WeK42c35mS6HtJVl+PEs5e0D~o2~Ci$6j1`wb>82nwJ*lzUfW4+H9M= z9a12bOwsE1z?9?fr_ue0gTot$Hg%rAQ|}36HxISiM03#!5)w#4u5z=Lp>v;t0?R8M z#o^Yj5Cd4c)>NLRM!)P*$`h#)d^s-uFrRcW+Z&EoeT87ledWpyj@UK3h11|>VBWSv z{Qt1Wmy>|rqP>K4YS2(oG4T)WnF69r{>qUBUXc~#vCe+)w)2_e|42*s;0OvLNH!_( zgL~b&xT`Cm1p4G_D!89)HGap0e^9|sv3Q>*MZZ`*?=Cj#vk+yo2yg{1>~1*Tn+#3n z@~>-kxZ$5YKKp7mS+U_tZX6w1e5=%prljDDyv565So4KrE_#8Xs(7Y|Ekq>P(=lHF z?J@mvl0BSJF1r=e)T3d&Qlps~q}tRR0Z}pUD@8e;&*m2%vcM^D$t$wQSjIamwY3NH zd0_DNs@661?vy9s?w$hC?tego1x~0-E%t<%jE|@z0`Dbf8Y_7kSCS+sCRqrlB0 zybtYWE$q?a5Jw)fT2>DZ_15`v%ceu9zoxFl$KXYK-!nnH%;Zqd;u>gOyk~TR;VHKm zYYgi5-TEbq*W1B@!=`Y64q;X{dI(6JtW>^eQ_+a__7*#Q#!B{UtLPIEQ7X2hcU)Hq zqqvGA8dBOTCxX~^{W-9!fJ1;2=d-uxX@*>ZMZk6p;YO(HGZkOFl>i=xUi}stMpR$j znouUY+k_~1t1%gG{a}jQ!Mzwhz^1~6$YurGoxqZVu0sewQssFZiXARkVXhY9qO7)x zv98V24MzBP@9GeSs#$l%(aCykps3?7q_tD}t&)x3zUvmr%jGBV=5^mZ#~-Y% zVz$>(aXlw!&8h8lR+1;!|jyWEt8>APDgd>G{)RZHlVm-Yw{tmyM1O_1D zvE$~2jPIAuUsIYWK&`Y`Q+AuSM-TZQ-d~!gBlWCJ@pI^2q?;_td#c5WcqcSdVh#Qv z$s+3VB-fSEcZo~jkr3Hz#QC9z&gnEaD5Wt*6adzRII88KC^V`tkf5S|-(6bC(eE}d zY*~2*emlI1`=0$yFSJ~B37^Ha(?_TqZ0a(uL0&dqRyN&QN{-*+O|e8V_(v}v};N}(Gv7!o$`Ahf7` zG+#_iV!E7e7)%X?`PGd0cR1zwE=qqh%us?5%b8aRcFT)V#@m?RxI&tv z`ABOC_x+=#3VJYOytqy9)q63sKM?A~0ht%+)MU)g-=LNU{aRpZ0H7mVxV|1xH!IN2 zT}_A**y~$#0vi~&_d@?-&#K*>TjT_cj6S*CXN6b!j5GtwHPS}7&Fc2g1 zwgzv7z5cyjw*zsy;p31_mM-*liNA^le)#Nt7$6(~3^jCUS#gs4f^^1Bn|_H&^1CY6 z!#aO$SKR$;POR1TL`N2wCv@G#b#O-K&zA1X+w$EuyrR7gMB}w`{YTV?Hwi8e&WTB- zZ&>!|`>{;Ic1$msDuw5k?rS|{B@TsBAKvHmTGVypPE=o7c}4VH z+Kl&0G+Yj&r%TFk3U{3Aynexb)q=-tI2VLq==uhI{PZgkABXzEQLedxPXb%}?ld^9 zEBz~TlSUfZwNK`%%4Q84HTA<|y1^P^g)fG?-y*|VYyHXInRa*yUVW~NqeTDC%$Xx- z#n@6S8ujxWYk%Oyk^IrDQomG~6OqGlb${^6-e!u;BC&64YUFNAki}_Bl{I#Y_Gvs_>g!Lo=7i+rK)cnPC z8bx=5qxamoywQZt^{vw8BUfIyh`P%nGp#cuV!wfa?bJlRuvzV?m!aeDDNR_K_B_Iq zLtMyQcTiz+TrhQT>Q25EGu25<|Th<_;}f+!W#$@H&$6>RgDu9Sa}Jp z>qA^Lw}M^*lPTkFymkUccc&w6H&Y2_C98@UeTzPP zf)SX4Jma_w2aG+=Nh~ACi%yO+G@fzeb=CWFc5I-We_i*oE33P&P^k9G?}Ctjj(N*Y zO?Wwhw9_Fmi71Sn!Y!~ATw(LdN-X(~gke00=?Kp9j6%>+L@=m_6O#@uN5S;T_)&+) zVV?UOI_EPX8fHhliSd=2EFn(tHh^RT3fvC9`J{Ib$J1jfp3~L`))c=tWsekll@TpD zd=R4Y@GIKg2dtr9=tRtdpl|ky^1QoByg4I4&@lxN@Rl8H>{Oa)@;)o9H7OEwqVIg2 z3C`RBAXaysdUEUQCo&Qm`DHVm<7RjYtq`oeD--bF+l{(a?((%UY^>H}z49FFymn+2 zgwe0_!c_Z@ILVPQjt=xiUtRnb$SN|>EimxuoyS`9h$m&Of?=^Az!#3s?Qw>_+nJ1P z1I>f%aci3jn^=kldL3?0;Nfo7*TzU=EKUI`rv->qyoxJAL^)2-$862#_ zsRe=mV<%ZJDJDsxrd`zaJhz2vs@Yj-vJcPN8EvmLy5Biu-XJlg*TKdT?4ju|f*x$A zT%@YAUbaN-7)Kr3`yM(ntZtklD=F1#LliU}J^nM*%3Hdcama1F)fPry&lKN_y?(E) zmYEGw%6T8}+b@*yd;y$O8Rv>Lcfhg?v&Rx2KYAn>zlc-I?nrjHVcN5da_rP+4Vt8` z%vg!U2oB82euGJRA&LFjb&gGRLkNo+otAcZk2c372C;hK7?8xK5pKDo{rt5b{ zzYr@lYI^JU45r(hDR()>XG%siA6L&U=F7>;b-LU|OmPCNuC&r#Sp9UGaPbGE4PF

    !N=(Em6QUjkRB>T2V%al1867w3QeN*Z}}2^wx;=?o@G=kupd+`S6X^tiuw#xDUF4 z^c&e_cc=YR4NQJ#e%{|ssR-dq&yeUgRSTX|NkEqzI1-9g^HoJl^#kS+9Cgc;7-KBN_O{3@}nD-ug$ltu)kZQ@I*_vaT zzTB4myzk16i4#Om;cI@z~pJpwV|@G(x&i#N4gYEVSjMsVZ3P7?QpEIA22+ipX0Gb z^*)5Z2evu$4>FGVec`t<7%2O4UU01FO0V76>hfBR6HUB8?v!3BQhnb#(C(Gj)H^Se zKpd178{g@nSGST(eXNbzF}Esk-X6s3b|O0%QkvfrGBj_F+gyP~E|i8ylfOKFRoTEY zXBr3mWXJJ#2ugUV&$cNmO6GmR-(31c5V}ek8Iizl^0g@5qh>U+VVadE=exCea>Q2w zI{7Q3(j8T8#d~E~Uu1X{ur%5)ND`XNkEFQSIHo$n8&^jk0hkSK8OBnRCyt@ue@lLMWz@a>9$Q$o385F_z-#~=#EeFN2=p4a zZQ1U>M8|$VGVwUMlo~Xj*()tbbIZNy-{rqge9}|t_VbO&zrZH&H?B{7Pm~~F3wie* z+&E3%Jk*Cr3{KzEk` z8}{drql8;rv*{zLYBMxszP5*cv#pW$u}yBehJNeez8Xv$W8oF zpLTBm%tQy0Z>vtmRV?#AO2B{BizCrpscG4i|8BRAL_XRQV+}e{;!6wfZE9H)WNBM- zmr9F5epk`T4`{ETa%ZZ#e82tm*^xQPe*6oIxn>9JG!?e4Og+W8Sd(gE@W>Cj)wlnvpkeV3lq8`U4O?ue~l@Jxf;Z8H9RzFPj_yc zGTb49u|Jus6}~B$X1=cnD|MXyy4*2)eY4w^v>@rO7dw)B`c3s+bIk~AAH(>i)25TF z|4L*^Zvb`NlLj6gxs5a?7savW&22L)BDIXq+nwjaPq}acjZ3S4rQ^_Sd!lfFZ(*R` zBihT0yYDD&8#@D=!fw=6fG#kyp`J;U7vm#lhw$m!iQv!_{6x8~4kDwjHlAM5mroG` zE;Go+T6Q=?Zm9k>??mX=c6S=Z8fxVD+|7n1V#RVN+Amzly15a{v%a3tllF4d!v3gD zfSQ(^5|X%5t?T7`@3DQnVXeMRb2FnY>n1>D`F_@ed9?x7J#qa>@2jIzE7gH4q_&zR&h>)~+kJRVI0X2@b_V*+T^$kA?$~B4&Xcmg4(yP>WkBL05W-(7O zk11!(osF@4!k_dzTz${dv`e+`67 zkm-ZIlvGH8osWrTckJ<-{`=YFz)?ZLwk|^F($0)K^trJUpajCblqC)!@~x6({&-&S zp}xmR+Tm~_smDd3#2)0MNvqp1TXSO%H0seMmgiv;#d0ROGc)^soH+7WzQQtIKis^! z5R3W=ov07()aLZ?nhp9RBS!j9Q@AENd=!pxD_G$$X-UIFFoe7$G~JTdCPEt@*exxonKaYL&Q#fhyC;l^99 z3C1x@97s>HBWo5mKc@`ETvfZ@b1<$xYk_$VJwbZRpR|l-6YXaCA$zgK28d96n((zk z$a@)lanp?|Gq4>h$N8Kq1;-I(i$i=qV z>>JB6ym808*dp!h7s-rR%a69G13Jrt;vIX&1s_L`7Au_xqr-k9F&7n5Gb-+o_j2qR zpNTAPDc$pJrS|3f7HeRxZo>lIl}HBPc9pvqo{yi)9z)-5gk@|?9&L@O4>stnJ>A93 z&*HjS^?!@2kYQOzDDShC64_(ys+r4O>YH*Y?K#HQ%nZg{y@~)sWMQVs8fZ#`S|Vyh z-=|SfamcZ4@w^A#)9aVstPk2Z5_d3p2GyzRu$Xk|lF$8U7Ej%tJknaPCVAuhKy`nw z(j+vU34C6K0jIY%qjU=$&lvmJSO(2JKw>D5y6qGK^KeJ7XS`8FqLVsnZ%t=6UF9DG z8u=Qiqkbv~bm!v$VhJ4VaG_oRN+I@!wXg2AMeWrdO*9sVIJG1;5F+bY9W3~j4@`IJ z#aMR7G5E1)?rcwPD;4^C>SEF z@BF<7i|X&sHFegSIGWn5Y_x;XLq=!E^RqWUCpJ_q-Eor%j^QT`*AkRBuQyj1X# z(;?I9{uMu^qPaDmjtBR9{Ezrv0B|HDDxqPQ=wKr4b_PIU{R3#*)mlloHu$pJrC15g zd)Qye)TPC_(M=5pJMlFw0?w05673wRud|cxs9t^YC;cP##vn;jbVq@w{$j{lXNISQ z2!i~Lu24Lu6O;dwUyM|P4~~?|wf`6@=%(}Qx0=g556~OT#fS6F)p5Y&D<^e&ay?#p zcd|WtTzn*Sq$<}f>=_{h29y3kX~xA;2`cul76uZLc$4d^;MVI3VI9I;vG{GB%q{2W z342B2u56vH7Be<3i^(d)>5@#|pYeo4$DzqB;(i= z>c(C2cAQ6sZ{79y+TM`FS^fnxXLPrB38SE)S(~KO)ED-1Q7?4Nmn_EP#WqWM=Y^_l~;L2#7tPPKMU$09DVioJmYMHrmk2dxsB(OS7N6FliM{; zTp~x6BOP~#R1U2S%&L>oueWyqNU~eW4Sb)lj7VVM>d)fniY&FC6yHBzPaV;0roadv zppmihL7nGCip=GH90Ag8zX_}@yA5(@rqt5NE$Bo36t##uU%=zj_H5Z@7{Ct}WY_@M z2Zf6*5@XZMavo@h@+#1v;D%O+$JY;foSGXJtM$ACVH({5=u5B9ygD0&?lFQhJPp2U zhN~=>J&b`bFFxO*WcKJuF6ed4HtxH$)K*TooPT|nvnGqc18O&oV}0rJq~-sPf`i9F zDzZE_LR;}rjgLw`6_xU}&3-?#NVv5!*729=E9z#?6)&?g@4KmuZX|{^2PuyR;2K^; zG?=OpxPl*9w{V!+*hGsLCt_VUqN18nLL`!h7>B-XfxFso_pX%@J*U=f6w6y0Q!e8H zwSTq}Bliqf5(g&Qcoz5I6)O4a%Dgb#(4x3tqR@E-M~2CYB-27OaMoM`PxpEh9C|J< zD6`1(%dF~oYx$A2uJ91M#npD^9EW5p{e@4X`u3o@XOrNHSE7B56YOEiW;KL(j3{P( zotl7h#Y%xKrMo){77@{^*5pM&UpwAfF`NGJcN1vUM9hrxE&GuR}gIU(aA&gX^! zd-E}_8Dgk$Xa4ZKE){}rEb2g48-0z~Q>*-6;98jG)oPsz*g=W0>Bb9a&dM^>&(zvc zI7Q)cy|2a38Q~>sX;&?g3a6&@=PKJcIK; zG7TUe4Ln?gk==7X?$qYd`7QYoyyE z<}=U8ZpJZ^N@}5t2$&!S&;_;cj=C`7hqMEoFl^eQ4-xlf^ND&oTfh>XHRC#`$9x8K z2sGPGR*BjRnJG@yWROKN|H}dkEG`euQwW&bYZa&JZXJ&GpQcyy@UV%Qv&VtXmN9nq%nMRV1F# zbIr_tW2x(**}%KpPQ>;}2k++fgOS?Col^(|AnDmbW=8HJg)W(2LT$$^Fx`Tpo&&JO zDcJj-U*CELjO+Xg=SqFHUrsJYL*TG$I%+m}aJ%xb!}HR-c`mOcUsgOB#fQlVHWwN6 z_mMwe0FeZ~w1-ua`&Zkt$aQA}O{|A-M`@r| zb5X7CKhyz>nAY4jHAKFKQ+U`3LnYj1Iv`HWhB)fiQzK>xRFgcU3mt>^x+zAYfQ zzVn{4J)5z&Lc{%4XpiQ{RXNKW-K84dCgTfKlQq`;S)Z1Y$F)2*S;u#X28&b=rIRDH zLxq#x8Ac=zcMNKH4U+qV=Ch_sR(0*Sm6+f0Zg#;Tx-S<`=pI{u9^vf>bAf@7z{wWy zxQT0Ki@h&39|x|lCi-$5t@KXpCE8afUjG+cZxs|rz_kq~kOT<99RdV**Py{6Sg_#k zI=E|ahu{$0-JJn~y95|~a2;Uq!3LJ^t^I3v-*2zF`>w0H>-2fFO;KoH%L?Ry-_yfU zsB(sS$jA<-07IRv%RO5+v;FKYv4TUuBu|)a`qvUzc|gY5nb;n9`F5evlXc<5G+C=e zB;sUPs+X_ud;2=CM@97s6AaC{5d(uybM`ct@A;AQ89O(KgL0EDr6IPF#>c^d)&J2C z@3jtOHz^k0AnbaGiB3Kx@m&I69IG(`IU7z zCneo?Rf~Cq+qA32Ud9yM=|N>Msq(`fjqJ!_eBvuKvYwTVsv+!_bDDT%HLWY00;Aj7 z;%d3Vawh!plk?H?Z-WTH8DV63O}FF?X%tz8OTAHJ>7lUxW3CE;nMF1?5n)1$BEI8-8Va9 zi7t=35}ineps3T3TvMjcVlLeDndfGL%ymz-$KKY-(D|+j`EGdde4IGhxDo~+w0%&? z&~okDn_Y?F3wTT){_B8>nu2X7=rxExdFO^N9h<$6{}0H8;q@e}(A`o<)8TuzHNOlq zzC%sjkhb50P12Pb^ez(f{Hmd~8f`!d^CbUCy0Q?Q7im>nyZ+|>@5k!F_SB0`cL`zT zW>#4DulO^vz^ZmwL?HPgK?VR1l)la|z7{^Ya<@3MMijNo00AU5q_VxjcJ<#vVpD5I zc+g3ei6_UnN&Rjjz`&1Bmp<^@jJ5XHIjyGEJ=-Uh`sWTRoBpKbZKt^qPYpNPO? z^q#8I?-9M^_Gn=d z8$G(=;#7dGUN1_BS6t|w)+^V-A}lj6_9W0L_((p8uz_P^d>+CpW{9KjJ)Tz6*2c!W z+wWrE$@$#2h3p(v;3w%ZZyj-9V5?>4_BGXZB12`kcHAXlhUs6aUf;~mkvPuIC8eXWhY$f*i-(J%{OqW<(?lzl*+ zjA|m0#<9Jx9%+VeQHd%p&I)&bEdV#kK{2X4TKD+#U&&k-tH}Ys|2CBa_;` zWRUVeLC*l@3a;OWsKB0?46eOlb=(MkKv(>7BWRy^Lw|8UbSYi%-=59On^d-ot^nBt zg7qsBZbVgEwuhbbDj0o2pOz$=%;yxgiK0v7bkJBQl+`w(8ka|4!SLaytcmM=+J zVAKXP<&!;@)D2I>Fl0$6J&BobJBmlv^OH)%NPe zpPb}McJblpt+KZd0ku8N85WGaKzp@Y9g)H3RlW$J{o|Ipw2yBHni|1tLEqo*X+XF3 z$hU(4LZ=Fuq910rh?Y(xFFO~juB5O5B5A7Zkj_)jTbur_k&)WeThDn)u#9wj&DWl0 z4TT~wJ@LcF&^O(4(kAW$cnzNoGCV_WhRjP(Z#b%LL#yV^p7;t=`eJDN&3D#0#md7!q&`|vZ@J3jL5LDr?P4c>X7*{>gyna#htF{(^|Jc3MfKd@j~ zqvrlikU7vb@%1||*m$}{UK zwo8>fQ22YA83NdargY?;d@B5yt^8@nj94#C6(r#B?M*01RXMgM(R0SxcROM3-vYKq z#k#ChuD%|9f?G}X*7G(B|qW#TEz_P(g&411j|ymyq5Mh{fyF-?o) zzxKmO3+DZiH0|b8SZ1NXHuVHuv`9qy`rJ1Ie~*-_3&YcfVK2v2@F&@IvfRn>J>muq z$pE;XGFQ8F+eLgWmEfwbYEg?h&$Q01;2=pLUj;Mvej1xKsrUOQG>O?&ra6@QF@PWR zr$Sa%&^!y0$|nC=3e}7;p-Gm{RA>fdOFM&*lLt+%=S0S0AB(GFtyL^`5l~57(?fmU zyxI~zt$<^??rE#>UZz@R3jW-1mv8y?&BpZ-6XnbXpTJ@Ifi$jY2IXNCGZCb6RN#LZ zEq+8I)7NXZPs0ct$lQ`xbRuC?4usZiZBwJ8K@aq4AV#HP?O+dWF2&~J73QxY`Dz<~ zbL?zWjpF6|$Cfth(dD}ytra>zzRFEROsZ0ZKelGvnHwj_+pZD3mMg`#EV@kapsVOZ z^R1$Td{?4_5DW~reJA+KnBZtwY4`a)kmKfJ_@cL&tX|%ni1W-TGJr6N?Ci9mWO`5r zCSqDiWwXiO#RXC8y1ML_Z7O-XeuodOm%cm0AcAol1e{ubIv9=GDBdke^u z>Rm5<6-Z}ivoW$tjYGYa=A#CMl||#^c9^FnBbD0RKbL%e3K@n<|KaE?#}rj)jDp!; z^p10}1D<_-?=s;;$(;5-Bi-e!1TkSTB;i|&=y+-C(ug_T*~UKFx@za+mv~w%x$U)z zz4xu%XGCI)D3rI^Yj;W&V4T&9KgIAv62svU(7$f_*u)%z`*lDjc)Ob>-^4v7uR>((F?223n{V&qw-5-~fy63Z!TofP zc+ZpSW?3!)5O0o3w^~I7&GAMPa&zZU{kBCPmec^O8~nwg=5=d(i_ABC2N*D?DiOzVPYbnFpBEEb5%&b`DY=^ioJ|-48i_ zcp}#2)mAU~Ozm;Y1i-3E;I`(U>aqJ|klp!4P9A>~0@ybml276|8H;B39Q*aAXMF5o zwWw-u608}^Qk)XSA1`%3vb@s^)_=c52a!4W%-Z+&i4ynoLSj1}hzZ;mlbe2R_t7=_Dzuwhdj?@=!It!pd23d~ePNDTryzS)?c ztZ~Bp*C`Xy^FT^4L!VXDT_(2_*oe8tw|0jl%W~;IX!-=2q;PDTJVRJVL}dAC52vo( z*Vx6Mr3ZOSwu_Dz&`}6rngW*ZK}cB@g|;niFAMz4d~0lI$DnC~OuWFfrzviLuBu5c z7WL%#eWNgSIl(ggiA*ugQh8=ko?YLR?EkyX1U1G7+8#-m0tcKw1F_c;wQVX1)`UAe zlG0FfdWLfXwrF}BZd1&G-+kb@wH-dCV-*5bAX|$9o2yz)J>$j|zPYN^5>mG0{`;CT zv#LaMf*q5fW>kHP``?_KeW-&ASKl|IYh!#3pEIL;I@~1Arrc5^Ur1-E4D3ecwZw@x zEwG9js6C902|ui{<2u!#JSc{XhIll9w&MZ-yvO4E#<<@z&IRh*Ok|mp-;XgFrX%

    9Uu?Oq9t2VSgN)0`UZ#! zaA%Pks~Uq!M1q@kOs7_~UMAZZiPxm+$yW#KRXqFkHMj6rP_fnu&ajR}Z>zl&9QT~^ z=$$B5tkaVyW+AqF?uQ&KRcniq1}AY7Iq_y>{TgK}_RNH}bi<0&fx`czk2@0^M`*1Y z2<{SdJFF2ZD`du;oFMM0H#QQ}ObNqx&8|5IAGaR>ofCUsj0|+8tw(+@mQL)Y1Fx;A z+j8iR{d;82VCFR{7IunB+x0`UTfQ6{uHpHFTt!*(^tLffWZrMBx(UMlu42V^RE zA)5tan$dX+a_=7Q&ji9_2&0&E1afhvx;13B%fcO}pT$EW6IQN&lW_DZ0B!?3;ir1n z?N^GL<3uAGAFPKewU@m^naBbN)WThxh96>1krfder9V>-2qsPY zKM??Fv->9k+KzwOrVbK8T2Yht*Iemm=P4271))asihRU9PGC6f@$N2Z`BKXfOfWY2 zOxn5;1_{Rq#=b-pWn+e4AHOhBJ?``qx-{g|8M^PkRk(8{3hO+ZYZ`P}>%mg5*;4CH z-t*N<`k*5eQhaJUdyq=7j@R`x`q9gxY=fw{ExcOWlrkZ^1v3EXlG&-W={)gxLcxue z7z64`{cH}t+1^ph)e|ivk4*4^iYI#N&GG?)MRp8(4-=JIAHtLC3{ zCR@j1bsE9N+dlG!n2a&g8oJ8Y8T5p5SMhP-7U?B5t$r|+)}BM}-$C1D)lxz%MSa5* zMA;%g?(j27P|3~wxNT`*F3^a^8F~~Jvq1SJJ^$)klUt+>vV9B8sq0pJ5 zKzWUEl<^cZh-w%GBADFoSSHbEuso@x4`DWYVoR-U_z7g0KaQ~6$fb}*P(2Tcu(j7` z+q2Ku1+G;qcMkeks=oWME~NhMslDcp^~jCQYURhBnWjEAxdFa`$E3O?*y8?CJleX}5gaBu$hw-xN&`;tEa_}{hbs~g|@$jPft ztb5MucC}J#mao%rT^##dq;q$KyF{j566@u8H>Pd7kMHK?zx)ZjO@$^JWf}^@@D$u5 zVL?~ZLx^lN+lKLI0;8iSLAL1W1q1dd4}t#38N7%c$Qxz)BrB=*Q+IKsfyRrYu+t-- z@CyIJHPJKZM_Iv>2%jvesOUrC4VUP71 z3SE8SfOo)O7jgoV$KwrVZ8PV125_edl>qusQ8(MR+#)pZWWi@`8c$yA%aV^)*IW1k zJnQ?y3<>%3d6SPxVfB=n*UUFs!ILF4VHW)^C7%#pI8a-ft?5iZZ*W+{F@6{2$PM7$ zZpvtoh>|iZ?zixJnUKf7q!WXrRQcP#8SamkQ^$6Vph_CtPzl_`Q zL_BMlx3M8_UKoM`_QUsc#rLSeuHK`U0Kp%1{XM-hdL*c5Vq|!*Q0?BDK;?hsi1_7^)74@oPs@p0Y^Lqz z*6g8GinHao1JwxzgpD(`(M)fLRqD9 zO7&a?m1NGPkPmM_INi%dwxA&$)|QN(2rlBo5b-pt$FE${0KczwPAC@7miYM921s6t zvucy<2ugl3NU%!iA5>G&@y&`hp1q%5Szz0z^U|y$tLhzcc&MvDCS;d^FAV#ZB{Y zi26fndk)?xr5sJ^(5d=0&Gu>dfetAdy8BKZ;_qRq%U`${MX_NJzlwP3$a?+4g75+D zT310T^OcA|ORxWgLQxPdeAf%#e*fm~q>*hc^^V+s7wb&pW^Cmdy?%+@55h8ICT=2i zBWKNGv94{MV@QoAt!E-cH^F_7(4Vl>%6Fc0uQ$pywsJL6tT7>clD(*1d-Y=b`udT= zpWN&B8RFsF4|&Inn$N6cN#Z}aZ}3LE6-5+nJYvvK2LIB*MrF7myvX{LE?5~Zgp(gc zqvRwek5sk}-EM^M^g~Fdoj)(%P5(YUdDcT^1b+O z76JRKwQ2iXyZs#l!MIO`-z8|Sd)p6crJdU)K}fu?@T2f2^6?^C3Qv4R;d4Dzo3D;Y z%OgobF2C?0iq3HT^!}}ZMB4*o=u`OZHooXK+|6Wgz1Ey(K$hJ0yCIdWh6MbBF@M{Z z@-@7I@UMFN=Z26Zf_9daWLS;shD{JTF=G!28Y~f}2ZaRPo9{=m;b% zHEZ`)(a_9Wsq60tFIS%jEUO~Z9E0e~9rLcc;B8!ip0#>w7k#JUS@LFdZUrr}FoLEv> zmUmd)XPdM2wo{Setu2F}`)}ZHnGG(v&}*G6`vXy{etWU*uZg~yhVRO;^$17fSa_|Q zWW^h1N{=nq^fnE^@Gnw40VOFVJ}Hc~UAEp1T~ZUo-ds9i`;_usP~s|a^E`0BOw#ltXg>9G|5O|!ES>SA7wdC@itb9%b| zw-9z{C&%jUaeDITbQS%aJ2!~mL|q{#slmbxSsrez8lpjDcO7sP^4i0ka6TF*DGi9Q zHwoQnz%5nbU{nOgouZ!iVq+}lo3e>})(F+^7JSrHN_Ls6+enJh$WonE?&1kq1VmYx zqxhN#g6l+}?8sMX%2Ga8uFXo{YGc#3*Ap*ETgNnJ*DNn~fQaV=tr~U3K_6EZ@Sms4 zv>&0ZGiJ*s9{j9qwOM1pOol>kgWC=@rF$hSD`c{+7m;nuoaIi>M8m$oZHy>e<86kK)&(J{VQCqU-GSMKro@_CVc ztpPV;d7>PA4B?~P9om{9<_W2(A*jupe*CzS-Rd=%3Nz+^Sm(ooN0qlYOk)w|o(tr- zOx}+t%85(U|KCc;w59VuBDPJYyPsI1+>*lg!hf5ZG*j;_kTn{^#}vELbXq?TNJb}= zY1D?jC|ZRK5Z0DPEC+Ro4~+TOA^0cmZv3IUvX;k9Bpqpb`i4=hNm`#uXY>G*VZI^{ zx@#j&4}i8CfTk?yf<_SW_m*)^!M1C9thspmy>3-t_ji$z&Fe=gCZ#{!n)R}DzkNy! z9mT;(;q94y~{Q^g&LPwTe2#-iUCNv$>m)vO&89xd*k+UgM zYt`s`oKiGnG1c6fc8+=TGhY5+{pYbuA$9B{dY^v!z&qa6!;dN)E=>|%YSLxVX}&tv z9*3T284VwtKK>s&3`MVt6pvPNyrMxt!1BYE#tOwafcjCX@71D@uv2RrL;TO&XGCTn zgK|^TEcXQMGUC5ehfy>$U0z)DSc|$#8llOMM?5Bf7t}k(v#oG4+_$c=_0m-Wyb|_K ziIxAV#8S|9MGTwESI}uCn@(BJ@?K8$rv0yaE)Fe}%f+&V`g}X1kq~N{AqPTNA#_Pq zdzpti@&-~C%o!F0&{c!Di^2ygrFWGbDk`$syc4IHAXT{^opF8rIli|4(3s>C85yP6 zL%px`G*K=L5>twi?OMEC$b0V#d_H{IQ0S%EkhLj9x_I1H>8>dr1l|NgJ*%LF;W_#s z*xPoEAHT4{hMo?LH9Z%!yHN?+nV48u#>w_8^H-ng6}>#blcI}r~Gj` z=(b@5TpTh$s!u;6i$A*XRe1pvUi^sAi%N}S+a?We=S+O>=LEQx+u=t<6U&|`4p1w` zrdzYzLSgx?fycNuc)qc0jIEK-#z&A+fA;h{inC5``rL=`4sJgaOIwcfN8Inr9nO1I4OM|)p?1voXqvt2=kK3IJmf8?R65YstvuoLZ zTx)U|4f7oEfwf2WjmY7guWgpsq}!dW(7{0EnaL_&_T2)a;wTZ?6}vQn+9?Q%7V1aw zLWgIkM{6i}@=s0yJ;Uj~ch5-VD;)&`k0dqZTY6XERA*--H!8`PS6}c;6bkz4mBs1h zB>m?tNNE49ZsApE1gyJ71C`DXBOn|?4vE{VHPDYL)#i{8Sf3fkTSNOclX_lDwMr#y6<(3Dkk5>Yy6D58AT0(eX zkg}|@NtK!Dch$3y*tBvxw-(TX7=BTK47aG$JtLsp!>A-A`~{1~f@+W+ktjHUt7f~= z;_D4X05saqR*ja;pYbTUPV=s)aLAo6pA`Q#n6W_|Wcf`XUW{K`R)bubJ}9e(o}6mY zIk-&Byarg75;GXY99RfiI|n#?nQ9IY!wT#ax&f%Hb-rN=R}+`?bNjrwgLwm32c>N50YLLb}- zm>mBoH|6Wu?qd1XWna+cK={mKDx=r-w^J~OZhU+j5h>a&i&VR|H@d!z>1yY+QD4OB z4BJmqk71WGW(1ljDRN*g)-~^QV7^DjS9$k+= z;8#fjg&+m%Fb#-A|9(EEZ1k~h8ZJ<8=>{NA)Xc|zk=KKNw$U7em`jqXv>N>V75X*s zX7yAw8n4H$uQ7a*WzEsHb%?6DLe8O?pwGlQmc&Q&xy^*<7P=f6Pz)Dy%BpUCpviVR z<=1k3het4a6G9>MlDpvPyY0BPmJ1rTHJPoHFy^W!cOXRUS*_T^&l43%z6}cpgzAW`yog}!ZeB@Cmg}E zQ5+ETb1Ov|_1uode*a8RB6XtR}HsTSA~c7zm6YUyLJsB}!pOH57E z)5q4XMzu+m-_dY4bzuHcWN`U#XH`JGy2;S0W!>3ddfkhAOLjo;g3)TKjn+p+BM6;X z!&5*~=u?ba3mF;n$8$8QUSxKJm^c6LLmcLeq1>US%-(TE_x62{$sK8-9Wz8ZXX399 z1UwAH8OoyeC?F`Q{8_`EO~hp2&-6EM)n_;E_C$M?WwB57mIKMZ+^{s>*lr5{ymXTT zokqD9l05+3G7UCH-H5U7zL&}9)0t#j@|f$M863{iC9br-kY5^kYo>Ki+o`bOo+|DI zC-vLg{&`?4d7e`U4BJo!!A`S1sx|hHcZvEBS*^Cci{Ct>RT9k5OOCwh?I|P zHEKnThDl(7)N>ir1`!Y+s+z(>C18zKu50^s#kdvc?a?iOV@rUNIM)1zU!RF}*5|-o z=WGyB>pCkXOfM?awL!r>-9e*DtkpZ0n0i3PoXz!6-s=T)dBl8&AzeKvEJvz{#|pn= zAZvA$*+`6Am}wkObP?A@wX*q;xC;AX9%-GY2mNwgqG(s=v-aytLO|cM-#$--Z-c6r zk&&gjd#@m+!9`7{p&A!FJ~{#X;#TC!TNP03S~Y?*eiKKp2?&mMkB%v6i!6akVt7YX z44~r)Zp|}nrWuYb{N-`yWRS}xcv$c+msU)P=;!=>)3@3DcRH~7c^fP+sl--8A~dk8 zh|C{|MBp2!oC8E6O&M-Oet|>ue9g){uHbx>GdX$$s}kyO5QO{Bv(o;ZAI%(9v{L=< zxtiX&P?^qdgAmUhn^-kt72LY=Mip};yfjA&ef9iC?1Hqb-1^JklaXdO*FS8vDg3OH38ZcANBc+QMREsfDTwro?&x)u`=d6H#|MEQjg1Pwh1N?!Of}TAPq~8D2 z3}_-;oA2t-<;C;+0t~v6CANLIZA{4Q+@l^MFF&7ZUxpS((kbFHI!7zqD(UJ^N< z!ts#7?AtgYk`a@MP^D)}3k@ye5Pm{K$fC{UUn388$II|9=)Nb)j?USP#X`B|(@7>B z%~$+ju|3a{_iub` z&der0RC>T+mvtKOA; zzDcKX;#f}^TZFG64ag=e+U*yg_v22DluGZ@o|RaKpj%%&-Bmp5e^*{abkHF&Q|0=Z6oz&73Wpvs=23h(~zI&F=-{ ztwzU+NzOV(tFpjh27M_$5KixPUbmaLVe$=aXwmrI-DZ%#=l8}02+)WM+#?EhxPN)F zPo)3~KVKfQggv$p*w@@QzdU|I1=QD2vItE?bu5B{du5jFJri>l=oF?I>-@KHA40am z3}(yjo&zICIFIIxKa|Xck;=41xI%<{V4Sn3^+4}`I>pu28!vdl(8sr2&~~CzrZ{7` z;YJ@uiFAiDZBFhzNZ~qw>60;v#Q935XhJJizmF&*Y<`_@M@=UHK_zCo zC7qA?a649DbxwnA@v;U?$ezl}1b=i>yt(o`1`D36Z?kwBIm+Okt%t?4L^wOEy&$(2 zE^aZ6_1ybiI&Y_0McvbxQ)MXmpS?5cm_8*^Oq-r2=mq)w_YyWU&G zzcgEs{K5vuX}`okJoNZx|JPdt^s}4do)hcU%c&iO`L4nId+=EZv*zym>(8+aqy|Ga z*)q!)nlT+mif;M>ijdzqHC9~6T;W5RyE@~o-HU=oiLX|Wwls;~^~c5G>?aqk*Cuy! zA(oE)n$usVwmp&@SodmZu(V2i}UcVb8qQR`4N&1IDDe z3S?igwScq>syH&inqFq+vm_oqBOe&~4`e^FV^n!~x7;F=q`zs5jO1%&tteMg1;C;6 z+s}%Wbaxs4Uq=&eSYsoIy(Iy9k~XP>&aeH79<$4vDyR+T_khv&UVm%jh)HKOtmJv@mjE%~ECQQu;c#<)J@Tn%FxVgV`4kZn} zHy+6m$Ejx;+4XPqAA+c@m@2USW~F zdI2W=+&ALQUKO@)GLAtWk9pA_h_O!uyV9saI3y_AN)#rqP7r8QL z&}+lfOl)$@{n{HodWZykyfD+>$O`ic-WKj{h-phYH17u@PDa0$_WrYu-z)jZ5f)5f zVTzpnw`L+{oM&ls+ZWT`RlWq!=9enz?Pl<`qlE15buf~b+*p6wjSMT;F!f=KOjYzUAyqI7{Xo{Hq^3y^_`)LCc^d-&Luub14e4kNM;Q z*CdaVpT}>?j&Myz|9=MBJo#I(nV!0*T2I#%R}u=CFni=wTW)aV2YKHt@#MNVX6R`m ztl*?7qo;NGosn`Fkh^xtY)yekP%%T;$<*WO<=|#FPWb(7k5o@F1k;tu^qXk}i3l1W z+p>9rTY5xw{}3g<(}k$_Tqi_{Z_8<=7XJI<{X@I28Ch3RTOHn>!|P8pD={`g)4KVh z?~S8X=y?3bP{$n$^HEa)R1fIYX?`pfIu*IZo{hJ$Vr;{YY`)$B^hQZwkewCIdgAZh4tMKUp$^jiYd zMO?82IuF~0ho@+BZn@t5vgrrxE@5v7e!F@Bg|i|Wf7Hx_nV!U0%FWof&AI3y!Iv(q z$7f-DD4|)=i_6!4Xs~@NN`seSD5isw)q~bs;O6sIp1ojSAUAag7zlmu(7C|-^07o+ zL!;nN-0nLOdqm&HlpvaFJa z4qVU+N7uuQrsp+_pWpH?rz?k{MYfp_gB_7}j@H)f@M9*1pwDxOdV4ZrQ#{Y-l;}o_ z4$d5^Z_AZy1zKqyZ2c?7oE+1Xz|qiWNmNlq#DEv<{nIwmX<|?;{KWui9W|`|g4!Fz zy}j}0kel|J{XJ5TqQbp9dn*f zi-Uxur_UbMHl^ZjBxgZYS)o4zH|8%wu?n3rEhS40k8HP3q-3H6z5;BlR+wJ3@~_1$ zk;c=x9HXaoU#7#l=yF-KU_X)#23=zb@gtl{1hEnmACz*mK|8y@BGY{|M}4H!zr6zq znb>EsnjYKymJg}s_W|}-sS(;qfujpQhWz zOfGy2{2p))i(mJULHetuLB=8nrop>Ov*NSBt^iLnepO1V{y_Z9f}W0(lC}>RClSp~ zaWtz`&>d0&K*(o-l1v^0Fzq9owQRpayGDttPGS9aO%v4rOjFDSDpJ5weJ3T+xb1wjeYk}B^MO8jEvZJpzH>eO$P zO=iRWcC1v{XzUVd@C{s#stTosgYFmZ2&KG8MtoGNk<*m2Dod~VYK|#^!X;0(bOxDR zAiWVr(BrezbyaosRpb5`0H?Bq*?~l7LtG2B{gqg+98l=0kkD}Bd9HUTEZ70i#x*+z z1h8LO4jy+G6ktF5cemBU(4sT%RH;S~~4#8IG&a1~( z4W^^~Iv9ugIN=dc;tx^#=ap4arCMc}VCvj|hQAqmV*VP!`c%d+@G#geJ2~fb^du0$ z+`2&}T-{2?Ut4@&Ftq<(d0WE1P#w0_$PRU&Q>ZeSTwrRCHf-d^Q0`bFxIo>$k)h;} zcJeb@7#Y+PYRQ}F6a1xtviDO9`eONqBrLJg-L#G`VDv}?#O6$DOQAfm&Z6utu9}|V zxVXx&=J8oyQ@5q^;A@AHGRofqA7=mMN+}XxPpZog`+@s47D3O?*>lW~Tt$Y++4cY# z!{mR7_@(U6fzNvU#~gJ=Cj3Kxre%8UrBOY7I_C8)O)H0PM$;WgbA>rE>ye@oGEJwP z9%3@1ono+z-Vwf)4*Y)(EBpu>r zn4)kC6=os(w+e1Z{Hsp@KCwUF&H_>eHjRB_22O>wFJP>W7eW4QN0nW6E-q2O$_?yrCK{o(OOJ2F}4qdlU{hgOb` z>@5!WxMXB4&}rt69gb?Q58O(72Zd#NelmDVBE%Qj1xG|4`OXqihY(4IY8>j}a8M+> z<|2wtFryV(LuFxt?)TJ^g{G-?qz=|b3cqrR^?d^Z*6dQ38s%)6e61MkbttBkCD_9O zAhlmkdbgLG#BLJ#0F3rA=$#JeST~+Nrd-TVc(9o9kOwcTjR+dP1!QuiS?vUQc*^KW z4FC1!yXbOjd6u27e#43W4SV|c7G8}4S;3xHV-Wp{%GPFv{nU+2@AFJ@`Q2Wc>0JQo zzUk7;>JhRH%FA*GntU2-|IH$-w}Rm1=fGc`~|f| zxM?{r<4u&m=|VC^Swekx2^u?0l8`5vU<(0Ahk|)x`9e55KFTx9$E!P`)w$bKakqRi zK{>5|cCNc-m508-DF0NVQ=c_c^&yfb0}@O$HO(!jeOzo-&H)b=^DSXhdo$BD1k_!Q zX>4oz(d$A$z+n(1GQ`8YwA3+wqudnNpZfB}XdlbB*^=D<=_o>cH(F>m%xXLqpDiue z!-rW%igjx-d$>zK_2*hgOt{a3@jfC)1TsH{o8Yg^9mrN!cINm(gu?MJ7u0FvNzsoN zMTmS)s9_(rXX{mzP%Lvp2z`P47?2GH$zv?4(NbFmW3lgV$bjLyW<)P@jLUH6Mce!9 zFYV(W>-^oi5!)pxe7@h!RliLa3Nx#GIasL7s>v7I&id)GC~p66MP2utBiRYV$zv^` z)kr~WH@=AFt5#Ec-|p>(&NHSnL^Qyau-$;~&aIJEebw)t!?*Hv(Y8{}O<%E@XW0Q57Y??x;7 z9Fc%Ai*!JO5-M?=|HTo$CAmDbjw9L_@&LYv+fzhCLqnVxpf^lhyw!p5`@7X}a);h2eZ!2) zkeH$(>N!6@s<*SVuDjAriZ`^wVuo~|$b|GAl0aWB7?&KpC^WsYNy6OY#+I&I?y*mf z*Fq+dnxPSA*X6>=J84v<3WH}SkR{Pz`rQt_q>-WMHXo`kQz1X@#0wCpKXy@FpL#T2 z6v6j_ToxkIR7D%%vn8Dy*W)I+3AqyQ(fMe#*7^Ms+3|8$j+)wa@U#_!qEA{F=D$>z z?+F9C@%!!~kCn#|5MAomf1CDv<0pwcGvxRsU#z1c0P8Z;=N6;xRHR#(wPYf130c@jwV1nCElN{S>Nd-zwfS#A*ea;S$-6r zN)kj71Hoh!95dQlkt!VXYjN%=!QJ}w4|K4;o|h}p(2>@byH>h>-q3o)9HYzv#t)_6CD;#Sn7=(g{cn|aS{-u`3ikzA;6AU2a71Jep;L>XKR<@*Ogry=NzjXTnq{sK@ag# zAmyW&pIH;uFPP9Ke?2+R`>G;Cbc@SISEa1Eslf17Ur9if2>OOi((PQvG2$WAt~L|S zZGUpf^dk?pxQ>=+ED{kxs}K3*qIR>`y&apNBV{X(HT9=fTHVJZd6pRGGZ}L38>B2e z;`~7!sTrk_wO@=n;cK$F#CHiIe>GKeb@2B8`;~t~HG_@0v^s%*C#}%E-br9>UAq}h zj!u|FIs|CTrz=s;4I@c9+G9kL4#b>cIsMS^-oJ1vyrdz*cIsw7+XFn91ptP!>UV5z zh123VZ4mfhD}l7>Y1kSJ{ciBU_XnLLQ)5F=e?C%=4dE$mys6HQSZ&^mq0YYN-$aF) zmEWJT<(~W%zEF|{R${L1{}?@bXmsLQd*@|new1BmF-9$bV2OFYz}Ne-?w~ojuNM%4 z@LIk81No^b?Pta{R*o2%_hD7Oj!NZeOi*75&hRUA{kRZEr~Uv$CSEui4HQ z&eret4%tR}9N(VpN^h(V>r!ldKqm~G-Mtjx6o1?}!kcL(GTtgV{`F=$v?I@LZ~Q;v z(GM!87Wl8y9PzR0V2Zf?AL1;h4~gc_Gpm47fmV~@I5wyDm^J1_)l!ts-U3K;?}C8E zUgfW@4jw8xku0Z)hLr-wA?jQve948Lz#Sx{n+|=oU-vWVQ4gG)!`B& zou~V6qwK_XQ3>D$lLGCtt@vXwd)%P!pC33j=3!^+KJ+!&3MikA|7(H#KkH;rCD~iC z3FSZRWH>_`gsao?XLt8^ys?;GUz*b^QfkDKWQ>+dql)?%Ve^{7a9Lb?#K7&*KQ&CM=_b~zhtW(Zc=_2}d!dko-5=CjE{ zr20YkZY+MY(q*4m&hPsF;_REl>v+3GlQd2mtFdi0O=H_O8YhiyCyjP&+qP}nw(aEZ z@7#mm`Sjf9{x^GO&7SqXYi1dW0%K;lhW}~@5`29KPXhDHp0v6Z^)(^Y%E*AL<`DMz z{=pF#%u)#rw$W7ZN!N7nr*0h<8y(|xcL0$3RtfsWmjSUo0vG!(Kx$!jh{CY5irfxD zOB6cxcM~YXhZV#^xo#AT$)rF<^e~EdR*nAk3qJP=WklF_axk_!7@>`aK<#L@OHb&> zRWlhjMwj3Ll6`ja3mj;}T4ifw@D9G+Nd3m?i$3FC;blf7^y#`(2(9yoIRla5dHnhd zyL?`gt)}8IrX&2(&-U-#-N=8n4*rX{pdwum;1066FY|%aS^>yS=15zv?(^`0l7EhX zVN~sszCbKrPU5cH(nz2BxEUqW%(54|Mlb6C!;RI$P8*#PEhv(X;oi%sUWKsTW3ch0}Se+Su18e_l<}jLnmA zr}z5Yb$FtZSkFSZwQR)-zt z73-@D{p|%tk{2P|#~wV-2ZYnkH&XM8IBLSL3v=5p*{)dqo_ft)3krNjYj?^RNe}GP z9Pgw`j#LM4FbB9d)jI#cME^6DU`hjd>TCR+g~d6=W2qyM@C`;0r93(>^+slsD-CGi zE?)I<(Iu%F^3ebj9t5+)#V+sJaYq_z--&d>_Yd(Q>rP{t#>nHpDOQKKo~L|W%TKT| z8PM+PmM|Xpdc&Gqw~O08S*yaxb!9c%yfFWApNKG2jFJR~pCYq*AH+-d?$jKEvM zB*lGs{7^`wE5K)IPhJbG*qWg>zr8cLOH}=boYF7qiRcDj5Y#6t!?fnae?|L$%qEEl z^vTTB7O&|f*y{oj6O9DhM|T>vAtuoiAoMwqF!)Z$gOIh083%Ajm;rR#xW9-Kl7_JR zxupKF&$A-z3MQ|MuszWE2lL~<6IP}SkN~7GHD`ByQy8;b1 zvBbU(=sAr74QIzi$N7=hGyy2!fff=@ihjCAYF;S3!E_34r zQfDK@zk&+UUA%U&aS=J@e&keFPt{=zmvj<#MJ8PuT5ke7M@2e*A6i09BZWHF8GS_ zwCp}Aja9a(9TMl>BmGE8&#xX2o{7Y3uaRz`ET-!QziaOUfheRuz{ly{k7W*9MahO} z2DrM8sW_^{mcWv1LSpD%bXR@^wKF1{@uuz%z;Ee5r)*UdKZJ1YEd<2@*OJ>Qp;buG z4gG#=zU9;m8zv?=SV*oNfAT#-A%giZMWjA~y8bMNXOdcTjEm+qUy0}v;=p@VKH!_s zR%%AnjY6Du!Zzw2;+1h$0wd>NjSR~9%$3gLrxJUF~42PoL zS1*R3+NB+~cW;fW2?(9Nyn?VWL6b1V`tbY@S9}wmk6Gc~idb@HEk(eu@i?WPCRx{P zHE@4~Y+!>`t`_&Pe<~HVB8^zJ%xM01#u3J%z%zeaVeBI)Q=5RGK?%I_939v_2{Vm;I^-%Pu7S2Px04w;usfwLY(IZt@X{*?&=^n`|4T~)UgO8bfUpcT1f430?; zly@d=oSaQW1lHKcy(pvi9bBVztk)=eD^sNA(!cWcI(qOv^+oOqNxs4))2G*G{xrl9 zUm$;7K>*uH#$=fJ>2T!J)WqQuEo`9(p<|r_tDZ0lT_**urQAX_s* z0I#*XHp^JaOWwC)xu@{iQ515L1$boZAipJrKn$h5Z9k%fwB4U#g>HIl`!0Qpkl)a? zc#rTpL(Tk#GH7srYN#o!o05;3|Es)`RY(+JEJacjfmO0p)rf=#hUw{r%)MlIDqZ3= zCeWkZFO>G4?~=aZQ+?!J$8me-+wMAH<72hquISgh}W+X7HX> zL3|#xnFK3#yx0#BhSOoZmbWG@px)x{Ho6^IwU(t9Sxf$^Fk98R@{!L3Jej;dU<1?L{7x>F9^?f>XL$L)@G|d>Mg_ zYX2dcymi42e(1;$eiyp^a^ZLk)t#Mj=~DGbmy=$01I^I7XAN9pPy0C&r#W&nhofhVrD! zKKC=LSG!}MEL$%ooutv0_sBxct?Mefr<5N^-&;rkUKL?r1K>Ux8H9pjaj=+p_7*w; zb1(>OO^pRCl{Y3-ymJLVGRa%xg04yyC>bWZ57_J3@Gw5DmE0Ql8R zkPHwlH97BK3e;Vyj`O-Y0b~A&$k-=AehN4AHh9g4P6v&7P0-DQqeYc@mBBbUoHJ_( z(}SYceJ*6}HLx}XJ|nG?&=Gh1LILyF-~&5osvRw(FtfS&a|r8Du7ov`bZ*+TLI<`? z-zh^}9jqw*&N&q1;5c3_rWR8NSe8H|1p=^iv2XQkEd`~ijwS8+npmRX`78r$GXP^G z0igTci4I{8qE$(=N`+EeD0-Jm0U8ImY}RhSDKAj>q_L*k>^Yq1ClIF@=#uusT+an> zhliVxKb8wej;4ZH{`*i8P|58I0CA1!4~;F*3>)(G2VhP>)I@#BzUQ=G5WwB6GXNiw=J~~` zqvm2oNf)SO>go_z=O1Z+wM1}~xb}yCt3sWm3%rAk_`ZqvWrCRYLjmat1}i-&YTO+n z`ZvOGuJLv#6aSMX&I!rH?22g7P(Ks*WbMA1JzK<0#7#ST9Gw=)MZf%dY0; zz|P~Nz*G_jQ5_V~`!_zff1 zOwd;{JIyAA%4Vk5sIAS#*A0~ssj{pI(TjeIoI1|6bz4vHH+NOuctFSF!Qx zF=UmCPiaudPDO;_S-8PZj8YWqeoUK7zpy1?@Q(!}?PxSU`aH}7!g%)ZBmLnZF4|>2 zw1#SY2|#rqJIs`ff1JKNbOX_kP}*?^k*U=6Q^X@9af1UdS6st|_}!!mAG`7X5~w4n z(S$Iu@h=(w5r-}A(_HqQJ$lm!6z9by#auEgaqKLjR#nM4)ItaJD_N(gObWEkOJ7{z z(rW1b`O3cQj!=pp+801tJCS@EX?R8d?P8l}iF@HIsxD3a%sZD(A*Ug{W88sh8GCzt zR58?%HSZv1bnwM>@& z-%#0JxfW!i2B1?p$;5O$A$K3uPve98b653Ot{xzdCvuHMW%T7WLL)l(@ayr6mK*FW z1wk8Phl1VRh+p~gQ84NH9;2`C(IUDgfB3sjVyX|1_4fLM*)oie>bIIR7U@E>^Ozc$ z8FI{YyG>+2aV?a!_)wH*;H+Focp~KU1Zz6f(ccOdC%Hq8>d^Ms&EE&}FQ~6J%L`6k zmE4MP3*@y35A~j96D9pzsL^$t*(byciza6`5>sQFL#1g@UK&$AeJ(E|ba3-^7^#_~ z;t4u9w)u(Asf9hN@XG@bCJG#Q=|JhD=|j=LwG1P!Pyex2blO6pwa;rWp?-K*PkKvm zhkMENXuarb;E+LvA>e6MhXvp9ue@^q*C;%R;sbBDemkzRdUq0P@Ob1VTss0PO=(1O zZr^4!FG1>#ztlXp7gYaoIHDMm+QK0+ySK$DshEFk66Y*ZPr)Q$ihk@C(m2w;q+rmS zQA%&4pm7u2$Y$8=U(tr_$t)>$uO7P(tgrWS9^%`8d*1G#rZPAHVbBCT=7eWPX}nIY z2)nHCZMZ`M9IGe^1-kiZz3h+?(2E*(DkYgWQJJlV-Q_=@He?yCu0?WG;fcJV6fzsg zE`>t{S2w$ASFO~(3mO^DeZh-p)X=({i>2M2$6t)pJoZ|7s#@dQn1%GyiyaK`DAR5R zA-KpN|5l)v(5y;vSscm3Ls>A65mk^f(VSOG*eCbiSoCO7D=9kj)^K8iD$c5g7ujp#s>_tl>TtDzZ9@jK@Bv}0e9CKP{y zad9a7uVOLwmc=OcSckyX+NoK-jaCRTtUTZ7mq>{X&F^GoPQp{K`@6@W*_G``CGqu% zCK97R0y8d?hTXG!k!GJp#5~X8+3}cSw#{GXU5$xbg-JNG!Ums!&yE{`yfl$}E$0dux2Nu@t1G?tg7oSoM+BADdgJl&<=l_;ME_ zqabo5Db5M|8%CZT%mM?aQE;0o4c(dt=q-E3cX1mGs!@)}37YY}_MA$XL2UEXyLFSk zJ`c;@RLC2hI^@&R@%FV@tg1P&jnu(|acyB(SB8;Od-Xo)?(Q_f>mOX~i!p5kzh+R? znwmjwc^Jp8TP6^RysMMjq6!a9wVFQQOYBLwMc2>3R(z^H%-n+5Zglh>Y{GRg)H=?I zF{TH;DHi3@8x{OvjRGdfK81%iQy)Bj530nRI=LP3m>K@lhM5z&A7^l7UaJ)A5|ev* zYR8(;tT|zjNdNj@+VHS4AbS<6s^5Lb66eZ3tn zq22t~?u5VjFX)M?oC&I&JKuBGQHOJ0AhW(8zu{tmnm|J*_9un}$Mn4#N`mQj?0&|j z*m!~+)`(^DXjR+LkH3N2 zCtAx7tyv=;>dj;^)&tkZPgE_mMRW6F?_yM=M8>wUaqll>2*$m>YFZv@hH2Nns=n;W(k!*{|+*Ee_-C~ z_Sn_7sG9BYxtf&FkSGBaJ?KYPG6)9cXl45|>~Y4)BHz>YGPjm7rVTR$(CAHqQD~*= zu>N+k+C=pOeOg0&*XZcImXRtDLxwX!@9}i>swVUdu{Z8panrpUQ$=Ex)pI5c;?1U( zD|q1$(p;N(7v(taB(Qi(vJMZ;A7zM{J)X9yp93TI{_Iw$%M3TK%s%j-Bq)hsU`)0v zX-7*cO|wXi?-ZjXNPx1G)te|zx1nLKASQB1K{`bH@#WWkYtOG6`e-9Ns2UB`#;`rF zWa+++Xx8uMxdYPg5+U7-44}!@pJi%uEzuVDXGST5psVKWRLPnSC|W(Q_MF6lW!u7( zq@y3hX8C*NATHLxnn>}gx&Rf}=}cwC9;WOl30>@aubpzP@F$#RH%y4*ra!JLkikTr zVAaMFaVN;W>^vSFC$!|qzM8@~V9aJ~sOZeiNR=H%TxY z8G}h=>E}&s&b@>7Ia9ncYDcO>_PgTn8|36+;i?T8gQJf{D))i987$+mw(nq7JKv{E zRv*G#)tciDFpqB!8o;FR7j$OBgqFVMU0QIyN*MkK9H@!nOc3!@RLuldr*Q}^MHA7U z97e${F3?`rEBa1u(z2^t;FM2~)=cO{SB*51h|1RdJfytES;4B|ry*U@a>!)Ia9Efd z!K5$olws)Go8A`7+Z1w4CkT9%WPL_im>`UTf-!*iNgR&tQdjMzM#6M+`Ps*ZCS$m?v8=hWT6FruF?{NUVoCbr1LK^F%-TIoL9~2~se0ty2LldXMt4>(6swB97;EUyM>j z8|GKnoY(c@q{3q`;+d!ut@NPVu7N}YvXZ`ikk2t^r7hJl3a-*8Yv@1{*tZ8(R_#^37m7{+>mugO>tTGOw1ViaLh2yA0xl{kj`5_vykFVtI z0=@W-%x*v73vBgAPb7_6=OR%T+J-5P+}O9%b=2bELoH7r1kkE(QI#n1M!7VP;$~Ud z?%JUzztPzPe+=o)$taPsLcuXFo(6iJl84-*bB?$b)^ABwQ9wO~R&n_ZYs_SRnp3Pv zZG^%8_Qkr^^Dz!(=)F_Jqhht1NaCjN0d6vNw>Xm;i%fq(K^}IX(}Q9gPj0QqMi@4} z80q)3NwY}}{$ibMu;b793^u!nj~jn%SB8>+0KXhPiW8jF$lz| zYf#|jn1GH;>FXIgn&=9{ocxec!j-uzTIA#IjezvjKLjIi)l{N%tRZ{fw1;2&gr~_V zywTZ--rwH^Y)!y-@KH-|Ej4LBl! zs0Xzy?vuoFr^prd*`ZVX=1~gtIKmG4AAesW`qvML5iBB-&w+KSI2XdTvQA$5@^LZ~ ziXIiSYtJ*ccjE;71=uV34QEJpvi3No?%HsR^X6dd_o?Gt0V72nHF(|PYI%vQY6VMn z`_z2bEVOW&M_@k@-As0LiiJn5n@$IItv+$!m}{g#Bf`l(rKBXHpj}PX3ww~n+gt4k zgC}fLVFG8 z+MK3-d-7|!KmUjY+MIgXsyBqA?k+D>hFW6z73~A&@bIqju!fd>ivqNAGKUEk39T%m z#S6^|WFdV7aZ&rnoaz?Inuo1blw;|aMHtcfP;=wpita1b8ID^zysv;{%C^QR^L$H7 zB4RR-UDGT_3p2xv+NNRVO?4te9W_dW`0OG+buXg-%(NLPF-Hq?F_bsdLQ0E;g0(On zMT*{uBKpPFu1%WypzlINEK~0$Y6}C)prDyQPf2JEx&Is=l9Mxdlp7n;EULuSZ_nZi zeO^)v+by_bBV)8!Zr4{16;m+}W6!-x@FgasY|V%~Twc-dJ%z2_1}`I3k?*}?frgKk zyLv@?K>gOptBS3YFkSu1e3UqK1lyI~NUg$S{CO3RiDc6t~l|=2s>Yb&r}> zglK?)u}kQ%zmG5|ls!V>sPyfzdd)*44D$5SQ;f1X-eItFQp2%-#&$;3XZWEA$^-Ws z@+uh?Po8~QHOjImvT9L(ml&9c@PXUgJ>Zx1#!bYrRz zfkDfb6>=Y$>(8kFDI_3*{~4@~6s-;e(9T(Bsff-z)7_f0fYY?sd2qRG>If z%-Bx+lW}M|Vb(NLi6s=&^fIr~_`Ds97P+`9qi>!dCo&M5IqegMXvai40mm}T=Iy=C z%u5I+8JsY64SBMr*-?nLBbeSpIAgsNLMYXg-;R_Q*m9h+s8F%M7Y*AaL*Eg7r20yQbYjp^RMZr_YoTTeWPOXEhkkVGdjp@!XNl&hqvCU+c$f)qAL>%5p2Bd2LM*;m`WdsP>qR7xv=SDT z&kmpWoLoESlt;~x=@O$=^A?)RY%&p2`+eSFcazu+>O}lf%Nb~dp$?Lc{Be5OEIJ_? zfyI-VB8T*>?HR_UUd5kjK_rX~R)Rm1ozhnWMPi` zMTKG%*rLsJX5E$?>l`_rv+=2ayCSLQ&dN+-_`rT8zmQD_D-kzlZ1+t(cJsx;l+PRx zU%92TY9dS*? zjQm~r*+Q%W+CZ>pJ5#x=zZwQi*Lp;CqQ20B$vE+kkLPCWMSv#Ow%9G7S?XQlC3gN0 zz)XwGzq$;G&gczV-Ns)4KbYO$r<7JS6*TYOxsED`3tBw1ZfR*h)=b`PQT)f@#_|Uw z-Xm32oOQb}EhdTWJij^Xm}LhZeK_zCy{!GBn-;*U>5AlUpxOnYZ z?$%;?wM(*VE(n?*ntqeRH2sj>_lir7(I@4tJ`oOiLoHDKh|@1eIU(k2y!7E=(*A4^ zYV40-38~Da@Gyx;lDE9nd;=)s{=rnM@_pSdIAPycTTCqDcK^5d|GQs4sNj1zZeYBh z22Qz`+X&4p>U(f8$$od8>41(Uh~y#5w>wniO`!+4o+Pa^Nuj5aFienS-rn=-Z-CfW zKCd_V`ufVyHFQ$X&5bTZC=heemqB-c373pX{;cFB5^=Afpzr60ELp@)M+ImHv*$1e zd`qYye@G-48Tt>1XKkszYjxs`%2P-{s}ppM2w=mHa--wR?^B)tTwLhq>0qMvPlh4C zvq*BV7Ex#OTWztQ&Vu;t0U?iuu%Ts5ZiVAegW@{A0Fzqw#2-H-hHehr$SG?U1v{tZLxM$*IhN2g<4B7ne_Py;Ub{k{SNE(^<*&CV(x-4E@av z-)^o}Wv5K{qS(ghF96NH{H73+VLy1sA7Py5RW!@rIKCBRjzK~{cp#Xc8*cN z^3>nc{)+14j}O4XL9{hzn=VPeh(DahGPwJ^m;_4-#eefenkdh#Sd7;y>4k2Ca1BsKUH4({A#p7 zGbhu7-OouOiPyRq^`|i3NS3T*IQ>okgWR$9>I_s&$!cML9^!DXaJiv1`4VxP-dFn^ z0E(z?k6Y1j@5LNgSOi$Mehw;Fs>CnU-SnbA(-uXGb}!w#;t{7N1DXd5UWbRFLe#>% zaEw+qz~Fx&0n0snw*G}u?Vr2y9`zp51?<=qyEh?2+8!UVQxgs8#*b6fV_}mu)v0MP z<{88|Lfb4*mV6t~{LzK^qmApdTOzGpc^PI4fNdRGDEA#61|$=hYRy#e_Xz&>!(b@l zn4F{LyiI@7@^B|j{0(&^=QggaVoNyZ;}T84DOVFPFi5wMGu z66$~!7kWc=rAJPt+qV!3h{8lZ!XXT<_h02*pu%{z6HtxE`rNahkMTJ5_SJ7JW$t*! zn89d~ZNax&ye;YfF&}^VhMwmfa+WE;Kpx2JWUjfAAcF%HLWm#rjeeY2aVCO8 z1girD72qX4L`DKRCLwMO?B_y0A35-^_{A@)a>qt0IzniWF=Y9J(FgiHkqA!mLCpNI z)f1Me67c45Ruma=H<&+%c`}|(LKM{s_h;0##V?Y9FBk#PR}f&55y*A;2!O`in}&q3 zjRTE7wENy;bErD^dC`^S3t;!o(HNUm6U(tKoS;mCyMzP=jR8Xjx))RUHvml{&nM(* zu|AS$;SP^iE5P7J@tyEcg7Bsr8UIRC^3`yb>SSN1iz{D_G&Txec~Cm3dVv0Nfh>9l zwN-(F`1=M6=asLHw82h{R)d&>BKnl&Uk9%GU(Q#ozzu$4+2i(e>&LjBp?cUlLI2LL zpT~-{UJtRJ)DjtD^Jj8EqFcg4ox;;3d`NG9{J?hsby%5E)HCQd?nr-i971XuTTrm(mGh?te zw~jzDTHx5 zC3H*n&-C!`l_r3q5O2lXabqIqAu&o{y~K0ba~(*S$Z=6g`QdLmzLWy7GUdOeqJ6UPG6}-X7o;yPI4$tpUhfD>cCQ~{R_Cq85 z!H4tX7#4?p20{+&hoToeDWii%;Lg{g5(MbL&V0wotkhT*H{JtV+|1_mv(1+|^J!X^ z&j|y`A-7DuYLge!HlqquySBd!Uj zi20b3wV`>|Dkgzje9_r^c(K5welYVc28WsoQ-ZhzLe;41faJ z*5^aoL|fbNl5NKRguc;PMj~=}TO5=~xU)7-EPKko#UyNhDTpD5f)L1&hS_0jzgs=t zlO_}+`UtF;X?!Jo_oDyhb{KJDE|wVI*f?OU)T}}^(|jv|mn`NT%8muCK#+gu)!c+N z(tM|+Gx9?k!$B5c)J{NJ{i9a~$u195h5w=8@hqp)p!bXVtfcORisY;p#PO{apx+qM zb`C6}oN34(D%u1bn+CxO!S_W@&Jhav0{}?o@E;)!pmrG1u$*l9PaD(;5mRb0~%f zvdr)9vV9!emZX((qDheBOJX)@&8j&R=}+Kr2NCns1ZEyrPzJ9g-x<4^!Z#EID>sN+ zcH?4Ba8kpfh(@0RrO7YvqNf4WjK|NGw69yN%!mg&w~bLbw-)=37HML=)pf`+0ldii zX_6{?l$Zf!*sz^r0*C#sN6k-Y7*^B8UL*D*34cl^)=ow128r*T;at>E)poVtDHa>$4e)Jj>D$jY8` zzrC-xHSe?t(HiIUH@am=5;M{MbALZRNw2p&pjBUfL+o*TArHSG=KY97a9aR7YYVEp zB-G-&0-~;AGWB-cJRV*v?j`lJY-YevkP~@_AT67Hjx!k;sum%-JpL}5=KMb7o==3B z2d@g_qJO?=!OzZYuYA)I?saFW;fn42n?{g2-8sYTMO!}5ddP@>G2it_Vt>}2b$wUh zI_)7X&ojZKD-S$5Q;y(!>HZp68>0x(t2DPG3QT`r^vPlrM{D6`S!T7DJ3TYYgx6lr@oD$(9u(gwB@q?~q_|bY`Rq^24QfEH6 zVq?6)+X+|MX5l3L%AL&>s|t!MgWu0|YX)`%G%ww}xb&80z(CSLG&{rS&25!&E|2#* zG8O*4+Y#|fiRM*L7n-Mxl7814?XSI%2-ZAaZq%@kO<~KTRKEH;cIm!xlhny9xiKT( z=MG${Id-X~ka6w^P<#7ndoy~2qa-*s)|(b6UQ)86Tm3~IH?P_wsJ8wV{akd4fA5iW z6!i&NPSM?jd9IZ7k#{aSEQ}p>*@t(cn8{lg5(uk3f=HI;2RtJM{7`TI3Fp_O0xZ%* zi}89372Afbks$zeor5M5r81#3{PX9fN4NtzURjPEtH}98x7v(P4KOPLW;RO!2+>Q7 z%p^VaE};A&xItS>pbx&=WRSakA_3@r{%poSFN;Ibfkvy*tQ2xY zt4R;B2whu%v(t{e%sJH1>KB1XZ^Qh?j7OzsM^hOe*EjIx{+_n|qKsS?#8bZZjRBCE zCT_?gK}Cihd*AxyMh7)lt4|)x&BpyS6R_b1byF!S*l~^_R(H+M>7+G|AxZ{_?+_RO zR`5To5U<cQ_)Y(xBl5(0H5@GQJrzL;?gnKT_y#@Un>2j=EgV8@Wtsh)&`s@v;qb&R@3!esn+`w0i?a_6+Yw z$keP9IYDKmj`Ss@Q(g#TydM7;EbAmSsj7gF*C2CjGqFZ(^=ot3=qti~Dv) z0~HPo+Oggk1M|eS{wQ5(SW|r@S2QtV?HS6+c*3>Z*#*}8quA3MLY_%(6#rpyR_1;q zF;)E>54&3#uJV~pAE%@Q8|2j}0EK@UbN*&Uoe^!VhbB?qAhVduWvHp5!Va`|-zAkw z+t<7pot<5-C;gr>K1;14jl;rxOn#5DUYxziHlprAS=NnBd)(b&^mdLBy{jEu99x}V zOx8~MG8I>~ce+3J(2uo#C>VfWd?azvfTUtz(riHC>eu|n#*@!#sWHeS=p4xvGoqaM8 z;x-nAyldKFh6Ab)+J~9xV!oY}9q;{7;BSY?L<>G^hAM`=o}Z6No$0coS9~6?FfxX( z?X3+jt-*acfII4P)rFvzn&B_bif(RtJ6Dy@>H1rJVy7aZ`tJB!07TYd8g>48PP0_z ziomk^eG{mB1#_XowOZC#I%I|W!uiP{ubj2*;jIa!W=|wA38~0RteSrE@$Xy)|DDbM zALRpl>BvZjDVx00O47E8^w1vqng(9$<|CNM`Vb7~`OJ_tDr!5D7NPY-VC@ZAO+k(H zq$?=QfvIj3{G8?1d4(gNR(a0nJN1I=C_s&S2BI}QjCk=a9M4j zv_eB#xL@cFNG5!;J}TBYKRn>9n`*4E_GEZ>f!7-JsBNSk6O=gm^e;;g~1C5egTartwfyrjV?w5 zln#xto1R;gWfG}DroG`d;s;e`YHXeyElWdpLJBuFT&=|O0_1J(dJmf>`VJJ@y4uRR zYuuio&9th{UaoG?J5>*QJvu%{<^FI@M0U_B+~2IW}q2k!h94 zsDt_Si!o9I*NTsREY`7XjdAMekN-=P{E?)gDIS_fj>mOM93Mcc@GQ}yH-Sr;YC5_482JEw)( zlCZN-jx%iR{C()7p)Jr6ecewt+MOJeaMX*xV02smB>4;$XlJ{(y5iY*tu3&)et@|PdTWJbbJT%ljp$MC1(^1&(Pcc3v|0red5+OPw$A1>mVwAQcTp`=*tNxC3Qc}p) z3N<@FkA942N?djXK{ZpI|0MOVj`EB~tGc{KYJ*P|XQFd)(%ji=U{B%OK}H_9U)8w3 z3Ar7s_g>y@IStc)FHTU@C|A!d-1aFq?RSKLoe1pJpVLidVlMADCvlX@{UG>g7Uhf~ zYqug0W?JRj02}E?5K`D!O$ex?tIVI`Vn7{)RE`w@?Y^r1T>X-qlIp=yv1j*b@MEO3 zSld~a6LVuPtoyg35vExpVKEu|14MB15=FMAZM}i;Io_6J%Y3%3Q+-ve82$JteW;gQ zMyq@IdlgA{nv&ED3hquDp-XIsQ1~K6+&;#Zr9PX-&j3QdwF%82g|f_4f29{`W?*-i z1@0x^8jDo>1e5?AXZy_d;>ng*mr}c(h5l!K`PdV*nWj*=(B>l9@MEx{MR)CB~%Q zYuOhd9sbjr%Kz5d?)kPpYn>Ucz8)J3M#_}#Fk{C&ix5G87Tuqs6YaB02W3UPmi@?%sKnMB2q8MROZ2=&CEVf2Zf zc`wf<&dx3@Yf|AXV>UgsSbiotZ#+*-1iAtf0~#(83J$#=-AxFtFvLxz>m?N*^jkeG z;#5m9m+*4;oUCL=Gc}e?=tfY+`b~Oa|>!yy)sIY`S*%M6?eFF&+b%XCCSfA zXt>#w;P28Rj+XEx)&yneohl?7b1Oa?6lZCD`fWicrFlKG!e%l$Y@rPPE5=Km9qi`Q zs?tM%NB8onlX7P{&v(Zn{3|@O1+S<%xz9vZiEi)m4mP}ycG#f}lJUDoXD6bpK}D@$ zGsqh+Oa&5rD$gv(uURiOiH|vMppfO2?#C#EQjyy8p1hzPvxxe&UPfcz?F!zcA>d2M zF!EsWiVP#pDzlt@<+weH8YJ$uoxxNW6`;Gs(n!YneXMIzd*#b|d6r1D%OSky5r#PRD!vcDz;>or`~mhJU^%dp}=&9nmN*uD}KZW^A)eA$7~zKX@!H$KOfr~$eh zj;vejMbDKzzjb=&^Ja7f)h>~DyR*GzbqW*GcOD$v%R55O>OQNSDz-YN-Np0Jz)aim z&IFC1SgL82KwQp0K2b(d_e>bQedyAwd-+{@sminToO}5{uvJh@KRH$Kj9chT{Akn$ zx<@*+83TE>T~Jn=b-%E|mvPQI79C=C9+$f#ZUVuUd(l!DXm;N7nND!Ve6DjV*iqZJWN4sST)d z9bn?B_)^Lm{O=#q$LuSPz)lTcxK#??Y~sMsvOpjx`9NXieExdqhyqYCjQ;S{8>HU~ zW5@^y59$;nV?9Ro>UoEL z-PKT%EFGIil-O!XZ*!&L%!k;QcZ8Ym^ngsd#_dt5oS&(WpqBUu!xw(h?pJL#0r7W+InzvR5kc9KZ>-D%9eLUr)p`#mcpOKBhj3JywF z8~95r4u2wy*fEUFrSv1N-h>LBm6D0AL(IP-nw#-|sCZwt&KPtb zPV`O{Hr9%}&4c-@RQ?PS-@N;R{4lj!B!dIu0C>E$>OWp$D!=-o#1BFREl(Httw%;u z_XhnC^mrr7ZRtGb5jNnxQth-in`A--?&6)Pr{hh6hB6D5i%?)km?D45f367e^#!D) zlc5}h>kZ_pHx>C|1tkDo+yahSiGqSiYDSI@QR#i~Q_xZN*iUb9Q~urA3|T)1w{wjo z#yAQ5$U3$Hp<}8=)-?a6LDg8noq%fbOXjEIgRB=6OJVMdwSro1l^o5K-22qK1`&*v z;G1q3vfkG>4Ev(yTxp4|G23vjhq8skrV;1TAx5b`77?hznAe*Zehz9R^_%JMao?{t z@J2)rRh3|xRG!SQ>nC`6rBgYoKL~#Vz#tohenyJNuBiw<+wwv{2eR_pp;A+#*4j(PgGwM8XNk$m!kJiuXPxT^=Fw0d^TmQ?v)3NbNyB38J)4Tg+Z~xC{hg3b@|2( zFEqZcV&z^@{A`%+0tt$%9U>e1l0H}^1+B0NlIML-j^M~FpU zsFY`SIDcR&u2Lsr{EqjPcx=V!p{V(5 zX_i+fn#ndqy!E_+U!4HRJglFciVViOxy7>Lamll}+;K@;so|V-WCXQMmPQBLWmpYm zqFMwsT2Hnx45QCx4#Icm25}f%>aIK0(W?fn-gc<@;0FQFuHt;ge>wMB?8I!!Bo!+jXOzpYRE3N)!k*;;PpK9_xtvsWaPrH+?8ha_R*b02NAD3_EPG>N482Y&kB zC=&{SV|5`$f9baT-wgM^0sa>oM$6(G#n5}jqz(f;Q7}4_|LEZ{aGYpAVR@IzIyEcC3C7MjyR17>qWYdB1(G zv#;y@ef#X}zt8#GnCqEU?zNtKt@W&j++S&5;RVkAw{iSG4i=Ea(R$BsK;m}6=kHYZ z@EPVn((CWIss7`;{#%ud{=ubab(rnR@=^J3|NbAYLH`PKpzkjqS_J)_MD=PhHurzx z5dXgu{BJb<|3xPl&1X5dZGb|4^q1ascio76HUcV$SOU_*-|5(7E1L>^D?m%u+|^|X zB`>b}{S8#p(>-->bE(Q+%SSSN7a@f8mYq9zLwW4-lJ733l0H zRi&ON>oymT$I@1KhZdZ2NWlIZKnl3Rj2hg7{{BN;=En_zT=$)^jK0Cztt;}&dHGj} zIjNnk40>+0f5ru9e)!tAph~FYltq;}K=EXL(l5tNFO5y@e+_Q`Ge$TP{Bw*(O2=%% za$Ud444Wu5OeDpu6S&{|fAUM7U!5&VmH#C$kyznlf`d?SPN$gq-<&b~T{XG!J?Jd0 z=^@?U$o4)yKQ0Da)7sTcY5p#@XV3lbumpWs?1ZX%(6fyEIMLGn) zh}6RWdqdD)>Wl=FQ99tuhI##^NG-T9BCVF}T#))po&BG?fz`x5D(3&Op?Be=m>pG( z?AJ@hqyrxSWLEay{+F_T$M=s9{iHQMq`|#;^itUIUW@nHiBQ_aKhoy64p?0^#k|wY zRb0#|aOL+|TRX?lQ`Er6PNlP}OW^9f{(o4lRU;Oy1Ny_j&4IMNO`~XA`hSy4jTT~+ za!waEE2U#4Yrn&dl+(u<9XdgwwD9g1^@i7mC}9EW)I<)&KWj0 zloy(sQ-y_vtt%a}lrG6Bg8yZh{7(0$Se5ps%W6h8fb{uc@jTc6p}qhzmR8COj+084 zg0!60SUS5M5}Bg-JUS5EYjCjb&E4J75B61hYCzP zk+7h9%m;z23gG9Y47Q2duFX>$2?-7-`)n9tCW_-2)&|P|@BQ#=0mjTTX>Mc!m{=S? z1)h6rjMWMXepck(@id_yP8SKHvfpNwx;fXYyggd!5PnT7P-q;84=i%ibmSHjOAnAz z4!O(u3jPYLTD`ecFeogwJu+^YBGU}Gr^%gN+&^0^lV_`qi<;|im@7A|cVE&g>#?@K zuQ{M*xOMuq(Syz?tGq%Db_o;*b37qAB71n=*oIuvuXKWx>=k*RTTg`CkpN$ssYnp$IG}#I)c8r>k&!EaK{iUkZkb?vzK+YZqEUgMlU5Q? zh`UFCAGMZh)3~A|b^i(V+kMRT^+9NfoW$J68fn+h{N-_OO|CopRZ1E+>Hve?!CG~qf^iTdP0R+rct{sC0+`RNVdd2O=ik{9;`8ftHKmtCd&^T{ zuxq+<#7#aku|X7p#Nu~Dc)}}AM(Ut(Z=5=30>j2%m?dNgs$0C=%ve)X)2GzbQ%7N; zz#oaEZ@4_<4s9!Yj+UMkhlX9^bKIBJExMsn%n*E5DLeO`&1I1A-}uOH^A8dZthBh2 ziQLVE*=6~LEaDc7N(HXPEN_5YG`yZ(%IP0eRz^+T#B_x-h2}6S*h!pCIX~r1C`@FSsB#?> zrpS0W$zSn_YE5Ct@LdMO?hWSsSJU2uVpi4clf1@0RRMXC3-VE$-jc5^UZXbKCDy=Z z3FOeu^jm<|cZSRIKp8)>T5$A71DMXt`)pIF*$AtWKl8-TiHwuF0n^93o6KwJrEX_!{>F3r-}i{a6ZX_&;CGef8~)@)0kigLmolU!?dbS5UhBb)McTs zzp>sa!u6uQyFc?hy1gsiA_Hl2^#h{A%q$stJd%_yb8LXDfE%>f0uo)Gq-Yox=6g5h zxLYjZi_SqsmkGuCAIDW+9=xm7V%)*tm|~f4wg&J;4M|610W=`LqTE7HaTq zy{&(--P6%8R-<@(1BjrGXLVbr^0S(kA+>ZptVX6=+=H$pQVD%@QRLYq`$FkaayUs) zTh`u;;w{UnatS#2`Lk8@-P}=_XHBeM&*6eWW>xKGyjo&MLm+B(pt@%P|KHB??Z>-^ zlY982KbDbImpL3d&0koSeD~~1FFJfqc#i^AUI9~63zF0ZirpxkdwqR)?a!&2g&bI@ zM#Q+WG^P*vRMtKDo_*gPy>B@%y!u5gmaJF1DG#`iC9WUxDdX)gm8`u{0Zfxcv`^Wc zc2Psg)s!F+?um1g+&Dh4@+aJJs@XywAhawGPPX2Cn$}XvYJQ3bru-UEI&m~G zQ*mg4|EBv@naX!uL|*W{18;g*1PkJekl4GgEP&y?2P4<_h1#C5S(d<8` zB#;^KBc%Uvqnha5$OszeU_b3>HTr!46T})%SWou8roM#e^_`>f-Tm}8V!v>A6%`as zY$jv~7D^z0e9julSk)_lGbQ9OR;#;~8ic~ZDl5kkYDlO-SYx%ct~~JR$BzY1$;q{Q zUVfxsgT!uI@fUKnfqJahzZ|wEiFu6rot1FWTaVf1ewcRRGbo$Ir|6Q3h#hDuDZbo$ zXR{>w2^6VJ>ldL?ja2;%_;scThbZ#e%hP^0*@3muII4*}nzrzZir>^)((hVjN|fPf zsyHb=c}dE+Sm0=-hZS4oX{uzTIkfoGf#varu-n7=I`daO59esx(?v=uPt7%w>5^Tz z)vF}kCivHNfuC&F%NzLW$WfMya@+OAU27*Vgi&E#aS3Y~=Otywlp;d|*C>0yLTvcNXU=#N~m*Kw$(VrpEYFK>N8{!@f`ltrHFkw<28r`pi0mc#ULZc z=2jh5H%WC(x4sKM5t;D^M6y81352HIX;J{i+gg%&@*DgCln8+<$-Y5QI<2DrD!uox z;S)A{27a9Wyx`~2%b+b+c2AR+t4hJo4|tB{UWn;QFvOzI4cL3d4hC=f$}WuIatn(+ zdqT97P2C3n3WJ#I-+R5*myC~gB0>~4|J+{UW@ZTBF*1(dmDpIpIA2PpopN{IT)@xd zyNv|OJ^%&oERG!_DJ6l6)+f&Hhv~X<*N2haf7&9}OZ^uo*;gL=UIgGE(75XzO{)b^ zKp1L*w^Dz;m&x|_c98oxZfBnx5 ziTm9e-#$monP@M;-II)%8Kifvfmw^VKTFc4h1s>Fi`pyk=T?{BcfKav3jMNV_7~md z%1h!A7ZWoe=x)M}o+8dhfg7~~FIYYO`4NS9N>q=&*4R(zVI>bI&lXpP?J`W0+@W+J z-CXMNpM#l70kGNYh|W?UB9q-zv>q|85r{>(E1yyzLhLcU@<1=<`2G z6({E1Mj*6Nh}g8O_Dc&eqd+V1HyyLe2~gSegH(qFyFzJ)ir)P^9v^Z$2OpbZvuTVe5?TDA>@MeF{?qs$Je172YNQsX`sxKgPDdW=RiE%jy^OKhyL?GO zpR_8rzAu^!-lT)dRG?kU5yGH{B1ZdNu^Pjzp+hv`xqIqZf`VJ`!4gilH(tos&^27z z%LfP$IcH~_5hS1c!XBykU3FQ}Wgnk+Q;iAey zEJgD|jE|-WV1uC<916+JQ z|Ki_Lbri;vb>3)hpnG)DS28CvtljX3P*b%aa^GLfyH7A~6^%&FgiOIPZaq$WRbgR# zU{dn=)H+Y+Y*nL`%c$-9VZhJhX4nDnHjO!$ocf8!N~vNo?yF0K;kI9yeaK8|p_+rZ7{M3) zF)rQpBks!?$lHmGpcH=gOwlJ}hb#ay!CVPpTo3;<_9YK69day*{n2tkQ*y}~vgXQ; z_M-o$lzC+0L}@`hFVsy@mTW#iN%Rd0irq6XHg*`}^OYLbk7i*MX|;i#j}VTybXr8e zZx?8Z<;@P=_<6A8v<0Q2JXtdPl(zQoYxL;NKNYmqlucT;Rst@_w*~3Y2(azR$#owy z(^}g#Uxf7%!*d#n3IXfe{@<|mu3zU`pA@C@&gNlc^i?*2C{_V~XhOJo#TTl91?1e9 zyEY#Xiw~=X*b*L!bE!btOFJ+s8U&}tapZI-^G6RozS;N4Peor{&A}x+4^afi69|v9 z6yR;#U7vpafn`M+^NTeWB4`x+_RUxF*Oo3-+hb!oC&5+4J-uH;w@haJBV$H!@T$LR z5a-=|Av7z>m2@cz z(hhpF%;JbgQPMgm%q~MdR5D^mZ~XX|DGlD-P_iv~5*U%~v4JA%ZoMCJ-T4rK0%1mY z5_%`8!SOKD`+l0&qY#i|z}>z0O;hc6batNp##ww{)nBy{oLZ1oe- zLbyt174E(7HzaONZkM@obnM_AoZa^G8!fQ$hhwWdP=_+}`s%Al<=NU~B2!mUa|X@i z16v$j?rReZD1qSvax)Zpv;Ki!+H0lb$kpEIJDXt z0^^3e5l)bQTzWE?Ue|FsbuFQu5(y*Ylupv5+3>d5OJ{{`gvs&#e6cglO}y=v^ZMGq za<@|CmuH0kF8xB>L*J`IeVtfMt3iXac_Qu$nB+OaoPFoziWdTR^-Po0S(s_$c&Q_} zUx8(N<{MmjIbXt0L2JhC;}G)ONS^ONgdlqiq)@)q6&tk>YS}_Ja;Alf zmT5$J+GZL3yXKHR`-s04x}TO2w(*2COC;z8G(9-oUj%y@NI&)AazZ1kl*hAzIUnl= zs0)sgD6ILM%6ecN($8>xWN8+xe>|a&?b9Z_yplKrUNbvD{_=?5NNn)*>m{;zxKu)T z*nuR9XyxC+YMa5w^RBqN*p>g^^UBUvTZ5_{ZDCsAlT#1wv$zYsPYy`!K( zfFsf8`2HSNpZE>#b8MZ4XXMru(2F0XMOrOBfOMalXD*ELiYC+og?Gtc5J!)fY+RJ? zO5T3kP#La$va}c8N6;stB1uqkA@L(mKY+O`5Ovj`=V`ZTTY5eB!q;O{A&c3cF`nAc z$mY~~?a9d;yB_S#g%t~v?gPZ){2auIB_C>6oUxIr83)GF;0Qt;x<$)<^&f8@f^cap zhEH<4Q*<^G(@6@@4H)IF%jCgz?H605SfmHkECt#j<2vydQRr(p~RA;~p zYLlVkY>>>1qpV@czx)_npad6_Rm^ql#b28?mG+k}kO-Q?^AGmejpu~5@M4jz*jmb* zA`J`^`p>;_5iLko@EdZm14&PWo|w-Ts|d4@LS>i7Xa!4Uy`X6B$YD>``SWHEM$MR( z7x9?@6EDOxtnTsBo^I@WWdaL{@PqrABUiv~BTUQFm6Bwe5A1zZ{A>yfYza%#kE50T zXio-L0$tsZNJ!N!Dfzr3SAfjti&%(qYSeMju5n|?YIM~>3OuKR%lu};%RyBq>ZN#U zX!v;h50vW4)N21qN2t^4y8NS6+7AE#1htxcb}fROHW;A;#!aF1j6Q?)R$fLt1HF&* z-*X!&NARgcimVM9<47!BJ#yb)C<0A-fA>Z*2-1^wFfoslLjpU(kq4#VBoKFvuy8GN{+$tI1OM@xwY^5qL1nKcl}hPsq! z*bSz8@Vzr_CURXJ-kuWaig4NrH~WtWXn?s>OMYc20SYLm@jUmx>)E1F9J$(fj2Qw} z5zC)C-MEdo9+gRr2i*pfM|S;V^Dwd&)7gcFs%)?IxT4yf$T}F{8emlCCcJvXF9|(J z3_U7uS|va9#!%M_Na;>6u0phh*;q|zE>z3%y^TK)iKTdCD-cUKTIQ=oD#1pf_Z7wG_>vBFD27nirMhP{SB{^AhjRL?iif=lYz1sYk zcfyOV?0IgqO!u~HXPAc6bg1VVwPuN7DolLV^EzxopT{M#1Yrk$Va;Q_o9i=LQvKyO zJCVL0^zoi^2A3iMueQmeGMXnp3os#0%eFMg%WJ9lsi!nlmVrfUGdV-%JhY_JxOy+o z@leKggevOSVs6p?q)(pFRBY={b|s_Au@^ISXGxUG>T8NNEuHq0Oq^F%q!Qc_42~$! za~{*|YMX$#1*KB`#(vG`GXaVIb3cCZg-~4{3;ouUtFo_d_aM|4MJn#wUjVp3aKnK) z;xT9wiNV|bo5NnN$-v(dl4r$YH}1#oFa_e2h7EeLbBAEh3k{b8KQs4t3_#jRNR1sE zx#JUMqvdANbo;%1$S{Sd1?0^~rdMW@)Z^yLIKv4uql=n!#d7#-+aQ~gGh63_)T>sx z(_Kp3o<6j*Lf)G`Orh>Hd%EN@H{X!4b!4R`>k9771?G^$!t^;<$pcEKe-$x~XhVZ7gt;pntH? z$x4$zh5Q9kLIRmt)!S&&l!hfQSFZ#Ct+BijR5R z(EH_^0ar@kYA`o%K;6P zOH`C^PKZ6&)E|wb<45?E2!Gc0OfG1pUTUo(yxwlLpp-^B)F@owEffh!SWO47emJ`u zpXpP@9w=BX_7gd64diIP(7Fq%SwHDyK+)xert5cQq9hXf&^vYwl3wJ_s81Y!@MwnW z$%|MF*MADqHfdFGlg=!LyU~)ahM71!I1xs=A;u=QjQ(BIvw~oi1{e)gX`%xpg)BKG zW)Fc;nn~K=?X0v*B~?uF%l8k>A^_{uwl1;T21V};TwUwy`n9D9826rW2aiSWNJWzP zhgdGTz@C7dXM1!mmJj6ipK^j&6i1;jWzS>(+mJ1Lmx8zEUGN2?FShfvWc5(g&j=NX z)KLFD7^xcdTRPT!w!^Cm*zromT}Mkqm(Gslv{@Jrh+kq*FRV$Ok+5k!N18bo&PUah zq%4>;Bkq9T@n@n_U5XeC(%|BRp>lj9qog&|jkq4b0N4Ym5`C5ww9X4{|%Zgd;{xR4u; z?aDK`Msxm6t~iTas>@2tirdkLuYS!xW%)ukuasn*G8cWZRPWP0kOBlc-=Xh#IE-{x z%gt@#1BLmzMKHI_5$9%&9V#f-*1^mtGACMGCiKYMYkPWZJ?X^#RH*V67K7D$+L7Uci3O4{r&y zCUntqbz}e5+Y8E*w28)0zIu`?5Bjn`zBek@GxZi(B!pgA8_lpS-hUaciIqw+2*F99 zBX4|<6|94HudO<$=RC~*$}=Wlsz?)+7oKmjZM-ueF*{3JffUmIjxubs16#eH6W8H{ zm6PmfEKT<_ZMhg7_-6W*T&EAlG6iFo1p`isNZNULC$Ou@hPpDW$C;}dwK_W)?Dk36 z>qkIctTUJNQ7MOuj9Hik+USQ$DOIZY^tt^48Yg7W!xK!LhZ5d@>K15=jWoOx&?ski zsw%!S@mN}0C4R=dXAO&>KzEkD8>_o=6T#Bh`sDNgp$XY&%qcIarisml+6Zf?|Bjx% z5*l?WySaenzkkxYeEJ1mBYM_hJRxl;H4VFO*mU|0YbYGzt9Y4~<^Ncd42+n%Ex8B5 zcLc;;!q+#w#ljVH*k_>rl9N}-<}raT4qqA$L;tkZmn=f}WETAl5wolsXP`~%Noupz zGtzp;v5fb-gzDpeo;`qKuB;?_pP68eWlSKP?oSz!O&hoQhlIOc!X~YbN}$=Z(t;C4 z+|DNyxS|}qb6(jC479Lv^tt1nk5K^0CNDh8S3OqiAsJU{;OYIa(edvG0l(rc&49&C zPc6^yHd3@~nth_J8D8f7tLhqH!HOvjgI~_T+5M>RkWebIq|}=k1`1TXk61n~@?+Wc zK^@%m*ddv+q{t3a>s~El_P19;3dKP!!=buvskcK+8ZM`jsi8gghhJhp;oY2G2J4*k zkyskrm!00B1`p)axKi0rCSgVQTEi>8(2e~TIn0zy4cyYYdp6>45-Y}9rCWNo(g#=h zs1k0ay)g7b$8&x!ojQ70?7qZKd$VpTW>J^qzOS!tR8Zb-nz7x*#5a!@AW-L4u5Z{p6Fo^jFRfPcQnTqp%#)xRCycxZopfaPngP>LXgr9c{FqV0Ov<`+1MeI44RbVtQSHfAIq&d!WSqhvi^6!e^)BB;pB^@F?TUd9jUc`wS{jsLo~OS8 zGD{jEd0&)1%nc{U7d z&4gFhUs+>vrakITWBES-5A_AcO3NDD>_4M zdVQil3JQn)yV{ic^Xr-Znni8=*&MZ(O93Ezn@i)f-oYF=$a@7dn~NqcuRXwYC{S)n z`N-!i5kKJmRtNUpp=$kcpZ#P#MIX&IwZo(oL$&aiBl(()dhx=K5|0si$#Tsz^RL#F&p-sTvcei94!mI%}jK6szI=+Zu(6RSBo zqrXTwwMNLUcShxB`PG2L@1cQY38}2^Y-k9h$!U1O z3d@;lbyXpA$&GdyHnh2e9L=Xf|SuGa=dd2?4y?QNu?|xm&&3P1Qrc4-& z#c7LSEp{1YP-e#_HC!HkM*sv znwyK{3%UW_(}B0)&*Yl4u`XgEE;hcI=Y|H2VzJjbIap72ehkp#rgI8^%5FWSs?qzX zT+IlN;(v6iPn3y*1YNIR&5!H?UYE7Ffqtlus1!7FK4Rv{u6fc)zmB8uX)_HNcWE&) z%|Xp|GroXoLh#ayb~zBL6qTKV`3g%NIag$fXQ+BubX2WX zNW0wYxl7(j|G_pL-kDhEBD?L!kP-ou*;Tv-mfY{psS#X>dS%2q4pZ1KP-k6}sMA!i z`hfeM_dyP^!uA4{5IipAG+-x*%N2Wug7`4TPgMx=g~Zr#-Fz)l$WS1_PEAhnAX+NO z{$ueHSn6JwmiE-sjYq~HaBo0#l3X&w$q9_&YHfoh$QKAAHHU-~c2`xKtgegtCh^1- zcF0NZD^d#%Xzspod_AI>(lc_!QWw?nIofZng{+kRtJ=|&pV`W}ngIE|2*spjr+j3y zIGxnT?4)~s=A05jem$)xA|s{^RRVVmB6rN!X-q>w+J{1A4#^fMbcF_7B#4G0(v5F% zv2Ohf;_Fpm8(I8!DeU!Br!*4B?3C1ku^qXA^zW z=86*+4sC&x=fveQ87h*7IaWFs0Si4|8DRa(!{h!>P3|no8N6S5Yek#L2tI#%I3yd zAKvx<*3O%RViT!&zAO1RtImhso*-c3Urw{kgl=AG01^`<`Cb?0lfj8 zGFeA}4})AmJCs-1mJu8Jk3jcb4~uu_ftp8=)|iNRJWQo zAG2+k!^!jRGwO^4M--p7<(Vy=)wji03hSlf02*G1jDLf8y%BDp-OE)ublcN5*>2H@ z;ZXvlKM<`^===t=WZ2=@iK8E2yV!a2QEU3iK~T!)L4T81#6U<5Zj;-<29bk);MQF( zxt?lx=h_wl%}LqE9pP_vNljEUDir5$9;5-ae6$7=9WtM@*A0a!>$h6GxMv*%U_m>f z-t46Q))z0w%||vQ7gcz&RYe^WmpTz1oW-WzDjb+2y^JP)Z+d;aQaI734d$Ssrb3EE z(gt=R&8kl75GLW;_omd?7n|ggne=PzKfIr_YCh_Xc_4Yvh*Deh-Insb+dBJcy7p^O zsr&fB)9*3U6^+bpJ+V25uYgN^GH%;n*E3Jp**GLV)<$>!>Ilu#exTtv>=XRfw@wV6 zr-Desd)%2JNfY%=hP`){tI4g!5{CNOW8^0+&X2=sz+XOkabn{&O}P(|-4>}qQ89xC zqNkz#a6xrC9@>E{fECG~(mh^iVy!Sp z`F9@iUIAlc_nyf1M2&gcZ$37N+f1zU`(vmtEzoe;cxqA+c!FuwQnh(%#8G!zwxM&< zjmVXOUVmJUnSWr7xkcl={npcIJ)}imM0#G%7H>I0@lXhy~!)z)i4_T7~| zozA>-d*n96gc7R?y&hCb9MK;^tD#E*+j5S%m+VTNr!P>y)^M%MYr3cM!uFRk zKZgCri|BN{EL@%m*l)p%ZD*xR(+p+U$7`yfHz$T8%V;xbY8XP-V2;TD zlzBbn+@h1HLdHv;WjM@ne%hTRi+h7MSlBW9=`PvW@vi4g2FG6NbS;hMbvwP|{i(=E zV7ZP%qmGe=GV)MHHVdZepEJR1dK^?ln3%5e_S}lp(djn-$$DnYy@;Zk@38TYK4NJP zQK<*lQ#8NCqe<#FBfQp~at#@!ygcMz!`;685U;9pX%z2ofiMtR=2oiYJm50Zh~-g~ zNF2vdJAn25;kI(n`0Dq))G}Vp7%&Z=T~!M0GS8#a#uYF0U`K%2lU!F6X9fcd?J&3n z-O~HSe|P7wv(@ren}LA=OnJVfAZSe>rUqOI89?SQs*vlH<++s|F2+Y(!VD&qeE<@^ z>y;ZIv1UWhvXQ%`%X(zh+a*NvbKo~b8@zgGgnhhBYji{`vhumoA1U0`#s+M^jqC$Ui^Y0?o?ymRT8dkUqw2zR+!VkpRkL(BdCxRBx96^$r# zMaomxaIF}|@#u8d7CDSJ``t2TTiTp;dGx}OKM@}U^4zo^*FV#_4!#=43+wBXb7iVv zaYnpXJbZX0jvX-qZG665+_^zJzfCj zy?TGrdp+7m)O{It!gOlqscLcLg$%OQcN0ixw)uEOdY5gYeIG5A{81wd@^EySb>XWV zG!@x;jW^Bdd*5bbpt1nab|C@a>O+?noCixgVii}IXwD3a6<+(85xL>p;=~q3iEFkl zd2y1gZ}rvRxs)w`$GI?+E(WUC*Z$HJI*n_0pPd80!IBsEVUU90iPij&jjQrwd9taf z+7z8d5U=oAQtV8eeWgk+ZfpYYgLI&Ezqsqp_=}9UU3$~)b*1tM0C=qX541nt#{w>+D0$>lyTzw?gt7Np0;T!@ zoYmZtoNod?86!dCdE*gdqBVvoNgwFMV^K2D%cu=DwCK|KCr zufwMkUT$-uV%QI8zUa-`)EJ|Z-z3{x-59D6+-`US63(ueJ&yI7?n4EaTMF*GbmjiL zq)7JxGuMpI|G}fg=}+Q94&IXPEz?`~eJk5{xa*qn7i_mjG@L1c$SbV>Y6<1RLugX6 zawJ+DN#i~Cx2>tt8)kc<lny;OL9kXF#}rJeZFB7N{Z_E0k&iN)XNEw#47tK~3c4G|JPRI4PV%r4$Y z^z*JaDcY4*b-?~wIrqh|73rqW+fZF4WZhmdR2xB`awa}409^D`B0NzP=|{hWV`rrX zed0SYEgV7wC~RgW_vIBpUZw~YTF+>{OUivIpjCe6G$ZFJ-K>b zO`5GVwO>p5X$?7&j!Wpf*-y}o1NzNCMfGP;;QiT)VJL1>b!Djzki??LMG z01!UApot32cV-$zA>v}5uRAZ0ywfakfscmm)|=`|M(jv~Ya)7_>Y67BEmZGk8ixiB zqK-}xLr__3L1@Tw3m-_DwQ%V2SEW)8=e6liRf4oatn*D3ml=>IHvHmX{oq}Gmq^ip zrLN%gfyCh9QpfBRz~zr-mnTomYz4Td8F} z{=Op#ABK%QE?lWU$F&fIDi53{+lK|dz#3BIwiX1NPhFPi{XDtd#&EiltViXTv;G2I zpQ{QSmOa?m&B(m+6T!dG*(fNS9FaG;VRWA&?yXTEI;;P$42D-S9n-S7Qbb|K`WcMQ z=mL||l+8s8ExE$NRO)|Kz+1f{MS-l3(;fGohA+32g5Ex-#XU*m8fecK_dBElpdj@Z z+mzL$lY=tND4awhPNjcm$;#@jLZ-0S9&0D&S96(tI#*W?xnZ9?dgTSepq_ncGZ)E3 zzP!Kli@Y{1kW-DUgo#>)p`G)*j>*;=mNJp8O?Sc;sjD<)Vo8x(J(d(h6WDdD1wwmm z&UDAMS@jdFz68&=?41Q_Z4}nFKPkOzYE9u@o;}_!g5}4|A)jZqOr@X>NBlx0X@zZk zJ)+XP=8WW|uq%o-D|XD7sf=96ERFj(!_gwO&+oi?RAP?bh4}gf9^CfhQ?P*3V^2<8 z)G-5MzG_@aBifln6w3y>Kc~OdKmv>Vv|n^yU3s6O_v~|iW3esG?mtiGxN;@kggsR) zN1X39`L$Db#O5-;;(EN*Y(3^-sVSi)(e#vHNjKyYQQE!>-Pp6CTZx)qlzQC*7}Twt zEqMA)ZJJdHz76QnndLXVA$}b>m9`)do*ph7gFZL)RkhG-Gvj}j6OxAis=48*u9wV@ z?l@dpj;>S2fy(6}O`Xawgg*?xW(4k~t?Amyz^om<8rb|e!)63sht{Kqr%p*T*0M=rNam3iD3hvUy zlKBgYqAwJ~L5EW7{6kAIKiI3p45tR63`1fms~b z@`vJWf(?+9TP~K;GN~?e-vjIs&5Nh zhB~XFc_!SHQ$-Nky?^SzBz&=GK*3EEMl(bQs#-_Do{y<4ik*y_sa@`BU>O!GTPaPG zzT&YP8jCO!RN!q7)=2mrzh3)G(m}-2skWIZt?>;xs2?bj@~S)HDYerVht6|@3V5NI zcBzkf;@?NGiEzNvV-|ROR_YZ zVfc^P98Ki);jgXjJ_WXJje+JqiIrpo@9l0A$i1r~{EiX@!2iJ#f4QF&LrN2Dba4GmS z{{Gty$%w+c+wHNO?^dwkoT-OwFTuBv3RF(nr2CkDim<*rStt?h7%=0btgL?7^uvi) zj>u&iPyZIaWrIHs3`}ATjx%@Lnqz)>jm(U9&e4JScBxFL18={*9>~V zU^27~-V)pry*k-jk?Umnhj74<>!Ny^tMhc9KSBXPnDDaw-0o-Z@ss5jY@)Jphm@fS zL+TR>*WQ#BLq7v2Pw6S%(!Ge%XmDod6_5J3yX_OZ%u1Z(m@~;|h`?W!C%o;U^?76_ zQ{tzH8R3S|&I{RfpT{2xRR`Jg9zf>+xz)J$wg{%w*<+HsJf5gX%UTcnj}``~$CrdQ z8-wZRNk`{ThHW3s$!p96X*`4FW8t}5nr>ja>EGYuL63=#Hy8<^jVcm%d>B!N1N4}k zJAlST%kDXH%L|r5l4#5jdKgJVKGS0e5tMqrx|pZU>0-olS(~;IGT_bC?=3a?P^&JT zZK|fa>iLlE2h#72u0;xs{m1O6LJXcSDI-Fs59hgE+Z{_Y>t=s)Jn|m&a>jo^_#!aj zlY4qR(yK$Oh}5C~bn!(Fb~%sr9um>JU5m}8xp%{B>xE$S&HNeSguRilMcRz}1QO z4~k#m7BGn${@@W}Y+owk3VD*W2dLxEHK{JiTE}k|L|f0^>5jbC}^&s6Lw)G&8If zEzWY)&|AJn6c17Nx-o1-H9bX->4&(r$toVTYQugxkQ+Ok!wzkd_BBqIeZYIcbC|AL z%m~pNkz_UH?K&`c3i75706PyX4xsH1YJtDIB($W2u52Ll=@bw9g380YemXc;wyib1 zsuwSUi8nz;#M;ag6^$MRT+pZZ8*%1C3PLv&t8S(&t2lLmTSPZBjs23(hBNx5&!d!V z`;fj8%2en=b8Ve~{g4(Pq8$j!gjWmueE3eh<=WxO&NeW*wP9^mr^N-@BT#+Lzc}*8 z`q*8#A6aQqz18Bd4a(V@GEY#Up*&t%tLFIh?}_IC3+B=M*@H3jxnHzPaZw^8XyR%k zPc?$kJKOON3gntUYPK;|OI&WWb}?CXC%Xqi22_np2O_Hcjp;ex1h$XJ5=7_)=P z58oTY=$6_?m=0FMJvk#zHLNY0;q>+v;%~5!_6*NW@^U8-{ec7P(v@QXLeboZ_QqsQ zY=Oy(#hC+o;6Yq-m(kN-zg1Kue9@1kVRLWua;1I`M!U9tJkN7SuyvXaCOC>Q2cw_O za38oM`#HRQ?{2Y${UOBYtNi8SlJYpXp1_ara3>6#uIhMG|11F&dWxB<8OQy=SPs4Q z?(DzP)I2;xo*p%6Nl)#KP-U>V_$jS=7{$EzFD`1avh#(o^1^I z+oW0o$|ct1&GJovJGShj^To9@c;aXt$t)`z$eA_Ei-{N~TS2W|f&G{2)x%BQEgblQ zvPDKgQbaeR(?hN>CDz`dcB&H|BKgJNj-7kvB|MVNLitecCw!LWyjMI!!wakdKH*H| zjM?Yg-)XvwW0G6AA{N4bQeoIi&0AP$`&$%ox6XJ>7{$cMqTN>)nO8D$^daop^bdA~ zv1x6!<`X4q9cT+%9)C&`dt|LXpa{=N-=|ikh0{Nquv~bq%FU^ypbt*8h-G7A1H~Vw zt_tfP3goRo-ZtC(ETXl0dfyjJ1T+%nFKxvPD-O17|2idK^l?qYAaWp&?9_fAwKtOYpJE$>8XLQ>VCSOsZ)#7a4hopc;!&j z&}>J;GRJDzwsb=ODn?>QyWFX6+@v)7N-EQ$oNzbwITx;{so*LIc22)nG0(m?uaKvz z;~;Xk#^bc>_(d_C=~FfStbb9Lt&@oKRzM0*ZADezoJ?SYJzb+DAl(_yuU3^So1v%j z$i~;&Rb_on57l(Es!~y6H$j8+TJmw6y!e<=S6e$C0Wn~1!Z6Gw73Zwa)Ys zsxxf%7aLqIxChgZ`7?i>6DWBaH^YaDynrvjrFsSQc$zjK>1if04;5f!-xG*~pv287 zpO{EZ34G(h0_v@MS!QUP-x7xHy%6*L@A*-YyAE-O~TwYI>Z+TciY> z_t<_KHhl6*Pk^ul2=DIfv=Zo_6w~Zjf;;YvGbSV?Dbzist|6ZVqH9k~o6MACYm&(r zSo^U{j_urlw%I=PI+*j5K}D3YD6eYf?rLo;K_DbxVp^(r z98ciGfY*y{{7u{--I1Su+1F34?CaC@-{Ia4(xTFryKUY7uV&6X5bCXsB) zuejYm-}!5n=RD_mzR&!Y^E>B!s7jr3jjMcl@@GCTsP|fWGW#rgXs1tnQvg;qB#~s< z!q(Cf@{BLLJm?5e;H;n5%Z&7xKTKO_N>SEwE3<@(fny?>1*5Vi18$XB2r>G$_~{TZ z1C(dASHjWjVhI7nl=ocGbt&B0c2^#6gb!QDwBdRE)8j9w2D8sBqv0md;9F09+0B}n zp47#rom^5#LBo{CU~4nURFT&$S;w4uG*4_Yt98pSn!y{w-iA?9p^Lc35re`f*x`QO z$w~4S3P(fl=VTAsH9)8yCwgwzGo^*Uj@40sbLsRbQ|mjp$C3MtQ_=7D=SO^nHl9qI zCSh`C;l!X8mGS#!{hrr7S}pxh1vL}UXA?)4@P#=h-6YSj26t-QgP<8zTd214E={A$q_KuP2QLN=L*ETt5)A z^EWi464Cxni)NT*js-N@)7ZYe6*Vj&`B;niiZFrEH-FQe5!qPkf|9yx^wQEi^So4Q z{q;#v{k#Kd;h1%#H^NGfReB2dRJ0FP6Vj-gWh`R0U_X1l();UIp5fV62l2A=g){c3 z%MaKpC^B#H!89CwU*CwfN%tXc86@<{{on_m)-e6oG}U@)th**%^Rm-7=RdeWJa}h{ zYc*H*Z2*fZth}vW=_>>p+N>>XK&8*97ndp-;GiJ>5j`AcJJ z41D#k{c5caU1pIM6Lb=*G73Vu6;-IyQZ8uWLfPfBQ5SFC`Q$}WeN)Zfsd}MCYboJ| z=4yg@Us=9TmSE*VyZ!M9{qr@NI5=_{75rdIyp`uzvaT{^?3wFL&3}D9@$wg#UOR_x zCf&jlg8RRGlr7_r{5n-&adVQ$cq8QirzmRC)b^2T7G{ zxheg=7M+~hLP5Hs92SgS-1*`^U#Px(f71;5n9qwWd3W(r^I0X~DKBzsSMpROdR?f+ zr9AMdLEco>rR5f{I45Ms^@~t(O@D@gv%1eqR}Ve6QQ(t^bE$A}89SoOqb+rZbjja3 zDqM(g+b;++FvX7DG%aw*s|$QYKacxlWStUwax#*8dR;LNUqFEqty@&EqlM8jCVlG~ zWb-f*?OY&5fj(U`P5R*IAcBHy9P^tBST6BJYEi9?b4%h4@)p`76mw=&#@ay1Z~=yL zm8PWGixE17&Td3poGRO*pf}gy>u=Tzt!9EJ1;7jg;;*{bF>;riw5zD}_ydIR@Mikj z8Ov^u^qtL9TIZPY?@yYlG9lOo)I(=1bZPvooLT^7wtakQ$yI&xDnG2xEFL*{Y%|Ot z|6U<$r!eDS5UpStxWCOGwsh6le8Ta{h&)I;IFLWqaqvYZBuVG~+UceA^ z*ZRyEFyW?Wc1}{ww5DSs{Ylu!Z{^y(>O^{CSV7@c$1GF&%#kq%y=$=-%I${JrUXj! zLooc!4!(>hxL}w#mVVACxO4Z4m}hz$A{>XF1^52COW!hZ8U*Y{arO z`{bl^lc#dObemP3ONx%UootA&uzhMg*UiMsen-r97Fj@adR%Teim@Tace3-3DpgAQ z%G<{pKB1u_IB#G8)c=Pizi~Or!+Wt)R6)4VYz=WEd#b7PdMzoG&aWD~R{j?4bSD5t zu}yZbSU!F!7L+PQI^DfqNN9Pq)Jp-%(;=;9b?>{WJ_}%~FHTkE9UmC<^TYt0!KL}W z`toL=7#&UGybiRz)X61Fa;;*b3tHTz)p0^QwKd#bN6xgHSB1x^iOL4ZR4VDxG<6QH> z`4ff~tiv+otBwN1{w*Sc^ZHOd@6j7a`njH-0tbMBod(fm^e7USZGcGu=BAWl#!S?1 z*e%G_Ek+-0Mb?)Cat_g1GCQcoc{YZx6GZLo?40O-deYB(7AEiI&QhLx%+bV{(9rtu zEXt=sFCSazwm_Y}*YAi+W`Yo+WxO9mQ`8bm3l$2UFqVY-vD$#=JCypX))k``T1%R7 z)y$6_azNKN+@w}J5-yuBAdSRW(zoI6anxQMFtBZYazh%q(wY$*$}Ze%N7@T`*RQ5 z{5tK3n3+7e3JYy@*(3u{&N94YM)233p1|1vZ6#SAOu$o*#!W!C5h|N?mLuTag=Eww*Bn&Urof3PTuqX1Y4h%I7o;nU<{d{U+wrl3%AgIm!r;N z;$Wrl>wv<9u)X~*dTxaW(V^?AV|n}Xh2Hk=dxQi-&lffbi*MINt&GKsRA^f=5b(8bLdK&(N-PRGtj7=bA#yE+i9knY=v#HvF(VIRMjE`z@3p=9uZJ=FVdjLr&>!qn)QL8afF~}8@vLP*lJ5~|zWojfuzqMx;8&-Gx_uPM!18_8Y{3GZc z5CSU*;MhdfsoQexd~UjzheJb)3O|bAcV7^?t&`i3knF*|wA-n|{<&|w|5U~B5P)+f ze2p~)yvM)nJHdWhS!3G%vToC3usNPJJX9z|WBSEL#x;=eVeB4#{n1`x4!?Ue ze^{^z86j+IKMGo6l{R9EtPI+{;G63)EDU_YMXH1CtE+tTms>>lObT!#q?fVAyV6K2 z`kA|;d86UZ`mO3+vj0nevQn}hB=@gp`we$X?SI0(#gG{MQ}7kI@6UVdy6qV&00<(W zbnng&1bG4GSQ)0XjQxR`A4Fo#f7B7VYa#zk1;TAK6m{SV{0C+e!Wnh5@d=U)f41B$ z9U&_OR#2d5>F?D;WJHC4NM{YQ|F$S0`>@yOz(K#(b&334?Etg?Z{g;^G?#sIV0%IR PeZWiSjDZ$G!#4Ea^tgK0 literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/development/images/docs_pr.png b/doc/source/modules/cassandra/pages/development/images/docs_pr.png new file mode 100644 index 0000000000000000000000000000000000000000..211eb25ef1a625a773e26440026f1448a60a0bb4 GIT binary patch literal 156081 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ⅅKs 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 J+_if3{{g=h;{yNy literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug0.png b/doc/source/modules/cassandra/pages/development/images/eclipse_debug0.png new file mode 100644 index 0000000000000000000000000000000000000000..79fc5fd5bc45b5157f18cbf00952d3f07ed2d3a2 GIT binary patch literal 48174 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%0D-C{5Pdn%!W4M_~u&K>f3AG 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Ɓ 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 UlyYw3dH?_b07*qoM6N<$g3RKKHUIzs literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug2.png b/doc/source/modules/cassandra/pages/development/images/eclipse_debug2.png new file mode 100644 index 0000000000000000000000000000000000000000..df4eddbd7924aa35f5fffa710ec11cc850bfb7db GIT binary patch literal 57032 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 Hv*3RLdxc;T literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug3.png b/doc/source/modules/cassandra/pages/development/images/eclipse_debug3.png new file mode 100644 index 0000000000000000000000000000000000000000..23178142c184197a3cd2351c71ffe2ff19a167a4 GIT binary patch literal 58677 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 B)T;mh literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/development/index.adoc b/doc/source/modules/cassandra/pages/development/index.adoc new file mode 100644 index 000000000000..c5009538d602 --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/index.adoc @@ -0,0 +1,13 @@ += Contributing to Cassandra + +* xref:development/gettingstarted.adoc[Getting started] +* xref:development/ide.adoc[IDE] +* xref:development/testing.adoc[Testing] +* xref:development/code_style.adoc[Code style] +* xref:development/how_to_commit.adoc[How to commit] +* xref:development/how_to_review.adoc[How to review] +* xref:development/patches.adoc[Patches] +* xref:development/ci.adoc[CI] +* xref:development/dependencies.adoc[Dependencies] +* xref:development/documentation.adoc[Documentation] +* xref:development/release_process.adoc[Release process] diff --git a/doc/source/modules/cassandra/pages/development/patches.adoc b/doc/source/modules/cassandra/pages/development/patches.adoc new file mode 100644 index 000000000000..5baac30c60fc --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/patches.adoc @@ -0,0 +1,218 @@ += Contributing Code Changes + +== Choosing What to Work on + +Submitted patches can include bug fixes, changes to the Java code base, +improvements for tooling (both Java or Python), documentation, testing +or any other changes that requires changing the code base. Although the +process of contributing code is always the same, the amount of work and +time it takes to get a patch accepted also depends on the kind of issue +you're addressing. + +As a general rule of thumb::: + * Major new features and significant changes to the code based will + likely not going to be accepted without deeper discussion within the + http://cassandra.apache.org/community/[developer community] + * Bug fixes take higher priority compared to features + * The extend to which tests are required depend on how likely your + changes will effect the stability of Cassandra in production. Tooling + changes requires fewer tests than storage engine changes. + * Less complex patches will be faster to review: consider breaking up + an issue into individual tasks and contributions that can be reviewed + separately + +[TIP] +.Hint +==== +Not sure what to work? Just pick an issue marked as +https://issues.apache.org/jira/issues/?jql=project%20%3D%20CASSANDRA%20AND%20Complexity%20%3D%20%22Low%20Hanging%20Fruit%22%20and%20status%20!%3D%20resolved[Low +Hanging Fruit] Complexity in JIRA, which we use to flag issues that +could turn out to be good starter tasks for beginners. +==== + +== Before You Start Coding + +Although contributions are highly appreciated, we do not guarantee that +each contribution will become a part of Cassandra. Therefore it's +generally a good idea to first get some feedback on the things you plan +to work on, especially about any new features or major changes to the +code base. You can reach out to other developers on the mailing list or +`Slack `. + +You should also:: + * Avoid redundant work by searching for already reported issues in + https://issues.apache.org/jira/browse/CASSANDRA[JIRA] + * Create a new issue early in the process describing what you're + working on - not just after finishing your patch + * Link related JIRA issues with your own ticket to provide a better + context + * Update your ticket from time to time by giving feedback on your + progress and link a GitHub WIP branch with your current code + * Ping people who you actively like to ask for advice on JIRA by + https://confluence.atlassian.com/conf54/confluence-user-s-guide/sharing-content/using-mentions[mentioning + users] +There are also some fixed rules that you need to be aware::: + * Patches will only be applied to branches by following the release + model + * Code must be testable + * Code must follow the `code_style` convention + * Changes must not break compatibility between different Cassandra + versions + * Contributions must be covered by the Apache License + +=== Choosing the Right Branches to Work on + +There are currently multiple Cassandra versions maintained in individual +branches: + +[cols=",",options="header",] +|=== +|Version |Policy +|4.0 |Code freeze (see below) +|3.11 |Critical bug fixes only +|3.0 |Critical bug fixes only +|2.2 |Critical bug fixes only +|2.1 |Critical bug fixes only +|=== + +Corresponding branches in git are easy to recognize as they are named +`cassandra-` (e.g. `cassandra-3.0`). The `trunk` branch is an +exception, as it contains the most recent commits from all other +branches and is used for creating new branches for future tick-tock +releases. + +==== 4.0 Code Freeze + +Patches for new features are currently not accepted for 4.0 or any +earlier versions. Starting with the code freeze in September, all +efforts should focus on stabilizing the 4.0 branch before the first +official release. During that time, only the following patches will be +considered for acceptance: + +____ +* Bug fixes +* Measurable performance improvements +* Changes not distributed as part of the release such as: +* Testing related improvements and fixes +* Build and infrastructure related changes +* Documentation +____ + +==== Bug Fixes + +Creating patches for bug fixes is a bit more complicated as this will +depend on how many different versions of Cassandra are affected. In each +case, the order for merging such changes will be `cassandra-2.1` -> +`cassandra-2.2` -> `cassandra-3.0` -> `cassandra-3.x` -> `trunk`. But +don't worry, merging from 2.1 would be the worst case for bugs that +affect all currently supported versions, which isn't very common. As a +contributor, you're also not expected to provide a single patch for each +version. What you need to do however is: + +____ +* Be clear about which versions you could verify to be affected by the +bug +* For 2.x: ask if a bug qualifies to be fixed in this release line, as +this may be handled on case by case bases +* If possible, create a patch against the lowest version in the branches +listed above (e.g. if you found the bug in 3.9 you should try to fix it +already in 3.0) +* Test if the patch can be merged cleanly across branches in the +direction listed above +* Be clear which branches may need attention by the committer or even +create custom patches for those if you can +____ + +== Creating a Patch + +So you've finished coding and the great moment arrives: it's time to +submit your patch! + +____ +[arabic] +. Create a branch for your changes if you haven't done already. Many +contributors name their branches based on ticket number and Cassandra +version, e.g. `git checkout -b 12345-3.0` +. Verify that you follow Cassandra's `code_style` +. Make sure all tests (including yours) pass using ant as described in +`testing`. If you suspect a test failure is unrelated to your change, it +may be useful to check the test's status by searching the issue tracker +or looking at https://builds.apache.org/[CI] results for the relevant +upstream version. Note that the full test suites take many hours to +complete, so it is common to only run specific relevant tests locally +before uploading a patch. Once a patch has been uploaded, the reviewer +or committer can help setup CI jobs to run the full test suites. +. Consider going through the `how_to_review` for your code. This will +help you to understand how others will consider your change for +inclusion. +. Don’t make the committer squash commits for you in the root branch +either. Multiple commits are fine - and often preferable - during review +stage, especially for incremental review, but once +1d, do either: + +____ +[loweralpha] +. Attach a patch to JIRA with a single squashed commit in it (per +branch), or +. Squash the commits in-place in your branches into one +____ + +[arabic, start=6] +. Include a CHANGES.txt entry (put it at the top of the list), and +format the commit message appropriately in your patch as below. Please +note that only user-impacting items +https://lists.apache.org/thread.html/rde1128131a621e43b0a9c88778398c053a234da0f4c654b82dcbbe0e%40%3Cdev.cassandra.apache.org%3E[should] +be listed in CHANGES.txt. If you fix a test that does not affect users +and does not require changes in runtime code, then no CHANGES.txt entry +is necessary. ++ +[source,none] +---- + + +patch by ; reviewed by for CASSANDRA-##### +---- +. When you're happy with the result, create a patch: + +____ +[source,none] +---- +git add +git commit -m '' +git format-patch HEAD~1 +mv (e.g. 12345-trunk.txt, 12345-3.0.txt) +---- + +Alternatively, many contributors prefer to make their branch available +on GitHub. In this case, fork the Cassandra repository on GitHub and +push your branch: + +[source,none] +---- +git push --set-upstream origin 12345-3.0 +---- +____ + +[arabic, start=8] +. To make life easier for your reviewer/committer, you may want to make +sure your patch applies cleanly to later branches and create additional +patches/branches for later Cassandra versions to which your original +patch does not apply cleanly. That said, this is not critical, and you +will receive feedback on your patch regardless. +. Attach the newly generated patch to the ticket/add a link to your +branch and click "Submit Patch" at the top of the ticket. This will move +the ticket into "Patch Available" status, indicating that your +submission is ready for review. +. Wait for other developers or committers to review it and hopefully +1 +the ticket (see `how_to_review`). If your change does not receive a +1, +do not be discouraged. If possible, the reviewer will give suggestions +to improve your patch or explain why it is not suitable. +. If the reviewer has given feedback to improve the patch, make the +necessary changes and move the ticket into "Patch Available" once again. +____ + +Once the review process is complete, you will receive a +1. Wait for a +committer to commit it. Do not delete your branches immediately after +they’ve been committed - keep them on GitHub for a while. Alternatively, +attach a patch to JIRA for historical record. It’s not that uncommon for +a committer to mess up a merge. In case of that happening, access to the +original code is required, or else you’ll have to redo some of the work. diff --git a/doc/source/modules/cassandra/pages/development/release_process.adoc b/doc/source/modules/cassandra/pages/development/release_process.adoc new file mode 100644 index 000000000000..3c6249b10aa6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/release_process.adoc @@ -0,0 +1,250 @@ += Release Process + +depth:: + 3 + +|  | + +The steps for Release Managers to create, vote and publish releases for +Apache Cassandra. + +While a committer can perform the initial steps of creating and calling +a vote on a proposed release, only a PMC member can complete the process +of publishing and announcing the release. + +== Prerequisites + +Background docs:: + * http://www.apache.org/legal/release-policy.html[ASF Release Policy] + * http://www.apache.org/dev/release-distribution[ASF Release + Distribution Policy] + * http://www.eu.apache.org/dev/release-publishing.html[ASF Release + Best Practices] + +A debian based linux OS is required to run the release steps from. +Debian-based distros provide the required RPM, dpkg and repository +management tools. + +=== Create and publish your GPG key + +To create a GPG key, follow the +http://www.apache.org/dev/openpgp.html[guidelines]. The key must be 4096 +bit RSA. Include your public key in: + +[source,none] +---- +https://dist.apache.org/repos/dist/release/cassandra/KEYS +---- + +Publish your GPG key in a PGP key server, such as +http://pgp.mit.edu/[MIT Keyserver]. + +=== Bintray account with access to Apache organisation + +Publishing a successfully voted upon release requires bintray access to +the Apache organisation. Please verify that you have a bintray account +and the Apache organisation is listed +https://bintray.com/profile/edit/organizations[here]. + +== Create Release Artifacts + +Any committer can perform the following steps to create and call a vote +on a proposed release. + +Check that there are no open urgent jira tickets currently being worked +on. Also check with the PMC that there's security vulnerabilities +currently being worked on in private.' Current project habit is to check +the timing for a new release on the dev mailing lists. + +=== Perform the Release + +Run the following commands to generate and upload release artifacts, to +the ASF nexus staging repository and dev distribution location: + +[source,none] +---- +cd ~/git +git clone https://github.com/apache/cassandra-builds.git +git clone https://github.com/apache/cassandra.git + +# Edit the variables at the top of the `prepare_release.sh` file +edit cassandra-builds/cassandra-release/prepare_release.sh + +# Ensure your 4096 RSA key is the default secret key +edit ~/.gnupg/gpg.conf # update the `default-key` line +edit ~/.rpmmacros # update the `%gpg_name ` line + +# Ensure DEBFULLNAME and DEBEMAIL is defined and exported, in the debian scripts configuration +edit ~/.devscripts + +# The prepare_release.sh is run from the actual cassandra git checkout, +# on the branch/commit that we wish to tag for the tentative release along with version number to tag. +cd cassandra +git switch cassandra- + +# The following cuts the release artifacts (including deb and rpm packages) and deploy to staging environments +../cassandra-builds/cassandra-release/prepare_release.sh -v +---- + +Follow the prompts. + +If building the deb or rpm packages fail, those steps can be repeated +individually using the [.title-ref]#-d# and [.title-ref]#-r# flags, +respectively. + +== Call for a Vote + +Fill out the following email template and send to the dev mailing list: + +[source,none] +---- +I propose the following artifacts for release as . + +sha1: + +Git: https://gitbox.apache.org/repos/asf?p=cassandra.git;a=shortlog;h=refs/tags/-tentative + +Artifacts: https://repository.apache.org/content/repositories/orgapachecassandra-/org/apache/cassandra/apache-cassandra// + +Staging repository: https://repository.apache.org/content/repositories/orgapachecassandra-/ + +The distribution packages are available here: https://dist.apache.org/repos/dist/dev/cassandra/${version}/ + +The vote will be open for 72 hours (longer if needed). + +[1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=-tentative +[2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=-tentative +---- + +== Post-vote operations + +Any PMC member can perform the following steps to formalize and publish +a successfully voted release. + +=== Publish Artifacts + +Run the following commands to publish the voted release artifacts: + +[source,none] +---- +cd ~/git +# edit the variables at the top of the `finish_release.sh` file +edit cassandra-builds/cassandra-release/finish_release.sh + +# After cloning cassandra-builds repo, `finish_release.sh` is run from the actual cassandra git checkout, +# on the tentative release tag that we wish to tag for the final release version number tag. +cd ~/git/cassandra/ +git checkout -tentative +../cassandra-builds/cassandra-release/finish_release.sh -v +---- + +If successful, take note of the email text output which can be used in +the next section "Send Release Announcement". The output will also list +the next steps that are required. + +=== Promote Nexus Repository + +* Login to https://repository.apache.org[Nexus repository] again. +* Click on "Staging" and then on the repository with id +"cassandra-staging". +* Find your closed staging repository, right click on it and choose +"Promote". +* Select the "Releases" repository and click "Promote". +* Next click on "Repositories", select the "Releases" repository and +validate that your artifacts exist as you expect them. + +Publish the Bintray Uploaded Distribution Packages +-------------------------------------------------- + +Log into bintray and publish the uploaded artifacts. + +=== Update and Publish Website + +See https://svn.apache.org/repos/asf/cassandra/site/src/README[docs] for +building and publishing the website. + +Also update the CQL doc if appropriate. + +=== Release version in JIRA + +Release the JIRA version. + +* In JIRA go to the version that you want to release and release it. +* Create a new version, if it has not been done before. + +=== Update to Next Development Version + +Update the codebase to point to the next development version: + +[source,none] +---- +cd ~/git/cassandra/ +git checkout cassandra- +edit build.xml # update ` ` +edit debian/changelog # add entry for new version +edit CHANGES.txt # add entry for new version +git commit -m "Increment version to " build.xml debian/changelog CHANGES.txt + +# …and forward merge and push per normal procedure +---- + +=== Wait for Artifacts to Sync + +Wait for the artifacts to sync at +https://downloads.apache.org/cassandra/ + +=== Send Release Announcement + +Fill out the following email template and send to both user and dev +mailing lists: + +[source,none] +---- +The Cassandra team is pleased to announce the release of Apache Cassandra version . + +Apache Cassandra is a fully distributed database. It is the right choice +when you need scalability and high availability without compromising +performance. + + http://cassandra.apache.org/ + +Downloads of source and binary distributions are listed in our download +section: + + http://cassandra.apache.org/download/ + +This version is release[1] on the series. As always, +please pay attention to the release notes[2] and let us know[3] if you +were to encounter any problem. + +Enjoy! + +[1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb= +[2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb= +[3]: https://issues.apache.org/jira/browse/CASSANDRA +---- + +Update Slack Cassandra topic --------------------------- + +Update topic in `cassandra` `Slack room `:: + /topic cassandra.apache.org | Latest releases: 3.11.4, 3.0.18, 2.2.14, + 2.1.21 | ask, don't ask to ask + +=== Tweet from @Cassandra + +Tweet the new release, from the @Cassandra account + +=== Delete Old Releases + +As described in +http://www.apache.org/dev/release.html#when-to-archive[When to Archive]. + +An example of removing old releases: + +[source,none] +---- +svn co https://dist.apache.org/repos/dist/release/cassandra/ cassandra-dist +svn rm debian/pool/main/c/cassandra/* +svn st +# check and commit +---- diff --git a/doc/source/modules/cassandra/pages/development/testing.adoc b/doc/source/modules/cassandra/pages/development/testing.adoc new file mode 100644 index 000000000000..ace81cf833eb --- /dev/null +++ b/doc/source/modules/cassandra/pages/development/testing.adoc @@ -0,0 +1,145 @@ += Testing + +Creating tests is one of the most important and also most difficult +parts of developing Cassandra. There are different ways to test your +code depending on what you're working on. + +== Unit Testing + +The most simple way to test code in Cassandra is probably by writing a +unit test. Cassandra uses JUnit as a testing framework and test cases +can be found in the `test/unit` directory. Ideally you’d be able to +create a unit test for your implementation that would exclusively cover +the class you created (the unit under test). Unfortunately this is not +always possible and Cassandra doesn’t have a very mock friendly code +base. Often you’ll find yourself in a situation where you have to make +use of an embedded Cassandra instance that you’ll be able to interact +with in your test. If you want to make use of CQL in your test, you can +simply extend CQLTester and use some of the convenient helper methods +such as in the following example. + +[source,java] +---- +@Test +public void testBatchAndList() throws Throwable +{ + createTable("CREATE TABLE %s (k int PRIMARY KEY, l list)"); + execute("BEGIN BATCH " + + "UPDATE %1$s SET l = l +[ 1 ] WHERE k = 0; " + + "UPDATE %1$s SET l = l + [ 2 ] WHERE k = 0; " + + "UPDATE %1$s SET l = l + [ 3 ] WHERE k = 0; " + + "APPLY BATCH"); + + assertRows(execute("SELECT l FROM %s WHERE k = 0"), + row(list(1, 2, 3))); +} +---- + +Unit tests can be run from the command line using the `ant test` +command, `ant test -Dtest.name=` to execute a test +suite or +`ant testsome -Dtest.name= -Dtest.methods=[,testmethod2]` +for individual tests. For example, to run all test methods in the +`org.apache.cassandra.cql3.SimpleQueryTest` class, you would run: + +[source,none] +---- +ant test -Dtest.name=SimpleQueryTest +---- + +To run only the `testStaticCompactTables()` test method from that class, +you would run: + +[source,none] +---- +ant testsome -Dtest.name=org.apache.cassandra.cql3.SimpleQueryTest -Dtest.methods=testStaticCompactTables +---- + +If you see an error like this: + +[source,none] +---- +Throws: cassandra-trunk/build.xml:1134: taskdef A class needed by class org.krummas.junit.JStackJUnitTask cannot be found: +org/apache/tools/ant/taskdefs/optional/junit/JUnitTask using the classloader +AntClassLoader[/.../cassandra-trunk/lib/jstackjunit-0.0.1.jar] +---- + +You will need to install the ant-optional package since it contains the +`JUnitTask` class. + +=== Long running tests + +Test that consume a significant amount of time during execution can be +found in the `test/long` directory and executed as a regular JUnit test +or standalone program. Except for the execution time, there’s nothing +really special about them. However, ant will execute tests under +`test/long` only when using the `ant long-test` target. + +== DTests + +One way of doing integration or system testing at larger scale is by +using https://github.com/apache/cassandra-dtest[dtest], which stands for +“Cassandra Distributed Tests”. The idea is to automatically setup +Cassandra clusters using various configurations and simulate certain use +cases you want to test. This is done using Python scripts and `ccmlib` +from the https://github.com/pcmanus/ccm[ccm] project. Dtests will setup +clusters using this library just as you do running ad-hoc `ccm` commands +on your local machine. Afterwards dtests will use the +http://datastax.github.io/python-driver/installation.html[Python driver] +to interact with the nodes, manipulate the file system, analyze logs or +mess with individual nodes. + +Using dtests helps us to prevent regression bugs by continually +executing tests on the https://builds.apache.org/[CI server] against new +patches. Committers will be able to set up build branches there and your +reviewer may use the CI environment to run tests for your patch. Read +more on the motivation behind continuous integration +http://www.datastax.com/dev/blog/cassandra-testing-improvements-for-developer-convenience-and-confidence[here]. + +The best way to learn how to write dtests is probably by reading the +introduction "http://www.datastax.com/dev/blog/how-to-write-a-dtest[How +to Write a Dtest]" and by looking at existing, recently updated tests in +the project. New tests must follow certain +https://github.com/apache/cassandra-dtest/blob/master/CONTRIBUTING.md[style +conventions] that are being checked before accepting contributions. In +contrast to Cassandra, dtest issues and pull-requests are managed on +github, therefor you should make sure to link any created dtests in your +Cassandra ticket and also refer to the ticket number in your dtest PR. + +Creating a good dtest can be tough, but it should not prevent you from +submitting patches! Please ask in the corresponding JIRA ticket how to +write a good dtest for the patch. In most cases a reviewer or committer +will able to support you, and in some cases they may offer to write a +dtest for you. + +== Performance Testing + +Performance tests for Cassandra are a special breed of tests that are +not part of the usual patch contribution process. In fact you can +contribute tons of patches to Cassandra without ever running performance +tests. They are important however when working on performance +improvements, as such improvements must be measurable. + +=== Cassandra Stress Tool + +See `cassandra_stress` + +=== cstar_perf + +Another tool available on github is +https://github.com/datastax/cstar_perf[cstar_perf] that can be used for +intensive performance testing in large clusters or locally. Please refer +to the project page on how to set it up and how to use it. + +=== CircleCI + +Cassandra ships with a default https://circleci.com[CircleCI] +configuration, to enable running tests on your branches, you need to go +the CircleCI website, click "Login" and log in with your github account. +Then you need to give CircleCI permission to watch your repositories. +Once you have done that, you can optionally configure CircleCI to run +tests in parallel - click "Projects", then your github account and then +click the settings for the project. If you leave the parallelism at 1 +for Cassandra, only `ant eclipse-warnings` and `ant test` will be run. +If you up the parallelism to 4, it also runs `ant long-test`, +`ant test-compression` and `ant stress-test` diff --git a/doc/source/modules/cassandra/pages/faq/index.adoc b/doc/source/modules/cassandra/pages/faq/index.adoc new file mode 100644 index 000000000000..41f921dc0c23 --- /dev/null +++ b/doc/source/modules/cassandra/pages/faq/index.adoc @@ -0,0 +1,290 @@ += Frequently Asked Questions + +* `why-cant-list-all` +* `what-ports` +* `what-happens-on-joins` +* `asynch-deletes` +* `one-entry-ring` +* `can-large-blob` +* `nodetool-connection-refused` +* `to-batch-or-not-to-batch` +* `selinux` +* `how-to-unsubscribe` +* `cassandra-eats-all-my-memory` +* `what-are-seeds` +* `are-seeds-SPOF` +* `why-message-dropped` +* `oom-map-failed` +* `what-on-same-timestamp-update` +* `why-bootstrapping-stream-error` + +[[why-cant-list-all]] +== Why can't I set `listen_address` to listen on 0.0.0.0 (all my addresses)? + +Cassandra is a gossip-based distributed system and `listen_address` is +the address a node tells other nodes to reach it at. Telling other nodes +"contact me on any of my addresses" is a bad idea; if different nodes in +the cluster pick different addresses for you, Bad Things happen. + +If you don't want to manually specify an IP to `listen_address` for each +node in your cluster (understandable!), leave it blank and Cassandra +will use `InetAddress.getLocalHost()` to pick an address. Then it's up +to you or your ops team to make things resolve correctly (`/etc/hosts/`, +dns, etc). + +One exception to this process is JMX, which by default binds to 0.0.0.0 +(Java bug 6425769). + +See `256` and `43` for more gory details. + +[[what-ports]] +== What ports does Cassandra use? + +By default, Cassandra uses 7000 for cluster communication (7001 if SSL +is enabled), 9042 for native protocol clients, and 7199 for JMX. The +internode communication and native protocol ports are configurable in +the `cassandra-yaml`. The JMX port is configurable in `cassandra-env.sh` +(through JVM options). All ports are TCP. + +[[what-happens-on-joins]] +== What happens to existing data in my cluster when I add new nodes? + +When a new nodes joins a cluster, it will automatically contact the +other nodes in the cluster and copy the right data to itself. See +`topology-changes`. + +[[asynch-deletes]] +== I delete data from Cassandra, but disk usage stays the same. What gives? + +Data you write to Cassandra gets persisted to SSTables. Since SSTables +are immutable, the data can't actually be removed when you perform a +delete, instead, a marker (also called a "tombstone") is written to +indicate the value's new status. Never fear though, on the first +compaction that occurs between the data and the tombstone, the data will +be expunged completely and the corresponding disk space recovered. See +`compaction` for more detail. + +[[one-entry-ring]] +== Why does nodetool ring only show one entry, even though my nodes logged that they see each other joining the ring? + +This happens when you have the same token assigned to each node. Don't +do that. + +Most often this bites people who deploy by installing Cassandra on a VM +(especially when using the Debian package, which auto-starts Cassandra +after installation, thus generating and saving a token), then cloning +that VM to other nodes. + +The easiest fix is to wipe the data and commitlog directories, thus +making sure that each node will generate a random token on the next +restart. + +[[change-replication-factor]] +== Can I change the replication factor (a a keyspace) on a live cluster? + +Yes, but it will require running a full repair (or cleanup) to change +the replica count of existing data: + +* `Alter ` the replication factor for desired +keyspace (using cqlsh for instance). +* If you're reducing the replication factor, run `nodetool cleanup` on +the cluster to remove surplus replicated data. Cleanup runs on a +per-node basis. +* If you're increasing the replication factor, run +`nodetool repair -full` to ensure data is replicated according to the +new configuration. Repair runs on a per-replica set basis. This is an +intensive process that may result in adverse cluster performance. It's +highly recommended to do rolling repairs, as an attempt to repair the +entire cluster at once will most likely swamp it. Note that you will +need to run a full repair (`-full`) to make sure that already repaired +sstables are not skipped. + +[[can-large-blob]] +== Can I Store (large) BLOBs in Cassandra? + +Cassandra isn't optimized for large file or BLOB storage and a single +`blob` value is always read and send to the client entirely. As such, +storing small blobs (less than single digit MB) should not be a problem, +but it is advised to manually split large blobs into smaller chunks. + +Please note in particular that by default, any value greater than 16MB +will be rejected by Cassandra due the `max_mutation_size_in_kb` +configuration of the `cassandra-yaml` file (which default to half of +`commitlog_segment_size_in_mb`, which itself default to 32MB). + +[[nodetool-connection-refused]] +== Nodetool says "Connection refused to host: 127.0.1.1" for any remote host. What gives? + +Nodetool relies on JMX, which in turn relies on RMI, which in turn sets +up its own listeners and connectors as needed on each end of the +exchange. Normally all of this happens behind the scenes transparently, +but incorrect name resolution for either the host connecting, or the one +being connected to, can result in crossed wires and confusing +exceptions. + +If you are not using DNS, then make sure that your `/etc/hosts` files +are accurate on both ends. If that fails, try setting the +`-Djava.rmi.server.hostname=` JVM option near the bottom of +`cassandra-env.sh` to an interface that you can reach from the remote +machine. + +[[to-batch-or-not-to-batch]] +== Will batching my operations speed up my bulk load? + +No. Using batches to load data will generally just add "spikes" of +latency. Use asynchronous INSERTs instead, or use true `bulk-loading`. + +An exception is batching updates to a single partition, which can be a +Good Thing (as long as the size of a single batch stay reasonable). But +never ever blindly batch everything! + +[[selinux]] +== On RHEL nodes are unable to join the ring + +Check if https://en.wikipedia.org/wiki/Security-Enhanced_Linux[SELinux] +is on; if it is, turn it off. + +[[how-to-unsubscribe]] +== How do I unsubscribe from the email list? + +Send an email to `user-unsubscribe@cassandra.apache.org`. + +[[cassandra-eats-all-my-memory]] +== Why does top report that Cassandra is using a lot more memory than the Java heap max? + +Cassandra uses https://en.wikipedia.org/wiki/Memory-mapped_file[Memory +Mapped Files] (mmap) internally. That is, we use the operating system's +virtual memory system to map a number of on-disk files into the +Cassandra process' address space. This will "use" virtual memory; i.e. +address space, and will be reported by tools like top accordingly, but +on 64 bit systems virtual address space is effectively unlimited so you +should not worry about that. + +What matters from the perspective of "memory use" in the sense as it is +normally meant, is the amount of data allocated on brk() or mmap'd +/dev/zero, which represent real memory used. The key issue is that for a +mmap'd file, there is never a need to retain the data resident in +physical memory. Thus, whatever you do keep resident in physical memory +is essentially just there as a cache, in the same way as normal I/O will +cause the kernel page cache to retain data that you read/write. + +The difference between normal I/O and mmap() is that in the mmap() case +the memory is actually mapped to the process, thus affecting the virtual +size as reported by top. The main argument for using mmap() instead of +standard I/O is the fact that reading entails just touching memory - in +the case of the memory being resident, you just read it - you don't even +take a page fault (so no overhead in entering the kernel and doing a +semi-context switch). This is covered in more detail +http://www.varnish-cache.org/trac/wiki/ArchitectNotes[here]. + +== What are seeds? + +Seeds are used during startup to discover the cluster. + +If you configure your nodes to refer some node as seed, nodes in your +ring tend to send Gossip message to seeds more often (also see the +`section on gossip `) than to non-seeds. In other words, seeds +are worked as hubs of Gossip network. With seeds, each node can detect +status changes of other nodes quickly. + +Seeds are also referred by new nodes on bootstrap to learn other nodes +in ring. When you add a new node to ring, you need to specify at least +one live seed to contact. Once a node join the ring, it learns about the +other nodes, so it doesn't need seed on subsequent boot. + +You can make a seed a node at any time. There is nothing special about +seed nodes. If you list the node in seed list it is a seed + +Seeds do not auto bootstrap (i.e. if a node has itself in its seed list +it will not automatically transfer data to itself) If you want a node to +do that, bootstrap it first and then add it to seeds later. If you have +no data (new install) you do not have to worry about bootstrap at all. + +Recommended usage of seeds: + +* pick two (or more) nodes per data center as seed nodes. +* sync the seed list to all your nodes + +[[are-seeds-SPOF]] +== Does single seed mean single point of failure? + +The ring can operate or boot without a seed; however, you will not be +able to add new nodes to the cluster. It is recommended to configure +multiple seeds in production system. + +[[cant-call-jmx-method]] +== Why can't I call jmx method X on jconsole? + +Some of JMX operations use array argument and as jconsole doesn't +support array argument, those operations can't be called with jconsole +(the buttons are inactive for them). You need to write a JMX client to +call such operations or need array-capable JMX monitoring tool. + +[[why-message-dropped]] +== Why do I see "... messages dropped ..." in the logs? + +This is a symptom of load shedding -- Cassandra defending itself against +more requests than it can handle. + +Internode messages which are received by a node, but do not get not to +be processed within their proper timeout (see `read_request_timeout`, +`write_request_timeout`, ... in the `cassandra-yaml`), are dropped +rather than processed (since the as the coordinator node will no longer +be waiting for a response). + +For writes, this means that the mutation was not applied to all replicas +it was sent to. The inconsistency will be repaired by read repair, hints +or a manual repair. The write operation may also have timeouted as a +result. + +For reads, this means a read request may not have completed. + +Load shedding is part of the Cassandra architecture, if this is a +persistent issue it is generally a sign of an overloaded node or +cluster. + +[[oom-map-failed]] +== Cassandra dies with `java.lang.OutOfMemoryError: Map failed` + +If Cassandra is dying *specifically* with the "Map failed" message, it +means the OS is denying java the ability to lock more memory. In linux, +this typically means memlock is limited. Check +`/proc//limits` to verify this and raise it (eg, via +ulimit in bash). You may also need to increase `vm.max_map_count.` Note +that the debian package handles this for you automatically. + +[[what-on-same-timestamp-update]] +== What happens if two updates are made with the same timestamp? + +Updates must be commutative, since they may arrive in different orders +on different replicas. As long as Cassandra has a deterministic way to +pick the winner (in a timestamp tie), the one selected is as valid as +any other, and the specifics should be treated as an implementation +detail. That said, in the case of a timestamp tie, Cassandra follows two +rules: first, deletes take precedence over inserts/updates. Second, if +there are two updates, the one with the lexically larger value is +selected. + +[[why-bootstrapping-stream-error]] +== Why bootstrapping a new node fails with a "Stream failed" error? + +Two main possibilities: + +. the GC may be creating long pauses disrupting the streaming process +. compactions happening in the background hold streaming long enough +that the TCP connection fails + +In the first case, regular GC tuning advices apply. In the second case, +you need to set TCP keepalive to a lower value (default is very high on +Linux). Try to just run the following: + +.... +$ sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5 +.... + +To make those settings permanent, add them to your `/etc/sysctl.conf` +file. + +Note: https://cloud.google.com/compute/[GCE]'s firewall will always +interrupt TCP connections that are inactive for more than 10 min. +Running the above command is highly recommended in that environment. diff --git a/doc/source/modules/cassandra/pages/getting_started/configuring.adoc b/doc/source/modules/cassandra/pages/getting_started/configuring.adoc new file mode 100644 index 000000000000..fd028078e13d --- /dev/null +++ b/doc/source/modules/cassandra/pages/getting_started/configuring.adoc @@ -0,0 +1,83 @@ += Configuring Cassandra + +The `Cassandra` configuration files location varies, depending on the +type of installation: + +* tarball: `conf` directory within the tarball install location +* package: `/etc/cassandra` directory + +Cassandra's default configuration file, `cassandra.yaml`, is sufficient +to explore a simple single-node `cluster`. However, anything beyond +running a single-node cluster locally requires additional configuration +to various Cassandra configuration files. Some examples that require +non-default configuration are deploying a multi-node cluster or using +clients that are not running on a cluster node. + +* `cassandra.yaml`: the main configuration file for Cassandra +* `cassandra-env.sh`: environment variables can be set +* `cassandra-rackdc.properties` OR `cassandra-topology.properties`: set +rack and datacenter information for a cluster +* `logback.xml`: logging configuration including logging levels +* `jvm-*`: a number of JVM configuration files for both the server and +clients +* `commitlog_archiving.properties`: set archiving parameters for the +`commitlog` + +Two sample configuration files can also be found in `./conf`: + +* `metrics-reporter-config-sample.yaml`: configuring what the +metrics-report will collect +* `cqlshrc.sample`: how the CQL shell, cqlsh, can be configured + +== Main runtime properties + +Configuring Cassandra is done by setting yaml properties in the +`cassandra.yaml` file. At a minimum you should consider setting the +following properties: + +* `cluster_name`: Set the name of your cluster. +* `seeds`: A comma separated list of the IP addresses of your cluster +`seed nodes`. +* `storage_port`: Check that you don't have the default port of 7000 +blocked by a firewall. +* `listen_address`: The `listen address` is the IP address of a node +that allows it to communicate with other nodes in the cluster. Set to +[.title-ref]#localhost# by default. Alternatively, you can set +`listen_interface` to tell Cassandra which interface to use, and +consecutively which address to use. Set one property, not both. +* `native_transport_port`: Check that you don't have the default port of +9042 blocked by a firewall, so that clients like cqlsh can communicate +with Cassandra on this port. + +== Changing the location of directories + +The following yaml properties control the location of directories: + +* `data_file_directories`: One or more directories where data files, +like `SSTables` are located. +* `commitlog_directory`: The directory where commitlog files are +located. +* `saved_caches_directory`: The directory where saved caches are +located. +* `hints_directory`: The directory where `hints` are located. + +For performance reasons, if you have multiple disks, consider putting +commitlog and data files on different disks. + +== Environment variables + +JVM-level settings such as heap size can be set in `cassandra-env.sh`. +You can add any additional JVM command line argument to the `JVM_OPTS` +environment variable; when Cassandra starts, these arguments will be +passed to the JVM. + +== Logging + +The default logger is [.title-ref]#logback#. By default it will log: + +* *INFO* level in `system.log` +* *DEBUG* level in `debug.log` + +When running in the foreground, it will also log at INFO level to the +console. You can change logging properties by editing `logback.xml` or +by running the [.title-ref]#nodetool setlogginglevel# command. diff --git a/doc/source/modules/cassandra/pages/getting_started/drivers.adoc b/doc/source/modules/cassandra/pages/getting_started/drivers.adoc new file mode 100644 index 000000000000..e05d9c89c1e0 --- /dev/null +++ b/doc/source/modules/cassandra/pages/getting_started/drivers.adoc @@ -0,0 +1,92 @@ += Client drivers + +Here are known Cassandra client drivers organized by language. Before +choosing a driver, you should verify the Cassandra version and +functionality supported by a specific driver. + +== Java + +* http://achilles.archinnov.info/[Achilles] +* https://github.com/Netflix/astyanax/wiki/Getting-Started[Astyanax] +* https://github.com/noorq/casser[Casser] +* https://github.com/datastax/java-driver[Datastax Java driver] +* https://github.com/impetus-opensource/Kundera[Kundera] +* https://github.com/deanhiller/playorm[PlayORM] + +== Python + +* https://github.com/datastax/python-driver[Datastax Python driver] + +== Ruby + +* https://github.com/datastax/ruby-driver[Datastax Ruby driver] + +== C# / .NET + +* https://github.com/pchalamet/cassandra-sharp[Cassandra Sharp] +* https://github.com/datastax/csharp-driver[Datastax C# driver] +* https://github.com/managedfusion/fluentcassandra[Fluent Cassandra] + +== Nodejs + +* https://github.com/datastax/nodejs-driver[Datastax Nodejs driver] +* https://github.com/jorgebay/node-cassandra-cql[Node-Cassandra-CQL] + +== PHP + +* http://code.google.com/a/apache-extras.org/p/cassandra-pdo[CQL | PHP] +* https://github.com/datastax/php-driver/[Datastax PHP driver] +* https://github.com/aparkhomenko/php-cassandra[PHP-Cassandra] +* http://evseevnn.github.io/php-cassandra-binary/[PHP Library for +Cassandra] + +== C++ + +* https://github.com/datastax/cpp-driver[Datastax C++ driver] +* http://sourceforge.net/projects/libqtcassandra[libQTCassandra] + +== Scala + +* https://github.com/datastax/spark-cassandra-connector[Datastax Spark +connector] +* https://github.com/newzly/phantom[Phantom] +* https://github.com/getquill/quill[Quill] + +== Clojure + +* https://github.com/mpenet/alia[Alia] +* https://github.com/clojurewerkz/cassaforte[Cassaforte] +* https://github.com/mpenet/hayt[Hayt] + +== Erlang + +* https://github.com/matehat/cqerl[CQerl] +* https://github.com/silviucpp/erlcass[Erlcass] + +== Go + +* http://relops.com/cqlc/[CQLc] +* https://github.com/hailocab/gocassa[Gocassa] +* https://github.com/gocql/gocql[GoCQL] + +== Haskell + +* https://github.com/ozataman/cassy[Cassy] + +== Rust + +* https://github.com/neich/rust-cql[Rust CQL] + +== Perl + +* https://github.com/tvdw/perl-dbd-cassandra[Cassandra::Client and +DBD::Cassandra] + +== Elixir + +* https://github.com/lexhide/xandra[Xandra] +* https://github.com/matehat/cqex[CQEx] + +== Dart + +* https://github.com/achilleasa/dart_cassandra_cql[dart_cassandra_cql] diff --git a/doc/source/modules/cassandra/pages/getting_started/index.adoc b/doc/source/modules/cassandra/pages/getting_started/index.adoc new file mode 100644 index 000000000000..cca1f173971e --- /dev/null +++ b/doc/source/modules/cassandra/pages/getting_started/index.adoc @@ -0,0 +1,30 @@ += Getting Started + +This section covers how to get started using Apache Cassandra and should +be the first thing to read if you are new to Cassandra. + +* xref:getting_started/installing.adoc[Installing Cassandra]: Installation instructions plus information on choosing a method. +** [ xref:getting_started/installing.adoc#installing-the-binary-tarball[tarball] ] +[ xref:getting_started/installing.adoc#installing-the-debian-packages[Debian] ] +[ xref:getting_started/installing.adoc#installing-the-rpm-packages[RPM] ] +* xref:getting_started/configuring.adoc[Configuring Cassandra] +* xref:getting_started/querying.adoc[Inserting and querying data] +* xref:getting_started/drivers.adoc[Client drivers]: Drivers for various languages. +** [ xref:getting_started/drivers.adoc#java[Java] ] + [ xref:getting_started/drivers.adoc#java[Java] ] + [ xref:getting_started/drivers.adoc#python[Python] ] + [ xref:getting_started/drivers.adoc#ruby[Ruby] ] + [ xref:getting_started/drivers.adoc#c-net[C# / .NET] ] + [ xref:getting_started/drivers.adoc#nodejs[Node.js] ] + [ xref:getting_started/drivers.adoc#php[PHP] ] + [ xref:getting_started/drivers.adoc#c[C++] ] + [ xref:getting_started/drivers.adoc#scala[Scala] ] + [ xref:getting_started/drivers.adoc#clojure[Clojure] ] + [ xref:getting_started/drivers.adoc#erlang[Erlang] ] + [ xref:getting_started/drivers.adoc#go[Go] ] + [ xref:getting_started/drivers.adoc#haskell[Haskell] ] + [ xref:getting_started/drivers.adoc#rust[Rust] ] + [ xref:getting_started/drivers.adoc#perl[Perl] ] + [ xref:getting_started/drivers.adoc#elixir[Elixir] ] + [ xref:getting_started/drivers.adoc#dart[Dart] ] +* xref:getting_started/production.adoc[Production recommendations] diff --git a/doc/source/modules/cassandra/pages/getting_started/installing.adoc b/doc/source/modules/cassandra/pages/getting_started/installing.adoc new file mode 100644 index 000000000000..e75f2c9218d5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/getting_started/installing.adoc @@ -0,0 +1,294 @@ += Installing Cassandra + +These are the instructions for deploying the supported releases of +Apache Cassandra on Linux servers. + +Cassandra runs on a wide array of Linux distributions including (but not +limited to): + +* Ubuntu, most notably LTS releases 16.04 to 18.04 +* CentOS & RedHat Enterprise Linux (RHEL) including 6.6 to 7.7 +* Amazon Linux AMIs including 2016.09 through to Linux 2 +* Debian versions 8 & 9 +* SUSE Enterprise Linux 12 + +This is not an exhaustive list of operating system platforms, nor is it +prescriptive. However users will be well-advised to conduct exhaustive +tests of their own particularly for less-popular distributions of Linux. +Deploying on older versions is not recommended unless you have previous +experience with the older distribution in a production environment. + +== Prerequisites + +* Install the latest version of Java 8, either the +http://www.oracle.com/technetwork/java/javase/downloads/index.html[Oracle +Java Standard Edition 8] or http://openjdk.java.net/[OpenJDK 8]. To +verify that you have the correct version of java installed, type +`java -version`. +* *NOTE*: _Experimental_ support for Java 11 was added in Cassandra {40_version} +(https://issues.apache.org/jira/browse/CASSANDRA-9608[CASSANDRA-9608]). +Running Cassandra on Java 11 is _experimental_. Do so at your own risk. +For more information, see +https://github.com/apache/cassandra/blob/trunk/NEWS.txt[NEWS.txt]. +* For using cqlsh, the latest version of +https://www.python.org/downloads/[Python 2.7] or Python 3.6+. To verify +that you have the correct version of Python installed, type +`python --version`. + +== Choosing an installation method + +For most users, installing the binary tarball is the simplest choice. +The tarball unpacks all its contents into a single location with +binaries and configuration files located in their own subdirectories. +The most obvious attribute of the tarball installation is it does not +require `root` permissions and can be installed on any Linux +distribution. + +Packaged installations require `root` permissions. Install the RPM build +on CentOS and RHEL-based distributions if you want to install Cassandra +using YUM. Install the Debian build on Ubuntu and other Debian-based +distributions if you want to install Cassandra using APT. Note that both +the YUM and APT methods required `root` permissions and will install the +binaries and configuration files as the `cassandra` OS user. + +== Installing the binary tarball + +[arabic] +. Verify the version of Java installed. For example: + +[source,shell] +---- +include::example$BASH/java_verify.sh[] +---- +should return: + +[source,plaintext] +---- +include::example$RESULTS/java_verify.result[] +---- + +[arabic, start=2] +. Download the binary tarball from one of the mirrors on the +http://cassandra.apache.org/download/[Apache Cassandra Download] site. +For example, to download Cassandra {40_version}: + +[source,shell] +---- +include::example$BASH/curl_install.sh[] +---- + +NOTE: The mirrors only host the latest versions of each major supported +release. To download an earlier version of Cassandra, visit the +http://archive.apache.org/dist/cassandra/[Apache Archives]. + +[arabic, start=3] +. OPTIONAL: Verify the integrity of the downloaded tarball using one of +the methods https://www.apache.org/dyn/closer.cgi#verify[here]. For +example, to verify the hash of the downloaded file using GPG: + +[source,shell] +---- +include::example$BASH/verify_gpg.sh[] +---- + +should return: + +[source,plaintext] +---- +include::example$RESULTS/verify_gpg.result[] +---- + +Compare the signature with the SHA256 file from the Downloads site: + +[source,shell] +---- +include::example$BASH/curl_verify_sha.sh[] +---- + +which returns: + +[source,plaintext] +---- +28757dde589f70410f9a6a95c39ee7e6cde63440e2b06b91ae6b200614fa364d +---- + +[arabic, start=4] +. Unpack the tarball: + +[source,shell] +---- +include::example$BASH/tarball.sh[] +---- + +The files will be extracted to the `apache-cassandra-4.0.0/` directory. +This is the tarball installation location. + +[arabic, start=5] +. Located in the tarball installation location are the directories for +the scripts, binaries, utilities, configuration, data and log files: + +[source,plaintext] +---- +include::example$TEXT/tarball_install_dirs.txt[] +---- +<1> location of the commands to run cassandra, cqlsh, nodetool, and SSTable tools +<2> location of cassandra.yaml and other configuration files +<3> location of the commit logs, hints, and SSTables +<4> location of system and debug logs +<5>location of cassandra-stress tool + +For information on how to configure your installation, see +http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +Cassandra]. + +[arabic, start=6] +. Start Cassandra: + +[source,shell] +---- +include::example$BASH/start_tarball.sh[] +---- + +NOTE: This will run Cassandra as the authenticated Linux user. + +You can monitor the progress of the startup with: + +[source,shell] +---- +include::example$BASH/tail_syslog.sh[] +---- + +Cassandra is ready when you see an entry like this in the `system.log`: + +[source,plaintext] +---- +include::example$RESULTS/tail_syslog.result[] +---- + +include::partial$nodetool_and_cqlsh.adoc[] + +== Installing the Debian packages + +[arabic] +. Verify the version of Java installed. For example: + +// LLP: NEED TO ADD TO PARTIALS TO REUSE +[source,shell] +---- +include::example$BASH/java_verify.sh[] +---- + +should return: + +[source,plaintext] +---- +include::example$RESULTS/java_verify.result[] +---- + +[arabic, start=2] +. Add the Apache repository of Cassandra to the file +`cassandra.sources.list`. +include::partial$package_versions.adoc[] + +[source,shell] +---- +include::example$BASH/get_deb_package.sh[] +---- + +[arabic, start=3] +. Add the Apache Cassandra repository keys to the list of trusted keys +on the server: + +[source,shell] +---- +include::example$BASH/add_repo_keys.sh[] +---- +[source,plaintext] +---- +include::example$RESULTS/add_repo_keys.result[] +---- + +[arabic, start=4] +. Update the package index from sources: + +[source,shell] +---- +include::example$BASH/apt-get_update.sh[] +---- + +[arabic, start=5] +. Install Cassandra with APT: + +[source,shell] +---- +include::example$BASH/apt-get_cass.sh[] +---- + +NOTE: For information on how to configure your installation, see +http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +Cassandra]. + +include::partial$tail_syslog.adoc[] + +include::partial$nodetool_and_cqlsh_nobin.adoc[] + +== Installing the RPM packages + +[arabic] +. Verify the version of Java installed. For example: + +[source,shell] +---- +include::example$BASH/java_verify.sh[] +---- +[source,plaintext] +---- +include::example$RESULTS/java_verify.result[] +---- + +[arabic, start=2] +. Add the Apache repository of Cassandra to the file +`/etc/yum.repos.d/cassandra.repo` (as the `root` user). +include::partial$package_versions.adoc[] + +[source,plaintext] +---- +include::example$RESULTS/add_yum_repo.result[] +---- + +[arabic, start=3] +. Update the package index from sources: + +[source,shell] +---- +include::example$BASH/yum_update.sh[] +---- + +[arabic, start=4] +. Install Cassandra with YUM: + +[source,shell] +---- +include::example$BASH/yum_cass.sh[] +---- + +NOTE: A new Linux user `cassandra` will get created as part of the +installation. The Cassandra service will also be run as this user. + +[arabic, start=5] +. Start the Cassandra service: + +[source,shell] +---- +include::example$BASH/yum_start.sh[] +---- + +include::partial$tail_syslog.adoc[] + +include::partial$nodetool_and_cqlsh_nobin.adoc[] + +== Further installation info + +For help with installation issues, see the +http://cassandra.apache.org/doc/latest/troubleshooting/index.html[Troubleshooting] +section. diff --git a/doc/source/modules/cassandra/pages/getting_started/production.adoc b/doc/source/modules/cassandra/pages/getting_started/production.adoc new file mode 100644 index 000000000000..36bd50af9743 --- /dev/null +++ b/doc/source/modules/cassandra/pages/getting_started/production.adoc @@ -0,0 +1,137 @@ += Production Recommendations + +The `cassandra.yaml` and `jvm.options` files have a number of notes and +recommendations for production usage. This page expands on some of this +information. + +== Tokens + +Using more than one token-range per node (referred to as vnodes) allows for flexible +expansion and more streaming peers when bootstrapping new nodes into the +cluster. Limiting the negative impact of streaming (I/O and CPU +overhead) enables incremental cluster expansion. + +As a tradeoff, more tokens will lead to sharing data with more peers, +resulting in decreased availability. To learn more, +https://github.com/jolynch/python_performance_toolkit/raw/master/notebooks/cassandra_availability/whitepaper/cassandra-availability-virtual.pdf[Cassandra Availability in Virtual Nodes, Joseph Lynch and Josh Snyder] is recommended reading. + +The number of tokens can be changed using the following setting: + +`num_tokens: 16` + +Here are the most common token counts with a brief explanation of when +and why you would use each one. + +[width="100%",cols="13%,87%",options="header",] +|=== +|Token Count |Description +|1 |Maximum availablility, maximum cluster size, fewest peers, but +inflexible expansion. Must always double size of cluster to expand and +remain balanced. + +|4 |A healthy mix of elasticity and availability. Recommended for +clusters which will eventually reach over 30 nodes. Requires adding +approximately 20% more nodes to remain balanced. Shrinking a cluster may +result in cluster imbalance. + +|16 |Best for heavily elastic clusters which expand and shrink +regularly, but may have issues availability with larger clusters. Not +recommended for clusters over 50 nodes. +|=== + +In addition to setting the token count, it's extremely important that +`allocate_tokens_for_local_replication_factor` be set as well to an appropriate number of replicates, to ensure +even token allocation. + +== Read Ahead + +Read ahead is an operating system feature that attempts to keep as much +data loaded in the page cache as possible. The goal is to decrease +latency by using additional throughput on reads where the latency +penalty is high due to seek times on spinning disks. By leveraging read +ahead, the OS can pull additional data into memory without the cost of +additional seeks. This works well when the available RAM is greater than the +size of the hot dataset, but can be problematic when the hot dataset is +much larger than available RAM. The benefit of read ahead decreases as +the size of your hot dataset gets bigger in proportion to available +memory. + +With small partitions (usually tables with a single partition key, but not +limited to this case) and solid state drives (SSDs), read ahead can increase +disk usage without any of the latency benefits, and in some cases can +result in up to a 5x latency and throughput performance penalty. Read +heavy, key/value tables with small (under 1KB) rows are especially prone +to this problem. + +The recommended read ahead settings are: + +[width="59%",cols="40%,60%",options="header",] +|=== +|Hardware |Initial Recommendation +|Spinning Disks |64KB +|SSD |4KB +|=== + +Read ahead can be adjusted on Linux systems by using the `blockdev` tool. + +For example, we can set the read ahead of `/dev/sda1\` to 4KB by doing the following: + +[source, shell] +---- +$ blockdev --setra 8 /dev/sda1 +---- +[NOTE] +==== +`blockdev` accepts the number of 512 byte sectors to read ahead. The argument of 8 above is equivilent to 4KB. +==== + +Since each system is different, use the above recommendations as a starting point and tuning based on your SLA +and throughput requirements. To understand how read ahead impacts disk resource usage, we recommend carefully +reading through the xref:troubleshooting/use_tools.adoc[Diving Deep, using external tools] section. + +== Compression + +Compressed data is stored by compressing fixed size byte buffers and writing the data to disk. The buffer size +is determined by the`chunk_length_in_kb` element in the compression map of the schema settings. The default setting +is 16KB starting with Cassandra {40_version}. + +Since the entire compressed buffer must be read off disk, using a compression chunk length that is too large can lead to +significant overhead when reading small records. Combined with the default read ahead setting, the result can be massive +read amplification for certain workloads. + +LZ4Compressor is the default and recommended compression algorithm. There is additional information on compression in +https://thelastpickle.com/blog/2018/08/08/compression_performance.html[The Last Pickle blogpost on compression performance]. + +== Compaction + +There are different xref:compaction/index.adoc[compaction] strategies available for different workloads. We recommend reading +about the different strategies to understand which is the best for your environment. Different tables may (and frequently do) +use different compaction strategies on the same cluster. + +== Encryption + +It is significantly better to set up peer-to-peer encryption and client server encryption when setting up your production cluster. +Setting it up once the cluster is already serving production traffic is challenging to get right. If you plan to use +network encryption eventually (in any form), we recommend setting it up now. Changing these configurations down the line is not impossible, but mistakes can result in downtime or data loss. + +== Ensure Keyspaces are Created with NetworkTopologyStrategy + +Production clusters should never use `SimpleStrategy`. Production keyspaces should use the `NetworkTopologyStrategy` (NTS). +For example: + +[source, cql] +---- +CREATE KEYSPACE mykeyspace WITH replication = { + 'class': 'NetworkTopologyStrategy', + 'datacenter1': 3 +}; +---- + +`NetworkTopologyStrategy` allows Cassandra to take advantage of multiple racks and data centers. + +== Configure Racks and Snitch + +**Correctly configuring or changing racks after a cluster has been provisioned is an unsupported process**. +Migrating from a single rack to multiple racks is also unsupported and can result in data loss. +Using `GossipingPropertyFileSnitch` is the most flexible solution for on premise or mixed cloud environments.`Ec2Snitch` +is reliable for AWS EC2 only environments. diff --git a/doc/source/modules/cassandra/pages/getting_started/querying.adoc b/doc/source/modules/cassandra/pages/getting_started/querying.adoc new file mode 100644 index 000000000000..78d51857b476 --- /dev/null +++ b/doc/source/modules/cassandra/pages/getting_started/querying.adoc @@ -0,0 +1,30 @@ += Inserting and querying + +The API for Cassandra is xref:cql/ddl.adoc[`CQL`, the Cassandra Query Language]. To +use CQL, you will need to connect to the cluster, using either: + +* `cqlsh`, a shell for CQL +* through a client driver for Cassandra + +== CQLSH + +`cqlsh` is a command-line shell for interacting with Cassandra using +CQL. It is shipped with every Cassandra package, and can be found in the +`bin` directory alongside the `cassandra` executable. It connects to the +single node specified on the command line. For example: + +[source, shell] +---- +include::example$BASH/cqlsh_localhost.sh[] +---- +[source, cql] +---- +include::example$RESULTS/cqlsh_localhost.result[] +---- +If the command is used without specifying a node, `localhost` is the default. See the xref:tools/cqlsh.adoc[`cqlsh` section] for full documentation. + +== Client drivers + +A lot of xref:getting_started/drivers.adoc[client drivers] are provided by the Community and a list of +known drivers is provided. You should refer to the documentation of each driver +for more information. diff --git a/doc/source/new/Figure_1.jpg b/doc/source/modules/cassandra/pages/new/Figure_1.jpg similarity index 100% rename from doc/source/new/Figure_1.jpg rename to doc/source/modules/cassandra/pages/new/Figure_1.jpg diff --git a/doc/source/new/Figure_2.jpg b/doc/source/modules/cassandra/pages/new/Figure_2.jpg similarity index 100% rename from doc/source/new/Figure_2.jpg rename to doc/source/modules/cassandra/pages/new/Figure_2.jpg diff --git a/doc/source/modules/cassandra/pages/new/auditlogging.adoc b/doc/source/modules/cassandra/pages/new/auditlogging.adoc new file mode 100644 index 000000000000..58fb8913f0c8 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/auditlogging.adoc @@ -0,0 +1,468 @@ += Audit Logging + +Audit Logging is a new feature in Apache Cassandra 4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-12151[CASSANDRA-12151]). +All database activity is logged to a directory in the local filesystem +and the audit log files are rolled periodically. All database operations +are monitored and recorded. Audit logs are stored in local directory +files instead of the database itself as it provides several benefits, +some of which are: + +* No additional database capacity is needed to store audit logs +* No query tool is required while storing the audit logs in the database +would require a query tool +* Latency of database operations is not affected; no performance impact +* It is easier to implement file based logging than database based +logging + +== What does Audit Logging Log? + +Audit logging logs: + +[arabic] +. All authentication which includes successful and failed login attempts +. All database command requests to CQL. Both failed and successful CQL +is logged + +More specifically an audit log entry could be one of two types: + +[loweralpha] +. CQL Audit Log Entry Type or +. Common Audit Log Entry Type + +Each of these types comprises of several database operations. The CQL +Audit Log Entry Type could be one of the following; the category of the +CQL audit log entry type is listed in parentheses. + +[arabic] +. SELECT(QUERY), +. UPDATE(DML), +. DELETE(DML), +. TRUNCATE(DDL), +. CREATE_KEYSPACE(DDL), +. ALTER_KEYSPACE(DDL), +. DROP_KEYSPACE(DDL), +. CREATE_TABLE(DDL), +. DROP_TABLE(DDL), +. PREPARE_STATEMENT(PREPARE), +. DROP_TRIGGER(DDL), +. LIST_USERS(DCL), +. CREATE_INDEX(DDL), +. DROP_INDEX(DDL), +. GRANT(DCL), +. REVOKE(DCL), +. CREATE_TYPE(DDL), +. DROP_AGGREGATE(DDL), +. ALTER_VIEW(DDL), +. CREATE_VIEW(DDL), +. DROP_ROLE(DCL), +. CREATE_FUNCTION(DDL), +. ALTER_TABLE(DDL), +. BATCH(DML), +. CREATE_AGGREGATE(DDL), +. DROP_VIEW(DDL), +. DROP_TYPE(DDL), +. DROP_FUNCTION(DDL), +. ALTER_ROLE(DCL), +. CREATE_TRIGGER(DDL), +. LIST_ROLES(DCL), +. LIST_PERMISSIONS(DCL), +. ALTER_TYPE(DDL), +. CREATE_ROLE(DCL), +. USE_KEYSPACE (OTHER). + +The Common Audit Log Entry Type could be one of the following; the +category of the Common audit log entry type is listed in parentheses. + +[arabic] +. REQUEST_FAILURE(ERROR), +. LOGIN_ERROR(AUTH), +. UNAUTHORIZED_ATTEMPT(AUTH), +. LOGIN_SUCCESS (AUTH). + +== What Audit Logging does not Log? + +Audit logging does not log: + +[arabic] +. Configuration changes made in `cassandra.yaml` +. Nodetool Commands + +== Audit Logging is Flexible and Configurable + +Audit logging is flexible and configurable in `cassandra.yaml` as +follows: + +* Keyspaces and tables to be monitored and audited may be specified. +* Users to be included/excluded may be specified. By default all users +are audit logged. +* Categories of operations to audit or exclude may be specified. +* The frequency at which to roll the log files may be specified. Default +frequency is hourly. + +== Configuring Audit Logging + +Audit Logging is configured on each node separately. Audit Logging is +configured in `cassandra.yaml` in the `audit_logging_options` setting. +The settings may be same/different on each node. + +=== Enabling Audit Logging + +Audit logging is enabled by setting the `enabled` option to `true` in +the `audit_logging_options` setting. + +.... +audit_logging_options: + enabled: true +.... + +=== Setting the Logger + +The audit logger is set with the `logger` option. + +.... +logger: BinAuditLogger +.... + +Two types of audit loggers are supported: `FileAuditLogger` and +`BinAuditLogger`. `BinAuditLogger` is the default setting. The +`BinAuditLogger` is an efficient way to log events to file in a binary +format. + +`FileAuditLogger` is synchronous, file-based audit logger; just uses the +standard logging mechanism. `FileAuditLogger` logs events to +`audit/audit.log` file using `slf4j` logger. + +The `NoOpAuditLogger` is a No-Op implementation of the audit logger to +be used as a default audit logger when audit logging is disabled. + +=== Setting the Audit Logs Directory + +The audit logs directory is set with the `audit_logs_dir` option. A new +directory is not created automatically and an existing directory must be +set. Audit Logs directory can be configured using +`cassandra.logdir.audit` system property or default is set to +`cassandra.logdir + /audit/`. A user created directory may be set. As an +example, create a directory for the audit logs and set its permissions. + +.... +sudo mkdir –p /cassandra/audit/logs/hourly +sudo chmod -R 777 /cassandra/audit/logs/hourly +.... + +Set the directory for the audit logs directory using the +`audit_logs_dir` option. + +.... +audit_logs_dir: "/cassandra/audit/logs/hourly" +.... + +=== Setting Keyspaces to Audit + +Set the keyspaces to include with the `included_keyspaces` option and +the keyspaces to exclude with the `excluded_keyspaces` option. By +default all keyspaces are included. By default, `system`, +`system_schema` and `system_virtual_schema` are excluded. + +.... +# included_keyspaces: +# excluded_keyspaces: system, system_schema, system_virtual_schema +.... + +=== Setting Categories to Audit + +The categories of database operations to be included are specified with +the `included_categories` option as a comma separated list. By default +all supported categories are included. The categories of database +operations to be excluded are specified with `excluded_categories` +option as a comma separated list. By default no category is excluded. + +.... +# included_categories: +# excluded_categories: +.... + +The supported categories for audit log are: + +[arabic] +. QUERY +. DML +. DDL +. DCL +. OTHER +. AUTH +. ERROR +. PREPARE + +=== Setting Users to Audit + +Users to audit log are set with the `included_users` and +`excluded_users` options. The `included_users` option specifies a comma +separated list of users to include explicitly and by default all users +are included. The `excluded_users` option specifies a comma separated +list of users to exclude explicitly and by default no user is excluded. + +.... +# included_users: +# excluded_users: +.... + +=== Setting the Roll Frequency + +The `roll_cycle` option sets the frequency at which the audit log file +is rolled. Supported values are `MINUTELY`, `HOURLY`, and `DAILY`. +Default value is `HOURLY`, which implies that after every hour a new +audit log file is created. + +.... +roll_cycle: HOURLY +.... + +An audit log file could get rolled for other reasons as well such as a +log file reaches the configured size threshold. + +=== Setting Archiving Options + +The archiving options are for archiving the rolled audit logs. The +`archive` command to use is set with the `archive_command` option and +the `max_archive_retries` sets the maximum # of tries of failed archive +commands. + +.... +# archive_command: +# max_archive_retries: 10 +.... + +Default archive command is `"/path/to/script.sh %path"` where `%path` is +replaced with the file being rolled: + +=== Other Settings + +The other audit logs settings are as follows. + +.... +# block: true +# max_queue_weight: 268435456 # 256 MiB +# max_log_size: 17179869184 # 16 GiB +.... + +The `block` option specifies whether the audit logging should block if +the logging falls behind or should drop log records. + +The `max_queue_weight` option sets the maximum weight of in memory queue +for records waiting to be written to the file before blocking or +dropping. + +The `max_log_size` option sets the maximum size of the rolled files to +retain on disk before deleting the oldest. + +== Using Nodetool to Enable Audit Logging + +The `nodetool enableauditlog` command may be used to enable audit logs +and it overrides the settings in `cassandra.yaml`. The +`nodetool enableauditlog` command syntax is as follows. + +.... +nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableauditlog + [--excluded-categories ] + [--excluded-keyspaces ] + [--excluded-users ] + [--included-categories ] + [--included-keyspaces ] + [--included-users ] [--logger ] +.... + +OPTIONS:: + --excluded-categories ;; + Comma separated list of Audit Log Categories to be excluded for + audit log. If not set the value from cassandra.yaml will be used + --excluded-keyspaces ;; + Comma separated list of keyspaces to be excluded for audit log. If + not set the value from cassandra.yaml will be used + --excluded-users ;; + Comma separated list of users to be excluded for audit log. If not + set the value from cassandra.yaml will be used + -h , --host ;; + Node hostname or ip address + --included-categories ;; + Comma separated list of Audit Log Categories to be included for + audit log. If not set the value from cassandra.yaml will be used + --included-keyspaces ;; + Comma separated list of keyspaces to be included for audit log. If + not set the value from cassandra.yaml will be used + --included-users ;; + Comma separated list of users to be included for audit log. If not + set the value from cassandra.yaml will be used + --logger ;; + Logger name to be used for AuditLogging. Default BinAuditLogger. If + not set the value from cassandra.yaml will be used + -p , --port ;; + Remote jmx agent port number + -pp, --print-port;; + Operate in 4.0 mode with hosts disambiguated by port number + -pw , --password ;; + Remote jmx agent password + -pwf , --password-file ;; + Path to the JMX password file + -u , --username ;; + Remote jmx agent username + +The `nodetool disableauditlog` command disables audit log. The command +syntax is as follows. + +.... +nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disableauditlog +.... + +OPTIONS:: + -h , --host ;; + Node hostname or ip address + -p , --port ;; + Remote jmx agent port number + -pp, --print-port;; + Operate in 4.0 mode with hosts disambiguated by port number + -pw , --password ;; + Remote jmx agent password + -pwf , --password-file ;; + Path to the JMX password file + -u , --username ;; + Remote jmx agent username + +== Viewing the Audit Logs + +An audit log event comprises of a keyspace that is being audited, the +operation that is being logged, the scope and the user. An audit log +entry comprises of the following attributes concatenated with a "|". + +.... +type (AuditLogEntryType): Type of request +source (InetAddressAndPort): Source IP Address from which request originated +user (String): User name +timestamp (long ): Timestamp of the request +batch (UUID): Batch of request +keyspace (String): Keyspace on which request is made +scope (String): Scope of request such as Table/Function/Aggregate name +operation (String): Database operation such as CQL command +options (QueryOptions): CQL Query options +state (QueryState): State related to a given query +.... + +Some of these attributes may not be applicable to a given request and +not all of these options must be set. + +== An Audit Logging Demo + +To demonstrate audit logging enable and configure audit logs with +following settings. + +.... +audit_logging_options: + enabled: true + logger: BinAuditLogger + audit_logs_dir: "/cassandra/audit/logs/hourly" + # included_keyspaces: + # excluded_keyspaces: system, system_schema, system_virtual_schema + # included_categories: + # excluded_categories: + # included_users: + # excluded_users: + roll_cycle: HOURLY + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: + # archive_command: + # max_archive_retries: 10 +.... + +Create the audit log directory `/cassandra/audit/logs/hourly` and set +its permissions as discussed earlier. Run some CQL commands such as +create a keyspace, create a table and query a table. Any supported CQL +commands may be run as discussed in section *What does Audit Logging +Log?*. Change directory (with `cd` command) to the audit logs directory. + +.... +cd /cassandra/audit/logs/hourly +.... + +List the files/directories and some `.cq4` files should get listed. +These are the audit logs files. + +.... +[ec2-user@ip-10-0-2-238 hourly]$ ls -l +total 28 +-rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-02.cq4 +-rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-03.cq4 +-rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 03:01 directory-listing.cq4t +.... + +The `auditlogviewer` tool is used to dump audit logs. Run the +`auditlogviewer` tool. Audit log files directory path is a required +argument. The output should be similar to the following output. + +.... +[ec2-user@ip-10-0-2-238 hourly]$ auditlogviewer /cassandra/audit/logs/hourly +WARN 03:12:11,124 Using Pauser.sleepy() as not enough processors, have 2, needs 8+ +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427328|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE AuditLogKeyspace; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427329|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE "auditlogkeyspace" +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711446279|type :SELECT|category:QUERY|ks:auditlogkeyspace|scope:t|operation:SELECT * FROM t; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564713878834|type :DROP_TABLE|category:DDL|ks:auditlogkeyspace|scope:t|operation:DROP TABLE IF EXISTS +AuditLogKeyspace.t; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42382|timestamp:1564714618360|ty +pe:REQUEST_FAILURE|category:ERROR|operation:CREATE KEYSPACE AuditLogKeyspace +WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};; Cannot add +existing keyspace "auditlogkeyspace" +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714690968|type :DROP_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:DROP KEYSPACE AuditLogKeyspace; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42406|timestamp:1564714708329|ty pe:CREATE_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:CREATE KEYSPACE +AuditLogKeyspace +WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714870678|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE auditlogkeyspace; +[ec2-user@ip-10-0-2-238 hourly]$ +.... + +The `auditlogviewer` tool usage syntax is as follows. + +.... +./auditlogviewer +Audit log files directory path is a required argument. +usage: auditlogviewer [...] [options] +-- +View the audit log contents in human readable format +-- +Options are: +-f,--follow Upon reaching the end of the log continue indefinitely + waiting for more records +-h,--help display this help message +-r,--roll_cycle How often to roll the log file was rolled. May be + necessary for Chronicle to correctly parse file names. (MINUTELY, HOURLY, + DAILY). Default HOURLY. +.... + +== Diagnostic events for user audit logging + +Any native transport enabled client is able to subscribe to diagnostic +events that are raised around authentication and CQL operations. These +events can then be consumed and used by external tools to implement a +Cassandra user auditing solution. diff --git a/doc/source/modules/cassandra/pages/new/fqllogging.adoc b/doc/source/modules/cassandra/pages/new/fqllogging.adoc new file mode 100644 index 000000000000..6bb20fc9f785 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/fqllogging.adoc @@ -0,0 +1,773 @@ += Full Query Logging + +Apache Cassandra 4.0 adds a new feature to support a means of logging +all queries as they were invoked +(https://issues.apache.org/jira/browse/CASSANDRA-13983[CASSANDRA-13983]). +For correctness testing it's useful to be able to capture production +traffic so that it can be replayed against both the old and new versions +of Cassandra while comparing the results. + +Cassandra 4.0 includes an implementation of a full query logging (FQL) +that uses chronicle-queue to implement a rotating log of queries. Some +of the features of FQL are: + +* Single thread asynchronously writes log entries to disk to reduce +impact on query latency +* Heap memory usage bounded by a weighted queue with configurable +maximum weight sitting in front of logging thread +* If the weighted queue is full producers can be blocked or samples can +be dropped +* Disk utilization is bounded by deleting old log segments once a +configurable size is reached +* The on disk serialization uses a flexible schema binary format +(chronicle-wire) making it easy to skip unrecognized fields, add new +ones, and omit old ones. +* Can be enabled and configured via JMX, disabled, and reset (delete on +disk data), logging path is configurable via both JMX and YAML +* Introduce new `fqltool` in `/bin` that currently implements `Dump` +which can dump in a readable format full query logs as well as follow +active full query logs. FQL `Replay` and `Compare` are also available. + +Cassandra 4.0 has a binary full query log based on Chronicle Queue that +can be controlled using `nodetool enablefullquerylog`, +`disablefullquerylog`, and `resetfullquerylog`. The log contains all +queries invoked, approximate time they were invoked, any parameters +necessary to bind wildcard values, and all query options. A readable +version of the log can be dumped or tailed using the new `bin/fqltool` +utility. The full query log is designed to be safe to use in production +and limits utilization of heap memory and disk space with limits you can +specify when enabling the log. + +== Objective + +Full Query Logging logs all requests to the CQL interface. The full +query logs could be used for debugging, performance benchmarking, +testing and auditing CQL queries. The audit logs also include CQL +requests but full query logging is dedicated to CQL requests only with +features such as FQL Replay and FQL Compare that are not available in +audit logging. + +== Full Query Logger + +The Full Query Logger is a logger that logs entire query contents after +the query finishes. FQL only logs the queries that successfully +complete. The other queries (e.g. timed out, failed) are not to be +logged. Queries are logged in one of two modes: single query or batch of +queries. The log for an invocation of a batch of queries includes the +following attributes: + +.... +type - The type of the batch +queries - CQL text of the queries +values - Values to bind to as parameters for the queries +queryOptions - Options associated with the query invocation +queryState - Timestamp state associated with the query invocation +batchTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked +.... + +The log for single CQL query includes the following attributes: + +.... +query - CQL query text +queryOptions - Options associated with the query invocation +queryState - Timestamp state associated with the query invocation +queryTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked +.... + +Full query logging is backed up by `BinLog`. BinLog is a quick and dirty +binary log. Its goal is good enough performance, predictable footprint, +simplicity in terms of implementation and configuration and most +importantly minimal impact on producers of log records. Performance +safety is accomplished by feeding items to the binary log using a +weighted queue and dropping records if the binary log falls sufficiently +far behind. Simplicity and good enough performance is achieved by using +a single log writing thread as well as Chronicle Queue to handle writing +the log, making it available for readers, as well as log rolling. + +Weighted queue is a wrapper around any blocking queue that turns it into +a blocking weighted queue. The queue will weigh each element being added +and removed. Adding to the queue is blocked if adding would violate the +weight bound. If an element weighs in at larger than the capacity of the +queue then exactly one such element will be allowed into the queue at a +time. If the weight of an object changes after it is added it could +create issues. Checking weight should be cheap so memorize expensive to +compute weights. If weight throws that can also result in leaked permits +so it's always a good idea to memorize weight so it doesn't throw. In +the interests of not writing unit tests for methods no one uses there is +a lot of `UnsupportedOperationException`. If you need them then add them +and add proper unit tests to `WeightedQueueTest`. "Good" tests. 100% +coverage including exception paths and resource leaks. + +The FQL tracks information about store files: + +* Store files as they are added and their storage impact. Delete them if +over storage limit. +* The files in the chronicle queue that have already rolled +* The number of bytes in store files that have already rolled + +FQL logger sequence is as follows: + +[arabic] +. Start the consumer thread that writes log records. Can only be done +once. +. Offer a record to the log. If the in memory queue is full the record +will be dropped and offer will return false. +. Put a record into the log. If the in memory queue is full the putting +thread will be blocked until there is space or it is interrupted. +. Clean up the buffers on thread exit, finalization will check again +once this is no longer reachable ensuring there are no stragglers in the +queue. +. Stop the consumer thread that writes log records. Can be called +multiple times. + +Next, we shall demonstrate full query logging with an example. + +== Configuring Full Query Logging + +Full Query Logger default options are configured on a per node basis in +`cassandra.yaml` with following configuration property. + +.... +full_query_logging_options: +.... + +As an example setup create a three node Cassandra 4.0 cluster. The +`nodetool status` command lists the nodes in the cluster. + +.... +[ec2-user@ip-10-0-2-238 ~]$ nodetool status +Datacenter: us-east-1 +===================== +Status=Up/Down +|/ State=Normal/Leaving/Joining/Moving +-- AddressLoad Tokens Owns (effective) Host ID Rack +UN 10.0.1.115 442.42 KiB 25632.6% b64cb32a-b32a-46b4-9eeb-e123fa8fc287 us-east-1b +UN 10.0.3.206 559.52 KiB 25631.9% 74863177-684b-45f4-99f7-d1006625dc9e us-east-1d +UN 10.0.2.238 587.87 KiB 25635.5% 4dcdadd2-41f9-4f34-9892-1f20868b27c7 us-east-1c +.... + +In subsequent sub-sections we shall discuss enabling and configuring +full query logging. + +=== Setting the FQL Directory + +A dedicated directory path must be provided to write full query log data +to when the full query log is enabled. The directory for FQL must exist, +and have permissions set. The full query log will recursively delete the +contents of this path at times. It is recommended not to place links in +this directory to other sections of the filesystem. The +`full_query_log_dir` property in `cassandra.yaml` is pre-configured. + +.... +full_query_log_dir: /tmp/cassandrafullquerylog +.... + +The `log_dir` option may be used to configure the FQL directory if the +`full_query_log_dir` is not set. + +.... +full_query_logging_options: + # log_dir: +.... + +Create the FQL directory if it does not exist and set its permissions. + +.... +sudo mkdir -p /tmp/cassandrafullquerylog +sudo chmod -R 777 /tmp/cassandrafullquerylog +.... + +=== Setting the Roll Cycle + +The `roll_cycle` option sets how often to roll FQL log segments so they +can potentially be reclaimed. Supported values are `MINUTELY`, `HOURLY` +and `DAILY`. Default setting is `HOURLY`. + +.... +roll_cycle: HOURLY +.... + +=== Setting Other Options + +The `block` option specifies whether the FQL should block if the FQL +falls behind or should drop log records. Default value of `block` is +`true`. The `max_queue_weight` option sets the maximum weight of in +memory queue for records waiting to be written to the file before +blocking or dropping. The `max_log_size` option sets the maximum size of +the rolled files to retain on disk before deleting the oldest file. The +`archive_command` option sets the archive command to execute on rolled +log files. The `max_archive_retries` option sets the max number of +retries of failed archive commands. + +.... +# block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file +being rolled: + # archive_command: + # max_archive_retries: 10 +.... + +The `max_queue_weight` must be > 0. Similarly `max_log_size` must be > +0. An example full query logging options is as follows. + +.... +full_query_log_dir: /tmp/cassandrafullquerylog + +# default options for full query logging - these can be overridden from command line when +executing +# nodetool enablefullquerylog +# nodetool enablefullquerylog +#full_query_logging_options: + # log_dir: + roll_cycle: HOURLY + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file +being rolled: + # archive_command: + # max_archive_retries: 10 +.... + +The `full_query_log_dir` setting is not within the +`full_query_logging_options` but still is for full query logging. + +=== Enabling Full Query Logging + +Full Query Logging is enabled on a per-node basis. . The +`nodetool enablefullquerylog` command is used to enable full query +logging. Defaults for the options are configured in `cassandra.yaml` and +these can be overridden from command line. + +The syntax of the nodetool enablefullquerylog command is as follows: + +.... +nodetool [(-h | --host )] [(-p | --port )] +[(-pp | --print-port)] [(-pw | --password )] +[(-pwf | --password-file )] +[(-u | --username )] enablefullquerylog +[--archive-command ] [--blocking] +[--max-archive-retries ] +[--max-log-size ] [--max-queue-weight ] +[--path ] [--roll-cycle ] + +OPTIONS + --archive-command +Command that will handle archiving rolled full query log files. +Format is "/path/to/script.sh %path" where %path will be replaced +with the file to archive + + --blocking +If the queue is full whether to block producers or drop samples. + + -h , --host +Node hostname or ip address + + --max-archive-retries +Max number of archive retries. + + --max-log-size +How many bytes of log data to store before dropping segments. Might +not be respected if a log file hasn't rolled so it can be deleted. + + --max-queue-weight +Maximum number of bytes of query data to queue to disk before +blocking or dropping samples. + + -p , --port +Remote jmx agent port number + + --path +Path to store the full query log at. Will have it's contents +recursively deleted. + + -pp, --print-port +Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password +Remote jmx agent password + + -pwf , --password-file +Path to the JMX password file + + --roll-cycle +How often to roll the log file (MINUTELY, HOURLY, DAILY). + + -u , --username +Remote jmx agent username +.... + +Run the following command on each node in the cluster. + +.... +nodetool enablefullquerylog --path /tmp/cassandrafullquerylog +.... + +After the full query logging has been enabled run some CQL statements to +generate full query logs. + +== Running CQL Statements + +Start CQL interface with `cqlsh` command. + +.... +[ec2-user@ip-10-0-2-238 ~]$ cqlsh +Connected to Cassandra Cluster at 127.0.0.1:9042. +[cqlsh 5.0.1 | Cassandra 4.0-SNAPSHOT | CQL spec 3.4.5 | Native protocol v4] +Use HELP for help. +cqlsh> +.... + +Run some CQL statements. Create a keyspace. Create a table and add some +data. Query the table. + +.... +cqlsh> CREATE KEYSPACE AuditLogKeyspace + ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; +cqlsh> USE AuditLogKeyspace; +cqlsh:auditlogkeyspace> CREATE TABLE t ( +...id int, +...k int, +...v text, +...PRIMARY KEY (id) +... ); +cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); +cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); +cqlsh:auditlogkeyspace> SELECT * FROM t; + +id | k | v +----+---+------ + 0 | 1 | val1 + +(1 rows) +cqlsh:auditlogkeyspace> +.... + +== Viewing the Full Query Logs + +The `fqltool` is used to view the full query logs. The `fqltool` has the +following usage syntax. + +.... +fqltool [] + +The most commonly used fqltool commands are: + compare Compare result files generated by fqltool replay + dump Dump the contents of a full query log + help Display help information + replay Replay full query logs + +See 'fqltool help ' for more information on a specific command. +.... + +The `fqltool dump` command is used to dump (list) the contents of a full +query log. Run the `fqltool dump` command after some CQL statements have +been run. + +The full query logs get listed. Truncated output is as follows: + +.... +[ec2-user@ip-10-0-2-238 cassandrafullquerylog]$ fqltool dump ./ +WARN [main] 2019-08-02 03:07:53,635 Slf4jExceptionHandler.java:42 - Using Pauser.sleepy() as not enough processors, have 2, needs 8+ +Type: single-query +Query start time: 1564708322030 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system.peers +Values: + +Type: single-query +Query start time: 1564708322054 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system.local WHERE key='local' +Values: + +Type: single-query +Query start time: 1564708322109 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system_schema.keyspaces +Values: + +Type: single-query +Query start time: 1564708322116 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system_schema.tables +Values: + +Type: single-query +Query start time: 1564708322139 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system_schema.columns +Values: + +Type: single-query +Query start time: 1564708322142 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system_schema.functions +Values: + +Type: single-query +Query start time: 1564708322141 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system_schema.aggregates +Values: + +Type: single-query +Query start time: 1564708322143 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system_schema.types +Values: + +Type: single-query +Query start time: 1564708322144 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system_schema.indexes +Values: + +Type: single-query +Query start time: 1564708322142 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system_schema.triggers +Values: + +Type: single-query +Query start time: 1564708322145 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708322 +Query: SELECT * FROM system_schema.views +Values: + +Type: single-query +Query start time: 1564708345408 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:-2147483648 +Query: CREATE KEYSPACE AuditLogKeyspace +WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; +Values: + +Type: single-query +Query start time: 1564708345675 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708345 +Query: SELECT peer, rpc_address, schema_version FROM system.peers +Values: + +Type: single-query +Query start time: 1564708345676 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708345 +Query: SELECT schema_version FROM system.local WHERE key='local' +Values: + +Type: single-query +Query start time: 1564708346323 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708346 +Query: SELECT * FROM system_schema.keyspaces WHERE keyspace_name = 'auditlogkeyspace' +Values: + +Type: single-query +Query start time: 1564708360873 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:-2147483648 +Query: USE AuditLogKeyspace; +Values: + +Type: single-query +Query start time: 1564708360874 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:-2147483648 +Query: USE "auditlogkeyspace" +Values: + +Type: single-query +Query start time: 1564708378837 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:-2147483648 +Query: CREATE TABLE t ( + id int, + k int, + v text, + PRIMARY KEY (id) +); +Values: + +Type: single-query +Query start time: 1564708379247 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708379 +Query: SELECT * FROM system_schema.tables WHERE keyspace_name = 'auditlogkeyspace' AND table_name = 't' +Values: + +Type: single-query +Query start time: 1564708379255 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708379 +Query: SELECT * FROM system_schema.views WHERE keyspace_name = 'auditlogkeyspace' AND view_name = 't' +Values: + +Type: single-query +Query start time: 1564708397144 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708397 +Query: INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); +Values: + +Type: single-query +Query start time: 1564708397167 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708397 +Query: INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); +Values: + +Type: single-query +Query start time: 1564708434782 +Protocol version: 4 +Generated timestamp:-9223372036854775808 +Generated nowInSeconds:1564708434 +Query: SELECT * FROM t; +Values: + +[ec2-user@ip-10-0-2-238 cassandrafullquerylog]$ +.... + +Full query logs are generated on each node. Enabling of full query +logging on one node and the log files generated on the node are as +follows: + +.... +[root@localhost ~]# ssh -i cassandra.pem ec2-user@52.1.243.83 +Last login: Fri Aug 2 00:14:53 2019 from 75.155.255.51 +[ec2-user@ip-10-0-3-206 ~]$ sudo mkdir /tmp/cassandrafullquerylog +[ec2-user@ip-10-0-3-206 ~]$ sudo chmod -R 777 /tmp/cassandrafullquerylog +[ec2-user@ip-10-0-3-206 ~]$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog +[ec2-user@ip-10-0-3-206 ~]$ cd /tmp/cassandrafullquerylog +[ec2-user@ip-10-0-3-206 cassandrafullquerylog]$ ls -l +total 44 +-rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 01:24 20190802-01.cq4 +-rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 01:23 directory-listing.cq4t +[ec2-user@ip-10-0-3-206 cassandrafullquerylog]$ +.... + +Enabling of full query logging on another node and the log files +generated on the node are as follows: + +.... +[root@localhost ~]# ssh -i cassandra.pem ec2-user@3.86.103.229 +Last login: Fri Aug 2 00:13:04 2019 from 75.155.255.51 +[ec2-user@ip-10-0-1-115 ~]$ sudo mkdir /tmp/cassandrafullquerylog +[ec2-user@ip-10-0-1-115 ~]$ sudo chmod -R 777 /tmp/cassandrafullquerylog +[ec2-user@ip-10-0-1-115 ~]$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog +[ec2-user@ip-10-0-1-115 ~]$ cd /tmp/cassandrafullquerylog +[ec2-user@ip-10-0-1-115 cassandrafullquerylog]$ ls -l +total 44 +-rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 01:24 20190802-01.cq4 +-rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 01:23 directory-listing.cq4t +[ec2-user@ip-10-0-1-115 cassandrafullquerylog]$ +.... + +The `nodetool resetfullquerylog` resets the full query logger if it is +enabled. Also deletes any generated files in the last used full query +log path as well as the one configured in `cassandra.yaml`. It stops the +full query log and cleans files in the configured full query log +directory from `cassandra.yaml` as well as JMX. + +== Full Query Replay + +The `fqltool` provides the `replay` command +(https://issues.apache.org/jira/browse/CASSANDRA-14618[CASSANDRA-14618]) +to replay the full query logs. The FQL replay could be run on a +different machine or even a different cluster for testing, debugging and +performance benchmarking. + +The main objectives of `fqltool replay` are: + +* To be able to compare different runs of production traffic against +different versions/configurations of Cassandra. +* Take FQL logs from several machines and replay them in "order" by the +timestamps recorded. +* Record the results from each run to be able to compare different runs +(against different clusters/versions/etc). +* If fqltool replay is run against 2 or more clusters, the results could +be compared. + +The FQL replay could also be used on the same node on which the full +query log are generated to recreate a dropped database object. + +____ +The syntax of `fqltool replay` is as follows: +____ + +.... +fqltool replay [--keyspace ] [--results ] +[--store-queries ] --target ... [--] +[...] + +OPTIONS + --keyspace +Only replay queries against this keyspace and queries without +keyspace set. + + --results +Where to store the results of the queries, this should be a +directory. Leave this option out to avoid storing results. + + --store-queries +Path to store the queries executed. Stores queries in the same order +as the result sets are in the result files. Requires --results + + --target +Hosts to replay the logs to, can be repeated to replay to more +hosts. + + -- +This option can be used to separate command-line options from the +list of argument, (useful when arguments might be mistaken for +command-line options + + [...] +Paths containing the full query logs to replay. +.... + +As an example of using `fqltool replay`, drop a keyspace. + +.... +cqlsh:auditlogkeyspace> DROP KEYSPACE AuditLogKeyspace; +.... + +Subsequently run `fqltool replay`. The directory to store results of +queries and the directory to store the queries run are specified and +these directories must be created and permissions set before running +`fqltool replay`. The `--results` and `--store-queries` directories are +optional but if `--store-queries` is to be set the `--results` must also +be set. + +.... +[ec2-user@ip-10-0-2-238 cassandra]$ fqltool replay --keyspace AuditLogKeyspace --results +/cassandra/fql/logs/results/replay --store-queries /cassandra/fql/logs/queries/replay -- +target 3.91.56.164 -- /tmp/cassandrafullquerylog +.... + +Describe the keyspaces after running `fqltool replay` and the keyspace +that was dropped gets listed again. + +.... +cqlsh:auditlogkeyspace> DESC KEYSPACES; + +system_schema system system_distributed system_virtual_schema +system_auth auditlogkeyspace system_traces system_views + +cqlsh:auditlogkeyspace> +.... + +== Full Query Compare + +The `fqltool compare` command +(https://issues.apache.org/jira/browse/CASSANDRA-14619[CASSANDRA-14619]) +is used to compare result files generated by `fqltool replay`. The +`fqltool compare` command that can take the recorded runs from +`fqltool replay` and compares them, it should output any differences and +potentially all queries against the mismatching partition up until the +mismatch. + +The `fqltool compare` could be used for comparing result files generated +by different versions of Cassandra or different Cassandra configurations +as an example. The command usage is as follows: + +.... +[ec2-user@ip-10-0-2-238 ~]$ fqltool help compare +NAME + fqltool compare - Compare result files generated by fqltool replay + +SYNOPSIS + fqltool compare --queries [--] [...] + +OPTIONS + --queries + Directory to read the queries from. It is produced by the fqltool + replay --store-queries option. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Directories containing result files to compare. +.... + +The `fqltool compare` stores each row as a separate chronicle document +to be able to avoid reading up the entire result set in memory when +comparing document formats: + +To mark the start of a new result set: + +.... +version: int16 +type: column_definitions +column_count: int32; +column_definition: text, text +column_definition: text, text +.... + +To mark a failed query set: + +.... +version: int16 +type: query_failed +message: text +.... + +To mark a row set: + +.... +version: int16 +type: row +row_column_count: int32 +column: bytes +.... + +To mark the end of a result set: + +.... +version: int16 +type: end_resultset +.... + +== Performance Overhead of FQL + +In performance testing FQL appears to have little or no overhead in +`WRITE` only workloads, and a minor overhead in `MIXED` workload. diff --git a/doc/source/modules/cassandra/pages/new/index.adoc b/doc/source/modules/cassandra/pages/new/index.adoc new file mode 100644 index 000000000000..50fafa756ff3 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/index.adoc @@ -0,0 +1,11 @@ += New Features in Apache Cassandra 4.0 + +This section covers the new features in Apache Cassandra 4.0. + +* xref:new/java11.adoc[Java 11] +* xref:new/virtualtables.adoc[Virtual tables] +* xref:new/auditlogging.adoc[Audit logging] +* xref:new/fqllogging.adoc[Full query logging] +* xref:new/messaging.adoc[Messaging] +* xref:new/streaming.adoc[Streaming] +* xref:new/transientreplication.adoc[Transient replication] diff --git a/doc/source/modules/cassandra/pages/new/java11.adoc b/doc/source/modules/cassandra/pages/new/java11.adoc new file mode 100644 index 000000000000..f3efc50c1ac4 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/java11.adoc @@ -0,0 +1,292 @@ += Support for Java 11 + +In the new Java release cadence a new Java version is made available +every six months. The more frequent release cycle is favored as it +brings new Java features to the developers as and when they are +developed without the wait that the earlier 3 year release model +incurred. Not every Java version is a Long Term Support (LTS) version. +After Java 8 the next LTS version is Java 11. Java 9, 10, 12 and 13 are +all non-LTS versions. + +One of the objectives of the Apache Cassandra 4.0 version is to support +the recent LTS Java versions 8 and 11 +(https://issues.apache.org/jira/browse/CASSANDRA-9608[CASSANDRA-9608]). +Java 8 and Java 11 may be used to build and run Apache Cassandra 4.0. + +*Note*: Support for JDK 11 in Apache Cassandra 4.0 is an experimental +feature, and not recommended for production use. + +== Support Matrix + +The support matrix for the Java versions for compiling and running +Apache Cassandra 4.0 is detailed in Table 1. The build version is along +the vertical axis and the run version is along the horizontal axis. + +Table 1 : Support Matrix for Java + +[width="68%",cols="34%,30%,36%",] +|=== +| |Java 8 (Run) |Java 11 (Run) +|Java 8 (Build) |Supported |Supported +|Java 11(Build) |Not Supported |Supported +|=== + +Essentially Apache 4.0 source code built with Java 11 cannot be run with +Java 8. Next, we shall discuss using each of Java 8 and 11 to build and +run Apache Cassandra 4.0. + +== Using Java 8 to Build + +To start with, install Java 8. As an example, for installing Java 8 on +RedHat Linux the command is as follows: + +.... +$ sudo yum install java-1.8.0-openjdk-devel +.... + +Set `JAVA_HOME` and `JRE_HOME` environment variables in the shell bash +script. First, open the bash script: + +.... +$ sudo vi ~/.bashrc +.... + +Set the environment variables including the `PATH`. + +.... +$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk +$ export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre +$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin +.... + +Download and install Apache Cassandra 4.0 source code from the Git along +with the dependencies. + +.... +$ git clone https://github.com/apache/cassandra.git +.... + +If Cassandra is already running stop Cassandra with the following +command. + +.... +[ec2-user@ip-172-30-3-146 bin]$ ./nodetool stopdaemon +.... + +Build the source code from the `cassandra` directory, which has the +`build.xml` build script. The Apache Ant uses the Java version set in +the `JAVA_HOME` environment variable. + +.... +$ cd ~/cassandra +$ ant +.... + +Apache Cassandra 4.0 gets built with Java 8. Set the environment +variable for `CASSANDRA_HOME` in the bash script. Also add the +`CASSANDRA_HOME/bin` to the `PATH` variable. + +.... +$ export CASSANDRA_HOME=~/cassandra +$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CASSANDRA_HOME/bin +.... + +To run Apache Cassandra 4.0 with either of Java 8 or Java 11 run the +Cassandra application in the `CASSANDRA_HOME/bin` directory, which is in +the `PATH` env variable. + +.... +$ cassandra +.... + +The Java version used to run Cassandra gets output as Cassandra is +getting started. As an example if Java 11 is used, the run output should +include similar to the following output snippet: + +.... +INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:480 - Hostname: ip-172-30-3- +146.ec2.internal:7000:7001 +INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:487 - JVM vendor/version: OpenJDK +64-Bit Server VM/11.0.3 +INFO [main] 2019-07-31 21:18:16,863 CassandraDaemon.java:488 - Heap size: +1004.000MiB/1004.000MiB +.... + +The following output indicates a single node Cassandra 4.0 cluster has +started. + +.... +INFO [main] 2019-07-31 21:18:19,687 InboundConnectionInitiator.java:130 - Listening on +address: (127.0.0.1:7000), nic: lo, encryption: enabled (openssl) +... +... +INFO [main] 2019-07-31 21:18:19,850 StorageService.java:512 - Unable to gossip with any +peers but continuing anyway since node is in its own seed list +INFO [main] 2019-07-31 21:18:19,864 StorageService.java:695 - Loading persisted ring state +INFO [main] 2019-07-31 21:18:19,865 StorageService.java:814 - Starting up server gossip +INFO [main] 2019-07-31 21:18:20,088 BufferPool.java:216 - Global buffer pool is enabled, +when pool is exhausted (max is 251.000MiB) it will allocate on heap +INFO [main] 2019-07-31 21:18:20,110 StorageService.java:875 - This node will not auto +bootstrap because it is configured to be a seed node. +... +... +INFO [main] 2019-07-31 21:18:20,809 StorageService.java:1507 - JOINING: Finish joining ring +INFO [main] 2019-07-31 21:18:20,921 StorageService.java:2508 - Node 127.0.0.1:7000 state +jump to NORMAL +.... + +== Using Java 11 to Build + +If Java 11 is used to build Apache Cassandra 4.0, first Java 11 must be +installed and the environment variables set. As an example, to download +and install Java 11 on RedHat Linux run the following command. + +.... +$ yum install java-11-openjdk-devel +.... + +Set the environment variables in the bash script for Java 11. The first +command is to open the bash script. + +.... +$ sudo vi ~/.bashrc +$ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk +$ export JRE_HOME=/usr/lib/jvm/java-11-openjdk/jre +$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin +.... + +To build source code with Java 11 one of the following two options must +be used. + +____ +[arabic] +. {blank} ++ +Include Apache Ant command-line option `-Duse.jdk=11` as follows::: +.... +$ ant -Duse.jdk=11 +.... +. {blank} ++ +Set environment variable `CASSANDRA_USE_JDK11` to `true`::: +.... +$ export CASSANDRA_USE_JDK11=true +.... +____ + +As an example, set the environment variable `CASSANDRA_USE_JDK11` to +`true`. + +.... +[ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true +[ec2-user@ip-172-30-3-146 cassandra]$ ant +Buildfile: /home/ec2-user/cassandra/build.xml +.... + +Or, set the command-line option. + +.... +[ec2-user@ip-172-30-3-146 cassandra]$ ant -Duse.jdk11=true +.... + +The build output should include the following. + +.... +_build_java: + [echo] Compiling for Java 11 +... +... +build: + +_main-jar: + [copy] Copying 1 file to /home/ec2-user/cassandra/build/classes/main/META-INF + [jar] Building jar: /home/ec2-user/cassandra/build/apache-cassandra-4.0-SNAPSHOT.jar +... +... +_build-test: + [javac] Compiling 739 source files to /home/ec2-user/cassandra/build/test/classes + [copy] Copying 25 files to /home/ec2-user/cassandra/build/test/classes +... +... +jar: + [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/stress/META-INF + [mkdir] Created dir: /home/ec2-user/cassandra/build/tools/lib + [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/stress.jar + [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/fqltool/META-INF + [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/fqltool.jar + +BUILD SUCCESSFUL +Total time: 1 minute 3 seconds +[ec2-user@ip-172-30-3-146 cassandra]$ +.... + +== Common Issues + +One of the two options mentioned must be used to compile with JDK 11 or +the build fails and the following error message is output. + +.... +[ec2-user@ip-172-30-3-146 cassandra]$ ant +Buildfile: /home/ec2-user/cassandra/build.xml +validate-build-conf: + +BUILD FAILED +/home/ec2-user/cassandra/build.xml:293: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true must +be set when building from java 11 +Total time: 1 second +[ec2-user@ip-172-30-3-146 cassandra]$ +.... + +The Java 11 built Apache Cassandra 4.0 source code may be run with Java +11 only. If a Java 11 built code is run with Java 8 the following error +message gets output. + +.... +[root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com +Last login: Wed Jul 31 20:47:26 2019 from 75.155.255.51 +[ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME +/usr/lib/jvm/java-1.8.0-openjdk +[ec2-user@ip-172-30-3-146 ~]$ cassandra +... +... +Error: A JNI error has occurred, please check your installation and try again +Exception in thread "main" java.lang.UnsupportedClassVersionError: +org/apache/cassandra/service/CassandraDaemon has been compiled by a more recent version of +the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes +class file versions up to 52.0 + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at ... +... +.... + +The `CASSANDRA_USE_JDK11` variable or the command-line option +`-Duse.jdk11` cannot be used to build with Java 8. To demonstrate set +`JAVA_HOME` to version 8. + +.... +[root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com +Last login: Wed Jul 31 21:41:50 2019 from 75.155.255.51 +[ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME +/usr/lib/jvm/java-1.8.0-openjdk +.... + +Set the `CASSANDRA_USE_JDK11=true` or command-line option +`-Duse.jdk11=true`. Subsequently, run Apache Ant to start the build. The +build fails with error message listed. + +.... +[ec2-user@ip-172-30-3-146 ~]$ cd +cassandra +[ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true +[ec2-user@ip-172-30-3-146 cassandra]$ ant +Buildfile: /home/ec2-user/cassandra/build.xml + +validate-build-conf: + +BUILD FAILED +/home/ec2-user/cassandra/build.xml:285: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true cannot +be set when building from java 8 + +Total time: 0 seconds +.... diff --git a/doc/source/modules/cassandra/pages/new/messaging.adoc b/doc/source/modules/cassandra/pages/new/messaging.adoc new file mode 100644 index 000000000000..07a423bf1502 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/messaging.adoc @@ -0,0 +1,360 @@ += Improved Internode Messaging + +Apache Cassandra 4.0 has added several new improvements to internode +messaging. + +== Optimized Internode Messaging Protocol + +The internode messaging protocol has been optimized +(https://issues.apache.org/jira/browse/CASSANDRA-14485[CASSANDRA-14485]). +Previously the `IPAddressAndPort` of the sender was included with each +message that was sent even though the `IPAddressAndPort` had already +been sent once when the initial connection/session was established. In +Cassandra 4.0 `IPAddressAndPort` has been removed from every separate +message sent and only sent when connection/session is initiated. + +Another improvement is that at several instances (listed) a fixed 4-byte +integer value has been replaced with `vint` as a `vint` is almost always +less than 1 byte: + +* The `paramSize` (the number of parameters in the header) +* Each individual parameter value +* The `payloadSize` + +== NIO Messaging + +In Cassandra 4.0 peer-to-peer (internode) messaging has been switched to +non-blocking I/O (NIO) via Netty +(https://issues.apache.org/jira/browse/CASSANDRA-8457[CASSANDRA-8457]). + +As serialization format, each message contains a header with several +fixed fields, an optional key-value parameters section, and then the +message payload itself. Note: the IP address in the header may be either +IPv4 (4 bytes) or IPv6 (16 bytes). + +____ +The diagram below shows the IPv4 address for brevity. +____ + +.... +1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 +0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| PROTOCOL MAGIC | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Message ID | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Timestamp | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Addr len | IP Address (IPv4) / ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/ | Verb / ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/ | Parameters size / ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/ | Parameter data / ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/ | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Payload size | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| / +/ Payload / +/ | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +.... + +An individual parameter has a String key and a byte array value. The key +is serialized with its length, encoded as two bytes, followed by the +UTF-8 byte encoding of the string. The body is serialized with its +length, encoded as four bytes, followed by the bytes of the value. + +== Resource limits on Queued Messages + +System stability is improved by enforcing strict resource limits +(https://issues.apache.org/jira/browse/CASSANDRA-15066[CASSANDRA-15066]) +on the number of outbound messages that are queued, measured by the +`serializedSize` of the message. There are three separate limits imposed +simultaneously to ensure that progress is always made without any +reasonable combination of failures impacting a node’s stability. + +[arabic] +. Global, per-endpoint and per-connection limits are imposed on messages +queued for delivery to other nodes and waiting to be processed on +arrival from other nodes in the cluster. These limits are applied to the +on-wire size of the message being sent or received. +. The basic per-link limit is consumed in isolation before any endpoint +or global limit is imposed. Each node-pair has three links: urgent, +small and large. So any given node may have a maximum of +`N*3 * (internode_application_send_queue_capacity_in_bytes + internode_application_receive_queue_capacity_in_bytes)` +messages queued without any coordination between them although in +practice, with token-aware routing, only RF*tokens nodes should need to +communicate with significant bandwidth. +. The per-endpoint limit is imposed on all messages exceeding the +per-link limit, simultaneously with the global limit, on all links to or +from a single node in the cluster. The global limit is imposed on all +messages exceeding the per-link limit, simultaneously with the +per-endpoint limit, on all links to or from any node in the cluster. The +following configuration settings have been added to `cassandra.yaml` for +resource limits on queued messages. + +.... +internode_application_send_queue_capacity_in_bytes: 4194304 #4MiB +internode_application_send_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB +internode_application_send_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB +internode_application_receive_queue_capacity_in_bytes: 4194304 #4MiB +internode_application_receive_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB +internode_application_receive_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB +.... + +== Virtual Tables for Messaging Metrics + +Metrics is improved by keeping metrics using virtual tables for +inter-node inbound and outbound messaging +(https://issues.apache.org/jira/browse/CASSANDRA-15066[CASSANDRA-15066]). +For inbound messaging a virtual table (`internode_inbound`) has been +added to keep metrics for: + +* Bytes and count of messages that could not be serialized or flushed +due to an error +* Bytes and count of messages scheduled +* Bytes and count of messages successfully processed +* Bytes and count of messages successfully received +* Nanos and count of messages throttled +* Bytes and count of messages expired +* Corrupt frames recovered and unrecovered + +A separate virtual table (`internode_outbound`) has been added for +outbound inter-node messaging. The outbound virtual table keeps metrics +for: + +* Bytes and count of messages pending +* Bytes and count of messages sent +* Bytes and count of messages expired +* Bytes and count of messages that could not be sent due to an error +* Bytes and count of messages overloaded +* Active Connection Count +* Connection Attempts +* Successful Connection Attempts + +== Hint Messaging + +A specialized version of hint message that takes an already encoded in a +`ByteBuffer` hint and sends it verbatim has been added. It is an +optimization for when dispatching a hint file of the current messaging +version to a node of the same messaging version, which is the most +common case. It saves on extra `ByteBuffer` allocations one redundant +hint deserialization-serialization cycle. + +== Internode Application Timeout + +A configuration setting has been added to `cassandra.yaml` for the +maximum continuous period a connection may be unwritable in application +space. + +.... +# internode_application_timeout_in_ms = 30000 +.... + +Some other new features include logging of message size to trace message +for tracing a query. + +== Paxos prepare and propose stage for local requests optimized + +In pre-4.0 Paxos prepare and propose messages always go through entire +`MessagingService` stack in Cassandra even if request is to be served +locally, we can enhance and make local requests severed w/o involving +`MessagingService`. Similar things are done elsewhere in Cassandra which +skips `MessagingService` stage for local requests. + +This is what it looks like in pre 4.0 if we have tracing on and run a +light-weight transaction: + +.... +Sending PAXOS_PREPARE message to /A.B.C.D [MessagingService-Outgoing-/A.B.C.D] | 2017-09-11 +21:55:18.971000 | A.B.C.D | 15045 +… REQUEST_RESPONSE message received from /A.B.C.D [MessagingService-Incoming-/A.B.C.D] | +2017-09-11 21:55:18.976000 | A.B.C.D | 20270 +… Processing response from /A.B.C.D [SharedPool-Worker-4] | 2017-09-11 21:55:18.976000 | +A.B.C.D | 20372 +.... + +Same thing applies for Propose stage as well. + +In version 4.0 Paxos prepare and propose stage for local requests are +optimized +(https://issues.apache.org/jira/browse/CASSANDRA-13862[CASSANDRA-13862]). + +== Quality Assurance + +Several other quality assurance improvements have been made in version +4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-15066[CASSANDRA-15066]). + +=== Framing + +Version 4.0 introduces framing to all internode messages, i.e. the +grouping of messages into a single logical payload with headers and +trailers; these frames are guaranteed to either contain at most one +message, that is split into its own unique sequence of frames (for large +messages), or that a frame contains only complete messages. + +=== Corruption prevention + +Previously, intra-datacenter internode messages would be unprotected +from corruption by default, as only LZ4 provided any integrity checks. +All messages to post 4.0 nodes are written to explicit frames, which may +be: + +* LZ4 encoded +* CRC protected + +The Unprotected option is still available. + +=== Resilience + +For resilience, all frames are written with a separate CRC protected +header, of 8 and 6 bytes respectively. If corruption occurs in this +header, the connection must be reset, as before. If corruption occurs +anywhere outside of the header, the corrupt frame will be skipped, +leaving the connection intact and avoiding the loss of any messages +unnecessarily. + +Previously, any issue at any point in the stream would result in the +connection being reset, with the loss of any in-flight messages. + +=== Efficiency + +The overall memory usage, and number of byte shuffles, on both inbound +and outbound messages is reduced. + +Outbound the Netty LZ4 encoder maintains a chunk size buffer (64KiB), +that is filled before any compressed frame can be produced. Our frame +encoders avoid this redundant copy, as well as freeing 192KiB per +endpoint. + +Inbound, frame decoders guarantee only to copy the number of bytes +necessary to parse a frame, and to never store more bytes than +necessary. This improvement applies twice to LZ4 connections, improving +both the message decode and the LZ4 frame decode. + +=== Inbound Path + +Version 4.0 introduces several improvements to the inbound path. + +An appropriate message handler is used based on whether large or small +messages are expected on a particular connection as set in a flag. +`NonblockingBufferHandler`, running on event loop, is used for small +messages, and `BlockingBufferHandler`, running off event loop, for large +messages. The single implementation of `InboundMessageHandler` handles +messages of any size effectively by deriving size of the incoming +message from the byte stream. In addition to deriving size of the +message from the stream, incoming message expiration time is proactively +read, before attempting to deserialize the entire message. If it’s +expired at the time when a message is encountered the message is just +skipped in the byte stream altogether. And if a message fails to be +deserialized while still on the receiving side - say, because of table +id or column being unknown - bytes are skipped, without dropping the +entire connection and losing all the buffered messages. An immediately +reply back is sent to the coordinator node with the failure reason, +rather than waiting for the coordinator callback to expire. This logic +is extended to a corrupted frame; a corrupted frame is safely skipped +over without dropping the connection. + +Inbound path imposes strict limits on memory utilization. Specifically, +the memory occupied by all parsed, but unprocessed messages is bound - +on per-connection, per-endpoint, and global basis. Once a connection +exceeds its local unprocessed capacity and cannot borrow any permits +from per-endpoint and global reserve, it simply stops processing further +messages, providing natural backpressure - until sufficient capacity is +regained. + +=== Outbound Connections + +==== Opening a connection + +A consistent approach is adopted for all kinds of failure to connect, +including: refused by endpoint, incompatible versions, or unexpected +exceptions; + +* Retry forever, until either success or no messages waiting to deliver. +* Wait incrementally longer periods before reconnecting, up to a maximum +of 1s. +* While failing to connect, no reserve queue limits are acquired. + +==== Closing a connection + +* Correctly drains outbound messages that are waiting to be delivered +(unless disconnected and fail to reconnect). +* Messages written to a closing connection are either delivered or +rejected, with a new connection being opened if the old is irrevocably +closed. +* Unused connections are pruned eventually. + +==== Reconnecting + +We sometimes need to reconnect a perfectly valid connection, e.g. if the +preferred IP address changes. We ensure that the underlying connection +has no in-progress operations before closing it and reconnecting. + +==== Message Failure + +Propagates to callbacks instantly, better preventing overload by +reclaiming committed memory. + +===== Expiry + +* No longer experiences head-of-line blocking (e.g. undroppable message +preventing all droppable messages from being expired). +* While overloaded, expiry is attempted eagerly on enqueuing threads. +* While disconnected we schedule regular pruning, to handle the case +where messages are no longer being sent, but we have a large backlog to +expire. + +===== Overload + +* Tracked by bytes queued, as opposed to number of messages. + +===== Serialization Errors + +* Do not result in the connection being invalidated; the message is +simply completed with failure, and then erased from the frame. +* Includes detected mismatch between calculated serialization size to +actual. + +Failures to flush to network, perhaps because the connection has been +reset are not currently notified to callback handlers, as the necessary +information has been discarded, though it would be possible to do so in +future if we decide it is worth our while. + +==== QoS + +"Gossip" connection has been replaced with a general purpose "Urgent" +connection, for any small messages impacting system stability. + +==== Metrics + +We track, and expose via Virtual Table and JMX, the number of messages +and bytes that: we could not serialize or flush due to an error, we +dropped due to overload or timeout, are pending, and have successfully +sent. + +== Added a Message size limit + +Cassandra pre-4.0 doesn't protect the server from allocating huge +buffers for the inter-node Message objects. Adding a message size limit +would be good to deal with issues such as a malfunctioning cluster +participant. Version 4.0 introduced max message size config param, akin +to max mutation size - set to endpoint reserve capacity by default. + +== Recover from unknown table when deserializing internode messages + +As discussed in +(https://issues.apache.org/jira/browse/CASSANDRA-9289[CASSANDRA-9289]) +it would be nice to gracefully recover from seeing an unknown table in a +message from another node. Pre-4.0, we close the connection and +reconnect, which can cause other concurrent queries to fail. Version 4.0 +fixes the issue by wrapping message in-stream with +`TrackedDataInputPlus`, catching `UnknownCFException`, and skipping the +remaining bytes in this message. TCP won't be closed and it will remain +connected for other messages. diff --git a/doc/source/modules/cassandra/pages/new/streaming.adoc b/doc/source/modules/cassandra/pages/new/streaming.adoc new file mode 100644 index 000000000000..991bec77d1d9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/streaming.adoc @@ -0,0 +1,217 @@ += Improved Streaming + +Apache Cassandra 4.0 has made several improvements to streaming. +Streaming is the process used by nodes of a cluster to exchange data in +the form of SSTables. Streaming of SSTables is performed for several +operations, such as: + +* SSTable Repair +* Host Replacement +* Range movements +* Bootstrapping +* Rebuild +* Cluster expansion + +== Streaming based on Netty + +Streaming in Cassandra 4.0 is based on Non-blocking Input/Output (NIO) +with Netty +(https://issues.apache.org/jira/browse/CASSANDRA-12229[CASSANDRA-12229]). +It replaces the single-threaded (or sequential), synchronous, blocking +model of streaming messages and transfer of files. Netty supports +non-blocking, asynchronous, multi-threaded streaming with which multiple +connections are opened simultaneously. Non-blocking implies that threads +are not blocked as they don’t wait for a response for a sent request. A +response could be returned in a different thread. With asynchronous, +connections and threads are decoupled and do not have a 1:1 relation. +Several more connections than threads may be opened. + +== Zero Copy Streaming + +Pre-4.0, during streaming Cassandra reifies the SSTables into objects. +This creates unnecessary garbage and slows down the whole streaming +process as some SSTables can be transferred as a whole file rather than +individual partitions. Cassandra 4.0 has added support for streaming +entire SSTables when possible +(https://issues.apache.org/jira/browse/CASSANDRA-14556[CASSANDRA-14556]) +for faster Streaming using ZeroCopy APIs. If enabled, Cassandra will use +ZeroCopy for eligible SSTables significantly speeding up transfers and +increasing throughput. A zero-copy path avoids bringing data into +user-space on both sending and receiving side. Any streaming related +operations will notice corresponding improvement. Zero copy streaming is +hardware bound; only limited by the hardware limitations (Network and +Disk IO ). + +=== High Availability + +In benchmark tests Zero Copy Streaming is 5x faster than partitions +based streaming. Faster streaming provides the benefit of improved +availability. A cluster’s recovery mainly depends on the streaming +speed, Cassandra clusters with failed nodes will be able to recover much +more quickly (5x faster). If a node fails, SSTables need to be streamed +to a replacement node. During the replacement operation, the new +Cassandra node streams SSTables from the neighboring nodes that hold +copies of the data belonging to this new node’s token range. Depending +on the amount of data stored, this process can require substantial +network bandwidth, taking some time to complete. The longer these range +movement operations take, the more the cluster availability is lost. +Failure of multiple nodes would reduce high availability greatly. The +faster the new node completes streaming its data, the faster it can +serve traffic, increasing the availability of the cluster. + +=== Enabling Zero Copy Streaming + +Zero copy streaming is enabled by setting the following setting in +`cassandra.yaml`. + +.... +stream_entire_sstables: true +.... + +By default zero copy streaming is enabled. + +=== SSTables Eligible for Zero Copy Streaming + +Zero copy streaming is used if all partitions within the SSTable need to +be transmitted. This is common when using `LeveledCompactionStrategy` or +when partitioning SSTables by token range has been enabled. All +partition keys in the SSTables are iterated over to determine the +eligibility for Zero Copy streaming. + +=== Benefits of Zero Copy Streaming + +When enabled, it permits Cassandra to zero-copy stream entire eligible +SSTables between nodes, including every component. This speeds up the +network transfer significantly subject to throttling specified by +`stream_throughput_outbound_megabits_per_sec`. + +Enabling this will reduce the GC pressure on sending and receiving node. +While this feature tries to keep the disks balanced, it cannot guarantee +it. This feature will be automatically disabled if internode encryption +is enabled. Currently this can be used with Leveled Compaction. + +=== Configuring for Zero Copy Streaming + +Throttling would reduce the streaming speed. The +`stream_throughput_outbound_megabits_per_sec` throttles all outbound +streaming file transfers on a node to the given total throughput in +Mbps. When unset, the default is 200 Mbps or 25 MB/s. + +.... +stream_throughput_outbound_megabits_per_sec: 200 +.... + +To run any Zero Copy streaming benchmark the +`stream_throughput_outbound_megabits_per_sec` must be set to a really +high value otherwise, throttling will be significant and the benchmark +results will not be meaningful. + +The `inter_dc_stream_throughput_outbound_megabits_per_sec` throttles all +streaming file transfer between the datacenters, this setting allows +users to throttle inter dc stream throughput in addition to throttling +all network stream traffic as configured with +`stream_throughput_outbound_megabits_per_sec`. When unset, the default +is 200 Mbps or 25 MB/s. + +.... +inter_dc_stream_throughput_outbound_megabits_per_sec: 200 +.... + +=== SSTable Components Streamed with Zero Copy Streaming + +Zero Copy Streaming streams entire SSTables. SSTables are made up of +multiple components in separate files. SSTable components streamed are +listed in Table 1. + +Table 1. SSTable Components + +[width="98%",cols="27%,73%",] +|=== +|SSTable Component |Description + +|Data.db |The base data for an SSTable: the remaining components can be +regenerated based on the data component. + +|Index.db |Index of the row keys with pointers to their positions in the +data file. + +|Filter.db |Serialized bloom filter for the row keys in the SSTable. + +|CompressionInfo.db |File to hold information about uncompressed data +length, chunk offsets etc. + +|Statistics.db |Statistical metadata about the content of the SSTable. + +|Digest.crc32 |Holds CRC32 checksum of the data file size_bytes. + +|CRC.db |Holds the CRC32 for chunks in an uncompressed file. + +|Summary.db |Holds SSTable Index Summary (sampling of Index component) + +|TOC.txt |Table of contents, stores the list of all components for the +SSTable. +|=== + +Custom component, used by e.g. custom compaction strategy may also be +included. + +== Repair Streaming Preview + +Repair with `nodetool repair` involves streaming of repaired SSTables +and a repair preview has been added to provide an estimate of the amount +of repair streaming that would need to be performed. Repair preview +(https://issues.apache.org/jira/browse/CASSANDRA-13257[CASSANDRA-13257]) +is invoke with `nodetool repair --preview` using option: + +.... +-prv, --preview +.... + +It determines ranges and amount of data to be streamed, but doesn't +actually perform repair. + +== Parallelizing of Streaming of Keyspaces + +The streaming of the different keyspaces for bootstrap and rebuild has +been parallelized in Cassandra 4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-4663[CASSANDRA-4663]). + +== Unique nodes for Streaming in Multi-DC deployment + +Range Streamer picks unique nodes to stream data from when number of +replicas in each DC is three or more +(https://issues.apache.org/jira/browse/CASSANDRA-4650[CASSANDRA-4650]). +What the optimization does is to even out the streaming load across the +cluster. Without the optimization, some node can be picked up to stream +more data than others. This patch allows to select dedicated node to +stream only one range. + +This will increase the performance of bootstrapping a node and will also +put less pressure on nodes serving the data. This does not affect if N < +3 in each DC as then it streams data from only 2 nodes. + +Stream Operation Types ^^^^^^^^^^^^^ + +It is important to know the type or purpose of a certain stream. Version +4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-13064[CASSANDRA-13064]) +adds an `enum` to distinguish between the different types of streams. +Stream types are available both in a stream request and a stream task. +The different stream types are: + +* Restore replica count +* Unbootstrap +* Relocation +* Bootstrap +* Rebuild +* Bulk Load +* Repair + +== Disallow Decommission when number of Replicas will drop below configured RF + +https://issues.apache.org/jira/browse/CASSANDRA-12510[CASSANDRA-12510] +guards against decommission that will drop # of replicas below +configured replication factor (RF), and adds the `--force` option that +allows decommission to continue if intentional; force decommission of +this node even when it reduces the number of replicas to below +configured RF. diff --git a/doc/source/modules/cassandra/pages/new/transientreplication.adoc b/doc/source/modules/cassandra/pages/new/transientreplication.adoc new file mode 100644 index 000000000000..c939497e5e42 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/transientreplication.adoc @@ -0,0 +1,186 @@ += Transient Replication + +*Note*: + +Transient Replication +(https://issues.apache.org/jira/browse/CASSANDRA-14404[CASSANDRA-14404]) +is an experimental feature designed for expert Apache Cassandra users +who are able to validate every aspect of the database for their +application and deployment. That means being able to check that +operations like reads, writes, decommission, remove, rebuild, repair, +and replace all work with your queries, data, configuration, operational +practices, and availability requirements. Apache Cassandra 4.0 has the +initial implementation of transient replication. Future releases of +Cassandra will make this feature suitable for a wider audience. It is +anticipated that a future version will support monotonic reads with +transient replication as well as LWT, logged batches, and counters. +Being experimental, Transient replication is *not* recommended for +production use. + +== Objective + +The objective of transient replication is to decouple storage +requirements from data redundancy (or consensus group size) using +incremental repair, in order to reduce storage overhead. Certain nodes +act as full replicas (storing all the data for a given token range), and +some nodes act as transient replicas, storing only unrepaired data for +the same token ranges. + +The optimization that is made possible with transient replication is +called "Cheap quorums", which implies that data redundancy is increased +without corresponding increase in storage usage. + +Transient replication is useful when sufficient full replicas are +unavailable to receive and store all the data. Transient replication +allows you to configure a subset of replicas to only replicate data that +hasn't been incrementally repaired. As an optimization, we can avoid +writing data to a transient replica if we have successfully written data +to the full replicas. + +After incremental repair, transient data stored on transient replicas +can be discarded. + +== Enabling Transient Replication + +Transient replication is not enabled by default. Transient replication +must be enabled on each node in a cluster separately by setting the +following configuration property in `cassandra.yaml`. + +.... +enable_transient_replication: true +.... + +Transient replication may be configured with both `SimpleStrategy` and +`NetworkTopologyStrategy`. Transient replication is configured by +setting replication factor as `/`. + +As an example, create a keyspace with replication factor (RF) 3. + +.... +CREATE KEYSPACE CassandraKeyspaceSimple WITH replication = {'class': 'SimpleStrategy', +'replication_factor' : 4/1}; +.... + +As another example, `some_keysopace keyspace` will have 3 replicas in +DC1, 1 of which is transient, and 5 replicas in DC2, 2 of which are +transient: + +.... +CREATE KEYSPACE some_keysopace WITH replication = {'class': 'NetworkTopologyStrategy', +'DC1' : '3/1'', 'DC2' : '5/2'}; +.... + +Transiently replicated keyspaces only support tables with `read_repair` +set to `NONE`. + +Important Restrictions: + +* RF cannot be altered while some endpoints are not in a normal state +(no range movements). +* You can't add full replicas if there are any transient replicas. You +must first remove all transient replicas, then change the # of full +replicas, then add back the transient replicas. +* You can only safely increase number of transients one at a time with +incremental repair run in between each time. + +Additionally, transient replication cannot be used for: + +* Monotonic Reads +* Lightweight Transactions (LWTs) +* Logged Batches +* Counters +* Keyspaces using materialized views +* Secondary indexes (2i) + +== Cheap Quorums + +Cheap quorums are a set of optimizations on the write path to avoid +writing to transient replicas unless sufficient full replicas are not +available to satisfy the requested consistency level. Hints are never +written for transient replicas. Optimizations on the read path prefer +reading from transient replicas. When writing at quorum to a table +configured to use transient replication the quorum will always prefer +available full replicas over transient replicas so that transient +replicas don't have to process writes. Tail latency is reduced by rapid +write protection (similar to rapid read protection) when full replicas +are slow or unavailable by sending writes to transient replicas. +Transient replicas can serve reads faster as they don't have to do +anything beyond bloom filter checks if they have no data. With vnodes +and large cluster sizes they will not have a large quantity of data even +for failure of one or more full replicas where transient replicas start +to serve a steady amount of write traffic for some of their transiently +replicated ranges. + +== Speculative Write Option + +The `CREATE TABLE` adds an option `speculative_write_threshold` for use +with transient replicas. The option is of type `simple` with default +value as `99PERCENTILE`. When replicas are slow or unresponsive +`speculative_write_threshold` specifies the threshold at which a cheap +quorum write will be upgraded to include transient replicas. + +== Pending Ranges and Transient Replicas + +Pending ranges refers to the movement of token ranges between transient +replicas. When a transient range is moved, there will be a period of +time where both transient replicas would need to receive any write +intended for the logical transient replica so that after the movement +takes effect a read quorum is able to return a response. Nodes are _not_ +temporarily transient replicas during expansion. They stream data like a +full replica for the transient range before they can serve reads. A +pending state is incurred similar to how there is a pending state for +full replicas. Transient replicas also always receive writes when they +are pending. Pending transient ranges are sent a bit more data and +reading from them is avoided. + +== Read Repair and Transient Replicas + +Read repair never attempts to repair a transient replica. Reads will +always include at least one full replica. They should also prefer +transient replicas where possible. Range scans ensure the entire scanned +range performs replica selection that satisfies the requirement that +every range scanned includes one full replica. During incremental & +validation repair handling, at transient replicas anti-compaction does +not output any data for transient ranges as the data will be dropped +after repair, and transient replicas never have data streamed to them. + +== Transitioning between Full Replicas and Transient Replicas + +The additional state transitions that transient replication introduces +requires streaming and `nodetool cleanup` to behave differently. When +data is streamed it is ensured that it is streamed from a full replica +and not a transient replica. + +Transitioning from not replicated to transiently replicated means that a +node must stay pending until the next incremental repair completes at +which point the data for that range is known to be available at full +replicas. + +Transitioning from transiently replicated to fully replicated requires +streaming from a full replica and is identical to how data is streamed +when transitioning from not replicated to replicated. The transition is +managed so the transient replica is not read from as a full replica +until streaming completes. It can be used immediately for a write +quorum. + +Transitioning from fully replicated to transiently replicated requires +cleanup to remove repaired data from the transiently replicated range to +reclaim space. It can be used immediately for a write quorum. + +Transitioning from transiently replicated to not replicated requires +cleanup to be run to remove the formerly transiently replicated data. + +When transient replication is in use ring changes are supported +including add/remove node, change RF, add/remove DC. + +== Transient Replication supports EACH_QUORUM + +(https://issues.apache.org/jira/browse/CASSANDRA-14727[CASSANDRA-14727]) +adds support for Transient Replication support for `EACH_QUORUM`. Per +(https://issues.apache.org/jira/browse/CASSANDRA-14768[CASSANDRA-14768]), +we ensure we write to at least a `QUORUM` of nodes in every DC, +regardless of how many responses we need to wait for and our requested +consistency level. This is to minimally surprise users with transient +replication; with normal writes, we soft-ensure that we reach `QUORUM` +in all DCs we are able to, by writing to every node; even if we don't +wait for ACK, we have in both cases sent sufficient messages. diff --git a/doc/source/modules/cassandra/pages/new/virtualtables.adoc b/doc/source/modules/cassandra/pages/new/virtualtables.adoc new file mode 100644 index 000000000000..b83fd8c70046 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/virtualtables.adoc @@ -0,0 +1,358 @@ += Virtual Tables + +Apache Cassandra 4.0 implements virtual tables +(https://issues.apache.org/jira/browse/CASSANDRA-7622[CASSANDRA-7622]). + +== Definition + +A virtual table is a table that is backed by an API instead of data +explicitly managed and stored as SSTables. Apache Cassandra 4.0 +implements a virtual keyspace interface for virtual tables. Virtual +tables are specific to each node. + +== Objective + +A virtual table could have several uses including: + +* Expose metrics through CQL +* Expose YAML configuration information + +== How are Virtual Tables different from regular tables? + +Virtual tables and virtual keyspaces are quite different from regular +tables and keyspaces respectively such as: + +* Virtual tables are read-only, but it is likely to change +* Virtual tables are not replicated +* Virtual tables are local only and non distributed +* Virtual tables have no associated SSTables +* Consistency level of the queries sent virtual tables are ignored +* Virtual tables are managed by Cassandra and a user cannot run DDL to +create new virtual tables or DML to modify existing virtual tables +* Virtual tables are created in special keyspaces and not just any +keyspace +* All existing virtual tables use `LocalPartitioner`. Since a virtual +table is not replicated the partitioner sorts in order of partition keys +instead of by their hash. +* Making advanced queries with `ALLOW FILTERING` and aggregation +functions may be used with virtual tables even though in normal tables +we dont recommend it + +== Virtual Keyspaces + +Apache Cassandra 4.0 has added two new keyspaces for virtual tables: +`system_virtual_schema` and `system_views`. Run the following command to +list the keyspaces: + +.... +cqlsh> DESC KEYSPACES; +system_schema system system_distributed system_virtual_schema +system_auth system_traces system_views +.... + +The `system_virtual_schema keyspace` contains schema information on +virtual tables. The `system_views` keyspace contains the actual virtual +tables. + +== Virtual Table Limitations + +Virtual tables and virtual keyspaces have some limitations initially +though some of these could change such as: + +* Cannot alter or drop virtual keyspaces or tables +* Cannot truncate virtual tables +* Expiring columns are not supported by virtual tables +* Conditional updates are not supported by virtual tables +* Cannot create tables in virtual keyspaces +* Cannot perform any operations against virtual keyspace +* Secondary indexes are not supported on virtual tables +* Cannot create functions in virtual keyspaces +* Cannot create types in virtual keyspaces +* Materialized views are not supported on virtual tables +* Virtual tables don't support `DELETE` statements +* Cannot `CREATE TRIGGER` against a virtual table +* Conditional `BATCH` statements cannot include mutations for virtual +tables +* Cannot include a virtual table statement in a logged batch +* Mutations for virtual and regular tables cannot exist in the same +batch +* Conditional `BATCH` statements cannot include mutations for virtual +tables +* Cannot create aggregates in virtual keyspaces; but may run aggregate +functions on select + +== Listing and Describing Virtual Tables + +Virtual tables in a virtual keyspace may be listed with `DESC TABLES`. +The `system_views` virtual keyspace tables include the following: + +.... +cqlsh> USE system_views; +cqlsh:system_views> DESC TABLES; +coordinator_scans clients tombstones_scanned internode_inbound +disk_usage sstable_tasks live_scanned caches +local_writes max_partition_size local_reads +coordinator_writes internode_outbound thread_pools +local_scans coordinator_reads settings +.... + +Some of the salient virtual tables in `system_views` virtual keyspace +are described in Table 1. + +Table 1 : Virtual Tables in system_views + +[width="98%",cols="27%,73%",] +|=== +|Virtual Table |Description + +|clients |Lists information about all connected clients. + +|disk_usage |Disk usage including disk_space, keyspace_name, and +table_name by system keyspaces. + +|local_writes |A table metric for local writes including count, +keyspace_name, max, median, per_second, and table_name. + +|caches |Displays the general cache information including cache name, +capacity_bytes, entry_count, hit_count, hit_ratio double, +recent_hit_rate_per_second, recent_request_rate_per_second, +request_count, and size_bytes. + +|local_reads |A table metric for local reads information. + +|sstable_tasks |Lists currently running tasks such as compactions and +upgrades on SSTables. + +|internode_inbound |Lists information about the inbound internode +messaging. + +|thread_pools |Lists metrics for each thread pool. + +|settings |Displays configuration settings in cassandra.yaml. + +|max_partition_size |A table metric for maximum partition size. + +|internode_outbound |Information about the outbound internode messaging. +|=== + +We shall discuss some of the virtual tables in more detail next. + +=== Clients Virtual Table + +The `clients` virtual table lists all active connections (connected +clients) including their ip address, port, connection stage, driver +name, driver version, hostname, protocol version, request count, ssl +enabled, ssl protocol and user name: + +.... +cqlsh:system_views> select * from system_views.clients; + address | port | connection_stage | driver_name | driver_version | hostname | protocol_version | request_count | ssl_cipher_suite | ssl_enabled | ssl_protocol | username +-----------+-------+------------------+-------------+----------------+-----------+------------------+---------------+------------------+-------------+--------------+----------- + 127.0.0.1 | 50628 | ready | null | null | localhost | 4 | 55 | null | False | null | anonymous + 127.0.0.1 | 50630 | ready | null | null | localhost | 4 | 70 | null | False | null | anonymous + +(2 rows) +.... + +Some examples of how `clients` can be used are: + +* To find applications using old incompatible versions of drivers before +upgrading and with `nodetool enableoldprotocolversions` and +`nodetool disableoldprotocolversions` during upgrades. +* To identify clients sending too many requests. +* To find if SSL is enabled during the migration to and from ssl. + +The virtual tables may be described with `DESCRIBE` statement. The DDL +listed however cannot be run to create a virtual table. As an example +describe the `system_views.clients` virtual table: + +.... +cqlsh:system_views> DESC TABLE system_views.clients; +CREATE TABLE system_views.clients ( + address inet, + connection_stage text, + driver_name text, + driver_version text, + hostname text, + port int, + protocol_version int, + request_count bigint, + ssl_cipher_suite text, + ssl_enabled boolean, + ssl_protocol text, + username text, + PRIMARY KEY (address, port)) WITH CLUSTERING ORDER BY (port ASC) + AND compaction = {'class': 'None'} + AND compression = {}; +.... + +=== Caches Virtual Table + +The `caches` virtual table lists information about the caches. The four +caches presently created are chunks, counters, keys and rows. A query on +the `caches` virtual table returns the following details: + +.... +cqlsh:system_views> SELECT * FROM system_views.caches; +name | capacity_bytes | entry_count | hit_count | hit_ratio | recent_hit_rate_per_second | recent_request_rate_per_second | request_count | size_bytes +---------+----------------+-------------+-----------+-----------+----------------------------+--------------------------------+---------------+------------ + chunks | 229638144 | 29 | 166 | 0.83 | 5 | 6 | 200 | 475136 +counters | 26214400 | 0 | 0 | NaN | 0 | 0 | 0 | 0 + keys | 52428800 | 14 | 124 | 0.873239 | 4 | 4 | 142 | 1248 + rows | 0 | 0 | 0 | NaN | 0 | 0 | 0 | 0 + +(4 rows) +.... + +=== Settings Virtual Table + +The `settings` table is rather useful and lists all the current +configuration settings from the `cassandra.yaml`. The encryption options +are overridden to hide the sensitive truststore information or +passwords. The configuration settings however cannot be set using DML on +the virtual table presently: : + +.... +cqlsh:system_views> SELECT * FROM system_views.settings; + +name | value +-------------------------------------+-------------------- + allocate_tokens_for_keyspace | null + audit_logging_options_enabled | false + auto_snapshot | true + automatic_sstable_upgrade | false + cluster_name | Test Cluster + enable_transient_replication | false + hinted_handoff_enabled | true + hints_directory | /home/ec2-user/cassandra/data/hints + incremental_backups | false + initial_token | null + ... + ... + ... + rpc_address | localhost + ssl_storage_port | 7001 + start_native_transport | true + storage_port | 7000 + stream_entire_sstables | true + (224 rows) +.... + +The `settings` table can be really useful if yaml file has been changed +since startup and dont know running configuration, or to find if they +have been modified via jmx/nodetool or virtual tables. + +=== Thread Pools Virtual Table + +The `thread_pools` table lists information about all thread pools. +Thread pool information includes active tasks, active tasks limit, +blocked tasks, blocked tasks all time, completed tasks, and pending +tasks. A query on the `thread_pools` returns following details: + +.... +cqlsh:system_views> select * from system_views.thread_pools; + +name | active_tasks | active_tasks_limit | blocked_tasks | blocked_tasks_all_time | completed_tasks | pending_tasks +------------------------------+--------------+--------------------+---------------+------------------------+-----------------+--------------- + AntiEntropyStage | 0 | 1 | 0 | 0 | 0 | 0 + CacheCleanupExecutor | 0 | 1 | 0 | 0 | 0 | 0 + CompactionExecutor | 0 | 2 | 0 | 0 | 881 | 0 + CounterMutationStage | 0 | 32 | 0 | 0 | 0 | 0 + GossipStage | 0 | 1 | 0 | 0 | 0 | 0 + HintsDispatcher | 0 | 2 | 0 | 0 | 0 | 0 + InternalResponseStage | 0 | 2 | 0 | 0 | 0 | 0 + MemtableFlushWriter | 0 | 2 | 0 | 0 | 1 | 0 + MemtablePostFlush | 0 | 1 | 0 | 0 | 2 | 0 + MemtableReclaimMemory | 0 | 1 | 0 | 0 | 1 | 0 + MigrationStage | 0 | 1 | 0 | 0 | 0 | 0 + MiscStage | 0 | 1 | 0 | 0 | 0 | 0 + MutationStage | 0 | 32 | 0 | 0 | 0 | 0 + Native-Transport-Requests | 1 | 128 | 0 | 0 | 130 | 0 + PendingRangeCalculator | 0 | 1 | 0 | 0 | 1 | 0 +PerDiskMemtableFlushWriter_0 | 0 | 2 | 0 | 0 | 1 | 0 + ReadStage | 0 | 32 | 0 | 0 | 13 | 0 + Repair-Task | 0 | 2147483647 | 0 | 0 | 0 | 0 + RequestResponseStage | 0 | 2 | 0 | 0 | 0 | 0 + Sampler | 0 | 1 | 0 | 0 | 0 | 0 + SecondaryIndexManagement | 0 | 1 | 0 | 0 | 0 | 0 + ValidationExecutor | 0 | 2147483647 | 0 | 0 | 0 | 0 + ViewBuildExecutor | 0 | 1 | 0 | 0 | 0 | 0 + ViewMutationStage | 0 | 32 | 0 | 0 | 0 | 0 +.... + +(24 rows) + +=== Internode Inbound Messaging Virtual Table + +The `internode_inbound` virtual table is for the internode inbound +messaging. Initially no internode inbound messaging may get listed. In +addition to the address, port, datacenter and rack information includes +corrupt frames recovered, corrupt frames unrecovered, error bytes, error +count, expired bytes, expired count, processed bytes, processed count, +received bytes, received count, scheduled bytes, scheduled count, +throttled count, throttled nanos, using bytes, using reserve bytes. A +query on the `internode_inbound` returns following details: + +.... +cqlsh:system_views> SELECT * FROM system_views.internode_inbound; +address | port | dc | rack | corrupt_frames_recovered | corrupt_frames_unrecovered | +error_bytes | error_count | expired_bytes | expired_count | processed_bytes | +processed_count | received_bytes | received_count | scheduled_bytes | scheduled_count | throttled_count | throttled_nanos | using_bytes | using_reserve_bytes +---------+------+----+------+--------------------------+----------------------------+- +---------- +(0 rows) +.... + +=== SSTables Tasks Virtual Table + +The `sstable_tasks` could be used to get information about running +tasks. It lists following columns: + +.... +cqlsh:system_views> SELECT * FROM sstable_tasks; +keyspace_name | table_name | task_id | kind | progress | total | unit +---------------+------------+--------------------------------------+------------+----------+----------+------- + basic | wide2 | c3909740-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 60418761 | 70882110 | bytes + basic | wide2 | c7556770-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 2995623 | 40314679 | bytes +.... + +As another example, to find how much time is remaining for SSTable +tasks, use the following query: + +.... +SELECT total - progress AS remaining +FROM system_views.sstable_tasks; +.... + +=== Other Virtual Tables + +Some examples of using other virtual tables are as follows. + +Find tables with most disk usage: + +.... +cqlsh> SELECT * FROM disk_usage WHERE mebibytes > 1 ALLOW FILTERING; + +keyspace_name | table_name | mebibytes +---------------+------------+----------- + keyspace1 | standard1 | 288 + tlp_stress | keyvalue | 3211 +.... + +Find queries on table/s with greatest read latency: + +.... +cqlsh> SELECT * FROM local_read_latency WHERE per_second > 1 ALLOW FILTERING; + +keyspace_name | table_name | p50th_ms | p99th_ms | count | max_ms | per_second +---------------+------------+----------+----------+----------+---------+------------ + tlp_stress | keyvalue | 0.043 | 0.152 | 49785158 | 186.563 | 11418.356 +.... + +== The system_virtual_schema keyspace + +The `system_virtual_schema` keyspace has three tables: `keyspaces`, +`columns` and `tables` for the virtual keyspace definitions, virtual +table definitions, and virtual column definitions respectively. It is +used by Cassandra internally and a user would not need to access it +directly. diff --git a/doc/source/modules/cassandra/pages/operating/audit_logging.adoc b/doc/source/modules/cassandra/pages/operating/audit_logging.adoc new file mode 100644 index 000000000000..bd84fd073d86 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/audit_logging.adoc @@ -0,0 +1,238 @@ += Audit Logging + +Audit logging in Cassandra logs every incoming CQL command request, +Authentication (successful as well as unsuccessful login) to C* node. +Currently, there are two implementations provided, the custom logger can +be implemented and injected with the class name as a parameter in +cassandra.yaml. + +* `BinAuditLogger` An efficient way to log events to file in a binary +format. +* `FileAuditLogger` Logs events to `audit/audit.log` file using slf4j +logger. + +_Recommendation_ `BinAuditLogger` is a community recommended logger +considering the performance + +== What does it capture + +Audit logging captures following events + +* Successful as well as unsuccessful login attempts. +* All database commands executed via Native protocol (CQL) attempted or +successfully executed. + +== Limitations + +Executing prepared statements will log the query as provided by the +client in the prepare call, along with the execution time stamp and all +other attributes (see below). Actual values bound for prepared statement +execution will not show up in the audit log. + +== What does it log + +Each audit log implementation has access to the following attributes, +and for the default text based logger these fields are concatenated with +[.title-ref]#|# s to yield the final message. + +____ +* `user`: User name(if available) +* `host`: Host IP, where the command is being executed +* `source ip address`: Source IP address from where the request +initiated +* `source port`: Source port number from where the request initiated +* `timestamp`: unix time stamp +* `type`: Type of the request (SELECT, INSERT, etc.,) +* `category` - Category of the request (DDL, DML, etc.,) +* `keyspace` - Keyspace(If applicable) on which request is targeted to +be executed +* `scope` - Table/Aggregate name/ function name/ trigger name etc., as +applicable +* `operation` - CQL command being executed +____ + +== How to configure + +Auditlog can be configured using cassandra.yaml. If you want to try +Auditlog on one node, it can also be enabled and configured using +`nodetool`. + +=== cassandra.yaml configurations for AuditLog + +____ +* `enabled`: This option enables/ disables audit log +* `logger`: Class name of the logger/ custom logger. +* `audit_logs_dir`: Auditlogs directory location, if not set, default to +[.title-ref]#cassandra.logdir.audit# or [.title-ref]#cassandra.logdir# + +/audit/ +* `included_keyspaces`: Comma separated list of keyspaces to be included +in audit log, default - includes all keyspaces +* `excluded_keyspaces`: Comma separated list of keyspaces to be excluded +from audit log, default - excludes no keyspace except +[.title-ref]#system#, [.title-ref]#system_schema# and +[.title-ref]#system_virtual_schema# +* `included_categories`: Comma separated list of Audit Log Categories to +be included in audit log, default - includes all categories +* `excluded_categories`: Comma separated list of Audit Log Categories to +be excluded from audit log, default - excludes no category +* `included_users`: Comma separated list of users to be included in +audit log, default - includes all users +* `excluded_users`: Comma separated list of users to be excluded from +audit log, default - excludes no user +____ + +List of available categories are: QUERY, DML, DDL, DCL, OTHER, AUTH, +ERROR, PREPARE + +=== NodeTool command to enable AuditLog + +`enableauditlog`: Enables AuditLog with yaml defaults. yaml +configurations can be overridden using options via nodetool command. + +[source,none] +---- +nodetool enableauditlog +---- + +==== Options + +`--excluded-categories`:: + Comma separated list of Audit Log Categories to be excluded for audit + log. If not set the value from cassandra.yaml will be used +`--excluded-keyspaces`:: + Comma separated list of keyspaces to be excluded for audit log. If not + set the value from cassandra.yaml will be used. Please remeber that + [.title-ref]#system#, [.title-ref]#system_schema# and + [.title-ref]#system_virtual_schema# are excluded by default, if you + are overwriting this option via nodetool, remember to add these + keyspaces back if you dont want them in audit logs +`--excluded-users`:: + Comma separated list of users to be excluded for audit log. If not set + the value from cassandra.yaml will be used +`--included-categories`:: + Comma separated list of Audit Log Categories to be included for audit + log. If not set the value from cassandra.yaml will be used +`--included-keyspaces`:: + Comma separated list of keyspaces to be included for audit log. If not + set the value from cassandra.yaml will be used +`--included-users`:: + Comma separated list of users to be included for audit log. If not set + the value from cassandra.yaml will be used +`--logger`:: + Logger name to be used for AuditLogging. Default BinAuditLogger. If + not set the value from cassandra.yaml will be used + +=== NodeTool command to disable AuditLog + +`disableauditlog`: Disables AuditLog. + +[source,none] +---- +nodetool disableuditlog +---- + +=== NodeTool command to reload AuditLog filters + +`enableauditlog`: NodeTool enableauditlog command can be used to reload +auditlog filters when called with default or previous `loggername` and +updated filters + +E.g., + +[source,none] +---- +nodetool enableauditlog --loggername --included-keyspaces +---- + +== View the contents of AuditLog Files + +`auditlogviewer` is the new tool introduced to help view the contents of +binlog file in human readable text format. + +[source,none] +---- +auditlogviewer [...] [options] +---- + +=== Options + +`-f,--follow`:: + Upon reacahing the end of the log continue indefinitely;; + waiting for more records +`-r,--roll_cycle`:: + How often to roll the log file was rolled. May be;; + necessary for Chronicle to correctly parse file names. (MINUTELY, + HOURLY, DAILY). Default HOURLY. +`-h,--help`:: + display this help message + +For example, to dump the contents of audit log files on the console + +[source,none] +---- +auditlogviewer /logs/cassandra/audit +---- + +=== Sample output + +[source,none] +---- +LogMessage: user:anonymous|host:localhost/X.X.X.X|source:/X.X.X.X|port:60878|timestamp:1521158923615|type:USE_KS|category:DDL|ks:dev1|operation:USE "dev1" +---- + +== Configuring BinAuditLogger + +To use `BinAuditLogger` as a logger in AuditLogging, set the logger to +`BinAuditLogger` in cassandra.yaml under `audit_logging_options` +section. `BinAuditLogger` can be futher configued using its advanced +options in cassandra.yaml. + +=== Adcanced Options for BinAuditLogger + +`block`:: + Indicates if the AuditLog should block if the it falls behind or + should drop audit log records. Default is set to `true` so that + AuditLog records wont be lost +`max_queue_weight`:: + Maximum weight of in memory queue for records waiting to be written to + the audit log file before blocking or dropping the log records. + Default is set to `256 * 1024 * 1024` +`max_log_size`:: + Maximum size of the rolled files to retain on disk before deleting the + oldest file. Default is set to `16L * 1024L * 1024L * 1024L` +`roll_cycle`:: + How often to roll Audit log segments so they can potentially be + reclaimed. Available options are: MINUTELY, HOURLY, DAILY, + LARGE_DAILY, XLARGE_DAILY, HUGE_DAILY.For more options, refer: + net.openhft.chronicle.queue.RollCycles. Default is set to `"HOURLY"` + +== Configuring FileAuditLogger + +To use `FileAuditLogger` as a logger in AuditLogging, apart from setting +the class name in cassandra.yaml, following configuration is needed to +have the audit log events to flow through separate log file instead of +system.log + +[source,xml] +---- + + + ${cassandra.logdir}/audit/audit.log + + + ${cassandra.logdir}/audit/audit.log.%d{yyyy-MM-dd}.%i.zip + + 50MB + 30 + 5GB + + + %-5level [%thread] %date{ISO8601} %F:%L - %msg%n + + + + + + + +---- diff --git a/doc/source/modules/cassandra/pages/operating/backups.adoc b/doc/source/modules/cassandra/pages/operating/backups.adoc new file mode 100644 index 000000000000..a759b246c456 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/backups.adoc @@ -0,0 +1,822 @@ += Backups + +Apache Cassandra stores data in immutable SSTable files. Backups in +Apache Cassandra database are backup copies of the database data that is +stored as SSTable files. Backups are used for several purposes including +the following: + +* To store a data copy for durability +* To be able to restore a table if table data is lost due to +node/partition/network failure +* To be able to transfer the SSTable files to a different machine; for +portability + +== Types of Backups + +Apache Cassandra supports two kinds of backup strategies. + +* Snapshots +* Incremental Backups + +A _snapshot_ is a copy of a table’s SSTable files at a given time, +created via hard links. The DDL to create the table is stored as well. +Snapshots may be created by a user or created automatically. The setting +(`snapshot_before_compaction`) in `cassandra.yaml` determines if +snapshots are created before each compaction. By default +`snapshot_before_compaction` is set to false. Snapshots may be created +automatically before keyspace truncation or dropping of a table by +setting `auto_snapshot` to true (default) in `cassandra.yaml`. Truncates +could be delayed due to the auto snapshots and another setting in +`cassandra.yaml` determines how long the coordinator should wait for +truncates to complete. By default Cassandra waits 60 seconds for auto +snapshots to complete. + +An _incremental backup_ is a copy of a table’s SSTable files created by +a hard link when memtables are flushed to disk as SSTables. Typically +incremental backups are paired with snapshots to reduce the backup time +as well as reduce disk space. Incremental backups are not enabled by +default and must be enabled explicitly in `cassandra.yaml` (with +`incremental_backups` setting) or with the Nodetool. Once enabled, +Cassandra creates a hard link to each SSTable flushed or streamed +locally in a `backups/` subdirectory of the keyspace data. Incremental +backups of system tables are also created. + +== Data Directory Structure + +The directory structure of Cassandra data consists of different +directories for keyspaces, and tables with the data files within the +table directories. Directories backups and snapshots to store backups +and snapshots respectively for a particular table are also stored within +the table directory. The directory structure for Cassandra is +illustrated in Figure 1. + +image::Figure_1_backups.jpg[image] + +Figure 1. Directory Structure for Cassandra Data + +=== Setting Up Example Tables for Backups and Snapshots + +In this section we shall create some example data that could be used to +demonstrate incremental backups and snapshots. We have used a three node +Cassandra cluster. First, the keyspaces are created. Subsequently tables +are created within a keyspace and table data is added. We have used two +keyspaces `CQLKeyspace` and `CatalogKeyspace` with two tables within +each. Create `CQLKeyspace`: + +[source,cql] +---- +CREATE KEYSPACE CQLKeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; +---- + +Create table `t` in the `CQLKeyspace` keyspace. + +[source,cql] +---- +USE CQLKeyspace; +CREATE TABLE t ( + id int, + k int, + v text, + PRIMARY KEY (id) +); +---- + +Add data to table `t`: + +[source,cql] +---- +INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); +INSERT INTO t (id, k, v) VALUES (1, 1, 'val1'); +---- + +A table query lists the data: + +[source,cql] +---- +SELECT * FROM t; +---- +results in +[source,cql] +---- +id | k | v +----+---+------ + 1 | 1 | val1 + 0 | 0 | val0 + + (2 rows) +---- + +Create another table `t2`: + +[source,cql] +---- +CREATE TABLE t2 ( + id int, + k int, + v text, + PRIMARY KEY (id) +); +---- + +Add data to table `t2`: + +[source,cql] +---- +INSERT INTO t2 (id, k, v) VALUES (0, 0, 'val0'); +INSERT INTO t2 (id, k, v) VALUES (1, 1, 'val1'); +INSERT INTO t2 (id, k, v) VALUES (2, 2, 'val2'); +---- + +A table query lists table data: + +[source,cql] +---- +SELECT * FROM t2; +---- +results in +[source,cql] +---- +id | k | v +----+---+------ + 1 | 1 | val1 + 0 | 0 | val0 + 2 | 2 | val2 + + (3 rows) +---- + +Create a second keyspace `CatalogKeyspace`: + +[source,cql] +---- +CREATE KEYSPACE CatalogKeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; +---- + +Create a table called `journal` in `CatalogKeyspace`: + +[source,cql] +---- +USE CatalogKeyspace; +CREATE TABLE journal ( + id int, + name text, + publisher text, + PRIMARY KEY (id) +); +---- + +Add data to table `journal`: + +[source,cql] +---- +INSERT INTO journal (id, name, publisher) VALUES (0, 'Apache Cassandra Magazine', 'Apache Cassandra'); +INSERT INTO journal (id, name, publisher) VALUES (1, 'Couchbase Magazine', 'Couchbase'); +---- + +Query table `journal` to list its data: + +[source,cql] +---- +SELECT * FROM journal; +---- +results in +[source,cql] +---- +id | name | publisher +----+---------------------------+------------------ + 1 | Couchbase Magazine | Couchbase + 0 | Apache Cassandra Magazine | Apache Cassandra + + (2 rows) +---- + +Add another table called `magazine`: + +[source,cql] +---- +CREATE TABLE magazine ( + id int, + name text, + publisher text, + PRIMARY KEY (id) +); +---- + +Add table data to `magazine`: + +[source,cql] +---- +INSERT INTO magazine (id, name, publisher) VALUES (0, 'Apache Cassandra Magazine', 'Apache Cassandra'); +INSERT INTO magazine (id, name, publisher) VALUES (1, 'Couchbase Magazine', 'Couchbase'); +---- + +List table `magazine`’s data: + +[source,cql] +---- +SELECT * from magazine; +---- +results in +[source,cql] +---- +id | name | publisher +----+---------------------------+------------------ + 1 | Couchbase Magazine | Couchbase + 0 | Apache Cassandra Magazine | Apache Cassandra + + (2 rows) +---- + +== Snapshots + +In this section including sub-sections we shall demonstrate creating +snapshots. The command used to create a snapshot is `nodetool snapshot` +and its usage is as follows: + +[source,bash] +---- +$ nodetool help snapshot +---- +results in +[source,none] +---- +NAME + nodetool snapshot - Take a snapshot of specified keyspaces or a snapshot + of the specified table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] snapshot + [(-cf

    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 literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/development/images/docs_editor.png b/doc/source/modules/cassandra/pages/development/images/docs_editor.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9997bcc4062b3619cba66eb74360b0b8845b8f GIT binary patch literal 106175 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 %oasMSa} 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 z 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

+e(`bcs|S<8GJD3s`6)&n;{Jg3f* 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

| --column-family
| --table
)] + [(-kt | --kt-list | -kc | --kc.list )] + [(-sf | --skip-flush)] [(-t | --tag )] [--] [] + +OPTIONS + -cf
, --column-family
, --table
+ The table name (you must specify one and only one keyspace for using + this option) + + -h , --host + Node hostname or ip address + + -kt , --kt-list , -kc , --kc.list + The list of Keyspace.table to take snapshot.(you must not specify + only keyspace) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -sf, --skip-flush + Do not flush memtables before snapshotting (snapshot will not + contain unflushed data) + + -t , --tag + The name of the snapshot + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [] + List of keyspaces. By default, all keyspaces +---- + +=== Configuring for Snapshots + +To demonstrate creating snapshots with Nodetool on the commandline we +have set `auto_snapshots` setting to `false` in `cassandra.yaml`: + +[source,yaml] +---- +auto_snapshot: false +---- + +Also set `snapshot_before_compaction` to `false` to disable creating +snapshots automatically before compaction: + +[source,yaml] +---- +snapshot_before_compaction: false +---- + +=== Creating Snapshots + +To demonstrate creating snapshots start with no snapshots. Search for +snapshots and none get listed: + +[source,bash] +---- +$ find -name snapshots +---- + +We shall be using the example keyspaces and tables to create snapshots. + +==== Taking Snapshots of all Tables in a Keyspace + +To take snapshots of all tables in a keyspace and also optionally tag +the snapshot the syntax becomes: + +[source,bash] +---- +$ nodetool snapshot --tag -- +---- + +As an example create a snapshot called `catalog-ks` for all the tables +in the `catalogkeyspace` keyspace: + +[source,bash] +---- +$ nodetool snapshot --tag catalog-ks -- catalogkeyspace +---- +results in +[source,none] +---- +Requested creating snapshot(s) for [catalogkeyspace] with snapshot name [catalog-ks] and +options {skipFlush=false} +Snapshot directory: catalog-ks +---- + +Search for snapshots and `snapshots` directories for the tables +`journal` and `magazine`, which are in the `catalogkeyspace` keyspace +should get listed: + +[source,bash] +---- +$ find -name snapshots +---- +results in +[source,none] +---- +./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots +./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots +---- + +Snapshots of all tables in multiple keyspaces may be created similarly, +as an example: + +[source,bash] +---- +$ nodetool snapshot --tag catalog-cql-ks --catalogkeyspace,cqlkeyspace +---- + +==== Taking Snapshots of Single Table in a Keyspace + +To take a snapshot of a single table the `nodetool snapshot` command +syntax becomes as follows: + +[source,bash] +---- +$ nodetool snapshot --tag --table
-- +---- + +As an example create a snapshot for table `magazine` in keyspace +`catalokeyspace`: + +[source,bash] +---- +$ nodetool snapshot --tag magazine --table magazine --catalogkeyspace +---- +results in +[source,none] +---- +Requested creating snapshot(s) for [catalogkeyspace] with snapshot name [magazine] and +options {skipFlush=false} +Snapshot directory: magazine +---- + +==== Taking Snapshot of Multiple Tables from same Keyspace + +To take snapshots of multiple tables in a keyspace the list of +_Keyspace.table_ must be specified with option `--kt-list`. As an +example create snapshots for tables `t` and `t2` in the `cqlkeyspace` +keyspace: + +[source,bash] +---- +$nodetool snapshot --kt-list cqlkeyspace.t,cqlkeyspace.t2 --tag multi-table +---- +results in +[source,none] +---- +Requested creating snapshot(s) for [cqlkeyspace.t,cqlkeyspace.t2] with snapshot name [multi- +table] and options {skipFlush=false} +Snapshot directory: multi-table +---- + +Multiple snapshots of the same set of tables may be created and tagged +with a different name. As an example, create another snapshot for the +same set of tables `t` and `t2` in the `cqlkeyspace` keyspace and tag +the snapshots differently: + +[source,bash] +---- +$ nodetool snapshot --kt-list cqlkeyspace.t,cqlkeyspace.t2 --tag +multi-table-2 +---- +results in +[source,none] +---- +Requested creating snapshot(s) for [cqlkeyspace.t,cqlkeyspace.t2] with snapshot name [multi- +table-2] and options {skipFlush=false} +Snapshot directory: multi-table-2 +---- + +==== Taking Snapshot of Multiple Tables from Different Keyspaces + +To take snapshots of multiple tables that are in different keyspaces the +command syntax is the same as when multiple tables are in the same +keyspace. Each _keyspace.table_ must be specified separately in the +`--kt-list` option. As an example, create a snapshot for table `t` in +the `cqlkeyspace` and table `journal` in the catalogkeyspace and tag the +snapshot `multi-ks`. + +[source,bash] +---- +$ nodetool snapshot --kt-list catalogkeyspace.journal,cqlkeyspace.t --tag multi-ks +---- +[source,none] +---- +Requested creating snapshot(s) for [catalogkeyspace.journal,cqlkeyspace.t] with snapshot +name [multi-ks] and options {skipFlush=false} +Snapshot directory: multi-ks +---- + +=== Listing Snapshots + +To list snapshots use the `nodetool listsnapshots` command. All the +snapshots that we created in the preceding examples get listed: + +[source,bash] +---- +$ nodetool listsnapshots +---- +results in +[source,none] +---- +Snapshot Details: +Snapshot name Keyspace name Column family name True size Size on disk +multi-table cqlkeyspace t2 4.86 KiB 5.67 KiB +multi-table cqlkeyspace t 4.89 KiB 5.7 KiB +multi-ks cqlkeyspace t 4.89 KiB 5.7 KiB +multi-ks catalogkeyspace journal 4.9 KiB 5.73 KiB +magazine catalogkeyspace magazine 4.9 KiB 5.73 KiB +multi-table-2 cqlkeyspace t2 4.86 KiB 5.67 KiB +multi-table-2 cqlkeyspace t 4.89 KiB 5.7 KiB +catalog-ks catalogkeyspace journal 4.9 KiB 5.73 KiB +catalog-ks catalogkeyspace magazine 4.9 KiB 5.73 KiB + +Total TrueDiskSpaceUsed: 44.02 KiB +---- + +=== Finding Snapshots Directories + +The `snapshots` directories may be listed with `find –name snapshots` +command: + +[source,bash] +---- +$ find -name snapshots +---- +results in +[source,none] +---- +./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/snapshots +./cassandra/data/data/cqlkeyspace/t2-d993a390c22911e9b1350d927649052c/snapshots +./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots +./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots +[ec2-user@ip-10-0-2-238 ~]$ +---- + +To list the snapshots for a particular table first change directory ( +with `cd`) to the `snapshots` directory for the table. As an example, +list the snapshots for the `catalogkeyspace/journal` table. Two +snapshots get listed: + +[source,bash] +---- +$ cd ./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots +$ ls -l +---- +results in +[source,none] +---- +total 0 +drwxrwxr-x. 2 ec2-user ec2-user 265 Aug 19 02:44 catalog-ks +drwxrwxr-x. 2 ec2-user ec2-user 265 Aug 19 02:52 multi-ks +---- + +A `snapshots` directory lists the SSTable files in the snapshot. +`Schema.cql` file is also created in each snapshot for the schema +definition DDL that may be run in CQL to create the table when restoring +from a snapshot: + +[source,bash] +---- +cd catalog-ks +$ ls -l +---- +results in +[source,none] +---- +total 44 +-rw-rw-r--. 1 ec2-user ec2-user 31 Aug 19 02:44 manifest.jsonZ + +-rw-rw-r--. 4 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db +-rw-rw-r--. 4 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db +-rw-rw-r--. 4 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32 +-rw-rw-r--. 4 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db +-rw-rw-r--. 4 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db +-rw-rw-r--. 4 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db +-rw-rw-r--. 4 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db +-rw-rw-r--. 4 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt +-rw-rw-r--. 1 ec2-user ec2-user 814 Aug 19 02:44 schema.cql +---- + +=== Clearing Snapshots + +Snapshots may be cleared or deleted with the `nodetool clearsnapshot` +command. Either a specific snapshot name must be specified or the `–all` +option must be specified. As an example delete a snapshot called +`magazine` from keyspace `cqlkeyspace`: + +[source,bash] +---- +$ nodetool clearsnapshot -t magazine – cqlkeyspace +---- +or delete all snapshots from cqlkeyspace with the –all option: +[source,bash] +---- +nodetool clearsnapshot –all -- cqlkeyspace +---- + +== Incremental Backups + +In the following sub-sections we shall discuss configuring and creating +incremental backups. + +=== Configuring for Incremental Backups + +To create incremental backups set `incremental_backups` to `true` in +`cassandra.yaml`. + +[source,yaml] +---- +incremental_backups: true +---- + +This is the only setting needed to create incremental backups. By +default `incremental_backups` setting is set to `false` because a new +set of SSTable files is created for each data flush and if several CQL +statements are to be run the `backups` directory could fill up quickly +and use up storage that is needed to store table data. Incremental +backups may also be enabled on the command line with the Nodetool +command `nodetool enablebackup`. Incremental backups may be disabled +with `nodetool disablebackup` command. Status of incremental backups, +whether they are enabled may be found with `nodetool statusbackup`. + +=== Creating Incremental Backups + +After each table is created flush the table data with `nodetool flush` +command. Incremental backups get created. + +[source,bash] +---- +$ nodetool flush cqlkeyspace t +$ nodetool flush cqlkeyspace t2 +$ nodetool flush catalogkeyspace journal magazine +---- + +=== Finding Incremental Backups + +Incremental backups are created within the Cassandra’s `data` directory +within a table directory. Backups may be found with following command. + +[source,bash] +---- +$ find -name backups +---- +results in +[source,none] +---- +./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups +./cassandra/data/data/cqlkeyspace/t2-d993a390c22911e9b1350d927649052c/backups +./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/backups +./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups +---- + +=== Creating an Incremental Backup + +This section discusses how incremental backups are created in more +detail starting with when a new keyspace is created and a table is +added. Create a keyspace called `CQLKeyspace` (arbitrary name). + +[source,cql] +---- +CREATE KEYSPACE CQLKeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3} +---- + +Create a table called `t` within the `CQLKeyspace` keyspace: + +[source,cql] +---- +USE CQLKeyspace; +CREATE TABLE t ( + id int, + k int, + v text, + PRIMARY KEY (id) +); +---- + +Flush the keyspace and table: + +[source,bash] +---- +$ nodetool flush cqlkeyspace t +---- + +Search for backups and a `backups` directory should get listed even +though we have added no table data yet. + +[source,bash] +---- +$ find -name backups +---- +results in +[source,none] +---- +./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups +---- + +Change directory to the `backups` directory and list files and no files +get listed as no table data has been added yet: + +[source,bash] +---- +$ cd ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups +$ ls -l +---- +results in +[source,none] +---- +total 0 +---- + +Next, add a row of data to table `t` that we created: + +[source,cql] +---- +INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); +---- + +Run the `nodetool flush` command to flush table data: + +[source,bash] +---- +$ nodetool flush cqlkeyspace t +---- + +List the files and directories in the `backups` directory and SSTable +files for an incremental backup get listed: + +[source,bash] +---- +$ cd ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups +$ ls -l +---- +results in +[source,none] +---- +total 36 +-rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:32 na-1-big-CompressionInfo.db +-rw-rw-r--. 2 ec2-user ec2-user 43 Aug 19 00:32 na-1-big-Data.db +-rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:32 na-1-big-Digest.crc32 +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:32 na-1-big-Filter.db +-rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:32 na-1-big-Index.db +-rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:32 na-1-big-Statistics.db +-rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:32 na-1-big-Summary.db +-rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:32 na-1-big-TOC.txt +---- + +Add another row of data: + +[source,cql] +---- +INSERT INTO t (id, k, v) VALUES (1, 1, 'val1'); +---- + +Again, run the `nodetool flush` command: + +[source,bash] +---- +$ nodetool flush cqlkeyspace t +---- + +A new incremental backup gets created for the new data added. List the +files in the `backups` directory for table `t` and two sets of SSTable +files get listed, one for each incremental backup. The SSTable files are +timestamped, which distinguishes the first incremental backup from the +second: + +[source,bash] +---- +$ ls -l +---- +results in +[source,none] +---- +total 72 +-rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:32 na-1-big-CompressionInfo.db +-rw-rw-r--. 2 ec2-user ec2-user 43 Aug 19 00:32 na-1-big-Data.db +-rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:32 na-1-big-Digest.crc32 +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:32 na-1-big-Filter.db +-rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:32 na-1-big-Index.db +-rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:32 na-1-big-Statistics.db +-rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:32 na-1-big-Summary.db +-rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:32 na-1-big-TOC.txt +-rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:35 na-2-big-CompressionInfo.db +-rw-rw-r--. 2 ec2-user ec2-user 41 Aug 19 00:35 na-2-big-Data.db +-rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:35 na-2-big-Digest.crc32 +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:35 na-2-big-Filter.db +-rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:35 na-2-big-Index.db +-rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:35 na-2-big-Statistics.db +-rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:35 na-2-big-Summary.db +-rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:35 na-2-big-TOC.txt +---- + +The `backups` directory for table `cqlkeyspace/t` is created within the +`data` directory for the table: + +[source,bash] +---- +$ cd ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330 && ls -l +---- +results in +[source,none] +---- +total 36 +drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:30 backups +-rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 02:30 na-1-big-CompressionInfo.db +-rw-rw-r--. 2 ec2-user ec2-user 79 Aug 19 02:30 na-1-big-Data.db +-rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 02:30 na-1-big-Digest.crc32 +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:30 na-1-big-Filter.db +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:30 na-1-big-Index.db +-rw-rw-r--. 2 ec2-user ec2-user 4696 Aug 19 02:30 na-1-big-Statistics.db +-rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 02:30 na-1-big-Summary.db +-rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 02:30 na-1-big-TOC.txt +---- + +The incremental backups for the other keyspaces/tables get created +similarly. As an example the `backups` directory for table +`catalogkeyspace/magazine` is created within the data directory: + +[source,none] +---- +$ cd ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c && ls -l +---- +results in +[source,none] +---- +total 36 +drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:38 backups +-rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db +-rw-rw-r--. 2 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db +-rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32 +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db +-rw-rw-r--. 2 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db +-rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db +-rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt +---- + +== Restoring from Incremental Backups and Snapshots + +The two main tools/commands for restoring a table after it has been +dropped are: + +* sstableloader +* nodetool import + +A snapshot contains essentially the same set of SSTable files as an +incremental backup does with a few additional files. A snapshot includes +a `schema.cql` file for the schema DDL to create a table in CQL. A table +backup does not include DDL which must be obtained from a snapshot when +restoring from an incremental backup. diff --git a/doc/source/modules/cassandra/pages/operating/bloom_filters.adoc b/doc/source/modules/cassandra/pages/operating/bloom_filters.adoc new file mode 100644 index 000000000000..5ce5f8d04cb5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/bloom_filters.adoc @@ -0,0 +1,64 @@ += Bloom Filters + +In the read path, Cassandra merges data on disk (in SSTables) with data +in RAM (in memtables). To avoid checking every SSTable data file for the +partition being requested, Cassandra employs a data structure known as a +bloom filter. + +Bloom filters are a probabilistic data structure that allows Cassandra +to determine one of two possible states: - The data definitely does not +exist in the given file, or - The data probably exists in the given +file. + +While bloom filters can not guarantee that the data exists in a given +SSTable, bloom filters can be made more accurate by allowing them to +consume more RAM. Operators have the opportunity to tune this behavior +per table by adjusting the the `bloom_filter_fp_chance` to a float +between 0 and 1. + +The default value for `bloom_filter_fp_chance` is 0.1 for tables using +LeveledCompactionStrategy and 0.01 for all other cases. + +Bloom filters are stored in RAM, but are stored offheap, so operators +should not consider bloom filters when selecting the maximum heap size. +As accuracy improves (as the `bloom_filter_fp_chance` gets closer to 0), +memory usage increases non-linearly - the bloom filter for +`bloom_filter_fp_chance = 0.01` will require about three times as much +memory as the same table with `bloom_filter_fp_chance = 0.1`. + +Typical values for `bloom_filter_fp_chance` are usually between 0.01 +(1%) to 0.1 (10%) false-positive chance, where Cassandra may scan an +SSTable for a row, only to find that it does not exist on the disk. The +parameter should be tuned by use case: + +* Users with more RAM and slower disks may benefit from setting the +`bloom_filter_fp_chance` to a numerically lower number (such as 0.01) to +avoid excess IO operations +* Users with less RAM, more dense nodes, or very fast disks may tolerate +a higher `bloom_filter_fp_chance` in order to save RAM at the expense of +excess IO operations +* In workloads that rarely read, or that only perform reads by scanning +the entire data set (such as analytics workloads), setting the +`bloom_filter_fp_chance` to a much higher number is acceptable. + +== Changing + +The bloom filter false positive chance is visible in the +`DESCRIBE TABLE` output as the field `bloom_filter_fp_chance`. Operators +can change the value with an `ALTER TABLE` statement: : + +[source,none] +---- +ALTER TABLE keyspace.table WITH bloom_filter_fp_chance=0.01 +---- + +Operators should be aware, however, that this change is not immediate: +the bloom filter is calculated when the file is written, and persisted +on disk as the Filter component of the SSTable. Upon issuing an +`ALTER TABLE` statement, new files on disk will be written with the new +`bloom_filter_fp_chance`, but existing sstables will not be modified +until they are compacted - if an operator needs a change to +`bloom_filter_fp_chance` to take effect, they can trigger an SSTable +rewrite using `nodetool scrub` or `nodetool upgradesstables -a`, both of +which will rebuild the sstables on disk, regenerating the bloom filters +in the progress. diff --git a/doc/source/modules/cassandra/pages/operating/bulk_loading.adoc b/doc/source/modules/cassandra/pages/operating/bulk_loading.adoc new file mode 100644 index 000000000000..29a78ed09bc7 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/bulk_loading.adoc @@ -0,0 +1,872 @@ += Bulk Loading + +Bulk loading of data in Apache Cassandra is supported by different +tools. The data to be bulk loaded must be in the form of SSTables. +Cassandra does not support loading data in any other format such as CSV, +JSON, and XML directly. Bulk loading could be used to: + +* Restore incremental backups and snapshots. Backups and snapshots are +already in the form of SSTables. +* Load existing SSTables into another cluster, which could have a +different number of nodes or replication strategy. +* Load external data into a cluster + +*_Note_: CSV Data can be loaded via the cqlsh COPY command but we do not +recommend this for bulk loading, which typically requires many GB or TB +of data. + +== Tools for Bulk Loading + +Cassandra provides two commands or tools for bulk loading data. These +are: + +* Cassandra Bulk loader, also called `sstableloader` +* The `nodetool import` command + +The `sstableloader` and `nodetool import` are accessible if the +Cassandra installation `bin` directory is in the `PATH` environment +variable. Or these may be accessed directly from the `bin` directory. We +shall discuss each of these next. We shall use the example or sample +keyspaces and tables created in the Backups section. + +== Using sstableloader + +The `sstableloader` is the main tool for bulk uploading data. The +`sstableloader` streams SSTable data files to a running cluster. The +`sstableloader` loads data conforming to the replication strategy and +replication factor. The table to upload data to does need not to be +empty. + +The only requirements to run `sstableloader` are: + +[arabic] +. One or more comma separated initial hosts to connect to and get ring +information. +. A directory path for the SSTables to load. + +Its usage is as follows. + +[source,bash] +---- +sstableloader [options] +---- + +Sstableloader bulk loads the SSTables found in the directory +`` to the configured cluster. The `` is used as the +target _keyspace/table_ name. As an example, to load an SSTable named +`Standard1-g-1-Data.db` into `Keyspace1/Standard1`, you will need to +have the files `Standard1-g-1-Data.db` and `Standard1-g-1-Index.db` in a +directory `/path/to/Keyspace1/Standard1/`. + +=== Sstableloader Option to accept Target keyspace name + +Often as part of a backup strategy some Cassandra DBAs store an entire +data directory. When corruption in data is found then they would like to +restore data in the same cluster (for large clusters 200 nodes) but with +different keyspace name. + +Currently `sstableloader` derives keyspace name from the folder +structure. As an option to specify target keyspace name as part of +`sstableloader`, version 4.0 adds support for the `--target-keyspace` +option +(https://issues.apache.org/jira/browse/CASSANDRA-13884[CASSANDRA-13884]). + +The supported options are as follows from which only +`-d,--nodes ` is required. + +[source,none] +---- +-alg,--ssl-alg Client SSL: algorithm + +-ap,--auth-provider Custom + AuthProvider class name for + cassandra authentication +-ciphers,--ssl-ciphers Client SSL: + comma-separated list of + encryption suites to use +-cph,--connections-per-host Number of + concurrent connections-per-host. +-d,--nodes Required. + Try to connect to these hosts (comma separated) initially for ring information + +-f,--conf-path cassandra.yaml file path for streaming throughput and client/server SSL. + +-h,--help Display this help message + +-i,--ignore Don't stream to this (comma separated) list of nodes + +-idct,--inter-dc-throttle Inter-datacenter throttle speed in Mbits (default unlimited) + +-k,--target-keyspace Target + keyspace name +-ks,--keystore Client SSL: + full path to keystore +-kspw,--keystore-password Client SSL: + password of the keystore +--no-progress Don't + display progress +-p,--port Port used + for native connection (default 9042) +-prtcl,--ssl-protocol Client SSL: + connections protocol to use (default: TLS) +-pw,--password Password for + cassandra authentication +-sp,--storage-port Port used + for internode communication (default 7000) +-spd,--server-port-discovery Use ports + published by server to decide how to connect. With SSL requires StartTLS + to be used. +-ssp,--ssl-storage-port Port used + for TLS internode communication (default 7001) +-st,--store-type Client SSL: + type of store +-t,--throttle Throttle + speed in Mbits (default unlimited) +-ts,--truststore Client SSL: + full path to truststore +-tspw,--truststore-password Client SSL: + Password of the truststore +-u,--username Username for + cassandra authentication +-v,--verbose verbose + output +---- + +The `cassandra.yaml` file could be provided on the command-line with +`-f` option to set up streaming throughput, client and server encryption +options. Only `stream_throughput_outbound_megabits_per_sec`, +`server_encryption_options` and `client_encryption_options` are read +from yaml. You can override options read from `cassandra.yaml` with +corresponding command line options. + +=== A sstableloader Demo + +We shall demonstrate using `sstableloader` by uploading incremental +backup data for table `catalogkeyspace.magazine`. We shall also use a +snapshot of the same table to bulk upload in a different run of +`sstableloader`. The backups and snapshots for the +`catalogkeyspace.magazine` table are listed as follows. + +[source,bash] +---- +$ cd ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c && ls -l +---- +results in +[source,none] +---- +total 0 +drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:38 backups +drwxrwxr-x. 4 ec2-user ec2-user 40 Aug 19 02:45 snapshots +---- + +The directory path structure of SSTables to be uploaded using +`sstableloader` is used as the target keyspace/table. + +We could have directly uploaded from the `backups` and `snapshots` +directories respectively if the directory structure were in the format +used by `sstableloader`. But the directory path of backups and snapshots +for SSTables is +`/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups` and +`/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots` +respectively, which cannot be used to upload SSTables to +`catalogkeyspace.magazine` table. The directory path structure must be +`/catalogkeyspace/magazine/` to use `sstableloader`. We need to create a +new directory structure to upload SSTables with `sstableloader` which is +typical when using `sstableloader`. Create a directory structure +`/catalogkeyspace/magazine` and set its permissions. + +[source,bash] +---- +$ sudo mkdir -p /catalogkeyspace/magazine +$ sudo chmod -R 777 /catalogkeyspace/magazine +---- + +==== Bulk Loading from an Incremental Backup + +An incremental backup does not include the DDL for a table. The table +must already exist. If the table was dropped it may be created using the +`schema.cql` generated with every snapshot of a table. As we shall be +using `sstableloader` to load SSTables to the `magazine` table, the +table must exist prior to running `sstableloader`. The table does not +need to be empty but we have used an empty table as indicated by a CQL +query: + +[source,cql] +---- +SELECT * FROM magazine; +---- +results in +[source,cql] +---- +id | name | publisher +----+------+----------- + +(0 rows) +---- + +After the table to upload has been created copy the SSTable files from +the `backups` directory to the `/catalogkeyspace/magazine/` directory +that we created. + +[source,bash] +---- +$ sudo cp ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups/* \ +/catalogkeyspace/magazine/ +---- + +Run the `sstableloader` to upload SSTables from the +`/catalogkeyspace/magazine/` directory. + +[source,bash] +---- +$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ +---- + +The output from the `sstableloader` command should be similar to the +listed: + +[source,bash] +---- +$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ +---- +results in +[source,none] +---- +Opening SSTables and calculating sections to stream +Streaming relevant part of /catalogkeyspace/magazine/na-1-big-Data.db +/catalogkeyspace/magazine/na-2-big-Data.db to [35.173.233.153:7000, 10.0.2.238:7000, +54.158.45.75:7000] +progress: [35.173.233.153:7000]0:1/2 88 % total: 88% 0.018KiB/s (avg: 0.018KiB/s) +progress: [35.173.233.153:7000]0:2/2 176% total: 176% 33.807KiB/s (avg: 0.036KiB/s) +progress: [35.173.233.153:7000]0:2/2 176% total: 176% 0.000KiB/s (avg: 0.029KiB/s) +progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:1/2 39 % total: 81% 0.115KiB/s +(avg: 0.024KiB/s) +progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % total: 108% +97.683KiB/s (avg: 0.033KiB/s) +progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % +[54.158.45.75:7000]0:1/2 39 % total: 80% 0.233KiB/s (avg: 0.040KiB/s) +progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % +[54.158.45.75:7000]0:2/2 78 % total: 96% 88.522KiB/s (avg: 0.049KiB/s) +progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % +[54.158.45.75:7000]0:2/2 78 % total: 96% 0.000KiB/s (avg: 0.045KiB/s) +progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % +[54.158.45.75:7000]0:2/2 78 % total: 96% 0.000KiB/s (avg: 0.044KiB/s) +---- + +After the `sstableloader` has run query the `magazine` table and the +loaded table should get listed when a query is run. + +[source,cql] +---- +SELECT * FROM magazine; +---- +results in +[source,cql] +---- +id | name | publisher +----+---------------------------+------------------ + 1 | Couchbase Magazine | Couchbase + 0 | Apache Cassandra Magazine | Apache Cassandra + +(2 rows) +---- + +==== Bulk Loading from a Snapshot + +In this section we shall demonstrate restoring a snapshot of the +`magazine` table to the `magazine` table. As we used the same table to +restore data from a backup the directory structure required by +`sstableloader` should already exist. If the directory structure needed +to load SSTables to `catalogkeyspace.magazine` does not exist create the +directories and set their permissions. + +[source,bash] +---- +$ sudo mkdir -p /catalogkeyspace/magazine +$ sudo chmod -R 777 /catalogkeyspace/magazine +---- + +As we shall be copying the snapshot files to the directory remove any +files that may be in the directory. + +[source,bash] +---- +$ sudo rm /catalogkeyspace/magazine/* +$ cd /catalogkeyspace/magazine/ +$ ls -l +---- +results in +[source,none] +---- +total 0 +---- + +Copy the snapshot files to the `/catalogkeyspace/magazine` directory. + +[source,bash] +---- +$ sudo cp ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots/magazine/* \ +/catalogkeyspace/magazine +---- + +List the files in the `/catalogkeyspace/magazine` directory and a +`schema.cql` should also get listed. + +[source,bash] +---- +$ cd /catalogkeyspace/magazine && ls -l +---- +results in +[source,none] +---- +total 44 +-rw-r--r--. 1 root root 31 Aug 19 04:13 manifest.json +-rw-r--r--. 1 root root 47 Aug 19 04:13 na-1-big-CompressionInfo.db +-rw-r--r--. 1 root root 97 Aug 19 04:13 na-1-big-Data.db +-rw-r--r--. 1 root root 10 Aug 19 04:13 na-1-big-Digest.crc32 +-rw-r--r--. 1 root root 16 Aug 19 04:13 na-1-big-Filter.db +-rw-r--r--. 1 root root 16 Aug 19 04:13 na-1-big-Index.db +-rw-r--r--. 1 root root 4687 Aug 19 04:13 na-1-big-Statistics.db +-rw-r--r--. 1 root root 56 Aug 19 04:13 na-1-big-Summary.db +-rw-r--r--. 1 root root 92 Aug 19 04:13 na-1-big-TOC.txt +-rw-r--r--. 1 root root 815 Aug 19 04:13 schema.cql +---- + +Alternatively create symlinks to the snapshot folder instead of copying +the data, something like: + +[source,bash] +---- +$ mkdir keyspace_name +$ ln -s _path_to_snapshot_folder keyspace_name/table_name +---- + +If the `magazine` table was dropped run the DDL in the `schema.cql` to +create the table. Run the `sstableloader` with the following command. + +[source,bash] +---- +$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ +---- + +As the output from the command indicates SSTables get streamed to the +cluster. + +[source,bash] +---- +$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ +---- +results in +[source,none] +---- +Established connection to initial hosts +Opening SSTables and calculating sections to stream +Streaming relevant part of /catalogkeyspace/magazine/na-1-big-Data.db to +[35.173.233.153:7000, 10.0.2.238:7000, 54.158.45.75:7000] +progress: [35.173.233.153:7000]0:1/1 176% total: 176% 0.017KiB/s (avg: 0.017KiB/s) +progress: [35.173.233.153:7000]0:1/1 176% total: 176% 0.000KiB/s (avg: 0.014KiB/s) +progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % total: 108% 0.115KiB/s +(avg: 0.017KiB/s) +progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % +[54.158.45.75:7000]0:1/1 78 % total: 96% 0.232KiB/s (avg: 0.024KiB/s) +progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % +[54.158.45.75:7000]0:1/1 78 % total: 96% 0.000KiB/s (avg: 0.022KiB/s) +progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % +[54.158.45.75:7000]0:1/1 78 % total: 96% 0.000KiB/s (avg: 0.021KiB/s) +---- + +Some other requirements of `sstableloader` that should be kept into +consideration are: + +* The SSTables to be loaded must be compatible with the Cassandra +version being loaded into. +* Repairing tables that have been loaded into a different cluster does +not repair the source tables. +* Sstableloader makes use of port 7000 for internode communication. +* Before restoring incremental backups run `nodetool flush` to backup +any data in memtables + +== Using nodetool import + +In this section we shall import SSTables into a table using the +`nodetool import` command. The `nodetool refresh` command is deprecated, +and it is recommended to use `nodetool import` instead. The +`nodetool refresh` does not have an option to load new SSTables from a +separate directory which the `nodetool import` does. + +The command usage is as follows. + +[source,none] +---- +nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] import + [(-c | --no-invalidate-caches)] [(-e | --extended-verify)] + [(-l | --keep-level)] [(-q | --quick)] [(-r | --keep-repaired)] + [(-t | --no-tokens)] [(-v | --no-verify)] [--]
+ ... +---- + +The arguments `keyspace`, `table` name and `directory` to import +SSTables from are required. + +The supported options are as follows. + +[source,none] +---- +-c, --no-invalidate-caches + Don't invalidate the row cache when importing + +-e, --extended-verify + Run an extended verify, verifying all values in the new SSTables + +-h , --host + Node hostname or ip address + +-l, --keep-level + Keep the level on the new SSTables + +-p , --port + Remote jmx agent port number + +-pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + +-pw , --password + Remote jmx agent password + +-pwf , --password-file + Path to the JMX password file + +-q, --quick + Do a quick import without verifying SSTables, clearing row cache or + checking in which data directory to put the file + +-r, --keep-repaired + Keep any repaired information from the SSTables + +-t, --no-tokens + Don't verify that all tokens in the new SSTable are owned by the + current node + +-u , --username + Remote jmx agent username + +-v, --no-verify + Don't verify new SSTables + +-- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options +---- + +As the keyspace and table are specified on the command line +`nodetool import` does not have the same requirement that +`sstableloader` does, which is to have the SSTables in a specific +directory path. When importing snapshots or incremental backups with +`nodetool import` the SSTables don’t need to be copied to another +directory. + +=== Importing Data from an Incremental Backup + +In this section we shall demonstrate using `nodetool import` to import +SSTables from an incremental backup. We shall use the example table +`cqlkeyspace.t`. Drop table `t` as we are demonstrating to restore the +table. + +[source,cql] +---- +DROP table t; +---- + +An incremental backup for a table does not include the schema definition +for the table. If the schema definition is not kept as a separate +backup, the `schema.cql` from a backup of the table may be used to +create the table as follows. + +[source,cql] +---- +CREATE TABLE IF NOT EXISTS cqlkeyspace.t ( + id int PRIMARY KEY, + k int, + v text) + WITH ID = d132e240-c217-11e9-bbee-19821dcea330 + AND bloom_filter_fp_chance = 0.01 + AND crc_check_chance = 1.0 + AND default_time_to_live = 0 + AND gc_grace_seconds = 864000 + AND min_index_interval = 128 + AND max_index_interval = 2048 + AND memtable_flush_period_in_ms = 0 + AND speculative_retry = '99p' + AND additional_write_policy = '99p' + AND comment = '' + AND caching = { 'keys': 'ALL', 'rows_per_partition': 'NONE' } + AND compaction = { 'max_threshold': '32', 'min_threshold': '4', + 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' } + AND compression = { 'chunk_length_in_kb': '16', 'class': + 'org.apache.cassandra.io.compress.LZ4Compressor' } + AND cdc = false + AND extensions = { } +; +---- + +Initially the table could be empty, but does not have to be. + +[source,cql] +---- +SELECT * FROM t; +---- +[source,cql] +---- +id | k | v +----+---+--- + +(0 rows) +---- + +Run the `nodetool import` command by providing the keyspace, table and +the backups directory. We don’t need to copy the table backups to +another directory to run `nodetool import` as we had to when using +`sstableloader`. + +[source,bash] +---- +$ nodetool import -- cqlkeyspace t \ +./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups +---- + +The SSTables get imported into the table. Run a query in cqlsh to list +the data imported. + +[source,cql] +---- +SELECT * FROM t; +---- +[source,cql] +---- +id | k | v +----+---+------ + 1 | 1 | val1 + 0 | 0 | val0 + +(2 rows) +---- + +=== Importing Data from a Snapshot + +Importing SSTables from a snapshot with the `nodetool import` command is +similar to importing SSTables from an incremental backup. To demonstrate +we shall import a snapshot for table `catalogkeyspace.journal`. Drop the +table as we are demonstrating to restore the table from a snapshot. + +[source,cql] +---- +USE CATALOGKEYSPACE; +DROP TABLE journal; +---- + +We shall use the `catalog-ks` snapshot for the `journal` table. List the +files in the snapshot. The snapshot includes a `schema.cql`, which is +the schema definition for the `journal` table. + +[source,bash] +---- +$ ls -l +---- +[source,none] +---- +total 44 +-rw-rw-r--. 1 ec2-user ec2-user 31 Aug 19 02:44 manifest.json +-rw-rw-r--. 3 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db +-rw-rw-r--. 3 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db +-rw-rw-r--. 3 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32 +-rw-rw-r--. 3 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db +-rw-rw-r--. 3 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db +-rw-rw-r--. 3 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db +-rw-rw-r--. 3 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db +-rw-rw-r--. 3 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt +-rw-rw-r--. 1 ec2-user ec2-user 814 Aug 19 02:44 schema.cql +---- + +Copy the DDL from the `schema.cql` and run in cqlsh to create the +`catalogkeyspace.journal` table. + +[source,cql] +---- +CREATE TABLE IF NOT EXISTS catalogkeyspace.journal ( + id int PRIMARY KEY, + name text, + publisher text) + WITH ID = 296a2d30-c22a-11e9-b135-0d927649052c + AND bloom_filter_fp_chance = 0.01 + AND crc_check_chance = 1.0 + AND default_time_to_live = 0 + AND gc_grace_seconds = 864000 + AND min_index_interval = 128 + AND max_index_interval = 2048 + AND memtable_flush_period_in_ms = 0 + AND speculative_retry = '99p' + AND additional_write_policy = '99p' + AND comment = '' + AND caching = { 'keys': 'ALL', 'rows_per_partition': 'NONE' } + AND compaction = { 'min_threshold': '4', 'max_threshold': + '32', 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' } + AND compression = { 'chunk_length_in_kb': '16', 'class': + 'org.apache.cassandra.io.compress.LZ4Compressor' } + AND cdc = false + AND extensions = { } +; +---- + +Run the `nodetool import` command to import the SSTables for the +snapshot. + +[source,bash] +---- +$ nodetool import -- catalogkeyspace journal \ +./cassandra/data/data/catalogkeyspace/journal- +296a2d30c22a11e9b1350d927649052c/snapshots/catalog-ks/ +---- + +Subsequently run a CQL query on the `journal` table and the data +imported gets listed. + +[source,cql] +---- +SELECT * FROM journal; +---- +[source,cql] +---- +id | name | publisher +----+---------------------------+------------------ + 1 | Couchbase Magazine | Couchbase + 0 | Apache Cassandra Magazine | Apache Cassandra + +(2 rows) +---- + +== Bulk Loading External Data + +Bulk loading external data directly is not supported by any of the tools +we have discussed which include `sstableloader` and `nodetool import`. +The `sstableloader` and `nodetool import` require data to be in the form +of SSTables. Apache Cassandra supports a Java API for generating +SSTables from input data. Subsequently the `sstableloader` or +`nodetool import` could be used to bulk load the SSTables. Next, we +shall discuss the `org.apache.cassandra.io.sstable.CQLSSTableWriter` +Java class for generating SSTables. + +=== Generating SSTables with CQLSSTableWriter Java API + +To generate SSTables using the `CQLSSTableWriter` class the following +need to be supplied at the least. + +* An output directory to generate the SSTable in +* The schema for the SSTable +* A prepared insert statement +* A partitioner + +The output directory must already have been created. Create a directory +(`/sstables` as an example) and set its permissions. + +[source,bash] +---- +$ sudo mkdir /sstables +$ sudo chmod 777 -R /sstables +---- + +Next, we shall discuss To use `CQLSSTableWriter` could be used in a Java +application. Create a Java constant for the output directory. + +[source,java] +---- +public static final String OUTPUT_DIR = "./sstables"; +---- + +`CQLSSTableWriter` Java API has the provision to create a user defined +type. Create a new type to store `int` data: + +[source,java] +---- +String type = "CREATE TYPE CQLKeyspace.intType (a int, b int)"; +// Define a String variable for the SSTable schema. +String schema = "CREATE TABLE CQLKeyspace.t (" + + " id int PRIMARY KEY," + + " k int," + + " v1 text," + + " v2 intType," + + ")"; +---- + +Define a `String` variable for the prepared insert statement to use: + +[source,java] +---- +String insertStmt = "INSERT INTO CQLKeyspace.t (id, k, v1, v2) VALUES (?, ?, ?, ?)"; +---- + +The partitioner to use does not need to be set as the default +partitioner `Murmur3Partitioner` is used. + +All these variables or settings are used by the builder class +`CQLSSTableWriter.Builder` to create a `CQLSSTableWriter` object. + +Create a File object for the output directory. + +[source,java] +---- +File outputDir = new File(OUTPUT_DIR + File.separator + "CQLKeyspace" + File.separator + "t"); +---- + +Next, obtain a `CQLSSTableWriter.Builder` object using `static` method +`CQLSSTableWriter.builder()`. Set the output directory `File` object, +user defined type, SSTable schema, buffer size, prepared insert +statement, and optionally any of the other builder options, and invoke +the `build()` method to create a `CQLSSTableWriter` object: + +[source,java] +---- +CQLSSTableWriter writer = CQLSSTableWriter.builder() + .inDirectory(outputDir) + .withType(type) + .forTable(schema) + .withBufferSizeInMB(256) + .using(insertStmt).build(); +---- + +Next, set the SSTable data. If any user define types are used obtain a +`UserType` object for these: + +[source,java] +---- +UserType userType = writer.getUDType("intType"); +---- + +Add data rows for the resulting SSTable. + +[source,java] +---- +writer.addRow(0, 0, "val0", userType.newValue().setInt("a", 0).setInt("b", 0)); + writer.addRow(1, 1, "val1", userType.newValue().setInt("a", 1).setInt("b", 1)); + writer.addRow(2, 2, "val2", userType.newValue().setInt("a", 2).setInt("b", 2)); +---- + +Close the writer, finalizing the SSTable. + +[source,java] +---- +writer.close(); +---- + +All the public methods the `CQLSSTableWriter` class provides including +some other methods that are not discussed in the preceding example are +as follows. + +[cols=",",options="header",] +|=== +|Method |Description +|addRow(java.util.List values) |Adds a new row to the +writer. Returns a CQLSSTableWriter object. Each provided value type +should correspond to the types of the CQL column the value is for. The +correspondence between java type and CQL type is the same one than the +one documented at +www.datastax.com/drivers/java/2.0/apidocs/com/datastax/driver/core/DataType.Name.html#asJavaC +lass(). + +|addRow(java.util.Map values) |Adds a +new row to the writer. Returns a CQLSSTableWriter object. This is +equivalent to the other addRow methods, but takes a map whose keys are +the names of the columns to add instead of taking a list of the values +in the order of the insert statement used during construction of this +SSTable writer. The column names in the map keys must be in lowercase +unless the declared column name is a case-sensitive quoted identifier in +which case the map key must use the exact case of the column. The values +parameter is a map of column name to column values representing the new +row to add. If a column is not included in the map, it's value will be +null. If the map contains keys that do not correspond to one of the +columns of the insert statement used when creating this SSTable writer, +the corresponding value is ignored. + +|addRow(java.lang.Object... values) |Adds a new row to the writer. +Returns a CQLSSTableWriter object. + +|CQLSSTableWriter.builder() |Returns a new builder for a +CQLSSTableWriter. + +|close() |Closes the writer. + +|rawAddRow(java.nio.ByteBuffer... values) |Adds a new row to the writer +given already serialized binary values. Returns a CQLSSTableWriter +object. The row values must correspond to the bind variables of the +insertion statement used when creating by this SSTable writer. + +|rawAddRow(java.util.List values) |Adds a new row +to the writer given already serialized binary values. Returns a +CQLSSTableWriter object. The row values must correspond to the bind +variables of the insertion statement used when creating by this SSTable +writer. | + +|rawAddRow(java.util.Map values) +|Adds a new row to the writer given already serialized binary values. +Returns a CQLSSTableWriter object. The row values must correspond to the +bind variables of the insertion statement used when creating by this +SSTable writer. | + +|getUDType(String dataType) |Returns the User Defined type used in this +SSTable Writer that can be used to create UDTValue instances. +|=== + +All the public methods the `CQLSSTableWriter.Builder` class provides +including some other methods that are not discussed in the preceding +example are as follows. + +[cols=",",options="header",] +|=== +|Method |Description +|inDirectory(String directory) |The directory where to write the +SSTables. This is a mandatory option. The directory to use should +already exist and be writable. + +|inDirectory(File directory) |The directory where to write the SSTables. +This is a mandatory option. The directory to use should already exist +and be writable. + +|forTable(String schema) |The schema (CREATE TABLE statement) for the +table for which SSTable is to be created. The provided CREATE TABLE +statement must use a fully-qualified table name, one that includes the +keyspace name. This is a mandatory option. + +|withPartitioner(IPartitioner partitioner) |The partitioner to use. By +default, Murmur3Partitioner will be used. If this is not the partitioner +used by the cluster for which the SSTables are created, the correct +partitioner needs to be provided. + +|using(String insert) |The INSERT or UPDATE statement defining the order +of the values to add for a given CQL row. The provided INSERT statement +must use a fully-qualified table name, one that includes the keyspace +name. Moreover, said statement must use bind variables since these +variables will be bound to values by the resulting SSTable writer. This +is a mandatory option. + +|withBufferSizeInMB(int size) |The size of the buffer to use. This +defines how much data will be buffered before being written as a new +SSTable. This corresponds roughly to the data size that will have the +created SSTable. The default is 128MB, which should be reasonable for a +1GB heap. If OutOfMemory exception gets generated while using the +SSTable writer, should lower this value. + +|sorted() |Creates a CQLSSTableWriter that expects sorted inputs. If +this option is used, the resulting SSTable writer will expect rows to be +added in SSTable sorted order (and an exception will be thrown if that +is not the case during row insertion). The SSTable sorted order means +that rows are added such that their partition keys respect the +partitioner order. This option should only be used if the rows can be +provided in order, which is rarely the case. If the rows can be provided +in order however, using this sorted might be more efficient. If this +option is used, some option like withBufferSizeInMB will be ignored. + +|build() |Builds a CQLSSTableWriter object. +|=== diff --git a/doc/source/modules/cassandra/pages/operating/cdc.adoc b/doc/source/modules/cassandra/pages/operating/cdc.adoc new file mode 100644 index 000000000000..9fe277a40b00 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/cdc.adoc @@ -0,0 +1,86 @@ += Change Data Capture + +== Overview + +Change data capture (CDC) provides a mechanism to flag specific tables +for archival as well as rejecting writes to those tables once a +configurable size-on-disk for the CDC log is reached. An operator can +enable CDC on a table by setting the table property `cdc=true` (either +when `creating the table ` or +`altering it `). Upon CommitLogSegment creation, +a hard-link to the segment is created in the directory specified in +`cassandra.yaml`. On segment fsync to disk, if CDC data is present +anywhere in the segment a _cdc.idx file is also created +with the integer offset of how much data in the original segment is +persisted to disk. Upon final segment flush, a second line with the +human-readable word "COMPLETED" will be added to the _cdc.idx file +indicating that Cassandra has completed all processing on the file. + +We we use an index file rather than just encouraging clients to parse +the log realtime off a memory mapped handle as data can be reflected in +a kernel buffer that is not yet persisted to disk. Parsing only up to +the listed offset in the _cdc.idx file will ensure that you only parse +CDC data for data that is durable. + +A threshold of total disk space allowed is specified in the yaml at +which time newly allocated CommitLogSegments will not allow CDC data +until a consumer parses and removes files from the specified cdc_raw +directory. + +== Configuration + +=== Enabling or disabling CDC on a table + +CDC is enable or disable through the [.title-ref]#cdc# table property, +for instance: + +[source,cql] +---- +CREATE TABLE foo (a int, b text, PRIMARY KEY(a)) WITH cdc=true; + +ALTER TABLE foo WITH cdc=true; + +ALTER TABLE foo WITH cdc=false; +---- + +=== cassandra.yaml parameters + +The following cassandra.yaml options are available for CDC: + +`cdc_enabled` (default: false):: + Enable or disable CDC operations node-wide. +`cdc_raw_directory` (default: `$CASSANDRA_HOME/data/cdc_raw`):: + Destination for CommitLogSegments to be moved after all corresponding + memtables are flushed. +`cdc_free_space_in_mb`: (default: min of 4096 and 1/8th volume space):: + Calculated as sum of all active CommitLogSegments that permit CDC + + all flushed CDC segments in `cdc_raw_directory`. +`cdc_free_space_check_interval_ms` (default: 250):: + When at capacity, we limit the frequency with which we re-calculate + the space taken up by `cdc_raw_directory` to prevent burning CPU + cycles unnecessarily. Default is to check 4 times per second. + +== Reading CommitLogSegments + +Use a +https://github.com/apache/cassandra/blob/e31e216234c6b57a531cae607e0355666007deb2/src/java/org/apache/cassandra/db/commitlog/CommitLogReader.java[CommitLogReader.java]. +Usage is +https://github.com/apache/cassandra/blob/e31e216234c6b57a531cae607e0355666007deb2/src/java/org/apache/cassandra/db/commitlog/CommitLogReplayer.java#L132-L140[fairly +straightforward] with a +https://github.com/apache/cassandra/blob/e31e216234c6b57a531cae607e0355666007deb2/src/java/org/apache/cassandra/db/commitlog/CommitLogReader.java#L71-L103[variety +of signatures] available for use. In order to handle mutations read from +disk, implement +https://github.com/apache/cassandra/blob/e31e216234c6b57a531cae607e0355666007deb2/src/java/org/apache/cassandra/db/commitlog/CommitLogReadHandler.java[CommitLogReadHandler]. + +== Warnings + +*Do not enable CDC without some kind of consumption process in-place.* + +If CDC is enabled on a node and then on a table, the +`cdc_free_space_in_mb` will fill up and then writes to CDC-enabled +tables will be rejected unless some consumption process is in place. + +== Further Reading + +* https://issues.apache.org/jira/browse/CASSANDRA-8844[JIRA ticket] +* https://issues.apache.org/jira/browse/CASSANDRA-12148[JIRA ticket] diff --git a/doc/source/modules/cassandra/pages/operating/compaction/index.adoc b/doc/source/modules/cassandra/pages/operating/compaction/index.adoc new file mode 100644 index 000000000000..6ee39e284716 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/compaction/index.adoc @@ -0,0 +1,339 @@ += Compaction + +== Strategies + +Picking the right compaction strategy for your workload will ensure the +best performance for both querying and for compaction itself. + +`Size Tiered Compaction Strategy `:: + The default compaction strategy. Useful as a fallback when other + strategies don't fit the workload. Most useful for non pure time + series workloads with spinning disks, or when the I/O from `LCS ` + is too high. +`Leveled Compaction Strategy `:: + Leveled Compaction Strategy (LCS) is optimized for read heavy + workloads, or workloads with lots of updates and deletes. It is not a + good choice for immutable time series data. +`Time Window Compaction Strategy `:: + Time Window Compaction Strategy is designed for TTL'ed, mostly + immutable time series data. + +== Types of compaction + +The concept of compaction is used for different kinds of operations in +Cassandra, the common thing about these operations is that it takes one +or more sstables and output new sstables. The types of compactions are; + +Minor compaction:: + triggered automatically in Cassandra. +Major compaction:: + a user executes a compaction over all sstables on the node. +User defined compaction:: + a user triggers a compaction on a given set of sstables. +Scrub:: + try to fix any broken sstables. This can actually remove valid data if + that data is corrupted, if that happens you will need to run a full + repair on the node. +Upgradesstables:: + upgrade sstables to the latest version. Run this after upgrading to a + new major version. +Cleanup:: + remove any ranges this node does not own anymore, typically triggered + on neighbouring nodes after a node has been bootstrapped since that + node will take ownership of some ranges from those nodes. +Secondary index rebuild:: + rebuild the secondary indexes on the node. +Anticompaction:: + after repair the ranges that were actually repaired are split out of + the sstables that existed when repair started. +Sub range compaction:: + It is possible to only compact a given sub range - this could be + useful if you know a token that has been misbehaving - either + gathering many updates or many deletes. + (`nodetool compact -st x -et y`) will pick all sstables containing the + range between x and y and issue a compaction for those sstables. For + STCS this will most likely include all sstables but with LCS it can + issue the compaction for a subset of the sstables. With LCS the + resulting sstable will end up in L0. + +== When is a minor compaction triggered? + +- When an sstable is added to the node through flushing/streaming etc. # +When autocompaction is enabled after being disabled +(`nodetool enableautocompaction`) # When compaction adds new sstables. # +A check for new minor compactions every 5 minutes. + +== Merging sstables + +Compaction is about merging sstables, since partitions in sstables are +sorted based on the hash of the partition key it is possible to +efficiently merge separate sstables. Content of each partition is also +sorted so each partition can be merged efficiently. + +== Tombstones and Garbage Collection (GC) Grace + +=== Why Tombstones + +When a delete request is received by Cassandra it does not actually +remove the data from the underlying store. Instead it writes a special +piece of data known as a tombstone. The Tombstone represents the delete +and causes all values which occurred before the tombstone to not appear +in queries to the database. This approach is used instead of removing +values because of the distributed nature of Cassandra. + +=== Deletes without tombstones + +Imagine a three node cluster which has the value [A] replicated to every +node.: + +[source,none] +---- +[A], [A], [A] +---- + +If one of the nodes fails and and our delete operation only removes +existing values we can end up with a cluster that looks like: + +[source,none] +---- +[], [], [A] +---- + +Then a repair operation would replace the value of [A] back onto the two +nodes which are missing the value.: + +[source,none] +---- +[A], [A], [A] +---- + +This would cause our data to be resurrected even though it had been +deleted. + +=== Deletes with Tombstones + +Starting again with a three node cluster which has the value [A] +replicated to every node.: + +[source,none] +---- +[A], [A], [A] +---- + +If instead of removing data we add a tombstone record, our single node +failure situation will look like this.: + +[source,none] +---- +[A, Tombstone[A]], [A, Tombstone[A]], [A] +---- + +Now when we issue a repair the Tombstone will be copied to the replica, +rather than the deleted data being resurrected.: + +[source,none] +---- +[A, Tombstone[A]], [A, Tombstone[A]], [A, Tombstone[A]] +---- + +Our repair operation will correctly put the state of the system to what +we expect with the record [A] marked as deleted on all nodes. This does +mean we will end up accruing Tombstones which will permanently +accumulate disk space. To avoid keeping tombstones forever we have a +parameter known as `gc_grace_seconds` for every table in Cassandra. + +=== The gc_grace_seconds parameter and Tombstone Removal + +The table level `gc_grace_seconds` parameter controls how long Cassandra +will retain tombstones through compaction events before finally removing +them. This duration should directly reflect the amount of time a user +expects to allow before recovering a failed node. After +`gc_grace_seconds` has expired the tombstone may be removed (meaning +there will no longer be any record that a certain piece of data was +deleted), but as a tombstone can live in one sstable and the data it +covers in another, a compaction must also include both sstable for a +tombstone to be removed. More precisely, to be able to drop an actual +tombstone the following needs to be true; + +* The tombstone must be older than `gc_grace_seconds` +* If partition X contains the tombstone, the sstable containing the +partition plus all sstables containing data older than the tombstone +containing X must be included in the same compaction. We don't need to +care if the partition is in an sstable if we can guarantee that all data +in that sstable is newer than the tombstone. If the tombstone is older +than the data it cannot shadow that data. +* If the option `only_purge_repaired_tombstones` is enabled, tombstones +are only removed if the data has also been repaired. + +If a node remains down or disconnected for longer than +`gc_grace_seconds` it's deleted data will be repaired back to the other +nodes and re-appear in the cluster. This is basically the same as in the +"Deletes without Tombstones" section. Note that tombstones will not be +removed until a compaction event even if `gc_grace_seconds` has elapsed. + +The default value for `gc_grace_seconds` is 864000 which is equivalent +to 10 days. This can be set when creating or altering a table using +`WITH gc_grace_seconds`. + +== TTL + +Data in Cassandra can have an additional property called time to live - +this is used to automatically drop data that has expired once the time +is reached. Once the TTL has expired the data is converted to a +tombstone which stays around for at least `gc_grace_seconds`. Note that +if you mix data with TTL and data without TTL (or just different length +of the TTL) Cassandra will have a hard time dropping the tombstones +created since the partition might span many sstables and not all are +compacted at once. + +== Fully expired sstables + +If an sstable contains only tombstones and it is guaranteed that that +sstable is not shadowing data in any other sstable compaction can drop +that sstable. If you see sstables with only tombstones (note that TTL:ed +data is considered tombstones once the time to live has expired) but it +is not being dropped by compaction, it is likely that other sstables +contain older data. There is a tool called `sstableexpiredblockers` that +will list which sstables are droppable and which are blocking them from +being dropped. This is especially useful for time series compaction with +`TimeWindowCompactionStrategy` (and the deprecated +`DateTieredCompactionStrategy`). With `TimeWindowCompactionStrategy` it +is possible to remove the guarantee (not check for shadowing data) by +enabling `unsafe_aggressive_sstable_expiration`. + +== Repaired/unrepaired data + +With incremental repairs Cassandra must keep track of what data is +repaired and what data is unrepaired. With anticompaction repaired data +is split out into repaired and unrepaired sstables. To avoid mixing up +the data again separate compaction strategy instances are run on the two +sets of data, each instance only knowing about either the repaired or +the unrepaired sstables. This means that if you only run incremental +repair once and then never again, you might have very old data in the +repaired sstables that block compaction from dropping tombstones in the +unrepaired (probably newer) sstables. + +== Data directories + +Since tombstones and data can live in different sstables it is important +to realize that losing an sstable might lead to data becoming live again +- the most common way of losing sstables is to have a hard drive break +down. To avoid making data live tombstones and actual data are always in +the same data directory. This way, if a disk is lost, all versions of a +partition are lost and no data can get undeleted. To achieve this a +compaction strategy instance per data directory is run in addition to +the compaction strategy instances containing repaired/unrepaired data, +this means that if you have 4 data directories there will be 8 +compaction strategy instances running. This has a few more benefits than +just avoiding data getting undeleted: + +* It is possible to run more compactions in parallel - leveled +compaction will have several totally separate levelings and each one can +run compactions independently from the others. +* Users can backup and restore a single data directory. +* Note though that currently all data directories are considered equal, +so if you have a tiny disk and a big disk backing two data directories, +the big one will be limited the by the small one. One work around to +this is to create more data directories backed by the big disk. + +== Single sstable tombstone compaction + +When an sstable is written a histogram with the tombstone expiry times +is created and this is used to try to find sstables with very many +tombstones and run single sstable compaction on that sstable in hope of +being able to drop tombstones in that sstable. Before starting this it +is also checked how likely it is that any tombstones will actually will +be able to be dropped how much this sstable overlaps with other +sstables. To avoid most of these checks the compaction option +`unchecked_tombstone_compaction` can be enabled. + +[[compaction-options]] +== Common options + +There is a number of common options for all the compaction strategies; + +`enabled` (default: true):: + Whether minor compactions should run. Note that you can have + 'enabled': true as a compaction option and then do 'nodetool + enableautocompaction' to start running compactions. +`tombstone_threshold` (default: 0.2):: + How much of the sstable should be tombstones for us to consider doing + a single sstable compaction of that sstable. +`tombstone_compaction_interval` (default: 86400s (1 day)):: + Since it might not be possible to drop any tombstones when doing a + single sstable compaction we need to make sure that one sstable is not + constantly getting recompacted - this option states how often we + should try for a given sstable. +`log_all` (default: false):: + New detailed compaction logging, see + `below `. +`unchecked_tombstone_compaction` (default: false):: + The single sstable compaction has quite strict checks for whether it + should be started, this option disables those checks and for some + usecases this might be needed. Note that this does not change anything + for the actual compaction, tombstones are only dropped if it is safe + to do so - it might just rewrite an sstable without being able to drop + any tombstones. +`only_purge_repaired_tombstone` (default: false):: + Option to enable the extra safety of making sure that tombstones are + only dropped if the data has been repaired. +`min_threshold` (default: 4):: + Lower limit of number of sstables before a compaction is triggered. + Not used for `LeveledCompactionStrategy`. +`max_threshold` (default: 32):: + Upper limit of number of sstables before a compaction is triggered. + Not used for `LeveledCompactionStrategy`. + +Further, see the section on each strategy for specific additional +options. + +== Compaction nodetool commands + +The `nodetool ` utility provides a number of commands related +to compaction: + +`enableautocompaction`:: + Enable compaction. +`disableautocompaction`:: + Disable compaction. +`setcompactionthroughput`:: + How fast compaction should run at most - defaults to 16MB/s, but note + that it is likely not possible to reach this throughput. +`compactionstats`:: + Statistics about current and pending compactions. +`compactionhistory`:: + List details about the last compactions. +`setcompactionthreshold`:: + Set the min/max sstable count for when to trigger compaction, defaults + to 4/32. + +== Switching the compaction strategy and options using JMX + +It is possible to switch compaction strategies and its options on just a +single node using JMX, this is a great way to experiment with settings +without affecting the whole cluster. The mbean is: + +[source,none] +---- +org.apache.cassandra.db:type=ColumnFamilies,keyspace=,columnfamily= +---- + +and the attribute to change is `CompactionParameters` or +`CompactionParametersJson` if you use jconsole or jmc. The syntax for +the json version is the same as you would use in an +`ALTER TABLE ` statement -for example: + +[source,none] +---- +{ 'class': 'LeveledCompactionStrategy', 'sstable_size_in_mb': 123, 'fanout_size': 10} +---- + +The setting is kept until someone executes an +`ALTER TABLE ` that touches the compaction +settings or restarts the node. + +[[detailed-compaction-logging]] +== More detailed compaction logging + +Enable with the compaction option `log_all` and a more detailed +compaction log file will be produced in your log directory. diff --git a/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc b/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc new file mode 100644 index 000000000000..8f02fbe0511f --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc @@ -0,0 +1,79 @@ += Leveled Compaction Strategy + +The idea of `LeveledCompactionStrategy` (LCS) is that all sstables are +put into different levels where we guarantee that no overlapping +sstables are in the same level. By overlapping we mean that the +first/last token of a single sstable are never overlapping with other +sstables. This means that for a SELECT we will only have to look for the +partition key in a single sstable per level. Each level is 10x the size +of the previous one and each sstable is 160MB by default. L0 is where +sstables are streamed/flushed - no overlap guarantees are given here. + +When picking compaction candidates we have to make sure that the +compaction does not create overlap in the target level. This is done by +always including all overlapping sstables in the next level. For example +if we select an sstable in L3, we need to guarantee that we pick all +overlapping sstables in L4 and make sure that no currently ongoing +compactions will create overlap if we start that compaction. We can +start many parallel compactions in a level if we guarantee that we wont +create overlap. For L0 -> L1 compactions we almost always need to +include all L1 sstables since most L0 sstables cover the full range. We +also can't compact all L0 sstables with all L1 sstables in a single +compaction since that can use too much memory. + +When deciding which level to compact LCS checks the higher levels first +(with LCS, a "higher" level is one with a higher number, L0 being the +lowest one) and if the level is behind a compaction will be started in +that level. + +== Major compaction + +It is possible to do a major compaction with LCS - it will currently +start by filling out L1 and then once L1 is full, it continues with L2 +etc. This is sub optimal and will change to create all the sstables in a +high level instead, CASSANDRA-11817. + +== Bootstrapping + +During bootstrap sstables are streamed from other nodes. The level of +the remote sstable is kept to avoid many compactions after the bootstrap +is done. During bootstrap the new node also takes writes while it is +streaming the data from a remote node - these writes are flushed to L0 +like all other writes and to avoid those sstables blocking the remote +sstables from going to the correct level, we only do STCS in L0 until +the bootstrap is done. + +== STCS in L0 + +If LCS gets very many L0 sstables reads are going to hit all (or most) +of the L0 sstables since they are likely to be overlapping. To more +quickly remedy this LCS does STCS compactions in L0 if there are more +than 32 sstables there. This should improve read performance more +quickly compared to letting LCS do its L0 -> L1 compactions. If you keep +getting too many sstables in L0 it is likely that LCS is not the best +fit for your workload and STCS could work out better. + +== Starved sstables + +If a node ends up with a leveling where there are a few very high level +sstables that are not getting compacted they might make it impossible +for lower levels to drop tombstones etc. For example, if there are +sstables in L6 but there is only enough data to actually get a L4 on the +node the left over sstables in L6 will get starved and not compacted. +This can happen if a user changes sstable_size_in_mb from 5MB to 160MB +for example. To avoid this LCS tries to include those starved high level +sstables in other compactions if there has been 25 compaction rounds +where the highest level has not been involved. + +== LCS options + +`sstable_size_in_mb` (default: 160MB):: + The target compressed (if using compression) sstable size - the + sstables can end up being larger if there are very large partitions on + the node. +`fanout_size` (default: 10):: + The target size of levels increases by this fanout_size multiplier. + You can reduce the space amplification by tuning this option. + +LCS also support the `cassandra.disable_stcs_in_l0` startup option +(`-Dcassandra.disable_stcs_in_l0=true`) to avoid doing STCS in L0. diff --git a/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc b/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc new file mode 100644 index 000000000000..1000c920e321 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc @@ -0,0 +1,40 @@ += Leveled Compaction Strategy + +The basic idea of `SizeTieredCompactionStrategy` (STCS) is to merge +sstables of approximately the same size. All sstables are put in +different buckets depending on their size. An sstable is added to the +bucket if size of the sstable is within `bucket_low` and `bucket_high` +of the current average size of the sstables already in the bucket. This +will create several buckets and the most interesting of those buckets +will be compacted. The most interesting one is decided by figuring out +which bucket's sstables takes the most reads. + +== Major compaction + +When running a major compaction with STCS you will end up with two +sstables per data directory (one for repaired data and one for +unrepaired data). There is also an option (-s) to do a major compaction +that splits the output into several sstables. The sizes of the sstables +are approximately 50%, 25%, 12.5%... of the total size. + +== STCS options + +`min_sstable_size` (default: 50MB):: + Sstables smaller than this are put in the same bucket. +`bucket_low` (default: 0.5):: + How much smaller than the average size of a bucket a sstable should be + before not being included in the bucket. That is, if + `bucket_low * avg_bucket_size < sstable_size` (and the `bucket_high` + condition holds, see below), then the sstable is added to the bucket. +`bucket_high` (default: 1.5):: + How much bigger than the average size of a bucket a sstable should be + before not being included in the bucket. That is, if + `sstable_size < bucket_high * avg_bucket_size` (and the `bucket_low` + condition holds, see above), then the sstable is added to the bucket. + +== Defragmentation + +Defragmentation is done when many sstables are touched during a read. +The result of the read is put in to the memtable so that the next read +will not have to touch as many sstables. This can cause writes on a +read-only-cluster. diff --git a/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc b/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc new file mode 100644 index 000000000000..a8ed43278af8 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc @@ -0,0 +1,72 @@ += Time Window CompactionStrategy + +`TimeWindowCompactionStrategy` (TWCS) is designed specifically for +workloads where it's beneficial to have data on disk grouped by the +timestamp of the data, a common goal when the workload is time-series in +nature or when all data is written with a TTL. In an expiring/TTL +workload, the contents of an entire SSTable likely expire at +approximately the same time, allowing them to be dropped completely, and +space reclaimed much more reliably than when using +`SizeTieredCompactionStrategy` or `LeveledCompactionStrategy`. The basic +concept is that `TimeWindowCompactionStrategy` will create 1 sstable per +file for a given window, where a window is simply calculated as the +combination of two primary options: + +`compaction_window_unit` (default: DAYS):: + A Java TimeUnit (MINUTES, HOURS, or DAYS). +`compaction_window_size` (default: 1):: + The number of units that make up a window. +`unsafe_aggressive_sstable_expiration` (default: false):: + Expired sstables will be dropped without checking its data is + shadowing other sstables. This is a potentially risky option that can + lead to data loss or deleted data re-appearing, going beyond what + [.title-ref]#unchecked_tombstone_compaction# does for single sstable + compaction. Due to the risk the jvm must also be started with + [.title-ref]#-Dcassandra.unsafe_aggressive_sstable_expiration=true#. + +Taken together, the operator can specify windows of virtually any size, +and [.title-ref]#TimeWindowCompactionStrategy# will work to create a +single sstable for writes within that window. For efficiency during +writing, the newest window will be compacted using +[.title-ref]#SizeTieredCompactionStrategy#. + +Ideally, operators should select a `compaction_window_unit` and +`compaction_window_size` pair that produces approximately 20-30 windows +- if writing with a 90 day TTL, for example, a 3 Day window would be a +reasonable choice +(`'compaction_window_unit':'DAYS','compaction_window_size':3`). + +== TimeWindowCompactionStrategy Operational Concerns + +The primary motivation for TWCS is to separate data on disk by timestamp +and to allow fully expired SSTables to drop more efficiently. One +potential way this optimal behavior can be subverted is if data is +written to SSTables out of order, with new data and old data in the same +SSTable. Out of order data can appear in two ways: + +* If the user mixes old data and new data in the traditional write path, +the data will be comingled in the memtables and flushed into the same +SSTable, where it will remain comingled. +* If the user's read requests for old data cause read repairs that pull +old data into the current memtable, that data will be comingled and +flushed into the same SSTable. + +While TWCS tries to minimize the impact of comingled data, users should +attempt to avoid this behavior. Specifically, users should avoid queries +that explicitly set the timestamp via CQL `USING TIMESTAMP`. +Additionally, users should run frequent repairs (which streams data in +such a way that it does not become comingled). + +== Changing TimeWindowCompactionStrategy Options + +Operators wishing to enable `TimeWindowCompactionStrategy` on existing +data should consider running a major compaction first, placing all +existing data into a single (old) window. Subsequent newer writes will +then create typical SSTables as expected. + +Operators wishing to change `compaction_window_unit` or +`compaction_window_size` can do so, but may trigger additional +compactions as adjacent windows are joined together. If the window size +is decrease d (for example, from 24 hours to 12 hours), then the +existing SSTables will not be modified - TWCS can not split existing +SSTables into multiple windows. diff --git a/doc/source/modules/cassandra/pages/operating/compression.adoc b/doc/source/modules/cassandra/pages/operating/compression.adoc new file mode 100644 index 000000000000..e6f8d50df1aa --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/compression.adoc @@ -0,0 +1,187 @@ += Compression + +Cassandra offers operators the ability to configure compression on a +per-table basis. Compression reduces the size of data on disk by +compressing the SSTable in user-configurable compression +`chunk_length_in_kb`. As Cassandra SSTables are immutable, the CPU cost +of compressing is only necessary when the SSTable is written - +subsequent updates to data will land in different SSTables, so Cassandra +will not need to decompress, overwrite, and recompress data when UPDATE +commands are issued. On reads, Cassandra will locate the relevant +compressed chunks on disk, decompress the full chunk, and then proceed +with the remainder of the read path (merging data from disks and +memtables, read repair, and so on). + +Compression algorithms typically trade off between the following three +areas: + +* *Compression speed*: How fast does the compression algorithm compress +data. This is critical in the flush and compaction paths because data +must be compressed before it is written to disk. +* *Decompression speed*: How fast does the compression algorithm +de-compress data. This is critical in the read and compaction paths as +data must be read off disk in a full chunk and decompressed before it +can be returned. +* *Ratio*: By what ratio is the uncompressed data reduced by. Cassandra +typically measures this as the size of data on disk relative to the +uncompressed size. For example a ratio of `0.5` means that the data on +disk is 50% the size of the uncompressed data. Cassandra exposes this +ratio per table as the `SSTable Compression Ratio` field of +`nodetool tablestats`. + +Cassandra offers five compression algorithms by default that make +different tradeoffs in these areas. While benchmarking compression +algorithms depends on many factors (algorithm parameters such as +compression level, the compressibility of the input data, underlying +processor class, etc ...), the following table should help you pick a +starting point based on your application's requirements with an +extremely rough grading of the different choices by their performance in +these areas (A is relatively good, F is relatively bad): + +[width="100%",cols="40%,19%,11%,13%,6%,11%",options="header",] +|=== +|Compression Algorithm |Cassandra Class |Compression |Decompression +|Ratio |C* Version + +|https://lz4.github.io/lz4/[LZ4] |`LZ4Compressor` | A+ | A+ | C+ | `>=1.2.2` + +|https://lz4.github.io/lz4/[LZ4HC] |`LZ4Compressor` | C+ | A+ | B+ | `>= 3.6` + +|https://facebook.github.io/zstd/[Zstd] |`ZstdCompressor` | A- | A- | A+ | `>= 4.0` + +|http://google.github.io/snappy/[Snappy] |`SnappyCompressor` | A- | A | C | `>= 1.0` + +|https://zlib.net[Deflate (zlib)] |`DeflateCompressor` | C | C | A | `>= 1.0` +|=== + +Generally speaking for a performance critical (latency or throughput) +application `LZ4` is the right choice as it gets excellent ratio per CPU +cycle spent. This is why it is the default choice in Cassandra. + +For storage critical applications (disk footprint), however, `Zstd` may +be a better choice as it can get significant additional ratio to `LZ4`. + +`Snappy` is kept for backwards compatibility and `LZ4` will typically be +preferable. + +`Deflate` is kept for backwards compatibility and `Zstd` will typically +be preferable. + +== Configuring Compression + +Compression is configured on a per-table basis as an optional argument +to `CREATE TABLE` or `ALTER TABLE`. Three options are available for all +compressors: + +* `class` (default: `LZ4Compressor`): specifies the compression class to +use. The two "fast" compressors are `LZ4Compressor` and +`SnappyCompressor` and the two "good" ratio compressors are +`ZstdCompressor` and `DeflateCompressor`. +* `chunk_length_in_kb` (default: `16KiB`): specifies the number of +kilobytes of data per compression chunk. The main tradeoff here is that +larger chunk sizes give compression algorithms more context and improve +their ratio, but require reads to deserialize and read more off disk. +* `crc_check_chance` (default: `1.0`): determines how likely Cassandra +is to verify the checksum on each compression chunk during reads to +protect against data corruption. Unless you have profiles indicating +this is a performance problem it is highly encouraged not to turn this +off as it is Cassandra's only protection against bitrot. + +The `LZ4Compressor` supports the following additional options: + +* `lz4_compressor_type` (default `fast`): specifies if we should use the +`high` (a.k.a `LZ4HC`) ratio version or the `fast` (a.k.a `LZ4`) version +of `LZ4`. The `high` mode supports a configurable level, which can allow +operators to tune the performance <-> ratio tradeoff via the +`lz4_high_compressor_level` option. Note that in `4.0` and above it may +be preferable to use the `Zstd` compressor. +* `lz4_high_compressor_level` (default `9`): A number between `1` and +`17` inclusive that represents how much CPU time to spend trying to get +more compression ratio. Generally lower levels are "faster" but they get +less ratio and higher levels are slower but get more compression ratio. + +The `ZstdCompressor` supports the following options in addition: + +* `compression_level` (default `3`): A number between `-131072` and `22` +inclusive that represents how much CPU time to spend trying to get more +compression ratio. The lower the level, the faster the speed (at the +cost of ratio). Values from 20 to 22 are called "ultra levels" and +should be used with caution, as they require more memory. The default of +`3` is a good choice for competing with `Deflate` ratios and `1` is a +good choice for competing with `LZ4`. + +Users can set compression using the following syntax: + +[source,cql] +---- +CREATE TABLE keyspace.table (id int PRIMARY KEY) + WITH compression = {'class': 'LZ4Compressor'}; +---- + +Or + +[source,cql] +---- +ALTER TABLE keyspace.table + WITH compression = {'class': 'LZ4Compressor', 'chunk_length_in_kb': 64, 'crc_check_chance': 0.5}; +---- + +Once enabled, compression can be disabled with `ALTER TABLE` setting +`enabled` to `false`: + +[source,cql] +---- +ALTER TABLE keyspace.table + WITH compression = {'enabled':'false'}; +---- + +Operators should be aware, however, that changing compression is not +immediate. The data is compressed when the SSTable is written, and as +SSTables are immutable, the compression will not be modified until the +table is compacted. Upon issuing a change to the compression options via +`ALTER TABLE`, the existing SSTables will not be modified until they are +compacted - if an operator needs compression changes to take effect +immediately, the operator can trigger an SSTable rewrite using +`nodetool scrub` or `nodetool upgradesstables -a`, both of which will +rebuild the SSTables on disk, re-compressing the data in the process. + +== Benefits and Uses + +Compression's primary benefit is that it reduces the amount of data +written to disk. Not only does the reduced size save in storage +requirements, it often increases read and write throughput, as the CPU +overhead of compressing data is faster than the time it would take to +read or write the larger volume of uncompressed data from disk. + +Compression is most useful in tables comprised of many rows, where the +rows are similar in nature. Tables containing similar text columns (such +as repeated JSON blobs) often compress very well. Tables containing data +that has already been compressed or random data (e.g. benchmark +datasets) do not typically compress well. + +== Operational Impact + +* Compression metadata is stored off-heap and scales with data on disk. +This often requires 1-3GB of off-heap RAM per terabyte of data on disk, +though the exact usage varies with `chunk_length_in_kb` and compression +ratios. +* Streaming operations involve compressing and decompressing data on +compressed tables - in some code paths (such as non-vnode bootstrap), +the CPU overhead of compression can be a limiting factor. +* To prevent slow compressors (`Zstd`, `Deflate`, `LZ4HC`) from blocking +flushes for too long, all three flush with the default fast `LZ4` +compressor and then rely on normal compaction to re-compress the data +into the desired compression strategy. See [.title-ref]#CASSANDRA-15379 +# for more +details. +* The compression path checksums data to ensure correctness - while the +traditional Cassandra read path does not have a way to ensure +correctness of data on disk, compressed tables allow the user to set +`crc_check_chance` (a float from 0.0 to 1.0) to allow Cassandra to +probabilistically validate chunks on read to verify bits on disk are not +corrupt. + +== Advanced Use + +Advanced users can provide their own compression class by implementing +the interface at `org.apache.cassandra.io.compress.ICompressor`. diff --git a/doc/source/modules/cassandra/pages/operating/hardware.adoc b/doc/source/modules/cassandra/pages/operating/hardware.adoc new file mode 100644 index 000000000000..29ef67009404 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/hardware.adoc @@ -0,0 +1,95 @@ += Hardware Choices + +Like most databases, Cassandra throughput improves with more CPU cores, +more RAM, and faster disks. While Cassandra can be made to run on small +servers for testing or development environments (including Raspberry +Pis), a minimal production server requires at least 2 cores, and at +least 8GB of RAM. Typical production servers have 8 or more cores and at +least 32GB of RAM. + +== CPU + +Cassandra is highly concurrent, handling many simultaneous requests +(both read and write) using multiple threads running on as many CPU +cores as possible. The Cassandra write path tends to be heavily +optimized (writing to the commitlog and then inserting the data into the +memtable), so writes, in particular, tend to be CPU bound. Consequently, +adding additional CPU cores often increases throughput of both reads and +writes. + +== Memory + +Cassandra runs within a Java VM, which will pre-allocate a fixed size +heap (java's Xmx system parameter). In addition to the heap, Cassandra +will use significant amounts of RAM offheap for compression metadata, +bloom filters, row, key, and counter caches, and an in process page +cache. Finally, Cassandra will take advantage of the operating system's +page cache, storing recently accessed portions files in RAM for rapid +re-use. + +For optimal performance, operators should benchmark and tune their +clusters based on their individual workload. However, basic guidelines +suggest: + +* ECC RAM should always be used, as Cassandra has few internal +safeguards to protect against bit level corruption +* The Cassandra heap should be no less than 2GB, and no more than 50% of +your system RAM +* Heaps smaller than 12GB should consider ParNew/ConcurrentMarkSweep +garbage collection +* Heaps larger than 12GB should consider G1GC + +== Disks + +Cassandra persists data to disk for two very different purposes. The +first is to the commitlog when a new write is made so that it can be +replayed after a crash or system shutdown. The second is to the data +directory when thresholds are exceeded and memtables are flushed to disk +as SSTables. + +Commitlogs receive every write made to a Cassandra node and have the +potential to block client operations, but they are only ever read on +node start-up. SSTable (data file) writes on the other hand occur +asynchronously, but are read to satisfy client look-ups. SSTables are +also periodically merged and rewritten in a process called compaction. +The data held in the commitlog directory is data that has not been +permanently saved to the SSTable data directories - it will be +periodically purged once it is flushed to the SSTable data files. + +Cassandra performs very well on both spinning hard drives and solid +state disks. In both cases, Cassandra's sorted immutable SSTables allow +for linear reads, few seeks, and few overwrites, maximizing throughput +for HDDs and lifespan of SSDs by avoiding write amplification. However, +when using spinning disks, it's important that the commitlog +(`commitlog_directory`) be on one physical disk (not simply a partition, +but a physical disk), and the data files (`data_file_directories`) be +set to a separate physical disk. By separating the commitlog from the +data directory, writes can benefit from sequential appends to the +commitlog without having to seek around the platter as reads request +data from various SSTables on disk. + +In most cases, Cassandra is designed to provide redundancy via multiple +independent, inexpensive servers. For this reason, using NFS or a SAN +for data directories is an antipattern and should typically be avoided. +Similarly, servers with multiple disks are often better served by using +RAID0 or JBOD than RAID1 or RAID5 - replication provided by Cassandra +obsoletes the need for replication at the disk layer, so it's typically +recommended that operators take advantage of the additional throughput +of RAID0 rather than protecting against failures with RAID1 or RAID5. + +== Common Cloud Choices + +Many large users of Cassandra run in various clouds, including AWS, +Azure, and GCE - Cassandra will happily run in any of these +environments. Users should choose similar hardware to what would be +needed in physical space. In EC2, popular options include: + +* i2 instances, which provide both a high RAM:CPU ratio and local +ephemeral SSDs +* m4.2xlarge / c4.4xlarge instances, which provide modern CPUs, enhanced +networking and work well with EBS GP2 (SSD) storage + +Generally, disk and network performance increases with instance size and +generation, so newer generations of instances and larger instance types +within each family often perform better than their smaller or older +alternatives. diff --git a/doc/source/modules/cassandra/pages/operating/hints.adoc b/doc/source/modules/cassandra/pages/operating/hints.adoc new file mode 100644 index 000000000000..a3c61362ed67 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/hints.adoc @@ -0,0 +1,250 @@ += Hints + +Hinting is a data repair technique applied during write operations. When +replica nodes are unavailable to accept a mutation, either due to +failure or more commonly routine maintenance, coordinators attempting to +write to those replicas store temporary hints on their local filesystem +for later application to the unavailable replica. Hints are an important +way to help reduce the duration of data inconsistency. Coordinators +replay hints quickly after unavailable replica nodes return to the ring. +Hints are best effort, however, and do not guarantee eventual +consistency like `anti-entropy repair +` does. + +Hints are useful because of how Apache Cassandra replicates data to +provide fault tolerance, high availability and durability. Cassandra +`partitions +data across the cluster ` using +consistent hashing, and then replicates keys to multiple nodes along the +hash ring. To guarantee availability, all replicas of a key can accept +mutations without consensus, but this means it is possible for some +replicas to accept a mutation while others do not. When this happens an +inconsistency is introduced. + +Hints are one of the three ways, in addition to read-repair and +full/incremental anti-entropy repair, that Cassandra implements the +eventual consistency guarantee that all updates are eventually received +by all replicas. Hints, like read-repair, are best effort and not an +alternative to performing full repair, but they do help reduce the +duration of inconsistency between replicas in practice. + +== Hinted Handoff + +Hinted handoff is the process by which Cassandra applies hints to +unavailable nodes. + +For example, consider a mutation is to be made at `Consistency Level` +`LOCAL_QUORUM` against a keyspace with `Replication Factor` of `3`. +Normally the client sends the mutation to a single coordinator, who then +sends the mutation to all three replicas, and when two of the three +replicas acknowledge the mutation the coordinator responds successfully +to the client. If a replica node is unavailable, however, the +coordinator stores a hint locally to the filesystem for later +application. New hints will be retained for up to +`max_hint_window_in_ms` of downtime (defaults to `3 hours`). If the +unavailable replica does return to the cluster before the window +expires, the coordinator applies any pending hinted mutations against +the replica to ensure that eventual consistency is maintained. + +image::hints.svg[Hinted Handoff in Action] + +* (`t0`): The write is sent by the client, and the coordinator sends it +to the three replicas. Unfortunately `replica_2` is restarting and +cannot receive the mutation. +* (`t1`): The client receives a quorum acknowledgement from the +coordinator. At this point the client believe the write to be durable +and visible to reads (which it is). +* (`t2`): After the write timeout (default `2s`), the coordinator +decides that `replica_2` is unavailable and stores a hint to its local +disk. +* (`t3`): Later, when `replica_2` starts back up it sends a gossip +message to all nodes, including the coordinator. +* (`t4`): The coordinator replays hints including the missed mutation +against `replica_2`. + +If the node does not return in time, the destination replica will be +permanently out of sync until either read-repair or full/incremental +anti-entropy repair propagates the mutation. + +=== Application of Hints + +Hints are streamed in bulk, a segment at a time, to the target replica +node and the target node replays them locally. After the target node has +replayed a segment it deletes the segment and receives the next segment. +This continues until all hints are drained. + +=== Storage of Hints on Disk + +Hints are stored in flat files in the coordinator node’s +`$CASSANDRA_HOME/data/hints` directory. A hint includes a hint id, the +target replica node on which the mutation is meant to be stored, the +serialized mutation (stored as a blob) that couldn't be delivered to the +replica node, the mutation timestamp, and the Cassandra version used to +serialize the mutation. By default hints are compressed using +`LZ4Compressor`. Multiple hints are appended to the same hints file. + +Since hints contain the original unmodified mutation timestamp, hint +application is idempotent and cannot overwrite a future mutation. + +=== Hints for Timed Out Write Requests + +Hints are also stored for write requests that time out. The +`write_request_timeout_in_ms` setting in `cassandra.yaml` configures the +timeout for write requests. + +[source,none] +---- +write_request_timeout_in_ms: 2000 +---- + +The coordinator waits for the configured amount of time for write +requests to complete, at which point it will time out and generate a +hint for the timed out request. The lowest acceptable value for +`write_request_timeout_in_ms` is 10 ms. + +== Configuring Hints + +Hints are enabled by default as they are critical for data consistency. +The `cassandra.yaml` configuration file provides several settings for +configuring hints: + +Table 1. Settings for Hints + +[width="100%",cols="38%,36%,26%",] +|=== +|Setting |Description |Default Value + +|`hinted_handoff_enabled` |Enables/Disables hinted handoffs |`true` + +|`hinted_handoff_disabled_datacenters` a| +A list of data centers that do not perform hinted handoffs even when +handoff is otherwise enabled. Example: + +a| +[source,yaml] +---- +hinted_handoff_disabled_datacenters: + - DC1 + - DC2 +---- + +|`unset` + +|`max_hint_window_in_ms` |Defines the maximum amount of time (ms) a node +shall have hints generated after it has failed. |`10800000` # 3 hours + +|`hinted_handoff_throttle_in_kb` |Maximum throttle in KBs per second, +per delivery thread. This will be reduced proportionally to the number +of nodes in the cluster. (If there are two nodes in the cluster, each +delivery thread will use the maximum rate; if there are 3, each will +throttle to half of the maximum,since it is expected for two nodes to be +delivering hints simultaneously.) |`1024` + +|`max_hints_delivery_threads` |Number of threads with which to deliver +hints; Consider increasing this number when you have multi-dc +deployments, since cross-dc handoff tends to be slower |`2` + +|`hints_directory` |Directory where Cassandra stores hints. +|`$CASSANDRA_HOME/data/hints` + +|`hints_flush_period_in_ms` |How often hints should be flushed from the +internal buffers to disk. Will _not_ trigger fsync. |`10000` + +|`max_hints_file_size_in_mb` |Maximum size for a single hints file, in +megabytes. |`128` + +|`hints_compression` |Compression to apply to the hint files. If +omitted, hints files will be written uncompressed. LZ4, Snappy, and +Deflate compressors are supported. |`LZ4Compressor` +|=== + +== Configuring Hints at Runtime with `nodetool` + +`nodetool` provides several commands for configuring hints or getting +hints related information. The nodetool commands override the +corresponding settings if any in `cassandra.yaml` for the node running +the command. + +Table 2. Nodetool Commands for Hints + +[width="100%",cols="43%,57%",] +|=== +|Command |Description + +|`nodetool disablehandoff` |Disables storing and delivering hints + +|`nodetool disablehintsfordc` |Disables storing and delivering hints to +a data center + +|`nodetool enablehandoff` |Re-enables future hints storing and delivery +on the current node + +|`nodetool enablehintsfordc` |Enables hints for a data center that was +previously disabled + +|`nodetool getmaxhintwindow` |Prints the max hint window in ms. New in +Cassandra 4.0. + +|`nodetool handoffwindow` |Prints current hinted handoff window + +|`nodetool pausehandoff` |Pauses hints delivery process + +|`nodetool resumehandoff` |Resumes hints delivery process + +|`nodetool sethintedhandoffthrottlekb` |Sets hinted handoff throttle in +kb per second, per delivery thread + +|`nodetool setmaxhintwindow` |Sets the specified max hint window in ms + +|`nodetool statushandoff` |Status of storing future hints on the current +node + +|`nodetool truncatehints` |Truncates all hints on the local node, or +truncates hints for the endpoint(s) specified. +|=== + +=== Make Hints Play Faster at Runtime + +The default of `1024 kbps` handoff throttle is conservative for most +modern networks, and it is entirely possible that in a simple node +restart you may accumulate many gigabytes hints that may take hours to +play back. For example if you are ingesting `100 Mbps` of data per node, +a single 10 minute long restart will create +`10 minutes * (100 megabit / second) ~= 7 GiB` of data which at +`(1024 KiB / second)` would take +`7.5 GiB / (1024 KiB / second) = 2.03 hours` to play back. The exact +math depends on the load balancing strategy (round robin is better than +token aware), number of tokens per node (more tokens is better than +fewer), and naturally the cluster's write rate, but regardless you may +find yourself wanting to increase this throttle at runtime. + +If you find yourself in such a situation, you may consider raising the +`hinted_handoff_throttle` dynamically via the +`nodetool sethintedhandoffthrottlekb` command. + +=== Allow a Node to be Down Longer at Runtime + +Sometimes a node may be down for more than the normal +`max_hint_window_in_ms`, (default of three hours), but the hardware and +data itself will still be accessible. In such a case you may consider +raising the `max_hint_window_in_ms` dynamically via the +`nodetool setmaxhintwindow` command added in Cassandra 4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-11720[CASSANDRA-11720]). +This will instruct Cassandra to continue holding hints for the down +endpoint for a longer amount of time. + +This command should be applied on all nodes in the cluster that may be +holding hints. If needed, the setting can be applied permanently by +setting the `max_hint_window_in_ms` setting in `cassandra.yaml` followed +by a rolling restart. + +== Monitoring Hint Delivery + +Cassandra 4.0 adds histograms available to understand how long it takes +to deliver hints which is useful for operators to better identify +problems +(https://issues.apache.org/jira/browse/CASSANDRA-13234[CASSANDRA-13234]). + +There are also metrics available for tracking +`Hinted Handoff ` and +`Hints Service ` metrics. diff --git a/doc/source/modules/cassandra/pages/operating/index.adoc b/doc/source/modules/cassandra/pages/operating/index.adoc new file mode 100644 index 000000000000..afcbda077432 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/index.adoc @@ -0,0 +1,16 @@ +== Operating Cassandra + +* xref:operating/snitch.adoc[Snitches] +* xref:operating/topo_changes.adoc[Topology changes] +* xref:operating/repair.adoc[Repair] +* xref:operating/read_repair.adoc[Read repair] +* xref:operating/hints.adoc[Hints] +* xref:operating/bloom_filters.adoc[Bloom filters] +* xref:operating/compression.adoc[Compression] +* xref:operating/cdc.adoc[CDC] +* xref:operating/backups.adoc[Backups] +* xref:operating/bulk_loading.adoc[Bulk loading] +* xref:operating/metrics.adoc[Metrics] +* xref:operating/security.adoc[Security] +* xref:operating/hardware.adoc[Hardware] +* xref:operating/compaction/index.adoc[Compaction] diff --git a/doc/source/modules/cassandra/pages/operating/metrics.adoc b/doc/source/modules/cassandra/pages/operating/metrics.adoc new file mode 100644 index 000000000000..1eb8156dc20a --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/metrics.adoc @@ -0,0 +1,1088 @@ += Monitoring + +Metrics in Cassandra are managed using the +http://metrics.dropwizard.io[Dropwizard Metrics] library. These metrics +can be queried via JMX or pushed to external monitoring systems using a +number of +http://metrics.dropwizard.io/3.1.0/getting-started/#other-reporting[built +in] and http://metrics.dropwizard.io/3.1.0/manual/third-party/[third +party] reporter plugins. + +Metrics are collected for a single node. It's up to the operator to use +an external monitoring system to aggregate them. + +== Metric Types + +All metrics reported by cassandra fit into one of the following types. + +`Gauge`:: + An instantaneous measurement of a value. +`Counter`:: + A gauge for an `AtomicLong` instance. Typically this is consumed by + monitoring the change since the last call to see if there is a large + increase compared to the norm. +`Histogram`:: + Measures the statistical distribution of values in a stream of data. + + + In addition to minimum, maximum, mean, etc., it also measures median, + 75th, 90th, 95th, 98th, 99th, and 99.9th percentiles. +`Timer`:: + Measures both the rate that a particular piece of code is called and + the histogram of its duration. +`Latency`:: + Special type that tracks latency (in microseconds) with a `Timer` plus + a `Counter` that tracks the total latency accrued since starting. The + former is useful if you track the change in total latency since the + last check. Each metric name of this type will have 'Latency' and + 'TotalLatency' appended to it. +`Meter`:: + A meter metric which measures mean throughput and one-, five-, and + fifteen-minute exponentially-weighted moving average throughputs. + +== Table Metrics + +Each table in Cassandra has metrics responsible for tracking its state +and performance. + +The metric names are all appended with the specific `Keyspace` and +`Table` name. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.Table...
` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=Table keyspace= scope=
name=` + +[NOTE] +.Note +==== +There is a special table called '`all`' without a keyspace. This +represents the aggregation of metrics across *all* tables and keyspaces +on the node. +====[cols=",,",options="header",] +|=== +|Name |Type |Description +|MemtableOnHeapSize |Gauge |Total amount of data stored in the +memtable that resides *on*-heap, including column related overhead and +partitions overwritten. + +|MemtableOffHeapSize |Gauge |Total amount of data stored in the +memtable that resides *off*-heap, including column related overhead and +partitions overwritten. + +|MemtableLiveDataSize |Gauge |Total amount of live data stored in +the memtable, excluding any data structure overhead. + +|AllMemtablesOnHeapSize |Gauge |Total amount of data stored in the +memtables (2i and pending flush memtables included) that resides +*on*-heap. + +|AllMemtablesOffHeapSize |Gauge |Total amount of data stored in +the memtables (2i and pending flush memtables included) that resides +*off*-heap. + +|AllMemtablesLiveDataSize |Gauge |Total amount of live data stored +in the memtables (2i and pending flush memtables included) that resides +off-heap, excluding any data structure overhead. + +|MemtableColumnsCount |Gauge |Total number of columns present in +the memtable. + +|MemtableSwitchCount |Counter |Number of times flush has resulted in the +memtable being switched out. + +|CompressionRatio |Gauge |Current compression ratio for all +SSTables. + +|EstimatedPartitionSizeHistogram |Gauge |Histogram of estimated +partition size (in bytes). + +|EstimatedPartitionCount |Gauge |Approximate number of keys in +table. + +|EstimatedColumnCountHistogram |Gauge |Histogram of estimated +number of columns. + +|SSTablesPerReadHistogram |Histogram |Histogram of the number of sstable +data files accessed per single partition read. SSTables skipped due to +Bloom Filters, min-max key or partition index lookup are not taken into +acoount. + +|ReadLatency |Latency |Local read latency for this table. + +|RangeLatency |Latency |Local range scan latency for this table. + +|WriteLatency |Latency |Local write latency for this table. + +|CoordinatorReadLatency |Timer |Coordinator read latency for this table. + +|CoordinatorWriteLatency |Timer |Coordinator write latency for this +table. + +|CoordinatorScanLatency |Timer |Coordinator range scan latency for this +table. + +|PendingFlushes |Counter |Estimated number of flush tasks pending for +this table. + +|BytesFlushed |Counter |Total number of bytes flushed since server +[re]start. + +|CompactionBytesWritten |Counter |Total number of bytes written by +compaction since server [re]start. + +|PendingCompactions |Gauge |Estimate of number of pending +compactions for this table. + +|LiveSSTableCount |Gauge |Number of SSTables on disk for this +table. + +|LiveDiskSpaceUsed |Counter |Disk space used by SSTables belonging to +this table (in bytes). + +|TotalDiskSpaceUsed |Counter |Total disk space used by SSTables +belonging to this table, including obsolete ones waiting to be GC'd. + +|MinPartitionSize |Gauge |Size of the smallest compacted partition +(in bytes). + +|MaxPartitionSize |Gauge |Size of the largest compacted partition +(in bytes). + +|MeanPartitionSize |Gauge |Size of the average compacted partition +(in bytes). + +|BloomFilterFalsePositives |Gauge |Number of false positives on +table's bloom filter. + +|BloomFilterFalseRatio |Gauge |False positive ratio of table's +bloom filter. + +|BloomFilterDiskSpaceUsed |Gauge |Disk space used by bloom filter +(in bytes). + +|BloomFilterOffHeapMemoryUsed |Gauge |Off-heap memory used by +bloom filter. + +|IndexSummaryOffHeapMemoryUsed |Gauge |Off-heap memory used by +index summary. + +|CompressionMetadataOffHeapMemoryUsed |Gauge |Off-heap memory used +by compression meta data. + +|KeyCacheHitRate |Gauge |Key cache hit rate for this table. + +|TombstoneScannedHistogram |Histogram |Histogram of tombstones scanned +in queries on this table. + +|LiveScannedHistogram |Histogram |Histogram of live cells scanned in +queries on this table. + +|ColUpdateTimeDeltaHistogram |Histogram |Histogram of column update time +delta on this table. + +|ViewLockAcquireTime |Timer |Time taken acquiring a partition lock for +materialized view updates on this table. + +|ViewReadTime |Timer |Time taken during the local read of a materialized +view update. + +|TrueSnapshotsSize |Gauge |Disk space used by snapshots of this +table including all SSTable components. + +|RowCacheHitOutOfRange |Counter |Number of table row cache hits that do +not satisfy the query filter, thus went to disk. + +|RowCacheHit |Counter |Number of table row cache hits. + +|RowCacheMiss |Counter |Number of table row cache misses. + +|CasPrepare |Latency |Latency of paxos prepare round. + +|CasPropose |Latency |Latency of paxos propose round. + +|CasCommit |Latency |Latency of paxos commit round. + +|PercentRepaired |Gauge |Percent of table data that is repaired +on disk. + +|BytesRepaired |Gauge |Size of table data repaired on disk + +|BytesUnrepaired |Gauge |Size of table data unrepaired on disk + +|BytesPendingRepair |Gauge |Size of table data isolated for an +ongoing incremental repair + +|SpeculativeRetries |Counter |Number of times speculative retries were +sent for this table. + +|SpeculativeFailedRetries |Counter |Number of speculative retries that +failed to prevent a timeout + +|SpeculativeInsufficientReplicas |Counter |Number of speculative retries +that couldn't be attempted due to lack of replicas + +|SpeculativeSampleLatencyNanos |Gauge |Number of nanoseconds to +wait before speculation is attempted. Value may be statically configured +or updated periodically based on coordinator latency. + +|WaitingOnFreeMemtableSpace |Histogram |Histogram of time spent waiting +for free memtable space, either on- or off-heap. + +|DroppedMutations |Counter |Number of dropped mutations on this table. + +|AnticompactionTime |Timer |Time spent anticompacting before a +consistent repair. + +|ValidationTime |Timer |Time spent doing validation compaction during +repair. + +|SyncTime |Timer |Time spent doing streaming during repair. + +|BytesValidated |Histogram |Histogram over the amount of bytes read +during validation. + +|PartitionsValidated |Histogram |Histogram over the number of partitions +read during validation. + +|BytesAnticompacted |Counter |How many bytes we anticompacted. + +|BytesMutatedAnticompaction |Counter |How many bytes we avoided +anticompacting because the sstable was fully contained in the repaired +range. + +|MutatedAnticompactionGauge |Gauge |Ratio of bytes mutated vs +total bytes repaired. +|=== + +== Keyspace Metrics + +Each keyspace in Cassandra has metrics responsible for tracking its +state and performance. + +Most of these metrics are the same as the `Table Metrics` above, only +they are aggregated at the Keyspace level. The keyspace specific metrics +are specified in the table below. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.keyspace..` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=Keyspace scope= name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|WriteFailedIdeaCL |Counter |Number of writes that failed to achieve the +configured ideal consistency level or 0 if none is configured + +|IdealCLWriteLatency |Latency |Coordinator latency of writes at the +configured ideal consistency level. No values are recorded if ideal +consistency level is not configured + +|RepairTime |Timer |Total time spent as repair coordinator. + +|RepairPrepareTime |Timer |Total time spent preparing for repair. +|=== + +== ThreadPool Metrics + +Cassandra splits work of a particular type into its own thread pool. +This provides back-pressure and asynchrony for requests on a node. It's +important to monitor the state of these thread pools since they can tell +you how saturated a node is. + +The metric names are all appended with the specific `ThreadPool` name. +The thread pools are also categorized under a specific type. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.ThreadPools...` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=ThreadPools path= scope= name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|ActiveTasks |Gauge |Number of tasks being actively worked on +by this pool. + +|PendingTasks |Gauge |Number of queued tasks queued up on this +pool. + +|CompletedTasks |Counter |Number of tasks completed. + +|TotalBlockedTasks |Counter |Number of tasks that were blocked due to +queue saturation. + +|CurrentlyBlockedTask |Counter |Number of tasks that are currently +blocked due to queue saturation but on retry will become unblocked. + +|MaxPoolSize |Gauge |The maximum number of threads in this +pool. + +|MaxTasksQueued |Gauge |The maximum number of tasks queued +before a task get blocked. +|=== + +The following thread pools can be monitored. + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|Native-Transport-Requests |transport |Handles client CQL requests + +|CounterMutationStage |request |Responsible for counter writes + +|ViewMutationStage |request |Responsible for materialized view writes + +|MutationStage |request |Responsible for all other writes + +|ReadRepairStage |request |ReadRepair happens on this thread pool + +|ReadStage |request |Local reads run on this thread pool + +|RequestResponseStage |request |Coordinator requests to the cluster run +on this thread pool + +|AntiEntropyStage |internal |Builds merkle tree for repairs + +|CacheCleanupExecutor |internal |Cache maintenance performed on this +thread pool + +|CompactionExecutor |internal |Compactions are run on these threads + +|GossipStage |internal |Handles gossip requests + +|HintsDispatcher |internal |Performs hinted handoff + +|InternalResponseStage |internal |Responsible for intra-cluster +callbacks + +|MemtableFlushWriter |internal |Writes memtables to disk + +|MemtablePostFlush |internal |Cleans up commit log after memtable is +written to disk + +|MemtableReclaimMemory |internal |Memtable recycling + +|MigrationStage |internal |Runs schema migrations + +|MiscStage |internal |Misceleneous tasks run here + +|PendingRangeCalculator |internal |Calculates token range + +|PerDiskMemtableFlushWriter_0 |internal |Responsible for writing a spec +(there is one of these per disk 0-N) + +|Sampler |internal |Responsible for re-sampling the index summaries of +SStables + +|SecondaryIndexManagement |internal |Performs updates to secondary +indexes + +|ValidationExecutor |internal |Performs validation compaction or +scrubbing + +|ViewBuildExecutor |internal |Performs materialized views initial build +|=== + +== Client Request Metrics + +Client requests have their own set of metrics that encapsulate the work +happening at coordinator level. + +Different types of client requests are broken down by `RequestType`. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.ClientRequest..` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=ClientRequest scope= name=` + +RequestType:: + CASRead +Description:: + Metrics related to transactional read requests. +Metrics:: + [cols=",,",options="header",] + |=== + |Name |Type |Description + |Timeouts |Counter |Number of timeouts encountered. + + |Failures |Counter |Number of transaction failures encountered. + + |  |Latency |Transaction read latency. + + |Unavailables |Counter |Number of unavailable exceptions encountered. + + |UnfinishedCommit |Counter |Number of transactions that were committed + on read. + + |ConditionNotMet |Counter |Number of transaction preconditions did not + match current values. + + |ContentionHistogram |Histogram |How many contended reads were + encountered + |=== +RequestType:: + CASWrite +Description:: + Metrics related to transactional write requests. +Metrics:: + [cols=",,",options="header",] + |=== + |Name |Type |Description + |Timeouts |Counter |Number of timeouts encountered. + + |Failures |Counter |Number of transaction failures encountered. + + |  |Latency |Transaction write latency. + + |UnfinishedCommit |Counter |Number of transactions that were committed + on write. + + |ConditionNotMet |Counter |Number of transaction preconditions did not + match current values. + + |ContentionHistogram |Histogram |How many contended writes were + encountered + + |MutationSizeHistogram |Histogram |Total size in bytes of the requests + mutations. + |=== +RequestType:: + Read +Description:: + Metrics related to standard read requests. +Metrics:: + [cols=",,",options="header",] + |=== + |Name |Type |Description + |Timeouts |Counter |Number of timeouts encountered. + |Failures |Counter |Number of read failures encountered. + |  |Latency |Read latency. + |Unavailables |Counter |Number of unavailable exceptions encountered. + |=== +RequestType:: + RangeSlice +Description:: + Metrics related to token range read requests. +Metrics:: + [cols=",,",options="header",] + |=== + |Name |Type |Description + |Timeouts |Counter |Number of timeouts encountered. + |Failures |Counter |Number of range query failures encountered. + |  |Latency |Range query latency. + |Unavailables |Counter |Number of unavailable exceptions encountered. + |=== +RequestType:: + Write +Description:: + Metrics related to regular write requests. +Metrics:: + [cols=",,",options="header",] + |=== + |Name |Type |Description + |Timeouts |Counter |Number of timeouts encountered. + + |Failures |Counter |Number of write failures encountered. + + |  |Latency |Write latency. + + |Unavailables |Counter |Number of unavailable exceptions encountered. + + |MutationSizeHistogram |Histogram |Total size in bytes of the requests + mutations. + |=== +RequestType:: + ViewWrite +Description:: + Metrics related to materialized view write wrtes. +Metrics:: + [cols=",,",] + |=== + |Timeouts |Counter |Number of timeouts encountered. + + |Failures |Counter |Number of transaction failures encountered. + + |Unavailables |Counter |Number of unavailable exceptions encountered. + + |ViewReplicasAttempted |Counter |Total number of attempted view + replica writes. + + |ViewReplicasSuccess |Counter |Total number of succeded view replica + writes. + + |ViewPendingMutations |Gauge |ViewReplicasAttempted - + ViewReplicasSuccess. + + |ViewWriteLatency |Timer |Time between when mutation is applied to + base table and when CL.ONE is achieved on view. + |=== + +== Cache Metrics + +Cassandra caches have metrics to track the effectivness of the caches. +Though the `Table Metrics` might be more useful. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.Cache..` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=Cache scope= name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|Capacity |Gauge |Cache capacity in bytes. +|Entries |Gauge |Total number of cache entries. +|FifteenMinuteCacheHitRate |Gauge |15m cache hit rate. +|FiveMinuteCacheHitRate |Gauge |5m cache hit rate. +|OneMinuteCacheHitRate |Gauge |1m cache hit rate. +|HitRate |Gauge |All time cache hit rate. +|Hits |Meter |Total number of cache hits. +|Misses |Meter |Total number of cache misses. +|MissLatency |Timer |Latency of misses. +|Requests |Gauge |Total number of cache requests. +|Size |Gauge |Total size of occupied cache, in bytes. +|=== + +The following caches are covered: + +[cols=",",options="header",] +|=== +|Name |Description +|CounterCache |Keeps hot counters in memory for performance. +|ChunkCache |In process uncompressed page cache. +|KeyCache |Cache for partition to sstable offsets. +|RowCache |Cache for rows kept in memory. +|=== + +[NOTE] +.Note +==== +Misses and MissLatency are only defined for the ChunkCache +====== CQL Metrics + +Metrics specific to CQL prepared statement caching. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.CQL.` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=CQL name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|PreparedStatementsCount |Gauge |Number of cached prepared +statements. + +|PreparedStatementsEvicted |Counter |Number of prepared statements +evicted from the prepared statement cache + +|PreparedStatementsExecuted |Counter |Number of prepared statements +executed. + +|RegularStatementsExecuted |Counter |Number of *non* prepared statements +executed. + +|PreparedStatementsRatio |Gauge |Percentage of statements that +are prepared vs unprepared. +|=== + +[[dropped-metrics]] +== DroppedMessage Metrics + +Metrics specific to tracking dropped messages for different types of +requests. Dropped writes are stored and retried by `Hinted Handoff` + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.DroppedMessage..` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=DroppedMessage scope= name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|CrossNodeDroppedLatency |Timer |The dropped latency across nodes. +|InternalDroppedLatency |Timer |The dropped latency within node. +|Dropped |Meter |Number of dropped messages. +|=== + +The different types of messages tracked are: + +[cols=",",options="header",] +|=== +|Name |Description +|BATCH_STORE |Batchlog write +|BATCH_REMOVE |Batchlog cleanup (after succesfully applied) +|COUNTER_MUTATION |Counter writes +|HINT |Hint replay +|MUTATION |Regular writes +|READ |Regular reads +|READ_REPAIR |Read repair +|PAGED_SLICE |Paged read +|RANGE_SLICE |Token range read +|REQUEST_RESPONSE |RPC Callbacks +|_TRACE |Tracing writes +|=== + +== Streaming Metrics + +Metrics reported during `Streaming` operations, such as repair, +bootstrap, rebuild. + +These metrics are specific to a peer endpoint, with the source node +being the node you are pulling the metrics from. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.Streaming..` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=Streaming scope= name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|IncomingBytes |Counter |Number of bytes streamed to this node from the +peer. + +|OutgoingBytes |Counter |Number of bytes streamed to the peer endpoint +from this node. +|=== + +== Compaction Metrics + +Metrics specific to `Compaction` work. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.Compaction.` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=Compaction name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|BytesCompacted |Counter |Total number of bytes compacted since server +[re]start. + +|PendingTasks |Gauge |Estimated number of compactions remaining +to perform. + +|CompletedTasks |Gauge |Number of completed compactions since +server [re]start. + +|TotalCompactionsCompleted |Meter |Throughput of completed compactions +since server [re]start. + +|PendingTasksByTableName |Gauge>> +|Estimated number of compactions remaining to perform, grouped by +keyspace and then table name. This info is also kept in `Table Metrics`. +|=== + +== CommitLog Metrics + +Metrics specific to the `CommitLog` + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.CommitLog.` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=CommitLog name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|CompletedTasks |Gauge |Total number of commit log messages +written since [re]start. + +|PendingTasks |Gauge |Number of commit log messages written but +yet to be fsync'd. + +|TotalCommitLogSize |Gauge |Current size, in bytes, used by all +the commit log segments. + +|WaitingOnSegmentAllocation |Timer |Time spent waiting for a +CommitLogSegment to be allocated - under normal conditions this should +be zero. + +|WaitingOnCommit |Timer |The time spent waiting on CL fsync; for +Periodic this is only occurs when the sync is lagging its sync interval. +|=== + +== Storage Metrics + +Metrics specific to the storage engine. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.Storage.` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=Storage name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|Exceptions |Counter |Number of internal exceptions caught. Under normal +exceptions this should be zero. + +|Load |Counter |Size, in bytes, of the on disk data size this node +manages. + +|TotalHints |Counter |Number of hint messages written to this node since +[re]start. Includes one entry for each host to be hinted per hint. + +|TotalHintsInProgress |Counter |Number of hints attemping to be sent +currently. +|=== + +[[handoff-metrics]] +== HintedHandoff Metrics + +Metrics specific to Hinted Handoff. There are also some metrics related +to hints tracked in `Storage Metrics` + +These metrics include the peer endpoint *in the metric name* + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.HintedHandOffManager.` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=HintedHandOffManager name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|Hints_created- a| +____ +Counter +____ + +a| +____ +Number of hints on disk for this peer. +____ + +|Hints_not_stored- a| +____ +Counter +____ + +a| +____ +Number of hints not stored for this peer, due to being down past the +configured hint window. +____ + +|=== + +== HintsService Metrics + +Metrics specific to the Hints delivery service. There are also some +metrics related to hints tracked in `Storage Metrics` + +These metrics include the peer endpoint *in the metric name* + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.HintsService.` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=HintsService name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|HintsSucceeded a| +____ +Meter +____ + +a| +____ +A meter of the hints successfully delivered +____ + +|HintsFailed a| +____ +Meter +____ + +a| +____ +A meter of the hints that failed deliver +____ + +|HintsTimedOut a| +____ +Meter +____ + +a| +____ +A meter of the hints that timed out +____ + +|Hint_delays |Histogram |Histogram of hint delivery delays (in +milliseconds) + +|Hint_delays- |Histogram |Histogram of hint delivery delays (in +milliseconds) per peer +|=== + +== SSTable Index Metrics + +Metrics specific to the SSTable index metadata. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.Index..RowIndexEntry` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=Index scope=RowIndexEntry name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|IndexedEntrySize |Histogram |Histogram of the on-heap size, in bytes, +of the index across all SSTables. + +|IndexInfoCount |Histogram |Histogram of the number of on-heap index +entries managed across all SSTables. + +|IndexInfoGets |Histogram |Histogram of the number index seeks performed +per SSTable. +|=== + +== BufferPool Metrics + +Metrics specific to the internal recycled buffer pool Cassandra manages. +This pool is meant to keep allocations and GC lower by recycling on and +off heap buffers. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.BufferPool.` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=BufferPool name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|Size |Gauge |Size, in bytes, of the managed buffer pool + +|Misses |Meter a| +____ +The rate of misses in the pool. The higher this is the more allocations +incurred. +____ + +|=== + +== Client Metrics + +Metrics specifc to client managment. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.Client.` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=Client name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|connectedNativeClients |Gauge |Number of clients connected to +this nodes native protocol server + +|connections |Gauge> |List of all connections +and their state information + +|connectedNativeClientsByUser |Gauge |Number of +connnective native clients by username +|=== + +== Batch Metrics + +Metrics specifc to batch statements. + +Reported name format: + +*Metric Name*:: + `org.apache.cassandra.metrics.Batch.` +*JMX MBean*:: + `org.apache.cassandra.metrics:type=Batch name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|PartitionsPerCounterBatch |Histogram |Distribution of the number of +partitions processed per counter batch + +|PartitionsPerLoggedBatch |Histogram |Distribution of the number of +partitions processed per logged batch + +|PartitionsPerUnloggedBatch |Histogram |Distribution of the number of +partitions processed per unlogged batch +|=== + +== JVM Metrics + +JVM metrics such as memory and garbage collection statistics can either +be accessed by connecting to the JVM using JMX or can be exported using +link:#metric-reporters[Metric Reporters]. + +=== BufferPool + +*Metric Name*:: + `jvm.buffers..` +*JMX MBean*:: + `java.nio:type=BufferPool name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|Capacity |Gauge |Estimated total capacity of the buffers in this +pool + +|Count |Gauge |Estimated number of buffers in the pool + +|Used |Gauge |Estimated memory that the Java virtual machine is +using for this buffer pool +|=== + +=== FileDescriptorRatio + +*Metric Name*:: + `jvm.fd.` +*JMX MBean*:: + `java.lang:type=OperatingSystem name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|Usage |Ratio |Ratio of used to total file descriptors +|=== + +=== GarbageCollector + +*Metric Name*:: + `jvm.gc..` +*JMX MBean*:: + `java.lang:type=GarbageCollector name=` + +[cols=",,",options="header",] +|=== +|Name |Type |Description +|Count |Gauge |Total number of collections that have occurred + +|Time |Gauge |Approximate accumulated collection elapsed time in +milliseconds +|=== + +=== Memory + +*Metric Name*:: + `jvm.memory..` +*JMX MBean*:: + `java.lang:type=Memory` + +[cols=",,",] +|=== +|Committed |Gauge |Amount of memory in bytes that is committed for +the JVM to use + +|Init |Gauge |Amount of memory in bytes that the JVM initially +requests from the OS + +|Max |Gauge |Maximum amount of memory in bytes that can be used +for memory management + +|Usage |Ratio |Ratio of used to maximum memory + +|Used |Gauge |Amount of used memory in bytes +|=== + +=== MemoryPool + +*Metric Name*:: + `jvm.memory.pools..` +*JMX MBean*:: + `java.lang:type=MemoryPool name=` + +[cols=",,",] +|=== +|Committed |Gauge |Amount of memory in bytes that is committed for +the JVM to use + +|Init |Gauge |Amount of memory in bytes that the JVM initially +requests from the OS + +|Max |Gauge |Maximum amount of memory in bytes that can be used +for memory management + +|Usage |Ratio |Ratio of used to maximum memory + +|Used |Gauge |Amount of used memory in bytes +|=== + +== JMX + +Any JMX based client can access metrics from cassandra. + +If you wish to access JMX metrics over http it's possible to download +http://mx4j.sourceforge.net/[Mx4jTool] and place `mx4j-tools.jar` into +the classpath. On startup you will see in the log: + +[source,none] +---- +HttpAdaptor version 3.0.2 started on port 8081 +---- + +To choose a different port (8081 is the default) or a different listen +address (0.0.0.0 is not the default) edit `conf/cassandra-env.sh` and +uncomment: + +[source,none] +---- +#MX4J_ADDRESS="-Dmx4jaddress=0.0.0.0" + +#MX4J_PORT="-Dmx4jport=8081" +---- + +== Metric Reporters + +As mentioned at the top of this section on monitoring the Cassandra +metrics can be exported to a number of monitoring system a number of +http://metrics.dropwizard.io/3.1.0/getting-started/#other-reporting[built +in] and http://metrics.dropwizard.io/3.1.0/manual/third-party/[third +party] reporter plugins. + +The configuration of these plugins is managed by the +https://github.com/addthis/metrics-reporter-config[metrics reporter +config project]. There is a sample configuration file located at +`conf/metrics-reporter-config-sample.yaml`. + +Once configured, you simply start cassandra with the flag +`-Dcassandra.metricsReporterConfigFile=metrics-reporter-config.yaml`. +The specified .yaml file plus any 3rd party reporter jars must all be in +Cassandra's classpath. diff --git a/doc/source/modules/cassandra/pages/operating/read_repair.adoc b/doc/source/modules/cassandra/pages/operating/read_repair.adoc new file mode 100644 index 000000000000..763a38e30d72 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/read_repair.adoc @@ -0,0 +1,264 @@ += Read repair + +Read Repair is the process of repairing data replicas during a read +request. If all replicas involved in a read request at the given read +consistency level are consistent the data is returned to the client and +no read repair is needed. But if the replicas involved in a read request +at the given consistency level are not consistent a read repair is +performed to make replicas involved in the read request consistent. The +most up-to-date data is returned to the client. The read repair runs in +the foreground and is blocking in that a response is not returned to the +client until the read repair has completed and up-to-date data is +constructed. + +== Expectation of Monotonic Quorum Reads + +Cassandra uses a blocking read repair to ensure the expectation of +"monotonic quorum reads" i.e. that in 2 successive quorum reads, it’s +guaranteed the 2nd one won't get something older than the 1st one, and +this even if a failed quorum write made a write of the most up to date +value only to a minority of replicas. "Quorum" means majority of nodes +among replicas. + +== Table level configuration of monotonic reads + +Cassandra 4.0 adds support for table level configuration of monotonic +reads +(https://issues.apache.org/jira/browse/CASSANDRA-14635[CASSANDRA-14635]). +The `read_repair` table option has been added to table schema, with the +options `blocking` (default), and `none`. + +The `read_repair` option configures the read repair behavior to allow +tuning for various performance and consistency behaviors. Two +consistency properties are affected by read repair behavior. + +* Monotonic Quorum Reads: Provided by `BLOCKING`. Monotonic quorum reads +prevents reads from appearing to go back in time in some circumstances. +When monotonic quorum reads are not provided and a write fails to reach +a quorum of replicas, it may be visible in one read, and then disappear +in a subsequent read. +* Write Atomicity: Provided by `NONE`. Write atomicity prevents reads +from returning partially applied writes. Cassandra attempts to provide +partition level write atomicity, but since only the data covered by a +`SELECT` statement is repaired by a read repair, read repair can break +write atomicity when data is read at a more granular level than it is +written. For example read repair can break write atomicity if you write +multiple rows to a clustered partition in a batch, but then select a +single row by specifying the clustering column in a `SELECT` statement. + +The available read repair settings are: + +=== Blocking + +The default setting. When `read_repair` is set to `BLOCKING`, and a read +repair is started, the read will block on writes sent to other replicas +until the CL is reached by the writes. Provides monotonic quorum reads, +but not partition level write atomicity. + +=== None + +When `read_repair` is set to `NONE`, the coordinator will reconcile any +differences between replicas, but will not attempt to repair them. +Provides partition level write atomicity, but not monotonic quorum +reads. + +An example of using the `NONE` setting for the `read_repair` option is +as follows: + +[source,none] +---- +CREATE TABLE ks.tbl (k INT, c INT, v INT, PRIMARY KEY (k,c)) with read_repair='NONE'"); +---- + +== Read Repair Example + +To illustrate read repair with an example, consider that a client sends +a read request with read consistency level `TWO` to a 5-node cluster as +illustrated in Figure 1. Read consistency level determines how many +replica nodes must return a response before the read request is +considered successful. + +image::Figure_1_read_repair.jpg[image] + +Figure 1. Client sends read request to a 5-node Cluster + +Three nodes host replicas for the requested data as illustrated in +Figure 2. With a read consistency level of `TWO` two replica nodes must +return a response for the read request to be considered successful. If +the node the client sends request to hosts a replica of the data +requested only one other replica node needs to be sent a read request +to. But if the receiving node does not host a replica for the requested +data the node becomes a coordinator node and forwards the read request +to a node that hosts a replica. A direct read request is forwarded to +the fastest node (as determined by dynamic snitch) as shown in Figure 2. +A direct read request is a full read and returns the requested data. + +image::Figure_2_read_repair.jpg[image] + +Figure 2. Direct Read Request sent to Fastest Replica Node + +Next, the coordinator node sends the requisite number of additional +requests to satisfy the consistency level, which is `TWO`. The +coordinator node needs to send one more read request for a total of two. +All read requests additional to the first direct read request are digest +read requests. A digest read request is not a full read and only returns +the hash value of the data. Only a hash value is returned to reduce the +network data traffic. In the example being discussed the coordinator +node sends one digest read request to a node hosting a replica as +illustrated in Figure 3. + +image::Figure_3_read_repair.jpg[image] + +Figure 3. Coordinator Sends a Digest Read Request + +The coordinator node has received a full copy of data from one node and +a hash value for the data from another node. To compare the data +returned a hash value is calculated for the full copy of data. The two +hash values are compared. If the hash values are the same no read repair +is needed and the full copy of requested data is returned to the client. +The coordinator node only performed a total of two replica read request +because the read consistency level is `TWO` in the example. If the +consistency level were higher such as `THREE`, three replica nodes would +need to respond to a read request and only if all digest or hash values +were to match with the hash value of the full copy of data would the +read request be considered successful and the data returned to the +client. + +But, if the hash value/s from the digest read request/s are not the same +as the hash value of the data from the full read request of the first +replica node it implies that an inconsistency in the replicas exists. To +fix the inconsistency a read repair is performed. + +For example, consider that that digest request returns a hash value that +is not the same as the hash value of the data from the direct full read +request. We would need to make the replicas consistent for which the +coordinator node sends a direct (full) read request to the replica node +that it sent a digest read request to earlier as illustrated in Figure +4. + +image::Figure_4_read_repair.jpg[image] + +Figure 4. Coordinator sends Direct Read Request to Replica Node it had +sent Digest Read Request to + +After receiving the data from the second replica node the coordinator +has data from two of the replica nodes. It only needs two replicas as +the read consistency level is `TWO` in the example. Data from the two +replicas is compared and based on the timestamps the most recent replica +is selected. Data may need to be merged to construct an up-to-date copy +of data if one replica has data for only some of the columns. In the +example, if the data from the first direct read request is found to be +outdated and the data from the second full read request to be the latest +read, repair needs to be performed on Replica 2. If a new up-to-date +data is constructed by merging the two replicas a read repair would be +needed on both the replicas involved. For example, a read repair is +performed on Replica 2 as illustrated in Figure 5. + +image::Figure_5_read_repair.jpg[image] + +Figure 5. Coordinator performs Read Repair + +The most up-to-date data is returned to the client as illustrated in +Figure 6. From the three replicas Replica 1 is not even read and thus +not repaired. Replica 2 is repaired. Replica 3 is the most up-to-date +and returned to client. + +image::Figure_6_read_repair.jpg[image] + +Figure 6. Most up-to-date Data returned to Client + +== Read Consistency Level and Read Repair + +The read consistency is most significant in determining if a read repair +needs to be performed. As discussed in Table 1 a read repair is not +needed for all of the consistency levels. + +Table 1. Read Repair based on Read Consistency Level + +[width="93%",cols="35%,65%",] +|=== +|Read Consistency Level |Description + +|ONE |Read repair is not performed as the data from the first direct +read request satisfies the consistency level ONE. No digest read +requests are involved for finding mismatches in data. + +|TWO |Read repair is performed if inconsistencies in data are found as +determined by the direct and digest read requests. + +|THREE |Read repair is performed if inconsistencies in data are found as +determined by the direct and digest read requests. + +|LOCAL_ONE |Read repair is not performed as the data from the direct +read request from the closest replica satisfies the consistency level +LOCAL_ONE.No digest read requests are involved for finding mismatches in +data. + +|LOCAL_QUORUM |Read repair is performed if inconsistencies in data are +found as determined by the direct and digest read requests. + +|QUORUM |Read repair is performed if inconsistencies in data are found +as determined by the direct and digest read requests. +|=== + +If read repair is performed it is made only on the replicas that are not +up-to-date and that are involved in the read request. The number of +replicas involved in a read request would be based on the read +consistency level; in the example it is two. + +== Improved Read Repair Blocking Behavior in Cassandra 4.0 + +Cassandra 4.0 makes two improvements to read repair blocking behavior +(https://issues.apache.org/jira/browse/CASSANDRA-10726[CASSANDRA-10726]). + +[arabic] +. Speculative Retry of Full Data Read Requests. Cassandra 4.0 makes use +of speculative retry in sending read requests (full, not digest) to +replicas if a full data response is not received, whether in the initial +full read request or a full data read request during read repair. With +speculative retry if it looks like a response may not be received from +the initial set of replicas Cassandra sent messages to, to satisfy the +consistency level, it speculatively sends additional read request to +un-contacted replica/s. Cassandra 4.0 will also speculatively send a +repair mutation to a minority of nodes not involved in the read repair +data read / write cycle with the combined contents of all +un-acknowledged mutations if it looks like one may not respond. +Cassandra accepts acks from them in lieu of acks from the initial +mutations sent out, so long as it receives the same number of acks as +repair mutations transmitted. +. Only blocks on Full Data Responses to satisfy the Consistency Level. +Cassandra 4.0 only blocks for what is needed for resolving the digest +mismatch and wait for enough full data responses to meet the consistency +level, no matter whether it’s speculative retry or read repair chance. +As an example, if it looks like Cassandra might not receive full data +requests from everyone in time, it sends additional requests to +additional replicas not contacted in the initial full data read. If the +collection of nodes that end up responding in time end up agreeing on +the data, the response from the disagreeing replica that started the +read repair is not considered, and won't be included in the response to +the client, preserving the expectation of monotonic quorum reads. + +== Diagnostic Events for Read Repairs + +Cassandra 4.0 adds diagnostic events for read repair +(https://issues.apache.org/jira/browse/CASSANDRA-14668[CASSANDRA-14668]) +that can be used for exposing information such as: + +* Contacted endpoints +* Digest responses by endpoint +* Affected partition keys +* Speculated reads / writes +* Update oversized + +== Background Read Repair + +Background read repair, which was configured using `read_repair_chance` +and `dclocal_read_repair_chance` settings in `cassandra.yaml` is removed +Cassandra 4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-13910[CASSANDRA-13910]). + +Read repair is not an alternative for other kind of repairs such as full +repairs or replacing a node that keeps failing. The data returned even +after a read repair has been performed may not be the most up-to-date +data if consistency level is other than one requiring response from all +replicas. diff --git a/doc/source/modules/cassandra/pages/operating/repair.adoc b/doc/source/modules/cassandra/pages/operating/repair.adoc new file mode 100644 index 000000000000..3c6b20d3a995 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/repair.adoc @@ -0,0 +1,222 @@ += Repair + +Cassandra is designed to remain available if one of it's nodes is down +or unreachable. However, when a node is down or unreachable, it needs to +eventually discover the writes it missed. Hints attempt to inform a node +of missed writes, but are a best effort, and aren't guaranteed to inform +a node of 100% of the writes it missed. These inconsistencies can +eventually result in data loss as nodes are replaced or tombstones +expire. + +These inconsistencies are fixed with the repair process. Repair +synchronizes the data between nodes by comparing their respective +datasets for their common token ranges, and streaming the differences +for any out of sync sections between the nodes. It compares the data +with merkle trees, which are a hierarchy of hashes. + +== Incremental and Full Repairs + +There are 2 types of repairs: full repairs, and incremental repairs. +Full repairs operate over all of the data in the token range being +repaired. Incremental repairs only repair data that's been written since +the previous incremental repair. + +Incremental repairs are the default repair type, and if run regularly, +can significantly reduce the time and io cost of performing a repair. +However, it's important to understand that once an incremental repair +marks data as repaired, it won't try to repair it again. This is fine +for syncing up missed writes, but it doesn't protect against things like +disk corruption, data loss by operator error, or bugs in Cassandra. For +this reason, full repairs should still be run occasionally. + +== Usage and Best Practices + +Since repair can result in a lot of disk and network io, it's not run +automatically by Cassandra. It is run by the operator via nodetool. + +Incremental repair is the default and is run with the following command: + +[source,none] +---- +nodetool repair +---- + +A full repair can be run with the following command: + +[source,none] +---- +nodetool repair --full +---- + +Additionally, repair can be run on a single keyspace: + +[source,none] +---- +nodetool repair [options] +---- + +Or even on specific tables: + +[source,none] +---- +nodetool repair [options] +---- + +The repair command only repairs token ranges on the node being repaired, +it doesn't repair the whole cluster. By default, repair will operate on +all token ranges replicated by the node you're running repair on, which +will cause duplicate work if you run it on every node. The `-pr` flag +will only repair the "primary" ranges on a node, so you can repair your +entire cluster by running `nodetool repair -pr` on each node in a single +datacenter. + +The specific frequency of repair that's right for your cluster, of +course, depends on several factors. However, if you're just starting out +and looking for somewhere to start, running an incremental repair every +1-3 days, and a full repair every 1-3 weeks is probably reasonable. If +you don't want to run incremental repairs, a full repair every 5 days is +a good place to start. + +At a minimum, repair should be run often enough that the gc grace period +never expires on unrepaired data. Otherwise, deleted data could +reappear. With a default gc grace period of 10 days, repairing every +node in your cluster at least once every 7 days will prevent this, while +providing enough slack to allow for delays. + +== Other Options + +`-pr, --partitioner-range`:: + Restricts repair to the 'primary' token ranges of the node being + repaired. A primary range is just a token range for which a node is + the first replica in the ring. +`-prv, --preview`:: + Estimates the amount of streaming that would occur for the given + repair command. This builds the merkle trees, and prints the expected + streaming activity, but does not actually do any streaming. By + default, incremental repairs are estimated, add the `--full` flag to + estimate a full repair. +`-vd, --validate`:: + Verifies that the repaired data is the same across all nodes. Similiar + to `--preview`, this builds and compares merkle trees of repaired + data, but doesn't do any streaming. This is useful for + troubleshooting. If this shows that the repaired data is out of sync, + a full repair should be run. + +`nodetool repair docs ` + +== Full Repair Example + +Full repair is typically needed to redistribute data after increasing +the replication factor of a keyspace or after adding a node to the +cluster. Full repair involves streaming SSTables. To demonstrate full +repair start with a three node cluster. + +[source,none] +---- +[ec2-user@ip-10-0-2-238 ~]$ nodetool status +Datacenter: us-east-1 +===================== +Status=Up/Down +|/ State=Normal/Leaving/Joining/Moving +-- Address Load Tokens Owns Host ID Rack +UN 10.0.1.115 547 KiB 256 ? b64cb32a-b32a-46b4-9eeb-e123fa8fc287 us-east-1b +UN 10.0.3.206 617.91 KiB 256 ? 74863177-684b-45f4-99f7-d1006625dc9e us-east-1d +UN 10.0.2.238 670.26 KiB 256 ? 4dcdadd2-41f9-4f34-9892-1f20868b27c7 us-east-1c +---- + +Create a keyspace with replication factor 3: + +[source,none] +---- +cqlsh> DROP KEYSPACE cqlkeyspace; +cqlsh> CREATE KEYSPACE CQLKeyspace + ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; +---- + +Add a table to the keyspace: + +[source,none] +---- +cqlsh> use cqlkeyspace; +cqlsh:cqlkeyspace> CREATE TABLE t ( + ... id int, + ... k int, + ... v text, + ... PRIMARY KEY (id) + ... ); +---- + +Add table data: + +[source,none] +---- +cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); +cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (1, 1, 'val1'); +cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (2, 2, 'val2'); +---- + +A query lists the data added: + +[source,none] +---- +cqlsh:cqlkeyspace> SELECT * FROM t; + +id | k | v +----+---+------ + 1 | 1 | val1 + 0 | 0 | val0 + 2 | 2 | val2 +(3 rows) +---- + +Make the following changes to a three node cluster: + +[arabic] +. Increase the replication factor from 3 to 4. +. Add a 4th node to the cluster + +When the replication factor is increased the following message gets +output indicating that a full repair is needed as per +(https://issues.apache.org/jira/browse/CASSANDRA-13079[CASSANDRA-13079]): + +[source,none] +---- +cqlsh:cqlkeyspace> ALTER KEYSPACE CQLKeyspace + ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4}; +Warnings : +When increasing replication factor you need to run a full (-full) repair to distribute the +data. +---- + +Perform a full repair on the keyspace `cqlkeyspace` table `t` with +following command: + +[source,none] +---- +nodetool repair -full cqlkeyspace t +---- + +Full repair completes in about a second as indicated by the output: + +[source,none] +---- +[ec2-user@ip-10-0-2-238 ~]$ nodetool repair -full cqlkeyspace t +[2019-08-17 03:06:21,445] Starting repair command #1 (fd576da0-c09b-11e9-b00c-1520e8c38f00), repairing keyspace cqlkeyspace with repair options (parallelism: parallel, primary range: false, incremental: false, job threads: 1, ColumnFamilies: [t], dataCenters: [], hosts: [], previewKind: NONE, # of ranges: 1024, pull repair: false, force repair: false, optimise streams: false) +[2019-08-17 03:06:23,059] Repair session fd8e5c20-c09b-11e9-b00c-1520e8c38f00 for range [(-8792657144775336505,-8786320730900698730], (-5454146041421260303,-5439402053041523135], (4288357893651763201,4324309707046452322], ... , (4350676211955643098,4351706629422088296]] finished (progress: 0%) +[2019-08-17 03:06:23,077] Repair completed successfully +[2019-08-17 03:06:23,077] Repair command #1 finished in 1 second +[ec2-user@ip-10-0-2-238 ~]$ +---- + +The `nodetool tpstats` command should list a repair having been +completed as `Repair-Task` > `Completed` column value of 1: + +[source,none] +---- +[ec2-user@ip-10-0-2-238 ~]$ nodetool tpstats +Pool Name Active Pending Completed Blocked All time blocked +ReadStage 0 0 99 0 0 +… +Repair-Task 0 0 1 0 0 +RequestResponseStage 0 0 2078 0 0 +---- diff --git a/doc/source/modules/cassandra/pages/operating/security.adoc b/doc/source/modules/cassandra/pages/operating/security.adoc new file mode 100644 index 000000000000..f8c8b92eefc0 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/security.adoc @@ -0,0 +1,527 @@ += Security + +There are three main components to the security features provided by +Cassandra: + +* TLS/SSL encryption for client and inter-node communication +* Client authentication +* Authorization + +By default, these features are disabled as Cassandra is configured to +easily find and be found by other members of a cluster. In other words, +an out-of-the-box Cassandra installation presents a large attack surface +for a bad actor. Enabling authentication for clients using the binary +protocol is not sufficient to protect a cluster. Malicious users able to +access internode communication and JMX ports can still: + +* Craft internode messages to insert users into authentication schema +* Craft internode messages to truncate or drop schema +* Use tools such as `sstableloader` to overwrite `system_auth` tables +* Attach to the cluster directly to capture write traffic + +Correct configuration of all three security components should negate +theses vectors. Therefore, understanding Cassandra's security features +is crucial to configuring your cluster to meet your security needs. + +== TLS/SSL Encryption + +Cassandra provides secure communication between a client machine and a +database cluster and between nodes within a cluster. Enabling encryption +ensures that data in flight is not compromised and is transferred +securely. The options for client-to-node and node-to-node encryption are +managed separately and may be configured independently. + +In both cases, the JVM defaults for supported protocols and cipher +suites are used when encryption is enabled. These can be overidden using +the settings in `cassandra.yaml`, but this is not recommended unless +there are policies in place which dictate certain settings or a need to +disable vulnerable ciphers or protocols in cases where the JVM cannot be +updated. + +FIPS compliant settings can be configured at the JVM level and should +not involve changing encryption settings in cassandra.yaml. See +https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/FIPS.html[the +java document on FIPS] for more details. + +For information on generating the keystore and truststore files used in +SSL communications, see the +http://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore[java +documentation on creating keystores] + +== SSL Certificate Hot Reloading + +Beginning with Cassandra 4, Cassandra supports hot reloading of SSL +Certificates. If SSL/TLS support is enabled in Cassandra, the node +periodically polls the Trust and Key Stores specified in cassandra.yaml. +When the files are updated, Cassandra will reload them and use them for +subsequent connections. Please note that the Trust & Key Store passwords +are part of the yaml so the updated files should also use the same +passwords. The default polling interval is 10 minutes. + +Certificate Hot reloading may also be triggered using the +`nodetool reloadssl` command. Use this if you want to Cassandra to +immediately notice the changed certificates. + +=== Inter-node Encryption + +The settings for managing inter-node encryption are found in +`cassandra.yaml` in the `server_encryption_options` section. To enable +inter-node encryption, change the `internode_encryption` setting from +its default value of `none` to one value from: `rack`, `dc` or `all`. + +=== Client to Node Encryption + +The settings for managing client to node encryption are found in +`cassandra.yaml` in the `client_encryption_options` section. There are +two primary toggles here for enabling encryption, `enabled` and +`optional`. + +* If neither is set to `true`, client connections are entirely +unencrypted. +* If `enabled` is set to `true` and `optional` is set to `false`, all +client connections must be secured. +* If both options are set to `true`, both encrypted and unencrypted +connections are supported using the same port. Client connections using +encryption with this configuration will be automatically detected and +handled by the server. + +As an alternative to the `optional` setting, separate ports can also be +configured for secure and unsecure connections where operational +requirements demand it. To do so, set `optional` to false and use the +`native_transport_port_ssl` setting in `cassandra.yaml` to specify the +port to be used for secure client communication. + +[[operation-roles]] +== Roles + +Cassandra uses database roles, which may represent either a single user +or a group of users, in both authentication and permissions management. +Role management is an extension point in Cassandra and may be configured +using the `role_manager` setting in `cassandra.yaml`. The default +setting uses `CassandraRoleManager`, an implementation which stores role +information in the tables of the `system_auth` keyspace. + +See also the `CQL documentation on roles `. + +== Authentication + +Authentication is pluggable in Cassandra and is configured using the +`authenticator` setting in `cassandra.yaml`. Cassandra ships with two +options included in the default distribution. + +By default, Cassandra is configured with `AllowAllAuthenticator` which +performs no authentication checks and therefore requires no credentials. +It is used to disable authentication completely. Note that +authentication is a necessary condition of Cassandra's permissions +subsystem, so if authentication is disabled, effectively so are +permissions. + +The default distribution also includes `PasswordAuthenticator`, which +stores encrypted credentials in a system table. This can be used to +enable simple username/password authentication. + +[[password-authentication]] +=== Enabling Password Authentication + +Before enabling client authentication on the cluster, client +applications should be pre-configured with their intended credentials. +When a connection is initiated, the server will only ask for credentials +once authentication is enabled, so setting up the client side config in +advance is safe. In contrast, as soon as a server has authentication +enabled, any connection attempt without proper credentials will be +rejected which may cause availability problems for client applications. +Once clients are setup and ready for authentication to be enabled, +follow this procedure to enable it on the cluster. + +Pick a single node in the cluster on which to perform the initial +configuration. Ideally, no clients should connect to this node during +the setup process, so you may want to remove it from client config, +block it at the network level or possibly add a new temporary node to +the cluster for this purpose. On that node, perform the following steps: + +[arabic] +. Open a `cqlsh` session and change the replication factor of the +`system_auth` keyspace. By default, this keyspace uses +`SimpleReplicationStrategy` and a `replication_factor` of 1. It is +recommended to change this for any non-trivial deployment to ensure that +should nodes become unavailable, login is still possible. Best practice +is to configure a replication factor of 3 to 5 per-DC. + +[source,cql] +---- +ALTER KEYSPACE system_auth WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': 3, 'DC2': 3}; +---- + +[arabic, start=2] +. Edit `cassandra.yaml` to change the `authenticator` option like so: + +[source,yaml] +---- +authenticator: PasswordAuthenticator +---- + +[arabic, start=3] +. Restart the node. +. Open a new `cqlsh` session using the credentials of the default +superuser: + +[source,bash] +---- +$ cqlsh -u cassandra -p cassandra +---- + +[arabic, start=5] +. During login, the credentials for the default superuser are read with +a consistency level of `QUORUM`, whereas those for all other users +(including superusers) are read at `LOCAL_ONE`. In the interests of +performance and availability, as well as security, operators should +create another superuser and disable the default one. This step is +optional, but highly recommended. While logged in as the default +superuser, create another superuser role which can be used to bootstrap +further configuration. + +[source,cql] +---- +# create a new superuser +CREATE ROLE dba WITH SUPERUSER = true AND LOGIN = true AND PASSWORD = 'super'; +---- + +[arabic, start=6] +. Start a new cqlsh session, this time logging in as the new_superuser +and disable the default superuser. + +[source,cql] +---- +ALTER ROLE cassandra WITH SUPERUSER = false AND LOGIN = false; +---- + +[arabic, start=7] +. Finally, set up the roles and credentials for your application users +with `CREATE ROLE ` statements. + +At the end of these steps, the one node is configured to use password +authentication. To roll that out across the cluster, repeat steps 2 and +3 on each node in the cluster. Once all nodes have been restarted, +authentication will be fully enabled throughout the cluster. + +Note that using `PasswordAuthenticator` also requires the use of +`CassandraRoleManager `. + +See also: `setting-credentials-for-internal-authentication`, +`CREATE ROLE `, +`ALTER ROLE `, +`ALTER KEYSPACE ` and `GRANT PERMISSION +`, + +== Authorization + +Authorization is pluggable in Cassandra and is configured using the +`authorizer` setting in `cassandra.yaml`. Cassandra ships with two +options included in the default distribution. + +By default, Cassandra is configured with `AllowAllAuthorizer` which +performs no checking and so effectively grants all permissions to all +roles. This must be used if `AllowAllAuthenticator` is the configured +authenticator. + +The default distribution also includes `CassandraAuthorizer`, which does +implement full permissions management functionality and stores its data +in Cassandra system tables. + +=== Enabling Internal Authorization + +Permissions are modelled as a whitelist, with the default assumption +that a given role has no access to any database resources. The +implication of this is that once authorization is enabled on a node, all +requests will be rejected until the required permissions have been +granted. For this reason, it is strongly recommended to perform the +initial setup on a node which is not processing client requests. + +The following assumes that authentication has already been enabled via +the process outlined in `password-authentication`. Perform these steps +to enable internal authorization across the cluster: + +[arabic] +. On the selected node, edit `cassandra.yaml` to change the `authorizer` +option like so: + +[source,yaml] +---- +authorizer: CassandraAuthorizer +---- + +[arabic, start=2] +. Restart the node. +. Open a new `cqlsh` session using the credentials of a role with +superuser credentials: + +[source,bash] +---- +$ cqlsh -u dba -p super +---- + +[arabic, start=4] +. Configure the appropriate access privileges for your clients using +link:cql.html#grant-permission[GRANT PERMISSION] statements. On the +other nodes, until configuration is updated and the node restarted, this +will have no effect so disruption to clients is avoided. + +[source,cql] +---- +GRANT SELECT ON ks.t1 TO db_user; +---- + +[arabic, start=5] +. Once all the necessary permissions have been granted, repeat steps 1 +and 2 for each node in turn. As each node restarts and clients +reconnect, the enforcement of the granted permissions will begin. + +See also: `GRANT PERMISSION `, +[.title-ref]#GRANT ALL # and `REVOKE PERMISSION +` + +[[auth-caching]] +== Caching + +Enabling authentication and authorization places additional load on the +cluster by frequently reading from the `system_auth` tables. +Furthermore, these reads are in the critical paths of many client +operations, and so has the potential to severely impact quality of +service. To mitigate this, auth data such as credentials, permissions +and role details are cached for a configurable period. The caching can +be configured (and even disabled) from `cassandra.yaml` or using a JMX +client. The JMX interface also supports invalidation of the various +caches, but any changes made via JMX are not persistent and will be +re-read from `cassandra.yaml` when the node is restarted. + +Each cache has 3 options which can be set: + +Validity Period:: + Controls the expiration of cache entries. After this period, entries + are invalidated and removed from the cache. +Refresh Rate:: + Controls the rate at which background reads are performed to pick up + any changes to the underlying data. While these async refreshes are + performed, caches will continue to serve (possibly) stale data. + Typically, this will be set to a shorter time than the validity + period. +Max Entries:: + Controls the upper bound on cache size. + +The naming for these options in `cassandra.yaml` follows the convention: + +* `_validity_in_ms` +* `_update_interval_in_ms` +* `_cache_max_entries` + +Where `` is one of `credentials`, `permissions`, or `roles`. + +As mentioned, these are also exposed via JMX in the mbeans under the +`org.apache.cassandra.auth` domain. + +== JMX access + +Access control for JMX clients is configured separately to that for CQL. +For both authentication and authorization, two providers are available; +the first based on standard JMX security and the second which integrates +more closely with Cassandra's own auth subsystem. + +The default settings for Cassandra make JMX accessible only from +localhost. To enable remote JMX connections, edit `cassandra-env.sh` (or +`cassandra-env.ps1` on Windows) to change the `LOCAL_JMX` setting to +`no`. Under the standard configuration, when remote JMX connections are +enabled, `standard JMX authentication ` is also +switched on. + +Note that by default, local-only connections are not subject to +authentication, but this can be enabled. + +If enabling remote connections, it is recommended to also use +`SSL ` connections. + +Finally, after enabling auth and/or SSL, ensure that tools which use +JMX, such as `nodetool `, are correctly configured and working +as expected. + +=== Standard JMX Auth + +Users permitted to connect to the JMX server are specified in a simple +text file. The location of this file is set in `cassandra-env.sh` by the +line: + +[source,bash] +---- +JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password" +---- + +Edit the password file to add username/password pairs: + +[source,none] +---- +jmx_user jmx_password +---- + +Secure the credentials file so that only the user running the Cassandra +process can read it : + +[source,bash] +---- +$ chown cassandra:cassandra /etc/cassandra/jmxremote.password +$ chmod 400 /etc/cassandra/jmxremote.password +---- + +Optionally, enable access control to limit the scope of what defined +users can do via JMX. Note that this is a fairly blunt instrument in +this context as most operational tools in Cassandra require full +read/write access. To configure a simple access file, uncomment this +line in `cassandra-env.sh`: + +[source,bash] +---- +#JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.access.file=/etc/cassandra/jmxremote.access" +---- + +Then edit the access file to grant your JMX user readwrite permission: + +[source,none] +---- +jmx_user readwrite +---- + +Cassandra must be restarted to pick up the new settings. + +See also : +http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html#gdenv[Using +File-Based Password Authentication In JMX] + +=== Cassandra Integrated Auth + +An alternative to the out-of-the-box JMX auth is to useeCassandra's own +authentication and/or authorization providers for JMX clients. This is +potentially more flexible and secure but it come with one major caveat. +Namely that it is not available until [.title-ref]#after# a node has +joined the ring, because the auth subsystem is not fully configured +until that point However, it is often critical for monitoring purposes +to have JMX access particularly during bootstrap. So it is recommended, +where possible, to use local only JMX auth during bootstrap and then, if +remote connectivity is required, to switch to integrated auth once the +node has joined the ring and initial setup is complete. + +With this option, the same database roles used for CQL authentication +can be used to control access to JMX, so updates can be managed +centrally using just `cqlsh`. Furthermore, fine grained control over +exactly which operations are permitted on particular MBeans can be +acheived via `GRANT PERMISSION `. + +To enable integrated authentication, edit `cassandra-env.sh` to +uncomment these lines: + +[source,bash] +---- +#JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.remote.login.config=CassandraLogin" +#JVM_OPTS="$JVM_OPTS -Djava.security.auth.login.config=$CASSANDRA_HOME/conf/cassandra-jaas.config" +---- + +And disable the JMX standard auth by commenting this line: + +[source,bash] +---- +JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password" +---- + +To enable integrated authorization, uncomment this line: + +[source,bash] +---- +#JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.authorizer=org.apache.cassandra.auth.jmx.AuthorizationProxy" +---- + +Check standard access control is off by ensuring this line is commented +out: + +[source,bash] +---- +#JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.access.file=/etc/cassandra/jmxremote.access" +---- + +With integrated authentication and authorization enabled, operators can +define specific roles and grant them access to the particular JMX +resources that they need. For example, a role with the necessary +permissions to use tools such as jconsole or jmc in read-only mode would +be defined as: + +[source,cql] +---- +CREATE ROLE jmx WITH LOGIN = false; +GRANT SELECT ON ALL MBEANS TO jmx; +GRANT DESCRIBE ON ALL MBEANS TO jmx; +GRANT EXECUTE ON MBEAN 'java.lang:type=Threading' TO jmx; +GRANT EXECUTE ON MBEAN 'com.sun.management:type=HotSpotDiagnostic' TO jmx; + +# Grant the role with necessary permissions to use nodetool commands (including nodetool status) in read-only mode +GRANT EXECUTE ON MBEAN 'org.apache.cassandra.db:type=EndpointSnitchInfo' TO jmx; +GRANT EXECUTE ON MBEAN 'org.apache.cassandra.db:type=StorageService' TO jmx; + +# Grant the jmx role to one with login permissions so that it can access the JMX tooling +CREATE ROLE ks_user WITH PASSWORD = 'password' AND LOGIN = true AND SUPERUSER = false; +GRANT jmx TO ks_user; +---- + +Fine grained access control to individual MBeans is also supported: + +[source,cql] +---- +GRANT EXECUTE ON MBEAN 'org.apache.cassandra.db:type=Tables,keyspace=test_keyspace,table=t1' TO ks_user; +GRANT EXECUTE ON MBEAN 'org.apache.cassandra.db:type=Tables,keyspace=test_keyspace,table=*' TO ks_owner; +---- + +This permits the `ks_user` role to invoke methods on the MBean +representing a single table in `test_keyspace`, while granting the same +permission for all table level MBeans in that keyspace to the `ks_owner` +role. + +Adding/removing roles and granting/revoking of permissions is handled +dynamically once the initial setup is complete, so no further restarts +are required if permissions are altered. + +See also: `Permissions `. + +=== JMX With SSL + +JMX SSL configuration is controlled by a number of system properties, +some of which are optional. To turn on SSL, edit the relevant lines in +`cassandra-env.sh` (or `cassandra-env.ps1` on Windows) to uncomment and +set the values of these properties as required: + +`com.sun.management.jmxremote.ssl`:: + set to true to enable SSL +`com.sun.management.jmxremote.ssl.need.client.auth`:: + set to true to enable validation of client certificates +`com.sun.management.jmxremote.registry.ssl`:: + enables SSL sockets for the RMI registry from which clients obtain the + JMX connector stub +`com.sun.management.jmxremote.ssl.enabled.protocols`:: + by default, the protocols supported by the JVM will be used, override + with a comma-separated list. Note that this is not usually necessary + and using the defaults is the preferred option. +`com.sun.management.jmxremote.ssl.enabled.cipher.suites`:: + by default, the cipher suites supported by the JVM will be used, + override with a comma-separated list. Note that this is not usually + necessary and using the defaults is the preferred option. +`javax.net.ssl.keyStore`:: + set the path on the local filesystem of the keystore containing server + private keys and public certificates +`javax.net.ssl.keyStorePassword`:: + set the password of the keystore file +`javax.net.ssl.trustStore`:: + if validation of client certificates is required, use this property to + specify the path of the truststore containing the public certificates + of trusted clients +`javax.net.ssl.trustStorePassword`:: + set the password of the truststore file + +See also: +http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html#gdemv[Oracle +Java7 Docs], +https://www.lullabot.com/articles/monitor-java-with-jmx[Monitor Java +with JMX] diff --git a/doc/source/modules/cassandra/pages/operating/snitch.adoc b/doc/source/modules/cassandra/pages/operating/snitch.adoc new file mode 100644 index 000000000000..90b32fb2e2ca --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/snitch.adoc @@ -0,0 +1,74 @@ += Snitch + +In cassandra, the snitch has two functions: + +* it teaches Cassandra enough about your network topology to route +requests efficiently. +* it allows Cassandra to spread replicas around your cluster to avoid +correlated failures. It does this by grouping machines into +"datacenters" and "racks." Cassandra will do its best not to have more +than one replica on the same "rack" (which may not actually be a +physical location). + +== Dynamic snitching + +The dynamic snitch monitor read latencies to avoid reading from hosts +that have slowed down. The dynamic snitch is configured with the +following properties on `cassandra.yaml`: + +* `dynamic_snitch`: whether the dynamic snitch should be enabled or +disabled. +* `dynamic_snitch_update_interval_in_ms`: controls how often to perform +the more expensive part of host score calculation. +* `dynamic_snitch_reset_interval_in_ms`: if set greater than zero, this +will allow 'pinning' of replicas to hosts in order to increase cache +capacity. +* `dynamic_snitch_badness_threshold:`: The badness threshold will +control how much worse the pinned host has to be before the dynamic +snitch will prefer other replicas over it. This is expressed as a double +which represents a percentage. Thus, a value of 0.2 means Cassandra +would continue to prefer the static snitch values until the pinned host +was 20% worse than the fastest. + +== Snitch classes + +The `endpoint_snitch` parameter in `cassandra.yaml` should be set to the +class that implements `IEndPointSnitch` which will be wrapped by the +dynamic snitch and decide if two endpoints are in the same data center +or on the same rack. Out of the box, Cassandra provides the snitch +implementations: + +GossipingPropertyFileSnitch:: + This should be your go-to snitch for production use. The rack and + datacenter for the local node are defined in + cassandra-rackdc.properties and propagated to other nodes via gossip. + If `cassandra-topology.properties` exists, it is used as a fallback, + allowing migration from the PropertyFileSnitch. +SimpleSnitch:: + Treats Strategy order as proximity. This can improve cache locality + when disabling read repair. Only appropriate for single-datacenter + deployments. +PropertyFileSnitch:: + Proximity is determined by rack and data center, which are explicitly + configured in `cassandra-topology.properties`. +Ec2Snitch:: + Appropriate for EC2 deployments in a single Region, or in multiple + regions with inter-region VPC enabled (available since the end of + 2017, see + https://aws.amazon.com/about-aws/whats-new/2017/11/announcing-support-for-inter-region-vpc-peering/[AWS + announcement]). Loads Region and Availability Zone information from + the EC2 API. The Region is treated as the datacenter, and the + Availability Zone as the rack. Only private IPs are used, so this will + work across multiple regions only if inter-region VPC is enabled. +Ec2MultiRegionSnitch:: + Uses public IPs as broadcast_address to allow cross-region + connectivity (thus, you should set seed addresses to the public IP as + well). You will need to open the `storage_port` or `ssl_storage_port` + on the public IP firewall (For intra-Region traffic, Cassandra will + switch to the private IP after establishing a connection). +RackInferringSnitch:: + Proximity is determined by rack and data center, which are assumed to + correspond to the 3rd and 2nd octet of each node's IP address, + respectively. Unless this happens to match your deployment + conventions, this is best used as an example of writing a custom + Snitch class and is provided in that spirit. diff --git a/doc/source/modules/cassandra/pages/operating/topo_changes.adoc b/doc/source/modules/cassandra/pages/operating/topo_changes.adoc new file mode 100644 index 000000000000..368056d945e9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/operating/topo_changes.adoc @@ -0,0 +1,133 @@ += Adding, replacing, moving and removing nodes + +== Bootstrap + +Adding new nodes is called "bootstrapping". The `num_tokens` parameter +will define the amount of virtual nodes (tokens) the joining node will +be assigned during bootstrap. The tokens define the sections of the ring +(token ranges) the node will become responsible for. + +=== Token allocation + +With the default token allocation algorithm the new node will pick +`num_tokens` random tokens to become responsible for. Since tokens are +distributed randomly, load distribution improves with a higher amount of +virtual nodes, but it also increases token management overhead. The +default of 256 virtual nodes should provide a reasonable load balance +with acceptable overhead. + +On 3.0+ a new token allocation algorithm was introduced to allocate +tokens based on the load of existing virtual nodes for a given keyspace, +and thus yield an improved load distribution with a lower number of +tokens. To use this approach, the new node must be started with the JVM +option `-Dcassandra.allocate_tokens_for_keyspace=`, where +`` is the keyspace from which the algorithm can find the load +information to optimize token assignment for. + +==== Manual token assignment + +You may specify a comma-separated list of tokens manually with the +`initial_token` `cassandra.yaml` parameter, and if that is specified +Cassandra will skip the token allocation process. This may be useful +when doing token assignment with an external tool or when restoring a +node with its previous tokens. + +=== Range streaming + +After the tokens are allocated, the joining node will pick current +replicas of the token ranges it will become responsible for to stream +data from. By default it will stream from the primary replica of each +token range in order to guarantee data in the new node will be +consistent with the current state. + +In the case of any unavailable replica, the consistent bootstrap process +will fail. To override this behavior and potentially miss data from an +unavailable replica, set the JVM flag +`-Dcassandra.consistent.rangemovement=false`. + +=== Resuming failed/hanged bootstrap + +On 2.2+, if the bootstrap process fails, it's possible to resume +bootstrap from the previous saved state by calling +`nodetool bootstrap resume`. If for some reason the bootstrap hangs or +stalls, it may also be resumed by simply restarting the node. In order +to cleanup bootstrap state and start fresh, you may set the JVM startup +flag `-Dcassandra.reset_bootstrap_progress=true`. + +On lower versions, when the bootstrap proces fails it is recommended to +wipe the node (remove all the data), and restart the bootstrap process +again. + +=== Manual bootstrapping + +It's possible to skip the bootstrapping process entirely and join the +ring straight away by setting the hidden parameter +`auto_bootstrap: false`. This may be useful when restoring a node from a +backup or creating a new data-center. + +== Removing nodes + +You can take a node out of the cluster with `nodetool decommission` to a +live node, or `nodetool removenode` (to any other machine) to remove a +dead one. This will assign the ranges the old node was responsible for +to other nodes, and replicate the appropriate data there. If +decommission is used, the data will stream from the decommissioned node. +If removenode is used, the data will stream from the remaining replicas. + +No data is removed automatically from the node being decommissioned, so +if you want to put the node back into service at a different token on +the ring, it should be removed manually. + +== Moving nodes + +When `num_tokens: 1` it's possible to move the node position in the ring +with `nodetool move`. Moving is both a convenience over and more +efficient than decommission + bootstrap. After moving a node, +`nodetool cleanup` should be run to remove any unnecessary data. + +== Replacing a dead node + +In order to replace a dead node, start cassandra with the JVM startup +flag `-Dcassandra.replace_address_first_boot=`. Once this +property is enabled the node starts in a hibernate state, during which +all the other nodes will see this node to be DOWN (DN), however this +node will see itself as UP (UN). Accurate replacement state can be found +in `nodetool netstats`. + +The replacing node will now start to bootstrap the data from the rest of +the nodes in the cluster. A replacing node will only receive writes +during the bootstrapping phase if it has a different ip address to the +node that is being replaced. (See CASSANDRA-8523 and CASSANDRA-12344) + +Once the bootstrapping is complete the node will be marked "UP". + +[NOTE] +.Note +==== +If any of the following cases apply, you *MUST* run repair to make the +replaced node consistent again, since it missed ongoing writes +during/prior to bootstrapping. The _replacement_ timeframe refers to the +period from when the node initially dies to when a new node completes +the replacement process. + +[arabic] +. The node is down for longer than `max_hint_window_in_ms` before being +replaced. +. You are replacing using the same IP address as the dead node *and* +replacement takes longer than `max_hint_window_in_ms`. +==== + +== Monitoring progress + +Bootstrap, replace, move and remove progress can be monitored using +`nodetool netstats` which will show the progress of the streaming +operations. + +== Cleanup data after range movements + +As a safety measure, Cassandra does not automatically remove data from +nodes that "lose" part of their token range due to a range movement +operation (bootstrap, move, replace). Run `nodetool cleanup` on the +nodes that lost ranges to the joining node when you are satisfied the +new node is up and working. If you do not do this the old data will +still be counted against the load on that node. diff --git a/doc/source/modules/cassandra/pages/plugins/index.adoc b/doc/source/modules/cassandra/pages/plugins/index.adoc new file mode 100644 index 000000000000..dbb048af3dd9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/plugins/index.adoc @@ -0,0 +1,36 @@ += Third-Party Plugins + +Available third-party plugins for Apache Cassandra + +== CAPI-Rowcache + +The Coherent Accelerator Process Interface (CAPI) is a general term for +the infrastructure of attaching a Coherent accelerator to an IBM POWER +system. A key innovation in IBM POWER8’s open architecture is the CAPI. +It provides a high bandwidth, low latency path between external devices, +the POWER8 core, and the system’s open memory architecture. IBM Data +Engine for NoSQL is an integrated platform for large and fast growing +NoSQL data stores. It builds on the CAPI capability of POWER8 systems +and provides super-fast access to large flash storage capacity and +addresses the challenges associated with typical x86 server based +scale-out deployments. + +The official page for the +https://github.com/ppc64le/capi-rowcache[CAPI-Rowcache plugin] contains +further details how to build/run/download the plugin. + +== Stratio’s Cassandra Lucene Index + +Stratio’s Lucene index is a Cassandra secondary index implementation +based on http://lucene.apache.org/[Apache Lucene]. It extends +Cassandra’s functionality to provide near real-time distributed search +engine capabilities such as with ElasticSearch or +http://lucene.apache.org/solr/[Apache Solr], including full text search +capabilities, free multivariable, geospatial and bitemporal search, +relevance queries and sorting based on column value, relevance or +distance. Each node indexes its own data, so high availability and +scalability is guaranteed. + +The official Github repository +http://www.github.com/stratio/cassandra-lucene-index[Cassandra Lucene +Index] contains everything you need to build/run/configure the plugin. diff --git a/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc b/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc new file mode 100644 index 000000000000..e1544f1d6731 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc @@ -0,0 +1,324 @@ += Cassandra Stress + +cassandra-stress is a tool for benchmarking and load testing a Cassandra +cluster. cassandra-stress supports testing arbitrary CQL tables and +queries to allow users to benchmark their data model. + +This documentation focuses on user mode as this allows the testing of +your actual schema. + +== Usage + +There are several operation types: + +____ +* write-only, read-only, and mixed workloads of standard data +* write-only and read-only workloads for counter columns +* user configured workloads, running custom queries on custom schemas +____ + +The syntax is [.title-ref]#cassandra-stress [options]#. If you +want more information on a given command or options, just run +[.title-ref]#cassandra-stress help #. + +Commands::: + read:;; + Multiple concurrent reads - the cluster must first be populated by a + write test + write:;; + Multiple concurrent writes against the cluster + mixed:;; + Interleaving of any basic commands, with configurable ratio and + distribution - the cluster must first be populated by a write test + counter_write:;; + Multiple concurrent updates of counters. + counter_read:;; + Multiple concurrent reads of counters. The cluster must first be + populated by a counterwrite test. + user:;; + Interleaving of user provided queries, with configurable ratio and + distribution. + help:;; + Print help for a command or option + print:;; + Inspect the output of a distribution definition + legacy:;; + Legacy support mode +Primary Options::: + -pop:;; + Population distribution and intra-partition visit order + -insert:;; + Insert specific options relating to various methods for batching and + splitting partition updates + -col:;; + Column details such as size and count distribution, data generator, + names, comparator and if super columns should be used + -rate:;; + Thread count, rate limit or automatic mode (default is auto) + -mode:;; + Thrift or CQL with options + -errors:;; + How to handle errors when encountered during stress + -sample:;; + Specify the number of samples to collect for measuring latency + -schema:;; + Replication settings, compression, compaction, etc. + -node:;; + Nodes to connect to + -log:;; + Where to log progress to, and the interval at which to do it + -transport:;; + Custom transport factories + -port:;; + The port to connect to cassandra nodes on + -sendto:;; + Specify a stress server to send this command to + -graph:;; + Graph recorded metrics + -tokenrange:;; + Token range settings +Suboptions::: + Every command and primary option has its own collection of suboptions. + These are too numerous to list here. For information on the suboptions + for each command or option, please use the help command, + [.title-ref]#cassandra-stress help #. + +== User mode + +User mode allows you to use your stress your own schemas. This can save +time in the long run rather than building an application and then +realising your schema doesn't scale. + +=== Profile + +User mode requires a profile defined in YAML. Multiple YAML files may be +specified in which case operations in the ops argument are referenced as +specname.opname. + +An identifier for the profile: + +[source,yaml] +---- +specname: staff_activities +---- + +The keyspace for the test: + +[source,yaml] +---- +keyspace: staff +---- + +CQL for the keyspace. Optional if the keyspace already exists: + +[source,yaml] +---- +keyspace_definition: | + CREATE KEYSPACE stresscql WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3}; +---- + +The table to be stressed: + +[source,yaml] +---- +table: staff_activities +---- + +CQL for the table. Optional if the table already exists: + +[source,yaml] +---- +table_definition: | + CREATE TABLE staff_activities ( + name text, + when timeuuid, + what text, + PRIMARY KEY(name, when, what) + ) +---- + +Optional meta information on the generated columns in the above table. +The min and max only apply to text and blob types. The distribution +field represents the total unique population distribution of that column +across rows: + +[source,yaml] +---- +columnspec: + - name: name + size: uniform(5..10) # The names of the staff members are between 5-10 characters + population: uniform(1..10) # 10 possible staff members to pick from + - name: when + cluster: uniform(20..500) # Staff members do between 20 and 500 events + - name: what + size: normal(10..100,50) +---- + +Supported types are: + +An exponential distribution over the range [min..max]: + +[source,yaml] +---- +EXP(min..max) +---- + +An extreme value (Weibull) distribution over the range [min..max]: + +[source,yaml] +---- +EXTREME(min..max,shape) +---- + +A gaussian/normal distribution, where mean=(min+max)/2, and stdev is +(mean-min)/stdvrng: + +[source,yaml] +---- +GAUSSIAN(min..max,stdvrng) +---- + +A gaussian/normal distribution, with explicitly defined mean and stdev: + +[source,yaml] +---- +GAUSSIAN(min..max,mean,stdev) +---- + +A uniform distribution over the range [min, max]: + +[source,yaml] +---- +UNIFORM(min..max) +---- + +A fixed distribution, always returning the same value: + +[source,yaml] +---- +FIXED(val) +---- + +If preceded by ~, the distribution is inverted + +Defaults for all columns are size: uniform(4..8), population: +uniform(1..100B), cluster: fixed(1) + +Insert distributions: + +[source,yaml] +---- +insert: + # How many partition to insert per batch + partitions: fixed(1) + # How many rows to update per partition + select: fixed(1)/500 + # UNLOGGED or LOGGED batch for insert + batchtype: UNLOGGED +---- + +Currently all inserts are done inside batches. + +Read statements to use during the test: + +[source,yaml] +---- +queries: + events: + cql: select * from staff_activities where name = ? + fields: samerow + latest_event: + cql: select * from staff_activities where name = ? LIMIT 1 + fields: samerow +---- + +Running a user mode test: + +[source,yaml] +---- +cassandra-stress user profile=./example.yaml duration=1m "ops(insert=1,latest_event=1,events=1)" truncate=once +---- + +This will create the schema then run tests for 1 minute with an equal +number of inserts, latest_event queries and events queries. Additionally +the table will be truncated once before the test. + +The full example can be found here `yaml <./stress-example.yaml>` + +Running a user mode test with multiple yaml files:::: + cassandra-stress user profile=./example.yaml,./example2.yaml + duration=1m "ops(ex1.insert=1,ex1.latest_event=1,ex2.insert=2)" + truncate=once +This will run operations as specified in both the example.yaml and +example2.yaml files. example.yaml and example2.yaml can reference the +same table:: + although care must be taken that the table definition is identical + (data generation specs can be different). + +=== Lightweight transaction support + +cassandra-stress supports lightweight transactions. In this it will +first read current data from Cassandra and then uses read value(s) to +fulfill lightweight transaction condition(s). + +Lightweight transaction update query: + +[source,yaml] +---- +queries: + regularupdate: + cql: update blogposts set author = ? where domain = ? and published_date = ? + fields: samerow + updatewithlwt: + cql: update blogposts set author = ? where domain = ? and published_date = ? IF body = ? AND url = ? + fields: samerow +---- + +The full example can be found here `yaml <./stress-lwt-example.yaml>` + +== Graphing + +Graphs can be generated for each run of stress. + +image::example-stress-graph.png[image] + +To create a new graph: + +[source,yaml] +---- +cassandra-stress user profile=./stress-example.yaml "ops(insert=1,latest_event=1,events=1)" -graph file=graph.html title="Awesome graph" +---- + +To add a new run to an existing graph point to an existing file and add +a revision name: + +[source,yaml] +---- +cassandra-stress user profile=./stress-example.yaml duration=1m "ops(insert=1,latest_event=1,events=1)" -graph file=graph.html title="Awesome graph" revision="Second run" +---- + +== FAQ + +*How do you use NetworkTopologyStrategy for the keyspace?* + +Use the schema option making sure to either escape the parenthesis or +enclose in quotes: + +[source,yaml] +---- +cassandra-stress write -schema "replication(strategy=NetworkTopologyStrategy,datacenter1=3)" +---- + +*How do you use SSL?* + +Use the transport option: + +[source,yaml] +---- +cassandra-stress "write n=100k cl=ONE no-warmup" -transport "truststore=$HOME/jks/truststore.jks truststore-password=cassandra" +---- + +*Is Cassandra Stress a secured tool?* + +Cassandra stress is not a secured tool. Serialization and other aspects +of the tool offer no security guarantees. diff --git a/doc/source/modules/cassandra/pages/tools/cqlsh.adoc b/doc/source/modules/cassandra/pages/tools/cqlsh.adoc new file mode 100644 index 000000000000..7ff9bce0ea2b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/cqlsh.adoc @@ -0,0 +1,483 @@ += cqlsh: the CQL shell + +cqlsh is a command line shell for interacting with Cassandra through CQL +(the Cassandra Query Language). It is shipped with every Cassandra +package, and can be found in the bin/ directory alongside the cassandra +executable. cqlsh utilizes the Python native protocol driver, and +connects to the single node specified on the command line. + +== Compatibility + +cqlsh is compatible with Python 2.7. + +In general, a given version of cqlsh is only guaranteed to work with the +version of Cassandra that it was released with. In some cases, cqlsh +make work with older or newer versions of Cassandra, but this is not +officially supported. + +== Optional Dependencies + +cqlsh ships with all essential dependencies. However, there are some +optional dependencies that can be installed to improve the capabilities +of cqlsh. + +=== pytz + +By default, cqlsh displays all timestamps with a UTC timezone. To +support display of timestamps with another timezone, the +http://pytz.sourceforge.net/[pytz] library must be installed. See the +`timezone` option in link:#cqlshrc[cqlshrc] for specifying a timezone to +use. + +=== cython + +The performance of cqlsh's `COPY` operations can be improved by +installing http://cython.org/[cython]. This will compile the python +modules that are central to the performance of `COPY`. + +== cqlshrc + +The `cqlshrc` file holds configuration options for cqlsh. By default +this is in the user's home directory at `~/.cassandra/cqlsh`, but a +custom location can be specified with the `--cqlshrc` option. + +Example config values and documentation can be found in the +`conf/cqlshrc.sample` file of a tarball installation. You can also view +the latest version of +https://github.com/apache/cassandra/blob/trunk/conf/cqlshrc.sample[cqlshrc +online]. + +== Command Line Options + +Usage: + +`cqlsh [options] [host [port]]` + +Options: + +`-C` `--color`:: + Force color output +`--no-color`:: + Disable color output +`--browser`:: + Specify the browser to use for displaying cqlsh help. This can be one + of the https://docs.python.org/2/library/webbrowser.html[supported + browser names] (e.g. `firefox`) or a browser path followed by `%s` + (e.g. `/usr/bin/google-chrome-stable %s`). +`--ssl`:: + Use SSL when connecting to Cassandra +`-u` `--user`:: + Username to authenticate against Cassandra with +`-p` `--password`:: + Password to authenticate against Cassandra with, should be used in + conjunction with `--user` +`-k` `--keyspace`:: + Keyspace to authenticate to, should be used in conjunction with + `--user` +`-f` `--file`:: + Execute commands from the given file, then exit +`--debug`:: + Print additional debugging information +`--encoding`:: + Specify a non-default encoding for output (defaults to UTF-8) +`--cqlshrc`:: + Specify a non-default location for the `cqlshrc` file +`-e` `--execute`:: + Execute the given statement, then exit +`--connect-timeout`:: + Specify the connection timeout in seconds (defaults to 2s) +`--python /path/to/python`:: + Specify the full path to Python interpreter to override default on + systems with multiple interpreters installed +`--request-timeout`:: + Specify the request timeout in seconds (defaults to 10s) +`-t` `--tty`:: + Force tty mode (command prompt) + +== Special Commands + +In addition to supporting regular CQL statements, cqlsh also supports a +number of special commands that are not part of CQL. These are detailed +below. + +=== `CONSISTENCY` + +`Usage`: `CONSISTENCY ` + +Sets the consistency level for operations to follow. Valid arguments +include: + +* `ANY` +* `ONE` +* `TWO` +* `THREE` +* `QUORUM` +* `ALL` +* `LOCAL_QUORUM` +* `LOCAL_ONE` +* `SERIAL` +* `LOCAL_SERIAL` + +=== `SERIAL CONSISTENCY` + +`Usage`: `SERIAL CONSISTENCY ` + +Sets the serial consistency level for operations to follow. Valid +arguments include: + +* `SERIAL` +* `LOCAL_SERIAL` + +The serial consistency level is only used by conditional updates +(`INSERT`, `UPDATE` and `DELETE` with an `IF` condition). For those, the +serial consistency level defines the consistency level of the serial +phase (or “paxos” phase) while the normal consistency level defines the +consistency for the “learn” phase, i.e. what type of reads will be +guaranteed to see the update right away. For example, if a conditional +write has a consistency level of `QUORUM` (and is successful), then a +`QUORUM` read is guaranteed to see that write. But if the regular +consistency level of that write is `ANY`, then only a read with a +consistency level of `SERIAL` is guaranteed to see it (even a read with +consistency `ALL` is not guaranteed to be enough). + +=== `SHOW VERSION` + +Prints the cqlsh, Cassandra, CQL, and native protocol versions in use. +Example: + +[source,none] +---- +cqlsh> SHOW VERSION +[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4] +---- + +=== `SHOW HOST` + +Prints the IP address and port of the Cassandra node that cqlsh is +connected to in addition to the cluster name. Example: + +[source,none] +---- +cqlsh> SHOW HOST +Connected to Prod_Cluster at 192.0.0.1:9042. +---- + +=== `SHOW SESSION` + +Pretty prints a specific tracing session. + +`Usage`: `SHOW SESSION ` + +Example usage: + +[source,none] +---- +cqlsh> SHOW SESSION 95ac6470-327e-11e6-beca-dfb660d92ad8 + +Tracing session: 95ac6470-327e-11e6-beca-dfb660d92ad8 + + activity | timestamp | source | source_elapsed | client +-----------------------------------------------------------+----------------------------+-----------+----------------+----------- + Execute CQL3 query | 2016-06-14 17:23:13.979000 | 127.0.0.1 | 0 | 127.0.0.1 + Parsing SELECT * FROM system.local; [SharedPool-Worker-1] | 2016-06-14 17:23:13.982000 | 127.0.0.1 | 3843 | 127.0.0.1 +... +---- + +=== `SOURCE` + +Reads the contents of a file and executes each line as a CQL statement +or special cqlsh command. + +`Usage`: `SOURCE ` + +Example usage: + +[source,none] +---- +cqlsh> SOURCE '/home/thobbs/commands.cql' +---- + +=== `CAPTURE` + +Begins capturing command output and appending it to a specified file. +Output will not be shown at the console while it is captured. + +`Usage`: + +[source,none] +---- +CAPTURE ''; +CAPTURE OFF; +CAPTURE; +---- + +That is, the path to the file to be appended to must be given inside a +string literal. The path is interpreted relative to the current working +directory. The tilde shorthand notation (`'~/mydir'`) is supported for +referring to `$HOME`. + +Only query result output is captured. Errors and output from cqlsh-only +commands will still be shown in the cqlsh session. + +To stop capturing output and show it in the cqlsh session again, use +`CAPTURE OFF`. + +To inspect the current capture configuration, use `CAPTURE` with no +arguments. + +=== `HELP` + +Gives information about cqlsh commands. To see available topics, enter +`HELP` without any arguments. To see help on a topic, use +`HELP `. Also see the `--browser` argument for controlling what +browser is used to display help. + +=== `TRACING` + +Enables or disables tracing for queries. When tracing is enabled, once a +query completes, a trace of the events during the query will be printed. + +`Usage`: + +[source,none] +---- +TRACING ON +TRACING OFF +---- + +=== `PAGING` + +Enables paging, disables paging, or sets the page size for read queries. +When paging is enabled, only one page of data will be fetched at a time +and a prompt will appear to fetch the next page. Generally, it's a good +idea to leave paging enabled in an interactive session to avoid fetching +and printing large amounts of data at once. + +`Usage`: + +[source,none] +---- +PAGING ON +PAGING OFF +PAGING +---- + +=== `EXPAND` + +Enables or disables vertical printing of rows. Enabling `EXPAND` is +useful when many columns are fetched, or the contents of a single column +are large. + +`Usage`: + +[source,none] +---- +EXPAND ON +EXPAND OFF +---- + +=== `LOGIN` + +Authenticate as a specified Cassandra user for the current session. + +`Usage`: + +[source,none] +---- +LOGIN [] +---- + +=== `EXIT` + +Ends the current session and terminates the cqlsh process. + +`Usage`: + +[source,none] +---- +EXIT +QUIT +---- + +=== `CLEAR` + +Clears the console. + +`Usage`: + +[source,none] +---- +CLEAR +CLS +---- + +=== `DESCRIBE` + +Prints a description (typically a series of DDL statements) of a schema +element or the cluster. This is useful for dumping all or portions of +the schema. + +`Usage`: + +[source,none] +---- +DESCRIBE CLUSTER +DESCRIBE SCHEMA +DESCRIBE KEYSPACES +DESCRIBE KEYSPACE +DESCRIBE TABLES +DESCRIBE TABLE
+DESCRIBE INDEX +DESCRIBE MATERIALIZED VIEW +DESCRIBE TYPES +DESCRIBE TYPE +DESCRIBE FUNCTIONS +DESCRIBE FUNCTION +DESCRIBE AGGREGATES +DESCRIBE AGGREGATE +---- + +In any of the commands, `DESC` may be used in place of `DESCRIBE`. + +The `DESCRIBE CLUSTER` command prints the cluster name and partitioner: + +[source,none] +---- +cqlsh> DESCRIBE CLUSTER + +Cluster: Test Cluster +Partitioner: Murmur3Partitioner +---- + +The `DESCRIBE SCHEMA` command prints the DDL statements needed to +recreate the entire schema. This is especially useful for dumping the +schema in order to clone a cluster or restore from a backup. + +=== `COPY TO` + +Copies data from a table to a CSV file. + +`Usage`: + +[source,none] +---- +COPY
[(, ...)] TO WITH [AND ...] +---- + +If no columns are specified, all columns from the table will be copied +to the CSV file. A subset of columns to copy may be specified by adding +a comma-separated list of column names surrounded by parenthesis after +the table name. + +The `` should be a string literal (with single quotes) +representing a path to the destination file. This can also the special +value `STDOUT` (without single quotes) to print the CSV to stdout. + +See `shared-copy-options` for options that apply to both `COPY TO` and +`COPY FROM`. + +==== Options for `COPY TO` + +`MAXREQUESTS`:: + The maximum number token ranges to fetch simultaneously. Defaults to + 6. +`PAGESIZE`:: + The number of rows to fetch in a single page. Defaults to 1000. +`PAGETIMEOUT`:: + By default the page timeout is 10 seconds per 1000 entries in the page + size or 10 seconds if pagesize is smaller. +`BEGINTOKEN`, `ENDTOKEN`:: + Token range to export. Defaults to exporting the full ring. +`MAXOUTPUTSIZE`:: + The maximum size of the output file measured in number of lines; + beyond this maximum the output file will be split into segments. -1 + means unlimited, and is the default. +`ENCODING`:: + The encoding used for characters. Defaults to `utf8`. + +=== `COPY FROM` + +Copies data from a CSV file to table. + +`Usage`: + +[source,none] +---- +COPY
[(, ...)] FROM WITH [AND ...] +---- + +If no columns are specified, all columns from the CSV file will be +copied to the table. A subset of columns to copy may be specified by +adding a comma-separated list of column names surrounded by parenthesis +after the table name. + +The `` should be a string literal (with single quotes) +representing a path to the source file. This can also the special value +`STDIN` (without single quotes) to read the CSV data from stdin. + +See `shared-copy-options` for options that apply to both `COPY TO` and +`COPY FROM`. + +==== Options for `COPY TO` + +`INGESTRATE`:: + The maximum number of rows to process per second. Defaults to 100000. +`MAXROWS`:: + The maximum number of rows to import. -1 means unlimited, and is the + default. +`SKIPROWS`:: + A number of initial rows to skip. Defaults to 0. +`SKIPCOLS`:: + A comma-separated list of column names to ignore. By default, no + columns are skipped. +`MAXPARSEERRORS`:: + The maximum global number of parsing errors to ignore. -1 means + unlimited, and is the default. +`MAXINSERTERRORS`:: + The maximum global number of insert errors to ignore. -1 means + unlimited. The default is 1000. +`ERRFILE` =:: + A file to store all rows that could not be imported, by default this + is `import__
.err` where `` is your keyspace and + `
` is your table name. +`MAXBATCHSIZE`:: + The max number of rows inserted in a single batch. Defaults to 20. +`MINBATCHSIZE`:: + The min number of rows inserted in a single batch. Defaults to 2. +`CHUNKSIZE`:: + The number of rows that are passed to child worker processes from the + main process at a time. Defaults to 1000. + +==== Shared COPY Options + +Options that are common to both `COPY TO` and `COPY FROM`. + +`NULLVAL`:: + The string placeholder for null values. Defaults to `null`. +`HEADER`:: + For `COPY TO`, controls whether the first line in the CSV output file + will contain the column names. For COPY FROM, specifies whether the + first line in the CSV input file contains column names. Defaults to + `false`. +`DECIMALSEP`:: + The character that is used as the decimal point separator. Defaults to + `.`. +`THOUSANDSSEP`:: + The character that is used to separate thousands. Defaults to the + empty string. +`BOOLSTYlE`:: + The string literal format for boolean values. Defaults to + `True,False`. +`NUMPROCESSES`:: + The number of child worker processes to create for `COPY` tasks. + Defaults to a max of 4 for `COPY FROM` and 16 for `COPY TO`. However, + at most (num_cores - 1) processes will be created. +`MAXATTEMPTS`:: + The maximum number of failed attempts to fetch a range of data (when + using `COPY TO`) or insert a chunk of data (when using `COPY FROM`) + before giving up. Defaults to 5. +`REPORTFREQUENCY`:: + How often status updates are refreshed, in seconds. Defaults to 0.25. +`RATEFILE`:: + An optional file to output rate statistics to. By default, statistics + are not output to a file. diff --git a/doc/source/modules/cassandra/pages/tools/index.adoc b/doc/source/modules/cassandra/pages/tools/index.adoc new file mode 100644 index 000000000000..a25af555cb46 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/index.adoc @@ -0,0 +1,9 @@ += Cassandra Tools + +This section describes the command line tools provided with Apache +Cassandra. + +* xref:tools/cqlsh.adoc[CQL shell] +* xref:tools/nodetool/nodetool.adoc[nodetool] +* xref:tools/sstable/index.adoc[SSTable tools] +* xref:tools/cassandra_stress.adoc[cassandra-stress tool] diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc new file mode 100644 index 000000000000..8dbae27c7642 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc @@ -0,0 +1,7 @@ +== assassinate + +== Usage +[source,plaintext] +---- +include::example$assassinate.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.txt b/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.txt new file mode 100644 index 000000000000..baa42ed8feae --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.txt @@ -0,0 +1,38 @@ +NAME + nodetool assassinate - Forcefully remove a dead node without + re-replicating any data. Use as a last resort if you cannot removenode + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] assassinate [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + IP address of the endpoint to assassinate + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc new file mode 100644 index 000000000000..05718f38fb79 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc @@ -0,0 +1,7 @@ +== bootstrap + +== Usage +[source,plaintext] +---- +include::example$bootstrap.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.txt b/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.txt new file mode 100644 index 000000000000..6e065f95a56b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.txt @@ -0,0 +1,37 @@ +NAME + nodetool bootstrap - Monitor/manage node's bootstrap process + +SYNOPSIS + nodetool bootstrap + nodetool + [(-pwf | --password-file )] + [(-h | --host )] [(-u | --username )] + [(-pp | --print-port)] [(-p | --port )] + [(-pw | --password )] bootstrap resume + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + +COMMANDS + With no arguments, Display help information + + resume + Resume bootstrap streaming + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc new file mode 100644 index 000000000000..234dd4401891 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc @@ -0,0 +1,7 @@ +== cleanup + +== Usage +[source,plaintext] +---- +include::example$cleanup.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.txt b/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.txt new file mode 100644 index 000000000000..e99479c7a838 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.txt @@ -0,0 +1,43 @@ +NAME + nodetool cleanup - Triggers the immediate cleanup of keys no longer + belonging to a node. By default, clean all keyspaces + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] cleanup + [(-j | --jobs )] [--] [ ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to cleanup simultanously, set to 0 to use all + available compaction threads + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc new file mode 100644 index 000000000000..652af5de9ee5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc @@ -0,0 +1,7 @@ +== clearsnapshot + +== Usage +[source,plaintext] +---- +include::example$clearsnapshot.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.txt b/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.txt new file mode 100644 index 000000000000..1955217eb292 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.txt @@ -0,0 +1,46 @@ +NAME + nodetool clearsnapshot - Remove the snapshot with the given name from + the given keyspaces. If no snapshotName is specified we will remove all + snapshots + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] clearsnapshot [--all] + [-t ] [--] [...] + +OPTIONS + --all + Removes all snapshots + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -t + Remove the snapshot with a given name + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Remove snapshots from the given keyspaces + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc new file mode 100644 index 000000000000..39f57d9fd892 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc @@ -0,0 +1,7 @@ +== clientstats + +== Usage +[source,plaintext] +---- +include::example$clientstats.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.txt new file mode 100644 index 000000000000..2a0fd7d9e701 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.txt @@ -0,0 +1,39 @@ +NAME + nodetool clientstats - Print information about connected clients + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] clientstats [--all] + [--by-protocol] [--clear-history] + +OPTIONS + --all + Lists all connections + + --by-protocol + Lists most recent client connections by protocol version + + --clear-history + Clear the history of connected clients + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc new file mode 100644 index 000000000000..9745aa89abb3 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc @@ -0,0 +1,7 @@ +== compact + +== Usage +[source,plaintext] +---- +include::example$compact.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compact.txt b/doc/source/modules/cassandra/pages/tools/nodetool/compact.txt new file mode 100644 index 000000000000..8f0f70656e9a --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/compact.txt @@ -0,0 +1,55 @@ +NAME + nodetool compact - Force a (major) compaction on one or more tables or + user-defined compaction on given SSTables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] compact + [(-et | --end-token )] [(-s | --split-output)] + [(-st | --start-token )] [--user-defined] + [--] [ ...] or ... + +OPTIONS + -et , --end-token + Use -et to specify a token at which compaction range ends + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s, --split-output + Use -s to not create a single big file + + -st , --start-token + Use -st to specify a token at which the compaction range starts + + -u , --username + Remote jmx agent username + + --user-defined + Use --user-defined to submit listed files for user-defined + compaction + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] or ... + The keyspace followed by one or many tables or list of SSTable data + files when using --user-defined + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc new file mode 100644 index 000000000000..c3b418d380e5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc @@ -0,0 +1,7 @@ +== compactionhistory + +== Usage +[source,plaintext] +---- +include::example$compactionhistory.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.txt b/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.txt new file mode 100644 index 000000000000..44b711cf8ccd --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.txt @@ -0,0 +1,33 @@ +NAME + nodetool compactionhistory - Print history of compaction + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] compactionhistory + [(-F | --format )] + +OPTIONS + -F , --format + Output format (json, yaml) + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc new file mode 100644 index 000000000000..46c1abf65210 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc @@ -0,0 +1,7 @@ +== compactionstats + +== Usage +[source,plaintext] +---- +include::example$compactionstats.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.txt new file mode 100644 index 000000000000..f1910d2d3f55 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.txt @@ -0,0 +1,33 @@ +NAME + nodetool compactionstats - Print statistics on compactions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] compactionstats + [(-H | --human-readable)] + +OPTIONS + -h , --host + Node hostname or ip address + + -H, --human-readable + Display bytes in human readable form, i.e. KiB, MiB, GiB, TiB + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/convert.sh b/doc/source/modules/cassandra/pages/tools/nodetool/convert.sh new file mode 100755 index 000000000000..fcd3d777a418 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/convert.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +for f in ~/CLONES/cassandra-examples/rst-to-asciidoc-tests/ASCIIDOC/modules/cassandra/pages/tools/nodetool/*.rst +do + filename=$(basename "$f") + filename="${filename%.*}" + echo "Processing $filename" + pandoc "$f" -f rst -t asciidoc -s -o "$filename.adoc" +done diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc new file mode 100644 index 000000000000..17d667796621 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc @@ -0,0 +1,7 @@ +== decommission + +== Usage +[source,plaintext] +---- +include::example$decommission.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/decommission.txt b/doc/source/modules/cassandra/pages/tools/nodetool/decommission.txt new file mode 100644 index 000000000000..33fde516a852 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/decommission.txt @@ -0,0 +1,33 @@ +NAME + nodetool decommission - Decommission the *node I am connecting to* + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] decommission [(-f | --force)] + +OPTIONS + -f, --force + Force decommission of this node even when it reduces the number of + replicas to below configured RF + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc new file mode 100644 index 000000000000..ba99fb688599 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc @@ -0,0 +1,7 @@ +== describecluster + +== Usage +[source,plaintext] +---- +include::example$describecluster.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.txt b/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.txt new file mode 100644 index 000000000000..e5307b5eae2f --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.txt @@ -0,0 +1,30 @@ +NAME + nodetool describecluster - Print the name, snitch, partitioner and + schema version of a cluster + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] describecluster + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc new file mode 100644 index 000000000000..f2dc62233c0b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc @@ -0,0 +1,7 @@ +== describering + +== Usage +[source,plaintext] +---- +include::example$describering.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describering.txt b/doc/source/modules/cassandra/pages/tools/nodetool/describering.txt new file mode 100644 index 000000000000..02a85fdc978d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/describering.txt @@ -0,0 +1,37 @@ +NAME + nodetool describering - Shows the token ranges info of a given keyspace + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] describering [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The keyspace name + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc new file mode 100644 index 000000000000..818ce7c30293 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc @@ -0,0 +1,7 @@ +== disableauditlog + +== Usage +[source,plaintext] +---- +include::example$disableauditlog.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.txt new file mode 100644 index 000000000000..950060406e67 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.txt @@ -0,0 +1,29 @@ +NAME + nodetool disableauditlog - Disable the audit log + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disableauditlog + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc new file mode 100644 index 000000000000..2298d1953549 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc @@ -0,0 +1,7 @@ +== disableautocompaction + +== Usage +[source,plaintext] +---- +include::example$disableautocompaction.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.txt new file mode 100644 index 000000000000..2c0fb3cc8e29 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.txt @@ -0,0 +1,39 @@ +NAME + nodetool disableautocompaction - Disable autocompaction for the given + keyspace and table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disableautocompaction [--] + [ ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc new file mode 100644 index 000000000000..6e676cf6c362 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc @@ -0,0 +1,7 @@ +== disablebackup + +== Usage +[source,plaintext] +---- +include::example$disablebackup.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.txt new file mode 100644 index 000000000000..5c51261dc569 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.txt @@ -0,0 +1,29 @@ +NAME + nodetool disablebackup - Disable incremental backup + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablebackup + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc new file mode 100644 index 000000000000..38cbe266710f --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc @@ -0,0 +1,7 @@ +== disablebinary + +== Usage +[source,plaintext] +---- +include::example$disablebinary.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.txt new file mode 100644 index 000000000000..2ea676afa6ed --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.txt @@ -0,0 +1,29 @@ +NAME + nodetool disablebinary - Disable native transport (binary protocol) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablebinary + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc new file mode 100644 index 000000000000..64e6f3b43ad9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc @@ -0,0 +1,7 @@ +== disablefullquerylog + +== Usage +[source,plaintext] +---- +include::example$disablefullquerylog.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.txt new file mode 100644 index 000000000000..00cc2cddbf74 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.txt @@ -0,0 +1,29 @@ +NAME + nodetool disablefullquerylog - Disable the full query log + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablefullquerylog + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc new file mode 100644 index 000000000000..51fddb80e6a0 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc @@ -0,0 +1,7 @@ +== disablegossip + +== Usage +[source,plaintext] +---- +include::example$disablegossip.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.txt new file mode 100644 index 000000000000..603a65cc1998 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.txt @@ -0,0 +1,30 @@ +NAME + nodetool disablegossip - Disable gossip (effectively marking the node + down) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablegossip + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc new file mode 100644 index 000000000000..1a55531b4d86 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc @@ -0,0 +1,7 @@ +== disablehandoff + +== Usage +[source,plaintext] +---- +include::example$disablehandoff.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.txt new file mode 100644 index 000000000000..ccb9a58e66d1 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.txt @@ -0,0 +1,29 @@ +NAME + nodetool disablehandoff - Disable storing hinted handoffs + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablehandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc new file mode 100644 index 000000000000..7cf99e2830b2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc @@ -0,0 +1,7 @@ +== disablehintsfordc + +== Usage +[source,plaintext] +---- +include::example$disablehintsfordc.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.txt new file mode 100644 index 000000000000..8e6e3bb7d534 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.txt @@ -0,0 +1,38 @@ +NAME + nodetool disablehintsfordc - Disable hints for a data center + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disablehintsfordc [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The data center to disable + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc new file mode 100644 index 000000000000..e71731ed443d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc @@ -0,0 +1,7 @@ +== disableoldprotocolversions + +== Usage +[source,plaintext] +---- +include::example$disableoldprotocolversions.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.txt new file mode 100644 index 000000000000..689e1dd1c057 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.txt @@ -0,0 +1,29 @@ +NAME + nodetool disableoldprotocolversions - Disable old protocol versions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disableoldprotocolversions + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc new file mode 100644 index 000000000000..206c00c71e76 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc @@ -0,0 +1,7 @@ +== drain + +== Usage +[source,plaintext] +---- +include::example$drain.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/drain.txt b/doc/source/modules/cassandra/pages/tools/nodetool/drain.txt new file mode 100644 index 000000000000..24bddbcbca66 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/drain.txt @@ -0,0 +1,30 @@ +NAME + nodetool drain - Drain the node (stop accepting writes and flush all + tables) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] drain + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc new file mode 100644 index 000000000000..1c68d9990213 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc @@ -0,0 +1,7 @@ +== enableauditlog + +== Usage +[source,plaintext] +---- +include::example$enableauditlog.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.txt new file mode 100644 index 000000000000..150821a5ee44 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.txt @@ -0,0 +1,63 @@ +NAME + nodetool enableauditlog - Enable the audit log + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableauditlog + [--excluded-categories ] + [--excluded-keyspaces ] + [--excluded-users ] + [--included-categories ] + [--included-keyspaces ] + [--included-users ] [--logger ] + +OPTIONS + --excluded-categories + Comma separated list of Audit Log Categories to be excluded for + audit log. If not set the value from cassandra.yaml will be used + + --excluded-keyspaces + Comma separated list of keyspaces to be excluded for audit log. If + not set the value from cassandra.yaml will be used + + --excluded-users + Comma separated list of users to be excluded for audit log. If not + set the value from cassandra.yaml will be used + + -h , --host + Node hostname or ip address + + --included-categories + Comma separated list of Audit Log Categories to be included for + audit log. If not set the value from cassandra.yaml will be used + + --included-keyspaces + Comma separated list of keyspaces to be included for audit log. If + not set the value from cassandra.yaml will be used + + --included-users + Comma separated list of users to be included for audit log. If not + set the value from cassandra.yaml will be used + + --logger + Logger name to be used for AuditLogging. Default BinAuditLogger. If + not set the value from cassandra.yaml will be used + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc new file mode 100644 index 000000000000..75d681f03e63 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc @@ -0,0 +1,7 @@ +== enableautocompaction + +== Usage +[source,plaintext] +---- +include::example$enableautocompaction.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.txt new file mode 100644 index 000000000000..1b52c4098b10 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.txt @@ -0,0 +1,39 @@ +NAME + nodetool enableautocompaction - Enable autocompaction for the given + keyspace and table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableautocompaction [--] + [ ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc new file mode 100644 index 000000000000..ef6d7c2039e3 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc @@ -0,0 +1,7 @@ +== enablebackup + +== Usage +[source,plaintext] +---- +include::example$enablebackup.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.txt new file mode 100644 index 000000000000..7c4b1c4ed3f7 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.txt @@ -0,0 +1,29 @@ +NAME + nodetool enablebackup - Enable incremental backup + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablebackup + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc new file mode 100644 index 000000000000..f0f47645e841 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc @@ -0,0 +1,7 @@ +== enablebinary + +== Usage +[source,plaintext] +---- +include::example$enablebinary.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.txt new file mode 100644 index 000000000000..3d8c330e6a31 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.txt @@ -0,0 +1,29 @@ +NAME + nodetool enablebinary - Reenable native transport (binary protocol) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablebinary + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc new file mode 100644 index 000000000000..10be0e3b82d0 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc @@ -0,0 +1,7 @@ +== enablefullquerylog + +== Usage +[source,plaintext] +---- +include::example$enablefullquerylog.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.txt new file mode 100644 index 000000000000..fdc380da2447 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.txt @@ -0,0 +1,61 @@ +NAME + nodetool enablefullquerylog - Enable full query logging, defaults for + the options are configured in cassandra.yaml + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablefullquerylog + [--archive-command ] [--blocking ] + [--max-archive-retries ] + [--max-log-size ] [--max-queue-weight ] + [--path ] [--roll-cycle ] + +OPTIONS + --archive-command + Command that will handle archiving rolled full query log files. + Format is "/path/to/script.sh %path" where %path will be replaced + with the file to archive + + --blocking + If the queue is full whether to block producers or drop samples + [true|false]. + + -h , --host + Node hostname or ip address + + --max-archive-retries + Max number of archive retries. + + --max-log-size + How many bytes of log data to store before dropping segments. Might + not be respected if a log file hasn't rolled so it can be deleted. + + --max-queue-weight + Maximum number of bytes of query data to queue to disk before + blocking or dropping samples. + + -p , --port + Remote jmx agent port number + + --path + Path to store the full query log at. Will have it's contents + recursively deleted. + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + --roll-cycle + How often to roll the log file (MINUTELY, HOURLY, DAILY). + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc new file mode 100644 index 000000000000..382463c82def --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc @@ -0,0 +1,7 @@ +== enablegossip + +== Usage +[source,plaintext] +---- +include::example$enablegossip.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.txt new file mode 100644 index 000000000000..ccbb4987390d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.txt @@ -0,0 +1,29 @@ +NAME + nodetool enablegossip - Reenable gossip + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablegossip + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc new file mode 100644 index 000000000000..b40016eee5ed --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc @@ -0,0 +1,7 @@ +== enablehandoff + +== Usage +[source,plaintext] +---- +include::example$enablehandoff.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.txt new file mode 100644 index 000000000000..9386ea72f8d2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.txt @@ -0,0 +1,30 @@ +NAME + nodetool enablehandoff - Reenable future hints storing on the current + node + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablehandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc new file mode 100644 index 000000000000..0ef3e518868c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc @@ -0,0 +1,7 @@ +== enablehintsfordc + +== Usage +[source,plaintext] +---- +include::example$enablehintsfordc.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.txt new file mode 100644 index 000000000000..3893b47f6646 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.txt @@ -0,0 +1,39 @@ +NAME + nodetool enablehintsfordc - Enable hints for a data center that was + previsouly disabled + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablehintsfordc [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The data center to enable + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc new file mode 100644 index 000000000000..286df31382dc --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc @@ -0,0 +1,7 @@ +== enableoldprotocolversions + +== Usage +[source,plaintext] +---- +include::example$enableoldprotocolversions.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.txt new file mode 100644 index 000000000000..0e9b4beb5c66 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.txt @@ -0,0 +1,29 @@ +NAME + nodetool enableoldprotocolversions - Enable old protocol versions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableoldprotocolversions + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc new file mode 100644 index 000000000000..5cb9a3887cf8 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc @@ -0,0 +1,7 @@ +== failuredetector + +== Usage +[source,plaintext] +---- +include::example$failuredetector.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.txt b/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.txt new file mode 100644 index 000000000000..f6d698a0cbd1 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.txt @@ -0,0 +1,30 @@ +NAME + nodetool failuredetector - Shows the failure detector information for + the cluster + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] failuredetector + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc new file mode 100644 index 000000000000..abbc24fb51ef --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc @@ -0,0 +1,7 @@ +== flush + +== Usage +[source,plaintext] +---- +include::example$flush.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/flush.txt b/doc/source/modules/cassandra/pages/tools/nodetool/flush.txt new file mode 100644 index 000000000000..60a598b8f7af --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/flush.txt @@ -0,0 +1,38 @@ +NAME + nodetool flush - Flush one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] flush [--] [ + ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc new file mode 100644 index 000000000000..fdfc7bb945b4 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc @@ -0,0 +1,7 @@ +== garbagecollect + +== Usage +[source,plaintext] +---- +include::example$garbagecollect.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.txt b/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.txt new file mode 100644 index 000000000000..c4bfe01ff3e1 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.txt @@ -0,0 +1,48 @@ +NAME + nodetool garbagecollect - Remove deleted data from one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] garbagecollect + [(-g | --granularity )] + [(-j | --jobs )] [--] [ ...] + +OPTIONS + -g , --granularity + Granularity of garbage removal. ROW (default) removes deleted + partitions and rows, CELL also removes overwritten or deleted cells. + + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to cleanup simultanously, set to 0 to use all + available compaction threads. Defaults to 1 so that collections of + newer tables can see the data is deleted and also remove tombstones. + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc new file mode 100644 index 000000000000..28045db9dac1 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc @@ -0,0 +1,7 @@ +== gcstats + +== Usage +[source,plaintext] +---- +include::example$gcstats.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.txt new file mode 100644 index 000000000000..a4368dd94e63 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.txt @@ -0,0 +1,29 @@ +NAME + nodetool gcstats - Print GC Statistics + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] gcstats + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc new file mode 100644 index 000000000000..739eebb4b1e1 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc @@ -0,0 +1,7 @@ +== getbatchlogreplaythrottle + +== Usage +[source,plaintext] +---- +include::example$getbatchlogreplaythrottle.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.txt new file mode 100644 index 000000000000..71e4f9ca5e66 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.txt @@ -0,0 +1,31 @@ +NAME + nodetool getbatchlogreplaythrottle - Print batchlog replay throttle in + KB/s. This is reduced proportionally to the number of nodes in the + cluster. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getbatchlogreplaythrottle + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc new file mode 100644 index 000000000000..d76ca7bfc43e --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc @@ -0,0 +1,7 @@ +== getcompactionthreshold + +== Usage +[source,plaintext] +---- +include::example$getcompactionthreshold.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.txt new file mode 100644 index 000000000000..57b71db97e5a --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.txt @@ -0,0 +1,39 @@ +NAME + nodetool getcompactionthreshold - Print min and max compaction + thresholds for a given table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getcompactionthreshold [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace with a table + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc new file mode 100644 index 000000000000..3cd43c255749 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc @@ -0,0 +1,7 @@ +== getcompactionthroughput + +== Usage +[source,plaintext] +---- +include::example$getcompactionthroughput.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.txt new file mode 100644 index 000000000000..97d69e609792 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.txt @@ -0,0 +1,30 @@ +NAME + nodetool getcompactionthroughput - Print the MB/s throughput cap for + compaction in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getcompactionthroughput + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc new file mode 100644 index 000000000000..a88bb97c6085 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc @@ -0,0 +1,7 @@ +== getconcurrency + +== Usage +[source,plaintext] +---- +include::example$getconcurrency.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.txt new file mode 100644 index 000000000000..bc54ae83ca65 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.txt @@ -0,0 +1,38 @@ +NAME + nodetool getconcurrency - Get maximum concurrency for processing stages + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getconcurrency [--] + [stage-names] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [stage-names] + optional list of stage names, otherwise display all stages + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc new file mode 100644 index 000000000000..9a897fc9cfb8 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc @@ -0,0 +1,7 @@ +== getconcurrentcompactors + +== Usage +[source,plaintext] +---- +include::example$getconcurrentcompactors.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.txt new file mode 100644 index 000000000000..2671c31b34b6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.txt @@ -0,0 +1,30 @@ +NAME + nodetool getconcurrentcompactors - Get the number of concurrent + compactors in the system. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getconcurrentcompactors + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc new file mode 100644 index 000000000000..1053ceac6ad8 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc @@ -0,0 +1,7 @@ +== getconcurrentviewbuilders + +== Usage +[source,plaintext] +---- +include::example$getconcurrentviewbuilders.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.txt new file mode 100644 index 000000000000..ce326d5f90b8 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.txt @@ -0,0 +1,30 @@ +NAME + nodetool getconcurrentviewbuilders - Get the number of concurrent view + builders in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getconcurrentviewbuilders + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc new file mode 100644 index 000000000000..b07e50452cc2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc @@ -0,0 +1,7 @@ +== getendpoints + +== Usage +[source,plaintext] +---- +include::example$getendpoints.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.txt new file mode 100644 index 000000000000..08831d7afaa5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.txt @@ -0,0 +1,39 @@ +NAME + nodetool getendpoints - Print the end points that owns the key + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getendpoints [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace, the table, and the partition key for which we need to + find the endpoint + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc new file mode 100644 index 000000000000..79edb97a94ea --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc @@ -0,0 +1,7 @@ +== getinterdcstreamthroughput + +== Usage +[source,plaintext] +---- +include::example$getinterdcstreamthroughput.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.txt new file mode 100644 index 000000000000..f4b43b429354 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.txt @@ -0,0 +1,30 @@ +NAME + nodetool getinterdcstreamthroughput - Print the Mb/s throughput cap for + inter-datacenter streaming in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getinterdcstreamthroughput + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc new file mode 100644 index 000000000000..20bf26c99d06 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc @@ -0,0 +1,7 @@ +== getlogginglevels + +== Usage +[source,plaintext] +---- +include::example$getlogginglevels.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.txt new file mode 100644 index 000000000000..09324b0c706c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.txt @@ -0,0 +1,29 @@ +NAME + nodetool getlogginglevels - Get the runtime logging levels + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getlogginglevels + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc new file mode 100644 index 000000000000..d4239350da1a --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc @@ -0,0 +1,7 @@ +== getmaxhintwindow + +== Usage +[source,plaintext] +---- +include::example$getmaxhintwindow.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.txt new file mode 100644 index 000000000000..9b6123a53160 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.txt @@ -0,0 +1,29 @@ +NAME + nodetool getmaxhintwindow - Print the max hint window in ms + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getmaxhintwindow + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc new file mode 100644 index 000000000000..0ad0e97922ad --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc @@ -0,0 +1,7 @@ +== getseeds + +== Usage +[source,plaintext] +---- +include::example$getseeds.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.txt new file mode 100644 index 000000000000..0e9b25103cb4 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.txt @@ -0,0 +1,30 @@ +NAME + nodetool getseeds - Get the currently in use seed node IP list excluding + the node IP + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getseeds + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc new file mode 100644 index 000000000000..26073a975a38 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc @@ -0,0 +1,7 @@ +== getsstables + +== Usage +[source,plaintext] +---- +include::example$getsstables.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.txt new file mode 100644 index 000000000000..f03e1faf7ede --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.txt @@ -0,0 +1,41 @@ +NAME + nodetool getsstables - Print the sstable filenames that own the key + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getsstables + [(-hf | --hex-format)] [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -hf, --hex-format + Specify the key in hexadecimal string format + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The keyspace, the column family, and the key + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc new file mode 100644 index 000000000000..4cca51dfb931 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc @@ -0,0 +1,7 @@ +== getstreamthroughput + +== Usage +[source,plaintext] +---- +include::example$getstreamthroughput.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.txt new file mode 100644 index 000000000000..3355745a3ef7 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.txt @@ -0,0 +1,30 @@ +NAME + nodetool getstreamthroughput - Print the Mb/s throughput cap for + streaming in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] getstreamthroughput + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc new file mode 100644 index 000000000000..cfbcf4188897 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc @@ -0,0 +1,7 @@ +== gettimeout + +== Usage +[source,plaintext] +---- +include::example$gettimeout.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.txt b/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.txt new file mode 100644 index 000000000000..93fd18306600 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.txt @@ -0,0 +1,39 @@ +NAME + nodetool gettimeout - Print the timeout of the given type in ms + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] gettimeout [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The timeout type, one of (read, range, write, counterwrite, + cascontention, truncate, internodeconnect, internodeuser, misc + (general rpc_timeout_in_ms)) + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc new file mode 100644 index 000000000000..f2dfb73c9e1c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc @@ -0,0 +1,7 @@ +== gettraceprobability + +== Usage +[source,plaintext] +---- +include::example$gettraceprobability.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.txt b/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.txt new file mode 100644 index 000000000000..36fb9e590d85 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.txt @@ -0,0 +1,29 @@ +NAME + nodetool gettraceprobability - Print the current trace probability value + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] gettraceprobability + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc new file mode 100644 index 000000000000..79f04f1510ba --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc @@ -0,0 +1,7 @@ +== gossipinfo + +== Usage +[source,plaintext] +---- +include::example$gossipinfo.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.txt b/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.txt new file mode 100644 index 000000000000..99e0cf492752 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.txt @@ -0,0 +1,29 @@ +NAME + nodetool gossipinfo - Shows the gossip information for the cluster + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] gossipinfo + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/help.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/help.adoc new file mode 100644 index 000000000000..9943f76faf6d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/help.adoc @@ -0,0 +1,7 @@ +== help + +== Usage +[source,plaintext] +---- +include::example$help.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/help.txt b/doc/source/modules/cassandra/pages/tools/nodetool/help.txt new file mode 100644 index 000000000000..0d5111318c6c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/help.txt @@ -0,0 +1,16 @@ +NAME + nodetool help - Display help information + +SYNOPSIS + nodetool help [--] [...] + +OPTIONS + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/import.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/import.adoc new file mode 100644 index 000000000000..cd07217f3586 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/import.adoc @@ -0,0 +1,7 @@ +== import + +== Usage +[source,plaintext] +---- +include::example$import.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/import.txt b/doc/source/modules/cassandra/pages/tools/nodetool/import.txt new file mode 100644 index 000000000000..375a31716f87 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/import.txt @@ -0,0 +1,64 @@ +NAME + nodetool import - Import new SSTables to the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] import + [(-c | --no-invalidate-caches)] [(-e | --extended-verify)] + [(-l | --keep-level)] [(-q | --quick)] [(-r | --keep-repaired)] + [(-t | --no-tokens)] [(-v | --no-verify)] [--]
+ ... + +OPTIONS + -c, --no-invalidate-caches + Don't invalidate the row cache when importing + + -e, --extended-verify + Run an extended verify, verifying all values in the new sstables + + -h , --host + Node hostname or ip address + + -l, --keep-level + Keep the level on the new sstables + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -q, --quick + Do a quick import without verifying sstables, clearing row cache or + checking in which data directory to put the file + + -r, --keep-repaired + Keep any repaired information from the sstables + + -t, --no-tokens + Don't verify that all tokens in the new sstable are owned by the + current node + + -u , --username + Remote jmx agent username + + -v, --no-verify + Don't verify new sstables + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
... + The keyspace, table name and directories to import sstables from + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/info.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/info.adoc new file mode 100644 index 000000000000..31227f33f2a9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/info.adoc @@ -0,0 +1,7 @@ +== info + +== Usage +[source,plaintext] +---- +include::example$info.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/info.txt b/doc/source/modules/cassandra/pages/tools/nodetool/info.txt new file mode 100644 index 000000000000..6769f8672355 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/info.txt @@ -0,0 +1,32 @@ +NAME + nodetool info - Print node information (uptime, load, ...) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] info [(-T | --tokens)] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -T, --tokens + Display all tokens + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc new file mode 100644 index 000000000000..2324c66e10c5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc @@ -0,0 +1,7 @@ +== invalidatecountercache + +== Usage +[source,plaintext] +---- +include::example$invalidatecountercache.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.txt b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.txt new file mode 100644 index 000000000000..88e1f0459c62 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.txt @@ -0,0 +1,29 @@ +NAME + nodetool invalidatecountercache - Invalidate the counter cache + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] invalidatecountercache + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc new file mode 100644 index 000000000000..19ae7cb021a7 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc @@ -0,0 +1,7 @@ +== invalidatekeycache + +== Usage +[source,plaintext] +---- +include::example$invalidatekeycache.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.txt b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.txt new file mode 100644 index 000000000000..a09cc07e063e --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.txt @@ -0,0 +1,29 @@ +NAME + nodetool invalidatekeycache - Invalidate the key cache + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] invalidatekeycache + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc new file mode 100644 index 000000000000..e7050ba7cf4b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc @@ -0,0 +1,7 @@ +== invalidaterowcache + +== Usage +[source,plaintext] +---- +include::example$invalidaterowcache.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.txt b/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.txt new file mode 100644 index 000000000000..c78f1b6083bf --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.txt @@ -0,0 +1,29 @@ +NAME + nodetool invalidaterowcache - Invalidate the row cache + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] invalidaterowcache + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/join.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/join.adoc new file mode 100644 index 000000000000..2e7de1109688 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/join.adoc @@ -0,0 +1,7 @@ +== join + +== Usage +[source,plaintext] +---- +include::example$join.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/join.txt b/doc/source/modules/cassandra/pages/tools/nodetool/join.txt new file mode 100644 index 000000000000..d636fd1577a2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/join.txt @@ -0,0 +1,29 @@ +NAME + nodetool join - Join the ring + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] join + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc new file mode 100644 index 000000000000..4c6620e5c57a --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc @@ -0,0 +1,7 @@ +== listsnapshots + +== Usage +[source,plaintext] +---- +include::example$listsnapshots.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.txt b/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.txt new file mode 100644 index 000000000000..3cdafd62863b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.txt @@ -0,0 +1,32 @@ +NAME + nodetool listsnapshots - Lists all the snapshots along with the size on + disk and true size. True size is the total size of all SSTables which + are not backed up to disk. Size on disk is total size of the snapshot on + disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] listsnapshots + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/move.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/move.adoc new file mode 100644 index 000000000000..4be7de501e6d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/move.adoc @@ -0,0 +1,7 @@ +== move + +== Usage +[source,plaintext] +---- +include::example$move.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/move.txt b/doc/source/modules/cassandra/pages/tools/nodetool/move.txt new file mode 100644 index 000000000000..29f228e96fcc --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/move.txt @@ -0,0 +1,37 @@ +NAME + nodetool move - Move node on the token ring to a new token + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] move [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The new token. + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc new file mode 100644 index 000000000000..462190386e58 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc @@ -0,0 +1,7 @@ +== netstats + +== Usage +[source,plaintext] +---- +include::example$netstats.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/netstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/netstats.txt new file mode 100644 index 000000000000..4d4792ef5847 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/netstats.txt @@ -0,0 +1,34 @@ +NAME + nodetool netstats - Print network information on provided host + (connecting node by default) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] netstats + [(-H | --human-readable)] + +OPTIONS + -h , --host + Node hostname or ip address + + -H, --human-readable + Display bytes in human readable form, i.e. KiB, MiB, GiB, TiB + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.adoc new file mode 100644 index 000000000000..a60ac22ba555 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.adoc @@ -0,0 +1,247 @@ +== Nodetool + +== Usage + +usage: nodetool [(-pwf | --password-file )] + [(-h | --host )] [(-u | --username )] + [(-pp | --print-port)] [(-p | --port )] + [(-pw | --password )] [] + +The most commonly used nodetool commands are: + +xref:tools/nodetool/assassinate.adoc[assassinate] - Forcefully remove a dead node without re-replicating any data. Use as a last resort if you cannot removenode + +xref:tools/nodetool/bootstrap.adoc[bootstrap] - Monitor/manage node's bootstrap process + +xref:tools/nodetool/cleanup.adoc[cleanup] - Triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces + +xref:tools/nodetool/clearsnapshot.adoc[clearsnapshot] - Remove the snapshot with the given name from the given keyspaces. If no snapshotName is specified we will remove all snapshots + +xref:tools/nodetool/clientstats.adoc[clientstats] - Print information about connected clients + +xref:tools/nodetool/compact.adoc[compact] - Force a (major) compaction on one or more tables or user-defined compaction on given SSTables + +xref:tools/nodetool/compactionhistory.adoc[compactionhistory] - Print history of compaction + +xref:tools/nodetool/compactionstats.adoc[compactionstats] - Print statistics on compactions + +xref:tools/nodetool/decommission.adoc[decommission] - Decommission the *node I am connecting to* + +xref:tools/nodetool/describecluster.adoc[describecluster] - Print the name, snitch, partitioner and schema version of a cluster + +xref:tools/nodetool/describering.adoc[describering] - Shows the token ranges info of a given keyspace + +xref:tools/nodetool/disableauditlog.adoc[disableauditlog] - Disable the audit log + +xref:tools/nodetool/disableautocompaction.adoc[disableautocompaction] - Disable autocompaction for the given keyspace and table + +xref:tools/nodetool/disablebackup.adoc[disablebackup] - Disable incremental backup + +xref:tools/nodetool/disablebinary.adoc[disablebinary] - Disable native transport (binary protocol) + +xref:tools/nodetool/disablefullquerylog.adoc[disablefullquerylog] - Disable the full query log + +xref:tools/nodetool/disablegossip.adoc[disablegossip] - Disable gossip (effectively marking the node down) + +xref:tools/nodetool/disablehandoff.adoc[disablehandoff] - Disable storing hinted handoffs + +xref:tools/nodetool/disablehintsfordc.adoc[disablehintsfordc] - Disable hints for a data center + +xref:tools/nodetool/disableoldprotocolversions.adoc[disableoldprotocolversions] - Disable old protocol versions + +xref:tools/nodetool/drain.adoc[drain] - Drain the node (stop accepting writes and flush all tables) + +xref:tools/nodetool/enableauditlog.adoc[enableauditlog] - Enable the audit log + +xref:tools/nodetool/enableautocompaction.adoc[enableautocompaction] - Enable autocompaction for the given keyspace and table + +xref:tools/nodetool/enablebackup.adoc[enablebackup] - Enable incremental backup + +xref:tools/nodetool/enablebinary.adoc[enablebinary] - Reenable native transport (binary protocol) + +xref:tools/nodetool/enablefullquerylog.adoc[enablefullquerylog] - Enable full query logging, defaults for the options are configured in cassandra.yaml + +xref:tools/nodetool/enablegossip.adoc[enablegossip] - Reenable gossip + +xref:tools/nodetool/enablehandoff.adoc[enablehandoff] - Reenable future hints storing on the current node + +xref:tools/nodetool/enablehintsfordc.adoc[enablehintsfordc] - Enable hints for a data center that was previsouly disabled + +xref:tools/nodetool/enableoldprotocolversions.adoc[enableoldprotocolversions] - Enable old protocol versions + +xref:tools/nodetool/failuredetector.adoc[failuredetector] - Shows the failure detector information for the cluster + +xref:tools/nodetool/flush.adoc[flush] - Flush one or more tables + +xref:tools/nodetool/garbagecollect.adoc[garbagecollect] - Remove deleted data from one or more tables + +xref:tools/nodetool/gcstats.adoc[gcstats] - Print GC Statistics + +xref:tools/nodetool/getbatchlogreplaythrottle.adoc[getbatchlogreplaythrottle] - Print batchlog replay throttle in KB/s. This is reduced proportionally to the number of nodes in the cluster. + +xref:tools/nodetool/getcompactionthreshold.adoc[getcompactionthreshold] - Print min and max compaction thresholds for a given table + +xref:tools/nodetool/getcompactionthroughput.adoc[getcompactionthroughput] - Print the MB/s throughput cap for compaction in the system + +xref:tools/nodetool/getconcurrency.adoc[getconcurrency] - Get maximum concurrency for processing stages + +xref:tools/nodetool/getconcurrentcompactors.adoc[getconcurrentcompactors] - Get the number of concurrent compactors in the system. + +xref:tools/nodetool/getconcurrentviewbuilders.adoc[getconcurrentviewbuilders] - Get the number of concurrent view builders in the system + +xref:tools/nodetool/getendpoints.adoc[getendpoints] - Print the end points that owns the key + +xref:tools/nodetool/getinterdcstreamthroughput.adoc[getinterdcstreamthroughput] - Print the Mb/s throughput cap for inter-datacenter streaming in the system + +xref:tools/nodetool/getlogginglevels.adoc[getlogginglevels] - Get the runtime logging levels + +xref:tools/nodetool/getmaxhintwindow.adoc[getmaxhintwindow] - Print the max hint window in ms + +xref:tools/nodetool/getseeds.adoc[getseeds] - Get the currently in use seed node IP list excluding the node IP + +xref:tools/nodetool/getsstables.adoc[getsstables] - Print the sstable filenames that own the key + +xref:tools/nodetool/getstreamthroughput.adoc[getstreamthroughput] - Print the Mb/s throughput cap for streaming in the system + +xref:tools/nodetool/gettimeout.adoc[gettimeout] - Print the timeout of the given type in ms + +xref:tools/nodetool/gettraceprobability.adoc[gettraceprobability] - Print the current trace probability value + +xref:tools/nodetool/gossipinfo.adoc[gossipinfo] - Shows the gossip information for the cluster + +xref:tools/nodetool/help.adoc[help] - Display help information + +xref:tools/nodetool/import.adoc[import] - Import new SSTables to the system + +xref:tools/nodetool/info.adoc[info] - Print node information (uptime, load, ...) + +xref:tools/nodetool/invalidatecountercache.adoc[invalidatecountercache] - Invalidate the counter cache + +xref:tools/nodetool/invalidatekeycache.adoc[invalidatekeycache] - Invalidate the key cache + +xref:tools/nodetool/invalidaterowcache.adoc[invalidaterowcache] - Invalidate the row cache + +xref:tools/nodetool/join.adoc[join] - Join the ring + +xref:tools/nodetool/listsnapshots.adoc[listsnapshots] - Lists all the snapshots along with the size on disk and true size. True size is the total size of all SSTables which are not backed up to disk. Size on disk is total size of the snapshot on disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication. + +xref:tools/nodetool/move.adoc[move] - Move node on the token ring to a new token + +xref:tools/nodetool/netstats.adoc[netstats] - Print network information on provided host (connecting node by default) + +xref:tools/nodetool/pausehandoff.adoc[pausehandoff] - Pause hints delivery process + +xref:tools/nodetool/profileload.adoc[profileload] - Low footprint profiling of activity for a period of time + +xref:tools/nodetool/proxyhistograms.adoc[proxyhistograms] - Print statistic histograms for network operations + +xref:tools/nodetool/rangekeysample.adoc[rangekeysample] - Shows the sampled keys held across all keyspaces + +xref:tools/nodetool/rebuild.adoc[rebuild] - Rebuild data by streaming from other nodes (similarly to bootstrap) + +xref:tools/nodetool/rebuild_index.adoc[rebuild_index] - A full rebuild of native secondary indexes for a given table + +xref:tools/nodetool/refresh.adoc[refresh] - Load newly placed SSTables to the system without restart + +xref:tools/nodetool/refreshsizeestimates.adoc[refreshsizeestimates] - Refresh system.size_estimates + +xref:tools/nodetool/reloadlocalschema.adoc[reloadlocalschema] - Reload local node schema from system tables + +xref:tools/nodetool/reloadseeds.adoc[reloadseeds] - Reload the seed node list from the seed node provider + +xref:tools/nodetool/reloadssl.adoc[reloadssl] - Signals Cassandra to reload SSL certificates + +xref:tools/nodetool/reloadtriggers.adoc[reloadtriggers] - Reload trigger classes + +xref:tools/nodetool/relocatesstables.adoc[relocatesstables] - Relocates sstables to the correct disk + +xref:tools/nodetool/removenode.adoc[removenode] - Show status of current node removal, force completion of pending removal or remove provided ID + +xref:tools/nodetool/repair.adoc[repair] - Repair one or more tables + +xref:tools/nodetool/repair_admin.adoc[repair_admin] - +xref:tools/nodetool/list.adoc[list] - and fail incremental repair sessions + +xref:tools/nodetool/replaybatchlog.adoc[replaybatchlog] - Kick off batchlog replay and wait for finish + +xref:tools/nodetool/resetfullquerylog.adoc[resetfullquerylog] - Stop the full query log and clean files in the configured full query log directory from cassandra.yaml as well as JMX + +xref:tools/nodetool/resetlocalschema.adoc[resetlocalschema] - Reset node's local schema and resync + +xref:tools/nodetool/resumehandoff.adoc[resumehandoff] - Resume hints delivery process + +xref:tools/nodetool/ring.adoc[ring] - Print information about the token ring + +xref:tools/nodetool/scrub.adoc[scrub] - Scrub (rebuild sstables for) one or more tables + +xref:tools/nodetool/setbatchlogreplaythrottle.adoc[setbatchlogreplaythrottle] - Set batchlog replay throttle in KB per second, or 0 to disable throttling. This will be reduced proportionally to the number of nodes in the cluster. + +xref:tools/nodetool/setcachecapacity.adoc[setcachecapacity] - Set global key, row, and counter cache capacities (in MB units) + +xref:tools/nodetool/setcachekeystosave.adoc[setcachekeystosave] - Set number of keys saved by each cache for faster post-restart warmup. 0 to disable + +xref:tools/nodetool/setcompactionthreshold.adoc[setcompactionthreshold] - Set min and max compaction thresholds for a given table + +xref:tools/nodetool/setcompactionthroughput.adoc[setcompactionthroughput] - Set the MB/s throughput cap for compaction in the system, or 0 to disable throttling + +xref:tools/nodetool/setconcurrency.adoc[setconcurrency] - Set maximum concurrency for processing stage + +xref:tools/nodetool/setconcurrentcompactors.adoc[setconcurrentcompactors] - Set number of concurrent compactors in the system. + +xref:tools/nodetool/setconcurrentviewbuilders.adoc[setconcurrentviewbuilders] - Set the number of concurrent view builders in the system + +xref:tools/nodetool/sethintedhandoffthrottlekb.adoc[sethintedhandoffthrottlekb] - Set hinted handoff throttle in kb per second, per delivery thread. + +xref:tools/nodetool/setinterdcstreamthroughput.adoc[setinterdcstreamthroughput] - Set the Mb/s throughput cap for inter-datacenter streaming in the system, or 0 to disable throttling + +xref:tools/nodetool/setlogginglevel.adoc[setlogginglevel] - Set the log level threshold for a given component or class. Will reset to the initial configuration if called with no parameters. + +xref:tools/nodetool/setmaxhintwindow.adoc[setmaxhintwindow] - Set the specified max hint window in ms + +xref:tools/nodetool/setstreamthroughput.adoc[setstreamthroughput] - Set the Mb/s throughput cap for streaming in the system, or 0 to disable throttling + +xref:tools/nodetool/settimeout.adoc[settimeout] - Set the specified timeout in ms, or 0 to disable timeout + +xref:tools/nodetool/settraceprobability.adoc[settraceprobability] - Sets the probability for tracing any given request to value. 0 disables, 1 enables for all requests, 0 is the default + +xref:tools/nodetool/sjk.adoc[sjk] - Run commands of 'Swiss Java Knife'. Run 'nodetool sjk --help' for more information. + +xref:tools/nodetool/snapshot.adoc[snapshot] - Take a snapshot of specified keyspaces or a snapshot of the specified table + +xref:tools/nodetool/status.adoc[status] - Print cluster information (state, load, IDs, ...) + +xref:tools/nodetool/statusautocompaction.adoc[statusautocompaction] - +xref:tools/nodetool/status.adoc[status] - of autocompaction of the given keyspace and table + +xref:tools/nodetool/statusbackup.adoc[statusbackup] - Status of incremental backup + +xref:tools/nodetool/statusbinary.adoc[statusbinary] - Status of native transport (binary protocol) + +xref:tools/nodetool/statusgossip.adoc[statusgossip] - Status of gossip + +xref:tools/nodetool/statushandoff.adoc[statushandoff] - Status of storing future hints on the current node + +xref:tools/nodetool/stop.adoc[stop] - Stop compaction + +xref:tools/nodetool/stopdaemon.adoc[stopdaemon] - Stop cassandra daemon + +xref:tools/nodetool/tablehistograms.adoc[tablehistograms] - Print statistic histograms for a given table + +xref:tools/nodetool/tablestats.adoc[tablestats] - Print statistics on tables + +xref:tools/nodetool/toppartitions.adoc[toppartitions] - Sample and print the most active partitions + +xref:tools/nodetool/tpstats.adoc[tpstats] - Print usage statistics of thread pools + +xref:tools/nodetool/truncatehints.adoc[truncatehints] - Truncate all hints on the local node, or truncate hints for the endpoint(s) specified. + +xref:tools/nodetool/upgradesstables.adoc[upgradesstables] - Rewrite sstables (for the requested tables) that are not on the current version (thus upgrading them to said current version) + +xref:tools/nodetool/verify.adoc[verify] - Verify (check data checksum for) one or more tables + +xref:tools/nodetool/version.adoc[version] - Print cassandra version + +xref:tools/nodetool/viewbuildstatus.adoc[viewbuildstatus] - Show progress of a materialized view build + +See 'nodetool help ' for more information on a specific command. + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt new file mode 100644 index 000000000000..d7880e33a220 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt @@ -0,0 +1,125 @@ +usage: nodetool [(-pwf | --password-file )] + [(-h | --host )] [(-u | --username )] + [(-pp | --print-port)] [(-p | --port )] + [(-pw | --password )] [] + +The most commonly used nodetool commands are: + assassinate Forcefully remove a dead node without re-replicating any data. Use as a last resort if you cannot removenode + bootstrap Monitor/manage node's bootstrap process + cleanup Triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces + clearsnapshot Remove the snapshot with the given name from the given keyspaces. If no snapshotName is specified we will remove all snapshots + clientstats Print information about connected clients + compact Force a (major) compaction on one or more tables or user-defined compaction on given SSTables + compactionhistory Print history of compaction + compactionstats Print statistics on compactions + decommission Decommission the *node I am connecting to* + describecluster Print the name, snitch, partitioner and schema version of a cluster + describering Shows the token ranges info of a given keyspace + disableauditlog Disable the audit log + disableautocompaction Disable autocompaction for the given keyspace and table + disablebackup Disable incremental backup + disablebinary Disable native transport (binary protocol) + disablefullquerylog Disable the full query log + disablegossip Disable gossip (effectively marking the node down) + disablehandoff Disable storing hinted handoffs + disablehintsfordc Disable hints for a data center + disableoldprotocolversions Disable old protocol versions + drain Drain the node (stop accepting writes and flush all tables) + enableauditlog Enable the audit log + enableautocompaction Enable autocompaction for the given keyspace and table + enablebackup Enable incremental backup + enablebinary Reenable native transport (binary protocol) + enablefullquerylog Enable full query logging, defaults for the options are configured in cassandra.yaml + enablegossip Reenable gossip + enablehandoff Reenable future hints storing on the current node + enablehintsfordc Enable hints for a data center that was previsouly disabled + enableoldprotocolversions Enable old protocol versions + failuredetector Shows the failure detector information for the cluster + flush Flush one or more tables + garbagecollect Remove deleted data from one or more tables + gcstats Print GC Statistics + getbatchlogreplaythrottle Print batchlog replay throttle in KB/s. This is reduced proportionally to the number of nodes in the cluster. + getcompactionthreshold Print min and max compaction thresholds for a given table + getcompactionthroughput Print the MB/s throughput cap for compaction in the system + getconcurrency Get maximum concurrency for processing stages + getconcurrentcompactors Get the number of concurrent compactors in the system. + getconcurrentviewbuilders Get the number of concurrent view builders in the system + getendpoints Print the end points that owns the key + getinterdcstreamthroughput Print the Mb/s throughput cap for inter-datacenter streaming in the system + getlogginglevels Get the runtime logging levels + getmaxhintwindow Print the max hint window in ms + getseeds Get the currently in use seed node IP list excluding the node IP + getsstables Print the sstable filenames that own the key + getstreamthroughput Print the Mb/s throughput cap for streaming in the system + gettimeout Print the timeout of the given type in ms + gettraceprobability Print the current trace probability value + gossipinfo Shows the gossip information for the cluster + help Display help information + import Import new SSTables to the system + info Print node information (uptime, load, ...) + invalidatecountercache Invalidate the counter cache + invalidatekeycache Invalidate the key cache + invalidaterowcache Invalidate the row cache + join Join the ring + listsnapshots Lists all the snapshots along with the size on disk and true size. True size is the total size of all SSTables which are not backed up to disk. Size on disk is total size of the snapshot on disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication. + move Move node on the token ring to a new token + netstats Print network information on provided host (connecting node by default) + pausehandoff Pause hints delivery process + profileload Low footprint profiling of activity for a period of time + proxyhistograms Print statistic histograms for network operations + rangekeysample Shows the sampled keys held across all keyspaces + rebuild Rebuild data by streaming from other nodes (similarly to bootstrap) + rebuild_index A full rebuild of native secondary indexes for a given table + refresh Load newly placed SSTables to the system without restart + refreshsizeestimates Refresh system.size_estimates + reloadlocalschema Reload local node schema from system tables + reloadseeds Reload the seed node list from the seed node provider + reloadssl Signals Cassandra to reload SSL certificates + reloadtriggers Reload trigger classes + relocatesstables Relocates sstables to the correct disk + removenode Show status of current node removal, force completion of pending removal or remove provided ID + repair Repair one or more tables + repair_admin list and fail incremental repair sessions + replaybatchlog Kick off batchlog replay and wait for finish + resetfullquerylog Stop the full query log and clean files in the configured full query log directory from cassandra.yaml as well as JMX + resetlocalschema Reset node's local schema and resync + resumehandoff Resume hints delivery process + ring Print information about the token ring + scrub Scrub (rebuild sstables for) one or more tables + setbatchlogreplaythrottle Set batchlog replay throttle in KB per second, or 0 to disable throttling. This will be reduced proportionally to the number of nodes in the cluster. + setcachecapacity Set global key, row, and counter cache capacities (in MB units) + setcachekeystosave Set number of keys saved by each cache for faster post-restart warmup. 0 to disable + setcompactionthreshold Set min and max compaction thresholds for a given table + setcompactionthroughput Set the MB/s throughput cap for compaction in the system, or 0 to disable throttling + setconcurrency Set maximum concurrency for processing stage + setconcurrentcompactors Set number of concurrent compactors in the system. + setconcurrentviewbuilders Set the number of concurrent view builders in the system + sethintedhandoffthrottlekb Set hinted handoff throttle in kb per second, per delivery thread. + setinterdcstreamthroughput Set the Mb/s throughput cap for inter-datacenter streaming in the system, or 0 to disable throttling + setlogginglevel Set the log level threshold for a given component or class. Will reset to the initial configuration if called with no parameters. + setmaxhintwindow Set the specified max hint window in ms + setstreamthroughput Set the Mb/s throughput cap for streaming in the system, or 0 to disable throttling + settimeout Set the specified timeout in ms, or 0 to disable timeout + settraceprobability Sets the probability for tracing any given request to value. 0 disables, 1 enables for all requests, 0 is the default + sjk Run commands of 'Swiss Java Knife'. Run 'nodetool sjk --help' for more information. + snapshot Take a snapshot of specified keyspaces or a snapshot of the specified table + status Print cluster information (state, load, IDs, ...) + statusautocompaction status of autocompaction of the given keyspace and table + statusbackup Status of incremental backup + statusbinary Status of native transport (binary protocol) + statusgossip Status of gossip + statushandoff Status of storing future hints on the current node + stop Stop compaction + stopdaemon Stop cassandra daemon + tablehistograms Print statistic histograms for a given table + tablestats Print statistics on tables + toppartitions Sample and print the most active partitions + tpstats Print usage statistics of thread pools + truncatehints Truncate all hints on the local node, or truncate hints for the endpoint(s) specified. + upgradesstables Rewrite sstables (for the requested tables) that are not on the current version (thus upgrading them to said current version) + verify Verify (check data checksum for) one or more tables + version Print cassandra version + viewbuildstatus Show progress of a materialized view build + +See 'nodetool help ' for more information on a specific command. + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc new file mode 100644 index 000000000000..55371fb4978c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc @@ -0,0 +1,7 @@ +== pausehandoff + +== Usage +[source,plaintext] +---- +include::example$pausehandoff.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.txt new file mode 100644 index 000000000000..4419935ce01c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.txt @@ -0,0 +1,29 @@ +NAME + nodetool pausehandoff - Pause hints delivery process + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] pausehandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc new file mode 100644 index 000000000000..56d7d128162f --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc @@ -0,0 +1,7 @@ +== profileload + +== Usage +[source,plaintext] +---- +include::example$profileload.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/profileload.txt b/doc/source/modules/cassandra/pages/tools/nodetool/profileload.txt new file mode 100644 index 000000000000..b6f30fcc9f17 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/profileload.txt @@ -0,0 +1,48 @@ +NAME + nodetool profileload - Low footprint profiling of activity for a period + of time + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] profileload [-a ] + [-k ] [-s ] [--] + +OPTIONS + -a + Comma separated list of samplers to use (Default: all) + + -h , --host + Node hostname or ip address + + -k + Number of the top samples to list (Default: 10) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s + Capacity of the sampler, higher for more accuracy (Default: 256) + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The keyspace, column family name, and duration in milliseconds + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc new file mode 100644 index 000000000000..07ecb59bf9e6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc @@ -0,0 +1,7 @@ +== proxyhistograms + +== Usage +[source,plaintext] +---- +include::example$proxyhistograms.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.txt b/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.txt new file mode 100644 index 000000000000..e01922678f68 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.txt @@ -0,0 +1,30 @@ +NAME + nodetool proxyhistograms - Print statistic histograms for network + operations + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] proxyhistograms + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc new file mode 100644 index 000000000000..a08c9079e95c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc @@ -0,0 +1,7 @@ +== rangekeysample + +== Usage +[source,plaintext] +---- +include::example$rangekeysample.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.txt b/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.txt new file mode 100644 index 000000000000..a58506bb756e --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.txt @@ -0,0 +1,30 @@ +NAME + nodetool rangekeysample - Shows the sampled keys held across all + keyspaces + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] rangekeysample + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc new file mode 100644 index 000000000000..8fea26896342 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc @@ -0,0 +1,7 @@ +== rebuild + +== Usage +[source,plaintext] +---- +include::example$rebuild.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.txt b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.txt new file mode 100644 index 000000000000..1f1c35c25d5a --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.txt @@ -0,0 +1,54 @@ +NAME + nodetool rebuild - Rebuild data by streaming from other nodes (similarly + to bootstrap) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] rebuild + [(-ks | --keyspace )] + [(-s | --sources )] + [(-ts | --tokens )] [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -ks , --keyspace + Use -ks to rebuild specific keyspace. + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s , --sources + Use -s to specify hosts that this node should stream from when -ts + is used. Multiple hosts should be separated using commas (e.g. + 127.0.0.1,127.0.0.2,...) + + -ts , --tokens + Use -ts to rebuild specific token ranges, in the format of "(start_token_1,end_token_1],(start_token_2,end_token_2],...(start_token_n,end_token_n]". + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Name of DC from which to select sources for streaming. By default, + pick any DC + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc new file mode 100644 index 000000000000..235f67a65a9a --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc @@ -0,0 +1,7 @@ +== rebuild_index + +== Usage +[source,plaintext] +---- +include::example$rebuild_index.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.txt b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.txt new file mode 100644 index 000000000000..cef436b29a67 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.txt @@ -0,0 +1,39 @@ +NAME + nodetool rebuild_index - A full rebuild of native secondary indexes for + a given table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] rebuild_index [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace and table name followed by a list of index names + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc new file mode 100644 index 000000000000..18ee82eb1a28 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc @@ -0,0 +1,7 @@ +== refresh + +== Usage +[source,plaintext] +---- +include::example$refresh.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refresh.txt b/doc/source/modules/cassandra/pages/tools/nodetool/refresh.txt new file mode 100644 index 000000000000..befabc11dcfa --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/refresh.txt @@ -0,0 +1,39 @@ +NAME + nodetool refresh - Load newly placed SSTables to the system without + restart + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] refresh [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace and table name + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc new file mode 100644 index 000000000000..58807e63fe07 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc @@ -0,0 +1,7 @@ +== refreshsizeestimates + +== Usage +[source,plaintext] +---- +include::example$refreshsizeestimates.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.txt b/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.txt new file mode 100644 index 000000000000..63a9b65bc52d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.txt @@ -0,0 +1,29 @@ +NAME + nodetool refreshsizeestimates - Refresh system.size_estimates + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] refreshsizeestimates + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc new file mode 100644 index 000000000000..3ca0cfdfadb7 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc @@ -0,0 +1,7 @@ +== reloadlocalschema + +== Usage +[source,plaintext] +---- +include::example$reloadlocalschema.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.txt b/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.txt new file mode 100644 index 000000000000..694d0321a0e5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.txt @@ -0,0 +1,29 @@ +NAME + nodetool reloadlocalschema - Reload local node schema from system tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] reloadlocalschema + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc new file mode 100644 index 000000000000..57dc58ac9a74 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc @@ -0,0 +1,7 @@ +== reloadseeds + +== Usage +[source,plaintext] +---- +include::example$reloadseeds.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.txt b/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.txt new file mode 100644 index 000000000000..b529d3846955 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.txt @@ -0,0 +1,30 @@ +NAME + nodetool reloadseeds - Reload the seed node list from the seed node + provider + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] reloadseeds + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc new file mode 100644 index 000000000000..d60faa662bc3 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc @@ -0,0 +1,7 @@ +== reloadssl + +== Usage +[source,plaintext] +---- +include::example$reloadssl.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.txt b/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.txt new file mode 100644 index 000000000000..a1ab81851163 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.txt @@ -0,0 +1,29 @@ +NAME + nodetool reloadssl - Signals Cassandra to reload SSL certificates + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] reloadssl + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc new file mode 100644 index 000000000000..73b47ac49ffe --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc @@ -0,0 +1,7 @@ +== reloadtriggers + +== Usage +[source,plaintext] +---- +include::example$reloadtriggers.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.txt b/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.txt new file mode 100644 index 000000000000..47dda2eb4c03 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.txt @@ -0,0 +1,29 @@ +NAME + nodetool reloadtriggers - Reload trigger classes + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] reloadtriggers + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc new file mode 100644 index 000000000000..9455ddacfde0 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc @@ -0,0 +1,7 @@ +== relocatesstables + +== Usage +[source,plaintext] +---- +include::example$relocatesstables.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.txt b/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.txt new file mode 100644 index 000000000000..851db8049a94 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.txt @@ -0,0 +1,42 @@ +NAME + nodetool relocatesstables - Relocates sstables to the correct disk + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] relocatesstables + [(-j | --jobs )] [--]
+ +OPTIONS + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to relocate simultanously, set to 0 to use all + available compaction threads + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace and table name + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc new file mode 100644 index 000000000000..fa4ada462d66 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc @@ -0,0 +1,7 @@ +== removenode + +== Usage +[source,plaintext] +---- +include::example$removenode.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/removenode.txt b/doc/source/modules/cassandra/pages/tools/nodetool/removenode.txt new file mode 100644 index 000000000000..c8285c913caa --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/removenode.txt @@ -0,0 +1,40 @@ +NAME + nodetool removenode - Show status of current node removal, force + completion of pending removal or remove provided ID + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] removenode [--] + || + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + || + Show status of current node removal, force completion of pending + removal, or remove provided ID + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc new file mode 100644 index 000000000000..729622c3c66d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc @@ -0,0 +1,7 @@ +== repair + +== Usage +[source,plaintext] +---- +include::example$repair.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair.txt b/doc/source/modules/cassandra/pages/tools/nodetool/repair.txt new file mode 100644 index 000000000000..e570a8337421 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/repair.txt @@ -0,0 +1,103 @@ +NAME + nodetool repair - Repair one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] repair + [(-dc | --in-dc )...] + [(-dcpar | --dc-parallel)] [(-et | --end-token )] + [(-force | --force)] [(-full | --full)] + [(-hosts | --in-hosts )...] + [(-j | --job-threads )] + [(-local | --in-local-dc)] [(-os | --optimise-streams)] [(-pl | --pull)] + [(-pr | --partitioner-range)] [(-prv | --preview)] + [(-seq | --sequential)] + [(-st | --start-token )] [(-tr | --trace)] + [(-vd | --validate)] [--] [ ...] + +OPTIONS + -dc , --in-dc + Use -dc to repair specific datacenters + + -dcpar, --dc-parallel + Use -dcpar to repair data centers in parallel. + + -et , --end-token + Use -et to specify a token at which repair range ends (inclusive) + + -force, --force + Use -force to filter out down endpoints + + -full, --full + Use -full to issue a full repair. + + -h , --host + Node hostname or ip address + + -hosts , --in-hosts + Use -hosts to repair specific hosts + + -j , --job-threads + Number of threads to run repair jobs. Usually this means number of + CFs to repair concurrently. WARNING: increasing this puts more load + on repairing nodes, so be careful. (default: 1, max: 4) + + -local, --in-local-dc + Use -local to only repair against nodes in the same datacenter + + -os, --optimise-streams + Use --optimise-streams to try to reduce the number of streams we do + (EXPERIMENTAL, see CASSANDRA-3200). + + -p , --port + Remote jmx agent port number + + -pl, --pull + Use --pull to perform a one way repair where data is only streamed + from a remote node to this node. + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pr, --partitioner-range + Use -pr to repair only the first range returned by the partitioner + + -prv, --preview + Determine ranges and amount of data to be streamed, but don't + actually perform repair + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -seq, --sequential + Use -seq to carry out a sequential repair + + -st , --start-token + Use -st to specify a token at which the repair range starts + (exclusive) + + -tr, --trace + Use -tr to trace the repair. Traces are logged to + system_traces.events. + + -u , --username + Remote jmx agent username + + -vd, --validate + Checks that repaired data is in sync between nodes. Out of sync + repaired data indicates a full repair should be run. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc new file mode 100644 index 000000000000..742fd77cf821 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc @@ -0,0 +1,7 @@ +== repair_admin + +== Usage +[source,plaintext] +---- +include::example$repair_admin.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.txt b/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.txt new file mode 100644 index 000000000000..71123ba31854 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.txt @@ -0,0 +1,43 @@ +NAME + nodetool repair_admin - list and fail incremental repair sessions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] repair_admin [(-a | --all)] + [(-f | --force)] [(-l | --list)] [(-x | --cancel )] + +OPTIONS + -a, --all + include completed and failed sessions + + -f, --force + cancel repair session from a node other than the repair coordinator. + Attempting to cancel FINALIZED or FAILED sessions is an error. + + -h , --host + Node hostname or ip address + + -l, --list + list repair sessions (default behavior) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -x , --cancel + cancel an incremental repair session + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc new file mode 100644 index 000000000000..1d78ff2c8ee9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc @@ -0,0 +1,7 @@ +== replaybatchlog + +== Usage +[source,plaintext] +---- +include::example$replaybatchlog.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.txt new file mode 100644 index 000000000000..4425e7eb2383 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.txt @@ -0,0 +1,29 @@ +NAME + nodetool replaybatchlog - Kick off batchlog replay and wait for finish + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] replaybatchlog + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc new file mode 100644 index 000000000000..d58692ee54a5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc @@ -0,0 +1,7 @@ +== resetfullquerylog + +== Usage +[source,plaintext] +---- +include::example$resetfullquerylog.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.txt new file mode 100644 index 000000000000..452b4a696d23 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.txt @@ -0,0 +1,31 @@ +NAME + nodetool resetfullquerylog - Stop the full query log and clean files in + the configured full query log directory from cassandra.yaml as well as + JMX + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] resetfullquerylog + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc new file mode 100644 index 000000000000..34a193023b82 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc @@ -0,0 +1,7 @@ +== resetlocalschema + +== Usage +[source,plaintext] +---- +include::example$resetlocalschema.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.txt b/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.txt new file mode 100644 index 000000000000..01dcaddc64cc --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.txt @@ -0,0 +1,29 @@ +NAME + nodetool resetlocalschema - Reset node's local schema and resync + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] resetlocalschema + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc new file mode 100644 index 000000000000..b62370f0e2b5 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc @@ -0,0 +1,7 @@ +== resumehandoff + +== Usage +[source,plaintext] +---- +include::example$resumehandoff.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.txt new file mode 100644 index 000000000000..927c82efef51 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.txt @@ -0,0 +1,29 @@ +NAME + nodetool resumehandoff - Resume hints delivery process + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] resumehandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc new file mode 100644 index 000000000000..6532c793546e --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc @@ -0,0 +1,7 @@ +== ring + +== Usage +[source,plaintext] +---- +include::example$ring.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/ring.txt b/doc/source/modules/cassandra/pages/tools/nodetool/ring.txt new file mode 100644 index 000000000000..d50e004ec39d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/ring.txt @@ -0,0 +1,42 @@ +NAME + nodetool ring - Print information about the token ring + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] ring [(-r | --resolve-ip)] + [--] [] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -r, --resolve-ip + Show node domain names instead of IPs + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Specify a keyspace for accurate ownership information (topology + awareness) + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc new file mode 100644 index 000000000000..21b3f9439915 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc @@ -0,0 +1,7 @@ +== scrub + +== Usage +[source,plaintext] +---- +include::example$scrub.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/scrub.txt b/doc/source/modules/cassandra/pages/tools/nodetool/scrub.txt new file mode 100644 index 000000000000..22b3ea7d2e10 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/scrub.txt @@ -0,0 +1,63 @@ +NAME + nodetool scrub - Scrub (rebuild sstables for) one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] scrub + [(-j | --jobs )] [(-n | --no-validate)] + [(-ns | --no-snapshot)] [(-r | --reinsert-overflowed-ttl)] + [(-s | --skip-corrupted)] [--] [ ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to scrub simultanously, set to 0 to use all + available compaction threads + + -n, --no-validate + Do not validate columns using column validator + + -ns, --no-snapshot + Scrubbed CFs will be snapshotted first, if disableSnapshot is false. + (default false) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -r, --reinsert-overflowed-ttl + Rewrites rows with overflowed expiration date affected by + CASSANDRA-14092 with the maximum supported expiration date of + 2038-01-19T03:14:06+00:00. The rows are rewritten with the original + timestamp incremented by one millisecond to override/supersede any + potential tombstone that may have been generated during compaction + of the affected rows. + + -s, --skip-corrupted + Skip corrupted partitions even when scrubbing counter tables. + (default false) + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc new file mode 100644 index 000000000000..fed16dd976bd --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc @@ -0,0 +1,7 @@ +== setbatchlogreplaythrottle + +== Usage +[source,plaintext] +---- +include::example$setbatchlogreplaythrottle.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.txt new file mode 100644 index 000000000000..a88af25dc24d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.txt @@ -0,0 +1,40 @@ +NAME + nodetool setbatchlogreplaythrottle - Set batchlog replay throttle in KB + per second, or 0 to disable throttling. This will be reduced + proportionally to the number of nodes in the cluster. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setbatchlogreplaythrottle [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in KB per second, 0 to disable throttling + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc new file mode 100644 index 000000000000..a6f736a69a86 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc @@ -0,0 +1,7 @@ +== setcachecapacity + +== Usage +[source,plaintext] +---- +include::example$setcachecapacity.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.txt new file mode 100644 index 000000000000..57a5e77d7f2b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.txt @@ -0,0 +1,39 @@ +NAME + nodetool setcachecapacity - Set global key, row, and counter cache + capacities (in MB units) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setcachecapacity [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Key cache, row cache, and counter cache (in MB) + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc new file mode 100644 index 000000000000..2e12c791329b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc @@ -0,0 +1,7 @@ +== setcachekeystosave + +== Usage +[source,plaintext] +---- +include::example$setcachekeystosave.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.txt new file mode 100644 index 000000000000..ec0eb4f10aea --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.txt @@ -0,0 +1,41 @@ +NAME + nodetool setcachekeystosave - Set number of keys saved by each cache for + faster post-restart warmup. 0 to disable + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setcachekeystosave [--] + + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + + The number of keys saved by each cache. 0 to disable + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc new file mode 100644 index 000000000000..94c3b186f4b9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc @@ -0,0 +1,7 @@ +== setcompactionthreshold + +== Usage +[source,plaintext] +---- +include::example$setcompactionthreshold.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.txt new file mode 100644 index 000000000000..10071919c7f7 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.txt @@ -0,0 +1,39 @@ +NAME + nodetool setcompactionthreshold - Set min and max compaction thresholds + for a given table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setcompactionthreshold [--] +
+ +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + +
+ The keyspace, the table, min and max threshold + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc new file mode 100644 index 000000000000..daab0b92af44 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc @@ -0,0 +1,7 @@ +== setcompactionthroughput + +== Usage +[source,plaintext] +---- +include::example$setcompactionthroughput.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.txt new file mode 100644 index 000000000000..c1b5efad2ab2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.txt @@ -0,0 +1,39 @@ +NAME + nodetool setcompactionthroughput - Set the MB/s throughput cap for + compaction in the system, or 0 to disable throttling + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setcompactionthroughput [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in MB, 0 to disable throttling + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc new file mode 100644 index 000000000000..d51cde78b560 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc @@ -0,0 +1,7 @@ +== setconcurrency + +== Usage +[source,plaintext] +---- +include::example$setconcurrency.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.txt new file mode 100644 index 000000000000..ea0e3b3fbbc4 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.txt @@ -0,0 +1,40 @@ +NAME + nodetool setconcurrency - Set maximum concurrency for processing stage + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setconcurrency [--] + | + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + | + + Set concurrency for processing stage + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc new file mode 100644 index 000000000000..6792dacdd420 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc @@ -0,0 +1,7 @@ +== setconcurrentcompactors + +== Usage +[source,plaintext] +---- +include::example$setconcurrentcompactors.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.txt new file mode 100644 index 000000000000..843ae72f5bb6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.txt @@ -0,0 +1,39 @@ +NAME + nodetool setconcurrentcompactors - Set number of concurrent compactors + in the system. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setconcurrentcompactors [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Number of concurrent compactors, greater than 0. + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc new file mode 100644 index 000000000000..85c5c2ba5398 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc @@ -0,0 +1,7 @@ +== setconcurrentviewbuilders + +== Usage +[source,plaintext] +---- +include::example$setconcurrentviewbuilders.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.txt new file mode 100644 index 000000000000..9f2a23444b8b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.txt @@ -0,0 +1,39 @@ +NAME + nodetool setconcurrentviewbuilders - Set the number of concurrent view + builders in the system + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setconcurrentviewbuilders [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Number of concurrent view builders, greater than 0. + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc new file mode 100644 index 000000000000..95ac48a5e55c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc @@ -0,0 +1,7 @@ +== sethintedhandoffthrottlekb + +== Usage +[source,plaintext] +---- +include::example$sethintedhandoffthrottlekb.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.txt b/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.txt new file mode 100644 index 000000000000..b588ba99adbd --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.txt @@ -0,0 +1,39 @@ +NAME + nodetool sethintedhandoffthrottlekb - Set hinted handoff throttle in kb + per second, per delivery thread. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] sethintedhandoffthrottlekb + [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in KB per second + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc new file mode 100644 index 000000000000..66ecd3c02286 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc @@ -0,0 +1,7 @@ +== setinterdcstreamthroughput + +== Usage +[source,plaintext] +---- +include::example$setinterdcstreamthroughput.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.txt new file mode 100644 index 000000000000..a29f6a84f81d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.txt @@ -0,0 +1,39 @@ +NAME + nodetool setinterdcstreamthroughput - Set the Mb/s throughput cap for + inter-datacenter streaming in the system, or 0 to disable throttling + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setinterdcstreamthroughput + [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in Mb, 0 to disable throttling + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc new file mode 100644 index 000000000000..3ffdbce3f3df --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc @@ -0,0 +1,7 @@ +== setlogginglevel + +== Usage +[source,plaintext] +---- +include::example$setlogginglevel.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.txt new file mode 100644 index 000000000000..a798c68971a2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.txt @@ -0,0 +1,42 @@ +NAME + nodetool setlogginglevel - Set the log level threshold for a given + component or class. Will reset to the initial configuration if called + with no parameters. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setlogginglevel [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The component or class to change the level for and the log level + threshold to set. Will reset to initial level if omitted. Available + components: bootstrap, compaction, repair, streaming, cql, ring + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc new file mode 100644 index 000000000000..3c48ab85157c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc @@ -0,0 +1,7 @@ +== setmaxhintwindow + +== Usage +[source,plaintext] +---- +include::example$setmaxhintwindow.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.txt new file mode 100644 index 000000000000..1289b1ac0a25 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.txt @@ -0,0 +1,38 @@ +NAME + nodetool setmaxhintwindow - Set the specified max hint window in ms + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setmaxhintwindow [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value of maxhintwindow in ms + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc new file mode 100644 index 000000000000..6726470bb185 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc @@ -0,0 +1,7 @@ +== setstreamthroughput + +== Usage +[source,plaintext] +---- +include::example$setstreamthroughput.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.txt new file mode 100644 index 000000000000..2b61e5bd3cbb --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.txt @@ -0,0 +1,39 @@ +NAME + nodetool setstreamthroughput - Set the Mb/s throughput cap for streaming + in the system, or 0 to disable throttling + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] setstreamthroughput [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Value in Mb, 0 to disable throttling + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc new file mode 100644 index 000000000000..67e1f97e1dba --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc @@ -0,0 +1,7 @@ +== settimeout + +== Usage +[source,plaintext] +---- +include::example$settimeout.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.txt b/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.txt new file mode 100644 index 000000000000..318b34e68c7c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.txt @@ -0,0 +1,42 @@ +NAME + nodetool settimeout - Set the specified timeout in ms, or 0 to disable + timeout + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] settimeout [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Timeout type followed by value in ms (0 disables socket streaming + timeout). Type should be one of (read, range, write, counterwrite, + cascontention, truncate, internodeconnect, internodeuser, misc + (general rpc_timeout_in_ms)) + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc new file mode 100644 index 000000000000..4c724addf660 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc @@ -0,0 +1,7 @@ +== settraceprobability + +== Usage +[source,plaintext] +---- +include::example$settraceprobability.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.txt b/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.txt new file mode 100644 index 000000000000..c0e4439105e2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.txt @@ -0,0 +1,40 @@ +NAME + nodetool settraceprobability - Sets the probability for tracing any + given request to value. 0 disables, 1 enables for all requests, 0 is the + default + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] settraceprobability [--] + + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Trace probability between 0 and 1 (ex: 0.2) + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc new file mode 100644 index 000000000000..1d8b1ed71cda --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc @@ -0,0 +1,7 @@ +== sjk + +== Usage +[source,plaintext] +---- +include::example$sjk.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sjk.txt b/doc/source/modules/cassandra/pages/tools/nodetool/sjk.txt new file mode 100644 index 000000000000..eab1e7bf9a25 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/sjk.txt @@ -0,0 +1,38 @@ +NAME + nodetool sjk - Run commands of 'Swiss Java Knife'. Run 'nodetool sjk + --help' for more information. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] sjk [--] [...] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Arguments passed as is to 'Swiss Java Knife'. + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc new file mode 100644 index 000000000000..5187cc03c4d4 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc @@ -0,0 +1,7 @@ +== snapshot + +== Usage +[source,plaintext] +---- +include::example$snapshot.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.txt b/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.txt new file mode 100644 index 000000000000..5a7119f2ae79 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.txt @@ -0,0 +1,56 @@ +NAME + nodetool snapshot - Take a snapshot of specified keyspaces or a snapshot + of the specified table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] snapshot + [(-cf
| --column-family
| --table
)] + [(-kt | --kt-list | -kc | --kc.list )] + [(-sf | --skip-flush)] [(-t | --tag )] [--] [] + +OPTIONS + -cf
, --column-family
, --table
+ The table name (you must specify one and only one keyspace for using + this option) + + -h , --host + Node hostname or ip address + + -kt , --kt-list , -kc , --kc.list + The list of Keyspace.table to take snapshot.(you must not specify + only keyspace) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -sf, --skip-flush + Do not flush memtables before snapshotting (snapshot will not + contain unflushed data) + + -t , --tag + The name of the snapshot + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [] + List of keyspaces. By default, all keyspaces + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/status.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/status.adoc new file mode 100644 index 000000000000..d8ef21f32415 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/status.adoc @@ -0,0 +1,7 @@ +== status + +== Usage +[source,plaintext] +---- +include::example$status.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/status.txt b/doc/source/modules/cassandra/pages/tools/nodetool/status.txt new file mode 100644 index 000000000000..45997fdb79d6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/status.txt @@ -0,0 +1,41 @@ +NAME + nodetool status - Print cluster information (state, load, IDs, ...) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] status [(-r | --resolve-ip)] + [--] [] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -r, --resolve-ip + Show node domain names instead of IPs + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [] + The keyspace name + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc new file mode 100644 index 000000000000..b7325d60e8d4 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc @@ -0,0 +1,7 @@ +== statusautocompaction + +== Usage +[source,plaintext] +---- +include::example$statusautocompaction.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.txt new file mode 100644 index 000000000000..05eb4bc37e5c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.txt @@ -0,0 +1,42 @@ +NAME + nodetool statusautocompaction - status of autocompaction of the given + keyspace and table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statusautocompaction + [(-a | --all)] [--] [ ...] + +OPTIONS + -a, --all + Show auto compaction status for each keyspace/table + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc new file mode 100644 index 000000000000..11a6bd93a310 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc @@ -0,0 +1,7 @@ +== statusbackup + +== Usage +[source,plaintext] +---- +include::example$statusbackup.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.txt new file mode 100644 index 000000000000..727e72a41302 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.txt @@ -0,0 +1,29 @@ +NAME + nodetool statusbackup - Status of incremental backup + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statusbackup + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc new file mode 100644 index 000000000000..075e2a5ade2b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc @@ -0,0 +1,7 @@ +== statusbinary + +== Usage +[source,plaintext] +---- +include::example$statusbinary.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.txt new file mode 100644 index 000000000000..05034de3bec0 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.txt @@ -0,0 +1,29 @@ +NAME + nodetool statusbinary - Status of native transport (binary protocol) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statusbinary + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc new file mode 100644 index 000000000000..0a2eb928ecf4 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc @@ -0,0 +1,7 @@ +== statusgossip + +== Usage +[source,plaintext] +---- +include::example$statusgossip.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.txt new file mode 100644 index 000000000000..35d8734132bd --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.txt @@ -0,0 +1,29 @@ +NAME + nodetool statusgossip - Status of gossip + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statusgossip + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc new file mode 100644 index 000000000000..5bc24ef14597 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc @@ -0,0 +1,7 @@ +== statushandoff + +== Usage +[source,plaintext] +---- +include::example$statushandoff.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.txt new file mode 100644 index 000000000000..c48d8fc6ab62 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.txt @@ -0,0 +1,30 @@ +NAME + nodetool statushandoff - Status of storing future hints on the current + node + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] statushandoff + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc new file mode 100644 index 000000000000..aac452c9eac7 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc @@ -0,0 +1,7 @@ +== stop + +== Usage +[source,plaintext] +---- +include::example$stop.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stop.txt b/doc/source/modules/cassandra/pages/tools/nodetool/stop.txt new file mode 100644 index 000000000000..ee0934989f70 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/stop.txt @@ -0,0 +1,46 @@ +NAME + nodetool stop - Stop compaction + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] stop + [(-id | --compaction-id )] [--] + +OPTIONS + -h , --host + Node hostname or ip address + + -id , --compaction-id + Use -id to stop a compaction by the specified id. Ids can be found + in the transaction log files whose name starts with compaction_, + located in the table transactions folder. + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + Supported types are COMPACTION, VALIDATION, CLEANUP, SCRUB, + UPGRADE_SSTABLES, INDEX_BUILD, TOMBSTONE_COMPACTION, ANTICOMPACTION, + VERIFY, VIEW_BUILD, INDEX_SUMMARY, RELOCATE, GARBAGE_COLLECT + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc new file mode 100644 index 000000000000..dc7cef7daa14 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc @@ -0,0 +1,7 @@ +== stopdaemon + +== Usage +[source,plaintext] +---- +include::example$stopdaemon.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.txt b/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.txt new file mode 100644 index 000000000000..c538203b5d9f --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.txt @@ -0,0 +1,29 @@ +NAME + nodetool stopdaemon - Stop cassandra daemon + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] stopdaemon + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc new file mode 100644 index 000000000000..5c69d21acb57 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc @@ -0,0 +1,7 @@ +== tablehistograms + +== Usage +[source,plaintext] +---- +include::example$tablehistograms.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.txt b/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.txt new file mode 100644 index 000000000000..1ebf4f095d55 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.txt @@ -0,0 +1,38 @@ +NAME + nodetool tablehistograms - Print statistic histograms for a given table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] tablehistograms [--] + [
| ] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [
| ] + The keyspace and table name + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc new file mode 100644 index 000000000000..c827062e5b87 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc @@ -0,0 +1,7 @@ +== tablestats + +== Usage +[source,plaintext] +---- +include::example$tablestats.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.txt new file mode 100644 index 000000000000..fb0563c6f1a3 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.txt @@ -0,0 +1,73 @@ +NAME + nodetool tablestats - Print statistics on tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] tablestats + [(-F | --format )] [(-H | --human-readable)] [-i] + [(-s | --sort )] [(-t | --top )] [--] + [...] + +OPTIONS + -F , --format + Output format (json, yaml) + + -h , --host + Node hostname or ip address + + -H, --human-readable + Display bytes in human readable form, i.e. KiB, MiB, GiB, TiB + + -i + Ignore the list of tables and display the remaining tables + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s , --sort + Sort tables by specified sort key + (average_live_cells_per_slice_last_five_minutes, + average_tombstones_per_slice_last_five_minutes, + bloom_filter_false_positives, bloom_filter_false_ratio, + bloom_filter_off_heap_memory_used, bloom_filter_space_used, + compacted_partition_maximum_bytes, compacted_partition_mean_bytes, + compacted_partition_minimum_bytes, + compression_metadata_off_heap_memory_used, dropped_mutations, + full_name, index_summary_off_heap_memory_used, local_read_count, + local_read_latency_ms, local_write_latency_ms, + maximum_live_cells_per_slice_last_five_minutes, + maximum_tombstones_per_slice_last_five_minutes, memtable_cell_count, + memtable_data_size, memtable_off_heap_memory_used, + memtable_switch_count, number_of_partitions_estimate, + off_heap_memory_used_total, pending_flushes, percent_repaired, + read_latency, reads, space_used_by_snapshots_total, space_used_live, + space_used_total, sstable_compression_ratio, sstable_count, + table_name, write_latency, writes) + + -t , --top + Show only the top K tables for the sort key (specify the number K of + tables to be shown + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + List of tables (or keyspace) names + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc new file mode 100644 index 000000000000..7cdbb2fe211b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc @@ -0,0 +1,7 @@ +== toppartitions + +== Usage +[source,plaintext] +---- +include::example$toppartitions.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.txt b/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.txt new file mode 100644 index 000000000000..0837d31ce4b6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.txt @@ -0,0 +1,47 @@ +NAME + nodetool toppartitions - Sample and print the most active partitions + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] toppartitions [-a ] + [-k ] [-s ] [--] + +OPTIONS + -a + Comma separated list of samplers to use (Default: all) + + -h , --host + Node hostname or ip address + + -k + Number of the top samples to list (Default: 10) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -s + Capacity of the sampler, higher for more accuracy (Default: 256) + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + + The keyspace, column family name, and duration in milliseconds + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc new file mode 100644 index 000000000000..e12e107a64f2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc @@ -0,0 +1,7 @@ +== tpstats + +== Usage +[source,plaintext] +---- +include::example$tpstats.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.txt new file mode 100644 index 000000000000..d3c4a20ff25c --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.txt @@ -0,0 +1,33 @@ +NAME + nodetool tpstats - Print usage statistics of thread pools + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] tpstats + [(-F | --format )] + +OPTIONS + -F , --format + Output format (json, yaml) + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc new file mode 100644 index 000000000000..d5424435cd09 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc @@ -0,0 +1,7 @@ +== truncatehints + +== Usage +[source,plaintext] +---- +include::example$truncatehints.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.txt b/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.txt new file mode 100644 index 000000000000..367f19e1269a --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.txt @@ -0,0 +1,40 @@ +NAME + nodetool truncatehints - Truncate all hints on the local node, or + truncate hints for the endpoint(s) specified. + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] truncatehints [--] [endpoint + ... ] + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [endpoint ... ] + Endpoint address(es) to delete hints for, either ip address + ("127.0.0.1") or hostname + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc new file mode 100644 index 000000000000..3fde3ac362aa --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc @@ -0,0 +1,7 @@ +== upgradesstables + +== Usage +[source,plaintext] +---- +include::example$upgradesstables.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.txt b/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.txt new file mode 100644 index 000000000000..f5cf0f1335cc --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.txt @@ -0,0 +1,49 @@ +NAME + nodetool upgradesstables - Rewrite sstables (for the requested tables) + that are not on the current version (thus upgrading them to said current + version) + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] upgradesstables + [(-a | --include-all-sstables)] [(-j | --jobs )] [--] + [ ...] + +OPTIONS + -a, --include-all-sstables + Use -a to include all sstables, even those already on the current + version + + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to upgrade simultanously, set to 0 to use all + available compaction threads + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc new file mode 100644 index 000000000000..338c262f9b2a --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc @@ -0,0 +1,7 @@ +== verify + +== Usage +[source,plaintext] +---- +include::example$verify.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/verify.txt b/doc/source/modules/cassandra/pages/tools/nodetool/verify.txt new file mode 100644 index 000000000000..92572cbef8b8 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/verify.txt @@ -0,0 +1,58 @@ +NAME + nodetool verify - Verify (check data checksum for) one or more tables + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] verify + [(-c | --check-version)] [(-d | --dfp)] [(-e | --extended-verify)] + [(-q | --quick)] [(-r | --rsc)] [(-t | --check-tokens)] [--] [ + ...] + +OPTIONS + -c, --check-version + Also check that all sstables are the latest version + + -d, --dfp + Invoke the disk failure policy if a corrupt sstable is found + + -e, --extended-verify + Verify each cell data, beyond simply checking sstable checksums + + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -q, --quick + Do a quick check - avoid reading all data to verify checksums + + -r, --rsc + Mutate the repair status on corrupt sstables + + -t, --check-tokens + Verify that all tokens in sstables are owned by this node + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/version.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/version.adoc new file mode 100644 index 000000000000..98ad86954898 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/version.adoc @@ -0,0 +1,7 @@ +== version + +== Usage +[source,plaintext] +---- +include::example$version.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/version.txt b/doc/source/modules/cassandra/pages/tools/nodetool/version.txt new file mode 100644 index 000000000000..9c5a7b4f9768 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/version.txt @@ -0,0 +1,29 @@ +NAME + nodetool version - Print cassandra version + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] version + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc new file mode 100644 index 000000000000..04cbd74b0fcc --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc @@ -0,0 +1,7 @@ +== viewbuildstatus + +== Usage +[source,plaintext] +---- +include::example$viewbuildstatus.txt[] +---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.txt b/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.txt new file mode 100644 index 000000000000..30429c3fee3b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.txt @@ -0,0 +1,38 @@ +NAME + nodetool viewbuildstatus - Show progress of a materialized view build + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] viewbuildstatus [--] + | + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + | + The keyspace and view name + + diff --git a/doc/source/modules/cassandra/pages/tools/sstable/index.adoc b/doc/source/modules/cassandra/pages/tools/sstable/index.adoc new file mode 100644 index 000000000000..cb787ece2176 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/index.adoc @@ -0,0 +1,20 @@ += SSTable Tools + +This section describes the functionality of the various sstable tools. + +Cassandra must be stopped before these tools are executed, or unexpected +results will occur. Note: the scripts do not verify that Cassandra is +stopped. + +* xref:tools/sstable/sstabledump.adoc[sstabledump] +* xref:tools/sstable/sstableexpiredblockers.adoc[sstableexpiredblockers] +* xref:tools/sstable/sstablelevelreset.adoc[sstablelevelreset] +* xref:tools/sstable/sstableloader.adoc[sstableloader] +* xref:tools/sstable/sstablemetadata.adoc[sstablemetadata] +* xref:tools/sstable/sstableofflinerelevel.adoc[sstableofflinerelevel] +* xref:tools/sstable/sstablerepairedset.adoc[sstablerepairdset] +* xref:tools/sstable/sstablescrub.adoc[sstablescrub] +* xref:tools/sstable/sstablesplit.adoc[sstablesplit] +* xref:tools/sstable/sstableupgrade.adoc[sstableupgrade] +* xref:tools/sstable/sstableutil.adoc[sstableutil] +* xref:tools/sstable/sstableverify.adoc[sstableverify] diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstabledump.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstabledump.adoc new file mode 100644 index 000000000000..90f66b885485 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstabledump.adoc @@ -0,0 +1,286 @@ += sstabledump + +Dump contents of a given SSTable to standard output in JSON format. + +You must supply exactly one sstable. + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstabledump + +[cols=",",] +|=== +|-d |CQL row per line internal representation +|-e |Enumerate partition keys only +|-k |Partition key +|-x |Excluded partition key(s) +|-t |Print raw timestamps instead of iso8601 date strings +|-l |Output each row as a separate JSON object +|=== + +If necessary, use sstableutil first to find out the sstables used by a +table. + +== Dump entire table + +Dump the entire table without any options. + +Example: + +.... +sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db > eventlog_dump_2018Jul26 + +cat eventlog_dump_2018Jul26 +[ + { + "partition" : { + "key" : [ "3578d7de-c60d-4599-aefb-3f22a07b2bc6" ], + "position" : 0 + }, + "rows" : [ + { + "type" : "row", + "position" : 61, + "liveness_info" : { "tstamp" : "2018-07-20T20:23:08.378711Z" }, + "cells" : [ + { "name" : "event", "value" : "party" }, + { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:08.384Z" }, + { "name" : "source", "value" : "asdf" } + ] + } + ] + }, + { + "partition" : { + "key" : [ "d18250c0-84fc-4d40-b957-4248dc9d790e" ], + "position" : 62 + }, + "rows" : [ + { + "type" : "row", + "position" : 123, + "liveness_info" : { "tstamp" : "2018-07-20T20:23:07.783522Z" }, + "cells" : [ + { "name" : "event", "value" : "party" }, + { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:07.789Z" }, + { "name" : "source", "value" : "asdf" } + ] + } + ] + }, + { + "partition" : { + "key" : [ "cf188983-d85b-48d6-9365-25005289beb2" ], + "position" : 124 + }, + "rows" : [ + { + "type" : "row", + "position" : 182, + "liveness_info" : { "tstamp" : "2018-07-20T20:22:27.028809Z" }, + "cells" : [ + { "name" : "event", "value" : "party" }, + { "name" : "insertedtimestamp", "value" : "2018-07-20 20:22:27.055Z" }, + { "name" : "source", "value" : "asdf" } + ] + } + ] + } +] +.... + +== Dump table in a more manageable format + +Use the -l option to dump each row as a separate JSON object. This will +make the output easier to manipulate for large data sets. ref: +https://issues.apache.org/jira/browse/CASSANDRA-13848 + +Example: + +.... +sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -l > eventlog_dump_2018Jul26_justlines + +cat eventlog_dump_2018Jul26_justlines +[ + { + "partition" : { + "key" : [ "3578d7de-c60d-4599-aefb-3f22a07b2bc6" ], + "position" : 0 + }, + "rows" : [ + { + "type" : "row", + "position" : 61, + "liveness_info" : { "tstamp" : "2018-07-20T20:23:08.378711Z" }, + "cells" : [ + { "name" : "event", "value" : "party" }, + { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:08.384Z" }, + { "name" : "source", "value" : "asdf" } + ] + } + ] + }, + { + "partition" : { + "key" : [ "d18250c0-84fc-4d40-b957-4248dc9d790e" ], + "position" : 62 + }, + "rows" : [ + { + "type" : "row", + "position" : 123, + "liveness_info" : { "tstamp" : "2018-07-20T20:23:07.783522Z" }, + "cells" : [ + { "name" : "event", "value" : "party" }, + { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:07.789Z" }, + { "name" : "source", "value" : "asdf" } + ] + } + ] + }, + { + "partition" : { + "key" : [ "cf188983-d85b-48d6-9365-25005289beb2" ], + "position" : 124 + }, + "rows" : [ + { + "type" : "row", + "position" : 182, + "liveness_info" : { "tstamp" : "2018-07-20T20:22:27.028809Z" }, + "cells" : [ + { "name" : "event", "value" : "party" }, + { "name" : "insertedtimestamp", "value" : "2018-07-20 20:22:27.055Z" }, + { "name" : "source", "value" : "asdf" } + ] + } + ] + } +.... + +== Dump only keys + +Dump only the keys by using the -e option. + +Example: + +.... +sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -e > eventlog_dump_2018Jul26_justkeys + +cat eventlog_dump_2018Jul26b +[ [ "3578d7de-c60d-4599-aefb-3f22a07b2bc6" ], [ "d18250c0-84fc-4d40-b957-4248dc9d790e" ], [ "cf188983-d85b-48d6-9365-25005289beb2" ] +.... + +== Dump row for a single key + +Dump a single key using the -k option. + +Example: + +.... +sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -k 3578d7de-c60d-4599-aefb-3f22a07b2bc6 > eventlog_dump_2018Jul26_singlekey + +cat eventlog_dump_2018Jul26_singlekey +[ + { + "partition" : { + "key" : [ "3578d7de-c60d-4599-aefb-3f22a07b2bc6" ], + "position" : 0 + }, + "rows" : [ + { + "type" : "row", + "position" : 61, + "liveness_info" : { "tstamp" : "2018-07-20T20:23:08.378711Z" }, + "cells" : [ + { "name" : "event", "value" : "party" }, + { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:08.384Z" }, + { "name" : "source", "value" : "asdf" } + ] + } + ] + } +.... + +== Exclude a key or keys in dump of rows + +Dump a table except for the rows excluded with the -x option. Multiple +keys can be used. + +Example: + +.... +sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -x 3578d7de-c60d-4599-aefb-3f22a07b2bc6 d18250c0-84fc-4d40-b957-4248dc9d790e > eventlog_dump_2018Jul26_excludekeys + +cat eventlog_dump_2018Jul26_excludekeys +[ + { + "partition" : { + "key" : [ "cf188983-d85b-48d6-9365-25005289beb2" ], + "position" : 0 + }, + "rows" : [ + { + "type" : "row", + "position" : 182, + "liveness_info" : { "tstamp" : "2018-07-20T20:22:27.028809Z" }, + "cells" : [ + { "name" : "event", "value" : "party" }, + { "name" : "insertedtimestamp", "value" : "2018-07-20 20:22:27.055Z" }, + { "name" : "source", "value" : "asdf" } + ] + } + ] + } +.... + +== Display raw timestamps + +By default, dates are displayed in iso8601 date format. Using the -t +option will dump the data with the raw timestamp. + +Example: + +.... +sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -t -k cf188983-d85b-48d6-9365-25005289beb2 > eventlog_dump_2018Jul26_times + +cat eventlog_dump_2018Jul26_times +[ + { + "partition" : { + "key" : [ "cf188983-d85b-48d6-9365-25005289beb2" ], + "position" : 124 + }, + "rows" : [ + { + "type" : "row", + "position" : 182, + "liveness_info" : { "tstamp" : "1532118147028809" }, + "cells" : [ + { "name" : "event", "value" : "party" }, + { "name" : "insertedtimestamp", "value" : "2018-07-20 20:22:27.055Z" }, + { "name" : "source", "value" : "asdf" } + ] + } + ] + } +.... + +== Display internal structure in output + +Dump the table in a format that reflects the internal structure. + +Example: + +.... +sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -d > eventlog_dump_2018Jul26_d + +cat eventlog_dump_2018Jul26_d +[3578d7de-c60d-4599-aefb-3f22a07b2bc6]@0 Row[info=[ts=1532118188378711] ]: | [event=party ts=1532118188378711], [insertedtimestamp=2018-07-20 20:23Z ts=1532118188378711], [source=asdf ts=1532118188378711] +[d18250c0-84fc-4d40-b957-4248dc9d790e]@62 Row[info=[ts=1532118187783522] ]: | [event=party ts=1532118187783522], [insertedtimestamp=2018-07-20 20:23Z ts=1532118187783522], [source=asdf ts=1532118187783522] +[cf188983-d85b-48d6-9365-25005289beb2]@124 Row[info=[ts=1532118147028809] ]: | [event=party ts=1532118147028809], [insertedtimestamp=2018-07-20 20:22Z ts=1532118147028809], [source=asdf ts=1532118147028809] +.... diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableexpiredblockers.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstableexpiredblockers.adoc new file mode 100644 index 000000000000..2090ad5fec18 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstableexpiredblockers.adoc @@ -0,0 +1,42 @@ += sstableexpiredblockers + +During compaction, entire sstables can be dropped if they contain only +expired tombstones, and if it is guaranteed that the data is not newer +than the data in other sstables. An expired sstable can be blocked from +getting dropped if its newest timestamp is newer than the oldest data in +another sstable. + +This tool is used to list all sstables that are blocking other sstables +from getting dropped (by having older data than the newest tombstone in +an expired sstable) so a user can figure out why certain sstables are +still on disk. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-10015 + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstableexpiredblockers
+ +== Output blocked sstables + +If the sstables exist for the table, but no tables have older data than +the newest tombstone in an expired sstable, the script will return +nothing. + +Otherwise, the script will return [.title-ref]# blocks <#> +expired sstables from getting dropped# followed by a list of the blocked +sstables. + +Example: + +.... +sstableexpiredblockers keyspace1 standard1 + +[BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-0665ae80b2d711e886c66d2c86545d91/mc-2-big-Data.db') (minTS = 5, maxTS = 5, maxLDT = 2147483647)], blocks 1 expired sstables from getting dropped: [BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-0665ae80b2d711e886c66d2c86545d91/mc-3-big-Data.db') (minTS = 1536349775157606, maxTS = 1536349780311159, maxLDT = 1536349780)], + +[BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-0665ae80b2d711e886c66d2c86545d91/mc-1-big-Data.db') (minTS = 1, maxTS = 10, maxLDT = 2147483647)], blocks 1 expired sstables from getting dropped: [BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-0665ae80b2d711e886c66d2c86545d91/mc-3-big-Data.db') (minTS = 1536349775157606, maxTS = 1536349780311159, maxLDT = 1536349780)], +.... diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablelevelreset.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstablelevelreset.adoc new file mode 100644 index 000000000000..65dc02e25c58 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstablelevelreset.adoc @@ -0,0 +1,69 @@ += sstablelevelreset + +If LeveledCompactionStrategy is set, this script can be used to reset +level to 0 on a given set of sstables. This is useful if you want to, +for example, change the minimum sstable size, and therefore restart the +compaction process using this new configuration. + +See +http://cassandra.apache.org/doc/latest/operating/compaction.html#leveled-compaction-strategy +for information on how levels are used in this compaction strategy. + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-5271 + +== Usage + +sstablelevelreset --really-reset
+ +The really-reset flag is required, to ensure this intrusive command is +not run accidentally. + +== Table not found + +If the keyspace and/or table is not in the schema (e.g., if you +misspelled the table name), the script will return an error. + +Example: + +.... +ColumnFamily not found: keyspace/evenlog. +.... + +== Table has no sstables + +Example: + +.... +Found no sstables, did you give the correct keyspace/table? +.... + +== Table already at level 0 + +The script will not set the level if it is already set to 0. + +Example: + +.... +Skipped /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db since it is already on level 0 +.... + +== Table levels reduced to 0 + +If the level is not already 0, then this will reset it to 0. + +Example: + +.... +sstablemetadata /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db | grep -i level +SSTable Level: 1 + +sstablelevelreset --really-reset keyspace eventlog +Changing level from 1 to 0 on /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db + +sstablemetadata /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db | grep -i level +SSTable Level: 0 +.... diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableloader.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstableloader.adoc new file mode 100644 index 000000000000..4234a0baa4fc --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstableloader.adoc @@ -0,0 +1,316 @@ += sstableloader + +Bulk-load the sstables found in the directory to the +configured cluster. The parent directories of are used as the +target keyspace/table name. For example, to load an sstable named +ma-1-big-Data.db into keyspace1/standard1, you will need to have the +files ma-1-big-Data.db and ma-1-big-Index.db in a directory +/path/to/keyspace1/standard1/. The tool will create new sstables, and +does not clean up your copied files. + +Several of the options listed below don't work quite as intended, and in +those cases, workarounds are mentioned for specific use cases. + +To avoid having the sstable files to be loaded compacted while reading +them, place the files in an alternate keyspace/table path than the data +directory. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-1278 + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstableloader + +[cols=",",] +|=== +|-d, --nodes |Required. Try to connect to these hosts +(comma-separated) initially for ring information + +|-u, --username |username for Cassandra authentication + +|-pw, --password |password for Cassandra authentication + +|-p, --port |port used for native connection +(default 9042) + +|-sp, --storage-port |port used for internode +communication (default 7000) + +|-ssp, --ssl-storage-port |port used for TLS +internode communication (default 7001) + +|--no-progress |don't display progress + +|-t, --throttle |throttle speed in Mbits (default unlimited) + +|-idct, --inter-dc-throttle |inter-datacenter +throttle speed in Mbits (default unlimited) + +|-cph, --connections-per-host |number of concurrent +connections-per-host + +|-i, --ignore |don't stream to this (comma separated) list of +nodes + +|-alg, --ssl-alg |Client SSL: algorithm (default: SunX509) + +|-ciphers, --ssl-ciphers |Client SSL: comma-separated +list of encryption suites to use + +|-ks, --keystore |Client SSL: full path to keystore + +|-kspw, --keystore-password |Client SSL: password of +the keystore + +|-st, --store-type |Client SSL: type of store + +|-ts, --truststore |Client SSL: full path to truststore + +|-tspw, --truststore-password |Client SSL: +password of the truststore + +|-prtcl, --ssl-protocol |Client SSL: connections protocol to +use (default: TLS) + +|-ap, --auth-provider |custom AuthProvider class name +for cassandra authentication + +|-f, --conf-path |cassandra.yaml file path for +streaming throughput and client/server SSL + +|-v, --verbose |verbose output + +|-h, --help |display this help message +|=== + +You can provide a cassandra.yaml file with the -f command line option to +set up streaming throughput, and client and server encryption options. +Only stream_throughput_outbound_megabits_per_sec, +server_encryption_options, and client_encryption_options are read from +yaml. You can override options read from cassandra.yaml with +corresponding command line options. + +== Load sstables from a Snapshot + +Copy the snapshot sstables into an accessible directory and use +sstableloader to restore them. + +Example: + +.... +cp snapshots/1535397029191/* /path/to/keyspace1/standard1/ + +sstableloader --nodes 172.17.0.2 /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ +Established connection to initial hosts +Opening sstables and calculating sections to stream +Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ma-3-big-Data.db to [/172.17.0.2] +progress: [/172.17.0.2]0:1/1 100% total: 100% 0 MB/s(avg: 1 MB/s) +Summary statistics: + Connections per host: : 1 + Total files transferred: : 1 + Total bytes transferred: : 4700000 + Total duration (ms): : 4390 + Average transfer rate (MB/s): : 1 + Peak transfer rate (MB/s): : 1 +.... + +The -d or --nodes option is required, or the script will not run. + +Example: + +.... +sstableloader /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ +Initial hosts must be specified (-d) +.... + +== Use a Config File for SSL Clusters + +If SSL encryption is enabled in the cluster, use the --conf-path option +with sstableloader to point the tool to the cassandra.yaml with the +relevant server_encryption_options (e.g., truststore location, +algorithm). This will work better than passing individual ssl options +shown above to sstableloader on the command line. + +Example: + +.... +sstableloader --nodes 172.17.0.2 --conf-path /etc/cassandra/cassandra.yaml /var/lib/cassandra/loadme/keyspace1/standard1-0974e5a0aa5811e8a0a06d2c86545d91/snapshots/ +Established connection to initial hosts +Opening sstables and calculating sections to stream +Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-0974e5a0aa5811e8a0a06d2c86545d91/mc-1-big-Data.db to [/172.17.0.2] +progress: [/172.17.0.2]0:0/1 1 % total: 1% 9.165KiB/s (avg: 9.165KiB/s) +progress: [/172.17.0.2]0:0/1 2 % total: 2% 5.147MiB/s (avg: 18.299KiB/s) +progress: [/172.17.0.2]0:0/1 4 % total: 4% 9.751MiB/s (avg: 27.423KiB/s) +progress: [/172.17.0.2]0:0/1 5 % total: 5% 8.203MiB/s (avg: 36.524KiB/s) +... +progress: [/172.17.0.2]0:1/1 100% total: 100% 0.000KiB/s (avg: 480.513KiB/s) + +Summary statistics: + Connections per host : 1 + Total files transferred : 1 + Total bytes transferred : 4.387MiB + Total duration : 9356 ms + Average transfer rate : 480.105KiB/s + Peak transfer rate : 586.410KiB/s +.... + +== Hide Progress Output + +To hide the output of progress and the summary statistics (e.g., if you +wanted to use this tool in a script), use the --no-progress option. + +Example: + +.... +sstableloader --nodes 172.17.0.2 --no-progress /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ +Established connection to initial hosts +Opening sstables and calculating sections to stream +Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ma-4-big-Data.db to [/172.17.0.2] +.... + +== Get More Detail + +Using the --verbose option will provide much more progress output. + +Example: + +.... +sstableloader --nodes 172.17.0.2 --verbose /var/lib/cassandra/loadme/keyspace1/standard1-0974e5a0aa5811e8a0a06d2c86545d91/ +Established connection to initial hosts +Opening sstables and calculating sections to stream +Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-0974e5a0aa5811e8a0a06d2c86545d91/mc-1-big-Data.db to [/172.17.0.2] +progress: [/172.17.0.2]0:0/1 1 % total: 1% 12.056KiB/s (avg: 12.056KiB/s) +progress: [/172.17.0.2]0:0/1 2 % total: 2% 9.092MiB/s (avg: 24.081KiB/s) +progress: [/172.17.0.2]0:0/1 4 % total: 4% 18.832MiB/s (avg: 36.099KiB/s) +progress: [/172.17.0.2]0:0/1 5 % total: 5% 2.253MiB/s (avg: 47.882KiB/s) +progress: [/172.17.0.2]0:0/1 7 % total: 7% 6.388MiB/s (avg: 59.743KiB/s) +progress: [/172.17.0.2]0:0/1 8 % total: 8% 14.606MiB/s (avg: 71.635KiB/s) +progress: [/172.17.0.2]0:0/1 9 % total: 9% 8.880MiB/s (avg: 83.465KiB/s) +progress: [/172.17.0.2]0:0/1 11 % total: 11% 5.217MiB/s (avg: 95.176KiB/s) +progress: [/172.17.0.2]0:0/1 12 % total: 12% 12.563MiB/s (avg: 106.975KiB/s) +progress: [/172.17.0.2]0:0/1 14 % total: 14% 2.550MiB/s (avg: 118.322KiB/s) +progress: [/172.17.0.2]0:0/1 15 % total: 15% 16.638MiB/s (avg: 130.063KiB/s) +progress: [/172.17.0.2]0:0/1 17 % total: 17% 17.270MiB/s (avg: 141.793KiB/s) +progress: [/172.17.0.2]0:0/1 18 % total: 18% 11.280MiB/s (avg: 153.452KiB/s) +progress: [/172.17.0.2]0:0/1 19 % total: 19% 2.903MiB/s (avg: 164.603KiB/s) +progress: [/172.17.0.2]0:0/1 21 % total: 21% 6.744MiB/s (avg: 176.061KiB/s) +progress: [/172.17.0.2]0:0/1 22 % total: 22% 6.011MiB/s (avg: 187.440KiB/s) +progress: [/172.17.0.2]0:0/1 24 % total: 24% 9.690MiB/s (avg: 198.920KiB/s) +progress: [/172.17.0.2]0:0/1 25 % total: 25% 11.481MiB/s (avg: 210.412KiB/s) +progress: [/172.17.0.2]0:0/1 27 % total: 27% 9.957MiB/s (avg: 221.848KiB/s) +progress: [/172.17.0.2]0:0/1 28 % total: 28% 10.270MiB/s (avg: 233.265KiB/s) +progress: [/172.17.0.2]0:0/1 29 % total: 29% 7.812MiB/s (avg: 244.571KiB/s) +progress: [/172.17.0.2]0:0/1 31 % total: 31% 14.843MiB/s (avg: 256.021KiB/s) +progress: [/172.17.0.2]0:0/1 32 % total: 32% 11.457MiB/s (avg: 267.394KiB/s) +progress: [/172.17.0.2]0:0/1 34 % total: 34% 6.550MiB/s (avg: 278.536KiB/s) +progress: [/172.17.0.2]0:0/1 35 % total: 35% 9.115MiB/s (avg: 289.782KiB/s) +progress: [/172.17.0.2]0:0/1 37 % total: 37% 11.054MiB/s (avg: 301.064KiB/s) +progress: [/172.17.0.2]0:0/1 38 % total: 38% 10.449MiB/s (avg: 312.307KiB/s) +progress: [/172.17.0.2]0:0/1 39 % total: 39% 1.646MiB/s (avg: 321.665KiB/s) +progress: [/172.17.0.2]0:0/1 41 % total: 41% 13.300MiB/s (avg: 332.872KiB/s) +progress: [/172.17.0.2]0:0/1 42 % total: 42% 14.370MiB/s (avg: 344.082KiB/s) +progress: [/172.17.0.2]0:0/1 44 % total: 44% 16.734MiB/s (avg: 355.314KiB/s) +progress: [/172.17.0.2]0:0/1 45 % total: 45% 22.245MiB/s (avg: 366.592KiB/s) +progress: [/172.17.0.2]0:0/1 47 % total: 47% 25.561MiB/s (avg: 377.882KiB/s) +progress: [/172.17.0.2]0:0/1 48 % total: 48% 24.543MiB/s (avg: 389.155KiB/s) +progress: [/172.17.0.2]0:0/1 49 % total: 49% 4.894MiB/s (avg: 399.688KiB/s) +progress: [/172.17.0.2]0:0/1 51 % total: 51% 8.331MiB/s (avg: 410.559KiB/s) +progress: [/172.17.0.2]0:0/1 52 % total: 52% 5.771MiB/s (avg: 421.150KiB/s) +progress: [/172.17.0.2]0:0/1 54 % total: 54% 8.738MiB/s (avg: 431.983KiB/s) +progress: [/172.17.0.2]0:0/1 55 % total: 55% 3.406MiB/s (avg: 441.911KiB/s) +progress: [/172.17.0.2]0:0/1 56 % total: 56% 9.791MiB/s (avg: 452.730KiB/s) +progress: [/172.17.0.2]0:0/1 58 % total: 58% 3.401MiB/s (avg: 462.545KiB/s) +progress: [/172.17.0.2]0:0/1 59 % total: 59% 5.280MiB/s (avg: 472.840KiB/s) +progress: [/172.17.0.2]0:0/1 61 % total: 61% 12.232MiB/s (avg: 483.663KiB/s) +progress: [/172.17.0.2]0:0/1 62 % total: 62% 9.258MiB/s (avg: 494.325KiB/s) +progress: [/172.17.0.2]0:0/1 64 % total: 64% 2.877MiB/s (avg: 503.640KiB/s) +progress: [/172.17.0.2]0:0/1 65 % total: 65% 7.461MiB/s (avg: 514.078KiB/s) +progress: [/172.17.0.2]0:0/1 66 % total: 66% 24.247MiB/s (avg: 525.018KiB/s) +progress: [/172.17.0.2]0:0/1 68 % total: 68% 9.348MiB/s (avg: 535.563KiB/s) +progress: [/172.17.0.2]0:0/1 69 % total: 69% 5.130MiB/s (avg: 545.563KiB/s) +progress: [/172.17.0.2]0:0/1 71 % total: 71% 19.861MiB/s (avg: 556.392KiB/s) +progress: [/172.17.0.2]0:0/1 72 % total: 72% 15.501MiB/s (avg: 567.122KiB/s) +progress: [/172.17.0.2]0:0/1 74 % total: 74% 5.031MiB/s (avg: 576.996KiB/s) +progress: [/172.17.0.2]0:0/1 75 % total: 75% 22.771MiB/s (avg: 587.813KiB/s) +progress: [/172.17.0.2]0:0/1 76 % total: 76% 22.780MiB/s (avg: 598.619KiB/s) +progress: [/172.17.0.2]0:0/1 78 % total: 78% 20.684MiB/s (avg: 609.386KiB/s) +progress: [/172.17.0.2]0:0/1 79 % total: 79% 22.920MiB/s (avg: 620.173KiB/s) +progress: [/172.17.0.2]0:0/1 81 % total: 81% 7.458MiB/s (avg: 630.333KiB/s) +progress: [/172.17.0.2]0:0/1 82 % total: 82% 22.993MiB/s (avg: 641.090KiB/s) +progress: [/172.17.0.2]0:0/1 84 % total: 84% 21.392MiB/s (avg: 651.814KiB/s) +progress: [/172.17.0.2]0:0/1 85 % total: 85% 7.732MiB/s (avg: 661.938KiB/s) +progress: [/172.17.0.2]0:0/1 86 % total: 86% 3.476MiB/s (avg: 670.892KiB/s) +progress: [/172.17.0.2]0:0/1 88 % total: 88% 19.889MiB/s (avg: 681.521KiB/s) +progress: [/172.17.0.2]0:0/1 89 % total: 89% 21.077MiB/s (avg: 692.162KiB/s) +progress: [/172.17.0.2]0:0/1 91 % total: 91% 24.062MiB/s (avg: 702.835KiB/s) +progress: [/172.17.0.2]0:0/1 92 % total: 92% 19.798MiB/s (avg: 713.431KiB/s) +progress: [/172.17.0.2]0:0/1 94 % total: 94% 17.591MiB/s (avg: 723.965KiB/s) +progress: [/172.17.0.2]0:0/1 95 % total: 95% 13.725MiB/s (avg: 734.361KiB/s) +progress: [/172.17.0.2]0:0/1 96 % total: 96% 16.737MiB/s (avg: 744.846KiB/s) +progress: [/172.17.0.2]0:0/1 98 % total: 98% 22.701MiB/s (avg: 755.443KiB/s) +progress: [/172.17.0.2]0:0/1 99 % total: 99% 18.718MiB/s (avg: 765.954KiB/s) +progress: [/172.17.0.2]0:1/1 100% total: 100% 6.613MiB/s (avg: 767.802KiB/s) +progress: [/172.17.0.2]0:1/1 100% total: 100% 0.000KiB/s (avg: 670.295KiB/s) + +Summary statistics: + Connections per host : 1 + Total files transferred : 1 + Total bytes transferred : 4.387MiB + Total duration : 6706 ms + Average transfer rate : 669.835KiB/s + Peak transfer rate : 767.802KiB/s +.... + +== Throttling Load + +To prevent the table loader from overloading the system resources, you +can throttle the process with the --throttle option. The default is +unlimited (no throttling). Throttle units are in megabits. Note that the +total duration is increased in the example below. + +Example: + +.... +sstableloader --nodes 172.17.0.2 --throttle 1 /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ +Established connection to initial hosts +Opening sstables and calculating sections to stream +Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ma-6-big-Data.db to [/172.17.0.2] +progress: [/172.17.0.2]0:1/1 100% total: 100% 0 MB/s(avg: 0 MB/s) +Summary statistics: + Connections per host: : 1 + Total files transferred: : 1 + Total bytes transferred: : 4595705 + Total duration (ms): : 37634 + Average transfer rate (MB/s): : 0 + Peak transfer rate (MB/s): : 0 +.... + +== Speeding up Load + +To speed up the load process, the number of connections per host can be +increased. + +Example: + +.... +sstableloader --nodes 172.17.0.2 --connections-per-host 100 /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ +Established connection to initial hosts +Opening sstables and calculating sections to stream +Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ma-9-big-Data.db to [/172.17.0.2] +progress: [/172.17.0.2]0:1/1 100% total: 100% 0 MB/s(avg: 1 MB/s) +Summary statistics: + Connections per host: : 100 + Total files transferred: : 1 + Total bytes transferred: : 4595705 + Total duration (ms): : 3486 + Average transfer rate (MB/s): : 1 + Peak transfer rate (MB/s): : 1 +.... + +This small data set doesn't benefit much from the increase in +connections per host, but note that the total duration has decreased in +this example. diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablemetadata.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstablemetadata.adoc new file mode 100644 index 000000000000..0516bef3e732 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstablemetadata.adoc @@ -0,0 +1,320 @@ += sstablemetadata + +Print information about an sstable from the related Statistics.db and +Summary.db files to standard output. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-7159 and +https://issues.apache.org/jira/browse/CASSANDRA-10838 + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstablemetadata + +[cols=",",] +|=== +|--gc_grace_seconds |The gc_grace_seconds to use when calculating +droppable tombstones +|=== + +== Print all the metadata + +Run sstablemetadata against the __Data.db file(s) related to a table. If +necessary, find the__Data.db file(s) using sstableutil. + +Example: + +.... +sstableutil keyspace1 standard1 | grep Data +/var/lib/cassandra/data/keyspace1/standard1-f6845640a6cb11e8b6836d2c86545d91/mc-1-big-Data.db + +sstablemetadata /var/lib/cassandra/data/keyspace1/standard1-f6845640a6cb11e8b6836d2c86545d91/mc-1-big-Data.db + +SSTable: /var/lib/cassandra/data/keyspace1/standard1-f6845640a6cb11e8b6836d2c86545d91/mc-1-big +Partitioner: org.apache.cassandra.dht.Murmur3Partitioner +Bloom Filter FP chance: 0.010000 +Minimum timestamp: 1535025576141000 +Maximum timestamp: 1535025604309000 +SSTable min local deletion time: 2147483647 +SSTable max local deletion time: 2147483647 +Compressor: org.apache.cassandra.io.compress.LZ4Compressor +TTL min: 86400 +TTL max: 86400 +First token: -9223004712949498654 (key=39373333373831303130) +Last token: 9222554117157811897 (key=4f3438394e39374d3730) +Estimated droppable tombstones: 0.9188263888888889 +SSTable Level: 0 +Repaired at: 0 +Replay positions covered: {CommitLogPosition(segmentId=1535025390651, position=226400)=CommitLogPosition(segmentId=1535025390651, position=6849139)} +totalColumnsSet: 100000 +totalRows: 20000 +Estimated tombstone drop times: +1535039100: 80390 +1535039160: 5645 +1535039220: 13965 +Count Row Size Cell Count +1 0 0 +2 0 0 +3 0 0 +4 0 0 +5 0 20000 +6 0 0 +7 0 0 +8 0 0 +10 0 0 +12 0 0 +14 0 0 +17 0 0 +20 0 0 +24 0 0 +29 0 0 +35 0 0 +42 0 0 +50 0 0 +60 0 0 +72 0 0 +86 0 0 +103 0 0 +124 0 0 +149 0 0 +179 0 0 +215 0 0 +258 20000 0 +310 0 0 +372 0 0 +446 0 0 +535 0 0 +642 0 0 +770 0 0 +924 0 0 +1109 0 0 +1331 0 0 +1597 0 0 +1916 0 0 +2299 0 0 +2759 0 0 +3311 0 0 +3973 0 0 +4768 0 0 +5722 0 0 +6866 0 0 +8239 0 0 +9887 0 0 +11864 0 0 +14237 0 0 +17084 0 0 +20501 0 0 +24601 0 0 +29521 0 0 +35425 0 0 +42510 0 0 +51012 0 0 +61214 0 0 +73457 0 0 +88148 0 0 +105778 0 0 +126934 0 0 +152321 0 0 +182785 0 0 +219342 0 0 +263210 0 0 +315852 0 0 +379022 0 0 +454826 0 0 +545791 0 0 +654949 0 0 +785939 0 0 +943127 0 0 +1131752 0 0 +1358102 0 0 +1629722 0 0 +1955666 0 0 +2346799 0 0 +2816159 0 0 +3379391 0 0 +4055269 0 0 +4866323 0 0 +5839588 0 0 +7007506 0 0 +8409007 0 0 +10090808 0 0 +12108970 0 0 +14530764 0 0 +17436917 0 0 +20924300 0 0 +25109160 0 0 +30130992 0 0 +36157190 0 0 +43388628 0 0 +52066354 0 0 +62479625 0 0 +74975550 0 0 +89970660 0 0 +107964792 0 0 +129557750 0 0 +155469300 0 0 +186563160 0 0 +223875792 0 0 +268650950 0 0 +322381140 0 0 +386857368 0 0 +464228842 0 0 +557074610 0 0 +668489532 0 0 +802187438 0 0 +962624926 0 0 +1155149911 0 0 +1386179893 0 0 +1663415872 0 0 +1996099046 0 0 +2395318855 0 0 +2874382626 0 +3449259151 0 +4139110981 0 +4966933177 0 +5960319812 0 +7152383774 0 +8582860529 0 +10299432635 0 +12359319162 0 +14831182994 0 +17797419593 0 +21356903512 0 +25628284214 0 +30753941057 0 +36904729268 0 +44285675122 0 +53142810146 0 +63771372175 0 +76525646610 0 +91830775932 0 +110196931118 0 +132236317342 0 +158683580810 0 +190420296972 0 +228504356366 0 +274205227639 0 +329046273167 0 +394855527800 0 +473826633360 0 +568591960032 0 +682310352038 0 +818772422446 0 +982526906935 0 +1179032288322 0 +1414838745986 0 +Estimated cardinality: 20196 +EncodingStats minTTL: 0 +EncodingStats minLocalDeletionTime: 1442880000 +EncodingStats minTimestamp: 1535025565275000 +KeyType: org.apache.cassandra.db.marshal.BytesType +ClusteringTypes: [org.apache.cassandra.db.marshal.UTF8Type] +StaticColumns: {C3:org.apache.cassandra.db.marshal.BytesType, C4:org.apache.cassandra.db.marshal.BytesType, C0:org.apache.cassandra.db.marshal.BytesType, C1:org.apache.cassandra.db.marshal.BytesType, C2:org.apache.cassandra.db.marshal.BytesType} +RegularColumns: {} +.... + +== Specify gc grace seconds + +To see the ratio of droppable tombstones given a configured gc grace +seconds, use the gc_grace_seconds option. Because the sstablemetadata +tool doesn't access the schema directly, this is a way to more +accurately estimate droppable tombstones -- for example, if you pass in +gc_grace_seconds matching what is configured in the schema. The +gc_grace_seconds value provided is subtracted from the curent machine +time (in seconds). + +ref: https://issues.apache.org/jira/browse/CASSANDRA-12208 + +Example: + +.... +sstablemetadata /var/lib/cassandra/data/keyspace1/standard1-41b52700b4ed11e896476d2c86545d91/mc-12-big-Data.db | grep "Estimated tombstone drop times" -A4 +Estimated tombstone drop times: +1536599100: 1 +1536599640: 1 +1536599700: 2 + +echo $(date +%s) +1536602005 + +# if gc_grace_seconds was configured at 100, all of the tombstones would be currently droppable +sstablemetadata --gc_grace_seconds 100 /var/lib/cassandra/data/keyspace1/standard1-41b52700b4ed11e896476d2c86545d91/mc-12-big-Data.db | grep "Estimated droppable tombstones" +Estimated droppable tombstones: 4.0E-5 + +# if gc_grace_seconds was configured at 4700, some of the tombstones would be currently droppable +sstablemetadata --gc_grace_seconds 4700 /var/lib/cassandra/data/keyspace1/standard1-41b52700b4ed11e896476d2c86545d91/mc-12-big-Data.db | grep "Estimated droppable tombstones" +Estimated droppable tombstones: 9.61111111111111E-6 + +# if gc_grace_seconds was configured at 100, none of the tombstones would be currently droppable +sstablemetadata --gc_grace_seconds 5000 /var/lib/cassandra/data/keyspace1/standard1-41b52700b4ed11e896476d2c86545d91/mc-12-big-Data.db | grep "Estimated droppable tombstones" +Estimated droppable tombstones: 0.0 +.... + +== Explanation of each value printed above + +|=== +|Value |Explanation + + +|SSTable |prefix of the sstable filenames related to this sstable +|Partitioner |partitioner type used to distribute data across nodes; +defined in cassandra.yaml +|Bloom Filter FP |precision of Bloom filter used +in reads; defined in the table definition +|Minimum timestamp |minimum +timestamp of any entry in this sstable, in epoch microseconds +|Maximum +timestamp |maximum timestamp of any entry in this sstable, in epoch +microseconds +|SSTable min local deletion time |minimum timestamp of +deletion date, based on TTL, in epoch seconds +|SSTable max local deletion +time |maximum timestamp of deletion date, based on TTL, in epoch seconds +|Compressor |blank (-) by default; if not blank, indicates type of +compression enabled on the table +|TTL min |time-to-live in seconds; +default 0 unless defined in the table definition +|TTL max |time-to-live in +seconds; default 0 unless defined in the table definition +|First token |lowest token and related key found in the sstable summary +|Last token |highest token and related key found in the sstable summary +|Estimated +droppable tombstones |ratio of tombstones to columns, using configured gc +grace seconds if relevant +|SSTable level |compaction level of this +sstable, if leveled compaction (LCS) is used +|Repaired at |the timestamp +this sstable was marked as repaired via sstablerepairedset, in epoch +milliseconds +|Replay positions covered |the interval of time and commitlog +positions related to this sstable +|totalColumnsSet |number of cells in the +table +|totalRows |number of rows in the table +|Estimated tombstone drop +times |approximate number of rows that will expire, ordered by epoch +seconds +|Count Row Size Cell Count |two histograms in two columns; one +represents distribution of Row Size and the other represents +distribution of Cell Count +|Estimated cardinality an estimate of unique +values, used for compaction +|EncodingStats* minTTL |in epoch milliseconds +|EncodingStats* minLocalDeletionTime |in epoch seconds +|EncodingStats* +minTimestamp |in epoch microseconds +|KeyType |the type of partition key, +useful in reading and writing data from/to storage; defined in the table +definition +|ClusteringTypes |the type of clustering key, useful in reading +and writing data from/to storage; defined in the table definition +|StaticColumns |a list of the shared columns in the table +|RegularColumns |a +list of non-static, non-key columns in the table +|=== + +`*` For the encoding stats values, the delta of this and the current epoch +time is used when encoding and storing data in the most optimal way. diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableofflinerelevel.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstableofflinerelevel.adoc new file mode 100644 index 000000000000..71bffbf2335b --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstableofflinerelevel.adoc @@ -0,0 +1,94 @@ += sstableofflinerelevel + +When using LeveledCompactionStrategy, sstables can get stuck at L0 on a +recently bootstrapped node, and compactions may never catch up. This +tool is used to bump sstables into the highest level possible. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-8301 + +The way this is done is: sstables are storted by their last token. Given +an original leveling like this (note that [ ] indicates token +boundaries, not sstable size on disk; all sstables are the same size): + +.... +L3 [][][][][][][][][][][] +L2 [ ][ ][ ][ ] +L1 [ ][ ] +L0 [ ] +.... + +Will look like this after being dropped to L0 and sorted by last token +(and, to illustrate overlap, the overlapping ones are put on a new +line): + +.... +[][][] +[ ][][][] + [ ] +[ ] +... +.... + +Then, we start iterating from the smallest last-token and adding all +sstables that do not cause an overlap to a level. We will reconstruct +the original leveling top-down. Whenever we add an sstable to the level, +we remove it from the sorted list. Once we reach the end of the sorted +list, we have a full level, and can start over with the level below. + +If we end up with more levels than expected, we put all levels exceeding +the expected in L0, for example, original L0 files will most likely be +put in a level of its own since they most often overlap many other +sstables. + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstableofflinerelevel [--dry-run]
+ +== Doing a dry run + +Use the --dry-run option to see the current level distribution and +predicted level after the change. + +Example: + +.... +sstableofflinerelevel --dry-run keyspace eventlog +For sstables in /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753: +Current leveling: +L0=2 +Potential leveling: +L0=1 +L1=1 +.... + +== Running a relevel + +Example: + +.... +sstableofflinerelevel keyspace eventlog +For sstables in /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753: +Current leveling: +L0=2 +New leveling: +L0=1 +L1=1 +.... + +== Keyspace or table not found + +If an invalid keyspace and/or table is provided, an exception will be +thrown. + +Example: + +.... +sstableofflinerelevel --dry-run keyspace evenlog + +Exception in thread "main" java.lang.IllegalArgumentException: Unknown keyspace/columnFamily keyspace1.evenlog + at org.apache.cassandra.tools.SSTableOfflineRelevel.main(SSTableOfflineRelevel.java:96) +.... diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablerepairedset.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstablerepairedset.adoc new file mode 100644 index 000000000000..e18859b8bc88 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstablerepairedset.adoc @@ -0,0 +1,83 @@ += sstablerepairedset + +Repairs can take a very long time in some environments, for large sizes +of data. Use this tool to set the repairedAt status on a given set of +sstables, so that repairs can be run on only un-repaired sstables if +desired. + +Note that running a repair (e.g., via nodetool repair) doesn't set the +status of this metadata. Only setting the status of this metadata via +this tool does. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-5351 + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstablerepairedset --really-set [-f | +] + +[cols=",",] +|=== +|--really-set |required if you want to really set the status +|--is-repaired |set the repairedAt status to the last modified time +|--is-unrepaired |set the repairedAt status to 0 +|-f |use a file containing a list of sstables as the input +|=== + +== Set a lot of sstables to unrepaired status + +There are many ways to do this programmatically. This way would likely +include variables for the keyspace and table. + +Example: + +.... +find /var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/* -name "*Data.db" -print0 | xargs -0 -I % sstablerepairedset --really-set --is-unrepaired % +.... + +== Set one to many sstables to repaired status + +Set the repairedAt status after a repair to mark the sstables as +repaired. Again, using variables for the keyspace and table names is a +good choice. + +Example: + +.... +nodetool repair keyspace1 standard1 +find /var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/* -name "*Data.db" -print0 | xargs -0 -I % sstablerepairedset --really-set --is-repaired % +.... + +== Print metadata showing repaired status + +sstablemetadata can be used to view the status set or unset using this +command. + +Example: + +____ +sstablerepairedset --really-set --is-repaired +/var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/mc-1-big-Data.db +sstablemetadata +/var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/mc-1-big-Data.db +| grep "Repaired at" Repaired at: 1534443974000 + +sstablerepairedset --really-set --is-unrepaired +/var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/mc-1-big-Data.db +sstablemetadata +/var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/mc-1-big-Data.db +| grep "Repaired at" Repaired at: 0 +____ + +== Using command in a script + +If you know you ran repair 2 weeks ago, you can do something like the +following: + +.... +sstablerepairset --is-repaired -f <(find /var/lib/cassandra/data/.../ -iname "*Data.db*" -mtime +14) +.... diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablescrub.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstablescrub.adoc new file mode 100644 index 000000000000..1826e9ea8f7d --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstablescrub.adoc @@ -0,0 +1,102 @@ += sstablescrub + +Fix a broken sstable. The scrub process rewrites the sstable, skipping +any corrupted rows. Because these rows are lost, follow this process +with a repair. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-4321 + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstablescrub
+ +[cols=",",] +|=== +|--debug |display stack traces + +|-h,--help |display this help message + +|-m,--manifest-check |only check and repair the leveled manifest, +without actually scrubbing the sstables + +|-n,--no-validate |do not validate columns using column validator + +|-r,--reinsert-overflowed-ttl |Rewrites rows with overflowed expiration +date affected by CASSANDRA-14092 with the maximum supported expiration +date of 2038-01-19T03:14:06+00:00. The rows are rewritten with the +original timestamp incremented by one millisecond to override/supersede +any potential tombstone that may have been generated during compaction +of the affected rows. + +|-s,--skip-corrupted |skip corrupt rows in counter tables + +|-v,--verbose |verbose output +|=== + +== Basic Scrub + +The scrub without options will do a snapshot first, then write all +non-corrupted files to a new sstable. + +Example: + +.... +sstablescrub keyspace1 standard1 +Pre-scrub sstables snapshotted into snapshot pre-scrub-1534424070883 +Scrubbing BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-6365332094dd11e88f324f9c503e4753/mc-5-big-Data.db') (17.142MiB) +Scrub of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-6365332094dd11e88f324f9c503e4753/mc-5-big-Data.db') complete: 73367 rows in new sstable and 0 empty (tombstoned) rows dropped +Checking leveled manifest +.... + +== Scrub without Validation + +ref: https://issues.apache.org/jira/browse/CASSANDRA-9406 + +Use the --no-validate option to retain data that may be misrepresented +(e.g., an integer stored in a long field) but not corrupt. This data +usually doesn not present any errors to the client. + +Example: + +.... +sstablescrub --no-validate keyspace1 standard1 +Pre-scrub sstables snapshotted into snapshot pre-scrub-1536243158517 +Scrubbing BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-bc9cf530b1da11e886c66d2c86545d91/mc-2-big-Data.db') (4.482MiB) +Scrub of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-bc9cf530b1da11e886c66d2c86545d91/mc-2-big-Data.db') complete; looks like all 0 rows were tombstoned +.... + +== Skip Corrupted Counter Tables + +ref: https://issues.apache.org/jira/browse/CASSANDRA-5930 + +If counter tables are corrupted in a way that prevents sstablescrub from +completing, you can use the --skip-corrupted option to skip scrubbing +those counter tables. This workaround is not necessary in versions 2.0+. + +Example: + +.... +sstablescrub --skip-corrupted keyspace1 counter1 +.... + +== Dealing with Overflow Dates + +ref: https://issues.apache.org/jira/browse/CASSANDRA-14092 + +Using the option --reinsert-overflowed-ttl allows a rewriting of rows +that had a max TTL going over the maximum (causing an overflow). + +Example: + +.... +sstablescrub --reinsert-overflowed-ttl keyspace1 counter1 +.... + +== Manifest Check + +As of Cassandra version 2.0, this option is no longer relevant, since +level data was moved from a separate manifest into the sstable metadata. diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablesplit.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstablesplit.adoc new file mode 100644 index 000000000000..f62b86896f48 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstablesplit.adoc @@ -0,0 +1,96 @@ += sstablesplit + +Big sstable files can take up a lot of disk space. The sstablesplit tool +can be used to split those large files into smaller files. It can be +thought of as a type of anticompaction. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-4766 + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstablesplit + +[cols=",",] +|=== +|--debug |display stack traces + +|-h, --help |display this help message + +|--no-snapshot |don't snapshot the sstables before splitting + +|-s, --size |maximum size in MB for the output sstables (default: +50) +|=== + +This command should be run with Cassandra stopped. Note: the script does +not verify that Cassandra is stopped. + +== Split a File + +Split a large sstable into smaller sstables. By default, unless the +option --no-snapshot is added, a snapshot will be done of the original +sstable and placed in the snapshots folder. + +Example: + +.... +sstablesplit /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db + +Pre-split sstables snapshotted into snapshot pre-split-1533144514795 +.... + +== Split Multiple Files + +Wildcards can be used in the filename portion of the command to split +multiple files. + +Example: + +.... +sstablesplit --size 1 /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-1* +.... + +== Attempt to Split a Small File + +If the file is already smaller than the split size provided, the sstable +will not be split. + +Example: + +.... +sstablesplit /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db +Skipping /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db: it's size (1.442 MB) is less than the split size (50 MB) +No sstables needed splitting. +.... + +== Split a File into Specified Size + +The default size used for splitting is 50MB. Specify another size with +the --size option. The size is in megabytes (MB). Specify only the +number, not the units. For example --size 50 is correct, but --size 50MB +is not. + +Example: + +.... +sstablesplit --size 1 /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-9-big-Data.db +Pre-split sstables snapshotted into snapshot pre-split-1533144996008 +.... + +== Split Without Snapshot + +By default, sstablesplit will create a snapshot before splitting. If a +snapshot is not needed, use the --no-snapshot option to skip it. + +Example: + +.... +sstablesplit --size 1 --no-snapshot /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-11-big-Data.db +.... + +Note: There is no output, but you can see the results in your file +system. diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableupgrade.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstableupgrade.adoc new file mode 100644 index 000000000000..ad193e2f5a56 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstableupgrade.adoc @@ -0,0 +1,136 @@ += sstableupgrade + +Upgrade the sstables in the given table (or snapshot) to the current +version of Cassandra. This process is typically done after a Cassandra +version upgrade. This operation will rewrite the sstables in the +specified table to match the currently installed version of Cassandra. +The sstableupgrade command can also be used to downgrade sstables to a +previous version. + +The snapshot option will only upgrade the specified snapshot. Upgrading +snapshots is required before attempting to restore a snapshot taken in a +major version older than the major version Cassandra is currently +running. This will replace the files in the given snapshot as well as +break any hard links to live sstables. + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstableupgrade
[snapshot_name] + +[cols=",",] +|=== +|--debug |display stack traces +|-h,--help |display this help message +|-k,--keep-source |do not delete the source sstables +|=== + +== Rewrite tables to the current Cassandra version + +Start with a set of sstables in one version of Cassandra: + +.... +ls -al /tmp/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/ +... +-rw-r--r-- 1 user wheel 348 Aug 22 13:45 keyspace1-standard1-ka-1-CRC.db +-rw-r--r-- 1 user wheel 5620000 Aug 22 13:45 keyspace1-standard1-ka-1-Data.db +-rw-r--r-- 1 user wheel 10 Aug 22 13:45 keyspace1-standard1-ka-1-Digest.sha1 +-rw-r--r-- 1 user wheel 25016 Aug 22 13:45 keyspace1-standard1-ka-1-Filter.db +-rw-r--r-- 1 user wheel 480000 Aug 22 13:45 keyspace1-standard1-ka-1-Index.db +-rw-r--r-- 1 user wheel 9895 Aug 22 13:45 keyspace1-standard1-ka-1-Statistics.db +-rw-r--r-- 1 user wheel 3562 Aug 22 13:45 keyspace1-standard1-ka-1-Summary.db +-rw-r--r-- 1 user wheel 79 Aug 22 13:45 keyspace1-standard1-ka-1-TOC.txt +.... + +After upgrading the Cassandra version, upgrade the sstables: + +.... +sstableupgrade keyspace1 standard1 +Found 1 sstables that need upgrading. +Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/keyspace1-standard1-ka-1-Data.db') +Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/keyspace1-standard1-ka-1-Data.db') complete. + +ls -al /tmp/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/ +... +drwxr-xr-x 2 user wheel 64 Aug 22 13:48 backups +-rw-r--r-- 1 user wheel 292 Aug 22 13:48 mc-2-big-CRC.db +-rw-r--r-- 1 user wheel 4599475 Aug 22 13:48 mc-2-big-Data.db +-rw-r--r-- 1 user wheel 10 Aug 22 13:48 mc-2-big-Digest.crc32 +-rw-r--r-- 1 user wheel 25256 Aug 22 13:48 mc-2-big-Filter.db +-rw-r--r-- 1 user wheel 330807 Aug 22 13:48 mc-2-big-Index.db +-rw-r--r-- 1 user wheel 10312 Aug 22 13:48 mc-2-big-Statistics.db +-rw-r--r-- 1 user wheel 3506 Aug 22 13:48 mc-2-big-Summary.db +-rw-r--r-- 1 user wheel 80 Aug 22 13:48 mc-2-big-TOC.txt +.... + +== Rewrite tables to the current Cassandra version, and keep tables in old version + +Again, starting with a set of sstables in one version: + +.... +ls -al /tmp/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/ +... +-rw-r--r-- 1 user wheel 348 Aug 22 13:58 keyspace1-standard1-ka-1-CRC.db +-rw-r--r-- 1 user wheel 5620000 Aug 22 13:58 keyspace1-standard1-ka-1-Data.db +-rw-r--r-- 1 user wheel 10 Aug 22 13:58 keyspace1-standard1-ka-1-Digest.sha1 +-rw-r--r-- 1 user wheel 25016 Aug 22 13:58 keyspace1-standard1-ka-1-Filter.db +-rw-r--r-- 1 user wheel 480000 Aug 22 13:58 keyspace1-standard1-ka-1-Index.db +-rw-r--r-- 1 user wheel 9895 Aug 22 13:58 keyspace1-standard1-ka-1-Statistics.db +-rw-r--r-- 1 user wheel 3562 Aug 22 13:58 keyspace1-standard1-ka-1-Summary.db +-rw-r--r-- 1 user wheel 79 Aug 22 13:58 keyspace1-standard1-ka-1-TOC.txt +.... + +After upgrading the Cassandra version, upgrade the sstables, retaining +the original sstables: + +.... +sstableupgrade keyspace1 standard1 -k +Found 1 sstables that need upgrading. +Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/keyspace1-standard1-ka-1-Data.db') +Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/keyspace1-standard1-ka-1-Data.db') complete. + +ls -al /tmp/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/ +... +drwxr-xr-x 2 user wheel 64 Aug 22 14:00 backups +-rw-r--r--@ 1 user wheel 348 Aug 22 13:58 keyspace1-standard1-ka-1-CRC.db +-rw-r--r--@ 1 user wheel 5620000 Aug 22 13:58 keyspace1-standard1-ka-1-Data.db +-rw-r--r--@ 1 user wheel 10 Aug 22 13:58 keyspace1-standard1-ka-1-Digest.sha1 +-rw-r--r--@ 1 user wheel 25016 Aug 22 13:58 keyspace1-standard1-ka-1-Filter.db +-rw-r--r--@ 1 user wheel 480000 Aug 22 13:58 keyspace1-standard1-ka-1-Index.db +-rw-r--r--@ 1 user wheel 9895 Aug 22 13:58 keyspace1-standard1-ka-1-Statistics.db +-rw-r--r--@ 1 user wheel 3562 Aug 22 13:58 keyspace1-standard1-ka-1-Summary.db +-rw-r--r--@ 1 user wheel 79 Aug 22 13:58 keyspace1-standard1-ka-1-TOC.txt +-rw-r--r-- 1 user wheel 292 Aug 22 14:01 mc-2-big-CRC.db +-rw-r--r-- 1 user wheel 4596370 Aug 22 14:01 mc-2-big-Data.db +-rw-r--r-- 1 user wheel 10 Aug 22 14:01 mc-2-big-Digest.crc32 +-rw-r--r-- 1 user wheel 25256 Aug 22 14:01 mc-2-big-Filter.db +-rw-r--r-- 1 user wheel 330801 Aug 22 14:01 mc-2-big-Index.db +-rw-r--r-- 1 user wheel 10312 Aug 22 14:01 mc-2-big-Statistics.db +-rw-r--r-- 1 user wheel 3506 Aug 22 14:01 mc-2-big-Summary.db +-rw-r--r-- 1 user wheel 80 Aug 22 14:01 mc-2-big-TOC.txt +.... + +== Rewrite a snapshot to the current Cassandra version + +Find the snapshot name: + +.... +nodetool listsnapshots + +Snapshot Details: +Snapshot name Keyspace name Column family name True size Size on disk +... +1534962986979 keyspace1 standard1 5.85 MB 5.85 MB +.... + +Then rewrite the snapshot: + +.... +sstableupgrade keyspace1 standard1 1534962986979 +Found 1 sstables that need upgrading. +Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-5850e9f0a63711e8a5c5091830ac5256/snapshots/1534962986979/keyspace1-standard1-ka-1-Data.db') +Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-5850e9f0a63711e8a5c5091830ac5256/snapshots/1534962986979/keyspace1-standard1-ka-1-Data.db') complete. +.... diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableutil.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstableutil.adoc new file mode 100644 index 000000000000..9a718f12957f --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstableutil.adoc @@ -0,0 +1,102 @@ += sstableutil + +List sstable files for the provided table. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-7066 + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstableutil
+ +[cols=",",] +|=== +|-c, --cleanup |clean up any outstanding transactions + +|-d, --debug |display stack traces + +|-h, --help |display this help message + +|-o, --oplog |include operation logs + +|-t, --type |all (list all files, final or temporary), tmp (list +temporary files only), final (list final files only), + +|-v, --verbose |verbose output +|=== + +== List all sstables + +The basic command lists the sstables associated with a given +keyspace/table. + +Example: + +.... +sstableutil keyspace eventlog +Listing files... +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-CRC.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Digest.crc32 +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Filter.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Index.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Statistics.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Summary.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-TOC.txt +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-CRC.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Digest.crc32 +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Filter.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Index.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Statistics.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Summary.db +/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-TOC.txt +.... + +== List only temporary sstables + +Using the -t option followed by [.title-ref]#tmp# will list all +temporary sstables, in the format above. Temporary sstables were used in +pre-3.0 versions of Cassandra. + +== List only final sstables + +Using the -t option followed by [.title-ref]#final# will list all final +sstables, in the format above. In recent versions of Cassandra, this is +the same output as not using the -t option. + +== Include transaction logs + +Using the -o option will include transaction logs in the listing, in the +format above. + +== Clean up sstables + +Using the -c option removes any transactions left over from incomplete +writes or compactions. + +From the 3.0 upgrade notes: + +New transaction log files have been introduced to replace the +compactions_in_progress system table, temporary file markers (tmp and +tmplink) and sstable ancestors. 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. diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableverify.adoc b/doc/source/modules/cassandra/pages/tools/sstable/sstableverify.adoc new file mode 100644 index 000000000000..0af2f150db89 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/sstable/sstableverify.adoc @@ -0,0 +1,82 @@ += sstableverify + +Check sstable(s) for errors or corruption, for the provided table. + +ref: https://issues.apache.org/jira/browse/CASSANDRA-5791 + +Cassandra must be stopped before this tool is executed, or unexpected +results will occur. Note: the script does not verify that Cassandra is +stopped. + +== Usage + +sstableverify
+ +[cols=",",] +|=== +|--debug |display stack traces +|-e, --extended |extended verification +|-h, --help |display this help message +|-v, --verbose |verbose output +|=== + +== Basic Verification + +This is the basic verification. It is not a very quick process, and uses +memory. You might need to increase your memory settings if you have many +sstables. + +Example: + +.... +sstableverify keyspace eventlog +Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') (7.353MiB) +Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') +Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') +Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') (3.775MiB) +Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') +Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') +.... + +== Extended Verification + +During an extended verification, the individual values will be validated +for errors or corruption. This of course takes more time. + +Example: + +.... +root@DC1C1:/# sstableverify -e keyspace eventlog +WARN 14:08:06,255 Only 33.096GiB free across all data volumes. Consider adding more capacity to your cluster or removing obsolete snapshots +Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') (7.353MiB) +Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') +Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') +Extended Verify requested, proceeding to inspect values +Verify of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') succeeded. All 33211 rows read successfully +Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') (3.775MiB) +Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') +Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') +Extended Verify requested, proceeding to inspect values +Verify of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') succeeded. All 17068 rows read successfully +.... + +== Corrupted File + +Corrupted files are listed if they are detected by the script. + +Example: + +.... +sstableverify keyspace eventlog +Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') (7.416MiB) +Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') +Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') +Error verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db'): Corrupted: /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db +.... + +A similar (but less verbose) tool will show the suggested actions: + +.... +nodetool verify keyspace eventlog +error: Invalid SSTable /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db, please force repair +.... diff --git a/doc/source/tools/stress-example.yaml b/doc/source/modules/cassandra/pages/tools/stress-example.yaml similarity index 100% rename from doc/source/tools/stress-example.yaml rename to doc/source/modules/cassandra/pages/tools/stress-example.yaml diff --git a/doc/source/tools/stress-lwt-example.yaml b/doc/source/modules/cassandra/pages/tools/stress-lwt-example.yaml similarity index 100% rename from doc/source/tools/stress-lwt-example.yaml rename to doc/source/modules/cassandra/pages/tools/stress-lwt-example.yaml diff --git a/doc/source/modules/cassandra/pages/troubleshooting/finding_nodes.adoc b/doc/source/modules/cassandra/pages/troubleshooting/finding_nodes.adoc new file mode 100644 index 000000000000..c7849d901908 --- /dev/null +++ b/doc/source/modules/cassandra/pages/troubleshooting/finding_nodes.adoc @@ -0,0 +1,134 @@ += Find The Misbehaving Nodes + +The first step to troubleshooting a Cassandra issue is to use error +messages, metrics and monitoring information to identify if the issue +lies with the clients or the server and if it does lie with the server +find the problematic nodes in the Cassandra cluster. The goal is to +determine if this is a systemic issue (e.g. a query pattern that affects +the entire cluster) or isolated to a subset of nodes (e.g. neighbors +holding a shared token range or even a single node with bad hardware). + +There are many sources of information that help determine where the +problem lies. Some of the most common are mentioned below. + +== Client Logs and Errors + +Clients of the cluster often leave the best breadcrumbs to follow. +Perhaps client latencies or error rates have increased in a particular +datacenter (likely eliminating other datacenter's nodes), or clients are +receiving a particular kind of error code indicating a particular kind +of problem. Troubleshooters can often rule out many failure modes just +by reading the error messages. In fact, many Cassandra error messages +include the last coordinator contacted to help operators find nodes to +start with. + +Some common errors (likely culprit in parenthesis) assuming the client +has similar error names as the Datastax `drivers `: + +* `SyntaxError` (*client*). This and other `QueryValidationException` +indicate that the client sent a malformed request. These are rarely +server issues and usually indicate bad queries. +* `UnavailableException` (*server*): This means that the Cassandra +coordinator node has rejected the query as it believes that insufficent +replica nodes are available. If many coordinators are throwing this +error it likely means that there really are (typically) multiple nodes +down in the cluster and you can identify them using `nodetool status +` If only a single coordinator is throwing this error +it may mean that node has been partitioned from the rest. +* `OperationTimedOutException` (*server*): This is the most frequent +timeout message raised when clients set timeouts and means that the +query took longer than the supplied timeout. This is a _client side_ +timeout meaning that it took longer than the client specified timeout. +The error message will include the coordinator node that was last tried +which is usually a good starting point. This error usually indicates +either aggressive client timeout values or latent server +coordinators/replicas. +* `ReadTimeoutException` or `WriteTimeoutException` (*server*): These +are raised when clients do not specify lower timeouts and there is a +_coordinator_ timeouts based on the values supplied in the +`cassandra.yaml` configuration file. They usually indicate a serious +server side problem as the default values are usually multiple seconds. + +== Metrics + +If you have Cassandra `metrics ` reporting to a +centralized location such as https://graphiteapp.org/[Graphite] or +https://grafana.com/[Grafana] you can typically use those to narrow down +the problem. At this stage narrowing down the issue to a particular +datacenter, rack, or even group of nodes is the main goal. Some helpful +metrics to look at are: + +=== Errors + +Cassandra refers to internode messaging errors as "drops", and provided +a number of `Dropped Message Metrics ` to help narrow +down errors. If particular nodes are dropping messages actively, they +are likely related to the issue. + +=== Latency + +For timeouts or latency related issues you can start with `Table +Metrics ` by comparing Coordinator level metrics e.g. +`CoordinatorReadLatency` or `CoordinatorWriteLatency` with their +associated replica metrics e.g. `ReadLatency` or `WriteLatency`. Issues +usually show up on the `99th` percentile before they show up on the +`50th` percentile or the `mean`. While `maximum` coordinator latencies +are not typically very helpful due to the exponentially decaying +reservoir used internally to produce metrics, `maximum` replica +latencies that correlate with increased `99th` percentiles on +coordinators can help narrow down the problem. + +There are usually three main possibilities: + +[arabic] +. Coordinator latencies are high on all nodes, but only a few node's +local read latencies are high. This points to slow replica nodes and the +coordinator's are just side-effects. This usually happens when clients +are not token aware. +. Coordinator latencies and replica latencies increase at the same time +on the a few nodes. If clients are token aware this is almost always +what happens and points to slow replicas of a subset of token ranges +(only part of the ring). +. Coordinator and local latencies are high on many nodes. This usually +indicates either a tipping point in the cluster capacity (too many +writes or reads per second), or a new query pattern. + +It's important to remember that depending on the client's load balancing +behavior and consistency levels coordinator and replica metrics may or +may not correlate. In particular if you use `TokenAware` policies the +same node's coordinator and replica latencies will often increase +together, but if you just use normal `DCAwareRoundRobin` coordinator +latencies can increase with unrelated replica node's latencies. For +example: + +* `TokenAware` + `LOCAL_ONE`: should always have coordinator and replica +latencies on the same node rise together +* `TokenAware` + `LOCAL_QUORUM`: should always have coordinator and +multiple replica latencies rise together in the same datacenter. +* `TokenAware` + `QUORUM`: replica latencies in other datacenters can +affect coordinator latencies. +* `DCAwareRoundRobin` + `LOCAL_ONE`: coordinator latencies and unrelated +replica node's latencies will rise together. +* `DCAwareRoundRobin` + `LOCAL_QUORUM`: different coordinator and +replica latencies will rise together with little correlation. + +=== Query Rates + +Sometimes the `Table ` query rate metrics can help narrow +down load issues as "small" increase in coordinator queries per second +(QPS) may correlate with a very large increase in replica level QPS. +This most often happens with `BATCH` writes, where a client may send a +single `BATCH` query that might contain 50 statements in it, which if +you have 9 copies (RF=3, three datacenters) means that every coordinator +`BATCH` write turns into 450 replica writes! This is why keeping +`BATCH`'s to the same partition is so critical, otherwise you can +exhaust significant CPU capacitity with a "single" query. + +== Next Step: Investigate the Node(s) + +Once you have narrowed down the problem as much as possible (datacenter, +rack , node), login to one of the nodes using SSH and proceed to debug +using `logs `, `nodetool `, and +`os tools `. If you are not able to login you may still +have access to `logs ` and `nodetool ` +remotely. diff --git a/doc/source/modules/cassandra/pages/troubleshooting/index.adoc b/doc/source/modules/cassandra/pages/troubleshooting/index.adoc new file mode 100644 index 000000000000..f52796587e78 --- /dev/null +++ b/doc/source/modules/cassandra/pages/troubleshooting/index.adoc @@ -0,0 +1,19 @@ += Troubleshooting + +As any distributed database does, sometimes Cassandra breaks and you +will have to troubleshoot what is going on. Generally speaking you can +debug Cassandra like any other distributed Java program, meaning that +you have to find which machines in your cluster are misbehaving and then +isolate the problem using logs and tools. Luckily Cassandra had a great +set of instrospection tools to help you. + +These pages include a number of command examples demonstrating various +debugging and analysis techniques, mostly for Linux/Unix systems. If you +don't have access to the machines running Cassandra, or are running on +Windows or another operating system you may not be able to use the exact +commands but there are likely equivalent tools you can use. + +* xref:troubleshooting/finding_nodes.adoc[Finding nodes] +* xref:troubleshooting/reading_logs.adoc[Reading logs] +* xref:troubleshooting/use_nodetool.adoc[Using nodetool] +* xref:troubleshooting/use_tools.adoc[Using tools] diff --git a/doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc b/doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc new file mode 100644 index 000000000000..6cc3ffa157b9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc @@ -0,0 +1,269 @@ += Cassandra Logs + +Cassandra has rich support for logging and attempts to give operators +maximum insight into the database while at the same time limiting noise +to the logs. + +== Common Log Files + +Cassandra has three main logs, the `system.log`, `debug.log` and +`gc.log` which hold general logging messages, debugging logging +messages, and java garbage collection logs respectively. + +These logs by default live in `${CASSANDRA_HOME}/logs`, but most Linux +distributions relocate logs to `/var/log/cassandra`. Operators can tune +this location as well as what levels are logged using the provided +`logback.xml` file. + +=== `system.log` + +This log is the default Cassandra log and is a good place to start any +investigation. Some examples of activities logged to this log: + +* Uncaught exceptions. These can be very useful for debugging errors. +* `GCInspector` messages indicating long garbage collector pauses. When +long pauses happen Cassandra will print how long and also what was the +state of the system (thread state) at the time of that pause. This can +help narrow down a capacity issue (either not enough heap or not enough +spare CPU). +* Information about nodes joining and leaving the cluster as well as +token metadata (data ownersip) changes. This is useful for debugging +network partitions, data movements, and more. +* Keyspace/Table creation, modification, deletion. +* `StartupChecks` that ensure optimal configuration of the operating +system to run Cassandra +* Information about some background operational tasks (e.g. Index +Redistribution). + +As with any application, looking for `ERROR` or `WARN` lines can be a +great first step: + +.... +$ # Search for warnings or errors in the latest system.log +$ grep 'WARN\|ERROR' system.log | tail +... + +$ # Search for warnings or errors in all rotated system.log +$ zgrep 'WARN\|ERROR' system.log.* | less +... +.... + +=== `debug.log` + +This log contains additional debugging information that may be useful +when troubleshooting but may be much noiser than the normal +`system.log`. Some examples of activities logged to this log: + +* Information about compactions, including when they start, which +sstables they contain, and when they finish. +* Information about memtable flushes to disk, including when they +happened, how large the flushes were, and which commitlog segments the +flush impacted. + +This log can be _very_ noisy, so it is highly recommended to use `grep` +and other log analysis tools to dive deep. For example: + +.... +$ # Search for messages involving a CompactionTask with 5 lines of context +$ grep CompactionTask debug.log -C 5 +... + +$ # Look at the distribution of flush tasks per keyspace +$ grep "Enqueuing flush" debug.log | cut -f 10 -d ' ' | sort | uniq -c + 6 compaction_history: + 1 test_keyspace: + 2 local: + 17 size_estimates: + 17 sstable_activity: +.... + +=== `gc.log` + +The gc log is a standard Java GC log. With the default `jvm.options` +settings you get a lot of valuable information in this log such as +application pause times, and why pauses happened. This may help narrow +down throughput or latency issues to a mistuned JVM. For example you can +view the last few pauses: + +.... +$ grep stopped gc.log.0.current | tail +2018-08-29T00:19:39.522+0000: 3022663.591: Total time for which application threads were stopped: 0.0332813 seconds, Stopping threads took: 0.0008189 seconds +2018-08-29T00:19:44.369+0000: 3022668.438: Total time for which application threads were stopped: 0.0312507 seconds, Stopping threads took: 0.0007025 seconds +2018-08-29T00:19:49.796+0000: 3022673.865: Total time for which application threads were stopped: 0.0307071 seconds, Stopping threads took: 0.0006662 seconds +2018-08-29T00:19:55.452+0000: 3022679.521: Total time for which application threads were stopped: 0.0309578 seconds, Stopping threads took: 0.0006832 seconds +2018-08-29T00:20:00.127+0000: 3022684.197: Total time for which application threads were stopped: 0.0310082 seconds, Stopping threads took: 0.0007090 seconds +2018-08-29T00:20:06.583+0000: 3022690.653: Total time for which application threads were stopped: 0.0317346 seconds, Stopping threads took: 0.0007106 seconds +2018-08-29T00:20:10.079+0000: 3022694.148: Total time for which application threads were stopped: 0.0299036 seconds, Stopping threads took: 0.0006889 seconds +2018-08-29T00:20:15.739+0000: 3022699.809: Total time for which application threads were stopped: 0.0078283 seconds, Stopping threads took: 0.0006012 seconds +2018-08-29T00:20:15.770+0000: 3022699.839: Total time for which application threads were stopped: 0.0301285 seconds, Stopping threads took: 0.0003789 seconds +2018-08-29T00:20:15.798+0000: 3022699.867: Total time for which application threads were stopped: 0.0279407 seconds, Stopping threads took: 0.0003627 seconds +.... + +This shows a lot of valuable information including how long the +application was paused (meaning zero user queries were being serviced +during the e.g. 33ms JVM pause) as well as how long it took to enter the +safepoint. You can use this raw data to e.g. get the longest pauses: + +.... +$ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | tail | xargs -IX grep X gc.log.0.current | sort -k 1 +2018-08-28T17:13:40.520-0700: 1.193: Total time for which application threads were stopped: 0.0157914 seconds, Stopping threads took: 0.0000355 seconds +2018-08-28T17:13:41.206-0700: 1.879: Total time for which application threads were stopped: 0.0249811 seconds, Stopping threads took: 0.0000318 seconds +2018-08-28T17:13:41.638-0700: 2.311: Total time for which application threads were stopped: 0.0561130 seconds, Stopping threads took: 0.0000328 seconds +2018-08-28T17:13:41.677-0700: 2.350: Total time for which application threads were stopped: 0.0362129 seconds, Stopping threads took: 0.0000597 seconds +2018-08-28T17:13:41.781-0700: 2.454: Total time for which application threads were stopped: 0.0442846 seconds, Stopping threads took: 0.0000238 seconds +2018-08-28T17:13:41.976-0700: 2.649: Total time for which application threads were stopped: 0.0377115 seconds, Stopping threads took: 0.0000250 seconds +2018-08-28T17:13:42.172-0700: 2.845: Total time for which application threads were stopped: 0.0475415 seconds, Stopping threads took: 0.0001018 seconds +2018-08-28T17:13:42.825-0700: 3.498: Total time for which application threads were stopped: 0.0379155 seconds, Stopping threads took: 0.0000571 seconds +2018-08-28T17:13:43.574-0700: 4.247: Total time for which application threads were stopped: 0.0323812 seconds, Stopping threads took: 0.0000574 seconds +2018-08-28T17:13:44.602-0700: 5.275: Total time for which application threads were stopped: 0.0238975 seconds, Stopping threads took: 0.0000788 seconds +.... + +In this case any client waiting on a query would have experienced a +[.title-ref]#56ms# latency at 17:13:41. + +Note that GC pauses are not _link:[only] garbage collection, although +generally speaking high pauses with fast safepoints indicate a lack of +JVM heap or mistuned JVM GC algorithm. High pauses with slow safepoints +typically indicate that the JVM is having trouble entering a safepoint +which usually indicates slow disk drives (Cassandra makes heavy use of +memory mapped reads which the JVM doesn't know could have disk latency, +so the JVM safepoint logic doesn't handle a blocking memory mapped read +particularly well). + +Using these logs you can even get a pause distribution with something +like +https://github.com/bitly/data_hacks/blob/master/data_hacks/histogram.py[histogram.py]: + +.... +$ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | histogram.py +# NumSamples = 410293; Min = 0.00; Max = 11.49 +# Mean = 0.035346; Variance = 0.002216; SD = 0.047078; Median 0.036498 +# each ∎ represents a count of 5470 + 0.0001 - 1.1496 [410255]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ + 1.1496 - 2.2991 [ 15]: + 2.2991 - 3.4486 [ 5]: + 3.4486 - 4.5981 [ 1]: + 4.5981 - 5.7475 [ 5]: + 5.7475 - 6.8970 [ 9]: + 6.8970 - 8.0465 [ 1]: + 8.0465 - 9.1960 [ 0]: + 9.1960 - 10.3455 [ 0]: + 10.3455 - 11.4949 [ 2]: +.... + +We can see in this case while we have very good average performance +something is causing multi second JVM pauses ... In this case it was +mostly safepoint pauses caused by slow disks: + +.... +$ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | tail | xargs -IX grep X gc.log.0.current| sort -k 1 +2018-07-27T04:52:27.413+0000: 187831.482: Total time for which application threads were stopped: 6.5037022 seconds, Stopping threads took: 0.0005212 seconds +2018-07-30T23:38:18.354+0000: 514582.423: Total time for which application threads were stopped: 6.3262938 seconds, Stopping threads took: 0.0004882 seconds +2018-08-01T02:37:48.380+0000: 611752.450: Total time for which application threads were stopped: 10.3879659 seconds, Stopping threads took: 0.0004475 seconds +2018-08-06T22:04:14.990+0000: 1113739.059: Total time for which application threads were stopped: 6.0917409 seconds, Stopping threads took: 0.0005553 seconds +2018-08-14T00:04:06.091+0000: 1725730.160: Total time for which application threads were stopped: 6.0141054 seconds, Stopping threads took: 0.0004976 seconds +2018-08-17T06:23:06.755+0000: 2007670.824: Total time for which application threads were stopped: 6.0133694 seconds, Stopping threads took: 0.0006011 seconds +2018-08-23T06:35:46.068+0000: 2526830.137: Total time for which application threads were stopped: 6.4767751 seconds, Stopping threads took: 6.4426849 seconds +2018-08-23T06:36:29.018+0000: 2526873.087: Total time for which application threads were stopped: 11.4949489 seconds, Stopping threads took: 11.4638297 seconds +2018-08-23T06:37:12.671+0000: 2526916.741: Total time for which application threads were stopped: 6.3867003 seconds, Stopping threads took: 6.3507166 seconds +2018-08-23T06:37:47.156+0000: 2526951.225: Total time for which application threads were stopped: 7.9528200 seconds, Stopping threads took: 7.9197756 seconds +.... + +Sometimes reading and understanding java GC logs is hard, but you can +take the raw GC files and visualize them using tools such as +https://github.com/chewiebug/GCViewer[GCViewer] which take the Cassandra +GC log as input and show you detailed visual information on your garbage +collection performance. This includes pause analysis as well as +throughput information. For a stable Cassandra JVM you probably want to +aim for pauses less than [.title-ref]#200ms# and GC throughput greater +than [.title-ref]#99%# (ymmv). + +Java GC pauses are one of the leading causes of tail latency in +Cassandra (along with drive latency) so sometimes this information can +be crucial while debugging tail latency issues. + +== Getting More Information + +If the default logging levels are insuficient, `nodetool` can set higher +or lower logging levels for various packages and classes using the +`nodetool setlogginglevel` command. Start by viewing the current levels: + +.... +$ nodetool getlogginglevels + +Logger Name Log Level +ROOT INFO +org.apache.cassandra DEBUG +.... + +Perhaps the `Gossiper` is acting up and we wish to enable it at `TRACE` +level for even more insight: + +.... +$ nodetool setlogginglevel org.apache.cassandra.gms.Gossiper TRACE + +$ nodetool getlogginglevels + +Logger Name Log Level +ROOT INFO +org.apache.cassandra DEBUG +org.apache.cassandra.gms.Gossiper TRACE + +$ grep TRACE debug.log | tail -2 +TRACE [GossipStage:1] 2018-07-04 17:07:47,879 Gossiper.java:1234 - Updating +heartbeat state version to 2344 from 2343 for 127.0.0.2:7000 ... +TRACE [GossipStage:1] 2018-07-04 17:07:47,879 Gossiper.java:923 - local +heartbeat version 2341 greater than 2340 for 127.0.0.1:7000 +.... + +Note that any changes made this way are reverted on next Cassandra +process restart. To make the changes permanent add the appropriate rule +to `logback.xml`. + +[source,diff] +---- +diff --git a/conf/logback.xml b/conf/logback.xml +index b2c5b10..71b0a49 100644 +--- a/conf/logback.xml ++++ b/conf/logback.xml +@@ -98,4 +98,5 @@ appender reference in the root level section below. + + + ++ + +---- + +=== Full Query Logger + +Cassandra 4.0 additionally ships with support for full query logging. +This is a highly performant binary logging tool which captures Cassandra +queries in real time, writes them (if possible) to a log file, and +ensures the total size of the capture does not exceed a particular +limit. FQL is enabled with `nodetool` and the logs are read with the +provided `bin/fqltool` utility: + +.... +$ mkdir /var/tmp/fql_logs +$ nodetool enablefullquerylog --path /var/tmp/fql_logs + +# ... do some querying + +$ bin/fqltool dump /var/tmp/fql_logs/20180705-00.cq4 | tail +Query time: 1530750927224 +Query: SELECT * FROM system_virtual_schema.columns WHERE keyspace_name = +'system_views' AND table_name = 'sstable_tasks'; +Values: + +Type: single +Protocol version: 4 +Query time: 1530750934072 +Query: select * from keyspace1.standard1 ; +Values: + +$ nodetool disablefullquerylog +.... + +Note that if you want more information than this tool provides, there +are other live capture options available such as +`packet capture `. diff --git a/doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc b/doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc new file mode 100644 index 000000000000..a97093d85089 --- /dev/null +++ b/doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc @@ -0,0 +1,236 @@ += Use Nodetool + +Cassandra's `nodetool` allows you to narrow problems from the cluster +down to a particular node and gives a lot of insight into the state of +the Cassandra process itself. There are dozens of useful commands (see +`nodetool help` for all the commands), but briefly some of the most +useful for troubleshooting: + +[[nodetool-status]] +== Cluster Status + +You can use `nodetool status` to assess status of the cluster: + +.... +$ nodetool status + +Datacenter: dc1 +======================= +Status=Up/Down +|/ State=Normal/Leaving/Joining/Moving +-- Address Load Tokens Owns (effective) Host ID Rack +UN 127.0.1.1 4.69 GiB 1 100.0% 35ea8c9f-b7a2-40a7-b9c5-0ee8b91fdd0e r1 +UN 127.0.1.2 4.71 GiB 1 100.0% 752e278f-b7c5-4f58-974b-9328455af73f r2 +UN 127.0.1.3 4.69 GiB 1 100.0% 9dc1a293-2cc0-40fa-a6fd-9e6054da04a7 r3 +.... + +In this case we can see that we have three nodes in one datacenter with +about 4.6GB of data each and they are all "up". The up/down status of a +node is independently determined by every node in the cluster, so you +may have to run `nodetool status` on multiple nodes in a cluster to see +the full view. + +You can use `nodetool status` plus a little grep to see which nodes are +down: + +.... +$ nodetool status | grep -v '^UN' +Datacenter: dc1 +=============== +Status=Up/Down +|/ State=Normal/Leaving/Joining/Moving +-- Address Load Tokens Owns (effective) Host ID Rack +Datacenter: dc2 +=============== +Status=Up/Down +|/ State=Normal/Leaving/Joining/Moving +-- Address Load Tokens Owns (effective) Host ID Rack +DN 127.0.0.5 105.73 KiB 1 33.3% df303ac7-61de-46e9-ac79-6e630115fd75 r1 +.... + +In this case there are two datacenters and there is one node down in +datacenter `dc2` and rack `r1`. This may indicate an issue on +`127.0.0.5` warranting investigation. + +[[nodetool-proxyhistograms]] +== Coordinator Query Latency + +You can view latency distributions of coordinator read and write latency +to help narrow down latency issues using `nodetool proxyhistograms`: + +.... +$ nodetool proxyhistograms +Percentile Read Latency Write Latency Range Latency CAS Read Latency CAS Write Latency View Write Latency + (micros) (micros) (micros) (micros) (micros) (micros) +50% 454.83 219.34 0.00 0.00 0.00 0.00 +75% 545.79 263.21 0.00 0.00 0.00 0.00 +95% 654.95 315.85 0.00 0.00 0.00 0.00 +98% 785.94 379.02 0.00 0.00 0.00 0.00 +99% 3379.39 2346.80 0.00 0.00 0.00 0.00 +Min 42.51 105.78 0.00 0.00 0.00 0.00 +Max 25109.16 43388.63 0.00 0.00 0.00 0.00 +.... + +Here you can see the full latency distribution of reads, writes, range +requests (e.g. `select * from keyspace.table`), CAS read (compare phase +of CAS) and CAS write (set phase of compare and set). These can be +useful for narrowing down high level latency problems, for example in +this case if a client had a 20 millisecond timeout on their reads they +might experience the occasional timeout from this node but less than 1% +(since the 99% read latency is 3.3 milliseconds < 20 milliseconds). + +[[nodetool-tablehistograms]] +== Local Query Latency + +If you know which table is having latency/error issues, you can use +`nodetool tablehistograms` to get a better idea of what is happening +locally on a node: + +.... +$ nodetool tablehistograms keyspace table +Percentile SSTables Write Latency Read Latency Partition Size Cell Count + (micros) (micros) (bytes) +50% 0.00 73.46 182.79 17084 103 +75% 1.00 88.15 315.85 17084 103 +95% 2.00 126.93 545.79 17084 103 +98% 2.00 152.32 654.95 17084 103 +99% 2.00 182.79 785.94 17084 103 +Min 0.00 42.51 24.60 14238 87 +Max 2.00 12108.97 17436.92 17084 103 +.... + +This shows you percentile breakdowns particularly critical metrics. + +The first column contains how many sstables were read per logical read. +A very high number here indicates that you may have chosen the wrong +compaction strategy, e.g. `SizeTieredCompactionStrategy` typically has +many more reads per read than `LeveledCompactionStrategy` does for +update heavy workloads. + +The second column shows you a latency breakdown of _local_ write +latency. In this case we see that while the p50 is quite good at 73 +microseconds, the maximum latency is quite slow at 12 milliseconds. High +write max latencies often indicate a slow commitlog volume (slow to +fsync) or large writes that quickly saturate commitlog segments. + +The third column shows you a latency breakdown of _local_ read latency. +We can see that local Cassandra reads are (as expected) slower than +local writes, and the read speed correlates highly with the number of +sstables read per read. + +The fourth and fifth columns show distributions of partition size and +column count per partition. These are useful for determining if the +table has on average skinny or wide partitions and can help you isolate +bad data patterns. For example if you have a single cell that is 2 +megabytes, that is probably going to cause some heap pressure when it's +read. + +[[nodetool-tpstats]] +== Threadpool State + +You can use `nodetool tpstats` to view the current outstanding requests +on a particular node. This is useful for trying to find out which +resource (read threads, write threads, compaction, request response +threads) the Cassandra process lacks. For example: + +.... +$ nodetool tpstats +Pool Name Active Pending Completed Blocked All time blocked +ReadStage 2 0 12 0 0 +MiscStage 0 0 0 0 0 +CompactionExecutor 0 0 1940 0 0 +MutationStage 0 0 0 0 0 +GossipStage 0 0 10293 0 0 +Repair-Task 0 0 0 0 0 +RequestResponseStage 0 0 16 0 0 +ReadRepairStage 0 0 0 0 0 +CounterMutationStage 0 0 0 0 0 +MemtablePostFlush 0 0 83 0 0 +ValidationExecutor 0 0 0 0 0 +MemtableFlushWriter 0 0 30 0 0 +ViewMutationStage 0 0 0 0 0 +CacheCleanupExecutor 0 0 0 0 0 +MemtableReclaimMemory 0 0 30 0 0 +PendingRangeCalculator 0 0 11 0 0 +SecondaryIndexManagement 0 0 0 0 0 +HintsDispatcher 0 0 0 0 0 +Native-Transport-Requests 0 0 192 0 0 +MigrationStage 0 0 14 0 0 +PerDiskMemtableFlushWriter_0 0 0 30 0 0 +Sampler 0 0 0 0 0 +ViewBuildExecutor 0 0 0 0 0 +InternalResponseStage 0 0 0 0 0 +AntiEntropyStage 0 0 0 0 0 + +Message type Dropped Latency waiting in queue (micros) + 50% 95% 99% Max +READ 0 N/A N/A N/A N/A +RANGE_SLICE 0 0.00 0.00 0.00 0.00 +_TRACE 0 N/A N/A N/A N/A +HINT 0 N/A N/A N/A N/A +MUTATION 0 N/A N/A N/A N/A +COUNTER_MUTATION 0 N/A N/A N/A N/A +BATCH_STORE 0 N/A N/A N/A N/A +BATCH_REMOVE 0 N/A N/A N/A N/A +REQUEST_RESPONSE 0 0.00 0.00 0.00 0.00 +PAGED_RANGE 0 N/A N/A N/A N/A +READ_REPAIR 0 N/A N/A N/A N/A +.... + +This command shows you all kinds of interesting statistics. The first +section shows a detailed breakdown of threadpools for each Cassandra +stage, including how many threads are current executing (Active) and how +many are waiting to run (Pending). Typically if you see pending +executions in a particular threadpool that indicates a problem localized +to that type of operation. For example if the `RequestResponseState` +queue is backing up, that means that the coordinators are waiting on a +lot of downstream replica requests and may indicate a lack of token +awareness, or very high consistency levels being used on read requests +(for example reading at `ALL` ties up RF `RequestResponseState` threads +whereas `LOCAL_ONE` only uses a single thread in the `ReadStage` +threadpool). On the other hand if you see a lot of pending compactions +that may indicate that your compaction threads cannot keep up with the +volume of writes and you may need to tune either the compaction strategy +or the `concurrent_compactors` or `compaction_throughput` options. + +The second section shows drops (errors) and latency distributions for +all the major request types. Drops are cumulative since process start, +but if you have any that indicate a serious problem as the default +timeouts to qualify as a drop are quite high (~5-10 seconds). Dropped +messages often warrants further investigation. + +[[nodetool-compactionstats]] +== Compaction State + +As Cassandra is a LSM datastore, Cassandra sometimes has to compact +sstables together, which can have adverse effects on performance. In +particular, compaction uses a reasonable quantity of CPU resources, +invalidates large quantities of the OS +https://en.wikipedia.org/wiki/Page_cache[page cache], and can put a lot +of load on your disk drives. There are great `os tools ` to +determine if this is the case, but often it's a good idea to check if +compactions are even running using `nodetool compactionstats`: + +.... +$ nodetool compactionstats +pending tasks: 2 +- keyspace.table: 2 + +id compaction type keyspace table completed total unit progress +2062b290-7f3a-11e8-9358-cd941b956e60 Compaction keyspace table 21848273 97867583 bytes 22.32% +Active compaction remaining time : 0h00m04s +.... + +In this case there is a single compaction running on the +`keyspace.table` table, has completed 21.8 megabytes of 97 and Cassandra +estimates (based on the configured compaction throughput) that this will +take 4 seconds. You can also pass `-H` to get the units in a human +readable format. + +Generally each running compaction can consume a single core, but the +more you do in parallel the faster data compacts. Compaction is crucial +to ensuring good read performance so having the right balance of +concurrent compactions such that compactions complete quickly but don't +take too many resources away from query threads is very important for +performance. If you notice compaction unable to keep up, try tuning +Cassandra's `concurrent_compactors` or `compaction_throughput` options. diff --git a/doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc b/doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc new file mode 100644 index 000000000000..03ceec35db07 --- /dev/null +++ b/doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc @@ -0,0 +1,564 @@ += Diving Deep, Use External Tools + +Machine access allows operators to dive even deeper than logs and +`nodetool` allow. While every Cassandra operator may have their personal +favorite toolsets for troubleshooting issues, this page contains some of +the most common operator techniques and examples of those tools. Many of +these commands work only on Linux, but if you are deploying on a +different operating system you may have access to other substantially +similar tools that assess similar OS level metrics and processes. + +== JVM Tooling + +The JVM ships with a number of useful tools. Some of them are useful for +debugging Cassandra issues, especially related to heap and execution +stacks. + +*NOTE*: There are two common gotchas with JVM tooling and Cassandra: + +[arabic] +. By default Cassandra ships with `-XX:+PerfDisableSharedMem` set to +prevent long pauses (see `CASSANDRA-9242` and `CASSANDRA-9483` for +details). If you want to use JVM tooling you can instead have `/tmp` +mounted on an in memory `tmpfs` which also effectively works around +`CASSANDRA-9242`. +. Make sure you run the tools as the same user as Cassandra is running +as, e.g. if the database is running as `cassandra` the tool also has to +be run as `cassandra`, e.g. via `sudo -u cassandra `. + +=== Garbage Collection State (jstat) + +If you suspect heap pressure you can use `jstat` to dive deep into the +garbage collection state of a Cassandra process. This command is always +safe to run and yields detailed heap information including eden heap +usage (E), old generation heap usage (O), count of eden collections +(YGC), time spend in eden collections (YGCT), old/mixed generation +collections (FGC) and time spent in old/mixed generation collections +(FGCT): + +.... +jstat -gcutil 500ms + S0 S1 E O M CCS YGC YGCT FGC FGCT GCT + 0.00 0.00 81.53 31.16 93.07 88.20 12 0.151 3 0.257 0.408 + 0.00 0.00 82.36 31.16 93.07 88.20 12 0.151 3 0.257 0.408 + 0.00 0.00 82.36 31.16 93.07 88.20 12 0.151 3 0.257 0.408 + 0.00 0.00 83.19 31.16 93.07 88.20 12 0.151 3 0.257 0.408 + 0.00 0.00 83.19 31.16 93.07 88.20 12 0.151 3 0.257 0.408 + 0.00 0.00 84.19 31.16 93.07 88.20 12 0.151 3 0.257 0.408 + 0.00 0.00 84.19 31.16 93.07 88.20 12 0.151 3 0.257 0.408 + 0.00 0.00 85.03 31.16 93.07 88.20 12 0.151 3 0.257 0.408 + 0.00 0.00 85.03 31.16 93.07 88.20 12 0.151 3 0.257 0.408 + 0.00 0.00 85.94 31.16 93.07 88.20 12 0.151 3 0.257 0.408 +.... + +In this case we see we have a relatively healthy heap profile, with +31.16% old generation heap usage and 83% eden. If the old generation +routinely is above 75% then you probably need more heap (assuming CMS +with a 75% occupancy threshold). If you do have such persistently high +old gen that often means you either have under-provisioned the old +generation heap, or that there is too much live data on heap for +Cassandra to collect (e.g. because of memtables). Another thing to watch +for is time between young garbage collections (YGC), which indicate how +frequently the eden heap is collected. Each young gc pause is about +20-50ms, so if you have a lot of them your clients will notice in their +high percentile latencies. + +=== Thread Information (jstack) + +To get a point in time snapshot of exactly what Cassandra is doing, run +`jstack` against the Cassandra PID. *Note* that this does pause the JVM +for a very brief period (<20ms).: + +.... +$ jstack > threaddump + +# display the threaddump +$ cat threaddump +... + +# look at runnable threads +$grep RUNNABLE threaddump -B 1 +"Attach Listener" #15 daemon prio=9 os_prio=0 tid=0x00007f829c001000 nid=0x3a74 waiting on condition [0x0000000000000000] + java.lang.Thread.State: RUNNABLE +-- +"DestroyJavaVM" #13 prio=5 os_prio=0 tid=0x00007f82e800e000 nid=0x2a19 waiting on condition [0x0000000000000000] + java.lang.Thread.State: RUNNABLE +-- +"JPS thread pool" #10 prio=5 os_prio=0 tid=0x00007f82e84d0800 nid=0x2a2c runnable [0x00007f82d0856000] + java.lang.Thread.State: RUNNABLE +-- +"Service Thread" #9 daemon prio=9 os_prio=0 tid=0x00007f82e80d7000 nid=0x2a2a runnable [0x0000000000000000] + java.lang.Thread.State: RUNNABLE +-- +"C1 CompilerThread3" #8 daemon prio=9 os_prio=0 tid=0x00007f82e80cc000 nid=0x2a29 waiting on condition [0x0000000000000000] + java.lang.Thread.State: RUNNABLE +-- +... + +# Note that the nid is the Linux thread id +.... + +Some of the most important information in the threaddumps are +waiting/blocking threads, including what locks or monitors the thread is +blocking/waiting on. + +== Basic OS Tooling + +A great place to start when debugging a Cassandra issue is understanding +how Cassandra is interacting with system resources. The following are +all resources that Cassandra makes heavy uses of: + +* CPU cores. For executing concurrent user queries +* CPU processing time. For query activity (data decompression, row +merging, etc...) +* CPU processing time (low priority). For background tasks (compaction, +streaming, etc ...) +* RAM for Java Heap. Used to hold internal data-structures and by +default the Cassandra memtables. Heap space is a crucial component of +write performance as well as generally. +* RAM for OS disk cache. Used to cache frequently accessed SSTable +blocks. OS disk cache is a crucial component of read performance. +* Disks. Cassandra cares a lot about disk read latency, disk write +throughput, and of course disk space. +* Network latency. Cassandra makes many internode requests, so network +latency between nodes can directly impact performance. +* Network throughput. Cassandra (as other databases) frequently have the +so called "incast" problem where a small request (e.g. +`SELECT * from foo.bar`) returns a massively large result set (e.g. the +entire dataset). In such situations outgoing bandwidth is crucial. + +Often troubleshooting Cassandra comes down to troubleshooting what +resource the machine or cluster is running out of. Then you create more +of that resource or change the query pattern to make less use of that +resource. + +=== High Level Resource Usage (top/htop) + +Cassandra makes signifiant use of system resources, and often the very +first useful action is to run `top` or `htop` +(https://hisham.hm/htop/[website])to see the state of the machine. + +Useful things to look at: + +* System load levels. While these numbers can be confusing, generally +speaking if the load average is greater than the number of CPU cores, +Cassandra probably won't have very good (sub 100 millisecond) latencies. +See +http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html[Linux +Load Averages] for more information. +* CPU utilization. `htop` in particular can help break down CPU +utilization into `user` (low and normal priority), `system` (kernel), +and `io-wait` . Cassandra query threads execute as normal priority +`user` threads, while compaction threads execute as low priority `user` +threads. High `system` time could indicate problems like thread +contention, and high `io-wait` may indicate slow disk drives. This can +help you understand what Cassandra is spending processing resources +doing. +* Memory usage. Look for which programs have the most resident memory, +it is probably Cassandra. The number for Cassandra is likely +inaccurately high due to how Linux (as of 2018) accounts for memory +mapped file memory. + +[[os-iostat]] +=== IO Usage (iostat) + +Use iostat to determine how data drives are faring, including latency +distributions, throughput, and utilization: + +.... +$ sudo iostat -xdm 2 +Linux 4.13.0-13-generic (hostname) 07/03/2018 _x86_64_ (8 CPU) + +Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util +sda 0.00 0.28 0.32 5.42 0.01 0.13 48.55 0.01 2.21 0.26 2.32 0.64 0.37 +sdb 0.00 0.00 0.00 0.00 0.00 0.00 79.34 0.00 0.20 0.20 0.00 0.16 0.00 +sdc 0.34 0.27 0.76 0.36 0.01 0.02 47.56 0.03 26.90 2.98 77.73 9.21 1.03 + +Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util +sda 0.00 0.00 2.00 32.00 0.01 4.04 244.24 0.54 16.00 0.00 17.00 1.06 3.60 +sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +sdc 0.00 24.50 0.00 114.00 0.00 11.62 208.70 5.56 48.79 0.00 48.79 1.12 12.80 +.... + +In this case we can see that `/dev/sdc1` is a very slow drive, having an +`await` close to 50 milliseconds and an `avgqu-sz` close to 5 ios. The +drive is not particularly saturated (utilization is only 12.8%), but we +should still be concerned about how this would affect our p99 latency +since 50ms is quite long for typical Cassandra operations. That being +said, in this case most of the latency is present in writes (typically +writes are more latent than reads), which due to the LSM nature of +Cassandra is often hidden from the user. + +Important metrics to assess using iostat: + +* Reads and writes per second. These numbers will change with the +workload, but generally speaking the more reads Cassandra has to do from +disk the slower Cassandra read latencies are. Large numbers of reads per +second can be a dead giveaway that the cluster has insufficient memory +for OS page caching. +* Write throughput. Cassandra's LSM model defers user writes and batches +them together, which means that throughput to the underlying medium is +the most important write metric for Cassandra. +* Read latency (`r_await`). When Cassandra missed the OS page cache and +reads from SSTables, the read latency directly determines how fast +Cassandra can respond with the data. +* Write latency. Cassandra is less sensitive to write latency except +when it syncs the commit log. This typically enters into the very high +percentiles of write latency. + +Note that to get detailed latency breakdowns you will need a more +advanced tool such as `bcc-tools `. + +=== OS page Cache Usage + +As Cassandra makes heavy use of memory mapped files, the health of the +operating system's https://en.wikipedia.org/wiki/Page_cache[Page Cache] +is crucial to performance. Start by finding how much available cache is +in the system: + +.... +$ free -g + total used free shared buff/cache available +Mem: 15 9 2 0 3 5 +Swap: 0 0 0 +.... + +In this case 9GB of memory is used by user processes (Cassandra heap) +and 8GB is available for OS page cache. Of that, 3GB is actually used to +cache files. If most memory is used and unavailable to the page cache, +Cassandra performance can suffer significantly. This is why Cassandra +starts with a reasonably small amount of memory reserved for the heap. + +If you suspect that you are missing the OS page cache frequently you can +use advanced tools like `cachestat ` or +`vmtouch ` to dive deeper. + +=== Network Latency and Reliability + +Whenever Cassandra does writes or reads that involve other replicas, +`LOCAL_QUORUM` reads for example, one of the dominant effects on latency +is network latency. When trying to debug issues with multi machine +operations, the network can be an important resource to investigate. You +can determine internode latency using tools like `ping` and `traceroute` +or most effectively `mtr`: + +.... +$ mtr -nr www.google.com +Start: Sun Jul 22 13:10:28 2018 +HOST: hostname Loss% Snt Last Avg Best Wrst StDev + 1.|-- 192.168.1.1 0.0% 10 2.0 1.9 1.1 3.7 0.7 + 2.|-- 96.123.29.15 0.0% 10 11.4 11.0 9.0 16.4 1.9 + 3.|-- 68.86.249.21 0.0% 10 10.6 10.7 9.0 13.7 1.1 + 4.|-- 162.141.78.129 0.0% 10 11.5 10.6 9.6 12.4 0.7 + 5.|-- 162.151.78.253 0.0% 10 10.9 12.1 10.4 20.2 2.8 + 6.|-- 68.86.143.93 0.0% 10 12.4 12.6 9.9 23.1 3.8 + 7.|-- 96.112.146.18 0.0% 10 11.9 12.4 10.6 15.5 1.6 + 9.|-- 209.85.252.250 0.0% 10 13.7 13.2 12.5 13.9 0.0 + 10.|-- 108.170.242.238 0.0% 10 12.7 12.4 11.1 13.0 0.5 + 11.|-- 74.125.253.149 0.0% 10 13.4 13.7 11.8 19.2 2.1 + 12.|-- 216.239.62.40 0.0% 10 13.4 14.7 11.5 26.9 4.6 + 13.|-- 108.170.242.81 0.0% 10 14.4 13.2 10.9 16.0 1.7 + 14.|-- 72.14.239.43 0.0% 10 12.2 16.1 11.0 32.8 7.1 + 15.|-- 216.58.195.68 0.0% 10 25.1 15.3 11.1 25.1 4.8 +.... + +In this example of `mtr`, we can rapidly assess the path that your +packets are taking, as well as what their typical loss and latency are. +Packet loss typically leads to between `200ms` and `3s` of additional +latency, so that can be a common cause of latency issues. + +=== Network Throughput + +As Cassandra is sensitive to outgoing bandwidth limitations, sometimes +it is useful to determine if network throughput is limited. One handy +tool to do this is +https://www.systutorials.com/docs/linux/man/8-iftop/[iftop] which shows +both bandwidth usage as well as connection information at a glance. An +example showing traffic during a stress run against a local `ccm` +cluster: + +.... +$ # remove the -t for ncurses instead of pure text +$ sudo iftop -nNtP -i lo +interface: lo +IP address is: 127.0.0.1 +MAC address is: 00:00:00:00:00:00 +Listening on lo + # Host name (port/service if enabled) last 2s last 10s last 40s cumulative +-------------------------------------------------------------------------------------------- + 1 127.0.0.1:58946 => 869Kb 869Kb 869Kb 217KB + 127.0.0.3:9042 <= 0b 0b 0b 0B + 2 127.0.0.1:54654 => 736Kb 736Kb 736Kb 184KB + 127.0.0.1:9042 <= 0b 0b 0b 0B + 3 127.0.0.1:51186 => 669Kb 669Kb 669Kb 167KB + 127.0.0.2:9042 <= 0b 0b 0b 0B + 4 127.0.0.3:9042 => 3.30Kb 3.30Kb 3.30Kb 845B + 127.0.0.1:58946 <= 0b 0b 0b 0B + 5 127.0.0.1:9042 => 2.79Kb 2.79Kb 2.79Kb 715B + 127.0.0.1:54654 <= 0b 0b 0b 0B + 6 127.0.0.2:9042 => 2.54Kb 2.54Kb 2.54Kb 650B + 127.0.0.1:51186 <= 0b 0b 0b 0B + 7 127.0.0.1:36894 => 1.65Kb 1.65Kb 1.65Kb 423B + 127.0.0.5:7000 <= 0b 0b 0b 0B + 8 127.0.0.1:38034 => 1.50Kb 1.50Kb 1.50Kb 385B + 127.0.0.2:7000 <= 0b 0b 0b 0B + 9 127.0.0.1:56324 => 1.50Kb 1.50Kb 1.50Kb 383B + 127.0.0.1:7000 <= 0b 0b 0b 0B + 10 127.0.0.1:53044 => 1.43Kb 1.43Kb 1.43Kb 366B + 127.0.0.4:7000 <= 0b 0b 0b 0B +-------------------------------------------------------------------------------------------- +Total send rate: 2.25Mb 2.25Mb 2.25Mb +Total receive rate: 0b 0b 0b +Total send and receive rate: 2.25Mb 2.25Mb 2.25Mb +-------------------------------------------------------------------------------------------- +Peak rate (sent/received/total): 2.25Mb 0b 2.25Mb +Cumulative (sent/received/total): 576KB 0B 576KB +============================================================================================ +.... + +In this case we can see that bandwidth is fairly shared between many +peers, but if the total was getting close to the rated capacity of the +NIC or was focussed on a single client, that may indicate a clue as to +what issue is occurring. + +== Advanced tools + +Sometimes as an operator you may need to really dive deep. This is where +advanced OS tooling can come in handy. + +[[use-bcc-tools]] +=== bcc-tools + +Most modern Linux distributions (kernels newer than `4.1`) support +https://github.com/iovisor/bcc[bcc-tools] for diving deep into +performance problems. First install `bcc-tools`, e.g. via `apt` on +Debian: + +.... +$ apt install bcc-tools +.... + +Then you can use all the tools that `bcc-tools` contains. One of the +most useful tools is `cachestat` +(https://github.com/iovisor/bcc/blob/master/tools/cachestat_example.txt[cachestat +examples]) which allows you to determine exactly how many OS page cache +hits and misses are happening: + +.... +$ sudo /usr/share/bcc/tools/cachestat -T 1 +TIME TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB +18:44:08 66 66 0 64 88 4427 +18:44:09 40 40 0 75 88 4427 +18:44:10 4353 45 4308 203 88 4427 +18:44:11 84 77 7 13 88 4428 +18:44:12 2511 14 2497 14 88 4428 +18:44:13 101 98 3 18 88 4428 +18:44:14 16741 0 16741 58 88 4428 +18:44:15 1935 36 1899 18 88 4428 +18:44:16 89 34 55 18 88 4428 +.... + +In this case there are not too many page cache `MISSES` which indicates +a reasonably sized cache. These metrics are the most direct measurement +of your Cassandra node's "hot" dataset. If you don't have enough cache, +`MISSES` will be high and performance will be slow. If you have enough +cache, `MISSES` will be low and performance will be fast (as almost all +reads are being served out of memory). + +You can also measure disk latency distributions using `biolatency` +(https://github.com/iovisor/bcc/blob/master/tools/biolatency_example.txt[biolatency +examples]) to get an idea of how slow Cassandra will be when reads miss +the OS page Cache and have to hit disks: + +.... +$ sudo /usr/share/bcc/tools/biolatency -D 10 +Tracing block device I/O... Hit Ctrl-C to end. + + +disk = 'sda' + usecs : count distribution + 0 -> 1 : 0 | | + 2 -> 3 : 0 | | + 4 -> 7 : 0 | | + 8 -> 15 : 0 | | + 16 -> 31 : 12 |****************************************| + 32 -> 63 : 9 |****************************** | + 64 -> 127 : 1 |*** | + 128 -> 255 : 3 |********** | + 256 -> 511 : 7 |*********************** | + 512 -> 1023 : 2 |****** | + +disk = 'sdc' + usecs : count distribution + 0 -> 1 : 0 | | + 2 -> 3 : 0 | | + 4 -> 7 : 0 | | + 8 -> 15 : 0 | | + 16 -> 31 : 0 | | + 32 -> 63 : 0 | | + 64 -> 127 : 41 |************ | + 128 -> 255 : 17 |***** | + 256 -> 511 : 13 |*** | + 512 -> 1023 : 2 | | + 1024 -> 2047 : 0 | | + 2048 -> 4095 : 0 | | + 4096 -> 8191 : 56 |***************** | + 8192 -> 16383 : 131 |****************************************| + 16384 -> 32767 : 9 |** | +.... + +In this case most ios on the data drive (`sdc`) are fast, but many take +between 8 and 16 milliseconds. + +Finally `biosnoop` +(https://github.com/iovisor/bcc/blob/master/tools/biosnoop_example.txt[examples]) +can be used to dive even deeper and see per IO latencies: + +.... +$ sudo /usr/share/bcc/tools/biosnoop | grep java | head +0.000000000 java 17427 sdc R 3972458600 4096 13.58 +0.000818000 java 17427 sdc R 3972459408 4096 0.35 +0.007098000 java 17416 sdc R 3972401824 4096 5.81 +0.007896000 java 17416 sdc R 3972489960 4096 0.34 +0.008920000 java 17416 sdc R 3972489896 4096 0.34 +0.009487000 java 17427 sdc R 3972401880 4096 0.32 +0.010238000 java 17416 sdc R 3972488368 4096 0.37 +0.010596000 java 17427 sdc R 3972488376 4096 0.34 +0.011236000 java 17410 sdc R 3972488424 4096 0.32 +0.011825000 java 17427 sdc R 3972488576 16384 0.65 +... time passes +8.032687000 java 18279 sdc R 10899712 122880 3.01 +8.033175000 java 18279 sdc R 10899952 8192 0.46 +8.073295000 java 18279 sdc R 23384320 122880 3.01 +8.073768000 java 18279 sdc R 23384560 8192 0.46 +.... + +With `biosnoop` you see every single IO and how long they take. This +data can be used to construct the latency distributions in `biolatency` +but can also be used to better understand how disk latency affects +performance. For example this particular drive takes ~3ms to service a +memory mapped read due to the large default value (`128kb`) of +`read_ahead_kb`. To improve point read performance you may may want to +decrease `read_ahead_kb` on fast data volumes such as SSDs while keeping +the a higher value like `128kb` value is probably right for HDs. There +are tradeoffs involved, see +https://www.kernel.org/doc/Documentation/block/queue-sysfs.txt[queue-sysfs] +docs for more information, but regardless `biosnoop` is useful for +understanding _how_ Cassandra uses drives. + +[[use-vmtouch]] +=== vmtouch + +Sometimes it's useful to know how much of the Cassandra data files are +being cached by the OS. A great tool for answering this question is +https://github.com/hoytech/vmtouch[vmtouch]. + +First install it: + +.... +$ git clone https://github.com/hoytech/vmtouch.git +$ cd vmtouch +$ make +.... + +Then run it on the Cassandra data directory: + +.... +$ ./vmtouch /var/lib/cassandra/data/ + Files: 312 + Directories: 92 + Resident Pages: 62503/64308 244M/251M 97.2% + Elapsed: 0.005657 seconds +.... + +In this case almost the entire dataset is hot in OS page Cache. +Generally speaking the percentage doesn't really matter unless reads are +missing the cache (per e.g. `cachestat `), in which case +having additional memory may help read performance. + +=== CPU Flamegraphs + +Cassandra often uses a lot of CPU, but telling _what_ it is doing can +prove difficult. One of the best ways to analyze Cassandra on CPU time +is to use +http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html[CPU +Flamegraphs] which display in a useful way which areas of Cassandra code +are using CPU. This may help narrow down a compaction problem to a +"compaction problem dropping tombstones" or just generally help you +narrow down what Cassandra is doing while it is having an issue. To get +CPU flamegraphs follow the instructions for +http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html#Java[Java +Flamegraphs]. + +Generally: + +[arabic] +. Enable the `-XX:+PreserveFramePointer` option in Cassandra's +`jvm.options` configuation file. This has a negligible performance +impact but allows you actually see what Cassandra is doing. +. Run `perf` to get some data. +. Send that data through the relevant scripts in the FlameGraph toolset +and convert the data into a pretty flamegraph. View the resulting SVG +image in a browser or other image browser. + +For example just cloning straight off github we first install the +`perf-map-agent` to the location of our JVMs (assumed to be +`/usr/lib/jvm`): + +.... +$ sudo bash +$ export JAVA_HOME=/usr/lib/jvm/java-8-oracle/ +$ cd /usr/lib/jvm +$ git clone --depth=1 https://github.com/jvm-profiling-tools/perf-map-agent +$ cd perf-map-agent +$ cmake . +$ make +.... + +Now to get a flamegraph: + +.... +$ git clone --depth=1 https://github.com/brendangregg/FlameGraph +$ sudo bash +$ cd FlameGraph +$ # Record traces of Cassandra and map symbols for all java processes +$ perf record -F 49 -a -g -p -- sleep 30; ./jmaps +$ # Translate the data +$ perf script > cassandra_stacks +$ cat cassandra_stacks | ./stackcollapse-perf.pl | grep -v cpu_idle | \ + ./flamegraph.pl --color=java --hash > cassandra_flames.svg +.... + +The resulting SVG is searchable, zoomable, and generally easy to +introspect using a browser. + +=== Packet Capture + +Sometimes you have to understand what queries a Cassandra node is +performing _right now_ to troubleshoot an issue. For these times trusty +packet capture tools like `tcpdump` and +https://www.wireshark.org/[Wireshark] can be very helpful to dissect +packet captures. Wireshark even has native +https://www.wireshark.org/docs/dfref/c/cql.html[CQL support] although it +sometimes has compatibility issues with newer Cassandra protocol +releases. + +To get a packet capture first capture some packets: + +.... +$ sudo tcpdump -U -s0 -i -w cassandra.pcap -n "tcp port 9042" +.... + +Now open it up with wireshark: + +.... +$ wireshark cassandra.pcap +.... + +If you don't see CQL like statements try telling to decode as CQL by +right clicking on a packet going to 9042 -> `Decode as` -> select CQL +from the dropdown for port 9042. + +If you don't want to do this manually or use a GUI, you can also use +something like https://github.com/jolynch/cqltrace[cqltrace] to ease +obtaining and parsing CQL packet captures. diff --git a/doc/source/modules/cassandra/partials/nodetool_and_cqlsh.adoc b/doc/source/modules/cassandra/partials/nodetool_and_cqlsh.adoc new file mode 100644 index 000000000000..89892202a212 --- /dev/null +++ b/doc/source/modules/cassandra/partials/nodetool_and_cqlsh.adoc @@ -0,0 +1,21 @@ +NOTE: For information on how to configure your installation, see +http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +Cassandra]. + +[arabic, start=7] +. Check the status of Cassandra: + +[source,shell] +---- +include::example$BASH/nodetool_status.sh[] +---- + +The status column in the output should report `UN` which stands for +"Up/Normal". + +Alternatively, connect to the database with: + +[source,shell] +---- +include::example$BASH/run_cqlsh.sh[] +---- diff --git a/doc/source/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc b/doc/source/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc new file mode 100644 index 000000000000..daf5e53acc23 --- /dev/null +++ b/doc/source/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc @@ -0,0 +1,21 @@ +NOTE: For information on how to configure your installation, see +http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +Cassandra]. + +[arabic, start=7] +. Check the status of Cassandra: + +[source,shell] +---- +include::example$BASH/nodetool_status_nobin.sh[] +---- + +The status column in the output should report `UN` which stands for +"Up/Normal". + +Alternatively, connect to the database with: + +[source,shell] +---- +include::example$BASH/run_cqlsh_nobin.sh[] +---- diff --git a/doc/source/modules/cassandra/partials/package_versions.adoc b/doc/source/modules/cassandra/partials/package_versions.adoc new file mode 100644 index 000000000000..12eab03eb5a3 --- /dev/null +++ b/doc/source/modules/cassandra/partials/package_versions.adoc @@ -0,0 +1,5 @@ +The latest major version is {40_version} and the +corresponding distribution name is `40x` (with an "x" as the suffix). +For older releases use `311x` for C* {3x_version} series, `30x` for {30_version}, `22x` +for {22_version} and `21x` for {21_version}. For example, to add the repository for +version {40_version} (`40x`): diff --git a/doc/source/modules/cassandra/partials/tail_syslog.adoc b/doc/source/modules/cassandra/partials/tail_syslog.adoc new file mode 100644 index 000000000000..7310360d0001 --- /dev/null +++ b/doc/source/modules/cassandra/partials/tail_syslog.adoc @@ -0,0 +1,14 @@ +[arabic, start=6] +. Monitor the progress of the startup with: + +[source,shell] +---- +include::example$BASH/tail_syslog_package.sh[] +---- + +Cassandra is ready when you see an entry like this in the `system.log`: + +[source,plaintext] +---- +include::example$RESULTS/tail_syslog.result[] +---- diff --git a/doc/source/new/auditlogging.rst b/doc/source/new/auditlogging.rst deleted file mode 100644 index 0842810823fe..000000000000 --- a/doc/source/new/auditlogging.rst +++ /dev/null @@ -1,461 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Audit Logging -------------- - -Audit Logging is a new feature in Apache Cassandra 4.0 (`CASSANDRA-12151 -`_). All database activity is logged to a directory in the local filesystem and the audit log files are rolled periodically. All database operations are monitored and recorded. Audit logs are stored in local directory files instead of the database itself as it provides several benefits, some of which are: - -- No additional database capacity is needed to store audit logs -- No query tool is required while storing the audit logs in the database would require a query tool -- Latency of database operations is not affected; no performance impact -- It is easier to implement file based logging than database based logging - -What does Audit Logging Log? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Audit logging logs: - -1. All authentication which includes successful and failed login attempts -2. All database command requests to CQL. Both failed and successful CQL is logged - -More specifically an audit log entry could be one of two types: - -a) CQL Audit Log Entry Type or -b) Common Audit Log Entry Type - -Each of these types comprises of several database operations. The CQL Audit Log Entry Type could be one of the following; the category of the CQL audit log entry type is listed in parentheses. - -1. SELECT(QUERY), -2. UPDATE(DML), -3. DELETE(DML), -4. TRUNCATE(DDL), -5. CREATE_KEYSPACE(DDL), -6. ALTER_KEYSPACE(DDL), -7. DROP_KEYSPACE(DDL), -8. CREATE_TABLE(DDL), -9. DROP_TABLE(DDL), -10. PREPARE_STATEMENT(PREPARE), -11. DROP_TRIGGER(DDL), -12. LIST_USERS(DCL), -13. CREATE_INDEX(DDL), -14. DROP_INDEX(DDL), -15. GRANT(DCL), -16. REVOKE(DCL), -17. CREATE_TYPE(DDL), -18. DROP_AGGREGATE(DDL), -19. ALTER_VIEW(DDL), -20. CREATE_VIEW(DDL), -21. DROP_ROLE(DCL), -22. CREATE_FUNCTION(DDL), -23. ALTER_TABLE(DDL), -24. BATCH(DML), -25. CREATE_AGGREGATE(DDL), -26. DROP_VIEW(DDL), -27. DROP_TYPE(DDL), -28. DROP_FUNCTION(DDL), -29. ALTER_ROLE(DCL), -30. CREATE_TRIGGER(DDL), -31. LIST_ROLES(DCL), -32. LIST_PERMISSIONS(DCL), -33. ALTER_TYPE(DDL), -34. CREATE_ROLE(DCL), -35. USE_KEYSPACE (OTHER). - -The Common Audit Log Entry Type could be one of the following; the category of the Common audit log entry type is listed in parentheses. - -1. REQUEST_FAILURE(ERROR), -2. LOGIN_ERROR(AUTH), -3. UNAUTHORIZED_ATTEMPT(AUTH), -4. LOGIN_SUCCESS (AUTH). - -What Audit Logging does not Log? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Audit logging does not log: - -1. Configuration changes made in ``cassandra.yaml`` -2. Nodetool Commands - -Audit Logging is Flexible and Configurable -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Audit logging is flexible and configurable in ``cassandra.yaml`` as follows: - -- Keyspaces and tables to be monitored and audited may be specified. -- Users to be included/excluded may be specified. By default all users are audit logged. -- Categories of operations to audit or exclude may be specified. -- The frequency at which to roll the log files may be specified. Default frequency is hourly. - -Configuring Audit Logging -^^^^^^^^^^^^^^^^^^^^^^^^^ -Audit Logging is configured on each node separately. Audit Logging is configured in ``cassandra.yaml`` in the ``audit_logging_options`` setting. -The settings may be same/different on each node. - -Enabling Audit Logging -********************** -Audit logging is enabled by setting the ``enabled`` option to ``true`` in the ``audit_logging_options`` setting. - -:: - - audit_logging_options: - enabled: true - -Setting the Logger -****************** -The audit logger is set with the ``logger`` option. - -:: - - logger: - - class_name: BinAuditLogger - -Two types of audit loggers are supported: ``FileAuditLogger`` and ``BinAuditLogger``. -``BinAuditLogger`` is the default setting. The ``BinAuditLogger`` is an efficient way to log events to file in a binary format. - -``FileAuditLogger`` is synchronous, file-based audit logger; just uses the standard logging mechanism. ``FileAuditLogger`` logs events to ``audit/audit.log`` file using ``slf4j`` logger. - -The ``NoOpAuditLogger`` is a No-Op implementation of the audit logger to be used as a default audit logger when audit logging is disabled. - -It is possible to configure your custom logger implementation by injecting a map of property keys and their respective values. Default `IAuditLogger` -implementations shipped with Cassandra do not react on these properties but your custom logger might. They would be present as -a parameter of logger constructor (as `Map`). In ``cassandra.yaml`` file, you may configure it like this: - -:: - - logger: - - class_name: MyCustomAuditLogger - parameters: - - key1: value1 - key2: value2 - -When it comes to configuring these parameters, you can use respective ``enableAuditLog`` method in ``StorageServiceMBean``. -There are two methods of same name with different signatures. The first one does not accept a map where your parameters would be. This method -is used primarily e.g. from JConsole or similar tooling. JConsole can not accept a map to be sent over JMX so in order to be able to enable it -from there, even without any parameters, use this method. ``BinAuditLogger`` does not need any parameters to run with so invoking this method is fine. -The second one does accept a map with your custom parameters so you can pass them programmatically. ``enableauditlog`` command of ``nodetool`` uses -the first ``enableAuditLog`` method mentioned. Hence, currently, there is not a way how to pass parameters to your custom audit logger from ``nodetool``. - -Setting the Audit Logs Directory -******************************** -The audit logs directory is set with the ``audit_logs_dir`` option. A new directory is not created automatically and an existing directory must be set. Audit Logs directory can be configured using ``cassandra.logdir.audit`` system property or default is set to ``cassandra.logdir + /audit/``. A user created directory may be set. As an example, create a directory for the audit logs and set its permissions. - -:: - - sudo mkdir –p /cassandra/audit/logs/hourly - sudo chmod -R 777 /cassandra/audit/logs/hourly - -Set the directory for the audit logs directory using the ``audit_logs_dir`` option. - -:: - - audit_logs_dir: "/cassandra/audit/logs/hourly" - - -Setting Keyspaces to Audit -************************** -Set the keyspaces to include with the ``included_keyspaces`` option and the keyspaces to exclude with the ``excluded_keyspaces`` option. By default all keyspaces are included. By default, ``system``, ``system_schema`` and ``system_virtual_schema`` are excluded. - -:: - - # included_keyspaces: - # excluded_keyspaces: system, system_schema, system_virtual_schema - -Setting Categories to Audit -*************************** - -The categories of database operations to be included are specified with the ``included_categories`` option as a comma separated list. By default all supported categories are included. The categories of database operations to be excluded are specified with ``excluded_categories`` option as a comma separated list. By default no category is excluded. - -:: - - # included_categories: - # excluded_categories: - -The supported categories for audit log are: - -1. QUERY -2. DML -3. DDL -4. DCL -5. OTHER -6. AUTH -7. ERROR -8. PREPARE - -Setting Users to Audit -********************** - -Users to audit log are set with the ``included_users`` and ``excluded_users`` options. The ``included_users`` option specifies a comma separated list of users to include explicitly and by default all users are included. The ``excluded_users`` option specifies a comma separated list of users to exclude explicitly and by default no user is excluded. - -:: - - # included_users: - # excluded_users: - -Setting the Roll Frequency -*************************** -The ``roll_cycle`` option sets the frequency at which the audit log file is rolled. Supported values are ``MINUTELY``, ``HOURLY``, and ``DAILY``. Default value is ``HOURLY``, which implies that after every hour a new audit log file is created. - -:: - - roll_cycle: HOURLY - -An audit log file could get rolled for other reasons as well such as a log file reaches the configured size threshold. - -Setting Archiving Options -************************* - -The archiving options are for archiving the rolled audit logs. The ``archive`` command to use is set with the ``archive_command`` option and the ``max_archive_retries`` sets the maximum # of tries of failed archive commands. - -:: - - # archive_command: - # max_archive_retries: 10 - -Default archive command is ``"/path/to/script.sh %path"`` where ``%path`` is replaced with the file being rolled: - -Other Settings -*************** - -The other audit logs settings are as follows. - -:: - - # block: true - # max_queue_weight: 268435456 # 256 MiB - # max_log_size: 17179869184 # 16 GiB - -The ``block`` option specifies whether the audit logging should block if the logging falls behind or should drop log records. - -The ``max_queue_weight`` option sets the maximum weight of in memory queue for records waiting to be written to the file before blocking or dropping. - -The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest. - -Using Nodetool to Enable Audit Logging -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The ``nodetool enableauditlog`` command may be used to enable audit logs and it overrides the settings in ``cassandra.yaml``. The ``nodetool enableauditlog`` command syntax is as follows. - -:: - - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enableauditlog - [--excluded-categories ] - [--excluded-keyspaces ] - [--excluded-users ] - [--included-categories ] - [--included-keyspaces ] - [--included-users ] [--logger ] - -OPTIONS - --excluded-categories - Comma separated list of Audit Log Categories to be excluded for - audit log. If not set the value from cassandra.yaml will be used - - --excluded-keyspaces - Comma separated list of keyspaces to be excluded for audit log. If - not set the value from cassandra.yaml will be used - - --excluded-users - Comma separated list of users to be excluded for audit log. If not - set the value from cassandra.yaml will be used - - -h , --host - Node hostname or ip address - - --included-categories - Comma separated list of Audit Log Categories to be included for - audit log. If not set the value from cassandra.yaml will be used - - --included-keyspaces - Comma separated list of keyspaces to be included for audit log. If - not set the value from cassandra.yaml will be used - - --included-users - Comma separated list of users to be included for audit log. If not - set the value from cassandra.yaml will be used - - --logger - Logger name to be used for AuditLogging. Default BinAuditLogger. If - not set the value from cassandra.yaml will be used - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -The ``nodetool disableauditlog`` command disables audit log. The command syntax is as follows. - -:: - - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disableauditlog - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - -Viewing the Audit Logs -^^^^^^^^^^^^^^^^^^^^^^ -An audit log event comprises of a keyspace that is being audited, the operation that is being logged, the scope and the user. An audit log entry comprises of the following attributes concatenated with a "|". - -:: - - type (AuditLogEntryType): Type of request - source (InetAddressAndPort): Source IP Address from which request originated - user (String): User name - timestamp (long ): Timestamp of the request - batch (UUID): Batch of request - keyspace (String): Keyspace on which request is made - scope (String): Scope of request such as Table/Function/Aggregate name - operation (String): Database operation such as CQL command - options (QueryOptions): CQL Query options - state (QueryState): State related to a given query - -Some of these attributes may not be applicable to a given request and not all of these options must be set. - -An Audit Logging Demo -^^^^^^^^^^^^^^^^^^^^^^ -To demonstrate audit logging enable and configure audit logs with following settings. - -:: - - audit_logging_options: - enabled: true - logger: - - class_name: BinAuditLogger - audit_logs_dir: "/cassandra/audit/logs/hourly" - # included_keyspaces: - # excluded_keyspaces: system, system_schema, system_virtual_schema - # included_categories: - # excluded_categories: - # included_users: - # excluded_users: - roll_cycle: HOURLY - # block: true - # max_queue_weight: 268435456 # 256 MiB - # max_log_size: 17179869184 # 16 GiB - ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: - # archive_command: - # max_archive_retries: 10 - -Create the audit log directory ``/cassandra/audit/logs/hourly`` and set its permissions as discussed earlier. Run some CQL commands such as create a keyspace, create a table and query a table. Any supported CQL commands may be run as discussed in section **What does Audit Logging Log?**. Change directory (with ``cd`` command) to the audit logs directory. - -:: - - cd /cassandra/audit/logs/hourly - -List the files/directories and some ``.cq4`` files should get listed. These are the audit logs files. - -:: - - [ec2-user@ip-10-0-2-238 hourly]$ ls -l - total 28 - -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-02.cq4 - -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-03.cq4 - -rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 03:01 directory-listing.cq4t - -The ``auditlogviewer`` tool is used to dump audit logs. Run the ``auditlogviewer`` tool. Audit log files directory path is a required argument. The output should be similar to the following output. - -:: - - [ec2-user@ip-10-0-2-238 hourly]$ auditlogviewer /cassandra/audit/logs/hourly - WARN 03:12:11,124 Using Pauser.sleepy() as not enough processors, have 2, needs 8+ - Type: AuditLog - LogMessage: - user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427328|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE AuditLogKeyspace; - Type: AuditLog - LogMessage: - user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427329|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE "auditlogkeyspace" - Type: AuditLog - LogMessage: - user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711446279|type :SELECT|category:QUERY|ks:auditlogkeyspace|scope:t|operation:SELECT * FROM t; - Type: AuditLog - LogMessage: - user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564713878834|type :DROP_TABLE|category:DDL|ks:auditlogkeyspace|scope:t|operation:DROP TABLE IF EXISTS - AuditLogKeyspace.t; - Type: AuditLog - LogMessage: - user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42382|timestamp:1564714618360|ty - pe:REQUEST_FAILURE|category:ERROR|operation:CREATE KEYSPACE AuditLogKeyspace - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};; Cannot add - existing keyspace "auditlogkeyspace" - Type: AuditLog - LogMessage: - user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714690968|type :DROP_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:DROP KEYSPACE AuditLogKeyspace; - Type: AuditLog - LogMessage: - user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42406|timestamp:1564714708329|ty pe:CREATE_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:CREATE KEYSPACE - AuditLogKeyspace - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; - Type: AuditLog - LogMessage: - user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714870678|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE auditlogkeyspace; - [ec2-user@ip-10-0-2-238 hourly]$ - - -The ``auditlogviewer`` tool usage syntax is as follows. - -:: - - ./auditlogviewer - Audit log files directory path is a required argument. - usage: auditlogviewer [...] [options] - -- - View the audit log contents in human readable format - -- - Options are: - -f,--follow Upon reaching the end of the log continue indefinitely - waiting for more records - -h,--help display this help message - -r,--roll_cycle How often to roll the log file was rolled. May be - necessary for Chronicle to correctly parse file names. (MINUTELY, HOURLY, - DAILY). Default HOURLY. - -Diagnostic events for user audit logging -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Any native transport enabled client is able to subscribe to diagnostic events that are raised around authentication and CQL operations. These events can then be consumed and used by external tools to implement a Cassandra user auditing solution. - diff --git a/doc/source/new/fqllogging.rst b/doc/source/new/fqllogging.rst deleted file mode 100644 index 881f39fa893d..000000000000 --- a/doc/source/new/fqllogging.rst +++ /dev/null @@ -1,689 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Full Query Logging ------------------- - -Apache Cassandra 4.0 adds a new feature to support a means of logging all queries as they were invoked (`CASSANDRA-13983 -`_). For correctness testing it's useful to be able to capture production traffic so that it can be replayed against both the old and new versions of Cassandra while comparing the results. - -Cassandra 4.0 includes an implementation of a full query logging (FQL) that uses chronicle-queue to implement a rotating log of queries. Some of the features of FQL are: - -- Single thread asynchronously writes log entries to disk to reduce impact on query latency -- Heap memory usage bounded by a weighted queue with configurable maximum weight sitting in front of logging thread -- If the weighted queue is full producers can be blocked or samples can be dropped -- Disk utilization is bounded by deleting old log segments once a configurable size is reached -- The on disk serialization uses a flexible schema binary format (chronicle-wire) making it easy to skip unrecognized fields, add new ones, and omit old ones. -- Can be enabled and configured via JMX, disabled, and reset (delete on disk data), logging path is configurable via both JMX and YAML -- Introduce new ``fqltool`` in ``/bin`` that currently implements ``Dump`` which can dump in a readable format full query logs as well as follow active full query logs. FQL ``Replay`` and ``Compare`` are also available. - -Cassandra 4.0 has a binary full query log based on Chronicle Queue that can be controlled using ``nodetool enablefullquerylog``, ``disablefullquerylog``, and ``resetfullquerylog``. The log contains all queries invoked, approximate time they were invoked, any parameters necessary to bind wildcard values, and all query options. A readable version of the log can be dumped or tailed using the new ``bin/fqltool`` utility. The full query log is designed to be safe to use in production and limits utilization of heap memory and disk space with limits you can specify when enabling the log. - -Objective -^^^^^^^^^^ -Full Query Logging logs all requests to the CQL interface. The full query logs could be used for debugging, performance benchmarking, testing and auditing CQL queries. The audit logs also include CQL requests but full query logging is dedicated to CQL requests only with features such as FQL Replay and FQL Compare that are not available in audit logging. - -Full Query Logger -^^^^^^^^^^^^^^^^^^ -The Full Query Logger is a logger that logs entire query contents after the query finishes. FQL only logs the queries that successfully complete. The other queries (e.g. timed out, failed) are not to be logged. Queries are logged in one of two modes: single query or batch of queries. The log for an invocation of a batch of queries includes the following attributes: - -:: - - type - The type of the batch - queries - CQL text of the queries - values - Values to bind to as parameters for the queries - queryOptions - Options associated with the query invocation - queryState - Timestamp state associated with the query invocation - batchTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked - -The log for single CQL query includes the following attributes: - -:: - - query - CQL query text - queryOptions - Options associated with the query invocation - queryState - Timestamp state associated with the query invocation - queryTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked - -Full query logging is backed up by ``BinLog``. BinLog is a quick and dirty binary log. Its goal is good enough performance, predictable footprint, simplicity in terms of implementation and configuration and most importantly minimal impact on producers of log records. Performance safety is accomplished by feeding items to the binary log using a weighted queue and dropping records if the binary log falls sufficiently far behind. Simplicity and good enough performance is achieved by using a single log writing thread as well as Chronicle Queue to handle writing the log, making it available for readers, as well as log rolling. - -Weighted queue is a wrapper around any blocking queue that turns it into a blocking weighted queue. The queue will weigh each element being added and removed. Adding to the queue is blocked if adding would violate the weight bound. If an element weighs in at larger than the capacity of the queue then exactly one such element will be allowed into the queue at a time. If the weight of an object changes after it is added it could create issues. Checking weight should be cheap so memorize expensive to compute weights. If weight throws that can also result in leaked permits so it's always a good idea to memorize weight so it doesn't throw. In the interests of not writing unit tests for methods no one uses there is a lot of ``UnsupportedOperationException``. If you need them then add them and add proper unit tests to ``WeightedQueueTest``. "Good" tests. 100% coverage including exception paths and resource leaks. - - -The FQL tracks information about store files: - -- Store files as they are added and their storage impact. Delete them if over storage limit. -- The files in the chronicle queue that have already rolled -- The number of bytes in store files that have already rolled - -FQL logger sequence is as follows: - -1. Start the consumer thread that writes log records. Can only be done once. -2. Offer a record to the log. If the in memory queue is full the record will be dropped and offer will return false. -3. Put a record into the log. If the in memory queue is full the putting thread will be blocked until there is space or it is interrupted. -4. Clean up the buffers on thread exit, finalization will check again once this is no longer reachable ensuring there are no stragglers in the queue. -5. Stop the consumer thread that writes log records. Can be called multiple times. - -Next, we shall demonstrate full query logging with an example. - - -Configuring Full Query Logging -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Full Query Logger default options are configured on a per node basis in ``cassandra.yaml`` with following configuration property. - -:: - - full_query_logging_options: - -As an example setup create a three node Cassandra 4.0 cluster. The ``nodetool status`` command lists the nodes in the cluster. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool status - Datacenter: us-east-1 - ===================== - Status=Up/Down - |/ State=Normal/Leaving/Joining/Moving - -- AddressLoad Tokens Owns (effective) Host ID Rack - UN 10.0.1.115 442.42 KiB 25632.6% b64cb32a-b32a-46b4-9eeb-e123fa8fc287 us-east-1b - UN 10.0.3.206 559.52 KiB 25631.9% 74863177-684b-45f4-99f7-d1006625dc9e us-east-1d - UN 10.0.2.238 587.87 KiB 25635.5% 4dcdadd2-41f9-4f34-9892-1f20868b27c7 us-east-1c - - -In subsequent sub-sections we shall discuss enabling and configuring full query logging. - -Setting the FQL Directory -************************* - -A dedicated directory path must be provided to write full query log data to when the full query log is enabled. The directory for FQL must exist, and have permissions set. The full query log will recursively delete the contents of this path at times. It is recommended not to place links in this directory to other sections of the filesystem. The ``full_query_log_dir`` property in ``cassandra.yaml`` is pre-configured. - -:: - - full_query_log_dir: /tmp/cassandrafullquerylog - -The ``log_dir`` option may be used to configure the FQL directory if the ``full_query_log_dir`` is not set. - -:: - - full_query_logging_options: - # log_dir: - -Create the FQL directory if it does not exist and set its permissions. - -:: - - sudo mkdir -p /tmp/cassandrafullquerylog - sudo chmod -R 777 /tmp/cassandrafullquerylog - -Setting the Roll Cycle -********************** - -The ``roll_cycle`` option sets how often to roll FQL log segments so they can potentially be reclaimed. Supported values are ``MINUTELY``, ``HOURLY`` and ``DAILY``. Default setting is ``HOURLY``. - -:: - - roll_cycle: HOURLY - -Setting Other Options -********************* - -The ``block`` option specifies whether the FQL should block if the FQL falls behind or should drop log records. Default value of ``block`` is ``true``. The ``max_queue_weight`` option sets the maximum weight of in memory queue for records waiting to be written to the file before blocking or dropping. The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The ``archive_command`` option sets the archive command to execute on rolled log files. The ``max_archive_retries`` option sets the max number of retries of failed archive commands. - -:: - - # block: true - # max_queue_weight: 268435456 # 256 MiB - # max_log_size: 17179869184 # 16 GiB - ## archive command is "/path/to/script.sh %path" where %path is replaced with the file - being rolled: - # archive_command: - # max_archive_retries: 10 - -The ``max_queue_weight`` must be > 0. Similarly ``max_log_size`` must be > 0. An example full query logging options is as follows. - -:: - - full_query_log_dir: /tmp/cassandrafullquerylog - - # default options for full query logging - these can be overridden from command line when - executing - # nodetool enablefullquerylog - # nodetool enablefullquerylog - #full_query_logging_options: - # log_dir: - roll_cycle: HOURLY - # block: true - # max_queue_weight: 268435456 # 256 MiB - # max_log_size: 17179869184 # 16 GiB - ## archive command is "/path/to/script.sh %path" where %path is replaced with the file - being rolled: - # archive_command: - # max_archive_retries: 10 - -The ``full_query_log_dir`` setting is not within the ``full_query_logging_options`` but still is for full query logging. - -Enabling Full Query Logging -*************************** - -Full Query Logging is enabled on a per-node basis. . The ``nodetool enablefullquerylog`` command is used to enable full query logging. Defaults for the options are configured in ``cassandra.yaml`` and these can be overridden from command line. - -The syntax of the nodetool enablefullquerylog command is as follows: - -:: - - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enablefullquerylog - [--archive-command ] [--blocking] - [--max-archive-retries ] - [--max-log-size ] [--max-queue-weight ] - [--path ] [--roll-cycle ] - - OPTIONS - --archive-command - Command that will handle archiving rolled full query log files. - Format is "/path/to/script.sh %path" where %path will be replaced - with the file to archive - - --blocking - If the queue is full whether to block producers or drop samples. - - -h , --host - Node hostname or ip address - - --max-archive-retries - Max number of archive retries. - - --max-log-size - How many bytes of log data to store before dropping segments. Might - not be respected if a log file hasn't rolled so it can be deleted. - - --max-queue-weight - Maximum number of bytes of query data to queue to disk before - blocking or dropping samples. - - -p , --port - Remote jmx agent port number - - --path - Path to store the full query log at. Will have it's contents - recursively deleted. - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - --roll-cycle - How often to roll the log file (MINUTELY, HOURLY, DAILY). - - -u , --username - Remote jmx agent username - -Run the following command on each node in the cluster. - -:: - - nodetool enablefullquerylog --path /tmp/cassandrafullquerylog - -After the full query logging has been enabled run some CQL statements to generate full query logs. - -Running CQL Statements -^^^^^^^^^^^^^^^^^^^^^^^ - -Start CQL interface with ``cqlsh`` command. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ cqlsh - Connected to Cassandra Cluster at 127.0.0.1:9042. - [cqlsh 5.0.1 | Cassandra 4.0-SNAPSHOT | CQL spec 3.4.5 | Native protocol v4] - Use HELP for help. - cqlsh> - -Run some CQL statements. Create a keyspace. Create a table and add some data. Query the table. - -:: - - cqlsh> CREATE KEYSPACE AuditLogKeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; - cqlsh> USE AuditLogKeyspace; - cqlsh:auditlogkeyspace> CREATE TABLE t ( - ...id int, - ...k int, - ...v text, - ...PRIMARY KEY (id) - ... ); - cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); - cqlsh:auditlogkeyspace> SELECT * FROM t; - - id | k | v - ----+---+------ - 0 | 1 | val1 - - (1 rows) - cqlsh:auditlogkeyspace> - -Viewing the Full Query Logs -^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The ``fqltool`` is used to view the full query logs. The ``fqltool`` has the following usage syntax. - -:: - - fqltool [] - - The most commonly used fqltool commands are: - compare Compare result files generated by fqltool replay - dump Dump the contents of a full query log - help Display help information - replay Replay full query logs - - See 'fqltool help ' for more information on a specific command. - -The ``fqltool dump`` command is used to dump (list) the contents of a full query log. Run the ``fqltool dump`` command after some CQL statements have been run. - -The full query logs get listed. Truncated output is as follows: - -:: - - [ec2-user@ip-10-0-2-238 cassandrafullquerylog]$ fqltool dump ./ - WARN [main] 2019-08-02 03:07:53,635 Slf4jExceptionHandler.java:42 - Using Pauser.sleepy() as not enough processors, have 2, needs 8+ - Type: single-query - Query start time: 1564708322030 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system.peers - Values: - - Type: single-query - Query start time: 1564708322054 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system.local WHERE key='local' - Values: - - Type: single-query - Query start time: 1564708322109 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.keyspaces - Values: - - Type: single-query - Query start time: 1564708322116 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.tables - Values: - - Type: single-query - Query start time: 1564708322139 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.columns - Values: - - Type: single-query - Query start time: 1564708322142 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.functions - Values: - - Type: single-query - Query start time: 1564708322141 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.aggregates - Values: - - Type: single-query - Query start time: 1564708322143 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.types - Values: - - Type: single-query - Query start time: 1564708322144 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.indexes - Values: - - Type: single-query - Query start time: 1564708322142 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.triggers - Values: - - Type: single-query - Query start time: 1564708322145 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.views - Values: - - Type: single-query - Query start time: 1564708345408 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: CREATE KEYSPACE AuditLogKeyspace - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; - Values: - - Type: single-query - Query start time: 1564708345675 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708345 - Query: SELECT peer, rpc_address, schema_version FROM system.peers - Values: - - Type: single-query - Query start time: 1564708345676 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708345 - Query: SELECT schema_version FROM system.local WHERE key='local' - Values: - - Type: single-query - Query start time: 1564708346323 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708346 - Query: SELECT * FROM system_schema.keyspaces WHERE keyspace_name = 'auditlogkeyspace' - Values: - - Type: single-query - Query start time: 1564708360873 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: USE AuditLogKeyspace; - Values: - - Type: single-query - Query start time: 1564708360874 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: USE "auditlogkeyspace" - Values: - - Type: single-query - Query start time: 1564708378837 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: CREATE TABLE t ( - id int, - k int, - v text, - PRIMARY KEY (id) - ); - Values: - - Type: single-query - Query start time: 1564708379247 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708379 - Query: SELECT * FROM system_schema.tables WHERE keyspace_name = 'auditlogkeyspace' AND table_name = 't' - Values: - - Type: single-query - Query start time: 1564708379255 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708379 - Query: SELECT * FROM system_schema.views WHERE keyspace_name = 'auditlogkeyspace' AND view_name = 't' - Values: - - Type: single-query - Query start time: 1564708397144 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708397 - Query: INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - Values: - - Type: single-query - Query start time: 1564708397167 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708397 - Query: INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); - Values: - - Type: single-query - Query start time: 1564708434782 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708434 - Query: SELECT * FROM t; - Values: - - [ec2-user@ip-10-0-2-238 cassandrafullquerylog]$ - - - -Full query logs are generated on each node. Enabling of full query logging on one node and the log files generated on the node are as follows: - -:: - - [root@localhost ~]# ssh -i cassandra.pem ec2-user@52.1.243.83 - Last login: Fri Aug 2 00:14:53 2019 from 75.155.255.51 - [ec2-user@ip-10-0-3-206 ~]$ sudo mkdir /tmp/cassandrafullquerylog - [ec2-user@ip-10-0-3-206 ~]$ sudo chmod -R 777 /tmp/cassandrafullquerylog - [ec2-user@ip-10-0-3-206 ~]$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog - [ec2-user@ip-10-0-3-206 ~]$ cd /tmp/cassandrafullquerylog - [ec2-user@ip-10-0-3-206 cassandrafullquerylog]$ ls -l - total 44 - -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 01:24 20190802-01.cq4 - -rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 01:23 directory-listing.cq4t - [ec2-user@ip-10-0-3-206 cassandrafullquerylog]$ - -Enabling of full query logging on another node and the log files generated on the node are as follows: - -:: - - [root@localhost ~]# ssh -i cassandra.pem ec2-user@3.86.103.229 - Last login: Fri Aug 2 00:13:04 2019 from 75.155.255.51 - [ec2-user@ip-10-0-1-115 ~]$ sudo mkdir /tmp/cassandrafullquerylog - [ec2-user@ip-10-0-1-115 ~]$ sudo chmod -R 777 /tmp/cassandrafullquerylog - [ec2-user@ip-10-0-1-115 ~]$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog - [ec2-user@ip-10-0-1-115 ~]$ cd /tmp/cassandrafullquerylog - [ec2-user@ip-10-0-1-115 cassandrafullquerylog]$ ls -l - total 44 - -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 01:24 20190802-01.cq4 - -rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 01:23 directory-listing.cq4t - [ec2-user@ip-10-0-1-115 cassandrafullquerylog]$ - -The ``nodetool resetfullquerylog`` resets the full query logger if it is enabled. Also deletes any generated files in the last used full query log path as well as the one configured in ``cassandra.yaml``. It stops the full query log and cleans files in the configured full query log directory from ``cassandra.yaml`` as well as JMX. - -Full Query Replay -^^^^^^^^^^^^^^^^^ -The ``fqltool`` provides the ``replay`` command (`CASSANDRA-14618 -`_) to replay the full query logs. The FQL replay could be run on a different machine or even a different cluster for testing, debugging and performance benchmarking. - -The main objectives of ``fqltool replay`` are: - -- To be able to compare different runs of production traffic against different versions/configurations of Cassandra. -- Take FQL logs from several machines and replay them in "order" by the timestamps recorded. -- Record the results from each run to be able to compare different runs (against different clusters/versions/etc). -- If fqltool replay is run against 2 or more clusters, the results could be compared. - -The FQL replay could also be used on the same node on which the full query log are generated to recreate a dropped database object. - - The syntax of ``fqltool replay`` is as follows: - -:: - - fqltool replay [--keyspace ] [--results ] - [--store-queries ] --target ... [--] - [...] - - OPTIONS - --keyspace - Only replay queries against this keyspace and queries without - keyspace set. - - --results - Where to store the results of the queries, this should be a - directory. Leave this option out to avoid storing results. - - --store-queries - Path to store the queries executed. Stores queries in the same order - as the result sets are in the result files. Requires --results - - --target - Hosts to replay the logs to, can be repeated to replay to more - hosts. - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [...] - Paths containing the full query logs to replay. - -As an example of using ``fqltool replay``, drop a keyspace. - -:: - - cqlsh:auditlogkeyspace> DROP KEYSPACE AuditLogKeyspace; - -Subsequently run ``fqltool replay``. The directory to store results of queries and the directory to store the queries run are specified and these directories must be created and permissions set before running ``fqltool replay``. The ``--results`` and ``--store-queries`` directories are optional but if ``--store-queries`` is to be set the ``--results`` must also be set. - -:: - - [ec2-user@ip-10-0-2-238 cassandra]$ fqltool replay --keyspace AuditLogKeyspace --results - /cassandra/fql/logs/results/replay --store-queries /cassandra/fql/logs/queries/replay -- - target 3.91.56.164 -- /tmp/cassandrafullquerylog - -Describe the keyspaces after running ``fqltool replay`` and the keyspace that was dropped gets listed again. - -:: - - cqlsh:auditlogkeyspace> DESC KEYSPACES; - - system_schema system system_distributed system_virtual_schema - system_auth auditlogkeyspace system_traces system_views - - cqlsh:auditlogkeyspace> - -Full Query Compare -^^^^^^^^^^^^^^^^^^ -The ``fqltool compare`` command (`CASSANDRA-14619 -`_) is used to compare result files generated by ``fqltool replay``. The ``fqltool compare`` command that can take the recorded runs from ``fqltool replay`` and compares them, it should output any differences and potentially all queries against the mismatching partition up until the mismatch. - -The ``fqltool compare`` could be used for comparing result files generated by different versions of Cassandra or different Cassandra configurations as an example. The command usage is as follows: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ fqltool help compare - NAME - fqltool compare - Compare result files generated by fqltool replay - - SYNOPSIS - fqltool compare --queries [--] [...] - - OPTIONS - --queries - Directory to read the queries from. It is produced by the fqltool - replay --store-queries option. - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [...] - Directories containing result files to compare. - -The ``fqltool compare`` stores each row as a separate chronicle document to be able to avoid reading up the entire result set in memory when comparing document formats: - -To mark the start of a new result set: - -:: - - ------------------- - version: int16 - type: column_definitions - column_count: int32; - column_definition: text, text - column_definition: text, text - .... - -------------------- - - -To mark a failed query set: - -:: - - --------------------- - version: int16 - type: query_failed - message: text - --------------------- - -To mark a row set: - -:: - - -------------------- - version: int16 - type: row - row_column_count: int32 - column: bytes - --------------------- - -To mark the end of a result set: - -:: - - ------------------- - version: int16 - type: end_resultset - ------------------- - - -Performance Overhead of FQL -^^^^^^^^^^^^^^^^^^^^^^^^^^^ -In performance testing FQL appears to have little or no overhead in ``WRITE`` only workloads, and a minor overhead in ``MIXED`` workload. diff --git a/doc/source/new/index.rst b/doc/source/new/index.rst deleted file mode 100644 index 5ef867ba134c..000000000000 --- a/doc/source/new/index.rst +++ /dev/null @@ -1,32 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -New Features in Apache Cassandra 4.0 -==================================== - -This section covers the new features in Apache Cassandra 4.0. - -.. toctree:: - :maxdepth: 2 - - java11 - virtualtables - auditlogging - fqllogging - messaging - streaming - transientreplication - diff --git a/doc/source/new/java11.rst b/doc/source/new/java11.rst deleted file mode 100644 index df906d4095c3..000000000000 --- a/doc/source/new/java11.rst +++ /dev/null @@ -1,274 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Support for Java 11 -------------------- - -In the new Java release cadence a new Java version is made available every six months. The more frequent release cycle -is favored as it brings new Java features to the developers as and when they are developed without the wait that the -earlier 3 year release model incurred. Not every Java version is a Long Term Support (LTS) version. After Java 8 the -next LTS version is Java 11. Java 9, 10, 12 and 13 are all non-LTS versions. - -One of the objectives of the Apache Cassandra 4.0 version is to support the recent LTS Java versions 8 and 11 (`CASSANDRA-9608 -`_). Java 8 and -Java 11 may be used to build and run Apache Cassandra 4.0. - -**Note**: Support for JDK 11 in Apache Cassandra 4.0 is an experimental feature, and not recommended for production use. - -Support Matrix -^^^^^^^^^^^^^^ - -The support matrix for the Java versions for compiling and running Apache Cassandra 4.0 is detailed in Table 1. The -build version is along the vertical axis and the run version is along the horizontal axis. - -Table 1 : Support Matrix for Java - -+---------------+--------------+-----------------+ -| | Java 8 (Run) | Java 11 (Run) | -+---------------+--------------+-----------------+ -| Java 8 (Build)|Supported |Supported | -+---------------+--------------+-----------------+ -| Java 11(Build)| Not Supported|Supported | -+---------------+--------------+-----------------+ - -Essentially Apache 4.0 source code built with Java 11 cannot be run with Java 8. Next, we shall discuss using each of Java 8 and 11 to build and run Apache Cassandra 4.0. - -Using Java 8 to Build -^^^^^^^^^^^^^^^^^^^^^ - -To start with, install Java 8. As an example, for installing Java 8 on RedHat Linux the command is as follows: - -:: - -$ sudo yum install java-1.8.0-openjdk-devel - -Set ``JAVA_HOME`` and ``JRE_HOME`` environment variables in the shell bash script. First, open the bash script: - -:: - -$ sudo vi ~/.bashrc - -Set the environment variables including the ``PATH``. - -:: - - $ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk - $ export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre - $ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin - -Download and install Apache Cassandra 4.0 source code from the Git along with the dependencies. - -:: - - $ git clone https://github.com/apache/cassandra.git - -If Cassandra is already running stop Cassandra with the following command. - -:: - - [ec2-user@ip-172-30-3-146 bin]$ ./nodetool stopdaemon - -Build the source code from the ``cassandra`` directory, which has the ``build.xml`` build script. The Apache Ant uses the Java version set in the ``JAVA_HOME`` environment variable. - -:: - - $ cd ~/cassandra - $ ant - -Apache Cassandra 4.0 gets built with Java 8. Set the environment variable for ``CASSANDRA_HOME`` in the bash script. Also add the ``CASSANDRA_HOME/bin`` to the ``PATH`` variable. - -:: - - $ export CASSANDRA_HOME=~/cassandra - $ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CASSANDRA_HOME/bin - -To run Apache Cassandra 4.0 with either of Java 8 or Java 11 run the Cassandra application in the ``CASSANDRA_HOME/bin`` directory, which is in the ``PATH`` env variable. - -:: - - $ cassandra - -The Java version used to run Cassandra gets output as Cassandra is getting started. As an example if Java 11 is used, the run output should include similar to the following output snippet: - -:: - - INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:480 - Hostname: ip-172-30-3- - 146.ec2.internal:7000:7001 - INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:487 - JVM vendor/version: OpenJDK - 64-Bit Server VM/11.0.3 - INFO [main] 2019-07-31 21:18:16,863 CassandraDaemon.java:488 - Heap size: - 1004.000MiB/1004.000MiB - -The following output indicates a single node Cassandra 4.0 cluster has started. - -:: - - INFO [main] 2019-07-31 21:18:19,687 InboundConnectionInitiator.java:130 - Listening on - address: (127.0.0.1:7000), nic: lo, encryption: enabled (openssl) - ... - ... - INFO [main] 2019-07-31 21:18:19,850 StorageService.java:512 - Unable to gossip with any - peers but continuing anyway since node is in its own seed list - INFO [main] 2019-07-31 21:18:19,864 StorageService.java:695 - Loading persisted ring state - INFO [main] 2019-07-31 21:18:19,865 StorageService.java:814 - Starting up server gossip - INFO [main] 2019-07-31 21:18:20,088 BufferPool.java:216 - Global buffer pool is enabled, - when pool is exhausted (max is 251.000MiB) it will allocate on heap - INFO [main] 2019-07-31 21:18:20,110 StorageService.java:875 - This node will not auto - bootstrap because it is configured to be a seed node. - ... - ... - INFO [main] 2019-07-31 21:18:20,809 StorageService.java:1507 - JOINING: Finish joining ring - INFO [main] 2019-07-31 21:18:20,921 StorageService.java:2508 - Node 127.0.0.1:7000 state - jump to NORMAL - -Using Java 11 to Build -^^^^^^^^^^^^^^^^^^^^^^ -If Java 11 is used to build Apache Cassandra 4.0, first Java 11 must be installed and the environment variables set. As an example, to download and install Java 11 on RedHat Linux run the following command. - -:: - - $ yum install java-11-openjdk-devel - -Set the environment variables in the bash script for Java 11. The first command is to open the bash script. - -:: - - $ sudo vi ~/.bashrc - $ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk - $ export JRE_HOME=/usr/lib/jvm/java-11-openjdk/jre - $ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin - -To build source code with Java 11 one of the following two options must be used. - - 1. Include Apache Ant command-line option ``-Duse.jdk=11`` as follows: - :: - - $ ant -Duse.jdk=11 - - 2. Set environment variable ``CASSANDRA_USE_JDK11`` to ``true``: - :: - - $ export CASSANDRA_USE_JDK11=true - -As an example, set the environment variable ``CASSANDRA_USE_JDK11`` to ``true``. - -:: - - [ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true - [ec2-user@ip-172-30-3-146 cassandra]$ ant - Buildfile: /home/ec2-user/cassandra/build.xml - -Or, set the command-line option. - -:: - - [ec2-user@ip-172-30-3-146 cassandra]$ ant -Duse.jdk11=true - -The build output should include the following. - -:: - - _build_java: - [echo] Compiling for Java 11 - ... - ... - build: - - _main-jar: - [copy] Copying 1 file to /home/ec2-user/cassandra/build/classes/main/META-INF - [jar] Building jar: /home/ec2-user/cassandra/build/apache-cassandra-4.0-SNAPSHOT.jar - ... - ... - _build-test: - [javac] Compiling 739 source files to /home/ec2-user/cassandra/build/test/classes - [copy] Copying 25 files to /home/ec2-user/cassandra/build/test/classes - ... - ... - jar: - [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/stress/META-INF - [mkdir] Created dir: /home/ec2-user/cassandra/build/tools/lib - [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/stress.jar - [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/fqltool/META-INF - [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/fqltool.jar - - BUILD SUCCESSFUL - Total time: 1 minute 3 seconds - [ec2-user@ip-172-30-3-146 cassandra]$ - -Common Issues -^^^^^^^^^^^^^^ -One of the two options mentioned must be used to compile with JDK 11 or the build fails and the following error message is output. - -:: - - [ec2-user@ip-172-30-3-146 cassandra]$ ant - Buildfile: /home/ec2-user/cassandra/build.xml - validate-build-conf: - - BUILD FAILED - /home/ec2-user/cassandra/build.xml:293: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true must - be set when building from java 11 - Total time: 1 second - [ec2-user@ip-172-30-3-146 cassandra]$ - -The Java 11 built Apache Cassandra 4.0 source code may be run with Java 11 only. If a Java 11 built code is run with Java 8 the following error message gets output. - -:: - - [root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com - Last login: Wed Jul 31 20:47:26 2019 from 75.155.255.51 - [ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME - /usr/lib/jvm/java-1.8.0-openjdk - [ec2-user@ip-172-30-3-146 ~]$ cassandra - ... - ... - Error: A JNI error has occurred, please check your installation and try again - Exception in thread "main" java.lang.UnsupportedClassVersionError: - org/apache/cassandra/service/CassandraDaemon has been compiled by a more recent version of - the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes - class file versions up to 52.0 - at java.lang.ClassLoader.defineClass1(Native Method) - at java.lang.ClassLoader.defineClass(ClassLoader.java:763) - at ... - ... - -The ``CASSANDRA_USE_JDK11`` variable or the command-line option ``-Duse.jdk11`` cannot be used to build with Java 8. To demonstrate set ``JAVA_HOME`` to version 8. - -:: - - [root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com - Last login: Wed Jul 31 21:41:50 2019 from 75.155.255.51 - [ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME - /usr/lib/jvm/java-1.8.0-openjdk - -Set the ``CASSANDRA_USE_JDK11=true`` or command-line option ``-Duse.jdk11=true``. Subsequently, run Apache Ant to start the build. The build fails with error message listed. - -:: - - [ec2-user@ip-172-30-3-146 ~]$ cd - cassandra - [ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true - [ec2-user@ip-172-30-3-146 cassandra]$ ant - Buildfile: /home/ec2-user/cassandra/build.xml - - validate-build-conf: - - BUILD FAILED - /home/ec2-user/cassandra/build.xml:285: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true cannot - be set when building from java 8 - - Total time: 0 seconds - diff --git a/doc/source/new/messaging.rst b/doc/source/new/messaging.rst deleted file mode 100644 index 755c9d106e06..000000000000 --- a/doc/source/new/messaging.rst +++ /dev/null @@ -1,257 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Improved Internode Messaging ------------------------------- - - -Apache Cassandra 4.0 has added several new improvements to internode messaging. - -Optimized Internode Messaging Protocol -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The internode messaging protocol has been optimized (`CASSANDRA-14485 -`_). Previously the ``IPAddressAndPort`` of the sender was included with each message that was sent even though the ``IPAddressAndPort`` had already been sent once when the initial connection/session was established. In Cassandra 4.0 ``IPAddressAndPort`` has been removed from every separate message sent and only sent when connection/session is initiated. - -Another improvement is that at several instances (listed) a fixed 4-byte integer value has been replaced with ``vint`` as a ``vint`` is almost always less than 1 byte: - -- The ``paramSize`` (the number of parameters in the header) -- Each individual parameter value -- The ``payloadSize`` - - -NIO Messaging -^^^^^^^^^^^^^^^ -In Cassandra 4.0 peer-to-peer (internode) messaging has been switched to non-blocking I/O (NIO) via Netty (`CASSANDRA-8457 -`_). - -As serialization format, each message contains a header with several fixed fields, an optional key-value parameters section, and then the message payload itself. Note: the IP address in the header may be either IPv4 (4 bytes) or IPv6 (16 bytes). - - The diagram below shows the IPv4 address for brevity. - -:: - - 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 - 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | PROTOCOL MAGIC | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Message ID | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Timestamp | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Addr len | IP Address (IPv4) / - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - / | Verb / - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - / | Parameters size / - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - / | Parameter data / - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - / | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Payload size | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | / - / Payload / - / | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -An individual parameter has a String key and a byte array value. The key is serialized with its length, encoded as two bytes, followed by the UTF-8 byte encoding of the string. The body is serialized with its length, encoded as four bytes, followed by the bytes of the value. - -Resource limits on Queued Messages -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -System stability is improved by enforcing strict resource limits (`CASSANDRA-15066 -`_) on the number of outbound messages that are queued, measured by the ``serializedSize`` of the message. There are three separate limits imposed simultaneously to ensure that progress is always made without any reasonable combination of failures impacting a node’s stability. - -1. Global, per-endpoint and per-connection limits are imposed on messages queued for delivery to other nodes and waiting to be processed on arrival from other nodes in the cluster. These limits are applied to the on-wire size of the message being sent or received. -2. The basic per-link limit is consumed in isolation before any endpoint or global limit is imposed. Each node-pair has three links: urgent, small and large. So any given node may have a maximum of ``N*3 * (internode_application_send_queue_capacity_in_bytes + internode_application_receive_queue_capacity_in_bytes)`` messages queued without any coordination between them although in practice, with token-aware routing, only RF*tokens nodes should need to communicate with significant bandwidth. -3. The per-endpoint limit is imposed on all messages exceeding the per-link limit, simultaneously with the global limit, on all links to or from a single node in the cluster. The global limit is imposed on all messages exceeding the per-link limit, simultaneously with the per-endpoint limit, on all links to or from any node in the cluster. The following configuration settings have been added to ``cassandra.yaml`` for resource limits on queued messages. - -:: - - internode_application_send_queue_capacity_in_bytes: 4194304 #4MiB - internode_application_send_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB - internode_application_send_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB - internode_application_receive_queue_capacity_in_bytes: 4194304 #4MiB - internode_application_receive_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB - internode_application_receive_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB - -Virtual Tables for Messaging Metrics -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Metrics is improved by keeping metrics using virtual tables for inter-node inbound and outbound messaging (`CASSANDRA-15066 -`_). For inbound messaging a virtual table (``internode_inbound``) has been added to keep metrics for: - -- Bytes and count of messages that could not be serialized or flushed due to an error -- Bytes and count of messages scheduled -- Bytes and count of messages successfully processed -- Bytes and count of messages successfully received -- Nanos and count of messages throttled -- Bytes and count of messages expired -- Corrupt frames recovered and unrecovered - -A separate virtual table (``internode_outbound``) has been added for outbound inter-node messaging. The outbound virtual table keeps metrics for: - -- Bytes and count of messages pending -- Bytes and count of messages sent -- Bytes and count of messages expired -- Bytes and count of messages that could not be sent due to an error -- Bytes and count of messages overloaded -- Active Connection Count -- Connection Attempts -- Successful Connection Attempts - -Hint Messaging -^^^^^^^^^^^^^^ - -A specialized version of hint message that takes an already encoded in a ``ByteBuffer`` hint and sends it verbatim has been added. It is an optimization for when dispatching a hint file of the current messaging version to a node of the same messaging version, which is the most common case. It saves on extra ``ByteBuffer`` allocations one redundant hint deserialization-serialization cycle. - -Internode Application Timeout -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -A configuration setting has been added to ``cassandra.yaml`` for the maximum continuous period a connection may be unwritable in application space. - -:: - -# internode_application_timeout_in_ms = 30000 - -Some other new features include logging of message size to trace message for tracing a query. - -Paxos prepare and propose stage for local requests optimized -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -In pre-4.0 Paxos prepare and propose messages always go through entire ``MessagingService`` stack in Cassandra even if request is to be served locally, we can enhance and make local requests severed w/o involving ``MessagingService``. Similar things are done elsewhere in Cassandra which skips ``MessagingService`` stage for local requests. - -This is what it looks like in pre 4.0 if we have tracing on and run a light-weight transaction: - -:: - - Sending PAXOS_PREPARE message to /A.B.C.D [MessagingService-Outgoing-/A.B.C.D] | 2017-09-11 - 21:55:18.971000 | A.B.C.D | 15045 - … REQUEST_RESPONSE message received from /A.B.C.D [MessagingService-Incoming-/A.B.C.D] | - 2017-09-11 21:55:18.976000 | A.B.C.D | 20270 - … Processing response from /A.B.C.D [SharedPool-Worker-4] | 2017-09-11 21:55:18.976000 | - A.B.C.D | 20372 - -Same thing applies for Propose stage as well. - -In version 4.0 Paxos prepare and propose stage for local requests are optimized (`CASSANDRA-13862 -`_). - -Quality Assurance -^^^^^^^^^^^^^^^^^ - -Several other quality assurance improvements have been made in version 4.0 (`CASSANDRA-15066 -`_). - -Framing -******* -Version 4.0 introduces framing to all internode messages, i.e. the grouping of messages into a single logical payload with headers and trailers; these frames are guaranteed to either contain at most one message, that is split into its own unique sequence of frames (for large messages), or that a frame contains only complete messages. - -Corruption prevention -********************* -Previously, intra-datacenter internode messages would be unprotected from corruption by default, as only LZ4 provided any integrity checks. All messages to post 4.0 nodes are written to explicit frames, which may be: - -- LZ4 encoded -- CRC protected - -The Unprotected option is still available. - -Resilience -********** -For resilience, all frames are written with a separate CRC protected header, of 8 and 6 bytes respectively. If corruption occurs in this header, the connection must be reset, as before. If corruption occurs anywhere outside of the header, the corrupt frame will be skipped, leaving the connection intact and avoiding the loss of any messages unnecessarily. - -Previously, any issue at any point in the stream would result in the connection being reset, with the loss of any in-flight messages. - -Efficiency -********** -The overall memory usage, and number of byte shuffles, on both inbound and outbound messages is reduced. - -Outbound the Netty LZ4 encoder maintains a chunk size buffer (64KiB), that is filled before any compressed frame can be produced. Our frame encoders avoid this redundant copy, as well as freeing 192KiB per endpoint. - -Inbound, frame decoders guarantee only to copy the number of bytes necessary to parse a frame, and to never store more bytes than necessary. This improvement applies twice to LZ4 connections, improving both the message decode and the LZ4 frame decode. - -Inbound Path -************ -Version 4.0 introduces several improvements to the inbound path. - -An appropriate message handler is used based on whether large or small messages are expected on a particular connection as set in a flag. ``NonblockingBufferHandler``, running on event loop, is used for small messages, and ``BlockingBufferHandler``, running off event loop, for large messages. The single implementation of ``InboundMessageHandler`` handles messages of any size effectively by deriving size of the incoming message from the byte stream. In addition to deriving size of the message from the stream, incoming message expiration time is proactively read, before attempting to deserialize the entire message. If it’s expired at the time when a message is encountered the message is just skipped in the byte stream altogether. -And if a message fails to be deserialized while still on the receiving side - say, because of table id or column being unknown - bytes are skipped, without dropping the entire connection and losing all the buffered messages. An immediately reply back is sent to the coordinator node with the failure reason, rather than waiting for the coordinator callback to expire. This logic is extended to a corrupted frame; a corrupted frame is safely skipped over without dropping the connection. - -Inbound path imposes strict limits on memory utilization. Specifically, the memory occupied by all parsed, but unprocessed messages is bound - on per-connection, per-endpoint, and global basis. Once a connection exceeds its local unprocessed capacity and cannot borrow any permits from per-endpoint and global reserve, it simply stops processing further messages, providing natural backpressure - until sufficient capacity is regained. - -Outbound Connections -******************** - -Opening a connection -++++++++++++++++++++ -A consistent approach is adopted for all kinds of failure to connect, including: refused by endpoint, incompatible versions, or unexpected exceptions; - -- Retry forever, until either success or no messages waiting to deliver. -- Wait incrementally longer periods before reconnecting, up to a maximum of 1s. -- While failing to connect, no reserve queue limits are acquired. - -Closing a connection -++++++++++++++++++++ -- Correctly drains outbound messages that are waiting to be delivered (unless disconnected and fail to reconnect). -- Messages written to a closing connection are either delivered or rejected, with a new connection being opened if the old is irrevocably closed. -- Unused connections are pruned eventually. - -Reconnecting -++++++++++++ - -We sometimes need to reconnect a perfectly valid connection, e.g. if the preferred IP address changes. We ensure that the underlying connection has no in-progress operations before closing it and reconnecting. - -Message Failure -++++++++++++++++ -Propagates to callbacks instantly, better preventing overload by reclaiming committed memory. - -Expiry -~~~~~~~~ -- No longer experiences head-of-line blocking (e.g. undroppable message preventing all droppable messages from being expired). -- While overloaded, expiry is attempted eagerly on enqueuing threads. -- While disconnected we schedule regular pruning, to handle the case where messages are no longer being sent, but we have a large backlog to expire. - -Overload -~~~~~~~~~ -- Tracked by bytes queued, as opposed to number of messages. - -Serialization Errors -~~~~~~~~~~~~~~~~~~~~~ -- Do not result in the connection being invalidated; the message is simply completed with failure, and then erased from the frame. -- Includes detected mismatch between calculated serialization size to actual. - -Failures to flush to network, perhaps because the connection has been reset are not currently notified to callback handlers, as the necessary information has been discarded, though it would be possible to do so in future if we decide it is worth our while. - -QoS -+++++ -"Gossip" connection has been replaced with a general purpose "Urgent" connection, for any small messages impacting system stability. - -Metrics -+++++++ -We track, and expose via Virtual Table and JMX, the number of messages and bytes that: we could not serialize or flush due to an error, we dropped due to overload or timeout, are pending, and have successfully sent. - -Added a Message size limit -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Cassandra pre-4.0 doesn't protect the server from allocating huge buffers for the inter-node Message objects. Adding a message size limit would be good to deal with issues such as a malfunctioning cluster participant. Version 4.0 introduced max message size config param, akin to max mutation size - set to endpoint reserve capacity by default. - -Recover from unknown table when deserializing internode messages -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -As discussed in (`CASSANDRA-9289 -`_) it would be nice to gracefully recover from seeing an unknown table in a message from another node. Pre-4.0, we close the connection and reconnect, which can cause other concurrent queries to fail. -Version 4.0 fixes the issue by wrapping message in-stream with -``TrackedDataInputPlus``, catching -``UnknownCFException``, and skipping the remaining bytes in this message. TCP won't be closed and it will remain connected for other messages. diff --git a/doc/source/new/streaming.rst b/doc/source/new/streaming.rst deleted file mode 100644 index 1807eb4023e9..000000000000 --- a/doc/source/new/streaming.rst +++ /dev/null @@ -1,162 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Improved Streaming ---------------------- - -Apache Cassandra 4.0 has made several improvements to streaming. Streaming is the process used by nodes of a cluster to exchange data in the form of SSTables. Streaming of SSTables is performed for several operations, such as: - -- SSTable Repair -- Host Replacement -- Range movements -- Bootstrapping -- Rebuild -- Cluster expansion - -Streaming based on Netty -^^^^^^^^^^^^^^^^^^^^^^^^ - -Streaming in Cassandra 4.0 is based on Non-blocking Input/Output (NIO) with Netty (`CASSANDRA-12229 -`_). It replaces the single-threaded (or sequential), synchronous, blocking model of streaming messages and transfer of files. Netty supports non-blocking, asynchronous, multi-threaded streaming with which multiple connections are opened simultaneously. Non-blocking implies that threads are not blocked as they don’t wait for a response for a sent request. A response could be returned in a different thread. With asynchronous, connections and threads are decoupled and do not have a 1:1 relation. Several more connections than threads may be opened. - -Zero Copy Streaming -^^^^^^^^^^^^^^^^^^^^ - -Pre-4.0, during streaming Cassandra reifies the SSTables into objects. This creates unnecessary garbage and slows down the whole streaming process as some SSTables can be transferred as a whole file rather than individual partitions. Cassandra 4.0 has added support for streaming entire SSTables when possible (`CASSANDRA-14556 -`_) for faster Streaming using ZeroCopy APIs. If enabled, Cassandra will use ZeroCopy for eligible SSTables significantly speeding up transfers and increasing throughput. A zero-copy path avoids bringing data into user-space on both sending and receiving side. Any streaming related operations will notice corresponding improvement. Zero copy streaming is hardware bound; only limited by the hardware limitations (Network and Disk IO ). - -High Availability -***************** -In benchmark tests Zero Copy Streaming is 5x faster than partitions based streaming. Faster streaming provides the benefit of improved availability. A cluster’s recovery mainly depends on the streaming speed, Cassandra clusters with failed nodes will be able to recover much more quickly (5x faster). If a node fails, SSTables need to be streamed to a replacement node. During the replacement operation, the new Cassandra node streams SSTables from the neighboring nodes that hold copies of the data belonging to this new node’s token range. Depending on the amount of data stored, this process can require substantial network bandwidth, taking some time to complete. The longer these range movement operations take, the more the cluster availability is lost. Failure of multiple nodes would reduce high availability greatly. The faster the new node completes streaming its data, the faster it can serve traffic, increasing the availability of the cluster. - -Enabling Zero Copy Streaming -***************************** -Zero copy streaming is enabled by setting the following setting in ``cassandra.yaml``. - -:: - - stream_entire_sstables: true - -By default zero copy streaming is enabled. - -SSTables Eligible for Zero Copy Streaming -***************************************** -Zero copy streaming is used if all partitions within the SSTable need to be transmitted. This is common when using ``LeveledCompactionStrategy`` or when partitioning SSTables by token range has been enabled. All partition keys in the SSTables are iterated over to determine the eligibility for Zero Copy streaming. - -Benefits of Zero Copy Streaming -******************************** -When enabled, it permits Cassandra to zero-copy stream entire eligible SSTables between nodes, including every component. This speeds up the network transfer significantly subject to throttling specified by ``stream_throughput_outbound_megabits_per_sec``. - -Enabling this will reduce the GC pressure on sending and receiving node. While this feature tries to keep the disks balanced, it cannot guarantee it. This feature will be automatically disabled if internode encryption is enabled. Currently this can be used with Leveled Compaction. - -Configuring for Zero Copy Streaming -************************************ -Throttling would reduce the streaming speed. The ``stream_throughput_outbound_megabits_per_sec`` throttles all outbound streaming file transfers on a node to the given total throughput in Mbps. When unset, the default is 200 Mbps or 25 MB/s. - -:: - - stream_throughput_outbound_megabits_per_sec: 200 - -To run any Zero Copy streaming benchmark the ``stream_throughput_outbound_megabits_per_sec`` must be set to a really high value otherwise, throttling will be significant and the benchmark results will not be meaningful. - -The ``inter_dc_stream_throughput_outbound_megabits_per_sec`` throttles all streaming file transfer between the datacenters, this setting allows users to throttle inter dc stream throughput in addition to throttling all network stream traffic as configured with ``stream_throughput_outbound_megabits_per_sec``. When unset, the default is 200 Mbps or 25 MB/s. - -:: - - inter_dc_stream_throughput_outbound_megabits_per_sec: 200 - -SSTable Components Streamed with Zero Copy Streaming -***************************************************** -Zero Copy Streaming streams entire SSTables. SSTables are made up of multiple components in separate files. SSTable components streamed are listed in Table 1. - -Table 1. SSTable Components - -+------------------+---------------------------------------------------+ -|SSTable Component | Description | -+------------------+---------------------------------------------------+ -| Data.db |The base data for an SSTable: the remaining | -| |components can be regenerated based on the data | -| |component. | -+------------------+---------------------------------------------------+ -| Index.db |Index of the row keys with pointers to their | -| |positions in the data file. | -+------------------+---------------------------------------------------+ -| Filter.db |Serialized bloom filter for the row keys in the | -| |SSTable. | -+------------------+---------------------------------------------------+ -|CompressionInfo.db|File to hold information about uncompressed | -| |data length, chunk offsets etc. | -+------------------+---------------------------------------------------+ -| Statistics.db |Statistical metadata about the content of the | -| |SSTable. | -+------------------+---------------------------------------------------+ -| Digest.crc32 |Holds CRC32 checksum of the data file | -| |size_bytes. | -+------------------+---------------------------------------------------+ -| CRC.db |Holds the CRC32 for chunks in an uncompressed file.| -+------------------+---------------------------------------------------+ -| Summary.db |Holds SSTable Index Summary | -| |(sampling of Index component) | -+------------------+---------------------------------------------------+ -| TOC.txt |Table of contents, stores the list of all | -| |components for the SSTable. | -+------------------+---------------------------------------------------+ - -Custom component, used by e.g. custom compaction strategy may also be included. - -Repair Streaming Preview -^^^^^^^^^^^^^^^^^^^^^^^^ - -Repair with ``nodetool repair`` involves streaming of repaired SSTables and a repair preview has been added to provide an estimate of the amount of repair streaming that would need to be performed. Repair preview (`CASSANDRA-13257 -`_) is invoke with ``nodetool repair --preview`` using option: - -:: - --prv, --preview - -It determines ranges and amount of data to be streamed, but doesn't actually perform repair. - -Parallelizing of Streaming of Keyspaces -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The streaming of the different keyspaces for bootstrap and rebuild has been parallelized in Cassandra 4.0 (`CASSANDRA-4663 -`_). - -Unique nodes for Streaming in Multi-DC deployment -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Range Streamer picks unique nodes to stream data from when number of replicas in each DC is three or more (`CASSANDRA-4650 -`_). What the optimization does is to even out the streaming load across the cluster. Without the optimization, some node can be picked up to stream more data than others. This patch allows to select dedicated node to stream only one range. - -This will increase the performance of bootstrapping a node and will also put less pressure on nodes serving the data. This does not affect if N < 3 in each DC as then it streams data from only 2 nodes. - -Stream Operation Types -^^^^^^^^^^^^^ - -It is important to know the type or purpose of a certain stream. Version 4.0 (`CASSANDRA-13064 -`_) adds an ``enum`` to distinguish between the different types of streams. Stream types are available both in a stream request and a stream task. The different stream types are: - -- Restore replica count -- Unbootstrap -- Relocation -- Bootstrap -- Rebuild -- Bulk Load -- Repair - -Disallow Decommission when number of Replicas will drop below configured RF -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`CASSANDRA-12510 -`_ guards against decommission that will drop # of replicas below configured replication factor (RF), and adds the ``--force`` option that allows decommission to continue if intentional; force decommission of this node even when it reduces the number of replicas to below configured RF. diff --git a/doc/source/new/transientreplication.rst b/doc/source/new/transientreplication.rst deleted file mode 100644 index aa39a110fdb1..000000000000 --- a/doc/source/new/transientreplication.rst +++ /dev/null @@ -1,155 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Transient Replication ---------------------- - -**Note**: - -Transient Replication (`CASSANDRA-14404 -`_) is an experimental feature designed for expert Apache Cassandra users who are able to validate every aspect of the database for their application and deployment. -That means being able to check that operations like reads, writes, decommission, remove, rebuild, repair, and replace all work with your queries, data, configuration, operational practices, and availability requirements. -Apache Cassandra 4.0 has the initial implementation of transient replication. Future releases of Cassandra will make this feature suitable for a wider audience. -It is anticipated that a future version will support monotonic reads with transient replication as well as LWT, logged batches, and counters. Being experimental, Transient replication is **not** recommended for production use. - -Objective -^^^^^^^^^ - -The objective of transient replication is to decouple storage requirements from data redundancy (or consensus group size) using incremental repair, in order to reduce storage overhead. -Certain nodes act as full replicas (storing all the data for a given token range), and some nodes act as transient replicas, storing only unrepaired data for the same token ranges. - -The optimization that is made possible with transient replication is called "Cheap quorums", which implies that data redundancy is increased without corresponding increase in storage usage. - -Transient replication is useful when sufficient full replicas are available to receive and store all the data. -Transient replication allows you to configure a subset of replicas to only replicate data that hasn't been incrementally repaired. -As an optimization, we can avoid writing data to a transient replica if we have successfully written data to the full replicas. - -After incremental repair, transient data stored on transient replicas can be discarded. - -Enabling Transient Replication -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Transient replication is not enabled by default. Transient replication must be enabled on each node in a cluster separately by setting the following configuration property in ``cassandra.yaml``. - -:: - - enable_transient_replication: true - -Transient replication may be configured with both ``SimpleStrategy`` and ``NetworkTopologyStrategy``. Transient replication is configured by setting replication factor as ``/``. - -As an example, create a keyspace with replication factor (RF) 3. - -:: - - CREATE KEYSPACE CassandraKeyspaceSimple WITH replication = {'class': 'SimpleStrategy', - 'replication_factor' : 3/1}; - - -As another example, ``some_keysopace keyspace`` will have 3 replicas in DC1, 1 of which is transient, and 5 replicas in DC2, 2 of which are transient: - -:: - - CREATE KEYSPACE some_keysopace WITH replication = {'class': 'NetworkTopologyStrategy', - 'DC1' : '3/1'', 'DC2' : '5/2'}; - -Transiently replicated keyspaces only support tables with ``read_repair`` set to ``NONE``. - -Important Restrictions: - -- RF cannot be altered while some endpoints are not in a normal state (no range movements). -- You can't add full replicas if there are any transient replicas. You must first remove all transient replicas, then change the # of full replicas, then add back the transient replicas. -- You can only safely increase number of transients one at a time with incremental repair run in between each time. - - -Additionally, transient replication cannot be used for: - -- Monotonic Reads -- Lightweight Transactions (LWTs) -- Logged Batches -- Counters -- Keyspaces using materialized views -- Secondary indexes (2i) - -Cheap Quorums -^^^^^^^^^^^^^ - -Cheap quorums are a set of optimizations on the write path to avoid writing to transient replicas unless sufficient full replicas are not available to satisfy the requested consistency level. -Hints are never written for transient replicas. Optimizations on the read path prefer reading from transient replicas. -When writing at quorum to a table configured to use transient replication the quorum will always prefer available full -replicas over transient replicas so that transient replicas don't have to process writes. Tail latency is reduced by -rapid write protection (similar to rapid read protection) when full replicas are slow or unavailable by sending writes -to transient replicas. Transient replicas can serve reads faster as they don't have to do anything beyond bloom filter -checks if they have no data. With vnodes and large cluster sizes they will not have a large quantity of data -even for failure of one or more full replicas where transient replicas start to serve a steady amount of write traffic -for some of their transiently replicated ranges. - -Speculative Write Option -^^^^^^^^^^^^^^^^^^^^^^^^ -The ``CREATE TABLE`` adds an option ``speculative_write_threshold`` for use with transient replicas. The option is of type ``simple`` with default value as ``99PERCENTILE``. When replicas are slow or unresponsive ``speculative_write_threshold`` specifies the threshold at which a cheap quorum write will be upgraded to include transient replicas. - - -Pending Ranges and Transient Replicas -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Pending ranges refers to the movement of token ranges between transient replicas. When a transient range is moved, there -will be a period of time where both transient replicas would need to receive any write intended for the logical -transient replica so that after the movement takes effect a read quorum is able to return a response. Nodes are *not* -temporarily transient replicas during expansion. They stream data like a full replica for the transient range before they -can serve reads. A pending state is incurred similar to how there is a pending state for full replicas. Transient replicas -also always receive writes when they are pending. Pending transient ranges are sent a bit more data and reading from -them is avoided. - - -Read Repair and Transient Replicas -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Read repair never attempts to repair a transient replica. Reads will always include at least one full replica. -They should also prefer transient replicas where possible. Range scans ensure the entire scanned range performs -replica selection that satisfies the requirement that every range scanned includes one full replica. During incremental -& validation repair handling, at transient replicas anti-compaction does not output any data for transient ranges as the -data will be dropped after repair, and transient replicas never have data streamed to them. - - -Transitioning between Full Replicas and Transient Replicas -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The additional state transitions that transient replication introduces requires streaming and ``nodetool cleanup`` to -behave differently. When data is streamed it is ensured that it is streamed from a full replica and not a transient replica. - -Transitioning from not replicated to transiently replicated means that a node must stay pending until the next incremental -repair completes at which point the data for that range is known to be available at full replicas. - -Transitioning from transiently replicated to fully replicated requires streaming from a full replica and is identical -to how data is streamed when transitioning from not replicated to replicated. The transition is managed so the transient -replica is not read from as a full replica until streaming completes. It can be used immediately for a write quorum. - -Transitioning from fully replicated to transiently replicated requires cleanup to remove repaired data from the transiently -replicated range to reclaim space. It can be used immediately for a write quorum. - -Transitioning from transiently replicated to not replicated requires cleanup to be run to remove the formerly transiently replicated data. - -When transient replication is in use ring changes are supported including add/remove node, change RF, add/remove DC. - - -Transient Replication supports EACH_QUORUM -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -(`CASSANDRA-14727 -`_) adds support for Transient Replication support for ``EACH_QUORUM``. Per (`CASSANDRA-14768 -`_), we ensure we write to at least a ``QUORUM`` of nodes in every DC, -regardless of how many responses we need to wait for and our requested consistency level. This is to minimally surprise -users with transient replication; with normal writes, we soft-ensure that we reach ``QUORUM`` in all DCs we are able to, -by writing to every node; even if we don't wait for ACK, we have in both cases sent sufficient messages. diff --git a/doc/source/new/virtualtables.rst b/doc/source/new/virtualtables.rst deleted file mode 100644 index 1a39dc6786ef..000000000000 --- a/doc/source/new/virtualtables.rst +++ /dev/null @@ -1,342 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Virtual Tables --------------- - -Apache Cassandra 4.0 implements virtual tables (`CASSANDRA-7622 -`_). - -Definition -^^^^^^^^^^ - -A virtual table is a table that is backed by an API instead of data explicitly managed and stored as SSTables. Apache Cassandra 4.0 implements a virtual keyspace interface for virtual tables. Virtual tables are specific to each node. - -Objective -^^^^^^^^^ - -A virtual table could have several uses including: - -- Expose metrics through CQL -- Expose YAML configuration information - -How are Virtual Tables different from regular tables? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Virtual tables and virtual keyspaces are quite different from regular tables and keyspaces respectively such as: - -- Virtual tables are read-only, but it is likely to change -- Virtual tables are not replicated -- Virtual tables are local only and non distributed -- Virtual tables have no associated SSTables -- Consistency level of the queries sent virtual tables are ignored -- Virtual tables are managed by Cassandra and a user cannot run DDL to create new virtual tables or DML to modify existing virtual tables -- Virtual tables are created in special keyspaces and not just any keyspace -- All existing virtual tables use ``LocalPartitioner``. Since a virtual table is not replicated the partitioner sorts in order of partition keys instead of by their hash. -- Making advanced queries with ``ALLOW FILTERING`` and aggregation functions may be used with virtual tables even though in normal tables we dont recommend it - -Virtual Keyspaces -^^^^^^^^^^^^^^^^^ - -Apache Cassandra 4.0 has added two new keyspaces for virtual tables: ``system_virtual_schema`` and ``system_views``. Run the following command to list the keyspaces: - -:: - - cqlsh> DESC KEYSPACES; - system_schema system system_distributed system_virtual_schema - system_auth system_traces system_views - -The ``system_virtual_schema keyspace`` contains schema information on virtual tables. The ``system_views`` keyspace contains the actual virtual tables. - -Virtual Table Limitations -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Virtual tables and virtual keyspaces have some limitations initially though some of these could change such as: - -- Cannot alter or drop virtual keyspaces or tables -- Cannot truncate virtual tables -- Expiring columns are not supported by virtual tables -- Conditional updates are not supported by virtual tables -- Cannot create tables in virtual keyspaces -- Cannot perform any operations against virtual keyspace -- Secondary indexes are not supported on virtual tables -- Cannot create functions in virtual keyspaces -- Cannot create types in virtual keyspaces -- Materialized views are not supported on virtual tables -- Virtual tables don't support ``DELETE`` statements -- Cannot ``CREATE TRIGGER`` against a virtual table -- Conditional ``BATCH`` statements cannot include mutations for virtual tables -- Cannot include a virtual table statement in a logged batch -- Mutations for virtual and regular tables cannot exist in the same batch -- Conditional ``BATCH`` statements cannot include mutations for virtual tables -- Cannot create aggregates in virtual keyspaces; but may run aggregate functions on select - -Listing and Describing Virtual Tables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Virtual tables in a virtual keyspace may be listed with ``DESC TABLES``. The ``system_views`` virtual keyspace tables include the following: - -:: - - cqlsh> USE system_views; - cqlsh:system_views> DESC TABLES; - coordinator_scans clients tombstones_scanned internode_inbound - disk_usage sstable_tasks live_scanned caches - local_writes max_partition_size local_reads - coordinator_writes internode_outbound thread_pools - local_scans coordinator_reads settings - -Some of the salient virtual tables in ``system_views`` virtual keyspace are described in Table 1. - -Table 1 : Virtual Tables in system_views - -+------------------+---------------------------------------------------+ -|Virtual Table | Description | -+------------------+---------------------------------------------------+ -| clients |Lists information about all connected clients. | -+------------------+---------------------------------------------------+ -| disk_usage |Disk usage including disk_space, keyspace_name, | -| |and table_name by system keyspaces. | -+------------------+---------------------------------------------------+ -| local_writes |A table metric for local writes | -| |including count, keyspace_name, | -| |max, median, per_second, and | -| |table_name. | -+------------------+---------------------------------------------------+ -| caches |Displays the general cache information including | -| |cache name, capacity_bytes, entry_count, hit_count,| -| |hit_ratio double, recent_hit_rate_per_second, | -| |recent_request_rate_per_second, request_count, and | -| |size_bytes. | -+------------------+---------------------------------------------------+ -| local_reads |A table metric for local reads information. | -+------------------+---------------------------------------------------+ -| sstable_tasks |Lists currently running tasks such as compactions | -| |and upgrades on SSTables. | -+------------------+---------------------------------------------------+ -|internode_inbound |Lists information about the inbound | -| |internode messaging. | -+------------------+---------------------------------------------------+ -| thread_pools |Lists metrics for each thread pool. | -+------------------+---------------------------------------------------+ -| settings |Displays configuration settings in cassandra.yaml. | -+------------------+---------------------------------------------------+ -|max_partition_size|A table metric for maximum partition size. | -+------------------+---------------------------------------------------+ -|internode_outbound|Information about the outbound internode messaging.| -| | | -+------------------+---------------------------------------------------+ - -We shall discuss some of the virtual tables in more detail next. - -Clients Virtual Table -********************* - -The ``clients`` virtual table lists all active connections (connected clients) including their ip address, port, connection stage, driver name, driver version, hostname, protocol version, request count, ssl enabled, ssl protocol and user name: - -:: - - cqlsh:system_views> select * from system_views.clients; - address | port | connection_stage | driver_name | driver_version | hostname | protocol_version | request_count | ssl_cipher_suite | ssl_enabled | ssl_protocol | username - -----------+-------+------------------+-------------+----------------+-----------+------------------+---------------+------------------+-------------+--------------+----------- - 127.0.0.1 | 50628 | ready | null | null | localhost | 4 | 55 | null | False | null | anonymous - 127.0.0.1 | 50630 | ready | null | null | localhost | 4 | 70 | null | False | null | anonymous - - (2 rows) - -Some examples of how ``clients`` can be used are: - -- To find applications using old incompatible versions of drivers before upgrading and with ``nodetool enableoldprotocolversions`` and ``nodetool disableoldprotocolversions`` during upgrades. -- To identify clients sending too many requests. -- To find if SSL is enabled during the migration to and from ssl. - - -The virtual tables may be described with ``DESCRIBE`` statement. The DDL listed however cannot be run to create a virtual table. As an example describe the ``system_views.clients`` virtual table: - -:: - - cqlsh:system_views> DESC TABLE system_views.clients; - CREATE TABLE system_views.clients ( - address inet, - connection_stage text, - driver_name text, - driver_version text, - hostname text, - port int, - protocol_version int, - request_count bigint, - ssl_cipher_suite text, - ssl_enabled boolean, - ssl_protocol text, - username text, - PRIMARY KEY (address, port)) WITH CLUSTERING ORDER BY (port ASC) - AND compaction = {'class': 'None'} - AND compression = {}; - -Caches Virtual Table -******************** -The ``caches`` virtual table lists information about the caches. The four caches presently created are chunks, counters, keys and rows. A query on the ``caches`` virtual table returns the following details: - -:: - - cqlsh:system_views> SELECT * FROM system_views.caches; - name | capacity_bytes | entry_count | hit_count | hit_ratio | recent_hit_rate_per_second | recent_request_rate_per_second | request_count | size_bytes - ---------+----------------+-------------+-----------+-----------+----------------------------+--------------------------------+---------------+------------ - chunks | 229638144 | 29 | 166 | 0.83 | 5 | 6 | 200 | 475136 - counters | 26214400 | 0 | 0 | NaN | 0 | 0 | 0 | 0 - keys | 52428800 | 14 | 124 | 0.873239 | 4 | 4 | 142 | 1248 - rows | 0 | 0 | 0 | NaN | 0 | 0 | 0 | 0 - - (4 rows) - -Settings Virtual Table -********************** -The ``settings`` table is rather useful and lists all the current configuration settings from the ``cassandra.yaml``. The encryption options are overridden to hide the sensitive truststore information or passwords. The configuration settings however cannot be set using DML on the virtual table presently: -:: - - cqlsh:system_views> SELECT * FROM system_views.settings; - - name | value - -------------------------------------+-------------------- - allocate_tokens_for_keyspace | null - audit_logging_options_enabled | false - auto_snapshot | true - automatic_sstable_upgrade | false - cluster_name | Test Cluster - enable_transient_replication | false - hinted_handoff_enabled | true - hints_directory | /home/ec2-user/cassandra/data/hints - incremental_backups | false - initial_token | null - ... - ... - ... - rpc_address | localhost - ssl_storage_port | 7001 - start_native_transport | true - storage_port | 7000 - stream_entire_sstables | true - (224 rows) - - -The ``settings`` table can be really useful if yaml file has been changed since startup and dont know running configuration, or to find if they have been modified via jmx/nodetool or virtual tables. - - -Thread Pools Virtual Table -************************** - -The ``thread_pools`` table lists information about all thread pools. Thread pool information includes active tasks, active tasks limit, blocked tasks, blocked tasks all time, completed tasks, and pending tasks. A query on the ``thread_pools`` returns following details: - -:: - - cqlsh:system_views> select * from system_views.thread_pools; - - name | active_tasks | active_tasks_limit | blocked_tasks | blocked_tasks_all_time | completed_tasks | pending_tasks - ------------------------------+--------------+--------------------+---------------+------------------------+-----------------+--------------- - AntiEntropyStage | 0 | 1 | 0 | 0 | 0 | 0 - CacheCleanupExecutor | 0 | 1 | 0 | 0 | 0 | 0 - CompactionExecutor | 0 | 2 | 0 | 0 | 881 | 0 - CounterMutationStage | 0 | 32 | 0 | 0 | 0 | 0 - GossipStage | 0 | 1 | 0 | 0 | 0 | 0 - HintsDispatcher | 0 | 2 | 0 | 0 | 0 | 0 - InternalResponseStage | 0 | 2 | 0 | 0 | 0 | 0 - MemtableFlushWriter | 0 | 2 | 0 | 0 | 1 | 0 - MemtablePostFlush | 0 | 1 | 0 | 0 | 2 | 0 - MemtableReclaimMemory | 0 | 1 | 0 | 0 | 1 | 0 - MigrationStage | 0 | 1 | 0 | 0 | 0 | 0 - MiscStage | 0 | 1 | 0 | 0 | 0 | 0 - MutationStage | 0 | 32 | 0 | 0 | 0 | 0 - Native-Transport-Requests | 1 | 128 | 0 | 0 | 130 | 0 - PendingRangeCalculator | 0 | 1 | 0 | 0 | 1 | 0 - PerDiskMemtableFlushWriter_0 | 0 | 2 | 0 | 0 | 1 | 0 - ReadStage | 0 | 32 | 0 | 0 | 13 | 0 - Repair-Task | 0 | 2147483647 | 0 | 0 | 0 | 0 - RequestResponseStage | 0 | 2 | 0 | 0 | 0 | 0 - Sampler | 0 | 1 | 0 | 0 | 0 | 0 - SecondaryIndexManagement | 0 | 1 | 0 | 0 | 0 | 0 - ValidationExecutor | 0 | 2147483647 | 0 | 0 | 0 | 0 - ViewBuildExecutor | 0 | 1 | 0 | 0 | 0 | 0 - ViewMutationStage | 0 | 32 | 0 | 0 | 0 | 0 - -(24 rows) - -Internode Inbound Messaging Virtual Table -***************************************** - -The ``internode_inbound`` virtual table is for the internode inbound messaging. Initially no internode inbound messaging may get listed. In addition to the address, port, datacenter and rack information includes corrupt frames recovered, corrupt frames unrecovered, error bytes, error count, expired bytes, expired count, processed bytes, processed count, received bytes, received count, scheduled bytes, scheduled count, throttled count, throttled nanos, using bytes, using reserve bytes. A query on the ``internode_inbound`` returns following details: - -:: - - cqlsh:system_views> SELECT * FROM system_views.internode_inbound; - address | port | dc | rack | corrupt_frames_recovered | corrupt_frames_unrecovered | - error_bytes | error_count | expired_bytes | expired_count | processed_bytes | - processed_count | received_bytes | received_count | scheduled_bytes | scheduled_count | throttled_count | throttled_nanos | using_bytes | using_reserve_bytes - ---------+------+----+------+--------------------------+----------------------------+- - ---------- - (0 rows) - -SSTables Tasks Virtual Table -**************************** - -The ``sstable_tasks`` could be used to get information about running tasks. It lists following columns: - -:: - - cqlsh:system_views> SELECT * FROM sstable_tasks; - keyspace_name | table_name | task_id | kind | progress | total | unit - ---------------+------------+--------------------------------------+------------+----------+----------+------- - basic | wide2 | c3909740-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 60418761 | 70882110 | bytes - basic | wide2 | c7556770-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 2995623 | 40314679 | bytes - - -As another example, to find how much time is remaining for SSTable tasks, use the following query: - -:: - - SELECT total - progress AS remaining - FROM system_views.sstable_tasks; - -Other Virtual Tables -******************** - -Some examples of using other virtual tables are as follows. - -Find tables with most disk usage: - -:: - - cqlsh> SELECT * FROM disk_usage WHERE mebibytes > 1 ALLOW FILTERING; - - keyspace_name | table_name | mebibytes - ---------------+------------+----------- - keyspace1 | standard1 | 288 - tlp_stress | keyvalue | 3211 - -Find queries on table/s with greatest read latency: - -:: - - cqlsh> SELECT * FROM local_read_latency WHERE per_second > 1 ALLOW FILTERING; - - keyspace_name | table_name | p50th_ms | p99th_ms | count | max_ms | per_second - ---------------+------------+----------+----------+----------+---------+------------ - tlp_stress | keyvalue | 0.043 | 0.152 | 49785158 | 186.563 | 11418.356 - - -The system_virtual_schema keyspace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``system_virtual_schema`` keyspace has three tables: ``keyspaces``, ``columns`` and ``tables`` for the virtual keyspace definitions, virtual table definitions, and virtual column definitions respectively. It is used by Cassandra internally and a user would not need to access it directly. diff --git a/doc/source/operating/audit_logging.rst b/doc/source/operating/audit_logging.rst deleted file mode 100644 index 068209ee812f..000000000000 --- a/doc/source/operating/audit_logging.rst +++ /dev/null @@ -1,236 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - - - -Audit Logging ------------------- - -Audit logging in Cassandra logs every incoming CQL command request, Authentication (successful as well as unsuccessful login) -to C* node. Currently, there are two implementations provided, the custom logger can be implemented and injected with the -class name as a parameter in cassandra.yaml. - -- ``BinAuditLogger`` An efficient way to log events to file in a binary format. -- ``FileAuditLogger`` Logs events to ``audit/audit.log`` file using slf4j logger. - -*Recommendation* ``BinAuditLogger`` is a community recommended logger considering the performance - -What does it capture -^^^^^^^^^^^^^^^^^^^^^^^ - -Audit logging captures following events - -- Successful as well as unsuccessful login attempts. - -- All database commands executed via Native protocol (CQL) attempted or successfully executed. - -Limitations -^^^^^^^^^^^ - -Executing prepared statements will log the query as provided by the client in the prepare call, along with the execution time stamp and all other attributes (see below). Actual values bound for prepared statement execution will not show up in the audit log. - -What does it log -^^^^^^^^^^^^^^^^^^^ -Each audit log implementation has access to the following attributes, and for the default text based logger these fields are concatenated with `|` s to yield the final message. - - - ``user``: User name(if available) - - ``host``: Host IP, where the command is being executed - - ``source ip address``: Source IP address from where the request initiated - - ``source port``: Source port number from where the request initiated - - ``timestamp``: unix time stamp - - ``type``: Type of the request (SELECT, INSERT, etc.,) - - ``category`` - Category of the request (DDL, DML, etc.,) - - ``keyspace`` - Keyspace(If applicable) on which request is targeted to be executed - - ``scope`` - Table/Aggregate name/ function name/ trigger name etc., as applicable - - ``operation`` - CQL command being executed - -How to configure -^^^^^^^^^^^^^^^^^^ -Auditlog can be configured using cassandra.yaml. If you want to try Auditlog on one node, it can also be enabled and configured using ``nodetool``. - -cassandra.yaml configurations for AuditLog -""""""""""""""""""""""""""""""""""""""""""""" - - ``enabled``: This option enables/ disables audit log - - ``logger``: Class name of the logger/ custom logger. - - ``audit_logs_dir``: Auditlogs directory location, if not set, default to `cassandra.logdir.audit` or `cassandra.logdir` + /audit/ - - ``included_keyspaces``: Comma separated list of keyspaces to be included in audit log, default - includes all keyspaces - - ``excluded_keyspaces``: Comma separated list of keyspaces to be excluded from audit log, default - excludes no keyspace except `system`, `system_schema` and `system_virtual_schema` - - ``included_categories``: Comma separated list of Audit Log Categories to be included in audit log, default - includes all categories - - ``excluded_categories``: Comma separated list of Audit Log Categories to be excluded from audit log, default - excludes no category - - ``included_users``: Comma separated list of users to be included in audit log, default - includes all users - - ``excluded_users``: Comma separated list of users to be excluded from audit log, default - excludes no user - - -List of available categories are: QUERY, DML, DDL, DCL, OTHER, AUTH, ERROR, PREPARE - -NodeTool command to enable AuditLog -""""""""""""""""""""""""""""""""""""" -``enableauditlog``: Enables AuditLog with yaml defaults. yaml configurations can be overridden using options via nodetool command. - -:: - - nodetool enableauditlog - -Options -********** - - -``--excluded-categories`` - Comma separated list of Audit Log Categories to be excluded for - audit log. If not set the value from cassandra.yaml will be used - -``--excluded-keyspaces`` - Comma separated list of keyspaces to be excluded for audit log. If - not set the value from cassandra.yaml will be used. - Please remeber that `system`, `system_schema` and `system_virtual_schema` are excluded by default, - if you are overwriting this option via nodetool, - remember to add these keyspaces back if you dont want them in audit logs - -``--excluded-users`` - Comma separated list of users to be excluded for audit log. If not - set the value from cassandra.yaml will be used - -``--included-categories`` - Comma separated list of Audit Log Categories to be included for - audit log. If not set the value from cassandra.yaml will be used - -``--included-keyspaces`` - Comma separated list of keyspaces to be included for audit log. If - not set the value from cassandra.yaml will be used - -``--included-users`` - Comma separated list of users to be included for audit log. If not - set the value from cassandra.yaml will be used - -``--logger`` - Logger name to be used for AuditLogging. Default BinAuditLogger. If - not set the value from cassandra.yaml will be used - - -NodeTool command to disable AuditLog -""""""""""""""""""""""""""""""""""""""" - -``disableauditlog``: Disables AuditLog. - -:: - - nodetool disableuditlog - - - - - - - -NodeTool command to reload AuditLog filters -""""""""""""""""""""""""""""""""""""""""""""" - -``enableauditlog``: NodeTool enableauditlog command can be used to reload auditlog filters when called with default or previous ``loggername`` and updated filters - -E.g., - -:: - - nodetool enableauditlog --loggername --included-keyspaces - - - -View the contents of AuditLog Files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -``auditlogviewer`` is the new tool introduced to help view the contents of binlog file in human readable text format. - -:: - - auditlogviewer [...] [options] - -Options -"""""""" - -``-f,--follow`` - Upon reacahing the end of the log continue indefinitely - waiting for more records -``-r,--roll_cycle`` - How often to roll the log file was rolled. May be - necessary for Chronicle to correctly parse file names. (MINUTELY, HOURLY, - DAILY). Default HOURLY. - -``-h,--help`` - display this help message - -For example, to dump the contents of audit log files on the console - -:: - - auditlogviewer /logs/cassandra/audit - -Sample output -""""""""""""" - -:: - - LogMessage: user:anonymous|host:localhost/X.X.X.X|source:/X.X.X.X|port:60878|timestamp:1521158923615|type:USE_KS|category:DDL|ks:dev1|operation:USE "dev1" - - - -Configuring BinAuditLogger -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -To use ``BinAuditLogger`` as a logger in AuditLogging, set the logger to ``BinAuditLogger`` in cassandra.yaml under ``audit_logging_options`` section. ``BinAuditLogger`` can be futher configued using its advanced options in cassandra.yaml. - - -Adcanced Options for BinAuditLogger -"""""""""""""""""""""""""""""""""""""" - -``block`` - Indicates if the AuditLog should block if the it falls behind or should drop audit log records. Default is set to ``true`` so that AuditLog records wont be lost - -``max_queue_weight`` - Maximum weight of in memory queue for records waiting to be written to the audit log file before blocking or dropping the log records. Default is set to ``256 * 1024 * 1024`` - -``max_log_size`` - Maximum size of the rolled files to retain on disk before deleting the oldest file. Default is set to ``16L * 1024L * 1024L * 1024L`` - -``roll_cycle`` - How often to roll Audit log segments so they can potentially be reclaimed. Available options are: MINUTELY, HOURLY, DAILY, LARGE_DAILY, XLARGE_DAILY, HUGE_DAILY.For more options, refer: net.openhft.chronicle.queue.RollCycles. Default is set to ``"HOURLY"`` - -Configuring FileAuditLogger -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -To use ``FileAuditLogger`` as a logger in AuditLogging, apart from setting the class name in cassandra.yaml, following configuration is needed to have the audit log events to flow through separate log file instead of system.log - - -.. code-block:: xml - - - - ${cassandra.logdir}/audit/audit.log - - - ${cassandra.logdir}/audit/audit.log.%d{yyyy-MM-dd}.%i.zip - - 50MB - 30 - 5GB - - - %-5level [%thread] %date{ISO8601} %F:%L - %msg%n - - - - - - - diff --git a/doc/source/operating/backups.rst b/doc/source/operating/backups.rst deleted file mode 100644 index 01cb6c588298..000000000000 --- a/doc/source/operating/backups.rst +++ /dev/null @@ -1,660 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. -.. highlight:: none - -Backups -------- - -Apache Cassandra stores data in immutable SSTable files. Backups in Apache Cassandra database are backup copies of the database data that is stored as SSTable files. Backups are used for several purposes including the following: - -- To store a data copy for durability -- To be able to restore a table if table data is lost due to node/partition/network failure -- To be able to transfer the SSTable files to a different machine; for portability - -Types of Backups -^^^^^^^^^^^^^^^^ -Apache Cassandra supports two kinds of backup strategies. - -- Snapshots -- Incremental Backups - -A *snapshot* is a copy of a table’s SSTable files at a given time, created via hard links. The DDL to create the table is stored as well. Snapshots may be created by a user or created automatically. -The setting (``snapshot_before_compaction``) in ``cassandra.yaml`` determines if snapshots are created before each compaction. -By default ``snapshot_before_compaction`` is set to false. -Snapshots may be created automatically before keyspace truncation or dropping of a table by setting ``auto_snapshot`` to true (default) in ``cassandra.yaml``. -Truncates could be delayed due to the auto snapshots and another setting in ``cassandra.yaml`` determines how long the coordinator should wait for truncates to complete. -By default Cassandra waits 60 seconds for auto snapshots to complete. - -An *incremental backup* is a copy of a table’s SSTable files created by a hard link when memtables are flushed to disk as SSTables. -Typically incremental backups are paired with snapshots to reduce the backup time as well as reduce disk space. -Incremental backups are not enabled by default and must be enabled explicitly in ``cassandra.yaml`` (with ``incremental_backups`` setting) or with the Nodetool. -Once enabled, Cassandra creates a hard link to each SSTable flushed or streamed locally in a ``backups/`` subdirectory of the keyspace data. Incremental backups of system tables are also created. - -Data Directory Structure -^^^^^^^^^^^^^^^^^^^^^^^^ -The directory structure of Cassandra data consists of different directories for keyspaces, and tables with the data files within the table directories. Directories backups and snapshots to store backups and snapshots respectively for a particular table are also stored within the table directory. The directory structure for Cassandra is illustrated in Figure 1. - -.. figure:: Figure_1_backups.jpg - -Figure 1. Directory Structure for Cassandra Data - - -Setting Up Example Tables for Backups and Snapshots -**************************************************** -In this section we shall create some example data that could be used to demonstrate incremental backups and snapshots. We have used a three node Cassandra cluster. -First, the keyspaces are created. Subsequently tables are created within a keyspace and table data is added. We have used two keyspaces ``CQLKeyspace`` and ``CatalogKeyspace`` with two tables within each. -Create ``CQLKeyspace``: - -:: - - cqlsh> CREATE KEYSPACE CQLKeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; - -Create table ``t`` in the ``CQLKeyspace`` keyspace. - -:: - - cqlsh> USE CQLKeyspace; - cqlsh:cqlkeyspace> CREATE TABLE t ( - ... id int, - ... k int, - ... v text, - ... PRIMARY KEY (id) - ... ); - - -Add data to table ``t``: - -:: - - cqlsh:cqlkeyspace> - cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (1, 1, 'val1'); - - -A table query lists the data: - -:: - - cqlsh:cqlkeyspace> SELECT * FROM t; - - id | k | v - ----+---+------ - 1 | 1 | val1 - 0 | 0 | val0 - - (2 rows) - -Create another table ``t2``: - -:: - - cqlsh:cqlkeyspace> CREATE TABLE t2 ( - ... id int, - ... k int, - ... v text, - ... PRIMARY KEY (id) - ... ); - -Add data to table ``t2``: - -:: - - cqlsh:cqlkeyspace> INSERT INTO t2 (id, k, v) VALUES (0, 0, 'val0'); - cqlsh:cqlkeyspace> INSERT INTO t2 (id, k, v) VALUES (1, 1, 'val1'); - cqlsh:cqlkeyspace> INSERT INTO t2 (id, k, v) VALUES (2, 2, 'val2'); - - -A table query lists table data: - -:: - - cqlsh:cqlkeyspace> SELECT * FROM t2; - - id | k | v - ----+---+------ - 1 | 1 | val1 - 0 | 0 | val0 - 2 | 2 | val2 - - (3 rows) - -Create a second keyspace ``CatalogKeyspace``: - -:: - - cqlsh:cqlkeyspace> CREATE KEYSPACE CatalogKeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; - -Create a table called ``journal`` in ``CatalogKeyspace``: - -:: - - cqlsh:cqlkeyspace> USE CatalogKeyspace; - cqlsh:catalogkeyspace> CREATE TABLE journal ( - ... id int, - ... name text, - ... publisher text, - ... PRIMARY KEY (id) - ... ); - - -Add data to table ``journal``: - -:: - - cqlsh:catalogkeyspace> INSERT INTO journal (id, name, publisher) VALUES (0, 'Apache - Cassandra Magazine', 'Apache Cassandra'); - cqlsh:catalogkeyspace> INSERT INTO journal (id, name, publisher) VALUES (1, 'Couchbase - Magazine', 'Couchbase'); - -Query table ``journal`` to list its data: - -:: - - cqlsh:catalogkeyspace> SELECT * FROM journal; - - id | name | publisher - ----+---------------------------+------------------ - 1 | Couchbase Magazine | Couchbase - 0 | Apache Cassandra Magazine | Apache Cassandra - - (2 rows) - -Add another table called ``magazine``: - -:: - - cqlsh:catalogkeyspace> CREATE TABLE magazine ( - ... id int, - ... name text, - ... publisher text, - ... PRIMARY KEY (id) - ... ); - -Add table data to ``magazine``: - -:: - - cqlsh:catalogkeyspace> INSERT INTO magazine (id, name, publisher) VALUES (0, 'Apache - Cassandra Magazine', 'Apache Cassandra'); - cqlsh:catalogkeyspace> INSERT INTO magazine (id, name, publisher) VALUES (1, 'Couchbase - Magazine', 'Couchbase'); - -List table ``magazine``’s data: - -:: - - cqlsh:catalogkeyspace> SELECT * from magazine; - - id | name | publisher - ----+---------------------------+------------------ - 1 | Couchbase Magazine | Couchbase - 0 | Apache Cassandra Magazine | Apache Cassandra - - (2 rows) - -Snapshots -^^^^^^^^^ -In this section including sub-sections we shall demonstrate creating snapshots. The command used to create a snapshot is ``nodetool snapshot`` and its usage is as follows: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool help snapshot - NAME - nodetool snapshot - Take a snapshot of specified keyspaces or a snapshot - of the specified table - - SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] snapshot - [(-cf
| --column-family
| --table
)] - [(-kt | --kt-list | -kc | --kc.list )] - [(-sf | --skip-flush)] [(-t | --tag )] [--] [] - - OPTIONS - -cf
, --column-family
, --table
- The table name (you must specify one and only one keyspace for using - this option) - - -h , --host - Node hostname or ip address - - -kt , --kt-list , -kc , --kc.list - The list of Keyspace.table to take snapshot.(you must not specify - only keyspace) - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -sf, --skip-flush - Do not flush memtables before snapshotting (snapshot will not - contain unflushed data) - - -t , --tag - The name of the snapshot - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [] - List of keyspaces. By default, all keyspaces - -Configuring for Snapshots -*************************** -To demonstrate creating snapshots with Nodetool on the commandline we have set -``auto_snapshots`` setting to ``false`` in ``cassandra.yaml``: - -:: - - auto_snapshot: false - -Also set ``snapshot_before_compaction`` to ``false`` to disable creating snapshots automatically before compaction: - -:: - - snapshot_before_compaction: false - -Creating Snapshots -******************* -To demonstrate creating snapshots start with no snapshots. Search for snapshots and none get listed: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ find -name snapshots - -We shall be using the example keyspaces and tables to create snapshots. - -Taking Snapshots of all Tables in a Keyspace -+++++++++++++++++++++++++++++++++++++++++++++ - -To take snapshots of all tables in a keyspace and also optionally tag the snapshot the syntax becomes: - -:: - - nodetool snapshot --tag -- - -As an example create a snapshot called ``catalog-ks`` for all the tables in the ``catalogkeyspace`` keyspace: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool snapshot --tag catalog-ks -- catalogkeyspace - Requested creating snapshot(s) for [catalogkeyspace] with snapshot name [catalog-ks] and - options {skipFlush=false} - Snapshot directory: catalog-ks - -Search for snapshots and ``snapshots`` directories for the tables ``journal`` and ``magazine``, which are in the ``catalogkeyspace`` keyspace should get listed: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ find -name snapshots - ./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots - ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots - -Snapshots of all tables in multiple keyspaces may be created similarly, as an example: - -:: - - nodetool snapshot --tag catalog-cql-ks --catalogkeyspace,cqlkeyspace - -Taking Snapshots of Single Table in a Keyspace -++++++++++++++++++++++++++++++++++++++++++++++ -To take a snapshot of a single table the ``nodetool snapshot`` command syntax becomes as follows: - -:: - - nodetool snapshot --tag --table
-- - -As an example create a snapshot for table ``magazine`` in keyspace ``catalokeyspace``: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool snapshot --tag magazine --table magazine -- - catalogkeyspace - Requested creating snapshot(s) for [catalogkeyspace] with snapshot name [magazine] and - options {skipFlush=false} - Snapshot directory: magazine - -Taking Snapshot of Multiple Tables from same Keyspace -++++++++++++++++++++++++++++++++++++++++++++++++++++++ -To take snapshots of multiple tables in a keyspace the list of *Keyspace.table* must be specified with option ``--kt-list``. As an example create snapshots for tables ``t`` and ``t2`` in the ``cqlkeyspace`` keyspace: - -:: - - nodetool snapshot --kt-list cqlkeyspace.t,cqlkeyspace.t2 --tag multi-table - [ec2-user@ip-10-0-2-238 ~]$ nodetool snapshot --kt-list cqlkeyspace.t,cqlkeyspace.t2 --tag - multi-table - Requested creating snapshot(s) for [cqlkeyspace.t,cqlkeyspace.t2] with snapshot name [multi- - table] and options {skipFlush=false} - Snapshot directory: multi-table - -Multiple snapshots of the same set of tables may be created and tagged with a different name. As an example, create another snapshot for the same set of tables ``t`` and ``t2`` in the ``cqlkeyspace`` keyspace and tag the snapshots differently: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool snapshot --kt-list cqlkeyspace.t,cqlkeyspace.t2 --tag - multi-table-2 - Requested creating snapshot(s) for [cqlkeyspace.t,cqlkeyspace.t2] with snapshot name [multi- - table-2] and options {skipFlush=false} - Snapshot directory: multi-table-2 - -Taking Snapshot of Multiple Tables from Different Keyspaces -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -To take snapshots of multiple tables that are in different keyspaces the command syntax is the same as when multiple tables are in the same keyspace. Each *keyspace.table* must be specified separately in the ``--kt-list`` option. As an example, create a snapshot for table ``t`` in the ``cqlkeyspace`` and table ``journal`` in the catalogkeyspace and tag the snapshot ``multi-ks``. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool snapshot --kt-list - catalogkeyspace.journal,cqlkeyspace.t --tag multi-ks - Requested creating snapshot(s) for [catalogkeyspace.journal,cqlkeyspace.t] with snapshot - name [multi-ks] and options {skipFlush=false} - Snapshot directory: multi-ks - -Listing Snapshots -*************************** -To list snapshots use the ``nodetool listsnapshots`` command. All the snapshots that we created in the preceding examples get listed: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool listsnapshots - Snapshot Details: - Snapshot name Keyspace name Column family name True size Size on disk - multi-table cqlkeyspace t2 4.86 KiB 5.67 KiB - multi-table cqlkeyspace t 4.89 KiB 5.7 KiB - multi-ks cqlkeyspace t 4.89 KiB 5.7 KiB - multi-ks catalogkeyspace journal 4.9 KiB 5.73 KiB - magazine catalogkeyspace magazine 4.9 KiB 5.73 KiB - multi-table-2 cqlkeyspace t2 4.86 KiB 5.67 KiB - multi-table-2 cqlkeyspace t 4.89 KiB 5.7 KiB - catalog-ks catalogkeyspace journal 4.9 KiB 5.73 KiB - catalog-ks catalogkeyspace magazine 4.9 KiB 5.73 KiB - - Total TrueDiskSpaceUsed: 44.02 KiB - -Finding Snapshots Directories -****************************** -The ``snapshots`` directories may be listed with ``find –name snapshots`` command: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ find -name snapshots - ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/snapshots - ./cassandra/data/data/cqlkeyspace/t2-d993a390c22911e9b1350d927649052c/snapshots - ./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots - ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots - [ec2-user@ip-10-0-2-238 ~]$ - -To list the snapshots for a particular table first change directory ( with ``cd``) to the ``snapshots`` directory for the table. As an example, list the snapshots for the ``catalogkeyspace/journal`` table. Two snapshots get listed: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ cd ./cassandra/data/data/catalogkeyspace/journal- - 296a2d30c22a11e9b1350d927649052c/snapshots - [ec2-user@ip-10-0-2-238 snapshots]$ ls -l - total 0 - drwxrwxr-x. 2 ec2-user ec2-user 265 Aug 19 02:44 catalog-ks - drwxrwxr-x. 2 ec2-user ec2-user 265 Aug 19 02:52 multi-ks - -A ``snapshots`` directory lists the SSTable files in the snapshot. ``Schema.cql`` file is also created in each snapshot for the schema definition DDL that may be run in CQL to create the table when restoring from a snapshot: - -:: - - [ec2-user@ip-10-0-2-238 snapshots]$ cd catalog-ks - [ec2-user@ip-10-0-2-238 catalog-ks]$ ls -l - total 44 - -rw-rw-r--. 1 ec2-user ec2-user 31 Aug 19 02:44 manifest.jsonZ - - -rw-rw-r--. 4 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db - -rw-rw-r--. 4 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db - -rw-rw-r--. 4 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32 - -rw-rw-r--. 4 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db - -rw-rw-r--. 4 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db - -rw-rw-r--. 4 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db - -rw-rw-r--. 4 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db - -rw-rw-r--. 4 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt - -rw-rw-r--. 1 ec2-user ec2-user 814 Aug 19 02:44 schema.cql - -Clearing Snapshots -****************** -Snapshots may be cleared or deleted with the ``nodetool clearsnapshot`` command. Either a specific snapshot name must be specified or the ``–all`` option must be specified. -As an example delete a snapshot called ``magazine`` from keyspace ``cqlkeyspace``: - -:: - - nodetool clearsnapshot -t magazine – cqlkeyspace - Delete all snapshots from cqlkeyspace with the –all option. - nodetool clearsnapshot –all -- cqlkeyspace - - - -Incremental Backups -^^^^^^^^^^^^^^^^^^^ -In the following sub-sections we shall discuss configuring and creating incremental backups. - -Configuring for Incremental Backups -*********************************** - -To create incremental backups set ``incremental_backups`` to ``true`` in ``cassandra.yaml``. - -:: - - incremental_backups: true - -This is the only setting needed to create incremental backups. By default ``incremental_backups`` setting is set to ``false`` because a new set of SSTable files is created for each data flush and if several CQL statements are to be run the ``backups`` directory could fill up quickly and use up storage that is needed to store table data. -Incremental backups may also be enabled on the command line with the Nodetool command ``nodetool enablebackup``. Incremental backups may be disabled with ``nodetool disablebackup`` command. Status of incremental backups, whether they are enabled may be found with ``nodetool statusbackup``. - - - -Creating Incremental Backups -****************************** -After each table is created flush the table data with ``nodetool flush`` command. Incremental backups get created. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool flush cqlkeyspace t - [ec2-user@ip-10-0-2-238 ~]$ nodetool flush cqlkeyspace t2 - [ec2-user@ip-10-0-2-238 ~]$ nodetool flush catalogkeyspace journal magazine - -Finding Incremental Backups -*************************** - -Incremental backups are created within the Cassandra’s ``data`` directory within a table directory. Backups may be found with following command. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ find -name backups - - ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups - ./cassandra/data/data/cqlkeyspace/t2-d993a390c22911e9b1350d927649052c/backups - ./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/backups - ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups - -Creating an Incremental Backup -****************************** -This section discusses how incremental backups are created in more detail starting with when a new keyspace is created and a table is added. Create a keyspace called ``CQLKeyspace`` (arbitrary name). - -:: - - cqlsh> CREATE KEYSPACE CQLKeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3} - -Create a table called ``t`` within the ``CQLKeyspace`` keyspace: - -:: - - cqlsh> USE CQLKeyspace; - cqlsh:cqlkeyspace> CREATE TABLE t ( - ... id int, - ... k int, - ... v text, - ... PRIMARY KEY (id) - ... ); - -Flush the keyspace and table: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool flush cqlkeyspace t - -Search for backups and a ``backups`` directory should get listed even though we have added no table data yet. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ find -name backups - - ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups - -Change directory to the ``backups`` directory and list files and no files get listed as no table data has been added yet: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ cd ./cassandra/data/data/cqlkeyspace/t- - d132e240c21711e9bbee19821dcea330/backups - [ec2-user@ip-10-0-2-238 backups]$ ls -l - total 0 - -Next, add a row of data to table ``t`` that we created: - -:: - - cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - -Run the ``nodetool flush`` command to flush table data: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool flush cqlkeyspace t - -List the files and directories in the ``backups`` directory and SSTable files for an incremental backup get listed: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ cd ./cassandra/data/data/cqlkeyspace/t- - d132e240c21711e9bbee19821dcea330/backups - [ec2-user@ip-10-0-2-238 backups]$ ls -l - total 36 - -rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:32 na-1-big-CompressionInfo.db - -rw-rw-r--. 2 ec2-user ec2-user 43 Aug 19 00:32 na-1-big-Data.db - -rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:32 na-1-big-Digest.crc32 - -rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:32 na-1-big-Filter.db - -rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:32 na-1-big-Index.db - -rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:32 na-1-big-Statistics.db - -rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:32 na-1-big-Summary.db - -rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:32 na-1-big-TOC.txt - -Add another row of data: - -:: - - cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (1, 1, 'val1'); - -Again, run the ``nodetool flush`` command: - -:: - - [ec2-user@ip-10-0-2-238 backups]$ nodetool flush cqlkeyspace t - -A new incremental backup gets created for the new data added. List the files in the ``backups`` directory for table ``t`` and two sets of SSTable files get listed, one for each incremental backup. The SSTable files are timestamped, which distinguishes the first incremental backup from the second: - -:: - - [ec2-user@ip-10-0-2-238 backups]$ ls -l - total 72 - -rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:32 na-1-big-CompressionInfo.db - -rw-rw-r--. 2 ec2-user ec2-user 43 Aug 19 00:32 na-1-big-Data.db - -rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:32 na-1-big-Digest.crc32 - -rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:32 na-1-big-Filter.db - -rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:32 na-1-big-Index.db - -rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:32 na-1-big-Statistics.db - -rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:32 na-1-big-Summary.db - -rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:32 na-1-big-TOC.txt - -rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:35 na-2-big-CompressionInfo.db - -rw-rw-r--. 2 ec2-user ec2-user 41 Aug 19 00:35 na-2-big-Data.db - -rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:35 na-2-big-Digest.crc32 - -rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:35 na-2-big-Filter.db - -rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:35 na-2-big-Index.db - -rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:35 na-2-big-Statistics.db - -rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:35 na-2-big-Summary.db - -rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:35 na-2-big-TOC.txt - [ec2-user@ip-10-0-2-238 backups]$ - -The ``backups`` directory for table ``cqlkeyspace/t`` is created within the ``data`` directory for the table: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ cd ./cassandra/data/data/cqlkeyspace/t- - d132e240c21711e9bbee19821dcea330 - [ec2-user@ip-10-0-2-238 t-d132e240c21711e9bbee19821dcea330]$ ls -l - total 36 - drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:30 backups - -rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 02:30 na-1-big-CompressionInfo.db - -rw-rw-r--. 2 ec2-user ec2-user 79 Aug 19 02:30 na-1-big-Data.db - -rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 02:30 na-1-big-Digest.crc32 - -rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:30 na-1-big-Filter.db - -rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:30 na-1-big-Index.db - -rw-rw-r--. 2 ec2-user ec2-user 4696 Aug 19 02:30 na-1-big-Statistics.db - -rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 02:30 na-1-big-Summary.db - -rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 02:30 na-1-big-TOC.txt - -The incremental backups for the other keyspaces/tables get created similarly. As an example the ``backups`` directory for table ``catalogkeyspace/magazine`` is created within the data directory: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ cd ./cassandra/data/data/catalogkeyspace/magazine- - 446eae30c22a11e9b1350d927649052c - [ec2-user@ip-10-0-2-238 magazine-446eae30c22a11e9b1350d927649052c]$ ls -l - total 36 - drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:38 backups - -rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db - -rw-rw-r--. 2 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db - -rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32 - -rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db - -rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db - -rw-rw-r--. 2 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db - -rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db - -rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt - - - - - -Restoring from Incremental Backups and Snapshots -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The two main tools/commands for restoring a table after it has been dropped are: - -- sstableloader -- nodetool import - -A snapshot contains essentially the same set of SSTable files as an incremental backup does with a few additional files. A snapshot includes a ``schema.cql`` file for the schema DDL to create a table in CQL. A table backup does not include DDL which must be obtained from a snapshot when restoring from an incremental backup. - - diff --git a/doc/source/operating/bloom_filters.rst b/doc/source/operating/bloom_filters.rst deleted file mode 100644 index 0b37c18dab83..000000000000 --- a/doc/source/operating/bloom_filters.rst +++ /dev/null @@ -1,65 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Bloom Filters -------------- - -In the read path, Cassandra merges data on disk (in SSTables) with data in RAM (in memtables). To avoid checking every -SSTable data file for the partition being requested, Cassandra employs a data structure known as a bloom filter. - -Bloom filters are a probabilistic data structure that allows Cassandra to determine one of two possible states: - The -data definitely does not exist in the given file, or - The data probably exists in the given file. - -While bloom filters can not guarantee that the data exists in a given SSTable, bloom filters can be made more accurate -by allowing them to consume more RAM. Operators have the opportunity to tune this behavior per table by adjusting the -the ``bloom_filter_fp_chance`` to a float between 0 and 1. - -The default value for ``bloom_filter_fp_chance`` is 0.1 for tables using LeveledCompactionStrategy and 0.01 for all -other cases. - -Bloom filters are stored in RAM, but are stored offheap, so operators should not consider bloom filters when selecting -the maximum heap size. As accuracy improves (as the ``bloom_filter_fp_chance`` gets closer to 0), memory usage -increases non-linearly - the bloom filter for ``bloom_filter_fp_chance = 0.01`` will require about three times as much -memory as the same table with ``bloom_filter_fp_chance = 0.1``. - -Typical values for ``bloom_filter_fp_chance`` are usually between 0.01 (1%) to 0.1 (10%) false-positive chance, where -Cassandra may scan an SSTable for a row, only to find that it does not exist on the disk. The parameter should be tuned -by use case: - -- Users with more RAM and slower disks may benefit from setting the ``bloom_filter_fp_chance`` to a numerically lower - number (such as 0.01) to avoid excess IO operations -- Users with less RAM, more dense nodes, or very fast disks may tolerate a higher ``bloom_filter_fp_chance`` in order to - save RAM at the expense of excess IO operations -- In workloads that rarely read, or that only perform reads by scanning the entire data set (such as analytics - workloads), setting the ``bloom_filter_fp_chance`` to a much higher number is acceptable. - -Changing -^^^^^^^^ - -The bloom filter false positive chance is visible in the ``DESCRIBE TABLE`` output as the field -``bloom_filter_fp_chance``. Operators can change the value with an ``ALTER TABLE`` statement: -:: - - ALTER TABLE keyspace.table WITH bloom_filter_fp_chance=0.01 - -Operators should be aware, however, that this change is not immediate: the bloom filter is calculated when the file is -written, and persisted on disk as the Filter component of the SSTable. Upon issuing an ``ALTER TABLE`` statement, new -files on disk will be written with the new ``bloom_filter_fp_chance``, but existing sstables will not be modified until -they are compacted - if an operator needs a change to ``bloom_filter_fp_chance`` to take effect, they can trigger an -SSTable rewrite using ``nodetool scrub`` or ``nodetool upgradesstables -a``, both of which will rebuild the sstables on -disk, regenerating the bloom filters in the progress. diff --git a/doc/source/operating/bulk_loading.rst b/doc/source/operating/bulk_loading.rst deleted file mode 100644 index 850260ac0e2e..000000000000 --- a/doc/source/operating/bulk_loading.rst +++ /dev/null @@ -1,660 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. -.. highlight:: none - -.. _bulk-loading: - -Bulk Loading -============== - -Bulk loading of data in Apache Cassandra is supported by different tools. The data to be bulk loaded must be in the form of SSTables. Cassandra does not support loading data in any other format such as CSV, JSON, and XML directly. Bulk loading could be used to: - -- Restore incremental backups and snapshots. Backups and snapshots are already in the form of SSTables. -- Load existing SSTables into another cluster, which could have a different number of nodes or replication strategy. -- Load external data into a cluster - -**Note*: CSV Data can be loaded via the cqlsh COPY command but we do not recommend this for bulk loading, which typically requires many GB or TB of data. - -Tools for Bulk Loading -^^^^^^^^^^^^^^^^^^^^^^ - -Cassandra provides two commands or tools for bulk loading data. These are: - -- Cassandra Bulk loader, also called ``sstableloader`` -- The ``nodetool import`` command - -The ``sstableloader`` and ``nodetool import`` are accessible if the Cassandra installation ``bin`` directory is in the ``PATH`` environment variable. Or these may be accessed directly from the ``bin`` directory. We shall discuss each of these next. We shall use the example or sample keyspaces and tables created in the Backups section. - -Using sstableloader -^^^^^^^^^^^^^^^^^^^ - -The ``sstableloader`` is the main tool for bulk uploading data. The ``sstableloader`` streams SSTable data files to a running cluster. The ``sstableloader`` loads data conforming to the replication strategy and replication factor. The table to upload data to does need not to be empty. - -The only requirements to run ``sstableloader`` are: - -1. One or more comma separated initial hosts to connect to and get ring information. -2. A directory path for the SSTables to load. - -Its usage is as follows. - -:: - - sstableloader [options] - -Sstableloader bulk loads the SSTables found in the directory ```` to the configured cluster. The ```` is used as the target *keyspace/table* name. As an example, to load an SSTable named -``Standard1-g-1-Data.db`` into ``Keyspace1/Standard1``, you will need to have the -files ``Standard1-g-1-Data.db`` and ``Standard1-g-1-Index.db`` in a directory ``/path/to/Keyspace1/Standard1/``. - -Sstableloader Option to accept Target keyspace name -**************************************************** -Often as part of a backup strategy some Cassandra DBAs store an entire data directory. When corruption in data is found then they would like to restore data in the same cluster (for large clusters 200 nodes) but with different keyspace name. - -Currently ``sstableloader`` derives keyspace name from the folder structure. As an option to specify target keyspace name as part of ``sstableloader``, version 4.0 adds support for the ``--target-keyspace`` option (`CASSANDRA-13884 -`_). - -The supported options are as follows from which only ``-d,--nodes `` is required. - -:: - - -alg,--ssl-alg Client SSL: algorithm - - -ap,--auth-provider Custom - AuthProvider class name for - cassandra authentication - -ciphers,--ssl-ciphers Client SSL: - comma-separated list of - encryption suites to use - -cph,--connections-per-host Number of - concurrent connections-per-host. - -d,--nodes Required. - Try to connect to these hosts (comma separated) initially for ring information - - -f,--conf-path cassandra.yaml file path for streaming throughput and client/server SSL. - - -h,--help Display this help message - - -i,--ignore Don't stream to this (comma separated) list of nodes - - -idct,--inter-dc-throttle Inter-datacenter throttle speed in Mbits (default unlimited) - - -k,--target-keyspace Target - keyspace name - -ks,--keystore Client SSL: - full path to keystore - -kspw,--keystore-password Client SSL: - password of the keystore - --no-progress Don't - display progress - -p,--port Port used - for native connection (default 9042) - -prtcl,--ssl-protocol Client SSL: - connections protocol to use (default: TLS) - -pw,--password Password for - cassandra authentication - -sp,--storage-port Port used - for internode communication (default 7000) - -spd,--server-port-discovery Use ports - published by server to decide how to connect. With SSL requires StartTLS - to be used. - -ssp,--ssl-storage-port Port used - for TLS internode communication (default 7001) - -st,--store-type Client SSL: - type of store - -t,--throttle Throttle - speed in Mbits (default unlimited) - -ts,--truststore Client SSL: - full path to truststore - -tspw,--truststore-password Client SSL: - Password of the truststore - -u,--username Username for - cassandra authentication - -v,--verbose verbose - output - -The ``cassandra.yaml`` file could be provided on the command-line with ``-f`` option to set up streaming throughput, client and server encryption options. Only ``stream_throughput_outbound_megabits_per_sec``, ``server_encryption_options`` and ``client_encryption_options`` are read from yaml. You can override options read from ``cassandra.yaml`` with corresponding command line options. - -A sstableloader Demo -******************** -We shall demonstrate using ``sstableloader`` by uploading incremental backup data for table ``catalogkeyspace.magazine``. We shall also use a snapshot of the same table to bulk upload in a different run of ``sstableloader``. The backups and snapshots for the ``catalogkeyspace.magazine`` table are listed as follows. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ cd ./cassandra/data/data/catalogkeyspace/magazine- - 446eae30c22a11e9b1350d927649052c - [ec2-user@ip-10-0-2-238 magazine-446eae30c22a11e9b1350d927649052c]$ ls -l - total 0 - drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:38 backups - drwxrwxr-x. 4 ec2-user ec2-user 40 Aug 19 02:45 snapshots - -The directory path structure of SSTables to be uploaded using ``sstableloader`` is used as the target keyspace/table. - -We could have directly uploaded from the ``backups`` and ``snapshots`` directories respectively if the directory structure were in the format used by ``sstableloader``. But the directory path of backups and snapshots for SSTables is ``/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups`` and ``/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots`` respectively, which cannot be used to upload SSTables to ``catalogkeyspace.magazine`` table. The directory path structure must be ``/catalogkeyspace/magazine/`` to use ``sstableloader``. We need to create a new directory structure to upload SSTables with ``sstableloader`` which is typical when using ``sstableloader``. Create a directory structure ``/catalogkeyspace/magazine`` and set its permissions. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ sudo mkdir -p /catalogkeyspace/magazine - [ec2-user@ip-10-0-2-238 ~]$ sudo chmod -R 777 /catalogkeyspace/magazine - -Bulk Loading from an Incremental Backup -+++++++++++++++++++++++++++++++++++++++ -An incremental backup does not include the DDL for a table. The table must already exist. If the table was dropped it may be created using the ``schema.cql`` generated with every snapshot of a table. As we shall be using ``sstableloader`` to load SSTables to the ``magazine`` table, the table must exist prior to running ``sstableloader``. The table does not need to be empty but we have used an empty table as indicated by a CQL query: - -:: - - cqlsh:catalogkeyspace> SELECT * FROM magazine; - - id | name | publisher - ----+------+----------- - - (0 rows) - -After the table to upload has been created copy the SSTable files from the ``backups`` directory to the ``/catalogkeyspace/magazine/`` directory that we created. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ sudo cp ./cassandra/data/data/catalogkeyspace/magazine- - 446eae30c22a11e9b1350d927649052c/backups/* /catalogkeyspace/magazine/ - -Run the ``sstableloader`` to upload SSTables from the ``/catalogkeyspace/magazine/`` directory. - -:: - - sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ - -The output from the ``sstableloader`` command should be similar to the listed: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ - Opening SSTables and calculating sections to stream - Streaming relevant part of /catalogkeyspace/magazine/na-1-big-Data.db - /catalogkeyspace/magazine/na-2-big-Data.db to [35.173.233.153:7000, 10.0.2.238:7000, - 54.158.45.75:7000] - progress: [35.173.233.153:7000]0:1/2 88 % total: 88% 0.018KiB/s (avg: 0.018KiB/s) - progress: [35.173.233.153:7000]0:2/2 176% total: 176% 33.807KiB/s (avg: 0.036KiB/s) - progress: [35.173.233.153:7000]0:2/2 176% total: 176% 0.000KiB/s (avg: 0.029KiB/s) - progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:1/2 39 % total: 81% 0.115KiB/s - (avg: 0.024KiB/s) - progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % total: 108% - 97.683KiB/s (avg: 0.033KiB/s) - progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % - [54.158.45.75:7000]0:1/2 39 % total: 80% 0.233KiB/s (avg: 0.040KiB/s) - progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % - [54.158.45.75:7000]0:2/2 78 % total: 96% 88.522KiB/s (avg: 0.049KiB/s) - progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % - [54.158.45.75:7000]0:2/2 78 % total: 96% 0.000KiB/s (avg: 0.045KiB/s) - progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % - [54.158.45.75:7000]0:2/2 78 % total: 96% 0.000KiB/s (avg: 0.044KiB/s) - -After the ``sstableloader`` has run query the ``magazine`` table and the loaded table should get listed when a query is run. - -:: - - cqlsh:catalogkeyspace> SELECT * FROM magazine; - - id | name | publisher - ----+---------------------------+------------------ - 1 | Couchbase Magazine | Couchbase - 0 | Apache Cassandra Magazine | Apache Cassandra - - (2 rows) - cqlsh:catalogkeyspace> - -Bulk Loading from a Snapshot -+++++++++++++++++++++++++++++ -In this section we shall demonstrate restoring a snapshot of the ``magazine`` table to the ``magazine`` table. As we used the same table to restore data from a backup the directory structure required by ``sstableloader`` should already exist. If the directory structure needed to load SSTables to ``catalogkeyspace.magazine`` does not exist create the directories and set their permissions. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ sudo mkdir -p /catalogkeyspace/magazine - [ec2-user@ip-10-0-2-238 ~]$ sudo chmod -R 777 /catalogkeyspace/magazine - -As we shall be copying the snapshot files to the directory remove any files that may be in the directory. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ sudo rm /catalogkeyspace/magazine/* - [ec2-user@ip-10-0-2-238 ~]$ cd /catalogkeyspace/magazine/ - [ec2-user@ip-10-0-2-238 magazine]$ ls -l - total 0 - - -Copy the snapshot files to the ``/catalogkeyspace/magazine`` directory. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ sudo cp ./cassandra/data/data/catalogkeyspace/magazine- - 446eae30c22a11e9b1350d927649052c/snapshots/magazine/* /catalogkeyspace/magazine - -List the files in the ``/catalogkeyspace/magazine`` directory and a ``schema.cql`` should also get listed. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ cd /catalogkeyspace/magazine - [ec2-user@ip-10-0-2-238 magazine]$ ls -l - total 44 - -rw-r--r--. 1 root root 31 Aug 19 04:13 manifest.json - -rw-r--r--. 1 root root 47 Aug 19 04:13 na-1-big-CompressionInfo.db - -rw-r--r--. 1 root root 97 Aug 19 04:13 na-1-big-Data.db - -rw-r--r--. 1 root root 10 Aug 19 04:13 na-1-big-Digest.crc32 - -rw-r--r--. 1 root root 16 Aug 19 04:13 na-1-big-Filter.db - -rw-r--r--. 1 root root 16 Aug 19 04:13 na-1-big-Index.db - -rw-r--r--. 1 root root 4687 Aug 19 04:13 na-1-big-Statistics.db - -rw-r--r--. 1 root root 56 Aug 19 04:13 na-1-big-Summary.db - -rw-r--r--. 1 root root 92 Aug 19 04:13 na-1-big-TOC.txt - -rw-r--r--. 1 root root 815 Aug 19 04:13 schema.cql - -Alternatively create symlinks to the snapshot folder instead of copying the data, something like: - -:: - - mkdir keyspace_name - ln -s _path_to_snapshot_folder keyspace_name/table_name - -If the ``magazine`` table was dropped run the DDL in the ``schema.cql`` to create the table. Run the ``sstableloader`` with the following command. - -:: - - sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ - -As the output from the command indicates SSTables get streamed to the cluster. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ - - Established connection to initial hosts - Opening SSTables and calculating sections to stream - Streaming relevant part of /catalogkeyspace/magazine/na-1-big-Data.db to - [35.173.233.153:7000, 10.0.2.238:7000, 54.158.45.75:7000] - progress: [35.173.233.153:7000]0:1/1 176% total: 176% 0.017KiB/s (avg: 0.017KiB/s) - progress: [35.173.233.153:7000]0:1/1 176% total: 176% 0.000KiB/s (avg: 0.014KiB/s) - progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % total: 108% 0.115KiB/s - (avg: 0.017KiB/s) - progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % - [54.158.45.75:7000]0:1/1 78 % total: 96% 0.232KiB/s (avg: 0.024KiB/s) - progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % - [54.158.45.75:7000]0:1/1 78 % total: 96% 0.000KiB/s (avg: 0.022KiB/s) - progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % - [54.158.45.75:7000]0:1/1 78 % total: 96% 0.000KiB/s (avg: 0.021KiB/s) - -Some other requirements of ``sstableloader`` that should be kept into consideration are: - -- The SSTables to be loaded must be compatible with the Cassandra version being loaded into. -- Repairing tables that have been loaded into a different cluster does not repair the source tables. -- Sstableloader makes use of port 7000 for internode communication. -- Before restoring incremental backups run ``nodetool flush`` to backup any data in memtables - -Using nodetool import -^^^^^^^^^^^^^^^^^^^^^ -In this section we shall import SSTables into a table using the ``nodetool import`` command. The ``nodetool refresh`` command is deprecated, and it is recommended to use ``nodetool import`` instead. The ``nodetool refresh`` does not have an option to load new SSTables from a separate directory which the ``nodetool import`` does. - -The command usage is as follows. - -:: - - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] import - [(-c | --no-invalidate-caches)] [(-e | --extended-verify)] - [(-l | --keep-level)] [(-q | --quick)] [(-r | --keep-repaired)] - [(-t | --no-tokens)] [(-v | --no-verify)] [--]
- ... - -The arguments ``keyspace``, ``table`` name and ``directory`` to import SSTables from are required. - -The supported options are as follows. - -:: - - -c, --no-invalidate-caches - Don't invalidate the row cache when importing - - -e, --extended-verify - Run an extended verify, verifying all values in the new SSTables - - -h , --host - Node hostname or ip address - - -l, --keep-level - Keep the level on the new SSTables - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -q, --quick - Do a quick import without verifying SSTables, clearing row cache or - checking in which data directory to put the file - - -r, --keep-repaired - Keep any repaired information from the SSTables - - -t, --no-tokens - Don't verify that all tokens in the new SSTable are owned by the - current node - - -u , --username - Remote jmx agent username - - -v, --no-verify - Don't verify new SSTables - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - -As the keyspace and table are specified on the command line ``nodetool import`` does not have the same requirement that ``sstableloader`` does, which is to have the SSTables in a specific directory path. When importing snapshots or incremental backups with ``nodetool import`` the SSTables don’t need to be copied to another directory. - -Importing Data from an Incremental Backup -***************************************** - -In this section we shall demonstrate using ``nodetool import`` to import SSTables from an incremental backup. We shall use the example table ``cqlkeyspace.t``. Drop table ``t`` as we are demonstrating to restore the table. - -:: - - cqlsh:cqlkeyspace> DROP table t; - -An incremental backup for a table does not include the schema definition for the table. If the schema definition is not kept as a separate backup, the ``schema.cql`` from a backup of the table may be used to create the table as follows. - -:: - - cqlsh:cqlkeyspace> CREATE TABLE IF NOT EXISTS cqlkeyspace.t ( - ... id int PRIMARY KEY, - ... k int, - ... v text) - ... WITH ID = d132e240-c217-11e9-bbee-19821dcea330 - ... AND bloom_filter_fp_chance = 0.01 - ... AND crc_check_chance = 1.0 - ... AND default_time_to_live = 0 - ... AND gc_grace_seconds = 864000 - ... AND min_index_interval = 128 - ... AND max_index_interval = 2048 - ... AND memtable_flush_period_in_ms = 0 - ... AND speculative_retry = '99p' - ... AND additional_write_policy = '99p' - ... AND comment = '' - ... AND caching = { 'keys': 'ALL', 'rows_per_partition': 'NONE' } - ... AND compaction = { 'max_threshold': '32', 'min_threshold': '4', - 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' } - ... AND compression = { 'chunk_length_in_kb': '16', 'class': - 'org.apache.cassandra.io.compress.LZ4Compressor' } - ... AND cdc = false - ... AND extensions = { }; - -Initially the table could be empty, but does not have to be. - -:: - - cqlsh:cqlkeyspace> SELECT * FROM t; - - id | k | v - ----+---+--- - - (0 rows) - -Run the ``nodetool import`` command by providing the keyspace, table and the backups directory. We don’t need to copy the table backups to another directory to run ``nodetool import`` as we had to when using ``sstableloader``. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool import -- cqlkeyspace t - ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups - [ec2-user@ip-10-0-2-238 ~]$ - -The SSTables get imported into the table. Run a query in cqlsh to list the data imported. - -:: - - cqlsh:cqlkeyspace> SELECT * FROM t; - - id | k | v - ----+---+------ - 1 | 1 | val1 - 0 | 0 | val0 - - -Importing Data from a Snapshot -******************************** -Importing SSTables from a snapshot with the ``nodetool import`` command is similar to importing SSTables from an incremental backup. To demonstrate we shall import a snapshot for table ``catalogkeyspace.journal``. Drop the table as we are demonstrating to restore the table from a snapshot. - -:: - - cqlsh:cqlkeyspace> use CATALOGKEYSPACE; - cqlsh:catalogkeyspace> DROP TABLE journal; - -We shall use the ``catalog-ks`` snapshot for the ``journal`` table. List the files in the snapshot. The snapshot includes a ``schema.cql``, which is the schema definition for the ``journal`` table. - -:: - - [ec2-user@ip-10-0-2-238 catalog-ks]$ ls -l - total 44 - -rw-rw-r--. 1 ec2-user ec2-user 31 Aug 19 02:44 manifest.json - -rw-rw-r--. 3 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db - -rw-rw-r--. 3 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db - -rw-rw-r--. 3 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32 - -rw-rw-r--. 3 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db - -rw-rw-r--. 3 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db - -rw-rw-r--. 3 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db - -rw-rw-r--. 3 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db - -rw-rw-r--. 3 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt - -rw-rw-r--. 1 ec2-user ec2-user 814 Aug 19 02:44 schema.cql - -Copy the DDL from the ``schema.cql`` and run in cqlsh to create the ``catalogkeyspace.journal`` table. - -:: - - cqlsh:catalogkeyspace> CREATE TABLE IF NOT EXISTS catalogkeyspace.journal ( - ... id int PRIMARY KEY, - ... name text, - ... publisher text) - ... WITH ID = 296a2d30-c22a-11e9-b135-0d927649052c - ... AND bloom_filter_fp_chance = 0.01 - ... AND crc_check_chance = 1.0 - ... AND default_time_to_live = 0 - ... AND gc_grace_seconds = 864000 - ... AND min_index_interval = 128 - ... AND max_index_interval = 2048 - ... AND memtable_flush_period_in_ms = 0 - ... AND speculative_retry = '99p' - ... AND additional_write_policy = '99p' - ... AND comment = '' - ... AND caching = { 'keys': 'ALL', 'rows_per_partition': 'NONE' } - ... AND compaction = { 'min_threshold': '4', 'max_threshold': - '32', 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' } - ... AND compression = { 'chunk_length_in_kb': '16', 'class': - 'org.apache.cassandra.io.compress.LZ4Compressor' } - ... AND cdc = false - ... AND extensions = { }; - - -Run the ``nodetool import`` command to import the SSTables for the snapshot. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool import -- catalogkeyspace journal - ./cassandra/data/data/catalogkeyspace/journal- - 296a2d30c22a11e9b1350d927649052c/snapshots/catalog-ks/ - [ec2-user@ip-10-0-2-238 ~]$ - -Subsequently run a CQL query on the ``journal`` table and the data imported gets listed. - -:: - - cqlsh:catalogkeyspace> - cqlsh:catalogkeyspace> SELECT * FROM journal; - - id | name | publisher - ----+---------------------------+------------------ - 1 | Couchbase Magazine | Couchbase - 0 | Apache Cassandra Magazine | Apache Cassandra - - (2 rows) - cqlsh:catalogkeyspace> - - -Bulk Loading External Data -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Bulk loading external data directly is not supported by any of the tools we have discussed which include ``sstableloader`` and ``nodetool import``. The ``sstableloader`` and ``nodetool import`` require data to be in the form of SSTables. Apache Cassandra supports a Java API for generating SSTables from input data. Subsequently the ``sstableloader`` or ``nodetool import`` could be used to bulk load the SSTables. Next, we shall discuss the ``org.apache.cassandra.io.sstable.CQLSSTableWriter`` Java class for generating SSTables. - -Generating SSTables with CQLSSTableWriter Java API -*************************************************** -To generate SSTables using the ``CQLSSTableWriter`` class the following need to be supplied at the least. - -- An output directory to generate the SSTable in -- The schema for the SSTable -- A prepared insert statement -- A partitioner - -The output directory must already have been created. Create a directory (``/sstables`` as an example) and set its permissions. - -:: - - sudo mkdir /sstables - sudo chmod 777 -R /sstables - -Next, we shall discuss To use ``CQLSSTableWriter`` could be used in a Java application. Create a Java constant for the output directory. - -:: - - public static final String OUTPUT_DIR = "./sstables"; - -``CQLSSTableWriter`` Java API has the provision to create a user defined type. Create a new type to store ``int`` data: - -:: - - String type = "CREATE TYPE CQLKeyspace.intType (a int, b int)"; - // Define a String variable for the SSTable schema. - String schema = "CREATE TABLE CQLKeyspace.t (" - + " id int PRIMARY KEY," - + " k int," - + " v1 text," - + " v2 intType," - + ")"; - -Define a ``String`` variable for the prepared insert statement to use: - -:: - - String insertStmt = "INSERT INTO CQLKeyspace.t (id, k, v1, v2) VALUES (?, ?, ?, ?)"; - -The partitioner to use does not need to be set as the default partitioner ``Murmur3Partitioner`` is used. - -All these variables or settings are used by the builder class ``CQLSSTableWriter.Builder`` to create a ``CQLSSTableWriter`` object. - -Create a File object for the output directory. - -:: - - File outputDir = new File(OUTPUT_DIR + File.separator + "CQLKeyspace" + File.separator + "t"); - -Next, obtain a ``CQLSSTableWriter.Builder`` object using ``static`` method ``CQLSSTableWriter.builder()``. Set the output -directory ``File`` object, user defined type, SSTable schema, buffer size, prepared insert statement, and optionally any of the other builder options, and invoke the ``build()`` method to create a ``CQLSSTableWriter`` object: - -:: - - CQLSSTableWriter writer = CQLSSTableWriter.builder() - .inDirectory(outputDir) - .withType(type) - .forTable(schema) - .withBufferSizeInMB(256) - .using(insertStmt).build(); - -Next, set the SSTable data. If any user define types are used obtain a ``UserType`` object for these: - -:: - - UserType userType = writer.getUDType("intType"); - -Add data rows for the resulting SSTable. - -:: - - writer.addRow(0, 0, "val0", userType.newValue().setInt("a", 0).setInt("b", 0)); - writer.addRow(1, 1, "val1", userType.newValue().setInt("a", 1).setInt("b", 1)); - writer.addRow(2, 2, "val2", userType.newValue().setInt("a", 2).setInt("b", 2)); - -Close the writer, finalizing the SSTable. - -:: - - writer.close(); - -All the public methods the ``CQLSSTableWriter`` class provides including some other methods that are not discussed in the preceding example are as follows. - -===================================================================== ============ -Method Description -===================================================================== ============ -addRow(java.util.List values) Adds a new row to the writer. Returns a CQLSSTableWriter object. Each provided value type should correspond to the types of the CQL column the value is for. The correspondence between java type and CQL type is the same one than the one documented at www.datastax.com/drivers/java/2.0/apidocs/com/datastax/driver/core/DataType.Name.html#asJavaC lass(). -addRow(java.util.Map values) Adds a new row to the writer. Returns a CQLSSTableWriter object. This is equivalent to the other addRow methods, but takes a map whose keys are the names of the columns to add instead of taking a list of the values in the order of the insert statement used during construction of this SSTable writer. The column names in the map keys must be in lowercase unless the declared column name is a case-sensitive quoted identifier in which case the map key must use the exact case of the column. The values parameter is a map of column name to column values representing the new row to add. If a column is not included in the map, it's value will be null. If the map contains keys that do not correspond to one of the columns of the insert statement used when creating this SSTable writer, the corresponding value is ignored. -addRow(java.lang.Object... values) Adds a new row to the writer. Returns a CQLSSTableWriter object. -CQLSSTableWriter.builder() Returns a new builder for a CQLSSTableWriter. -close() Closes the writer. -rawAddRow(java.nio.ByteBuffer... values) Adds a new row to the writer given already serialized binary values. Returns a CQLSSTableWriter object. The row values must correspond to the bind variables of the insertion statement used when creating by this SSTable writer. -rawAddRow(java.util.List values) Adds a new row to the writer given already serialized binary values. Returns a CQLSSTableWriter object. The row values must correspond to the bind variables of the insertion statement used when creating by this SSTable writer. | -rawAddRow(java.util.Map values) Adds a new row to the writer given already serialized binary values. Returns a CQLSSTableWriter object. The row values must correspond to the bind variables of the insertion statement used when creating by this SSTable writer. | -getUDType(String dataType) Returns the User Defined type used in this SSTable Writer that can be used to create UDTValue instances. -===================================================================== ============ - - -All the public methods the ``CQLSSTableWriter.Builder`` class provides including some other methods that are not discussed in the preceding example are as follows. - -============================================ ============ -Method Description -============================================ ============ -inDirectory(String directory) The directory where to write the SSTables. This is a mandatory option. The directory to use should already exist and be writable. -inDirectory(File directory) The directory where to write the SSTables. This is a mandatory option. The directory to use should already exist and be writable. -forTable(String schema) The schema (CREATE TABLE statement) for the table for which SSTable is to be created. The - provided CREATE TABLE statement must use a fully-qualified table name, one that includes the - keyspace name. This is a mandatory option. - -withPartitioner(IPartitioner partitioner) The partitioner to use. By default, Murmur3Partitioner will be used. If this is not the - partitioner used by the cluster for which the SSTables are created, the correct partitioner - needs to be provided. - -using(String insert) The INSERT or UPDATE statement defining the order of the values to add for a given CQL row. - The provided INSERT statement must use a fully-qualified table name, one that includes the - keyspace name. Moreover, said statement must use bind variables since these variables will - be bound to values by the resulting SSTable writer. This is a mandatory option. - -withBufferSizeInMB(int size) The size of the buffer to use. This defines how much data will be buffered before being - written as a new SSTable. This corresponds roughly to the data size that will have the - created SSTable. The default is 128MB, which should be reasonable for a 1GB heap. If - OutOfMemory exception gets generated while using the SSTable writer, should lower this - value. - -sorted() Creates a CQLSSTableWriter that expects sorted inputs. If this option is used, the resulting - SSTable writer will expect rows to be added in SSTable sorted order (and an exception will - be thrown if that is not the case during row insertion). The SSTable sorted order means that - rows are added such that their partition keys respect the partitioner order. This option - should only be used if the rows can be provided in order, which is rarely the case. If the - rows can be provided in order however, using this sorted might be more efficient. If this - option is used, some option like withBufferSizeInMB will be ignored. - -build() Builds a CQLSSTableWriter object. - -============================================ ============ - diff --git a/doc/source/operating/cdc.rst b/doc/source/operating/cdc.rst deleted file mode 100644 index a7177b544b82..000000000000 --- a/doc/source/operating/cdc.rst +++ /dev/null @@ -1,96 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Change Data Capture -------------------- - -Overview -^^^^^^^^ - -Change data capture (CDC) provides a mechanism to flag specific tables for archival as well as rejecting writes to those -tables once a configurable size-on-disk for the CDC log is reached. An operator can enable CDC on a table by setting the -table property ``cdc=true`` (either when :ref:`creating the table ` or -:ref:`altering it `). Upon CommitLogSegment creation, a hard-link to the segment is created in the -directory specified in ``cassandra.yaml``. On segment fsync to disk, if CDC data is present anywhere in the segment a -_cdc.idx file is also created with the integer offset of how much data in the original segment is persisted -to disk. Upon final segment flush, a second line with the human-readable word "COMPLETED" will be added to the _cdc.idx -file indicating that Cassandra has completed all processing on the file. - -We we use an index file rather than just encouraging clients to parse the log realtime off a memory mapped handle as data -can be reflected in a kernel buffer that is not yet persisted to disk. Parsing only up to the listed offset in the _cdc.idx -file will ensure that you only parse CDC data for data that is durable. - -A threshold of total disk space allowed is specified in the yaml at which time newly allocated CommitLogSegments will -not allow CDC data until a consumer parses and removes files from the specified cdc_raw directory. - -Configuration -^^^^^^^^^^^^^ - -Enabling or disabling CDC on a table -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -CDC is enable or disable through the `cdc` table property, for instance:: - - CREATE TABLE foo (a int, b text, PRIMARY KEY(a)) WITH cdc=true; - - ALTER TABLE foo WITH cdc=true; - - ALTER TABLE foo WITH cdc=false; - -cassandra.yaml parameters -~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following `cassandra.yaml` are available for CDC: - -``cdc_enabled`` (default: false) - Enable or disable CDC operations node-wide. -``cdc_raw_directory`` (default: ``$CASSANDRA_HOME/data/cdc_raw``) - Destination for CommitLogSegments to be moved after all corresponding memtables are flushed. -``cdc_free_space_in_mb``: (default: min of 4096 and 1/8th volume space) - Calculated as sum of all active CommitLogSegments that permit CDC + all flushed CDC segments in - ``cdc_raw_directory``. -``cdc_free_space_check_interval_ms`` (default: 250) - When at capacity, we limit the frequency with which we re-calculate the space taken up by ``cdc_raw_directory`` to - prevent burning CPU cycles unnecessarily. Default is to check 4 times per second. - -.. _reading-commitlogsegments: - -Reading CommitLogSegments -^^^^^^^^^^^^^^^^^^^^^^^^^ -Use a `CommitLogReader.java -`__. -Usage is `fairly straightforward -`__ -with a `variety of signatures -`__ -available for use. In order to handle mutations read from disk, implement `CommitLogReadHandler -`__. - -Warnings -^^^^^^^^ - -**Do not enable CDC without some kind of consumption process in-place.** - -If CDC is enabled on a node and then on a table, the ``cdc_free_space_in_mb`` will fill up and then writes to -CDC-enabled tables will be rejected unless some consumption process is in place. - -Further Reading -^^^^^^^^^^^^^^^ - -- `JIRA ticket `__ -- `JIRA ticket `__ diff --git a/doc/source/operating/compaction/index.rst b/doc/source/operating/compaction/index.rst deleted file mode 100644 index ea505dd478b7..000000000000 --- a/doc/source/operating/compaction/index.rst +++ /dev/null @@ -1,301 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -.. _compaction: - -Compaction ----------- - -Strategies -^^^^^^^^^^ - -Picking the right compaction strategy for your workload will ensure the best performance for both querying and for compaction itself. - -:ref:`Size Tiered Compaction Strategy ` - The default compaction strategy. Useful as a fallback when other strategies don't fit the workload. Most useful for - non pure time series workloads with spinning disks, or when the I/O from :ref:`LCS ` is too high. - - -:ref:`Leveled Compaction Strategy ` - Leveled Compaction Strategy (LCS) is optimized for read heavy workloads, or workloads with lots of updates and deletes. It is not a good choice for immutable time series data. - - -:ref:`Time Window Compaction Strategy ` - Time Window Compaction Strategy is designed for TTL'ed, mostly immutable time series data. - - - -Types of compaction -^^^^^^^^^^^^^^^^^^^ - -The concept of compaction is used for different kinds of operations in Cassandra, the common thing about these -operations is that it takes one or more sstables and output new sstables. The types of compactions are; - -Minor compaction - triggered automatically in Cassandra. -Major compaction - a user executes a compaction over all sstables on the node. -User defined compaction - a user triggers a compaction on a given set of sstables. -Scrub - try to fix any broken sstables. This can actually remove valid data if that data is corrupted, if that happens you - will need to run a full repair on the node. -Upgradesstables - upgrade sstables to the latest version. Run this after upgrading to a new major version. -Cleanup - remove any ranges this node does not own anymore, typically triggered on neighbouring nodes after a node has been - bootstrapped since that node will take ownership of some ranges from those nodes. -Secondary index rebuild - rebuild the secondary indexes on the node. -Anticompaction - after repair the ranges that were actually repaired are split out of the sstables that existed when repair started. -Sub range compaction - It is possible to only compact a given sub range - this could be useful if you know a token that has been - misbehaving - either gathering many updates or many deletes. (``nodetool compact -st x -et y``) will pick - all sstables containing the range between x and y and issue a compaction for those sstables. For STCS this will - most likely include all sstables but with LCS it can issue the compaction for a subset of the sstables. With LCS - the resulting sstable will end up in L0. - -When is a minor compaction triggered? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -# When an sstable is added to the node through flushing/streaming etc. -# When autocompaction is enabled after being disabled (``nodetool enableautocompaction``) -# When compaction adds new sstables. -# A check for new minor compactions every 5 minutes. - -Merging sstables -^^^^^^^^^^^^^^^^ - -Compaction is about merging sstables, since partitions in sstables are sorted based on the hash of the partition key it -is possible to efficiently merge separate sstables. Content of each partition is also sorted so each partition can be -merged efficiently. - -Tombstones and Garbage Collection (GC) Grace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Why Tombstones -~~~~~~~~~~~~~~ - -When a delete request is received by Cassandra it does not actually remove the data from the underlying store. Instead -it writes a special piece of data known as a tombstone. The Tombstone represents the delete and causes all values which -occurred before the tombstone to not appear in queries to the database. This approach is used instead of removing values -because of the distributed nature of Cassandra. - -Deletes without tombstones -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Imagine a three node cluster which has the value [A] replicated to every node.:: - - [A], [A], [A] - -If one of the nodes fails and and our delete operation only removes existing values we can end up with a cluster that -looks like:: - - [], [], [A] - -Then a repair operation would replace the value of [A] back onto the two -nodes which are missing the value.:: - - [A], [A], [A] - -This would cause our data to be resurrected even though it had been -deleted. - -Deletes with Tombstones -~~~~~~~~~~~~~~~~~~~~~~~ - -Starting again with a three node cluster which has the value [A] replicated to every node.:: - - [A], [A], [A] - -If instead of removing data we add a tombstone record, our single node failure situation will look like this.:: - - [A, Tombstone[A]], [A, Tombstone[A]], [A] - -Now when we issue a repair the Tombstone will be copied to the replica, rather than the deleted data being -resurrected.:: - - [A, Tombstone[A]], [A, Tombstone[A]], [A, Tombstone[A]] - -Our repair operation will correctly put the state of the system to what we expect with the record [A] marked as deleted -on all nodes. This does mean we will end up accruing Tombstones which will permanently accumulate disk space. To avoid -keeping tombstones forever we have a parameter known as ``gc_grace_seconds`` for every table in Cassandra. - -The gc_grace_seconds parameter and Tombstone Removal -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The table level ``gc_grace_seconds`` parameter controls how long Cassandra will retain tombstones through compaction -events before finally removing them. This duration should directly reflect the amount of time a user expects to allow -before recovering a failed node. After ``gc_grace_seconds`` has expired the tombstone may be removed (meaning there will -no longer be any record that a certain piece of data was deleted), but as a tombstone can live in one sstable and the -data it covers in another, a compaction must also include both sstable for a tombstone to be removed. More precisely, to -be able to drop an actual tombstone the following needs to be true; - -- The tombstone must be older than ``gc_grace_seconds`` -- If partition X contains the tombstone, the sstable containing the partition plus all sstables containing data older - than the tombstone containing X must be included in the same compaction. We don't need to care if the partition is in - an sstable if we can guarantee that all data in that sstable is newer than the tombstone. If the tombstone is older - than the data it cannot shadow that data. -- If the option ``only_purge_repaired_tombstones`` is enabled, tombstones are only removed if the data has also been - repaired. - -If a node remains down or disconnected for longer than ``gc_grace_seconds`` it's deleted data will be repaired back to -the other nodes and re-appear in the cluster. This is basically the same as in the "Deletes without Tombstones" section. -Note that tombstones will not be removed until a compaction event even if ``gc_grace_seconds`` has elapsed. - -The default value for ``gc_grace_seconds`` is 864000 which is equivalent to 10 days. This can be set when creating or -altering a table using ``WITH gc_grace_seconds``. - -TTL -^^^ - -Data in Cassandra can have an additional property called time to live - this is used to automatically drop data that has -expired once the time is reached. Once the TTL has expired the data is converted to a tombstone which stays around for -at least ``gc_grace_seconds``. Note that if you mix data with TTL and data without TTL (or just different length of the -TTL) Cassandra will have a hard time dropping the tombstones created since the partition might span many sstables and -not all are compacted at once. - -Fully expired sstables -^^^^^^^^^^^^^^^^^^^^^^ - -If an sstable contains only tombstones and it is guaranteed that that sstable is not shadowing data in any other sstable -compaction can drop that sstable. If you see sstables with only tombstones (note that TTL:ed data is considered -tombstones once the time to live has expired) but it is not being dropped by compaction, it is likely that other -sstables contain older data. There is a tool called ``sstableexpiredblockers`` that will list which sstables are -droppable and which are blocking them from being dropped. This is especially useful for time series compaction with -``TimeWindowCompactionStrategy`` (and the deprecated ``DateTieredCompactionStrategy``). With ``TimeWindowCompactionStrategy`` -it is possible to remove the guarantee (not check for shadowing data) by enabling ``unsafe_aggressive_sstable_expiration``. - -Repaired/unrepaired data -^^^^^^^^^^^^^^^^^^^^^^^^ - -With incremental repairs Cassandra must keep track of what data is repaired and what data is unrepaired. With -anticompaction repaired data is split out into repaired and unrepaired sstables. To avoid mixing up the data again -separate compaction strategy instances are run on the two sets of data, each instance only knowing about either the -repaired or the unrepaired sstables. This means that if you only run incremental repair once and then never again, you -might have very old data in the repaired sstables that block compaction from dropping tombstones in the unrepaired -(probably newer) sstables. - -Data directories -^^^^^^^^^^^^^^^^ - -Since tombstones and data can live in different sstables it is important to realize that losing an sstable might lead to -data becoming live again - the most common way of losing sstables is to have a hard drive break down. To avoid making -data live tombstones and actual data are always in the same data directory. This way, if a disk is lost, all versions of -a partition are lost and no data can get undeleted. To achieve this a compaction strategy instance per data directory is -run in addition to the compaction strategy instances containing repaired/unrepaired data, this means that if you have 4 -data directories there will be 8 compaction strategy instances running. This has a few more benefits than just avoiding -data getting undeleted: - -- It is possible to run more compactions in parallel - leveled compaction will have several totally separate levelings - and each one can run compactions independently from the others. -- Users can backup and restore a single data directory. -- Note though that currently all data directories are considered equal, so if you have a tiny disk and a big disk - backing two data directories, the big one will be limited the by the small one. One work around to this is to create - more data directories backed by the big disk. - -Single sstable tombstone compaction -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -When an sstable is written a histogram with the tombstone expiry times is created and this is used to try to find -sstables with very many tombstones and run single sstable compaction on that sstable in hope of being able to drop -tombstones in that sstable. Before starting this it is also checked how likely it is that any tombstones will actually -will be able to be dropped how much this sstable overlaps with other sstables. To avoid most of these checks the -compaction option ``unchecked_tombstone_compaction`` can be enabled. - -.. _compaction-options: - -Common options -^^^^^^^^^^^^^^ - -There is a number of common options for all the compaction strategies; - -``enabled`` (default: true) - Whether minor compactions should run. Note that you can have 'enabled': true as a compaction option and then do - 'nodetool enableautocompaction' to start running compactions. -``tombstone_threshold`` (default: 0.2) - How much of the sstable should be tombstones for us to consider doing a single sstable compaction of that sstable. -``tombstone_compaction_interval`` (default: 86400s (1 day)) - Since it might not be possible to drop any tombstones when doing a single sstable compaction we need to make sure - that one sstable is not constantly getting recompacted - this option states how often we should try for a given - sstable. -``log_all`` (default: false) - New detailed compaction logging, see :ref:`below `. -``unchecked_tombstone_compaction`` (default: false) - The single sstable compaction has quite strict checks for whether it should be started, this option disables those - checks and for some usecases this might be needed. Note that this does not change anything for the actual - compaction, tombstones are only dropped if it is safe to do so - it might just rewrite an sstable without being able - to drop any tombstones. -``only_purge_repaired_tombstone`` (default: false) - Option to enable the extra safety of making sure that tombstones are only dropped if the data has been repaired. -``min_threshold`` (default: 4) - Lower limit of number of sstables before a compaction is triggered. Not used for ``LeveledCompactionStrategy``. -``max_threshold`` (default: 32) - Upper limit of number of sstables before a compaction is triggered. Not used for ``LeveledCompactionStrategy``. - -Further, see the section on each strategy for specific additional options. - -Compaction nodetool commands -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The :ref:`nodetool ` utility provides a number of commands related to compaction: - -``enableautocompaction`` - Enable compaction. -``disableautocompaction`` - Disable compaction. -``setcompactionthroughput`` - How fast compaction should run at most - defaults to 16MB/s, but note that it is likely not possible to reach this - throughput. -``compactionstats`` - Statistics about current and pending compactions. -``compactionhistory`` - List details about the last compactions. -``setcompactionthreshold`` - Set the min/max sstable count for when to trigger compaction, defaults to 4/32. - -Switching the compaction strategy and options using JMX -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -It is possible to switch compaction strategies and its options on just a single node using JMX, this is a great way to -experiment with settings without affecting the whole cluster. The mbean is:: - - org.apache.cassandra.db:type=ColumnFamilies,keyspace=,columnfamily= - -and the attribute to change is ``CompactionParameters`` or ``CompactionParametersJson`` if you use jconsole or jmc. The -syntax for the json version is the same as you would use in an :ref:`ALTER TABLE ` statement - -for example:: - - { 'class': 'LeveledCompactionStrategy', 'sstable_size_in_mb': 123, 'fanout_size': 10} - -The setting is kept until someone executes an :ref:`ALTER TABLE ` that touches the compaction -settings or restarts the node. - -.. _detailed-compaction-logging: - -More detailed compaction logging -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Enable with the compaction option ``log_all`` and a more detailed compaction log file will be produced in your log -directory. - - - - - diff --git a/doc/source/operating/compaction/lcs.rst b/doc/source/operating/compaction/lcs.rst deleted file mode 100644 index 48c282eb7103..000000000000 --- a/doc/source/operating/compaction/lcs.rst +++ /dev/null @@ -1,90 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - - - -.. _LCS: - -Leveled Compaction Strategy -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The idea of ``LeveledCompactionStrategy`` (LCS) is that all sstables are put into different levels where we guarantee -that no overlapping sstables are in the same level. By overlapping we mean that the first/last token of a single sstable -are never overlapping with other sstables. This means that for a SELECT we will only have to look for the partition key -in a single sstable per level. Each level is 10x the size of the previous one and each sstable is 160MB by default. L0 -is where sstables are streamed/flushed - no overlap guarantees are given here. - -When picking compaction candidates we have to make sure that the compaction does not create overlap in the target level. -This is done by always including all overlapping sstables in the next level. For example if we select an sstable in L3, -we need to guarantee that we pick all overlapping sstables in L4 and make sure that no currently ongoing compactions -will create overlap if we start that compaction. We can start many parallel compactions in a level if we guarantee that -we wont create overlap. For L0 -> L1 compactions we almost always need to include all L1 sstables since most L0 sstables -cover the full range. We also can't compact all L0 sstables with all L1 sstables in a single compaction since that can -use too much memory. - -When deciding which level to compact LCS checks the higher levels first (with LCS, a "higher" level is one with a higher -number, L0 being the lowest one) and if the level is behind a compaction will be started in that level. - -Major compaction -~~~~~~~~~~~~~~~~ - -It is possible to do a major compaction with LCS - it will currently start by filling out L1 and then once L1 is full, -it continues with L2 etc. This is sub optimal and will change to create all the sstables in a high level instead, -CASSANDRA-11817. - -Bootstrapping -~~~~~~~~~~~~~ - -During bootstrap sstables are streamed from other nodes. The level of the remote sstable is kept to avoid many -compactions after the bootstrap is done. During bootstrap the new node also takes writes while it is streaming the data -from a remote node - these writes are flushed to L0 like all other writes and to avoid those sstables blocking the -remote sstables from going to the correct level, we only do STCS in L0 until the bootstrap is done. - -STCS in L0 -~~~~~~~~~~ - -If LCS gets very many L0 sstables reads are going to hit all (or most) of the L0 sstables since they are likely to be -overlapping. To more quickly remedy this LCS does STCS compactions in L0 if there are more than 32 sstables there. This -should improve read performance more quickly compared to letting LCS do its L0 -> L1 compactions. If you keep getting -too many sstables in L0 it is likely that LCS is not the best fit for your workload and STCS could work out better. - -Starved sstables -~~~~~~~~~~~~~~~~ - -If a node ends up with a leveling where there are a few very high level sstables that are not getting compacted they -might make it impossible for lower levels to drop tombstones etc. For example, if there are sstables in L6 but there is -only enough data to actually get a L4 on the node the left over sstables in L6 will get starved and not compacted. This -can happen if a user changes sstable\_size\_in\_mb from 5MB to 160MB for example. To avoid this LCS tries to include -those starved high level sstables in other compactions if there has been 25 compaction rounds where the highest level -has not been involved. - -.. _lcs-options: - -LCS options -~~~~~~~~~~~ - -``sstable_size_in_mb`` (default: 160MB) - The target compressed (if using compression) sstable size - the sstables can end up being larger if there are very - large partitions on the node. - -``fanout_size`` (default: 10) - The target size of levels increases by this fanout_size multiplier. You can reduce the space amplification by tuning - this option. - -LCS also support the ``cassandra.disable_stcs_in_l0`` startup option (``-Dcassandra.disable_stcs_in_l0=true``) to avoid -doing STCS in L0. - - diff --git a/doc/source/operating/compaction/stcs.rst b/doc/source/operating/compaction/stcs.rst deleted file mode 100644 index 65893375764c..000000000000 --- a/doc/source/operating/compaction/stcs.rst +++ /dev/null @@ -1,58 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - - -.. _STCS: - -Leveled Compaction Strategy -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The basic idea of ``SizeTieredCompactionStrategy`` (STCS) is to merge sstables of approximately the same size. All -sstables are put in different buckets depending on their size. An sstable is added to the bucket if size of the sstable -is within ``bucket_low`` and ``bucket_high`` of the current average size of the sstables already in the bucket. This -will create several buckets and the most interesting of those buckets will be compacted. The most interesting one is -decided by figuring out which bucket's sstables takes the most reads. - -Major compaction -~~~~~~~~~~~~~~~~ - -When running a major compaction with STCS you will end up with two sstables per data directory (one for repaired data -and one for unrepaired data). There is also an option (-s) to do a major compaction that splits the output into several -sstables. The sizes of the sstables are approximately 50%, 25%, 12.5%... of the total size. - -.. _stcs-options: - -STCS options -~~~~~~~~~~~~ - -``min_sstable_size`` (default: 50MB) - Sstables smaller than this are put in the same bucket. -``bucket_low`` (default: 0.5) - How much smaller than the average size of a bucket a sstable should be before not being included in the bucket. That - is, if ``bucket_low * avg_bucket_size < sstable_size`` (and the ``bucket_high`` condition holds, see below), then - the sstable is added to the bucket. -``bucket_high`` (default: 1.5) - How much bigger than the average size of a bucket a sstable should be before not being included in the bucket. That - is, if ``sstable_size < bucket_high * avg_bucket_size`` (and the ``bucket_low`` condition holds, see above), then - the sstable is added to the bucket. - -Defragmentation -~~~~~~~~~~~~~~~ - -Defragmentation is done when many sstables are touched during a read. The result of the read is put in to the memtable -so that the next read will not have to touch as many sstables. This can cause writes on a read-only-cluster. - - diff --git a/doc/source/operating/compaction/twcs.rst b/doc/source/operating/compaction/twcs.rst deleted file mode 100644 index 3641a5aab7d9..000000000000 --- a/doc/source/operating/compaction/twcs.rst +++ /dev/null @@ -1,76 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - - -.. _TWCS: - -Time Window CompactionStrategy -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -``TimeWindowCompactionStrategy`` (TWCS) is designed specifically for workloads where it's beneficial to have data on -disk grouped by the timestamp of the data, a common goal when the workload is time-series in nature or when all data is -written with a TTL. In an expiring/TTL workload, the contents of an entire SSTable likely expire at approximately the -same time, allowing them to be dropped completely, and space reclaimed much more reliably than when using -``SizeTieredCompactionStrategy`` or ``LeveledCompactionStrategy``. The basic concept is that -``TimeWindowCompactionStrategy`` will create 1 sstable per file for a given window, where a window is simply calculated -as the combination of two primary options: - -``compaction_window_unit`` (default: DAYS) - A Java TimeUnit (MINUTES, HOURS, or DAYS). -``compaction_window_size`` (default: 1) - The number of units that make up a window. -``unsafe_aggressive_sstable_expiration`` (default: false) - Expired sstables will be dropped without checking its data is shadowing other sstables. This is a potentially - risky option that can lead to data loss or deleted data re-appearing, going beyond what - `unchecked_tombstone_compaction` does for single sstable compaction. Due to the risk the jvm must also be - started with `-Dcassandra.unsafe_aggressive_sstable_expiration=true`. - -Taken together, the operator can specify windows of virtually any size, and `TimeWindowCompactionStrategy` will work to -create a single sstable for writes within that window. For efficiency during writing, the newest window will be -compacted using `SizeTieredCompactionStrategy`. - -Ideally, operators should select a ``compaction_window_unit`` and ``compaction_window_size`` pair that produces -approximately 20-30 windows - if writing with a 90 day TTL, for example, a 3 Day window would be a reasonable choice -(``'compaction_window_unit':'DAYS','compaction_window_size':3``). - -TimeWindowCompactionStrategy Operational Concerns -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The primary motivation for TWCS is to separate data on disk by timestamp and to allow fully expired SSTables to drop -more efficiently. One potential way this optimal behavior can be subverted is if data is written to SSTables out of -order, with new data and old data in the same SSTable. Out of order data can appear in two ways: - -- If the user mixes old data and new data in the traditional write path, the data will be comingled in the memtables - and flushed into the same SSTable, where it will remain comingled. -- If the user's read requests for old data cause read repairs that pull old data into the current memtable, that data - will be comingled and flushed into the same SSTable. - -While TWCS tries to minimize the impact of comingled data, users should attempt to avoid this behavior. Specifically, -users should avoid queries that explicitly set the timestamp via CQL ``USING TIMESTAMP``. Additionally, users should run -frequent repairs (which streams data in such a way that it does not become comingled). - -Changing TimeWindowCompactionStrategy Options -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Operators wishing to enable ``TimeWindowCompactionStrategy`` on existing data should consider running a major compaction -first, placing all existing data into a single (old) window. Subsequent newer writes will then create typical SSTables -as expected. - -Operators wishing to change ``compaction_window_unit`` or ``compaction_window_size`` can do so, but may trigger -additional compactions as adjacent windows are joined together. If the window size is decrease d (for example, from 24 -hours to 12 hours), then the existing SSTables will not be modified - TWCS can not split existing SSTables into multiple -windows. - diff --git a/doc/source/operating/compression.rst b/doc/source/operating/compression.rst deleted file mode 100644 index 74c992f5a2aa..000000000000 --- a/doc/source/operating/compression.rst +++ /dev/null @@ -1,164 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Compression ------------ - -Cassandra offers operators the ability to configure compression on a per-table basis. Compression reduces the size of -data on disk by compressing the SSTable in user-configurable compression ``chunk_length_in_kb``. As Cassandra SSTables -are immutable, the CPU cost of compressing is only necessary when the SSTable is written - subsequent updates -to data will land in different SSTables, so Cassandra will not need to decompress, overwrite, and recompress data when -UPDATE commands are issued. On reads, Cassandra will locate the relevant compressed chunks on disk, decompress the full -chunk, and then proceed with the remainder of the read path (merging data from disks and memtables, read repair, and so -on). - -Compression algorithms typically trade off between the following three areas: - -- **Compression speed**: How fast does the compression algorithm compress data. This is critical in the flush and - compaction paths because data must be compressed before it is written to disk. -- **Decompression speed**: How fast does the compression algorithm de-compress data. This is critical in the read - and compaction paths as data must be read off disk in a full chunk and decompressed before it can be returned. -- **Ratio**: By what ratio is the uncompressed data reduced by. Cassandra typically measures this as the size of data - on disk relative to the uncompressed size. For example a ratio of ``0.5`` means that the data on disk is 50% the size - of the uncompressed data. Cassandra exposes this ratio per table as the ``SSTable Compression Ratio`` field of - ``nodetool tablestats``. - -Cassandra offers five compression algorithms by default that make different tradeoffs in these areas. While -benchmarking compression algorithms depends on many factors (algorithm parameters such as compression level, -the compressibility of the input data, underlying processor class, etc ...), the following table should help you pick -a starting point based on your application's requirements with an extremely rough grading of the different choices -by their performance in these areas (A is relatively good, F is relatively bad): - -+---------------------------------------------+-----------------------+-------------+---------------+-------+-------------+ -| Compression Algorithm | Cassandra Class | Compression | Decompression | Ratio | C* Version | -+=============================================+=======================+=============+===============+=======+=============+ -| `LZ4 `_ | ``LZ4Compressor`` | A+ | A+ | C+ | ``>=1.2.2`` | -+---------------------------------------------+-----------------------+-------------+---------------+-------+-------------+ -| `LZ4HC `_ | ``LZ4Compressor`` | C+ | A+ | B+ | ``>= 3.6`` | -+---------------------------------------------+-----------------------+-------------+---------------+-------+-------------+ -| `Zstd `_ | ``ZstdCompressor`` | A- | A- | A+ | ``>= 4.0`` | -+---------------------------------------------+-----------------------+-------------+---------------+-------+-------------+ -| `Snappy `_ | ``SnappyCompressor`` | A- | A | C | ``>= 1.0`` | -+---------------------------------------------+-----------------------+-------------+---------------+-------+-------------+ -| `Deflate (zlib) `_ | ``DeflateCompressor`` | C | C | A | ``>= 1.0`` | -+---------------------------------------------+-----------------------+-------------+---------------+-------+-------------+ - -Generally speaking for a performance critical (latency or throughput) application ``LZ4`` is the right choice as it -gets excellent ratio per CPU cycle spent. This is why it is the default choice in Cassandra. - -For storage critical applications (disk footprint), however, ``Zstd`` may be a better choice as it can get significant -additional ratio to ``LZ4``. - -``Snappy`` is kept for backwards compatibility and ``LZ4`` will typically be preferable. - -``Deflate`` is kept for backwards compatibility and ``Zstd`` will typically be preferable. - -Configuring Compression -^^^^^^^^^^^^^^^^^^^^^^^ - -Compression is configured on a per-table basis as an optional argument to ``CREATE TABLE`` or ``ALTER TABLE``. Three -options are available for all compressors: - -- ``class`` (default: ``LZ4Compressor``): specifies the compression class to use. The two "fast" - compressors are ``LZ4Compressor`` and ``SnappyCompressor`` and the two "good" ratio compressors are ``ZstdCompressor`` - and ``DeflateCompressor``. -- ``chunk_length_in_kb`` (default: ``16KiB``): specifies the number of kilobytes of data per compression chunk. The main - tradeoff here is that larger chunk sizes give compression algorithms more context and improve their ratio, but - require reads to deserialize and read more off disk. -- ``crc_check_chance`` (default: ``1.0``): determines how likely Cassandra is to verify the checksum on each compression - chunk during reads to protect against data corruption. Unless you have profiles indicating this is a performance - problem it is highly encouraged not to turn this off as it is Cassandra's only protection against bitrot. - -The ``LZ4Compressor`` supports the following additional options: - -- ``lz4_compressor_type`` (default ``fast``): specifies if we should use the ``high`` (a.k.a ``LZ4HC``) ratio version - or the ``fast`` (a.k.a ``LZ4``) version of ``LZ4``. The ``high`` mode supports a configurable level, which can allow - operators to tune the performance <-> ratio tradeoff via the ``lz4_high_compressor_level`` option. Note that in - ``4.0`` and above it may be preferable to use the ``Zstd`` compressor. -- ``lz4_high_compressor_level`` (default ``9``): A number between ``1`` and ``17`` inclusive that represents how much - CPU time to spend trying to get more compression ratio. Generally lower levels are "faster" but they get less ratio - and higher levels are slower but get more compression ratio. - -The ``ZstdCompressor`` supports the following options in addition: - -- ``compression_level`` (default ``3``): A number between ``-131072`` and ``22`` inclusive that represents how much CPU - time to spend trying to get more compression ratio. The lower the level, the faster the speed (at the cost of ratio). - Values from 20 to 22 are called "ultra levels" and should be used with caution, as they require more memory. - The default of ``3`` is a good choice for competing with ``Deflate`` ratios and ``1`` is a good choice for competing - with ``LZ4``. - - -Users can set compression using the following syntax: - -:: - - CREATE TABLE keyspace.table (id int PRIMARY KEY) WITH compression = {'class': 'LZ4Compressor'}; - -Or - -:: - - ALTER TABLE keyspace.table WITH compression = {'class': 'LZ4Compressor', 'chunk_length_in_kb': 64, 'crc_check_chance': 0.5}; - -Once enabled, compression can be disabled with ``ALTER TABLE`` setting ``enabled`` to ``false``: - -:: - - ALTER TABLE keyspace.table WITH compression = {'enabled':'false'}; - -Operators should be aware, however, that changing compression is not immediate. The data is compressed when the SSTable -is written, and as SSTables are immutable, the compression will not be modified until the table is compacted. Upon -issuing a change to the compression options via ``ALTER TABLE``, the existing SSTables will not be modified until they -are compacted - if an operator needs compression changes to take effect immediately, the operator can trigger an SSTable -rewrite using ``nodetool scrub`` or ``nodetool upgradesstables -a``, both of which will rebuild the SSTables on disk, -re-compressing the data in the process. - -Benefits and Uses -^^^^^^^^^^^^^^^^^ - -Compression's primary benefit is that it reduces the amount of data written to disk. Not only does the reduced size save -in storage requirements, it often increases read and write throughput, as the CPU overhead of compressing data is faster -than the time it would take to read or write the larger volume of uncompressed data from disk. - -Compression is most useful in tables comprised of many rows, where the rows are similar in nature. Tables containing -similar text columns (such as repeated JSON blobs) often compress very well. Tables containing data that has already -been compressed or random data (e.g. benchmark datasets) do not typically compress well. - -Operational Impact -^^^^^^^^^^^^^^^^^^ - -- Compression metadata is stored off-heap and scales with data on disk. This often requires 1-3GB of off-heap RAM per - terabyte of data on disk, though the exact usage varies with ``chunk_length_in_kb`` and compression ratios. - -- Streaming operations involve compressing and decompressing data on compressed tables - in some code paths (such as - non-vnode bootstrap), the CPU overhead of compression can be a limiting factor. - -- To prevent slow compressors (``Zstd``, ``Deflate``, ``LZ4HC``) from blocking flushes for too long, all three - flush with the default fast ``LZ4`` compressor and then rely on normal compaction to re-compress the data into the - desired compression strategy. See `CASSANDRA-15379 ` for more - details. - -- The compression path checksums data to ensure correctness - while the traditional Cassandra read path does not have a - way to ensure correctness of data on disk, compressed tables allow the user to set ``crc_check_chance`` (a float from - 0.0 to 1.0) to allow Cassandra to probabilistically validate chunks on read to verify bits on disk are not corrupt. - -Advanced Use -^^^^^^^^^^^^ - -Advanced users can provide their own compression class by implementing the interface at -``org.apache.cassandra.io.compress.ICompressor``. diff --git a/doc/source/operating/error_codes.txt b/doc/source/operating/error_codes.txt deleted file mode 100644 index 279fe400a8f4..000000000000 --- a/doc/source/operating/error_codes.txt +++ /dev/null @@ -1,31 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Error Codes ------------ - -In Cassandra 3.10 and higher, when the v5 native protocol (or a higher version) is used, -``ReadFailure`` and ``WriteFailure`` errors will contain a map of replica addresses -to error codes. Those error codes are explained here: - -``0x0000`` - The error does not have a specific code assigned yet, or the cause is unknown. - -``0x0001`` - The read operation scanned too many tombstones (as defined by ``tombstone_failure_threshold`` in ``cassandra.yaml``), - causing a TombstoneOverwhelmingException. diff --git a/doc/source/operating/hardware.rst b/doc/source/operating/hardware.rst deleted file mode 100644 index d90550c804f1..000000000000 --- a/doc/source/operating/hardware.rst +++ /dev/null @@ -1,85 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Hardware Choices ----------------- - -Like most databases, Cassandra throughput improves with more CPU cores, more RAM, and faster disks. While Cassandra can -be made to run on small servers for testing or development environments (including Raspberry Pis), a minimal production -server requires at least 2 cores, and at least 8GB of RAM. Typical production servers have 8 or more cores and at least -32GB of RAM. - -CPU -^^^ -Cassandra is highly concurrent, handling many simultaneous requests (both read and write) using multiple threads running -on as many CPU cores as possible. The Cassandra write path tends to be heavily optimized (writing to the commitlog and -then inserting the data into the memtable), so writes, in particular, tend to be CPU bound. Consequently, adding -additional CPU cores often increases throughput of both reads and writes. - -Memory -^^^^^^ -Cassandra runs within a Java VM, which will pre-allocate a fixed size heap (java's Xmx system parameter). In addition to -the heap, Cassandra will use significant amounts of RAM offheap for compression metadata, bloom filters, row, key, and -counter caches, and an in process page cache. Finally, Cassandra will take advantage of the operating system's page -cache, storing recently accessed portions files in RAM for rapid re-use. - -For optimal performance, operators should benchmark and tune their clusters based on their individual workload. However, -basic guidelines suggest: - -- ECC RAM should always be used, as Cassandra has few internal safeguards to protect against bit level corruption -- The Cassandra heap should be no less than 2GB, and no more than 50% of your system RAM -- Heaps smaller than 12GB should consider ParNew/ConcurrentMarkSweep garbage collection -- Heaps larger than 12GB should consider G1GC - -Disks -^^^^^ -Cassandra persists data to disk for two very different purposes. The first is to the commitlog when a new write is made -so that it can be replayed after a crash or system shutdown. The second is to the data directory when thresholds are -exceeded and memtables are flushed to disk as SSTables. - -Commitlogs receive every write made to a Cassandra node and have the potential to block client operations, but they are -only ever read on node start-up. SSTable (data file) writes on the other hand occur asynchronously, but are read to -satisfy client look-ups. SSTables are also periodically merged and rewritten in a process called compaction. The data -held in the commitlog directory is data that has not been permanently saved to the SSTable data directories - it will be -periodically purged once it is flushed to the SSTable data files. - -Cassandra performs very well on both spinning hard drives and solid state disks. In both cases, Cassandra's sorted -immutable SSTables allow for linear reads, few seeks, and few overwrites, maximizing throughput for HDDs and lifespan of -SSDs by avoiding write amplification. However, when using spinning disks, it's important that the commitlog -(``commitlog_directory``) be on one physical disk (not simply a partition, but a physical disk), and the data files -(``data_file_directories``) be set to a separate physical disk. By separating the commitlog from the data directory, -writes can benefit from sequential appends to the commitlog without having to seek around the platter as reads request -data from various SSTables on disk. - -In most cases, Cassandra is designed to provide redundancy via multiple independent, inexpensive servers. For this -reason, using NFS or a SAN for data directories is an antipattern and should typically be avoided. Similarly, servers -with multiple disks are often better served by using RAID0 or JBOD than RAID1 or RAID5 - replication provided by -Cassandra obsoletes the need for replication at the disk layer, so it's typically recommended that operators take -advantage of the additional throughput of RAID0 rather than protecting against failures with RAID1 or RAID5. - -Common Cloud Choices -^^^^^^^^^^^^^^^^^^^^ - -Many large users of Cassandra run in various clouds, including AWS, Azure, and GCE - Cassandra will happily run in any -of these environments. Users should choose similar hardware to what would be needed in physical space. In EC2, popular -options include: - -- i2 instances, which provide both a high RAM:CPU ratio and local ephemeral SSDs -- m4.2xlarge / c4.4xlarge instances, which provide modern CPUs, enhanced networking and work well with EBS GP2 (SSD) - storage - -Generally, disk and network performance increases with instance size and generation, so newer generations of instances -and larger instance types within each family often perform better than their smaller or older alternatives. diff --git a/doc/source/operating/hints.rst b/doc/source/operating/hints.rst deleted file mode 100644 index 55c42a4017b9..000000000000 --- a/doc/source/operating/hints.rst +++ /dev/null @@ -1,279 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -.. _hints: - -Hints -===== - -Hinting is a data repair technique applied during write operations. When -replica nodes are unavailable to accept a mutation, either due to failure or -more commonly routine maintenance, coordinators attempting to write to those -replicas store temporary hints on their local filesystem for later application -to the unavailable replica. Hints are an important way to help reduce the -duration of data inconsistency. Coordinators replay hints quickly after -unavailable replica nodes return to the ring. Hints are best effort, however, -and do not guarantee eventual consistency like :ref:`anti-entropy repair -` does. - -Hints are useful because of how Apache Cassandra replicates data to provide -fault tolerance, high availability and durability. Cassandra :ref:`partitions -data across the cluster ` using consistent -hashing, and then replicates keys to multiple nodes along the hash ring. To -guarantee availability, all replicas of a key can accept mutations without -consensus, but this means it is possible for some replicas to accept a mutation -while others do not. When this happens an inconsistency is introduced. - -Hints are one of the three ways, in addition to read-repair and -full/incremental anti-entropy repair, that Cassandra implements the eventual -consistency guarantee that all updates are eventually received by all replicas. -Hints, like read-repair, are best effort and not an alternative to performing -full repair, but they do help reduce the duration of inconsistency between -replicas in practice. - -Hinted Handoff --------------- - -Hinted handoff is the process by which Cassandra applies hints to unavailable -nodes. - -For example, consider a mutation is to be made at ``Consistency Level`` -``LOCAL_QUORUM`` against a keyspace with ``Replication Factor`` of ``3``. -Normally the client sends the mutation to a single coordinator, who then sends -the mutation to all three replicas, and when two of the three replicas -acknowledge the mutation the coordinator responds successfully to the client. -If a replica node is unavailable, however, the coordinator stores a hint -locally to the filesystem for later application. New hints will be retained for -up to ``max_hint_window_in_ms`` of downtime (defaults to ``3 hours``). If the -unavailable replica does return to the cluster before the window expires, the -coordinator applies any pending hinted mutations against the replica to ensure -that eventual consistency is maintained. - -.. figure:: images/hints.svg - :alt: Hinted Handoff Example - - Hinted Handoff in Action - -* (``t0``): The write is sent by the client, and the coordinator sends it - to the three replicas. Unfortunately ``replica_2`` is restarting and cannot - receive the mutation. -* (``t1``): The client receives a quorum acknowledgement from the coordinator. - At this point the client believe the write to be durable and visible to reads - (which it is). -* (``t2``): After the write timeout (default ``2s``), the coordinator decides - that ``replica_2`` is unavailable and stores a hint to its local disk. -* (``t3``): Later, when ``replica_2`` starts back up it sends a gossip message - to all nodes, including the coordinator. -* (``t4``): The coordinator replays hints including the missed mutation - against ``replica_2``. - -If the node does not return in time, the destination replica will be -permanently out of sync until either read-repair or full/incremental -anti-entropy repair propagates the mutation. - -Application of Hints -^^^^^^^^^^^^^^^^^^^^ - -Hints are streamed in bulk, a segment at a time, to the target replica node and -the target node replays them locally. After the target node has replayed a -segment it deletes the segment and receives the next segment. This continues -until all hints are drained. - -Storage of Hints on Disk -^^^^^^^^^^^^^^^^^^^^^^^^ - -Hints are stored in flat files in the coordinator node’s -``$CASSANDRA_HOME/data/hints`` directory. A hint includes a hint id, the target -replica node on which the mutation is meant to be stored, the serialized -mutation (stored as a blob) that couldn't be delivered to the replica node, the -mutation timestamp, and the Cassandra version used to serialize the mutation. -By default hints are compressed using ``LZ4Compressor``. Multiple hints are -appended to the same hints file. - -Since hints contain the original unmodified mutation timestamp, hint application -is idempotent and cannot overwrite a future mutation. - -Hints for Timed Out Write Requests -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Hints are also stored for write requests that time out. The -``write_request_timeout_in_ms`` setting in ``cassandra.yaml`` configures the -timeout for write requests. - -:: - - write_request_timeout_in_ms: 2000 - -The coordinator waits for the configured amount of time for write requests to -complete, at which point it will time out and generate a hint for the timed out -request. The lowest acceptable value for ``write_request_timeout_in_ms`` is 10 ms. - - -Configuring Hints ------------------ - -Hints are enabled by default as they are critical for data consistency. The -``cassandra.yaml`` configuration file provides several settings for configuring -hints: - -Table 1. Settings for Hints - -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|Setting | Description |Default Value | -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|``hinted_handoff_enabled`` |Enables/Disables hinted handoffs | ``true`` | -| | | | -| | | | -| | | | -| | | | -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|``hinted_handoff_disabled_datacenters`` |A list of data centers that do not perform | ``unset`` | -| |hinted handoffs even when handoff is | | -| |otherwise enabled. | | -| |Example: | | -| | | | -| | .. code-block:: yaml | | -| | | | -| | hinted_handoff_disabled_datacenters: | | -| | - DC1 | | -| | - DC2 | | -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|``max_hint_window_in_ms`` |Defines the maximum amount of time (ms) | ``10800000`` # 3 hours | -| |a node shall have hints generated after it | | -| |has failed. | | -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|``hinted_handoff_throttle_in_kb`` |Maximum throttle in KBs per second, per | | -| |delivery thread. This will be reduced | ``1024`` | -| |proportionally to the number of nodes in | | -| |the cluster. | | -| |(If there are two nodes in the cluster, | | -| |each delivery thread will use the maximum | | -| |rate; if there are 3, each will throttle | | -| |to half of the maximum,since it is expected| | -| |for two nodes to be delivering hints | | -| |simultaneously.) | | -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|``max_hints_delivery_threads`` |Number of threads with which to deliver | ``2`` | -| |hints; Consider increasing this number when| | -| |you have multi-dc deployments, since | | -| |cross-dc handoff tends to be slower | | -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|``hints_directory`` |Directory where Cassandra stores hints. |``$CASSANDRA_HOME/data/hints`` | -| | | | -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|``hints_flush_period_in_ms`` |How often hints should be flushed from the | ``10000`` | -| |internal buffers to disk. Will *not* | | -| |trigger fsync. | | -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|``max_hints_file_size_in_mb`` |Maximum size for a single hints file, in | ``128`` | -| |megabytes. | | -+--------------------------------------------+-------------------------------------------+-------------------------------+ -|``hints_compression`` |Compression to apply to the hint files. | ``LZ4Compressor`` | -| |If omitted, hints files will be written | | -| |uncompressed. LZ4, Snappy, and Deflate | | -| |compressors are supported. | | -+--------------------------------------------+-------------------------------------------+-------------------------------+ - -Configuring Hints at Runtime with ``nodetool`` ----------------------------------------------- - -``nodetool`` provides several commands for configuring hints or getting hints -related information. The nodetool commands override the corresponding -settings if any in ``cassandra.yaml`` for the node running the command. - -Table 2. Nodetool Commands for Hints - -+--------------------------------+-------------------------------------------+ -|Command | Description | -+--------------------------------+-------------------------------------------+ -|``nodetool disablehandoff`` |Disables storing and delivering hints | -+--------------------------------+-------------------------------------------+ -|``nodetool disablehintsfordc`` |Disables storing and delivering hints to a | -| |data center | -+--------------------------------+-------------------------------------------+ -|``nodetool enablehandoff`` |Re-enables future hints storing and | -| |delivery on the current node | -+--------------------------------+-------------------------------------------+ -|``nodetool enablehintsfordc`` |Enables hints for a data center that was | -| |previously disabled | -+--------------------------------+-------------------------------------------+ -|``nodetool getmaxhintwindow`` |Prints the max hint window in ms. New in | -| |Cassandra 4.0. | -+--------------------------------+-------------------------------------------+ -|``nodetool handoffwindow`` |Prints current hinted handoff window | -+--------------------------------+-------------------------------------------+ -|``nodetool pausehandoff`` |Pauses hints delivery process | -+--------------------------------+-------------------------------------------+ -|``nodetool resumehandoff`` |Resumes hints delivery process | -+--------------------------------+-------------------------------------------+ -|``nodetool |Sets hinted handoff throttle in kb | -|sethintedhandoffthrottlekb`` |per second, per delivery thread | -+--------------------------------+-------------------------------------------+ -|``nodetool setmaxhintwindow`` |Sets the specified max hint window in ms | -+--------------------------------+-------------------------------------------+ -|``nodetool statushandoff`` |Status of storing future hints on the | -| |current node | -+--------------------------------+-------------------------------------------+ -|``nodetool truncatehints`` |Truncates all hints on the local node, or | -| |truncates hints for the endpoint(s) | -| |specified. | -+--------------------------------+-------------------------------------------+ - -Make Hints Play Faster at Runtime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The default of ``1024 kbps`` handoff throttle is conservative for most modern -networks, and it is entirely possible that in a simple node restart you may -accumulate many gigabytes hints that may take hours to play back. For example if -you are ingesting ``100 Mbps`` of data per node, a single 10 minute long -restart will create ``10 minutes * (100 megabit / second) ~= 7 GiB`` of data -which at ``(1024 KiB / second)`` would take ``7.5 GiB / (1024 KiB / second) = -2.03 hours`` to play back. The exact math depends on the load balancing strategy -(round robin is better than token aware), number of tokens per node (more -tokens is better than fewer), and naturally the cluster's write rate, but -regardless you may find yourself wanting to increase this throttle at runtime. - -If you find yourself in such a situation, you may consider raising -the ``hinted_handoff_throttle`` dynamically via the -``nodetool sethintedhandoffthrottlekb`` command. - -Allow a Node to be Down Longer at Runtime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Sometimes a node may be down for more than the normal ``max_hint_window_in_ms``, -(default of three hours), but the hardware and data itself will still be -accessible. In such a case you may consider raising the -``max_hint_window_in_ms`` dynamically via the ``nodetool setmaxhintwindow`` -command added in Cassandra 4.0 (`CASSANDRA-11720 `_). -This will instruct Cassandra to continue holding hints for the down -endpoint for a longer amount of time. - -This command should be applied on all nodes in the cluster that may be holding -hints. If needed, the setting can be applied permanently by setting the -``max_hint_window_in_ms`` setting in ``cassandra.yaml`` followed by a rolling -restart. - -Monitoring Hint Delivery ------------------------- - -Cassandra 4.0 adds histograms available to understand how long it takes to deliver -hints which is useful for operators to better identify problems (`CASSANDRA-13234 -`_). - -There are also metrics available for tracking :ref:`Hinted Handoff ` -and :ref:`Hints Service ` metrics. diff --git a/doc/source/operating/index.rst b/doc/source/operating/index.rst deleted file mode 100644 index 78c7eb6ea19e..000000000000 --- a/doc/source/operating/index.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Operating Cassandra -=================== - -.. toctree:: - :maxdepth: 2 - - snitch - topo_changes - repair - read_repair - hints - compaction/index - bloom_filters - compression - cdc - backups - bulk_loading - metrics - security - hardware - diff --git a/doc/source/operating/metrics.rst b/doc/source/operating/metrics.rst deleted file mode 100644 index fc37440d3c28..000000000000 --- a/doc/source/operating/metrics.rst +++ /dev/null @@ -1,793 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -.. _monitoring-metrics: - -Monitoring ----------- - -Metrics in Cassandra are managed using the `Dropwizard Metrics `__ library. These metrics -can be queried via JMX or pushed to external monitoring systems using a number of `built in -`__ and `third party -`__ reporter plugins. - -Metrics are collected for a single node. It's up to the operator to use an external monitoring system to aggregate them. - -Metric Types -^^^^^^^^^^^^ -All metrics reported by cassandra fit into one of the following types. - -``Gauge`` - An instantaneous measurement of a value. - -``Counter`` - A gauge for an ``AtomicLong`` instance. Typically this is consumed by monitoring the change since the last call to - see if there is a large increase compared to the norm. - -``Histogram`` - Measures the statistical distribution of values in a stream of data. - - In addition to minimum, maximum, mean, etc., it also measures median, 75th, 90th, 95th, 98th, 99th, and 99.9th - percentiles. - -``Timer`` - Measures both the rate that a particular piece of code is called and the histogram of its duration. - -``Latency`` - Special type that tracks latency (in microseconds) with a ``Timer`` plus a ``Counter`` that tracks the total latency - accrued since starting. The former is useful if you track the change in total latency since the last check. Each - metric name of this type will have 'Latency' and 'TotalLatency' appended to it. - -``Meter`` - A meter metric which measures mean throughput and one-, five-, and fifteen-minute exponentially-weighted moving - average throughputs. - -.. _table-metrics: - -Table Metrics -^^^^^^^^^^^^^ - -Each table in Cassandra has metrics responsible for tracking its state and performance. - -The metric names are all appended with the specific ``Keyspace`` and ``Table`` name. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.Table...
`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=Table keyspace= scope=
name=`` - -.. NOTE:: - There is a special table called '``all``' without a keyspace. This represents the aggregation of metrics across - **all** tables and keyspaces on the node. - - -======================================= ============== =========== -Name Type Description -======================================= ============== =========== -MemtableOnHeapSize Gauge Total amount of data stored in the memtable that resides **on**-heap, including column related overhead and partitions overwritten. -MemtableOffHeapSize Gauge Total amount of data stored in the memtable that resides **off**-heap, including column related overhead and partitions overwritten. -MemtableLiveDataSize Gauge Total amount of live data stored in the memtable, excluding any data structure overhead. -AllMemtablesOnHeapSize Gauge Total amount of data stored in the memtables (2i and pending flush memtables included) that resides **on**-heap. -AllMemtablesOffHeapSize Gauge Total amount of data stored in the memtables (2i and pending flush memtables included) that resides **off**-heap. -AllMemtablesLiveDataSize Gauge Total amount of live data stored in the memtables (2i and pending flush memtables included) that resides off-heap, excluding any data structure overhead. -MemtableColumnsCount Gauge Total number of columns present in the memtable. -MemtableSwitchCount Counter Number of times flush has resulted in the memtable being switched out. -CompressionRatio Gauge Current compression ratio for all SSTables. -EstimatedPartitionSizeHistogram Gauge Histogram of estimated partition size (in bytes). -EstimatedPartitionCount Gauge Approximate number of keys in table. -EstimatedColumnCountHistogram Gauge Histogram of estimated number of columns. -SSTablesPerReadHistogram Histogram Histogram of the number of sstable data files accessed per single partition read. SSTables skipped due to Bloom Filters, min-max key or partition index lookup are not taken into acoount. -ReadLatency Latency Local read latency for this table. -RangeLatency Latency Local range scan latency for this table. -WriteLatency Latency Local write latency for this table. -CoordinatorReadLatency Timer Coordinator read latency for this table. -CoordinatorWriteLatency Timer Coordinator write latency for this table. -CoordinatorScanLatency Timer Coordinator range scan latency for this table. -PendingFlushes Counter Estimated number of flush tasks pending for this table. -BytesFlushed Counter Total number of bytes flushed since server [re]start. -CompactionBytesWritten Counter Total number of bytes written by compaction since server [re]start. -PendingCompactions Gauge Estimate of number of pending compactions for this table. -LiveSSTableCount Gauge Number of SSTables on disk for this table. -LiveDiskSpaceUsed Counter Disk space used by SSTables belonging to this table (in bytes). -TotalDiskSpaceUsed Counter Total disk space used by SSTables belonging to this table, including obsolete ones waiting to be GC'd. -MinPartitionSize Gauge Size of the smallest compacted partition (in bytes). -MaxPartitionSize Gauge Size of the largest compacted partition (in bytes). -MeanPartitionSize Gauge Size of the average compacted partition (in bytes). -BloomFilterFalsePositives Gauge Number of false positives on table's bloom filter. -BloomFilterFalseRatio Gauge False positive ratio of table's bloom filter. -BloomFilterDiskSpaceUsed Gauge Disk space used by bloom filter (in bytes). -BloomFilterOffHeapMemoryUsed Gauge Off-heap memory used by bloom filter. -IndexSummaryOffHeapMemoryUsed Gauge Off-heap memory used by index summary. -CompressionMetadataOffHeapMemoryUsed Gauge Off-heap memory used by compression meta data. -KeyCacheHitRate Gauge Key cache hit rate for this table. -TombstoneScannedHistogram Histogram Histogram of tombstones scanned in queries on this table. -LiveScannedHistogram Histogram Histogram of live cells scanned in queries on this table. -ColUpdateTimeDeltaHistogram Histogram Histogram of column update time delta on this table. -ViewLockAcquireTime Timer Time taken acquiring a partition lock for materialized view updates on this table. -ViewReadTime Timer Time taken during the local read of a materialized view update. -TrueSnapshotsSize Gauge Disk space used by snapshots of this table including all SSTable components. -RowCacheHitOutOfRange Counter Number of table row cache hits that do not satisfy the query filter, thus went to disk. -RowCacheHit Counter Number of table row cache hits. -RowCacheMiss Counter Number of table row cache misses. -CasPrepare Latency Latency of paxos prepare round. -CasPropose Latency Latency of paxos propose round. -CasCommit Latency Latency of paxos commit round. -PercentRepaired Gauge Percent of table data that is repaired on disk. -BytesRepaired Gauge Size of table data repaired on disk -BytesUnrepaired Gauge Size of table data unrepaired on disk -BytesPendingRepair Gauge Size of table data isolated for an ongoing incremental repair -SpeculativeRetries Counter Number of times speculative retries were sent for this table. -SpeculativeFailedRetries Counter Number of speculative retries that failed to prevent a timeout -SpeculativeInsufficientReplicas Counter Number of speculative retries that couldn't be attempted due to lack of replicas -SpeculativeSampleLatencyNanos Gauge Number of nanoseconds to wait before speculation is attempted. Value may be statically configured or updated periodically based on coordinator latency. -WaitingOnFreeMemtableSpace Histogram Histogram of time spent waiting for free memtable space, either on- or off-heap. -DroppedMutations Counter Number of dropped mutations on this table. -AnticompactionTime Timer Time spent anticompacting before a consistent repair. -ValidationTime Timer Time spent doing validation compaction during repair. -SyncTime Timer Time spent doing streaming during repair. -BytesValidated Histogram Histogram over the amount of bytes read during validation. -PartitionsValidated Histogram Histogram over the number of partitions read during validation. -BytesAnticompacted Counter How many bytes we anticompacted. -BytesMutatedAnticompaction Counter How many bytes we avoided anticompacting because the sstable was fully contained in the repaired range. -MutatedAnticompactionGauge Gauge Ratio of bytes mutated vs total bytes repaired. -======================================= ============== =========== - -Keyspace Metrics -^^^^^^^^^^^^^^^^ -Each keyspace in Cassandra has metrics responsible for tracking its state and performance. - -Most of these metrics are the same as the ``Table Metrics`` above, only they are aggregated at the Keyspace level. The keyspace specific metrics are specified in the table below. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.keyspace..`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=Keyspace scope= name=`` - - -======================================= ============== =========== -Name Type Description -======================================= ============== =========== -WriteFailedIdeaCL Counter Number of writes that failed to achieve the configured ideal consistency level or 0 if none is configured -IdealCLWriteLatency Latency Coordinator latency of writes at the configured ideal consistency level. No values are recorded if ideal consistency level is not configured -RepairTime Timer Total time spent as repair coordinator. -RepairPrepareTime Timer Total time spent preparing for repair. -======================================= ============== =========== - -ThreadPool Metrics -^^^^^^^^^^^^^^^^^^ - -Cassandra splits work of a particular type into its own thread pool. This provides back-pressure and asynchrony for -requests on a node. It's important to monitor the state of these thread pools since they can tell you how saturated a -node is. - -The metric names are all appended with the specific ``ThreadPool`` name. The thread pools are also categorized under a -specific type. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.ThreadPools...`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=ThreadPools path= scope= name=`` - -===================== ============== =========== -Name Type Description -===================== ============== =========== -ActiveTasks Gauge Number of tasks being actively worked on by this pool. -PendingTasks Gauge Number of queued tasks queued up on this pool. -CompletedTasks Counter Number of tasks completed. -TotalBlockedTasks Counter Number of tasks that were blocked due to queue saturation. -CurrentlyBlockedTask Counter Number of tasks that are currently blocked due to queue saturation but on retry will become unblocked. -MaxPoolSize Gauge The maximum number of threads in this pool. -MaxTasksQueued Gauge The maximum number of tasks queued before a task get blocked. -===================== ============== =========== - -The following thread pools can be monitored. - -============================ ============== =========== -Name Type Description -============================ ============== =========== -Native-Transport-Requests transport Handles client CQL requests -CounterMutationStage request Responsible for counter writes -ViewMutationStage request Responsible for materialized view writes -MutationStage request Responsible for all other writes -ReadRepairStage request ReadRepair happens on this thread pool -ReadStage request Local reads run on this thread pool -RequestResponseStage request Coordinator requests to the cluster run on this thread pool -AntiEntropyStage internal Builds merkle tree for repairs -CacheCleanupExecutor internal Cache maintenance performed on this thread pool -CompactionExecutor internal Compactions are run on these threads -GossipStage internal Handles gossip requests -HintsDispatcher internal Performs hinted handoff -InternalResponseStage internal Responsible for intra-cluster callbacks -MemtableFlushWriter internal Writes memtables to disk -MemtablePostFlush internal Cleans up commit log after memtable is written to disk -MemtableReclaimMemory internal Memtable recycling -MigrationStage internal Runs schema migrations -MiscStage internal Misceleneous tasks run here -PendingRangeCalculator internal Calculates token range -PerDiskMemtableFlushWriter_0 internal Responsible for writing a spec (there is one of these per disk 0-N) -Sampler internal Responsible for re-sampling the index summaries of SStables -SecondaryIndexManagement internal Performs updates to secondary indexes -ValidationExecutor internal Performs validation compaction or scrubbing -ViewBuildExecutor internal Performs materialized views initial build -============================ ============== =========== - -.. |nbsp| unicode:: 0xA0 .. nonbreaking space - -Client Request Metrics -^^^^^^^^^^^^^^^^^^^^^^ - -Client requests have their own set of metrics that encapsulate the work happening at coordinator level. - -Different types of client requests are broken down by ``RequestType``. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.ClientRequest..`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=ClientRequest scope= name=`` - - -:RequestType: CASRead -:Description: Metrics related to transactional read requests. -:Metrics: - ===================== ============== ============================================================= - Name Type Description - ===================== ============== ============================================================= - Timeouts Counter Number of timeouts encountered. - Failures Counter Number of transaction failures encountered. - |nbsp| Latency Transaction read latency. - Unavailables Counter Number of unavailable exceptions encountered. - UnfinishedCommit Counter Number of transactions that were committed on read. - ConditionNotMet Counter Number of transaction preconditions did not match current values. - ContentionHistogram Histogram How many contended reads were encountered - ===================== ============== ============================================================= - -:RequestType: CASWrite -:Description: Metrics related to transactional write requests. -:Metrics: - ===================== ============== ============================================================= - Name Type Description - ===================== ============== ============================================================= - Timeouts Counter Number of timeouts encountered. - Failures Counter Number of transaction failures encountered. - |nbsp| Latency Transaction write latency. - UnfinishedCommit Counter Number of transactions that were committed on write. - ConditionNotMet Counter Number of transaction preconditions did not match current values. - ContentionHistogram Histogram How many contended writes were encountered - MutationSizeHistogram Histogram Total size in bytes of the requests mutations. - ===================== ============== ============================================================= - - -:RequestType: Read -:Description: Metrics related to standard read requests. -:Metrics: - ===================== ============== ============================================================= - Name Type Description - ===================== ============== ============================================================= - Timeouts Counter Number of timeouts encountered. - Failures Counter Number of read failures encountered. - |nbsp| Latency Read latency. - Unavailables Counter Number of unavailable exceptions encountered. - ===================== ============== ============================================================= - -:RequestType: RangeSlice -:Description: Metrics related to token range read requests. -:Metrics: - ===================== ============== ============================================================= - Name Type Description - ===================== ============== ============================================================= - Timeouts Counter Number of timeouts encountered. - Failures Counter Number of range query failures encountered. - |nbsp| Latency Range query latency. - Unavailables Counter Number of unavailable exceptions encountered. - ===================== ============== ============================================================= - -:RequestType: Write -:Description: Metrics related to regular write requests. -:Metrics: - ===================== ============== ============================================================= - Name Type Description - ===================== ============== ============================================================= - Timeouts Counter Number of timeouts encountered. - Failures Counter Number of write failures encountered. - |nbsp| Latency Write latency. - Unavailables Counter Number of unavailable exceptions encountered. - MutationSizeHistogram Histogram Total size in bytes of the requests mutations. - ===================== ============== ============================================================= - - -:RequestType: ViewWrite -:Description: Metrics related to materialized view write wrtes. -:Metrics: - ===================== ============== ============================================================= - Timeouts Counter Number of timeouts encountered. - Failures Counter Number of transaction failures encountered. - Unavailables Counter Number of unavailable exceptions encountered. - ViewReplicasAttempted Counter Total number of attempted view replica writes. - ViewReplicasSuccess Counter Total number of succeded view replica writes. - ViewPendingMutations Gauge ViewReplicasAttempted - ViewReplicasSuccess. - ViewWriteLatency Timer Time between when mutation is applied to base table and when CL.ONE is achieved on view. - ===================== ============== ============================================================= - -Cache Metrics -^^^^^^^^^^^^^ - -Cassandra caches have metrics to track the effectivness of the caches. Though the ``Table Metrics`` might be more useful. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.Cache..`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=Cache scope= name=`` - -========================== ============== =========== -Name Type Description -========================== ============== =========== -Capacity Gauge Cache capacity in bytes. -Entries Gauge Total number of cache entries. -FifteenMinuteCacheHitRate Gauge 15m cache hit rate. -FiveMinuteCacheHitRate Gauge 5m cache hit rate. -OneMinuteCacheHitRate Gauge 1m cache hit rate. -HitRate Gauge All time cache hit rate. -Hits Meter Total number of cache hits. -Misses Meter Total number of cache misses. -MissLatency Timer Latency of misses. -Requests Gauge Total number of cache requests. -Size Gauge Total size of occupied cache, in bytes. -========================== ============== =========== - -The following caches are covered: - -============================ =========== -Name Description -============================ =========== -CounterCache Keeps hot counters in memory for performance. -ChunkCache In process uncompressed page cache. -KeyCache Cache for partition to sstable offsets. -RowCache Cache for rows kept in memory. -============================ =========== - -.. NOTE:: - Misses and MissLatency are only defined for the ChunkCache - -CQL Metrics -^^^^^^^^^^^ - -Metrics specific to CQL prepared statement caching. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.CQL.`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=CQL name=`` - -========================== ============== =========== -Name Type Description -========================== ============== =========== -PreparedStatementsCount Gauge Number of cached prepared statements. -PreparedStatementsEvicted Counter Number of prepared statements evicted from the prepared statement cache -PreparedStatementsExecuted Counter Number of prepared statements executed. -RegularStatementsExecuted Counter Number of **non** prepared statements executed. -PreparedStatementsRatio Gauge Percentage of statements that are prepared vs unprepared. -========================== ============== =========== - -.. _dropped-metrics: - -DroppedMessage Metrics -^^^^^^^^^^^^^^^^^^^^^^ - -Metrics specific to tracking dropped messages for different types of requests. -Dropped writes are stored and retried by ``Hinted Handoff`` - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.DroppedMessage..`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=DroppedMessage scope= name=`` - -========================== ============== =========== -Name Type Description -========================== ============== =========== -CrossNodeDroppedLatency Timer The dropped latency across nodes. -InternalDroppedLatency Timer The dropped latency within node. -Dropped Meter Number of dropped messages. -========================== ============== =========== - -The different types of messages tracked are: - -============================ =========== -Name Description -============================ =========== -BATCH_STORE Batchlog write -BATCH_REMOVE Batchlog cleanup (after succesfully applied) -COUNTER_MUTATION Counter writes -HINT Hint replay -MUTATION Regular writes -READ Regular reads -READ_REPAIR Read repair -PAGED_SLICE Paged read -RANGE_SLICE Token range read -REQUEST_RESPONSE RPC Callbacks -_TRACE Tracing writes -============================ =========== - -Streaming Metrics -^^^^^^^^^^^^^^^^^ - -Metrics reported during ``Streaming`` operations, such as repair, bootstrap, rebuild. - -These metrics are specific to a peer endpoint, with the source node being the node you are pulling the metrics from. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.Streaming..`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=Streaming scope= name=`` - -========================== ============== =========== -Name Type Description -========================== ============== =========== -IncomingBytes Counter Number of bytes streamed to this node from the peer. -OutgoingBytes Counter Number of bytes streamed to the peer endpoint from this node. -========================== ============== =========== - - -Compaction Metrics -^^^^^^^^^^^^^^^^^^ - -Metrics specific to ``Compaction`` work. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.Compaction.`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=Compaction name=`` - -========================== ======================================== =============================================== -Name Type Description -========================== ======================================== =============================================== -BytesCompacted Counter Total number of bytes compacted since server [re]start. -PendingTasks Gauge Estimated number of compactions remaining to perform. -CompletedTasks Gauge Number of completed compactions since server [re]start. -TotalCompactionsCompleted Meter Throughput of completed compactions since server [re]start. -PendingTasksByTableName Gauge>> Estimated number of compactions remaining to perform, grouped by keyspace and then table name. This info is also kept in ``Table Metrics``. -========================== ======================================== =============================================== - -CommitLog Metrics -^^^^^^^^^^^^^^^^^ - -Metrics specific to the ``CommitLog`` - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.CommitLog.`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=CommitLog name=`` - -========================== ============== =========== -Name Type Description -========================== ============== =========== -CompletedTasks Gauge Total number of commit log messages written since [re]start. -PendingTasks Gauge Number of commit log messages written but yet to be fsync'd. -TotalCommitLogSize Gauge Current size, in bytes, used by all the commit log segments. -WaitingOnSegmentAllocation Timer Time spent waiting for a CommitLogSegment to be allocated - under normal conditions this should be zero. -WaitingOnCommit Timer The time spent waiting on CL fsync; for Periodic this is only occurs when the sync is lagging its sync interval. -========================== ============== =========== - -Storage Metrics -^^^^^^^^^^^^^^^ - -Metrics specific to the storage engine. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.Storage.`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=Storage name=`` - -========================== ============== =========== -Name Type Description -========================== ============== =========== -Exceptions Counter Number of internal exceptions caught. Under normal exceptions this should be zero. -Load Counter Size, in bytes, of the on disk data size this node manages. -TotalHints Counter Number of hint messages written to this node since [re]start. Includes one entry for each host to be hinted per hint. -TotalHintsInProgress Counter Number of hints attemping to be sent currently. -========================== ============== =========== - -.. _handoff-metrics: - -HintedHandoff Metrics -^^^^^^^^^^^^^^^^^^^^^ - -Metrics specific to Hinted Handoff. There are also some metrics related to hints tracked in ``Storage Metrics`` - -These metrics include the peer endpoint **in the metric name** - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.HintedHandOffManager.`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=HintedHandOffManager name=`` - -=========================== ============== =========== -Name Type Description -=========================== ============== =========== -Hints_created- Counter Number of hints on disk for this peer. -Hints_not_stored- Counter Number of hints not stored for this peer, due to being down past the configured hint window. -=========================== ============== =========== - -.. _hintsservice-metrics: - -HintsService Metrics -^^^^^^^^^^^^^^^^^^^^^ - -Metrics specific to the Hints delivery service. There are also some metrics related to hints tracked in ``Storage Metrics`` - -These metrics include the peer endpoint **in the metric name** - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.HintsService.`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=HintsService name=`` - -=========================== ============== =========== -Name Type Description -=========================== ============== =========== -HintsSucceeded Meter A meter of the hints successfully delivered -HintsFailed Meter A meter of the hints that failed deliver -HintsTimedOut Meter A meter of the hints that timed out -Hint_delays Histogram Histogram of hint delivery delays (in milliseconds) -Hint_delays- Histogram Histogram of hint delivery delays (in milliseconds) per peer -=========================== ============== =========== - -SSTable Index Metrics -^^^^^^^^^^^^^^^^^^^^^ - -Metrics specific to the SSTable index metadata. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.Index..RowIndexEntry`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=Index scope=RowIndexEntry name=`` - -=========================== ============== =========== -Name Type Description -=========================== ============== =========== -IndexedEntrySize Histogram Histogram of the on-heap size, in bytes, of the index across all SSTables. -IndexInfoCount Histogram Histogram of the number of on-heap index entries managed across all SSTables. -IndexInfoGets Histogram Histogram of the number index seeks performed per SSTable. -=========================== ============== =========== - -BufferPool Metrics -^^^^^^^^^^^^^^^^^^ - -Metrics specific to the internal recycled buffer pool Cassandra manages. This pool is meant to keep allocations and GC -lower by recycling on and off heap buffers. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.BufferPool.`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=BufferPool name=`` - -=========================== ============== =========== -Name Type Description -=========================== ============== =========== -Size Gauge Size, in bytes, of the managed buffer pool -Misses Meter The rate of misses in the pool. The higher this is the more allocations incurred. -=========================== ============== =========== - - -Client Metrics -^^^^^^^^^^^^^^ - -Metrics specifc to client managment. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.Client.`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=Client name=`` - -============================== =============================== =========== -Name Type Description -============================== =============================== =========== -connectedNativeClients Gauge Number of clients connected to this nodes native protocol server -connections Gauge> List of all connections and their state information -connectedNativeClientsByUser Gauge Number of connnective native clients by username -============================== =============================== =========== - - -Batch Metrics -^^^^^^^^^^^^^ - -Metrics specifc to batch statements. - -Reported name format: - -**Metric Name** - ``org.apache.cassandra.metrics.Batch.`` - -**JMX MBean** - ``org.apache.cassandra.metrics:type=Batch name=`` - -=========================== ============== =========== -Name Type Description -=========================== ============== =========== -PartitionsPerCounterBatch Histogram Distribution of the number of partitions processed per counter batch -PartitionsPerLoggedBatch Histogram Distribution of the number of partitions processed per logged batch -PartitionsPerUnloggedBatch Histogram Distribution of the number of partitions processed per unlogged batch -=========================== ============== =========== - - -JVM Metrics -^^^^^^^^^^^ - -JVM metrics such as memory and garbage collection statistics can either be accessed by connecting to the JVM using JMX or can be exported using `Metric Reporters`_. - -BufferPool -++++++++++ - -**Metric Name** - ``jvm.buffers..`` - -**JMX MBean** - ``java.nio:type=BufferPool name=`` - -========================== ============== =========== -Name Type Description -========================== ============== =========== -Capacity Gauge Estimated total capacity of the buffers in this pool -Count Gauge Estimated number of buffers in the pool -Used Gauge Estimated memory that the Java virtual machine is using for this buffer pool -========================== ============== =========== - -FileDescriptorRatio -+++++++++++++++++++ - -**Metric Name** - ``jvm.fd.`` - -**JMX MBean** - ``java.lang:type=OperatingSystem name=`` - -========================== ============== =========== -Name Type Description -========================== ============== =========== -Usage Ratio Ratio of used to total file descriptors -========================== ============== =========== - -GarbageCollector -++++++++++++++++ - -**Metric Name** - ``jvm.gc..`` - -**JMX MBean** - ``java.lang:type=GarbageCollector name=`` - -========================== ============== =========== -Name Type Description -========================== ============== =========== -Count Gauge Total number of collections that have occurred -Time Gauge Approximate accumulated collection elapsed time in milliseconds -========================== ============== =========== - -Memory -++++++ - -**Metric Name** - ``jvm.memory..`` - -**JMX MBean** - ``java.lang:type=Memory`` - -========================== ============== =========== -Committed Gauge Amount of memory in bytes that is committed for the JVM to use -Init Gauge Amount of memory in bytes that the JVM initially requests from the OS -Max Gauge Maximum amount of memory in bytes that can be used for memory management -Usage Ratio Ratio of used to maximum memory -Used Gauge Amount of used memory in bytes -========================== ============== =========== - -MemoryPool -++++++++++ - -**Metric Name** - ``jvm.memory.pools..`` - -**JMX MBean** - ``java.lang:type=MemoryPool name=`` - -========================== ============== =========== -Committed Gauge Amount of memory in bytes that is committed for the JVM to use -Init Gauge Amount of memory in bytes that the JVM initially requests from the OS -Max Gauge Maximum amount of memory in bytes that can be used for memory management -Usage Ratio Ratio of used to maximum memory -Used Gauge Amount of used memory in bytes -========================== ============== =========== - -JMX -^^^ - -Any JMX based client can access metrics from cassandra. - -If you wish to access JMX metrics over http it's possible to download `Mx4jTool `__ and -place ``mx4j-tools.jar`` into the classpath. On startup you will see in the log:: - - HttpAdaptor version 3.0.2 started on port 8081 - -To choose a different port (8081 is the default) or a different listen address (0.0.0.0 is not the default) edit -``conf/cassandra-env.sh`` and uncomment:: - - #MX4J_ADDRESS="-Dmx4jaddress=0.0.0.0" - - #MX4J_PORT="-Dmx4jport=8081" - - -Metric Reporters -^^^^^^^^^^^^^^^^ - -As mentioned at the top of this section on monitoring the Cassandra metrics can be exported to a number of monitoring -system a number of `built in `__ and `third party -`__ reporter plugins. - -The configuration of these plugins is managed by the `metrics reporter config project -`__. There is a sample configuration file located at -``conf/metrics-reporter-config-sample.yaml``. - -Once configured, you simply start cassandra with the flag -``-Dcassandra.metricsReporterConfigFile=metrics-reporter-config.yaml``. The specified .yaml file plus any 3rd party -reporter jars must all be in Cassandra's classpath. diff --git a/doc/source/operating/read_repair.rst b/doc/source/operating/read_repair.rst deleted file mode 100644 index d280162b86be..000000000000 --- a/doc/source/operating/read_repair.rst +++ /dev/null @@ -1,169 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -.. _read-repair: - -Read repair -============== -Read Repair is the process of repairing data replicas during a read request. If all replicas involved in a read request at the given read consistency level are consistent the data is returned to the client and no read repair is needed. But if the replicas involved in a read request at the given consistency level are not consistent a read repair is performed to make replicas involved in the read request consistent. The most up-to-date data is returned to the client. The read repair runs in the foreground and is blocking in that a response is not returned to the client until the read repair has completed and up-to-date data is constructed. - -Expectation of Monotonic Quorum Reads -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Cassandra uses a blocking read repair to ensure the expectation of "monotonic quorum reads" i.e. that in 2 successive quorum reads, it’s guaranteed the 2nd one won't get something older than the 1st one, and this even if a failed quorum write made a write of the most up to date value only to a minority of replicas. "Quorum" means majority of nodes among replicas. - -Table level configuration of monotonic reads -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Cassandra 4.0 adds support for table level configuration of monotonic reads (`CASSANDRA-14635 -`_). The ``read_repair`` table option has been added to table schema, with the options ``blocking`` (default), and ``none``. - -The ``read_repair`` option configures the read repair behavior to allow tuning for various performance and consistency behaviors. Two consistency properties are affected by read repair behavior. - -- Monotonic Quorum Reads: Provided by ``BLOCKING``. Monotonic quorum reads prevents reads from appearing to go back in time in some circumstances. When monotonic quorum reads are not provided and a write fails to reach a quorum of replicas, it may be visible in one read, and then disappear in a subsequent read. -- Write Atomicity: Provided by ``NONE``. Write atomicity prevents reads from returning partially applied writes. Cassandra attempts to provide partition level write atomicity, but since only the data covered by a ``SELECT`` statement is repaired by a read repair, read repair can break write atomicity when data is read at a more granular level than it is written. For example read repair can break write atomicity if you write multiple rows to a clustered partition in a batch, but then select a single row by specifying the clustering column in a ``SELECT`` statement. - -The available read repair settings are: - -Blocking -********* -The default setting. When ``read_repair`` is set to ``BLOCKING``, and a read repair is started, the read will block on writes sent to other replicas until the CL is reached by the writes. Provides monotonic quorum reads, but not partition level write atomicity. - -None -********* -When ``read_repair`` is set to ``NONE``, the coordinator will reconcile any differences between replicas, but will not attempt to repair them. Provides partition level write atomicity, but not monotonic quorum reads. - -An example of using the ``NONE`` setting for the ``read_repair`` option is as follows: - -:: - - CREATE TABLE ks.tbl (k INT, c INT, v INT, PRIMARY KEY (k,c)) with read_repair='NONE'"); - -Read Repair Example -^^^^^^^^^^^^^^^^^^^^^^^^^^ -To illustrate read repair with an example, consider that a client sends a read request with read consistency level ``TWO`` to a 5-node cluster as illustrated in Figure 1. Read consistency level determines how many replica nodes must return a response before the read request is considered successful. - - -.. figure:: Figure_1_read_repair.jpg - - -Figure 1. Client sends read request to a 5-node Cluster - -Three nodes host replicas for the requested data as illustrated in Figure 2. With a read consistency level of ``TWO`` two replica nodes must return a response for the read request to be considered successful. If the node the client sends request to hosts a replica of the data requested only one other replica node needs to be sent a read request to. But if the receiving node does not host a replica for the requested data the node becomes a coordinator node and forwards the read request to a node that hosts a replica. A direct read request is forwarded to the fastest node (as determined by dynamic snitch) as shown in Figure 2. A direct read request is a full read and returns the requested data. - -.. figure:: Figure_2_read_repair.jpg - -Figure 2. Direct Read Request sent to Fastest Replica Node - -Next, the coordinator node sends the requisite number of additional requests to satisfy the consistency level, which is ``TWO``. The coordinator node needs to send one more read request for a total of two. All read requests additional to the first direct read request are digest read requests. A digest read request is not a full read and only returns the hash value of the data. Only a hash value is returned to reduce the network data traffic. In the example being discussed the coordinator node sends one digest read request to a node hosting a replica as illustrated in Figure 3. - -.. figure:: Figure_3_read_repair.jpg - -Figure 3. Coordinator Sends a Digest Read Request - -The coordinator node has received a full copy of data from one node and a hash value for the data from another node. To compare the data returned a hash value is calculated for the full copy of data. The two hash values are compared. If the hash values are the same no read repair is needed and the full copy of requested data is returned to the client. The coordinator node only performed a total of two replica read request because the read consistency level is ``TWO`` in the example. If the consistency level were higher such as ``THREE``, three replica nodes would need to respond to a read request and only if all digest or hash values were to match with the hash value of the full copy of data would the read request be considered successful and the data returned to the client. - -But, if the hash value/s from the digest read request/s are not the same as the hash value of the data from the full read request of the first replica node it implies that an inconsistency in the replicas exists. To fix the inconsistency a read repair is performed. - -For example, consider that that digest request returns a hash value that is not the same as the hash value of the data from the direct full read request. We would need to make the replicas consistent for which the coordinator node sends a direct (full) read request to the replica node that it sent a digest read request to earlier as illustrated in Figure 4. - -.. figure:: Figure_4_read_repair.jpg - -Figure 4. Coordinator sends Direct Read Request to Replica Node it had sent Digest Read Request to - -After receiving the data from the second replica node the coordinator has data from two of the replica nodes. It only needs two replicas as the read consistency level is ``TWO`` in the example. Data from the two replicas is compared and based on the timestamps the most recent replica is selected. Data may need to be merged to construct an up-to-date copy of data if one replica has data for only some of the columns. In the example, if the data from the first direct read request is found to be outdated and the data from the second full read request to be the latest read, repair needs to be performed on Replica 2. If a new up-to-date data is constructed by merging the two replicas a read repair would be needed on both the replicas involved. For example, a read repair is performed on Replica 2 as illustrated in Figure 5. - -.. figure:: Figure_5_read_repair.jpg - -Figure 5. Coordinator performs Read Repair - - -The most up-to-date data is returned to the client as illustrated in Figure 6. From the three replicas Replica 1 is not even read and thus not repaired. Replica 2 is repaired. Replica 3 is the most up-to-date and returned to client. - -.. figure:: Figure_6_read_repair.jpg - -Figure 6. Most up-to-date Data returned to Client - -Read Consistency Level and Read Repair -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The read consistency is most significant in determining if a read repair needs to be performed. As discussed in Table 1 a read repair is not needed for all of the consistency levels. - -Table 1. Read Repair based on Read Consistency Level - -+----------------------+-------------------------------------------+ -|Read Consistency Level| Description | -+----------------------+-------------------------------------------+ -| ONE |Read repair is not performed as the | -| |data from the first direct read request | -| |satisfies the consistency level ONE. | -| |No digest read requests are involved | -| |for finding mismatches in data. | -+----------------------+-------------------------------------------+ -| TWO |Read repair is performed if inconsistencies| -| |in data are found as determined by the | -| |direct and digest read requests. | -+----------------------+-------------------------------------------+ -| THREE |Read repair is performed if inconsistencies| -| |in data are found as determined by the | -| |direct and digest read requests. | -+----------------------+-------------------------------------------+ -|LOCAL_ONE |Read repair is not performed as the data | -| |from the direct read request from the | -| |closest replica satisfies the consistency | -| |level LOCAL_ONE.No digest read requests are| -| |involved for finding mismatches in data. | -+----------------------+-------------------------------------------+ -|LOCAL_QUORUM |Read repair is performed if inconsistencies| -| |in data are found as determined by the | -| |direct and digest read requests. | -+----------------------+-------------------------------------------+ -|QUORUM |Read repair is performed if inconsistencies| -| |in data are found as determined by the | -| |direct and digest read requests. | -+----------------------+-------------------------------------------+ - -If read repair is performed it is made only on the replicas that are not up-to-date and that are involved in the read request. The number of replicas involved in a read request would be based on the read consistency level; in the example it is two. - -Improved Read Repair Blocking Behavior in Cassandra 4.0 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Cassandra 4.0 makes two improvements to read repair blocking behavior (`CASSANDRA-10726 -`_). - -1. Speculative Retry of Full Data Read Requests. Cassandra 4.0 makes use of speculative retry in sending read requests (full, not digest) to replicas if a full data response is not received, whether in the initial full read request or a full data read request during read repair. With speculative retry if it looks like a response may not be received from the initial set of replicas Cassandra sent messages to, to satisfy the consistency level, it speculatively sends additional read request to un-contacted replica/s. Cassandra 4.0 will also speculatively send a repair mutation to a minority of nodes not involved in the read repair data read / write cycle with the combined contents of all un-acknowledged mutations if it looks like one may not respond. Cassandra accepts acks from them in lieu of acks from the initial mutations sent out, so long as it receives the same number of acks as repair mutations transmitted. - -2. Only blocks on Full Data Responses to satisfy the Consistency Level. Cassandra 4.0 only blocks for what is needed for resolving the digest mismatch and wait for enough full data responses to meet the consistency level, no matter whether it’s speculative retry or read repair chance. As an example, if it looks like Cassandra might not receive full data requests from everyone in time, it sends additional requests to additional replicas not contacted in the initial full data read. If the collection of nodes that end up responding in time end up agreeing on the data, the response from the disagreeing replica that started the read repair is not considered, and won't be included in the response to the client, preserving the expectation of monotonic quorum reads. - -Diagnostic Events for Read Repairs -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Cassandra 4.0 adds diagnostic events for read repair (`CASSANDRA-14668 -`_) that can be used for exposing information such as: - -- Contacted endpoints -- Digest responses by endpoint -- Affected partition keys -- Speculated reads / writes -- Update oversized - -Background Read Repair -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Background read repair, which was configured using ``read_repair_chance`` and ``dclocal_read_repair_chance`` settings in ``cassandra.yaml`` is removed Cassandra 4.0 (`CASSANDRA-13910 -`_). - -Read repair is not an alternative for other kind of repairs such as full repairs or replacing a node that keeps failing. The data returned even after a read repair has been performed may not be the most up-to-date data if consistency level is other than one requiring response from all replicas. diff --git a/doc/source/operating/repair.rst b/doc/source/operating/repair.rst deleted file mode 100644 index 94fdc110950e..000000000000 --- a/doc/source/operating/repair.rst +++ /dev/null @@ -1,208 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -.. _repair: - -Repair ------- - -Cassandra is designed to remain available if one of it's nodes is down or unreachable. However, when a node is down or -unreachable, it needs to eventually discover the writes it missed. Hints attempt to inform a node of missed writes, but -are a best effort, and aren't guaranteed to inform a node of 100% of the writes it missed. These inconsistencies can -eventually result in data loss as nodes are replaced or tombstones expire. - -These inconsistencies are fixed with the repair process. Repair synchronizes the data between nodes by comparing their -respective datasets for their common token ranges, and streaming the differences for any out of sync sections between -the nodes. It compares the data with merkle trees, which are a hierarchy of hashes. - -Incremental and Full Repairs -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -There are 2 types of repairs: full repairs, and incremental repairs. Full repairs operate over all of the data in the -token range being repaired. Incremental repairs only repair data that's been written since the previous incremental repair. - -Incremental repairs are the default repair type, and if run regularly, can significantly reduce the time and io cost of -performing a repair. However, it's important to understand that once an incremental repair marks data as repaired, it won't -try to repair it again. This is fine for syncing up missed writes, but it doesn't protect against things like disk corruption, -data loss by operator error, or bugs in Cassandra. For this reason, full repairs should still be run occasionally. - -Usage and Best Practices -^^^^^^^^^^^^^^^^^^^^^^^^ - -Since repair can result in a lot of disk and network io, it's not run automatically by Cassandra. It is run by the operator -via nodetool. - -Incremental repair is the default and is run with the following command: - -:: - - nodetool repair - -A full repair can be run with the following command: - -:: - - nodetool repair --full - -Additionally, repair can be run on a single keyspace: - -:: - - nodetool repair [options] - -Or even on specific tables: - -:: - - nodetool repair [options] - - -The repair command only repairs token ranges on the node being repaired, it doesn't repair the whole cluster. By default, repair -will operate on all token ranges replicated by the node you're running repair on, which will cause duplicate work if you run it -on every node. The ``-pr`` flag will only repair the "primary" ranges on a node, so you can repair your entire cluster by running -``nodetool repair -pr`` on each node in a single datacenter. - -The specific frequency of repair that's right for your cluster, of course, depends on several factors. However, if you're -just starting out and looking for somewhere to start, running an incremental repair every 1-3 days, and a full repair every -1-3 weeks is probably reasonable. If you don't want to run incremental repairs, a full repair every 5 days is a good place -to start. - -At a minimum, repair should be run often enough that the gc grace period never expires on unrepaired data. Otherwise, deleted -data could reappear. With a default gc grace period of 10 days, repairing every node in your cluster at least once every 7 days -will prevent this, while providing enough slack to allow for delays. - -Other Options -^^^^^^^^^^^^^ - -``-pr, --partitioner-range`` - Restricts repair to the 'primary' token ranges of the node being repaired. A primary range is just a token range for - which a node is the first replica in the ring. - -``-prv, --preview`` - Estimates the amount of streaming that would occur for the given repair command. This builds the merkle trees, and prints - the expected streaming activity, but does not actually do any streaming. By default, incremental repairs are estimated, - add the ``--full`` flag to estimate a full repair. - -``-vd, --validate`` - Verifies that the repaired data is the same across all nodes. Similiar to ``--preview``, this builds and compares merkle - trees of repaired data, but doesn't do any streaming. This is useful for troubleshooting. If this shows that the repaired - data is out of sync, a full repair should be run. - -.. seealso:: - :ref:`nodetool repair docs ` - -Full Repair Example -^^^^^^^^^^^^^^^^^^^^ -Full repair is typically needed to redistribute data after increasing the replication factor of a keyspace or after adding a node to the cluster. Full repair involves streaming SSTables. To demonstrate full repair start with a three node cluster. - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool status - Datacenter: us-east-1 - ===================== - Status=Up/Down - |/ State=Normal/Leaving/Joining/Moving - -- Address Load Tokens Owns Host ID Rack - UN 10.0.1.115 547 KiB 256 ? b64cb32a-b32a-46b4-9eeb-e123fa8fc287 us-east-1b - UN 10.0.3.206 617.91 KiB 256 ? 74863177-684b-45f4-99f7-d1006625dc9e us-east-1d - UN 10.0.2.238 670.26 KiB 256 ? 4dcdadd2-41f9-4f34-9892-1f20868b27c7 us-east-1c - -Create a keyspace with replication factor 3: - -:: - - cqlsh> DROP KEYSPACE cqlkeyspace; - cqlsh> CREATE KEYSPACE CQLKeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; - -Add a table to the keyspace: - -:: - - cqlsh> use cqlkeyspace; - cqlsh:cqlkeyspace> CREATE TABLE t ( - ... id int, - ... k int, - ... v text, - ... PRIMARY KEY (id) - ... ); - -Add table data: - -:: - - cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (1, 1, 'val1'); - cqlsh:cqlkeyspace> INSERT INTO t (id, k, v) VALUES (2, 2, 'val2'); - -A query lists the data added: - -:: - - cqlsh:cqlkeyspace> SELECT * FROM t; - - id | k | v - ----+---+------ - 1 | 1 | val1 - 0 | 0 | val0 - 2 | 2 | val2 - (3 rows) - -Make the following changes to a three node cluster: - -1. Increase the replication factor from 3 to 4. -2. Add a 4th node to the cluster - -When the replication factor is increased the following message gets output indicating that a full repair is needed as per (`CASSANDRA-13079 -`_): - -:: - - cqlsh:cqlkeyspace> ALTER KEYSPACE CQLKeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4}; - Warnings : - When increasing replication factor you need to run a full (-full) repair to distribute the - data. - -Perform a full repair on the keyspace ``cqlkeyspace`` table ``t`` with following command: - -:: - - nodetool repair -full cqlkeyspace t - -Full repair completes in about a second as indicated by the output: - -:: - -[ec2-user@ip-10-0-2-238 ~]$ nodetool repair -full cqlkeyspace t -[2019-08-17 03:06:21,445] Starting repair command #1 (fd576da0-c09b-11e9-b00c-1520e8c38f00), repairing keyspace cqlkeyspace with repair options (parallelism: parallel, primary range: false, incremental: false, job threads: 1, ColumnFamilies: [t], dataCenters: [], hosts: [], previewKind: NONE, # of ranges: 1024, pull repair: false, force repair: false, optimise streams: false) -[2019-08-17 03:06:23,059] Repair session fd8e5c20-c09b-11e9-b00c-1520e8c38f00 for range [(-8792657144775336505,-8786320730900698730], (-5454146041421260303,-5439402053041523135], (4288357893651763201,4324309707046452322], ... , (4350676211955643098,4351706629422088296]] finished (progress: 0%) -[2019-08-17 03:06:23,077] Repair completed successfully -[2019-08-17 03:06:23,077] Repair command #1 finished in 1 second -[ec2-user@ip-10-0-2-238 ~]$ - -The ``nodetool tpstats`` command should list a repair having been completed as ``Repair-Task`` > ``Completed`` column value of 1: - -:: - - [ec2-user@ip-10-0-2-238 ~]$ nodetool tpstats - Pool Name Active Pending Completed Blocked All time blocked - ReadStage 0 0 99 0 0 - … - Repair-Task 0 0 1 0 0 - RequestResponseStage 0 0 2078 0 0 diff --git a/doc/source/operating/security.rst b/doc/source/operating/security.rst deleted file mode 100644 index 12f2d24c2588..000000000000 --- a/doc/source/operating/security.rst +++ /dev/null @@ -1,441 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Security --------- -There are three main components to the security features provided by Cassandra: - -- TLS/SSL encryption for client and inter-node communication -- Client authentication -- Authorization - -By default, these features are disabled as Cassandra is configured to easily find and be found by other members of a -cluster. In other words, an out-of-the-box Cassandra installation presents a large attack surface for a bad actor. -Enabling authentication for clients using the binary protocol is not sufficient to protect a cluster. Malicious users -able to access internode communication and JMX ports can still: - -- Craft internode messages to insert users into authentication schema -- Craft internode messages to truncate or drop schema -- Use tools such as ``sstableloader`` to overwrite ``system_auth`` tables -- Attach to the cluster directly to capture write traffic - -Correct configuration of all three security components should negate theses vectors. Therefore, understanding Cassandra's -security features is crucial to configuring your cluster to meet your security needs. - - -TLS/SSL Encryption -^^^^^^^^^^^^^^^^^^ -Cassandra provides secure communication between a client machine and a database cluster and between nodes within a -cluster. Enabling encryption ensures that data in flight is not compromised and is transferred securely. The options for -client-to-node and node-to-node encryption are managed separately and may be configured independently. - -In both cases, the JVM defaults for supported protocols and cipher suites are used when encryption is enabled. These can -be overidden using the settings in ``cassandra.yaml``, but this is not recommended unless there are policies in place -which dictate certain settings or a need to disable vulnerable ciphers or protocols in cases where the JVM cannot be -updated. - -FIPS compliant settings can be configured at the JVM level and should not involve changing encryption settings in -cassandra.yaml. See `the java document on FIPS `__ -for more details. - -For information on generating the keystore and truststore files used in SSL communications, see the -`java documentation on creating keystores `__ - -SSL Certificate Hot Reloading -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Beginning with Cassandra 4, Cassandra supports hot reloading of SSL Certificates. If SSL/TLS support is enabled in Cassandra, -the node periodically polls the Trust and Key Stores specified in cassandra.yaml. When the files are updated, Cassandra will -reload them and use them for subsequent connections. Please note that the Trust & Key Store passwords are part of the yaml so -the updated files should also use the same passwords. The default polling interval is 10 minutes. - -Certificate Hot reloading may also be triggered using the ``nodetool reloadssl`` command. Use this if you want to Cassandra to -immediately notice the changed certificates. - -Inter-node Encryption -~~~~~~~~~~~~~~~~~~~~~ - -The settings for managing inter-node encryption are found in ``cassandra.yaml`` in the ``server_encryption_options`` -section. To enable inter-node encryption, change the ``internode_encryption`` setting from its default value of ``none`` -to one value from: ``rack``, ``dc`` or ``all``. - -Client to Node Encryption -~~~~~~~~~~~~~~~~~~~~~~~~~ - -The settings for managing client to node encryption are found in ``cassandra.yaml`` in the ``client_encryption_options`` -section. There are two primary toggles here for enabling encryption, ``enabled`` and ``optional``. - -- If neither is set to ``true``, client connections are entirely unencrypted. -- If ``enabled`` is set to ``true`` and ``optional`` is set to ``false``, all client connections must be secured. -- If both options are set to ``true``, both encrypted and unencrypted connections are supported using the same port. - Client connections using encryption with this configuration will be automatically detected and handled by the server. - -As an alternative to the ``optional`` setting, separate ports can also be configured for secure and unsecure connections -where operational requirements demand it. To do so, set ``optional`` to false and use the ``native_transport_port_ssl`` -setting in ``cassandra.yaml`` to specify the port to be used for secure client communication. - -.. _operation-roles: - -Roles -^^^^^ - -Cassandra uses database roles, which may represent either a single user or a group of users, in both authentication and -permissions management. Role management is an extension point in Cassandra and may be configured using the -``role_manager`` setting in ``cassandra.yaml``. The default setting uses ``CassandraRoleManager``, an implementation -which stores role information in the tables of the ``system_auth`` keyspace. - -See also the :ref:`CQL documentation on roles `. - -Authentication -^^^^^^^^^^^^^^ - -Authentication is pluggable in Cassandra and is configured using the ``authenticator`` setting in ``cassandra.yaml``. -Cassandra ships with two options included in the default distribution. - -By default, Cassandra is configured with ``AllowAllAuthenticator`` which performs no authentication checks and therefore -requires no credentials. It is used to disable authentication completely. Note that authentication is a necessary -condition of Cassandra's permissions subsystem, so if authentication is disabled, effectively so are permissions. - -The default distribution also includes ``PasswordAuthenticator``, which stores encrypted credentials in a system table. -This can be used to enable simple username/password authentication. - -.. _password-authentication: - -Enabling Password Authentication -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Before enabling client authentication on the cluster, client applications should be pre-configured with their intended -credentials. When a connection is initiated, the server will only ask for credentials once authentication is -enabled, so setting up the client side config in advance is safe. In contrast, as soon as a server has authentication -enabled, any connection attempt without proper credentials will be rejected which may cause availability problems for -client applications. Once clients are setup and ready for authentication to be enabled, follow this procedure to enable -it on the cluster. - -Pick a single node in the cluster on which to perform the initial configuration. Ideally, no clients should connect -to this node during the setup process, so you may want to remove it from client config, block it at the network level -or possibly add a new temporary node to the cluster for this purpose. On that node, perform the following steps: - -1. Open a ``cqlsh`` session and change the replication factor of the ``system_auth`` keyspace. By default, this keyspace - uses ``SimpleReplicationStrategy`` and a ``replication_factor`` of 1. It is recommended to change this for any - non-trivial deployment to ensure that should nodes become unavailable, login is still possible. Best practice is to - configure a replication factor of 3 to 5 per-DC. - -:: - - ALTER KEYSPACE system_auth WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': 3, 'DC2': 3}; - -2. Edit ``cassandra.yaml`` to change the ``authenticator`` option like so: - -:: - - authenticator: PasswordAuthenticator - -3. Restart the node. - -4. Open a new ``cqlsh`` session using the credentials of the default superuser: - -:: - - cqlsh -u cassandra -p cassandra - -5. During login, the credentials for the default superuser are read with a consistency level of ``QUORUM``, whereas - those for all other users (including superusers) are read at ``LOCAL_ONE``. In the interests of performance and - availability, as well as security, operators should create another superuser and disable the default one. This step - is optional, but highly recommended. While logged in as the default superuser, create another superuser role which - can be used to bootstrap further configuration. - -:: - - # create a new superuser - CREATE ROLE dba WITH SUPERUSER = true AND LOGIN = true AND PASSWORD = 'super'; - -6. Start a new cqlsh session, this time logging in as the new_superuser and disable the default superuser. - -:: - - ALTER ROLE cassandra WITH SUPERUSER = false AND LOGIN = false; - -7. Finally, set up the roles and credentials for your application users with :ref:`CREATE ROLE ` - statements. - -At the end of these steps, the one node is configured to use password authentication. To roll that out across the -cluster, repeat steps 2 and 3 on each node in the cluster. Once all nodes have been restarted, authentication will be -fully enabled throughout the cluster. - -Note that using ``PasswordAuthenticator`` also requires the use of :ref:`CassandraRoleManager `. - -See also: :ref:`setting-credentials-for-internal-authentication`, :ref:`CREATE ROLE `, -:ref:`ALTER ROLE `, :ref:`ALTER KEYSPACE ` and :ref:`GRANT PERMISSION -`, - -.. _authorization: - -Authorization -^^^^^^^^^^^^^ - -Authorization is pluggable in Cassandra and is configured using the ``authorizer`` setting in ``cassandra.yaml``. -Cassandra ships with two options included in the default distribution. - -By default, Cassandra is configured with ``AllowAllAuthorizer`` which performs no checking and so effectively grants all -permissions to all roles. This must be used if ``AllowAllAuthenticator`` is the configured authenticator. - -The default distribution also includes ``CassandraAuthorizer``, which does implement full permissions management -functionality and stores its data in Cassandra system tables. - -Enabling Internal Authorization -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Permissions are modelled as a whitelist, with the default assumption that a given role has no access to any database -resources. The implication of this is that once authorization is enabled on a node, all requests will be rejected until -the required permissions have been granted. For this reason, it is strongly recommended to perform the initial setup on -a node which is not processing client requests. - -The following assumes that authentication has already been enabled via the process outlined in -:ref:`password-authentication`. Perform these steps to enable internal authorization across the cluster: - -1. On the selected node, edit ``cassandra.yaml`` to change the ``authorizer`` option like so: - -:: - - authorizer: CassandraAuthorizer - -2. Restart the node. - -3. Open a new ``cqlsh`` session using the credentials of a role with superuser credentials: - -:: - - cqlsh -u dba -p super - -4. Configure the appropriate access privileges for your clients using `GRANT PERMISSION `_ - statements. On the other nodes, until configuration is updated and the node restarted, this will have no effect so - disruption to clients is avoided. - -:: - - GRANT SELECT ON ks.t1 TO db_user; - -5. Once all the necessary permissions have been granted, repeat steps 1 and 2 for each node in turn. As each node - restarts and clients reconnect, the enforcement of the granted permissions will begin. - -See also: :ref:`GRANT PERMISSION `, `GRANT ALL ` and :ref:`REVOKE PERMISSION -` - -.. _auth-caching: - -Caching -^^^^^^^ - -Enabling authentication and authorization places additional load on the cluster by frequently reading from the -``system_auth`` tables. Furthermore, these reads are in the critical paths of many client operations, and so has the -potential to severely impact quality of service. To mitigate this, auth data such as credentials, permissions and role -details are cached for a configurable period. The caching can be configured (and even disabled) from ``cassandra.yaml`` -or using a JMX client. The JMX interface also supports invalidation of the various caches, but any changes made via JMX -are not persistent and will be re-read from ``cassandra.yaml`` when the node is restarted. - -Each cache has 3 options which can be set: - -Validity Period - Controls the expiration of cache entries. After this period, entries are invalidated and removed from the cache. -Refresh Rate - Controls the rate at which background reads are performed to pick up any changes to the underlying data. While these - async refreshes are performed, caches will continue to serve (possibly) stale data. Typically, this will be set to a - shorter time than the validity period. -Max Entries - Controls the upper bound on cache size. - -The naming for these options in ``cassandra.yaml`` follows the convention: - -* ``_validity_in_ms`` -* ``_update_interval_in_ms`` -* ``_cache_max_entries`` - -Where ```` is one of ``credentials``, ``permissions``, or ``roles``. - -As mentioned, these are also exposed via JMX in the mbeans under the ``org.apache.cassandra.auth`` domain. - -JMX access -^^^^^^^^^^ - -Access control for JMX clients is configured separately to that for CQL. For both authentication and authorization, two -providers are available; the first based on standard JMX security and the second which integrates more closely with -Cassandra's own auth subsystem. - -The default settings for Cassandra make JMX accessible only from localhost. To enable remote JMX connections, edit -``cassandra-env.sh`` (or ``cassandra-env.ps1`` on Windows) to change the ``LOCAL_JMX`` setting to ``no``. Under the -standard configuration, when remote JMX connections are enabled, :ref:`standard JMX authentication ` -is also switched on. - -Note that by default, local-only connections are not subject to authentication, but this can be enabled. - -If enabling remote connections, it is recommended to also use :ref:`SSL ` connections. - -Finally, after enabling auth and/or SSL, ensure that tools which use JMX, such as :ref:`nodetool `, are -correctly configured and working as expected. - -.. _standard-jmx-auth: - -Standard JMX Auth -~~~~~~~~~~~~~~~~~ - -Users permitted to connect to the JMX server are specified in a simple text file. The location of this file is set in -``cassandra-env.sh`` by the line: - -:: - - JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password" - -Edit the password file to add username/password pairs: - -:: - - jmx_user jmx_password - -Secure the credentials file so that only the user running the Cassandra process can read it : - -:: - - $ chown cassandra:cassandra /etc/cassandra/jmxremote.password - $ chmod 400 /etc/cassandra/jmxremote.password - -Optionally, enable access control to limit the scope of what defined users can do via JMX. Note that this is a fairly -blunt instrument in this context as most operational tools in Cassandra require full read/write access. To configure a -simple access file, uncomment this line in ``cassandra-env.sh``: - -:: - - #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.access.file=/etc/cassandra/jmxremote.access" - -Then edit the access file to grant your JMX user readwrite permission: - -:: - - jmx_user readwrite - -Cassandra must be restarted to pick up the new settings. - -See also : `Using File-Based Password Authentication In JMX -`__ - - -Cassandra Integrated Auth -~~~~~~~~~~~~~~~~~~~~~~~~~ - -An alternative to the out-of-the-box JMX auth is to useeCassandra's own authentication and/or authorization providers -for JMX clients. This is potentially more flexible and secure but it come with one major caveat. Namely that it is not -available until `after` a node has joined the ring, because the auth subsystem is not fully configured until that point -However, it is often critical for monitoring purposes to have JMX access particularly during bootstrap. So it is -recommended, where possible, to use local only JMX auth during bootstrap and then, if remote connectivity is required, -to switch to integrated auth once the node has joined the ring and initial setup is complete. - -With this option, the same database roles used for CQL authentication can be used to control access to JMX, so updates -can be managed centrally using just ``cqlsh``. Furthermore, fine grained control over exactly which operations are -permitted on particular MBeans can be acheived via :ref:`GRANT PERMISSION `. - -To enable integrated authentication, edit ``cassandra-env.sh`` to uncomment these lines: - -:: - - #JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.remote.login.config=CassandraLogin" - #JVM_OPTS="$JVM_OPTS -Djava.security.auth.login.config=$CASSANDRA_HOME/conf/cassandra-jaas.config" - -And disable the JMX standard auth by commenting this line: - -:: - - JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password" - -To enable integrated authorization, uncomment this line: - -:: - - #JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.authorizer=org.apache.cassandra.auth.jmx.AuthorizationProxy" - -Check standard access control is off by ensuring this line is commented out: - -:: - - #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.access.file=/etc/cassandra/jmxremote.access" - -With integrated authentication and authorization enabled, operators can define specific roles and grant them access to -the particular JMX resources that they need. For example, a role with the necessary permissions to use tools such as -jconsole or jmc in read-only mode would be defined as: - -:: - - CREATE ROLE jmx WITH LOGIN = false; - GRANT SELECT ON ALL MBEANS TO jmx; - GRANT DESCRIBE ON ALL MBEANS TO jmx; - GRANT EXECUTE ON MBEAN 'java.lang:type=Threading' TO jmx; - GRANT EXECUTE ON MBEAN 'com.sun.management:type=HotSpotDiagnostic' TO jmx; - - # Grant the role with necessary permissions to use nodetool commands (including nodetool status) in read-only mode - GRANT EXECUTE ON MBEAN 'org.apache.cassandra.db:type=EndpointSnitchInfo' TO jmx; - GRANT EXECUTE ON MBEAN 'org.apache.cassandra.db:type=StorageService' TO jmx; - - # Grant the jmx role to one with login permissions so that it can access the JMX tooling - CREATE ROLE ks_user WITH PASSWORD = 'password' AND LOGIN = true AND SUPERUSER = false; - GRANT jmx TO ks_user; - -Fine grained access control to individual MBeans is also supported: - -:: - - GRANT EXECUTE ON MBEAN 'org.apache.cassandra.db:type=Tables,keyspace=test_keyspace,table=t1' TO ks_user; - GRANT EXECUTE ON MBEAN 'org.apache.cassandra.db:type=Tables,keyspace=test_keyspace,table=*' TO ks_owner; - -This permits the ``ks_user`` role to invoke methods on the MBean representing a single table in ``test_keyspace``, while -granting the same permission for all table level MBeans in that keyspace to the ``ks_owner`` role. - -Adding/removing roles and granting/revoking of permissions is handled dynamically once the initial setup is complete, so -no further restarts are required if permissions are altered. - -See also: :ref:`Permissions `. - -.. _jmx-with-ssl: - -JMX With SSL -~~~~~~~~~~~~ - -JMX SSL configuration is controlled by a number of system properties, some of which are optional. To turn on SSL, edit -the relevant lines in ``cassandra-env.sh`` (or ``cassandra-env.ps1`` on Windows) to uncomment and set the values of these -properties as required: - -``com.sun.management.jmxremote.ssl`` - set to true to enable SSL -``com.sun.management.jmxremote.ssl.need.client.auth`` - set to true to enable validation of client certificates -``com.sun.management.jmxremote.registry.ssl`` - enables SSL sockets for the RMI registry from which clients obtain the JMX connector stub -``com.sun.management.jmxremote.ssl.enabled.protocols`` - by default, the protocols supported by the JVM will be used, override with a comma-separated list. Note that this is - not usually necessary and using the defaults is the preferred option. -``com.sun.management.jmxremote.ssl.enabled.cipher.suites`` - by default, the cipher suites supported by the JVM will be used, override with a comma-separated list. Note that - this is not usually necessary and using the defaults is the preferred option. -``javax.net.ssl.keyStore`` - set the path on the local filesystem of the keystore containing server private keys and public certificates -``javax.net.ssl.keyStorePassword`` - set the password of the keystore file -``javax.net.ssl.trustStore`` - if validation of client certificates is required, use this property to specify the path of the truststore containing - the public certificates of trusted clients -``javax.net.ssl.trustStorePassword`` - set the password of the truststore file - -See also: `Oracle Java7 Docs `__, -`Monitor Java with JMX `__ diff --git a/doc/source/operating/snitch.rst b/doc/source/operating/snitch.rst deleted file mode 100644 index b716e8290367..000000000000 --- a/doc/source/operating/snitch.rst +++ /dev/null @@ -1,82 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -.. _snitch: - -Snitch ------- - -In cassandra, the snitch has two functions: - -- it teaches Cassandra enough about your network topology to route requests efficiently. -- it allows Cassandra to spread replicas around your cluster to avoid correlated failures. It does this by grouping - machines into "datacenters" and "racks." Cassandra will do its best not to have more than one replica on the same - "rack" (which may not actually be a physical location). - -Dynamic snitching -^^^^^^^^^^^^^^^^^ - -The dynamic snitch monitor read latencies to avoid reading from hosts that have slowed down. The dynamic snitch is -configured with the following properties on ``cassandra.yaml``: - -- ``dynamic_snitch``: whether the dynamic snitch should be enabled or disabled. -- ``dynamic_snitch_update_interval_in_ms``: controls how often to perform the more expensive part of host score - calculation. -- ``dynamic_snitch_reset_interval_in_ms``: if set greater than zero, this will allow 'pinning' of replicas to hosts - in order to increase cache capacity. -- ``dynamic_snitch_badness_threshold:``: The badness threshold will control how much worse the pinned host has to be - before the dynamic snitch will prefer other replicas over it. This is expressed as a double which represents a - percentage. Thus, a value of 0.2 means Cassandra would continue to prefer the static snitch values until the pinned - host was 20% worse than the fastest. - -Snitch classes -^^^^^^^^^^^^^^ - -The ``endpoint_snitch`` parameter in ``cassandra.yaml`` should be set to the class that implements -``IEndPointSnitch`` which will be wrapped by the dynamic snitch and decide if two endpoints are in the same data center -or on the same rack. Out of the box, Cassandra provides the snitch implementations: - -GossipingPropertyFileSnitch - This should be your go-to snitch for production use. The rack and datacenter for the local node are defined in - cassandra-rackdc.properties and propagated to other nodes via gossip. If ``cassandra-topology.properties`` exists, - it is used as a fallback, allowing migration from the PropertyFileSnitch. - -SimpleSnitch - Treats Strategy order as proximity. This can improve cache locality when disabling read repair. Only appropriate for - single-datacenter deployments. - -PropertyFileSnitch - Proximity is determined by rack and data center, which are explicitly configured in - ``cassandra-topology.properties``. - -Ec2Snitch - Appropriate for EC2 deployments in a single Region, or in multiple regions with inter-region VPC enabled (available - since the end of 2017, see `AWS announcement `_). - Loads Region and Availability Zone information from the EC2 API. The Region is treated as the datacenter, and the - Availability Zone as the rack. Only private IPs are used, so this will work across multiple regions only if - inter-region VPC is enabled. - -Ec2MultiRegionSnitch - Uses public IPs as broadcast_address to allow cross-region connectivity (thus, you should set seed addresses to the - public IP as well). You will need to open the ``storage_port`` or ``ssl_storage_port`` on the public IP firewall - (For intra-Region traffic, Cassandra will switch to the private IP after establishing a connection). - -RackInferringSnitch - Proximity is determined by rack and data center, which are assumed to correspond to the 3rd and 2nd octet of each - node's IP address, respectively. Unless this happens to match your deployment conventions, this is best used as an - example of writing a custom Snitch class and is provided in that spirit. diff --git a/doc/source/operating/topo_changes.rst b/doc/source/operating/topo_changes.rst deleted file mode 100644 index 6c8f8ecdfa57..000000000000 --- a/doc/source/operating/topo_changes.rst +++ /dev/null @@ -1,129 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -.. _topology-changes: - -Adding, replacing, moving and removing nodes --------------------------------------------- - -Bootstrap -^^^^^^^^^ - -Adding new nodes is called "bootstrapping". The ``num_tokens`` parameter will define the amount of virtual nodes -(tokens) the joining node will be assigned during bootstrap. The tokens define the sections of the ring (token ranges) -the node will become responsible for. - -Token allocation -~~~~~~~~~~~~~~~~ - -With the default token allocation algorithm the new node will pick ``num_tokens`` random tokens to become responsible -for. Since tokens are distributed randomly, load distribution improves with a higher amount of virtual nodes, but it -also increases token management overhead. The default of 256 virtual nodes should provide a reasonable load balance with -acceptable overhead. - -On 3.0+ a new token allocation algorithm was introduced to allocate tokens based on the load of existing virtual nodes -for a given keyspace, and thus yield an improved load distribution with a lower number of tokens. To use this approach, -the new node must be started with the JVM option ``-Dcassandra.allocate_tokens_for_keyspace=``, where -```` is the keyspace from which the algorithm can find the load information to optimize token assignment for. - -Manual token assignment -""""""""""""""""""""""" - -You may specify a comma-separated list of tokens manually with the ``initial_token`` ``cassandra.yaml`` parameter, and -if that is specified Cassandra will skip the token allocation process. This may be useful when doing token assignment -with an external tool or when restoring a node with its previous tokens. - -Range streaming -~~~~~~~~~~~~~~~~ - -After the tokens are allocated, the joining node will pick current replicas of the token ranges it will become -responsible for to stream data from. By default it will stream from the primary replica of each token range in order to -guarantee data in the new node will be consistent with the current state. - -In the case of any unavailable replica, the consistent bootstrap process will fail. To override this behavior and -potentially miss data from an unavailable replica, set the JVM flag ``-Dcassandra.consistent.rangemovement=false``. - -Resuming failed/hanged bootstrap -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -On 2.2+, if the bootstrap process fails, it's possible to resume bootstrap from the previous saved state by calling -``nodetool bootstrap resume``. If for some reason the bootstrap hangs or stalls, it may also be resumed by simply -restarting the node. In order to cleanup bootstrap state and start fresh, you may set the JVM startup flag -``-Dcassandra.reset_bootstrap_progress=true``. - -On lower versions, when the bootstrap proces fails it is recommended to wipe the node (remove all the data), and restart -the bootstrap process again. - -Manual bootstrapping -~~~~~~~~~~~~~~~~~~~~ - -It's possible to skip the bootstrapping process entirely and join the ring straight away by setting the hidden parameter -``auto_bootstrap: false``. This may be useful when restoring a node from a backup or creating a new data-center. - -Removing nodes -^^^^^^^^^^^^^^ - -You can take a node out of the cluster with ``nodetool decommission`` to a live node, or ``nodetool removenode`` (to any -other machine) to remove a dead one. This will assign the ranges the old node was responsible for to other nodes, and -replicate the appropriate data there. If decommission is used, the data will stream from the decommissioned node. If -removenode is used, the data will stream from the remaining replicas. - -No data is removed automatically from the node being decommissioned, so if you want to put the node back into service at -a different token on the ring, it should be removed manually. - -Moving nodes -^^^^^^^^^^^^ - -When ``num_tokens: 1`` it's possible to move the node position in the ring with ``nodetool move``. Moving is both a -convenience over and more efficient than decommission + bootstrap. After moving a node, ``nodetool cleanup`` should be -run to remove any unnecessary data. - -Replacing a dead node -^^^^^^^^^^^^^^^^^^^^^ - -In order to replace a dead node, start cassandra with the JVM startup flag -``-Dcassandra.replace_address_first_boot=``. Once this property is enabled the node starts in a hibernate -state, during which all the other nodes will see this node to be DOWN (DN), however this node will see itself as UP -(UN). Accurate replacement state can be found in ``nodetool netstats``. - -The replacing node will now start to bootstrap the data from the rest of the nodes in the cluster. A replacing node will -only receive writes during the bootstrapping phase if it has a different ip address to the node that is being replaced. -(See CASSANDRA-8523 and CASSANDRA-12344) - -Once the bootstrapping is complete the node will be marked "UP". - -.. Note:: If any of the following cases apply, you **MUST** run repair to make the replaced node consistent again, since - it missed ongoing writes during/prior to bootstrapping. The *replacement* timeframe refers to the period from when the - node initially dies to when a new node completes the replacement process. - - 1. The node is down for longer than ``max_hint_window_in_ms`` before being replaced. - 2. You are replacing using the same IP address as the dead node **and** replacement takes longer than ``max_hint_window_in_ms``. - -Monitoring progress -^^^^^^^^^^^^^^^^^^^ - -Bootstrap, replace, move and remove progress can be monitored using ``nodetool netstats`` which will show the progress -of the streaming operations. - -Cleanup data after range movements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -As a safety measure, Cassandra does not automatically remove data from nodes that "lose" part of their token range due -to a range movement operation (bootstrap, move, replace). Run ``nodetool cleanup`` on the nodes that lost ranges to the -joining node when you are satisfied the new node is up and working. If you do not do this the old data will still be -counted against the load on that node. diff --git a/doc/source/plugins/index.rst b/doc/source/plugins/index.rst deleted file mode 100644 index 4073a92cbc6b..000000000000 --- a/doc/source/plugins/index.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Third-Party Plugins -=================== - -Available third-party plugins for Apache Cassandra - -CAPI-Rowcache -------------- - -The Coherent Accelerator Process Interface (CAPI) is a general term for the infrastructure of attaching a Coherent accelerator to an IBM POWER system. A key innovation in IBM POWER8’s open architecture is the CAPI. It provides a high bandwidth, low latency path between external devices, the POWER8 core, and the system’s open memory architecture. IBM Data Engine for NoSQL is an integrated platform for large and fast growing NoSQL data stores. It builds on the CAPI capability of POWER8 systems and provides super-fast access to large flash storage capacity and addresses the challenges associated with typical x86 server based scale-out deployments. - -The official page for the `CAPI-Rowcache plugin `__ contains further details how to build/run/download the plugin. - - -Stratio’s Cassandra Lucene Index --------------------------------- - -Stratio’s Lucene index is a Cassandra secondary index implementation based on `Apache Lucene `__. It extends Cassandra’s functionality to provide near real-time distributed search engine capabilities such as with ElasticSearch or `Apache Solr `__, including full text search capabilities, free multivariable, geospatial and bitemporal search, relevance queries and sorting based on column value, relevance or distance. Each node indexes its own data, so high availability and scalability is guaranteed. - -The official Github repository `Cassandra Lucene Index `__ contains everything you need to build/run/configure the plugin. \ No newline at end of file diff --git a/doc/source/tools/cassandra_stress.rst b/doc/source/tools/cassandra_stress.rst deleted file mode 100644 index c59d0583f3dd..000000000000 --- a/doc/source/tools/cassandra_stress.rst +++ /dev/null @@ -1,273 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: yaml - -.. _cassandra_stress: - -Cassandra Stress ----------------- - -cassandra-stress is a tool for benchmarking and load testing a Cassandra -cluster. cassandra-stress supports testing arbitrary CQL tables and queries -to allow users to benchmark their data model. - -This documentation focuses on user mode as this allows the testing of your -actual schema. - -Usage -^^^^^ -There are several operation types: - - * write-only, read-only, and mixed workloads of standard data - * write-only and read-only workloads for counter columns - * user configured workloads, running custom queries on custom schemas - -The syntax is `cassandra-stress [options]`. If you want more information on a given command -or options, just run `cassandra-stress help `. - -Commands: - read: - Multiple concurrent reads - the cluster must first be populated by a write test - write: - Multiple concurrent writes against the cluster - mixed: - Interleaving of any basic commands, with configurable ratio and distribution - the cluster must first be populated by a write test - counter_write: - Multiple concurrent updates of counters. - counter_read: - Multiple concurrent reads of counters. The cluster must first be populated by a counterwrite test. - user: - Interleaving of user provided queries, with configurable ratio and distribution. - help: - Print help for a command or option - print: - Inspect the output of a distribution definition - legacy: - Legacy support mode - -Primary Options: - -pop: - Population distribution and intra-partition visit order - -insert: - Insert specific options relating to various methods for batching and splitting partition updates - -col: - Column details such as size and count distribution, data generator, names, comparator and if super columns should be used - -rate: - Thread count, rate limit or automatic mode (default is auto) - -mode: - Thrift or CQL with options - -errors: - How to handle errors when encountered during stress - -sample: - Specify the number of samples to collect for measuring latency - -schema: - Replication settings, compression, compaction, etc. - -node: - Nodes to connect to - -log: - Where to log progress to, and the interval at which to do it - -transport: - Custom transport factories - -port: - The port to connect to cassandra nodes on - -sendto: - Specify a stress server to send this command to - -graph: - Graph recorded metrics - -tokenrange: - Token range settings - - -Suboptions: - Every command and primary option has its own collection of suboptions. These are too numerous to list here. - For information on the suboptions for each command or option, please use the help command, - `cassandra-stress help `. - -User mode -^^^^^^^^^ - -User mode allows you to use your stress your own schemas. This can save time in -the long run rather than building an application and then realising your schema -doesn't scale. - -Profile -+++++++ - -User mode requires a profile defined in YAML. -Multiple YAML files may be specified in which case operations in the ops argument are referenced as specname.opname. - -An identifier for the profile:: - - specname: staff_activities - -The keyspace for the test:: - - keyspace: staff - -CQL for the keyspace. Optional if the keyspace already exists:: - - keyspace_definition: | - CREATE KEYSPACE stresscql WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3}; - -The table to be stressed:: - - table: staff_activities - -CQL for the table. Optional if the table already exists:: - - table_definition: | - CREATE TABLE staff_activities ( - name text, - when timeuuid, - what text, - PRIMARY KEY(name, when, what) - ) - - -Optional meta information on the generated columns in the above table. -The min and max only apply to text and blob types. -The distribution field represents the total unique population -distribution of that column across rows:: - - columnspec: - - name: name - size: uniform(5..10) # The names of the staff members are between 5-10 characters - population: uniform(1..10) # 10 possible staff members to pick from - - name: when - cluster: uniform(20..500) # Staff members do between 20 and 500 events - - name: what - size: normal(10..100,50) - -Supported types are: - -An exponential distribution over the range [min..max]:: - - EXP(min..max) - -An extreme value (Weibull) distribution over the range [min..max]:: - - EXTREME(min..max,shape) - -A gaussian/normal distribution, where mean=(min+max)/2, and stdev is (mean-min)/stdvrng:: - - GAUSSIAN(min..max,stdvrng) - -A gaussian/normal distribution, with explicitly defined mean and stdev:: - - GAUSSIAN(min..max,mean,stdev) - -A uniform distribution over the range [min, max]:: - - UNIFORM(min..max) - -A fixed distribution, always returning the same value:: - - FIXED(val) - -If preceded by ~, the distribution is inverted - -Defaults for all columns are size: uniform(4..8), population: uniform(1..100B), cluster: fixed(1) - -Insert distributions:: - - insert: - # How many partition to insert per batch - partitions: fixed(1) - # How many rows to update per partition - select: fixed(1)/500 - # UNLOGGED or LOGGED batch for insert - batchtype: UNLOGGED - - -Currently all inserts are done inside batches. - -Read statements to use during the test:: - - queries: - events: - cql: select * from staff_activities where name = ? - fields: samerow - latest_event: - cql: select * from staff_activities where name = ? LIMIT 1 - fields: samerow - -Running a user mode test:: - - cassandra-stress user profile=./example.yaml duration=1m "ops(insert=1,latest_event=1,events=1)" truncate=once - -This will create the schema then run tests for 1 minute with an equal number of inserts, latest_event queries and events -queries. Additionally the table will be truncated once before the test. - -The full example can be found here :download:`yaml <./stress-example.yaml>` - -Running a user mode test with multiple yaml files:: - cassandra-stress user profile=./example.yaml,./example2.yaml duration=1m "ops(ex1.insert=1,ex1.latest_event=1,ex2.insert=2)" truncate=once - -This will run operations as specified in both the example.yaml and example2.yaml files. example.yaml and example2.yaml can reference the same table - although care must be taken that the table definition is identical (data generation specs can be different). - -Lightweight transaction support -+++++++++++++++++++++++++++++++ - -cassandra-stress supports lightweight transactions. In this it will first read current data from Cassandra and then uses read value(s) -to fulfill lightweight transaction condition(s). - -Lightweight transaction update query:: - - queries: - regularupdate: - cql: update blogposts set author = ? where domain = ? and published_date = ? - fields: samerow - updatewithlwt: - cql: update blogposts set author = ? where domain = ? and published_date = ? IF body = ? AND url = ? - fields: samerow - -The full example can be found here :download:`yaml <./stress-lwt-example.yaml>` - -Graphing -^^^^^^^^ - -Graphs can be generated for each run of stress. - -.. image:: example-stress-graph.png - -To create a new graph:: - - cassandra-stress user profile=./stress-example.yaml "ops(insert=1,latest_event=1,events=1)" -graph file=graph.html title="Awesome graph" - -To add a new run to an existing graph point to an existing file and add a revision name:: - - cassandra-stress user profile=./stress-example.yaml duration=1m "ops(insert=1,latest_event=1,events=1)" -graph file=graph.html title="Awesome graph" revision="Second run" - -FAQ -^^^^ - -**How do you use NetworkTopologyStrategy for the keyspace?** - -Use the schema option making sure to either escape the parenthesis or enclose in quotes:: - - cassandra-stress write -schema "replication(strategy=NetworkTopologyStrategy,datacenter1=3)" - -**How do you use SSL?** - -Use the transport option:: - - cassandra-stress "write n=100k cl=ONE no-warmup" -transport "truststore=$HOME/jks/truststore.jks truststore-password=cassandra" - -**Is Cassandra Stress a secured tool?** - -Cassandra stress is not a secured tool. Serialization and other aspects of the tool offer no security guarantees. diff --git a/doc/source/tools/cqlsh.rst b/doc/source/tools/cqlsh.rst deleted file mode 100644 index b800b88f46eb..000000000000 --- a/doc/source/tools/cqlsh.rst +++ /dev/null @@ -1,458 +0,0 @@ -.. highlight:: none - -.. _cqlsh: - -cqlsh: the CQL shell --------------------- - -cqlsh is a command line shell for interacting with Cassandra through CQL (the Cassandra Query Language). It is shipped -with every Cassandra package, and can be found in the bin/ directory alongside the cassandra executable. cqlsh utilizes -the Python native protocol driver, and connects to the single node specified on the command line. - - -Compatibility -^^^^^^^^^^^^^ - -cqlsh is compatible with Python 2.7. - -In general, a given version of cqlsh is only guaranteed to work with the version of Cassandra that it was released with. -In some cases, cqlsh make work with older or newer versions of Cassandra, but this is not officially supported. - - -Optional Dependencies -^^^^^^^^^^^^^^^^^^^^^ - -cqlsh ships with all essential dependencies. However, there are some optional dependencies that can be installed to -improve the capabilities of cqlsh. - -pytz -~~~~ - -By default, cqlsh displays all timestamps with a UTC timezone. To support display of timestamps with another timezone, -the `pytz `__ library must be installed. See the ``timezone`` option in cqlshrc_ for -specifying a timezone to use. - -cython -~~~~~~ - -The performance of cqlsh's ``COPY`` operations can be improved by installing `cython `__. This will -compile the python modules that are central to the performance of ``COPY``. - -cqlshrc -^^^^^^^ - -The ``cqlshrc`` file holds configuration options for cqlsh. By default this is in the user's home directory at -``~/.cassandra/cqlsh``, but a custom location can be specified with the ``--cqlshrc`` option. - -Example config values and documentation can be found in the ``conf/cqlshrc.sample`` file of a tarball installation. You -can also view the latest version of `cqlshrc online `__. - - -Command Line Options -^^^^^^^^^^^^^^^^^^^^ - -Usage: - -``cqlsh [options] [host [port]]`` - -Options: - -``-C`` ``--color`` - Force color output - -``--no-color`` - Disable color output - -``--browser`` - Specify the browser to use for displaying cqlsh help. This can be one of the `supported browser names - `__ (e.g. ``firefox``) or a browser path followed by ``%s`` (e.g. - ``/usr/bin/google-chrome-stable %s``). - -``--ssl`` - Use SSL when connecting to Cassandra - -``-u`` ``--user`` - Username to authenticate against Cassandra with - -``-p`` ``--password`` - Password to authenticate against Cassandra with, should - be used in conjunction with ``--user`` - -``-k`` ``--keyspace`` - Keyspace to authenticate to, should be used in conjunction - with ``--user`` - -``-f`` ``--file`` - Execute commands from the given file, then exit - -``--debug`` - Print additional debugging information - -``--encoding`` - Specify a non-default encoding for output (defaults to UTF-8) - -``--cqlshrc`` - Specify a non-default location for the ``cqlshrc`` file - -``-e`` ``--execute`` - Execute the given statement, then exit - -``--connect-timeout`` - Specify the connection timeout in seconds (defaults to 2s) - -``--python /path/to/python`` - Specify the full path to Python interpreter to override default on systems with multiple interpreters installed - -``--request-timeout`` - Specify the request timeout in seconds (defaults to 10s) - -``-t`` ``--tty`` - Force tty mode (command prompt) - - -Special Commands -^^^^^^^^^^^^^^^^ - -In addition to supporting regular CQL statements, cqlsh also supports a number of special commands that are not part of -CQL. These are detailed below. - -``CONSISTENCY`` -~~~~~~~~~~~~~~~ - -`Usage`: ``CONSISTENCY `` - -Sets the consistency level for operations to follow. Valid arguments include: - -- ``ANY`` -- ``ONE`` -- ``TWO`` -- ``THREE`` -- ``QUORUM`` -- ``ALL`` -- ``LOCAL_QUORUM`` -- ``LOCAL_ONE`` -- ``SERIAL`` -- ``LOCAL_SERIAL`` - -``SERIAL CONSISTENCY`` -~~~~~~~~~~~~~~~~~~~~~~ - -`Usage`: ``SERIAL CONSISTENCY `` - -Sets the serial consistency level for operations to follow. Valid arguments include: - -- ``SERIAL`` -- ``LOCAL_SERIAL`` - -The serial consistency level is only used by conditional updates (``INSERT``, ``UPDATE`` and ``DELETE`` with an ``IF`` -condition). For those, the serial consistency level defines the consistency level of the serial phase (or “paxos” phase) -while the normal consistency level defines the consistency for the “learn” phase, i.e. what type of reads will be -guaranteed to see the update right away. For example, if a conditional write has a consistency level of ``QUORUM`` (and -is successful), then a ``QUORUM`` read is guaranteed to see that write. But if the regular consistency level of that -write is ``ANY``, then only a read with a consistency level of ``SERIAL`` is guaranteed to see it (even a read with -consistency ``ALL`` is not guaranteed to be enough). - -``SHOW VERSION`` -~~~~~~~~~~~~~~~~ -Prints the cqlsh, Cassandra, CQL, and native protocol versions in use. Example:: - - cqlsh> SHOW VERSION - [cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4] - -``SHOW HOST`` -~~~~~~~~~~~~~ - -Prints the IP address and port of the Cassandra node that cqlsh is connected to in addition to the cluster name. -Example:: - - cqlsh> SHOW HOST - Connected to Prod_Cluster at 192.0.0.1:9042. - -``SHOW SESSION`` -~~~~~~~~~~~~~~~~ - -Pretty prints a specific tracing session. - -`Usage`: ``SHOW SESSION `` - -Example usage:: - - cqlsh> SHOW SESSION 95ac6470-327e-11e6-beca-dfb660d92ad8 - - Tracing session: 95ac6470-327e-11e6-beca-dfb660d92ad8 - - activity | timestamp | source | source_elapsed | client - -----------------------------------------------------------+----------------------------+-----------+----------------+----------- - Execute CQL3 query | 2016-06-14 17:23:13.979000 | 127.0.0.1 | 0 | 127.0.0.1 - Parsing SELECT * FROM system.local; [SharedPool-Worker-1] | 2016-06-14 17:23:13.982000 | 127.0.0.1 | 3843 | 127.0.0.1 - ... - - -``SOURCE`` -~~~~~~~~~~ - -Reads the contents of a file and executes each line as a CQL statement or special cqlsh command. - -`Usage`: ``SOURCE `` - -Example usage:: - - cqlsh> SOURCE '/home/thobbs/commands.cql' - -``CAPTURE`` -~~~~~~~~~~~ - -Begins capturing command output and appending it to a specified file. Output will not be shown at the console while it -is captured. - -`Usage`:: - - CAPTURE ''; - CAPTURE OFF; - CAPTURE; - -That is, the path to the file to be appended to must be given inside a string literal. The path is interpreted relative -to the current working directory. The tilde shorthand notation (``'~/mydir'``) is supported for referring to ``$HOME``. - -Only query result output is captured. Errors and output from cqlsh-only commands will still be shown in the cqlsh -session. - -To stop capturing output and show it in the cqlsh session again, use ``CAPTURE OFF``. - -To inspect the current capture configuration, use ``CAPTURE`` with no arguments. - -``HELP`` -~~~~~~~~ - -Gives information about cqlsh commands. To see available topics, enter ``HELP`` without any arguments. To see help on a -topic, use ``HELP ``. Also see the ``--browser`` argument for controlling what browser is used to display help. - -``TRACING`` -~~~~~~~~~~~ - -Enables or disables tracing for queries. When tracing is enabled, once a query completes, a trace of the events during -the query will be printed. - -`Usage`:: - - TRACING ON - TRACING OFF - -``PAGING`` -~~~~~~~~~~ - -Enables paging, disables paging, or sets the page size for read queries. When paging is enabled, only one page of data -will be fetched at a time and a prompt will appear to fetch the next page. Generally, it's a good idea to leave paging -enabled in an interactive session to avoid fetching and printing large amounts of data at once. - -`Usage`:: - - PAGING ON - PAGING OFF - PAGING - -``EXPAND`` -~~~~~~~~~~ - -Enables or disables vertical printing of rows. Enabling ``EXPAND`` is useful when many columns are fetched, or the -contents of a single column are large. - -`Usage`:: - - EXPAND ON - EXPAND OFF - -``LOGIN`` -~~~~~~~~~ - -Authenticate as a specified Cassandra user for the current session. - -`Usage`:: - - LOGIN [] - -``EXIT`` -~~~~~~~~~ - -Ends the current session and terminates the cqlsh process. - -`Usage`:: - - EXIT - QUIT - -``CLEAR`` -~~~~~~~~~ - -Clears the console. - -`Usage`:: - - CLEAR - CLS - -``DESCRIBE`` -~~~~~~~~~~~~ - -Prints a description (typically a series of DDL statements) of a schema element or the cluster. This is useful for -dumping all or portions of the schema. - -`Usage`:: - - DESCRIBE CLUSTER - DESCRIBE SCHEMA - DESCRIBE KEYSPACES - DESCRIBE KEYSPACE - DESCRIBE TABLES - DESCRIBE TABLE
- DESCRIBE INDEX - DESCRIBE MATERIALIZED VIEW - DESCRIBE TYPES - DESCRIBE TYPE - DESCRIBE FUNCTIONS - DESCRIBE FUNCTION - DESCRIBE AGGREGATES - DESCRIBE AGGREGATE - -In any of the commands, ``DESC`` may be used in place of ``DESCRIBE``. - -The ``DESCRIBE CLUSTER`` command prints the cluster name and partitioner:: - - cqlsh> DESCRIBE CLUSTER - - Cluster: Test Cluster - Partitioner: Murmur3Partitioner - -The ``DESCRIBE SCHEMA`` command prints the DDL statements needed to recreate the entire schema. This is especially -useful for dumping the schema in order to clone a cluster or restore from a backup. - -``COPY TO`` -~~~~~~~~~~~ - -Copies data from a table to a CSV file. - -`Usage`:: - - COPY
[(, ...)] TO WITH [AND ...] - -If no columns are specified, all columns from the table will be copied to the CSV file. A subset of columns to copy may -be specified by adding a comma-separated list of column names surrounded by parenthesis after the table name. - - -The ```` should be a string literal (with single quotes) representing a path to the destination file. This -can also the special value ``STDOUT`` (without single quotes) to print the CSV to stdout. - -See :ref:`shared-copy-options` for options that apply to both ``COPY TO`` and ``COPY FROM``. - -Options for ``COPY TO`` -``````````````````````` - -``MAXREQUESTS`` - The maximum number token ranges to fetch simultaneously. Defaults to 6. - -``PAGESIZE`` - The number of rows to fetch in a single page. Defaults to 1000. - -``PAGETIMEOUT`` - By default the page timeout is 10 seconds per 1000 entries - in the page size or 10 seconds if pagesize is smaller. - -``BEGINTOKEN``, ``ENDTOKEN`` - Token range to export. Defaults to exporting the full ring. - -``MAXOUTPUTSIZE`` - The maximum size of the output file measured in number of lines; - beyond this maximum the output file will be split into segments. - -1 means unlimited, and is the default. - -``ENCODING`` - The encoding used for characters. Defaults to ``utf8``. - -``COPY FROM`` -~~~~~~~~~~~~~ -Copies data from a CSV file to table. - -`Usage`:: - - COPY
[(, ...)] FROM WITH [AND ...] - -If no columns are specified, all columns from the CSV file will be copied to the table. A subset -of columns to copy may be specified by adding a comma-separated list of column names surrounded -by parenthesis after the table name. - -The ```` should be a string literal (with single quotes) representing a path to the -source file. This can also the special value ``STDIN`` (without single quotes) to read the -CSV data from stdin. - -See :ref:`shared-copy-options` for options that apply to both ``COPY TO`` and ``COPY FROM``. - -Options for ``COPY TO`` -``````````````````````` - -``INGESTRATE`` - The maximum number of rows to process per second. Defaults to 100000. - -``MAXROWS`` - The maximum number of rows to import. -1 means unlimited, and is the default. - -``SKIPROWS`` - A number of initial rows to skip. Defaults to 0. - -``SKIPCOLS`` - A comma-separated list of column names to ignore. By default, no columns are skipped. - -``MAXPARSEERRORS`` - The maximum global number of parsing errors to ignore. -1 means unlimited, and is the default. - -``MAXINSERTERRORS`` - The maximum global number of insert errors to ignore. -1 means unlimited. The default is 1000. - -``ERRFILE`` = - A file to store all rows that could not be imported, by default this is ``import__
.err`` where ```` is - your keyspace and ``
`` is your table name. - -``MAXBATCHSIZE`` - The max number of rows inserted in a single batch. Defaults to 20. - -``MINBATCHSIZE`` - The min number of rows inserted in a single batch. Defaults to 2. - -``CHUNKSIZE`` - The number of rows that are passed to child worker processes from the main process at a time. Defaults to 1000. - -.. _shared-copy-options: - -Shared COPY Options -``````````````````` - -Options that are common to both ``COPY TO`` and ``COPY FROM``. - -``NULLVAL`` - The string placeholder for null values. Defaults to ``null``. - -``HEADER`` - For ``COPY TO``, controls whether the first line in the CSV output file will contain the column names. For COPY FROM, - specifies whether the first line in the CSV input file contains column names. Defaults to ``false``. - -``DECIMALSEP`` - The character that is used as the decimal point separator. Defaults to ``.``. - -``THOUSANDSSEP`` - The character that is used to separate thousands. Defaults to the empty string. - -``BOOLSTYlE`` - The string literal format for boolean values. Defaults to ``True,False``. - -``NUMPROCESSES`` - The number of child worker processes to create for ``COPY`` tasks. Defaults to a max of 4 for ``COPY FROM`` and 16 - for ``COPY TO``. However, at most (num_cores - 1) processes will be created. - -``MAXATTEMPTS`` - The maximum number of failed attempts to fetch a range of data (when using ``COPY TO``) or insert a chunk of data - (when using ``COPY FROM``) before giving up. Defaults to 5. - -``REPORTFREQUENCY`` - How often status updates are refreshed, in seconds. Defaults to 0.25. - -``RATEFILE`` - An optional file to output rate statistics to. By default, statistics are not output to a file. diff --git a/doc/source/tools/index.rst b/doc/source/tools/index.rst deleted file mode 100644 index d28929c842cc..000000000000 --- a/doc/source/tools/index.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Cassandra Tools -=============== - -This section describes the command line tools provided with Apache Cassandra. - -.. toctree:: - :maxdepth: 3 - - cqlsh - nodetool/nodetool - sstable/index - cassandra_stress diff --git a/doc/source/tools/sstable/index.rst b/doc/source/tools/sstable/index.rst deleted file mode 100644 index b9e483f45f66..000000000000 --- a/doc/source/tools/sstable/index.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -SSTable Tools -============= - -This section describes the functionality of the various sstable tools. - -Cassandra must be stopped before these tools are executed, or unexpected results will occur. Note: the scripts do not verify that Cassandra is stopped. - -.. toctree:: - :maxdepth: 2 - - sstabledump - sstableexpiredblockers - sstablelevelreset - sstableloader - sstablemetadata - sstableofflinerelevel - sstablerepairedset - sstablescrub - sstablesplit - sstableupgrade - sstableutil - sstableverify - diff --git a/doc/source/tools/sstable/sstabledump.rst b/doc/source/tools/sstable/sstabledump.rst deleted file mode 100644 index 8f38afa09632..000000000000 --- a/doc/source/tools/sstable/sstabledump.rst +++ /dev/null @@ -1,294 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstabledump ------------ - -Dump contents of a given SSTable to standard output in JSON format. - -You must supply exactly one sstable. - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ -sstabledump - -=================================== ================================================================================ --d CQL row per line internal representation --e Enumerate partition keys only --k Partition key --x Excluded partition key(s) --t Print raw timestamps instead of iso8601 date strings --l Output each row as a separate JSON object -=================================== ================================================================================ - -If necessary, use sstableutil first to find out the sstables used by a table. - -Dump entire table -^^^^^^^^^^^^^^^^^ - -Dump the entire table without any options. - -Example:: - - sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db > eventlog_dump_2018Jul26 - - cat eventlog_dump_2018Jul26 - [ - { - "partition" : { - "key" : [ "3578d7de-c60d-4599-aefb-3f22a07b2bc6" ], - "position" : 0 - }, - "rows" : [ - { - "type" : "row", - "position" : 61, - "liveness_info" : { "tstamp" : "2018-07-20T20:23:08.378711Z" }, - "cells" : [ - { "name" : "event", "value" : "party" }, - { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:08.384Z" }, - { "name" : "source", "value" : "asdf" } - ] - } - ] - }, - { - "partition" : { - "key" : [ "d18250c0-84fc-4d40-b957-4248dc9d790e" ], - "position" : 62 - }, - "rows" : [ - { - "type" : "row", - "position" : 123, - "liveness_info" : { "tstamp" : "2018-07-20T20:23:07.783522Z" }, - "cells" : [ - { "name" : "event", "value" : "party" }, - { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:07.789Z" }, - { "name" : "source", "value" : "asdf" } - ] - } - ] - }, - { - "partition" : { - "key" : [ "cf188983-d85b-48d6-9365-25005289beb2" ], - "position" : 124 - }, - "rows" : [ - { - "type" : "row", - "position" : 182, - "liveness_info" : { "tstamp" : "2018-07-20T20:22:27.028809Z" }, - "cells" : [ - { "name" : "event", "value" : "party" }, - { "name" : "insertedtimestamp", "value" : "2018-07-20 20:22:27.055Z" }, - { "name" : "source", "value" : "asdf" } - ] - } - ] - } - ] - -Dump table in a more manageable format -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Use the -l option to dump each row as a separate JSON object. This will make the output easier to manipulate for large data sets. ref: https://issues.apache.org/jira/browse/CASSANDRA-13848 - -Example:: - - sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -l > eventlog_dump_2018Jul26_justlines - - cat eventlog_dump_2018Jul26_justlines - [ - { - "partition" : { - "key" : [ "3578d7de-c60d-4599-aefb-3f22a07b2bc6" ], - "position" : 0 - }, - "rows" : [ - { - "type" : "row", - "position" : 61, - "liveness_info" : { "tstamp" : "2018-07-20T20:23:08.378711Z" }, - "cells" : [ - { "name" : "event", "value" : "party" }, - { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:08.384Z" }, - { "name" : "source", "value" : "asdf" } - ] - } - ] - }, - { - "partition" : { - "key" : [ "d18250c0-84fc-4d40-b957-4248dc9d790e" ], - "position" : 62 - }, - "rows" : [ - { - "type" : "row", - "position" : 123, - "liveness_info" : { "tstamp" : "2018-07-20T20:23:07.783522Z" }, - "cells" : [ - { "name" : "event", "value" : "party" }, - { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:07.789Z" }, - { "name" : "source", "value" : "asdf" } - ] - } - ] - }, - { - "partition" : { - "key" : [ "cf188983-d85b-48d6-9365-25005289beb2" ], - "position" : 124 - }, - "rows" : [ - { - "type" : "row", - "position" : 182, - "liveness_info" : { "tstamp" : "2018-07-20T20:22:27.028809Z" }, - "cells" : [ - { "name" : "event", "value" : "party" }, - { "name" : "insertedtimestamp", "value" : "2018-07-20 20:22:27.055Z" }, - { "name" : "source", "value" : "asdf" } - ] - } - ] - } - -Dump only keys -^^^^^^^^^^^^^^ - -Dump only the keys by using the -e option. - -Example:: - - sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -e > eventlog_dump_2018Jul26_justkeys - - cat eventlog_dump_2018Jul26b - [ [ "3578d7de-c60d-4599-aefb-3f22a07b2bc6" ], [ "d18250c0-84fc-4d40-b957-4248dc9d790e" ], [ "cf188983-d85b-48d6-9365-25005289beb2" ] - -Dump row for a single key -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Dump a single key using the -k option. - -Example:: - - sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -k 3578d7de-c60d-4599-aefb-3f22a07b2bc6 > eventlog_dump_2018Jul26_singlekey - - cat eventlog_dump_2018Jul26_singlekey - [ - { - "partition" : { - "key" : [ "3578d7de-c60d-4599-aefb-3f22a07b2bc6" ], - "position" : 0 - }, - "rows" : [ - { - "type" : "row", - "position" : 61, - "liveness_info" : { "tstamp" : "2018-07-20T20:23:08.378711Z" }, - "cells" : [ - { "name" : "event", "value" : "party" }, - { "name" : "insertedtimestamp", "value" : "2018-07-20 20:23:08.384Z" }, - { "name" : "source", "value" : "asdf" } - ] - } - ] - } - -Exclude a key or keys in dump of rows -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Dump a table except for the rows excluded with the -x option. Multiple keys can be used. - -Example:: - - sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -x 3578d7de-c60d-4599-aefb-3f22a07b2bc6 d18250c0-84fc-4d40-b957-4248dc9d790e > eventlog_dump_2018Jul26_excludekeys - - cat eventlog_dump_2018Jul26_excludekeys - [ - { - "partition" : { - "key" : [ "cf188983-d85b-48d6-9365-25005289beb2" ], - "position" : 0 - }, - "rows" : [ - { - "type" : "row", - "position" : 182, - "liveness_info" : { "tstamp" : "2018-07-20T20:22:27.028809Z" }, - "cells" : [ - { "name" : "event", "value" : "party" }, - { "name" : "insertedtimestamp", "value" : "2018-07-20 20:22:27.055Z" }, - { "name" : "source", "value" : "asdf" } - ] - } - ] - } - -Display raw timestamps -^^^^^^^^^^^^^^^^^^^^^^ - -By default, dates are displayed in iso8601 date format. Using the -t option will dump the data with the raw timestamp. - -Example:: - - sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -t -k cf188983-d85b-48d6-9365-25005289beb2 > eventlog_dump_2018Jul26_times - - cat eventlog_dump_2018Jul26_times - [ - { - "partition" : { - "key" : [ "cf188983-d85b-48d6-9365-25005289beb2" ], - "position" : 124 - }, - "rows" : [ - { - "type" : "row", - "position" : 182, - "liveness_info" : { "tstamp" : "1532118147028809" }, - "cells" : [ - { "name" : "event", "value" : "party" }, - { "name" : "insertedtimestamp", "value" : "2018-07-20 20:22:27.055Z" }, - { "name" : "source", "value" : "asdf" } - ] - } - ] - } - - -Display internal structure in output -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Dump the table in a format that reflects the internal structure. - -Example:: - - sstabledump /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db -d > eventlog_dump_2018Jul26_d - - cat eventlog_dump_2018Jul26_d - [3578d7de-c60d-4599-aefb-3f22a07b2bc6]@0 Row[info=[ts=1532118188378711] ]: | [event=party ts=1532118188378711], [insertedtimestamp=2018-07-20 20:23Z ts=1532118188378711], [source=asdf ts=1532118188378711] - [d18250c0-84fc-4d40-b957-4248dc9d790e]@62 Row[info=[ts=1532118187783522] ]: | [event=party ts=1532118187783522], [insertedtimestamp=2018-07-20 20:23Z ts=1532118187783522], [source=asdf ts=1532118187783522] - [cf188983-d85b-48d6-9365-25005289beb2]@124 Row[info=[ts=1532118147028809] ]: | [event=party ts=1532118147028809], [insertedtimestamp=2018-07-20 20:22Z ts=1532118147028809], [source=asdf ts=1532118147028809] - - - - - diff --git a/doc/source/tools/sstable/sstableexpiredblockers.rst b/doc/source/tools/sstable/sstableexpiredblockers.rst deleted file mode 100644 index ec837944c824..000000000000 --- a/doc/source/tools/sstable/sstableexpiredblockers.rst +++ /dev/null @@ -1,48 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstableexpiredblockers ----------------------- - -During compaction, entire sstables can be dropped if they contain only expired tombstones, and if it is guaranteed that the data is not newer than the data in other sstables. An expired sstable can be blocked from getting dropped if its newest timestamp is newer than the oldest data in another sstable. - -This tool is used to list all sstables that are blocking other sstables from getting dropped (by having older data than the newest tombstone in an expired sstable) so a user can figure out why certain sstables are still on disk. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-10015 - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ - -sstableexpiredblockers
- -Output blocked sstables -^^^^^^^^^^^^^^^^^^^^^^^ - -If the sstables exist for the table, but no tables have older data than the newest tombstone in an expired sstable, the script will return nothing. - -Otherwise, the script will return ` blocks <#> expired sstables from getting dropped` followed by a list of the blocked sstables. - -Example:: - - sstableexpiredblockers keyspace1 standard1 - - [BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-0665ae80b2d711e886c66d2c86545d91/mc-2-big-Data.db') (minTS = 5, maxTS = 5, maxLDT = 2147483647)], blocks 1 expired sstables from getting dropped: [BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-0665ae80b2d711e886c66d2c86545d91/mc-3-big-Data.db') (minTS = 1536349775157606, maxTS = 1536349780311159, maxLDT = 1536349780)], - - [BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-0665ae80b2d711e886c66d2c86545d91/mc-1-big-Data.db') (minTS = 1, maxTS = 10, maxLDT = 2147483647)], blocks 1 expired sstables from getting dropped: [BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-0665ae80b2d711e886c66d2c86545d91/mc-3-big-Data.db') (minTS = 1536349775157606, maxTS = 1536349780311159, maxLDT = 1536349780)], - - diff --git a/doc/source/tools/sstable/sstablelevelreset.rst b/doc/source/tools/sstable/sstablelevelreset.rst deleted file mode 100644 index 7069094dd2d4..000000000000 --- a/doc/source/tools/sstable/sstablelevelreset.rst +++ /dev/null @@ -1,82 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstablelevelreset ------------------ - -If LeveledCompactionStrategy is set, this script can be used to reset level to 0 on a given set of sstables. This is useful if you want to, for example, change the minimum sstable size, and therefore restart the compaction process using this new configuration. - -See http://cassandra.apache.org/doc/latest/operating/compaction.html#leveled-compaction-strategy for information on how levels are used in this compaction strategy. - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-5271 - -Usage -^^^^^ - -sstablelevelreset --really-reset
- -The really-reset flag is required, to ensure this intrusive command is not run accidentally. - -Table not found -^^^^^^^^^^^^^^^ - -If the keyspace and/or table is not in the schema (e.g., if you misspelled the table name), the script will return an error. - -Example:: - - ColumnFamily not found: keyspace/evenlog. - -Table has no sstables -^^^^^^^^^^^^^^^^^^^^^ - -Example:: - - Found no sstables, did you give the correct keyspace/table? - - -Table already at level 0 -^^^^^^^^^^^^^^^^^^^^^^^^ - -The script will not set the level if it is already set to 0. - -Example:: - - Skipped /var/lib/cassandra/data/keyspace/eventlog-65c429e08c5a11e8939edf4f403979ef/mc-1-big-Data.db since it is already on level 0 - -Table levels reduced to 0 -^^^^^^^^^^^^^^^^^^^^^^^^^ - -If the level is not already 0, then this will reset it to 0. - -Example:: - - sstablemetadata /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db | grep -i level - SSTable Level: 1 - - sstablelevelreset --really-reset keyspace eventlog - Changing level from 1 to 0 on /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db - - sstablemetadata /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db | grep -i level - SSTable Level: 0 - - - - - - - diff --git a/doc/source/tools/sstable/sstableloader.rst b/doc/source/tools/sstable/sstableloader.rst deleted file mode 100644 index a9b37342c3dc..000000000000 --- a/doc/source/tools/sstable/sstableloader.rst +++ /dev/null @@ -1,273 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstableloader ---------------- - -Bulk-load the sstables found in the directory to the configured cluster. The parent directories of are used as the target keyspace/table name. For example, to load an sstable named ma-1-big-Data.db into keyspace1/standard1, you will need to have the files ma-1-big-Data.db and ma-1-big-Index.db in a directory /path/to/keyspace1/standard1/. The tool will create new sstables, and does not clean up your copied files. - -Several of the options listed below don't work quite as intended, and in those cases, workarounds are mentioned for specific use cases. - -To avoid having the sstable files to be loaded compacted while reading them, place the files in an alternate keyspace/table path than the data directory. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-1278 - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ - -sstableloader - -=================================================== ================================================================================ --d, --nodes Required. Try to connect to these hosts (comma-separated) - initially for ring information --u, --username username for Cassandra authentication --pw, --password password for Cassandra authentication --p, --port port used for native connection (default 9042) --sp, --storage-port port used for internode communication (default 7000) --ssp, --ssl-storage-port port used for TLS internode communication (default 7001) ---no-progress don't display progress --t, --throttle throttle speed in Mbits (default unlimited) --idct, --inter-dc-throttle inter-datacenter throttle speed in Mbits (default unlimited) --cph, --connections-per-host number of concurrent connections-per-host --i, --ignore don't stream to this (comma separated) list of nodes --alg, --ssl-alg Client SSL: algorithm (default: SunX509) --ciphers, --ssl-ciphers Client SSL: comma-separated list of encryption suites to use --ks, --keystore Client SSL: full path to keystore --kspw, --keystore-password Client SSL: password of the keystore --st, --store-type Client SSL: type of store --ts, --truststore Client SSL: full path to truststore --tspw, --truststore-password Client SSL: password of the truststore --prtcl, --ssl-protocol Client SSL: connections protocol to use (default: TLS) --ap, --auth-provider custom AuthProvider class name for cassandra authentication --f, --conf-path cassandra.yaml file path for streaming throughput and client/server SSL --v, --verbose verbose output --h, --help display this help message -=================================================== ================================================================================ - -You can provide a cassandra.yaml file with the -f command line option to set up streaming throughput, and client and server encryption options. Only stream_throughput_outbound_megabits_per_sec, server_encryption_options, and client_encryption_options are read from yaml. You can override options read from cassandra.yaml with corresponding command line options. - -Load sstables from a Snapshot -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Copy the snapshot sstables into an accessible directory and use sstableloader to restore them. - -Example:: - - cp snapshots/1535397029191/* /path/to/keyspace1/standard1/ - - sstableloader --nodes 172.17.0.2 /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ - Established connection to initial hosts - Opening sstables and calculating sections to stream - Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ma-3-big-Data.db to [/172.17.0.2] - progress: [/172.17.0.2]0:1/1 100% total: 100% 0 MB/s(avg: 1 MB/s) - Summary statistics: - Connections per host: : 1 - Total files transferred: : 1 - Total bytes transferred: : 4700000 - Total duration (ms): : 4390 - Average transfer rate (MB/s): : 1 - Peak transfer rate (MB/s): : 1 - -The -d or --nodes option is required, or the script will not run. - -Example:: - - sstableloader /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ - Initial hosts must be specified (-d) - -Use a Config File for SSL Clusters -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -If SSL encryption is enabled in the cluster, use the --conf-path option with sstableloader to point the tool to the cassandra.yaml with the relevant server_encryption_options (e.g., truststore location, algorithm). This will work better than passing individual ssl options shown above to sstableloader on the command line. - -Example:: - - sstableloader --nodes 172.17.0.2 --conf-path /etc/cassandra/cassandra.yaml /var/lib/cassandra/loadme/keyspace1/standard1-0974e5a0aa5811e8a0a06d2c86545d91/snapshots/ - Established connection to initial hosts - Opening sstables and calculating sections to stream - Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-0974e5a0aa5811e8a0a06d2c86545d91/mc-1-big-Data.db to [/172.17.0.2] - progress: [/172.17.0.2]0:0/1 1 % total: 1% 9.165KiB/s (avg: 9.165KiB/s) - progress: [/172.17.0.2]0:0/1 2 % total: 2% 5.147MiB/s (avg: 18.299KiB/s) - progress: [/172.17.0.2]0:0/1 4 % total: 4% 9.751MiB/s (avg: 27.423KiB/s) - progress: [/172.17.0.2]0:0/1 5 % total: 5% 8.203MiB/s (avg: 36.524KiB/s) - ... - progress: [/172.17.0.2]0:1/1 100% total: 100% 0.000KiB/s (avg: 480.513KiB/s) - - Summary statistics: - Connections per host : 1 - Total files transferred : 1 - Total bytes transferred : 4.387MiB - Total duration : 9356 ms - Average transfer rate : 480.105KiB/s - Peak transfer rate : 586.410KiB/s - -Hide Progress Output -^^^^^^^^^^^^^^^^^^^^ - -To hide the output of progress and the summary statistics (e.g., if you wanted to use this tool in a script), use the --no-progress option. - -Example:: - - sstableloader --nodes 172.17.0.2 --no-progress /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ - Established connection to initial hosts - Opening sstables and calculating sections to stream - Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ma-4-big-Data.db to [/172.17.0.2] - -Get More Detail -^^^^^^^^^^^^^^^ - -Using the --verbose option will provide much more progress output. - -Example:: - - sstableloader --nodes 172.17.0.2 --verbose /var/lib/cassandra/loadme/keyspace1/standard1-0974e5a0aa5811e8a0a06d2c86545d91/ - Established connection to initial hosts - Opening sstables and calculating sections to stream - Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-0974e5a0aa5811e8a0a06d2c86545d91/mc-1-big-Data.db to [/172.17.0.2] - progress: [/172.17.0.2]0:0/1 1 % total: 1% 12.056KiB/s (avg: 12.056KiB/s) - progress: [/172.17.0.2]0:0/1 2 % total: 2% 9.092MiB/s (avg: 24.081KiB/s) - progress: [/172.17.0.2]0:0/1 4 % total: 4% 18.832MiB/s (avg: 36.099KiB/s) - progress: [/172.17.0.2]0:0/1 5 % total: 5% 2.253MiB/s (avg: 47.882KiB/s) - progress: [/172.17.0.2]0:0/1 7 % total: 7% 6.388MiB/s (avg: 59.743KiB/s) - progress: [/172.17.0.2]0:0/1 8 % total: 8% 14.606MiB/s (avg: 71.635KiB/s) - progress: [/172.17.0.2]0:0/1 9 % total: 9% 8.880MiB/s (avg: 83.465KiB/s) - progress: [/172.17.0.2]0:0/1 11 % total: 11% 5.217MiB/s (avg: 95.176KiB/s) - progress: [/172.17.0.2]0:0/1 12 % total: 12% 12.563MiB/s (avg: 106.975KiB/s) - progress: [/172.17.0.2]0:0/1 14 % total: 14% 2.550MiB/s (avg: 118.322KiB/s) - progress: [/172.17.0.2]0:0/1 15 % total: 15% 16.638MiB/s (avg: 130.063KiB/s) - progress: [/172.17.0.2]0:0/1 17 % total: 17% 17.270MiB/s (avg: 141.793KiB/s) - progress: [/172.17.0.2]0:0/1 18 % total: 18% 11.280MiB/s (avg: 153.452KiB/s) - progress: [/172.17.0.2]0:0/1 19 % total: 19% 2.903MiB/s (avg: 164.603KiB/s) - progress: [/172.17.0.2]0:0/1 21 % total: 21% 6.744MiB/s (avg: 176.061KiB/s) - progress: [/172.17.0.2]0:0/1 22 % total: 22% 6.011MiB/s (avg: 187.440KiB/s) - progress: [/172.17.0.2]0:0/1 24 % total: 24% 9.690MiB/s (avg: 198.920KiB/s) - progress: [/172.17.0.2]0:0/1 25 % total: 25% 11.481MiB/s (avg: 210.412KiB/s) - progress: [/172.17.0.2]0:0/1 27 % total: 27% 9.957MiB/s (avg: 221.848KiB/s) - progress: [/172.17.0.2]0:0/1 28 % total: 28% 10.270MiB/s (avg: 233.265KiB/s) - progress: [/172.17.0.2]0:0/1 29 % total: 29% 7.812MiB/s (avg: 244.571KiB/s) - progress: [/172.17.0.2]0:0/1 31 % total: 31% 14.843MiB/s (avg: 256.021KiB/s) - progress: [/172.17.0.2]0:0/1 32 % total: 32% 11.457MiB/s (avg: 267.394KiB/s) - progress: [/172.17.0.2]0:0/1 34 % total: 34% 6.550MiB/s (avg: 278.536KiB/s) - progress: [/172.17.0.2]0:0/1 35 % total: 35% 9.115MiB/s (avg: 289.782KiB/s) - progress: [/172.17.0.2]0:0/1 37 % total: 37% 11.054MiB/s (avg: 301.064KiB/s) - progress: [/172.17.0.2]0:0/1 38 % total: 38% 10.449MiB/s (avg: 312.307KiB/s) - progress: [/172.17.0.2]0:0/1 39 % total: 39% 1.646MiB/s (avg: 321.665KiB/s) - progress: [/172.17.0.2]0:0/1 41 % total: 41% 13.300MiB/s (avg: 332.872KiB/s) - progress: [/172.17.0.2]0:0/1 42 % total: 42% 14.370MiB/s (avg: 344.082KiB/s) - progress: [/172.17.0.2]0:0/1 44 % total: 44% 16.734MiB/s (avg: 355.314KiB/s) - progress: [/172.17.0.2]0:0/1 45 % total: 45% 22.245MiB/s (avg: 366.592KiB/s) - progress: [/172.17.0.2]0:0/1 47 % total: 47% 25.561MiB/s (avg: 377.882KiB/s) - progress: [/172.17.0.2]0:0/1 48 % total: 48% 24.543MiB/s (avg: 389.155KiB/s) - progress: [/172.17.0.2]0:0/1 49 % total: 49% 4.894MiB/s (avg: 399.688KiB/s) - progress: [/172.17.0.2]0:0/1 51 % total: 51% 8.331MiB/s (avg: 410.559KiB/s) - progress: [/172.17.0.2]0:0/1 52 % total: 52% 5.771MiB/s (avg: 421.150KiB/s) - progress: [/172.17.0.2]0:0/1 54 % total: 54% 8.738MiB/s (avg: 431.983KiB/s) - progress: [/172.17.0.2]0:0/1 55 % total: 55% 3.406MiB/s (avg: 441.911KiB/s) - progress: [/172.17.0.2]0:0/1 56 % total: 56% 9.791MiB/s (avg: 452.730KiB/s) - progress: [/172.17.0.2]0:0/1 58 % total: 58% 3.401MiB/s (avg: 462.545KiB/s) - progress: [/172.17.0.2]0:0/1 59 % total: 59% 5.280MiB/s (avg: 472.840KiB/s) - progress: [/172.17.0.2]0:0/1 61 % total: 61% 12.232MiB/s (avg: 483.663KiB/s) - progress: [/172.17.0.2]0:0/1 62 % total: 62% 9.258MiB/s (avg: 494.325KiB/s) - progress: [/172.17.0.2]0:0/1 64 % total: 64% 2.877MiB/s (avg: 503.640KiB/s) - progress: [/172.17.0.2]0:0/1 65 % total: 65% 7.461MiB/s (avg: 514.078KiB/s) - progress: [/172.17.0.2]0:0/1 66 % total: 66% 24.247MiB/s (avg: 525.018KiB/s) - progress: [/172.17.0.2]0:0/1 68 % total: 68% 9.348MiB/s (avg: 535.563KiB/s) - progress: [/172.17.0.2]0:0/1 69 % total: 69% 5.130MiB/s (avg: 545.563KiB/s) - progress: [/172.17.0.2]0:0/1 71 % total: 71% 19.861MiB/s (avg: 556.392KiB/s) - progress: [/172.17.0.2]0:0/1 72 % total: 72% 15.501MiB/s (avg: 567.122KiB/s) - progress: [/172.17.0.2]0:0/1 74 % total: 74% 5.031MiB/s (avg: 576.996KiB/s) - progress: [/172.17.0.2]0:0/1 75 % total: 75% 22.771MiB/s (avg: 587.813KiB/s) - progress: [/172.17.0.2]0:0/1 76 % total: 76% 22.780MiB/s (avg: 598.619KiB/s) - progress: [/172.17.0.2]0:0/1 78 % total: 78% 20.684MiB/s (avg: 609.386KiB/s) - progress: [/172.17.0.2]0:0/1 79 % total: 79% 22.920MiB/s (avg: 620.173KiB/s) - progress: [/172.17.0.2]0:0/1 81 % total: 81% 7.458MiB/s (avg: 630.333KiB/s) - progress: [/172.17.0.2]0:0/1 82 % total: 82% 22.993MiB/s (avg: 641.090KiB/s) - progress: [/172.17.0.2]0:0/1 84 % total: 84% 21.392MiB/s (avg: 651.814KiB/s) - progress: [/172.17.0.2]0:0/1 85 % total: 85% 7.732MiB/s (avg: 661.938KiB/s) - progress: [/172.17.0.2]0:0/1 86 % total: 86% 3.476MiB/s (avg: 670.892KiB/s) - progress: [/172.17.0.2]0:0/1 88 % total: 88% 19.889MiB/s (avg: 681.521KiB/s) - progress: [/172.17.0.2]0:0/1 89 % total: 89% 21.077MiB/s (avg: 692.162KiB/s) - progress: [/172.17.0.2]0:0/1 91 % total: 91% 24.062MiB/s (avg: 702.835KiB/s) - progress: [/172.17.0.2]0:0/1 92 % total: 92% 19.798MiB/s (avg: 713.431KiB/s) - progress: [/172.17.0.2]0:0/1 94 % total: 94% 17.591MiB/s (avg: 723.965KiB/s) - progress: [/172.17.0.2]0:0/1 95 % total: 95% 13.725MiB/s (avg: 734.361KiB/s) - progress: [/172.17.0.2]0:0/1 96 % total: 96% 16.737MiB/s (avg: 744.846KiB/s) - progress: [/172.17.0.2]0:0/1 98 % total: 98% 22.701MiB/s (avg: 755.443KiB/s) - progress: [/172.17.0.2]0:0/1 99 % total: 99% 18.718MiB/s (avg: 765.954KiB/s) - progress: [/172.17.0.2]0:1/1 100% total: 100% 6.613MiB/s (avg: 767.802KiB/s) - progress: [/172.17.0.2]0:1/1 100% total: 100% 0.000KiB/s (avg: 670.295KiB/s) - - Summary statistics: - Connections per host : 1 - Total files transferred : 1 - Total bytes transferred : 4.387MiB - Total duration : 6706 ms - Average transfer rate : 669.835KiB/s - Peak transfer rate : 767.802KiB/s - - -Throttling Load -^^^^^^^^^^^^^^^ - -To prevent the table loader from overloading the system resources, you can throttle the process with the --throttle option. The default is unlimited (no throttling). Throttle units are in megabits. Note that the total duration is increased in the example below. - -Example:: - - sstableloader --nodes 172.17.0.2 --throttle 1 /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ - Established connection to initial hosts - Opening sstables and calculating sections to stream - Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ma-6-big-Data.db to [/172.17.0.2] - progress: [/172.17.0.2]0:1/1 100% total: 100% 0 MB/s(avg: 0 MB/s) - Summary statistics: - Connections per host: : 1 - Total files transferred: : 1 - Total bytes transferred: : 4595705 - Total duration (ms): : 37634 - Average transfer rate (MB/s): : 0 - Peak transfer rate (MB/s): : 0 - -Speeding up Load -^^^^^^^^^^^^^^^^ - -To speed up the load process, the number of connections per host can be increased. - -Example:: - - sstableloader --nodes 172.17.0.2 --connections-per-host 100 /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ - Established connection to initial hosts - Opening sstables and calculating sections to stream - Streaming relevant part of /var/lib/cassandra/loadme/keyspace1/standard1-f8a4fa30aa2a11e8af27091830ac5256/ma-9-big-Data.db to [/172.17.0.2] - progress: [/172.17.0.2]0:1/1 100% total: 100% 0 MB/s(avg: 1 MB/s) - Summary statistics: - Connections per host: : 100 - Total files transferred: : 1 - Total bytes transferred: : 4595705 - Total duration (ms): : 3486 - Average transfer rate (MB/s): : 1 - Peak transfer rate (MB/s): : 1 - -This small data set doesn't benefit much from the increase in connections per host, but note that the total duration has decreased in this example. - - - - - - - - - diff --git a/doc/source/tools/sstable/sstablemetadata.rst b/doc/source/tools/sstable/sstablemetadata.rst deleted file mode 100644 index 0a7a42211199..000000000000 --- a/doc/source/tools/sstable/sstablemetadata.rst +++ /dev/null @@ -1,300 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstablemetadata ---------------- - -Print information about an sstable from the related Statistics.db and Summary.db files to standard output. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-7159 and https://issues.apache.org/jira/browse/CASSANDRA-10838 - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ - -sstablemetadata - -========================= ================================================================================ ---gc_grace_seconds The gc_grace_seconds to use when calculating droppable tombstones -========================= ================================================================================ - -Print all the metadata -^^^^^^^^^^^^^^^^^^^^^^ - -Run sstablemetadata against the *Data.db file(s) related to a table. If necessary, find the *Data.db file(s) using sstableutil. - -Example:: - - sstableutil keyspace1 standard1 | grep Data - /var/lib/cassandra/data/keyspace1/standard1-f6845640a6cb11e8b6836d2c86545d91/mc-1-big-Data.db - - sstablemetadata /var/lib/cassandra/data/keyspace1/standard1-f6845640a6cb11e8b6836d2c86545d91/mc-1-big-Data.db - - SSTable: /var/lib/cassandra/data/keyspace1/standard1-f6845640a6cb11e8b6836d2c86545d91/mc-1-big - Partitioner: org.apache.cassandra.dht.Murmur3Partitioner - Bloom Filter FP chance: 0.010000 - Minimum timestamp: 1535025576141000 - Maximum timestamp: 1535025604309000 - SSTable min local deletion time: 2147483647 - SSTable max local deletion time: 2147483647 - Compressor: org.apache.cassandra.io.compress.LZ4Compressor - TTL min: 86400 - TTL max: 86400 - First token: -9223004712949498654 (key=39373333373831303130) - Last token: 9222554117157811897 (key=4f3438394e39374d3730) - Estimated droppable tombstones: 0.9188263888888889 - SSTable Level: 0 - Repaired at: 0 - Replay positions covered: {CommitLogPosition(segmentId=1535025390651, position=226400)=CommitLogPosition(segmentId=1535025390651, position=6849139)} - totalColumnsSet: 100000 - totalRows: 20000 - Estimated tombstone drop times: - 1535039100: 80390 - 1535039160: 5645 - 1535039220: 13965 - Count Row Size Cell Count - 1 0 0 - 2 0 0 - 3 0 0 - 4 0 0 - 5 0 20000 - 6 0 0 - 7 0 0 - 8 0 0 - 10 0 0 - 12 0 0 - 14 0 0 - 17 0 0 - 20 0 0 - 24 0 0 - 29 0 0 - 35 0 0 - 42 0 0 - 50 0 0 - 60 0 0 - 72 0 0 - 86 0 0 - 103 0 0 - 124 0 0 - 149 0 0 - 179 0 0 - 215 0 0 - 258 20000 0 - 310 0 0 - 372 0 0 - 446 0 0 - 535 0 0 - 642 0 0 - 770 0 0 - 924 0 0 - 1109 0 0 - 1331 0 0 - 1597 0 0 - 1916 0 0 - 2299 0 0 - 2759 0 0 - 3311 0 0 - 3973 0 0 - 4768 0 0 - 5722 0 0 - 6866 0 0 - 8239 0 0 - 9887 0 0 - 11864 0 0 - 14237 0 0 - 17084 0 0 - 20501 0 0 - 24601 0 0 - 29521 0 0 - 35425 0 0 - 42510 0 0 - 51012 0 0 - 61214 0 0 - 73457 0 0 - 88148 0 0 - 105778 0 0 - 126934 0 0 - 152321 0 0 - 182785 0 0 - 219342 0 0 - 263210 0 0 - 315852 0 0 - 379022 0 0 - 454826 0 0 - 545791 0 0 - 654949 0 0 - 785939 0 0 - 943127 0 0 - 1131752 0 0 - 1358102 0 0 - 1629722 0 0 - 1955666 0 0 - 2346799 0 0 - 2816159 0 0 - 3379391 0 0 - 4055269 0 0 - 4866323 0 0 - 5839588 0 0 - 7007506 0 0 - 8409007 0 0 - 10090808 0 0 - 12108970 0 0 - 14530764 0 0 - 17436917 0 0 - 20924300 0 0 - 25109160 0 0 - 30130992 0 0 - 36157190 0 0 - 43388628 0 0 - 52066354 0 0 - 62479625 0 0 - 74975550 0 0 - 89970660 0 0 - 107964792 0 0 - 129557750 0 0 - 155469300 0 0 - 186563160 0 0 - 223875792 0 0 - 268650950 0 0 - 322381140 0 0 - 386857368 0 0 - 464228842 0 0 - 557074610 0 0 - 668489532 0 0 - 802187438 0 0 - 962624926 0 0 - 1155149911 0 0 - 1386179893 0 0 - 1663415872 0 0 - 1996099046 0 0 - 2395318855 0 0 - 2874382626 0 - 3449259151 0 - 4139110981 0 - 4966933177 0 - 5960319812 0 - 7152383774 0 - 8582860529 0 - 10299432635 0 - 12359319162 0 - 14831182994 0 - 17797419593 0 - 21356903512 0 - 25628284214 0 - 30753941057 0 - 36904729268 0 - 44285675122 0 - 53142810146 0 - 63771372175 0 - 76525646610 0 - 91830775932 0 - 110196931118 0 - 132236317342 0 - 158683580810 0 - 190420296972 0 - 228504356366 0 - 274205227639 0 - 329046273167 0 - 394855527800 0 - 473826633360 0 - 568591960032 0 - 682310352038 0 - 818772422446 0 - 982526906935 0 - 1179032288322 0 - 1414838745986 0 - Estimated cardinality: 20196 - EncodingStats minTTL: 0 - EncodingStats minLocalDeletionTime: 1442880000 - EncodingStats minTimestamp: 1535025565275000 - KeyType: org.apache.cassandra.db.marshal.BytesType - ClusteringTypes: [org.apache.cassandra.db.marshal.UTF8Type] - StaticColumns: {C3:org.apache.cassandra.db.marshal.BytesType, C4:org.apache.cassandra.db.marshal.BytesType, C0:org.apache.cassandra.db.marshal.BytesType, C1:org.apache.cassandra.db.marshal.BytesType, C2:org.apache.cassandra.db.marshal.BytesType} - RegularColumns: {} - -Specify gc grace seconds -^^^^^^^^^^^^^^^^^^^^^^^^ - -To see the ratio of droppable tombstones given a configured gc grace seconds, use the gc_grace_seconds option. Because the sstablemetadata tool doesn't access the schema directly, this is a way to more accurately estimate droppable tombstones -- for example, if you pass in gc_grace_seconds matching what is configured in the schema. The gc_grace_seconds value provided is subtracted from the curent machine time (in seconds). - -ref: https://issues.apache.org/jira/browse/CASSANDRA-12208 - -Example:: - - sstablemetadata /var/lib/cassandra/data/keyspace1/standard1-41b52700b4ed11e896476d2c86545d91/mc-12-big-Data.db | grep "Estimated tombstone drop times" -A4 - Estimated tombstone drop times: - 1536599100: 1 - 1536599640: 1 - 1536599700: 2 - - echo $(date +%s) - 1536602005 - - # if gc_grace_seconds was configured at 100, all of the tombstones would be currently droppable - sstablemetadata --gc_grace_seconds 100 /var/lib/cassandra/data/keyspace1/standard1-41b52700b4ed11e896476d2c86545d91/mc-12-big-Data.db | grep "Estimated droppable tombstones" - Estimated droppable tombstones: 4.0E-5 - - # if gc_grace_seconds was configured at 4700, some of the tombstones would be currently droppable - sstablemetadata --gc_grace_seconds 4700 /var/lib/cassandra/data/keyspace1/standard1-41b52700b4ed11e896476d2c86545d91/mc-12-big-Data.db | grep "Estimated droppable tombstones" - Estimated droppable tombstones: 9.61111111111111E-6 - - # if gc_grace_seconds was configured at 100, none of the tombstones would be currently droppable - sstablemetadata --gc_grace_seconds 5000 /var/lib/cassandra/data/keyspace1/standard1-41b52700b4ed11e896476d2c86545d91/mc-12-big-Data.db | grep "Estimated droppable tombstones" - Estimated droppable tombstones: 0.0 - -Explanation of each value printed above -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -=================================== ================================================================================ - Value Explanation -=================================== ================================================================================ -SSTable prefix of the sstable filenames related to this sstable -Partitioner partitioner type used to distribute data across nodes; defined in cassandra.yaml -Bloom Filter FP precision of Bloom filter used in reads; defined in the table definition -Minimum timestamp minimum timestamp of any entry in this sstable, in epoch microseconds -Maximum timestamp maximum timestamp of any entry in this sstable, in epoch microseconds -SSTable min local deletion time minimum timestamp of deletion date, based on TTL, in epoch seconds -SSTable max local deletion time maximum timestamp of deletion date, based on TTL, in epoch seconds -Compressor blank (-) by default; if not blank, indicates type of compression enabled on the table -TTL min time-to-live in seconds; default 0 unless defined in the table definition -TTL max time-to-live in seconds; default 0 unless defined in the table definition -First token lowest token and related key found in the sstable summary -Last token highest token and related key found in the sstable summary -Estimated droppable tombstones ratio of tombstones to columns, using configured gc grace seconds if relevant -SSTable level compaction level of this sstable, if leveled compaction (LCS) is used -Repaired at the timestamp this sstable was marked as repaired via sstablerepairedset, in epoch milliseconds -Replay positions covered the interval of time and commitlog positions related to this sstable -totalColumnsSet number of cells in the table -totalRows number of rows in the table -Estimated tombstone drop times approximate number of rows that will expire, ordered by epoch seconds -Count Row Size Cell Count two histograms in two columns; one represents distribution of Row Size - and the other represents distribution of Cell Count -Estimated cardinality an estimate of unique values, used for compaction -EncodingStats* minTTL in epoch milliseconds -EncodingStats* minLocalDeletionTime in epoch seconds -EncodingStats* minTimestamp in epoch microseconds -KeyType the type of partition key, useful in reading and writing data - from/to storage; defined in the table definition -ClusteringTypes the type of clustering key, useful in reading and writing data - from/to storage; defined in the table definition -StaticColumns a list of the shared columns in the table -RegularColumns a list of non-static, non-key columns in the table -=================================== ================================================================================ -* For the encoding stats values, the delta of this and the current epoch time is used when encoding and storing data in the most optimal way. - - - diff --git a/doc/source/tools/sstable/sstableofflinerelevel.rst b/doc/source/tools/sstable/sstableofflinerelevel.rst deleted file mode 100644 index c031d2987e24..000000000000 --- a/doc/source/tools/sstable/sstableofflinerelevel.rst +++ /dev/null @@ -1,95 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstableofflinerelevel ---------------------- - -When using LeveledCompactionStrategy, sstables can get stuck at L0 on a recently bootstrapped node, and compactions may never catch up. This tool is used to bump sstables into the highest level possible. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-8301 - -The way this is done is: sstables are storted by their last token. Given an original leveling like this (note that [ ] indicates token boundaries, not sstable size on disk; all sstables are the same size):: - - L3 [][][][][][][][][][][] - L2 [ ][ ][ ][ ] - L1 [ ][ ] - L0 [ ] - -Will look like this after being dropped to L0 and sorted by last token (and, to illustrate overlap, the overlapping ones are put on a new line):: - - [][][] - [ ][][][] - [ ] - [ ] - ... - -Then, we start iterating from the smallest last-token and adding all sstables that do not cause an overlap to a level. We will reconstruct the original leveling top-down. Whenever we add an sstable to the level, we remove it from the sorted list. Once we reach the end of the sorted list, we have a full level, and can start over with the level below. - -If we end up with more levels than expected, we put all levels exceeding the expected in L0, for example, original L0 files will most likely be put in a level of its own since they most often overlap many other sstables. - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ - -sstableofflinerelevel [--dry-run]
- -Doing a dry run -^^^^^^^^^^^^^^^ - -Use the --dry-run option to see the current level distribution and predicted level after the change. - -Example:: - - sstableofflinerelevel --dry-run keyspace eventlog - For sstables in /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753: - Current leveling: - L0=2 - Potential leveling: - L0=1 - L1=1 - -Running a relevel -^^^^^^^^^^^^^^^^^ - -Example:: - - sstableofflinerelevel keyspace eventlog - For sstables in /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753: - Current leveling: - L0=2 - New leveling: - L0=1 - L1=1 - -Keyspace or table not found -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -If an invalid keyspace and/or table is provided, an exception will be thrown. - -Example:: - - sstableofflinerelevel --dry-run keyspace evenlog - - Exception in thread "main" java.lang.IllegalArgumentException: Unknown keyspace/columnFamily keyspace1.evenlog - at org.apache.cassandra.tools.SSTableOfflineRelevel.main(SSTableOfflineRelevel.java:96) - - - - - - - diff --git a/doc/source/tools/sstable/sstablerepairedset.rst b/doc/source/tools/sstable/sstablerepairedset.rst deleted file mode 100644 index ebacef335c88..000000000000 --- a/doc/source/tools/sstable/sstablerepairedset.rst +++ /dev/null @@ -1,79 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstablerepairedset ------------------- - -Repairs can take a very long time in some environments, for large sizes of data. Use this tool to set the repairedAt status on a given set of sstables, so that repairs can be run on only un-repaired sstables if desired. - -Note that running a repair (e.g., via nodetool repair) doesn't set the status of this metadata. Only setting the status of this metadata via this tool does. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-5351 - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ -sstablerepairedset --really-set [-f | ] - -=================================== ================================================================================ ---really-set required if you want to really set the status ---is-repaired set the repairedAt status to the last modified time ---is-unrepaired set the repairedAt status to 0 --f use a file containing a list of sstables as the input -=================================== ================================================================================ - -Set a lot of sstables to unrepaired status -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -There are many ways to do this programmatically. This way would likely include variables for the keyspace and table. - -Example:: - - find /var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/* -name "*Data.db" -print0 | xargs -0 -I % sstablerepairedset --really-set --is-unrepaired % - -Set one to many sstables to repaired status -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Set the repairedAt status after a repair to mark the sstables as repaired. Again, using variables for the keyspace and table names is a good choice. - -Example:: - - nodetool repair keyspace1 standard1 - find /var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/* -name "*Data.db" -print0 | xargs -0 -I % sstablerepairedset --really-set --is-repaired % - -Print metadata showing repaired status -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -sstablemetadata can be used to view the status set or unset using this command. - -Example: - - sstablerepairedset --really-set --is-repaired /var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/mc-1-big-Data.db - sstablemetadata /var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/mc-1-big-Data.db | grep "Repaired at" - Repaired at: 1534443974000 - - sstablerepairedset --really-set --is-unrepaired /var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/mc-1-big-Data.db - sstablemetadata /var/lib/cassandra/data/keyspace1/standard1-d936bd20a17c11e8bc92a55ed562cd82/mc-1-big-Data.db | grep "Repaired at" - Repaired at: 0 - -Using command in a script -^^^^^^^^^^^^^^^^^^^^^^^^^ - -If you know you ran repair 2 weeks ago, you can do something like the following:: - - sstablerepairset --is-repaired -f <(find /var/lib/cassandra/data/.../ -iname "*Data.db*" -mtime +14) - diff --git a/doc/source/tools/sstable/sstablescrub.rst b/doc/source/tools/sstable/sstablescrub.rst deleted file mode 100644 index 0bbda9f32f33..000000000000 --- a/doc/source/tools/sstable/sstablescrub.rst +++ /dev/null @@ -1,93 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstablescrub ------------- - -Fix a broken sstable. The scrub process rewrites the sstable, skipping any corrupted rows. Because these rows are lost, follow this process with a repair. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-4321 - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ -sstablescrub
- -=================================== ================================================================================ ---debug display stack traces --h,--help display this help message --m,--manifest-check only check and repair the leveled manifest, without actually scrubbing the sstables --n,--no-validate do not validate columns using column validator --r,--reinsert-overflowed-ttl Rewrites rows with overflowed expiration date affected by CASSANDRA-14092 - with the maximum supported expiration date of 2038-01-19T03:14:06+00:00. The rows are rewritten with the original timestamp incremented by one millisecond to override/supersede any potential tombstone that may have been generated during compaction of the affected rows. --s,--skip-corrupted skip corrupt rows in counter tables --v,--verbose verbose output -=================================== ================================================================================ - -Basic Scrub -^^^^^^^^^^^ - -The scrub without options will do a snapshot first, then write all non-corrupted files to a new sstable. - -Example:: - - sstablescrub keyspace1 standard1 - Pre-scrub sstables snapshotted into snapshot pre-scrub-1534424070883 - Scrubbing BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-6365332094dd11e88f324f9c503e4753/mc-5-big-Data.db') (17.142MiB) - Scrub of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-6365332094dd11e88f324f9c503e4753/mc-5-big-Data.db') complete: 73367 rows in new sstable and 0 empty (tombstoned) rows dropped - Checking leveled manifest - -Scrub without Validation -^^^^^^^^^^^^^^^^^^^^^^^^ -ref: https://issues.apache.org/jira/browse/CASSANDRA-9406 - -Use the --no-validate option to retain data that may be misrepresented (e.g., an integer stored in a long field) but not corrupt. This data usually doesn not present any errors to the client. - -Example:: - - sstablescrub --no-validate keyspace1 standard1 - Pre-scrub sstables snapshotted into snapshot pre-scrub-1536243158517 - Scrubbing BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-bc9cf530b1da11e886c66d2c86545d91/mc-2-big-Data.db') (4.482MiB) - Scrub of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-bc9cf530b1da11e886c66d2c86545d91/mc-2-big-Data.db') complete; looks like all 0 rows were tombstoned - -Skip Corrupted Counter Tables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -ref: https://issues.apache.org/jira/browse/CASSANDRA-5930 - -If counter tables are corrupted in a way that prevents sstablescrub from completing, you can use the --skip-corrupted option to skip scrubbing those counter tables. This workaround is not necessary in versions 2.0+. - -Example:: - - sstablescrub --skip-corrupted keyspace1 counter1 - -Dealing with Overflow Dates -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -ref: https://issues.apache.org/jira/browse/CASSANDRA-14092 - -Using the option --reinsert-overflowed-ttl allows a rewriting of rows that had a max TTL going over the maximum (causing an overflow). - -Example:: - - sstablescrub --reinsert-overflowed-ttl keyspace1 counter1 - -Manifest Check -^^^^^^^^^^^^^^ - -As of Cassandra version 2.0, this option is no longer relevant, since level data was moved from a separate manifest into the sstable metadata. - diff --git a/doc/source/tools/sstable/sstablesplit.rst b/doc/source/tools/sstable/sstablesplit.rst deleted file mode 100644 index 5386fa48bd7b..000000000000 --- a/doc/source/tools/sstable/sstablesplit.rst +++ /dev/null @@ -1,93 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstablesplit ------------- - -Big sstable files can take up a lot of disk space. The sstablesplit tool can be used to split those large files into smaller files. It can be thought of as a type of anticompaction. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-4766 - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ -sstablesplit - -=================================== ================================================================================ ---debug display stack traces --h, --help display this help message ---no-snapshot don't snapshot the sstables before splitting --s, --size maximum size in MB for the output sstables (default: 50) -=================================== ================================================================================ - -This command should be run with Cassandra stopped. Note: the script does not verify that Cassandra is stopped. - -Split a File -^^^^^^^^^^^^ - -Split a large sstable into smaller sstables. By default, unless the option --no-snapshot is added, a snapshot will be done of the original sstable and placed in the snapshots folder. - -Example:: - - sstablesplit /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db - - Pre-split sstables snapshotted into snapshot pre-split-1533144514795 - -Split Multiple Files -^^^^^^^^^^^^^^^^^^^^ - -Wildcards can be used in the filename portion of the command to split multiple files. - -Example:: - - sstablesplit --size 1 /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-1* - -Attempt to Split a Small File -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -If the file is already smaller than the split size provided, the sstable will not be split. - -Example:: - - sstablesplit /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db - Skipping /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-8-big-Data.db: it's size (1.442 MB) is less than the split size (50 MB) - No sstables needed splitting. - -Split a File into Specified Size -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The default size used for splitting is 50MB. Specify another size with the --size option. The size is in megabytes (MB). Specify only the number, not the units. For example --size 50 is correct, but --size 50MB is not. - -Example:: - - sstablesplit --size 1 /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-9-big-Data.db - Pre-split sstables snapshotted into snapshot pre-split-1533144996008 - - -Split Without Snapshot -^^^^^^^^^^^^^^^^^^^^^^ - -By default, sstablesplit will create a snapshot before splitting. If a snapshot is not needed, use the --no-snapshot option to skip it. - -Example:: - - sstablesplit --size 1 --no-snapshot /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-11-big-Data.db - -Note: There is no output, but you can see the results in your file system. - - - diff --git a/doc/source/tools/sstable/sstableupgrade.rst b/doc/source/tools/sstable/sstableupgrade.rst deleted file mode 100644 index 66386aca186d..000000000000 --- a/doc/source/tools/sstable/sstableupgrade.rst +++ /dev/null @@ -1,137 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstableupgrade --------------- - -Upgrade the sstables in the given table (or snapshot) to the current version of Cassandra. This process is typically done after a Cassandra version upgrade. This operation will rewrite the sstables in the specified table to match the currently installed version of Cassandra. The sstableupgrade command can also be used to downgrade sstables to a previous version. - -The snapshot option will only upgrade the specified snapshot. Upgrading snapshots is required before attempting to restore a snapshot taken in a major version older than the major version Cassandra is currently running. This will replace the files in the given snapshot as well as break any hard links to live sstables. - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ -sstableupgrade
[snapshot_name] - -=================================== ================================================================================ ---debug display stack traces --h,--help display this help message --k,--keep-source do not delete the source sstables -=================================== ================================================================================ - -Rewrite tables to the current Cassandra version -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Start with a set of sstables in one version of Cassandra:: - - ls -al /tmp/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/ - ... - -rw-r--r-- 1 user wheel 348 Aug 22 13:45 keyspace1-standard1-ka-1-CRC.db - -rw-r--r-- 1 user wheel 5620000 Aug 22 13:45 keyspace1-standard1-ka-1-Data.db - -rw-r--r-- 1 user wheel 10 Aug 22 13:45 keyspace1-standard1-ka-1-Digest.sha1 - -rw-r--r-- 1 user wheel 25016 Aug 22 13:45 keyspace1-standard1-ka-1-Filter.db - -rw-r--r-- 1 user wheel 480000 Aug 22 13:45 keyspace1-standard1-ka-1-Index.db - -rw-r--r-- 1 user wheel 9895 Aug 22 13:45 keyspace1-standard1-ka-1-Statistics.db - -rw-r--r-- 1 user wheel 3562 Aug 22 13:45 keyspace1-standard1-ka-1-Summary.db - -rw-r--r-- 1 user wheel 79 Aug 22 13:45 keyspace1-standard1-ka-1-TOC.txt - -After upgrading the Cassandra version, upgrade the sstables:: - - sstableupgrade keyspace1 standard1 - Found 1 sstables that need upgrading. - Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/keyspace1-standard1-ka-1-Data.db') - Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/keyspace1-standard1-ka-1-Data.db') complete. - - ls -al /tmp/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/ - ... - drwxr-xr-x 2 user wheel 64 Aug 22 13:48 backups - -rw-r--r-- 1 user wheel 292 Aug 22 13:48 mc-2-big-CRC.db - -rw-r--r-- 1 user wheel 4599475 Aug 22 13:48 mc-2-big-Data.db - -rw-r--r-- 1 user wheel 10 Aug 22 13:48 mc-2-big-Digest.crc32 - -rw-r--r-- 1 user wheel 25256 Aug 22 13:48 mc-2-big-Filter.db - -rw-r--r-- 1 user wheel 330807 Aug 22 13:48 mc-2-big-Index.db - -rw-r--r-- 1 user wheel 10312 Aug 22 13:48 mc-2-big-Statistics.db - -rw-r--r-- 1 user wheel 3506 Aug 22 13:48 mc-2-big-Summary.db - -rw-r--r-- 1 user wheel 80 Aug 22 13:48 mc-2-big-TOC.txt - -Rewrite tables to the current Cassandra version, and keep tables in old version -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Again, starting with a set of sstables in one version:: - - ls -al /tmp/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/ - ... - -rw-r--r-- 1 user wheel 348 Aug 22 13:58 keyspace1-standard1-ka-1-CRC.db - -rw-r--r-- 1 user wheel 5620000 Aug 22 13:58 keyspace1-standard1-ka-1-Data.db - -rw-r--r-- 1 user wheel 10 Aug 22 13:58 keyspace1-standard1-ka-1-Digest.sha1 - -rw-r--r-- 1 user wheel 25016 Aug 22 13:58 keyspace1-standard1-ka-1-Filter.db - -rw-r--r-- 1 user wheel 480000 Aug 22 13:58 keyspace1-standard1-ka-1-Index.db - -rw-r--r-- 1 user wheel 9895 Aug 22 13:58 keyspace1-standard1-ka-1-Statistics.db - -rw-r--r-- 1 user wheel 3562 Aug 22 13:58 keyspace1-standard1-ka-1-Summary.db - -rw-r--r-- 1 user wheel 79 Aug 22 13:58 keyspace1-standard1-ka-1-TOC.txt - -After upgrading the Cassandra version, upgrade the sstables, retaining the original sstables:: - - sstableupgrade keyspace1 standard1 -k - Found 1 sstables that need upgrading. - Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/keyspace1-standard1-ka-1-Data.db') - Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/keyspace1-standard1-ka-1-Data.db') complete. - - ls -al /tmp/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/ - ... - drwxr-xr-x 2 user wheel 64 Aug 22 14:00 backups - -rw-r--r--@ 1 user wheel 348 Aug 22 13:58 keyspace1-standard1-ka-1-CRC.db - -rw-r--r--@ 1 user wheel 5620000 Aug 22 13:58 keyspace1-standard1-ka-1-Data.db - -rw-r--r--@ 1 user wheel 10 Aug 22 13:58 keyspace1-standard1-ka-1-Digest.sha1 - -rw-r--r--@ 1 user wheel 25016 Aug 22 13:58 keyspace1-standard1-ka-1-Filter.db - -rw-r--r--@ 1 user wheel 480000 Aug 22 13:58 keyspace1-standard1-ka-1-Index.db - -rw-r--r--@ 1 user wheel 9895 Aug 22 13:58 keyspace1-standard1-ka-1-Statistics.db - -rw-r--r--@ 1 user wheel 3562 Aug 22 13:58 keyspace1-standard1-ka-1-Summary.db - -rw-r--r--@ 1 user wheel 79 Aug 22 13:58 keyspace1-standard1-ka-1-TOC.txt - -rw-r--r-- 1 user wheel 292 Aug 22 14:01 mc-2-big-CRC.db - -rw-r--r-- 1 user wheel 4596370 Aug 22 14:01 mc-2-big-Data.db - -rw-r--r-- 1 user wheel 10 Aug 22 14:01 mc-2-big-Digest.crc32 - -rw-r--r-- 1 user wheel 25256 Aug 22 14:01 mc-2-big-Filter.db - -rw-r--r-- 1 user wheel 330801 Aug 22 14:01 mc-2-big-Index.db - -rw-r--r-- 1 user wheel 10312 Aug 22 14:01 mc-2-big-Statistics.db - -rw-r--r-- 1 user wheel 3506 Aug 22 14:01 mc-2-big-Summary.db - -rw-r--r-- 1 user wheel 80 Aug 22 14:01 mc-2-big-TOC.txt - - -Rewrite a snapshot to the current Cassandra version -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Find the snapshot name:: - - nodetool listsnapshots - - Snapshot Details: - Snapshot name Keyspace name Column family name True size Size on disk - ... - 1534962986979 keyspace1 standard1 5.85 MB 5.85 MB - -Then rewrite the snapshot:: - - sstableupgrade keyspace1 standard1 1534962986979 - Found 1 sstables that need upgrading. - Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-5850e9f0a63711e8a5c5091830ac5256/snapshots/1534962986979/keyspace1-standard1-ka-1-Data.db') - Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-5850e9f0a63711e8a5c5091830ac5256/snapshots/1534962986979/keyspace1-standard1-ka-1-Data.db') complete. - - - - - diff --git a/doc/source/tools/sstable/sstableutil.rst b/doc/source/tools/sstable/sstableutil.rst deleted file mode 100644 index 30becd0e06a4..000000000000 --- a/doc/source/tools/sstable/sstableutil.rst +++ /dev/null @@ -1,91 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstableutil ------------ - -List sstable files for the provided table. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-7066 - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ -sstableutil
- -=================================== ================================================================================ --c, --cleanup clean up any outstanding transactions --d, --debug display stack traces --h, --help display this help message --o, --oplog include operation logs --t, --type all (list all files, final or temporary), tmp (list temporary files only), - final (list final files only), --v, --verbose verbose output -=================================== ================================================================================ - -List all sstables -^^^^^^^^^^^^^^^^^ - -The basic command lists the sstables associated with a given keyspace/table. - -Example:: - - sstableutil keyspace eventlog - Listing files... - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-CRC.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Digest.crc32 - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Filter.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Index.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Statistics.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Summary.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-TOC.txt - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-CRC.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Digest.crc32 - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Filter.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Index.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Statistics.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Summary.db - /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-TOC.txt - -List only temporary sstables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Using the -t option followed by `tmp` will list all temporary sstables, in the format above. Temporary sstables were used in pre-3.0 versions of Cassandra. - -List only final sstables -^^^^^^^^^^^^^^^^^^^^^^^^ - -Using the -t option followed by `final` will list all final sstables, in the format above. In recent versions of Cassandra, this is the same output as not using the -t option. - -Include transaction logs -^^^^^^^^^^^^^^^^^^^^^^^^ - -Using the -o option will include transaction logs in the listing, in the format above. - -Clean up sstables -^^^^^^^^^^^^^^^^^ - -Using the -c option removes any transactions left over from incomplete writes or compactions. - -From the 3.0 upgrade notes: - -New transaction log files have been introduced to replace the compactions_in_progress system table, temporary file markers (tmp and tmplink) and sstable ancestors. 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. - - - diff --git a/doc/source/tools/sstable/sstableverify.rst b/doc/source/tools/sstable/sstableverify.rst deleted file mode 100644 index dad3f4487e1b..000000000000 --- a/doc/source/tools/sstable/sstableverify.rst +++ /dev/null @@ -1,91 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -sstableverify -------------- - -Check sstable(s) for errors or corruption, for the provided table. - -ref: https://issues.apache.org/jira/browse/CASSANDRA-5791 - -Cassandra must be stopped before this tool is executed, or unexpected results will occur. Note: the script does not verify that Cassandra is stopped. - -Usage -^^^^^ -sstableverify
- -=================================== ================================================================================ ---debug display stack traces --e, --extended extended verification --h, --help display this help message --v, --verbose verbose output -=================================== ================================================================================ - -Basic Verification -^^^^^^^^^^^^^^^^^^ - -This is the basic verification. It is not a very quick process, and uses memory. You might need to increase your memory settings if you have many sstables. - -Example:: - - sstableverify keyspace eventlog - Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') (7.353MiB) - Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') - Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') - Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') (3.775MiB) - Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') - Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') - -Extended Verification -^^^^^^^^^^^^^^^^^^^^^ - -During an extended verification, the individual values will be validated for errors or corruption. This of course takes more time. - -Example:: - - root@DC1C1:/# sstableverify -e keyspace eventlog - WARN 14:08:06,255 Only 33.096GiB free across all data volumes. Consider adding more capacity to your cluster or removing obsolete snapshots - Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') (7.353MiB) - Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') - Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') - Extended Verify requested, proceeding to inspect values - Verify of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') succeeded. All 33211 rows read successfully - Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') (3.775MiB) - Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') - Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') - Extended Verify requested, proceeding to inspect values - Verify of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') succeeded. All 17068 rows read successfully - -Corrupted File -^^^^^^^^^^^^^^ - -Corrupted files are listed if they are detected by the script. - -Example:: - - sstableverify keyspace eventlog - Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') (7.416MiB) - Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') - Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') - Error verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db'): Corrupted: /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db - -A similar (but less verbose) tool will show the suggested actions:: - - nodetool verify keyspace eventlog - error: Invalid SSTable /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db, please force repair - - - diff --git a/doc/source/troubleshooting/finding_nodes.rst b/doc/source/troubleshooting/finding_nodes.rst deleted file mode 100644 index df5e16c93d5a..000000000000 --- a/doc/source/troubleshooting/finding_nodes.rst +++ /dev/null @@ -1,149 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Find The Misbehaving Nodes -========================== - -The first step to troubleshooting a Cassandra issue is to use error messages, -metrics and monitoring information to identify if the issue lies with the -clients or the server and if it does lie with the server find the problematic -nodes in the Cassandra cluster. The goal is to determine if this is a systemic -issue (e.g. a query pattern that affects the entire cluster) or isolated to a -subset of nodes (e.g. neighbors holding a shared token range or even a single -node with bad hardware). - -There are many sources of information that help determine where the problem -lies. Some of the most common are mentioned below. - -Client Logs and Errors ----------------------- -Clients of the cluster often leave the best breadcrumbs to follow. Perhaps -client latencies or error rates have increased in a particular datacenter -(likely eliminating other datacenter's nodes), or clients are receiving a -particular kind of error code indicating a particular kind of problem. -Troubleshooters can often rule out many failure modes just by reading the error -messages. In fact, many Cassandra error messages include the last coordinator -contacted to help operators find nodes to start with. - -Some common errors (likely culprit in parenthesis) assuming the client has -similar error names as the Datastax :ref:`drivers `: - -* ``SyntaxError`` (**client**). This and other ``QueryValidationException`` - indicate that the client sent a malformed request. These are rarely server - issues and usually indicate bad queries. -* ``UnavailableException`` (**server**): This means that the Cassandra - coordinator node has rejected the query as it believes that insufficent - replica nodes are available. If many coordinators are throwing this error it - likely means that there really are (typically) multiple nodes down in the - cluster and you can identify them using :ref:`nodetool status - ` If only a single coordinator is throwing this error it may - mean that node has been partitioned from the rest. -* ``OperationTimedOutException`` (**server**): This is the most frequent - timeout message raised when clients set timeouts and means that the query - took longer than the supplied timeout. This is a *client side* timeout - meaning that it took longer than the client specified timeout. The error - message will include the coordinator node that was last tried which is - usually a good starting point. This error usually indicates either - aggressive client timeout values or latent server coordinators/replicas. -* ``ReadTimeoutException`` or ``WriteTimeoutException`` (**server**): These - are raised when clients do not specify lower timeouts and there is a - *coordinator* timeouts based on the values supplied in the ``cassandra.yaml`` - configuration file. They usually indicate a serious server side problem as - the default values are usually multiple seconds. - -Metrics -------- - -If you have Cassandra :ref:`metrics ` reporting to a -centralized location such as `Graphite `_ or -`Grafana `_ you can typically use those to narrow down -the problem. At this stage narrowing down the issue to a particular -datacenter, rack, or even group of nodes is the main goal. Some helpful metrics -to look at are: - -Errors -^^^^^^ -Cassandra refers to internode messaging errors as "drops", and provided a -number of :ref:`Dropped Message Metrics ` to help narrow -down errors. If particular nodes are dropping messages actively, they are -likely related to the issue. - -Latency -^^^^^^^ -For timeouts or latency related issues you can start with :ref:`Table -Metrics ` by comparing Coordinator level metrics e.g. -``CoordinatorReadLatency`` or ``CoordinatorWriteLatency`` with their associated -replica metrics e.g. ``ReadLatency`` or ``WriteLatency``. Issues usually show -up on the ``99th`` percentile before they show up on the ``50th`` percentile or -the ``mean``. While ``maximum`` coordinator latencies are not typically very -helpful due to the exponentially decaying reservoir used internally to produce -metrics, ``maximum`` replica latencies that correlate with increased ``99th`` -percentiles on coordinators can help narrow down the problem. - -There are usually three main possibilities: - -1. Coordinator latencies are high on all nodes, but only a few node's local - read latencies are high. This points to slow replica nodes and the - coordinator's are just side-effects. This usually happens when clients are - not token aware. -2. Coordinator latencies and replica latencies increase at the - same time on the a few nodes. If clients are token aware this is almost - always what happens and points to slow replicas of a subset of token - ranges (only part of the ring). -3. Coordinator and local latencies are high on many nodes. This usually - indicates either a tipping point in the cluster capacity (too many writes or - reads per second), or a new query pattern. - -It's important to remember that depending on the client's load balancing -behavior and consistency levels coordinator and replica metrics may or may -not correlate. In particular if you use ``TokenAware`` policies the same -node's coordinator and replica latencies will often increase together, but if -you just use normal ``DCAwareRoundRobin`` coordinator latencies can increase -with unrelated replica node's latencies. For example: - -* ``TokenAware`` + ``LOCAL_ONE``: should always have coordinator and replica - latencies on the same node rise together -* ``TokenAware`` + ``LOCAL_QUORUM``: should always have coordinator and - multiple replica latencies rise together in the same datacenter. -* ``TokenAware`` + ``QUORUM``: replica latencies in other datacenters can - affect coordinator latencies. -* ``DCAwareRoundRobin`` + ``LOCAL_ONE``: coordinator latencies and unrelated - replica node's latencies will rise together. -* ``DCAwareRoundRobin`` + ``LOCAL_QUORUM``: different coordinator and replica - latencies will rise together with little correlation. - -Query Rates -^^^^^^^^^^^ -Sometimes the :ref:`Table ` query rate metrics can help -narrow down load issues as "small" increase in coordinator queries per second -(QPS) may correlate with a very large increase in replica level QPS. This most -often happens with ``BATCH`` writes, where a client may send a single ``BATCH`` -query that might contain 50 statements in it, which if you have 9 copies (RF=3, -three datacenters) means that every coordinator ``BATCH`` write turns into 450 -replica writes! This is why keeping ``BATCH``'s to the same partition is so -critical, otherwise you can exhaust significant CPU capacitity with a "single" -query. - - -Next Step: Investigate the Node(s) ----------------------------------- - -Once you have narrowed down the problem as much as possible (datacenter, rack -, node), login to one of the nodes using SSH and proceed to debug using -:ref:`logs `, :ref:`nodetool `, and -:ref:`os tools `. If you are not able to login you may still -have access to :ref:`logs ` and :ref:`nodetool ` -remotely. diff --git a/doc/source/troubleshooting/index.rst b/doc/source/troubleshooting/index.rst deleted file mode 100644 index 79b46d6363fa..000000000000 --- a/doc/source/troubleshooting/index.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Troubleshooting -=============== - -As any distributed database does, sometimes Cassandra breaks and you will have -to troubleshoot what is going on. Generally speaking you can debug Cassandra -like any other distributed Java program, meaning that you have to find which -machines in your cluster are misbehaving and then isolate the problem using -logs and tools. Luckily Cassandra had a great set of instrospection tools to -help you. - -These pages include a number of command examples demonstrating various -debugging and analysis techniques, mostly for Linux/Unix systems. If you don't -have access to the machines running Cassandra, or are running on Windows or -another operating system you may not be able to use the exact commands but -there are likely equivalent tools you can use. - -.. toctree:: - :maxdepth: 2 - - finding_nodes - reading_logs - use_nodetool - use_tools diff --git a/doc/source/troubleshooting/reading_logs.rst b/doc/source/troubleshooting/reading_logs.rst deleted file mode 100644 index 08f7d4da6cf5..000000000000 --- a/doc/source/troubleshooting/reading_logs.rst +++ /dev/null @@ -1,267 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. _reading-logs: - -Cassandra Logs -============== -Cassandra has rich support for logging and attempts to give operators maximum -insight into the database while at the same time limiting noise to the logs. - -Common Log Files ----------------- -Cassandra has three main logs, the ``system.log``, ``debug.log`` and -``gc.log`` which hold general logging messages, debugging logging messages, and -java garbage collection logs respectively. - -These logs by default live in ``${CASSANDRA_HOME}/logs``, but most Linux -distributions relocate logs to ``/var/log/cassandra``. Operators can tune -this location as well as what levels are logged using the provided -``logback.xml`` file. - -``system.log`` -^^^^^^^^^^^^^^ -This log is the default Cassandra log and is a good place to start any -investigation. Some examples of activities logged to this log: - -* Uncaught exceptions. These can be very useful for debugging errors. -* ``GCInspector`` messages indicating long garbage collector pauses. When long - pauses happen Cassandra will print how long and also what was the state of - the system (thread state) at the time of that pause. This can help narrow - down a capacity issue (either not enough heap or not enough spare CPU). -* Information about nodes joining and leaving the cluster as well as token - metadata (data ownersip) changes. This is useful for debugging network - partitions, data movements, and more. -* Keyspace/Table creation, modification, deletion. -* ``StartupChecks`` that ensure optimal configuration of the operating system - to run Cassandra -* Information about some background operational tasks (e.g. Index - Redistribution). - -As with any application, looking for ``ERROR`` or ``WARN`` lines can be a -great first step:: - - $ # Search for warnings or errors in the latest system.log - $ grep 'WARN\|ERROR' system.log | tail - ... - - $ # Search for warnings or errors in all rotated system.log - $ zgrep 'WARN\|ERROR' system.log.* | less - ... - -``debug.log`` -^^^^^^^^^^^^^^ -This log contains additional debugging information that may be useful when -troubleshooting but may be much noiser than the normal ``system.log``. Some -examples of activities logged to this log: - -* Information about compactions, including when they start, which sstables - they contain, and when they finish. -* Information about memtable flushes to disk, including when they happened, - how large the flushes were, and which commitlog segments the flush impacted. - -This log can be *very* noisy, so it is highly recommended to use ``grep`` and -other log analysis tools to dive deep. For example:: - - $ # Search for messages involving a CompactionTask with 5 lines of context - $ grep CompactionTask debug.log -C 5 - ... - - $ # Look at the distribution of flush tasks per keyspace - $ grep "Enqueuing flush" debug.log | cut -f 10 -d ' ' | sort | uniq -c - 6 compaction_history: - 1 test_keyspace: - 2 local: - 17 size_estimates: - 17 sstable_activity: - - -``gc.log`` -^^^^^^^^^^^^^^ -The gc log is a standard Java GC log. With the default ``jvm.options`` -settings you get a lot of valuable information in this log such as -application pause times, and why pauses happened. This may help narrow -down throughput or latency issues to a mistuned JVM. For example you can -view the last few pauses:: - - $ grep stopped gc.log.0.current | tail - 2018-08-29T00:19:39.522+0000: 3022663.591: Total time for which application threads were stopped: 0.0332813 seconds, Stopping threads took: 0.0008189 seconds - 2018-08-29T00:19:44.369+0000: 3022668.438: Total time for which application threads were stopped: 0.0312507 seconds, Stopping threads took: 0.0007025 seconds - 2018-08-29T00:19:49.796+0000: 3022673.865: Total time for which application threads were stopped: 0.0307071 seconds, Stopping threads took: 0.0006662 seconds - 2018-08-29T00:19:55.452+0000: 3022679.521: Total time for which application threads were stopped: 0.0309578 seconds, Stopping threads took: 0.0006832 seconds - 2018-08-29T00:20:00.127+0000: 3022684.197: Total time for which application threads were stopped: 0.0310082 seconds, Stopping threads took: 0.0007090 seconds - 2018-08-29T00:20:06.583+0000: 3022690.653: Total time for which application threads were stopped: 0.0317346 seconds, Stopping threads took: 0.0007106 seconds - 2018-08-29T00:20:10.079+0000: 3022694.148: Total time for which application threads were stopped: 0.0299036 seconds, Stopping threads took: 0.0006889 seconds - 2018-08-29T00:20:15.739+0000: 3022699.809: Total time for which application threads were stopped: 0.0078283 seconds, Stopping threads took: 0.0006012 seconds - 2018-08-29T00:20:15.770+0000: 3022699.839: Total time for which application threads were stopped: 0.0301285 seconds, Stopping threads took: 0.0003789 seconds - 2018-08-29T00:20:15.798+0000: 3022699.867: Total time for which application threads were stopped: 0.0279407 seconds, Stopping threads took: 0.0003627 seconds - - -This shows a lot of valuable information including how long the application -was paused (meaning zero user queries were being serviced during the e.g. 33ms -JVM pause) as well as how long it took to enter the safepoint. You can use this -raw data to e.g. get the longest pauses:: - - $ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | tail | xargs -IX grep X gc.log.0.current | sort -k 1 - 2018-08-28T17:13:40.520-0700: 1.193: Total time for which application threads were stopped: 0.0157914 seconds, Stopping threads took: 0.0000355 seconds - 2018-08-28T17:13:41.206-0700: 1.879: Total time for which application threads were stopped: 0.0249811 seconds, Stopping threads took: 0.0000318 seconds - 2018-08-28T17:13:41.638-0700: 2.311: Total time for which application threads were stopped: 0.0561130 seconds, Stopping threads took: 0.0000328 seconds - 2018-08-28T17:13:41.677-0700: 2.350: Total time for which application threads were stopped: 0.0362129 seconds, Stopping threads took: 0.0000597 seconds - 2018-08-28T17:13:41.781-0700: 2.454: Total time for which application threads were stopped: 0.0442846 seconds, Stopping threads took: 0.0000238 seconds - 2018-08-28T17:13:41.976-0700: 2.649: Total time for which application threads were stopped: 0.0377115 seconds, Stopping threads took: 0.0000250 seconds - 2018-08-28T17:13:42.172-0700: 2.845: Total time for which application threads were stopped: 0.0475415 seconds, Stopping threads took: 0.0001018 seconds - 2018-08-28T17:13:42.825-0700: 3.498: Total time for which application threads were stopped: 0.0379155 seconds, Stopping threads took: 0.0000571 seconds - 2018-08-28T17:13:43.574-0700: 4.247: Total time for which application threads were stopped: 0.0323812 seconds, Stopping threads took: 0.0000574 seconds - 2018-08-28T17:13:44.602-0700: 5.275: Total time for which application threads were stopped: 0.0238975 seconds, Stopping threads took: 0.0000788 seconds - -In this case any client waiting on a query would have experienced a `56ms` -latency at 17:13:41. - -Note that GC pauses are not _only_ garbage collection, although -generally speaking high pauses with fast safepoints indicate a lack of JVM heap -or mistuned JVM GC algorithm. High pauses with slow safepoints typically -indicate that the JVM is having trouble entering a safepoint which usually -indicates slow disk drives (Cassandra makes heavy use of memory mapped reads -which the JVM doesn't know could have disk latency, so the JVM safepoint logic -doesn't handle a blocking memory mapped read particularly well). - -Using these logs you can even get a pause distribution with something like -`histogram.py `_:: - - $ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | histogram.py - # NumSamples = 410293; Min = 0.00; Max = 11.49 - # Mean = 0.035346; Variance = 0.002216; SD = 0.047078; Median 0.036498 - # each ∎ represents a count of 5470 - 0.0001 - 1.1496 [410255]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ - 1.1496 - 2.2991 [ 15]: - 2.2991 - 3.4486 [ 5]: - 3.4486 - 4.5981 [ 1]: - 4.5981 - 5.7475 [ 5]: - 5.7475 - 6.8970 [ 9]: - 6.8970 - 8.0465 [ 1]: - 8.0465 - 9.1960 [ 0]: - 9.1960 - 10.3455 [ 0]: - 10.3455 - 11.4949 [ 2]: - -We can see in this case while we have very good average performance something -is causing multi second JVM pauses ... In this case it was mostly safepoint -pauses caused by slow disks:: - - $ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | tail | xargs -IX grep X gc.log.0.current| sort -k 1 - 2018-07-27T04:52:27.413+0000: 187831.482: Total time for which application threads were stopped: 6.5037022 seconds, Stopping threads took: 0.0005212 seconds - 2018-07-30T23:38:18.354+0000: 514582.423: Total time for which application threads were stopped: 6.3262938 seconds, Stopping threads took: 0.0004882 seconds - 2018-08-01T02:37:48.380+0000: 611752.450: Total time for which application threads were stopped: 10.3879659 seconds, Stopping threads took: 0.0004475 seconds - 2018-08-06T22:04:14.990+0000: 1113739.059: Total time for which application threads were stopped: 6.0917409 seconds, Stopping threads took: 0.0005553 seconds - 2018-08-14T00:04:06.091+0000: 1725730.160: Total time for which application threads were stopped: 6.0141054 seconds, Stopping threads took: 0.0004976 seconds - 2018-08-17T06:23:06.755+0000: 2007670.824: Total time for which application threads were stopped: 6.0133694 seconds, Stopping threads took: 0.0006011 seconds - 2018-08-23T06:35:46.068+0000: 2526830.137: Total time for which application threads were stopped: 6.4767751 seconds, Stopping threads took: 6.4426849 seconds - 2018-08-23T06:36:29.018+0000: 2526873.087: Total time for which application threads were stopped: 11.4949489 seconds, Stopping threads took: 11.4638297 seconds - 2018-08-23T06:37:12.671+0000: 2526916.741: Total time for which application threads were stopped: 6.3867003 seconds, Stopping threads took: 6.3507166 seconds - 2018-08-23T06:37:47.156+0000: 2526951.225: Total time for which application threads were stopped: 7.9528200 seconds, Stopping threads took: 7.9197756 seconds - -Sometimes reading and understanding java GC logs is hard, but you can take the -raw GC files and visualize them using tools such as `GCViewer -`_ which take the Cassandra GC log as -input and show you detailed visual information on your garbage collection -performance. This includes pause analysis as well as throughput information. -For a stable Cassandra JVM you probably want to aim for pauses less than -`200ms` and GC throughput greater than `99%` (ymmv). - -Java GC pauses are one of the leading causes of tail latency in Cassandra -(along with drive latency) so sometimes this information can be crucial -while debugging tail latency issues. - - -Getting More Information ------------------------- - -If the default logging levels are insuficient, ``nodetool`` can set higher -or lower logging levels for various packages and classes using the -``nodetool setlogginglevel`` command. Start by viewing the current levels:: - - $ nodetool getlogginglevels - - Logger Name Log Level - ROOT INFO - org.apache.cassandra DEBUG - -Perhaps the ``Gossiper`` is acting up and we wish to enable it at ``TRACE`` -level for even more insight:: - - - $ nodetool setlogginglevel org.apache.cassandra.gms.Gossiper TRACE - - $ nodetool getlogginglevels - - Logger Name Log Level - ROOT INFO - org.apache.cassandra DEBUG - org.apache.cassandra.gms.Gossiper TRACE - - $ grep TRACE debug.log | tail -2 - TRACE [GossipStage:1] 2018-07-04 17:07:47,879 Gossiper.java:1234 - Updating - heartbeat state version to 2344 from 2343 for 127.0.0.2:7000 ... - TRACE [GossipStage:1] 2018-07-04 17:07:47,879 Gossiper.java:923 - local - heartbeat version 2341 greater than 2340 for 127.0.0.1:7000 - - -Note that any changes made this way are reverted on next Cassandra process -restart. To make the changes permanent add the appropriate rule to -``logback.xml``. - -.. code-block:: diff - - diff --git a/conf/logback.xml b/conf/logback.xml - index b2c5b10..71b0a49 100644 - --- a/conf/logback.xml - +++ b/conf/logback.xml - @@ -98,4 +98,5 @@ appender reference in the root level section below. - - - - + - - -Full Query Logger -^^^^^^^^^^^^^^^^^ - -Cassandra 4.0 additionally ships with support for full query logging. This -is a highly performant binary logging tool which captures Cassandra queries -in real time, writes them (if possible) to a log file, and ensures the total -size of the capture does not exceed a particular limit. FQL is enabled with -``nodetool`` and the logs are read with the provided ``bin/fqltool`` utility:: - - $ mkdir /var/tmp/fql_logs - $ nodetool enablefullquerylog --path /var/tmp/fql_logs - - # ... do some querying - - $ bin/fqltool dump /var/tmp/fql_logs/20180705-00.cq4 | tail - Query time: 1530750927224 - Query: SELECT * FROM system_virtual_schema.columns WHERE keyspace_name = - 'system_views' AND table_name = 'sstable_tasks'; - Values: - - Type: single - Protocol version: 4 - Query time: 1530750934072 - Query: select * from keyspace1.standard1 ; - Values: - - $ nodetool disablefullquerylog - -Note that if you want more information than this tool provides, there are other -live capture options available such as :ref:`packet capture `. diff --git a/doc/source/troubleshooting/use_nodetool.rst b/doc/source/troubleshooting/use_nodetool.rst deleted file mode 100644 index 5072f85d1dee..000000000000 --- a/doc/source/troubleshooting/use_nodetool.rst +++ /dev/null @@ -1,245 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. _use-nodetool: - -Use Nodetool -============ - -Cassandra's ``nodetool`` allows you to narrow problems from the cluster down -to a particular node and gives a lot of insight into the state of the Cassandra -process itself. There are dozens of useful commands (see ``nodetool help`` -for all the commands), but briefly some of the most useful for troubleshooting: - -.. _nodetool-status: - -Cluster Status --------------- - -You can use ``nodetool status`` to assess status of the cluster:: - - $ nodetool status - - Datacenter: dc1 - ======================= - Status=Up/Down - |/ State=Normal/Leaving/Joining/Moving - -- Address Load Tokens Owns (effective) Host ID Rack - UN 127.0.1.1 4.69 GiB 1 100.0% 35ea8c9f-b7a2-40a7-b9c5-0ee8b91fdd0e r1 - UN 127.0.1.2 4.71 GiB 1 100.0% 752e278f-b7c5-4f58-974b-9328455af73f r2 - UN 127.0.1.3 4.69 GiB 1 100.0% 9dc1a293-2cc0-40fa-a6fd-9e6054da04a7 r3 - -In this case we can see that we have three nodes in one datacenter with about -4.6GB of data each and they are all "up". The up/down status of a node is -independently determined by every node in the cluster, so you may have to run -``nodetool status`` on multiple nodes in a cluster to see the full view. - -You can use ``nodetool status`` plus a little grep to see which nodes are -down:: - - $ nodetool status | grep -v '^UN' - Datacenter: dc1 - =============== - Status=Up/Down - |/ State=Normal/Leaving/Joining/Moving - -- Address Load Tokens Owns (effective) Host ID Rack - Datacenter: dc2 - =============== - Status=Up/Down - |/ State=Normal/Leaving/Joining/Moving - -- Address Load Tokens Owns (effective) Host ID Rack - DN 127.0.0.5 105.73 KiB 1 33.3% df303ac7-61de-46e9-ac79-6e630115fd75 r1 - -In this case there are two datacenters and there is one node down in datacenter -``dc2`` and rack ``r1``. This may indicate an issue on ``127.0.0.5`` -warranting investigation. - -.. _nodetool-proxyhistograms: - -Coordinator Query Latency -------------------------- -You can view latency distributions of coordinator read and write latency -to help narrow down latency issues using ``nodetool proxyhistograms``:: - - $ nodetool proxyhistograms - Percentile Read Latency Write Latency Range Latency CAS Read Latency CAS Write Latency View Write Latency - (micros) (micros) (micros) (micros) (micros) (micros) - 50% 454.83 219.34 0.00 0.00 0.00 0.00 - 75% 545.79 263.21 0.00 0.00 0.00 0.00 - 95% 654.95 315.85 0.00 0.00 0.00 0.00 - 98% 785.94 379.02 0.00 0.00 0.00 0.00 - 99% 3379.39 2346.80 0.00 0.00 0.00 0.00 - Min 42.51 105.78 0.00 0.00 0.00 0.00 - Max 25109.16 43388.63 0.00 0.00 0.00 0.00 - -Here you can see the full latency distribution of reads, writes, range requests -(e.g. ``select * from keyspace.table``), CAS read (compare phase of CAS) and -CAS write (set phase of compare and set). These can be useful for narrowing -down high level latency problems, for example in this case if a client had a -20 millisecond timeout on their reads they might experience the occasional -timeout from this node but less than 1% (since the 99% read latency is 3.3 -milliseconds < 20 milliseconds). - -.. _nodetool-tablehistograms: - -Local Query Latency -------------------- - -If you know which table is having latency/error issues, you can use -``nodetool tablehistograms`` to get a better idea of what is happening -locally on a node:: - - $ nodetool tablehistograms keyspace table - Percentile SSTables Write Latency Read Latency Partition Size Cell Count - (micros) (micros) (bytes) - 50% 0.00 73.46 182.79 17084 103 - 75% 1.00 88.15 315.85 17084 103 - 95% 2.00 126.93 545.79 17084 103 - 98% 2.00 152.32 654.95 17084 103 - 99% 2.00 182.79 785.94 17084 103 - Min 0.00 42.51 24.60 14238 87 - Max 2.00 12108.97 17436.92 17084 103 - -This shows you percentile breakdowns particularly critical metrics. - -The first column contains how many sstables were read per logical read. A very -high number here indicates that you may have chosen the wrong compaction -strategy, e.g. ``SizeTieredCompactionStrategy`` typically has many more reads -per read than ``LeveledCompactionStrategy`` does for update heavy workloads. - -The second column shows you a latency breakdown of *local* write latency. In -this case we see that while the p50 is quite good at 73 microseconds, the -maximum latency is quite slow at 12 milliseconds. High write max latencies -often indicate a slow commitlog volume (slow to fsync) or large writes -that quickly saturate commitlog segments. - -The third column shows you a latency breakdown of *local* read latency. We can -see that local Cassandra reads are (as expected) slower than local writes, and -the read speed correlates highly with the number of sstables read per read. - -The fourth and fifth columns show distributions of partition size and column -count per partition. These are useful for determining if the table has on -average skinny or wide partitions and can help you isolate bad data patterns. -For example if you have a single cell that is 2 megabytes, that is probably -going to cause some heap pressure when it's read. - -.. _nodetool-tpstats: - -Threadpool State ----------------- - -You can use ``nodetool tpstats`` to view the current outstanding requests on -a particular node. This is useful for trying to find out which resource -(read threads, write threads, compaction, request response threads) the -Cassandra process lacks. For example:: - - $ nodetool tpstats - Pool Name Active Pending Completed Blocked All time blocked - ReadStage 2 0 12 0 0 - MiscStage 0 0 0 0 0 - CompactionExecutor 0 0 1940 0 0 - MutationStage 0 0 0 0 0 - GossipStage 0 0 10293 0 0 - Repair-Task 0 0 0 0 0 - RequestResponseStage 0 0 16 0 0 - ReadRepairStage 0 0 0 0 0 - CounterMutationStage 0 0 0 0 0 - MemtablePostFlush 0 0 83 0 0 - ValidationExecutor 0 0 0 0 0 - MemtableFlushWriter 0 0 30 0 0 - ViewMutationStage 0 0 0 0 0 - CacheCleanupExecutor 0 0 0 0 0 - MemtableReclaimMemory 0 0 30 0 0 - PendingRangeCalculator 0 0 11 0 0 - SecondaryIndexManagement 0 0 0 0 0 - HintsDispatcher 0 0 0 0 0 - Native-Transport-Requests 0 0 192 0 0 - MigrationStage 0 0 14 0 0 - PerDiskMemtableFlushWriter_0 0 0 30 0 0 - Sampler 0 0 0 0 0 - ViewBuildExecutor 0 0 0 0 0 - InternalResponseStage 0 0 0 0 0 - AntiEntropyStage 0 0 0 0 0 - - Message type Dropped Latency waiting in queue (micros) - 50% 95% 99% Max - READ 0 N/A N/A N/A N/A - RANGE_SLICE 0 0.00 0.00 0.00 0.00 - _TRACE 0 N/A N/A N/A N/A - HINT 0 N/A N/A N/A N/A - MUTATION 0 N/A N/A N/A N/A - COUNTER_MUTATION 0 N/A N/A N/A N/A - BATCH_STORE 0 N/A N/A N/A N/A - BATCH_REMOVE 0 N/A N/A N/A N/A - REQUEST_RESPONSE 0 0.00 0.00 0.00 0.00 - PAGED_RANGE 0 N/A N/A N/A N/A - READ_REPAIR 0 N/A N/A N/A N/A - -This command shows you all kinds of interesting statistics. The first section -shows a detailed breakdown of threadpools for each Cassandra stage, including -how many threads are current executing (Active) and how many are waiting to -run (Pending). Typically if you see pending executions in a particular -threadpool that indicates a problem localized to that type of operation. For -example if the ``RequestResponseState`` queue is backing up, that means -that the coordinators are waiting on a lot of downstream replica requests and -may indicate a lack of token awareness, or very high consistency levels being -used on read requests (for example reading at ``ALL`` ties up RF -``RequestResponseState`` threads whereas ``LOCAL_ONE`` only uses a single -thread in the ``ReadStage`` threadpool). On the other hand if you see a lot of -pending compactions that may indicate that your compaction threads cannot keep -up with the volume of writes and you may need to tune either the compaction -strategy or the ``concurrent_compactors`` or ``compaction_throughput`` options. - -The second section shows drops (errors) and latency distributions for all the -major request types. Drops are cumulative since process start, but if you -have any that indicate a serious problem as the default timeouts to qualify as -a drop are quite high (~5-10 seconds). Dropped messages often warrants further -investigation. - -.. _nodetool-compactionstats: - -Compaction State ----------------- - -As Cassandra is a LSM datastore, Cassandra sometimes has to compact sstables -together, which can have adverse effects on performance. In particular, -compaction uses a reasonable quantity of CPU resources, invalidates large -quantities of the OS `page cache `_, -and can put a lot of load on your disk drives. There are great -:ref:`os tools ` to determine if this is the case, but often it's a -good idea to check if compactions are even running using -``nodetool compactionstats``:: - - $ nodetool compactionstats - pending tasks: 2 - - keyspace.table: 2 - - id compaction type keyspace table completed total unit progress - 2062b290-7f3a-11e8-9358-cd941b956e60 Compaction keyspace table 21848273 97867583 bytes 22.32% - Active compaction remaining time : 0h00m04s - -In this case there is a single compaction running on the ``keyspace.table`` -table, has completed 21.8 megabytes of 97 and Cassandra estimates (based on -the configured compaction throughput) that this will take 4 seconds. You can -also pass ``-H`` to get the units in a human readable format. - -Generally each running compaction can consume a single core, but the more -you do in parallel the faster data compacts. Compaction is crucial to ensuring -good read performance so having the right balance of concurrent compactions -such that compactions complete quickly but don't take too many resources -away from query threads is very important for performance. If you notice -compaction unable to keep up, try tuning Cassandra's ``concurrent_compactors`` -or ``compaction_throughput`` options. diff --git a/doc/source/troubleshooting/use_tools.rst b/doc/source/troubleshooting/use_tools.rst deleted file mode 100644 index b1347cc6d8a6..000000000000 --- a/doc/source/troubleshooting/use_tools.rst +++ /dev/null @@ -1,542 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. _use-os-tools: - -Diving Deep, Use External Tools -=============================== - -Machine access allows operators to dive even deeper than logs and ``nodetool`` -allow. While every Cassandra operator may have their personal favorite -toolsets for troubleshooting issues, this page contains some of the most common -operator techniques and examples of those tools. Many of these commands work -only on Linux, but if you are deploying on a different operating system you may -have access to other substantially similar tools that assess similar OS level -metrics and processes. - -JVM Tooling ------------ -The JVM ships with a number of useful tools. Some of them are useful for -debugging Cassandra issues, especially related to heap and execution stacks. - -**NOTE**: There are two common gotchas with JVM tooling and Cassandra: - -1. By default Cassandra ships with ``-XX:+PerfDisableSharedMem`` set to prevent - long pauses (see ``CASSANDRA-9242`` and ``CASSANDRA-9483`` for details). If - you want to use JVM tooling you can instead have ``/tmp`` mounted on an in - memory ``tmpfs`` which also effectively works around ``CASSANDRA-9242``. -2. Make sure you run the tools as the same user as Cassandra is running as, - e.g. if the database is running as ``cassandra`` the tool also has to be - run as ``cassandra``, e.g. via ``sudo -u cassandra ``. - -Garbage Collection State (jstat) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If you suspect heap pressure you can use ``jstat`` to dive deep into the -garbage collection state of a Cassandra process. This command is always -safe to run and yields detailed heap information including eden heap usage (E), -old generation heap usage (O), count of eden collections (YGC), time spend in -eden collections (YGCT), old/mixed generation collections (FGC) and time spent -in old/mixed generation collections (FGCT):: - - - jstat -gcutil 500ms - S0 S1 E O M CCS YGC YGCT FGC FGCT GCT - 0.00 0.00 81.53 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - 0.00 0.00 82.36 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - 0.00 0.00 82.36 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - 0.00 0.00 83.19 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - 0.00 0.00 83.19 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - 0.00 0.00 84.19 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - 0.00 0.00 84.19 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - 0.00 0.00 85.03 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - 0.00 0.00 85.03 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - 0.00 0.00 85.94 31.16 93.07 88.20 12 0.151 3 0.257 0.408 - -In this case we see we have a relatively healthy heap profile, with 31.16% -old generation heap usage and 83% eden. If the old generation routinely is -above 75% then you probably need more heap (assuming CMS with a 75% occupancy -threshold). If you do have such persistently high old gen that often means you -either have under-provisioned the old generation heap, or that there is too -much live data on heap for Cassandra to collect (e.g. because of memtables). -Another thing to watch for is time between young garbage collections (YGC), -which indicate how frequently the eden heap is collected. Each young gc pause -is about 20-50ms, so if you have a lot of them your clients will notice in -their high percentile latencies. - -Thread Information (jstack) -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To get a point in time snapshot of exactly what Cassandra is doing, run -``jstack`` against the Cassandra PID. **Note** that this does pause the JVM for -a very brief period (<20ms).:: - - $ jstack > threaddump - - # display the threaddump - $ cat threaddump - ... - - # look at runnable threads - $grep RUNNABLE threaddump -B 1 - "Attach Listener" #15 daemon prio=9 os_prio=0 tid=0x00007f829c001000 nid=0x3a74 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -- - "DestroyJavaVM" #13 prio=5 os_prio=0 tid=0x00007f82e800e000 nid=0x2a19 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -- - "JPS thread pool" #10 prio=5 os_prio=0 tid=0x00007f82e84d0800 nid=0x2a2c runnable [0x00007f82d0856000] - java.lang.Thread.State: RUNNABLE - -- - "Service Thread" #9 daemon prio=9 os_prio=0 tid=0x00007f82e80d7000 nid=0x2a2a runnable [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -- - "C1 CompilerThread3" #8 daemon prio=9 os_prio=0 tid=0x00007f82e80cc000 nid=0x2a29 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -- - ... - - # Note that the nid is the Linux thread id - -Some of the most important information in the threaddumps are waiting/blocking -threads, including what locks or monitors the thread is blocking/waiting on. - -Basic OS Tooling ----------------- -A great place to start when debugging a Cassandra issue is understanding how -Cassandra is interacting with system resources. The following are all -resources that Cassandra makes heavy uses of: - -* CPU cores. For executing concurrent user queries -* CPU processing time. For query activity (data decompression, row merging, - etc...) -* CPU processing time (low priority). For background tasks (compaction, - streaming, etc ...) -* RAM for Java Heap. Used to hold internal data-structures and by default the - Cassandra memtables. Heap space is a crucial component of write performance - as well as generally. -* RAM for OS disk cache. Used to cache frequently accessed SSTable blocks. OS - disk cache is a crucial component of read performance. -* Disks. Cassandra cares a lot about disk read latency, disk write throughput, - and of course disk space. -* Network latency. Cassandra makes many internode requests, so network latency - between nodes can directly impact performance. -* Network throughput. Cassandra (as other databases) frequently have the - so called "incast" problem where a small request (e.g. ``SELECT * from - foo.bar``) returns a massively large result set (e.g. the entire dataset). - In such situations outgoing bandwidth is crucial. - -Often troubleshooting Cassandra comes down to troubleshooting what resource -the machine or cluster is running out of. Then you create more of that resource -or change the query pattern to make less use of that resource. - -High Level Resource Usage (top/htop) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Cassandra makes signifiant use of system resources, and often the very first -useful action is to run ``top`` or ``htop`` (`website -`_)to see the state of the machine. - -Useful things to look at: - -* System load levels. While these numbers can be confusing, generally speaking - if the load average is greater than the number of CPU cores, Cassandra - probably won't have very good (sub 100 millisecond) latencies. See - `Linux Load Averages `_ - for more information. -* CPU utilization. ``htop`` in particular can help break down CPU utilization - into ``user`` (low and normal priority), ``system`` (kernel), and ``io-wait`` - . Cassandra query threads execute as normal priority ``user`` threads, while - compaction threads execute as low priority ``user`` threads. High ``system`` - time could indicate problems like thread contention, and high ``io-wait`` - may indicate slow disk drives. This can help you understand what Cassandra - is spending processing resources doing. -* Memory usage. Look for which programs have the most resident memory, it is - probably Cassandra. The number for Cassandra is likely inaccurately high due - to how Linux (as of 2018) accounts for memory mapped file memory. - -.. _os-iostat: - -IO Usage (iostat) -^^^^^^^^^^^^^^^^^ -Use iostat to determine how data drives are faring, including latency -distributions, throughput, and utilization:: - - $ sudo iostat -xdm 2 - Linux 4.13.0-13-generic (hostname) 07/03/2018 _x86_64_ (8 CPU) - - Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util - sda 0.00 0.28 0.32 5.42 0.01 0.13 48.55 0.01 2.21 0.26 2.32 0.64 0.37 - sdb 0.00 0.00 0.00 0.00 0.00 0.00 79.34 0.00 0.20 0.20 0.00 0.16 0.00 - sdc 0.34 0.27 0.76 0.36 0.01 0.02 47.56 0.03 26.90 2.98 77.73 9.21 1.03 - - Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util - sda 0.00 0.00 2.00 32.00 0.01 4.04 244.24 0.54 16.00 0.00 17.00 1.06 3.60 - sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 - sdc 0.00 24.50 0.00 114.00 0.00 11.62 208.70 5.56 48.79 0.00 48.79 1.12 12.80 - - -In this case we can see that ``/dev/sdc1`` is a very slow drive, having an -``await`` close to 50 milliseconds and an ``avgqu-sz`` close to 5 ios. The -drive is not particularly saturated (utilization is only 12.8%), but we should -still be concerned about how this would affect our p99 latency since 50ms is -quite long for typical Cassandra operations. That being said, in this case -most of the latency is present in writes (typically writes are more latent -than reads), which due to the LSM nature of Cassandra is often hidden from -the user. - -Important metrics to assess using iostat: - -* Reads and writes per second. These numbers will change with the workload, - but generally speaking the more reads Cassandra has to do from disk the - slower Cassandra read latencies are. Large numbers of reads per second - can be a dead giveaway that the cluster has insufficient memory for OS - page caching. -* Write throughput. Cassandra's LSM model defers user writes and batches them - together, which means that throughput to the underlying medium is the most - important write metric for Cassandra. -* Read latency (``r_await``). When Cassandra missed the OS page cache and reads - from SSTables, the read latency directly determines how fast Cassandra can - respond with the data. -* Write latency. Cassandra is less sensitive to write latency except when it - syncs the commit log. This typically enters into the very high percentiles of - write latency. - -Note that to get detailed latency breakdowns you will need a more advanced -tool such as :ref:`bcc-tools `. - -OS page Cache Usage -^^^^^^^^^^^^^^^^^^^ -As Cassandra makes heavy use of memory mapped files, the health of the -operating system's `Page Cache `_ is -crucial to performance. Start by finding how much available cache is in the -system:: - - $ free -g - total used free shared buff/cache available - Mem: 15 9 2 0 3 5 - Swap: 0 0 0 - -In this case 9GB of memory is used by user processes (Cassandra heap) and 8GB -is available for OS page cache. Of that, 3GB is actually used to cache files. -If most memory is used and unavailable to the page cache, Cassandra performance -can suffer significantly. This is why Cassandra starts with a reasonably small -amount of memory reserved for the heap. - -If you suspect that you are missing the OS page cache frequently you can use -advanced tools like :ref:`cachestat ` or -:ref:`vmtouch ` to dive deeper. - -Network Latency and Reliability -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Whenever Cassandra does writes or reads that involve other replicas, -``LOCAL_QUORUM`` reads for example, one of the dominant effects on latency is -network latency. When trying to debug issues with multi machine operations, -the network can be an important resource to investigate. You can determine -internode latency using tools like ``ping`` and ``traceroute`` or most -effectively ``mtr``:: - - $ mtr -nr www.google.com - Start: Sun Jul 22 13:10:28 2018 - HOST: hostname Loss% Snt Last Avg Best Wrst StDev - 1.|-- 192.168.1.1 0.0% 10 2.0 1.9 1.1 3.7 0.7 - 2.|-- 96.123.29.15 0.0% 10 11.4 11.0 9.0 16.4 1.9 - 3.|-- 68.86.249.21 0.0% 10 10.6 10.7 9.0 13.7 1.1 - 4.|-- 162.141.78.129 0.0% 10 11.5 10.6 9.6 12.4 0.7 - 5.|-- 162.151.78.253 0.0% 10 10.9 12.1 10.4 20.2 2.8 - 6.|-- 68.86.143.93 0.0% 10 12.4 12.6 9.9 23.1 3.8 - 7.|-- 96.112.146.18 0.0% 10 11.9 12.4 10.6 15.5 1.6 - 9.|-- 209.85.252.250 0.0% 10 13.7 13.2 12.5 13.9 0.0 - 10.|-- 108.170.242.238 0.0% 10 12.7 12.4 11.1 13.0 0.5 - 11.|-- 74.125.253.149 0.0% 10 13.4 13.7 11.8 19.2 2.1 - 12.|-- 216.239.62.40 0.0% 10 13.4 14.7 11.5 26.9 4.6 - 13.|-- 108.170.242.81 0.0% 10 14.4 13.2 10.9 16.0 1.7 - 14.|-- 72.14.239.43 0.0% 10 12.2 16.1 11.0 32.8 7.1 - 15.|-- 216.58.195.68 0.0% 10 25.1 15.3 11.1 25.1 4.8 - -In this example of ``mtr``, we can rapidly assess the path that your packets -are taking, as well as what their typical loss and latency are. Packet loss -typically leads to between ``200ms`` and ``3s`` of additional latency, so that -can be a common cause of latency issues. - -Network Throughput -^^^^^^^^^^^^^^^^^^ -As Cassandra is sensitive to outgoing bandwidth limitations, sometimes it is -useful to determine if network throughput is limited. One handy tool to do -this is `iftop `_ which -shows both bandwidth usage as well as connection information at a glance. An -example showing traffic during a stress run against a local ``ccm`` cluster:: - - $ # remove the -t for ncurses instead of pure text - $ sudo iftop -nNtP -i lo - interface: lo - IP address is: 127.0.0.1 - MAC address is: 00:00:00:00:00:00 - Listening on lo - # Host name (port/service if enabled) last 2s last 10s last 40s cumulative - -------------------------------------------------------------------------------------------- - 1 127.0.0.1:58946 => 869Kb 869Kb 869Kb 217KB - 127.0.0.3:9042 <= 0b 0b 0b 0B - 2 127.0.0.1:54654 => 736Kb 736Kb 736Kb 184KB - 127.0.0.1:9042 <= 0b 0b 0b 0B - 3 127.0.0.1:51186 => 669Kb 669Kb 669Kb 167KB - 127.0.0.2:9042 <= 0b 0b 0b 0B - 4 127.0.0.3:9042 => 3.30Kb 3.30Kb 3.30Kb 845B - 127.0.0.1:58946 <= 0b 0b 0b 0B - 5 127.0.0.1:9042 => 2.79Kb 2.79Kb 2.79Kb 715B - 127.0.0.1:54654 <= 0b 0b 0b 0B - 6 127.0.0.2:9042 => 2.54Kb 2.54Kb 2.54Kb 650B - 127.0.0.1:51186 <= 0b 0b 0b 0B - 7 127.0.0.1:36894 => 1.65Kb 1.65Kb 1.65Kb 423B - 127.0.0.5:7000 <= 0b 0b 0b 0B - 8 127.0.0.1:38034 => 1.50Kb 1.50Kb 1.50Kb 385B - 127.0.0.2:7000 <= 0b 0b 0b 0B - 9 127.0.0.1:56324 => 1.50Kb 1.50Kb 1.50Kb 383B - 127.0.0.1:7000 <= 0b 0b 0b 0B - 10 127.0.0.1:53044 => 1.43Kb 1.43Kb 1.43Kb 366B - 127.0.0.4:7000 <= 0b 0b 0b 0B - -------------------------------------------------------------------------------------------- - Total send rate: 2.25Mb 2.25Mb 2.25Mb - Total receive rate: 0b 0b 0b - Total send and receive rate: 2.25Mb 2.25Mb 2.25Mb - -------------------------------------------------------------------------------------------- - Peak rate (sent/received/total): 2.25Mb 0b 2.25Mb - Cumulative (sent/received/total): 576KB 0B 576KB - ============================================================================================ - -In this case we can see that bandwidth is fairly shared between many peers, -but if the total was getting close to the rated capacity of the NIC or was focussed -on a single client, that may indicate a clue as to what issue is occurring. - -Advanced tools --------------- -Sometimes as an operator you may need to really dive deep. This is where -advanced OS tooling can come in handy. - -.. _use-bcc-tools: - -bcc-tools -^^^^^^^^^ -Most modern Linux distributions (kernels newer than ``4.1``) support `bcc-tools -`_ for diving deep into performance problems. -First install ``bcc-tools``, e.g. via ``apt`` on Debian:: - - $ apt install bcc-tools - -Then you can use all the tools that ``bcc-tools`` contains. One of the most -useful tools is ``cachestat`` -(`cachestat examples `_) -which allows you to determine exactly how many OS page cache hits and misses -are happening:: - - $ sudo /usr/share/bcc/tools/cachestat -T 1 - TIME TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB - 18:44:08 66 66 0 64 88 4427 - 18:44:09 40 40 0 75 88 4427 - 18:44:10 4353 45 4308 203 88 4427 - 18:44:11 84 77 7 13 88 4428 - 18:44:12 2511 14 2497 14 88 4428 - 18:44:13 101 98 3 18 88 4428 - 18:44:14 16741 0 16741 58 88 4428 - 18:44:15 1935 36 1899 18 88 4428 - 18:44:16 89 34 55 18 88 4428 - -In this case there are not too many page cache ``MISSES`` which indicates a -reasonably sized cache. These metrics are the most direct measurement of your -Cassandra node's "hot" dataset. If you don't have enough cache, ``MISSES`` will -be high and performance will be slow. If you have enough cache, ``MISSES`` will -be low and performance will be fast (as almost all reads are being served out -of memory). - -You can also measure disk latency distributions using ``biolatency`` -(`biolatency examples `_) -to get an idea of how slow Cassandra will be when reads miss the OS page Cache -and have to hit disks:: - - $ sudo /usr/share/bcc/tools/biolatency -D 10 - Tracing block device I/O... Hit Ctrl-C to end. - - - disk = 'sda' - usecs : count distribution - 0 -> 1 : 0 | | - 2 -> 3 : 0 | | - 4 -> 7 : 0 | | - 8 -> 15 : 0 | | - 16 -> 31 : 12 |****************************************| - 32 -> 63 : 9 |****************************** | - 64 -> 127 : 1 |*** | - 128 -> 255 : 3 |********** | - 256 -> 511 : 7 |*********************** | - 512 -> 1023 : 2 |****** | - - disk = 'sdc' - usecs : count distribution - 0 -> 1 : 0 | | - 2 -> 3 : 0 | | - 4 -> 7 : 0 | | - 8 -> 15 : 0 | | - 16 -> 31 : 0 | | - 32 -> 63 : 0 | | - 64 -> 127 : 41 |************ | - 128 -> 255 : 17 |***** | - 256 -> 511 : 13 |*** | - 512 -> 1023 : 2 | | - 1024 -> 2047 : 0 | | - 2048 -> 4095 : 0 | | - 4096 -> 8191 : 56 |***************** | - 8192 -> 16383 : 131 |****************************************| - 16384 -> 32767 : 9 |** | - -In this case most ios on the data drive (``sdc``) are fast, but many take -between 8 and 16 milliseconds. - -Finally ``biosnoop`` (`examples `_) -can be used to dive even deeper and see per IO latencies:: - - $ sudo /usr/share/bcc/tools/biosnoop | grep java | head - 0.000000000 java 17427 sdc R 3972458600 4096 13.58 - 0.000818000 java 17427 sdc R 3972459408 4096 0.35 - 0.007098000 java 17416 sdc R 3972401824 4096 5.81 - 0.007896000 java 17416 sdc R 3972489960 4096 0.34 - 0.008920000 java 17416 sdc R 3972489896 4096 0.34 - 0.009487000 java 17427 sdc R 3972401880 4096 0.32 - 0.010238000 java 17416 sdc R 3972488368 4096 0.37 - 0.010596000 java 17427 sdc R 3972488376 4096 0.34 - 0.011236000 java 17410 sdc R 3972488424 4096 0.32 - 0.011825000 java 17427 sdc R 3972488576 16384 0.65 - ... time passes - 8.032687000 java 18279 sdc R 10899712 122880 3.01 - 8.033175000 java 18279 sdc R 10899952 8192 0.46 - 8.073295000 java 18279 sdc R 23384320 122880 3.01 - 8.073768000 java 18279 sdc R 23384560 8192 0.46 - - -With ``biosnoop`` you see every single IO and how long they take. This data -can be used to construct the latency distributions in ``biolatency`` but can -also be used to better understand how disk latency affects performance. For -example this particular drive takes ~3ms to service a memory mapped read due to -the large default value (``128kb``) of ``read_ahead_kb``. To improve point read -performance you may may want to decrease ``read_ahead_kb`` on fast data volumes -such as SSDs while keeping the a higher value like ``128kb`` value is probably -right for HDs. There are tradeoffs involved, see `queue-sysfs -`_ docs for more -information, but regardless ``biosnoop`` is useful for understanding *how* -Cassandra uses drives. - -.. _use-vmtouch: - -vmtouch -^^^^^^^ -Sometimes it's useful to know how much of the Cassandra data files are being -cached by the OS. A great tool for answering this question is -`vmtouch `_. - -First install it:: - - $ git clone https://github.com/hoytech/vmtouch.git - $ cd vmtouch - $ make - -Then run it on the Cassandra data directory:: - - $ ./vmtouch /var/lib/cassandra/data/ - Files: 312 - Directories: 92 - Resident Pages: 62503/64308 244M/251M 97.2% - Elapsed: 0.005657 seconds - -In this case almost the entire dataset is hot in OS page Cache. Generally -speaking the percentage doesn't really matter unless reads are missing the -cache (per e.g. :ref:`cachestat `), in which case having -additional memory may help read performance. - -CPU Flamegraphs -^^^^^^^^^^^^^^^ -Cassandra often uses a lot of CPU, but telling *what* it is doing can prove -difficult. One of the best ways to analyze Cassandra on CPU time is to use -`CPU Flamegraphs `_ -which display in a useful way which areas of Cassandra code are using CPU. This -may help narrow down a compaction problem to a "compaction problem dropping -tombstones" or just generally help you narrow down what Cassandra is doing -while it is having an issue. To get CPU flamegraphs follow the instructions for -`Java Flamegraphs -`_. - -Generally: - -1. Enable the ``-XX:+PreserveFramePointer`` option in Cassandra's - ``jvm.options`` configuation file. This has a negligible performance impact - but allows you actually see what Cassandra is doing. -2. Run ``perf`` to get some data. -3. Send that data through the relevant scripts in the FlameGraph toolset and - convert the data into a pretty flamegraph. View the resulting SVG image in - a browser or other image browser. - -For example just cloning straight off github we first install the -``perf-map-agent`` to the location of our JVMs (assumed to be -``/usr/lib/jvm``):: - - $ sudo bash - $ export JAVA_HOME=/usr/lib/jvm/java-8-oracle/ - $ cd /usr/lib/jvm - $ git clone --depth=1 https://github.com/jvm-profiling-tools/perf-map-agent - $ cd perf-map-agent - $ cmake . - $ make - -Now to get a flamegraph:: - - $ git clone --depth=1 https://github.com/brendangregg/FlameGraph - $ sudo bash - $ cd FlameGraph - $ # Record traces of Cassandra and map symbols for all java processes - $ perf record -F 49 -a -g -p -- sleep 30; ./jmaps - $ # Translate the data - $ perf script > cassandra_stacks - $ cat cassandra_stacks | ./stackcollapse-perf.pl | grep -v cpu_idle | \ - ./flamegraph.pl --color=java --hash > cassandra_flames.svg - - -The resulting SVG is searchable, zoomable, and generally easy to introspect -using a browser. - -.. _packet-capture: - -Packet Capture -^^^^^^^^^^^^^^ -Sometimes you have to understand what queries a Cassandra node is performing -*right now* to troubleshoot an issue. For these times trusty packet capture -tools like ``tcpdump`` and `Wireshark -`_ can be very helpful to dissect packet captures. -Wireshark even has native `CQL support -`_ although it sometimes has -compatibility issues with newer Cassandra protocol releases. - -To get a packet capture first capture some packets:: - - $ sudo tcpdump -U -s0 -i -w cassandra.pcap -n "tcp port 9042" - -Now open it up with wireshark:: - - $ wireshark cassandra.pcap - -If you don't see CQL like statements try telling to decode as CQL by right -clicking on a packet going to 9042 -> ``Decode as`` -> select CQL from the -dropdown for port 9042. - -If you don't want to do this manually or use a GUI, you can also use something -like `cqltrace `_ to ease obtaining and -parsing CQL packet captures. diff --git a/source/tools/nodetool/nodetool.txt b/source/tools/nodetool/nodetool.txt new file mode 100644 index 000000000000..e69de29bb2d1 From 3c9001bbb15d7dc62f338a3c2031861bc8f678a4 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 8 Jul 2020 18:16:07 -0700 Subject: [PATCH 002/115] small makefile change --- doc/Makefile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index 722dcfc7f58d..315898750831 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -64,8 +64,7 @@ clean: html: $(MAKE_CASSANDRA_YAML) $(GENERATE_NODETOOL_DOCS) - @echo "use antora" - $(ANTORAOPTS) $(ANTORACMD) $(ANTORAYAML) $(BUILDDIR)/html + $(ANTORAOPTS) $(ANTORACMD) $(ANTORAYAML) @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." @@ -74,7 +73,7 @@ website: clean @touch $(WEB_SITE_PRESENCE_FILE) $(MAKE_CASSANDRA_YAML) $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + $(ANTORAOPTS) $(ANTORACMD) $(ANTORAYAML) @rm $(WEB_SITE_PRESENCE_FILE) @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." From 1d0da88492993daf84d28edca07bd7ec3d2e27cf Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 9 Jul 2020 09:29:30 -0700 Subject: [PATCH 003/115] slight changes to yaml files --- doc/site.yml | 2 +- doc/source/antora.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/site.yml b/doc/site.yml index a7efb0565cca..e0a074e49c6b 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -5,7 +5,7 @@ site: content: sources: - url: /Users/lorina.poland/CLONES/cassandra - branches: [doc_redo_asciidoc,4.0-rc5, 3.11] + branches: [doc_redo_asciidoc,doc_redo_asciidoc3.11,4.0-rc5, 3.11] start_path: doc/source output: diff --git a/doc/source/antora.yml b/doc/source/antora.yml index 33e14f0cbcaf..804e6e56331c 100644 --- a/doc/source/antora.yml +++ b/doc/source/antora.yml @@ -1,6 +1,6 @@ name: Cassandra -version: '4.0' -prerelease: -rc.5 +version: '3.11' +prerelease: -rc.test nav: - modules/ROOT/nav.adoc - modules/cassandra/nav.adoc From 72e766cc03540bba9c456649f5ed36c8b58f4e8f Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 9 Jul 2020 11:19:34 -0700 Subject: [PATCH 004/115] cleanup yaml convert script --- doc/convert_yaml_to_adoc.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/convert_yaml_to_adoc.py b/doc/convert_yaml_to_adoc.py index 5906f116a0a5..c0cac0bfc769 100644 --- a/doc/convert_yaml_to_adoc.py +++ b/doc/convert_yaml_to_adoc.py @@ -19,8 +19,11 @@ the online documentation. Usage: -# LLP 07.06.20 FIGURE OUT THE OUTPUT FILE - convert_yaml_to_adoc.py conf/cassandra.yaml docs/source/conf.adoc + +YAML_INPUT=conf/cassandra.yaml +YAML_OUTPUT=source/modules/cassandra/pages/configuration/cass_yaml_file.adoc + + convert_yaml_to_adoc.py $YAML_INPUT $YAML_OUTPUT """ import sys @@ -50,15 +53,12 @@ 'hinted_handoff_disabled_datacenters' ) - def convert(yaml_file, dest_file): with open(yaml_file, 'r') as f: # Trim off the boilerplate header lines = f.readlines()[7:] with open(dest_file, 'w') as outfile: - #next line not needed? LLP 07.06.20 - #outfile.write(".. _cassandra-yaml:\n") outfile.write("= cassandra.yaml file configuration\n") # since comments preceed an option, this holds all of the comment From cb8037982f6cbcd9d1f834ccc7c63eefdd631795 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 9 Jul 2020 11:58:58 -0700 Subject: [PATCH 005/115] cleanup NODETOOL TEXT include file location --- doc/Makefile | 1 - doc/gen-nodetool-docs.py | 4 ++-- .../cassandra/examples/{ => TEXT/NODETOOL}/assassinate.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/bootstrap.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/cleanup.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/clearsnapshot.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/clientstats.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/compact.txt | 0 .../examples/{ => TEXT/NODETOOL}/compactionhistory.txt | 0 .../examples/{ => TEXT/NODETOOL}/compactionstats.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/decommission.txt | 0 .../examples/{ => TEXT/NODETOOL}/describecluster.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/describering.txt | 0 .../examples/{ => TEXT/NODETOOL}/disableauditlog.txt | 0 .../examples/{ => TEXT/NODETOOL}/disableautocompaction.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/disablebackup.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/disablebinary.txt | 0 .../examples/{ => TEXT/NODETOOL}/disablefullquerylog.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/disablegossip.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/disablehandoff.txt | 0 .../examples/{ => TEXT/NODETOOL}/disablehintsfordc.txt | 0 .../{ => TEXT/NODETOOL}/disableoldprotocolversions.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/drain.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/enableauditlog.txt | 0 .../examples/{ => TEXT/NODETOOL}/enableautocompaction.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/enablebackup.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/enablebinary.txt | 0 .../examples/{ => TEXT/NODETOOL}/enablefullquerylog.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/enablegossip.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/enablehandoff.txt | 0 .../examples/{ => TEXT/NODETOOL}/enablehintsfordc.txt | 0 .../{ => TEXT/NODETOOL}/enableoldprotocolversions.txt | 0 .../examples/{ => TEXT/NODETOOL}/failuredetector.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/flush.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/garbagecollect.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/gcstats.txt | 0 .../{ => TEXT/NODETOOL}/getbatchlogreplaythrottle.txt | 0 .../examples/{ => TEXT/NODETOOL}/getcompactionthreshold.txt | 0 .../examples/{ => TEXT/NODETOOL}/getcompactionthroughput.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/getconcurrency.txt | 0 .../examples/{ => TEXT/NODETOOL}/getconcurrentcompactors.txt | 0 .../{ => TEXT/NODETOOL}/getconcurrentviewbuilders.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/getendpoints.txt | 0 .../{ => TEXT/NODETOOL}/getinterdcstreamthroughput.txt | 0 .../examples/{ => TEXT/NODETOOL}/getlogginglevels.txt | 0 .../examples/{ => TEXT/NODETOOL}/getmaxhintwindow.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/getseeds.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/getsstables.txt | 0 .../examples/{ => TEXT/NODETOOL}/getstreamthroughput.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/gettimeout.txt | 0 .../examples/{ => TEXT/NODETOOL}/gettraceprobability.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/gossipinfo.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/help.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/import.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/info.txt | 0 .../examples/{ => TEXT/NODETOOL}/invalidatecountercache.txt | 0 .../examples/{ => TEXT/NODETOOL}/invalidatekeycache.txt | 0 .../examples/{ => TEXT/NODETOOL}/invalidaterowcache.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/join.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/listsnapshots.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/move.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/netstats.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/pausehandoff.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/profileload.txt | 0 .../examples/{ => TEXT/NODETOOL}/proxyhistograms.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/rangekeysample.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/rebuild.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/rebuild_index.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/refresh.txt | 0 .../examples/{ => TEXT/NODETOOL}/refreshsizeestimates.txt | 0 .../examples/{ => TEXT/NODETOOL}/reloadlocalschema.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/reloadseeds.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/reloadssl.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/reloadtriggers.txt | 0 .../examples/{ => TEXT/NODETOOL}/relocatesstables.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/removenode.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/repair.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/repair_admin.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/replaybatchlog.txt | 0 .../examples/{ => TEXT/NODETOOL}/resetfullquerylog.txt | 0 .../examples/{ => TEXT/NODETOOL}/resetlocalschema.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/resumehandoff.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/ring.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/scrub.txt | 0 .../{ => TEXT/NODETOOL}/setbatchlogreplaythrottle.txt | 0 .../examples/{ => TEXT/NODETOOL}/setcachecapacity.txt | 0 .../examples/{ => TEXT/NODETOOL}/setcachekeystosave.txt | 0 .../examples/{ => TEXT/NODETOOL}/setcompactionthreshold.txt | 0 .../examples/{ => TEXT/NODETOOL}/setcompactionthroughput.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/setconcurrency.txt | 0 .../examples/{ => TEXT/NODETOOL}/setconcurrentcompactors.txt | 0 .../{ => TEXT/NODETOOL}/setconcurrentviewbuilders.txt | 0 .../{ => TEXT/NODETOOL}/sethintedhandoffthrottlekb.txt | 0 .../{ => TEXT/NODETOOL}/setinterdcstreamthroughput.txt | 0 .../examples/{ => TEXT/NODETOOL}/setlogginglevel.txt | 0 .../examples/{ => TEXT/NODETOOL}/setmaxhintwindow.txt | 0 .../examples/{ => TEXT/NODETOOL}/setstreamthroughput.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/settimeout.txt | 0 .../examples/{ => TEXT/NODETOOL}/settraceprobability.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/sjk.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/snapshot.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/status.txt | 0 .../examples/{ => TEXT/NODETOOL}/statusautocompaction.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/statusbackup.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/statusbinary.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/statusgossip.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/statushandoff.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/stop.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/stopdaemon.txt | 0 .../examples/{ => TEXT/NODETOOL}/tablehistograms.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/tablestats.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/toppartitions.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/tpstats.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/truncatehints.txt | 0 .../examples/{ => TEXT/NODETOOL}/upgradesstables.txt | 0 .../modules/cassandra/examples/{ => TEXT/NODETOOL}/verify.txt | 0 .../cassandra/examples/{ => TEXT/NODETOOL}/version.txt | 0 .../examples/{ => TEXT/NODETOOL}/viewbuildstatus.txt | 0 .../modules/cassandra/pages/tools/nodetool/assassinate.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/bootstrap.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/cleanup.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/clientstats.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/compact.adoc | 2 +- .../cassandra/pages/tools/nodetool/compactionhistory.adoc | 2 +- .../cassandra/pages/tools/nodetool/compactionstats.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/decommission.adoc | 2 +- .../cassandra/pages/tools/nodetool/describecluster.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/describering.adoc | 2 +- .../cassandra/pages/tools/nodetool/disableauditlog.adoc | 2 +- .../cassandra/pages/tools/nodetool/disableautocompaction.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/disablebackup.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/disablebinary.adoc | 2 +- .../cassandra/pages/tools/nodetool/disablefullquerylog.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/disablegossip.adoc | 2 +- .../cassandra/pages/tools/nodetool/disablehandoff.adoc | 2 +- .../cassandra/pages/tools/nodetool/disablehintsfordc.adoc | 2 +- .../pages/tools/nodetool/disableoldprotocolversions.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc | 2 +- .../cassandra/pages/tools/nodetool/enableauditlog.adoc | 2 +- .../cassandra/pages/tools/nodetool/enableautocompaction.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/enablebackup.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/enablebinary.adoc | 2 +- .../cassandra/pages/tools/nodetool/enablefullquerylog.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/enablegossip.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/enablehandoff.adoc | 2 +- .../cassandra/pages/tools/nodetool/enablehintsfordc.adoc | 2 +- .../pages/tools/nodetool/enableoldprotocolversions.adoc | 2 +- .../cassandra/pages/tools/nodetool/failuredetector.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc | 2 +- .../cassandra/pages/tools/nodetool/garbagecollect.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/gcstats.adoc | 2 +- .../pages/tools/nodetool/getbatchlogreplaythrottle.adoc | 2 +- .../pages/tools/nodetool/getcompactionthreshold.adoc | 2 +- .../pages/tools/nodetool/getcompactionthroughput.adoc | 2 +- .../cassandra/pages/tools/nodetool/getconcurrency.adoc | 2 +- .../pages/tools/nodetool/getconcurrentcompactors.adoc | 2 +- .../pages/tools/nodetool/getconcurrentviewbuilders.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/getendpoints.adoc | 2 +- .../pages/tools/nodetool/getinterdcstreamthroughput.adoc | 2 +- .../cassandra/pages/tools/nodetool/getlogginglevels.adoc | 2 +- .../cassandra/pages/tools/nodetool/getmaxhintwindow.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/getseeds.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/getsstables.adoc | 2 +- .../cassandra/pages/tools/nodetool/getstreamthroughput.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/gettimeout.adoc | 2 +- .../cassandra/pages/tools/nodetool/gettraceprobability.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/gossipinfo.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/help.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/import.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/info.adoc | 2 +- .../pages/tools/nodetool/invalidatecountercache.adoc | 2 +- .../cassandra/pages/tools/nodetool/invalidatekeycache.adoc | 2 +- .../cassandra/pages/tools/nodetool/invalidaterowcache.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/join.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/listsnapshots.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/move.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/netstats.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/pausehandoff.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/profileload.adoc | 2 +- .../cassandra/pages/tools/nodetool/proxyhistograms.adoc | 2 +- .../cassandra/pages/tools/nodetool/rangekeysample.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/rebuild.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/rebuild_index.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/refresh.adoc | 2 +- .../cassandra/pages/tools/nodetool/refreshsizeestimates.adoc | 2 +- .../cassandra/pages/tools/nodetool/reloadlocalschema.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/reloadseeds.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/reloadssl.adoc | 2 +- .../cassandra/pages/tools/nodetool/reloadtriggers.adoc | 2 +- .../cassandra/pages/tools/nodetool/relocatesstables.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/removenode.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/repair_admin.adoc | 2 +- .../cassandra/pages/tools/nodetool/replaybatchlog.adoc | 2 +- .../cassandra/pages/tools/nodetool/resetfullquerylog.adoc | 2 +- .../cassandra/pages/tools/nodetool/resetlocalschema.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/resumehandoff.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc | 2 +- .../pages/tools/nodetool/setbatchlogreplaythrottle.adoc | 2 +- .../cassandra/pages/tools/nodetool/setcachecapacity.adoc | 2 +- .../cassandra/pages/tools/nodetool/setcachekeystosave.adoc | 2 +- .../pages/tools/nodetool/setcompactionthreshold.adoc | 2 +- .../pages/tools/nodetool/setcompactionthroughput.adoc | 2 +- .../cassandra/pages/tools/nodetool/setconcurrency.adoc | 2 +- .../pages/tools/nodetool/setconcurrentcompactors.adoc | 2 +- .../pages/tools/nodetool/setconcurrentviewbuilders.adoc | 2 +- .../pages/tools/nodetool/sethintedhandoffthrottlekb.adoc | 2 +- .../pages/tools/nodetool/setinterdcstreamthroughput.adoc | 2 +- .../cassandra/pages/tools/nodetool/setlogginglevel.adoc | 2 +- .../cassandra/pages/tools/nodetool/setmaxhintwindow.adoc | 2 +- .../cassandra/pages/tools/nodetool/setstreamthroughput.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/settimeout.adoc | 2 +- .../cassandra/pages/tools/nodetool/settraceprobability.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/snapshot.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/status.adoc | 2 +- .../cassandra/pages/tools/nodetool/statusautocompaction.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/statusbackup.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/statusbinary.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/statusgossip.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/statushandoff.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/stopdaemon.adoc | 2 +- .../cassandra/pages/tools/nodetool/tablehistograms.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/tablestats.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/toppartitions.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/tpstats.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/truncatehints.adoc | 2 +- .../cassandra/pages/tools/nodetool/upgradesstables.adoc | 2 +- doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc | 2 +- .../modules/cassandra/pages/tools/nodetool/version.adoc | 2 +- .../cassandra/pages/tools/nodetool/viewbuildstatus.adoc | 2 +- 234 files changed, 118 insertions(+), 119 deletions(-) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/assassinate.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/bootstrap.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/cleanup.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/clearsnapshot.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/clientstats.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/compact.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/compactionhistory.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/compactionstats.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/decommission.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/describecluster.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/describering.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/disableauditlog.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/disableautocompaction.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/disablebackup.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/disablebinary.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/disablefullquerylog.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/disablegossip.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/disablehandoff.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/disablehintsfordc.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/disableoldprotocolversions.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/drain.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/enableauditlog.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/enableautocompaction.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/enablebackup.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/enablebinary.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/enablefullquerylog.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/enablegossip.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/enablehandoff.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/enablehintsfordc.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/enableoldprotocolversions.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/failuredetector.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/flush.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/garbagecollect.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/gcstats.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getbatchlogreplaythrottle.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getcompactionthreshold.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getcompactionthroughput.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getconcurrency.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getconcurrentcompactors.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getconcurrentviewbuilders.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getendpoints.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getinterdcstreamthroughput.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getlogginglevels.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getmaxhintwindow.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getseeds.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getsstables.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/getstreamthroughput.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/gettimeout.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/gettraceprobability.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/gossipinfo.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/help.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/import.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/info.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/invalidatecountercache.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/invalidatekeycache.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/invalidaterowcache.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/join.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/listsnapshots.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/move.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/netstats.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/pausehandoff.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/profileload.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/proxyhistograms.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/rangekeysample.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/rebuild.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/rebuild_index.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/refresh.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/refreshsizeestimates.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/reloadlocalschema.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/reloadseeds.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/reloadssl.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/reloadtriggers.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/relocatesstables.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/removenode.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/repair.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/repair_admin.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/replaybatchlog.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/resetfullquerylog.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/resetlocalschema.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/resumehandoff.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/ring.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/scrub.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setbatchlogreplaythrottle.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setcachecapacity.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setcachekeystosave.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setcompactionthreshold.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setcompactionthroughput.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setconcurrency.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setconcurrentcompactors.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setconcurrentviewbuilders.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/sethintedhandoffthrottlekb.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setinterdcstreamthroughput.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setlogginglevel.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setmaxhintwindow.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/setstreamthroughput.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/settimeout.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/settraceprobability.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/sjk.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/snapshot.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/status.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/statusautocompaction.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/statusbackup.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/statusbinary.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/statusgossip.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/statushandoff.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/stop.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/stopdaemon.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/tablehistograms.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/tablestats.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/toppartitions.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/tpstats.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/truncatehints.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/upgradesstables.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/verify.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/version.txt (100%) rename doc/source/modules/cassandra/examples/{ => TEXT/NODETOOL}/viewbuildstatus.txt (100%) diff --git a/doc/Makefile b/doc/Makefile index 315898750831..cb5746d4faaf 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -15,7 +15,6 @@ BUILDDIR = build #I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source YAML_DOC_INPUT=../conf/cassandra.yaml -#YAML_DOC_OUTPUT=source/configuration/cassandra_config_file.adoc YAML_DOC_OUTPUT=source/modules/cassandra/pages/configuration/cass_yaml_file.adoc MAKE_CASSANDRA_YAML = python convert_yaml_to_adoc.py $(YAML_DOC_INPUT) $(YAML_DOC_OUTPUT) diff --git a/doc/gen-nodetool-docs.py b/doc/gen-nodetool-docs.py index ef22b1540a7a..420ce473ad9a 100644 --- a/doc/gen-nodetool-docs.py +++ b/doc/gen-nodetool-docs.py @@ -31,10 +31,10 @@ nodetool = "../bin/nodetool" outdir = "source/modules/cassandra/pages/tools/nodetool" -examplesdir = "source/modules/cassandra/examples" +examplesdir = "source/modules/cassandra/examples/TEXT/NODETOOL" helpfilename = outdir + "/nodetool.txt" command_re = re.compile("( )([_a-z]+)") -commandADOCContent = "== {0}\n\n== Usage\n[source,plaintext]\n----\ninclude::example${0}.txt[]\n----\n" +commandADOCContent = "== {0}\n\n== Usage\n[source,plaintext]\n----\ninclude::example$TEXT/NODETOOL/{0}.txt[]\n----\n" # create the documentation directory if not os.path.exists(outdir): diff --git a/doc/source/modules/cassandra/examples/assassinate.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt similarity index 100% rename from doc/source/modules/cassandra/examples/assassinate.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt diff --git a/doc/source/modules/cassandra/examples/bootstrap.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/bootstrap.txt similarity index 100% rename from doc/source/modules/cassandra/examples/bootstrap.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/bootstrap.txt diff --git a/doc/source/modules/cassandra/examples/cleanup.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt similarity index 100% rename from doc/source/modules/cassandra/examples/cleanup.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt diff --git a/doc/source/modules/cassandra/examples/clearsnapshot.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/clearsnapshot.txt similarity index 100% rename from doc/source/modules/cassandra/examples/clearsnapshot.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/clearsnapshot.txt diff --git a/doc/source/modules/cassandra/examples/clientstats.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/clientstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/clientstats.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/clientstats.txt diff --git a/doc/source/modules/cassandra/examples/compact.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/compact.txt similarity index 100% rename from doc/source/modules/cassandra/examples/compact.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/compact.txt diff --git a/doc/source/modules/cassandra/examples/compactionhistory.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/compactionhistory.txt similarity index 100% rename from doc/source/modules/cassandra/examples/compactionhistory.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/compactionhistory.txt diff --git a/doc/source/modules/cassandra/examples/compactionstats.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/compactionstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/compactionstats.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/compactionstats.txt diff --git a/doc/source/modules/cassandra/examples/decommission.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt similarity index 100% rename from doc/source/modules/cassandra/examples/decommission.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt diff --git a/doc/source/modules/cassandra/examples/describecluster.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/describecluster.txt similarity index 100% rename from doc/source/modules/cassandra/examples/describecluster.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/describecluster.txt diff --git a/doc/source/modules/cassandra/examples/describering.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/describering.txt similarity index 100% rename from doc/source/modules/cassandra/examples/describering.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/describering.txt diff --git a/doc/source/modules/cassandra/examples/disableauditlog.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableauditlog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/disableauditlog.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableauditlog.txt diff --git a/doc/source/modules/cassandra/examples/disableautocompaction.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableautocompaction.txt similarity index 100% rename from doc/source/modules/cassandra/examples/disableautocompaction.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableautocompaction.txt diff --git a/doc/source/modules/cassandra/examples/disablebackup.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablebackup.txt similarity index 100% rename from doc/source/modules/cassandra/examples/disablebackup.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablebackup.txt diff --git a/doc/source/modules/cassandra/examples/disablebinary.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablebinary.txt similarity index 100% rename from doc/source/modules/cassandra/examples/disablebinary.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablebinary.txt diff --git a/doc/source/modules/cassandra/examples/disablefullquerylog.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablefullquerylog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/disablefullquerylog.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablefullquerylog.txt diff --git a/doc/source/modules/cassandra/examples/disablegossip.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablegossip.txt similarity index 100% rename from doc/source/modules/cassandra/examples/disablegossip.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablegossip.txt diff --git a/doc/source/modules/cassandra/examples/disablehandoff.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablehandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/disablehandoff.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablehandoff.txt diff --git a/doc/source/modules/cassandra/examples/disablehintsfordc.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablehintsfordc.txt similarity index 100% rename from doc/source/modules/cassandra/examples/disablehintsfordc.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablehintsfordc.txt diff --git a/doc/source/modules/cassandra/examples/disableoldprotocolversions.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableoldprotocolversions.txt similarity index 100% rename from doc/source/modules/cassandra/examples/disableoldprotocolversions.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableoldprotocolversions.txt diff --git a/doc/source/modules/cassandra/examples/drain.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/drain.txt similarity index 100% rename from doc/source/modules/cassandra/examples/drain.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/drain.txt diff --git a/doc/source/modules/cassandra/examples/enableauditlog.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableauditlog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/enableauditlog.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableauditlog.txt diff --git a/doc/source/modules/cassandra/examples/enableautocompaction.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableautocompaction.txt similarity index 100% rename from doc/source/modules/cassandra/examples/enableautocompaction.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableautocompaction.txt diff --git a/doc/source/modules/cassandra/examples/enablebackup.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablebackup.txt similarity index 100% rename from doc/source/modules/cassandra/examples/enablebackup.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablebackup.txt diff --git a/doc/source/modules/cassandra/examples/enablebinary.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablebinary.txt similarity index 100% rename from doc/source/modules/cassandra/examples/enablebinary.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablebinary.txt diff --git a/doc/source/modules/cassandra/examples/enablefullquerylog.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablefullquerylog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/enablefullquerylog.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablefullquerylog.txt diff --git a/doc/source/modules/cassandra/examples/enablegossip.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablegossip.txt similarity index 100% rename from doc/source/modules/cassandra/examples/enablegossip.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablegossip.txt diff --git a/doc/source/modules/cassandra/examples/enablehandoff.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablehandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/enablehandoff.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablehandoff.txt diff --git a/doc/source/modules/cassandra/examples/enablehintsfordc.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablehintsfordc.txt similarity index 100% rename from doc/source/modules/cassandra/examples/enablehintsfordc.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablehintsfordc.txt diff --git a/doc/source/modules/cassandra/examples/enableoldprotocolversions.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableoldprotocolversions.txt similarity index 100% rename from doc/source/modules/cassandra/examples/enableoldprotocolversions.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableoldprotocolversions.txt diff --git a/doc/source/modules/cassandra/examples/failuredetector.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/failuredetector.txt similarity index 100% rename from doc/source/modules/cassandra/examples/failuredetector.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/failuredetector.txt diff --git a/doc/source/modules/cassandra/examples/flush.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/flush.txt similarity index 100% rename from doc/source/modules/cassandra/examples/flush.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/flush.txt diff --git a/doc/source/modules/cassandra/examples/garbagecollect.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/garbagecollect.txt similarity index 100% rename from doc/source/modules/cassandra/examples/garbagecollect.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/garbagecollect.txt diff --git a/doc/source/modules/cassandra/examples/gcstats.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/gcstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/gcstats.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/gcstats.txt diff --git a/doc/source/modules/cassandra/examples/getbatchlogreplaythrottle.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getbatchlogreplaythrottle.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getbatchlogreplaythrottle.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getbatchlogreplaythrottle.txt diff --git a/doc/source/modules/cassandra/examples/getcompactionthreshold.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthreshold.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getcompactionthreshold.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthreshold.txt diff --git a/doc/source/modules/cassandra/examples/getcompactionthroughput.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getcompactionthroughput.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthroughput.txt diff --git a/doc/source/modules/cassandra/examples/getconcurrency.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrency.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getconcurrency.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrency.txt diff --git a/doc/source/modules/cassandra/examples/getconcurrentcompactors.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentcompactors.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getconcurrentcompactors.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentcompactors.txt diff --git a/doc/source/modules/cassandra/examples/getconcurrentviewbuilders.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentviewbuilders.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getconcurrentviewbuilders.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentviewbuilders.txt diff --git a/doc/source/modules/cassandra/examples/getendpoints.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getendpoints.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getendpoints.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getendpoints.txt diff --git a/doc/source/modules/cassandra/examples/getinterdcstreamthroughput.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getinterdcstreamthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getinterdcstreamthroughput.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getinterdcstreamthroughput.txt diff --git a/doc/source/modules/cassandra/examples/getlogginglevels.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getlogginglevels.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getlogginglevels.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getlogginglevels.txt diff --git a/doc/source/modules/cassandra/examples/getmaxhintwindow.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getmaxhintwindow.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getmaxhintwindow.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getmaxhintwindow.txt diff --git a/doc/source/modules/cassandra/examples/getseeds.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getseeds.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getseeds.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getseeds.txt diff --git a/doc/source/modules/cassandra/examples/getsstables.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getsstables.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getsstables.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getsstables.txt diff --git a/doc/source/modules/cassandra/examples/getstreamthroughput.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getstreamthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/getstreamthroughput.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/getstreamthroughput.txt diff --git a/doc/source/modules/cassandra/examples/gettimeout.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/gettimeout.txt similarity index 100% rename from doc/source/modules/cassandra/examples/gettimeout.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/gettimeout.txt diff --git a/doc/source/modules/cassandra/examples/gettraceprobability.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/gettraceprobability.txt similarity index 100% rename from doc/source/modules/cassandra/examples/gettraceprobability.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/gettraceprobability.txt diff --git a/doc/source/modules/cassandra/examples/gossipinfo.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/gossipinfo.txt similarity index 100% rename from doc/source/modules/cassandra/examples/gossipinfo.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/gossipinfo.txt diff --git a/doc/source/modules/cassandra/examples/help.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/help.txt similarity index 100% rename from doc/source/modules/cassandra/examples/help.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/help.txt diff --git a/doc/source/modules/cassandra/examples/import.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/import.txt similarity index 100% rename from doc/source/modules/cassandra/examples/import.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/import.txt diff --git a/doc/source/modules/cassandra/examples/info.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/info.txt similarity index 100% rename from doc/source/modules/cassandra/examples/info.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/info.txt diff --git a/doc/source/modules/cassandra/examples/invalidatecountercache.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidatecountercache.txt similarity index 100% rename from doc/source/modules/cassandra/examples/invalidatecountercache.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidatecountercache.txt diff --git a/doc/source/modules/cassandra/examples/invalidatekeycache.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidatekeycache.txt similarity index 100% rename from doc/source/modules/cassandra/examples/invalidatekeycache.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidatekeycache.txt diff --git a/doc/source/modules/cassandra/examples/invalidaterowcache.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidaterowcache.txt similarity index 100% rename from doc/source/modules/cassandra/examples/invalidaterowcache.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidaterowcache.txt diff --git a/doc/source/modules/cassandra/examples/join.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/join.txt similarity index 100% rename from doc/source/modules/cassandra/examples/join.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/join.txt diff --git a/doc/source/modules/cassandra/examples/listsnapshots.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/listsnapshots.txt similarity index 100% rename from doc/source/modules/cassandra/examples/listsnapshots.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/listsnapshots.txt diff --git a/doc/source/modules/cassandra/examples/move.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/move.txt similarity index 100% rename from doc/source/modules/cassandra/examples/move.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/move.txt diff --git a/doc/source/modules/cassandra/examples/netstats.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/netstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/netstats.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/netstats.txt diff --git a/doc/source/modules/cassandra/examples/pausehandoff.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/pausehandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/pausehandoff.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/pausehandoff.txt diff --git a/doc/source/modules/cassandra/examples/profileload.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/profileload.txt similarity index 100% rename from doc/source/modules/cassandra/examples/profileload.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/profileload.txt diff --git a/doc/source/modules/cassandra/examples/proxyhistograms.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/proxyhistograms.txt similarity index 100% rename from doc/source/modules/cassandra/examples/proxyhistograms.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/proxyhistograms.txt diff --git a/doc/source/modules/cassandra/examples/rangekeysample.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/rangekeysample.txt similarity index 100% rename from doc/source/modules/cassandra/examples/rangekeysample.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/rangekeysample.txt diff --git a/doc/source/modules/cassandra/examples/rebuild.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/rebuild.txt similarity index 100% rename from doc/source/modules/cassandra/examples/rebuild.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/rebuild.txt diff --git a/doc/source/modules/cassandra/examples/rebuild_index.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/rebuild_index.txt similarity index 100% rename from doc/source/modules/cassandra/examples/rebuild_index.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/rebuild_index.txt diff --git a/doc/source/modules/cassandra/examples/refresh.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/refresh.txt similarity index 100% rename from doc/source/modules/cassandra/examples/refresh.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/refresh.txt diff --git a/doc/source/modules/cassandra/examples/refreshsizeestimates.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/refreshsizeestimates.txt similarity index 100% rename from doc/source/modules/cassandra/examples/refreshsizeestimates.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/refreshsizeestimates.txt diff --git a/doc/source/modules/cassandra/examples/reloadlocalschema.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadlocalschema.txt similarity index 100% rename from doc/source/modules/cassandra/examples/reloadlocalschema.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadlocalschema.txt diff --git a/doc/source/modules/cassandra/examples/reloadseeds.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadseeds.txt similarity index 100% rename from doc/source/modules/cassandra/examples/reloadseeds.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadseeds.txt diff --git a/doc/source/modules/cassandra/examples/reloadssl.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadssl.txt similarity index 100% rename from doc/source/modules/cassandra/examples/reloadssl.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadssl.txt diff --git a/doc/source/modules/cassandra/examples/reloadtriggers.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadtriggers.txt similarity index 100% rename from doc/source/modules/cassandra/examples/reloadtriggers.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadtriggers.txt diff --git a/doc/source/modules/cassandra/examples/relocatesstables.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/relocatesstables.txt similarity index 100% rename from doc/source/modules/cassandra/examples/relocatesstables.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/relocatesstables.txt diff --git a/doc/source/modules/cassandra/examples/removenode.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/removenode.txt similarity index 100% rename from doc/source/modules/cassandra/examples/removenode.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/removenode.txt diff --git a/doc/source/modules/cassandra/examples/repair.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/repair.txt similarity index 100% rename from doc/source/modules/cassandra/examples/repair.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/repair.txt diff --git a/doc/source/modules/cassandra/examples/repair_admin.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/repair_admin.txt similarity index 100% rename from doc/source/modules/cassandra/examples/repair_admin.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/repair_admin.txt diff --git a/doc/source/modules/cassandra/examples/replaybatchlog.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/replaybatchlog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/replaybatchlog.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/replaybatchlog.txt diff --git a/doc/source/modules/cassandra/examples/resetfullquerylog.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/resetfullquerylog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/resetfullquerylog.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/resetfullquerylog.txt diff --git a/doc/source/modules/cassandra/examples/resetlocalschema.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/resetlocalschema.txt similarity index 100% rename from doc/source/modules/cassandra/examples/resetlocalschema.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/resetlocalschema.txt diff --git a/doc/source/modules/cassandra/examples/resumehandoff.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/resumehandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/resumehandoff.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/resumehandoff.txt diff --git a/doc/source/modules/cassandra/examples/ring.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/ring.txt similarity index 100% rename from doc/source/modules/cassandra/examples/ring.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/ring.txt diff --git a/doc/source/modules/cassandra/examples/scrub.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/scrub.txt similarity index 100% rename from doc/source/modules/cassandra/examples/scrub.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/scrub.txt diff --git a/doc/source/modules/cassandra/examples/setbatchlogreplaythrottle.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setbatchlogreplaythrottle.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setbatchlogreplaythrottle.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setbatchlogreplaythrottle.txt diff --git a/doc/source/modules/cassandra/examples/setcachecapacity.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcachecapacity.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setcachecapacity.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcachecapacity.txt diff --git a/doc/source/modules/cassandra/examples/setcachekeystosave.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcachekeystosave.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setcachekeystosave.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcachekeystosave.txt diff --git a/doc/source/modules/cassandra/examples/setcompactionthreshold.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthreshold.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setcompactionthreshold.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthreshold.txt diff --git a/doc/source/modules/cassandra/examples/setcompactionthroughput.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setcompactionthroughput.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthroughput.txt diff --git a/doc/source/modules/cassandra/examples/setconcurrency.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrency.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setconcurrency.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrency.txt diff --git a/doc/source/modules/cassandra/examples/setconcurrentcompactors.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentcompactors.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setconcurrentcompactors.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentcompactors.txt diff --git a/doc/source/modules/cassandra/examples/setconcurrentviewbuilders.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentviewbuilders.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setconcurrentviewbuilders.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentviewbuilders.txt diff --git a/doc/source/modules/cassandra/examples/sethintedhandoffthrottlekb.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/sethintedhandoffthrottlekb.txt similarity index 100% rename from doc/source/modules/cassandra/examples/sethintedhandoffthrottlekb.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/sethintedhandoffthrottlekb.txt diff --git a/doc/source/modules/cassandra/examples/setinterdcstreamthroughput.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setinterdcstreamthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setinterdcstreamthroughput.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setinterdcstreamthroughput.txt diff --git a/doc/source/modules/cassandra/examples/setlogginglevel.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setlogginglevel.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setlogginglevel.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setlogginglevel.txt diff --git a/doc/source/modules/cassandra/examples/setmaxhintwindow.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setmaxhintwindow.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setmaxhintwindow.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setmaxhintwindow.txt diff --git a/doc/source/modules/cassandra/examples/setstreamthroughput.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setstreamthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/setstreamthroughput.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/setstreamthroughput.txt diff --git a/doc/source/modules/cassandra/examples/settimeout.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/settimeout.txt similarity index 100% rename from doc/source/modules/cassandra/examples/settimeout.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/settimeout.txt diff --git a/doc/source/modules/cassandra/examples/settraceprobability.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/settraceprobability.txt similarity index 100% rename from doc/source/modules/cassandra/examples/settraceprobability.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/settraceprobability.txt diff --git a/doc/source/modules/cassandra/examples/sjk.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/sjk.txt similarity index 100% rename from doc/source/modules/cassandra/examples/sjk.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/sjk.txt diff --git a/doc/source/modules/cassandra/examples/snapshot.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/snapshot.txt similarity index 100% rename from doc/source/modules/cassandra/examples/snapshot.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/snapshot.txt diff --git a/doc/source/modules/cassandra/examples/status.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/status.txt similarity index 100% rename from doc/source/modules/cassandra/examples/status.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/status.txt diff --git a/doc/source/modules/cassandra/examples/statusautocompaction.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusautocompaction.txt similarity index 100% rename from doc/source/modules/cassandra/examples/statusautocompaction.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusautocompaction.txt diff --git a/doc/source/modules/cassandra/examples/statusbackup.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusbackup.txt similarity index 100% rename from doc/source/modules/cassandra/examples/statusbackup.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusbackup.txt diff --git a/doc/source/modules/cassandra/examples/statusbinary.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusbinary.txt similarity index 100% rename from doc/source/modules/cassandra/examples/statusbinary.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusbinary.txt diff --git a/doc/source/modules/cassandra/examples/statusgossip.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusgossip.txt similarity index 100% rename from doc/source/modules/cassandra/examples/statusgossip.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusgossip.txt diff --git a/doc/source/modules/cassandra/examples/statushandoff.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statushandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/statushandoff.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/statushandoff.txt diff --git a/doc/source/modules/cassandra/examples/stop.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/stop.txt similarity index 100% rename from doc/source/modules/cassandra/examples/stop.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/stop.txt diff --git a/doc/source/modules/cassandra/examples/stopdaemon.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/stopdaemon.txt similarity index 100% rename from doc/source/modules/cassandra/examples/stopdaemon.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/stopdaemon.txt diff --git a/doc/source/modules/cassandra/examples/tablehistograms.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/tablehistograms.txt similarity index 100% rename from doc/source/modules/cassandra/examples/tablehistograms.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/tablehistograms.txt diff --git a/doc/source/modules/cassandra/examples/tablestats.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/tablestats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/tablestats.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/tablestats.txt diff --git a/doc/source/modules/cassandra/examples/toppartitions.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/toppartitions.txt similarity index 100% rename from doc/source/modules/cassandra/examples/toppartitions.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/toppartitions.txt diff --git a/doc/source/modules/cassandra/examples/tpstats.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/tpstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/tpstats.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/tpstats.txt diff --git a/doc/source/modules/cassandra/examples/truncatehints.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/truncatehints.txt similarity index 100% rename from doc/source/modules/cassandra/examples/truncatehints.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/truncatehints.txt diff --git a/doc/source/modules/cassandra/examples/upgradesstables.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/upgradesstables.txt similarity index 100% rename from doc/source/modules/cassandra/examples/upgradesstables.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/upgradesstables.txt diff --git a/doc/source/modules/cassandra/examples/verify.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/verify.txt similarity index 100% rename from doc/source/modules/cassandra/examples/verify.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/verify.txt diff --git a/doc/source/modules/cassandra/examples/version.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/version.txt similarity index 100% rename from doc/source/modules/cassandra/examples/version.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/version.txt diff --git a/doc/source/modules/cassandra/examples/viewbuildstatus.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/viewbuildstatus.txt similarity index 100% rename from doc/source/modules/cassandra/examples/viewbuildstatus.txt rename to doc/source/modules/cassandra/examples/TEXT/NODETOOL/viewbuildstatus.txt diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc index 8dbae27c7642..fe96b0fcd926 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$assassinate.txt[] +include::example$TEXT/NODETOOL/assassinate.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc index 05718f38fb79..b72e95141967 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$bootstrap.txt[] +include::example$TEXT/NODETOOL/bootstrap.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc index 234dd4401891..1a33e178a0c9 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$cleanup.txt[] +include::example$TEXT/NODETOOL/cleanup.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc index 652af5de9ee5..663d276808be 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$clearsnapshot.txt[] +include::example$TEXT/NODETOOL/clearsnapshot.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc index 39f57d9fd892..0bc96392b95b 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$clientstats.txt[] +include::example$TEXT/NODETOOL/clientstats.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc index 9745aa89abb3..458968c33f1d 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$compact.txt[] +include::example$TEXT/NODETOOL/compact.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc index c3b418d380e5..2b56019483fc 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$compactionhistory.txt[] +include::example$TEXT/NODETOOL/compactionhistory.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc index 46c1abf65210..0d82b18bdad8 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$compactionstats.txt[] +include::example$TEXT/NODETOOL/compactionstats.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc index 17d667796621..1d5922c81be5 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$decommission.txt[] +include::example$TEXT/NODETOOL/decommission.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc index ba99fb688599..f47674af5ec3 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$describecluster.txt[] +include::example$TEXT/NODETOOL/describecluster.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc index f2dc62233c0b..1c88ad8b8040 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$describering.txt[] +include::example$TEXT/NODETOOL/describering.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc index 818ce7c30293..1262800b8d8b 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$disableauditlog.txt[] +include::example$TEXT/NODETOOL/disableauditlog.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc index 2298d1953549..e172b7cdf200 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$disableautocompaction.txt[] +include::example$TEXT/NODETOOL/disableautocompaction.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc index 6e676cf6c362..eacc3ebb2fe8 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$disablebackup.txt[] +include::example$TEXT/NODETOOL/disablebackup.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc index 38cbe266710f..134de6a024ef 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$disablebinary.txt[] +include::example$TEXT/NODETOOL/disablebinary.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc index 64e6f3b43ad9..35ca6c659dfa 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$disablefullquerylog.txt[] +include::example$TEXT/NODETOOL/disablefullquerylog.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc index 51fddb80e6a0..270c5ec9d55e 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$disablegossip.txt[] +include::example$TEXT/NODETOOL/disablegossip.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc index 1a55531b4d86..808a84f1d537 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$disablehandoff.txt[] +include::example$TEXT/NODETOOL/disablehandoff.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc index 7cf99e2830b2..2c64c4d266e9 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$disablehintsfordc.txt[] +include::example$TEXT/NODETOOL/disablehintsfordc.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc index e71731ed443d..f86940a11235 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$disableoldprotocolversions.txt[] +include::example$TEXT/NODETOOL/disableoldprotocolversions.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc index 206c00c71e76..826034f97206 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$drain.txt[] +include::example$TEXT/NODETOOL/drain.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc index 1c68d9990213..cbb8352518d9 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$enableauditlog.txt[] +include::example$TEXT/NODETOOL/enableauditlog.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc index 75d681f03e63..1aef10a3b862 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$enableautocompaction.txt[] +include::example$TEXT/NODETOOL/enableautocompaction.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc index ef6d7c2039e3..6a79c9406c06 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$enablebackup.txt[] +include::example$TEXT/NODETOOL/enablebackup.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc index f0f47645e841..a4a7ef9cf26a 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$enablebinary.txt[] +include::example$TEXT/NODETOOL/enablebinary.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc index 10be0e3b82d0..a911709b7881 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$enablefullquerylog.txt[] +include::example$TEXT/NODETOOL/enablefullquerylog.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc index 382463c82def..4e654635a985 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$enablegossip.txt[] +include::example$TEXT/NODETOOL/enablegossip.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc index b40016eee5ed..c4e461b62db5 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$enablehandoff.txt[] +include::example$TEXT/NODETOOL/enablehandoff.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc index 0ef3e518868c..6cb39b06f3e8 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$enablehintsfordc.txt[] +include::example$TEXT/NODETOOL/enablehintsfordc.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc index 286df31382dc..f54a342b96a8 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$enableoldprotocolversions.txt[] +include::example$TEXT/NODETOOL/enableoldprotocolversions.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc index 5cb9a3887cf8..21a3fa32a884 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$failuredetector.txt[] +include::example$TEXT/NODETOOL/failuredetector.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc index abbc24fb51ef..393b34d8135c 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$flush.txt[] +include::example$TEXT/NODETOOL/flush.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc index fdfc7bb945b4..ff49ecb82335 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$garbagecollect.txt[] +include::example$TEXT/NODETOOL/garbagecollect.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc index 28045db9dac1..61da65197582 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$gcstats.txt[] +include::example$TEXT/NODETOOL/gcstats.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc index 739eebb4b1e1..09e8955ce7c2 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getbatchlogreplaythrottle.txt[] +include::example$TEXT/NODETOOL/getbatchlogreplaythrottle.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc index d76ca7bfc43e..72c980eff0f7 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getcompactionthreshold.txt[] +include::example$TEXT/NODETOOL/getcompactionthreshold.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc index 3cd43c255749..5942362769d5 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getcompactionthroughput.txt[] +include::example$TEXT/NODETOOL/getcompactionthroughput.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc index a88bb97c6085..bdf12874c25b 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getconcurrency.txt[] +include::example$TEXT/NODETOOL/getconcurrency.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc index 9a897fc9cfb8..1aa52a485665 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getconcurrentcompactors.txt[] +include::example$TEXT/NODETOOL/getconcurrentcompactors.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc index 1053ceac6ad8..8183249017eb 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getconcurrentviewbuilders.txt[] +include::example$TEXT/NODETOOL/getconcurrentviewbuilders.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc index b07e50452cc2..e00142c11348 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getendpoints.txt[] +include::example$TEXT/NODETOOL/getendpoints.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc index 79edb97a94ea..5d1264c4e657 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getinterdcstreamthroughput.txt[] +include::example$TEXT/NODETOOL/getinterdcstreamthroughput.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc index 20bf26c99d06..7d60ab46e848 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getlogginglevels.txt[] +include::example$TEXT/NODETOOL/getlogginglevels.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc index d4239350da1a..bcbc7e59b265 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getmaxhintwindow.txt[] +include::example$TEXT/NODETOOL/getmaxhintwindow.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc index 0ad0e97922ad..0c7d1e9023f1 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getseeds.txt[] +include::example$TEXT/NODETOOL/getseeds.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc index 26073a975a38..4a82bffa9ed0 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getsstables.txt[] +include::example$TEXT/NODETOOL/getsstables.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc index 4cca51dfb931..7e840aa90fc9 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$getstreamthroughput.txt[] +include::example$TEXT/NODETOOL/getstreamthroughput.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc index cfbcf4188897..32f355146434 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$gettimeout.txt[] +include::example$TEXT/NODETOOL/gettimeout.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc index f2dfb73c9e1c..f9f230b4389b 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$gettraceprobability.txt[] +include::example$TEXT/NODETOOL/gettraceprobability.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc index 79f04f1510ba..a7e171f542ff 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$gossipinfo.txt[] +include::example$TEXT/NODETOOL/gossipinfo.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/help.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/help.adoc index 9943f76faf6d..d17a9ec41ddf 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/help.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/help.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$help.txt[] +include::example$TEXT/NODETOOL/help.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/import.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/import.adoc index cd07217f3586..6c677fe4a3d6 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/import.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/import.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$import.txt[] +include::example$TEXT/NODETOOL/import.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/info.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/info.adoc index 31227f33f2a9..d9079cf383db 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/info.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/info.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$info.txt[] +include::example$TEXT/NODETOOL/info.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc index 2324c66e10c5..a7413e9eccec 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$invalidatecountercache.txt[] +include::example$TEXT/NODETOOL/invalidatecountercache.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc index 19ae7cb021a7..b77ecb05f962 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$invalidatekeycache.txt[] +include::example$TEXT/NODETOOL/invalidatekeycache.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc index e7050ba7cf4b..f61d732c0811 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$invalidaterowcache.txt[] +include::example$TEXT/NODETOOL/invalidaterowcache.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/join.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/join.adoc index 2e7de1109688..26c9d32b8859 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/join.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/join.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$join.txt[] +include::example$TEXT/NODETOOL/join.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc index 4c6620e5c57a..ff25703451fb 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$listsnapshots.txt[] +include::example$TEXT/NODETOOL/listsnapshots.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/move.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/move.adoc index 4be7de501e6d..3ebd65490617 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/move.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/move.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$move.txt[] +include::example$TEXT/NODETOOL/move.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc index 462190386e58..e90a35304749 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$netstats.txt[] +include::example$TEXT/NODETOOL/netstats.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc index 55371fb4978c..2094b0824d97 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$pausehandoff.txt[] +include::example$TEXT/NODETOOL/pausehandoff.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc index 56d7d128162f..b95c72acc3ba 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$profileload.txt[] +include::example$TEXT/NODETOOL/profileload.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc index 07ecb59bf9e6..8418694a700a 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$proxyhistograms.txt[] +include::example$TEXT/NODETOOL/proxyhistograms.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc index a08c9079e95c..1eb0f4837975 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$rangekeysample.txt[] +include::example$TEXT/NODETOOL/rangekeysample.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc index 8fea26896342..be147f20a15a 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$rebuild.txt[] +include::example$TEXT/NODETOOL/rebuild.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc index 235f67a65a9a..6d618930c5d9 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$rebuild_index.txt[] +include::example$TEXT/NODETOOL/rebuild_index.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc index 18ee82eb1a28..11e75ebd828a 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$refresh.txt[] +include::example$TEXT/NODETOOL/refresh.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc index 58807e63fe07..84c05b5c8211 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$refreshsizeestimates.txt[] +include::example$TEXT/NODETOOL/refreshsizeestimates.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc index 3ca0cfdfadb7..359682004554 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$reloadlocalschema.txt[] +include::example$TEXT/NODETOOL/reloadlocalschema.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc index 57dc58ac9a74..920496dc0371 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$reloadseeds.txt[] +include::example$TEXT/NODETOOL/reloadseeds.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc index d60faa662bc3..a4877cb5bc0a 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$reloadssl.txt[] +include::example$TEXT/NODETOOL/reloadssl.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc index 73b47ac49ffe..40282cf18c7d 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$reloadtriggers.txt[] +include::example$TEXT/NODETOOL/reloadtriggers.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc index 9455ddacfde0..e7036c55ca60 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$relocatesstables.txt[] +include::example$TEXT/NODETOOL/relocatesstables.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc index fa4ada462d66..5ec8082058f4 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$removenode.txt[] +include::example$TEXT/NODETOOL/removenode.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc index 729622c3c66d..7004a661d3f4 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$repair.txt[] +include::example$TEXT/NODETOOL/repair.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc index 742fd77cf821..b841cbd8e16b 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$repair_admin.txt[] +include::example$TEXT/NODETOOL/repair_admin.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc index 1d78ff2c8ee9..0e74e04914d2 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$replaybatchlog.txt[] +include::example$TEXT/NODETOOL/replaybatchlog.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc index d58692ee54a5..1a2b694afe2b 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$resetfullquerylog.txt[] +include::example$TEXT/NODETOOL/resetfullquerylog.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc index 34a193023b82..2febfb7e8772 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$resetlocalschema.txt[] +include::example$TEXT/NODETOOL/resetlocalschema.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc index b62370f0e2b5..d003be78138a 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$resumehandoff.txt[] +include::example$TEXT/NODETOOL/resumehandoff.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc index 6532c793546e..94f989a45afa 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$ring.txt[] +include::example$TEXT/NODETOOL/ring.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc index 21b3f9439915..25ecd582a0f7 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$scrub.txt[] +include::example$TEXT/NODETOOL/scrub.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc index fed16dd976bd..67d2dc4af911 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setbatchlogreplaythrottle.txt[] +include::example$TEXT/NODETOOL/setbatchlogreplaythrottle.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc index a6f736a69a86..01df662d221e 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setcachecapacity.txt[] +include::example$TEXT/NODETOOL/setcachecapacity.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc index 2e12c791329b..cbf4bfd5ae16 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setcachekeystosave.txt[] +include::example$TEXT/NODETOOL/setcachekeystosave.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc index 94c3b186f4b9..eb577f8669b3 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setcompactionthreshold.txt[] +include::example$TEXT/NODETOOL/setcompactionthreshold.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc index daab0b92af44..e4179b93373d 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setcompactionthroughput.txt[] +include::example$TEXT/NODETOOL/setcompactionthroughput.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc index d51cde78b560..d3b905c44e1c 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setconcurrency.txt[] +include::example$TEXT/NODETOOL/setconcurrency.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc index 6792dacdd420..e19967035435 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setconcurrentcompactors.txt[] +include::example$TEXT/NODETOOL/setconcurrentcompactors.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc index 85c5c2ba5398..69580b6835eb 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setconcurrentviewbuilders.txt[] +include::example$TEXT/NODETOOL/setconcurrentviewbuilders.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc index 95ac48a5e55c..6dab1ca8f414 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$sethintedhandoffthrottlekb.txt[] +include::example$TEXT/NODETOOL/sethintedhandoffthrottlekb.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc index 66ecd3c02286..f25ae0d5ff2b 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setinterdcstreamthroughput.txt[] +include::example$TEXT/NODETOOL/setinterdcstreamthroughput.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc index 3ffdbce3f3df..a5bb06df272f 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setlogginglevel.txt[] +include::example$TEXT/NODETOOL/setlogginglevel.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc index 3c48ab85157c..e51d63d6a898 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setmaxhintwindow.txt[] +include::example$TEXT/NODETOOL/setmaxhintwindow.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc index 6726470bb185..6905324da3ee 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$setstreamthroughput.txt[] +include::example$TEXT/NODETOOL/setstreamthroughput.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc index 67e1f97e1dba..e804138ffc0d 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$settimeout.txt[] +include::example$TEXT/NODETOOL/settimeout.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc index 4c724addf660..b432638bdc7f 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$settraceprobability.txt[] +include::example$TEXT/NODETOOL/settraceprobability.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc index 1d8b1ed71cda..a610c2b1efd1 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$sjk.txt[] +include::example$TEXT/NODETOOL/sjk.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc index 5187cc03c4d4..31ba9420f1c9 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$snapshot.txt[] +include::example$TEXT/NODETOOL/snapshot.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/status.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/status.adoc index d8ef21f32415..058d5d9174da 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/status.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/status.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$status.txt[] +include::example$TEXT/NODETOOL/status.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc index b7325d60e8d4..d80e05119765 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$statusautocompaction.txt[] +include::example$TEXT/NODETOOL/statusautocompaction.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc index 11a6bd93a310..8f44eb573218 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$statusbackup.txt[] +include::example$TEXT/NODETOOL/statusbackup.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc index 075e2a5ade2b..a5914b35bb03 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$statusbinary.txt[] +include::example$TEXT/NODETOOL/statusbinary.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc index 0a2eb928ecf4..15b8c7212c9d 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$statusgossip.txt[] +include::example$TEXT/NODETOOL/statusgossip.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc index 5bc24ef14597..e5e5f650edff 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$statushandoff.txt[] +include::example$TEXT/NODETOOL/statushandoff.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc index aac452c9eac7..d379c5bae482 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$stop.txt[] +include::example$TEXT/NODETOOL/stop.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc index dc7cef7daa14..8738d12ad0d6 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$stopdaemon.txt[] +include::example$TEXT/NODETOOL/stopdaemon.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc index 5c69d21acb57..91ff91de9121 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$tablehistograms.txt[] +include::example$TEXT/NODETOOL/tablehistograms.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc index c827062e5b87..22e00fffb9e4 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$tablestats.txt[] +include::example$TEXT/NODETOOL/tablestats.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc index 7cdbb2fe211b..a1b414145610 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$toppartitions.txt[] +include::example$TEXT/NODETOOL/toppartitions.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc index e12e107a64f2..7c2be9fc3c2f 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$tpstats.txt[] +include::example$TEXT/NODETOOL/tpstats.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc index d5424435cd09..451b4f3b64e4 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$truncatehints.txt[] +include::example$TEXT/NODETOOL/truncatehints.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc index 3fde3ac362aa..d700240a4ce1 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$upgradesstables.txt[] +include::example$TEXT/NODETOOL/upgradesstables.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc index 338c262f9b2a..904df7bff284 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$verify.txt[] +include::example$TEXT/NODETOOL/verify.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/version.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/version.adoc index 98ad86954898..10fd7866d91a 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/version.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/version.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$version.txt[] +include::example$TEXT/NODETOOL/version.txt[] ---- diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc b/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc index 04cbd74b0fcc..cfa5e4e025d5 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc +++ b/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc @@ -3,5 +3,5 @@ == Usage [source,plaintext] ---- -include::example$viewbuildstatus.txt[] +include::example$TEXT/NODETOOL/viewbuildstatus.txt[] ---- From bfb8f3ad32bfb1ccf3f7a2113bdb1001c47953ef Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 9 Jul 2020 18:14:10 -0700 Subject: [PATCH 006/115] test tab --- doc/test.adoc | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 doc/test.adoc diff --git a/doc/test.adoc b/doc/test.adoc new file mode 100644 index 000000000000..776c95d5b39e --- /dev/null +++ b/doc/test.adoc @@ -0,0 +1,13 @@ +[tabs] +==== +Tab A:: ++ +-- +Contents of tab A. +-- +Tab B:: ++ +-- +Contents of tab B. +-- +==== From e7515c705276867d3fd00349daadb85188a21124 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 10 Jul 2020 11:38:03 -0700 Subject: [PATCH 007/115] updates --- doc/Makefile | 6 +- doc/TABS_SAMPLE.adoc | 24 ++++ doc/lib/tabs-block.js | 80 +++++++++++ doc/site.yml | 42 +++--- doc/source/antora.yml | 4 +- .../examples/YAML/stress-example.yaml | 44 ++++++ .../examples/YAML/stress-lwt-example.yaml | 70 ++++++++++ .../pages/tools/cassandra_stress.adoc | 12 +- .../pages/tools/nodetool/assassinate.txt | 38 ------ .../pages/tools/nodetool/bootstrap.txt | 37 ------ .../pages/tools/nodetool/cleanup.txt | 43 ------ .../pages/tools/nodetool/clearsnapshot.txt | 46 ------- .../pages/tools/nodetool/clientstats.txt | 39 ------ .../pages/tools/nodetool/compact.txt | 55 -------- .../tools/nodetool/compactionhistory.txt | 33 ----- .../pages/tools/nodetool/compactionstats.txt | 33 ----- .../pages/tools/nodetool/decommission.txt | 33 ----- .../pages/tools/nodetool/describecluster.txt | 30 ----- .../pages/tools/nodetool/describering.txt | 37 ------ .../pages/tools/nodetool/disableauditlog.txt | 29 ---- .../tools/nodetool/disableautocompaction.txt | 39 ------ .../pages/tools/nodetool/disablebackup.txt | 29 ---- .../pages/tools/nodetool/disablebinary.txt | 29 ---- .../tools/nodetool/disablefullquerylog.txt | 29 ---- .../pages/tools/nodetool/disablegossip.txt | 30 ----- .../pages/tools/nodetool/disablehandoff.txt | 29 ---- .../tools/nodetool/disablehintsfordc.txt | 38 ------ .../nodetool/disableoldprotocolversions.txt | 29 ---- .../cassandra/pages/tools/nodetool/drain.txt | 30 ----- .../pages/tools/nodetool/enableauditlog.txt | 63 --------- .../tools/nodetool/enableautocompaction.txt | 39 ------ .../pages/tools/nodetool/enablebackup.txt | 29 ---- .../pages/tools/nodetool/enablebinary.txt | 29 ---- .../tools/nodetool/enablefullquerylog.txt | 61 --------- .../pages/tools/nodetool/enablegossip.txt | 29 ---- .../pages/tools/nodetool/enablehandoff.txt | 30 ----- .../pages/tools/nodetool/enablehintsfordc.txt | 39 ------ .../nodetool/enableoldprotocolversions.txt | 29 ---- .../pages/tools/nodetool/failuredetector.txt | 30 ----- .../cassandra/pages/tools/nodetool/flush.txt | 38 ------ .../pages/tools/nodetool/garbagecollect.txt | 48 ------- .../pages/tools/nodetool/gcstats.txt | 29 ---- .../nodetool/getbatchlogreplaythrottle.txt | 31 ----- .../tools/nodetool/getcompactionthreshold.txt | 39 ------ .../nodetool/getcompactionthroughput.txt | 30 ----- .../pages/tools/nodetool/getconcurrency.txt | 38 ------ .../nodetool/getconcurrentcompactors.txt | 30 ----- .../nodetool/getconcurrentviewbuilders.txt | 30 ----- .../pages/tools/nodetool/getendpoints.txt | 39 ------ .../nodetool/getinterdcstreamthroughput.txt | 30 ----- .../pages/tools/nodetool/getlogginglevels.txt | 29 ---- .../pages/tools/nodetool/getmaxhintwindow.txt | 29 ---- .../pages/tools/nodetool/getseeds.txt | 30 ----- .../pages/tools/nodetool/getsstables.txt | 41 ------ .../tools/nodetool/getstreamthroughput.txt | 30 ----- .../pages/tools/nodetool/gettimeout.txt | 39 ------ .../tools/nodetool/gettraceprobability.txt | 29 ---- .../pages/tools/nodetool/gossipinfo.txt | 29 ---- .../cassandra/pages/tools/nodetool/help.txt | 16 --- .../cassandra/pages/tools/nodetool/import.txt | 64 --------- .../cassandra/pages/tools/nodetool/info.txt | 32 ----- .../tools/nodetool/invalidatecountercache.txt | 29 ---- .../tools/nodetool/invalidatekeycache.txt | 29 ---- .../tools/nodetool/invalidaterowcache.txt | 29 ---- .../cassandra/pages/tools/nodetool/join.txt | 29 ---- .../pages/tools/nodetool/listsnapshots.txt | 32 ----- .../cassandra/pages/tools/nodetool/move.txt | 37 ------ .../pages/tools/nodetool/netstats.txt | 34 ----- .../pages/tools/nodetool/nodetool.txt | 125 ------------------ .../pages/tools/nodetool/pausehandoff.txt | 29 ---- .../pages/tools/nodetool/profileload.txt | 48 ------- .../pages/tools/nodetool/proxyhistograms.txt | 30 ----- .../pages/tools/nodetool/rangekeysample.txt | 30 ----- .../pages/tools/nodetool/rebuild.txt | 54 -------- .../pages/tools/nodetool/rebuild_index.txt | 39 ------ .../pages/tools/nodetool/refresh.txt | 39 ------ .../tools/nodetool/refreshsizeestimates.txt | 29 ---- .../tools/nodetool/reloadlocalschema.txt | 29 ---- .../pages/tools/nodetool/reloadseeds.txt | 30 ----- .../pages/tools/nodetool/reloadssl.txt | 29 ---- .../pages/tools/nodetool/reloadtriggers.txt | 29 ---- .../pages/tools/nodetool/relocatesstables.txt | 42 ------ .../pages/tools/nodetool/removenode.txt | 40 ------ .../cassandra/pages/tools/nodetool/repair.txt | 103 --------------- .../pages/tools/nodetool/repair_admin.txt | 43 ------ .../pages/tools/nodetool/replaybatchlog.txt | 29 ---- .../tools/nodetool/resetfullquerylog.txt | 31 ----- .../pages/tools/nodetool/resetlocalschema.txt | 29 ---- .../pages/tools/nodetool/resumehandoff.txt | 29 ---- .../cassandra/pages/tools/nodetool/ring.txt | 42 ------ .../cassandra/pages/tools/nodetool/scrub.txt | 63 --------- .../nodetool/setbatchlogreplaythrottle.txt | 40 ------ .../pages/tools/nodetool/setcachecapacity.txt | 39 ------ .../tools/nodetool/setcachekeystosave.txt | 41 ------ .../tools/nodetool/setcompactionthreshold.txt | 39 ------ .../nodetool/setcompactionthroughput.txt | 39 ------ .../pages/tools/nodetool/setconcurrency.txt | 40 ------ .../nodetool/setconcurrentcompactors.txt | 39 ------ .../nodetool/setconcurrentviewbuilders.txt | 39 ------ .../nodetool/sethintedhandoffthrottlekb.txt | 39 ------ .../nodetool/setinterdcstreamthroughput.txt | 39 ------ .../pages/tools/nodetool/setlogginglevel.txt | 42 ------ .../pages/tools/nodetool/setmaxhintwindow.txt | 38 ------ .../tools/nodetool/setstreamthroughput.txt | 39 ------ .../pages/tools/nodetool/settimeout.txt | 42 ------ .../tools/nodetool/settraceprobability.txt | 40 ------ .../cassandra/pages/tools/nodetool/sjk.txt | 38 ------ .../pages/tools/nodetool/snapshot.txt | 56 -------- .../cassandra/pages/tools/nodetool/status.txt | 41 ------ .../tools/nodetool/statusautocompaction.txt | 42 ------ .../pages/tools/nodetool/statusbackup.txt | 29 ---- .../pages/tools/nodetool/statusbinary.txt | 29 ---- .../pages/tools/nodetool/statusgossip.txt | 29 ---- .../pages/tools/nodetool/statushandoff.txt | 30 ----- .../cassandra/pages/tools/nodetool/stop.txt | 46 ------- .../pages/tools/nodetool/stopdaemon.txt | 29 ---- .../pages/tools/nodetool/tablehistograms.txt | 38 ------ .../pages/tools/nodetool/tablestats.txt | 73 ---------- .../pages/tools/nodetool/toppartitions.txt | 47 ------- .../pages/tools/nodetool/tpstats.txt | 33 ----- .../pages/tools/nodetool/truncatehints.txt | 40 ------ .../pages/tools/nodetool/upgradesstables.txt | 49 ------- .../cassandra/pages/tools/nodetool/verify.txt | 58 -------- .../pages/tools/nodetool/version.txt | 29 ---- .../pages/tools/nodetool/viewbuildstatus.txt | 38 ------ doc/test.adoc | 13 -- 126 files changed, 261 insertions(+), 4476 deletions(-) create mode 100644 doc/TABS_SAMPLE.adoc create mode 100644 doc/lib/tabs-block.js create mode 100644 doc/source/modules/cassandra/examples/YAML/stress-example.yaml create mode 100644 doc/source/modules/cassandra/examples/YAML/stress-lwt-example.yaml delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/assassinate.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/cleanup.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/clientstats.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/compact.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/decommission.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/describecluster.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/describering.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/drain.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/flush.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gcstats.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getseeds.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getsstables.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/help.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/import.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/info.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/join.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/move.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/netstats.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/profileload.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/rebuild.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/refresh.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/removenode.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/repair.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/ring.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/scrub.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/settimeout.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/sjk.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/snapshot.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/status.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/stop.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/tablestats.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/tpstats.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/verify.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/version.txt delete mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.txt delete mode 100644 doc/test.adoc diff --git a/doc/Makefile b/doc/Makefile index cb5746d4faaf..fa9e5e8b9c3a 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -59,10 +59,14 @@ clean: rm -rf $(BUILDDIR)/* rm -f $(YAML_DOC_OUTPUT) +.PHONY: gennodetool +gennodetool: + $(GENERATE_NODETOOL_DOCS) + .PHONY: html html: $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) + #$(GENERATE_NODETOOL_DOCS) $(ANTORAOPTS) $(ANTORACMD) $(ANTORAYAML) @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." diff --git a/doc/TABS_SAMPLE.adoc b/doc/TABS_SAMPLE.adoc new file mode 100644 index 000000000000..1b9cc50f7b28 --- /dev/null +++ b/doc/TABS_SAMPLE.adoc @@ -0,0 +1,24 @@ += TEST + +This is some text to make sure this page is build. +:tabs: + +[{tabs}] +==== +Tab 1 Title:: ++ +-- +This is the content of the first tab. + +Another paragraph in the first tab. + +[source,console] +---- +$ a code block +---- +-- +Tab 2 Title:: ++ +This is the content of the second tab. +==== + diff --git a/doc/lib/tabs-block.js b/doc/lib/tabs-block.js new file mode 100644 index 000000000000..6a84944cacff --- /dev/null +++ b/doc/lib/tabs-block.js @@ -0,0 +1,80 @@ +/* Copyright (c) 2018 OpenDevise, Inc. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Extends the AsciiDoc syntax to support a tabset. The tabset is created from + * a dlist enclosed in an example block that is marked with the tabs style. + * + * Usage: + * + * [tabs] + * ==== + * Tab A:: + * + + * -- + * Contents of tab A. + * -- + * Tab B:: + * + + * -- + * Contents of tab B. + * -- + * ==== + * + * @author Dan Allen + */ +const IdSeparatorCh = '-' +const ExtraIdSeparatorsRx = /^-+|-+$|-(-)+/g +const InvalidIdCharsRx = /[^a-zA-Z0-9_]/g +const List = Opal.const_get_local(Opal.module(null, 'Asciidoctor'), 'List') +const ListItem = Opal.const_get_local(Opal.module(null, 'Asciidoctor'), 'ListItem') + +const generateId = (str, idx) => + `tabset${idx}_${str.toLowerCase().replace(InvalidIdCharsRx, IdSeparatorCh).replace(ExtraIdSeparatorsRx, '$1')}` + +function tabsBlock () { + this.onContext('example') + this.process((parent, reader, attrs) => { + const createHtmlFragment = (html) => this.createBlock(parent, 'pass', html) + const tabsetIdx = parent.getDocument().counter('idx-tabset') + const nodes = [] + nodes.push(createHtmlFragment('
')) + const container = this.parseContent(this.createBlock(parent, 'open'), reader) + const sourceTabs = container.getBlocks()[0] + if (!(sourceTabs && sourceTabs.getContext() === 'dlist' && sourceTabs.getItems().length)) return + const tabs = List.$new(parent, 'ulist') + tabs.addRole('tabs') + const panes = {} + sourceTabs.getItems().forEach(([[title], details]) => { + const tab = ListItem.$new(tabs) + tabs.$append(tab) + const id = generateId(title.getText(), tabsetIdx) + tab.text = `[[${id}]]${title.text}` + let blocks = details.getBlocks() + const numBlocks = blocks.length + if (numBlocks) { + if (blocks[0].context === 'open' && numBlocks === 1) blocks = blocks[0].getBlocks() + panes[id] = blocks.map((block) => (block.parent = parent) && block) + } + }) + nodes.push(tabs) + nodes.push(createHtmlFragment('
')) + Object.entries(panes).forEach(([id, blocks]) => { + nodes.push(createHtmlFragment(`
`)) + nodes.push(...blocks) + nodes.push(createHtmlFragment('
')) + }) + nodes.push(createHtmlFragment('
')) + nodes.push(createHtmlFragment('
')) + parent.blocks.push(...nodes) + }) +} + +function register (registry, context) { + registry.block('tabs', tabsBlock) +} + +module.exports.register = register diff --git a/doc/site.yml b/doc/site.yml index e0a074e49c6b..62d4ef30bd25 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -1,13 +1,27 @@ site: title: Apache Cassandra Documentation url: file:///Users/lorina.poland/CLONES/cassandra/build/html/Cassandra/4.0 + # UNCOMMENT WHEN READY + #keys: + # google_analytics: 'UA-11583863-1' content: sources: - url: /Users/lorina.poland/CLONES/cassandra - branches: [doc_redo_asciidoc,doc_redo_asciidoc3.11,4.0-rc5, 3.11] + branches: [doc_redo_asciidoc,doc_redo_asciidoc3.11] start_path: doc/source +ui: + # Need to replace this with a direct github url rather than a local path + bundle: + url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip + snapshot: true + supplemental_files: + - path: ui.yml + contents: | + static_files: [ .nojekyll ] + - path: .nojekyll + output: dir: ./build/html @@ -21,6 +35,15 @@ asciidoc: linkattrs: '' source-language: asciidoc table-caption: ~ + tabs: tabs + current-version: 4.0 + latest-version: 4.0 + previous-version: 3.11 + 40_version: '4.0' + 3x_version: '3.11' + 30_version: '3.0' + 22_version: '2.2' + 21_version: '2.1' url-project: https://asciidoctor.org url-org: https://github.com/asciidoctor url-exten-lab: https://github.com/asciidoctor/asciidoctor-extensions-lab @@ -42,18 +65,5 @@ asciidoc: url-pygments-gem: https://rubygems.org/gems/pygments.rb url-python: https://www.python.org url-rouge: http://rouge.jneen.net - 40_version: '4.0' - 3x_version: '3.11' - 30_version: '3.0' - 22_version: '2.2' - 21_version: '2.1' - -ui: - bundle: - url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip - snapshot: true - supplemental_files: - - path: ui.yml - contents: | - static_files: [ .nojekyll ] - - path: .nojekyll + extensions: + - ./lib/tabs-block.js diff --git a/doc/source/antora.yml b/doc/source/antora.yml index 804e6e56331c..33e14f0cbcaf 100644 --- a/doc/source/antora.yml +++ b/doc/source/antora.yml @@ -1,6 +1,6 @@ name: Cassandra -version: '3.11' -prerelease: -rc.test +version: '4.0' +prerelease: -rc.5 nav: - modules/ROOT/nav.adoc - modules/cassandra/nav.adoc diff --git a/doc/source/modules/cassandra/examples/YAML/stress-example.yaml b/doc/source/modules/cassandra/examples/YAML/stress-example.yaml new file mode 100644 index 000000000000..17161af27e1d --- /dev/null +++ b/doc/source/modules/cassandra/examples/YAML/stress-example.yaml @@ -0,0 +1,44 @@ +spacenam: example # idenitifier for this spec if running with multiple yaml files +keyspace: example + +# Would almost always be network topology unless running something locally +keyspace_definition: | + CREATE KEYSPACE example WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3}; + +table: staff_activities + +# The table under test. Start with a partition per staff member +# Is this a good idea? +table_definition: | + CREATE TABLE staff_activities ( + name text, + when timeuuid, + what text, + PRIMARY KEY(name, when) + ) + +columnspec: + - name: name + size: uniform(5..10) # The names of the staff members are between 5-10 characters + population: uniform(1..10) # 10 possible staff members to pick from + - name: when + cluster: uniform(20..500) # Staff members do between 20 and 500 events + - name: what + size: normal(10..100,50) + +insert: + # we only update a single partition in any given insert + partitions: fixed(1) + # we want to insert a single row per partition and we have between 20 and 500 + # rows per partition + select: fixed(1)/500 + batchtype: UNLOGGED # Single partition unlogged batches are essentially noops + +queries: + events: + cql: select * from staff_activities where name = ? + fields: samerow + latest_event: + cql: select * from staff_activities where name = ? LIMIT 1 + fields: samerow + diff --git a/doc/source/modules/cassandra/examples/YAML/stress-lwt-example.yaml b/doc/source/modules/cassandra/examples/YAML/stress-lwt-example.yaml new file mode 100644 index 000000000000..fc5db08145a6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/YAML/stress-lwt-example.yaml @@ -0,0 +1,70 @@ +# Keyspace Name +keyspace: stresscql + +# The CQL for creating a keyspace (optional if it already exists) +# Would almost always be network topology unless running something locall +keyspace_definition: | + CREATE KEYSPACE stresscql WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}; + +# Table name +table: blogposts + +# The CQL for creating a table you wish to stress (optional if it already exists) +table_definition: | + CREATE TABLE blogposts ( + domain text, + published_date timeuuid, + url text, + author text, + title text, + body text, + PRIMARY KEY(domain, published_date) + ) WITH CLUSTERING ORDER BY (published_date DESC) + AND compaction = { 'class':'LeveledCompactionStrategy' } + AND comment='A table to hold blog posts' + +### Column Distribution Specifications ### + +columnspec: + - name: domain + size: gaussian(5..100) #domain names are relatively short + population: uniform(1..10M) #10M possible domains to pick from + + - name: published_date + cluster: fixed(1000) #under each domain we will have max 1000 posts + + - name: url + size: uniform(30..300) + + - name: title #titles shouldn't go beyond 200 chars + size: gaussian(10..200) + + - name: author + size: uniform(5..20) #author names should be short + + - name: body + size: gaussian(100..5000) #the body of the blog post can be long + +### Batch Ratio Distribution Specifications ### + +insert: + partitions: fixed(1) # Our partition key is the domain so only insert one per batch + + select: fixed(1)/1000 # We have 1000 posts per domain so 1/1000 will allow 1 post per batch + + batchtype: UNLOGGED # Unlogged batches + + +# +# A list of queries you wish to run against the schema +# +queries: + singlepost: + cql: select * from blogposts where domain = ? LIMIT 1 + fields: samerow + regularupdate: + cql: update blogposts set author = ? where domain = ? and published_date = ? + fields: samerow + updatewithlwt: + cql: update blogposts set author = ? where domain = ? and published_date = ? IF body = ? AND url = ? + fields: samerow diff --git a/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc b/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc index e1544f1d6731..f36d39c3af06 100644 --- a/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc +++ b/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc @@ -243,7 +243,11 @@ This will create the schema then run tests for 1 minute with an equal number of inserts, latest_event queries and events queries. Additionally the table will be truncated once before the test. -The full example can be found here `yaml <./stress-example.yaml>` +The full example can be found here: +[source, yaml] +---- +include::example$YAML/stress-example.yaml +---- Running a user mode test with multiple yaml files:::: cassandra-stress user profile=./example.yaml,./example2.yaml @@ -274,7 +278,11 @@ queries: fields: samerow ---- -The full example can be found here `yaml <./stress-lwt-example.yaml>` +The full example can be found here: +[source, yaml] +---- +include::example$YAML/stress-lwt-example.yaml +---- == Graphing diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.txt b/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.txt deleted file mode 100644 index baa42ed8feae..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.txt +++ /dev/null @@ -1,38 +0,0 @@ -NAME - nodetool assassinate - Forcefully remove a dead node without - re-replicating any data. Use as a last resort if you cannot removenode - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] assassinate [--] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - IP address of the endpoint to assassinate - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.txt b/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.txt deleted file mode 100644 index 6e065f95a56b..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.txt +++ /dev/null @@ -1,37 +0,0 @@ -NAME - nodetool bootstrap - Monitor/manage node's bootstrap process - -SYNOPSIS - nodetool bootstrap - nodetool - [(-pwf | --password-file )] - [(-h | --host )] [(-u | --username )] - [(-pp | --print-port)] [(-p | --port )] - [(-pw | --password )] bootstrap resume - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - -COMMANDS - With no arguments, Display help information - - resume - Resume bootstrap streaming - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.txt b/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.txt deleted file mode 100644 index e99479c7a838..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.txt +++ /dev/null @@ -1,43 +0,0 @@ -NAME - nodetool cleanup - Triggers the immediate cleanup of keys no longer - belonging to a node. By default, clean all keyspaces - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] cleanup - [(-j | --jobs )] [--] [ ...] - -OPTIONS - -h , --host - Node hostname or ip address - - -j , --jobs - Number of sstables to cleanup simultanously, set to 0 to use all - available compaction threads - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.txt b/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.txt deleted file mode 100644 index 1955217eb292..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.txt +++ /dev/null @@ -1,46 +0,0 @@ -NAME - nodetool clearsnapshot - Remove the snapshot with the given name from - the given keyspaces. If no snapshotName is specified we will remove all - snapshots - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] clearsnapshot [--all] - [-t ] [--] [...] - -OPTIONS - --all - Removes all snapshots - - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -t - Remove the snapshot with a given name - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [...] - Remove snapshots from the given keyspaces - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.txt deleted file mode 100644 index 2a0fd7d9e701..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool clientstats - Print information about connected clients - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] clientstats [--all] - [--by-protocol] [--clear-history] - -OPTIONS - --all - Lists all connections - - --by-protocol - Lists most recent client connections by protocol version - - --clear-history - Clear the history of connected clients - - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compact.txt b/doc/source/modules/cassandra/pages/tools/nodetool/compact.txt deleted file mode 100644 index 8f0f70656e9a..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/compact.txt +++ /dev/null @@ -1,55 +0,0 @@ -NAME - nodetool compact - Force a (major) compaction on one or more tables or - user-defined compaction on given SSTables - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] compact - [(-et | --end-token )] [(-s | --split-output)] - [(-st | --start-token )] [--user-defined] - [--] [ ...] or ... - -OPTIONS - -et , --end-token - Use -et to specify a token at which compaction range ends - - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -s, --split-output - Use -s to not create a single big file - - -st , --start-token - Use -st to specify a token at which the compaction range starts - - -u , --username - Remote jmx agent username - - --user-defined - Use --user-defined to submit listed files for user-defined - compaction - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] or ... - The keyspace followed by one or many tables or list of SSTable data - files when using --user-defined - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.txt b/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.txt deleted file mode 100644 index 44b711cf8ccd..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.txt +++ /dev/null @@ -1,33 +0,0 @@ -NAME - nodetool compactionhistory - Print history of compaction - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] compactionhistory - [(-F | --format )] - -OPTIONS - -F , --format - Output format (json, yaml) - - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.txt deleted file mode 100644 index f1910d2d3f55..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.txt +++ /dev/null @@ -1,33 +0,0 @@ -NAME - nodetool compactionstats - Print statistics on compactions - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] compactionstats - [(-H | --human-readable)] - -OPTIONS - -h , --host - Node hostname or ip address - - -H, --human-readable - Display bytes in human readable form, i.e. KiB, MiB, GiB, TiB - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/decommission.txt b/doc/source/modules/cassandra/pages/tools/nodetool/decommission.txt deleted file mode 100644 index 33fde516a852..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/decommission.txt +++ /dev/null @@ -1,33 +0,0 @@ -NAME - nodetool decommission - Decommission the *node I am connecting to* - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] decommission [(-f | --force)] - -OPTIONS - -f, --force - Force decommission of this node even when it reduces the number of - replicas to below configured RF - - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.txt b/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.txt deleted file mode 100644 index e5307b5eae2f..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool describecluster - Print the name, snitch, partitioner and - schema version of a cluster - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] describecluster - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describering.txt b/doc/source/modules/cassandra/pages/tools/nodetool/describering.txt deleted file mode 100644 index 02a85fdc978d..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/describering.txt +++ /dev/null @@ -1,37 +0,0 @@ -NAME - nodetool describering - Shows the token ranges info of a given keyspace - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] describering [--] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - The keyspace name - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.txt deleted file mode 100644 index 950060406e67..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool disableauditlog - Disable the audit log - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disableauditlog - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.txt deleted file mode 100644 index 2c0fb3cc8e29..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool disableautocompaction - Disable autocompaction for the given - keyspace and table - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disableautocompaction [--] - [ ...] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.txt deleted file mode 100644 index 5c51261dc569..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool disablebackup - Disable incremental backup - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disablebackup - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.txt deleted file mode 100644 index 2ea676afa6ed..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool disablebinary - Disable native transport (binary protocol) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disablebinary - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.txt deleted file mode 100644 index 00cc2cddbf74..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool disablefullquerylog - Disable the full query log - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disablefullquerylog - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.txt deleted file mode 100644 index 603a65cc1998..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool disablegossip - Disable gossip (effectively marking the node - down) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disablegossip - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.txt deleted file mode 100644 index ccb9a58e66d1..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool disablehandoff - Disable storing hinted handoffs - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disablehandoff - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.txt deleted file mode 100644 index 8e6e3bb7d534..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.txt +++ /dev/null @@ -1,38 +0,0 @@ -NAME - nodetool disablehintsfordc - Disable hints for a data center - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disablehintsfordc [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - The data center to disable - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.txt b/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.txt deleted file mode 100644 index 689e1dd1c057..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool disableoldprotocolversions - Disable old protocol versions - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disableoldprotocolversions - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/drain.txt b/doc/source/modules/cassandra/pages/tools/nodetool/drain.txt deleted file mode 100644 index 24bddbcbca66..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/drain.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool drain - Drain the node (stop accepting writes and flush all - tables) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] drain - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.txt deleted file mode 100644 index 150821a5ee44..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.txt +++ /dev/null @@ -1,63 +0,0 @@ -NAME - nodetool enableauditlog - Enable the audit log - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enableauditlog - [--excluded-categories ] - [--excluded-keyspaces ] - [--excluded-users ] - [--included-categories ] - [--included-keyspaces ] - [--included-users ] [--logger ] - -OPTIONS - --excluded-categories - Comma separated list of Audit Log Categories to be excluded for - audit log. If not set the value from cassandra.yaml will be used - - --excluded-keyspaces - Comma separated list of keyspaces to be excluded for audit log. If - not set the value from cassandra.yaml will be used - - --excluded-users - Comma separated list of users to be excluded for audit log. If not - set the value from cassandra.yaml will be used - - -h , --host - Node hostname or ip address - - --included-categories - Comma separated list of Audit Log Categories to be included for - audit log. If not set the value from cassandra.yaml will be used - - --included-keyspaces - Comma separated list of keyspaces to be included for audit log. If - not set the value from cassandra.yaml will be used - - --included-users - Comma separated list of users to be included for audit log. If not - set the value from cassandra.yaml will be used - - --logger - Logger name to be used for AuditLogging. Default BinAuditLogger. If - not set the value from cassandra.yaml will be used - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.txt deleted file mode 100644 index 1b52c4098b10..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool enableautocompaction - Enable autocompaction for the given - keyspace and table - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enableautocompaction [--] - [ ...] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.txt deleted file mode 100644 index 7c4b1c4ed3f7..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool enablebackup - Enable incremental backup - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enablebackup - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.txt deleted file mode 100644 index 3d8c330e6a31..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool enablebinary - Reenable native transport (binary protocol) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enablebinary - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.txt deleted file mode 100644 index fdc380da2447..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.txt +++ /dev/null @@ -1,61 +0,0 @@ -NAME - nodetool enablefullquerylog - Enable full query logging, defaults for - the options are configured in cassandra.yaml - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enablefullquerylog - [--archive-command ] [--blocking ] - [--max-archive-retries ] - [--max-log-size ] [--max-queue-weight ] - [--path ] [--roll-cycle ] - -OPTIONS - --archive-command - Command that will handle archiving rolled full query log files. - Format is "/path/to/script.sh %path" where %path will be replaced - with the file to archive - - --blocking - If the queue is full whether to block producers or drop samples - [true|false]. - - -h , --host - Node hostname or ip address - - --max-archive-retries - Max number of archive retries. - - --max-log-size - How many bytes of log data to store before dropping segments. Might - not be respected if a log file hasn't rolled so it can be deleted. - - --max-queue-weight - Maximum number of bytes of query data to queue to disk before - blocking or dropping samples. - - -p , --port - Remote jmx agent port number - - --path - Path to store the full query log at. Will have it's contents - recursively deleted. - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - --roll-cycle - How often to roll the log file (MINUTELY, HOURLY, DAILY). - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.txt deleted file mode 100644 index ccbb4987390d..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool enablegossip - Reenable gossip - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enablegossip - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.txt deleted file mode 100644 index 9386ea72f8d2..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool enablehandoff - Reenable future hints storing on the current - node - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enablehandoff - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.txt deleted file mode 100644 index 3893b47f6646..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool enablehintsfordc - Enable hints for a data center that was - previsouly disabled - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enablehintsfordc [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - The data center to enable - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.txt b/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.txt deleted file mode 100644 index 0e9b4beb5c66..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool enableoldprotocolversions - Enable old protocol versions - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enableoldprotocolversions - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.txt b/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.txt deleted file mode 100644 index f6d698a0cbd1..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool failuredetector - Shows the failure detector information for - the cluster - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] failuredetector - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/flush.txt b/doc/source/modules/cassandra/pages/tools/nodetool/flush.txt deleted file mode 100644 index 60a598b8f7af..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/flush.txt +++ /dev/null @@ -1,38 +0,0 @@ -NAME - nodetool flush - Flush one or more tables - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] flush [--] [ - ...] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.txt b/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.txt deleted file mode 100644 index c4bfe01ff3e1..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.txt +++ /dev/null @@ -1,48 +0,0 @@ -NAME - nodetool garbagecollect - Remove deleted data from one or more tables - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] garbagecollect - [(-g | --granularity )] - [(-j | --jobs )] [--] [ ...] - -OPTIONS - -g , --granularity - Granularity of garbage removal. ROW (default) removes deleted - partitions and rows, CELL also removes overwritten or deleted cells. - - -h , --host - Node hostname or ip address - - -j , --jobs - Number of sstables to cleanup simultanously, set to 0 to use all - available compaction threads. Defaults to 1 so that collections of - newer tables can see the data is deleted and also remove tombstones. - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.txt deleted file mode 100644 index a4368dd94e63..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool gcstats - Print GC Statistics - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] gcstats - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.txt deleted file mode 100644 index 71e4f9ca5e66..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.txt +++ /dev/null @@ -1,31 +0,0 @@ -NAME - nodetool getbatchlogreplaythrottle - Print batchlog replay throttle in - KB/s. This is reduced proportionally to the number of nodes in the - cluster. - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getbatchlogreplaythrottle - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.txt deleted file mode 100644 index 57b71db97e5a..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool getcompactionthreshold - Print min and max compaction - thresholds for a given table - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getcompactionthreshold [--] -
- -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - -
- The keyspace with a table - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.txt deleted file mode 100644 index 97d69e609792..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool getcompactionthroughput - Print the MB/s throughput cap for - compaction in the system - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getcompactionthroughput - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.txt deleted file mode 100644 index bc54ae83ca65..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.txt +++ /dev/null @@ -1,38 +0,0 @@ -NAME - nodetool getconcurrency - Get maximum concurrency for processing stages - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getconcurrency [--] - [stage-names] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [stage-names] - optional list of stage names, otherwise display all stages - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.txt deleted file mode 100644 index 2671c31b34b6..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool getconcurrentcompactors - Get the number of concurrent - compactors in the system. - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getconcurrentcompactors - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.txt deleted file mode 100644 index ce326d5f90b8..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool getconcurrentviewbuilders - Get the number of concurrent view - builders in the system - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getconcurrentviewbuilders - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.txt deleted file mode 100644 index 08831d7afaa5..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool getendpoints - Print the end points that owns the key - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getendpoints [--] -
- -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - -
- The keyspace, the table, and the partition key for which we need to - find the endpoint - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.txt deleted file mode 100644 index f4b43b429354..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool getinterdcstreamthroughput - Print the Mb/s throughput cap for - inter-datacenter streaming in the system - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getinterdcstreamthroughput - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.txt deleted file mode 100644 index 09324b0c706c..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool getlogginglevels - Get the runtime logging levels - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getlogginglevels - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.txt deleted file mode 100644 index 9b6123a53160..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool getmaxhintwindow - Print the max hint window in ms - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getmaxhintwindow - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.txt deleted file mode 100644 index 0e9b25103cb4..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool getseeds - Get the currently in use seed node IP list excluding - the node IP - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getseeds - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.txt deleted file mode 100644 index f03e1faf7ede..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.txt +++ /dev/null @@ -1,41 +0,0 @@ -NAME - nodetool getsstables - Print the sstable filenames that own the key - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getsstables - [(-hf | --hex-format)] [--] - -OPTIONS - -h , --host - Node hostname or ip address - - -hf, --hex-format - Specify the key in hexadecimal string format - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - The keyspace, the column family, and the key - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.txt deleted file mode 100644 index 3355745a3ef7..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool getstreamthroughput - Print the Mb/s throughput cap for - streaming in the system - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] getstreamthroughput - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.txt b/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.txt deleted file mode 100644 index 93fd18306600..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool gettimeout - Print the timeout of the given type in ms - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] gettimeout [--] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - The timeout type, one of (read, range, write, counterwrite, - cascontention, truncate, internodeconnect, internodeuser, misc - (general rpc_timeout_in_ms)) - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.txt b/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.txt deleted file mode 100644 index 36fb9e590d85..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool gettraceprobability - Print the current trace probability value - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] gettraceprobability - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.txt b/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.txt deleted file mode 100644 index 99e0cf492752..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool gossipinfo - Shows the gossip information for the cluster - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] gossipinfo - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/help.txt b/doc/source/modules/cassandra/pages/tools/nodetool/help.txt deleted file mode 100644 index 0d5111318c6c..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/help.txt +++ /dev/null @@ -1,16 +0,0 @@ -NAME - nodetool help - Display help information - -SYNOPSIS - nodetool help [--] [...] - -OPTIONS - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/import.txt b/doc/source/modules/cassandra/pages/tools/nodetool/import.txt deleted file mode 100644 index 375a31716f87..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/import.txt +++ /dev/null @@ -1,64 +0,0 @@ -NAME - nodetool import - Import new SSTables to the system - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] import - [(-c | --no-invalidate-caches)] [(-e | --extended-verify)] - [(-l | --keep-level)] [(-q | --quick)] [(-r | --keep-repaired)] - [(-t | --no-tokens)] [(-v | --no-verify)] [--]
- ... - -OPTIONS - -c, --no-invalidate-caches - Don't invalidate the row cache when importing - - -e, --extended-verify - Run an extended verify, verifying all values in the new sstables - - -h , --host - Node hostname or ip address - - -l, --keep-level - Keep the level on the new sstables - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -q, --quick - Do a quick import without verifying sstables, clearing row cache or - checking in which data directory to put the file - - -r, --keep-repaired - Keep any repaired information from the sstables - - -t, --no-tokens - Don't verify that all tokens in the new sstable are owned by the - current node - - -u , --username - Remote jmx agent username - - -v, --no-verify - Don't verify new sstables - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - -
... - The keyspace, table name and directories to import sstables from - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/info.txt b/doc/source/modules/cassandra/pages/tools/nodetool/info.txt deleted file mode 100644 index 6769f8672355..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/info.txt +++ /dev/null @@ -1,32 +0,0 @@ -NAME - nodetool info - Print node information (uptime, load, ...) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] info [(-T | --tokens)] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -T, --tokens - Display all tokens - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.txt b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.txt deleted file mode 100644 index 88e1f0459c62..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool invalidatecountercache - Invalidate the counter cache - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] invalidatecountercache - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.txt b/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.txt deleted file mode 100644 index a09cc07e063e..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool invalidatekeycache - Invalidate the key cache - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] invalidatekeycache - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.txt b/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.txt deleted file mode 100644 index c78f1b6083bf..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool invalidaterowcache - Invalidate the row cache - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] invalidaterowcache - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/join.txt b/doc/source/modules/cassandra/pages/tools/nodetool/join.txt deleted file mode 100644 index d636fd1577a2..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/join.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool join - Join the ring - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] join - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.txt b/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.txt deleted file mode 100644 index 3cdafd62863b..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.txt +++ /dev/null @@ -1,32 +0,0 @@ -NAME - nodetool listsnapshots - Lists all the snapshots along with the size on - disk and true size. True size is the total size of all SSTables which - are not backed up to disk. Size on disk is total size of the snapshot on - disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication. - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] listsnapshots - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/move.txt b/doc/source/modules/cassandra/pages/tools/nodetool/move.txt deleted file mode 100644 index 29f228e96fcc..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/move.txt +++ /dev/null @@ -1,37 +0,0 @@ -NAME - nodetool move - Move node on the token ring to a new token - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] move [--] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - The new token. - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/netstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/netstats.txt deleted file mode 100644 index 4d4792ef5847..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/netstats.txt +++ /dev/null @@ -1,34 +0,0 @@ -NAME - nodetool netstats - Print network information on provided host - (connecting node by default) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] netstats - [(-H | --human-readable)] - -OPTIONS - -h , --host - Node hostname or ip address - - -H, --human-readable - Display bytes in human readable form, i.e. KiB, MiB, GiB, TiB - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt deleted file mode 100644 index d7880e33a220..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt +++ /dev/null @@ -1,125 +0,0 @@ -usage: nodetool [(-pwf | --password-file )] - [(-h | --host )] [(-u | --username )] - [(-pp | --print-port)] [(-p | --port )] - [(-pw | --password )] [] - -The most commonly used nodetool commands are: - assassinate Forcefully remove a dead node without re-replicating any data. Use as a last resort if you cannot removenode - bootstrap Monitor/manage node's bootstrap process - cleanup Triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces - clearsnapshot Remove the snapshot with the given name from the given keyspaces. If no snapshotName is specified we will remove all snapshots - clientstats Print information about connected clients - compact Force a (major) compaction on one or more tables or user-defined compaction on given SSTables - compactionhistory Print history of compaction - compactionstats Print statistics on compactions - decommission Decommission the *node I am connecting to* - describecluster Print the name, snitch, partitioner and schema version of a cluster - describering Shows the token ranges info of a given keyspace - disableauditlog Disable the audit log - disableautocompaction Disable autocompaction for the given keyspace and table - disablebackup Disable incremental backup - disablebinary Disable native transport (binary protocol) - disablefullquerylog Disable the full query log - disablegossip Disable gossip (effectively marking the node down) - disablehandoff Disable storing hinted handoffs - disablehintsfordc Disable hints for a data center - disableoldprotocolversions Disable old protocol versions - drain Drain the node (stop accepting writes and flush all tables) - enableauditlog Enable the audit log - enableautocompaction Enable autocompaction for the given keyspace and table - enablebackup Enable incremental backup - enablebinary Reenable native transport (binary protocol) - enablefullquerylog Enable full query logging, defaults for the options are configured in cassandra.yaml - enablegossip Reenable gossip - enablehandoff Reenable future hints storing on the current node - enablehintsfordc Enable hints for a data center that was previsouly disabled - enableoldprotocolversions Enable old protocol versions - failuredetector Shows the failure detector information for the cluster - flush Flush one or more tables - garbagecollect Remove deleted data from one or more tables - gcstats Print GC Statistics - getbatchlogreplaythrottle Print batchlog replay throttle in KB/s. This is reduced proportionally to the number of nodes in the cluster. - getcompactionthreshold Print min and max compaction thresholds for a given table - getcompactionthroughput Print the MB/s throughput cap for compaction in the system - getconcurrency Get maximum concurrency for processing stages - getconcurrentcompactors Get the number of concurrent compactors in the system. - getconcurrentviewbuilders Get the number of concurrent view builders in the system - getendpoints Print the end points that owns the key - getinterdcstreamthroughput Print the Mb/s throughput cap for inter-datacenter streaming in the system - getlogginglevels Get the runtime logging levels - getmaxhintwindow Print the max hint window in ms - getseeds Get the currently in use seed node IP list excluding the node IP - getsstables Print the sstable filenames that own the key - getstreamthroughput Print the Mb/s throughput cap for streaming in the system - gettimeout Print the timeout of the given type in ms - gettraceprobability Print the current trace probability value - gossipinfo Shows the gossip information for the cluster - help Display help information - import Import new SSTables to the system - info Print node information (uptime, load, ...) - invalidatecountercache Invalidate the counter cache - invalidatekeycache Invalidate the key cache - invalidaterowcache Invalidate the row cache - join Join the ring - listsnapshots Lists all the snapshots along with the size on disk and true size. True size is the total size of all SSTables which are not backed up to disk. Size on disk is total size of the snapshot on disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication. - move Move node on the token ring to a new token - netstats Print network information on provided host (connecting node by default) - pausehandoff Pause hints delivery process - profileload Low footprint profiling of activity for a period of time - proxyhistograms Print statistic histograms for network operations - rangekeysample Shows the sampled keys held across all keyspaces - rebuild Rebuild data by streaming from other nodes (similarly to bootstrap) - rebuild_index A full rebuild of native secondary indexes for a given table - refresh Load newly placed SSTables to the system without restart - refreshsizeestimates Refresh system.size_estimates - reloadlocalschema Reload local node schema from system tables - reloadseeds Reload the seed node list from the seed node provider - reloadssl Signals Cassandra to reload SSL certificates - reloadtriggers Reload trigger classes - relocatesstables Relocates sstables to the correct disk - removenode Show status of current node removal, force completion of pending removal or remove provided ID - repair Repair one or more tables - repair_admin list and fail incremental repair sessions - replaybatchlog Kick off batchlog replay and wait for finish - resetfullquerylog Stop the full query log and clean files in the configured full query log directory from cassandra.yaml as well as JMX - resetlocalschema Reset node's local schema and resync - resumehandoff Resume hints delivery process - ring Print information about the token ring - scrub Scrub (rebuild sstables for) one or more tables - setbatchlogreplaythrottle Set batchlog replay throttle in KB per second, or 0 to disable throttling. This will be reduced proportionally to the number of nodes in the cluster. - setcachecapacity Set global key, row, and counter cache capacities (in MB units) - setcachekeystosave Set number of keys saved by each cache for faster post-restart warmup. 0 to disable - setcompactionthreshold Set min and max compaction thresholds for a given table - setcompactionthroughput Set the MB/s throughput cap for compaction in the system, or 0 to disable throttling - setconcurrency Set maximum concurrency for processing stage - setconcurrentcompactors Set number of concurrent compactors in the system. - setconcurrentviewbuilders Set the number of concurrent view builders in the system - sethintedhandoffthrottlekb Set hinted handoff throttle in kb per second, per delivery thread. - setinterdcstreamthroughput Set the Mb/s throughput cap for inter-datacenter streaming in the system, or 0 to disable throttling - setlogginglevel Set the log level threshold for a given component or class. Will reset to the initial configuration if called with no parameters. - setmaxhintwindow Set the specified max hint window in ms - setstreamthroughput Set the Mb/s throughput cap for streaming in the system, or 0 to disable throttling - settimeout Set the specified timeout in ms, or 0 to disable timeout - settraceprobability Sets the probability for tracing any given request to value. 0 disables, 1 enables for all requests, 0 is the default - sjk Run commands of 'Swiss Java Knife'. Run 'nodetool sjk --help' for more information. - snapshot Take a snapshot of specified keyspaces or a snapshot of the specified table - status Print cluster information (state, load, IDs, ...) - statusautocompaction status of autocompaction of the given keyspace and table - statusbackup Status of incremental backup - statusbinary Status of native transport (binary protocol) - statusgossip Status of gossip - statushandoff Status of storing future hints on the current node - stop Stop compaction - stopdaemon Stop cassandra daemon - tablehistograms Print statistic histograms for a given table - tablestats Print statistics on tables - toppartitions Sample and print the most active partitions - tpstats Print usage statistics of thread pools - truncatehints Truncate all hints on the local node, or truncate hints for the endpoint(s) specified. - upgradesstables Rewrite sstables (for the requested tables) that are not on the current version (thus upgrading them to said current version) - verify Verify (check data checksum for) one or more tables - version Print cassandra version - viewbuildstatus Show progress of a materialized view build - -See 'nodetool help ' for more information on a specific command. - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.txt deleted file mode 100644 index 4419935ce01c..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool pausehandoff - Pause hints delivery process - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] pausehandoff - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/profileload.txt b/doc/source/modules/cassandra/pages/tools/nodetool/profileload.txt deleted file mode 100644 index b6f30fcc9f17..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/profileload.txt +++ /dev/null @@ -1,48 +0,0 @@ -NAME - nodetool profileload - Low footprint profiling of activity for a period - of time - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] profileload [-a ] - [-k ] [-s ] [--] - -OPTIONS - -a - Comma separated list of samplers to use (Default: all) - - -h , --host - Node hostname or ip address - - -k - Number of the top samples to list (Default: 10) - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -s - Capacity of the sampler, higher for more accuracy (Default: 256) - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - The keyspace, column family name, and duration in milliseconds - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.txt b/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.txt deleted file mode 100644 index e01922678f68..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool proxyhistograms - Print statistic histograms for network - operations - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] proxyhistograms - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.txt b/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.txt deleted file mode 100644 index a58506bb756e..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool rangekeysample - Shows the sampled keys held across all - keyspaces - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] rangekeysample - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.txt b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.txt deleted file mode 100644 index 1f1c35c25d5a..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.txt +++ /dev/null @@ -1,54 +0,0 @@ -NAME - nodetool rebuild - Rebuild data by streaming from other nodes (similarly - to bootstrap) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] rebuild - [(-ks | --keyspace )] - [(-s | --sources )] - [(-ts | --tokens )] [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -ks , --keyspace - Use -ks to rebuild specific keyspace. - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -s , --sources - Use -s to specify hosts that this node should stream from when -ts - is used. Multiple hosts should be separated using commas (e.g. - 127.0.0.1,127.0.0.2,...) - - -ts , --tokens - Use -ts to rebuild specific token ranges, in the format of "(start_token_1,end_token_1],(start_token_2,end_token_2],...(start_token_n,end_token_n]". - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Name of DC from which to select sources for streaming. By default, - pick any DC - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.txt b/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.txt deleted file mode 100644 index cef436b29a67..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool rebuild_index - A full rebuild of native secondary indexes for - a given table - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] rebuild_index [--] -
- -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - -
- The keyspace and table name followed by a list of index names - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refresh.txt b/doc/source/modules/cassandra/pages/tools/nodetool/refresh.txt deleted file mode 100644 index befabc11dcfa..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/refresh.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool refresh - Load newly placed SSTables to the system without - restart - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] refresh [--] -
- -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - -
- The keyspace and table name - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.txt b/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.txt deleted file mode 100644 index 63a9b65bc52d..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool refreshsizeestimates - Refresh system.size_estimates - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] refreshsizeestimates - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.txt b/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.txt deleted file mode 100644 index 694d0321a0e5..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool reloadlocalschema - Reload local node schema from system tables - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] reloadlocalschema - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.txt b/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.txt deleted file mode 100644 index b529d3846955..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool reloadseeds - Reload the seed node list from the seed node - provider - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] reloadseeds - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.txt b/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.txt deleted file mode 100644 index a1ab81851163..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool reloadssl - Signals Cassandra to reload SSL certificates - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] reloadssl - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.txt b/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.txt deleted file mode 100644 index 47dda2eb4c03..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool reloadtriggers - Reload trigger classes - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] reloadtriggers - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.txt b/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.txt deleted file mode 100644 index 851db8049a94..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.txt +++ /dev/null @@ -1,42 +0,0 @@ -NAME - nodetool relocatesstables - Relocates sstables to the correct disk - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] relocatesstables - [(-j | --jobs )] [--]
- -OPTIONS - -h , --host - Node hostname or ip address - - -j , --jobs - Number of sstables to relocate simultanously, set to 0 to use all - available compaction threads - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - -
- The keyspace and table name - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/removenode.txt b/doc/source/modules/cassandra/pages/tools/nodetool/removenode.txt deleted file mode 100644 index c8285c913caa..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/removenode.txt +++ /dev/null @@ -1,40 +0,0 @@ -NAME - nodetool removenode - Show status of current node removal, force - completion of pending removal or remove provided ID - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] removenode [--] - || - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - || - Show status of current node removal, force completion of pending - removal, or remove provided ID - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair.txt b/doc/source/modules/cassandra/pages/tools/nodetool/repair.txt deleted file mode 100644 index e570a8337421..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/repair.txt +++ /dev/null @@ -1,103 +0,0 @@ -NAME - nodetool repair - Repair one or more tables - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] repair - [(-dc | --in-dc )...] - [(-dcpar | --dc-parallel)] [(-et | --end-token )] - [(-force | --force)] [(-full | --full)] - [(-hosts | --in-hosts )...] - [(-j | --job-threads )] - [(-local | --in-local-dc)] [(-os | --optimise-streams)] [(-pl | --pull)] - [(-pr | --partitioner-range)] [(-prv | --preview)] - [(-seq | --sequential)] - [(-st | --start-token )] [(-tr | --trace)] - [(-vd | --validate)] [--] [ ...] - -OPTIONS - -dc , --in-dc - Use -dc to repair specific datacenters - - -dcpar, --dc-parallel - Use -dcpar to repair data centers in parallel. - - -et , --end-token - Use -et to specify a token at which repair range ends (inclusive) - - -force, --force - Use -force to filter out down endpoints - - -full, --full - Use -full to issue a full repair. - - -h , --host - Node hostname or ip address - - -hosts , --in-hosts - Use -hosts to repair specific hosts - - -j , --job-threads - Number of threads to run repair jobs. Usually this means number of - CFs to repair concurrently. WARNING: increasing this puts more load - on repairing nodes, so be careful. (default: 1, max: 4) - - -local, --in-local-dc - Use -local to only repair against nodes in the same datacenter - - -os, --optimise-streams - Use --optimise-streams to try to reduce the number of streams we do - (EXPERIMENTAL, see CASSANDRA-3200). - - -p , --port - Remote jmx agent port number - - -pl, --pull - Use --pull to perform a one way repair where data is only streamed - from a remote node to this node. - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pr, --partitioner-range - Use -pr to repair only the first range returned by the partitioner - - -prv, --preview - Determine ranges and amount of data to be streamed, but don't - actually perform repair - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -seq, --sequential - Use -seq to carry out a sequential repair - - -st , --start-token - Use -st to specify a token at which the repair range starts - (exclusive) - - -tr, --trace - Use -tr to trace the repair. Traces are logged to - system_traces.events. - - -u , --username - Remote jmx agent username - - -vd, --validate - Checks that repaired data is in sync between nodes. Out of sync - repaired data indicates a full repair should be run. - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.txt b/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.txt deleted file mode 100644 index 71123ba31854..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.txt +++ /dev/null @@ -1,43 +0,0 @@ -NAME - nodetool repair_admin - list and fail incremental repair sessions - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] repair_admin [(-a | --all)] - [(-f | --force)] [(-l | --list)] [(-x | --cancel )] - -OPTIONS - -a, --all - include completed and failed sessions - - -f, --force - cancel repair session from a node other than the repair coordinator. - Attempting to cancel FINALIZED or FAILED sessions is an error. - - -h , --host - Node hostname or ip address - - -l, --list - list repair sessions (default behavior) - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -x , --cancel - cancel an incremental repair session - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.txt deleted file mode 100644 index 4425e7eb2383..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool replaybatchlog - Kick off batchlog replay and wait for finish - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] replaybatchlog - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.txt b/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.txt deleted file mode 100644 index 452b4a696d23..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.txt +++ /dev/null @@ -1,31 +0,0 @@ -NAME - nodetool resetfullquerylog - Stop the full query log and clean files in - the configured full query log directory from cassandra.yaml as well as - JMX - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] resetfullquerylog - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.txt b/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.txt deleted file mode 100644 index 01dcaddc64cc..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool resetlocalschema - Reset node's local schema and resync - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] resetlocalschema - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.txt deleted file mode 100644 index 927c82efef51..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool resumehandoff - Resume hints delivery process - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] resumehandoff - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/ring.txt b/doc/source/modules/cassandra/pages/tools/nodetool/ring.txt deleted file mode 100644 index d50e004ec39d..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/ring.txt +++ /dev/null @@ -1,42 +0,0 @@ -NAME - nodetool ring - Print information about the token ring - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] ring [(-r | --resolve-ip)] - [--] [] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -r, --resolve-ip - Show node domain names instead of IPs - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Specify a keyspace for accurate ownership information (topology - awareness) - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/scrub.txt b/doc/source/modules/cassandra/pages/tools/nodetool/scrub.txt deleted file mode 100644 index 22b3ea7d2e10..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/scrub.txt +++ /dev/null @@ -1,63 +0,0 @@ -NAME - nodetool scrub - Scrub (rebuild sstables for) one or more tables - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] scrub - [(-j | --jobs )] [(-n | --no-validate)] - [(-ns | --no-snapshot)] [(-r | --reinsert-overflowed-ttl)] - [(-s | --skip-corrupted)] [--] [ ...] - -OPTIONS - -h , --host - Node hostname or ip address - - -j , --jobs - Number of sstables to scrub simultanously, set to 0 to use all - available compaction threads - - -n, --no-validate - Do not validate columns using column validator - - -ns, --no-snapshot - Scrubbed CFs will be snapshotted first, if disableSnapshot is false. - (default false) - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -r, --reinsert-overflowed-ttl - Rewrites rows with overflowed expiration date affected by - CASSANDRA-14092 with the maximum supported expiration date of - 2038-01-19T03:14:06+00:00. The rows are rewritten with the original - timestamp incremented by one millisecond to override/supersede any - potential tombstone that may have been generated during compaction - of the affected rows. - - -s, --skip-corrupted - Skip corrupted partitions even when scrubbing counter tables. - (default false) - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.txt deleted file mode 100644 index a88af25dc24d..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.txt +++ /dev/null @@ -1,40 +0,0 @@ -NAME - nodetool setbatchlogreplaythrottle - Set batchlog replay throttle in KB - per second, or 0 to disable throttling. This will be reduced - proportionally to the number of nodes in the cluster. - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setbatchlogreplaythrottle [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Value in KB per second, 0 to disable throttling - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.txt deleted file mode 100644 index 57a5e77d7f2b..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool setcachecapacity - Set global key, row, and counter cache - capacities (in MB units) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setcachecapacity [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Key cache, row cache, and counter cache (in MB) - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.txt deleted file mode 100644 index ec0eb4f10aea..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.txt +++ /dev/null @@ -1,41 +0,0 @@ -NAME - nodetool setcachekeystosave - Set number of keys saved by each cache for - faster post-restart warmup. 0 to disable - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setcachekeystosave [--] - - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - - The number of keys saved by each cache. 0 to disable - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.txt deleted file mode 100644 index 10071919c7f7..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool setcompactionthreshold - Set min and max compaction thresholds - for a given table - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setcompactionthreshold [--] -
- -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - -
- The keyspace, the table, min and max threshold - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.txt deleted file mode 100644 index c1b5efad2ab2..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool setcompactionthroughput - Set the MB/s throughput cap for - compaction in the system, or 0 to disable throttling - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setcompactionthroughput [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Value in MB, 0 to disable throttling - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.txt deleted file mode 100644 index ea0e3b3fbbc4..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.txt +++ /dev/null @@ -1,40 +0,0 @@ -NAME - nodetool setconcurrency - Set maximum concurrency for processing stage - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setconcurrency [--] - | - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - | - - Set concurrency for processing stage - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.txt deleted file mode 100644 index 843ae72f5bb6..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool setconcurrentcompactors - Set number of concurrent compactors - in the system. - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setconcurrentcompactors [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Number of concurrent compactors, greater than 0. - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.txt deleted file mode 100644 index 9f2a23444b8b..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool setconcurrentviewbuilders - Set the number of concurrent view - builders in the system - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setconcurrentviewbuilders [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Number of concurrent view builders, greater than 0. - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.txt b/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.txt deleted file mode 100644 index b588ba99adbd..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool sethintedhandoffthrottlekb - Set hinted handoff throttle in kb - per second, per delivery thread. - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] sethintedhandoffthrottlekb - [--] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Value in KB per second - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.txt deleted file mode 100644 index a29f6a84f81d..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool setinterdcstreamthroughput - Set the Mb/s throughput cap for - inter-datacenter streaming in the system, or 0 to disable throttling - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setinterdcstreamthroughput - [--] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Value in Mb, 0 to disable throttling - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.txt deleted file mode 100644 index a798c68971a2..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.txt +++ /dev/null @@ -1,42 +0,0 @@ -NAME - nodetool setlogginglevel - Set the log level threshold for a given - component or class. Will reset to the initial configuration if called - with no parameters. - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setlogginglevel [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - The component or class to change the level for and the log level - threshold to set. Will reset to initial level if omitted. Available - components: bootstrap, compaction, repair, streaming, cql, ring - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.txt deleted file mode 100644 index 1289b1ac0a25..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.txt +++ /dev/null @@ -1,38 +0,0 @@ -NAME - nodetool setmaxhintwindow - Set the specified max hint window in ms - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setmaxhintwindow [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Value of maxhintwindow in ms - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.txt b/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.txt deleted file mode 100644 index 2b61e5bd3cbb..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.txt +++ /dev/null @@ -1,39 +0,0 @@ -NAME - nodetool setstreamthroughput - Set the Mb/s throughput cap for streaming - in the system, or 0 to disable throttling - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] setstreamthroughput [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Value in Mb, 0 to disable throttling - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.txt b/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.txt deleted file mode 100644 index 318b34e68c7c..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.txt +++ /dev/null @@ -1,42 +0,0 @@ -NAME - nodetool settimeout - Set the specified timeout in ms, or 0 to disable - timeout - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] settimeout [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Timeout type followed by value in ms (0 disables socket streaming - timeout). Type should be one of (read, range, write, counterwrite, - cascontention, truncate, internodeconnect, internodeuser, misc - (general rpc_timeout_in_ms)) - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.txt b/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.txt deleted file mode 100644 index c0e4439105e2..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.txt +++ /dev/null @@ -1,40 +0,0 @@ -NAME - nodetool settraceprobability - Sets the probability for tracing any - given request to value. 0 disables, 1 enables for all requests, 0 is the - default - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] settraceprobability [--] - - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Trace probability between 0 and 1 (ex: 0.2) - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sjk.txt b/doc/source/modules/cassandra/pages/tools/nodetool/sjk.txt deleted file mode 100644 index eab1e7bf9a25..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/sjk.txt +++ /dev/null @@ -1,38 +0,0 @@ -NAME - nodetool sjk - Run commands of 'Swiss Java Knife'. Run 'nodetool sjk - --help' for more information. - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] sjk [--] [...] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Arguments passed as is to 'Swiss Java Knife'. - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.txt b/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.txt deleted file mode 100644 index 5a7119f2ae79..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.txt +++ /dev/null @@ -1,56 +0,0 @@ -NAME - nodetool snapshot - Take a snapshot of specified keyspaces or a snapshot - of the specified table - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] snapshot - [(-cf
| --column-family
| --table
)] - [(-kt | --kt-list | -kc | --kc.list )] - [(-sf | --skip-flush)] [(-t | --tag )] [--] [] - -OPTIONS - -cf
, --column-family
, --table
- The table name (you must specify one and only one keyspace for using - this option) - - -h , --host - Node hostname or ip address - - -kt , --kt-list , -kc , --kc.list - The list of Keyspace.table to take snapshot.(you must not specify - only keyspace) - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -sf, --skip-flush - Do not flush memtables before snapshotting (snapshot will not - contain unflushed data) - - -t , --tag - The name of the snapshot - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [] - List of keyspaces. By default, all keyspaces - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/status.txt b/doc/source/modules/cassandra/pages/tools/nodetool/status.txt deleted file mode 100644 index 45997fdb79d6..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/status.txt +++ /dev/null @@ -1,41 +0,0 @@ -NAME - nodetool status - Print cluster information (state, load, IDs, ...) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] status [(-r | --resolve-ip)] - [--] [] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -r, --resolve-ip - Show node domain names instead of IPs - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [] - The keyspace name - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.txt deleted file mode 100644 index 05eb4bc37e5c..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.txt +++ /dev/null @@ -1,42 +0,0 @@ -NAME - nodetool statusautocompaction - status of autocompaction of the given - keyspace and table - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] statusautocompaction - [(-a | --all)] [--] [ ...] - -OPTIONS - -a, --all - Show auto compaction status for each keyspace/table - - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.txt deleted file mode 100644 index 727e72a41302..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool statusbackup - Status of incremental backup - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] statusbackup - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.txt deleted file mode 100644 index 05034de3bec0..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool statusbinary - Status of native transport (binary protocol) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] statusbinary - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.txt deleted file mode 100644 index 35d8734132bd..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool statusgossip - Status of gossip - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] statusgossip - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.txt b/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.txt deleted file mode 100644 index c48d8fc6ab62..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.txt +++ /dev/null @@ -1,30 +0,0 @@ -NAME - nodetool statushandoff - Status of storing future hints on the current - node - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] statushandoff - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stop.txt b/doc/source/modules/cassandra/pages/tools/nodetool/stop.txt deleted file mode 100644 index ee0934989f70..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/stop.txt +++ /dev/null @@ -1,46 +0,0 @@ -NAME - nodetool stop - Stop compaction - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] stop - [(-id | --compaction-id )] [--] - -OPTIONS - -h , --host - Node hostname or ip address - - -id , --compaction-id - Use -id to stop a compaction by the specified id. Ids can be found - in the transaction log files whose name starts with compaction_, - located in the table transactions folder. - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - Supported types are COMPACTION, VALIDATION, CLEANUP, SCRUB, - UPGRADE_SSTABLES, INDEX_BUILD, TOMBSTONE_COMPACTION, ANTICOMPACTION, - VERIFY, VIEW_BUILD, INDEX_SUMMARY, RELOCATE, GARBAGE_COLLECT - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.txt b/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.txt deleted file mode 100644 index c538203b5d9f..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool stopdaemon - Stop cassandra daemon - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] stopdaemon - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.txt b/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.txt deleted file mode 100644 index 1ebf4f095d55..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.txt +++ /dev/null @@ -1,38 +0,0 @@ -NAME - nodetool tablehistograms - Print statistic histograms for a given table - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] tablehistograms [--] - [
| ] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [
| ] - The keyspace and table name - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.txt deleted file mode 100644 index fb0563c6f1a3..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.txt +++ /dev/null @@ -1,73 +0,0 @@ -NAME - nodetool tablestats - Print statistics on tables - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] tablestats - [(-F | --format )] [(-H | --human-readable)] [-i] - [(-s | --sort )] [(-t | --top )] [--] - [...] - -OPTIONS - -F , --format - Output format (json, yaml) - - -h , --host - Node hostname or ip address - - -H, --human-readable - Display bytes in human readable form, i.e. KiB, MiB, GiB, TiB - - -i - Ignore the list of tables and display the remaining tables - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -s , --sort - Sort tables by specified sort key - (average_live_cells_per_slice_last_five_minutes, - average_tombstones_per_slice_last_five_minutes, - bloom_filter_false_positives, bloom_filter_false_ratio, - bloom_filter_off_heap_memory_used, bloom_filter_space_used, - compacted_partition_maximum_bytes, compacted_partition_mean_bytes, - compacted_partition_minimum_bytes, - compression_metadata_off_heap_memory_used, dropped_mutations, - full_name, index_summary_off_heap_memory_used, local_read_count, - local_read_latency_ms, local_write_latency_ms, - maximum_live_cells_per_slice_last_five_minutes, - maximum_tombstones_per_slice_last_five_minutes, memtable_cell_count, - memtable_data_size, memtable_off_heap_memory_used, - memtable_switch_count, number_of_partitions_estimate, - off_heap_memory_used_total, pending_flushes, percent_repaired, - read_latency, reads, space_used_by_snapshots_total, space_used_live, - space_used_total, sstable_compression_ratio, sstable_count, - table_name, write_latency, writes) - - -t , --top - Show only the top K tables for the sort key (specify the number K of - tables to be shown - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [...] - List of tables (or keyspace) names - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.txt b/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.txt deleted file mode 100644 index 0837d31ce4b6..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.txt +++ /dev/null @@ -1,47 +0,0 @@ -NAME - nodetool toppartitions - Sample and print the most active partitions - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] toppartitions [-a ] - [-k ] [-s ] [--] - -OPTIONS - -a - Comma separated list of samplers to use (Default: all) - - -h , --host - Node hostname or ip address - - -k - Number of the top samples to list (Default: 10) - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -s - Capacity of the sampler, higher for more accuracy (Default: 256) - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - The keyspace, column family name, and duration in milliseconds - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.txt b/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.txt deleted file mode 100644 index d3c4a20ff25c..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.txt +++ /dev/null @@ -1,33 +0,0 @@ -NAME - nodetool tpstats - Print usage statistics of thread pools - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] tpstats - [(-F | --format )] - -OPTIONS - -F , --format - Output format (json, yaml) - - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.txt b/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.txt deleted file mode 100644 index 367f19e1269a..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.txt +++ /dev/null @@ -1,40 +0,0 @@ -NAME - nodetool truncatehints - Truncate all hints on the local node, or - truncate hints for the endpoint(s) specified. - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] truncatehints [--] [endpoint - ... ] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [endpoint ... ] - Endpoint address(es) to delete hints for, either ip address - ("127.0.0.1") or hostname - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.txt b/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.txt deleted file mode 100644 index f5cf0f1335cc..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.txt +++ /dev/null @@ -1,49 +0,0 @@ -NAME - nodetool upgradesstables - Rewrite sstables (for the requested tables) - that are not on the current version (thus upgrading them to said current - version) - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] upgradesstables - [(-a | --include-all-sstables)] [(-j | --jobs )] [--] - [ ...] - -OPTIONS - -a, --include-all-sstables - Use -a to include all sstables, even those already on the current - version - - -h , --host - Node hostname or ip address - - -j , --jobs - Number of sstables to upgrade simultanously, set to 0 to use all - available compaction threads - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/verify.txt b/doc/source/modules/cassandra/pages/tools/nodetool/verify.txt deleted file mode 100644 index 92572cbef8b8..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/verify.txt +++ /dev/null @@ -1,58 +0,0 @@ -NAME - nodetool verify - Verify (check data checksum for) one or more tables - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] verify - [(-c | --check-version)] [(-d | --dfp)] [(-e | --extended-verify)] - [(-q | --quick)] [(-r | --rsc)] [(-t | --check-tokens)] [--] [ - ...] - -OPTIONS - -c, --check-version - Also check that all sstables are the latest version - - -d, --dfp - Invoke the disk failure policy if a corrupt sstable is found - - -e, --extended-verify - Verify each cell data, beyond simply checking sstable checksums - - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -q, --quick - Do a quick check - avoid reading all data to verify checksums - - -r, --rsc - Mutate the repair status on corrupt sstables - - -t, --check-tokens - Verify that all tokens in sstables are owned by this node - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/version.txt b/doc/source/modules/cassandra/pages/tools/nodetool/version.txt deleted file mode 100644 index 9c5a7b4f9768..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/version.txt +++ /dev/null @@ -1,29 +0,0 @@ -NAME - nodetool version - Print cassandra version - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] version - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.txt b/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.txt deleted file mode 100644 index 30429c3fee3b..000000000000 --- a/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.txt +++ /dev/null @@ -1,38 +0,0 @@ -NAME - nodetool viewbuildstatus - Show progress of a materialized view build - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] viewbuildstatus [--] - | - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - | - The keyspace and view name - - diff --git a/doc/test.adoc b/doc/test.adoc deleted file mode 100644 index 776c95d5b39e..000000000000 --- a/doc/test.adoc +++ /dev/null @@ -1,13 +0,0 @@ -[tabs] -==== -Tab A:: -+ --- -Contents of tab A. --- -Tab B:: -+ --- -Contents of tab B. --- -==== From 2ab7340a2adc272653461cb74b0d674e097c1d6e Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 10 Jul 2020 11:43:11 -0700 Subject: [PATCH 008/115] move non-adoc files to examples/YAML --- .../modules/cassandra/pages/tools/cassandra_stress.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc b/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc index f36d39c3af06..f3baf0e0e507 100644 --- a/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc +++ b/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc @@ -246,7 +246,7 @@ the table will be truncated once before the test. The full example can be found here: [source, yaml] ---- -include::example$YAML/stress-example.yaml +include::example$YAML/stress-example.yaml[] ---- Running a user mode test with multiple yaml files:::: @@ -281,7 +281,7 @@ queries: The full example can be found here: [source, yaml] ---- -include::example$YAML/stress-lwt-example.yaml +include::example$YAML/stress-lwt-example.yaml[] ---- == Graphing From f7ca6b763827299c2892d6356facde6e7cc157d9 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 16 Jul 2020 14:04:47 -0700 Subject: [PATCH 009/115] edits --- .../modules/cassandra/pages/cql/ddl.adoc | 115 +++++------------- 1 file changed, 33 insertions(+), 82 deletions(-) diff --git a/doc/source/modules/cassandra/pages/cql/ddl.adoc b/doc/source/modules/cassandra/pages/cql/ddl.adoc index 0d3908d20872..6f5692d68460 100644 --- a/doc/source/modules/cassandra/pages/cql/ddl.adoc +++ b/doc/source/modules/cassandra/pages/cql/ddl.adoc @@ -456,110 +456,61 @@ A CQL table has a number of options that can be set at creation (and, for most of them, altered later). These options are specified after the `WITH` keyword. -Amongst those options, however, are two important ones that cannot be changed after -creation and influence which queries can be done against the table: -* `COMPACT STORAGE` -* `CLUSTERING ORDER` -Those, as well as the other options of a table, are described in the following -sections. +One important option that cannot be changed after creation, `CLUSTERING ORDER BY`, influences how queries can be done against the table. It is worth discussing in more detail here. -==== Compact tables +[[clustering-order]] +==== Clustering order -[WARNING] -.Warning -==== -Since Cassandra 3.0, compact tables have the exact same layout -internally than non compact ones (for the same schema obviously), and -declaring a table compact *only* creates artificial limitations on the -table definition and usage. It only exists for historical reason and is -preserved for backward compatibility And as `COMPACT STORAGE` cannot, as -of Cassandra , be removed, it is strongly discouraged to create new -table with the `COMPACT STORAGE` option. -==== +The clustering order of a table is defined by the clustering columns. +By default, the clustering order is ascending for the clustering column's data types. +For example, integers order from 1, 2, ... n, while text orders from A to Z. -A _compact_ table is one defined with the `COMPACT STORAGE` option. -This option is only maintained for backward compatibility for -definitions created before CQL version 3 and shouldn't be used for new -tables. Declaring a table with this option creates limitations for the -table which are largely arbitrary (and exists for historical reasons). -Amongst those limitation: +The `CLUSTERING ORDER BY` table option uses a comma-separated list of the +clustering columns, each set for either `ASC` (for _ascending_ order) or `DESC` (for _descending order). +The default is ascending for all clustering columns if the `CLUSTERING ORDER BY` option is not set. -* a compact table cannot use collections nor static columns. -* if a compact table has at least one clustering column, then it must -have _exactly_ one column outside of the primary key ones. This imply -you cannot add or remove columns after creation in particular. -* a compact table is limited in the indexes it can create, and no -materialized view can be created on it. +This option is basically a hint for the storage engine that changes the order in which it stores the row. +Beware of the consequences of setting this option: -[[clustering-order]] -==== Reversing the clustering order - -The clustering order of a table is defined by the -`clustering columns ` of that table. By default, -that ordering is based on natural order of those clustering order, but -the `CLUSTERING ORDER` allows to change that clustering order to use the -_reverse_ natural order for some (potentially all) of the columns. - -The `CLUSTERING ORDER` option takes the comma-separated list of the -clustering column, each with a `ASC` (for _ascendant_, e.g. the natural -order) or `DESC` (for _descendant_, e.g. the reverse natural order). -Note in particular that the default (if the `CLUSTERING ORDER` option is -not used) is strictly equivalent to using the option with all clustering -columns using the `ASC` modifier. - -Note that this option is basically a hint for the storage engine to -change the order in which it stores the row but it has 3 visible -consequences: - -* it limits which `ORDER BY` clause are allowed for -`selects ` on that table. You can only:: - order results by the clustering order or the reverse clustering order. - Meaning that if a table has 2 clustering column `a` and `b` and you - defined `WITH CLUSTERING ORDER (a DESC, b ASC)`, then in queries you - will be allowed to use `ORDER BY (a DESC, b ASC)` and (reverse - clustering order) `ORDER BY (a ASC, b DESC)` but *not* - `ORDER BY (a ASC, b ASC)` (nor `ORDER BY (a DESC, b DESC)`). -* it also change the default order of results when queried (if no -`ORDER BY` is provided). Results are always returned:: - in clustering order (within a partition). -* it has a small performance impact on some queries as queries in -reverse clustering order are slower than the one in:: - forward clustering order. In practice, this means that if you plan on - querying mostly in the reverse natural order of your columns (which is - common with time series for instance where you often want data from - the newest to the oldest), it is an optimization to declare a - descending clustering order. +* It changes the default ascending order of results when queried with a `SELECT` statement with no `ORDER BY` clause. + +* It limits how the `ORDER BY` clause is used in `SELECT` statements on that table. +Results can only be ordered with either the original clustering order or the reverse clustering order. +Suppose you create a table with two clustering columns `a` and `b`, defined `WITH CLUSTERING ORDER BY (a DESC, b ASC)`. +Queries on the table can use `ORDER BY (a DESC, b ASC)` or `ORDER BY (a ASC, b DESC)`. +Mixed order, such as `ORDER BY (a ASC, b ASC)` or `ORDER BY (a DESC, b DESC)` will not return expected order. + +* It has a performance impact on queries. Queries in reverse clustering order are slower than the default ascending order. +If you plan to query mostly in descending order, declare the clustering order in the table schema using `WITH CLUSTERING ORDER BY ()`. +This optimization is common for time series, to retrieve the data from newest to oldest. [[create-table-general-options]] ==== Other table options -review (misses cdc if nothing else) and link to proper categories when -appropriate (compaction for instance) - A table supports the following options: [width="100%",cols="30%,9%,11%,50%",options="header",] |=== |option | kind | default | description -| `comment` | _simple_ | none | A free-form, human-readable comment. -| `speculative_retry` | _simple_ | 99PERCENTILE | Speculative retry options -| `cdc` |_boolean_ |false |Create a Change Data Capture (CDC) log on the table. -| `additional_write_policy` |_simple_ |99PERCENTILE |`Speculative retry options -| `gc_grace_seconds` |_simple_ |864000 |Time to wait before garbage -collecting tombstones (deletion markers). +| `comment` | _simple_ | none | A free-form, human-readable comment +| xref:cql/ddl.adoc#spec_retry[`speculative_retry`] | _simple_ | 99PERCENTILE | Speculative retry options +| `cdc` |_boolean_ |false |Create a Change Data Capture (CDC) log on the table +| `additional_write_policy` |_simple_ |99PERCENTILE | Same as `speculative_retry` +| `gc_grace_seconds` |_simple_ |864000 |Time to wait before garbage collecting tombstones (deletion markers) | `bloom_filter_fp_chance` |_simple_ |0.00075 |The target probability of false positive of the sstable bloom filters. Said bloom filters will be sized to provide the provided probability (thus lowering this value impact the size of bloom filters in-memory and on-disk) -| `default_time_to_live` |_simple_ |0 |The default expiration time (“TTL”) in seconds for a table. -| `compaction` |_map_ |_see below_ |`Compaction options `. -| `compression` |_map_ |_see below_ |`Compression options `. +| `default_time_to_live` |_simple_ |0 |Default expiration time (“TTL”) in seconds for a table +| `compaction` |_map_ |_see below_ |`Compaction options ` +| `compression` |_map_ |_see below_ |`Compression options ` | `caching` |_map_ |_see below_ |Caching options -| `memtable_flush_period_in_ms` |_simple_ |0 |Time (in ms) before Cassandra flushes memtables to disk. +| `memtable_flush_period_in_ms` |_simple_ |0 |Time (in ms) before Cassandra flushes memtables to disk | `read_repair` |_simple_ |BLOCKING |Sets read repair behavior (see below) |=== +[[spec_retry]] ===== Speculative retry options By default, Cassandra read coordinators only query as many replicas as @@ -582,7 +533,7 @@ Examples of setting speculative retry are: ALTER TABLE users WITH speculative_retry = '10ms'; ---- -Or, +or, [source,cql] ---- From 00232eaea5d70d51a5ec208cad489d34baceaf12 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 16 Jul 2020 16:29:31 -0700 Subject: [PATCH 010/115] reorder items --- doc/source/modules/ROOT/pages/index.adoc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/source/modules/ROOT/pages/index.adoc b/doc/source/modules/ROOT/pages/index.adoc index 3c7fbc1733bf..b01e65fea261 100644 --- a/doc/source/modules/ROOT/pages/index.adoc +++ b/doc/source/modules/ROOT/pages/index.adoc @@ -17,25 +17,25 @@ to do so by submitting your contribution like any other patch following | xref:cassandra:getting_started/index.adoc[Getting started] | Newbie starting point -| xref:cassandra:operating/index.adoc[Operation] | The operator's corner +| xref:cassandra:new/index.adoc[New in 4.0] | What's new in Cassandra 4.0 | xref:cassandra:architecture/index.adoc[Architecture] | Cassandra's big picture -| xref:cassandra:tools/index.adoc[Tools] | cqlsh, nodetool, and others - | xref:cassandra:data_modeling/index.adoc[Data modeling] | Hint: it's not relational -| xref:cassandra:troubleshooting/index.adoc[Troubleshooting] | What to look for when you have a problem - | xref:cassandra:cql/index.adoc[Cassandra Query Language (CQL)] | CQL reference documentation -| xref:cassandra:development/index.adoc[Development] | Learn how to improve Cassandra and contribute patches +| xref:cassandra:configuration/index.adoc[Configuration] | Cassandra's handles and knobs -| xref:cassandra:faq/index.adoc[FAQ] | Frequently asked questions +| xref:cassandra:operating/index.adoc[Operation] | The operator's corner -| xref:cassandra:configuration/index.adoc[Configuration] | Cassandra's handles and knobs +| xref:cassandra:tools/index.adoc[Tools] | cqlsh, nodetool, and others -| xref:cassandra:new/index.adoc[New in 4.0] | What's new in Cassandra 4.0 +| xref:cassandra:troubleshooting/index.adoc[Troubleshooting] | What to look for when you have a problem + +| xref:cassandra:development/index.adoc[Development] | Learn how to improve Cassandra and contribute patches + +| xref:cassandra:faq/index.adoc[FAQ] | Frequently asked questions | xref:cassandra:plugins/index.adoc[Plug-ins] | Third-party plug-ins From 412e2d8efc4ad0a0723645b025121c48dbd7e97b Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 21 Jul 2020 20:18:15 -0700 Subject: [PATCH 011/115] fix formatting --- .../cassandra/examples/BNF/alter_ks.bnf | 2 +- .../cassandra/examples/BNF/alter_table.bnf | 4 + .../cassandra/examples/BNF/drop_table.bnf | 1 + .../modules/cassandra/examples/BNF/term.bnf | 2 +- .../cassandra/examples/BNF/truncate_table.bnf | 1 + .../examples/CQL/alter_table_add_column.cql | 1 + .../examples/CQL/alter_table_spec_retry.cql | 1 + .../CQL/alter_table_spec_retry_percent.cql | 1 + .../examples/CQL/alter_table_with_comment.cql | 2 + .../cassandra/examples/CQL/caching_option.cql | 6 + .../cassandra/examples/CQL/chunk_length.cql | 6 + .../examples/CQL/spec_retry_values.cql | 6 + .../modules/cassandra/pages/cql/ddl.adoc | 530 +++++++----------- .../cassandra/pages/cql/definitions.adoc | 25 +- .../modules/cassandra/pages/cql/types.adoc | 48 +- .../pages/operating/compaction/lcs.adoc | 1 + .../pages/operating/compaction/stcs.adoc | 1 + .../pages/operating/compaction/twcs.adoc | 4 +- 18 files changed, 285 insertions(+), 357 deletions(-) create mode 100644 doc/source/modules/cassandra/examples/BNF/alter_table.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/drop_table.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/truncate_table.bnf create mode 100644 doc/source/modules/cassandra/examples/CQL/alter_table_add_column.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry_percent.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/alter_table_with_comment.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/caching_option.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/chunk_length.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/spec_retry_values.cql diff --git a/doc/source/modules/cassandra/examples/BNF/alter_ks.bnf b/doc/source/modules/cassandra/examples/BNF/alter_ks.bnf index 7327972bf5fa..5f82d34e43a3 100644 --- a/doc/source/modules/cassandra/examples/BNF/alter_ks.bnf +++ b/doc/source/modules/cassandra/examples/BNF/alter_ks.bnf @@ -1,2 +1,2 @@ -alter_keyspace_statement:=: ALTER KEYSPACE keyspace_name +alter_keyspace_statement::= ALTER KEYSPACE keyspace_name WITH options diff --git a/doc/source/modules/cassandra/examples/BNF/alter_table.bnf b/doc/source/modules/cassandra/examples/BNF/alter_table.bnf new file mode 100644 index 000000000000..bf1b4b7ab531 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/alter_table.bnf @@ -0,0 +1,4 @@ +alter_table_statement::= ALTER TABLE table_name alter_table_instruction +alter_table_instruction::= ADD column_name cql_type ( ',' column_name cql_type )* + | DROP column_name ( column_name )* + | WITH options diff --git a/doc/source/modules/cassandra/examples/BNF/drop_table.bnf b/doc/source/modules/cassandra/examples/BNF/drop_table.bnf new file mode 100644 index 000000000000..cabd17a42cf6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/drop_table.bnf @@ -0,0 +1 @@ +drop_table_statement::= DROP TABLE [ IF EXISTS ] table_name diff --git a/doc/source/modules/cassandra/examples/BNF/term.bnf b/doc/source/modules/cassandra/examples/BNF/term.bnf index 4e70984c2922..504c4c40d8e1 100644 --- a/doc/source/modules/cassandra/examples/BNF/term.bnf +++ b/doc/source/modules/cassandra/examples/BNF/term.bnf @@ -2,5 +2,5 @@ term::= constant | literal | function_call | arithmetic_operation | type_hint | literal::= collection_literal | udt_literal | tuple_literal function_call::= identifier '(' [ term (',' term)* ] ')' arithmetic_operation::= '-' term | term ('+' | '-' | '*' | '/' | '%') term -type_hint::= '(' cql_type ) term +type_hint::= '(' cql_type ')' term bind_marker::= '?' | ':' identifier diff --git a/doc/source/modules/cassandra/examples/BNF/truncate_table.bnf b/doc/source/modules/cassandra/examples/BNF/truncate_table.bnf new file mode 100644 index 000000000000..9c7d3012a2ab --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/truncate_table.bnf @@ -0,0 +1 @@ +truncate_statement::= TRUNCATE [ TABLE ] table_name diff --git a/doc/source/modules/cassandra/examples/CQL/alter_table_add_column.cql b/doc/source/modules/cassandra/examples/CQL/alter_table_add_column.cql new file mode 100644 index 000000000000..e7703ed6ec57 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/alter_table_add_column.cql @@ -0,0 +1 @@ +ALTER TABLE addamsFamily ADD gravesite varchar; diff --git a/doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry.cql b/doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry.cql new file mode 100644 index 000000000000..bb9aa618402a --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry.cql @@ -0,0 +1 @@ +ALTER TABLE users WITH speculative_retry = '10ms'; diff --git a/doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry_percent.cql b/doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry_percent.cql new file mode 100644 index 000000000000..a5351c68feb6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry_percent.cql @@ -0,0 +1 @@ +ALTER TABLE users WITH speculative_retry = '99PERCENTILE'; diff --git a/doc/source/modules/cassandra/examples/CQL/alter_table_with_comment.cql b/doc/source/modules/cassandra/examples/CQL/alter_table_with_comment.cql new file mode 100644 index 000000000000..9b82d7243f29 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/alter_table_with_comment.cql @@ -0,0 +1,2 @@ +ALTER TABLE addamsFamily + WITH comment = 'A most excellent and useful table'; diff --git a/doc/source/modules/cassandra/examples/CQL/caching_option.cql b/doc/source/modules/cassandra/examples/CQL/caching_option.cql new file mode 100644 index 000000000000..b48b171ec32b --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/caching_option.cql @@ -0,0 +1,6 @@ +CREATE TABLE simple ( +id int, +key text, +value text, +PRIMARY KEY (key, value) +) WITH caching = {'keys': 'ALL', 'rows_per_partition': 10}; diff --git a/doc/source/modules/cassandra/examples/CQL/chunk_length.cql b/doc/source/modules/cassandra/examples/CQL/chunk_length.cql new file mode 100644 index 000000000000..b3504fe04098 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/chunk_length.cql @@ -0,0 +1,6 @@ +CREATE TABLE simple ( + id int, + key text, + value text, + PRIMARY KEY (key, value) +) WITH compression = {'class': 'LZ4Compressor', 'chunk_length_in_kb': 4}; diff --git a/doc/source/modules/cassandra/examples/CQL/spec_retry_values.cql b/doc/source/modules/cassandra/examples/CQL/spec_retry_values.cql new file mode 100644 index 000000000000..bcd8d26dfce5 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/spec_retry_values.cql @@ -0,0 +1,6 @@ +min(99percentile,50ms) +max(99p,50MS) +MAX(99P,50ms) +MIN(99.9PERCENTILE,50ms) +max(90percentile,100MS) +MAX(100.0PERCENTILE,60ms) diff --git a/doc/source/modules/cassandra/pages/cql/ddl.adoc b/doc/source/modules/cassandra/pages/cql/ddl.adoc index 6f5692d68460..d03d3ab17668 100644 --- a/doc/source/modules/cassandra/pages/cql/ddl.adoc +++ b/doc/source/modules/cassandra/pages/cql/ddl.adoc @@ -1,12 +1,11 @@ = Data Definition -CQL stores data in _tables_, whose schema defines the layout of said -data in the table, and those tables are grouped in _keyspaces_. A -keyspace defines a number of options that applies to all the tables it -contains, most prominently of which is the -`replication strategy ` used by the keyspace. It -is generally encouraged to use one keyspace by _application_, and thus -many cluster may define only one keyspace. +CQL stores data in _tables_, whose schema defines the layout of the +data in the table. Tables are located in _keyspaces_. +A keyspace defines options that apply to all the keyspace's tables. +The xref:cql/ddl.adoc#replication-strategy[replication strategy] is an important keyspace option, as is the replication factor. +A good general rule is one keyspace per application. +It is common for a cluster to define only one keyspace for an actie application. This section describes the statements used to create, modify, and remove those keyspace and tables. @@ -32,9 +31,9 @@ double-quotes (`"myTable"` is different from `mytable`). Further, a table is always part of a keyspace and a table name can be provided fully-qualified by the keyspace it is part of. If is is not fully-qualified, the table is assumed to be in the _current_ keyspace -(see `USE statement `). +(see xref:cql/ddl.adoc#use-statement[USE] statement. -Further, the valid names for columns is simply defined as: +Further, the valid names for columns are defined as: [source,bnf] ---- @@ -52,14 +51,14 @@ include::example$BNF/options.bnf[] [[create-keyspace-statement]] == CREATE KEYSPACE -A keyspace is created using a `CREATE KEYSPACE` statement: +A keyspace is created with a `CREATE KEYSPACE` statement: [source,bnf] ---- include::example$BNF/create_ks.bnf[] ---- -For instance: +For example: [source,cql] ---- @@ -74,27 +73,26 @@ The supported `options` are: [cols=",,,,",options="header",] |=== -|name |kind |mandatory |default |description -|`replication` | _map_ | yes | The replication strategy and options to use for the keyspace (see +|name | kind | mandatory | default | description +|`replication` | _map_ | yes | n/a | The replication strategy and options to use for the keyspace (see details below). |`durable_writes` | _simple_ | no | true | Whether to use the commit log for updates on this keyspace (disable this option at your own risk!). |=== -The `replication` property is mandatory and must at least contains the -`'class'` sub-option which defines the -`replication strategy ` class to use. The rest of -the sub-options depends on what replication strategy is used. By -default, Cassandra support the following `'class'`: +The `replication` property is mandatory and must contain the `'class'` sub-option that defines the desired +xref:cql/ddl.adoc#replication-strategy[replication strategy] class. +The rest of the sub-options depend on which replication strategy is used. +By default, Cassandra supports the following `'class'` values: [[replication-strategy]] === `SimpleStrategy` A simple strategy that defines a replication factor for data to be spread across the entire cluster. This is generally not a wise choice -for production because it does not respect datacenter layouts and can -lead to wildly varying query latency. For a production ready strategy, -see `NetworkTopologyStrategy`. `SimpleStrategy` supports a single +for production, as it does not respect datacenter layouts and can +lead to wildly varying query latency. For production, use +`NetworkTopologyStrategy`. `SimpleStrategy` supports a single mandatory argument: [cols=",,,",options="header",] @@ -105,25 +103,25 @@ mandatory argument: === `NetworkTopologyStrategy` -A production ready replication strategy that allows to set the +A production-ready replication strategy that sets the replication factor independently for each data-center. The rest of the -sub-options are key-value pairs where a key is a data-center name and -its value is the associated replication factor. Options: +sub-options are key-value pairs, with a key set to a data-center name and +its value set to the associated replication factor. Options: [cols=",,,",options="header",] |=== -|sub-option |type |since |description -|`''` | int | all | The number of replicas to store per range in the provided datacenter. -|`'replication_factor'` | int | 4.0 | The number of replicas to use as a default per datacenter if not +|sub-option |type |description +|`''` | int | The number of replicas to store per range in the provided datacenter. +|`'replication_factor'` | int | The number of replicas to use as a default per datacenter if not specifically provided. Note that this always defers to existing definitions or explicit datacenter settings. For example, to have three -replicas per datacenter, supply this with a value of 3. +replicas per datacenter, set a value of 3. |=== -Note that when altering keyspaces and supplying `replication_factor`, +When later altering keyspaces and changing the `replication_factor`, auto-expansion will only _add_ new datacenters for safety, it will not -alter existing datacenters or remove any even if they are no longer in -the cluster. If you want to remove datacenters while still supplying +alter existing datacenters or remove any, even if they are no longer in +the cluster. If you want to remove datacenters while setting the `replication_factor`, explicitly zero out the datacenter you want to have zero replicas. @@ -164,7 +162,7 @@ will result in: include::example$RESULTS/autoexpand_exclude_dc.result[] ---- -If transient replication has been enabled, transient replicas can be +If xref:new/transientreplication.adoc[transient replication] has been enabled, transient replicas can be configured for both `SimpleStrategy` and `NetworkTopologyStrategy` by defining replication factors in the format `'/'` @@ -180,13 +178,11 @@ include::example$CQL/create_ks_trans_repl.cql[] [[use-statement]] == USE -The `USE` statement allows to change the _current_ keyspace (for the -_connection_ on which it is executed). A number of objects in CQL are -bound to a keyspace (tables, user-defined types, functions, ...) and the +The `USE` statement changes the _current_ keyspace to the specified keyspace. +A number of objects in CQL are bound to a keyspace (tables, user-defined types, functions, etc.) and the current keyspace is the default keyspace used when those objects are -referred without a fully-qualified name (that is, without being prefixed -a keyspace name). A `USE` statement simply takes the keyspace to use as -current as argument: +referred to in a query without a fully-qualified name (without a prefixed keyspace name). +A `USE` statement specifies the keyspace to use as an argument: [source,bnf] ---- @@ -201,35 +197,33 @@ include::example$CQL/use_ks.cql[] [[alter-keyspace-statement]] == ALTER KEYSPACE -An `ALTER KEYSPACE` statement allows to modify the options of a -keyspace: +An `ALTER KEYSPACE` statement modifies the options of a keyspace: [source,bnf] ---- include::example$BNF/alter_ks.bnf[] ---- -For instance: +For example: [source,cql] ---- include::example$CQL/alter_ks.cql[] ---- -The supported options are the same than for -`creating a keyspace `. +The supported options are the same as for xref:cql/ddl.adoc#create-keyspace-statement[creating a keyspace]. [[drop-keyspace-statement]] == DROP KEYSPACE -Dropping a keyspace can be done using the `DROP KEYSPACE` statement: +Dropping a keyspace is done with the `DROP KEYSPACE` statement: [source,bnf] ---- include::example$BNF/drop_ks.bnf[] ---- -For instance: +For example: [source,cql] ---- @@ -237,7 +231,7 @@ include::example$CQL/drop_ks.cql[] ---- Dropping a keyspace results in the immediate, irreversible removal of -that keyspace, including all the tables, UTD and functions in it, and +that keyspace, including all the tables, user-defined types, user-defined functions, and all the data contained in those tables. If the keyspace does not exists, the statement will return an error, @@ -260,11 +254,10 @@ For example, here are some CQL statements to create tables: include::example$CQL/create_table.cql[] ---- -A CQL table has a name and is composed of a set of _rows_. Creating a -table amounts to defining which `columns -` the rows will be composed, which of those columns -compose the `primary key `, as well as optional -`options ` for the table. +A CQL table has a name and is composed of a set of _rows_. +Creating a table amounts to defining which xref:cql/ddl.adoc#column-definition[columns] each rows will have, +which of those columns comprise the xref:cql/ddl.adoc#primary-key[primary key], as well as defined +xref:cql/ddl.adoc#create-table-options[options] for the table. Attempting to create an already existing table will return an error unless the `IF NOT EXISTS` directive is used. If it is used, the @@ -273,27 +266,24 @@ statement will be a no-op if the table already exists. [[column-definition]] === Column definitions -Every rows in a CQL table has a set of predefined columns defined at the -time of the table creation (or added later using an -`alter statement`). +Every row in a CQL table will have the predefined columns defined at table creation. +Columns can be added later using an xref:cql/ddl.adoc#alter-table-statement[alter statement]. -A `column_definition` is primarily comprised of the name of the column -defined and it's `type `, which restrict which values are -accepted for that column. Additionally, a column definition can have the +A `column_definition` is comprised of the name of the column and its xref:cql/ddl.adoc#data-type[type], +restricting the values that are accepted for that column. Additionally, a column definition can have the following modifiers: -`STATIC`:: - it declares the column as being a `static column `. -`PRIMARY KEY`:: - it declares the column as being the sole component of the - `primary key ` of the table. +* `STATIC`: declares the column as a xref:cql/ddl.adoc#static-column[static column] +* `PRIMARY KEY`: declares the column as the sole component of the xref:cql/ddl.adoc#primary-key[primary key] of the table +[[static-column]] ==== Static columns Some columns can be declared as `STATIC` in a table definition. A column that is static will be “shared” by all the rows belonging to the same -partition (having the same `partition key `). For -instance: +partition (having the same xref:cql/ddl.adoc#partition-key[partition key]. + +For example: [source,cql] ---- @@ -308,34 +298,33 @@ include::example$RESULTS/select_static_data.result[] ---- As can be seen, the `s` value is the same (`static1`) for both of the -row in the partition (the partition key in that example being `pk`, both -rows are in that same partition): the 2nd insertion has overridden the +rows in the partition (the partition key being `pk`, and both +rows are in the same partition): the second insertion overrides the value for `s`. -The use of static columns as the following restrictions: +The use of static columns has the following restrictions: -* tables with the `COMPACT STORAGE` option (see below) cannot use them. -* a table without clustering columns cannot have static columns (in a -table without clustering columns, every partition has only one row, and -so every column is inherently static). -* only non `PRIMARY KEY` columns can be static. +* A table without clustering columns cannot have static columns. +In a table without clustering columns, every partition has only one row, and +so every column is inherently static) +* Only non-primary key columns can be static. [[primary-key]] === The Primary key Within a table, a row is uniquely identified by its `PRIMARY KEY`, and -hence all tables *must* define one PRIMARY KEY. +hence all tables *must* define a single PRIMARY KEY. A `PRIMARY KEY` is composed of one or more of the defined columns in the table. -Syntactically, the primary key is defined the keywords `PRIMARY KEY` +Syntactically, the primary key is defined with the phrase `PRIMARY KEY` followed by a comma-separated list of the column names within parenthesis. If the primary key has only one column, you can alternatively add the `PRIMARY KEY` phrase to that column in the table definition. -The order of the columns in the primary key definition define the partition key and +The order of the columns in the primary key definition defines the partition key and clustering columns. A CQL primary key is composed of two parts: -`partition key `:: +xref:cql/ddl.adoc#partition-key[partition key]:: * It is the first component of the primary key definition. It can be a single column or, using an additional set of parenthesis, can be multiple columns. A table must have at least one partition key, the smallest possible table definition is: @@ -344,7 +333,7 @@ A table must have at least one partition key, the smallest possible table defini ---- include::example$CQL/create_table_single_pk.cql[] ---- -`clustering columns `:: +xref:cql/ddl.adoc#clustering-columns[clustering columns]:: * The columns are the columns that follow the partition key in the primary key definition. The order of those columns define the _clustering order_. @@ -500,11 +489,11 @@ A table supports the following options: | `gc_grace_seconds` |_simple_ |864000 |Time to wait before garbage collecting tombstones (deletion markers) | `bloom_filter_fp_chance` |_simple_ |0.00075 |The target probability of false positive of the sstable bloom filters. Said bloom filters will be -sized to provide the provided probability (thus lowering this value -impact the size of bloom filters in-memory and on-disk) +sized to provide the provided probability, thus lowering this value +impact the size of bloom filters in-memory and on-disk. | `default_time_to_live` |_simple_ |0 |Default expiration time (“TTL”) in seconds for a table -| `compaction` |_map_ |_see below_ |`Compaction options ` -| `compression` |_map_ |_see below_ |`Compression options ` +| `compaction` |_map_ |_see below_ | xref:operating/compaction/index.adoc#cql-compaction-options[Compaction options] +| `compression` |_map_ |_see below_ | xref:operating/compression/index.adoc#cql-compression-options[Compression options] | `caching` |_map_ |_see below_ |Caching options | `memtable_flush_period_in_ms` |_simple_ |0 |Time (in ms) before Cassandra flushes memtables to disk | `read_repair` |_simple_ |BLOCKING |Sets read repair behavior (see below) @@ -516,43 +505,46 @@ impact the size of bloom filters in-memory and on-disk) By default, Cassandra read coordinators only query as many replicas as necessary to satisfy consistency levels: one for consistency level `ONE`, a quorum for `QUORUM`, and so on. `speculative_retry` determines -when coordinators may query additional replicas, which is useful when -replicas are slow or unresponsive. Speculative retries are used to -reduce the latency. The speculative_retry option may be used to -configure rapid read protection with which a coordinator sends more -requests than needed to satisfy the Consistency level. +when coordinators may query additional replicas, a useful action when +replicas are slow or unresponsive. Speculative retries reduce the latency. +The speculative_retry option configures rapid read protection, where a coordinator sends more +requests than needed to satisfy the consistency level. + +[IMPORTANT] +==== +Frequently reading from additional replicas can hurt cluster +performance. When in doubt, keep the default `99PERCENTILE`. +==== + +Pre-Cassandra 4.0 speculative retry policy takes a single string as a parameter: -Pre-4.0 speculative Retry Policy takes a single string as a parameter, -this can be `NONE`, `ALWAYS`, `99PERCENTILE` (PERCENTILE), `50MS` -(CUSTOM). +* `NONE` +* `ALWAYS` +* `99PERCENTILE` (PERCENTILE) +* `50MS` (CUSTOM) -Examples of setting speculative retry are: +An example of setting speculative retry sets a custom value: [source,cql] ---- -ALTER TABLE users WITH speculative_retry = '10ms'; +include::example$CQL/alter_table_spec_retry.cql[] ---- -or, +This example uses a percentile for the setting: [source,cql] ---- -ALTER TABLE users WITH speculative_retry = '99PERCENTILE'; +include::example$CQL/alter_table_spec_retry_percent.cql[] ---- -The problem with these settings is when a single host goes into an -unavailable state this drags up the percentiles. This means if we are -set to use `p99` alone, we might not speculate when we intended to to -because the value at the specified percentile has gone so high. As a fix -4.0 adds support for hybrid `MIN()`, `MAX()` speculative retry policies -(https://issues.apache.org/jira/browse/CASSANDRA-14293[CASSANDRA-14293]). -This means if the normal `p99` for the table is <50ms, we will still -speculate at this value and not drag the tail latencies up... but if the -`p99th` goes above what we know we should never exceed we use that -instead. +A percentile setting can backfire. If a single host becomes unavailable, it can +force up the percentiles. A value of `p99` will not speculate as intended because the +value at the specified percentile has increased too much. If the consistency level is set to `ALL`, all +replicas are queried regardless of the speculative retry setting. -In 4.0 the values (case-insensitive) discussed in the following table -are supported: +Cassandra 4.0 supports case-insensitivity for speculative retry values (https://issues.apache.org/jira/browse/CASSANDRA-14293[CASSANDRA-14293]). For example, assigning the value as `none`, `None`, or `NONE` has the same effect. + +Additionally, the following values are added: [cols=",,",options="header",] |=== @@ -561,92 +553,55 @@ are supported: for all replicas. If a replica takes longer than `X` percent of this table's average response time, the coordinator queries an additional replica. `X` must be between 0 and 100. -| `XP` | 90.5P | Synonym for `XPERCENTILE` +| `XP` | 90.5P | Same as `XPERCENTILE` | `Yms` | 25ms | If a replica takes more than `Y` milliseconds to respond, the coordinator queries an additional replica. -| `MIN(XPERCENTILE,YMS)` | MIN(99PERCENTILE,35MS) | A hybrid policy that will use either the +| `MIN(XPERCENTILE,YMS)` | MIN(99PERCENTILE,35MS) | A hybrid policy that uses either the specified percentile or fixed milliseconds depending on which value is lower at the time of calculation. Parameters are `XPERCENTILE`, `XP`, or -`Yms`. This is helpful to help protect against a single slow instance; -in the happy case the 99th percentile is normally lower than the -specified fixed value however, a slow host may skew the percentile very -high meaning the slower the cluster gets, the higher the value of the -percentile, and the higher the calculated time used to determine if we -should speculate or not. This allows us to set an upper limit that we -want to speculate at, but avoid skewing the tail latencies by -speculating at the lower value when the percentile is less than the -specified fixed upper bound. - -| `MAX(XPERCENTILE,YMS)` `ALWAYS` `NEVER` | MAX(90.5P,25ms) | A hybrid policy that will use either the specified +`Yms`. This setting helps protect against a single slow instance. + +| `MAX(XPERCENTILE,YMS)` `ALWAYS` `NEVER` | MAX(90.5P,25ms) | A hybrid policy that uses either the specified percentile or fixed milliseconds depending on which value is higher at -the time of calculation. Coordinators always query all replicas. -Coordinators never query additional replicas. +the time of calculation. |=== -As of version 4.0 speculative retry allows more friendly params -(https://issues.apache.org/jira/browse/CASSANDRA-13876[CASSANDRA-13876]). -The `speculative_retry` is more flexible with case. As an example a -value does not have to be `NONE`, and the following are supported -alternatives. - -[source,cql] ----- -alter table users WITH speculative_retry = 'none'; -alter table users WITH speculative_retry = 'None'; ----- - -The text component is case insensitive and for `nPERCENTILE` version 4.0 -allows `nP`, for instance `99p`. In a hybrid value for speculative -retry, one of the two values must be a fixed millisecond value and the -other a percentile value. +Cassandra 4.0 adds support for hybrid `MIN()` and `MAX()` speculative retry policies, with a mix and match of either `MIN(), MAX()`, `MIN(), MIN()`, or `MAX(), MAX()` (https://issues.apache.org/jira/browse/CASSANDRA-14293[CASSANDRA-14293]). +The hybrid mode will still speculate if the normal `p99` for the table is < 50ms, the minimum value. +But if the `p99` level goes higher than the maximum value, then that value can be used. +In a hybrid value, one value must be a fixed time (ms) value and the other a percentile value. -Some examples: +To illustrate variations, the following examples are all valid: [source,cql] ---- -min(99percentile,50ms) -max(99p,50MS) -MAX(99P,50ms) -MIN(99.9PERCENTILE,50ms) -max(90percentile,100MS) -MAX(100.0PERCENTILE,60ms) +include::example$CQL/spec_retry_values.cql[] ---- -Two values of the same kind cannot be specified such as -`min(90percentile,99percentile)` as it wouldn’t be a hybrid value. This -setting does not affect reads with consistency level `ALL` because they -already query all replicas. - -Note that frequently reading from additional replicas can hurt cluster -performance. When in doubt, keep the default `99PERCENTILE`. - -`additional_write_policy` specifies the threshold at which a cheap +The `additional_write_policy` setting specifies the threshold at which a cheap quorum write will be upgraded to include transient replicas. [[cql-compaction-options]] ===== Compaction options -The `compaction` options must at least define the `'class'` sub-option, -that defines the compaction strategy class to use. The supported class -are `'SizeTieredCompactionStrategy'` (`STCS `), -`'LeveledCompactionStrategy'` (`LCS `) and -`'TimeWindowCompactionStrategy'` (`TWCS `) (the -`'DateTieredCompactionStrategy'` is also supported but is deprecated and -`'TimeWindowCompactionStrategy'` should be preferred instead). The -default is `'SizeTieredCompactionStrategy'`. Custom strategy can be -provided by specifying the full class name as a `string constant -`. - -All default strategies support a number of -`common options `, as well as options specific to -the strategy chosen (see the section corresponding to your strategy for -details: `STCS `, `LCS -` and `TWCS `). +The `compaction` options must minimally define the `'class'` sub-option, +to specify the compaction strategy class to use. +The supported classes are: + +* `'SizeTieredCompactionStrategy'`, xref:operating/compaction/stcs.adoc#stcs[STCS] (Default) +* `'LeveledCompactionStrategy'`, xref:operating/compaction/lcs.adoc#lcs[LCS] +* `'TimeWindowCompactionStrategy'`, xref:operating/compaction/twcs.adoc#twcs[TWCS] + +The `'DateTieredCompactionStrategy'` is also supported but deprecated; +`'TimeWindowCompactionStrategy'` should be used. +If a custom strategies is required, specify the full class name as a xref:cql/definitions.adoc#constants[string constant]. + +All default strategies support a number of xref:operating/compaction/index.adoc#compaction-options[common options], as well as options specific to the strategy chosen. See the section corresponding to your strategy for details: xref:operating/compaction/stcs.adoc#stcs_options[STCS], xref:operating/compaction/lcs.adoc#lcs_options[LCS], xref:operating/compaction/twcs.adoc#twcs_options[TWCS]. [[cql-compression-options]] ===== Compression options -The `compression` options define if and how the sstables of the table +The `compression` options define if and how the SSTables of the table are compressed. Compression is configured on a per-table basis as an optional argument to `CREATE TABLE` or `ALTER TABLE`. The following sub-options are available: @@ -654,193 +609,134 @@ sub-options are available: [cols=",,",options="header",] |=== |Option |Default |Description - | `class` | LZ4Compressor | The compression algorithm to use. Default compressor are: LZ4Compressor, -SnappyCompressor, DeflateCompressor and ZstdCompressor. Use -`'enabled' : false` to disable compression. Custom compressor can be -provided by specifying the full class name as a “string constant”:constants. +SnappyCompressor, DeflateCompressor and ZstdCompressor. +Use `'enabled' : false` to disable compression. +Custom compressor can be provided by specifying the full class name as a xref:cql/definitions.adoc#constants[string constant]. -| `enabled` | true | Enable/disable sstable compression. If the `enabled` option is set to -`false` no other options must be specified. +| `enabled` | true | Enable/disable sstable compression. +If the `enabled` option is set to `false`, no other options must be specified. -| `chunk_length_in_kb` | 64 | On disk SSTables are compressed by block (to allow random reads). This -defines the size (in KB) of said block. Bigger values may improve the -compression rate, but increases the minimum size of data to be read from -disk for a read. The default value is an optimal value for compressing -tables. Chunk length must be a power of 2 because so is assumed so when -computing the chunk number from an uncompressed file offset. Block size -may be adjusted based on read/write access patterns such as: - -* How much data is typically requested at once -* Average size of rows in the table +| `chunk_length_in_kb` | 64 | On disk SSTables are compressed by block (to allow random reads). +This option defines the size (in KB) of said block. See xref:cql/ddl.adoc#chunk_note[note] for further information. | `crc_check_chance` | 1.0 | Determines how likely Cassandra is to verify the checksum on each compression chunk during reads. -| `compression_level` | 3 | Compression level. It is only applicable for `ZstdCompressor` and -accepts values between `-131072` and `22`. +| `compression_level` | 3 | Compression level. Only applicable for `ZstdCompressor`. +Accepts values between `-131072` and `22`. |=== -For instance, to create a table with LZ4Compressor and a -chunk_lenth_in_kb of 4KB: +[[chunk_note]] +[NOTE] +==== +Bigger values may improve the compression rate, but will increase the minimum size of data to be read from +disk for a read. +The default value is an optimal value for compressing tables. +Chunk length must be a power of 2 when computing the chunk number from an uncompressed file offset. +Block size may be adjusted based on read/write access patterns such as: + +* How much data is typically requested at once +* Average size of rows in the table +==== + +For instance, to create a table with LZ4Compressor and a `chunk_length_in_kb` of 4 KB: [source,cql] ---- -CREATE TABLE simple ( - id int, - key text, - value text, - PRIMARY KEY (key, value) -) with compression = {'class': 'LZ4Compressor', 'chunk_length_in_kb': 4}; +include::example$CQL/chunk_length.cql[] ---- [[cql-caching-options]] ===== Caching options Caching optimizes the use of cache memory of a table. The cached data is -weighed by size and access frequency. The `caching` options allows to -configure both the _key cache_ and the _row cache_ for the table. The -following sub-options are available: +weighed by size and access frequency. +The `caching` options can configure both the `key cache` and the `row cache` for the table. +The following sub-options are available: [cols=",,",options="header",] |=== |Option |Default |Description -a| -____ -`keys` -____ - -a| -____ -ALL -____ - -a| -____ -Whether to cache keys (“key cache”) for this table. Valid values are: -`ALL` and `NONE`. -____ - -a| -____ -`rows_per_partition` -____ - -a| -____ -NONE -____ - -a| -____ -The amount of rows to cache per partition (“row cache”). If an integer -`n` is specified, the first `n` queried rows of a partition will be -cached. Other possible options are `ALL`, to cache all rows of a queried -partition, or `NONE` to disable row caching. -____ +| `keys` | ALL | Whether to cache keys (key cache) for this table. Valid values are: `ALL` and `NONE`. +| `rows_per_partition` | NONE | The amount of rows to cache per partition (row cache). +If an integer `n` is specified, the first `n` queried rows of a partition will be cached. +Valid values are: `ALL`, to cache all rows of a queried partition, or `NONE` to disable row caching. |=== -For instance, to create a table with both a key cache and 10 rows per -partition: +For instance, to create a table with both a key cache and 10 rows cached per partition: [source,cql] ---- -CREATE TABLE simple ( -id int, -key text, -value text, -PRIMARY KEY (key, value) -) WITH caching = {'keys': 'ALL', 'rows_per_partition': 10}; +include::example$CQL/caching_option.cql[] ---- +[[read-repair-options]] ===== Read Repair options -The `read_repair` options configures the read repair behavior to allow -tuning for various performance and consistency behaviors. Two -consistency properties are affected by read repair behavior. +The `read_repair` options configure the read repair behavior, tuning for various performance and consistency behaviors. + +The values are: +[cols=",,",options="header",] +|=== +|Option |Default |Description +|`BLOCKING` | yes | If a read repair is triggered, the read blocks writes sent to other replicas until the consistency level is reached by the writes. + +|`NONE` | no | If set, the coordinator reconciles any differences between replicas, but doesn't attempt to repair them. +|=== + +Two consistency properties are affected by read repair behavior. -* Monotonic Quorum Reads: Provided by `BLOCKING`. Monotonic quorum reads +* Monotonic quorum reads: Monotonic quorum reads prevents reads from appearing to go back in time in some circumstances. When monotonic quorum reads are not provided and a write fails to reach -a quorum of replicas, it may be visible in one read, and then disappear -in a subsequent read. -* Write Atomicity: Provided by `NONE`. Write atomicity prevents reads -from returning partially applied writes. Cassandra attempts to provide -partition level write atomicity, but since only the data covered by a +a quorum of replicas, the read values may be visible in one read, and then disappear +in a subsequent read. `BLOCKING` provides this behavior. +* Write atomicity: Write atomicity prevents reads +from returning partially-applied writes. Cassandra attempts to provide +partition-level write atomicity, but since only the data covered by a SELECT statement is repaired by a read repair, read repair can break write atomicity when data is read at a more granular level than it is -written. For example read repair can break write atomicity if you write +written. For example, read repair can break write atomicity if you write multiple rows to a clustered partition in a batch, but then select a single row by specifying the clustering column in a SELECT statement. - -The available read repair settings are: - -==== Blocking - -The default setting. When `read_repair` is set to `BLOCKING`, and a read -repair is triggered, the read will block on writes sent to other -replicas until the CL is reached by the writes. Provides monotonic -quorum reads, but not partition level write atomicity - -==== None - -When `read_repair` is set to `NONE`, the coordinator will reconcile any -differences between replicas, but will not attempt to repair them. -Provides partition level write atomicity, but not monotonic quorum -reads. +`NONE` provides this behavior. ===== Other considerations: * Adding new columns (see `ALTER TABLE` below) is a constant time -operation. There is thus no need to try to anticipate future usage when -creating a table. +operation. Thus, there is no need to anticipate future usage while initially creating a table. [[alter-table-statement]] == ALTER TABLE Altering an existing table uses the `ALTER TABLE` statement: -alter_table_statement: ALTER TABLE table_name -alter_table_instruction alter_table_instruction: ADD -column_name cql_type ( ',' -column_name cql_type )* : | DROP -column_name ( column_name )* : | WITH -options +[source,bnf] +---- +include::example$BNF/alter_table.bnf[] +---- -For instance: +For example: [source,cql] ---- -ALTER TABLE addamsFamily ADD gravesite varchar; - -ALTER TABLE addamsFamily - WITH comment = 'A most excellent and useful table'; +include::example$CQL/alter_table_add_column.cql[] +include::example$CQL/alter_table_with_comment.cql[] ---- The `ALTER TABLE` statement can: -* Add new column(s) to the table (through the `ADD` instruction). Note -that the primary key of a table cannot be changed and thus newly added -column will, by extension, never be part of the primary key. Also note -that `compact -tables ` have restrictions regarding column addition. -Note that this is constant (in the amount of data the cluster contains) -time operation. -* Remove column(s) from the table. This drops both the column and all -its content, but note that while the column becomes immediately -unavailable, its content is only removed lazily during compaction. -Please also see the warnings below. Due to lazy removal, the altering -itself is a constant (in the amount of data removed or contained in the -cluster) time operation. -* Change some of the table options (through the `WITH` instruction). The -`supported options -` are the same that when creating a table (outside -of `COMPACT STORAGE` and `CLUSTERING ORDER` that cannot be changed after -creation). Note that setting any `compaction` sub-options has the effect -of erasing all previous `compaction` options, so you need to re-specify -all the sub-options if you want to keep them. The same note applies to -the set of `compression` sub-options. +* `ADD` a new column to a table. The primary key of a table cannot ever be altered. +A new column, thus, cannot be part of the primary key. +Adding a column is a constant-time operation based on the amount of data in the table. +* `DROP` a column from a table. This command drops both the column and all +its content. Be aware that, while the column becomes immediately +unavailable, its content are removed lazily during compaction. Because of this lazy removal, +the command is a constant-time operation based on the amount of data in the table. +Also, it is important to know that once a column is dropped, a column with the same name can be re-added, +unless the dropped column was a non-frozen column like a collection. [WARNING] .Warning @@ -848,42 +744,44 @@ the set of `compression` sub-options. Dropping a column assumes that the timestamps used for the value of this column are "real" timestamp in microseconds. Using "real" timestamps in microseconds is the default is and is *strongly* recommended but as -Cassandra allows the client to provide any timestamp on any table it is +Cassandra allows the client to provide any timestamp on any table, it is theoretically possible to use another convention. Please be aware that -if you do so, dropping a column will not work correctly. +if you do so, dropping a column will not correctly execute. ==== -[WARNING] -.Warning -==== -Once a column is dropped, it is allowed to re-add a column with the same -name than the dropped one *unless* the type of the dropped column was a -(non-frozen) column (due to an internal technical limitation). -==== +* Use `WITH` to change a table option. The xref:CQL/ddl.adoc#create-table-options[supported options] +are the same as those used when creating a table, with the exception of `CLUSTERING ORDER`. +However, setting any `compaction` sub-options will erase *ALL* previous `compaction` options, so you need to re-specify +all the sub-options you wish to keep. The same is true for `compression` sub-options. [[drop-table-statement]] == DROP TABLE Dropping a table uses the `DROP TABLE` statement: -drop_table_statement: DROP TABLE [ IF EXISTS ] table_name +[source,bnf] +---- +include::example$BNF/drop_table.bnf[] +---- Dropping a table results in the immediate, irreversible removal of the table, including all data it contains. If the table does not exist, the statement will return an error, unless -`IF EXISTS` is used in which case the operation is a no-op. +`IF EXISTS` is used, when the operation is a no-op. [[truncate-statement]] == TRUNCATE A table can be truncated using the `TRUNCATE` statement: -truncate_statement: TRUNCATE [ TABLE ] table_name +[source,bnf] +---- +include::example$BNF/truncate_table.bnf[] +---- -Note that `TRUNCATE TABLE foo` is allowed for consistency with other DDL -statements but tables are the only object that can be truncated -currently and so the `TABLE` keyword can be omitted. +`TRUNCATE TABLE foo` is the preferred syntax for consistency with other DDL +statements. +However, tables are the only object that can be truncated currently, and the `TABLE` keyword can be omitted. -Truncating a table permanently removes all existing data from the table, -but without removing the table itself. +Truncating a table permanently removes all existing data from the table, but without removing the table itself. diff --git a/doc/source/modules/cassandra/pages/cql/definitions.adoc b/doc/source/modules/cassandra/pages/cql/definitions.adoc index 95e8672d6e01..95be20ff1dc6 100644 --- a/doc/source/modules/cassandra/pages/cql/definitions.adoc +++ b/doc/source/modules/cassandra/pages/cql/definitions.adoc @@ -76,6 +76,7 @@ More formally, we have: include::example$BNF/identifier.bnf[] ---- +[[constants]] == Constants CQL defines the following _constants_: @@ -94,7 +95,7 @@ single-quote(`'`). A single-quote can be included by repeating it, e.g. defined by enclosing the arbitrary sequence of characters by two dollar characters, in which case single-quote can be used without escaping (`$$It's raining today$$`). That latter form is often used when defining -`user-defined functions ` to avoid having to escape single-quote +xref:cql/functions.adoc#udfs[user-defined functions] to avoid having to escape single-quote characters in function body (as they are more likely to occur than `$$`). * Integer, float and boolean constant are defined as expected. Note @@ -105,7 +106,7 @@ constants. * Blobs content are provided in hexadecimal and prefixed by `0x`. * The special `NULL` constant denotes the absence of value. -For how these constants are typed, see the xref:cxql/types.adoc[Data types] section. +For how these constants are typed, see the xref:cql/types.adoc[Data types] section. == Terms @@ -119,17 +120,13 @@ include::example$BNF/term.bnf[] A term is thus one of: -* A `constant `. -* A literal for either `a collection `, -`a user-defined type ` or `a tuple ` (see the linked -sections for details). -* A function call: see `the section on functions ` for -details on which `native function -` exists and how to define your own -`user-defined ones `. -* An arithmetic operation between terms. see -`the section on arithmetic operations ` -* A _type hint_: see the `related section ` for details. +* A xref:cql/defintions.adoc#constants[constant] +* A literal for either a xref:cql/types.adoc#collections[collection], +a xref:cql/types.adoc#udts[user-defined type] or a xref:cql/types.adoc#tuples[tuple] +* A xref:cql/functions.adoc#cql-functions[function] call, either a xref:cql/functions.adoc#scalar-native-functions[native function] +or a xref:cql/functions.adoc#user-defined-scalar-functions[user-defined function] +* An xref:cql/operators.adoc#arithmetic_operators[arithmetic operation] between terms +* A type hint * A bind marker, which denotes a variable to be bound at execution time. See the section on `prepared-statements` for details. A bind marker can be either anonymous (`?`) or named (`:some_name`). The latter form @@ -165,7 +162,7 @@ data. * `materialized-views` statements. * `cql-roles` statements. * `cql-permissions` statements. -* `User-Defined Functions ` statements. +* `User-Defined Functions (UDFs)` statements. * `udts` statements. * `cql-triggers` statements. diff --git a/doc/source/modules/cassandra/pages/cql/types.adoc b/doc/source/modules/cassandra/pages/cql/types.adoc index d72c2e905835..0cee1f3d0db5 100644 --- a/doc/source/modules/cassandra/pages/cql/types.adoc +++ b/doc/source/modules/cassandra/pages/cql/types.adoc @@ -1,16 +1,16 @@ = Data Types CQL is a typed language and supports a rich set of data types, including -`native types `, `collection types `, -`user-defined types `, `tuple types ` and `custom -types `: +xref:cql/types.adoc#native-types[native types], xref:cql/types.adoc#collections[collection types], +xref:cql/types.adoc#udts[user-defined types], xref:cql/types.adoc#tuples[tuple types], and xref:cql/types.adoc#custom-types[custom +types]: [source, bnf] ---- include::example$BNF/cql_type.bnf[] ---- -== Native Types +== Native types The native types supported by CQL are: @@ -20,7 +20,7 @@ include::example$BNF/native_type.bnf[] ---- The following table gives additional informations on the native data -types, and on which kind of `constants ` each type supports: +types, and on which kind of xref:cql/definitions.adoc#constants[constants] each type supports: [cols=",,",options="header",] |=== @@ -58,8 +58,8 @@ generally used as a “conflict-free” timestamp. Also see `timeuuid-functions` The `counter` type is used to define _counter columns_. A counter column is a column whose value is a 64-bit signed integer and on which 2 operations are supported: incrementing and decrementing (see the -`UPDATE statement -` for syntax). Note that the value of a counter cannot +xref:cql/dml.adoc#update-statement[UPDATE] statement for syntax). +Note that the value of a counter cannot be set: a counter does not exist until first incremented/decremented, and that first increment/decrement is made as if the prior value was 0. @@ -70,7 +70,7 @@ Counters have a number of important limitations: * A table that contains a counter can only contain counters. In other words, either all the columns of a table outside the `PRIMARY KEY` have the `counter` type, or none of them have it. -* Counters do not support `expiration `. +* Counters do not support xref:cql/dml.adoc#writetime-and-ttl-function[expiration]. * The deletion of counters is supported, but is only guaranteed to work the first time you delete a counter. In other words, you should not re-update a counter that you have deleted (if you do, proper behavior is @@ -116,26 +116,26 @@ feasible. The time of day may also be omitted (`'2011-02-03'` or `'2011-02-03+0000'`), in which case the time of day will default to 00:00:00 in the specified or default time zone. However, if only the -date part is relevant, consider using the `date ` type. +date part is relevant, consider using the xref:cql/types.adoc#dates[date] type. [[dates]] -== Working with dates +== Date type Values of the `date` type are encoded as 32-bit unsigned integers representing a number of days with “the epoch” at the center of the range (2^31). Epoch is January 1st, 1970 -As for `timestamp `, a date can be input either as an +For xref:cql/types.adoc#timestamps[timestamps], a date can be input either as an `integer` or using a date `string`. In the later case, the format should be `yyyy-mm-dd` (so `'2011-02-03'` for instance). [[times]] -== Working with times +== Time type Values of the `time` type are encoded as 64-bit signed integers representing the number of nanoseconds since midnight. -As for `timestamp `, a time can be input either as an +For xref:cql/types.adoc#timestamps[timestamps], a time can be input either as an `integer` or using a `string` representing the time. In the later case, the format should be `hh:mm:ss[.fffffffff]` (where the sub-second precision is optional and if provided, can be less than the nanosecond). @@ -147,7 +147,7 @@ So for instance, the following are valid inputs for a time: * `'08:12:54.123456789'` [[durations]] -== Working with durations +== Duration type Values of the `duration` type are encoded as 3 signed integer of variable lengths. The first integer represents the number of months, the @@ -187,12 +187,12 @@ limitation is due to the fact that durations cannot be ordered. It is effectively not possible to know if `1mo` is greater than `29d` without a date context. -A `1d` duration is not equals to a `24h` one as the duration type has +A `1d` duration is not equal to a `24h` one as the duration type has been created to be able to support daylight saving. == Collections -CQL supports 3 kind of collections: `maps`, `sets` and `lists`. The +CQL supports three kinds of collections: `maps`, `sets` and `lists`. The types of those collections is defined by: [source,bnf] @@ -227,7 +227,7 @@ has to be read (and reading one is not paged internally). * While insertion operations on sets and maps never incur a read-before-write internally, some operations on lists do. Further, some lists operations are not idempotent by nature (see the section on -`lists ` below for details), making their retry in case of +xref:cql/types.adoc#lists[lists] below for details), making their retry in case of timeout problematic. It is thus advised to prefer sets over lists when possible. @@ -303,7 +303,7 @@ removing it is a no-op but no error is thrown): include::example$CQL/delete_set.cql[] ---- -Lastly, as for `maps `, TTLs are only applied to newly inserted values. +Lastly, for xref:cql/types.adoc#sets[sets], TTLs are only applied to newly inserted values. === Lists @@ -313,7 +313,7 @@ Lastly, as for `maps `, TTLs are only applied to newly inserted values. As mentioned above and further discussed at the end of this section, lists have limitations and specific performance considerations that you should take into account before using them. In general, if you can use a -`set ` instead of list, always prefer a set. +xref:cql/types.adoc#sets[set] instead of list, always prefer a set. ==== A `list` is a (sorted) collection of non-unique values where @@ -378,7 +378,7 @@ run slowly and use more resources than usual updates (with the exclusion of conditional write that have their own cost). ==== -Lastly, as for `maps `, TTLs only apply to newly inserted values. +Lastly, for xref:cql/types.adoc#lists[lists], TTLs only apply to newly inserted values. [[udts]] == User-Defined Types (UDTs) @@ -424,7 +424,7 @@ prefixed by a keyspace name, it is created in that keyspace. Otherwise, it is created in the current keyspace. * As of Cassandra , UDT have to be frozen in most cases, hence the `frozen
` in the table definition above. Please see the section -on `frozen ` for more details. +on xref:cql/types.adoc#frozen[frozen] for more details. === UDT literals @@ -436,7 +436,7 @@ UDT literal: include::example$BNF/udt_literal.bnf[] ---- -In other words, a UDT literal is like a `map ` literal but its +In other words, a UDT literal is like a xref:cql/types.adoc#maps[map]` literal but its keys are the names of the fields of the type. For instance, one could insert into the table define in the previous section using: @@ -517,9 +517,9 @@ those values can be null but they need to be explicitly declared as so). [NOTE] .Note ==== -Custom types exists mostly for backward compatiliby purposes and their +Custom types exists mostly for backward compatibility purposes and their usage is discouraged. Their usage is complex, not user friendly and the -other provided types, particularly `user-defined types `, should +other provided types, particularly xref:cql/types.adoc#udts[user-defined types], should almost always be enough. ==== diff --git a/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc b/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc index 8f02fbe0511f..96326076133f 100644 --- a/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc +++ b/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc @@ -65,6 +65,7 @@ for example. To avoid this LCS tries to include those starved high level sstables in other compactions if there has been 25 compaction rounds where the highest level has not been involved. +[[lcs_options]] == LCS options `sstable_size_in_mb` (default: 160MB):: diff --git a/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc b/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc index 1000c920e321..7d7bdc2ec0d5 100644 --- a/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc +++ b/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc @@ -17,6 +17,7 @@ unrepaired data). There is also an option (-s) to do a major compaction that splits the output into several sstables. The sizes of the sstables are approximately 50%, 25%, 12.5%... of the total size. +[[stcs_options]] == STCS options `min_sstable_size` (default: 50MB):: diff --git a/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc b/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc index a8ed43278af8..7c64c650922a 100644 --- a/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc +++ b/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc @@ -8,10 +8,12 @@ workload, the contents of an entire SSTable likely expire at approximately the same time, allowing them to be dropped completely, and space reclaimed much more reliably than when using `SizeTieredCompactionStrategy` or `LeveledCompactionStrategy`. The basic -concept is that `TimeWindowCompactionStrategy` will create 1 sstable per +concept is that `TimeWindowCompactionStrategy` will create one sstable per file for a given window, where a window is simply calculated as the combination of two primary options: +[[twcs_options]] + `compaction_window_unit` (default: DAYS):: A Java TimeUnit (MINUTES, HOURS, or DAYS). `compaction_window_size` (default: 1):: From 2c726a063e99bec619f6000c944ac4a6a21ddc7e Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 23 Jul 2020 16:22:41 -0700 Subject: [PATCH 012/115] add tabs, fix text --- .../examples/BNF/select_statement.bnf | 21 +++++ .../examples/CQL/select_statement.cql | 11 +++ .../modules/cassandra/pages/cql/ddl.adoc | 14 ++- .../modules/cassandra/pages/cql/dml.adoc | 92 +++++++----------- .../pages/getting_started/installing.adoc | 93 ++++++++++--------- .../cassandra/partials/java_version.adoc | 23 +++++ .../cassandra/partials/tail_syslog.adoc | 13 ++- 7 files changed, 162 insertions(+), 105 deletions(-) create mode 100644 doc/source/modules/cassandra/examples/BNF/select_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/CQL/select_statement.cql create mode 100644 doc/source/modules/cassandra/partials/java_version.adoc diff --git a/doc/source/modules/cassandra/examples/BNF/select_statement.bnf b/doc/source/modules/cassandra/examples/BNF/select_statement.bnf new file mode 100644 index 000000000000..f53da41da57c --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/select_statement.bnf @@ -0,0 +1,21 @@ +select_statement::= SELECT [ JSON | DISTINCT ] ( select_clause | '*' ) + FROM `table_name` + [ WHERE `where_clause` ] + [ GROUP BY `group_by_clause` ] + [ ORDER BY `ordering_clause` ] + [ PER PARTITION LIMIT (`integer` | `bind_marker`) ] + [ LIMIT (`integer` | `bind_marker`) ] + [ ALLOW FILTERING ] +select_clause::= `selector` [ AS `identifier` ] ( ',' `selector` [ AS `identifier` ] ) +selector::== `column_name` + | `term` + | CAST '(' `selector` AS `cql_type` ')' + | `function_name` '(' [ `selector` ( ',' `selector` )_ ] ')' + | COUNT '(' '_' ')' +where_clause::= `relation` ( AND `relation` )* +relation::= column_name operator term + '(' column_name ( ',' column_name )* ')' operator tuple_literal + TOKEN '(' column_name# ( ',' column_name )* ')' operator term +operator::= '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEY +group_by_clause::= column_name ( ',' column_name )* +ordering_clause::= column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )* diff --git a/doc/source/modules/cassandra/examples/CQL/select_statement.cql b/doc/source/modules/cassandra/examples/CQL/select_statement.cql new file mode 100644 index 000000000000..cee5a1916383 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/select_statement.cql @@ -0,0 +1,11 @@ +SELECT name, occupation FROM users WHERE userid IN (199, 200, 207); +SELECT JSON name, occupation FROM users WHERE userid = 199; +SELECT name AS user_name, occupation AS user_occupation FROM users; + +SELECT time, value +FROM events +WHERE event_type = 'myEvent' + AND time > '2011-02-03' + AND time <= '2012-01-01' + +SELECT COUNT (*) AS user_count FROM users; diff --git a/doc/source/modules/cassandra/pages/cql/ddl.adoc b/doc/source/modules/cassandra/pages/cql/ddl.adoc index d03d3ab17668..be93bc211eb8 100644 --- a/doc/source/modules/cassandra/pages/cql/ddl.adoc +++ b/doc/source/modules/cassandra/pages/cql/ddl.adoc @@ -1,4 +1,5 @@ = Data Definition +:tabs: CQL stores data in _tables_, whose schema defines the layout of the data in the table. Tables are located in _keyspaces_. @@ -285,17 +286,28 @@ partition (having the same xref:cql/ddl.adoc#partition-key[partition key]. For example: +[{tabs}] +==== +Code:: ++ +-- [source,cql] ---- include::example$CQL/create_static_column.cql[] include::example$CQL/insert_static_data.cql[] include::example$CQL/select_static_data.cql[] ---- -results in: +-- + +Results:: ++ +-- [source,cql] ---- include::example$RESULTS/select_static_data.result[] ---- +-- +==== As can be seen, the `s` value is the same (`static1`) for both of the rows in the partition (the partition key being `pk`, and both diff --git a/doc/source/modules/cassandra/pages/cql/dml.adoc b/doc/source/modules/cassandra/pages/cql/dml.adoc index 8a3e07af36c3..fe725da6fa09 100644 --- a/doc/source/modules/cassandra/pages/cql/dml.adoc +++ b/doc/source/modules/cassandra/pages/cql/dml.adoc @@ -8,65 +8,37 @@ update, delete and query data. Querying data from data is done using a `SELECT` statement: -select_statement: SELECT [ JSON | DISTINCT ] ( -[.title-ref]#select_clause# | '_' ) : FROM `table_name` : [ WHERE -`where_clause` ] : [ GROUP BY `group_by_clause` ] : [ ORDER BY -`ordering_clause` ] : [ PER PARTITION LIMIT (`integer` | `bind_marker`) -] : [ LIMIT (`integer` | `bind_marker`) ] : [ ALLOW FILTERING ] -select_clause: `selector` [ AS `identifier` ] ( ',' `selector` [ AS -`identifier` ] ) selector: `column_name` : | `term` : | CAST '(' -`selector` AS `cql_type` ')' : | `function_name` '(' [ `selector` ( ',' -`selector` )_ ] ')' : | COUNT '(' '_' ')' where_clause: `relation` ( AND -`relation` )_ relation: [.title-ref]#column_name# [.title-ref]#operator# -[.title-ref]#term# : '(' [.title-ref]#column_name# ( ',' -[.title-ref]#column_name# )* ')' [.title-ref]#operator# -[.title-ref]#tuple_literal# : TOKEN '(' [.title-ref]#column_name# ( ',' -[.title-ref]#column_name# )* ')' [.title-ref]#operator# -[.title-ref]#term# operator: '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | -CONTAINS | CONTAINS KEY group_by_clause: [.title-ref]#column_name# ( ',' -[.title-ref]#column_name# )* ordering_clause: [.title-ref]#column_name# -[ ASC | DESC ] ( ',' [.title-ref]#column_name# [ ASC | DESC ] )* +[source,bnf] +---- +include:example$BNF/select_statement.bnf[] +---- -For instance: +For example: [source,cql] ---- -SELECT name, occupation FROM users WHERE userid IN (199, 200, 207); -SELECT JSON name, occupation FROM users WHERE userid = 199; -SELECT name AS user_name, occupation AS user_occupation FROM users; - -SELECT time, value -FROM events -WHERE event_type = 'myEvent' - AND time > '2011-02-03' - AND time <= '2012-01-01' - -SELECT COUNT (*) AS user_count FROM users; +include:example$CQL/select_statement.cql[] ---- The `SELECT` statements reads one or more columns for one or more rows in a table. It returns a result-set of the rows matching the request, where each row contains the values for the selection corresponding to -the query. Additionally, `functions ` including -`aggregation ` ones can be applied to the result. - -A `SELECT` statement contains at least a -`selection clause ` and the name of the table on which -the selection is on (note that CQL does *not* joins or sub-queries and -thus a select statement only apply to a single table). In most case, a -select will also have a `where clause ` and it can -optionally have additional clauses to `order ` or -`limit ` the results. Lastly, `queries that require -filtering ` can be allowed if the `ALLOW FILTERING` -flag is provided. +the query. Additionally, xref:cql/functions.adoc#cql-functions[functions] including +xref:cql/functions.adoc#aggregate-functions[aggregations] can be applied to the result. + +A `SELECT` statement contains at least a xref:cql/dml.adoc#selection-clause[selection clause] and the name of the table on which +the selection is executed. +CQL does *not* execute joins or sub-queries and a select statement only apply to a single table. +A select statement can also have a xref:cql/dml.adoc#where-clause[where clause] that can further narrow the query results. +Additional clauses can xref:cql/dml.adoc#ordering-clause[order] or xref:cql/dml.adoc#limit-clause[limit] the results. +Lastly, xref:cql/dml.adoc#allow-filtering[queries that require full cluster filtering] can append `ALLOW FILTERING` to any query. +[[selection-clause]] === Selection clause -The `select_clause` determines which columns needs to be queried and -returned in the result-set, as well as any transformation to apply to -this result before returning. It consists of a comma-separated list of -_selectors_ or, alternatively, of the wildcard character (`*`) to select -all the columns defined in the table. +The `select_clause` determines which columns will be queried and returned in the result set. +This clause can also apply transformations to apply to the result before returning. +The selection clause consists of a comma-separated list of specific _selectors_ or, alternatively, the wildcard character (`*`) to select all the columns defined in the table. ==== Selectors @@ -87,7 +59,7 @@ which counts all non-null results. ==== Aliases -Every _top-level_ selector can also be aliased (using [.title-ref]#AS#). +Every _top-level_ selector can also be aliased (using AS#). If so, the name of the corresponding column in the result set will be that of the alias. For instance: @@ -359,13 +331,13 @@ SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR' ALLOW FILTERING; Inserting data for a row is done using an `INSERT` statement: -insert_statement: INSERT INTO [.title-ref]#table_name# ( -[.title-ref]#names_values# | [.title-ref]#json_clause# ) : [ IF NOT -EXISTS ] : [ USING [.title-ref]#update_parameter# ( AND -[.title-ref]#update_parameter# )* ] names_values: [.title-ref]#names# -VALUES [.title-ref]#tuple_literal# json_clause: JSON -[.title-ref]#string# [ DEFAULT ( NULL | UNSET ) ] names: '(' -[.title-ref]#column_name# ( ',' [.title-ref]#column_name# )* ')' +insert_statement: INSERT INTO table_name# ( +names_values# | json_clause# ) : [ IF NOT +EXISTS ] : [ USING update_parameter# ( AND +update_parameter# )* ] names_values: names# +VALUES tuple_literal# json_clause: JSON +string# [ DEFAULT ( NULL | UNSET ) ] names: '(' +column_name# ( ',' column_name# )* ')' For instance: @@ -499,11 +471,11 @@ of `null` is equivalent to inserting with a TTL of 0. Deleting rows or parts of rows uses the `DELETE` statement: -delete_statement: DELETE [ [.title-ref]#simple_selection# ( ',' -[.title-ref]#simple_selection# ) ] : FROM [.title-ref]#table_name# : [ -USING [.title-ref]#update_parameter# ( AND -[.title-ref]#update_parameter# )* ] : WHERE [.title-ref]#where_clause# : -[ IF ( EXISTS | [.title-ref]#condition# ( AND [.title-ref]#condition# +delete_statement: DELETE [ simple_selection# ( ',' +simple_selection# ) ] : FROM table_name# : [ +USING update_parameter# ( AND +update_parameter# )* ] : WHERE where_clause# : +[ IF ( EXISTS | condition# ( AND condition# )*) ] For instance: diff --git a/doc/source/modules/cassandra/pages/getting_started/installing.adoc b/doc/source/modules/cassandra/pages/getting_started/installing.adoc index e75f2c9218d5..6da0fcde8b75 100644 --- a/doc/source/modules/cassandra/pages/getting_started/installing.adoc +++ b/doc/source/modules/cassandra/pages/getting_started/installing.adoc @@ -1,4 +1,5 @@ = Installing Cassandra +:tabs: These are the instructions for deploying the supported releases of Apache Cassandra on Linux servers. @@ -53,19 +54,7 @@ binaries and configuration files as the `cassandra` OS user. == Installing the binary tarball -[arabic] -. Verify the version of Java installed. For example: - -[source,shell] ----- -include::example$BASH/java_verify.sh[] ----- -should return: - -[source,plaintext] ----- -include::example$RESULTS/java_verify.result[] ----- +include::partial$java_version.adoc[] [arabic, start=2] . Download the binary tarball from one of the mirrors on the @@ -86,31 +75,49 @@ http://archive.apache.org/dist/cassandra/[Apache Archives]. the methods https://www.apache.org/dyn/closer.cgi#verify[here]. For example, to verify the hash of the downloaded file using GPG: +[{tabs}] +==== +Command:: ++ +-- [source,shell] ---- include::example$BASH/verify_gpg.sh[] ---- +-- -should return: - +Result:: ++ +-- [source,plaintext] ---- include::example$RESULTS/verify_gpg.result[] ---- +-- +==== Compare the signature with the SHA256 file from the Downloads site: +[{tabs}] +==== +Command:: ++ +-- [source,shell] ---- include::example$BASH/curl_verify_sha.sh[] ---- +-- -which returns: - +Result:: ++ +-- [source,plaintext] ---- 28757dde589f70410f9a6a95c39ee7e6cde63440e2b06b91ae6b200614fa364d ---- +-- +==== [arabic, start=4] . Unpack the tarball: @@ -151,39 +158,37 @@ include::example$BASH/start_tarball.sh[] NOTE: This will run Cassandra as the authenticated Linux user. +include::partial$tail_syslog.adoc[] You can monitor the progress of the startup with: +[{tabs}] +==== +Command:: ++ +-- [source,shell] ---- include::example$BASH/tail_syslog.sh[] ---- +-- +Result:: ++ +-- Cassandra is ready when you see an entry like this in the `system.log`: [source,plaintext] ---- include::example$RESULTS/tail_syslog.result[] ---- +-- +==== include::partial$nodetool_and_cqlsh.adoc[] == Installing the Debian packages -[arabic] -. Verify the version of Java installed. For example: - -// LLP: NEED TO ADD TO PARTIALS TO REUSE -[source,shell] ----- -include::example$BASH/java_verify.sh[] ----- - -should return: - -[source,plaintext] ----- -include::example$RESULTS/java_verify.result[] ----- +include::partial$java_version.adoc[] [arabic, start=2] . Add the Apache repository of Cassandra to the file @@ -199,14 +204,26 @@ include::example$BASH/get_deb_package.sh[] . Add the Apache Cassandra repository keys to the list of trusted keys on the server: +[{tabs}] +==== +Command:: ++ +-- [source,shell] ---- include::example$BASH/add_repo_keys.sh[] ---- +-- + +Result:: ++ +-- [source,plaintext] ---- include::example$RESULTS/add_repo_keys.result[] ---- +-- +==== [arabic, start=4] . Update the package index from sources: @@ -234,17 +251,7 @@ include::partial$nodetool_and_cqlsh_nobin.adoc[] == Installing the RPM packages -[arabic] -. Verify the version of Java installed. For example: - -[source,shell] ----- -include::example$BASH/java_verify.sh[] ----- -[source,plaintext] ----- -include::example$RESULTS/java_verify.result[] ----- +include::partial$java_version.adoc[] [arabic, start=2] . Add the Apache repository of Cassandra to the file diff --git a/doc/source/modules/cassandra/partials/java_version.adoc b/doc/source/modules/cassandra/partials/java_version.adoc new file mode 100644 index 000000000000..dddc1132dea3 --- /dev/null +++ b/doc/source/modules/cassandra/partials/java_version.adoc @@ -0,0 +1,23 @@ +[arabic, start=1] +. Verify the version of Java installed. For example: + +[{tabs}] +==== +Command:: ++ +-- +[source,shell] +---- +include::example$BASH/java_verify.sh[] +---- +-- + +Result:: ++ +-- +[source,plaintext] +---- +include::example$RESULTS/java_verify.result[] +---- +-- +==== diff --git a/doc/source/modules/cassandra/partials/tail_syslog.adoc b/doc/source/modules/cassandra/partials/tail_syslog.adoc index 7310360d0001..b5dd8f3d2988 100644 --- a/doc/source/modules/cassandra/partials/tail_syslog.adoc +++ b/doc/source/modules/cassandra/partials/tail_syslog.adoc @@ -1,14 +1,25 @@ [arabic, start=6] . Monitor the progress of the startup with: +[{tabs}] +==== +Command:: ++ +-- [source,shell] ---- -include::example$BASH/tail_syslog_package.sh[] +include::example$BASH/tail_syslog.sh[] ---- +-- +Result:: ++ +-- Cassandra is ready when you see an entry like this in the `system.log`: [source,plaintext] ---- include::example$RESULTS/tail_syslog.result[] ---- +-- +==== From 6f8561a0238987901f47ccdb4c52d168ca55b421 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 23 Jul 2020 18:03:30 -0700 Subject: [PATCH 013/115] convert dml file --- .../examples/BNF/batch_statement.bnf | 5 + .../examples/BNF/delete_statement.bnf | 5 + .../examples/BNF/insert_statement.bnf | 6 + .../examples/BNF/update_statement.bnf | 13 + .../examples/CQL/allow_filtering.cql | 9 + .../modules/cassandra/examples/CQL/as.cql | 13 + .../examples/CQL/batch_statement.cql | 6 + .../examples/CQL/delete_statement.cql | 5 + .../examples/CQL/insert_statement.cql | 5 + .../examples/CQL/query_allow_filtering.cql | 5 + .../CQL/query_fail_allow_filtering.cql | 1 + .../CQL/query_nofail_allow_filtering.cql | 1 + .../examples/CQL/table_for_where.cql | 9 + .../modules/cassandra/examples/CQL/token.cql | 2 + .../examples/CQL/update_statement.cql | 10 + .../modules/cassandra/examples/CQL/where.cql | 4 + .../cassandra/examples/CQL/where_fail.cql | 5 + .../CQL/where_group_cluster_columns.cql | 3 + .../cassandra/examples/CQL/where_in_tuple.cql | 3 + .../CQL/where_no_group_cluster_columns.cql | 4 + .../modules/cassandra/pages/cql/dml.adoc | 432 +++++++----------- 21 files changed, 267 insertions(+), 279 deletions(-) create mode 100644 doc/source/modules/cassandra/examples/BNF/batch_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/delete_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/insert_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/update_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/CQL/allow_filtering.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/as.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/batch_statement.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/delete_statement.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_statement.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/query_allow_filtering.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/query_fail_allow_filtering.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/query_nofail_allow_filtering.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/table_for_where.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/token.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/update_statement.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/where.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/where_fail.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/where_group_cluster_columns.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/where_in_tuple.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/where_no_group_cluster_columns.cql diff --git a/doc/source/modules/cassandra/examples/BNF/batch_statement.bnf b/doc/source/modules/cassandra/examples/BNF/batch_statement.bnf new file mode 100644 index 000000000000..2cc2559bfe40 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/batch_statement.bnf @@ -0,0 +1,5 @@ +batch_statement ::= BEGIN [ UNLOGGED | COUNTER ] BATCH + [ USING update_parameter( AND update_parameter)* ] + modification_statement ( ';' modification_statement )* + APPLY BATCH +modification_statement ::= insert_statement | update_statement | delete_statement diff --git a/doc/source/modules/cassandra/examples/BNF/delete_statement.bnf b/doc/source/modules/cassandra/examples/BNF/delete_statement.bnf new file mode 100644 index 000000000000..5f456ba2ded8 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/delete_statement.bnf @@ -0,0 +1,5 @@ +delete_statement::= DELETE [ simple_selection ( ',' simple_selection ) ] + FROM table_name + [ USING update_parameter ( AND update_parameter# )* ] + WHERE where_clause + [ IF ( EXISTS | condition ( AND condition)*) ] diff --git a/doc/source/modules/cassandra/examples/BNF/insert_statement.bnf b/doc/source/modules/cassandra/examples/BNF/insert_statement.bnf new file mode 100644 index 000000000000..ed80c3ed05b7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/insert_statement.bnf @@ -0,0 +1,6 @@ +insert_statement::= INSERT INTO table_name ( names_values | json_clause ) + [ IF NOT EXISTS ] + [ USING update_parameter ( AND update_parameter )* ] +names_values::= names VALUES tuple_literal +json_clause::= JSON string [ DEFAULT ( NULL | UNSET ) ] +names::= '(' column_name ( ',' column_name )* ')' diff --git a/doc/source/modules/cassandra/examples/BNF/update_statement.bnf b/doc/source/modules/cassandra/examples/BNF/update_statement.bnf new file mode 100644 index 000000000000..1a9bdb48544c --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/update_statement.bnf @@ -0,0 +1,13 @@ +update_statement ::= UPDATE table_name + [ USING update_parameter ( AND update_parameter )* ] + SET assignment( ',' assignment )* + WHERE where_clause + [ IF ( EXISTS | condition ( AND condition)*) ] +update_parameter ::= ( TIMESTAMP | TTL ) ( integer | bind_marker ) +assignment: simple_selection'=' term + `| column_name'=' column_name ( '+' | '-' ) term + | column_name'=' list_literal'+' column_name +simple_selection ::= column_name + | column_name '[' term']' + | column_name'.' field_name +condition ::= `simple_selection operator term diff --git a/doc/source/modules/cassandra/examples/CQL/allow_filtering.cql b/doc/source/modules/cassandra/examples/CQL/allow_filtering.cql new file mode 100644 index 000000000000..c3bf3c69e16b --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/allow_filtering.cql @@ -0,0 +1,9 @@ +CREATE TABLE users ( + username text PRIMARY KEY, + firstname text, + lastname text, + birth_year int, + country text +); + +CREATE INDEX ON users(birth_year); diff --git a/doc/source/modules/cassandra/examples/CQL/as.cql b/doc/source/modules/cassandra/examples/CQL/as.cql new file mode 100644 index 000000000000..a8b9f035689e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/as.cql @@ -0,0 +1,13 @@ +// Without alias +SELECT intAsBlob(4) FROM t; + +// intAsBlob(4) +// -------------- +// 0x00000004 + +// With alias +SELECT intAsBlob(4) AS four FROM t; + +// four +// ------------ +// 0x00000004 diff --git a/doc/source/modules/cassandra/examples/CQL/batch_statement.cql b/doc/source/modules/cassandra/examples/CQL/batch_statement.cql new file mode 100644 index 000000000000..e9148e82410e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/batch_statement.cql @@ -0,0 +1,6 @@ +BEGIN BATCH + INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user'); + UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3'; + INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c'); + DELETE name FROM users WHERE userid = 'user1'; +APPLY BATCH; diff --git a/doc/source/modules/cassandra/examples/CQL/delete_statement.cql b/doc/source/modules/cassandra/examples/CQL/delete_statement.cql new file mode 100644 index 000000000000..b574e7167d6e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/delete_statement.cql @@ -0,0 +1,5 @@ +DELETE FROM NerdMovies USING TIMESTAMP 1240003134 + WHERE movie = 'Serenity'; + +DELETE phone FROM Users + WHERE userid IN (C73DE1D3-AF08-40F3-B124-3FF3E5109F22, B70DE1D0-9908-4AE3-BE34-5573E5B09F14); diff --git a/doc/source/modules/cassandra/examples/CQL/insert_statement.cql b/doc/source/modules/cassandra/examples/CQL/insert_statement.cql new file mode 100644 index 000000000000..0f7a9435df34 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_statement.cql @@ -0,0 +1,5 @@ +INSERT INTO NerdMovies (movie, director, main_actor, year) + VALUES ('Serenity', 'Joss Whedon', 'Nathan Fillion', 2005) + USING TTL 86400; + +INSERT INTO NerdMovies JSON '{"movie": "Serenity", "director": "Joss Whedon", "year": 2005}'; diff --git a/doc/source/modules/cassandra/examples/CQL/query_allow_filtering.cql b/doc/source/modules/cassandra/examples/CQL/query_allow_filtering.cql new file mode 100644 index 000000000000..c4aaf394ec2e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/query_allow_filtering.cql @@ -0,0 +1,5 @@ +// All users are returned +SELECT * FROM users; + +// All users with a particular birth year are returned +SELECT * FROM users WHERE birth_year = 1981; diff --git a/doc/source/modules/cassandra/examples/CQL/query_fail_allow_filtering.cql b/doc/source/modules/cassandra/examples/CQL/query_fail_allow_filtering.cql new file mode 100644 index 000000000000..2e6c63bffd24 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/query_fail_allow_filtering.cql @@ -0,0 +1 @@ +SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR'; diff --git a/doc/source/modules/cassandra/examples/CQL/query_nofail_allow_filtering.cql b/doc/source/modules/cassandra/examples/CQL/query_nofail_allow_filtering.cql new file mode 100644 index 000000000000..88aed561954c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/query_nofail_allow_filtering.cql @@ -0,0 +1 @@ +SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR' ALLOW FILTERING; diff --git a/doc/source/modules/cassandra/examples/CQL/table_for_where.cql b/doc/source/modules/cassandra/examples/CQL/table_for_where.cql new file mode 100644 index 000000000000..f5ed5001ebf9 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/table_for_where.cql @@ -0,0 +1,9 @@ +CREATE TABLE posts ( + userid text, + blog_title text, + posted_at timestamp, + entry_title text, + content text, + category int, + PRIMARY KEY (userid, blog_title, posted_at) +); diff --git a/doc/source/modules/cassandra/examples/CQL/token.cql b/doc/source/modules/cassandra/examples/CQL/token.cql new file mode 100644 index 000000000000..b5c7f8b82bd4 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/token.cql @@ -0,0 +1,2 @@ +SELECT * FROM posts + WHERE token(userid) > token('tom') AND token(userid) < token('bob'); diff --git a/doc/source/modules/cassandra/examples/CQL/update_statement.cql b/doc/source/modules/cassandra/examples/CQL/update_statement.cql new file mode 100644 index 000000000000..7e1cfa76fecf --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/update_statement.cql @@ -0,0 +1,10 @@ +UPDATE NerdMovies USING TTL 400 + SET director = 'Joss Whedon', + main_actor = 'Nathan Fillion', + year = 2005 + WHERE movie = 'Serenity'; + +UPDATE UserActions + SET total = total + 2 + WHERE user = B70DE1D0-9908-4AE3-BE34-5573E5B09F14 + AND action = 'click'; diff --git a/doc/source/modules/cassandra/examples/CQL/where.cql b/doc/source/modules/cassandra/examples/CQL/where.cql new file mode 100644 index 000000000000..22d4bca3c4c6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/where.cql @@ -0,0 +1,4 @@ +SELECT entry_title, content FROM posts + WHERE userid = 'john doe' + AND blog_title='John''s Blog' + AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31'; diff --git a/doc/source/modules/cassandra/examples/CQL/where_fail.cql b/doc/source/modules/cassandra/examples/CQL/where_fail.cql new file mode 100644 index 000000000000..57413dfb0d05 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/where_fail.cql @@ -0,0 +1,5 @@ +// Needs a blog_title to be set to select ranges of posted_at + +SELECT entry_title, content FROM posts + WHERE userid = 'john doe' + AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31'; diff --git a/doc/source/modules/cassandra/examples/CQL/where_group_cluster_columns.cql b/doc/source/modules/cassandra/examples/CQL/where_group_cluster_columns.cql new file mode 100644 index 000000000000..1efb55ecd795 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/where_group_cluster_columns.cql @@ -0,0 +1,3 @@ +SELECT * FROM posts + WHERE userid = 'john doe' + AND (blog_title, posted_at) > ('John''s Blog', '2012-01-01'); diff --git a/doc/source/modules/cassandra/examples/CQL/where_in_tuple.cql b/doc/source/modules/cassandra/examples/CQL/where_in_tuple.cql new file mode 100644 index 000000000000..1d558046dc30 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/where_in_tuple.cql @@ -0,0 +1,3 @@ +SELECT * FROM posts + WHERE userid = 'john doe' + AND (blog_title, posted_at) IN (('John''s Blog', '2012-01-01'), ('Extreme Chess', '2014-06-01')); diff --git a/doc/source/modules/cassandra/examples/CQL/where_no_group_cluster_columns.cql b/doc/source/modules/cassandra/examples/CQL/where_no_group_cluster_columns.cql new file mode 100644 index 000000000000..6681ba5c85ef --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/where_no_group_cluster_columns.cql @@ -0,0 +1,4 @@ +SELECT * FROM posts + WHERE userid = 'john doe' + AND blog_title > 'John''s Blog' + AND posted_at > '2012-01-01'; diff --git a/doc/source/modules/cassandra/pages/cql/dml.adoc b/doc/source/modules/cassandra/pages/cql/dml.adoc index fe725da6fa09..8a4df2fecb30 100644 --- a/doc/source/modules/cassandra/pages/cql/dml.adoc +++ b/doc/source/modules/cassandra/pages/cql/dml.adoc @@ -10,14 +10,14 @@ Querying data from data is done using a `SELECT` statement: [source,bnf] ---- -include:example$BNF/select_statement.bnf[] +include::example$BNF/select_statement.bnf[] ---- For example: [source,cql] ---- -include:example$CQL/select_statement.cql[] +include::example$CQL/select_statement.cql[] ---- The `SELECT` statements reads one or more columns for one or more rows @@ -53,91 +53,63 @@ returned). * A casting, which allows to convert a nested selector to a (compatible) type. * A function call, where the arguments are selector themselves. See the -section on `functions ` for more details. -* The special call `COUNT(*)` to the `COUNT function `, +section on xref:cql/functions.adoc#cql-functions[functions] for more details. +* The special call `COUNT(*)` to the xref:cql/functions.adoc#count-function[COUNT function], which counts all non-null results. ==== Aliases -Every _top-level_ selector can also be aliased (using AS#). +Every _top-level_ selector can also be aliased (using AS). If so, the name of the corresponding column in the result set will be that of the alias. For instance: [source,cql] ---- -// Without alias -SELECT intAsBlob(4) FROM t; - -// intAsBlob(4) -// -------------- -// 0x00000004 - -// With alias -SELECT intAsBlob(4) AS four FROM t; - -// four -// ------------ -// 0x00000004 +include::example$CQL/as.cql[] ---- [NOTE] -.Note ==== -Currently, aliases aren't recognized anywhere else in the statement -where they are used (not in the `WHERE` clause, not in the `ORDER BY` -clause, ...). You must use the orignal column name instead. +Currently, aliases aren't recognized in the `WHERE` or `ORDER BY` clauses in the statement. +You must use the orignal column name instead. ==== +[[writetime-and-ttl-function]] ==== `WRITETIME` and `TTL` function -Selection supports two special functions (that aren't allowed anywhere -else): `WRITETIME` and `TTL`. Both function take only one argument and -that argument _must_ be a column name (so for instance `TTL(3)` is -invalid). +Selection supports two special functions that aren't allowed anywhere +else: `WRITETIME` and `TTL`. +Both functions take only one argument, a column name. +These functions retrieve meta-information that is stored internally for each column: -Those functions allow to retrieve meta-information that are stored -internally for each column, namely: - -* the timestamp of the value of the column for `WRITETIME`. -* the remaining time to live (in seconds) for the value of the column if -it set to expire (and `null` otherwise). +* `WRITETIME` stores the timestamp of the value of the column +* `TTL` stores the remaining time to live (in seconds) for the value of the column if it is set to expire; otherwise the value is `null`. [[where-clause]] === The `WHERE` clause -The `WHERE` clause specifies which rows must be queried. It is composed -of relations on the columns that are part of the `PRIMARY KEY` and/or -have a link:#createIndexStmt[secondary index] defined on them. +The `WHERE` clause specifies which rows are queried. It specifies +a relationship for `PRIMARY KEY` columns or a column that has +a xref:cql/indexes.adoc#create-index-statement[secondary index] defined, along with a set value. + +Not all relationships are allowed in a query. For instance, only an equality +is allowed on a partition key. The `IN` clause is considered an equality for one or more values. +The `TOKEN` clause can be used to query for partition key non-equalities. +A partition key must be specified before clustering columns in the `WHERE` clause. The relationship +for clustering columns must specify a *contiguous* set of rows to order. -Not all relations are allowed in a query. For instance, non-equal -relations (where `IN` is considered as an equal relation) on a partition -key are not supported (but see the use of the `TOKEN` method below to do -non-equal queries on the partition key). Moreover, for a given partition -key, the clustering columns induce an ordering of rows and relations on -them is restricted to the relations that allow to select a *contiguous* -(for the ordering) set of rows. For instance, given: +For instance, given: [source,cql] ---- -CREATE TABLE posts ( - userid text, - blog_title text, - posted_at timestamp, - entry_title text, - content text, - category int, - PRIMARY KEY (userid, blog_title, posted_at) -) +include::example$CQL/table_for_where.cql[] ---- The following query is allowed: [source,cql] ---- -SELECT entry_title, content FROM posts - WHERE userid = 'john doe' - AND blog_title='John''s Blog' - AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31' +include::example$CQL/where.cql[] ---- But the following one is not, as it does not select a contiguous set of @@ -145,65 +117,60 @@ rows (and we suppose no secondary indexes are set): [source,cql] ---- -// Needs a blog_title to be set to select ranges of posted_at -SELECT entry_title, content FROM posts - WHERE userid = 'john doe' - AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31' +include::example$CQL/where_fail.cql[] ---- -When specifying relations, the `TOKEN` function can be used on the -`PARTITION KEY` column to query. In that case, rows will be selected -based on the token of their `PARTITION_KEY` rather than on the value. -Note that the token of a key depends on the partitioner in use, and that -in particular the RandomPartitioner won't yield a meaningful order. Also -note that ordering partitioners always order token values by bytes (so +When specifying relationships, the `TOKEN` function can be applied to the `PARTITION KEY` column to query. +Rows will be selected based on the token of the `PARTITION_KEY` rather than on the value. +[IMPORTANT] +==== +The token of a key depends on the partitioner in use, and that +in particular the `RandomPartitioner` won't yield a meaningful order. +Also note that ordering partitioners always order token values by bytes (so even if the partition key is of type int, `token(-1) > token(0)` in -particular). Example: +particular). +==== + +For example: [source,cql] ---- -SELECT * FROM posts - WHERE token(userid) > token('tom') AND token(userid) < token('bob') +include::example$CQL/token.cql[] ---- -Moreover, the `IN` relation is only allowed on the last column of the -partition key and on the last column of the full primary key. +The `IN` relationship is only allowed on the last column of the +partition key or on the last column of the full primary key. It is also possible to “group” `CLUSTERING COLUMNS` together in a -relation using the tuple notation. For instance: +relation using the tuple notation. + +For example: [source,cql] ---- -SELECT * FROM posts - WHERE userid = 'john doe' - AND (blog_title, posted_at) > ('John''s Blog', '2012-01-01') +include::example$CQL/where_group_cluster_columns.cql[] ---- -will request all rows that sorts after the one having “John's Blog” as +This query will return all rows that sort after the one having “John's Blog” as `blog_tile` and '2012-01-01' for `posted_at` in the clustering order. In -particular, rows having a `post_at <= '2012-01-01'` will be returned as -long as their `blog_title > 'John''s Blog'`, which would not be the case -for: +particular, rows having a `post_at <= '2012-01-01'` will be returned, as +long as their `blog_title > 'John''s Blog'`. + +That would not be the case for this example: [source,cql] ---- -SELECT * FROM posts - WHERE userid = 'john doe' - AND blog_title > 'John''s Blog' - AND posted_at > '2012-01-01' +include::example$CQL/where_no_group_cluster_columns.cql[] ---- -The tuple notation may also be used for `IN` clauses on clustering -columns: +The tuple notation may also be used for `IN` clauses on clustering columns: [source,cql] ---- -SELECT * FROM posts - WHERE userid = 'john doe' - AND (blog_title, posted_at) IN (('John''s Blog', '2012-01-01'), ('Extreme Chess', '2014-06-01')) +include::example$CQL/where_in_tuple.cql[] ---- -The `CONTAINS` operator may only be used on collection columns (lists, +The `CONTAINS` operator may only be used for collection columns (lists, sets, and maps). In the case of maps, `CONTAINS` applies to the map values. The `CONTAINS KEY` operator may only be used on map columns and applies to the map keys. @@ -211,19 +178,15 @@ applies to the map keys. [[group-by-clause]] === Grouping results -The `GROUP BY` option allows to condense into a single row all selected -rows that share the same values for a set of columns. +The `GROUP BY` option can condense all selected +rows that share the same values for a set of columns into a single row. -Using the `GROUP BY` option, it is only possible to group rows at the -partition key level or at a clustering column level. By consequence, the -`GROUP BY` option only accept as arguments primary key column names in -the primary key order. If a primary key column is restricted by an -equality restriction it is not required to be present in the `GROUP BY` -clause. +Using the `GROUP BY` option, rows can be grouped at the partition key or clustering column level. +Consequently, the `GROUP BY` option only accepts primary key columns in defined order as arguments. +If a primary key column is restricted by an equality restriction, it is not included in the `GROUP BY` clause. -Aggregate functions will produce a separate value for each group. If no -`GROUP BY` clause is specified, aggregates functions will produce a -single value for all the rows. +Aggregate functions will produce a separate value for each group. +If no `GROUP BY` clause is specified, aggregates functions will produce a single value for all the rows. If a column is selected without an aggregate function, in a statement with a `GROUP BY`, the first value encounter in each group will be @@ -232,98 +195,66 @@ returned. [[ordering-clause]] === Ordering results -The `ORDER BY` clause allows to select the order of the returned -results. It takes as argument a list of column names along with the -order for the column (`ASC` for ascendant and `DESC` for descendant, -omitting the order being equivalent to `ASC`). Currently the possible -orderings are limited by the `clustering order ` -defined on the table: +The `ORDER BY` clause selects the order of the returned results. +The argument is a list of column names and each column's order +(`ASC` for ascendant and `DESC` for descendant, +The possible orderings are limited by the xref:cql/ddl.adoc#clustering-order[clustering order] defined on the table: -* if the table has been defined without any specific `CLUSTERING ORDER`, -then then allowed orderings are the order induced by the clustering -columns and the reverse of that one. -* otherwise, the orderings allowed are the order of the -`CLUSTERING ORDER` option and the reversed one. +* if the table has been defined without any specific `CLUSTERING ORDER`, then the order is as defined by the clustering columns +or the reverse +* otherwise, the order is defined by the `CLUSTERING ORDER` option and the reversed one. [[limit-clause]] === Limiting results The `LIMIT` option to a `SELECT` statement limits the number of rows -returned by a query, while the `PER PARTITION LIMIT` option limits the -number of rows returned for a given partition by the query. Note that -both type of limit can used in the same statement. +returned by a query. The `PER PARTITION LIMIT` option limits the +number of rows returned for a given partition by the query. Both types of limits can used in the same statement. [[allow-filtering]] === Allowing filtering -By default, CQL only allows select queries that don't involve -“filtering” server side, i.e. queries where we know that all (live) -record read will be returned (maybe partly) in the result set. The -reasoning is that those “non filtering” queries have predictable -performance in the sense that they will execute in a time that is -proportional to the amount of data *returned* by the query (which can be -controlled through `LIMIT`). - -The `ALLOW FILTERING` option allows to explicitly allow (some) queries -that require filtering. Please note that a query using `ALLOW FILTERING` -may thus have unpredictable performance (for the definition above), i.e. -even a query that selects a handful of records *may* exhibit performance -that depends on the total amount of data stored in the cluster. +By default, CQL only allows select queries that don't involve a full scan of all partitions. +If all partitions are scanned, then returning the results may experience a significant latency proportional to the +amount of data in the table. The `ALLOW FILTERING` option explicitly executes a full scan. Thus, the performance of +the query can be unpredictable. -For instance, considering the following table holding user profiles with -their year of birth (with a secondary index on it) and country of -residence: +For example, consider the following table of user profiles with birth year and country of residence. +The birth year has a secondary index defined. [source,cql] ---- -CREATE TABLE users ( - username text PRIMARY KEY, - firstname text, - lastname text, - birth_year int, - country text -) - -CREATE INDEX ON users(birth_year); +include::example$CQL/allow_filtering.cql[] ---- -Then the following queries are valid: +The following queries are valid: [source,cql] ---- -SELECT * FROM users; -SELECT * FROM users WHERE birth_year = 1981; +include::example$CQL/query_allow_filtering.cql[] ---- -because in both case, Cassandra guarantees that these queries -performance will be proportional to the amount of data returned. In -particular, if no users are born in 1981, then the second query -performance will not depend of the number of user profile stored in the -database (not directly at least: due to secondary index implementation -consideration, this query may still depend on the number of node in the -cluster, which indirectly depends on the amount of data stored. -Nevertheless, the number of nodes will always be multiple number of -magnitude lower than the number of user profile stored). Of course, both -query may return very large result set in practice, but the amount of -data returned can always be controlled by adding a `LIMIT`. +In both cases, the query performance is proportional to the amount of data returned. +The first query returns all rows, because all users are selected. +The second query returns only the rows defined by the secondary index, a per-node implementation; the results will +depend on the number of nodes in the cluster, and is indirectly proportional to the amount of data stored. +The number of nodes will always be multiple number of magnitude lower than the number of user profiles stored. +Both queries may return very large result sets, but the addition of a `LIMIT` clause can reduced the latency. -However, the following query will be rejected: +The following query will be rejected: [source,cql] ---- -SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR'; +include::example$CQL/query_fail_allow_filtering.cql[] ---- -because Cassandra cannot guarantee that it won't have to scan large -amount of data even if the result to those query is small. Typically, it -will scan all the index entries for users born in 1981 even if only a -handful are actually from France. However, if you “know what you are -doing”, you can force the execution of this query by using -`ALLOW FILTERING` and so the following query is valid: +Cassandra cannot guarantee that large amounts of data won't have to scanned amount of data, even if the result is small. +If you know that the dataset is small, and the performance will be reasonable, add `ALLOW FILTERING` to allow the query to +execute: [source,cql] ---- -SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR' ALLOW FILTERING; +include::example$CQL/query_nofail_allow_filtering.cql[] ---- [[insert-statement]] @@ -331,49 +262,35 @@ SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR' ALLOW FILTERING; Inserting data for a row is done using an `INSERT` statement: -insert_statement: INSERT INTO table_name# ( -names_values# | json_clause# ) : [ IF NOT -EXISTS ] : [ USING update_parameter# ( AND -update_parameter# )* ] names_values: names# -VALUES tuple_literal# json_clause: JSON -string# [ DEFAULT ( NULL | UNSET ) ] names: '(' -column_name# ( ',' column_name# )* ')' +[source,bnf] +---- +include::example$BNF/insert_statement.bnf[] +---- -For instance: +For example: [source,cql] ---- -INSERT INTO NerdMovies (movie, director, main_actor, year) - VALUES ('Serenity', 'Joss Whedon', 'Nathan Fillion', 2005) - USING TTL 86400; - -INSERT INTO NerdMovies JSON '{"movie": "Serenity", - "director": "Joss Whedon", - "year": 2005}'; +include::example$CQL/insert_statement.cql[] ---- The `INSERT` statement writes one or more columns for a given row in a -table. Note that since a row is identified by its `PRIMARY KEY`, at -least the columns composing it must be specified. The list of columns to -insert to must be supplied when using the `VALUES` syntax. When using -the `JSON` syntax, they are optional. See the section on -`JSON support ` for more detail. - -Note that unlike in SQL, `INSERT` does not check the prior existence of -the row by default: the row is created if none existed before, and -updated otherwise. Furthermore, there is no mean to know which of -creation or update happened. - -It is however possible to use the `IF NOT EXISTS` condition to only -insert if the row does not exist prior to the insertion. But please note -that using `IF NOT EXISTS` will incur a non negligible performance cost -(internally, Paxos will be used) so this should be used sparingly. - +table. +Since a row is identified by its `PRIMARY KEY`, at least one columns must be specified. +The list of columns to insert must be supplied with the `VALUES` syntax. +When using the `JSON` syntax, `VALUES` are optional. +See the section on xref:cql/dml.adoc#cql-json[JSON support] for more detail. All updates for an `INSERT` are applied atomically and in isolation. -Please refer to the `UPDATE ` section for -informations on the `update_parameter`. +Unlike in SQL, `INSERT` does not check the prior existence of the row by default. +The row is created if none existed before, and updated otherwise. +Furthermore, there is no means of knowing which action occurred. +The `IF NOT EXISTS` condition can restrict the insertion if the row does not exist. +However, note that using `IF NOT EXISTS` will incur a non-negligible performance cost, because Paxos is used, +so this should be used sparingly. + +Please refer to the xref:cql/dml.adoc#update-parameters[UPDATE] section for informations on the `update_parameter`. Also note that `INSERT` does not support counters, while `UPDATE` does. [[update-statement]] @@ -383,79 +300,44 @@ Updating a row is done using an `UPDATE` statement: [source, bnf] ---- -update_statement ::= UPDATE table_name - [ USING update_parameter ( AND update_parameter )* ] - SET assignment( ',' assignment )* - WHERE where_clause - [ IF ( EXISTS | condition ( AND condition)*) ] -update_parameter ::= ( TIMESTAMP | TTL ) ( integer | bind_marker ) -assignment: simple_selection'=' term - `| column_name'=' column_name ( '+' | '-' ) term - | column_name'=' list_literal'+' column_name -simple_selection ::= column_name - | column_name '[' term']' - | column_name'.' field_name -condition ::= `simple_selection operator term +include::example$BNF/update_statement.bnf[] ---- For instance: [source,cql] ---- -UPDATE NerdMovies USING TTL 400 - SET director = 'Joss Whedon', - main_actor = 'Nathan Fillion', - year = 2005 - WHERE movie = 'Serenity'; - -UPDATE UserActions - SET total = total + 2 - WHERE user = B70DE1D0-9908-4AE3-BE34-5573E5B09F14 - AND action = 'click'; +include::example$CQL/update_statement.cql[] ---- The `UPDATE` statement writes one or more columns for a given row in a -table. The `where_clause` is used to select the row to update and must -include all columns composing the `PRIMARY KEY`. Non primary key columns -are then set using the `SET` keyword. - -Note that unlike in SQL, `UPDATE` does not check the prior existence of -the row by default (except through `IF`, see below): the row is created -if none existed before, and updated otherwise. Furthermore, there are no -means to know whether a creation or update occurred. - -It is however possible to use the conditions on some columns through -`IF`, in which case the row will not be updated unless the conditions -are met. But, please note that using `IF` conditions will incur a -non-negligible performance cost (internally, Paxos will be used) so this -should be used sparingly. - -In an `UPDATE` statement, all updates within the same partition key are -applied atomically and in isolation. +table. +The `WHERE`clause is used to select the row to update and must include all columns of the `PRIMARY KEY`. +Non-primary key columns are set using the `SET` keyword. +In an `UPDATE` statement, all updates within the same partition key are applied atomically and in isolation. -Regarding the `assignment`: +Unlike in SQL, `UPDATE` does not check the prior existence of the row by default. +The row is created if none existed before, and updated otherwise. +Furthermore, there is no means of knowing which action occurred. -* `c = c + 3` is used to increment/decrement counters. The column name -after the '=' sign *must* be the same than the one before the '=' sign. -Note that increment/decrement is only allowed on counters, and are the -_only_ update operations allowed on counters. See the section on -`counters ` for details. -* `id = id + ` and `id[value1] = value2` are for -collections, see the `relevant section -` for details. -* `id.field = 3` is for setting the value of a field on a non-frozen -user-defined types. see the `relevant section -` for details. +The `IF` condition can be used to choose whether the row is updated or not if a particular condition is met. +However, like the `IF NOT EXISTS` condition, a non-negligible performance cost can be incurred. + +Regarding the `SET` assignment: + +* `c = c + 3` will increment/decrement counters, the only operation allowed. +The column name after the '=' sign *must* be the same than the one before the '=' sign. +Increment/decrement is only allowed on counters. +See the section on xref:cql/dml.adoc#counters[counters] for details. +* `id = id + ` and `id[value1] = value2` are for collections. +See the xref:cql/types.adoc#collections[collections] for details. +* `id.field = 3` is for setting the value of a field on a non-frozen user-defined types. +See the xref:cql/types.adoc#udts[UDTs] for details. === Update parameters -The `UPDATE`, `INSERT` (and `DELETE` and `BATCH` for the `TIMESTAMP`) -statements support the following parameters: +`UPDATE` and `INSERT` statements support the following parameters: -* `TIMESTAMP`: sets the timestamp for the operation. If not specified, -the coordinator will use the current time (in microseconds) at the start -of statement execution as the timestamp. This is usually a suitable -default. * `TTL`: specifies an optional Time To Live (in seconds) for the inserted values. If set, the inserted values are automatically removed from the database after the specified time. Note that the TTL concerns @@ -466,27 +348,28 @@ is specified in that update). By default, values never expire. A TTL of TTL of 0 will remove the TTL for the inserted or updated values. A TTL of `null` is equivalent to inserting with a TTL of 0. +`UPDATE`, `INSERT`, `DELETE` and `BATCH` statements support the following parameters: + +* `TIMESTAMP`: sets the timestamp for the operation. If not specified, +the coordinator will use the current time (in microseconds) at the start +of statement execution as the timestamp. This is usually a suitable +default. + [[delete_statement]] == DELETE Deleting rows or parts of rows uses the `DELETE` statement: -delete_statement: DELETE [ simple_selection# ( ',' -simple_selection# ) ] : FROM table_name# : [ -USING update_parameter# ( AND -update_parameter# )* ] : WHERE where_clause# : -[ IF ( EXISTS | condition# ( AND condition# -)*) ] +[source,bnf] +---- +include::example$BNF/delete_statement.bnf[] +---- -For instance: +For example: [source,cql] ---- -DELETE FROM NerdMovies USING TIMESTAMP 1240003134 - WHERE movie = 'Serenity'; - -DELETE phone FROM Users - WHERE userid IN (C73DE1D3-AF08-40F3-B124-3FF3E5109F22, B70DE1D0-9908-4AE3-BE34-5573E5B09F14); +include::example$CQL/delete_statement.cql[] ---- The `DELETE` statement deletes columns and rows. If column names are @@ -499,7 +382,7 @@ may be deleted with one statement by using an `IN` operator. A range of rows may be deleted using an inequality operator (such as `>=`). `DELETE` supports the `TIMESTAMP` option with the same semantics as in -`updates `. +xref:cql/dml.adoc#update-parameters[updates]. In a `DELETE` statement, all deletions within the same partition key are applied atomically and in isolation. @@ -507,8 +390,7 @@ applied atomically and in isolation. A `DELETE` operation can be conditional through the use of an `IF` clause, similar to `UPDATE` and `INSERT` statements. However, as with `INSERT` and `UPDATE` statements, this will incur a non-negligible -performance cost (internally, Paxos will be used) and so should be used -sparingly. +performance cost because Paxos is used, and should be used sparingly. [[batch_statement]] == BATCH @@ -518,23 +400,14 @@ statement by grouping them through a `BATCH` statement: [source, bnf] ---- -batch_statement ::= BEGIN [ UNLOGGED | COUNTER ] BATCH - [ USING update_parameter( AND update_parameter)* ] - modification_statement ( ';' modification_statement )* - APPLY BATCH -modification_statement ::= insert_statement | update_statement | delete_statement +include::example$BNF/batch_statement.bnf[] ---- For instance: [source,cql] ---- -BEGIN BATCH - INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user'); - UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3'; - INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c'); - DELETE name FROM users WHERE userid = 'user1'; -APPLY BATCH; +include::example$CQL/batch_statement.cql[] ---- The `BATCH` statement group multiple modification statements @@ -548,7 +421,7 @@ multiple updates. performed in isolation. * By default, all operations in the batch are performed as _logged_, to ensure all mutations eventually complete (or none will). See the notes -on `UNLOGGED batches ` for more details. +on xref:cql/dml.adoc#unlogged-batches[UNLOGGED batches] for more details. Note that: @@ -566,6 +439,7 @@ operation ordering, you must specify per-operation timestamps. * A LOGGED batch to a single partition will be converted to an UNLOGGED batch as an optimization. +[[unlogged-batches]] === `UNLOGGED` batches By default, Cassandra uses a batch log to ensure all operations in a From 423cd06448a6787e3bb865411884f08dff226e45 Mon Sep 17 00:00:00 2001 From: polandll Date: Mon, 27 Jul 2020 14:57:55 -0700 Subject: [PATCH 014/115] more adoc conversion --- .../BNF/create_function_statement.bnf | 6 + .../examples/BNF/drop_function_statement.bnf | 2 + .../cassandra/examples/BNF/function.bnf | 1 + .../modules/cassandra/examples/CQL/avg.cql | 1 + .../modules/cassandra/examples/CQL/count.cql | 2 + .../cassandra/examples/CQL/count_nonnull.cql | 1 + .../examples/CQL/create_function.cql | 15 + .../examples/CQL/create_table_simple.cql | 4 + .../cassandra/examples/CQL/currentdate.cql | 1 + .../cassandra/examples/CQL/drop_aggregate.cql | 4 + .../cassandra/examples/CQL/drop_function.cql | 4 + .../examples/CQL/function_dollarsign.cql | 15 + .../examples/CQL/function_overload.cql | 2 + .../examples/CQL/function_udfcontext.cql | 11 + .../cassandra/examples/CQL/min_max.cql | 1 + .../modules/cassandra/examples/CQL/sum.cql | 1 + .../examples/CQL/timeuuid_min_max.cql | 3 + .../cassandra/examples/CQL/timeuuid_now.cql | 1 + .../modules/cassandra/examples/CQL/uda.cql | 41 ++ .../cassandra/examples/JAVA/udf_imports.java | 8 + .../cassandra/examples/JAVA/udfcontext.java | 11 + .../examples/create_aggregate_statement.bnf | 6 + .../examples/drop_aggregate_statement.bnf | 2 + .../cassandra/pages/cql/functions.adoc | 490 ++++++------------ 24 files changed, 301 insertions(+), 332 deletions(-) create mode 100644 doc/source/modules/cassandra/examples/BNF/create_function_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/drop_function_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/function.bnf create mode 100644 doc/source/modules/cassandra/examples/CQL/avg.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/count.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/count_nonnull.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_function.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_table_simple.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/currentdate.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/drop_aggregate.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/drop_function.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/function_dollarsign.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/function_overload.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/function_udfcontext.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/min_max.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/sum.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/timeuuid_min_max.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/timeuuid_now.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/uda.cql create mode 100644 doc/source/modules/cassandra/examples/JAVA/udf_imports.java create mode 100644 doc/source/modules/cassandra/examples/JAVA/udfcontext.java create mode 100644 doc/source/modules/cassandra/examples/create_aggregate_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/drop_aggregate_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_function_statement.bnf b/doc/source/modules/cassandra/examples/BNF/create_function_statement.bnf new file mode 100644 index 000000000000..0da769a11fb0 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/create_function_statement.bnf @@ -0,0 +1,6 @@ +create_function_statement::= CREATE [ OR REPLACE ] FUNCTION [ IF NOT EXISTS] + function_name '(' arguments_declaration ')' + [ CALLED | RETURNS NULL ] ON NULL INPUT + RETURNS cql_type + LANGUAGE identifier + AS string arguments_declaration: identifier cql_type ( ',' identifier cql_type )* diff --git a/doc/source/modules/cassandra/examples/BNF/drop_function_statement.bnf b/doc/source/modules/cassandra/examples/BNF/drop_function_statement.bnf new file mode 100644 index 000000000000..2639bd0d66fb --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/drop_function_statement.bnf @@ -0,0 +1,2 @@ +drop_function_statement::= DROP FUNCTION [ IF EXISTS ] function_name [ '(' arguments_signature ')' ] +arguments_signature::= cql_type ( ',' cql_type )* diff --git a/doc/source/modules/cassandra/examples/BNF/function.bnf b/doc/source/modules/cassandra/examples/BNF/function.bnf new file mode 100644 index 000000000000..7e054306ed76 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/function.bnf @@ -0,0 +1 @@ +function_name ::= [ keyspace_name'.' ] name diff --git a/doc/source/modules/cassandra/examples/CQL/avg.cql b/doc/source/modules/cassandra/examples/CQL/avg.cql new file mode 100644 index 000000000000..2882327520e9 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/avg.cql @@ -0,0 +1 @@ +SELECT AVG (players) FROM plays; diff --git a/doc/source/modules/cassandra/examples/CQL/count.cql b/doc/source/modules/cassandra/examples/CQL/count.cql new file mode 100644 index 000000000000..1993c0e4a676 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/count.cql @@ -0,0 +1,2 @@ +SELECT COUNT (*) FROM plays; +SELECT COUNT (1) FROM plays; diff --git a/doc/source/modules/cassandra/examples/CQL/count_nonnull.cql b/doc/source/modules/cassandra/examples/CQL/count_nonnull.cql new file mode 100644 index 000000000000..6543b996326c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/count_nonnull.cql @@ -0,0 +1 @@ +SELECT COUNT (scores) FROM plays; diff --git a/doc/source/modules/cassandra/examples/CQL/create_function.cql b/doc/source/modules/cassandra/examples/CQL/create_function.cql new file mode 100644 index 000000000000..e7d5823a0b3e --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_function.cql @@ -0,0 +1,15 @@ +CREATE OR REPLACE FUNCTION somefunction(somearg int, anotherarg text, complexarg frozen, listarg list) + RETURNS NULL ON NULL INPUT + RETURNS text + LANGUAGE java + AS $$ + // some Java code + $$; + +CREATE FUNCTION IF NOT EXISTS akeyspace.fname(someArg int) + CALLED ON NULL INPUT + RETURNS text + LANGUAGE java + AS $$ + // some Java code + $$; diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_simple.cql b/doc/source/modules/cassandra/examples/CQL/create_table_simple.cql new file mode 100644 index 000000000000..0ebe7475bc42 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_table_simple.cql @@ -0,0 +1,4 @@ +CREATE TABLE users ( + userid text PRIMARY KEY, + username text, +); diff --git a/doc/source/modules/cassandra/examples/CQL/currentdate.cql b/doc/source/modules/cassandra/examples/CQL/currentdate.cql new file mode 100644 index 000000000000..0bed1b2b9e8d --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/currentdate.cql @@ -0,0 +1 @@ +SELECT * FROM myTable WHERE date >= currentDate() - 2d; diff --git a/doc/source/modules/cassandra/examples/CQL/drop_aggregate.cql b/doc/source/modules/cassandra/examples/CQL/drop_aggregate.cql new file mode 100644 index 000000000000..f05b69ae8b13 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/drop_aggregate.cql @@ -0,0 +1,4 @@ +DROP AGGREGATE myAggregate; +DROP AGGREGATE myKeyspace.anAggregate; +DROP AGGREGATE someAggregate ( int ); +DROP AGGREGATE someAggregate ( text ); diff --git a/doc/source/modules/cassandra/examples/CQL/drop_function.cql b/doc/source/modules/cassandra/examples/CQL/drop_function.cql new file mode 100644 index 000000000000..6d444c170661 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/drop_function.cql @@ -0,0 +1,4 @@ +DROP FUNCTION myfunction; +DROP FUNCTION mykeyspace.afunction; +DROP FUNCTION afunction ( int ); +DROP FUNCTION afunction ( text ); diff --git a/doc/source/modules/cassandra/examples/CQL/function_dollarsign.cql b/doc/source/modules/cassandra/examples/CQL/function_dollarsign.cql new file mode 100644 index 000000000000..878d04449e63 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/function_dollarsign.cql @@ -0,0 +1,15 @@ +CREATE FUNCTION some_function ( arg int ) + RETURNS NULL ON NULL INPUT + RETURNS int + LANGUAGE java + AS $$ return arg; $$; + +SELECT some_function(column) FROM atable ...; +UPDATE atable SET col = some_function(?) ...; + +CREATE TYPE custom_type (txt text, i int); +CREATE FUNCTION fct_using_udt ( udtarg frozen ) + RETURNS NULL ON NULL INPUT + RETURNS text + LANGUAGE java + AS $$ return udtarg.getString("txt"); $$; diff --git a/doc/source/modules/cassandra/examples/CQL/function_overload.cql b/doc/source/modules/cassandra/examples/CQL/function_overload.cql new file mode 100644 index 000000000000..d70e8e9ff744 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/function_overload.cql @@ -0,0 +1,2 @@ +CREATE FUNCTION sample ( arg int ) ...; +CREATE FUNCTION sample ( arg text ) ...; diff --git a/doc/source/modules/cassandra/examples/CQL/function_udfcontext.cql b/doc/source/modules/cassandra/examples/CQL/function_udfcontext.cql new file mode 100644 index 000000000000..87f89fef6e60 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/function_udfcontext.cql @@ -0,0 +1,11 @@ +CREATE TYPE custom_type (txt text, i int); +CREATE FUNCTION fct\_using\_udt ( somearg int ) + RETURNS NULL ON NULL INPUT + RETURNS custom_type + LANGUAGE java + AS $$ + UDTValue udt = udfContext.newReturnUDTValue(); + udt.setString("txt", "some string"); + udt.setInt("i", 42); + return udt; + $$; diff --git a/doc/source/modules/cassandra/examples/CQL/min_max.cql b/doc/source/modules/cassandra/examples/CQL/min_max.cql new file mode 100644 index 000000000000..3f31cc5bac4f --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/min_max.cql @@ -0,0 +1 @@ +SELECT MIN (players), MAX (players) FROM plays WHERE game = 'quake'; diff --git a/doc/source/modules/cassandra/examples/CQL/sum.cql b/doc/source/modules/cassandra/examples/CQL/sum.cql new file mode 100644 index 000000000000..bccfcbc81ec5 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/sum.cql @@ -0,0 +1 @@ +SELECT SUM (players) FROM plays; diff --git a/doc/source/modules/cassandra/examples/CQL/timeuuid_min_max.cql b/doc/source/modules/cassandra/examples/CQL/timeuuid_min_max.cql new file mode 100644 index 000000000000..81353f53d8b0 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/timeuuid_min_max.cql @@ -0,0 +1,3 @@ +SELECT * FROM myTable + WHERE t > maxTimeuuid('2013-01-01 00:05+0000') + AND t < minTimeuuid('2013-02-02 10:00+0000'); diff --git a/doc/source/modules/cassandra/examples/CQL/timeuuid_now.cql b/doc/source/modules/cassandra/examples/CQL/timeuuid_now.cql new file mode 100644 index 000000000000..54c2cc4817f6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/timeuuid_now.cql @@ -0,0 +1 @@ +SELECT * FROM myTable WHERE t = now(); diff --git a/doc/source/modules/cassandra/examples/CQL/uda.cql b/doc/source/modules/cassandra/examples/CQL/uda.cql new file mode 100644 index 000000000000..b40dd113f04b --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/uda.cql @@ -0,0 +1,41 @@ +CREATE OR REPLACE FUNCTION test.averageState(state tuple, val int) + CALLED ON NULL INPUT + RETURNS tuple + LANGUAGE java + AS $$ + if (val != null) { + state.setInt(0, state.getInt(0)+1); + state.setLong(1, state.getLong(1)+val.intValue()); + } + return state; + $$; + +CREATE OR REPLACE FUNCTION test.averageFinal (state tuple) + CALLED ON NULL INPUT + RETURNS double + LANGUAGE java + AS $$ + double r = 0; + if (state.getInt(0) == 0) return null; + r = state.getLong(1); + r /= state.getInt(0); + return Double.valueOf(r); + $$; + +CREATE OR REPLACE AGGREGATE test.average(int) + SFUNC averageState + STYPE tuple + FINALFUNC averageFinal + INITCOND (0, 0); + +CREATE TABLE test.atable ( + pk int PRIMARY KEY, + val int +); + +INSERT INTO test.atable (pk, val) VALUES (1,1); +INSERT INTO test.atable (pk, val) VALUES (2,2); +INSERT INTO test.atable (pk, val) VALUES (3,3); +INSERT INTO test.atable (pk, val) VALUES (4,4); + +SELECT test.average(val) FROM atable; diff --git a/doc/source/modules/cassandra/examples/JAVA/udf_imports.java b/doc/source/modules/cassandra/examples/JAVA/udf_imports.java new file mode 100644 index 000000000000..6b883bf32e3f --- /dev/null +++ b/doc/source/modules/cassandra/examples/JAVA/udf_imports.java @@ -0,0 +1,8 @@ +import java.nio.ByteBuffer; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.cassandra.cql3.functions.UDFContext; +import com.datastax.driver.core.TypeCodec; +import com.datastax.driver.core.TupleValue; +import com.datastax.driver.core.UDTValue; diff --git a/doc/source/modules/cassandra/examples/JAVA/udfcontext.java b/doc/source/modules/cassandra/examples/JAVA/udfcontext.java new file mode 100644 index 000000000000..65e0c7fc0b3e --- /dev/null +++ b/doc/source/modules/cassandra/examples/JAVA/udfcontext.java @@ -0,0 +1,11 @@ +public interface UDFContext +{ + UDTValue newArgUDTValue(String argName); + UDTValue newArgUDTValue(int argNum); + UDTValue newReturnUDTValue(); + UDTValue newUDTValue(String udtName); + TupleValue newArgTupleValue(String argName); + TupleValue newArgTupleValue(int argNum); + TupleValue newReturnTupleValue(); + TupleValue newTupleValue(String cqlDefinition); +} diff --git a/doc/source/modules/cassandra/examples/create_aggregate_statement.bnf b/doc/source/modules/cassandra/examples/create_aggregate_statement.bnf new file mode 100644 index 000000000000..c0126a23ffd8 --- /dev/null +++ b/doc/source/modules/cassandra/examples/create_aggregate_statement.bnf @@ -0,0 +1,6 @@ +create_aggregate_statement ::= CREATE [ OR REPLACE ] AGGREGATE [ IF NOT EXISTS ] + function_name '(' arguments_signature')' + SFUNC function_name + STYPE cql_type: + [ FINALFUNC function_name] + [ INITCOND term ] diff --git a/doc/source/modules/cassandra/examples/drop_aggregate_statement.bnf b/doc/source/modules/cassandra/examples/drop_aggregate_statement.bnf new file mode 100644 index 000000000000..28e8a4fcb934 --- /dev/null +++ b/doc/source/modules/cassandra/examples/drop_aggregate_statement.bnf @@ -0,0 +1,2 @@ +drop_aggregate_statement::= DROP AGGREGATE [ IF EXISTS ] function_name[ '(' arguments_signature ')' +] diff --git a/doc/source/modules/cassandra/pages/cql/functions.adoc b/doc/source/modules/cassandra/pages/cql/functions.adoc index bc70de2fd09e..29f0fdd1fd17 100644 --- a/doc/source/modules/cassandra/pages/cql/functions.adoc +++ b/doc/source/modules/cassandra/pages/cql/functions.adoc @@ -5,10 +5,8 @@ CQL supports 2 main categories of functions: -* the `scalar functions `, which simply take a number -of values and produce an output with it. -* the `aggregate functions `, which are used to -aggregate multiple rows results from a `SELECT` statement. +* xref:cql/function.adoc#scalar-functions[scalar functions] that take a number of values and produce an output +* xref:cql/function.adoc#aggregate-fuctions[aggregate functions] that aggregate multiple rows resulting from a `SELECT` statement In both cases, CQL provides a number of native "hard-coded" functions as well as the ability to create new user-defined functions. @@ -28,7 +26,7 @@ A function is identifier by its name: [source, bnf] ---- -function_name ::= [ keyspace_name'.' ] name +include::example$BNF/function.bnf[] ---- === Scalar functions @@ -103,32 +101,29 @@ SELECT avg(cast(count as double)) FROM myTable ===== Token -The `token` function allows to compute the token for a given partition -key. The exact signature of the token function depends on the table -concerned and of the partitioner used by the cluster. +The `token` function computes the token for a given partition key. +The exact signature of the token function depends on the table concerned and the partitioner used by the cluster. -The type of the arguments of the `token` depend on the type of the -partition key columns. The return type depend on the partitioner in use: +The type of the arguments of the `token` depend on the partition key column type. The returned type depends on the defined partitioner: -* For Murmur3Partitioner, the return type is `bigint`. -* For RandomPartitioner, the return type is `varint`. -* For ByteOrderedPartitioner, the return type is `blob`. +[cols=",",options="header",] +|=== +|Partitioner | Returned type +| Murmur3Partitioner | `bigint` +| RandomPartitioner | `varint` +| ByteOrderedPartitioner | `blob` +|=== -For instance, in a cluster using the default Murmur3Partitioner, if a -table is defined by: +For example, consider the following table: [source,cql] ---- -CREATE TABLE users ( - userid text PRIMARY KEY, - username text, -) +include::example$CQL/create_table_simple.cql[] ---- -then the `token` function will take a single argument of type `text` (in -that case, the partition key is `userid` (there is no clustering columns -so the partition key is the same than the primary key)), and the return -type will be `bigint`. +The table uses the default Murmur3Partitioner. +The `token` function uses the single argument `text`, because the partition key is `userid` of text type. +The returned type will be `bigint`. ===== Uuid @@ -142,50 +137,43 @@ uuid suitable for use in `INSERT` or `UPDATE` statements. The `now` function takes no arguments and generates, on the coordinator node, a new unique timeuuid at the time the function is invoked. Note that this method is useful for insertion but is largely non-sensical in -`WHERE` clauses. For instance, a query of the form: +`WHERE` clauses. + +For example, a query of the form: [source,cql] ---- -SELECT * FROM myTable WHERE t = now() +include::example$CQL/timeuuid_now.cql[] ---- -will never return any result by design, since the value returned by +will not return a result, by design, since the value returned by `now()` is guaranteed to be unique. `currentTimeUUID` is an alias of `now`. ====== `minTimeuuid` and `maxTimeuuid` -The `minTimeuuid` (resp. `maxTimeuuid`) function takes a `timestamp` -value `t` (which can be [.title-ref]#either a timestamp or a date string -#) and return a _fake_ `timeuuid` corresponding to the -_smallest_ (resp. _biggest_) possible `timeuuid` having for timestamp -`t`. So for instance: +The `minTimeuuid` function takes a `timestamp` value `t`, either a timestamp or a date string. +It returns a _fake_ `timeuuid` corresponding to the _smallest_ possible `timeuuid` for timestamp `t`. +The `maxTimeuuid` works similarly, but returns the _largest_ possible `timeuuid`. + +For example: [source,cql] ---- -SELECT * FROM myTable - WHERE t > maxTimeuuid('2013-01-01 00:05+0000') - AND t < minTimeuuid('2013-02-02 10:00+0000') +include::example$CQL/timeuuid_min_max.cql[] ---- -will select all rows where the `timeuuid` column `t` is strictly older -than `'2013-01-01 00:05+0000'` but strictly younger than -`'2013-02-02 10:00+0000'`. Please note that -`t >= maxTimeuuid('2013-01-01 00:05+0000')` would still _not_ select a -`timeuuid` generated exactly at '2013-01-01 00:05+0000' and is -essentially equivalent to `t > maxTimeuuid('2013-01-01 00:05+0000')`. +will select all rows where the `timeuuid` column `t` is later than `'2013-01-01 00:05+0000'` and earlier than `'2013-02-02 10:00+0000'`. +The clause `t >= maxTimeuuid('2013-01-01 00:05+0000')` would still _not_ select a `timeuuid` generated exactly at '2013-01-01 00:05+0000', and is essentially equivalent to `t > maxTimeuuid('2013-01-01 00:05+0000')`. [NOTE] .Note ==== -We called the values generated by `minTimeuuid` and `maxTimeuuid` _fake_ -UUID because they do no respect the Time-Based UUID generation process -specified by the http://www.ietf.org/rfc/rfc4122.txt[RFC 4122]. In -particular, the value returned by these 2 methods will not be unique. -This means you should only use those methods for querying (as in the -example above). Inserting the result of those methods is almost -certainly _a bad idea_. +The values generated by `minTimeuuid` and `maxTimeuuid` are called _fake_ UUID because they do no respect the time-based UUID generation process +specified by the http://www.ietf.org/rfc/rfc4122.txt[IETF RFC 4122]. +In particular, the value returned by these two methods will not be unique. +Thus, only use these methods for *querying*, not for *insertion*, to prevent possible data overwriting. ==== ===== Datetime functions @@ -208,17 +196,16 @@ time where the function is invoked: | `currentTimeUUID` | `timeUUID` |=== -For example the last 2 days of data can be retrieved using: +For example the last two days of data can be retrieved using: [source,cql] ---- -SELECT * FROM myTable WHERE date >= currentDate() - 2d +include::example$CQL/currentdate.cql[] ---- ====== Time conversion functions -A number of functions are provided to “convert” a `timeuuid`, a -`timestamp` or a `date` into another `native` type. +A number of functions are provided to convert a `timeuuid`, a `timestamp` or a `date` into another `native` type. [cols=",,",options="header",] |=== @@ -245,235 +232,137 @@ A number of functions are provided to “convert” a `timeuuid`, a ===== Blob conversion functions -A number of functions are provided to “convert” the native types into -binary data (`blob`). For every `` `type` supported by CQL -(a notable exceptions is `blob`, for obvious reasons), the function -`typeAsBlob` takes a argument of type `type` and return it as a `blob`. -Conversely, the function `blobAsType` takes a 64-bit `blob` argument and -convert it to a `bigint` value. And so for instance, `bigintAsBlob(3)` -is `0x0000000000000003` and `blobAsBigint(0x0000000000000003)` is `3`. +A number of functions are provided to convert the native types into +binary data, or a `blob`. +For every xref:cql/types.adoc#native-types[type] supported by CQL, the function `typeAsBlob` takes a argument of type `type` and returns it as a `blob`. +Conversely, the function `blobAsType` takes a 64-bit `blob` argument and converts it to a `bigint` value. +For example, `bigintAsBlob(3)` returns `0x0000000000000003` and `blobAsBigint(0x0000000000000003)` returns `3`. [[user-defined-scalar-functions]] ==== User-defined functions -User-defined functions allow execution of user-provided code in -Cassandra. By default, Cassandra supports defining functions in _Java_ -and _JavaScript_. Support for other JSR 223 compliant scripting -languages (such as Python, Ruby, and Scala) can be added by adding a JAR -to the classpath. +User-defined functions (UDFs) execute user-provided code in Cassandra. +By default, Cassandra supports defining functions in _Java_ and _JavaScript_. +Support for other JSR 223 compliant scripting languages, such as Python, Ruby, and Scala, is possible by adding a JAR to the classpath. -UDFs are part of the Cassandra schema. As such, they are automatically -propagated to all nodes in the cluster. +UDFs are part of the Cassandra schema, and are automatically propagated to all nodes in the cluster. +UDFs can be _overloaded_, so that multiple UDFs with different argument types can have the same function name. -UDFs can be _overloaded_ - i.e. multiple UDFs with different argument -types but the same function name. Example: +For example: [source,cql] ---- -CREATE FUNCTION sample ( arg int ) ...; -CREATE FUNCTION sample ( arg text ) ...; +include::example$CQL/function_overload.cql[] ---- -User-defined functions are susceptible to all of the normal problems -with the chosen programming language. Accordingly, implementations -should be safe against null pointer exceptions, illegal arguments, or -any other potential source of exceptions. An exception during function -execution will result in the entire statement failing. +UDFs are susceptible to all of the normal problems with the chosen programming language. +Accordingly, implementations should be safe against null pointer exceptions, illegal arguments, or any other potential source of exceptions. +An exception during function execution will result in the entire statement failing. +Valid queries for UDF use are `SELECT`, `INSERT` and `UPDATE` statements. -It is valid to use _complex_ types like collections, tuple types and -user-defined types as argument and return types. Tuple types and -user-defined types are handled by the conversion functions of the -DataStax Java Driver. Please see the documentation of the Java Driver -for details on handling tuple types and user-defined types. +_Complex_ types like collections, tuple types and user-defined types are valid argument and return types in UDFs. +Tuple types and user-defined types use the DataStax Java Driver conversion functions. +Please see the Java Driver documentation for details on handling tuple types and user-defined types. -Arguments for functions can be literals or terms. Prepared statement -placeholders can be used, too. +Arguments for functions can be literals or terms. +Prepared statement placeholders can be used, too. -Note that you can use the double-quoted string syntax to enclose the UDF -source code. For example: +Note the use the double dollar-sign syntax to enclose the UDF source code. + +For example: [source,cql] ---- -CREATE FUNCTION some_function ( arg int ) - RETURNS NULL ON NULL INPUT - RETURNS int - LANGUAGE java - AS $$ return arg; $$; - -SELECT some_function(column) FROM atable ...; -UPDATE atable SET col = some_function(?) ...; - -CREATE TYPE custom_type (txt text, i int); -CREATE FUNCTION fct_using_udt ( udtarg frozen ) - RETURNS NULL ON NULL INPUT - RETURNS text - LANGUAGE java - AS $$ return udtarg.getString("txt"); $$; +include::example$CQL/function_dollarsign.cql[] ---- -User-defined functions can be used in `SELECT`, `INSERT` and `UPDATE` -statements. - -The implicitly available `udfContext` field (or binding for script UDFs) -provides the necessary functionality to create new UDT and tuple values: +The implicitly available `udfContext` field (or binding for script UDFs) provides the necessary functionality to create new UDT and tuple values: [source,cql] ---- -CREATE TYPE custom_type (txt text, i int); -CREATE FUNCTION fct\_using\_udt ( somearg int ) - RETURNS NULL ON NULL INPUT - RETURNS custom_type - LANGUAGE java - AS $$ - UDTValue udt = udfContext.newReturnUDTValue(); - udt.setString("txt", "some string"); - udt.setInt("i", 42); - return udt; - $$; +include::example$CQL/function_udfcontext.cql[] ---- -The definition of the `UDFContext` interface can be found in the Apache -Cassandra source code for -`org.apache.cassandra.cql3.functions.UDFContext`. +The definition of the `UDFContext` interface can be found in the Apache Cassandra source code for `org.apache.cassandra.cql3.functions.UDFContext`. [source,java] ---- -public interface UDFContext -{ - UDTValue newArgUDTValue(String argName); - UDTValue newArgUDTValue(int argNum); - UDTValue newReturnUDTValue(); - UDTValue newUDTValue(String udtName); - TupleValue newArgTupleValue(String argName); - TupleValue newArgTupleValue(int argNum); - TupleValue newReturnTupleValue(); - TupleValue newTupleValue(String cqlDefinition); -} +include::example$JAVA/udfcontext.java[] ---- -Java UDFs already have some imports for common interfaces and classes -defined. These imports are: +Java UDFs already have some imports for common interfaces and classes defined. These imports are: [source,java] ---- -import java.nio.ByteBuffer; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.apache.cassandra.cql3.functions.UDFContext; -import com.datastax.driver.core.TypeCodec; -import com.datastax.driver.core.TupleValue; -import com.datastax.driver.core.UDTValue; +include::example$JAVA/udf_imports.java[] ---- -Please note, that these convenience imports are not available for script -UDFs. +Please note, that these convenience imports are not available for script UDFs. [[create-function-statement]] -===== CREATE FUNCTION +==== CREATE FUNCTION -Creating a new user-defined function uses the `CREATE FUNCTION` -statement: +Creating a new user-defined function uses the `CREATE FUNCTION` statement: -create_function_statement: CREATE [ OR REPLACE ] FUNCTION [ IF NOT -EXISTS] : [.title-ref]#function_name# '(' -[.title-ref]#arguments_declaration# ')' : [ CALLED | RETURNS NULL ] ON -NULL INPUT : RETURNS [.title-ref]#cql_type# : LANGUAGE -[.title-ref]#identifier# : AS [.title-ref]#string# -arguments_declaration: [.title-ref]#identifier# [.title-ref]#cql_type# ( -',' [.title-ref]#identifier# [.title-ref]#cql_type# )* +[source,bnf] +---- +include::example$BNF/create_function_statement.bnf[] +---- -For instance: +For example: [source,cql] ---- -CREATE OR REPLACE FUNCTION somefunction(somearg int, anotherarg text, complexarg frozen, listarg list) - RETURNS NULL ON NULL INPUT - RETURNS text - LANGUAGE java - AS $$ - // some Java code - $$; - -CREATE FUNCTION IF NOT EXISTS akeyspace.fname(someArg int) - CALLED ON NULL INPUT - RETURNS text - LANGUAGE java - AS $$ - // some Java code - $$; ----- - -`CREATE FUNCTION` with the optional `OR REPLACE` keywords either creates -a function or replaces an existing one with the same signature. A -`CREATE FUNCTION` without `OR REPLACE` fails if a function with the same -signature already exists. - -If the optional `IF NOT EXISTS` keywords are used, the function will -only be created if another function with the same signature does not -exist. +include::example$CQL/create_function.cql[] +---- +`CREATE FUNCTION` with the optional `OR REPLACE` keywords creates either a function or replaces an existing one with the same signature. +A `CREATE FUNCTION` without `OR REPLACE` fails if a function with the same signature already exists. +If the optional `IF NOT EXISTS` keywords are used, the function will only be created only if another function with the same signature does not +exist. `OR REPLACE` and `IF NOT EXISTS` cannot be used together. -Behavior on invocation with `null` values must be defined for each -function. There are two options: +Behavior for `null` input values must be defined for each function: -. `RETURNS NULL ON NULL INPUT` declares that the function will always -return `null` if any of the input arguments is `null`. -. `CALLED ON NULL INPUT` declares that the function will always be -executed. +* `RETURNS NULL ON NULL INPUT` declares that the function will always return `null` if any of the input arguments is `null`. +* `CALLED ON NULL INPUT` declares that the function will always be executed. -====== Function Signature +===== Function Signature -Signatures are used to distinguish individual functions. The signature -consists of: +Signatures are used to distinguish individual functions. The signature consists of a fully-qualified function name of the . and a concatenated list of all the argument types. -. The fully qualified function name - i.e _keyspace_ plus -_function-name_ -. The concatenated list of all argument types +Note that keyspace names, function names and argument types are subject to the default naming conventions and case-sensitivity rules. -Note that keyspace names, function names and argument types are subject -to the default naming conventions and case-sensitivity rules. - -Functions belong to a keyspace. If no keyspace is specified in -``, the current keyspace is used (i.e. the keyspace -specified using the `USE` statement). It is not possible to create a -user-defined function in one of the system keyspaces. +Functions belong to a keyspace; if no keyspace is specified, the current keyspace is used. +User-defined functions are not allowed in the system keyspaces. [[drop-function-statement]] ===== DROP FUNCTION Dropping a function uses the `DROP FUNCTION` statement: -drop_function_statement: DROP FUNCTION [ IF EXISTS ] -[.title-ref]#function_name# [ '(' [.title-ref]#arguments_signature# ')' -] arguments_signature: [.title-ref]#cql_type# ( ',' -[.title-ref]#cql_type# )* +[source, bnf] +---- +include::example$BNF/drop_function_statement.bnf[] +---- -For instance: +For example: [source,cql] ---- -DROP FUNCTION myfunction; -DROP FUNCTION mykeyspace.afunction; -DROP FUNCTION afunction ( int ); -DROP FUNCTION afunction ( text ); +include::example$CQL/drop_function.cql[] ---- -You must specify the argument types (`arguments_signature`) of the -function to drop if there are multiple functions with the same name but -a different signature (overloaded functions). - -`DROP FUNCTION` with the optional `IF EXISTS` keywords drops a function -if it exists, but does not throw an error if it doesn't +You must specify the argument types of the function, the arguments_signature, in the drop command if there are multiple overloaded functions with the same name but different signatures. +`DROP FUNCTION` with the optional `IF EXISTS` keywords drops a function if it exists, but does not throw an error if it doesn't. +[[ aggregate-functions ]] === Aggregate functions -Aggregate functions work on a set of rows. They receive values for each -row and returns one value for the whole set. +Aggregate functions work on a set of rows. +Values for each row are input, to return a single value for the set of rows aggregated. -If `normal` columns, `scalar functions`, `UDT` fields, `writetime` or -`ttl` are selected together with aggregate functions, the values +If `normal` columns, `scalar functions`, `UDT` fields, `writetime`, or `ttl` are selected together with aggregate functions, the values returned for them will be the ones of the first row matching the query. ==== Native aggregates @@ -482,118 +371,76 @@ returned for them will be the ones of the first row matching the query. ===== Count The `count` function can be used to count the rows returned by a query. -Example: + +For example: [source,cql] ---- -SELECT COUNT (*) FROM plays; -SELECT COUNT (1) FROM plays; +include::example$CQL/count.cql[] ---- -It also can be used to count the non null value of a given column: +It also can count the non-null values of a given column: [source,cql] ---- -SELECT COUNT (scores) FROM plays; +include::example$CQL/count_nonnull.cql[] ---- ===== Max and Min -The `max` and `min` functions can be used to compute the maximum and the -minimum value returned by a query for a given column. For instance: +The `max` and `min` functions compute the maximum and the minimum value returned by a query for a given column. + +For example: [source,cql] ---- -SELECT MIN (players), MAX (players) FROM plays WHERE game = 'quake'; +include::example$CQL/min_max.cql[] ---- ===== Sum -The `sum` function can be used to sum up all the values returned by a -query for a given column. For instance: +The `sum` function sums up all the values returned by a query for a given column. + +For example: [source,cql] ---- -SELECT SUM (players) FROM plays; +include::example$CQL/sum.cql[] ---- ===== Avg -The `avg` function can be used to compute the average of all the values -returned by a query for a given column. For instance: +The `avg` function computes the average of all the values returned by a query for a given column. + +For example: [source,cql] ---- -SELECT AVG (players) FROM plays; +include::example$CQL/avg.cql[] ---- [[user-defined-aggregates-functions]] ==== User-Defined Aggregates -User-defined aggregates allow the creation of custom aggregate -functions. Common examples of aggregate functions are _count_, _min_, -and _max_. +User-defined aggregates allow the creation of custom aggregate functions. +User-defined aggregates can be used in `SELECT` statement. -Each aggregate requires an _initial state_ (`INITCOND`, which defaults -to `null`) of type `STYPE`. The first argument of the state function -must have type `STYPE`. The remaining arguments of the state function -must match the types of the user-defined aggregate arguments. The state -function is called once for each row, and the value returned by the -state function becomes the new state. After all rows are processed, the -optional `FINALFUNC` is executed with last state value as its argument. +Each aggregate requires an _initial state_ of type `STYPE` defined with the `INITCOND`value (default value: `null`). +The first argument of the state function must have type `STYPE`. +The remaining arguments of the state function must match the types of the user-defined aggregate arguments. +The state function is called once for each row, and the value returned by the state function becomes the new state. +After all rows are processed, the optional `FINALFUNC` is executed with last state value as its argument. -`STYPE` is mandatory in order to be able to distinguish possibly -overloaded versions of the state and/or final function (since the -overload can appear after creation of the aggregate). +The `STYPE` value is mandatory in order to distinguish possibly overloaded versions of the state and/or final function, since the +overload can appear after creation of the aggregate. -User-defined aggregates can be used in `SELECT` statement. A complete working example for user-defined aggregates (assuming that a keyspace has been selected using the `USE` statement): [source,cql] ---- -CREATE OR REPLACE FUNCTION averageState(state tuple, val int) - CALLED ON NULL INPUT - RETURNS tuple - LANGUAGE java - AS $$ - if (val != null) { - state.setInt(0, state.getInt(0)+1); - state.setLong(1, state.getLong(1)+val.intValue()); - } - return state; - $$; - -CREATE OR REPLACE FUNCTION averageFinal (state tuple) - CALLED ON NULL INPUT - RETURNS double - LANGUAGE java - AS $$ - double r = 0; - if (state.getInt(0) == 0) return null; - r = state.getLong(1); - r /= state.getInt(0); - return Double.valueOf(r); - $$; - -CREATE OR REPLACE AGGREGATE average(int) - SFUNC averageState - STYPE tuple - FINALFUNC averageFinal - INITCOND (0, 0); - -CREATE TABLE atable ( - pk int PRIMARY KEY, - val int -); - -INSERT INTO atable (pk, val) VALUES (1,1); -INSERT INTO atable (pk, val) VALUES (2,2); -INSERT INTO atable (pk, val) VALUES (3,3); -INSERT INTO atable (pk, val) VALUES (4,4); - -SELECT average(val) FROM atable; +include::example$CQL/uda.cql[] ---- [[create-aggregate-statement]] @@ -604,49 +451,32 @@ Creating (or replacing) a user-defined aggregate function uses the [source, bnf] ---- -create_aggregate_statement ::= CREATE [ OR REPLACE ] AGGREGATE [ IF NOT EXISTS ] - function_name '(' arguments_signature')' - SFUNC function_name - STYPE cql_type: - [ FINALFUNC function_name] - [ INITCOND term ] +include::example$BNF/create_aggregate_statement.bnf[] ---- See above for a complete example. -`CREATE AGGREGATE` with the optional `OR REPLACE` keywords either -creates an aggregate or replaces an existing one with the same -signature. A `CREATE AGGREGATE` without `OR REPLACE` fails if an -aggregate with the same signature already exists. - -`CREATE AGGREGATE` with the optional `IF NOT EXISTS` keywords either -creates an aggregate if it does not already exist. - -`OR REPLACE` and `IF NOT EXISTS` cannot be used together. - -`STYPE` defines the type of the state value and must be specified. +The `CREATE AGGREGATE` command with the optional `OR REPLACE` keywords creates either an aggregate or replaces an existing one with the same +signature. +A `CREATE AGGREGATE` without `OR REPLACE` fails if an aggregate with the same signature already exists. +The `CREATE AGGREGATE` command with the optional `IF NOT EXISTS` keywords creates an aggregate if it does not already exist. +The `OR REPLACE` and `IF NOT EXISTS` phrases cannot be used together. -The optional `INITCOND` defines the initial state value for the -aggregate. It defaults to `null`. A non-`null` `INITCOND` must be -specified for state functions that are declared with -`RETURNS NULL ON NULL INPUT`. +The `STYPE` value defines the type of the state value and must be specified. +The optional `INITCOND` defines the initial state value for the aggregate; the default value is `null`. +A non-null `INITCOND` must be specified for state functions that are declared with `RETURNS NULL ON NULL INPUT`. -`SFUNC` references an existing function to be used as the state -modifying function. The type of first argument of the state function -must match `STYPE`. The remaining argument types of the state function -must match the argument types of the aggregate function. State is not -updated for state functions declared with `RETURNS NULL ON NULL INPUT` -and called with `null`. +The `SFUNC` value references an existing function to use as the state-modifying function. +The first argument of the state function must have type `STYPE`. +The remaining arguments of the state function must match the types of the user-defined aggregate arguments. +The state function is called once for each row, and the value returned by the state function becomes the new state. +State is not updated for state functions declared with `RETURNS NULL ON NULL INPUT` and called with `null`. +After all rows are processed, the optional `FINALFUNC` is executed with last state value as its argument. +It must take only one argument with type `STYPE`, but the return type of the `FINALFUNC` may be a different type. +A final function declared with `RETURNS NULL ON NULL INPUT` means that the aggregate's return value will be `null`, if the last state is `null`. -The optional `FINALFUNC` is called just before the aggregate result is -returned. It must take only one argument with type `STYPE`. The return -type of the `FINALFUNC` may be a different type. A final function -declared with `RETURNS NULL ON NULL INPUT` means that the aggregate's -return value will be `null`, if the last state is `null`. - -If no `FINALFUNC` is defined, the overall return type of the aggregate -function is `STYPE`. If a `FINALFUNC` is defined, it is the return type -of that function. +If no `FINALFUNC` is defined, the overall return type of the aggregate function is `STYPE`. +If a `FINALFUNC` is defined, it is the return type of that function. [[drop-aggregate-statement]] ===== DROP AGGREGATE @@ -654,25 +484,21 @@ of that function. Dropping an user-defined aggregate function uses the `DROP AGGREGATE` statement: -drop_aggregate_statement: DROP AGGREGATE [ IF EXISTS ] -[.title-ref]#function_name# [ '(' [.title-ref]#arguments_signature# ')' -] +[source, bnf] +---- +include::example$BNF/drop_aggregate_statement.bnf[] +---- For instance: [source,cql] ---- -DROP AGGREGATE myAggregate; -DROP AGGREGATE myKeyspace.anAggregate; -DROP AGGREGATE someAggregate ( int ); -DROP AGGREGATE someAggregate ( text ); +include::example$CQL/drop_aggregate.cql[] ---- -The `DROP AGGREGATE` statement removes an aggregate created using -`CREATE AGGREGATE`. You must specify the argument types of the aggregate -to drop if there are multiple aggregates with the same name but a -different signature (overloaded aggregates). +The `DROP AGGREGATE` statement removes an aggregate created using `CREATE AGGREGATE`. +You must specify the argument types of the aggregate to drop if there are multiple overloaded aggregates with the same name but a +different signature. -`DROP AGGREGATE` with the optional `IF EXISTS` keywords drops an -aggregate if it exists, and does nothing if a function with the +The `DROP AGGREGATE` command with the optional `IF EXISTS` keywords drops an aggregate if it exists, and does nothing if a function with the signature does not exist. From a9344af244ddde65b38847757996815368ddd355 Mon Sep 17 00:00:00 2001 From: polandll Date: Mon, 27 Jul 2020 16:07:17 -0700 Subject: [PATCH 015/115] last of cql conversions --- .../examples/BNF/alter_role_statement.bnf | 1 + .../examples/BNF/alter_user_statement.bnf | 1 + .../{ => BNF}/create_aggregate_statement.bnf | 0 .../examples/BNF/create_role_statement.bnf | 9 + .../examples/BNF/create_user_statement.bnf | 4 + .../{ => BNF}/drop_aggregate_statement.bnf | 0 .../examples/BNF/drop_role_statement.bnf | 1 + .../examples/BNF/drop_user_statement.bnf | 1 + .../BNF/grant_permission_statement.bnf | 12 + .../examples/BNF/grant_role_statement.bnf | 1 + .../BNF/list_permissions_statement.bnf | 1 + .../examples/BNF/list_roles_statement.bnf | 1 + .../examples/BNF/list_users_statement.bnf | 1 + .../BNF/revoke_permission_statement.bnf | 1 + .../examples/BNF/revoke_role_statement.bnf | 1 + .../cassandra/examples/BNF/role_name.bnf | 1 + .../cassandra/examples/CQL/alter_role.cql | 1 + .../cassandra/examples/CQL/alter_user.cql | 2 + .../cassandra/examples/CQL/create_role.cql | 6 + .../examples/CQL/create_role_ifnotexists.cql | 2 + .../cassandra/examples/CQL/create_user.cql | 2 + .../examples/CQL/create_user_role.cql | 14 + .../cassandra/examples/CQL/grant_describe.cql | 1 + .../cassandra/examples/CQL/grant_drop.cql | 1 + .../cassandra/examples/CQL/grant_execute.cql | 1 + .../cassandra/examples/CQL/grant_modify.cql | 1 + .../cassandra/examples/CQL/grant_perm.cql | 1 + .../cassandra/examples/CQL/grant_role.cql | 1 + .../cassandra/examples/CQL/list_all_perm.cql | 1 + .../cassandra/examples/CQL/list_perm.cql | 1 + .../cassandra/examples/CQL/list_roles.cql | 1 + .../examples/CQL/list_roles_nonrecursive.cql | 1 + .../cassandra/examples/CQL/list_roles_of.cql | 1 + .../examples/CQL/list_select_perm.cql | 1 + .../cassandra/examples/CQL/no_revoke.cql | 5 + .../cassandra/examples/CQL/revoke_perm.cql | 5 + .../cassandra/examples/CQL/revoke_role.cql | 1 + .../cassandra/examples/CQL/role_error.cql | 6 + doc/source/modules/cassandra/nav.adoc | 4 +- .../cassandra/pages/cql/configuring.adoc | 83 ---- .../modules/cassandra/pages/cql/drivers.adoc | 92 ----- .../cassandra/pages/cql/functions.adoc | 20 +- .../modules/cassandra/pages/cql/index.adoc | 4 +- .../modules/cassandra/pages/cql/index.rst | 47 --- .../cassandra/pages/cql/installing.adoc | 374 ------------------ .../modules/cassandra/pages/cql/json.adoc | 27 +- .../modules/cassandra/pages/cql/mvs.adoc | 33 +- .../cassandra/pages/cql/production.adoc | 82 ---- .../modules/cassandra/pages/cql/querying.adoc | 38 -- .../modules/cassandra/pages/cql/security.adoc | 203 ++++------ 50 files changed, 203 insertions(+), 896 deletions(-) create mode 100644 doc/source/modules/cassandra/examples/BNF/alter_role_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/alter_user_statement.bnf rename doc/source/modules/cassandra/examples/{ => BNF}/create_aggregate_statement.bnf (100%) create mode 100644 doc/source/modules/cassandra/examples/BNF/create_role_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/create_user_statement.bnf rename doc/source/modules/cassandra/examples/{ => BNF}/drop_aggregate_statement.bnf (100%) create mode 100644 doc/source/modules/cassandra/examples/BNF/drop_role_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/drop_user_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/grant_permission_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/grant_role_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/list_permissions_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/list_roles_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/list_users_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/revoke_permission_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/revoke_role_statement.bnf create mode 100644 doc/source/modules/cassandra/examples/BNF/role_name.bnf create mode 100644 doc/source/modules/cassandra/examples/CQL/alter_role.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/alter_user.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_role.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_role_ifnotexists.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_user.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_user_role.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/grant_describe.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/grant_drop.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/grant_execute.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/grant_modify.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/grant_perm.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/grant_role.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/list_all_perm.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/list_perm.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/list_roles.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/list_roles_nonrecursive.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/list_roles_of.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/list_select_perm.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/no_revoke.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/revoke_perm.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/revoke_role.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/role_error.cql delete mode 100644 doc/source/modules/cassandra/pages/cql/configuring.adoc delete mode 100644 doc/source/modules/cassandra/pages/cql/drivers.adoc delete mode 100644 doc/source/modules/cassandra/pages/cql/index.rst delete mode 100644 doc/source/modules/cassandra/pages/cql/installing.adoc delete mode 100644 doc/source/modules/cassandra/pages/cql/production.adoc delete mode 100644 doc/source/modules/cassandra/pages/cql/querying.adoc diff --git a/doc/source/modules/cassandra/examples/BNF/alter_role_statement.bnf b/doc/source/modules/cassandra/examples/BNF/alter_role_statement.bnf new file mode 100644 index 000000000000..36958d7fa901 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/alter_role_statement.bnf @@ -0,0 +1 @@ +alter_role_statement ::= ALTER ROLE role_name WITH role_options diff --git a/doc/source/modules/cassandra/examples/BNF/alter_user_statement.bnf b/doc/source/modules/cassandra/examples/BNF/alter_user_statement.bnf new file mode 100644 index 000000000000..129607c1bca1 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/alter_user_statement.bnf @@ -0,0 +1 @@ +alter_user_statement ::= ALTER USER role_name [ WITH PASSWORD string] [ user_option] diff --git a/doc/source/modules/cassandra/examples/create_aggregate_statement.bnf b/doc/source/modules/cassandra/examples/BNF/create_aggregate_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/create_aggregate_statement.bnf rename to doc/source/modules/cassandra/examples/BNF/create_aggregate_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_role_statement.bnf b/doc/source/modules/cassandra/examples/BNF/create_role_statement.bnf new file mode 100644 index 000000000000..bc93fbca3bc4 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/create_role_statement.bnf @@ -0,0 +1,9 @@ +create_role_statement ::= CREATE ROLE [ IF NOT EXISTS ] role_name + [ WITH role_options# ] +role_options ::= role_option ( AND role_option)* +role_option ::= PASSWORD '=' string + | LOGIN '=' boolean + | SUPERUSER '=' boolean + | OPTIONS '=' map_literal + | ACCESS TO DATACENTERS set_literal + | ACCESS TO ALL DATACENTERS diff --git a/doc/source/modules/cassandra/examples/BNF/create_user_statement.bnf b/doc/source/modules/cassandra/examples/BNF/create_user_statement.bnf new file mode 100644 index 000000000000..19f9903921ee --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/create_user_statement.bnf @@ -0,0 +1,4 @@ +create_user_statement ::= CREATE USER [ IF NOT EXISTS ] role_name + [ WITH PASSWORD string ] + [ user_option ] +user_option: SUPERUSER | NOSUPERUSER diff --git a/doc/source/modules/cassandra/examples/drop_aggregate_statement.bnf b/doc/source/modules/cassandra/examples/BNF/drop_aggregate_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/drop_aggregate_statement.bnf rename to doc/source/modules/cassandra/examples/BNF/drop_aggregate_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_role_statement.bnf b/doc/source/modules/cassandra/examples/BNF/drop_role_statement.bnf new file mode 100644 index 000000000000..15e1791d72c9 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/drop_role_statement.bnf @@ -0,0 +1 @@ +drop_role_statement ::= DROP ROLE [ IF EXISTS ] role_name diff --git a/doc/source/modules/cassandra/examples/BNF/drop_user_statement.bnf b/doc/source/modules/cassandra/examples/BNF/drop_user_statement.bnf new file mode 100644 index 000000000000..9b226083d1a1 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/drop_user_statement.bnf @@ -0,0 +1 @@ +drop_user_statement ::= DROP USER [ IF EXISTS ] role_name diff --git a/doc/source/modules/cassandra/examples/BNF/grant_permission_statement.bnf b/doc/source/modules/cassandra/examples/BNF/grant_permission_statement.bnf new file mode 100644 index 000000000000..40f1df327034 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/grant_permission_statement.bnf @@ -0,0 +1,12 @@ +grant_permission_statement ::= GRANT permissions ON resource TO role_name +permissions ::= ALL [ PERMISSIONS ] | permission [ PERMISSION ] +permission ::= CREATE | ALTER | DROP | SELECT | MODIFY | AUTHORIZE | DESCRIBE | EXECUTE +resource ::= ALL KEYSPACES + | KEYSPACE keyspace_name + | [ TABLE ] table_name + | ALL ROLES + | ROLE role_name + | ALL FUNCTIONS [ IN KEYSPACE keyspace_name ] + | FUNCTION function_name '(' [ cql_type( ',' cql_type )* ] ')' + | ALL MBEANS + | ( MBEAN | MBEANS ) string diff --git a/doc/source/modules/cassandra/examples/BNF/grant_role_statement.bnf b/doc/source/modules/cassandra/examples/BNF/grant_role_statement.bnf new file mode 100644 index 000000000000..d965cc2658bd --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/grant_role_statement.bnf @@ -0,0 +1 @@ +grant_role_statement ::= GRANT role_name TO role_name diff --git a/doc/source/modules/cassandra/examples/BNF/list_permissions_statement.bnf b/doc/source/modules/cassandra/examples/BNF/list_permissions_statement.bnf new file mode 100644 index 000000000000..a11e2cc01d74 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/list_permissions_statement.bnf @@ -0,0 +1 @@ +list_permissions_statement ::= LIST permissions [ ON resource] [ OF role_name[ NORECURSIVE ] ] diff --git a/doc/source/modules/cassandra/examples/BNF/list_roles_statement.bnf b/doc/source/modules/cassandra/examples/BNF/list_roles_statement.bnf new file mode 100644 index 000000000000..bbe3d9b500ea --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/list_roles_statement.bnf @@ -0,0 +1 @@ +list_roles_statement ::= LIST ROLES [ OF role_name] [ NORECURSIVE ] diff --git a/doc/source/modules/cassandra/examples/BNF/list_users_statement.bnf b/doc/source/modules/cassandra/examples/BNF/list_users_statement.bnf new file mode 100644 index 000000000000..5750de6c0ca9 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/list_users_statement.bnf @@ -0,0 +1 @@ +list_users_statement::= LIST USERS diff --git a/doc/source/modules/cassandra/examples/BNF/revoke_permission_statement.bnf b/doc/source/modules/cassandra/examples/BNF/revoke_permission_statement.bnf new file mode 100644 index 000000000000..fd061f9394d7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/revoke_permission_statement.bnf @@ -0,0 +1 @@ +revoke_permission_statement ::= REVOKE permissions ON resource FROM role_name diff --git a/doc/source/modules/cassandra/examples/BNF/revoke_role_statement.bnf b/doc/source/modules/cassandra/examples/BNF/revoke_role_statement.bnf new file mode 100644 index 000000000000..c344eb006f20 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/revoke_role_statement.bnf @@ -0,0 +1 @@ +revoke_role_statement ::= REVOKE role_name FROM role_name diff --git a/doc/source/modules/cassandra/examples/BNF/role_name.bnf b/doc/source/modules/cassandra/examples/BNF/role_name.bnf new file mode 100644 index 000000000000..103f84bd26fe --- /dev/null +++ b/doc/source/modules/cassandra/examples/BNF/role_name.bnf @@ -0,0 +1 @@ +role_name ::= identifier | string diff --git a/doc/source/modules/cassandra/examples/CQL/alter_role.cql b/doc/source/modules/cassandra/examples/CQL/alter_role.cql new file mode 100644 index 000000000000..c5f7d3d3991a --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/alter_role.cql @@ -0,0 +1 @@ +ALTER ROLE bob WITH PASSWORD = 'PASSWORD_B' AND SUPERUSER = false; diff --git a/doc/source/modules/cassandra/examples/CQL/alter_user.cql b/doc/source/modules/cassandra/examples/CQL/alter_user.cql new file mode 100644 index 000000000000..97de7ba1dd79 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/alter_user.cql @@ -0,0 +1,2 @@ +ALTER USER alice WITH PASSWORD 'PASSWORD_A'; +ALTER USER bob SUPERUSER; diff --git a/doc/source/modules/cassandra/examples/CQL/create_role.cql b/doc/source/modules/cassandra/examples/CQL/create_role.cql new file mode 100644 index 000000000000..c8d0d640de52 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_role.cql @@ -0,0 +1,6 @@ +CREATE ROLE new_role; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; +CREATE ROLE bob WITH PASSWORD = 'password_b' AND LOGIN = true AND SUPERUSER = true; +CREATE ROLE carlos WITH OPTIONS = { 'custom_option1' : 'option1_value', 'custom_option2' : 99 }; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO DATACENTERS {'DC1', 'DC3'}; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO ALL DATACENTERS; diff --git a/doc/source/modules/cassandra/examples/CQL/create_role_ifnotexists.cql b/doc/source/modules/cassandra/examples/CQL/create_role_ifnotexists.cql new file mode 100644 index 000000000000..0b9600f9c4ca --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_role_ifnotexists.cql @@ -0,0 +1,2 @@ +CREATE ROLE other_role; +CREATE ROLE IF NOT EXISTS other_role; diff --git a/doc/source/modules/cassandra/examples/CQL/create_user.cql b/doc/source/modules/cassandra/examples/CQL/create_user.cql new file mode 100644 index 000000000000..b6531ebbc482 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_user.cql @@ -0,0 +1,2 @@ +CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; +CREATE USER bob WITH PASSWORD 'password_b' NOSUPERUSER; diff --git a/doc/source/modules/cassandra/examples/CQL/create_user_role.cql b/doc/source/modules/cassandra/examples/CQL/create_user_role.cql new file mode 100644 index 000000000000..810f76ca9c39 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_user_role.cql @@ -0,0 +1,14 @@ +CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; + +CREATE USER IF NOT EXISTS alice WITH PASSWORD 'password_a' SUPERUSER; +CREATE ROLE IF NOT EXISTS alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; + +CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = false; + +CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; + +CREATE USER alice WITH PASSWORD 'password_a'; +CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; diff --git a/doc/source/modules/cassandra/examples/CQL/grant_describe.cql b/doc/source/modules/cassandra/examples/CQL/grant_describe.cql new file mode 100644 index 000000000000..721814565091 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/grant_describe.cql @@ -0,0 +1 @@ +GRANT DESCRIBE ON ALL ROLES TO role_admin; diff --git a/doc/source/modules/cassandra/examples/CQL/grant_drop.cql b/doc/source/modules/cassandra/examples/CQL/grant_drop.cql new file mode 100644 index 000000000000..745369d4298d --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/grant_drop.cql @@ -0,0 +1 @@ +GRANT DROP ON keyspace1.table1 TO schema_owner; diff --git a/doc/source/modules/cassandra/examples/CQL/grant_execute.cql b/doc/source/modules/cassandra/examples/CQL/grant_execute.cql new file mode 100644 index 000000000000..96b34de99dcf --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/grant_execute.cql @@ -0,0 +1 @@ +GRANT EXECUTE ON FUNCTION keyspace1.user_function( int ) TO report_writer; diff --git a/doc/source/modules/cassandra/examples/CQL/grant_modify.cql b/doc/source/modules/cassandra/examples/CQL/grant_modify.cql new file mode 100644 index 000000000000..7f9a30b225dc --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/grant_modify.cql @@ -0,0 +1 @@ +GRANT MODIFY ON KEYSPACE keyspace1 TO data_writer; diff --git a/doc/source/modules/cassandra/examples/CQL/grant_perm.cql b/doc/source/modules/cassandra/examples/CQL/grant_perm.cql new file mode 100644 index 000000000000..1dc9a7b18dd5 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/grant_perm.cql @@ -0,0 +1 @@ +GRANT SELECT ON ALL KEYSPACES TO data_reader; diff --git a/doc/source/modules/cassandra/examples/CQL/grant_role.cql b/doc/source/modules/cassandra/examples/CQL/grant_role.cql new file mode 100644 index 000000000000..1adffb309288 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/grant_role.cql @@ -0,0 +1 @@ +GRANT report_writer TO alice; diff --git a/doc/source/modules/cassandra/examples/CQL/list_all_perm.cql b/doc/source/modules/cassandra/examples/CQL/list_all_perm.cql new file mode 100644 index 000000000000..efbcfc86e740 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/list_all_perm.cql @@ -0,0 +1 @@ +LIST ALL PERMISSIONS ON keyspace1.table1 OF bob; diff --git a/doc/source/modules/cassandra/examples/CQL/list_perm.cql b/doc/source/modules/cassandra/examples/CQL/list_perm.cql new file mode 100644 index 000000000000..094bf0933504 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/list_perm.cql @@ -0,0 +1 @@ +LIST ALL PERMISSIONS OF alice; diff --git a/doc/source/modules/cassandra/examples/CQL/list_roles.cql b/doc/source/modules/cassandra/examples/CQL/list_roles.cql new file mode 100644 index 000000000000..5c0f0631aca8 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/list_roles.cql @@ -0,0 +1 @@ +LIST ROLES; diff --git a/doc/source/modules/cassandra/examples/CQL/list_roles_nonrecursive.cql b/doc/source/modules/cassandra/examples/CQL/list_roles_nonrecursive.cql new file mode 100644 index 000000000000..eea62189445c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/list_roles_nonrecursive.cql @@ -0,0 +1 @@ +LIST ROLES OF bob NORECURSIVE; diff --git a/doc/source/modules/cassandra/examples/CQL/list_roles_of.cql b/doc/source/modules/cassandra/examples/CQL/list_roles_of.cql new file mode 100644 index 000000000000..c338ca3452ec --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/list_roles_of.cql @@ -0,0 +1 @@ +LIST ROLES OF alice; diff --git a/doc/source/modules/cassandra/examples/CQL/list_select_perm.cql b/doc/source/modules/cassandra/examples/CQL/list_select_perm.cql new file mode 100644 index 000000000000..c085df47ce98 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/list_select_perm.cql @@ -0,0 +1 @@ +LIST SELECT PERMISSIONS OF carlos; diff --git a/doc/source/modules/cassandra/examples/CQL/no_revoke.cql b/doc/source/modules/cassandra/examples/CQL/no_revoke.cql new file mode 100644 index 000000000000..b6a044cf2038 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/no_revoke.cql @@ -0,0 +1,5 @@ +* `system_schema.keyspaces` +* `system_schema.columns` +* `system_schema.tables` +* `system.local` +* `system.peers` diff --git a/doc/source/modules/cassandra/examples/CQL/revoke_perm.cql b/doc/source/modules/cassandra/examples/CQL/revoke_perm.cql new file mode 100644 index 000000000000..d4ac1edb1408 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/revoke_perm.cql @@ -0,0 +1,5 @@ +REVOKE SELECT ON ALL KEYSPACES FROM data_reader; +REVOKE MODIFY ON KEYSPACE keyspace1 FROM data_writer; +REVOKE DROP ON keyspace1.table1 FROM schema_owner; +REVOKE EXECUTE ON FUNCTION keyspace1.user_function( int ) FROM report_writer; +REVOKE DESCRIBE ON ALL ROLES FROM role_admin; diff --git a/doc/source/modules/cassandra/examples/CQL/revoke_role.cql b/doc/source/modules/cassandra/examples/CQL/revoke_role.cql new file mode 100644 index 000000000000..acf506660179 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/revoke_role.cql @@ -0,0 +1 @@ +REVOKE report_writer FROM alice; diff --git a/doc/source/modules/cassandra/examples/CQL/role_error.cql b/doc/source/modules/cassandra/examples/CQL/role_error.cql new file mode 100644 index 000000000000..fa061a2ea9f7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/role_error.cql @@ -0,0 +1,6 @@ +GRANT role_a TO role_b; +GRANT role_b TO role_a; + +GRANT role_a TO role_b; +GRANT role_b TO role_c; +GRANT role_c TO role_a; diff --git a/doc/source/modules/cassandra/nav.adoc b/doc/source/modules/cassandra/nav.adoc index fc50542e3d3a..b0e53478a19e 100644 --- a/doc/source/modules/cassandra/nav.adoc +++ b/doc/source/modules/cassandra/nav.adoc @@ -37,12 +37,12 @@ *** xref:cql/types.adoc[Data types] *** xref:cql/ddl.adoc[Data definition (DDL)] *** xref:cql/dml.adoc[Data manipulation (DML)] +*** xref:cql/operators.adoc[Operators] *** xref:cql/indexes.adoc[Secondary indexes] *** xref:cql/mvs.adoc[Materialized views] -*** xref:cql/security.adoc[Security] *** xref:cql/functions.adoc[Functions] -*** xref:cql/operators.adoc[Operators] *** xref:cql/json.adoc[JSON] +*** xref:cql/security.adoc[Security] *** xref:cql/triggers.adoc[Triggers] *** xref:cql/appendices.adoc[Appendices] *** xref:cql/changes.adoc[Changes] diff --git a/doc/source/modules/cassandra/pages/cql/configuring.adoc b/doc/source/modules/cassandra/pages/cql/configuring.adoc deleted file mode 100644 index fd028078e13d..000000000000 --- a/doc/source/modules/cassandra/pages/cql/configuring.adoc +++ /dev/null @@ -1,83 +0,0 @@ -= Configuring Cassandra - -The `Cassandra` configuration files location varies, depending on the -type of installation: - -* tarball: `conf` directory within the tarball install location -* package: `/etc/cassandra` directory - -Cassandra's default configuration file, `cassandra.yaml`, is sufficient -to explore a simple single-node `cluster`. However, anything beyond -running a single-node cluster locally requires additional configuration -to various Cassandra configuration files. Some examples that require -non-default configuration are deploying a multi-node cluster or using -clients that are not running on a cluster node. - -* `cassandra.yaml`: the main configuration file for Cassandra -* `cassandra-env.sh`: environment variables can be set -* `cassandra-rackdc.properties` OR `cassandra-topology.properties`: set -rack and datacenter information for a cluster -* `logback.xml`: logging configuration including logging levels -* `jvm-*`: a number of JVM configuration files for both the server and -clients -* `commitlog_archiving.properties`: set archiving parameters for the -`commitlog` - -Two sample configuration files can also be found in `./conf`: - -* `metrics-reporter-config-sample.yaml`: configuring what the -metrics-report will collect -* `cqlshrc.sample`: how the CQL shell, cqlsh, can be configured - -== Main runtime properties - -Configuring Cassandra is done by setting yaml properties in the -`cassandra.yaml` file. At a minimum you should consider setting the -following properties: - -* `cluster_name`: Set the name of your cluster. -* `seeds`: A comma separated list of the IP addresses of your cluster -`seed nodes`. -* `storage_port`: Check that you don't have the default port of 7000 -blocked by a firewall. -* `listen_address`: The `listen address` is the IP address of a node -that allows it to communicate with other nodes in the cluster. Set to -[.title-ref]#localhost# by default. Alternatively, you can set -`listen_interface` to tell Cassandra which interface to use, and -consecutively which address to use. Set one property, not both. -* `native_transport_port`: Check that you don't have the default port of -9042 blocked by a firewall, so that clients like cqlsh can communicate -with Cassandra on this port. - -== Changing the location of directories - -The following yaml properties control the location of directories: - -* `data_file_directories`: One or more directories where data files, -like `SSTables` are located. -* `commitlog_directory`: The directory where commitlog files are -located. -* `saved_caches_directory`: The directory where saved caches are -located. -* `hints_directory`: The directory where `hints` are located. - -For performance reasons, if you have multiple disks, consider putting -commitlog and data files on different disks. - -== Environment variables - -JVM-level settings such as heap size can be set in `cassandra-env.sh`. -You can add any additional JVM command line argument to the `JVM_OPTS` -environment variable; when Cassandra starts, these arguments will be -passed to the JVM. - -== Logging - -The default logger is [.title-ref]#logback#. By default it will log: - -* *INFO* level in `system.log` -* *DEBUG* level in `debug.log` - -When running in the foreground, it will also log at INFO level to the -console. You can change logging properties by editing `logback.xml` or -by running the [.title-ref]#nodetool setlogginglevel# command. diff --git a/doc/source/modules/cassandra/pages/cql/drivers.adoc b/doc/source/modules/cassandra/pages/cql/drivers.adoc deleted file mode 100644 index e05d9c89c1e0..000000000000 --- a/doc/source/modules/cassandra/pages/cql/drivers.adoc +++ /dev/null @@ -1,92 +0,0 @@ -= Client drivers - -Here are known Cassandra client drivers organized by language. Before -choosing a driver, you should verify the Cassandra version and -functionality supported by a specific driver. - -== Java - -* http://achilles.archinnov.info/[Achilles] -* https://github.com/Netflix/astyanax/wiki/Getting-Started[Astyanax] -* https://github.com/noorq/casser[Casser] -* https://github.com/datastax/java-driver[Datastax Java driver] -* https://github.com/impetus-opensource/Kundera[Kundera] -* https://github.com/deanhiller/playorm[PlayORM] - -== Python - -* https://github.com/datastax/python-driver[Datastax Python driver] - -== Ruby - -* https://github.com/datastax/ruby-driver[Datastax Ruby driver] - -== C# / .NET - -* https://github.com/pchalamet/cassandra-sharp[Cassandra Sharp] -* https://github.com/datastax/csharp-driver[Datastax C# driver] -* https://github.com/managedfusion/fluentcassandra[Fluent Cassandra] - -== Nodejs - -* https://github.com/datastax/nodejs-driver[Datastax Nodejs driver] -* https://github.com/jorgebay/node-cassandra-cql[Node-Cassandra-CQL] - -== PHP - -* http://code.google.com/a/apache-extras.org/p/cassandra-pdo[CQL | PHP] -* https://github.com/datastax/php-driver/[Datastax PHP driver] -* https://github.com/aparkhomenko/php-cassandra[PHP-Cassandra] -* http://evseevnn.github.io/php-cassandra-binary/[PHP Library for -Cassandra] - -== C++ - -* https://github.com/datastax/cpp-driver[Datastax C++ driver] -* http://sourceforge.net/projects/libqtcassandra[libQTCassandra] - -== Scala - -* https://github.com/datastax/spark-cassandra-connector[Datastax Spark -connector] -* https://github.com/newzly/phantom[Phantom] -* https://github.com/getquill/quill[Quill] - -== Clojure - -* https://github.com/mpenet/alia[Alia] -* https://github.com/clojurewerkz/cassaforte[Cassaforte] -* https://github.com/mpenet/hayt[Hayt] - -== Erlang - -* https://github.com/matehat/cqerl[CQerl] -* https://github.com/silviucpp/erlcass[Erlcass] - -== Go - -* http://relops.com/cqlc/[CQLc] -* https://github.com/hailocab/gocassa[Gocassa] -* https://github.com/gocql/gocql[GoCQL] - -== Haskell - -* https://github.com/ozataman/cassy[Cassy] - -== Rust - -* https://github.com/neich/rust-cql[Rust CQL] - -== Perl - -* https://github.com/tvdw/perl-dbd-cassandra[Cassandra::Client and -DBD::Cassandra] - -== Elixir - -* https://github.com/lexhide/xandra[Xandra] -* https://github.com/matehat/cqex[CQEx] - -== Dart - -* https://github.com/achilleasa/dart_cassandra_cql[dart_cassandra_cql] diff --git a/doc/source/modules/cassandra/pages/cql/functions.adoc b/doc/source/modules/cassandra/pages/cql/functions.adoc index 29f0fdd1fd17..157f46a6b317 100644 --- a/doc/source/modules/cassandra/pages/cql/functions.adoc +++ b/doc/source/modules/cassandra/pages/cql/functions.adoc @@ -1,12 +1,12 @@ -// Need some intro for UDF and native functions in general and point those to it. -// [[cql-functions]][[native-functions]] +// Need some intro for UDF and native functions in general and point those to it. +// [[cql-functions]][[native-functions]] == Functions CQL supports 2 main categories of functions: -* xref:cql/function.adoc#scalar-functions[scalar functions] that take a number of values and produce an output -* xref:cql/function.adoc#aggregate-fuctions[aggregate functions] that aggregate multiple rows resulting from a `SELECT` statement +* xref:cql/functions.adoc#scalar-functions[scalar functions] that take a number of values and produce an output +* xref:cql/functions.adoc#aggregate-functions[aggregate functions] that aggregate multiple rows resulting from a `SELECT` statement In both cases, CQL provides a number of native "hard-coded" functions as well as the ability to create new user-defined functions. @@ -300,7 +300,7 @@ include::example$JAVA/udf_imports.java[] Please note, that these convenience imports are not available for script UDFs. [[create-function-statement]] -==== CREATE FUNCTION +==== CREATE FUNCTION statement Creating a new user-defined function uses the `CREATE FUNCTION` statement: @@ -337,7 +337,7 @@ Functions belong to a keyspace; if no keyspace is specified, the current keyspac User-defined functions are not allowed in the system keyspaces. [[drop-function-statement]] -===== DROP FUNCTION +==== DROP FUNCTION statement Dropping a function uses the `DROP FUNCTION` statement: @@ -356,7 +356,7 @@ include::example$CQL/drop_function.cql[] You must specify the argument types of the function, the arguments_signature, in the drop command if there are multiple overloaded functions with the same name but different signatures. `DROP FUNCTION` with the optional `IF EXISTS` keywords drops a function if it exists, but does not throw an error if it doesn't. -[[ aggregate-functions ]] +[[aggregate-functions]] === Aggregate functions Aggregate functions work on a set of rows. @@ -420,7 +420,7 @@ include::example$CQL/avg.cql[] ---- [[user-defined-aggregates-functions]] -==== User-Defined Aggregates +==== User-Defined Aggregates (UDAs) User-defined aggregates allow the creation of custom aggregate functions. User-defined aggregates can be used in `SELECT` statement. @@ -444,7 +444,7 @@ include::example$CQL/uda.cql[] ---- [[create-aggregate-statement]] -===== CREATE AGGREGATE +==== CREATE AGGREGATE statement Creating (or replacing) a user-defined aggregate function uses the `CREATE AGGREGATE` statement: @@ -479,7 +479,7 @@ If no `FINALFUNC` is defined, the overall return type of the aggregate function If a `FINALFUNC` is defined, it is the return type of that function. [[drop-aggregate-statement]] -===== DROP AGGREGATE +==== DROP AGGREGATE statement Dropping an user-defined aggregate function uses the `DROP AGGREGATE` statement: diff --git a/doc/source/modules/cassandra/pages/cql/index.adoc b/doc/source/modules/cassandra/pages/cql/index.adoc index 366628da2307..4b43be369c5d 100644 --- a/doc/source/modules/cassandra/pages/cql/index.adoc +++ b/doc/source/modules/cassandra/pages/cql/index.adoc @@ -13,12 +13,12 @@ For that reason, when used in this document, these terms (tables, rows and colum * xref:cql/types.adoc[Data types] * xref:cql/ddl.adoc[Data definition language] * xref:cql/dml.adoc[Data manipulation language] +* xref:cql/operators.adoc[Operators] * xref:cql/indexes.adoc[Secondary indexes] * xref:cql/mvs.adoc[Materialized views] -* xref:cql/security.adoc[CQL security] * xref:cql/functions.adoc[Functions] -* xref:cql/operators.adoc[Operators] * xref:cql/json.adoc[JSON] +* xref:cql/security.adoc[CQL security] * xref:cql/triggers.adoc[Triggers] * xref:cql/appendices.adoc[Appendices] * xref:cql/changes.adoc[Changes] diff --git a/doc/source/modules/cassandra/pages/cql/index.rst b/doc/source/modules/cassandra/pages/cql/index.rst deleted file mode 100644 index b4c21cf6c5e9..000000000000 --- a/doc/source/modules/cassandra/pages/cql/index.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. _cql: - -The Cassandra Query Language (CQL) -================================== - -This document describes the Cassandra Query Language (CQL) [#]_. Note that this document describes the last version of -the languages. However, the `changes <#changes>`_ section provides the diff between the different versions of CQL. - -CQL offers a model close to SQL in the sense that data is put in *tables* containing *rows* of *columns*. For -that reason, when used in this document, these terms (tables, rows and columns) have the same definition than they have -in SQL. - -.. toctree:: - :maxdepth: 2 - - definitions - types - ddl - dml - indexes - mvs - security - functions - operators - json - triggers - appendices - changes - -.. [#] Technically, this document CQL version 3, which is not backward compatible with CQL version 1 and 2 (which have - been deprecated and remove) and differs from it in numerous ways. diff --git a/doc/source/modules/cassandra/pages/cql/installing.adoc b/doc/source/modules/cassandra/pages/cql/installing.adoc deleted file mode 100644 index 949c5fc8c9ee..000000000000 --- a/doc/source/modules/cassandra/pages/cql/installing.adoc +++ /dev/null @@ -1,374 +0,0 @@ -= Installing Cassandra - -These are the instructions for deploying the supported releases of -Apache Cassandra on Linux servers. - -Cassandra runs on a wide array of Linux distributions including (but not -limited to): - -* Ubuntu, most notably LTS releases 16.04 to 18.04 -* CentOS & RedHat Enterprise Linux (RHEL) including 6.6 to 7.7 -* Amazon Linux AMIs including 2016.09 through to Linux 2 -* Debian versions 8 & 9 -* SUSE Enterprise Linux 12 - -This is not an exhaustive list of operating system platforms, nor is it -prescriptive. However users will be well-advised to conduct exhaustive -tests of their own particularly for less-popular distributions of Linux. -Deploying on older versions is not recommended unless you have previous -experience with the older distribution in a production environment. - -== Prerequisites - -* Install the latest version of Java 8, either the -http://www.oracle.com/technetwork/java/javase/downloads/index.html[Oracle -Java Standard Edition 8] or http://openjdk.java.net/[OpenJDK 8]. To -verify that you have the correct version of java installed, type -`java -version`. -* *NOTE*: _Experimental_ support for Java 11 was added in Cassandra 4.0 -(https://issues.apache.org/jira/browse/CASSANDRA-9608[CASSANDRA-9608]). -Running Cassandra on Java 11 is _experimental_. Do so at your own risk. -For more information, see -https://github.com/apache/cassandra/blob/trunk/NEWS.txt[NEWS.txt]. -* For using cqlsh, the latest version of -https://www.python.org/downloads/[Python 2.7] or Python 3.6+. To verify -that you have the correct version of Python installed, type -`python --version`. - -== Choosing an installation method - -For most users, installing the binary tarball is the simplest choice. -The tarball unpacks all its contents into a single location with -binaries and configuration files located in their own subdirectories. -The most obvious attribute of the tarball installation is it does not -require `root` permissions and can be installed on any Linux -distribution. - -Packaged installations require `root` permissions. Install the RPM build -on CentOS and RHEL-based distributions if you want to install Cassandra -using YUM. Install the Debian build on Ubuntu and other Debian-based -distributions if you want to install Cassandra using APT. Note that both -the YUM and APT methods required `root` permissions and will install the -binaries and configuration files as the `cassandra` OS user. - -== Installing the binary tarball - -[arabic] -. Verify the version of Java installed. For example: - -[source,none] ----- -$ java -version -openjdk version "1.8.0_222" -OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) -OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) ----- - -[arabic, start=2] -. Download the binary tarball from one of the mirrors on the -http://cassandra.apache.org/download/[Apache Cassandra Download] site. -For example, to download 4.0: - -[source,none] ----- -$ curl -OL http://apache.mirror.digitalpacific.com.au/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz ----- - -NOTE: The mirrors only host the latest versions of each major supported -release. To download an earlier version of Cassandra, visit the -http://archive.apache.org/dist/cassandra/[Apache Archives]. - -[arabic, start=3] -. OPTIONAL: Verify the integrity of the downloaded tarball using one of -the methods https://www.apache.org/dyn/closer.cgi#verify[here]. For -example, to verify the hash of the downloaded file using GPG: - -[source,none] ----- -$ gpg --print-md SHA256 apache-cassandra-4.0.0-bin.tar.gz -apache-cassandra-4.0.0-bin.tar.gz: 28757DDE 589F7041 0F9A6A95 C39EE7E6 - CDE63440 E2B06B91 AE6B2006 14FA364D ----- - -Compare the signature with the SHA256 file from the Downloads site: - -[source,none] ----- -$ curl -L https://downloads.apache.org/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz.sha256 -28757dde589f70410f9a6a95c39ee7e6cde63440e2b06b91ae6b200614fa364d ----- - -[arabic, start=4] -. Unpack the tarball: - -[source,none] ----- -$ tar xzvf apache-cassandra-4.0.0-bin.tar.gz ----- - -The files will be extracted to the `apache-cassandra-4.0.0/` directory. -This is the tarball installation location. - -[arabic, start=5] -. Located in the tarball installation location are the directories for -the scripts, binaries, utilities, configuration, data and log files: - -[source,none] ----- -/ - bin/ - conf/ - data/ - doc/ - interface/ - javadoc/ - lib/ - logs/ - pylib/ - tools/ ----- - -For information on how to configure your installation, see -http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring -Cassandra]. - -[arabic, start=6] -. Start Cassandra: - -[source,none] ----- -$ cd apache-cassandra-4.0.0/ -$ bin/cassandra ----- - -NOTE: This will run Cassandra as the authenticated Linux user. - -You can monitor the progress of the startup with: - -[source,none] ----- -$ tail -f logs/system.log ----- - -Cassandra is ready when you see an entry like this in the `system.log`: - -[source,none] ----- -INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... ----- - -[arabic, start=7] -. Check the status of Cassandra: - -[source,none] ----- -$ bin/nodetool status ----- - -The status column in the output should report UN which stands for -"Up/Normal". - -Alternatively, connect to the database with: - -[source,none] ----- -$ bin/cqlsh ----- - -== Installing the Debian packages - -[arabic] -. Verify the version of Java installed. For example: - -[source,none] ----- -$ java -version -openjdk version "1.8.0_222" -OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) -OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) ----- - -[arabic, start=2] -. Add the Apache repository of Cassandra to the file -`cassandra.sources.list`. The latest major version is 4.0 and the -corresponding distribution name is `40x` (with an "x" as the suffix). -For older releases use `311x` for C* 3.11 series, `30x` for 3.0, `22x` -for 2.2 and `21x` for 2.1. For example, to add the repository for -version 4.0 (`40x`): - -[source,none] ----- -$ echo "deb http://www.apache.org/dist/cassandra/debian 40x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list -deb http://www.apache.org/dist/cassandra/debian 40x main ----- - -[arabic, start=3] -. Add the Apache Cassandra repository keys to the list of trusted keys -on the server: - -[source,none] ----- -$ curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add - - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed -100 266k 100 266k 0 0 320k 0 --:--:-- --:--:-- --:--:-- 320k -OK ----- - -[arabic, start=4] -. Update the package index from sources: - -[source,none] ----- -$ sudo apt-get update ----- - -[arabic, start=5] -. Install Cassandra with APT: - -[source,none] ----- -$ sudo apt-get install cassandra ----- - -NOTE: A new Linux user `cassandra` will get created as part of the -installation. The Cassandra service will also be run as this user. - -[arabic, start=6] -. The Cassandra service gets started automatically after installation. -Monitor the progress of the startup with: - -[source,none] ----- -$ tail -f /var/log/cassandra/system.log ----- - -Cassandra is ready when you see an entry like this in the `system.log`: - -[source,none] ----- -INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... ----- - -NOTE: For information on how to configure your installation, see -http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring -Cassandra]. - -[arabic, start=7] -. Check the status of Cassandra: - -[source,none] ----- -$ nodetool status ----- - -The status column in the output should report `UN` which stands for -"Up/Normal". - -Alternatively, connect to the database with: - -[source,none] ----- -$ cqlsh ----- - -== Installing the RPM packages - -[arabic] -. Verify the version of Java installed. For example: - -[source,none] ----- -$ java -version -openjdk version "1.8.0_222" -OpenJDK Runtime Environment (build 1.8.0_232-b09) -OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode) ----- - -[arabic, start=2] -. Add the Apache repository of Cassandra to the file -`/etc/yum.repos.d/cassandra.repo` (as the `root` user). The latest major -version is 4.0 and the corresponding distribution name is `40x` (with an -"x" as the suffix). For older releases use `311x` for C* 3.11 series, -`30x` for 3.0, `22x` for 2.2 and `21x` for 2.1. For example, to add the -repository for version 4.0 (`40x`): - -[source,none] ----- -[cassandra] -name=Apache Cassandra -baseurl=https://downloads.apache.org/cassandra/redhat/40x/ -gpgcheck=1 -repo_gpgcheck=1 -gpgkey=https://downloads.apache.org/cassandra/KEYS ----- - -[arabic, start=3] -. Update the package index from sources: - -[source,none] ----- -$ sudo yum update ----- - -[arabic, start=4] -. Install Cassandra with YUM: - -[source,none] ----- -$ sudo yum install cassandra ----- - -NOTE: A new Linux user `cassandra` will get created as part of the -installation. The Cassandra service will also be run as this user. - -[arabic, start=5] -. Start the Cassandra service: - -[source,none] ----- -$ sudo service cassandra start ----- - -[arabic, start=6] -. Monitor the progress of the startup with: - -[source,none] ----- -$ tail -f /var/log/cassandra/system.log ----- - -Cassandra is ready when you see an entry like this in the `system.log`: - -[source,none] ----- -INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... ----- - -NOTE: For information on how to configure your installation, see -http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring -Cassandra]. - -[arabic, start=7] -. Check the status of Cassandra: - -[source,none] ----- -$ nodetool status ----- - -The status column in the output should report `UN` which stands for -"Up/Normal". - -Alternatively, connect to the database with: - -[source,none] ----- -$ cqlsh ----- - -== Further installation info - -For help with installation issues, see the -http://cassandra.apache.org/doc/latest/troubleshooting/index.html[Troubleshooting] -section. diff --git a/doc/source/modules/cassandra/pages/cql/json.adoc b/doc/source/modules/cassandra/pages/cql/json.adoc index f8c1a93b3ef9..7d0aa268b0da 100644 --- a/doc/source/modules/cassandra/pages/cql/json.adoc +++ b/doc/source/modules/cassandra/pages/cql/json.adoc @@ -1,27 +1,22 @@ = JSON Support Cassandra 2.2 introduces JSON support to `SELECT ` and -`INSERT ` statements. This support does not -fundamentally alter the CQL API (for example, the schema is still -enforced), it simply provides a convenient way to work with JSON -documents. +`INSERT ` statements. +This support does not fundamentally alter the CQL API (for example, the schema is still +enforced). +It simply provides a convenient way to work with JSON documents. == SELECT JSON -With `SELECT` statements, the `JSON` keyword can be used to return each -row as a single `JSON` encoded map. The remainder of the `SELECT` -statement behavior is the same. +With `SELECT` statements, the `JSON` keyword is used to return each row as a single `JSON` encoded map. +The remainder of the `SELECT` statement behavior is the same. -The result map keys are the same as the column names in a normal result -set. For example, a statement like `SELECT JSON a, ttl(b) FROM ...` -would result in a map with keys `"a"` and `"ttl(b)"`. However, this is -one notable exception: for symmetry with `INSERT JSON` behavior, -case-sensitive column names with upper-case letters will be surrounded -with double quotes. For example, `SELECT JSON myColumn FROM ...` would -result in a map key `"\"myColumn\""` (note the escaped quotes). +The result map keys match the column names in a normal result set. +For example, a statement like `SELECT JSON a, ttl(b) FROM ...` would result in a map with keys `"a"` and `"ttl(b)"`. +However, there is one notable exception: for symmetry with `INSERT JSON` behavior, case-sensitive column names with upper-case letters will be surrounded with double quotes. +For example, `SELECT JSON myColumn FROM ...` would result in a map key `"\"myColumn\""` with escaped quotes). -The map values will `JSON`-encoded representations (as described below) -of the result set values. +The map values will JSON-encoded representations (as described below) of the result set values. == INSERT JSON diff --git a/doc/source/modules/cassandra/pages/cql/mvs.adoc b/doc/source/modules/cassandra/pages/cql/mvs.adoc index 2afac582d571..6da0fa4ffe5f 100644 --- a/doc/source/modules/cassandra/pages/cql/mvs.adoc +++ b/doc/source/modules/cassandra/pages/cql/mvs.adoc @@ -33,10 +33,10 @@ to the base table will cause corresponding updates in the view. Creating a materialized view has 3 main parts: -* The `select statement ` that restrict the data included in +* The xref:cql/mvs.adoc#mv-select[select statement] that restrict the data included in the view. -* The `primary key ` definition for the view. -* The `options ` for the view. +* The xref:cql/mvs.adoc#mv-primary-key[primary key] definition for the view. +* The xref:cql/mvs.adoc#mv-options[options] for the view. Attempting to create an already existing materialized view will return an error unless the `IF NOT EXISTS` option is used. If it is used, the @@ -60,24 +60,21 @@ The select statement of a materialized view creation defines which of the base table is included in the view. That statement is limited in a number of ways: -* the `selection ` is limited to those that only +* the xref:cql/mvs.adoc#selection-clause[selection] is limited to those that only select columns of the base table. In other words, you can't use any function (aggregate or not), casting, term, etc. Aliases are also not -supported. You can however use [.title-ref]#*# as a shortcut of -selecting all columns. Further, `static columns ` cannot -be included in a materialized view (which means `SELECT *` isn't allowed -if the base table has static columns). -* the `WHERE` clause have the following restrictions: -** it cannot include any `bind_marker`. -** the columns that are not part of the _base table_ primary key can -only be restricted by an `IS NOT NULL` restriction. No other restriction -is allowed. -** as the columns that are part of the _view_ primary key cannot be -null, they must always be at least restricted by a `IS NOT NULL` +supported. +You can however use * as a shortcut of selecting all columns. +Further, xref:cql/types.adoc#static-columns[static columns] cannot be included in a materialized view. +Thus, a `SELECT *` command isn't allowed if the base table has static columns. +The `WHERE` clause has the following restrictions: + +** cannot include any `bind_marker` +** cannot have columns that are not part of the _base table_ primary key that are not restricted by an `IS NOT NULL` restriction +** no other restriction is allowed +** cannot have columns that are part of the _view_ primary key be null, they must always be at least restricted by a `IS NOT NULL` restriction (or any other restriction, but they must have one). -* it cannot have neither an `ordering clause `, nor a -`limit `, nor `ALLOW -FILTERING `. +* cannot have an xref:cql/dml.adoc#ordering-clause[ordering clause], a xref:cql/dml.adoc#limit-clause[limit], or xref:cql/dml.adoc#allow-filtering[ALLOW FILTERING === MV primary key diff --git a/doc/source/modules/cassandra/pages/cql/production.adoc b/doc/source/modules/cassandra/pages/cql/production.adoc deleted file mode 100644 index 1954ee9b15b8..000000000000 --- a/doc/source/modules/cassandra/pages/cql/production.adoc +++ /dev/null @@ -1,82 +0,0 @@ -= Production Recommendations - -The `cassandra.yaml` and `jvm.options` files have a number of notes and -recommendations for production usage. This page expands on some of the -notes in these files with additional information. - -== Tokens - -Using more than 1 token (referred to as vnodes) allows for more flexible -expansion and more streaming peers when bootstrapping new nodes into the -cluster. This can limit the negative impact of streaming (I/O and CPU -overhead) as well as allow for incremental cluster expansion. - -As a tradeoff, more tokens will lead to sharing data with more peers, -which can result in decreased availability. To learn more about this we -recommend reading -https://github.com/jolynch/python_performance_toolkit/raw/master/notebooks/cassandra_availability/whitepaper/cassandra-availability-virtual.pdf[this -paper]. - -The number of tokens can be changed using the following setting: - -`num_tokens: 16` - -Here are the most common token counts with a brief explanation of when -and why you would use each one. - -[width="100%",cols="13%,87%",options="header",] -|=== -|Token Count |Description -|1 |Maximum availablility, maximum cluster size, fewest peers, but -inflexible expansion. Must always double size of cluster to expand and -remain balanced. - -|4 |A healthy mix of elasticity and availability. Recommended for -clusters which will eventually reach over 30 nodes. Requires adding -approximately 20% more nodes to remain balanced. Shrinking a cluster may -result in cluster imbalance. - -|16 |Best for heavily elastic clusters which expand and shrink -regularly, but may have issues availability with larger clusters. Not -recommended for clusters over 50 nodes. -|=== - -In addition to setting the token count, it's extremely important that -`allocate_tokens_for_local_replication_factor` be set as well, to ensure -even token allocation. - -== Read Ahead - -Read ahead is an operating system feature that attempts to keep as much -data loaded in the page cache as possible. The goal is to decrease -latency by using additional throughput on reads where the latency -penalty is high due to seek times on spinning disks. By leveraging read -ahead, the OS can pull additional data into memory without the cost of -additional seeks. This works well when available RAM is greater than the -size of the hot dataset, but can be problematic when the hot dataset is -much larger than available RAM. The benefit of read ahead decreases as -the size of your hot dataset gets bigger in proportion to available -memory. - -With small partitions (usually tables with no partition key, but not -limited to this case) and solid state drives, read ahead can increase -disk usage without any of the latency benefits, and in some cases can -result in up to a 5x latency and throughput performance penalty. Read -heavy, key/value tables with small (under 1KB) rows are especially prone -to this problem. - -We recommend the following read ahead settings: - -[width="59%",cols="40%,60%",options="header",] -|=== -|Hardware |Initial Recommendation -|Spinning Disks |64KB -|SSD |4KB -|=== - -Read ahead can be adjusted on Linux systems by using the -[.title-ref]#blockdev# tool. - -For example, we can set read ahead of -`/dev/sda1\` to 4KB by doing the following:: blockdev --setra 8 /dev/sda1 **Note**: blockdev accepts the number of 512 byte sectors to read ahead. The argument of 8 above is equivilent to 4KB. Since each system is different, use the above recommendations as a starting point and tuning based on your SLA and throughput requirements. To understand how read ahead impacts disk resource usage we recommend carefully reading through the :ref:\`troubleshooting \` portion of the documentation. Compression ^^^^^^^^^^^^ Compressed data is stored by compressing fixed size byte buffers and writing the data to disk. The buffer size is determined by the`chunk_length_in_kb`element in the compression map of the schema settings. The default setting is 16KB starting with Cassandra 4.0. Since the entire compressed buffer must be read off disk, using too high of a compression chunk length can lead to significant overhead when reading small records. Combined with the default read ahead setting this can result in massive read amplification for certain workloads. LZ4Compressor is the default and recommended compression algorithm. There is additional information on this topic on \`The Last Pickle Blog \`_. Compaction ^^^^^^^^^^^^ There are different :ref:\`compaction \` strategies available for different workloads. We recommend reading up on the different strategies to understand which is the best for your environment. Different tables may (and frequently do) use different compaction strategies on the same cluster. Encryption ^^^^^^^^^^^ It is significantly easier to set up peer to peer encryption and client server encryption when setting up your production cluster as opposed to setting it up once the cluster is already serving production traffic. If you are planning on using network encryption eventually (in any form), we recommend setting it up now. Changing these configurations down the line is not impossible, but mistakes can result in downtime or data loss. Ensure Keyspaces are Created with NetworkTopologyStrategy ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Production clusters should never use SimpleStrategy. Production keyspaces should use the NetworkTopologyStrategy (NTS). For example:: create KEYSPACE mykeyspace WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': 3}; NetworkTopologyStrategy allows Cassandra to take advantage of multiple racks and data centers. Configure Racks and Snitch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Correctly configuring or changing racks after a cluster has been provisioned is an unsupported process**. Migrating from a single rack to multiple racks is also unsupported and can result in data loss. Using`GossipingPropertyFileSnitch`is the most flexible solution for on premise or mixed cloud environments.`Ec2Snitch`` -is reliable for AWS EC2 only environments. diff --git a/doc/source/modules/cassandra/pages/cql/querying.adoc b/doc/source/modules/cassandra/pages/cql/querying.adoc deleted file mode 100644 index 683e3e384853..000000000000 --- a/doc/source/modules/cassandra/pages/cql/querying.adoc +++ /dev/null @@ -1,38 +0,0 @@ -= Inserting and querying - -The API to Cassandra is `CQL `, the Cassandra Query Language. To -use CQL, you will need to connect to the cluster, which can be done: - -* either using cqlsh, -* or through a client driver for Cassandra. - -== CQLSH - -cqlsh is a command line shell for interacting with Cassandra through -CQL. It is shipped with every Cassandra package, and can be found in the -bin/ directory alongside the cassandra executable. It connects to the -single node specified on the command line. For example: - -.... -$ bin/cqlsh localhost -Connected to Test Cluster at localhost:9042. -[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4] -Use HELP for help. -cqlsh> SELECT cluster_name, listen_address FROM system.local; - - cluster_name | listen_address ---------------+---------------- - Test Cluster | 127.0.0.1 - -(1 rows) -cqlsh> -.... - -See the `cqlsh section ` for full documentation. - -== Client drivers - -A lot of client drivers are provided by the Community and a list of -known drivers is provided in `the next section -`. You should refer to the documentation of each drivers -for more information on how to use them. diff --git a/doc/source/modules/cassandra/pages/cql/security.adoc b/doc/source/modules/cassandra/pages/cql/security.adoc index a435086bf8ea..175abd0535f3 100644 --- a/doc/source/modules/cassandra/pages/cql/security.adoc +++ b/doc/source/modules/cassandra/pages/cql/security.adoc @@ -1,4 +1,4 @@ -= Security +role_name ::= identifier | string= Security [[cql-roles]] == Database Roles @@ -8,7 +8,7 @@ Syntactically, a role is defined by: [source, bnf] ---- -role_name ::= identifier | string +include::example$BNF/role_name.bnf[] ---- @@ -19,33 +19,20 @@ Creating a role uses the `CREATE ROLE` statement: [source, bnf] ---- -create_role_statement ::= CREATE ROLE [ IF NOT EXISTS ] role_name - [ WITH role_options# ] -role_options ::= role_option ( AND role_option)* -role_option ::= PASSWORD '=' string - | LOGIN '=' boolean - | SUPERUSER '=' boolean - | OPTIONS '=' map_literal - | ACCESS TO DATACENTERS set_literal - | ACCESS TO ALL DATACENTERS +include::example$BNF/create_role_statement.bnf[] ---- For instance: [source,cql] ---- -CREATE ROLE new_role; -CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; -CREATE ROLE bob WITH PASSWORD = 'password_b' AND LOGIN = true AND SUPERUSER = true; -CREATE ROLE carlos WITH OPTIONS = { 'custom_option1' : 'option1_value', 'custom_option2' : 99 }; -CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO DATACENTERS {'DC1', 'DC3'}; -CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO ALL DATACENTERS; +include::example$CQL/create_role.cql[] ---- By default roles do not possess `LOGIN` privileges or `SUPERUSER` status. -`Permissions ` on database resources are granted to +xref:cql/security.adoc#cql-permissions[Permissions] on database resources are granted to roles; types of resources include keyspaces, tables, functions and roles themselves. Roles may be granted to other roles to create hierarchical permissions structures; in these hierarchies, permissions and @@ -57,7 +44,7 @@ acquire any roles and privileges granted to that role. Only a client with with the `CREATE` permission on the database roles resource may issue `CREATE ROLE` requests (see the -`relevant section ` below), unless the client is a +xref:cql/security.adoc#cql-permissions[relevant section]), unless the client is a `SUPERUSER`. Role management in Cassandra is pluggable and custom implementations may support only a subset of the listed options. @@ -88,8 +75,7 @@ used and the role exists, the statement is a no-op: [source,cql] ---- -CREATE ROLE other_role; -CREATE ROLE IF NOT EXISTS other_role; +include::example$CQL/create_role_ifnotexists.cql[] ---- [[alter-role-statement]] @@ -99,14 +85,14 @@ Altering a role options uses the `ALTER ROLE` statement: [source, bnf] ---- -alter_role_statement ::= ALTER ROLE role_name WITH role_options +include::example$BNF/alter_role_statement.bnf[] ---- -For instance: +For example: [source,cql] ---- -ALTER ROLE bob WITH PASSWORD = 'PASSWORD_B' AND SUPERUSER = false; +include::example$CQL/alter_role.cql[] ---- ==== Restricting connections to specific datacenters @@ -119,13 +105,13 @@ clause. Conditions on executing `ALTER ROLE` statements: -* A client must have `SUPERUSER` status to alter the `SUPERUSER` status +* a client must have `SUPERUSER` status to alter the `SUPERUSER` status of another role -* A client cannot alter the `SUPERUSER` status of any role it currently +* a client cannot alter the `SUPERUSER` status of any role it currently holds -* A client can only modify certain properties of the role with which it +* a client can only modify certain properties of the role with which it identified at login (e.g. `PASSWORD`) -* To modify properties of a role, the client must be granted `ALTER` +* to modify properties of a role, the client must be granted `ALTER` `permission ` on that role [[drop-role-statement]] @@ -135,7 +121,7 @@ Dropping a role uses the `DROP ROLE` statement: [source, bnf] ---- -drop_role_statement ::= DROP ROLE [ IF EXISTS ] role_name +include::example$BNF/drop_role_statement.bnf[] ---- `DROP ROLE` requires the client to have `DROP` @@ -154,12 +140,11 @@ used and the role does not exist the statement is a no-op. DROP ROLE intentionally does not terminate any open user sessions. Currently connected sessions will remain connected and will retain the ability to perform any database actions which do not require -`authorization`. However, if authorization is enabled, -`permissions` of the dropped role are also revoked, -subject to the `caching options` configured in -`cassandra.yaml`. Should a dropped role be subsequently -recreated and have new `permissions` or -`roles` granted to it, any client sessions still +xref:cql/security.adoc#authorization[authorization]. +However, if authorization is enabled, xref:cql/security.adoc#cql-permissions[permissions] of the dropped role are also revoked, +subject to the xref:cql/security.adoc#auth-caching[caching options] configured in xref:cql/configuring.adoc#cassandra.yaml[cassandra-yaml] file. +Should a dropped role be subsequently recreated and have new xref:security.adoc#grant-permission-statement[permissions] or +xref:security.adoc#grant-role-statement[roles]` granted to it, any client sessions still connected will acquire the newly granted permissions and roles. ==== @@ -170,14 +155,14 @@ Granting a role to another uses the `GRANT ROLE` statement: [source, bnf] ---- -grant_role_statement ::= GRANT role_name TO role_name# +include::example$BNF/grant_role_statement.bnf[] ---- -For instance: +For example: [source,cql] ---- -GRANT report_writer TO alice; +include::example$CQL/grant_role.cql[] ---- This statement grants the `report_writer` role to `alice`. Any @@ -188,12 +173,7 @@ not permitted. The following examples result in error conditions: [source,cql] ---- -GRANT role_a TO role_b; -GRANT role_b TO role_a; - -GRANT role_a TO role_b; -GRANT role_b TO role_c; -GRANT role_c TO role_a; +include::example$CQL/role_error.cql[] ---- [[revoke-role-statement]] @@ -203,14 +183,14 @@ Revoking a role uses the `REVOKE ROLE` statement: [source, bnf] ---- -revoke_role_statement ::= REVOKE role_name FROM role_name +include::example$BNF/revoke_role_statement.bnf[] ---- -For instance: +For example: [source,cql] ---- -REVOKE report_writer FROM alice; +include::example$CQL/revoke_role.cql[] ---- This statement revokes the `report_writer` role from `alice`. Any @@ -225,35 +205,35 @@ listed using the `LIST ROLES` statement: [source, bnf] ---- -list_roles_statement ::= LIST ROLES [ OF role_name] [ NORECURSIVE ] +include::example$BNF/list_roles_statement.bnf[] ---- For instance: [source,cql] ---- -LIST ROLES; +include::example$CQL/list_roles.cql[] ---- returns all known roles in the system, this requires `DESCRIBE` -permission on the database roles resource. And: +permission on the database roles resource. + +This example enumerates all roles granted to `alice`, including those transitively +acquired: [source,cql] ---- -LIST ROLES OF alice; +include::example$CQL/list_roles_of.cql[] ---- -enumerates all roles granted to `alice`, including those transitively -acquired. But: +This example lists all roles directly granted to `bob` without including any of the +transitively acquired ones: [source,cql] ---- -LIST ROLES OF bob NORECURSIVE +include::example$CQL/list_roles_nonrecursive.cql[] ---- -lists all roles directly granted to `bob` without including any of the -transitively acquired ones. - == Users Prior to the introduction of roles in Cassandra 2.2, authentication and @@ -270,39 +250,22 @@ Creating a user uses the `CREATE USER` statement: [source, bnf] ---- -create_user_statement ::= CREATE USER [ IF NOT EXISTS ] role_name - [ WITH PASSWORD string ] - [ user_option ] -user_option: SUPERUSER | NOSUPERUSER +include::example$CQL/create_user_statement.bnf[] ---- -For instance: +For example: [source,cql] ---- -CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; -CREATE USER bob WITH PASSWORD 'password_b' NOSUPERUSER; +include::example$CQL/create_user.cql[] ---- -`CREATE USER` is equivalent to `CREATE ROLE` where the `LOGIN` option is -`true`. So, the following pairs of statements are equivalent: +The `CREATE USER` command is equivalent to `CREATE ROLE` where the `LOGIN` option is `true`. +So, the following pairs of statements are equivalent: [source,cql] ---- -CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; -CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; - -CREATE USER IF NOT EXISTS alice WITH PASSWORD 'password_a' SUPERUSER; -CREATE ROLE IF NOT EXISTS alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; - -CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; -CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = false; - -CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; -CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; - -CREATE USER alice WITH PASSWORD 'password_a'; -CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; +include::example$CQL/create_user_role.cql[] ---- [[alter-user-statement]] @@ -312,15 +275,14 @@ Altering the options of a user uses the `ALTER USER` statement: [source, bnf] ---- -alter_user_statement ::= ALTER USER role_name [ WITH PASSWORD string] [ user_option] +include::example$BNF/alter_user_statement.bnf[] ---- -For instance: +For example: [source,cql] ---- -ALTER USER alice WITH PASSWORD 'PASSWORD_A'; -ALTER USER bob SUPERUSER; +include::example$CQL/alter_user.cql[] ---- [[drop-user-statement]] @@ -330,7 +292,7 @@ Dropping a user uses the `DROP USER` statement: [source, bnf] ---- -drop_user_statement ::= DROP USER [ IF EXISTS ] role_name +include::example$BNF/drop_user_statement.bnf[] ---- [[list-users-statement]] @@ -338,16 +300,12 @@ drop_user_statement ::= DROP USER [ IF EXISTS ] role_name Existing users can be listed using the `LIST USERS` statement: -list_users_statement: LIST USERS - -Note that this statement is equivalent to: - -[source,cql] +[source, bnf] ---- -LIST ROLES; +include::example$BNF/list_users_statement.bnf[] ---- -but only roles with the `LOGIN` privilege are included in the output. +Note that this statement is equivalent to xref:security.adoc#list-roles-statement[`LIST ROLES], but only roles with the `LOGIN` privilege are included in the output. == Data Control @@ -523,63 +481,52 @@ Granting a permission uses the `GRANT PERMISSION` statement: [source, bnf] ---- -grant_permission_statement ::= GRANT permissions ON resource TO role_name -permissions ::= ALL [ PERMISSIONS ] | permission [ PERMISSION ] -permission ::= CREATE | ALTER | DROP | SELECT | MODIFY | AUTHORIZE | DESCRIBE | EXECUTE -resource ::= ALL KEYSPACES - | KEYSPACE keyspace_name - | [ TABLE ] table_name - | ALL ROLES - | ROLE role_name - | ALL FUNCTIONS [ IN KEYSPACE keyspace_name ] - | FUNCTION function_name '(' [ cql_type( ',' cql_type )* ] ')' - | ALL MBEANS - | ( MBEAN | MBEANS ) string +include::example$BNF/grant_permission_statement.bnf[] ---- -For instance: +For example: [source,cql] ---- -GRANT SELECT ON ALL KEYSPACES TO data_reader; +include::example$CQL/grant_perm.cql[] ---- -This gives any user with the role `data_reader` permission to execute +This example gives any user with the role `data_reader` permission to execute `SELECT` statements on any table across all keyspaces: [source,cql] ---- -GRANT MODIFY ON KEYSPACE keyspace1 TO data_writer; +include::example$CQL/grant_modify.cql[] ---- -This give any user with the role `data_writer` permission to perform +To give any user with the role `data_writer` permission to perform `UPDATE`, `INSERT`, `UPDATE`, `DELETE` and `TRUNCATE` queries on all tables in the `keyspace1` keyspace: [source,cql] ---- -GRANT DROP ON keyspace1.table1 TO schema_owner; +include::example$CQL/grant_drop.cql[] ---- -This gives any user with the `schema_owner` role permissions to `DROP` +To give any user with the `schema_owner` role permissions to `DROP` a specific `keyspace1.table1`: [source,cql] ---- -GRANT EXECUTE ON FUNCTION keyspace1.user_function( int ) TO report_writer; +include::example$CQL/grant_execute.cql[] ---- -This grants any user with the `report_writer` role permission to execute +This command grants any user with the `report_writer` role permission to execute `SELECT`, `INSERT` and `UPDATE` queries which use the function `keyspace1.user_function( int )`: [source,cql] ---- -GRANT DESCRIBE ON ALL ROLES TO role_admin; +include::example$CQL/grant_describe.cql[] ---- This grants any user with the `role_admin` role permission to view any -and all roles in the system with a `LIST ROLES` statement +and all roles in the system with a `LIST ROLES` statement. ==== GRANT ALL @@ -602,18 +549,14 @@ statement: [source, bnf] ---- -revoke_permission_statement ::= REVOKE permissions ON resource FROM role_name +include::example$BNF/revoke_permission_statement.bnf[] ---- -For instance: +For example: [source,cql] ---- -REVOKE SELECT ON ALL KEYSPACES FROM data_reader; -REVOKE MODIFY ON KEYSPACE keyspace1 FROM data_writer; -REVOKE DROP ON keyspace1.table1 FROM schema_owner; -REVOKE EXECUTE ON FUNCTION keyspace1.user_function( int ) FROM report_writer; -REVOKE DESCRIBE ON ALL ROLES FROM role_admin; +include::example$CQL/revoke_perm.cql[] ---- Because of their function in normal driver operations, certain tables @@ -623,11 +566,7 @@ their assigned role: [source,cql] ---- -* `system_schema.keyspaces` -* `system_schema.columns` -* `system_schema.tables` -* `system.local` -* `system.peers` +include::example$CQL/no_revoke.cql[] ---- [[list-permissions-statement]] @@ -637,14 +576,14 @@ Listing granted permissions uses the `LIST PERMISSIONS` statement: [source, bnf] ---- -list_permissions_statement ::= LIST permissions [ ON resource] [ OF role_name[ NORECURSIVE ] ] +include::example$BNF/list_permissions_statement.bnf[] ---- -For instance: +For example: [source,cql] ---- -LIST ALL PERMISSIONS OF alice; +include::example$CQL/list_perm.cql[] ---- Show all permissions granted to `alice`, including those acquired @@ -652,7 +591,7 @@ transitively from any other roles: [source,cql] ---- -LIST ALL PERMISSIONS ON keyspace1.table1 OF bob; +include::example$CQL/list_all_perm.cql[] ---- Show all permissions on `keyspace1.table1` granted to `bob`, including @@ -665,7 +604,7 @@ which were directly granted to `bob` or one of `bob`'s roles: [source,cql] ---- -LIST SELECT PERMISSIONS OF carlos; +include::example$CQL/list_select_perm.cql[] ---- Show any permissions granted to `carlos` or any of `carlos`'s roles, From daf575c29ea9054febbab123fa5c4d68290d916d Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 28 Jul 2020 16:24:03 -0700 Subject: [PATCH 016/115] more conversion --- .../cassandra/examples/BASH/check_backups.sh | 1 + .../cassandra/examples/BASH/find_backups.sh | 1 + .../cassandra/examples/BASH/find_snapshots.sh | 1 + .../examples/BASH/find_two_snapshots.sh | 1 + .../examples/BASH/flush_and_check.sh | 2 + .../examples/BASH/nodetool_clearsnapshot.sh | 1 + .../BASH/nodetool_clearsnapshot_all.sh | 1 + .../cassandra/examples/BASH/nodetool_flush.sh | 3 + .../examples/BASH/nodetool_flush_table.sh | 1 + .../examples/BASH/nodetool_list_snapshots.sh | 1 + .../examples/BASH/nodetool_snapshot.sh | 1 + .../examples/BASH/snapshot_backup2.sh | 1 + .../examples/BASH/snapshot_both_backups.sh | 1 + .../cassandra/examples/BASH/snapshot_files.sh | 1 + .../examples/BASH/snapshot_mult_ks.sh | 1 + .../examples/BASH/snapshot_mult_tables.sh | 1 + .../BASH/snapshot_mult_tables_again.sh | 1 + .../examples/BASH/snapshot_one_table.sh | 1 + .../examples/BASH/snapshot_one_table2.sh | 1 + .../examples/CQL/create_ks2_backup.cql | 2 + .../examples/CQL/create_ks_backup.cql | 2 + .../examples/CQL/create_table2_backup.cql | 14 + .../examples/CQL/create_table_backup.cql | 13 + .../examples/CQL/insert_data2_backup.cql | 5 + .../examples/CQL/insert_data_backup.cql | 6 + .../examples/CQL/select_data2_backup.cql | 2 + .../examples/CQL/select_data_backup.cql | 2 + .../examples/RESULTS/find_backups.result | 4 + .../RESULTS/find_backups_table.result | 1 + .../RESULTS/find_two_snapshots.result | 3 + .../examples/RESULTS/flush_and_check.result | 9 + .../examples/RESULTS/flush_and_check2.result | 17 + .../RESULTS/insert_data2_backup.result | 13 + .../cassandra/examples/RESULTS/no_bups.result | 1 + .../RESULTS/nodetool_list_snapshots.result | 13 + .../RESULTS/nodetool_snapshot_help.result | 54 ++ .../RESULTS/select_data2_backup.result | 13 + .../RESULTS/select_data_backup.result | 15 + .../examples/RESULTS/snapshot_all.result | 4 + .../examples/RESULTS/snapshot_backup2.result | 3 + .../RESULTS/snapshot_backup2_find.result | 2 + .../examples/RESULTS/snapshot_files.result | 11 + .../examples/RESULTS/snapshot_mult_ks.result | 3 + .../RESULTS/snapshot_mult_tables.result | 3 + .../RESULTS/snapshot_mult_tables_again.result | 3 + .../RESULTS/snapshot_one_table2.result | 3 + .../examples/YAML/auto_snapshot.yaml | 1 + .../examples/YAML/incremental_bups.yaml | 1 + .../YAML/snapshot_before_compaction.yaml | 1 + .../modules/cassandra/pages/cql/security.adoc | 2 +- .../pages/development/code_style.adoc | 12 - .../pages/development/documentation.adoc | 40 +- .../pages/development/gettingstarted.adoc | 2 +- .../pages/development/how_to_review.adoc | 20 +- .../cassandra/pages/development/patches.adoc | 2 +- .../pages/development/release_process.adoc | 5 - .../cassandra/pages/operating/backups.adoc | 657 +++++------------- 57 files changed, 449 insertions(+), 537 deletions(-) create mode 100644 doc/source/modules/cassandra/examples/BASH/check_backups.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/find_backups.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/find_snapshots.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/find_two_snapshots.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/flush_and_check.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/nodetool_flush_table.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/nodetool_list_snapshots.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/nodetool_snapshot.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/snapshot_files.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/snapshot_one_table.sh create mode 100644 doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh create mode 100644 doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/create_table_backup.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_data2_backup.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/insert_data_backup.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql create mode 100644 doc/source/modules/cassandra/examples/CQL/select_data_backup.cql create mode 100644 doc/source/modules/cassandra/examples/RESULTS/find_backups.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/find_backups_table.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/find_two_snapshots.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/flush_and_check.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/flush_and_check2.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/insert_data2_backup.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/no_bups.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/nodetool_snapshot_help.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/select_data2_backup.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/select_data_backup.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/snapshot_all.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2_find.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/snapshot_files.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables_again.result create mode 100644 doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result create mode 100644 doc/source/modules/cassandra/examples/YAML/auto_snapshot.yaml create mode 100644 doc/source/modules/cassandra/examples/YAML/incremental_bups.yaml create mode 100644 doc/source/modules/cassandra/examples/YAML/snapshot_before_compaction.yaml diff --git a/doc/source/modules/cassandra/examples/BASH/check_backups.sh b/doc/source/modules/cassandra/examples/BASH/check_backups.sh new file mode 100644 index 000000000000..212c3d2c7d47 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/check_backups.sh @@ -0,0 +1 @@ +$ cd ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups && ls -l diff --git a/doc/source/modules/cassandra/examples/BASH/find_backups.sh b/doc/source/modules/cassandra/examples/BASH/find_backups.sh new file mode 100644 index 000000000000..56744bb3f18b --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/find_backups.sh @@ -0,0 +1 @@ +$ find -name backups diff --git a/doc/source/modules/cassandra/examples/BASH/find_snapshots.sh b/doc/source/modules/cassandra/examples/BASH/find_snapshots.sh new file mode 100644 index 000000000000..7abae2b42f00 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/find_snapshots.sh @@ -0,0 +1 @@ +$ find -name snapshots diff --git a/doc/source/modules/cassandra/examples/BASH/find_two_snapshots.sh b/doc/source/modules/cassandra/examples/BASH/find_two_snapshots.sh new file mode 100644 index 000000000000..6e97b4b72def --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/find_two_snapshots.sh @@ -0,0 +1 @@ +$ cd ./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots && ls -l diff --git a/doc/source/modules/cassandra/examples/BASH/flush_and_check.sh b/doc/source/modules/cassandra/examples/BASH/flush_and_check.sh new file mode 100644 index 000000000000..5f966e3c5a00 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/flush_and_check.sh @@ -0,0 +1,2 @@ +$ nodetool flush cqlkeyspace t +$ cd ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups && ls -l diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh new file mode 100644 index 000000000000..1599d5d4a788 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh @@ -0,0 +1 @@ +$ nodetool clearsnapshot -t magazine "CQLKeyspace" diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh new file mode 100644 index 000000000000..2db7c29ae60d --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh @@ -0,0 +1 @@ +$ nodetool clearsnapshot -all "CQLKeyspace" diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh new file mode 100644 index 000000000000..f001952e4d64 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh @@ -0,0 +1,3 @@ +$ nodetool flush "CQLKeyspace" t +$ nodetool flush "CQLKeyspace" t2 +$ nodetool flush "CatalogKeyspace" journal magazine diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_flush_table.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_flush_table.sh new file mode 100644 index 000000000000..2c236de27b7f --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_flush_table.sh @@ -0,0 +1 @@ +$ nodetool flush cqlkeyspace t diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_list_snapshots.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_list_snapshots.sh new file mode 100644 index 000000000000..76633f0767dc --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_list_snapshots.sh @@ -0,0 +1 @@ +$ nodetool listsnapshots diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_snapshot.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_snapshot.sh new file mode 100644 index 000000000000..c74e46795e57 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_snapshot.sh @@ -0,0 +1 @@ +$ nodetool help snapshot diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh new file mode 100644 index 000000000000..e93a88a4f12f --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh @@ -0,0 +1 @@ +$ nodetool snapshot --tag catalog-ks "CatalogKeyspace" diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh new file mode 100644 index 000000000000..558ff2f0e6cd --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh @@ -0,0 +1 @@ +$ nodetool snapshot --tag catalog-cql-ks "CatalogKeyspace","CQLKeyspace" diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_files.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_files.sh new file mode 100644 index 000000000000..916f0e5bbc76 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_files.sh @@ -0,0 +1 @@ +$ cd catalog-ks && ls -l diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh new file mode 100644 index 000000000000..c940acf49384 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh @@ -0,0 +1 @@ +$ nodetool snapshot --kt-list "CatalogKeyspace".journal,"CQLKeyspace".t --tag multi-ks diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh new file mode 100644 index 000000000000..aa0ef58ee841 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh @@ -0,0 +1 @@ +$ nodetool snapshot --kt-list "CQLKeyspace".t,"CQLKeyspace".t2 --tag multi-table diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh new file mode 100644 index 000000000000..fd07802b68c7 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh @@ -0,0 +1 @@ +$ nodetool snapshot --kt-list "CQLKeyspace".t,"CQLKeyspace".t2 --tag multi-table-2 diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_one_table.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_one_table.sh new file mode 100644 index 000000000000..05484a9deab0 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_one_table.sh @@ -0,0 +1 @@ +$ nodetool snapshot --tag --table
-- diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh new file mode 100644 index 000000000000..657b7db949b2 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh @@ -0,0 +1 @@ +$ nodetool snapshot --tag magazine --table magazine "CatalogKeyspace" diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql b/doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql new file mode 100644 index 000000000000..29435651ed64 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql @@ -0,0 +1,2 @@ +CREATE KEYSPACE CatalogKeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql b/doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql new file mode 100644 index 000000000000..503041dddb0b --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql @@ -0,0 +1,2 @@ +CREATE KEYSPACE CQLKeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; diff --git a/doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql b/doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql new file mode 100644 index 000000000000..9e25bc1ae6ae --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql @@ -0,0 +1,14 @@ +USE CatalogKeyspace; +CREATE TABLE journal ( + id int, + name text, + publisher text, + PRIMARY KEY (id) +); + +CREATE TABLE magazine ( + id int, + name text, + publisher text, + PRIMARY KEY (id) +); diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_backup.cql b/doc/source/modules/cassandra/examples/CQL/create_table_backup.cql new file mode 100644 index 000000000000..5a5184b2c20c --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/create_table_backup.cql @@ -0,0 +1,13 @@ +USE "CQLKeyspace"; +CREATE TABLE t ( + id int, + k int, + v text, + PRIMARY KEY (id) +); +CREATE TABLE t2 ( + id int, + k int, + v text, + PRIMARY KEY (id) +); diff --git a/doc/source/modules/cassandra/examples/CQL/insert_data2_backup.cql b/doc/source/modules/cassandra/examples/CQL/insert_data2_backup.cql new file mode 100644 index 000000000000..35e20a3bd20a --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_data2_backup.cql @@ -0,0 +1,5 @@ +INSERT INTO journal (id, name, publisher) VALUES (0, 'Apache Cassandra Magazine', 'Apache Cassandra'); +INSERT INTO journal (id, name, publisher) VALUES (1, 'Couchbase Magazine', 'Couchbase'); + +INSERT INTO magazine (id, name, publisher) VALUES (0, 'Apache Cassandra Magazine', 'Apache Cassandra'); +INSERT INTO magazine (id, name, publisher) VALUES (1, 'Couchbase Magazine', 'Couchbase'); diff --git a/doc/source/modules/cassandra/examples/CQL/insert_data_backup.cql b/doc/source/modules/cassandra/examples/CQL/insert_data_backup.cql new file mode 100644 index 000000000000..15eb37575f1d --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/insert_data_backup.cql @@ -0,0 +1,6 @@ +INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); +INSERT INTO t (id, k, v) VALUES (1, 1, 'val1'); + +INSERT INTO t2 (id, k, v) VALUES (0, 0, 'val0'); +INSERT INTO t2 (id, k, v) VALUES (1, 1, 'val1'); +INSERT INTO t2 (id, k, v) VALUES (2, 2, 'val2'); diff --git a/doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql b/doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql new file mode 100644 index 000000000000..007324b4c4b1 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql @@ -0,0 +1,2 @@ +SELECT * FROM "CatalogKeyspace".journal; +SELECT * FROM "CatalogKeyspace".magazine; diff --git a/doc/source/modules/cassandra/examples/CQL/select_data_backup.cql b/doc/source/modules/cassandra/examples/CQL/select_data_backup.cql new file mode 100644 index 000000000000..4468467a5ce4 --- /dev/null +++ b/doc/source/modules/cassandra/examples/CQL/select_data_backup.cql @@ -0,0 +1,2 @@ +SELECT * FROM t; +SELECT * FROM t2; diff --git a/doc/source/modules/cassandra/examples/RESULTS/find_backups.result b/doc/source/modules/cassandra/examples/RESULTS/find_backups.result new file mode 100644 index 000000000000..c46413064a0f --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/find_backups.result @@ -0,0 +1,4 @@ +./cassandra/data/data/"CQLKeyspace"/t-d132e240c21711e9bbee19821dcea330/backups +./cassandra/data/data/"CQLKeyspace"/t2-d993a390c22911e9b1350d927649052c/backups +./cassandra/data/data/"CatalogKeyspace"/journal-296a2d30c22a11e9b1350d927649052c/backups +./cassandra/data/data/"CatalogKeyspace"/magazine-446eae30c22a11e9b1350d927649052c/backups diff --git a/doc/source/modules/cassandra/examples/RESULTS/find_backups_table.result b/doc/source/modules/cassandra/examples/RESULTS/find_backups_table.result new file mode 100644 index 000000000000..7e01fa617b55 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/find_backups_table.result @@ -0,0 +1 @@ +./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups diff --git a/doc/source/modules/cassandra/examples/RESULTS/find_two_snapshots.result b/doc/source/modules/cassandra/examples/RESULTS/find_two_snapshots.result new file mode 100644 index 000000000000..9cfb693bd4b6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/find_two_snapshots.result @@ -0,0 +1,3 @@ +total 0 +drwxrwxr-x. 2 ec2-user ec2-user 265 Aug 19 02:44 catalog-ks +drwxrwxr-x. 2 ec2-user ec2-user 265 Aug 19 02:52 multi-ks diff --git a/doc/source/modules/cassandra/examples/RESULTS/flush_and_check.result b/doc/source/modules/cassandra/examples/RESULTS/flush_and_check.result new file mode 100644 index 000000000000..33863adf23c0 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/flush_and_check.result @@ -0,0 +1,9 @@ +total 36 +-rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:32 na-1-big-CompressionInfo.db +-rw-rw-r--. 2 ec2-user ec2-user 43 Aug 19 00:32 na-1-big-Data.db +-rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:32 na-1-big-Digest.crc32 +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:32 na-1-big-Filter.db +-rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:32 na-1-big-Index.db +-rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:32 na-1-big-Statistics.db +-rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:32 na-1-big-Summary.db +-rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:32 na-1-big-TOC.txt diff --git a/doc/source/modules/cassandra/examples/RESULTS/flush_and_check2.result b/doc/source/modules/cassandra/examples/RESULTS/flush_and_check2.result new file mode 100644 index 000000000000..d89b99126fa3 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/flush_and_check2.result @@ -0,0 +1,17 @@ +total 72 +-rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:32 na-1-big-CompressionInfo.db +-rw-rw-r--. 2 ec2-user ec2-user 43 Aug 19 00:32 na-1-big-Data.db +-rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:32 na-1-big-Digest.crc32 +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:32 na-1-big-Filter.db +-rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:32 na-1-big-Index.db +-rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:32 na-1-big-Statistics.db +-rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:32 na-1-big-Summary.db +-rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:32 na-1-big-TOC.txt +-rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:35 na-2-big-CompressionInfo.db +-rw-rw-r--. 2 ec2-user ec2-user 41 Aug 19 00:35 na-2-big-Data.db +-rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:35 na-2-big-Digest.crc32 +-rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:35 na-2-big-Filter.db +-rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:35 na-2-big-Index.db +-rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:35 na-2-big-Statistics.db +-rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:35 na-2-big-Summary.db +-rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:35 na-2-big-TOC.txt diff --git a/doc/source/modules/cassandra/examples/RESULTS/insert_data2_backup.result b/doc/source/modules/cassandra/examples/RESULTS/insert_data2_backup.result new file mode 100644 index 000000000000..23e3902d20c3 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/insert_data2_backup.result @@ -0,0 +1,13 @@ +id | name | publisher +----+---------------------------+------------------ + 1 | Couchbase Magazine | Couchbase + 0 | Apache Cassandra Magazine | Apache Cassandra + + (2 rows) + +id | name | publisher +----+---------------------------+------------------ + 1 | Couchbase Magazine | Couchbase + 0 | Apache Cassandra Magazine | Apache Cassandra + + (2 rows) diff --git a/doc/source/modules/cassandra/examples/RESULTS/no_bups.result b/doc/source/modules/cassandra/examples/RESULTS/no_bups.result new file mode 100644 index 000000000000..92811047f08e --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/no_bups.result @@ -0,0 +1 @@ +total 0 diff --git a/doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result b/doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result new file mode 100644 index 000000000000..1ed26ae119c0 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result @@ -0,0 +1,13 @@ +Snapshot Details: +Snapshot name Keyspace name Column family name True size Size on disk +multi-table CQLKeyspace t2 4.86 KiB 5.67 KiB +multi-table CQLKeyspace t 4.89 KiB 5.7 KiB +multi-ks CQLKeyspace t 4.89 KiB 5.7 KiB +multi-ks CatalogKeyspace journal 4.9 KiB 5.73 KiB +magazine CatalogKeyspace magazine 4.9 KiB 5.73 KiB +multi-table-2 CQLKeyspace t2 4.86 KiB 5.67 KiB +multi-table-2 CQLKeyspace t 4.89 KiB 5.7 KiB +catalog-ks CatalogKeyspace journal 4.9 KiB 5.73 KiB +catalog-ks CatalogKeyspace magazine 4.9 KiB 5.73 KiB + +Total TrueDiskSpaceUsed: 44.02 KiB diff --git a/doc/source/modules/cassandra/examples/RESULTS/nodetool_snapshot_help.result b/doc/source/modules/cassandra/examples/RESULTS/nodetool_snapshot_help.result new file mode 100644 index 000000000000..a58360872a28 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/nodetool_snapshot_help.result @@ -0,0 +1,54 @@ +NAME + nodetool snapshot - Take a snapshot of specified keyspaces or a snapshot + of the specified table + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] snapshot + [(-cf
| --column-family
| --table
)] + [(-kt | --kt-list | -kc | --kc.list )] + [(-sf | --skip-flush)] [(-t | --tag )] [--] [] + +OPTIONS + -cf
, --column-family
, --table
+ The table name (you must specify one and only one keyspace for using + this option) + + -h , --host + Node hostname or ip address + + -kt , --kt-list , -kc , --kc.list + The list of Keyspace.table to take snapshot.(you must not specify + only keyspace) + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -sf, --skip-flush + Do not flush memtables before snapshotting (snapshot will not + contain unflushed data) + + -t , --tag + The name of the snapshot + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [] + List of keyspaces. By default, all keyspaces diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_data2_backup.result b/doc/source/modules/cassandra/examples/RESULTS/select_data2_backup.result new file mode 100644 index 000000000000..23e3902d20c3 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/select_data2_backup.result @@ -0,0 +1,13 @@ +id | name | publisher +----+---------------------------+------------------ + 1 | Couchbase Magazine | Couchbase + 0 | Apache Cassandra Magazine | Apache Cassandra + + (2 rows) + +id | name | publisher +----+---------------------------+------------------ + 1 | Couchbase Magazine | Couchbase + 0 | Apache Cassandra Magazine | Apache Cassandra + + (2 rows) diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_data_backup.result b/doc/source/modules/cassandra/examples/RESULTS/select_data_backup.result new file mode 100644 index 000000000000..5d6a9e33bce1 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/select_data_backup.result @@ -0,0 +1,15 @@ +id | k | v +----+---+------ + 1 | 1 | val1 + 0 | 0 | val0 + + (2 rows) + + +id | k | v +----+---+------ + 1 | 1 | val1 + 0 | 0 | val0 + 2 | 2 | val2 + + (3 rows) diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_all.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_all.result new file mode 100644 index 000000000000..6ec55a023cac --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_all.result @@ -0,0 +1,4 @@ +./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/snapshots +./cassandra/data/data/cqlkeyspace/t2-d993a390c22911e9b1350d927649052c/snapshots +./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots +./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result new file mode 100644 index 000000000000..12c410f0ae9e --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result @@ -0,0 +1,3 @@ +Requested creating snapshot(s) for [CatalogKeyspace] with snapshot name [catalog-ks] and +options {skipFlush=false} +Snapshot directory: catalog-ks diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2_find.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2_find.result new file mode 100644 index 000000000000..88b549976899 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2_find.result @@ -0,0 +1,2 @@ +./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots +./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_files.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_files.result new file mode 100644 index 000000000000..8dd91b5ce805 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_files.result @@ -0,0 +1,11 @@ +total 44 +-rw-rw-r--. 1 ec2-user ec2-user 31 Aug 19 02:44 manifest.jsonZ +-rw-rw-r--. 4 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db +-rw-rw-r--. 4 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db +-rw-rw-r--. 4 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32 +-rw-rw-r--. 4 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db +-rw-rw-r--. 4 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db +-rw-rw-r--. 4 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db +-rw-rw-r--. 4 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db +-rw-rw-r--. 4 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt +-rw-rw-r--. 1 ec2-user ec2-user 814 Aug 19 02:44 schema.cql diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result new file mode 100644 index 000000000000..f296658bcbd6 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result @@ -0,0 +1,3 @@ +Requested creating snapshot(s) for ["CatalogKeyspace".journal,"CQLKeyspace".t] with snapshot +name [multi-ks] and options {skipFlush=false} +Snapshot directory: multi-ks diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables.result new file mode 100644 index 000000000000..557a6a488c31 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables.result @@ -0,0 +1,3 @@ +Requested creating snapshot(s) for ["CQLKeyspace".t,"CQLKeyspace".t2] with snapshot name [multi- +table] and options {skipFlush=false} +Snapshot directory: multi-table diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables_again.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables_again.result new file mode 100644 index 000000000000..6c09e71e9080 --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables_again.result @@ -0,0 +1,3 @@ +Requested creating snapshot(s) for ["CQLKeyspace".t,"CQLKeyspace".t2] with snapshot name [multi- +table-2] and options {skipFlush=false} +Snapshot directory: multi-table-2 diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result new file mode 100644 index 000000000000..1975468d249c --- /dev/null +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result @@ -0,0 +1,3 @@ +Requested creating snapshot(s) for [CatalogKeyspace] with snapshot name [magazine] and +options {skipFlush=false} +Snapshot directory: magazine diff --git a/doc/source/modules/cassandra/examples/YAML/auto_snapshot.yaml b/doc/source/modules/cassandra/examples/YAML/auto_snapshot.yaml new file mode 100644 index 000000000000..8f5033df4e8a --- /dev/null +++ b/doc/source/modules/cassandra/examples/YAML/auto_snapshot.yaml @@ -0,0 +1 @@ +auto_snapshot: false diff --git a/doc/source/modules/cassandra/examples/YAML/incremental_bups.yaml b/doc/source/modules/cassandra/examples/YAML/incremental_bups.yaml new file mode 100644 index 000000000000..95fccdb18950 --- /dev/null +++ b/doc/source/modules/cassandra/examples/YAML/incremental_bups.yaml @@ -0,0 +1 @@ +incremental_backups: true diff --git a/doc/source/modules/cassandra/examples/YAML/snapshot_before_compaction.yaml b/doc/source/modules/cassandra/examples/YAML/snapshot_before_compaction.yaml new file mode 100644 index 000000000000..4ee1b17a6bcb --- /dev/null +++ b/doc/source/modules/cassandra/examples/YAML/snapshot_before_compaction.yaml @@ -0,0 +1 @@ +snapshot_before_compaction: false diff --git a/doc/source/modules/cassandra/pages/cql/security.adoc b/doc/source/modules/cassandra/pages/cql/security.adoc index 175abd0535f3..7ea0620ac859 100644 --- a/doc/source/modules/cassandra/pages/cql/security.adoc +++ b/doc/source/modules/cassandra/pages/cql/security.adoc @@ -250,7 +250,7 @@ Creating a user uses the `CREATE USER` statement: [source, bnf] ---- -include::example$CQL/create_user_statement.bnf[] +include::example$BNF/create_user_statement.bnf[] ---- For example: diff --git a/doc/source/modules/cassandra/pages/development/code_style.adoc b/doc/source/modules/cassandra/pages/development/code_style.adoc index dc7320df431d..bc2edce5f6e8 100644 --- a/doc/source/modules/cassandra/pages/development/code_style.adoc +++ b/doc/source/modules/cassandra/pages/development/code_style.adoc @@ -2,16 +2,13 @@ == General Code Conventions -____ * The Cassandra project follows http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html[Sun's Java coding conventions] with an important exception: `{` and `}` are always placed on a new line -____ == Exception handling -____ * Never ever write `catch (...) {}` or `catch (...) { logger.error() }` merely to satisfy Java's compile-time exception checking. Always propagate the exception up or throw `RuntimeException` (or, if it "can't @@ -26,11 +23,9 @@ warning. * If you genuinely know an exception indicates an expected condition, it's okay to ignore it BUT this must be explicitly explained in a comment. -____ == Boilerplate -____ * Avoid redundant `@Override` annotations when implementing abstract or interface methods. * Do not implement equals or hashcode methods unless they are actually @@ -43,11 +38,9 @@ encapsulating behavior in "real" methods to either.) need multiple implementations of it. * Always include braces for nested levels of conditionals and loops. Only avoid braces for single level. -____ == Multiline statements -____ * Try to keep lines under 120 characters, but use good judgement -- it's better to exceed 120 by a little, than split a line that has no natural splitting points. @@ -70,18 +63,15 @@ var = bar == null ? doFoo() : doBar(); ---- -____ == Whitespace -____ * Please make sure to use 4 spaces instead of the tab character for all your indentation. * Many lines in many files have a bunch of trailing whitespace... Please either clean these up in a separate patch, or leave them alone, so that reviewers now and anyone reading code history later doesn't have to pay attention to whitespace diffs. -____ == Imports @@ -101,7 +91,6 @@ everything else alphabetically == Format files for IDEs -____ * IntelliJ: https://wiki.apache.org/cassandra/CodeStyle?action=AttachFile&do=view&target=intellij-codestyle.jar[intellij-codestyle.jar] * IntelliJ 13: @@ -109,4 +98,3 @@ https://gist.github.com/jdsumsion/9ab750a05c2a567c6afc[gist for IntelliJ 13] (this is a work in progress, still working on javadoc, ternary style, line continuations, etc) * Eclipse (https://github.com/tjake/cassandra-style-eclipse) -____ diff --git a/doc/source/modules/cassandra/pages/development/documentation.adoc b/doc/source/modules/cassandra/pages/development/documentation.adoc index ca2ee829312b..177258afd432 100644 --- a/doc/source/modules/cassandra/pages/development/documentation.adoc +++ b/doc/source/modules/cassandra/pages/development/documentation.adoc @@ -3,22 +3,20 @@ == How Cassandra is documented The official Cassandra documentation lives in the project's git -repository. We use a static site generator, -http://www.sphinx-doc.org/[Sphinx], to create pages hosted at -https://cassandra.apache.org/doc/latest/[cassandra.apache.org]. You'll -also find developer centric content about Cassandra internals in our +repository. +We use a static site generator, http://www.antora.org/[Antora], to create pages hosted at +https://cassandra.apache.org/doc/latest/[cassandra.apache.org]. + + -Using a static site generator often requires to use a markup language +Using a static site generator often requires the use of a markup language instead of visual editors (which some people would call good news). -Sphinx, the tool-set we use to generate our documentation, uses -http://www.sphinx-doc.org/en/stable/rest.html[reStructuredText] for -that. Markup languages allow you to format text by making use of certain -syntax elements. Your document structure will also have to follow -specific conventions. Feel free to take a look at link:..[existing -documents] to get a better idea how we use reStructuredText to write our -documents. +Antora processes http://www.asciidoc.org[Ascidoc], the markup language used to generate our documentation. +Markup languages allow you to format text using certain syntax elements. +Your document structure will also have to follow specific conventions. +Feel free to take a look at http://cassandra.apache.org/docs[existing documents] to get a better idea how we structure our documents. So how do you actually start making contributions? @@ -45,16 +43,16 @@ decide you’re ready to contribute your work. image::docs_create_branch.png[image] [arabic, start=3] -. Navigate to document sources `doc/source` to find the `.rst` file to +. Navigate to document sources `doc/source/modules` to find the `.adoc` file to edit. The URL of the document should correspond to the directory -structure. New files can be created using the "Create new file" button: +structure within the modules, where first the `component` name, such as `cassandra` is listed, and then the actual pages inside the `pages` directory. New files can be created using the "Create new file" button: image::docs_create_file.png[image] [arabic, start=4] . At this point you should be able to edit the file using the GitHub web editor. Start by naming your file and add some content. Have a look at -other existing `.rst` files to get a better idea what format elements to +other existing `.adoc` files to get a better idea what format elements to use. image::docs_editor.png[image] @@ -87,20 +85,20 @@ Significant changes to the documentation are best managed through our Jira issue tracker. Please follow the same https://cassandra.apache.org/doc/latest/development/patches.html[contribution guides] as for regular code contributions. Creating high quality content -takes a lot of effort. It’s therefor always a good idea to create a -ticket before you start and explain what you’re planing to do. This will +takes a lot of effort. It’s therefore always a good idea to create a +ticket before you start and explain what you’re planning to do. This will create the opportunity for other contributors and committers to comment on your ideas and work so far. Eventually your patch gets a formal review before it is committed. -== Working on documents locally using Sphinx +== Working on documents locally using Antora _Recommended for advanced editing_ Using the GitHub web interface should allow you to use most common layout elements including images. More advanced formatting options and -navigation elements depend on Sphinx to render correctly. Therefor it’s -a good idea to setup Sphinx locally for any serious editing. Please +navigation elements depend on Antora to render correctly. Therefore, it’s +a good idea to setup Antora locally for any serious editing. Please follow the instructions in the Cassandra source directory at `doc/README.md`. Setup is very easy (at least on OSX and Linux). diff --git a/doc/source/modules/cassandra/pages/development/gettingstarted.adoc b/doc/source/modules/cassandra/pages/development/gettingstarted.adoc index 0e7d2c3cf293..bd7039a6ddf5 100644 --- a/doc/source/modules/cassandra/pages/development/gettingstarted.adoc +++ b/doc/source/modules/cassandra/pages/development/gettingstarted.adoc @@ -35,7 +35,7 @@ how to subscribe to the mailing list. Reviewing patches is not the sole domain of committers, if others have reviewed a patch it can reduce the load on the committers allowing them to write more great features or review more patches. Follow the -instructions in `_development_how_to_review` or create a build with the +instructions in xref:development/development_how_to_review[How to review] or create a build with the patch and test it with your own workload. Add a comment to the JIRA ticket to let others know what you have done and the results of your work. (For example, "I tested this performance enhacement on our diff --git a/doc/source/modules/cassandra/pages/development/how_to_review.adoc b/doc/source/modules/cassandra/pages/development/how_to_review.adoc index f24cefb619b3..7bb04d13414d 100644 --- a/doc/source/modules/cassandra/pages/development/how_to_review.adoc +++ b/doc/source/modules/cassandra/pages/development/how_to_review.adoc @@ -3,9 +3,8 @@ When reviewing tickets in Apache JIRA, the following items should be covered as part of the review process: -*General* +== *General* -____ * Does it conform to the `code_style` guidelines? * Is there any redundant or duplicate code? * Is the code as modular as possible? @@ -13,11 +12,9 @@ ____ * Can any of the code be replaced with library functions? * Are units of measurement used in the code consistent, both internally and with the rest of the ecosystem? -____ -*Error-Handling* +== *Error-Handling* -____ * Are all data inputs and outputs checked (for the correct type, length, format, and range) and encoded? * Where third-party utilities are used, are returning errors being @@ -27,11 +24,9 @@ caught? * Are errors well-documented? Does the error message tell the user how to proceed? * Do exceptions propagate to the appropriate level in the code? -____ -*Documentation* +== *Documentation* -____ * Do comments exist and describe the intent of the code (the "why", not the "how")? * Are javadocs added where appropriate? @@ -48,11 +43,9 @@ where appropriate? * Has lib/licences been updated for third-party libs? Are they Apache License compatible? * Is the Component on the JIRA ticket set appropriately? -____ -*Testing* +== *Testing* -____ * Is the code testable? i.e. don’t add too many or hide dependencies, unable to initialize objects, test frameworks can use methods etc. * Do tests exist and are they comprehensive? @@ -69,14 +62,11 @@ applicable)? Are there any regressions? regressions w/multiple workloads? * If adding a new feature, were tests added and performed confirming it meets the expected SLA/use-case requirements for the feature? -____ -*Logging* +== *Logging* -____ * Are logging statements logged at the correct level? * Are there logs in the critical path that could affect performance? * Is there any log that could be added to communicate status or troubleshoot potential problems in this feature? * Can any unnecessary logging statement be removed? -____ diff --git a/doc/source/modules/cassandra/pages/development/patches.adoc b/doc/source/modules/cassandra/pages/development/patches.adoc index 5baac30c60fc..6bcdea14c0bc 100644 --- a/doc/source/modules/cassandra/pages/development/patches.adoc +++ b/doc/source/modules/cassandra/pages/development/patches.adoc @@ -37,7 +37,7 @@ each contribution will become a part of Cassandra. Therefore it's generally a good idea to first get some feedback on the things you plan to work on, especially about any new features or major changes to the code base. You can reach out to other developers on the mailing list or -`Slack `. +`Slack`. You should also:: * Avoid redundant work by searching for already reported issues in diff --git a/doc/source/modules/cassandra/pages/development/release_process.adoc b/doc/source/modules/cassandra/pages/development/release_process.adoc index 3c6249b10aa6..bcd77c7cbb42 100644 --- a/doc/source/modules/cassandra/pages/development/release_process.adoc +++ b/doc/source/modules/cassandra/pages/development/release_process.adoc @@ -1,10 +1,5 @@ = Release Process -depth:: - 3 - -|  | - The steps for Release Managers to create, vote and publish releases for Apache Cassandra. diff --git a/doc/source/modules/cassandra/pages/operating/backups.adoc b/doc/source/modules/cassandra/pages/operating/backups.adoc index a759b246c456..cd831b1ad4ef 100644 --- a/doc/source/modules/cassandra/pages/operating/backups.adoc +++ b/doc/source/modules/cassandra/pages/operating/backups.adoc @@ -19,293 +19,148 @@ Apache Cassandra supports two kinds of backup strategies. * Incremental Backups A _snapshot_ is a copy of a table’s SSTable files at a given time, -created via hard links. The DDL to create the table is stored as well. -Snapshots may be created by a user or created automatically. The setting -(`snapshot_before_compaction`) in `cassandra.yaml` determines if -snapshots are created before each compaction. By default -`snapshot_before_compaction` is set to false. Snapshots may be created -automatically before keyspace truncation or dropping of a table by -setting `auto_snapshot` to true (default) in `cassandra.yaml`. Truncates -could be delayed due to the auto snapshots and another setting in +created via hard links. +The DDL to create the table is stored as well. +Snapshots may be created by a user or created automatically. +The setting `snapshot_before_compaction` in the `cassandra.yaml` file determines if +snapshots are created before each compaction. +By default, `snapshot_before_compaction` is set to false. +Snapshots may be created automatically before keyspace truncation or dropping of a table by +setting `auto_snapshot` to true (default) in `cassandra.yaml`. +Truncates could be delayed due to the auto snapshots and another setting in `cassandra.yaml` determines how long the coordinator should wait for -truncates to complete. By default Cassandra waits 60 seconds for auto -snapshots to complete. +truncates to complete. +By default Cassandra waits 60 seconds for auto snapshots to complete. An _incremental backup_ is a copy of a table’s SSTable files created by -a hard link when memtables are flushed to disk as SSTables. Typically -incremental backups are paired with snapshots to reduce the backup time -as well as reduce disk space. Incremental backups are not enabled by -default and must be enabled explicitly in `cassandra.yaml` (with -`incremental_backups` setting) or with the Nodetool. Once enabled, -Cassandra creates a hard link to each SSTable flushed or streamed -locally in a `backups/` subdirectory of the keyspace data. Incremental -backups of system tables are also created. +a hard link when memtables are flushed to disk as SSTables. +Typically incremental backups are paired with snapshots to reduce the backup time +as well as reduce disk space. +Incremental backups are not enabled by default and must be enabled explicitly in `cassandra.yaml` (with +`incremental_backups` setting) or with `nodetool`. +Once enabled, Cassandra creates a hard link to each SSTable flushed or streamed +locally in a `backups/` subdirectory of the keyspace data. +Incremental backups of system tables are also created. == Data Directory Structure The directory structure of Cassandra data consists of different directories for keyspaces, and tables with the data files within the -table directories. Directories backups and snapshots to store backups +table directories. +Directories backups and snapshots to store backups and snapshots respectively for a particular table are also stored within -the table directory. The directory structure for Cassandra is -illustrated in Figure 1. +the table directory. +The directory structure for Cassandra is illustrated in Figure 1. -image::Figure_1_backups.jpg[image] +image::Figure_1_backups.jpg[Data directory structure for backups] Figure 1. Directory Structure for Cassandra Data === Setting Up Example Tables for Backups and Snapshots In this section we shall create some example data that could be used to -demonstrate incremental backups and snapshots. We have used a three node -Cassandra cluster. First, the keyspaces are created. Subsequently tables -are created within a keyspace and table data is added. We have used two -keyspaces `CQLKeyspace` and `CatalogKeyspace` with two tables within -each. Create `CQLKeyspace`: +demonstrate incremental backups and snapshots. +We have used a three node Cassandra cluster. +First, the keyspaces are created. +Then tables are created within a keyspace and table data is added. +We have used two keyspaces `CQLKeyspace` and `CatalogKeyspace` with two tables within +each. -[source,cql] ----- -CREATE KEYSPACE CQLKeyspace - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; ----- - -Create table `t` in the `CQLKeyspace` keyspace. +Create the `CQLKeyspace`: [source,cql] ---- -USE CQLKeyspace; -CREATE TABLE t ( - id int, - k int, - v text, - PRIMARY KEY (id) -); +include::example$CQL/create_ks_backup.cql[] ---- -Add data to table `t`: +Create two tables `t` and `t2` in the `CQLKeyspace` keyspace. [source,cql] ---- -INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); -INSERT INTO t (id, k, v) VALUES (1, 1, 'val1'); +include::example$CQL/create_table_backup.cql[] ---- -A table query lists the data: +Add data to the tables: [source,cql] ---- -SELECT * FROM t; ----- -results in -[source,cql] ----- -id | k | v -----+---+------ - 1 | 1 | val1 - 0 | 0 | val0 - - (2 rows) +include::example$CQL/insert_data_backup.cql[] ---- -Create another table `t2`: +Query the table to list the data: [source,cql] ---- -CREATE TABLE t2 ( - id int, - k int, - v text, - PRIMARY KEY (id) -); +include::example$CQL/select_data_backup.cql[] ---- -Add data to table `t2`: - -[source,cql] ----- -INSERT INTO t2 (id, k, v) VALUES (0, 0, 'val0'); -INSERT INTO t2 (id, k, v) VALUES (1, 1, 'val1'); -INSERT INTO t2 (id, k, v) VALUES (2, 2, 'val2'); ----- - -A table query lists table data: - -[source,cql] ----- -SELECT * FROM t2; ----- results in -[source,cql] ----- -id | k | v -----+---+------ - 1 | 1 | val1 - 0 | 0 | val0 - 2 | 2 | val2 - - (3 rows) ----- - -Create a second keyspace `CatalogKeyspace`: - -[source,cql] ----- -CREATE KEYSPACE CatalogKeyspace - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; ----- - -Create a table called `journal` in `CatalogKeyspace`: [source,cql] ---- -USE CatalogKeyspace; -CREATE TABLE journal ( - id int, - name text, - publisher text, - PRIMARY KEY (id) -); +include::example$RESULTS/select_data_backup.result[] ---- -Add data to table `journal`: +Create a second keyspace `CatalogKeyspace`: [source,cql] ---- -INSERT INTO journal (id, name, publisher) VALUES (0, 'Apache Cassandra Magazine', 'Apache Cassandra'); -INSERT INTO journal (id, name, publisher) VALUES (1, 'Couchbase Magazine', 'Couchbase'); +include::example$CQL/create_ks2_backup.cql[] ---- -Query table `journal` to list its data: +Create two tables `journal` and `magazine` in `CatalogKeyspace`: [source,cql] ---- -SELECT * FROM journal; ----- -results in -[source,cql] +include::example$CQL/create_table2_backup.cql[] ---- -id | name | publisher -----+---------------------------+------------------ - 1 | Couchbase Magazine | Couchbase - 0 | Apache Cassandra Magazine | Apache Cassandra - (2 rows) ----- - -Add another table called `magazine`: +Add data to the tables: [source,cql] ---- -CREATE TABLE magazine ( - id int, - name text, - publisher text, - PRIMARY KEY (id) -); +include::example$CQL/insert_data2_backup.cql[] ---- -Add table data to `magazine`: +Query the tables to list the data: [source,cql] ---- -INSERT INTO magazine (id, name, publisher) VALUES (0, 'Apache Cassandra Magazine', 'Apache Cassandra'); -INSERT INTO magazine (id, name, publisher) VALUES (1, 'Couchbase Magazine', 'Couchbase'); +include::example$CQL/select_data2_backup.cql[] ---- -List table `magazine`’s data: +results in [source,cql] ---- -SELECT * from magazine; ----- -results in -[source,cql] ----- -id | name | publisher -----+---------------------------+------------------ - 1 | Couchbase Magazine | Couchbase - 0 | Apache Cassandra Magazine | Apache Cassandra - - (2 rows) +include::example$RESULTS/select_data2_backup.result[] ---- == Snapshots -In this section including sub-sections we shall demonstrate creating -snapshots. The command used to create a snapshot is `nodetool snapshot` -and its usage is as follows: +In this section, we demonstrate creating snapshots. +The command used to create a snapshot is `nodetool snapshot` with the usage: [source,bash] ---- -$ nodetool help snapshot ----- -results in -[source,none] +include::example$BASH/nodetool_snapshot.sh[] ---- -NAME - nodetool snapshot - Take a snapshot of specified keyspaces or a snapshot - of the specified table - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] snapshot - [(-cf
| --column-family
| --table
)] - [(-kt | --kt-list | -kc | --kc.list )] - [(-sf | --skip-flush)] [(-t | --tag )] [--] [] - -OPTIONS - -cf
, --column-family
, --table
- The table name (you must specify one and only one keyspace for using - this option) - - -h , --host - Node hostname or ip address - -kt , --kt-list , -kc , --kc.list - The list of Keyspace.table to take snapshot.(you must not specify - only keyspace) - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -sf, --skip-flush - Do not flush memtables before snapshotting (snapshot will not - contain unflushed data) - - -t , --tag - The name of the snapshot - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options +results in - [] - List of keyspaces. By default, all keyspaces +[source, plaintext] +---- +include::example$RESULTS/nodetool_snapshot_help.result[] ---- === Configuring for Snapshots To demonstrate creating snapshots with Nodetool on the commandline we -have set `auto_snapshots` setting to `false` in `cassandra.yaml`: +have set `auto_snapshots` setting to `false` in the `cassandra.yaml` file: [source,yaml] ---- -auto_snapshot: false +include::example$YAML/auto_snapshot.yaml[] ---- Also set `snapshot_before_compaction` to `false` to disable creating @@ -313,67 +168,50 @@ snapshots automatically before compaction: [source,yaml] ---- -snapshot_before_compaction: false +include::example$YAML/snapshot_before_compaction.yaml[] ---- === Creating Snapshots -To demonstrate creating snapshots start with no snapshots. Search for -snapshots and none get listed: +Before creating any snapshots, search for snapshots and none will be listed: [source,bash] ---- -$ find -name snapshots +include::example$BASH/find_snapshots.sh[] ---- We shall be using the example keyspaces and tables to create snapshots. ==== Taking Snapshots of all Tables in a Keyspace -To take snapshots of all tables in a keyspace and also optionally tag -the snapshot the syntax becomes: +Using the syntax above, create a snapshot called `catalog-ks` for all the tables +in the `CatalogKeyspace` keyspace: [source,bash] ---- -$ nodetool snapshot --tag -- +include::example$BASH/snapshot_backup2.sh[] ---- -As an example create a snapshot called `catalog-ks` for all the tables -in the `catalogkeyspace` keyspace: - -[source,bash] ----- -$ nodetool snapshot --tag catalog-ks -- catalogkeyspace ----- results in + [source,none] ---- -Requested creating snapshot(s) for [catalogkeyspace] with snapshot name [catalog-ks] and -options {skipFlush=false} -Snapshot directory: catalog-ks +include::example$RESULTS/snapshot_backup2.result[] ---- -Search for snapshots and `snapshots` directories for the tables -`journal` and `magazine`, which are in the `catalogkeyspace` keyspace -should get listed: +Using the `find` command above, the snapshots and `snapshots` directories +are now found with listed files similar to: -[source,bash] ----- -$ find -name snapshots ----- -results in -[source,none] +[source, plaintext] ---- -./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots -./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots +include::example$RESULTS/snapshot_backup2_find.result[] ---- -Snapshots of all tables in multiple keyspaces may be created similarly, -as an example: +Snapshots of all tables in multiple keyspaces may be created similarly: [source,bash] ---- -$ nodetool snapshot --tag catalog-cql-ks --catalogkeyspace,cqlkeyspace +include::example$BASH/snapshot_both_backups.sh[] ---- ==== Taking Snapshots of Single Table in a Keyspace @@ -383,79 +221,78 @@ syntax becomes as follows: [source,bash] ---- -$ nodetool snapshot --tag --table
-- +include::example$BASH/snapshot_one_table.sh[] ---- -As an example create a snapshot for table `magazine` in keyspace -`catalokeyspace`: +Using the syntax above, create a snapshot for table `magazine` in keyspace `CatalogKeyspace`: [source,bash] ---- -$ nodetool snapshot --tag magazine --table magazine --catalogkeyspace +include::example$BASH/snapshot_one_table2.sh[] ---- + results in -[source,none] + +[source, plaintext] ---- -Requested creating snapshot(s) for [catalogkeyspace] with snapshot name [magazine] and -options {skipFlush=false} -Snapshot directory: magazine +include::example$RESULTS/snapshot_one_table2.result[] ---- ==== Taking Snapshot of Multiple Tables from same Keyspace To take snapshots of multiple tables in a keyspace the list of -_Keyspace.table_ must be specified with option `--kt-list`. As an -example create snapshots for tables `t` and `t2` in the `cqlkeyspace` -keyspace: +_Keyspace.table_ must be specified with option `--kt-list`. +For example, create snapshots for tables `t` and `t2` in the `CQLKeyspace` keyspace: [source,bash] ---- -$nodetool snapshot --kt-list cqlkeyspace.t,cqlkeyspace.t2 --tag multi-table +include::example$BASH/snapshot_mult_tables.sh[] ---- + results in -[source,none] + +[source,plaintext] ---- -Requested creating snapshot(s) for [cqlkeyspace.t,cqlkeyspace.t2] with snapshot name [multi- -table] and options {skipFlush=false} -Snapshot directory: multi-table +include::example$RESULTS/snapshot_mult_tables.result[] ---- -Multiple snapshots of the same set of tables may be created and tagged -with a different name. As an example, create another snapshot for the -same set of tables `t` and `t2` in the `cqlkeyspace` keyspace and tag -the snapshots differently: +Multiple snapshots of the same set of tables may be created and tagged with a different name. +As an example, create another snapshot for the same set of tables `t` and `t2` in the `CQLKeyspace` +keyspace and tag the snapshots differently: [source,bash] ---- -$ nodetool snapshot --kt-list cqlkeyspace.t,cqlkeyspace.t2 --tag -multi-table-2 +include::example$BASH/snapshot_mult_tables_again.sh[] ---- + results in -[source,none] + +[source, plaintext] ---- -Requested creating snapshot(s) for [cqlkeyspace.t,cqlkeyspace.t2] with snapshot name [multi- -table-2] and options {skipFlush=false} -Snapshot directory: multi-table-2 +include::example$RESULTS/snapshot_mult_tables_again.result[] ---- ==== Taking Snapshot of Multiple Tables from Different Keyspaces To take snapshots of multiple tables that are in different keyspaces the command syntax is the same as when multiple tables are in the same -keyspace. Each _keyspace.table_ must be specified separately in the -`--kt-list` option. As an example, create a snapshot for table `t` in +keyspace. +Each .
must be specified separately in the +`--kt-list` option. + +For example, create a snapshot for table `t` in the `cqlkeyspace` and table `journal` in the catalogkeyspace and tag the snapshot `multi-ks`. [source,bash] ---- -$ nodetool snapshot --kt-list catalogkeyspace.journal,cqlkeyspace.t --tag multi-ks +include::example$BASH/snapshot_mult_ks.sh[] ---- -[source,none] + +results in +[source, plaintext] ---- -Requested creating snapshot(s) for [catalogkeyspace.journal,cqlkeyspace.t] with snapshot -name [multi-ks] and options {skipFlush=false} -Snapshot directory: multi-ks +include::example$RESULTS/snapshot_mult_ks.result[] ---- === Listing Snapshots @@ -465,24 +302,14 @@ snapshots that we created in the preceding examples get listed: [source,bash] ---- -$ nodetool listsnapshots +include::example$BASH/nodetool_list_snapshots.sh[] ---- + results in -[source,none] ----- -Snapshot Details: -Snapshot name Keyspace name Column family name True size Size on disk -multi-table cqlkeyspace t2 4.86 KiB 5.67 KiB -multi-table cqlkeyspace t 4.89 KiB 5.7 KiB -multi-ks cqlkeyspace t 4.89 KiB 5.7 KiB -multi-ks catalogkeyspace journal 4.9 KiB 5.73 KiB -magazine catalogkeyspace magazine 4.9 KiB 5.73 KiB -multi-table-2 cqlkeyspace t2 4.86 KiB 5.67 KiB -multi-table-2 cqlkeyspace t 4.89 KiB 5.7 KiB -catalog-ks catalogkeyspace journal 4.9 KiB 5.73 KiB -catalog-ks catalogkeyspace magazine 4.9 KiB 5.73 KiB -Total TrueDiskSpaceUsed: 44.02 KiB +[source, plaintext] +---- +include::example$RESULTS/nodetool_list_snapshots.result[] ---- === Finding Snapshots Directories @@ -492,83 +319,70 @@ command: [source,bash] ---- -$ find -name snapshots +include::example$BASH/find_snapshots.sh[] ---- + results in -[source,none] + +[source, plaintext] ---- -./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/snapshots -./cassandra/data/data/cqlkeyspace/t2-d993a390c22911e9b1350d927649052c/snapshots -./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots -./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots -[ec2-user@ip-10-0-2-238 ~]$ +include::example$RESULTS/snapshot_all.result[] ---- -To list the snapshots for a particular table first change directory ( -with `cd`) to the `snapshots` directory for the table. As an example, -list the snapshots for the `catalogkeyspace/journal` table. Two -snapshots get listed: +To list the snapshots for a particular table first change to the snapshots directory for that table. +For example, list the snapshots for the `CatalogKeyspace/journal` table: [source,bash] ---- -$ cd ./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/snapshots -$ ls -l +include::example$BASH/find_two_snapshots.sh[] ---- + results in -[source,none] + +[source, plaintext] ---- -total 0 -drwxrwxr-x. 2 ec2-user ec2-user 265 Aug 19 02:44 catalog-ks -drwxrwxr-x. 2 ec2-user ec2-user 265 Aug 19 02:52 multi-ks +include::example$RESULTS/find_two_snapshots.result[] ---- A `snapshots` directory lists the SSTable files in the snapshot. -`Schema.cql` file is also created in each snapshot for the schema -definition DDL that may be run in CQL to create the table when restoring -from a snapshot: +A `schema.cql` file is also created in each snapshot that defines schema +that can recreate the table with CQL when restoring from a snapshot: [source,bash] ---- -cd catalog-ks -$ ls -l +include::example$BASH/snapshot_files.sh[] ---- + results in -[source,none] ----- -total 44 --rw-rw-r--. 1 ec2-user ec2-user 31 Aug 19 02:44 manifest.jsonZ --rw-rw-r--. 4 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db --rw-rw-r--. 4 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db --rw-rw-r--. 4 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32 --rw-rw-r--. 4 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db --rw-rw-r--. 4 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db --rw-rw-r--. 4 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db --rw-rw-r--. 4 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db --rw-rw-r--. 4 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt --rw-rw-r--. 1 ec2-user ec2-user 814 Aug 19 02:44 schema.cql +[source, plaintext] +---- +include::example$RESULTS/snapshot_files.result[] ---- === Clearing Snapshots Snapshots may be cleared or deleted with the `nodetool clearsnapshot` command. Either a specific snapshot name must be specified or the `–all` -option must be specified. As an example delete a snapshot called -`magazine` from keyspace `cqlkeyspace`: +option must be specified. + +For example, delete a snapshot called `magazine` from keyspace `CQLKeyspace`: [source,bash] ---- -$ nodetool clearsnapshot -t magazine – cqlkeyspace +include::example$BASH/nodetool_clearsnapshot.sh[] ---- -or delete all snapshots from cqlkeyspace with the –all option: + +or delete all snapshots from `CQLKeyspace` with the –all option: + [source,bash] ---- -nodetool clearsnapshot –all -- cqlkeyspace +include::example$BASH/nodetool_clearsnapshot_all.sh[] ---- == Incremental Backups -In the following sub-sections we shall discuss configuring and creating +In the following sections, we shall discuss configuring and creating incremental backups. === Configuring for Incremental Backups @@ -578,18 +392,18 @@ To create incremental backups set `incremental_backups` to `true` in [source,yaml] ---- -incremental_backups: true +include::example$YAML/incremental_bups.yaml[] ---- -This is the only setting needed to create incremental backups. By -default `incremental_backups` setting is set to `false` because a new +This is the only setting needed to create incremental backups. +By default `incremental_backups` setting is set to `false` because a new set of SSTable files is created for each data flush and if several CQL statements are to be run the `backups` directory could fill up quickly -and use up storage that is needed to store table data. Incremental -backups may also be enabled on the command line with the Nodetool -command `nodetool enablebackup`. Incremental backups may be disabled -with `nodetool disablebackup` command. Status of incremental backups, -whether they are enabled may be found with `nodetool statusbackup`. +and use up storage that is needed to store table data. +Incremental backups may also be enabled on the command line with the nodetool +command `nodetool enablebackup`. +Incremental backups may be disabled with `nodetool disablebackup` command. +Status of incremental backups, whether they are enabled may be checked with `nodetool statusbackup`. === Creating Incremental Backups @@ -598,9 +412,7 @@ command. Incremental backups get created. [source,bash] ---- -$ nodetool flush cqlkeyspace t -$ nodetool flush cqlkeyspace t2 -$ nodetool flush catalogkeyspace journal magazine +include::example$BASH/nodetool_flush.sh[] ---- === Finding Incremental Backups @@ -610,201 +422,84 @@ within a table directory. Backups may be found with following command. [source,bash] ---- -$ find -name backups +include::example$BASH/find_backups.sh[] ---- results in [source,none] ---- -./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups -./cassandra/data/data/cqlkeyspace/t2-d993a390c22911e9b1350d927649052c/backups -./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/backups -./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups +include::example$RESULTS/find_backups.result[] ---- === Creating an Incremental Backup This section discusses how incremental backups are created in more -detail starting with when a new keyspace is created and a table is -added. Create a keyspace called `CQLKeyspace` (arbitrary name). - -[source,cql] ----- -CREATE KEYSPACE CQLKeyspace - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3} ----- - -Create a table called `t` within the `CQLKeyspace` keyspace: - -[source,cql] ----- -USE CQLKeyspace; -CREATE TABLE t ( - id int, - k int, - v text, - PRIMARY KEY (id) -); ----- +detail using the keyspace and table previously created. Flush the keyspace and table: [source,bash] ---- -$ nodetool flush cqlkeyspace t +include::example$BASH/nodetool_flush_table.sh[] ---- -Search for backups and a `backups` directory should get listed even -though we have added no table data yet. +A search for backups and a `backups` directory will list a backup directory, +even if we have added no table data yet. [source,bash] ---- -$ find -name backups ----- -results in -[source,none] ----- -./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups +include::example$BASH/find_backups.sh[] ---- -Change directory to the `backups` directory and list files and no files -get listed as no table data has been added yet: - -[source,bash] ----- -$ cd ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups -$ ls -l ----- results in -[source,none] ----- -total 0 ----- - -Next, add a row of data to table `t` that we created: - -[source,cql] ----- -INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); ----- - -Run the `nodetool flush` command to flush table data: -[source,bash] +[source,plaintext] ---- -$ nodetool flush cqlkeyspace t +include::example$RESULTS/find_backups_table.result[] ---- -List the files and directories in the `backups` directory and SSTable -files for an incremental backup get listed: +Checking the `backups` directory will show that there are also no backup files: [source,bash] ---- -$ cd ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups -$ ls -l ----- -results in -[source,none] ----- -total 36 --rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:32 na-1-big-CompressionInfo.db --rw-rw-r--. 2 ec2-user ec2-user 43 Aug 19 00:32 na-1-big-Data.db --rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:32 na-1-big-Digest.crc32 --rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:32 na-1-big-Filter.db --rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:32 na-1-big-Index.db --rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:32 na-1-big-Statistics.db --rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:32 na-1-big-Summary.db --rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:32 na-1-big-TOC.txt +include::example$BASH/check_backups.sh[] ---- -Add another row of data: +results in -[source,cql] +[source, plaintext] ---- -INSERT INTO t (id, k, v) VALUES (1, 1, 'val1'); +include::example$RESULTS/no_bups.result[] ---- -Again, run the `nodetool flush` command: +If a row of data is added to the data, running the `nodetool flush` command will +flush the table data and an incremental backup will be created: [source,bash] ---- -$ nodetool flush cqlkeyspace t +include::example$BASH/flush_and_check.sh[] ---- -A new incremental backup gets created for the new data added. List the -files in the `backups` directory for table `t` and two sets of SSTable -files get listed, one for each incremental backup. The SSTable files are -timestamped, which distinguishes the first incremental backup from the -second: +results in -[source,bash] +[source, plaintext] ---- -$ ls -l +include::example$RESULTS/flush_and_check.result[] ---- -results in -[source,none] ----- -total 72 --rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:32 na-1-big-CompressionInfo.db --rw-rw-r--. 2 ec2-user ec2-user 43 Aug 19 00:32 na-1-big-Data.db --rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:32 na-1-big-Digest.crc32 --rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:32 na-1-big-Filter.db --rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:32 na-1-big-Index.db --rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:32 na-1-big-Statistics.db --rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:32 na-1-big-Summary.db --rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:32 na-1-big-TOC.txt --rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 00:35 na-2-big-CompressionInfo.db --rw-rw-r--. 2 ec2-user ec2-user 41 Aug 19 00:35 na-2-big-Data.db --rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 00:35 na-2-big-Digest.crc32 --rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 00:35 na-2-big-Filter.db --rw-rw-r--. 2 ec2-user ec2-user 8 Aug 19 00:35 na-2-big-Index.db --rw-rw-r--. 2 ec2-user ec2-user 4673 Aug 19 00:35 na-2-big-Statistics.db --rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 00:35 na-2-big-Summary.db --rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 00:35 na-2-big-TOC.txt ----- - -The `backups` directory for table `cqlkeyspace/t` is created within the -`data` directory for the table: -[source,bash] ----- -$ cd ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330 && ls -l ----- -results in -[source,none] ----- -total 36 -drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:30 backups --rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 02:30 na-1-big-CompressionInfo.db --rw-rw-r--. 2 ec2-user ec2-user 79 Aug 19 02:30 na-1-big-Data.db --rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 02:30 na-1-big-Digest.crc32 --rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:30 na-1-big-Filter.db --rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:30 na-1-big-Index.db --rw-rw-r--. 2 ec2-user ec2-user 4696 Aug 19 02:30 na-1-big-Statistics.db --rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 02:30 na-1-big-Summary.db --rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 02:30 na-1-big-TOC.txt ----- +[NOTE] +.note +==== +The `backups` directory for any table, such as `cqlkeyspace/t` is created in the +`data` directory for that table. +==== -The incremental backups for the other keyspaces/tables get created -similarly. As an example the `backups` directory for table -`catalogkeyspace/magazine` is created within the data directory: +Adding another row of data and flushing will result in another set of incremental backup files. +The SSTable files are timestamped, which distinguishes the first incremental backup from the +second: [source,none] ---- -$ cd ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c && ls -l ----- -results in -[source,none] ----- -total 36 -drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:38 backups --rw-rw-r--. 2 ec2-user ec2-user 47 Aug 19 02:38 na-1-big-CompressionInfo.db --rw-rw-r--. 2 ec2-user ec2-user 97 Aug 19 02:38 na-1-big-Data.db --rw-rw-r--. 2 ec2-user ec2-user 10 Aug 19 02:38 na-1-big-Digest.crc32 --rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Filter.db --rw-rw-r--. 2 ec2-user ec2-user 16 Aug 19 02:38 na-1-big-Index.db --rw-rw-r--. 2 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db --rw-rw-r--. 2 ec2-user ec2-user 56 Aug 19 02:38 na-1-big-Summary.db --rw-rw-r--. 2 ec2-user ec2-user 92 Aug 19 02:38 na-1-big-TOC.txt +include::example$RESULTS/flush_and_check2.result[] ---- == Restoring from Incremental Backups and Snapshots From 00c27330be76fbce6bf294fc0505405a2719699c Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 28 Jul 2020 17:35:57 -0700 Subject: [PATCH 017/115] more conversion and cleanup --- .../examples/BASH/nodetool_clearsnapshot.sh | 2 +- .../BASH/nodetool_clearsnapshot_all.sh | 2 +- .../cassandra/examples/BASH/nodetool_flush.sh | 6 +- .../examples/BASH/snapshot_backup2.sh | 2 +- .../examples/BASH/snapshot_both_backups.sh | 2 +- .../examples/BASH/snapshot_mult_ks.sh | 2 +- .../examples/BASH/snapshot_mult_tables.sh | 2 +- .../BASH/snapshot_mult_tables_again.sh | 2 +- .../examples/BASH/snapshot_one_table2.sh | 2 +- .../examples/CQL/create_ks2_backup.cql | 2 +- .../examples/CQL/create_ks_backup.cql | 2 +- .../examples/CQL/create_table2_backup.cql | 2 +- .../examples/CQL/create_table_backup.cql | 2 +- .../examples/CQL/select_data2_backup.cql | 4 +- .../examples/RESULTS/find_backups.result | 8 +- .../RESULTS/nodetool_list_snapshots.result | 18 +- .../examples/RESULTS/snapshot_backup2.result | 2 +- .../examples/RESULTS/snapshot_mult_ks.result | 2 +- .../RESULTS/snapshot_one_table2.result | 2 +- .../pages/operating/audit_logging.adoc | 88 +++-- .../cassandra/pages/operating/backups.adoc | 24 +- .../pages/operating/bulk_loading.adoc | 312 ++++++++---------- 22 files changed, 223 insertions(+), 267 deletions(-) diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh index 1599d5d4a788..a327ad17f453 100644 --- a/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh @@ -1 +1 @@ -$ nodetool clearsnapshot -t magazine "CQLKeyspace" +$ nodetool clearsnapshot -t magazine cqlkeyspace diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh index 2db7c29ae60d..a22841d74463 100644 --- a/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh @@ -1 +1 @@ -$ nodetool clearsnapshot -all "CQLKeyspace" +$ nodetool clearsnapshot -all cqlkeyspace diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh b/doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh index f001952e4d64..960b852961a7 100644 --- a/doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh +++ b/doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh @@ -1,3 +1,3 @@ -$ nodetool flush "CQLKeyspace" t -$ nodetool flush "CQLKeyspace" t2 -$ nodetool flush "CatalogKeyspace" journal magazine +$ nodetool flush cqlkeyspace t +$ nodetool flush cqlkeyspace t2 +$ nodetool flush catalogkeyspace journal magazine diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh index e93a88a4f12f..6d29f0aaa4f6 100644 --- a/doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh @@ -1 +1 @@ -$ nodetool snapshot --tag catalog-ks "CatalogKeyspace" +$ nodetool snapshot --tag catalog-ks catalogkeyspace diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh index 558ff2f0e6cd..0966070dbe92 100644 --- a/doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh @@ -1 +1 @@ -$ nodetool snapshot --tag catalog-cql-ks "CatalogKeyspace","CQLKeyspace" +$ nodetool snapshot --tag catalog-cql-ks catalogkeyspace, cqlkeyspace diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh index c940acf49384..fed3d3c1b893 100644 --- a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh @@ -1 +1 @@ -$ nodetool snapshot --kt-list "CatalogKeyspace".journal,"CQLKeyspace".t --tag multi-ks +$ nodetool snapshot --kt-list catalogkeyspace.journal,cqlkeyspace.t --tag multi-ks diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh index aa0ef58ee841..ad3a0d2b7340 100644 --- a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh @@ -1 +1 @@ -$ nodetool snapshot --kt-list "CQLKeyspace".t,"CQLKeyspace".t2 --tag multi-table +$ nodetool snapshot --kt-list cqlkeyspace.t,cqlkeyspace.t2 --tag multi-table diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh index fd07802b68c7..f676f5bca010 100644 --- a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh @@ -1 +1 @@ -$ nodetool snapshot --kt-list "CQLKeyspace".t,"CQLKeyspace".t2 --tag multi-table-2 +$ nodetool snapshot --kt-list cqlkeyspace.t, cqlkeyspace.t2 --tag multi-table-2 diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh b/doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh index 657b7db949b2..738771027642 100644 --- a/doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh +++ b/doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh @@ -1 +1 @@ -$ nodetool snapshot --tag magazine --table magazine "CatalogKeyspace" +$ nodetool snapshot --tag magazine --table magazine catalogkeyspace diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql b/doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql index 29435651ed64..52f9308f9759 100644 --- a/doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql +++ b/doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql @@ -1,2 +1,2 @@ -CREATE KEYSPACE CatalogKeyspace +CREATE KEYSPACE catalogkeyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql b/doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql index 503041dddb0b..593490474a5a 100644 --- a/doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql +++ b/doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql @@ -1,2 +1,2 @@ -CREATE KEYSPACE CQLKeyspace +CREATE KEYSPACE cqlkeyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; diff --git a/doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql b/doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql index 9e25bc1ae6ae..f3393008f520 100644 --- a/doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql +++ b/doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql @@ -1,4 +1,4 @@ -USE CatalogKeyspace; +USE catalogkeyspace; CREATE TABLE journal ( id int, name text, diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_backup.cql b/doc/source/modules/cassandra/examples/CQL/create_table_backup.cql index 5a5184b2c20c..c80b99969d37 100644 --- a/doc/source/modules/cassandra/examples/CQL/create_table_backup.cql +++ b/doc/source/modules/cassandra/examples/CQL/create_table_backup.cql @@ -1,4 +1,4 @@ -USE "CQLKeyspace"; +USE cqlkeyspace; CREATE TABLE t ( id int, k int, diff --git a/doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql b/doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql index 007324b4c4b1..7a409d75264f 100644 --- a/doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql +++ b/doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql @@ -1,2 +1,2 @@ -SELECT * FROM "CatalogKeyspace".journal; -SELECT * FROM "CatalogKeyspace".magazine; +SELECT * FROM catalogkeyspace.journal; +SELECT * FROM catalogkeyspace.magazine; diff --git a/doc/source/modules/cassandra/examples/RESULTS/find_backups.result b/doc/source/modules/cassandra/examples/RESULTS/find_backups.result index c46413064a0f..156b5694a09d 100644 --- a/doc/source/modules/cassandra/examples/RESULTS/find_backups.result +++ b/doc/source/modules/cassandra/examples/RESULTS/find_backups.result @@ -1,4 +1,4 @@ -./cassandra/data/data/"CQLKeyspace"/t-d132e240c21711e9bbee19821dcea330/backups -./cassandra/data/data/"CQLKeyspace"/t2-d993a390c22911e9b1350d927649052c/backups -./cassandra/data/data/"CatalogKeyspace"/journal-296a2d30c22a11e9b1350d927649052c/backups -./cassandra/data/data/"CatalogKeyspace"/magazine-446eae30c22a11e9b1350d927649052c/backups +./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups +./cassandra/data/data/cqlkeyspace/t2-d993a390c22911e9b1350d927649052c/backups +./cassandra/data/data/catalogkeyspace/journal-296a2d30c22a11e9b1350d927649052c/backups +./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups diff --git a/doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result b/doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result index 1ed26ae119c0..15503eded916 100644 --- a/doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result +++ b/doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result @@ -1,13 +1,13 @@ Snapshot Details: Snapshot name Keyspace name Column family name True size Size on disk -multi-table CQLKeyspace t2 4.86 KiB 5.67 KiB -multi-table CQLKeyspace t 4.89 KiB 5.7 KiB -multi-ks CQLKeyspace t 4.89 KiB 5.7 KiB -multi-ks CatalogKeyspace journal 4.9 KiB 5.73 KiB -magazine CatalogKeyspace magazine 4.9 KiB 5.73 KiB -multi-table-2 CQLKeyspace t2 4.86 KiB 5.67 KiB -multi-table-2 CQLKeyspace t 4.89 KiB 5.7 KiB -catalog-ks CatalogKeyspace journal 4.9 KiB 5.73 KiB -catalog-ks CatalogKeyspace magazine 4.9 KiB 5.73 KiB +multi-table cqlkeyspace t2 4.86 KiB 5.67 KiB +multi-table cqlkeyspace t 4.89 KiB 5.7 KiB +multi-ks cqlkeyspace t 4.89 KiB 5.7 KiB +multi-ks catalogkeyspace journal 4.9 KiB 5.73 KiB +magazine catalogkeyspace magazine 4.9 KiB 5.73 KiB +multi-table-2 cqlkeyspace t2 4.86 KiB 5.67 KiB +multi-table-2 cqlkeyspace t 4.89 KiB 5.7 KiB +catalog-ks catalogkeyspace journal 4.9 KiB 5.73 KiB +catalog-ks catalogkeyspace magazine 4.9 KiB 5.73 KiB Total TrueDiskSpaceUsed: 44.02 KiB diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result index 12c410f0ae9e..8276d520394a 100644 --- a/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result @@ -1,3 +1,3 @@ -Requested creating snapshot(s) for [CatalogKeyspace] with snapshot name [catalog-ks] and +Requested creating snapshot(s) for [catalogkeyspace] with snapshot name [catalog-ks] and options {skipFlush=false} Snapshot directory: catalog-ks diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result index f296658bcbd6..61dff939e276 100644 --- a/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result @@ -1,3 +1,3 @@ -Requested creating snapshot(s) for ["CatalogKeyspace".journal,"CQLKeyspace".t] with snapshot +Requested creating snapshot(s) for [catalogkeyspace.journal,cqlkeyspace.t] with snapshot name [multi-ks] and options {skipFlush=false} Snapshot directory: multi-ks diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result b/doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result index 1975468d249c..c147889242c7 100644 --- a/doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result +++ b/doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result @@ -1,3 +1,3 @@ -Requested creating snapshot(s) for [CatalogKeyspace] with snapshot name [magazine] and +Requested creating snapshot(s) for [catalogkeyspace] with snapshot name [magazine] and options {skipFlush=false} Snapshot directory: magazine diff --git a/doc/source/modules/cassandra/pages/operating/audit_logging.adoc b/doc/source/modules/cassandra/pages/operating/audit_logging.adoc index bd84fd073d86..345e204b3b68 100644 --- a/doc/source/modules/cassandra/pages/operating/audit_logging.adoc +++ b/doc/source/modules/cassandra/pages/operating/audit_logging.adoc @@ -1,45 +1,40 @@ = Audit Logging Audit logging in Cassandra logs every incoming CQL command request, -Authentication (successful as well as unsuccessful login) to C* node. -Currently, there are two implementations provided, the custom logger can -be implemented and injected with the class name as a parameter in -cassandra.yaml. +as well as authentication (successful/unsuccessful login) to a Cassandra node. +Currently, there are two implementations provided. +The custom logger can be implemented and injected with the class name as a parameter in +the `cassandra.yaml` file. -* `BinAuditLogger` An efficient way to log events to file in a binary -format. -* `FileAuditLogger` Logs events to `audit/audit.log` file using slf4j -logger. +* `BinAuditLogger`: an efficient way to log events to file in a binary +format (community-recommended logger for performance) +* `FileAuditLogger`: logs events to `audit/audit.log` file using slf4j +logger -_Recommendation_ `BinAuditLogger` is a community recommended logger -considering the performance +== What does audit logging captures -== What does it capture +Audit logging captures following events: -Audit logging captures following events - -* Successful as well as unsuccessful login attempts. -* All database commands executed via Native protocol (CQL) attempted or -successfully executed. +* Successful as well as unsuccessful login attempts +* All database commands executed via native CQL protocol attempted or +successfully executed == Limitations Executing prepared statements will log the query as provided by the -client in the prepare call, along with the execution time stamp and all -other attributes (see below). Actual values bound for prepared statement -execution will not show up in the audit log. +client in the prepare call, along with the execution timestamp and all +other attributes (see below). +Actual values bound for prepared statement execution will not show up in the audit log. -== What does it log +== What does audit logging logs Each audit log implementation has access to the following attributes, and for the default text based logger these fields are concatenated with -[.title-ref]#|# s to yield the final message. +pipes to yield the final message. -____ * `user`: User name(if available) * `host`: Host IP, where the command is being executed -* `source ip address`: Source IP address from where the request -initiated +* `source ip address`: Source IP address from where the request initiated * `source port`: Source port number from where the request initiated * `timestamp`: unix time stamp * `type`: Type of the request (SELECT, INSERT, etc.,) @@ -49,17 +44,16 @@ be executed * `scope` - Table/Aggregate name/ function name/ trigger name etc., as applicable * `operation` - CQL command being executed -____ == How to configure -Auditlog can be configured using cassandra.yaml. If you want to try -Auditlog on one node, it can also be enabled and configured using -`nodetool`. +Auditlog can be configured using the `cassandra.yaml` file. +To use audit logging on one node, either edit that file or enable and configure using `nodetool`. === cassandra.yaml configurations for AuditLog -____ +The following options are supported: + * `enabled`: This option enables/ disables audit log * `logger`: Class name of the logger/ custom logger. * `audit_logs_dir`: Auditlogs directory location, if not set, default to @@ -79,15 +73,14 @@ be excluded from audit log, default - excludes no category audit log, default - includes all users * `excluded_users`: Comma separated list of users to be excluded from audit log, default - excludes no user -____ List of available categories are: QUERY, DML, DDL, DCL, OTHER, AUTH, ERROR, PREPARE === NodeTool command to enable AuditLog -`enableauditlog`: Enables AuditLog with yaml defaults. yaml -configurations can be overridden using options via nodetool command. +The `nodetool enableauditlog` command enables AuditLog with the `cassandra.yaml` file defaults. +Those defaults can be overridden using options with this nodetool command. [source,none] ---- @@ -124,7 +117,7 @@ nodetool enableauditlog === NodeTool command to disable AuditLog -`disableauditlog`: Disables AuditLog. +The `nodetool disableauditlog` command disables AuditLog. [source,none] ---- @@ -133,11 +126,8 @@ nodetool disableuditlog === NodeTool command to reload AuditLog filters -`enableauditlog`: NodeTool enableauditlog command can be used to reload -auditlog filters when called with default or previous `loggername` and -updated filters - -E.g., +The `nodetool enableauditlog` command can be used to reload auditlog filters with either defaults or previous `loggername` and +updated filters: [source,none] ---- @@ -146,8 +136,7 @@ nodetool enableauditlog --loggername --included-k == View the contents of AuditLog Files -`auditlogviewer` is the new tool introduced to help view the contents of -binlog file in human readable text format. +The `auditlogviewer` is used to view the contents of the audit binlog file in human readable text format. [source,none] ---- @@ -166,14 +155,14 @@ auditlogviewer [...] [options] `-h,--help`:: display this help message -For example, to dump the contents of audit log files on the console +For example, to dump the contents of audit log files to the console: [source,none] ---- auditlogviewer /logs/cassandra/audit ---- -=== Sample output +results in [source,none] ---- @@ -182,12 +171,11 @@ LogMessage: user:anonymous|host:localhost/X.X.X.X|source:/X.X.X.X|port:60878|tim == Configuring BinAuditLogger -To use `BinAuditLogger` as a logger in AuditLogging, set the logger to -`BinAuditLogger` in cassandra.yaml under `audit_logging_options` -section. `BinAuditLogger` can be futher configued using its advanced -options in cassandra.yaml. +To use `BinAuditLogger` as a logger in AuditLogging, set the logger to `BinAuditLogger` in the `cassandra.yaml` file + under the `audit_logging_options` section. +`BinAuditLogger` can be futher configued using its advanced options in `cassandra.yaml`. -=== Adcanced Options for BinAuditLogger +=== Advanced Options for BinAuditLogger `block`:: Indicates if the AuditLog should block if the it falls behind or @@ -208,10 +196,8 @@ options in cassandra.yaml. == Configuring FileAuditLogger -To use `FileAuditLogger` as a logger in AuditLogging, apart from setting -the class name in cassandra.yaml, following configuration is needed to -have the audit log events to flow through separate log file instead of -system.log +To use `FileAuditLogger` as a logger in AuditLogging, set the class name in the `cassandra.yaml` file and configure +the audit log events to flow through separate log file instead of system.log. [source,xml] ---- diff --git a/doc/source/modules/cassandra/pages/operating/backups.adoc b/doc/source/modules/cassandra/pages/operating/backups.adoc index cd831b1ad4ef..a083d5b58f06 100644 --- a/doc/source/modules/cassandra/pages/operating/backups.adoc +++ b/doc/source/modules/cassandra/pages/operating/backups.adoc @@ -63,17 +63,17 @@ demonstrate incremental backups and snapshots. We have used a three node Cassandra cluster. First, the keyspaces are created. Then tables are created within a keyspace and table data is added. -We have used two keyspaces `CQLKeyspace` and `CatalogKeyspace` with two tables within +We have used two keyspaces `cqlkeyspace` and `catalogkeyspace` with two tables within each. -Create the `CQLKeyspace`: +Create the keyspace `cqlkeyspace`: [source,cql] ---- include::example$CQL/create_ks_backup.cql[] ---- -Create two tables `t` and `t2` in the `CQLKeyspace` keyspace. +Create two tables `t` and `t2` in the `cqlkeyspace` keyspace. [source,cql] ---- @@ -101,14 +101,14 @@ results in include::example$RESULTS/select_data_backup.result[] ---- -Create a second keyspace `CatalogKeyspace`: +Create a second keyspace `catalogkeyspace`: [source,cql] ---- include::example$CQL/create_ks2_backup.cql[] ---- -Create two tables `journal` and `magazine` in `CatalogKeyspace`: +Create two tables `journal` and `magazine` in `catalogkeyspace`: [source,cql] ---- @@ -185,7 +185,7 @@ We shall be using the example keyspaces and tables to create snapshots. ==== Taking Snapshots of all Tables in a Keyspace Using the syntax above, create a snapshot called `catalog-ks` for all the tables -in the `CatalogKeyspace` keyspace: +in the `catalogkeyspace` keyspace: [source,bash] ---- @@ -224,7 +224,7 @@ syntax becomes as follows: include::example$BASH/snapshot_one_table.sh[] ---- -Using the syntax above, create a snapshot for table `magazine` in keyspace `CatalogKeyspace`: +Using the syntax above, create a snapshot for table `magazine` in keyspace `catalogkeyspace`: [source,bash] ---- @@ -242,7 +242,7 @@ include::example$RESULTS/snapshot_one_table2.result[] To take snapshots of multiple tables in a keyspace the list of _Keyspace.table_ must be specified with option `--kt-list`. -For example, create snapshots for tables `t` and `t2` in the `CQLKeyspace` keyspace: +For example, create snapshots for tables `t` and `t2` in the `cqlkeyspace` keyspace: [source,bash] ---- @@ -257,7 +257,7 @@ include::example$RESULTS/snapshot_mult_tables.result[] ---- Multiple snapshots of the same set of tables may be created and tagged with a different name. -As an example, create another snapshot for the same set of tables `t` and `t2` in the `CQLKeyspace` +As an example, create another snapshot for the same set of tables `t` and `t2` in the `cqlkeyspace` keyspace and tag the snapshots differently: [source,bash] @@ -330,7 +330,7 @@ include::example$RESULTS/snapshot_all.result[] ---- To list the snapshots for a particular table first change to the snapshots directory for that table. -For example, list the snapshots for the `CatalogKeyspace/journal` table: +For example, list the snapshots for the `catalogkeyspace/journal` table: [source,bash] ---- @@ -366,14 +366,14 @@ Snapshots may be cleared or deleted with the `nodetool clearsnapshot` command. Either a specific snapshot name must be specified or the `–all` option must be specified. -For example, delete a snapshot called `magazine` from keyspace `CQLKeyspace`: +For example, delete a snapshot called `magazine` from keyspace `cqlkeyspace`: [source,bash] ---- include::example$BASH/nodetool_clearsnapshot.sh[] ---- -or delete all snapshots from `CQLKeyspace` with the –all option: +or delete all snapshots from `cqlkeyspace` with the –all option: [source,bash] ---- diff --git a/doc/source/modules/cassandra/pages/operating/bulk_loading.adoc b/doc/source/modules/cassandra/pages/operating/bulk_loading.adoc index 29a78ed09bc7..2b11f27460f9 100644 --- a/doc/source/modules/cassandra/pages/operating/bulk_loading.adoc +++ b/doc/source/modules/cassandra/pages/operating/bulk_loading.adoc @@ -1,50 +1,44 @@ = Bulk Loading -Bulk loading of data in Apache Cassandra is supported by different -tools. The data to be bulk loaded must be in the form of SSTables. +Bulk loading Apache Cassandra data is supported by different tools. +The data to bulk load must be in the form of SSTables. Cassandra does not support loading data in any other format such as CSV, -JSON, and XML directly. Bulk loading could be used to: +JSON, and XML directly. +Although the cqlsh `COPY` command can load CSV data, it is not a good option +for amounts of data. +Bulk loading is used to: * Restore incremental backups and snapshots. Backups and snapshots are already in the form of SSTables. -* Load existing SSTables into another cluster, which could have a +* Load existing SSTables into another cluster. The data can have a different number of nodes or replication strategy. -* Load external data into a cluster - -*_Note_: CSV Data can be loaded via the cqlsh COPY command but we do not -recommend this for bulk loading, which typically requires many GB or TB -of data. +* Load external data to a cluster. == Tools for Bulk Loading -Cassandra provides two commands or tools for bulk loading data. These -are: +Cassandra provides two commands or tools for bulk loading data: * Cassandra Bulk loader, also called `sstableloader` * The `nodetool import` command The `sstableloader` and `nodetool import` are accessible if the Cassandra installation `bin` directory is in the `PATH` environment -variable. Or these may be accessed directly from the `bin` directory. We -shall discuss each of these next. We shall use the example or sample -keyspaces and tables created in the Backups section. +variable. +Or these may be accessed directly from the `bin` directory. +The examples use the keyspaces and tables created in xref:cql/operating/backups.adoc[Backups]. == Using sstableloader -The `sstableloader` is the main tool for bulk uploading data. The -`sstableloader` streams SSTable data files to a running cluster. The -`sstableloader` loads data conforming to the replication strategy and -replication factor. The table to upload data to does need not to be -empty. +The `sstableloader` is the main tool for bulk uploading data. +`sstableloader` streams SSTable data files to a running cluster, +conforming to the replication strategy and replication factor. +The table to upload data to does need not to be empty. The only requirements to run `sstableloader` are: -[arabic] -. One or more comma separated initial hosts to connect to and get ring -information. -. A directory path for the SSTables to load. - -Its usage is as follows. +* One or more comma separated initial hosts to connect to and get ring +information +* A directory path for the SSTables to load [source,bash] ---- @@ -52,27 +46,24 @@ sstableloader [options] ---- Sstableloader bulk loads the SSTables found in the directory -`` to the configured cluster. The `` is used as the -target _keyspace/table_ name. As an example, to load an SSTable named -`Standard1-g-1-Data.db` into `Keyspace1/Standard1`, you will need to -have the files `Standard1-g-1-Data.db` and `Standard1-g-1-Index.db` in a +`` to the configured cluster. +The `` is used as the target _keyspace/table_ name. +For example, to load an SSTable named `Standard1-g-1-Data.db` into `Keyspace1/Standard1`, +you will need to have the files `Standard1-g-1-Data.db` and `Standard1-g-1-Index.db` in a directory `/path/to/Keyspace1/Standard1/`. === Sstableloader Option to accept Target keyspace name -Often as part of a backup strategy some Cassandra DBAs store an entire -data directory. When corruption in data is found then they would like to -restore data in the same cluster (for large clusters 200 nodes) but with -different keyspace name. +Often as part of a backup strategy, some Cassandra DBAs store an entire data directory. +When corruption in the data is found, restoring data in the same cluster (for large clusters 200 nodes) +is common, but with a different keyspace name. -Currently `sstableloader` derives keyspace name from the folder -structure. As an option to specify target keyspace name as part of -`sstableloader`, version 4.0 adds support for the `--target-keyspace` -option +Currently `sstableloader` derives keyspace name from the folder structure. +As an option, to specify target keyspace name as part of `sstableloader`, +version 4.0 adds support for the `--target-keyspace` option (https://issues.apache.org/jira/browse/CASSANDRA-13884[CASSANDRA-13884]). -The supported options are as follows from which only -`-d,--nodes ` is required. +The following options are supported, with `-d,--nodes ` required: [source,none] ---- @@ -132,26 +123,26 @@ The supported options are as follows from which only output ---- -The `cassandra.yaml` file could be provided on the command-line with -`-f` option to set up streaming throughput, client and server encryption -options. Only `stream_throughput_outbound_megabits_per_sec`, -`server_encryption_options` and `client_encryption_options` are read -from yaml. You can override options read from `cassandra.yaml` with -corresponding command line options. +The `cassandra.yaml` file can be provided on the command-line with `-f` option to set up streaming throughput, client and server encryption +options. +Only `stream_throughput_outbound_megabits_per_sec`, `server_encryption_options` and `client_encryption_options` are read +from the `cassandra.yaml` file. +You can override options read from `cassandra.yaml` with corresponding command line options. === A sstableloader Demo -We shall demonstrate using `sstableloader` by uploading incremental -backup data for table `catalogkeyspace.magazine`. We shall also use a -snapshot of the same table to bulk upload in a different run of -`sstableloader`. The backups and snapshots for the -`catalogkeyspace.magazine` table are listed as follows. +An example shows how to use `sstableloader` to upload incremental backup data for the table `catalogkeyspace.magazine`. +In addition, a snapshot of the same table is created to bulk upload, also with `sstableloader`. + +The backups and snapshots for the `catalogkeyspace.magazine` table are listed as follows: [source,bash] ---- $ cd ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c && ls -l ---- + results in + [source,none] ---- total 0 @@ -161,19 +152,17 @@ drwxrwxr-x. 4 ec2-user ec2-user 40 Aug 19 02:45 snapshots The directory path structure of SSTables to be uploaded using `sstableloader` is used as the target keyspace/table. - -We could have directly uploaded from the `backups` and `snapshots` -directories respectively if the directory structure were in the format -used by `sstableloader`. But the directory path of backups and snapshots -for SSTables is +You can directly upload from the `backups` and `snapshots` +directories respectively, if the directory structure is in the format +used by `sstableloader`. +But the directory path of backups and snapshots for SSTables is `/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups` and `/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots` -respectively, which cannot be used to upload SSTables to -`catalogkeyspace.magazine` table. The directory path structure must be -`/catalogkeyspace/magazine/` to use `sstableloader`. We need to create a -new directory structure to upload SSTables with `sstableloader` which is -typical when using `sstableloader`. Create a directory structure -`/catalogkeyspace/magazine` and set its permissions. +respectively, and cannot be used to upload SSTables to +`catalogkeyspace.magazine` table. +The directory path structure must be `/catalogkeyspace/magazine/` to use `sstableloader`. +Create a new directory structure to upload SSTables with `sstableloader` +located at `/catalogkeyspace/magazine` and set appropriate permissions. [source,bash] ---- @@ -183,13 +172,10 @@ $ sudo chmod -R 777 /catalogkeyspace/magazine ==== Bulk Loading from an Incremental Backup -An incremental backup does not include the DDL for a table. The table -must already exist. If the table was dropped it may be created using the -`schema.cql` generated with every snapshot of a table. As we shall be -using `sstableloader` to load SSTables to the `magazine` table, the -table must exist prior to running `sstableloader`. The table does not -need to be empty but we have used an empty table as indicated by a CQL -query: +An incremental backup does not include the DDL for a table; the table must already exist. +If the table was dropped, it can be created using the `schema.cql` file generated with every snapshot of a table. +Prior to using `sstableloader` to load SSTables to the `magazine` table, the table must exist. +The table does not need to be empty but we have used an empty table as indicated by a CQL query: [source,cql] ---- @@ -204,9 +190,7 @@ id | name | publisher (0 rows) ---- -After the table to upload has been created copy the SSTable files from -the `backups` directory to the `/catalogkeyspace/magazine/` directory -that we created. +After creating the table to upload to, copy the SSTable files from the `backups` directory to the `/catalogkeyspace/magazine/` directory. [source,bash] ---- @@ -222,14 +206,15 @@ Run the `sstableloader` to upload SSTables from the $ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ ---- -The output from the `sstableloader` command should be similar to the -listed: +The output from the `sstableloader` command should be similar to this listing: [source,bash] ---- $ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ ---- + results in + [source,none] ---- Opening SSTables and calculating sections to stream @@ -253,8 +238,7 @@ progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % [54.158.45.75:7000]0:2/2 78 % total: 96% 0.000KiB/s (avg: 0.044KiB/s) ---- -After the `sstableloader` has run query the `magazine` table and the -loaded table should get listed when a query is run. +After the `sstableloader` has finished loading the data, run a query the `magazine` table to check: [source,cql] ---- @@ -273,12 +257,10 @@ id | name | publisher ==== Bulk Loading from a Snapshot -In this section we shall demonstrate restoring a snapshot of the -`magazine` table to the `magazine` table. As we used the same table to -restore data from a backup the directory structure required by -`sstableloader` should already exist. If the directory structure needed -to load SSTables to `catalogkeyspace.magazine` does not exist create the -directories and set their permissions. +Restoring a snapshot of a table to the same table can be easily accomplished: + +If the directory structure needed to load SSTables to `catalogkeyspace.magazine` does not exist create the +directories and set appropriate permissions: [source,bash] ---- @@ -286,8 +268,7 @@ $ sudo mkdir -p /catalogkeyspace/magazine $ sudo chmod -R 777 /catalogkeyspace/magazine ---- -As we shall be copying the snapshot files to the directory remove any -files that may be in the directory. +Remove any files from the directory, so that the snapshot files can be copied without interference: [source,bash] ---- @@ -295,7 +276,9 @@ $ sudo rm /catalogkeyspace/magazine/* $ cd /catalogkeyspace/magazine/ $ ls -l ---- + results in + [source,none] ---- total 0 @@ -309,14 +292,16 @@ $ sudo cp ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d9 /catalogkeyspace/magazine ---- -List the files in the `/catalogkeyspace/magazine` directory and a -`schema.cql` should also get listed. +List the files in the `/catalogkeyspace/magazine` directory. +The `schema.cql` will also be listed. [source,bash] ---- $ cd /catalogkeyspace/magazine && ls -l ---- + results in + [source,none] ---- total 44 @@ -333,30 +318,26 @@ total 44 ---- Alternatively create symlinks to the snapshot folder instead of copying -the data, something like: +the data: [source,bash] ---- -$ mkdir keyspace_name -$ ln -s _path_to_snapshot_folder keyspace_name/table_name +$ mkdir +$ ln -s / ---- -If the `magazine` table was dropped run the DDL in the `schema.cql` to -create the table. Run the `sstableloader` with the following command. +If the `magazine` table was dropped, run the DDL in the `schema.cql` to +create the table. +Run the `sstableloader` with the following command: [source,bash] ---- $ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ ---- -As the output from the command indicates SSTables get streamed to the -cluster. +As the output from the command indicates, SSTables get streamed to the +cluster: -[source,bash] ----- -$ sstableloader --nodes 10.0.2.238 /catalogkeyspace/magazine/ ----- -results in [source,none] ---- Established connection to initial hosts @@ -378,23 +359,21 @@ progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % Some other requirements of `sstableloader` that should be kept into consideration are: -* The SSTables to be loaded must be compatible with the Cassandra +* The SSTables loaded must be compatible with the Cassandra version being loaded into. * Repairing tables that have been loaded into a different cluster does not repair the source tables. * Sstableloader makes use of port 7000 for internode communication. -* Before restoring incremental backups run `nodetool flush` to backup -any data in memtables +* Before restoring incremental backups, run `nodetool flush` to backup +any data in memtables. == Using nodetool import -In this section we shall import SSTables into a table using the -`nodetool import` command. The `nodetool refresh` command is deprecated, -and it is recommended to use `nodetool import` instead. The -`nodetool refresh` does not have an option to load new SSTables from a -separate directory which the `nodetool import` does. +Importing SSTables into a table using the `nodetool import` command is recommended instead of the deprecated +`nodetool refresh` command. +The `nodetool import` command has an option to load new SSTables from a separate directory. -The command usage is as follows. +The command usage is as follows: [source,none] ---- @@ -408,10 +387,9 @@ nodetool [(-h | --host )] [(-p | --port )] ... ---- -The arguments `keyspace`, `table` name and `directory` to import -SSTables from are required. +The arguments `keyspace`, `table` name and `directory` are required. -The supported options are as follows. +The following options are supported: [source,none] ---- @@ -462,29 +440,27 @@ The supported options are as follows. command-line options ---- -As the keyspace and table are specified on the command line -`nodetool import` does not have the same requirement that -`sstableloader` does, which is to have the SSTables in a specific -directory path. When importing snapshots or incremental backups with -`nodetool import` the SSTables don’t need to be copied to another +Because the keyspace and table are specified on the command line for +`nodetool import`, there is not the same requirement as with +`sstableloader`, to have the SSTables in a specific directory path. +When importing snapshots or incremental backups with +`nodetool import`, the SSTables don’t need to be copied to another directory. === Importing Data from an Incremental Backup -In this section we shall demonstrate using `nodetool import` to import -SSTables from an incremental backup. We shall use the example table -`cqlkeyspace.t`. Drop table `t` as we are demonstrating to restore the -table. +Using `nodetool import` to import SSTables from an incremental backup, and restoring +the table is shown below. [source,cql] ---- DROP table t; ---- -An incremental backup for a table does not include the schema definition -for the table. If the schema definition is not kept as a separate +An incremental backup for a table does not include the schema definition for the table. +If the schema definition is not kept as a separate backup, the `schema.cql` from a backup of the table may be used to -create the table as follows. +create the table as follows: [source,cql] ---- @@ -527,10 +503,9 @@ id | k | v (0 rows) ---- -Run the `nodetool import` command by providing the keyspace, table and -the backups directory. We don’t need to copy the table backups to -another directory to run `nodetool import` as we had to when using -`sstableloader`. +Run the `nodetool import` command, providing the keyspace, table and +the backups directory. +Don’t copy the table backups to another directory, as with `sstableloader`. [source,bash] ---- @@ -538,8 +513,7 @@ $ nodetool import -- cqlkeyspace t \ ./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups ---- -The SSTables get imported into the table. Run a query in cqlsh to list -the data imported. +The SSTables are imported into the table. Run a query in cqlsh to check: [source,cql] ---- @@ -558,9 +532,9 @@ id | k | v === Importing Data from a Snapshot Importing SSTables from a snapshot with the `nodetool import` command is -similar to importing SSTables from an incremental backup. To demonstrate -we shall import a snapshot for table `catalogkeyspace.journal`. Drop the -table as we are demonstrating to restore the table from a snapshot. +similar to importing SSTables from an incremental backup. +Shown here is an import of a snapshot for table `catalogkeyspace.journal`, after +dropping the table to demonstrate the restore. [source,cql] ---- @@ -568,9 +542,8 @@ USE CATALOGKEYSPACE; DROP TABLE journal; ---- -We shall use the `catalog-ks` snapshot for the `journal` table. List the -files in the snapshot. The snapshot includes a `schema.cql`, which is -the schema definition for the `journal` table. +Use the `catalog-ks` snapshot for the `journal` table. +Check the files in the snapshot, and note the existence of the `schema.cql` file. [source,bash] ---- @@ -592,7 +565,7 @@ total 44 ---- Copy the DDL from the `schema.cql` and run in cqlsh to create the -`catalogkeyspace.journal` table. +`catalogkeyspace.journal` table: [source,cql] ---- @@ -622,7 +595,7 @@ CREATE TABLE IF NOT EXISTS catalogkeyspace.journal ( ---- Run the `nodetool import` command to import the SSTables for the -snapshot. +snapshot: [source,bash] ---- @@ -631,8 +604,7 @@ $ nodetool import -- catalogkeyspace journal \ 296a2d30c22a11e9b1350d927649052c/snapshots/catalog-ks/ ---- -Subsequently run a CQL query on the `journal` table and the data -imported gets listed. +Subsequently run a CQL query on the `journal` table to check the imported data: [source,cql] ---- @@ -653,24 +625,22 @@ id | name | publisher Bulk loading external data directly is not supported by any of the tools we have discussed which include `sstableloader` and `nodetool import`. The `sstableloader` and `nodetool import` require data to be in the form -of SSTables. Apache Cassandra supports a Java API for generating -SSTables from input data. Subsequently the `sstableloader` or -`nodetool import` could be used to bulk load the SSTables. Next, we -shall discuss the `org.apache.cassandra.io.sstable.CQLSSTableWriter` -Java class for generating SSTables. +of SSTables. +Apache Cassandra supports a Java API for generating SSTables from input data, using the +`org.apache.cassandra.io.sstable.CQLSSTableWriter` Java class. +Subsequently, either `sstableloader` or `nodetool import` is used to bulk load the SSTables. === Generating SSTables with CQLSSTableWriter Java API -To generate SSTables using the `CQLSSTableWriter` class the following -need to be supplied at the least. +To generate SSTables using the `CQLSSTableWriter` class the following are required: * An output directory to generate the SSTable in * The schema for the SSTable -* A prepared insert statement +* A prepared statement for the `INSERT` * A partitioner -The output directory must already have been created. Create a directory -(`/sstables` as an example) and set its permissions. +The output directory must exist before starting. Create a directory +(`/sstables` as an example) and set appropriate permissions. [source,bash] ---- @@ -678,16 +648,14 @@ $ sudo mkdir /sstables $ sudo chmod 777 -R /sstables ---- -Next, we shall discuss To use `CQLSSTableWriter` could be used in a Java -application. Create a Java constant for the output directory. +To use `CQLSSTableWriter` in a Java application, create a Java constant for the output directory. [source,java] ---- public static final String OUTPUT_DIR = "./sstables"; ---- -`CQLSSTableWriter` Java API has the provision to create a user defined -type. Create a new type to store `int` data: +`CQLSSTableWriter` Java API can create a user-defined type. Create a new type to store `int` data: [source,java] ---- @@ -701,15 +669,14 @@ String schema = "CREATE TABLE CQLKeyspace.t (" + ")"; ---- -Define a `String` variable for the prepared insert statement to use: +Define a `String` variable for the prepared statement to use: [source,java] ---- String insertStmt = "INSERT INTO CQLKeyspace.t (id, k, v1, v2) VALUES (?, ?, ?, ?)"; ---- -The partitioner to use does not need to be set as the default -partitioner `Murmur3Partitioner` is used. +The partitioner to use only needs setting if the default partitioner `Murmur3Partitioner` is not used. All these variables or settings are used by the builder class `CQLSSTableWriter.Builder` to create a `CQLSSTableWriter` object. @@ -721,11 +688,17 @@ Create a File object for the output directory. File outputDir = new File(OUTPUT_DIR + File.separator + "CQLKeyspace" + File.separator + "t"); ---- -Next, obtain a `CQLSSTableWriter.Builder` object using `static` method -`CQLSSTableWriter.builder()`. Set the output directory `File` object, -user defined type, SSTable schema, buffer size, prepared insert -statement, and optionally any of the other builder options, and invoke -the `build()` method to create a `CQLSSTableWriter` object: +Obtain a `CQLSSTableWriter.Builder` object using `static` method `CQLSSTableWriter.builder()`. +Set the following items: + +* output directory `File` object +* user-defined type +* SSTable schema +* buffer size +* prepared statement +* optionally any of the other builder options + +and invoke the `build()` method to create a `CQLSSTableWriter` object: [source,java] ---- @@ -737,15 +710,15 @@ CQLSSTableWriter writer = CQLSSTableWriter.builder() .using(insertStmt).build(); ---- -Next, set the SSTable data. If any user define types are used obtain a -`UserType` object for these: +Set the SSTable data. If any user-defined types are used, obtain a +`UserType` object for each type: [source,java] ---- UserType userType = writer.getUDType("intType"); ---- -Add data rows for the resulting SSTable. +Add data rows for the resulting SSTable: [source,java] ---- @@ -754,20 +727,19 @@ writer.addRow(0, 0, "val0", userType.newValue().setInt("a", 0).setInt("b", 0)); writer.addRow(2, 2, "val2", userType.newValue().setInt("a", 2).setInt("b", 2)); ---- -Close the writer, finalizing the SSTable. +Close the writer, finalizing the SSTable: [source,java] ---- writer.close(); ---- -All the public methods the `CQLSSTableWriter` class provides including -some other methods that are not discussed in the preceding example are -as follows. +Other public methods the `CQLSSTableWriter` class provides are: [cols=",",options="header",] |=== |Method |Description + |addRow(java.util.List values) |Adds a new row to the writer. Returns a CQLSSTableWriter object. Each provided value type should correspond to the types of the CQL column the value is for. The @@ -807,21 +779,19 @@ insertion statement used when creating by this SSTable writer. to the writer given already serialized binary values. Returns a CQLSSTableWriter object. The row values must correspond to the bind variables of the insertion statement used when creating by this SSTable -writer. | +writer. |rawAddRow(java.util.Map values) |Adds a new row to the writer given already serialized binary values. Returns a CQLSSTableWriter object. The row values must correspond to the bind variables of the insertion statement used when creating by this -SSTable writer. | +SSTable writer. |getUDType(String dataType) |Returns the User Defined type used in this SSTable Writer that can be used to create UDTValue instances. |=== -All the public methods the `CQLSSTableWriter.Builder` class provides -including some other methods that are not discussed in the preceding -example are as follows. +Other public methods the `CQLSSTableWriter.Builder` class provides are: [cols=",",options="header",] |=== From f8cbd0244a18f98c7e452dc37dcc6f8e1899c45a Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 28 Jul 2020 18:16:54 -0700 Subject: [PATCH 018/115] conversion --- .../pages/operating/compaction/index.adoc | 76 ++++++++-------- .../pages/operating/compaction/lcs.adoc | 1 + .../pages/operating/compaction/stcs.adoc | 1 + .../pages/operating/compaction/twcs.adoc | 9 +- .../pages/tools/cassandra_stress.adoc | 42 ++++----- .../modules/cassandra/pages/tools/cqlsh.adoc | 49 +++++----- .../pages/troubleshooting/reading_logs.adoc | 60 +++++++------ .../pages/troubleshooting/use_nodetool.adoc | 30 ++++--- .../pages/troubleshooting/use_tools.adoc | 90 +++++++++++-------- 9 files changed, 191 insertions(+), 167 deletions(-) diff --git a/doc/source/modules/cassandra/pages/operating/compaction/index.adoc b/doc/source/modules/cassandra/pages/operating/compaction/index.adoc index 6ee39e284716..880ff16afb67 100644 --- a/doc/source/modules/cassandra/pages/operating/compaction/index.adoc +++ b/doc/source/modules/cassandra/pages/operating/compaction/index.adoc @@ -5,16 +5,16 @@ Picking the right compaction strategy for your workload will ensure the best performance for both querying and for compaction itself. -`Size Tiered Compaction Strategy `:: +xref:cql/operating/compaction/stcs.adoc[`Size Tiered Compaction Strategy (STCS)`]:: The default compaction strategy. Useful as a fallback when other strategies don't fit the workload. Most useful for non pure time - series workloads with spinning disks, or when the I/O from `LCS ` + series workloads with spinning disks, or when the I/O from `LCS` is too high. -`Leveled Compaction Strategy `:: +xref:cql/operating/compaction/lcs.adoc[`Leveled Compaction Strategy (LCS)`]:: Leveled Compaction Strategy (LCS) is optimized for read heavy workloads, or workloads with lots of updates and deletes. It is not a good choice for immutable time series data. -`Time Window Compaction Strategy `:: +xref:cql/operating/compaction/twcs.adoc[`Time Window Compaction Strategy (TWCS)`]:: Time Window Compaction Strategy is designed for TTL'ed, mostly immutable time series data. @@ -22,20 +22,20 @@ best performance for both querying and for compaction itself. The concept of compaction is used for different kinds of operations in Cassandra, the common thing about these operations is that it takes one -or more sstables and output new sstables. The types of compactions are; +or more SSTables and output new SSTables. The types of compactions are: Minor compaction:: triggered automatically in Cassandra. Major compaction:: - a user executes a compaction over all sstables on the node. + a user executes a compaction over all SSTables on the node. User defined compaction:: - a user triggers a compaction on a given set of sstables. + a user triggers a compaction on a given set of SSTables. Scrub:: - try to fix any broken sstables. This can actually remove valid data if + try to fix any broken SSTables. This can actually remove valid data if that data is corrupted, if that happens you will need to run a full repair on the node. -Upgradesstables:: - upgrade sstables to the latest version. Run this after upgrading to a +UpgradeSSTables:: + upgrade SSTables to the latest version. Run this after upgrading to a new major version. Cleanup:: remove any ranges this node does not own anymore, typically triggered @@ -45,29 +45,29 @@ Secondary index rebuild:: rebuild the secondary indexes on the node. Anticompaction:: after repair the ranges that were actually repaired are split out of - the sstables that existed when repair started. + the SSTables that existed when repair started. Sub range compaction:: It is possible to only compact a given sub range - this could be useful if you know a token that has been misbehaving - either gathering many updates or many deletes. - (`nodetool compact -st x -et y`) will pick all sstables containing the - range between x and y and issue a compaction for those sstables. For - STCS this will most likely include all sstables but with LCS it can - issue the compaction for a subset of the sstables. With LCS the + (`nodetool compact -st x -et y`) will pick all SSTables containing the + range between x and y and issue a compaction for those SSTables. For + STCS this will most likely include all SSTables but with LCS it can + issue the compaction for a subset of the SSTables. With LCS the resulting sstable will end up in L0. == When is a minor compaction triggered? -- When an sstable is added to the node through flushing/streaming etc. # -When autocompaction is enabled after being disabled -(`nodetool enableautocompaction`) # When compaction adds new sstables. # -A check for new minor compactions every 5 minutes. +* When an sstable is added to the node through flushing/streaming +* When autocompaction is enabled after being disabled (`nodetool enableautocompaction`) +* When compaction adds new SSTables +* A check for new minor compactions every 5 minutes -== Merging sstables +== Merging SSTables -Compaction is about merging sstables, since partitions in sstables are +Compaction is about merging SSTables, since partitions in SSTables are sorted based on the hash of the partition key it is possible to -efficiently merge separate sstables. Content of each partition is also +efficiently merge separate SSTables. Content of each partition is also sorted so each partition can be merged efficiently. == Tombstones and Garbage Collection (GC) Grace @@ -157,7 +157,7 @@ tombstone the following needs to be true; * The tombstone must be older than `gc_grace_seconds` * If partition X contains the tombstone, the sstable containing the -partition plus all sstables containing data older than the tombstone +partition plus all SSTables containing data older than the tombstone containing X must be included in the same compaction. We don't need to care if the partition is in an sstable if we can guarantee that all data in that sstable is newer than the tombstone. If the tombstone is older @@ -183,18 +183,18 @@ is reached. Once the TTL has expired the data is converted to a tombstone which stays around for at least `gc_grace_seconds`. Note that if you mix data with TTL and data without TTL (or just different length of the TTL) Cassandra will have a hard time dropping the tombstones -created since the partition might span many sstables and not all are +created since the partition might span many SSTables and not all are compacted at once. -== Fully expired sstables +== Fully expired SSTables If an sstable contains only tombstones and it is guaranteed that that sstable is not shadowing data in any other sstable compaction can drop -that sstable. If you see sstables with only tombstones (note that TTL:ed +that sstable. If you see SSTables with only tombstones (note that TTL:ed data is considered tombstones once the time to live has expired) but it -is not being dropped by compaction, it is likely that other sstables +is not being dropped by compaction, it is likely that other SSTables contain older data. There is a tool called `sstableexpiredblockers` that -will list which sstables are droppable and which are blocking them from +will list which SSTables are droppable and which are blocking them from being dropped. This is especially useful for time series compaction with `TimeWindowCompactionStrategy` (and the deprecated `DateTieredCompactionStrategy`). With `TimeWindowCompactionStrategy` it @@ -205,19 +205,19 @@ enabling `unsafe_aggressive_sstable_expiration`. With incremental repairs Cassandra must keep track of what data is repaired and what data is unrepaired. With anticompaction repaired data -is split out into repaired and unrepaired sstables. To avoid mixing up +is split out into repaired and unrepaired SSTables. To avoid mixing up the data again separate compaction strategy instances are run on the two sets of data, each instance only knowing about either the repaired or -the unrepaired sstables. This means that if you only run incremental +the unrepaired SSTables. This means that if you only run incremental repair once and then never again, you might have very old data in the -repaired sstables that block compaction from dropping tombstones in the -unrepaired (probably newer) sstables. +repaired SSTables that block compaction from dropping tombstones in the +unrepaired (probably newer) SSTables. == Data directories -Since tombstones and data can live in different sstables it is important +Since tombstones and data can live in different SSTables it is important to realize that losing an sstable might lead to data becoming live again -- the most common way of losing sstables is to have a hard drive break +- the most common way of losing SSTables is to have a hard drive break down. To avoid making data live tombstones and actual data are always in the same data directory. This way, if a disk is lost, all versions of a partition are lost and no data can get undeleted. To achieve this a @@ -239,12 +239,12 @@ this is to create more data directories backed by the big disk. == Single sstable tombstone compaction When an sstable is written a histogram with the tombstone expiry times -is created and this is used to try to find sstables with very many +is created and this is used to try to find SSTables with very many tombstones and run single sstable compaction on that sstable in hope of being able to drop tombstones in that sstable. Before starting this it is also checked how likely it is that any tombstones will actually will be able to be dropped how much this sstable overlaps with other -sstables. To avoid most of these checks the compaction option +SSTables. To avoid most of these checks the compaction option `unchecked_tombstone_compaction` can be enabled. [[compaction-options]] @@ -278,10 +278,10 @@ There is a number of common options for all the compaction strategies; Option to enable the extra safety of making sure that tombstones are only dropped if the data has been repaired. `min_threshold` (default: 4):: - Lower limit of number of sstables before a compaction is triggered. + Lower limit of number of SSTables before a compaction is triggered. Not used for `LeveledCompactionStrategy`. `max_threshold` (default: 32):: - Upper limit of number of sstables before a compaction is triggered. + Upper limit of number of SSTables before a compaction is triggered. Not used for `LeveledCompactionStrategy`. Further, see the section on each strategy for specific additional diff --git a/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc b/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc index 96326076133f..5b0adb8b4993 100644 --- a/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc +++ b/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc @@ -1,5 +1,6 @@ = Leveled Compaction Strategy +[[lcs]] The idea of `LeveledCompactionStrategy` (LCS) is that all sstables are put into different levels where we guarantee that no overlapping sstables are in the same level. By overlapping we mean that the diff --git a/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc b/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc index 7d7bdc2ec0d5..5a087f6ae93b 100644 --- a/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc +++ b/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc @@ -1,5 +1,6 @@ = Leveled Compaction Strategy +[[stcs]] The basic idea of `SizeTieredCompactionStrategy` (STCS) is to merge sstables of approximately the same size. All sstables are put in different buckets depending on their size. An sstable is added to the diff --git a/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc b/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc index 7c64c650922a..21c44f51769d 100644 --- a/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc +++ b/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc @@ -1,5 +1,6 @@ = Time Window CompactionStrategy +[[twcs]] `TimeWindowCompactionStrategy` (TWCS) is designed specifically for workloads where it's beneficial to have data on disk grouped by the timestamp of the data, a common goal when the workload is time-series in @@ -22,15 +23,15 @@ combination of two primary options: Expired sstables will be dropped without checking its data is shadowing other sstables. This is a potentially risky option that can lead to data loss or deleted data re-appearing, going beyond what - [.title-ref]#unchecked_tombstone_compaction# does for single sstable + unchecked_tombstone_compaction does for single sstable compaction. Due to the risk the jvm must also be started with - [.title-ref]#-Dcassandra.unsafe_aggressive_sstable_expiration=true#. + `-Dcassandra.unsafe_aggressive_sstable_expiration=true`. Taken together, the operator can specify windows of virtually any size, -and [.title-ref]#TimeWindowCompactionStrategy# will work to create a +and `TimeWindowCompactionStrategy` will work to create a single sstable for writes within that window. For efficiency during writing, the newest window will be compacted using -[.title-ref]#SizeTieredCompactionStrategy#. +`SizeTieredCompactionStrategy`. Ideally, operators should select a `compaction_window_unit` and `compaction_window_size` pair that produces approximately 20-30 windows diff --git a/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc b/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc index f3baf0e0e507..bcef193c373d 100644 --- a/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc +++ b/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc @@ -1,25 +1,21 @@ = Cassandra Stress -cassandra-stress is a tool for benchmarking and load testing a Cassandra -cluster. cassandra-stress supports testing arbitrary CQL tables and -queries to allow users to benchmark their data model. +The `cassandra-stress` tool is used to benchmark and load-test a Cassandra +cluster. +`cassandra-stress` supports testing arbitrary CQL tables and queries, allowing users to benchmark their own data model. -This documentation focuses on user mode as this allows the testing of -your actual schema. +This documentation focuses on user mode to test personal schema. == Usage There are several operation types: -____ * write-only, read-only, and mixed workloads of standard data * write-only and read-only workloads for counter columns * user configured workloads, running custom queries on custom schemas -____ -The syntax is [.title-ref]#cassandra-stress [options]#. If you -want more information on a given command or options, just run -[.title-ref]#cassandra-stress help #. +The syntax is `cassandra-stress [options]`. +For more information on a given command or options, run `cassandra-stress help `. Commands::: read:;; @@ -81,18 +77,17 @@ Suboptions::: Every command and primary option has its own collection of suboptions. These are too numerous to list here. For information on the suboptions for each command or option, please use the help command, - [.title-ref]#cassandra-stress help #. + `cassandra-stress help `. == User mode -User mode allows you to use your stress your own schemas. This can save -time in the long run rather than building an application and then -realising your schema doesn't scale. +User mode allows you to stress your own schemas, to save you time +in the long run. Find out if your application can scale using stress test with your schema. === Profile -User mode requires a profile defined in YAML. Multiple YAML files may be -specified in which case operations in the ops argument are referenced as +User mode defines a profile using YAML. +Multiple YAML files may be specified, in which case operations in the ops argument are referenced as specname.opname. An identifier for the profile: @@ -137,7 +132,7 @@ table_definition: | ) ---- -Optional meta information on the generated columns in the above table. +Optional meta-information on the generated columns in the above table. The min and max only apply to text and blob types. The distribution field represents the total unique population distribution of that column across rows: @@ -255,15 +250,14 @@ Running a user mode test with multiple yaml files:::: truncate=once This will run operations as specified in both the example.yaml and example2.yaml files. example.yaml and example2.yaml can reference the -same table:: - although care must be taken that the table definition is identical - (data generation specs can be different). +same table, although care must be taken that the table definition is identical + (data generation specs can be different). === Lightweight transaction support -cassandra-stress supports lightweight transactions. In this it will -first read current data from Cassandra and then uses read value(s) to -fulfill lightweight transaction condition(s). +cassandra-stress supports lightweight transactions. +To use this feature, the command will first read current data from Cassandra, and then uses read values to +fulfill lightweight transaction conditions. Lightweight transaction update query: @@ -288,7 +282,7 @@ include::example$YAML/stress-lwt-example.yaml[] Graphs can be generated for each run of stress. -image::example-stress-graph.png[image] +image::example-stress-graph.png[example cassandra-stress graph] To create a new graph: diff --git a/doc/source/modules/cassandra/pages/tools/cqlsh.adoc b/doc/source/modules/cassandra/pages/tools/cqlsh.adoc index 7ff9bce0ea2b..7f68e1b61016 100644 --- a/doc/source/modules/cassandra/pages/tools/cqlsh.adoc +++ b/doc/source/modules/cassandra/pages/tools/cqlsh.adoc @@ -1,32 +1,31 @@ = cqlsh: the CQL shell -cqlsh is a command line shell for interacting with Cassandra through CQL -(the Cassandra Query Language). It is shipped with every Cassandra -package, and can be found in the bin/ directory alongside the cassandra -executable. cqlsh utilizes the Python native protocol driver, and -connects to the single node specified on the command line. +`cqlsh` is a command-line interface for interacting with Cassandra using CQL (the Cassandra Query Language). +It is shipped with every Cassandra package, and can be found in the bin/ directory alongside the cassandra +executable. +`cqlsh` is implemented with the Python native protocol driver, and connects to the single specified node. == Compatibility -cqlsh is compatible with Python 2.7. +`cqlsh is compatible with Python 2.7. -In general, a given version of cqlsh is only guaranteed to work with the -version of Cassandra that it was released with. In some cases, cqlsh -make work with older or newer versions of Cassandra, but this is not +In general, a given version of `cqlsh` is only guaranteed to work with the +version of Cassandra that it was released with. +In some cases, `cqlsh` may work with older or newer versions of Cassandra, but this is not officially supported. == Optional Dependencies -cqlsh ships with all essential dependencies. However, there are some +`cqlsh` ships with all essential dependencies. However, there are some optional dependencies that can be installed to improve the capabilities -of cqlsh. +of `cqlsh`. === pytz -By default, cqlsh displays all timestamps with a UTC timezone. To -support display of timestamps with another timezone, the -http://pytz.sourceforge.net/[pytz] library must be installed. See the -`timezone` option in link:#cqlshrc[cqlshrc] for specifying a timezone to +By default, `cqlsh` displays all timestamps with a UTC timezone. +To support display of timestamps with another timezone, install +the http://pytz.sourceforge.net/[pytz] library. +See the `timezone` option in xref:cql/tools/cqlsh.adoc#cqlshrc[cqlshrc] for specifying a timezone to use. === cython @@ -35,17 +34,17 @@ The performance of cqlsh's `COPY` operations can be improved by installing http://cython.org/[cython]. This will compile the python modules that are central to the performance of `COPY`. +[[cqlshrc]] == cqlshrc -The `cqlshrc` file holds configuration options for cqlsh. By default -this is in the user's home directory at `~/.cassandra/cqlsh`, but a +The `cqlshrc` file holds configuration options for `cqlsh`. +By default, the file is locagted the user's home directory at `~/.cassandra/cqlsh`, but a custom location can be specified with the `--cqlshrc` option. Example config values and documentation can be found in the -`conf/cqlshrc.sample` file of a tarball installation. You can also view -the latest version of -https://github.com/apache/cassandra/blob/trunk/conf/cqlshrc.sample[cqlshrc -online]. +`conf/cqlshrc.sample` file of a tarball installation. +You can also view the latest version of the +https://github.com/apache/cassandra/blob/trunk/conf/cqlshrc.sample[cqlshrc file online]. == Command Line Options @@ -96,7 +95,7 @@ Options: == Special Commands -In addition to supporting regular CQL statements, cqlsh also supports a +In addition to supporting regular CQL statements, `cqlsh` also supports a number of special commands that are not part of CQL. These are detailed below. @@ -142,7 +141,7 @@ consistency `ALL` is not guaranteed to be enough). === `SHOW VERSION` -Prints the cqlsh, Cassandra, CQL, and native protocol versions in use. +Prints the `cqlsh`, Cassandra, CQL, and native protocol versions in use. Example: [source,none] @@ -153,7 +152,7 @@ cqlsh> SHOW VERSION === `SHOW HOST` -Prints the IP address and port of the Cassandra node that cqlsh is +Prints the IP address and port of the Cassandra node that `cqlsh` is connected to in addition to the cluster name. Example: [source,none] @@ -194,7 +193,7 @@ Example usage: [source,none] ---- -cqlsh> SOURCE '/home/thobbs/commands.cql' +cqlsh> SOURCE '/home/calvinhobbs/commands.cql' ---- === `CAPTURE` diff --git a/doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc b/doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc index 6cc3ffa157b9..65dd8282fcac 100644 --- a/doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc +++ b/doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc @@ -38,7 +38,8 @@ Redistribution). As with any application, looking for `ERROR` or `WARN` lines can be a great first step: -.... +[source, bash] +---- $ # Search for warnings or errors in the latest system.log $ grep 'WARN\|ERROR' system.log | tail ... @@ -46,7 +47,7 @@ $ grep 'WARN\|ERROR' system.log | tail $ # Search for warnings or errors in all rotated system.log $ zgrep 'WARN\|ERROR' system.log.* | less ... -.... +---- === `debug.log` @@ -63,19 +64,19 @@ flush impacted. This log can be _very_ noisy, so it is highly recommended to use `grep` and other log analysis tools to dive deep. For example: -.... -$ # Search for messages involving a CompactionTask with 5 lines of context -$ grep CompactionTask debug.log -C 5 -... +[source, bash] +---- +# Search for messages involving a CompactionTask with 5 lines of context +$ grep CompactionTask debug.log -C 5 -$ # Look at the distribution of flush tasks per keyspace +# Look at the distribution of flush tasks per keyspace $ grep "Enqueuing flush" debug.log | cut -f 10 -d ' ' | sort | uniq -c 6 compaction_history: 1 test_keyspace: 2 local: 17 size_estimates: 17 sstable_activity: -.... +---- === `gc.log` @@ -85,7 +86,8 @@ application pause times, and why pauses happened. This may help narrow down throughput or latency issues to a mistuned JVM. For example you can view the last few pauses: -.... +[source, bash] +---- $ grep stopped gc.log.0.current | tail 2018-08-29T00:19:39.522+0000: 3022663.591: Total time for which application threads were stopped: 0.0332813 seconds, Stopping threads took: 0.0008189 seconds 2018-08-29T00:19:44.369+0000: 3022668.438: Total time for which application threads were stopped: 0.0312507 seconds, Stopping threads took: 0.0007025 seconds @@ -97,14 +99,15 @@ $ grep stopped gc.log.0.current | tail 2018-08-29T00:20:15.739+0000: 3022699.809: Total time for which application threads were stopped: 0.0078283 seconds, Stopping threads took: 0.0006012 seconds 2018-08-29T00:20:15.770+0000: 3022699.839: Total time for which application threads were stopped: 0.0301285 seconds, Stopping threads took: 0.0003789 seconds 2018-08-29T00:20:15.798+0000: 3022699.867: Total time for which application threads were stopped: 0.0279407 seconds, Stopping threads took: 0.0003627 seconds -.... +---- This shows a lot of valuable information including how long the application was paused (meaning zero user queries were being serviced during the e.g. 33ms JVM pause) as well as how long it took to enter the safepoint. You can use this raw data to e.g. get the longest pauses: -.... +[source, bash] +---- $ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | tail | xargs -IX grep X gc.log.0.current | sort -k 1 2018-08-28T17:13:40.520-0700: 1.193: Total time for which application threads were stopped: 0.0157914 seconds, Stopping threads took: 0.0000355 seconds 2018-08-28T17:13:41.206-0700: 1.879: Total time for which application threads were stopped: 0.0249811 seconds, Stopping threads took: 0.0000318 seconds @@ -116,10 +119,10 @@ $ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | tail | xargs -IX 2018-08-28T17:13:42.825-0700: 3.498: Total time for which application threads were stopped: 0.0379155 seconds, Stopping threads took: 0.0000571 seconds 2018-08-28T17:13:43.574-0700: 4.247: Total time for which application threads were stopped: 0.0323812 seconds, Stopping threads took: 0.0000574 seconds 2018-08-28T17:13:44.602-0700: 5.275: Total time for which application threads were stopped: 0.0238975 seconds, Stopping threads took: 0.0000788 seconds -.... +---- In this case any client waiting on a query would have experienced a -[.title-ref]#56ms# latency at 17:13:41. +56ms latency at 17:13:41. Note that GC pauses are not _link:[only] garbage collection, although generally speaking high pauses with fast safepoints indicate a lack of @@ -134,7 +137,8 @@ Using these logs you can even get a pause distribution with something like https://github.com/bitly/data_hacks/blob/master/data_hacks/histogram.py[histogram.py]: -.... +[source, bash] +---- $ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | histogram.py # NumSamples = 410293; Min = 0.00; Max = 11.49 # Mean = 0.035346; Variance = 0.002216; SD = 0.047078; Median 0.036498 @@ -149,13 +153,14 @@ $ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | histogram.py 8.0465 - 9.1960 [ 0]: 9.1960 - 10.3455 [ 0]: 10.3455 - 11.4949 [ 2]: -.... +---- We can see in this case while we have very good average performance something is causing multi second JVM pauses ... In this case it was mostly safepoint pauses caused by slow disks: -.... +[source, bash] +---- $ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | tail | xargs -IX grep X gc.log.0.current| sort -k 1 2018-07-27T04:52:27.413+0000: 187831.482: Total time for which application threads were stopped: 6.5037022 seconds, Stopping threads took: 0.0005212 seconds 2018-07-30T23:38:18.354+0000: 514582.423: Total time for which application threads were stopped: 6.3262938 seconds, Stopping threads took: 0.0004882 seconds @@ -167,7 +172,7 @@ $ grep stopped gc.log.0.current | cut -f 11 -d ' ' | sort -n | tail | xargs -IX 2018-08-23T06:36:29.018+0000: 2526873.087: Total time for which application threads were stopped: 11.4949489 seconds, Stopping threads took: 11.4638297 seconds 2018-08-23T06:37:12.671+0000: 2526916.741: Total time for which application threads were stopped: 6.3867003 seconds, Stopping threads took: 6.3507166 seconds 2018-08-23T06:37:47.156+0000: 2526951.225: Total time for which application threads were stopped: 7.9528200 seconds, Stopping threads took: 7.9197756 seconds -.... +---- Sometimes reading and understanding java GC logs is hard, but you can take the raw GC files and visualize them using tools such as @@ -175,8 +180,8 @@ https://github.com/chewiebug/GCViewer[GCViewer] which take the Cassandra GC log as input and show you detailed visual information on your garbage collection performance. This includes pause analysis as well as throughput information. For a stable Cassandra JVM you probably want to -aim for pauses less than [.title-ref]#200ms# and GC throughput greater -than [.title-ref]#99%# (ymmv). +aim for pauses less than 200ms and GC throughput greater +than 99%. Java GC pauses are one of the leading causes of tail latency in Cassandra (along with drive latency) so sometimes this information can @@ -188,18 +193,20 @@ If the default logging levels are insuficient, `nodetool` can set higher or lower logging levels for various packages and classes using the `nodetool setlogginglevel` command. Start by viewing the current levels: -.... +[source, bash] +---- $ nodetool getlogginglevels Logger Name Log Level ROOT INFO org.apache.cassandra DEBUG -.... +---- Perhaps the `Gossiper` is acting up and we wish to enable it at `TRACE` level for even more insight: -.... +[source, bash] +---- $ nodetool setlogginglevel org.apache.cassandra.gms.Gossiper TRACE $ nodetool getlogginglevels @@ -214,7 +221,7 @@ TRACE [GossipStage:1] 2018-07-04 17:07:47,879 Gossiper.java:1234 - Updating heartbeat state version to 2344 from 2343 for 127.0.0.2:7000 ... TRACE [GossipStage:1] 2018-07-04 17:07:47,879 Gossiper.java:923 - local heartbeat version 2341 greater than 2340 for 127.0.0.1:7000 -.... +---- Note that any changes made this way are reverted on next Cassandra process restart. To make the changes permanent add the appropriate rule @@ -243,7 +250,8 @@ ensures the total size of the capture does not exceed a particular limit. FQL is enabled with `nodetool` and the logs are read with the provided `bin/fqltool` utility: -.... +[source, bash] +---- $ mkdir /var/tmp/fql_logs $ nodetool enablefullquerylog --path /var/tmp/fql_logs @@ -262,8 +270,8 @@ Query: select * from keyspace1.standard1 ; Values: $ nodetool disablefullquerylog -.... +---- Note that if you want more information than this tool provides, there are other live capture options available such as -`packet capture `. +xref:cql/troubleshooting/use_tools.adoc#packet-capture[`packet-capture`]. diff --git a/doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc b/doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc index a97093d85089..f80d03969565 100644 --- a/doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc +++ b/doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc @@ -11,7 +11,8 @@ useful for troubleshooting: You can use `nodetool status` to assess status of the cluster: -.... +[source, bash] +---- $ nodetool status Datacenter: dc1 @@ -22,7 +23,7 @@ Status=Up/Down UN 127.0.1.1 4.69 GiB 1 100.0% 35ea8c9f-b7a2-40a7-b9c5-0ee8b91fdd0e r1 UN 127.0.1.2 4.71 GiB 1 100.0% 752e278f-b7c5-4f58-974b-9328455af73f r2 UN 127.0.1.3 4.69 GiB 1 100.0% 9dc1a293-2cc0-40fa-a6fd-9e6054da04a7 r3 -.... +---- In this case we can see that we have three nodes in one datacenter with about 4.6GB of data each and they are all "up". The up/down status of a @@ -33,7 +34,8 @@ the full view. You can use `nodetool status` plus a little grep to see which nodes are down: -.... +[source, bash] +---- $ nodetool status | grep -v '^UN' Datacenter: dc1 =============== @@ -46,7 +48,7 @@ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack DN 127.0.0.5 105.73 KiB 1 33.3% df303ac7-61de-46e9-ac79-6e630115fd75 r1 -.... +---- In this case there are two datacenters and there is one node down in datacenter `dc2` and rack `r1`. This may indicate an issue on @@ -58,7 +60,8 @@ datacenter `dc2` and rack `r1`. This may indicate an issue on You can view latency distributions of coordinator read and write latency to help narrow down latency issues using `nodetool proxyhistograms`: -.... +[source, bash] +---- $ nodetool proxyhistograms Percentile Read Latency Write Latency Range Latency CAS Read Latency CAS Write Latency View Write Latency (micros) (micros) (micros) (micros) (micros) (micros) @@ -69,7 +72,7 @@ Percentile Read Latency Write Latency Range Latency CAS Read L 99% 3379.39 2346.80 0.00 0.00 0.00 0.00 Min 42.51 105.78 0.00 0.00 0.00 0.00 Max 25109.16 43388.63 0.00 0.00 0.00 0.00 -.... +---- Here you can see the full latency distribution of reads, writes, range requests (e.g. `select * from keyspace.table`), CAS read (compare phase @@ -86,7 +89,8 @@ If you know which table is having latency/error issues, you can use `nodetool tablehistograms` to get a better idea of what is happening locally on a node: -.... +[source, bash] +---- $ nodetool tablehistograms keyspace table Percentile SSTables Write Latency Read Latency Partition Size Cell Count (micros) (micros) (bytes) @@ -97,7 +101,7 @@ Percentile SSTables Write Latency Read Latency Partition Size 99% 2.00 182.79 785.94 17084 103 Min 0.00 42.51 24.60 14238 87 Max 2.00 12108.97 17436.92 17084 103 -.... +---- This shows you percentile breakdowns particularly critical metrics. @@ -133,7 +137,8 @@ on a particular node. This is useful for trying to find out which resource (read threads, write threads, compaction, request response threads) the Cassandra process lacks. For example: -.... +[source, bash] +---- $ nodetool tpstats Pool Name Active Pending Completed Blocked All time blocked ReadStage 2 0 12 0 0 @@ -175,7 +180,7 @@ BATCH_REMOVE 0 N/A N/A REQUEST_RESPONSE 0 0.00 0.00 0.00 0.00 PAGED_RANGE 0 N/A N/A N/A N/A READ_REPAIR 0 N/A N/A N/A N/A -.... +---- This command shows you all kinds of interesting statistics. The first section shows a detailed breakdown of threadpools for each Cassandra @@ -211,7 +216,8 @@ of load on your disk drives. There are great `os tools ` to determine if this is the case, but often it's a good idea to check if compactions are even running using `nodetool compactionstats`: -.... +[source, bash] +---- $ nodetool compactionstats pending tasks: 2 - keyspace.table: 2 @@ -219,7 +225,7 @@ pending tasks: 2 id compaction type keyspace table completed total unit progress 2062b290-7f3a-11e8-9358-cd941b956e60 Compaction keyspace table 21848273 97867583 bytes 22.32% Active compaction remaining time : 0h00m04s -.... +---- In this case there is a single compaction running on the `keyspace.table` table, has completed 21.8 megabytes of 97 and Cassandra diff --git a/doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc b/doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc index 03ceec35db07..f408c11f48d1 100644 --- a/doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc +++ b/doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc @@ -36,7 +36,8 @@ usage (E), old generation heap usage (O), count of eden collections collections (FGC) and time spent in old/mixed generation collections (FGCT): -.... +[source, bash] +---- jstat -gcutil 500ms S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 0.00 81.53 31.16 93.07 88.20 12 0.151 3 0.257 0.408 @@ -49,7 +50,7 @@ jstat -gcutil 500ms 0.00 0.00 85.03 31.16 93.07 88.20 12 0.151 3 0.257 0.408 0.00 0.00 85.03 31.16 93.07 88.20 12 0.151 3 0.257 0.408 0.00 0.00 85.94 31.16 93.07 88.20 12 0.151 3 0.257 0.408 -.... +---- In this case we see we have a relatively healthy heap profile, with 31.16% old generation heap usage and 83% eden. If the old generation @@ -69,12 +70,12 @@ To get a point in time snapshot of exactly what Cassandra is doing, run `jstack` against the Cassandra PID. *Note* that this does pause the JVM for a very brief period (<20ms).: -.... +[source, bash] +---- $ jstack > threaddump # display the threaddump $ cat threaddump -... # look at runnable threads $grep RUNNABLE threaddump -B 1 @@ -93,10 +94,9 @@ $grep RUNNABLE threaddump -B 1 "C1 CompilerThread3" #8 daemon prio=9 os_prio=0 tid=0x00007f82e80cc000 nid=0x2a29 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE -- -... # Note that the nid is the Linux thread id -.... +---- Some of the most important information in the threaddumps are waiting/blocking threads, including what locks or monitors the thread is @@ -110,7 +110,7 @@ all resources that Cassandra makes heavy uses of: * CPU cores. For executing concurrent user queries * CPU processing time. For query activity (data decompression, row -merging, etc...) +merging, etc.) * CPU processing time (low priority). For background tasks (compaction, streaming, etc ...) * RAM for Java Heap. Used to hold internal data-structures and by @@ -165,7 +165,8 @@ mapped file memory. Use iostat to determine how data drives are faring, including latency distributions, throughput, and utilization: -.... +[source, bash] +---- $ sudo iostat -xdm 2 Linux 4.13.0-13-generic (hostname) 07/03/2018 _x86_64_ (8 CPU) @@ -178,7 +179,7 @@ Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu sda 0.00 0.00 2.00 32.00 0.01 4.04 244.24 0.54 16.00 0.00 17.00 1.06 3.60 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdc 0.00 24.50 0.00 114.00 0.00 11.62 208.70 5.56 48.79 0.00 48.79 1.12 12.80 -.... +---- In this case we can see that `/dev/sdc1` is a very slow drive, having an `await` close to 50 milliseconds and an `avgqu-sz` close to 5 ios. The @@ -216,12 +217,13 @@ operating system's https://en.wikipedia.org/wiki/Page_cache[Page Cache] is crucial to performance. Start by finding how much available cache is in the system: -.... +[source, bash] +---- $ free -g total used free shared buff/cache available Mem: 15 9 2 0 3 5 Swap: 0 0 0 -.... +---- In this case 9GB of memory is used by user processes (Cassandra heap) and 8GB is available for OS page cache. Of that, 3GB is actually used to @@ -230,8 +232,8 @@ Cassandra performance can suffer significantly. This is why Cassandra starts with a reasonably small amount of memory reserved for the heap. If you suspect that you are missing the OS page cache frequently you can -use advanced tools like `cachestat ` or -`vmtouch ` to dive deeper. +use advanced tools like xref:use_tools.adoc#use-bcc-tools[cachestat] or +xref:use_tools.adoc#use-vmtouch[vmtouch] to dive deeper. === Network Latency and Reliability @@ -242,7 +244,8 @@ operations, the network can be an important resource to investigate. You can determine internode latency using tools like `ping` and `traceroute` or most effectively `mtr`: -.... +[source, bash] +---- $ mtr -nr www.google.com Start: Sun Jul 22 13:10:28 2018 HOST: hostname Loss% Snt Last Avg Best Wrst StDev @@ -260,7 +263,7 @@ HOST: hostname Loss% Snt Last Avg Best Wrst StDev 13.|-- 108.170.242.81 0.0% 10 14.4 13.2 10.9 16.0 1.7 14.|-- 72.14.239.43 0.0% 10 12.2 16.1 11.0 32.8 7.1 15.|-- 216.58.195.68 0.0% 10 25.1 15.3 11.1 25.1 4.8 -.... +---- In this example of `mtr`, we can rapidly assess the path that your packets are taking, as well as what their typical loss and latency are. @@ -277,7 +280,8 @@ both bandwidth usage as well as connection information at a glance. An example showing traffic during a stress run against a local `ccm` cluster: -.... +[source, bash] +---- $ # remove the -t for ncurses instead of pure text $ sudo iftop -nNtP -i lo interface: lo @@ -314,7 +318,7 @@ Total send and receive rate: 2.25Mb 2.25Mb 2.25M Peak rate (sent/received/total): 2.25Mb 0b 2.25Mb Cumulative (sent/received/total): 576KB 0B 576KB ============================================================================================ -.... +---- In this case we can see that bandwidth is fairly shared between many peers, but if the total was getting close to the rated capacity of the @@ -334,9 +338,10 @@ https://github.com/iovisor/bcc[bcc-tools] for diving deep into performance problems. First install `bcc-tools`, e.g. via `apt` on Debian: -.... +[source, bash] +---- $ apt install bcc-tools -.... +---- Then you can use all the tools that `bcc-tools` contains. One of the most useful tools is `cachestat` @@ -344,7 +349,8 @@ most useful tools is `cachestat` examples]) which allows you to determine exactly how many OS page cache hits and misses are happening: -.... +[source, bash] +---- $ sudo /usr/share/bcc/tools/cachestat -T 1 TIME TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB 18:44:08 66 66 0 64 88 4427 @@ -356,7 +362,7 @@ TIME TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB 18:44:14 16741 0 16741 58 88 4428 18:44:15 1935 36 1899 18 88 4428 18:44:16 89 34 55 18 88 4428 -.... +---- In this case there are not too many page cache `MISSES` which indicates a reasonably sized cache. These metrics are the most direct measurement @@ -370,7 +376,8 @@ You can also measure disk latency distributions using `biolatency` examples]) to get an idea of how slow Cassandra will be when reads miss the OS page Cache and have to hit disks: -.... +[source, bash] +---- $ sudo /usr/share/bcc/tools/biolatency -D 10 Tracing block device I/O... Hit Ctrl-C to end. @@ -405,7 +412,7 @@ disk = 'sdc' 4096 -> 8191 : 56 |***************** | 8192 -> 16383 : 131 |****************************************| 16384 -> 32767 : 9 |** | -.... +---- In this case most ios on the data drive (`sdc`) are fast, but many take between 8 and 16 milliseconds. @@ -414,7 +421,8 @@ Finally `biosnoop` (https://github.com/iovisor/bcc/blob/master/tools/biosnoop_example.txt[examples]) can be used to dive even deeper and see per IO latencies: -.... +[source, bash] +---- $ sudo /usr/share/bcc/tools/biosnoop | grep java | head 0.000000000 java 17427 sdc R 3972458600 4096 13.58 0.000818000 java 17427 sdc R 3972459408 4096 0.35 @@ -431,7 +439,7 @@ $ sudo /usr/share/bcc/tools/biosnoop | grep java | head 8.033175000 java 18279 sdc R 10899952 8192 0.46 8.073295000 java 18279 sdc R 23384320 122880 3.01 8.073768000 java 18279 sdc R 23384560 8192 0.46 -.... +---- With `biosnoop` you see every single IO and how long they take. This data can be used to construct the latency distributions in `biolatency` @@ -455,25 +463,27 @@ https://github.com/hoytech/vmtouch[vmtouch]. First install it: -.... +[source, bash] +---- $ git clone https://github.com/hoytech/vmtouch.git $ cd vmtouch $ make -.... +---- Then run it on the Cassandra data directory: -.... +[source, bash] +---- $ ./vmtouch /var/lib/cassandra/data/ Files: 312 Directories: 92 Resident Pages: 62503/64308 244M/251M 97.2% Elapsed: 0.005657 seconds -.... +---- In this case almost the entire dataset is hot in OS page Cache. Generally speaking the percentage doesn't really matter unless reads are -missing the cache (per e.g. `cachestat `), in which case +missing the cache (per e.g. xref:cql/troubleshooting/use_tools.adoc#use-bcc-tools[cachestat] in which case having additional memory may help read performance. === CPU Flamegraphs @@ -505,7 +515,8 @@ For example just cloning straight off github we first install the `perf-map-agent` to the location of our JVMs (assumed to be `/usr/lib/jvm`): -.... +[source, bash] +---- $ sudo bash $ export JAVA_HOME=/usr/lib/jvm/java-8-oracle/ $ cd /usr/lib/jvm @@ -513,11 +524,12 @@ $ git clone --depth=1 https://github.com/jvm-profiling-tools/perf-map-agent $ cd perf-map-agent $ cmake . $ make -.... +---- Now to get a flamegraph: -.... +[source, bash] +---- $ git clone --depth=1 https://github.com/brendangregg/FlameGraph $ sudo bash $ cd FlameGraph @@ -527,7 +539,7 @@ $ # Translate the data $ perf script > cassandra_stacks $ cat cassandra_stacks | ./stackcollapse-perf.pl | grep -v cpu_idle | \ ./flamegraph.pl --color=java --hash > cassandra_flames.svg -.... +---- The resulting SVG is searchable, zoomable, and generally easy to introspect using a browser. @@ -545,15 +557,17 @@ releases. To get a packet capture first capture some packets: -.... +[source, bash] +---- $ sudo tcpdump -U -s0 -i -w cassandra.pcap -n "tcp port 9042" -.... +---- Now open it up with wireshark: -.... +[source, bash] +---- $ wireshark cassandra.pcap -.... +---- If you don't see CQL like statements try telling to decode as CQL by right clicking on a packet going to 9042 -> `Decode as` -> select CQL From 2d47c4c86c1114be328c5524c5e35299e942c2b2 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 28 Jul 2020 18:17:28 -0700 Subject: [PATCH 019/115] change prelease # --- doc/source/antora.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/antora.yml b/doc/source/antora.yml index 33e14f0cbcaf..c15ca966710e 100644 --- a/doc/source/antora.yml +++ b/doc/source/antora.yml @@ -1,6 +1,6 @@ name: Cassandra version: '4.0' -prerelease: -rc.5 +prerelease: -beta1 nav: - modules/ROOT/nav.adoc - modules/cassandra/nav.adoc From 36e437638482bcfb85c6c63251d5b0c4c9e0d5f4 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 28 Jul 2020 18:18:02 -0700 Subject: [PATCH 020/115] change location of source files --- doc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.md b/doc/README.md index 1628fa44dc0d..7960b23a5002 100644 --- a/doc/README.md +++ b/doc/README.md @@ -3,7 +3,7 @@ Apache Cassandra documentation directory This directory contains the documentation maintained in-tree for Apache Cassandra. This directory contains the following documents: -- The source of the official Cassandra documentation, in the `source/` +- The source of the official Cassandra documentation, in the `source/modules` subdirectory. See below for more details on how to edit/build that documentation. - The specification(s) for the supported versions of native transport protocol. From 4ffb91e285f2dbcafe434417585ea319e66532f4 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 28 Jul 2020 19:10:30 -0700 Subject: [PATCH 021/115] remove sphinx stuff from Makefile --- doc/Makefile | 223 --------------------------------------------------- 1 file changed, 223 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index fa9e5e8b9c3a..4d1eecc226d7 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -8,11 +8,6 @@ ANTORACMD = antora # Internal variables. BUILDDIR = build -#PAPEROPT_a4 = -D latex_paper_size=a4 -#PAPEROPT_letter = -D latex_paper_size=letter -#ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -# the i18n builder cannot share the environment and doctrees with the others -#I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source YAML_DOC_INPUT=../conf/cassandra.yaml YAML_DOC_OUTPUT=source/modules/cassandra/pages/configuration/cass_yaml_file.adoc @@ -80,221 +75,3 @@ website: clean @rm $(WEB_SITE_PRESENCE_FILE) @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: dirhtml -dirhtml: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -.PHONY: singlehtml -singlehtml: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -.PHONY: pickle -pickle: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -.PHONY: json -json: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -.PHONY: htmlhelp -htmlhelp: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -.PHONY: qthelp -qthelp: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ApacheCassandraDocumentation.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ApacheCassandraDocumentation.qhc" - -.PHONY: applehelp -applehelp: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -.PHONY: devhelp -devhelp: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/ApacheCassandraDocumentation" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ApacheCassandraDocumentation" - @echo "# devhelp" - -.PHONY: epub -epub: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -.PHONY: epub3 -epub3: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 - @echo - @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." - -.PHONY: latex -latex: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -.PHONY: latexpdf -latexpdf: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: latexpdfja -latexpdfja: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: text -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -.PHONY: man -man: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -.PHONY: texinfo -texinfo: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -.PHONY: info -info: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -.PHONY: gettext -gettext: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -.PHONY: changes -changes: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -.PHONY: linkcheck -linkcheck: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: doctest -doctest: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -.PHONY: coverage -coverage: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -.PHONY: xml -xml: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -.PHONY: pseudoxml -pseudoxml: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." - -.PHONY: dummy -dummy: - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy - @echo - @echo "Build finished. Dummy builder generates no files." From 0c3845b3e7cb07f6925da1d290bfecd91026c32c Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 29 Jul 2020 13:15:43 -0700 Subject: [PATCH 022/115] changes for antora --- cass_yaml.adoc | 2085 ------------------------------------------------ doc/Dockerfile | 1 + doc/Makefile | 2 +- 3 files changed, 2 insertions(+), 2086 deletions(-) delete mode 100644 cass_yaml.adoc diff --git a/cass_yaml.adoc b/cass_yaml.adoc deleted file mode 100644 index b7927b24cb0d..000000000000 --- a/cass_yaml.adoc +++ /dev/null @@ -1,2085 +0,0 @@ -= cassandra.yaml file configuration - -== `cluster_name` - -The name of the cluster. This is mainly used to prevent machines in -one logical cluster from joining another. - -_Default Value:_ 'Test Cluster' - -== `num_tokens` - - -This defines the number of tokens randomly assigned to this node on the ring -The more tokens, relative to other nodes, the larger the proportion of data -that this node will store. You probably want all nodes to have the same number -of tokens assuming they have equal hardware capability. - -If you leave this unspecified, Cassandra will use the default of 1 token for legacy compatibility, -and will use the initial_token as described below. - -Specifying initial_token will override this setting on the node's initial start, -on subsequent starts, this setting will apply even if initial token is set. - - -_Default Value:_ 256 - -== `allocate_tokens_for_keyspace` - -*This option is commented out by default.* - -Triggers automatic allocation of num_tokens tokens for this node. The allocation -algorithm attempts to choose tokens in a way that optimizes replicated load over -the nodes in the datacenter for the replica factor. - -The load assigned to each node will be close to proportional to its number of -vnodes. - -Only supported with the Murmur3Partitioner. - -Replica factor is determined via the replication strategy used by the specified -keyspace. - -_Default Value:_ KEYSPACE - -== `allocate_tokens_for_local_replication_factor` - -*This option is commented out by default.* - -Replica factor is explicitly set, regardless of keyspace or datacenter. -This is the replica factor within the datacenter, like NTS. - -_Default Value:_ 3 - -== `initial_token` - -*This option is commented out by default.* - -initial_token allows you to specify tokens manually. While you can use it with -vnodes (num_tokens > 1, above) -- in which case you should provide a -comma-separated list -- it's primarily used when adding nodes to legacy clusters -that do not have vnodes enabled. - -== `hinted_handoff_enabled` - - -May either be "true" or "false" to enable globally - -_Default Value:_ true - -== `hinted_handoff_disabled_datacenters` - -*This option is commented out by default.* - -When hinted_handoff_enabled is true, a black list of data centers that will not -perform hinted handoff - -_Default Value (complex option)_: - -.... - # - DC1 - # - DC2 -.... - -== `max_hint_window_in_ms` - -this defines the maximum amount of time a dead host will have hints -generated. After it has been dead this long, new hints for it will not be -created until it has been seen alive and gone down again. - -_Default Value:_ 10800000 # 3 hours - -== `hinted_handoff_throttle_in_kb` - - -Maximum throttle in KBs per second, per delivery thread. This will be -reduced proportionally to the number of nodes in the cluster. (If there -are two nodes in the cluster, each delivery thread will use the maximum -rate; if there are three, each will throttle to half of the maximum, -since we expect two nodes to be delivering hints simultaneously.) - -_Default Value:_ 1024 - -== `max_hints_delivery_threads` - - -Number of threads with which to deliver hints; -Consider increasing this number when you have multi-dc deployments, since -cross-dc handoff tends to be slower - -_Default Value:_ 2 - -== `hints_directory` - -*This option is commented out by default.* - -Directory where Cassandra should store hints. -If not set, the default directory is $CASSANDRA_HOME/data/hints. - -_Default Value:_ /var/lib/cassandra/hints - -== `hints_flush_period_in_ms` - - -How often hints should be flushed from the internal buffers to disk. -Will *not* trigger fsync. - -_Default Value:_ 10000 - -== `max_hints_file_size_in_mb` - - -Maximum size for a single hints file, in megabytes. - -_Default Value:_ 128 - -== `hints_compression` - -*This option is commented out by default.* - -Compression to apply to the hint files. If omitted, hints files -will be written uncompressed. LZ4, Snappy, and Deflate compressors -are supported. - -_Default Value (complex option)_: - -.... - # - class_name: LZ4Compressor - # parameters: - # - -.... - -== `batchlog_replay_throttle_in_kb` - -Maximum throttle in KBs per second, total. This will be -reduced proportionally to the number of nodes in the cluster. - -_Default Value:_ 1024 - -== `authenticator` - - -Authentication backend, implementing IAuthenticator; used to identify users -Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllAuthenticator, -PasswordAuthenticator}. - -- AllowAllAuthenticator performs no checks - set it to disable authentication. -- PasswordAuthenticator relies on username/password pairs to authenticate - users. It keeps usernames and hashed passwords in system_auth.roles table. - Please increase system_auth keyspace replication factor if you use this authenticator. - If using PasswordAuthenticator, CassandraRoleManager must also be used (see below) - -_Default Value:_ AllowAllAuthenticator - -== `authorizer` - - -Authorization backend, implementing IAuthorizer; used to limit access/provide permissions -Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllAuthorizer, -CassandraAuthorizer}. - -- AllowAllAuthorizer allows any action to any user - set it to disable authorization. -- CassandraAuthorizer stores permissions in system_auth.role_permissions table. Please - increase system_auth keyspace replication factor if you use this authorizer. - -_Default Value:_ AllowAllAuthorizer - -== `role_manager` - - -Part of the Authentication & Authorization backend, implementing IRoleManager; used -to maintain grants and memberships between roles. -Out of the box, Cassandra provides org.apache.cassandra.auth.CassandraRoleManager, -which stores role information in the system_auth keyspace. Most functions of the -IRoleManager require an authenticated login, so unless the configured IAuthenticator -actually implements authentication, most of this functionality will be unavailable. - -- CassandraRoleManager stores role data in the system_auth keyspace. Please - increase system_auth keyspace replication factor if you use this role manager. - -_Default Value:_ CassandraRoleManager - -== `network_authorizer` - - -Network authorization backend, implementing INetworkAuthorizer; used to restrict user -access to certain DCs -Out of the box, Cassandra provides org.apache.cassandra.auth.{AllowAllNetworkAuthorizer, -CassandraNetworkAuthorizer}. - -- AllowAllNetworkAuthorizer allows access to any DC to any user - set it to disable authorization. -- CassandraNetworkAuthorizer stores permissions in system_auth.network_permissions table. Please - increase system_auth keyspace replication factor if you use this authorizer. - -_Default Value:_ AllowAllNetworkAuthorizer - -== `roles_validity_in_ms` - - -Validity period for roles cache (fetching granted roles can be an expensive -operation depending on the role manager, CassandraRoleManager is one example) -Granted roles are cached for authenticated sessions in AuthenticatedUser and -after the period specified here, become eligible for (async) reload. -Defaults to 2000, set to 0 to disable caching entirely. -Will be disabled automatically for AllowAllAuthenticator. - -_Default Value:_ 2000 - -== `roles_update_interval_in_ms` - -*This option is commented out by default.* - -Refresh interval for roles cache (if enabled). -After this interval, cache entries become eligible for refresh. Upon next -access, an async reload is scheduled and the old value returned until it -completes. If roles_validity_in_ms is non-zero, then this must be -also. -Defaults to the same value as roles_validity_in_ms. - -_Default Value:_ 2000 - -== `permissions_validity_in_ms` - - -Validity period for permissions cache (fetching permissions can be an -expensive operation depending on the authorizer, CassandraAuthorizer is -one example). Defaults to 2000, set to 0 to disable. -Will be disabled automatically for AllowAllAuthorizer. - -_Default Value:_ 2000 - -== `permissions_update_interval_in_ms` - -*This option is commented out by default.* - -Refresh interval for permissions cache (if enabled). -After this interval, cache entries become eligible for refresh. Upon next -access, an async reload is scheduled and the old value returned until it -completes. If permissions_validity_in_ms is non-zero, then this must be -also. -Defaults to the same value as permissions_validity_in_ms. - -_Default Value:_ 2000 - -== `credentials_validity_in_ms` - - -Validity period for credentials cache. This cache is tightly coupled to -the provided PasswordAuthenticator implementation of IAuthenticator. If -another IAuthenticator implementation is configured, this cache will not -be automatically used and so the following settings will have no effect. -Please note, credentials are cached in their encrypted form, so while -activating this cache may reduce the number of queries made to the -underlying table, it may not bring a significant reduction in the -latency of individual authentication attempts. -Defaults to 2000, set to 0 to disable credentials caching. - -_Default Value:_ 2000 - -== `credentials_update_interval_in_ms` - -*This option is commented out by default.* - -Refresh interval for credentials cache (if enabled). -After this interval, cache entries become eligible for refresh. Upon next -access, an async reload is scheduled and the old value returned until it -completes. If credentials_validity_in_ms is non-zero, then this must be -also. -Defaults to the same value as credentials_validity_in_ms. - -_Default Value:_ 2000 - -== `partitioner` - - -The partitioner is responsible for distributing groups of rows (by -partition key) across nodes in the cluster. The partitioner can NOT be -changed without reloading all data. If you are adding nodes or upgrading, -you should set this to the same partitioner that you are currently using. - -The default partitioner is the Murmur3Partitioner. Older partitioners -such as the RandomPartitioner, ByteOrderedPartitioner, and -OrderPreservingPartitioner have been included for backward compatibility only. -For new clusters, you should NOT change this value. - - -_Default Value:_ org.apache.cassandra.dht.Murmur3Partitioner - -== `data_file_directories` - -*This option is commented out by default.* - -Directories where Cassandra should store data on disk. If multiple -directories are specified, Cassandra will spread data evenly across -them by partitioning the token ranges. -If not set, the default directory is $CASSANDRA_HOME/data/data. - -_Default Value (complex option)_: - -.... - # - /var/lib/cassandra/data -.... - -== `commitlog_directory` - -*This option is commented out by default.* -commit log. when running on magnetic HDD, this should be a -separate spindle than the data directories. -If not set, the default directory is $CASSANDRA_HOME/data/commitlog. - -_Default Value:_ /var/lib/cassandra/commitlog - -== `cdc_enabled` - - -Enable / disable CDC functionality on a per-node basis. This modifies the logic used -for write path allocation rejection (standard: never reject. cdc: reject Mutation -containing a CDC-enabled table if at space limit in cdc_raw_directory). - -_Default Value:_ false - -== `cdc_raw_directory` - -*This option is commented out by default.* - -CommitLogSegments are moved to this directory on flush if cdc_enabled: true and the -segment contains mutations for a CDC-enabled table. This should be placed on a -separate spindle than the data directories. If not set, the default directory is -$CASSANDRA_HOME/data/cdc_raw. - -_Default Value:_ /var/lib/cassandra/cdc_raw - -== `disk_failure_policy` - - -Policy for data disk failures: - -die - shut down gossip and client transports and kill the JVM for any fs errors or - single-sstable errors, so the node can be replaced. - -stop_paranoid - shut down gossip and client transports even for single-sstable errors, - kill the JVM for errors during startup. - -stop - shut down gossip and client transports, leaving the node effectively dead, but - can still be inspected via JMX, kill the JVM for errors during startup. - -best_effort - stop using the failed disk and respond to requests based on - remaining available sstables. This means you WILL see obsolete - data at CL.ONE! - -ignore - ignore fatal errors and let requests fail, as in pre-1.2 Cassandra - -_Default Value:_ stop - -== `commit_failure_policy` - - -Policy for commit disk failures: - -die - shut down the node and kill the JVM, so the node can be replaced. - -stop - shut down the node, leaving the node effectively dead, but - can still be inspected via JMX. - -stop_commit - shutdown the commit log, letting writes collect but - continuing to service reads, as in pre-2.0.5 Cassandra - -ignore - ignore fatal errors and let the batches fail - -_Default Value:_ stop - -== `prepared_statements_cache_size_mb` - - -Maximum size of the native protocol prepared statement cache - -Valid values are either "auto" (omitting the value) or a value greater 0. - -Note that specifying a too large value will result in long running GCs and possbily -out-of-memory errors. Keep the value at a small fraction of the heap. - -If you constantly see "prepared statements discarded in the last minute because -cache limit reached" messages, the first step is to investigate the root cause -of these messages and check whether prepared statements are used correctly - -i.e. use bind markers for variable parts. - -Do only change the default value, if you really have more prepared statements than -fit in the cache. In most cases it is not neccessary to change this value. -Constantly re-preparing statements is a performance penalty. - -Default value ("auto") is 1/256th of the heap or 10MB, whichever is greater - -== `key_cache_size_in_mb` - - -Maximum size of the key cache in memory. - -Each key cache hit saves 1 seek and each row cache hit saves 2 seeks at the -minimum, sometimes more. The key cache is fairly tiny for the amount of -time it saves, so it's worthwhile to use it at large numbers. -The row cache saves even more time, but must contain the entire row, -so it is extremely space-intensive. It's best to only use the -row cache if you have hot rows or static rows. - -NOTE: if you reduce the size, you may not get you hottest keys loaded on startup. - -Default value is empty to make it "auto" (min(5% of Heap (in MB), 100MB)). Set to 0 to disable key cache. - -== `key_cache_save_period` - - -Duration in seconds after which Cassandra should -save the key cache. Caches are saved to saved_caches_directory as -specified in this configuration file. - -Saved caches greatly improve cold-start speeds, and is relatively cheap in -terms of I/O for the key cache. Row cache saving is much more expensive and -has limited use. - -Default is 14400 or 4 hours. - -_Default Value:_ 14400 - -== `key_cache_keys_to_save` - -*This option is commented out by default.* - -Number of keys from the key cache to save -Disabled by default, meaning all keys are going to be saved - -_Default Value:_ 100 - -== `row_cache_class_name` - -*This option is commented out by default.* - -Row cache implementation class name. Available implementations: - -org.apache.cassandra.cache.OHCProvider - Fully off-heap row cache implementation (default). - -org.apache.cassandra.cache.SerializingCacheProvider - This is the row cache implementation availabile - in previous releases of Cassandra. - -_Default Value:_ org.apache.cassandra.cache.OHCProvider - -== `row_cache_size_in_mb` - - -Maximum size of the row cache in memory. -Please note that OHC cache implementation requires some additional off-heap memory to manage -the map structures and some in-flight memory during operations before/after cache entries can be -accounted against the cache capacity. This overhead is usually small compared to the whole capacity. -Do not specify more memory that the system can afford in the worst usual situation and leave some -headroom for OS block level cache. Do never allow your system to swap. - -Default value is 0, to disable row caching. - -_Default Value:_ 0 - -== `row_cache_save_period` - - -Duration in seconds after which Cassandra should save the row cache. -Caches are saved to saved_caches_directory as specified in this configuration file. - -Saved caches greatly improve cold-start speeds, and is relatively cheap in -terms of I/O for the key cache. Row cache saving is much more expensive and -has limited use. - -Default is 0 to disable saving the row cache. - -_Default Value:_ 0 - -== `row_cache_keys_to_save` - -*This option is commented out by default.* - -Number of keys from the row cache to save. -Specify 0 (which is the default), meaning all keys are going to be saved - -_Default Value:_ 100 - -== `counter_cache_size_in_mb` - - -Maximum size of the counter cache in memory. - -Counter cache helps to reduce counter locks' contention for hot counter cells. -In case of RF = 1 a counter cache hit will cause Cassandra to skip the read before -write entirely. With RF > 1 a counter cache hit will still help to reduce the duration -of the lock hold, helping with hot counter cell updates, but will not allow skipping -the read entirely. Only the local (clock, count) tuple of a counter cell is kept -in memory, not the whole counter, so it's relatively cheap. - -NOTE: if you reduce the size, you may not get you hottest keys loaded on startup. - -Default value is empty to make it "auto" (min(2.5% of Heap (in MB), 50MB)). Set to 0 to disable counter cache. -NOTE: if you perform counter deletes and rely on low gcgs, you should disable the counter cache. - -== `counter_cache_save_period` - - -Duration in seconds after which Cassandra should -save the counter cache (keys only). Caches are saved to saved_caches_directory as -specified in this configuration file. - -Default is 7200 or 2 hours. - -_Default Value:_ 7200 - -== `counter_cache_keys_to_save` - -*This option is commented out by default.* - -Number of keys from the counter cache to save -Disabled by default, meaning all keys are going to be saved - -_Default Value:_ 100 - -== `saved_caches_directory` - -*This option is commented out by default.* - -saved caches -If not set, the default directory is $CASSANDRA_HOME/data/saved_caches. - -_Default Value:_ /var/lib/cassandra/saved_caches - -== `commitlog_sync_batch_window_in_ms` - -*This option is commented out by default.* - -commitlog_sync may be either "periodic", "group", or "batch." - -When in batch mode, Cassandra won't ack writes until the commit log -has been flushed to disk. Each incoming write will trigger the flush task. -commitlog_sync_batch_window_in_ms is a deprecated value. Previously it had -almost no value, and is being removed. - - -_Default Value:_ 2 - -== `commitlog_sync_group_window_in_ms` - -*This option is commented out by default.* - -group mode is similar to batch mode, where Cassandra will not ack writes -until the commit log has been flushed to disk. The difference is group -mode will wait up to commitlog_sync_group_window_in_ms between flushes. - - -_Default Value:_ 1000 - -== `commitlog_sync` - - -the default option is "periodic" where writes may be acked immediately -and the CommitLog is simply synced every commitlog_sync_period_in_ms -milliseconds. - -_Default Value:_ periodic - -== `commitlog_sync_period_in_ms` - - -_Default Value:_ 10000 - -== `periodic_commitlog_sync_lag_block_in_ms` - -*This option is commented out by default.* - -When in periodic commitlog mode, the number of milliseconds to block writes -while waiting for a slow disk flush to complete. - -== `commitlog_segment_size_in_mb` - - -The size of the individual commitlog file segments. A commitlog -segment may be archived, deleted, or recycled once all the data -in it (potentially from each columnfamily in the system) has been -flushed to sstables. - -The default size is 32, which is almost always fine, but if you are -archiving commitlog segments (see commitlog_archiving.properties), -then you probably want a finer granularity of archiving; 8 or 16 MB -is reasonable. -Max mutation size is also configurable via max_mutation_size_in_kb setting in -cassandra.yaml. The default is half the size commitlog_segment_size_in_mb * 1024. -This should be positive and less than 2048. - -NOTE: If max_mutation_size_in_kb is set explicitly then commitlog_segment_size_in_mb must -be set to at least twice the size of max_mutation_size_in_kb / 1024 - - -_Default Value:_ 32 - -== `commitlog_compression` - -*This option is commented out by default.* - -Compression to apply to the commit log. If omitted, the commit log -will be written uncompressed. LZ4, Snappy, and Deflate compressors -are supported. - -_Default Value (complex option)_: - -.... - # - class_name: LZ4Compressor - # parameters: - # - -.... - -== `table` - -*This option is commented out by default.* -Compression to apply to SSTables as they flush for compressed tables. -Note that tables without compression enabled do not respect this flag. - -As high ratio compressors like LZ4HC, Zstd, and Deflate can potentially -block flushes for too long, the default is to flush with a known fast -compressor in those cases. Options are: - -none : Flush without compressing blocks but while still doing checksums. -fast : Flush with a fast compressor. If the table is already using a - fast compressor that compressor is used. - -_Default Value:_ Always flush with the same compressor that the table uses. This - -== `flush_compression` - -*This option is commented out by default.* - was the pre 4.0 behavior. - - -_Default Value:_ fast - -== `seed_provider` - - -any class that implements the SeedProvider interface and has a -constructor that takes a Map of parameters will do. - -_Default Value (complex option)_: - -.... - # Addresses of hosts that are deemed contact points. - # Cassandra nodes use this list of hosts to find each other and learn - # the topology of the ring. You must change this if you are running - # multiple nodes! - - class_name: org.apache.cassandra.locator.SimpleSeedProvider - parameters: - # seeds is actually a comma-delimited list of addresses. - # Ex: ",," - - seeds: "127.0.0.1:7000" -.... - -== `concurrent_reads` - -For workloads with more data than can fit in memory, Cassandra's -bottleneck will be reads that need to fetch data from -disk. "concurrent_reads" should be set to (16 * number_of_drives) in -order to allow the operations to enqueue low enough in the stack -that the OS and drives can reorder them. Same applies to -"concurrent_counter_writes", since counter writes read the current -values before incrementing and writing them back. - -On the other hand, since writes are almost never IO bound, the ideal -number of "concurrent_writes" is dependent on the number of cores in -your system; (8 * number_of_cores) is a good rule of thumb. - -_Default Value:_ 32 - -== `concurrent_writes` - - -_Default Value:_ 32 - -== `concurrent_counter_writes` - - -_Default Value:_ 32 - -== `concurrent_materialized_view_writes` - - -For materialized view writes, as there is a read involved, so this should -be limited by the less of concurrent reads or concurrent writes. - -_Default Value:_ 32 - -== `file_cache_size_in_mb` - -*This option is commented out by default.* - -Maximum memory to use for sstable chunk cache and buffer pooling. -32MB of this are reserved for pooling buffers, the rest is used as an -cache that holds uncompressed sstable chunks. -Defaults to the smaller of 1/4 of heap or 512MB. This pool is allocated off-heap, -so is in addition to the memory allocated for heap. The cache also has on-heap -overhead which is roughly 128 bytes per chunk (i.e. 0.2% of the reserved size -if the default 64k chunk size is used). -Memory is only allocated when needed. - -_Default Value:_ 512 - -== `buffer_pool_use_heap_if_exhausted` - -*This option is commented out by default.* - -Flag indicating whether to allocate on or off heap when the sstable buffer -pool is exhausted, that is when it has exceeded the maximum memory -file_cache_size_in_mb, beyond which it will not cache buffers but allocate on request. - - -_Default Value:_ true - -== `disk_optimization_strategy` - -*This option is commented out by default.* - -The strategy for optimizing disk read -Possible values are: -ssd (for solid state disks, the default) -spinning (for spinning disks) - -_Default Value:_ ssd - -== `memtable_heap_space_in_mb` - -*This option is commented out by default.* - -Total permitted memory to use for memtables. Cassandra will stop -accepting writes when the limit is exceeded until a flush completes, -and will trigger a flush based on memtable_cleanup_threshold -If omitted, Cassandra will set both to 1/4 the size of the heap. - -_Default Value:_ 2048 - -== `memtable_offheap_space_in_mb` - -*This option is commented out by default.* - -_Default Value:_ 2048 - -== `memtable_cleanup_threshold` - -*This option is commented out by default.* - -memtable_cleanup_threshold is deprecated. The default calculation -is the only reasonable choice. See the comments on memtable_flush_writers -for more information. - -Ratio of occupied non-flushing memtable size to total permitted size -that will trigger a flush of the largest memtable. Larger mct will -mean larger flushes and hence less compaction, but also less concurrent -flush activity which can make it difficult to keep your disks fed -under heavy write load. - -memtable_cleanup_threshold defaults to 1 / (memtable_flush_writers + 1) - -_Default Value:_ 0.11 - -== `memtable_allocation_type` - - -Specify the way Cassandra allocates and manages memtable memory. -Options are: - -heap_buffers - on heap nio buffers - -offheap_buffers - off heap (direct) nio buffers - -offheap_objects - off heap objects - -_Default Value:_ heap_buffers - -== `repair_session_space_in_mb` - -*This option is commented out by default.* - -Limit memory usage for Merkle tree calculations during repairs. The default -is 1/16th of the available heap. The main tradeoff is that smaller trees -have less resolution, which can lead to over-streaming data. If you see heap -pressure during repairs, consider lowering this, but you cannot go below -one megabyte. If you see lots of over-streaming, consider raising -this or using subrange repair. - -For more details see https://issues.apache.org/jira/browse/CASSANDRA-14096. - - -== `commitlog_total_space_in_mb` - -*This option is commented out by default.* - -Total space to use for commit logs on disk. - -If space gets above this value, Cassandra will flush every dirty CF -in the oldest segment and remove it. So a small total commitlog space -will tend to cause more flush activity on less-active columnfamilies. - -The default value is the smaller of 8192, and 1/4 of the total space -of the commitlog volume. - - -_Default Value:_ 8192 - -== `memtable_flush_writers` - -*This option is commented out by default.* - -This sets the number of memtable flush writer threads per disk -as well as the total number of memtables that can be flushed concurrently. -These are generally a combination of compute and IO bound. - -Memtable flushing is more CPU efficient than memtable ingest and a single thread -can keep up with the ingest rate of a whole server on a single fast disk -until it temporarily becomes IO bound under contention typically with compaction. -At that point you need multiple flush threads. At some point in the future -it may become CPU bound all the time. - -You can tell if flushing is falling behind using the MemtablePool.BlockedOnAllocation -metric which should be 0, but will be non-zero if threads are blocked waiting on flushing -to free memory. - -memtable_flush_writers defaults to two for a single data directory. -This means that two memtables can be flushed concurrently to the single data directory. -If you have multiple data directories the default is one memtable flushing at a time -but the flush will use a thread per data directory so you will get two or more writers. - -Two is generally enough to flush on a fast disk [array] mounted as a single data directory. -Adding more flush writers will result in smaller more frequent flushes that introduce more -compaction overhead. - -There is a direct tradeoff between number of memtables that can be flushed concurrently -and flush size and frequency. More is not better you just need enough flush writers -to never stall waiting for flushing to free memory. - - -_Default Value:_ 2 - -== `cdc_total_space_in_mb` - -*This option is commented out by default.* - -Total space to use for change-data-capture logs on disk. - -If space gets above this value, Cassandra will throw WriteTimeoutException -on Mutations including tables with CDC enabled. A CDCCompactor is responsible -for parsing the raw CDC logs and deleting them when parsing is completed. - -The default value is the min of 4096 mb and 1/8th of the total space -of the drive where cdc_raw_directory resides. - -_Default Value:_ 4096 - -== `cdc_free_space_check_interval_ms` - -*This option is commented out by default.* - -When we hit our cdc_raw limit and the CDCCompactor is either running behind -or experiencing backpressure, we check at the following interval to see if any -new space for cdc-tracked tables has been made available. Default to 250ms - -_Default Value:_ 250 - -== `index_summary_capacity_in_mb` - - -A fixed memory pool size in MB for for SSTable index summaries. If left -empty, this will default to 5% of the heap size. If the memory usage of -all index summaries exceeds this limit, SSTables with low read rates will -shrink their index summaries in order to meet this limit. However, this -is a best-effort process. In extreme conditions Cassandra may need to use -more than this amount of memory. - -== `index_summary_resize_interval_in_minutes` - - -How frequently index summaries should be resampled. This is done -periodically to redistribute memory from the fixed-size pool to sstables -proportional their recent read rates. Setting to -1 will disable this -process, leaving existing index summaries at their current sampling level. - -_Default Value:_ 60 - -== `trickle_fsync` - - -Whether to, when doing sequential writing, fsync() at intervals in -order to force the operating system to flush the dirty -buffers. Enable this to avoid sudden dirty buffer flushing from -impacting read latencies. Almost always a good idea on SSDs; not -necessarily on platters. - -_Default Value:_ false - -== `trickle_fsync_interval_in_kb` - - -_Default Value:_ 10240 - -== `storage_port` - - -TCP port, for commands and data -For security reasons, you should not expose this port to the internet. Firewall it if needed. - -_Default Value:_ 7000 - -== `ssl_storage_port` - - -SSL port, for legacy encrypted communication. This property is unused unless enabled in -server_encryption_options (see below). As of cassandra 4.0, this property is deprecated -as a single port can be used for either/both secure and insecure connections. -For security reasons, you should not expose this port to the internet. Firewall it if needed. - -_Default Value:_ 7001 - -== `listen_address` - - -Address or interface to bind to and tell other Cassandra nodes to connect to. -You _must_ change this if you want multiple nodes to be able to communicate! - -Set listen_address OR listen_interface, not both. - -Leaving it blank leaves it up to InetAddress.getLocalHost(). This -will always do the Right Thing _if_ the node is properly configured -(hostname, name resolution, etc), and the Right Thing is to use the -address associated with the hostname (it might not be). - -Setting listen_address to 0.0.0.0 is always wrong. - - -_Default Value:_ localhost - -== `listen_interface` - -*This option is commented out by default.* - -Set listen_address OR listen_interface, not both. Interfaces must correspond -to a single address, IP aliasing is not supported. - -_Default Value:_ eth0 - -== `listen_interface_prefer_ipv6` - -*This option is commented out by default.* - -If you choose to specify the interface by name and the interface has an ipv4 and an ipv6 address -you can specify which should be chosen using listen_interface_prefer_ipv6. If false the first ipv4 -address will be used. If true the first ipv6 address will be used. Defaults to false preferring -ipv4. If there is only one address it will be selected regardless of ipv4/ipv6. - -_Default Value:_ false - -== `broadcast_address` - -*This option is commented out by default.* - -Address to broadcast to other Cassandra nodes -Leaving this blank will set it to the same value as listen_address - -_Default Value:_ 1.2.3.4 - -== `listen_on_broadcast_address` - -*This option is commented out by default.* - -When using multiple physical network interfaces, set this -to true to listen on broadcast_address in addition to -the listen_address, allowing nodes to communicate in both -interfaces. -Ignore this property if the network configuration automatically -routes between the public and private networks such as EC2. - -_Default Value:_ false - -== `internode_authenticator` - -*This option is commented out by default.* - -Internode authentication backend, implementing IInternodeAuthenticator; -used to allow/disallow connections from peer nodes. - -_Default Value:_ org.apache.cassandra.auth.AllowAllInternodeAuthenticator - -== `start_native_transport` - - -Whether to start the native transport server. -The address on which the native transport is bound is defined by rpc_address. - -_Default Value:_ true - -== `native_transport_port` - -port for the CQL native transport to listen for clients on -For security reasons, you should not expose this port to the internet. Firewall it if needed. - -_Default Value:_ 9042 - -== `native_transport_port_ssl` - -*This option is commented out by default.* -Enabling native transport encryption in client_encryption_options allows you to either use -encryption for the standard port or to use a dedicated, additional port along with the unencrypted -standard native_transport_port. -Enabling client encryption and keeping native_transport_port_ssl disabled will use encryption -for native_transport_port. Setting native_transport_port_ssl to a different value -from native_transport_port will use encryption for native_transport_port_ssl while -keeping native_transport_port unencrypted. - -_Default Value:_ 9142 - -== `native_transport_max_threads` - -*This option is commented out by default.* -The maximum threads for handling requests (note that idle threads are stopped -after 30 seconds so there is not corresponding minimum setting). - -_Default Value:_ 128 - -== `native_transport_max_frame_size_in_mb` - -*This option is commented out by default.* - -The maximum size of allowed frame. Frame (requests) larger than this will -be rejected as invalid. The default is 256MB. If you're changing this parameter, -you may want to adjust max_value_size_in_mb accordingly. This should be positive and less than 2048. - -_Default Value:_ 256 - -== `native_transport_frame_block_size_in_kb` - -*This option is commented out by default.* - -If checksumming is enabled as a protocol option, denotes the size of the chunks into which frame -are bodies will be broken and checksummed. - -_Default Value:_ 32 - -== `native_transport_max_concurrent_connections` - -*This option is commented out by default.* - -The maximum number of concurrent client connections. -The default is -1, which means unlimited. - -_Default Value:_ -1 - -== `native_transport_max_concurrent_connections_per_ip` - -*This option is commented out by default.* - -The maximum number of concurrent client connections per source ip. -The default is -1, which means unlimited. - -_Default Value:_ -1 - -== `native_transport_allow_older_protocols` - - -Controls whether Cassandra honors older, yet currently supported, protocol versions. -The default is true, which means all supported protocols will be honored. - -_Default Value:_ true - -== `native_transport_idle_timeout_in_ms` - -*This option is commented out by default.* - -Controls when idle client connections are closed. Idle connections are ones that had neither reads -nor writes for a time period. - -Clients may implement heartbeats by sending OPTIONS native protocol message after a timeout, which -will reset idle timeout timer on the server side. To close idle client connections, corresponding -values for heartbeat intervals have to be set on the client side. - -Idle connection timeouts are disabled by default. - -_Default Value:_ 60000 - -== `rpc_address` - - -The address or interface to bind the native transport server to. - -Set rpc_address OR rpc_interface, not both. - -Leaving rpc_address blank has the same effect as on listen_address -(i.e. it will be based on the configured hostname of the node). - -Note that unlike listen_address, you can specify 0.0.0.0, but you must also -set broadcast_rpc_address to a value other than 0.0.0.0. - -For security reasons, you should not expose this port to the internet. Firewall it if needed. - -_Default Value:_ localhost - -== `rpc_interface` - -*This option is commented out by default.* - -Set rpc_address OR rpc_interface, not both. Interfaces must correspond -to a single address, IP aliasing is not supported. - -_Default Value:_ eth1 - -== `rpc_interface_prefer_ipv6` - -*This option is commented out by default.* - -If you choose to specify the interface by name and the interface has an ipv4 and an ipv6 address -you can specify which should be chosen using rpc_interface_prefer_ipv6. If false the first ipv4 -address will be used. If true the first ipv6 address will be used. Defaults to false preferring -ipv4. If there is only one address it will be selected regardless of ipv4/ipv6. - -_Default Value:_ false - -== `broadcast_rpc_address` - -*This option is commented out by default.* - -RPC address to broadcast to drivers and other Cassandra nodes. This cannot -be set to 0.0.0.0. If left blank, this will be set to the value of -rpc_address. If rpc_address is set to 0.0.0.0, broadcast_rpc_address must -be set. - -_Default Value:_ 1.2.3.4 - -== `rpc_keepalive` - - -enable or disable keepalive on rpc/native connections - -_Default Value:_ true - -== `internode_send_buff_size_in_bytes` - -*This option is commented out by default.* - -Uncomment to set socket buffer size for internode communication -Note that when setting this, the buffer size is limited by net.core.wmem_max -and when not setting it it is defined by net.ipv4.tcp_wmem -See also: -/proc/sys/net/core/wmem_max -/proc/sys/net/core/rmem_max -/proc/sys/net/ipv4/tcp_wmem -/proc/sys/net/ipv4/tcp_wmem -and 'man tcp' - -== `internode_recv_buff_size_in_bytes` - -*This option is commented out by default.* - -Uncomment to set socket buffer size for internode communication -Note that when setting this, the buffer size is limited by net.core.wmem_max -and when not setting it it is defined by net.ipv4.tcp_wmem - -== `incremental_backups` - - -Set to true to have Cassandra create a hard link to each sstable -flushed or streamed locally in a backups/ subdirectory of the -keyspace data. Removing these links is the operator's -responsibility. - -_Default Value:_ false - -== `snapshot_before_compaction` - - -Whether or not to take a snapshot before each compaction. Be -careful using this option, since Cassandra won't clean up the -snapshots for you. Mostly useful if you're paranoid when there -is a data format change. - -_Default Value:_ false - -== `auto_snapshot` - - -Whether or not a snapshot is taken of the data before keyspace truncation -or dropping of column families. The STRONGLY advised default of true -should be used to provide data safety. If you set this flag to false, you will -lose data on truncation or drop. - -_Default Value:_ true - -== `column_index_size_in_kb` - - -Granularity of the collation index of rows within a partition. -Increase if your rows are large, or if you have a very large -number of rows per partition. The competing goals are these: - -- a smaller granularity means more index entries are generated - and looking up rows withing the partition by collation column - is faster -- but, Cassandra will keep the collation index in memory for hot - rows (as part of the key cache), so a larger granularity means - you can cache more hot rows - -_Default Value:_ 64 - -== `column_index_cache_size_in_kb` - - -Per sstable indexed key cache entries (the collation index in memory -mentioned above) exceeding this size will not be held on heap. -This means that only partition information is held on heap and the -index entries are read from disk. - -Note that this size refers to the size of the -serialized index information and not the size of the partition. - -_Default Value:_ 2 - -== `concurrent_compactors` - -*This option is commented out by default.* - -Number of simultaneous compactions to allow, NOT including -validation "compactions" for anti-entropy repair. Simultaneous -compactions can help preserve read performance in a mixed read/write -workload, by mitigating the tendency of small sstables to accumulate -during a single long running compactions. The default is usually -fine and if you experience problems with compaction running too -slowly or too fast, you should look at -compaction_throughput_mb_per_sec first. - -concurrent_compactors defaults to the smaller of (number of disks, -number of cores), with a minimum of 2 and a maximum of 8. - -If your data directories are backed by SSD, you should increase this -to the number of cores. - -_Default Value:_ 1 - -== `concurrent_validations` - -*This option is commented out by default.* - -Number of simultaneous repair validations to allow. Default is unbounded -Values less than one are interpreted as unbounded (the default) - -_Default Value:_ 0 - -== `concurrent_materialized_view_builders` - - -Number of simultaneous materialized view builder tasks to allow. - -_Default Value:_ 1 - -== `compaction_throughput_mb_per_sec` - - -Throttles compaction to the given total throughput across the entire -system. The faster you insert data, the faster you need to compact in -order to keep the sstable count down, but in general, setting this to -16 to 32 times the rate you are inserting data is more than sufficient. -Setting this to 0 disables throttling. Note that this account for all types -of compaction, including validation compaction. - -_Default Value:_ 16 - -== `sstable_preemptive_open_interval_in_mb` - - -When compacting, the replacement sstable(s) can be opened before they -are completely written, and used in place of the prior sstables for -any range that has been written. This helps to smoothly transfer reads -between the sstables, reducing page cache churn and keeping hot rows hot - -_Default Value:_ 50 - -== `stream_entire_sstables` - -*This option is commented out by default.* - -When enabled, permits Cassandra to zero-copy stream entire eligible -SSTables between nodes, including every component. -This speeds up the network transfer significantly subject to -throttling specified by stream_throughput_outbound_megabits_per_sec. -Enabling this will reduce the GC pressure on sending and receiving node. -When unset, the default is enabled. While this feature tries to keep the -disks balanced, it cannot guarantee it. This feature will be automatically -disabled if internode encryption is enabled. Currently this can be used with -Leveled Compaction. Once CASSANDRA-14586 is fixed other compaction strategies -will benefit as well when used in combination with CASSANDRA-6696. - -_Default Value:_ true - -== `stream_throughput_outbound_megabits_per_sec` - -*This option is commented out by default.* - -Throttles all outbound streaming file transfers on this node to the -given total throughput in Mbps. This is necessary because Cassandra does -mostly sequential IO when streaming data during bootstrap or repair, which -can lead to saturating the network connection and degrading rpc performance. -When unset, the default is 200 Mbps or 25 MB/s. - -_Default Value:_ 200 - -== `inter_dc_stream_throughput_outbound_megabits_per_sec` - -*This option is commented out by default.* - -Throttles all streaming file transfer between the datacenters, -this setting allows users to throttle inter dc stream throughput in addition -to throttling all network stream traffic as configured with -stream_throughput_outbound_megabits_per_sec -When unset, the default is 200 Mbps or 25 MB/s - -_Default Value:_ 200 - -== `read_request_timeout_in_ms` - - -How long the coordinator should wait for read operations to complete. -Lowest acceptable value is 10 ms. - -_Default Value:_ 5000 - -== `range_request_timeout_in_ms` - -How long the coordinator should wait for seq or index scans to complete. -Lowest acceptable value is 10 ms. - -_Default Value:_ 10000 - -== `write_request_timeout_in_ms` - -How long the coordinator should wait for writes to complete. -Lowest acceptable value is 10 ms. - -_Default Value:_ 2000 - -== `counter_write_request_timeout_in_ms` - -How long the coordinator should wait for counter writes to complete. -Lowest acceptable value is 10 ms. - -_Default Value:_ 5000 - -== `cas_contention_timeout_in_ms` - -How long a coordinator should continue to retry a CAS operation -that contends with other proposals for the same row. -Lowest acceptable value is 10 ms. - -_Default Value:_ 1000 - -== `truncate_request_timeout_in_ms` - -How long the coordinator should wait for truncates to complete -(This can be much longer, because unless auto_snapshot is disabled -we need to flush first so we can snapshot before removing the data.) -Lowest acceptable value is 10 ms. - -_Default Value:_ 60000 - -== `request_timeout_in_ms` - -The default timeout for other, miscellaneous operations. -Lowest acceptable value is 10 ms. - -_Default Value:_ 10000 - -== `internode_application_send_queue_capacity_in_bytes` - -*This option is commented out by default.* - -Defensive settings for protecting Cassandra from true network partitions. -See (CASSANDRA-14358) for details. - -The amount of time to wait for internode tcp connections to establish. -internode_tcp_connect_timeout_in_ms = 2000 - -The amount of time unacknowledged data is allowed on a connection before we throw out the connection -Note this is only supported on Linux + epoll, and it appears to behave oddly above a setting of 30000 -(it takes much longer than 30s) as of Linux 4.12. If you want something that high set this to 0 -which picks up the OS default and configure the net.ipv4.tcp_retries2 sysctl to be ~8. -internode_tcp_user_timeout_in_ms = 30000 - -The maximum continuous period a connection may be unwritable in application space -internode_application_timeout_in_ms = 30000 - -Global, per-endpoint and per-connection limits imposed on messages queued for delivery to other nodes -and waiting to be processed on arrival from other nodes in the cluster. These limits are applied to the on-wire -size of the message being sent or received. - -The basic per-link limit is consumed in isolation before any endpoint or global limit is imposed. -Each node-pair has three links: urgent, small and large. So any given node may have a maximum of -N*3*(internode_application_send_queue_capacity_in_bytes+internode_application_receive_queue_capacity_in_bytes) -messages queued without any coordination between them although in practice, with token-aware routing, only RF*tokens -nodes should need to communicate with significant bandwidth. - -The per-endpoint limit is imposed on all messages exceeding the per-link limit, simultaneously with the global limit, -on all links to or from a single node in the cluster. -The global limit is imposed on all messages exceeding the per-link limit, simultaneously with the per-endpoint limit, -on all links to or from any node in the cluster. - - -_Default Value:_ 4194304 #4MiB - -== `internode_application_send_queue_reserve_endpoint_capacity_in_bytes` - -*This option is commented out by default.* - -_Default Value:_ 134217728 #128MiB - -== `internode_application_send_queue_reserve_global_capacity_in_bytes` - -*This option is commented out by default.* - -_Default Value:_ 536870912 #512MiB - -== `internode_application_receive_queue_capacity_in_bytes` - -*This option is commented out by default.* - -_Default Value:_ 4194304 #4MiB - -== `internode_application_receive_queue_reserve_endpoint_capacity_in_bytes` - -*This option is commented out by default.* - -_Default Value:_ 134217728 #128MiB - -== `internode_application_receive_queue_reserve_global_capacity_in_bytes` - -*This option is commented out by default.* - -_Default Value:_ 536870912 #512MiB - -== `slow_query_log_timeout_in_ms` - - - -How long before a node logs slow queries. Select queries that take longer than -this timeout to execute, will generate an aggregated log message, so that slow queries -can be identified. Set this value to zero to disable slow query logging. - -_Default Value:_ 500 - -== `cross_node_timeout` - -*This option is commented out by default.* - -Enable operation timeout information exchange between nodes to accurately -measure request timeouts. If disabled, replicas will assume that requests -were forwarded to them instantly by the coordinator, which means that -under overload conditions we will waste that much extra time processing -already-timed-out requests. - -Warning: It is generally assumed that users have setup NTP on their clusters, and that clocks are modestly in sync, -since this is a requirement for general correctness of last write wins. - -_Default Value:_ true - -== `streaming_keep_alive_period_in_secs` - -*This option is commented out by default.* - -Set keep-alive period for streaming -This node will send a keep-alive message periodically with this period. -If the node does not receive a keep-alive message from the peer for -2 keep-alive cycles the stream session times out and fail -Default value is 300s (5 minutes), which means stalled stream -times out in 10 minutes by default - -_Default Value:_ 300 - -== `streaming_connections_per_host` - -*This option is commented out by default.* - -Limit number of connections per host for streaming -Increase this when you notice that joins are CPU-bound rather that network -bound (for example a few nodes with big files). - -_Default Value:_ 1 - -== `phi_convict_threshold` - -*This option is commented out by default.* - - -phi value that must be reached for a host to be marked down. -most users should never need to adjust this. - -_Default Value:_ 8 - -== `endpoint_snitch` - - -endpoint_snitch -- Set this to a class that implements -IEndpointSnitch. The snitch has two functions: - -- it teaches Cassandra enough about your network topology to route - requests efficiently -- it allows Cassandra to spread replicas around your cluster to avoid - correlated failures. It does this by grouping machines into - "datacenters" and "racks." Cassandra will do its best not to have - more than one replica on the same "rack" (which may not actually - be a physical location) - -CASSANDRA WILL NOT ALLOW YOU TO SWITCH TO AN INCOMPATIBLE SNITCH -ONCE DATA IS INSERTED INTO THE CLUSTER. This would cause data loss. -This means that if you start with the default SimpleSnitch, which -locates every node on "rack1" in "datacenter1", your only options -if you need to add another datacenter are GossipingPropertyFileSnitch -(and the older PFS). From there, if you want to migrate to an -incompatible snitch like Ec2Snitch you can do it by adding new nodes -under Ec2Snitch (which will locate them in a new "datacenter") and -decommissioning the old ones. - -Out of the box, Cassandra provides: - -SimpleSnitch: - Treats Strategy order as proximity. This can improve cache - locality when disabling read repair. Only appropriate for - single-datacenter deployments. - -GossipingPropertyFileSnitch - This should be your go-to snitch for production use. The rack - and datacenter for the local node are defined in - cassandra-rackdc.properties and propagated to other nodes via - gossip. If cassandra-topology.properties exists, it is used as a - fallback, allowing migration from the PropertyFileSnitch. - -PropertyFileSnitch: - Proximity is determined by rack and data center, which are - explicitly configured in cassandra-topology.properties. - -Ec2Snitch: - Appropriate for EC2 deployments in a single Region. Loads Region - and Availability Zone information from the EC2 API. The Region is - treated as the datacenter, and the Availability Zone as the rack. - Only private IPs are used, so this will not work across multiple - Regions. - -Ec2MultiRegionSnitch: - Uses public IPs as broadcast_address to allow cross-region - connectivity. (Thus, you should set seed addresses to the public - IP as well.) You will need to open the storage_port or - ssl_storage_port on the public IP firewall. (For intra-Region - traffic, Cassandra will switch to the private IP after - establishing a connection.) - -RackInferringSnitch: - Proximity is determined by rack and data center, which are - assumed to correspond to the 3rd and 2nd octet of each node's IP - address, respectively. Unless this happens to match your - deployment conventions, this is best used as an example of - writing a custom Snitch class and is provided in that spirit. - -You can use a custom Snitch by setting this to the full class name -of the snitch, which will be assumed to be on your classpath. - -_Default Value:_ SimpleSnitch - -== `dynamic_snitch_update_interval_in_ms` - - -controls how often to perform the more expensive part of host score -calculation - -_Default Value:_ 100 - -== `dynamic_snitch_reset_interval_in_ms` - -controls how often to reset all host scores, allowing a bad host to -possibly recover - -_Default Value:_ 600000 - -== `dynamic_snitch_badness_threshold` - -if set greater than zero, this will allow -'pinning' of replicas to hosts in order to increase cache capacity. -The badness threshold will control how much worse the pinned host has to be -before the dynamic snitch will prefer other replicas over it. This is -expressed as a double which represents a percentage. Thus, a value of -0.2 means Cassandra would continue to prefer the static snitch values -until the pinned host was 20% worse than the fastest. - -_Default Value:_ 0.1 - -== `server_encryption_options` - - -Enable or disable inter-node encryption -JVM and netty defaults for supported SSL socket protocols and cipher suites can -be replaced using custom encryption options. This is not recommended -unless you have policies in place that dictate certain settings, or -need to disable vulnerable ciphers or protocols in case the JVM cannot -be updated. -FIPS compliant settings can be configured at JVM level and should not -involve changing encryption settings here: -https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/FIPS.html - -*NOTE* No custom encryption options are enabled at the moment -The available internode options are : all, none, dc, rack -If set to dc cassandra will encrypt the traffic between the DCs -If set to rack cassandra will encrypt the traffic between the racks - -The passwords used in these options must match the passwords used when generating -the keystore and truststore. For instructions on generating these files, see: -http://download.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore - - -_Default Value (complex option)_: - -.... - # set to true for allowing secure incoming connections - enabled: false - # If enabled and optional are both set to true, encrypted and unencrypted connections are handled on the storage_port - optional: false - # if enabled, will open up an encrypted listening socket on ssl_storage_port. Should be used - # during upgrade to 4.0; otherwise, set to false. - enable_legacy_ssl_storage_port: false - # on outbound connections, determine which type of peers to securely connect to. 'enabled' must be set to true. - internode_encryption: none - keystore: conf/.keystore - keystore_password: cassandra - truststore: conf/.truststore - truststore_password: cassandra - # More advanced defaults below: - # protocol: TLS - # store_type: JKS - # cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA] - # require_client_auth: false - # require_endpoint_verification: false -.... - -== `client_encryption_options` - -enable or disable client-to-server encryption. - -_Default Value (complex option)_: - -.... - enabled: false - # If enabled and optional is set to true encrypted and unencrypted connections are handled. - optional: false - keystore: conf/.keystore - keystore_password: cassandra - # require_client_auth: false - # Set trustore and truststore_password if require_client_auth is true - # truststore: conf/.truststore - # truststore_password: cassandra - # More advanced defaults below: - # protocol: TLS - # store_type: JKS - # cipher_suites: [TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA] -.... - -== `internode_compression` - -internode_compression controls whether traffic between nodes is -compressed. -Can be: - -all - all traffic is compressed - -dc - traffic between different datacenters is compressed - -none - nothing is compressed. - -_Default Value:_ dc - -== `inter_dc_tcp_nodelay` - - -Enable or disable tcp_nodelay for inter-dc communication. -Disabling it will result in larger (but fewer) network packets being sent, -reducing overhead from the TCP protocol itself, at the cost of increasing -latency if you block for cross-datacenter responses. - -_Default Value:_ false - -== `tracetype_query_ttl` - - -TTL for different trace types used during logging of the repair process. - -_Default Value:_ 86400 - -== `tracetype_repair_ttl` - - -_Default Value:_ 604800 - -== `enable_user_defined_functions` - - -If unset, all GC Pauses greater than gc_log_threshold_in_ms will log at -INFO level -UDFs (user defined functions) are disabled by default. -As of Cassandra 3.0 there is a sandbox in place that should prevent execution of evil code. - -_Default Value:_ false - -== `enable_scripted_user_defined_functions` - - -Enables scripted UDFs (JavaScript UDFs). -Java UDFs are always enabled, if enable_user_defined_functions is true. -Enable this option to be able to use UDFs with "language javascript" or any custom JSR-223 provider. -This option has no effect, if enable_user_defined_functions is false. - -_Default Value:_ false - -== `windows_timer_interval` - - -The default Windows kernel timer and scheduling resolution is 15.6ms for power conservation. -Lowering this value on Windows can provide much tighter latency and better throughput, however -some virtualized environments may see a negative performance impact from changing this setting -below their system default. The sysinternals 'clockres' tool can confirm your system's default -setting. - -_Default Value:_ 1 - -== `transparent_data_encryption_options` - - - -Enables encrypting data at-rest (on disk). Different key providers can be plugged in, but the default reads from -a JCE-style keystore. A single keystore can hold multiple keys, but the one referenced by -the "key_alias" is the only key that will be used for encrypt opertaions; previously used keys -can still (and should!) be in the keystore and will be used on decrypt operations -(to handle the case of key rotation). - -It is strongly recommended to download and install Java Cryptography Extension (JCE) -Unlimited Strength Jurisdiction Policy Files for your version of the JDK. -(current link: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html) - -Currently, only the following file types are supported for transparent data encryption, although -more are coming in future cassandra releases: commitlog, hints - -_Default Value (complex option)_: - -.... - enabled: false - chunk_length_kb: 64 - cipher: AES/CBC/PKCS5Padding - key_alias: testing:1 - # CBC IV length for AES needs to be 16 bytes (which is also the default size) - # iv_length: 16 - key_provider: - - class_name: org.apache.cassandra.security.JKSKeyProvider - parameters: - - keystore: conf/.keystore - keystore_password: cassandra - store_type: JCEKS - key_password: cassandra -.... - -== `tombstone_warn_threshold` - - -#################### -SAFETY THRESHOLDS # -#################### - -When executing a scan, within or across a partition, we need to keep the -tombstones seen in memory so we can return them to the coordinator, which -will use them to make sure other replicas also know about the deleted rows. -With workloads that generate a lot of tombstones, this can cause performance -problems and even exaust the server heap. -(http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets) -Adjust the thresholds here if you understand the dangers and want to -scan more tombstones anyway. These thresholds may also be adjusted at runtime -using the StorageService mbean. - -_Default Value:_ 1000 - -== `tombstone_failure_threshold` - - -_Default Value:_ 100000 - -== `batch_size_warn_threshold_in_kb` - - -Log WARN on any multiple-partition batch size exceeding this value. 5kb per batch by default. -Caution should be taken on increasing the size of this threshold as it can lead to node instability. - -_Default Value:_ 5 - -== `batch_size_fail_threshold_in_kb` - - -Fail any multiple-partition batch exceeding this value. 50kb (10x warn threshold) by default. - -_Default Value:_ 50 - -== `unlogged_batch_across_partitions_warn_threshold` - - -Log WARN on any batches not of type LOGGED than span across more partitions than this limit - -_Default Value:_ 10 - -== `compaction_large_partition_warning_threshold_mb` - - -Log a warning when compacting partitions larger than this value - -_Default Value:_ 100 - -== `gc_log_threshold_in_ms` - -*This option is commented out by default.* - -GC Pauses greater than 200 ms will be logged at INFO level -This threshold can be adjusted to minimize logging if necessary - -_Default Value:_ 200 - -== `gc_warn_threshold_in_ms` - -*This option is commented out by default.* - -GC Pauses greater than gc_warn_threshold_in_ms will be logged at WARN level -Adjust the threshold based on your application throughput requirement. Setting to 0 -will deactivate the feature. - -_Default Value:_ 1000 - -== `max_value_size_in_mb` - -*This option is commented out by default.* - -Maximum size of any value in SSTables. Safety measure to detect SSTable corruption -early. Any value size larger than this threshold will result into marking an SSTable -as corrupted. This should be positive and less than 2048. - -_Default Value:_ 256 - -== `back_pressure_enabled` - - -Back-pressure settings # -If enabled, the coordinator will apply the back-pressure strategy specified below to each mutation -sent to replicas, with the aim of reducing pressure on overloaded replicas. - -_Default Value:_ false - -== `back_pressure_strategy` - -The back-pressure strategy applied. -The default implementation, RateBasedBackPressure, takes three arguments: -high ratio, factor, and flow type, and uses the ratio between incoming mutation responses and outgoing mutation requests. -If below high ratio, outgoing mutations are rate limited according to the incoming rate decreased by the given factor; -if above high ratio, the rate limiting is increased by the given factor; -such factor is usually best configured between 1 and 10, use larger values for a faster recovery -at the expense of potentially more dropped mutations; -the rate limiting is applied according to the flow type: if FAST, it's rate limited at the speed of the fastest replica, -if SLOW at the speed of the slowest one. -New strategies can be added. Implementors need to implement org.apache.cassandra.net.BackpressureStrategy and -provide a public constructor accepting a Map. - -== `otc_coalescing_strategy` - -*This option is commented out by default.* - -Coalescing Strategies # -Coalescing multiples messages turns out to significantly boost message processing throughput (think doubling or more). -On bare metal, the floor for packet processing throughput is high enough that many applications won't notice, but in -virtualized environments, the point at which an application can be bound by network packet processing can be -surprisingly low compared to the throughput of task processing that is possible inside a VM. It's not that bare metal -doesn't benefit from coalescing messages, it's that the number of packets a bare metal network interface can process -is sufficient for many applications such that no load starvation is experienced even without coalescing. -There are other benefits to coalescing network messages that are harder to isolate with a simple metric like messages -per second. By coalescing multiple tasks together, a network thread can process multiple messages for the cost of one -trip to read from a socket, and all the task submission work can be done at the same time reducing context switching -and increasing cache friendliness of network message processing. -See CASSANDRA-8692 for details. - -Strategy to use for coalescing messages in OutboundTcpConnection. -Can be fixed, movingaverage, timehorizon, disabled (default). -You can also specify a subclass of CoalescingStrategies.CoalescingStrategy by name. - -_Default Value:_ DISABLED - -== `otc_coalescing_window_us` - -*This option is commented out by default.* - -How many microseconds to wait for coalescing. For fixed strategy this is the amount of time after the first -message is received before it will be sent with any accompanying messages. For moving average this is the -maximum amount of time that will be waited as well as the interval at which messages must arrive on average -for coalescing to be enabled. - -_Default Value:_ 200 - -== `otc_coalescing_enough_coalesced_messages` - -*This option is commented out by default.* - -Do not try to coalesce messages if we already got that many messages. This should be more than 2 and less than 128. - -_Default Value:_ 8 - -== `otc_backlog_expiration_interval_ms` - -*This option is commented out by default.* - -How many milliseconds to wait between two expiration runs on the backlog (queue) of the OutboundTcpConnection. -Expiration is done if messages are piling up in the backlog. Droppable messages are expired to free the memory -taken by expired messages. The interval should be between 0 and 1000, and in most installations the default value -will be appropriate. A smaller value could potentially expire messages slightly sooner at the expense of more CPU -time and queue contention while iterating the backlog of messages. -An interval of 0 disables any wait time, which is the behavior of former Cassandra versions. - - -_Default Value:_ 200 - -== `ideal_consistency_level` - -*This option is commented out by default.* - -Track a metric per keyspace indicating whether replication achieved the ideal consistency -level for writes without timing out. This is different from the consistency level requested by -each write which may be lower in order to facilitate availability. - -_Default Value:_ EACH_QUORUM - -== `automatic_sstable_upgrade` - -*This option is commented out by default.* - -Automatically upgrade sstables after upgrade - if there is no ordinary compaction to do, the -oldest non-upgraded sstable will get upgraded to the latest version - -_Default Value:_ false - -== `max_concurrent_automatic_sstable_upgrades` - -*This option is commented out by default.* -Limit the number of concurrent sstable upgrades - -_Default Value:_ 1 - -== `audit_logging_options` - - -Audit logging - Logs every incoming CQL command request, authentication to a node. See the docs -on audit_logging for full details about the various configuration options. - -== `full_query_logging_options` - -*This option is commented out by default.* - - -default options for full query logging - these can be overridden from command line when executing -nodetool enablefullquerylog - -== `corrupted_tombstone_strategy` - -*This option is commented out by default.* - -validate tombstones on reads and compaction -can be either "disabled", "warn" or "exception" - -_Default Value:_ disabled - -== `diagnostic_events_enabled` - - -Diagnostic Events # -If enabled, diagnostic events can be helpful for troubleshooting operational issues. Emitted events contain details -on internal state and temporal relationships across events, accessible by clients via JMX. - -_Default Value:_ false - -== `native_transport_flush_in_batches_legacy` - -*This option is commented out by default.* - -Use native transport TCP message coalescing. If on upgrade to 4.0 you found your throughput decreasing, and in -particular you run an old kernel or have very fewer client connections, this option might be worth evaluating. - -_Default Value:_ false - -== `repaired_data_tracking_for_range_reads_enabled` - - -Enable tracking of repaired state of data during reads and comparison between replicas -Mismatches between the repaired sets of replicas can be characterized as either confirmed -or unconfirmed. In this context, unconfirmed indicates that the presence of pending repair -sessions, unrepaired partition tombstones, or some other condition means that the disparity -cannot be considered conclusive. Confirmed mismatches should be a trigger for investigation -as they may be indicative of corruption or data loss. -There are separate flags for range vs partition reads as single partition reads are only tracked -when CL > 1 and a digest mismatch occurs. Currently, range queries don't use digests so if -enabled for range reads, all range reads will include repaired data tracking. As this adds -some overhead, operators may wish to disable it whilst still enabling it for partition reads - -_Default Value:_ false - -== `repaired_data_tracking_for_partition_reads_enabled` - - -_Default Value:_ false - -== `report_unconfirmed_repaired_data_mismatches` - -If false, only confirmed mismatches will be reported. If true, a separate metric for unconfirmed -mismatches will also be recorded. This is to avoid potential signal:noise issues are unconfirmed -mismatches are less actionable than confirmed ones. - -_Default Value:_ false - -== `enable_materialized_views` - - -######################## -EXPERIMENTAL FEATURES # -######################## - -Enables materialized view creation on this node. -Materialized views are considered experimental and are not recommended for production use. - -_Default Value:_ false - -== `enable_sasi_indexes` - - -Enables SASI index creation on this node. -SASI indexes are considered experimental and are not recommended for production use. - -_Default Value:_ false - -== `enable_transient_replication` - - -Enables creation of transiently replicated keyspaces on this node. -Transient replication is experimental and is not recommended for production use. - -_Default Value:_ false diff --git a/doc/Dockerfile b/doc/Dockerfile index fcb4c4167f5a..8dd79b2ced44 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -6,6 +6,7 @@ FROM python:2.7 WORKDIR /usr/src/code +# LLP 07.28.2020 CHANGE THIS TO ANTORA RUN pip install --no-cache-dir sphinx sphinx_rtd_theme RUN apt-get update && apt-get install -y software-properties-common diff --git a/doc/Makefile b/doc/Makefile index 4d1eecc226d7..1e7f00ba8d7f 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -61,7 +61,7 @@ gennodetool: .PHONY: html html: $(MAKE_CASSANDRA_YAML) - #$(GENERATE_NODETOOL_DOCS) + $(GENERATE_NODETOOL_DOCS) $(ANTORAOPTS) $(ANTORACMD) $(ANTORAYAML) @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." From 0d3c7ac0e9f94c2bf96c2bf3e5fc41b0fa459760 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 30 Jul 2020 12:42:20 -0700 Subject: [PATCH 023/115] working on dockerfile --- doc/Dockerfile | 34 +++++++++++++++++++++++++++++++--- doc/docker-entrypoint.sh | 11 +++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) create mode 100755 doc/docker-entrypoint.sh diff --git a/doc/Dockerfile b/doc/Dockerfile index 8dd79b2ced44..4b7e16d72033 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -7,16 +7,44 @@ FROM python:2.7 WORKDIR /usr/src/code # LLP 07.28.2020 CHANGE THIS TO ANTORA -RUN pip install --no-cache-dir sphinx sphinx_rtd_theme +# install nodejs and nvm +# install antora +# install any antora extensions -RUN apt-get update && apt-get install -y software-properties-common +# FROM ANTORA DOCKER (https://gitlab.com/antora/docker-antora.git) + +FROM node:10-alpine + +ENV NODE_PATH /usr/local/share/.config/yarn/global/node_modules + +RUN apk --no-cache add curl findutils jq \ + && yarn global add --ignore-optional --silent @antora/cli@latest @antora/site-generator-default@latest \ + && rm -rf $(yarn cache dir)/* \ + && find $(yarn global dir)/node_modules/asciidoctor.js/dist/* -maxdepth 0 -not -name node -exec rm -rf {} \; \ + && find $(yarn global dir)/node_modules/handlebars/dist/* -maxdepth 0 -not -name cjs -exec rm -rf {} \; \ + && find $(yarn global dir)/node_modules/handlebars/lib/* -maxdepth 0 -not -name index.js -exec rm -rf {} \; \ + && find $(yarn global dir)/node_modules/isomorphic-git/dist/* -maxdepth 0 -not -name for-node -exec rm -rf {} \; \ + && rm -rf $(yarn global dir)/node_modules/moment/min \ + && rm -rf $(yarn global dir)/node_modules/moment/src \ + && rm -rf $(yarn global dir)/node_modules/source-map/dist \ + && rm -rf /tmp/* + +WORKDIR /antora + +COPY docker-entrypoint.sh /usr/local/bin/ + +ENTRYPOINT ["docker-entrypoint.sh"] + +CMD ["antora"] + +#-----------------OLD STUFF--------- +RUN apt-get update RUN wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add - \ && add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ \ && apt-get update \ && apt-get install -y adoptopenjdk-11-hotspot ant - RUN apt-get clean CMD CASSANDRA_USE_JDK11=true ant gen-doc \ diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh new file mode 100755 index 000000000000..1f46341a5622 --- /dev/null +++ b/doc/docker-entrypoint.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# abort script if a command fails +set -e + +# prepend antora if command is not detected +if [ $# -eq 0 ] || [ "${1:0:1}" == '-' ] || [ -z `command -v "$1" || echo -n` ]; then + set -- antora "$@" +fi + +exec "$@" From ca8881cc70e79afd91cf031d303d0563d735ce68 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 31 Jul 2020 09:22:21 -0700 Subject: [PATCH 024/115] make edits per Ekaterina --- .../cassandra/pages/new/fqllogging.rst | 587 ++++++++++++++++++ 1 file changed, 587 insertions(+) create mode 100644 doc/source/modules/cassandra/pages/new/fqllogging.rst diff --git a/doc/source/modules/cassandra/pages/new/fqllogging.rst b/doc/source/modules/cassandra/pages/new/fqllogging.rst new file mode 100644 index 000000000000..04cff57105c6 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/fqllogging.rst @@ -0,0 +1,587 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Full Query Logging (FQL) +======================== + +Apache Cassandra 4.0 adds a new highly performant feature that supports live query logging (`CASSANDRA-13983 `_). +FQL is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. +This feature is useful for live traffic capture, as well as traffic replay. The tool provided can be used for both debugging query traffic and migration. +New ``nodetool`` options are also added to enable, disable or reset FQL, as well as a new tool to read and replay the binary logs. +The full query logging (FQL) capability uses `Chronicle-Queue `_ to rotate a log of queries. +Full query logs will be referred to as *logs* for the remainder of the page. + +Some of the features of FQL are: + +- The impact on query latency is reduced by asynchronous single-thread log entry writes to disk. +- Heap memory usage is bounded by a weighted queue, with configurable maximum weight sitting in front of logging thread. +- If the weighted queue is full, producers can be blocked or samples can be dropped. +- Disk utilization is bounded by a configurable size, deleting old log segments once the limit is reached. +- A flexible schema binary format, `Chronicle-Wire `_, for on-disk serialization that can skip unrecognized fields, add new ones, and omit old ones. +- Can be enabled, disabled, or reset (to delete on-disk data) using the JMX tool, ``nodetool``. +- Can configure the settings in either the `cassandra.yaml` file or by using ``nodetool``. +- Introduces new ``fqltool`` that currently can ``Dump`` the binary logs to a readable format. Other options are ``Replay`` and ``Compare``. + +FQL logs all Cassandra Query Language (CQL) requests, both events that modify the data and those that query. +While audit logs also include CQL requests, FQL logs only the CQL request. This difference means that FQL can be used to replay or compare logs, which audit logging cannot. FQL is useful for debugging, performance benchmarking, testing and auditing CQL queries, while audit logs are useful for compliance. + +In performance testing, FQL appears to have little or no overhead in ``WRITE`` only workloads, and a minor overhead in ``MIXED`` workload. + +Query information logged +------------------------ + +The query log contains: + +- all queries invoked +- approximate time they were invoked +- any parameters necessary to bind wildcard values +- all query options + +The logger writes single or batched CQL queries after they finish, so only successfully completed queries are logged. Failed or timed-out queries are not logged. Different data is logged, depending on the type of query. + +A single CQL query log entry contains: + +- query - CQL query text +- queryOptions - Options associated with the query invocation +- queryState - Timestamp state associated with the query invocation +- queryTimeMillis - Approximate time in milliseconds since the epoch since the query was invoked + +A batch CQL query log entry contains: + +- queries - CQL text of the queries +- queryOptions - Options associated with the query invocation +- queryState - Timestamp state associated with the query invocation +- batchTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked +- type - The type of the batch +- values - Values to bind to as parameters for the queries + +Because FQL is backed by `Binlog`, the performance and footprint are predictable, with minimal impact on log record producers. +Performance safety prevents the producers from overloading the log, using a weighted queue to drop records if the logging falls behind. +Single-thread asynchronous writing produces the logs. Chronicle-Queue provides an easy method of rolling the logs. + +Logging information logged +-------------------------- + +FQL also tracks information about the stored log files: + +- Stored log files that are added and their storage impact. Deletes them if over storage limit. +- The log files in Chronicle-Queue that have already rolled +- The number of bytes in the log files that have already rolled + +Logging sequence +---------------- + +The logger follows a well-defined sequence of events: + +1. The consumer thread that writes log records is started. This action can occur only once. +2. The consumer thread offers a record to the log. If the in-memory queue is full, the record will be dropped and offer returns a `false` value. +3. If accepted, the record is entered into the log. If the in-memory queue is full, the putting thread will be blocked until there is space or it is interrupted. +4. The buffers are cleaned up at thread exit. Finalization will check again, to ensure there are no stragglers in the queue. +5. The consumer thread is stopped. It can be called multiple times. + +Using FQL +--------- + +To use FQL, two actions must be completed. FQL must be configured using either the `cassandra.yaml` file or ``nodetool``, and logging must be enabled using ``nodetool enablefullquerylog``. +With either method, at a minimum, the path to the log directory must be specified. +Both actions are completed on a per-node basis. +Full query logs are generated on each enabled node, so logs on each node will have that node's queries. + +Configuring FQL in cassandra.yaml +--------------------------------- + +The `cassandra.yaml` file can be used to configure FQL before enabling the feature with ``nodetool``. + +The file includes the following options that can be uncommented for use: + +:: + + # default options for full query logging - these can be overridden from command line + # when executing nodetool enablefullquerylog + #full_query_logging_options: + # log_dir: + # roll_cycle: HOURLY + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: + # archive_command: + # max_archive_retries: 10 + +log_dir +^^^^^^^ + +To write logs, an existing directory must be set in ``log_dir``. + +The directory must have appropriate permissions set to allow reading, writing, and executing. +Logging will recursively delete the directory contents as needed. +Do not place links in this directory to other sections of the filesystem. +For example, ``log_dir: /tmp/cassandrafullquerylog``. + +roll_cycle +^^^^^^^^^^ + +The ``roll_cycle`` defines the frequency with which the log segments are rolled. +Supported values are ``HOURLY`` (default), ``MINUTELY``, and ``DAILY``. +For example: ``roll_cycle: DAILY`` + +block +^^^^^ + +The ``block`` option specifies whether FQL should block writing or drop log records if FQL falls behind. Supported boolean values are ``true`` (default) or ``false``. +For example: ``block: false`` to drop records + +max_queue_weight +^^^^^^^^^^^^^^^^ + +The ``max_queue_weight`` option sets the maximum weight of in-memory queue for records waiting to be written to the file before blocking or dropping. The option must be set to a positive value. The default value is 268435456, or 256 MiB. +For example, to change the default: ``max_queue_weight: 134217728 # 128 MiB`` + +max_log_size +^^^^^^^^^^^^ + +The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The option must be set to a positive value. The default is 17179869184, or 16 GiB. +For example, to change the default: ``max_log_size: 34359738368 # 32 GiB`` + +archive_command +^^^^^^^^^^^^^^^ + +The ``archive_command`` option sets the user-defined archive script to execute on rolled log files. +For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the file being rolled`` + +max_archive_retries +^^^^^^^^^^^^^^^^^^^ + +The ``max_archive_retries`` option sets the max number of retries of failed archive commands. The default is 10. +For example: ``max_archive_retries: 10`` + +FQL can also be configured using ``nodetool` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. + +Enabling FQL +------------ + +FQL is enabled on a per-node basis using the ``nodetool enablefullquerylog`` command. At a minimum, the path to the logging directory must be defined, if ``log_dir`` is not set in the `cassandra.yaml` file. + +The syntax of the ``nodetool enablefullquerylog`` command has all the same options that can be set in the ``cassandra.yaml`` file. +In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. + +:: + + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablefullquerylog + [--archive-command ] [--blocking] + [--max-archive-retries ] + [--max-log-size ] [--max-queue-weight ] + [--path ] [--roll-cycle ] + + OPTIONS + --archive-command + Command that will handle archiving rolled full query log files. + Format is "/path/to/script.sh %path" where %path will be replaced + with the file to archive + + --blocking + If the queue is full whether to block producers or drop samples. + + -h , --host + Node hostname or ip address + + --max-archive-retries + Max number of archive retries. + + --max-log-size + How many bytes of log data to store before dropping segments. Might + not be respected if a log file hasn't rolled so it can be deleted. + + --max-queue-weight + Maximum number of bytes of query data to queue to disk before + blocking or dropping samples. + + -p , --port + Remote jmx agent port number + + --path + Path to store the full query log at. Will have it's contents + recursively deleted. + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + --roll-cycle + How often to roll the log file (MINUTELY, HOURLY, DAILY). + + -u , --username + Remote jmx agent username + +To enable FQL, run the following command on each node in the cluster on which you want to enable logging: + +:: + + nodetool enablefullquerylog --path /tmp/cassandrafullquerylog + +Disabling or resetting FQL +------------- + +Use the ``nodetool disablefullquerylog`` to disable logging. +Use ``nodetool resetfullquerylog`` to stop FQL and clear the log files in the configured directory. +**IMPORTANT:** Using ``nodetool resetfullquerylog`` will delete the log files! Do not use this command unless you need to delete all log files. + +fqltool +------- + +The ``fqltool`` command is used to view (dump), replay, or compare logs. +``fqltool dump`` converts the binary log files into human-readable format; only the log directory must be supplied as a command-line option. + +``fqltool replay`` (CASSANDRA-14618) enables replay of logs. +The command can run from a different machine or cluster for testing, debugging, or performance benchmarking. +The command, run on the same node on which the logs are generated can recreate a dropped database object. +Use ``fqltool replay`` to record and compare different runs of production traffic against different versions/configurations of Cassandra or different clusters. +Another use is to gather logs from several machines and replay them in “order” by the timestamps recorded. + +The syntax of ``fqltool replay`` is: + +:: + + fqltool replay [--keyspace ] [--results ] + [--store-queries ] --target ... [--] + [...] + + OPTIONS + --keyspace + Only replay queries against this keyspace and queries without + keyspace set. + + --results + Where to store the results of the queries, this should be a + directory. Leave this option out to avoid storing results. + + --store-queries + Path to store the queries executed. Stores queries in the same order + as the result sets are in the result files. Requires --results + + --target + Hosts to replay the logs to, can be repeated to replay to more + hosts. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Paths containing the FQ logs to replay. + +``fqltool compare`` (`CASSANDRA-14619 `_) compares result files generated by ``fqltool replay``. +The command uses recorded runs from ``fqltool replay`` and compareslog, outputting any differences (potentially all queries). +It also stores each row as a separate chronicle document to avoid reading the entire result from in-memory when comparing. + +The syntax of ``fqltool compare`` is: + +:: + +$ fqltool help compare + NAME + fqltool compare - Compare result files generated by fqltool replay + + SYNOPSIS + fqltool compare --queries [--] [...] + + OPTIONS + --queries + Directory to read the queries from. It is produced by the fqltool + replay --store-queries option. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Directories containing result files to compare. + +The comparison sets the following marks: + +- Mark the beginning of a query set: + +:: + + ------------------- + version: int16 + type: column_definitions + column_count: int32; + column_definition: text, text + column_definition: text, text + .... + -------------------- + + +- Mark a failed query set: + +:: + + --------------------- + version: int16 + type: query_failed + message: text + --------------------- + +- Mark a row set: + +:: + + -------------------- + version: int16 + type: row + row_column_count: int32 + column: bytes + --------------------- + +- Mark the end of a result set: + +:: + + ------------------- + version: int16 + type: end_resultset + ------------------- + +Example +------- + +1. To demonstrate FQL, first configure and enable FQL on a node in your cluster: + +:: + + nodetool enablefullquerylog --path /tmp/cassandrafullquerylog + + +2. Now create a demo keyspace and table and insert some data using ``cqlsh``: + +:: + + cqlsh> CREATE KEYSPACE querylogkeyspace + ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + cqlsh> USE querylogkeyspace; + cqlsh:querylogkeyspace> CREATE TABLE t ( + ...id int, + ...k int, + ...v text, + ...PRIMARY KEY (id) + ... ); + cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); + +3. Then check that the data is inserted: + +:: + + cqlsh:querylogkeyspace> SELECT * FROM t; + + id | k | v + ----+---+------ + 0 | 1 | val1 + + (1 rows) + +4. Use the ``fqltool dump`` command to view the logs. + +:: + +$ fqltool dump /tmp/cassandrafullquerylog + +This command will return a readable version of the log. Here is a partial sample of the log for the commands in this demo: + +:: + + WARN [main] 2019-08-02 03:07:53,635 Slf4jExceptionHandler.java:42 - Using Pauser.sleepy() as not enough processors, have 2, needs 8+ + Type: single-query + Query start time: 1564708322030 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system.peers + Values: + + Type: single-query + Query start time: 1564708322054 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system.local WHERE key='local' + Values: + + Type: single-query + Query start time: 1564708322109 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.keyspaces + Values: + + Type: single-query + Query start time: 1564708322116 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.tables + Values: + + Type: single-query + Query start time: 1564708322139 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.columns + Values: + + Type: single-query + Query start time: 1564708322142 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.functions + Values: + + Type: single-query + Query start time: 1564708322141 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.aggregates + Values: + + Type: single-query + Query start time: 1564708322143 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.types + Values: + + Type: single-query + Query start time: 1564708322144 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.indexes + Values: + + Type: single-query + Query start time: 1564708322145 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.views + Values: + + Type: single-query + Query start time: 1564708345408 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: CREATE KEYSPACE querylogkeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + Values: + + Type: single-query + Query start time: 1564708360873 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: USE querylogkeyspace; + Values: + + Type: single-query + Query start time: 1564708360874 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: USE "querylogkeyspace" + Values: + + Type: single-query + Query start time: 1564708378837 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: CREATE TABLE t ( + id int, + k int, + v text, + PRIMARY KEY (id) + ); + Values: + + Type: single-query + Query start time: 1564708379247 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708379 + Query: SELECT * FROM system_schema.tables WHERE keyspace_name = 'querylogkeyspace' AND table_name = 't' + Values: + + Type: single-query + Query start time: 1564708397144 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708397 + Query: INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + Values: + + Type: single-query + Query start time: 1564708434782 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708434 + Query: SELECT * FROM t; + Values: + +5. To demonstrate ``fqltool replay``, first drop the keyspace. + +:: + + cqlsh:querylogkeyspace> DROP KEYSPACE querylogkeyspace; + +6. Now run ``fqltool replay`` specifying the directories in which to store the results of the queries and +the list of queries run, respectively, in `--results` and `--store-queries`: + +:: + +$ fqltool replay \ +--keyspace querylogkeyspace --results /cassandra/fql/logs/results/replay \ +--store-queries /cassandra/fql/logs/queries/replay \ +-- target 3.91.56.164 \ +/tmp/cassandrafullquerylog + +The ``--results`` and ``--store-queries`` directories are optional, but if ``--store-queries`` is set, then ``--results`` must also be set. +The ``--target`` specifies the node on which to replay to logs. + +7. Check that the keyspace was replayed and exists again using the ``DESCRIBE KEYSPACES`` command: + +:: + + cqlsh:querylogkeyspace> DESC KEYSPACES; + + system_schema system system_distributed system_virtual_schema + system_auth querylogkeyspace system_traces system_views From 8cb26c653077b1b2b5c41dd8a0d7381ba0bc8717 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 31 Jul 2020 10:04:54 -0700 Subject: [PATCH 025/115] convert new fql page to adoc --- .../cassandra/pages/new/fqllogging.adoc | 1220 +++++++---------- 1 file changed, 506 insertions(+), 714 deletions(-) diff --git a/doc/source/modules/cassandra/pages/new/fqllogging.adoc b/doc/source/modules/cassandra/pages/new/fqllogging.adoc index 6bb20fc9f785..7f6821dfeb81 100644 --- a/doc/source/modules/cassandra/pages/new/fqllogging.adoc +++ b/doc/source/modules/cassandra/pages/new/fqllogging.adoc @@ -1,773 +1,565 @@ = Full Query Logging -Apache Cassandra 4.0 adds a new feature to support a means of logging -all queries as they were invoked -(https://issues.apache.org/jira/browse/CASSANDRA-13983[CASSANDRA-13983]). -For correctness testing it's useful to be able to capture production -traffic so that it can be replayed against both the old and new versions -of Cassandra while comparing the results. - -Cassandra 4.0 includes an implementation of a full query logging (FQL) -that uses chronicle-queue to implement a rotating log of queries. Some -of the features of FQL are: - -* Single thread asynchronously writes log entries to disk to reduce -impact on query latency -* Heap memory usage bounded by a weighted queue with configurable -maximum weight sitting in front of logging thread -* If the weighted queue is full producers can be blocked or samples can -be dropped -* Disk utilization is bounded by deleting old log segments once a -configurable size is reached -* The on disk serialization uses a flexible schema binary format -(chronicle-wire) making it easy to skip unrecognized fields, add new -ones, and omit old ones. -* Can be enabled and configured via JMX, disabled, and reset (delete on -disk data), logging path is configurable via both JMX and YAML -* Introduce new `fqltool` in `/bin` that currently implements `Dump` -which can dump in a readable format full query logs as well as follow -active full query logs. FQL `Replay` and `Compare` are also available. - -Cassandra 4.0 has a binary full query log based on Chronicle Queue that -can be controlled using `nodetool enablefullquerylog`, -`disablefullquerylog`, and `resetfullquerylog`. The log contains all -queries invoked, approximate time they were invoked, any parameters -necessary to bind wildcard values, and all query options. A readable -version of the log can be dumped or tailed using the new `bin/fqltool` -utility. The full query log is designed to be safe to use in production -and limits utilization of heap memory and disk space with limits you can -specify when enabling the log. - -== Objective - -Full Query Logging logs all requests to the CQL interface. The full -query logs could be used for debugging, performance benchmarking, -testing and auditing CQL queries. The audit logs also include CQL -requests but full query logging is dedicated to CQL requests only with -features such as FQL Replay and FQL Compare that are not available in -audit logging. - -== Full Query Logger - -The Full Query Logger is a logger that logs entire query contents after -the query finishes. FQL only logs the queries that successfully -complete. The other queries (e.g. timed out, failed) are not to be -logged. Queries are logged in one of two modes: single query or batch of -queries. The log for an invocation of a batch of queries includes the -following attributes: - -.... -type - The type of the batch -queries - CQL text of the queries -values - Values to bind to as parameters for the queries -queryOptions - Options associated with the query invocation -queryState - Timestamp state associated with the query invocation -batchTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked -.... - -The log for single CQL query includes the following attributes: - -.... -query - CQL query text -queryOptions - Options associated with the query invocation -queryState - Timestamp state associated with the query invocation -queryTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked -.... - -Full query logging is backed up by `BinLog`. BinLog is a quick and dirty -binary log. Its goal is good enough performance, predictable footprint, -simplicity in terms of implementation and configuration and most -importantly minimal impact on producers of log records. Performance -safety is accomplished by feeding items to the binary log using a -weighted queue and dropping records if the binary log falls sufficiently -far behind. Simplicity and good enough performance is achieved by using -a single log writing thread as well as Chronicle Queue to handle writing -the log, making it available for readers, as well as log rolling. - -Weighted queue is a wrapper around any blocking queue that turns it into -a blocking weighted queue. The queue will weigh each element being added -and removed. Adding to the queue is blocked if adding would violate the -weight bound. If an element weighs in at larger than the capacity of the -queue then exactly one such element will be allowed into the queue at a -time. If the weight of an object changes after it is added it could -create issues. Checking weight should be cheap so memorize expensive to -compute weights. If weight throws that can also result in leaked permits -so it's always a good idea to memorize weight so it doesn't throw. In -the interests of not writing unit tests for methods no one uses there is -a lot of `UnsupportedOperationException`. If you need them then add them -and add proper unit tests to `WeightedQueueTest`. "Good" tests. 100% -coverage including exception paths and resource leaks. - -The FQL tracks information about store files: - -* Store files as they are added and their storage impact. Delete them if -over storage limit. -* The files in the chronicle queue that have already rolled -* The number of bytes in store files that have already rolled - -FQL logger sequence is as follows: - -[arabic] -. Start the consumer thread that writes log records. Can only be done -once. -. Offer a record to the log. If the in memory queue is full the record -will be dropped and offer will return false. -. Put a record into the log. If the in memory queue is full the putting -thread will be blocked until there is space or it is interrupted. -. Clean up the buffers on thread exit, finalization will check again -once this is no longer reachable ensuring there are no stragglers in the -queue. -. Stop the consumer thread that writes log records. Can be called -multiple times. - -Next, we shall demonstrate full query logging with an example. - -== Configuring Full Query Logging - -Full Query Logger default options are configured on a per node basis in -`cassandra.yaml` with following configuration property. - -.... -full_query_logging_options: -.... - -As an example setup create a three node Cassandra 4.0 cluster. The -`nodetool status` command lists the nodes in the cluster. - -.... -[ec2-user@ip-10-0-2-238 ~]$ nodetool status -Datacenter: us-east-1 -===================== -Status=Up/Down -|/ State=Normal/Leaving/Joining/Moving --- AddressLoad Tokens Owns (effective) Host ID Rack -UN 10.0.1.115 442.42 KiB 25632.6% b64cb32a-b32a-46b4-9eeb-e123fa8fc287 us-east-1b -UN 10.0.3.206 559.52 KiB 25631.9% 74863177-684b-45f4-99f7-d1006625dc9e us-east-1d -UN 10.0.2.238 587.87 KiB 25635.5% 4dcdadd2-41f9-4f34-9892-1f20868b27c7 us-east-1c -.... - -In subsequent sub-sections we shall discuss enabling and configuring -full query logging. - -=== Setting the FQL Directory - -A dedicated directory path must be provided to write full query log data -to when the full query log is enabled. The directory for FQL must exist, -and have permissions set. The full query log will recursively delete the -contents of this path at times. It is recommended not to place links in -this directory to other sections of the filesystem. The -`full_query_log_dir` property in `cassandra.yaml` is pre-configured. - -.... -full_query_log_dir: /tmp/cassandrafullquerylog -.... - -The `log_dir` option may be used to configure the FQL directory if the -`full_query_log_dir` is not set. - -.... -full_query_logging_options: - # log_dir: -.... +Apache Cassandra 4.0 adds a new highly performant feature that supports live query logging (https://issues.apache.org/jira/browse/CASSANDRA-13983[CASSANDRA-13983]). +FQL is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. +This feature is useful for live traffic capture, as well as traffic replay. +The tool provided can be used for both debugging query traffic and migration. +New ``nodetool`` options are also added to enable, disable or reset FQL, as well as a new tool to read and replay the binary logs. +The full query logging (FQL) capability uses http://github.com/OpenHFT/Chronicle-Queue[Chronicle-Queue] to rotate a log of queries. +Full query logs will be referred to as *logs* for the remainder of the page. -Create the FQL directory if it does not exist and set its permissions. +Some of the features of FQL are: -.... -sudo mkdir -p /tmp/cassandrafullquerylog -sudo chmod -R 777 /tmp/cassandrafullquerylog -.... +* The impact on query latency is reduced by asynchronous single-thread log entry writes to disk. +* Heap memory usage is bounded by a weighted queue, with configurable maximum weight sitting in front of logging thread. +* If the weighted queue is full, producers can be blocked or samples can be dropped. +* Disk utilization is bounded by a configurable size, deleting old log segments once the limit is reached. +* A flexible schema binary format, http://github.com/OpenHFT/Chronicle-Wire[Chronicle-Wire], for on-disk serialization that can skip unrecognized fields, add new ones, and omit old ones. +* Can be enabled, disabled, or reset (to delete on-disk data) using the JMX tool, ``nodetool``. +* Can configure the settings in either the `cassandra.yaml` file or by using ``nodetool``. +* Introduces new ``fqltool`` that currently can ``Dump`` the binary logs to a readable format. Other options are ``Replay`` and ``Compare``. -=== Setting the Roll Cycle +FQL logs all Cassandra Query Language (CQL) requests, both events that modify the data and those that query. +While audit logs also include CQL requests, FQL logs only the CQL request. This difference means that FQL can be used to replay or compare logs, which audit logging cannot. FQL is useful for debugging, performance benchmarking, testing and auditing CQL queries, while audit logs are useful for compliance. -The `roll_cycle` option sets how often to roll FQL log segments so they -can potentially be reclaimed. Supported values are `MINUTELY`, `HOURLY` -and `DAILY`. Default setting is `HOURLY`. +In performance testing, FQL appears to have little or no overhead in ``WRITE`` only workloads, and a minor overhead in ``MIXED`` workload. -.... -roll_cycle: HOURLY -.... +== Query information logged -=== Setting Other Options +The query log contains: -The `block` option specifies whether the FQL should block if the FQL -falls behind or should drop log records. Default value of `block` is -`true`. The `max_queue_weight` option sets the maximum weight of in -memory queue for records waiting to be written to the file before -blocking or dropping. The `max_log_size` option sets the maximum size of -the rolled files to retain on disk before deleting the oldest file. The -`archive_command` option sets the archive command to execute on rolled -log files. The `max_archive_retries` option sets the max number of -retries of failed archive commands. +* all queries invoked +* approximate time they were invoked +* any parameters necessary to bind wildcard values +* all query options -.... -# block: true - # max_queue_weight: 268435456 # 256 MiB - # max_log_size: 17179869184 # 16 GiB - ## archive command is "/path/to/script.sh %path" where %path is replaced with the file -being rolled: - # archive_command: - # max_archive_retries: 10 -.... +The logger writes single or batched CQL queries after they finish, so only successfully completed queries are logged. +Failed or timed-out queries are not logged. Different data is logged, depending on the type of query. + +A single CQL query log entry contains: + +* query - CQL query text +* queryOptions - Options associated with the query invocation +* queryState - Timestamp state associated with the query invocation +* queryTimeMillis - Approximate time in milliseconds since the epoch since the query was invoked + +A batch CQL query log entry contains: + +* queries - CQL text of the queries +* queryOptions - Options associated with the query invocation +* queryState - Timestamp state associated with the query invocation +* batchTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked +* type - The type of the batch +* values - Values to bind to as parameters for the queries + +Because FQL is backed by `Binlog`, the performance and footprint are predictable, with minimal impact on log record producers. +Performance safety prevents the producers from overloading the log, using a weighted queue to drop records if the logging falls behind. +Single-thread asynchronous writing produces the logs. Chronicle-Queue provides an easy method of rolling the logs. + +== Logging information logged + +FQL also tracks information about the stored log files: + +* Stored log files that are added and their storage impact. Deletes them if over storage limit. +* The log files in Chronicle-Queue that have already rolled +* The number of bytes in the log files that have already rolled + +== Logging sequence + +The logger follows a well-defined sequence of events: + +. The consumer thread that writes log records is started. This action can occur only once. +. The consumer thread offers a record to the log. If the in-memory queue is full, the record will be dropped and offer returns a `false` value. +. If accepted, the record is entered into the log. If the in-memory queue is full, the putting thread will be blocked until there is space or it is interrupted. +. The buffers are cleaned up at thread exit. Finalization will check again, to ensure there are no stragglers in the queue. +. The consumer thread is stopped. It can be called multiple times. -The `max_queue_weight` must be > 0. Similarly `max_log_size` must be > -0. An example full query logging options is as follows. +== Using FQL -.... -full_query_log_dir: /tmp/cassandrafullquerylog +To use FQL, two actions must be completed. FQL must be configured using either the `cassandra.yaml` file or ``nodetool``, and logging must be enabled using ``nodetool enablefullquerylog``. +With either method, at a minimum, the path to the log directory must be specified. +Both actions are completed on a per-node basis. +Full query logs are generated on each enabled node, so logs on each node will have that node's queries. -# default options for full query logging - these can be overridden from command line when -executing -# nodetool enablefullquerylog -# nodetool enablefullquerylog +== Configuring FQL in cassandra.yaml + +The `cassandra.yaml` file can be used to configure FQL before enabling the feature with ``nodetool``. + +The file includes the following options that can be uncommented for use: + +[source, yaml] +---- +# default options for full query logging - these can be overridden from command line +# when executing nodetool enablefullquerylog #full_query_logging_options: # log_dir: - roll_cycle: HOURLY + # roll_cycle: HOURLY # block: true # max_queue_weight: 268435456 # 256 MiB # max_log_size: 17179869184 # 16 GiB - ## archive command is "/path/to/script.sh %path" where %path is replaced with the file -being rolled: + # archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: # archive_command: # max_archive_retries: 10 -.... +---- -The `full_query_log_dir` setting is not within the -`full_query_logging_options` but still is for full query logging. +=== log_dir -=== Enabling Full Query Logging +To write logs, an existing directory must be set in ``log_dir``. -Full Query Logging is enabled on a per-node basis. . The -`nodetool enablefullquerylog` command is used to enable full query -logging. Defaults for the options are configured in `cassandra.yaml` and -these can be overridden from command line. +The directory must have appropriate permissions set to allow reading, writing, and executing. +Logging will recursively delete the directory contents as needed. +Do not place links in this directory to other sections of the filesystem. +For example, ``log_dir: /tmp/cassandrafullquerylog``. -The syntax of the nodetool enablefullquerylog command is as follows: +=== roll_cycle -.... -nodetool [(-h | --host )] [(-p | --port )] -[(-pp | --print-port)] [(-pw | --password )] -[(-pwf | --password-file )] -[(-u | --username )] enablefullquerylog -[--archive-command ] [--blocking] -[--max-archive-retries ] -[--max-log-size ] [--max-queue-weight ] -[--path ] [--roll-cycle ] +The ``roll_cycle`` defines the frequency with which the log segments are rolled. +Supported values are ``HOURLY`` (default), ``MINUTELY``, and ``DAILY``. +For example: ``roll_cycle: DAILY`` -OPTIONS - --archive-command -Command that will handle archiving rolled full query log files. -Format is "/path/to/script.sh %path" where %path will be replaced -with the file to archive +=== block - --blocking -If the queue is full whether to block producers or drop samples. +The ``block`` option specifies whether FQL should block writing or drop log records if FQL falls behind. Supported boolean values are ``true`` (default) or ``false``. +For example: ``block: false`` to drop records - -h , --host -Node hostname or ip address +=== max_queue_weight - --max-archive-retries -Max number of archive retries. +The ``max_queue_weight`` option sets the maximum weight of in-memory queue for records waiting to be written to the file before blocking or dropping. The option must be set to a positive value. The default value is 268435456, or 256 MiB. +For example, to change the default: ``max_queue_weight: 134217728 # 128 MiB`` - --max-log-size -How many bytes of log data to store before dropping segments. Might -not be respected if a log file hasn't rolled so it can be deleted. +=== max_log_size - --max-queue-weight -Maximum number of bytes of query data to queue to disk before -blocking or dropping samples. +The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The option must be set to a positive value. The default is 17179869184, or 16 GiB. +For example, to change the default: ``max_log_size: 34359738368 # 32 GiB`` - -p , --port -Remote jmx agent port number +=== archive_command - --path -Path to store the full query log at. Will have it's contents -recursively deleted. +The ``archive_command`` option sets the user-defined archive script to execute on rolled log files. +For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the file being rolled`` - -pp, --print-port -Operate in 4.0 mode with hosts disambiguated by port number +=== max_archive_retries - -pw , --password -Remote jmx agent password +The ``max_archive_retries`` option sets the max number of retries of failed archive commands. The default is 10. +For example: ``max_archive_retries: 10`` - -pwf , --password-file -Path to the JMX password file +FQL can also be configured using ``nodetool` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. - --roll-cycle -How often to roll the log file (MINUTELY, HOURLY, DAILY). +== Enabling FQL - -u , --username -Remote jmx agent username -.... +FQL is enabled on a per-node basis using the ``nodetool enablefullquerylog`` command. At a minimum, the path to the logging directory must be defined, if ``log_dir`` is not set in the `cassandra.yaml` file. -Run the following command on each node in the cluster. +The syntax of the ``nodetool enablefullquerylog`` command has all the same options that can be set in the ``cassandra.yaml`` file. +In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. -.... -nodetool enablefullquerylog --path /tmp/cassandrafullquerylog -.... +[source, plaintext] +---- + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablefullquerylog + [--archive-command ] [--blocking] + [--max-archive-retries ] + [--max-log-size ] [--max-queue-weight ] + [--path ] [--roll-cycle ] -After the full query logging has been enabled run some CQL statements to -generate full query logs. + OPTIONS + --archive-command + Command that will handle archiving rolled full query log files. + Format is "/path/to/script.sh %path" where %path will be replaced + with the file to archive -== Running CQL Statements + --blocking + If the queue is full whether to block producers or drop samples. -Start CQL interface with `cqlsh` command. + -h , --host + Node hostname or ip address -.... -[ec2-user@ip-10-0-2-238 ~]$ cqlsh -Connected to Cassandra Cluster at 127.0.0.1:9042. -[cqlsh 5.0.1 | Cassandra 4.0-SNAPSHOT | CQL spec 3.4.5 | Native protocol v4] -Use HELP for help. -cqlsh> -.... + --max-archive-retries + Max number of archive retries. -Run some CQL statements. Create a keyspace. Create a table and add some -data. Query the table. + --max-log-size + How many bytes of log data to store before dropping segments. Might + not be respected if a log file hasn't rolled so it can be deleted. -.... -cqlsh> CREATE KEYSPACE AuditLogKeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; -cqlsh> USE AuditLogKeyspace; -cqlsh:auditlogkeyspace> CREATE TABLE t ( -...id int, -...k int, -...v text, -...PRIMARY KEY (id) -... ); -cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); -cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); -cqlsh:auditlogkeyspace> SELECT * FROM t; + --max-queue-weight + Maximum number of bytes of query data to queue to disk before + blocking or dropping samples. -id | k | v -----+---+------ - 0 | 1 | val1 + -p , --port + Remote jmx agent port number -(1 rows) -cqlsh:auditlogkeyspace> -.... + --path + Path to store the full query log at. Will have it's contents + recursively deleted. -== Viewing the Full Query Logs + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number -The `fqltool` is used to view the full query logs. The `fqltool` has the -following usage syntax. + -pw , --password + Remote jmx agent password -.... -fqltool [] + -pwf , --password-file + Path to the JMX password file -The most commonly used fqltool commands are: - compare Compare result files generated by fqltool replay - dump Dump the contents of a full query log - help Display help information - replay Replay full query logs + --roll-cycle + How often to roll the log file (MINUTELY, HOURLY, DAILY). -See 'fqltool help ' for more information on a specific command. -.... + -u , --username + Remote jmx agent username +---- -The `fqltool dump` command is used to dump (list) the contents of a full -query log. Run the `fqltool dump` command after some CQL statements have -been run. +To enable FQL, run the following command on each node in the cluster on which you want to enable logging: -The full query logs get listed. Truncated output is as follows: +[source, bash] +---- +$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog +---- -.... -[ec2-user@ip-10-0-2-238 cassandrafullquerylog]$ fqltool dump ./ -WARN [main] 2019-08-02 03:07:53,635 Slf4jExceptionHandler.java:42 - Using Pauser.sleepy() as not enough processors, have 2, needs 8+ -Type: single-query -Query start time: 1564708322030 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system.peers -Values: - -Type: single-query -Query start time: 1564708322054 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system.local WHERE key='local' -Values: - -Type: single-query -Query start time: 1564708322109 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system_schema.keyspaces -Values: - -Type: single-query -Query start time: 1564708322116 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system_schema.tables -Values: - -Type: single-query -Query start time: 1564708322139 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system_schema.columns -Values: - -Type: single-query -Query start time: 1564708322142 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system_schema.functions -Values: - -Type: single-query -Query start time: 1564708322141 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system_schema.aggregates -Values: - -Type: single-query -Query start time: 1564708322143 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system_schema.types -Values: - -Type: single-query -Query start time: 1564708322144 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system_schema.indexes -Values: - -Type: single-query -Query start time: 1564708322142 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system_schema.triggers -Values: - -Type: single-query -Query start time: 1564708322145 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708322 -Query: SELECT * FROM system_schema.views -Values: - -Type: single-query -Query start time: 1564708345408 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:-2147483648 -Query: CREATE KEYSPACE AuditLogKeyspace -WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; -Values: - -Type: single-query -Query start time: 1564708345675 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708345 -Query: SELECT peer, rpc_address, schema_version FROM system.peers -Values: - -Type: single-query -Query start time: 1564708345676 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708345 -Query: SELECT schema_version FROM system.local WHERE key='local' -Values: - -Type: single-query -Query start time: 1564708346323 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708346 -Query: SELECT * FROM system_schema.keyspaces WHERE keyspace_name = 'auditlogkeyspace' -Values: - -Type: single-query -Query start time: 1564708360873 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:-2147483648 -Query: USE AuditLogKeyspace; -Values: - -Type: single-query -Query start time: 1564708360874 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:-2147483648 -Query: USE "auditlogkeyspace" -Values: - -Type: single-query -Query start time: 1564708378837 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:-2147483648 -Query: CREATE TABLE t ( - id int, - k int, - v text, - PRIMARY KEY (id) -); -Values: - -Type: single-query -Query start time: 1564708379247 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708379 -Query: SELECT * FROM system_schema.tables WHERE keyspace_name = 'auditlogkeyspace' AND table_name = 't' -Values: - -Type: single-query -Query start time: 1564708379255 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708379 -Query: SELECT * FROM system_schema.views WHERE keyspace_name = 'auditlogkeyspace' AND view_name = 't' -Values: - -Type: single-query -Query start time: 1564708397144 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708397 -Query: INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); -Values: - -Type: single-query -Query start time: 1564708397167 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708397 -Query: INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); -Values: - -Type: single-query -Query start time: 1564708434782 -Protocol version: 4 -Generated timestamp:-9223372036854775808 -Generated nowInSeconds:1564708434 -Query: SELECT * FROM t; -Values: - -[ec2-user@ip-10-0-2-238 cassandrafullquerylog]$ -.... - -Full query logs are generated on each node. Enabling of full query -logging on one node and the log files generated on the node are as -follows: - -.... -[root@localhost ~]# ssh -i cassandra.pem ec2-user@52.1.243.83 -Last login: Fri Aug 2 00:14:53 2019 from 75.155.255.51 -[ec2-user@ip-10-0-3-206 ~]$ sudo mkdir /tmp/cassandrafullquerylog -[ec2-user@ip-10-0-3-206 ~]$ sudo chmod -R 777 /tmp/cassandrafullquerylog -[ec2-user@ip-10-0-3-206 ~]$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog -[ec2-user@ip-10-0-3-206 ~]$ cd /tmp/cassandrafullquerylog -[ec2-user@ip-10-0-3-206 cassandrafullquerylog]$ ls -l -total 44 --rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 01:24 20190802-01.cq4 --rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 01:23 directory-listing.cq4t -[ec2-user@ip-10-0-3-206 cassandrafullquerylog]$ -.... - -Enabling of full query logging on another node and the log files -generated on the node are as follows: - -.... -[root@localhost ~]# ssh -i cassandra.pem ec2-user@3.86.103.229 -Last login: Fri Aug 2 00:13:04 2019 from 75.155.255.51 -[ec2-user@ip-10-0-1-115 ~]$ sudo mkdir /tmp/cassandrafullquerylog -[ec2-user@ip-10-0-1-115 ~]$ sudo chmod -R 777 /tmp/cassandrafullquerylog -[ec2-user@ip-10-0-1-115 ~]$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog -[ec2-user@ip-10-0-1-115 ~]$ cd /tmp/cassandrafullquerylog -[ec2-user@ip-10-0-1-115 cassandrafullquerylog]$ ls -l -total 44 --rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 01:24 20190802-01.cq4 --rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 01:23 directory-listing.cq4t -[ec2-user@ip-10-0-1-115 cassandrafullquerylog]$ -.... - -The `nodetool resetfullquerylog` resets the full query logger if it is -enabled. Also deletes any generated files in the last used full query -log path as well as the one configured in `cassandra.yaml`. It stops the -full query log and cleans files in the configured full query log -directory from `cassandra.yaml` as well as JMX. - -== Full Query Replay - -The `fqltool` provides the `replay` command -(https://issues.apache.org/jira/browse/CASSANDRA-14618[CASSANDRA-14618]) -to replay the full query logs. The FQL replay could be run on a -different machine or even a different cluster for testing, debugging and -performance benchmarking. - -The main objectives of `fqltool replay` are: - -* To be able to compare different runs of production traffic against -different versions/configurations of Cassandra. -* Take FQL logs from several machines and replay them in "order" by the -timestamps recorded. -* Record the results from each run to be able to compare different runs -(against different clusters/versions/etc). -* If fqltool replay is run against 2 or more clusters, the results could -be compared. - -The FQL replay could also be used on the same node on which the full -query log are generated to recreate a dropped database object. - -____ -The syntax of `fqltool replay` is as follows: -____ - -.... -fqltool replay [--keyspace ] [--results ] -[--store-queries ] --target ... [--] -[...] - -OPTIONS - --keyspace -Only replay queries against this keyspace and queries without -keyspace set. - - --results -Where to store the results of the queries, this should be a -directory. Leave this option out to avoid storing results. - - --store-queries -Path to store the queries executed. Stores queries in the same order -as the result sets are in the result files. Requires --results - - --target -Hosts to replay the logs to, can be repeated to replay to more -hosts. - - -- -This option can be used to separate command-line options from the -list of argument, (useful when arguments might be mistaken for -command-line options - - [...] -Paths containing the full query logs to replay. -.... - -As an example of using `fqltool replay`, drop a keyspace. - -.... -cqlsh:auditlogkeyspace> DROP KEYSPACE AuditLogKeyspace; -.... - -Subsequently run `fqltool replay`. The directory to store results of -queries and the directory to store the queries run are specified and -these directories must be created and permissions set before running -`fqltool replay`. The `--results` and `--store-queries` directories are -optional but if `--store-queries` is to be set the `--results` must also -be set. - -.... -[ec2-user@ip-10-0-2-238 cassandra]$ fqltool replay --keyspace AuditLogKeyspace --results -/cassandra/fql/logs/results/replay --store-queries /cassandra/fql/logs/queries/replay -- -target 3.91.56.164 -- /tmp/cassandrafullquerylog -.... - -Describe the keyspaces after running `fqltool replay` and the keyspace -that was dropped gets listed again. - -.... -cqlsh:auditlogkeyspace> DESC KEYSPACES; - -system_schema system system_distributed system_virtual_schema -system_auth auditlogkeyspace system_traces system_views - -cqlsh:auditlogkeyspace> -.... - -== Full Query Compare - -The `fqltool compare` command -(https://issues.apache.org/jira/browse/CASSANDRA-14619[CASSANDRA-14619]) -is used to compare result files generated by `fqltool replay`. The -`fqltool compare` command that can take the recorded runs from -`fqltool replay` and compares them, it should output any differences and -potentially all queries against the mismatching partition up until the -mismatch. - -The `fqltool compare` could be used for comparing result files generated -by different versions of Cassandra or different Cassandra configurations -as an example. The command usage is as follows: - -.... -[ec2-user@ip-10-0-2-238 ~]$ fqltool help compare -NAME - fqltool compare - Compare result files generated by fqltool replay - -SYNOPSIS - fqltool compare --queries [--] [...] - -OPTIONS - --queries - Directory to read the queries from. It is produced by the fqltool - replay --store-queries option. - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [...] - Directories containing result files to compare. -.... - -The `fqltool compare` stores each row as a separate chronicle document -to be able to avoid reading up the entire result set in memory when -comparing document formats: - -To mark the start of a new result set: - -.... -version: int16 -type: column_definitions -column_count: int32; -column_definition: text, text -column_definition: text, text -.... - -To mark a failed query set: +== Disabling or resetting FQL + +Use the ``nodetool disablefullquerylog`` to disable logging. +Use ``nodetool resetfullquerylog`` to stop FQL and clear the log files in the configured directory. +**IMPORTANT:** Using ``nodetool resetfullquerylog`` will delete the log files! Do not use this command unless you need to delete all log files. + +== fqltool + +The ``fqltool`` command is used to view (dump), replay, or compare logs. +``fqltool dump`` converts the binary log files into human-readable format; only the log directory must be supplied as a command-line option. + +``fqltool replay`` (https://issues.apache.org/jira/browse/CASSANDRA-14618[CASSANDRA-14618]) enables replay of logs. +The command can run from a different machine or cluster for testing, debugging, or performance benchmarking. +The command, run on the same node on which the logs are generated can recreate a dropped database object. +Use ``fqltool replay`` to record and compare different runs of production traffic against different versions/configurations of Cassandra or different clusters. +Another use is to gather logs from several machines and replay them in “order” by the timestamps recorded. -.... -version: int16 -type: query_failed -message: text -.... - -To mark a row set: +The syntax of ``fqltool replay`` is: -.... -version: int16 -type: row -row_column_count: int32 -column: bytes -.... - -To mark the end of a result set: +[source, plaintext] +---- + fqltool replay [--keyspace ] [--results ] + [--store-queries ] --target ... [--] + [...] -.... -version: int16 -type: end_resultset -.... - -== Performance Overhead of FQL - -In performance testing FQL appears to have little or no overhead in -`WRITE` only workloads, and a minor overhead in `MIXED` workload. + OPTIONS + --keyspace + Only replay queries against this keyspace and queries without + keyspace set. + + --results + Where to store the results of the queries, this should be a + directory. Leave this option out to avoid storing results. + + --store-queries + Path to store the queries executed. Stores queries in the same order + as the result sets are in the result files. Requires --results + + --target + Hosts to replay the logs to, can be repeated to replay to more + hosts. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Paths containing the FQ logs to replay. +---- + +``fqltool compare`` (https://issues.apache.org/jira/browse/CASSANDRA-14619[CASSANDRA-14619]) compares result files generated by ``fqltool replay``. +The command uses recorded runs from ``fqltool replay`` and compareslog, outputting any differences (potentially all queries). +It also stores each row as a separate chronicle document to avoid reading the entire result from in-memory when comparing. + +The syntax of ``fqltool compare`` is: + +[source, plaintext] +---- + fqltool compare --queries [--] [...] + + OPTIONS + --queries + Directory to read the queries from. It is produced by the fqltool + replay --store-queries option. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Directories containing result files to compare. +---- + +The comparison sets the following marks: + +* Mark the beginning of a query set: + +[source, plaintext] +---- + version: int16 + type: column_definitions + column_count: int32; + column_definition: text, text + column_definition: text, text + .... +---- + +* Mark a failed query set: + +[source, plaintext] +---- + version: int16 + type: query_failed + message: text +---- + +* Mark a row set: + +[source, plaintext] +---- + version: int16 + type: row + row_column_count: int32 + column: bytes +---- + +* Mark the end of a result set: + +[source, plaintext] +---- + version: int16 + type: end_resultset +---- + +== Example + +[arabic, start=1] +. To demonstrate FQL, first configure and enable FQL on a node in your cluster: + +[source, bash] +---- +$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog +---- + +[arabic, start=2] +. Now create a demo keyspace and table and insert some data using ``cqlsh``: + +[source, cql] +---- + cqlsh> CREATE KEYSPACE querylogkeyspace + ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + cqlsh> USE querylogkeyspace; + cqlsh:querylogkeyspace> CREATE TABLE t ( + ...id int, + ...k int, + ...v text, + ...PRIMARY KEY (id) + ... ); + cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); +---- + +[arabic, start=3] +. Then check that the data is inserted: + +[source, plaintext] +---- + cqlsh:querylogkeyspace> SELECT * FROM t; + + id | k | v + ----+---+------ + 0 | 1 | val1 + + (1 rows) +---- + +[arabic, start=4] +. Use the ``fqltool dump`` command to view the logs. + +[source, bash] +---- +$ fqltool dump /tmp/cassandrafullquerylog +---- + +This command will return a readable version of the log. Here is a partial sample of the log for the commands in this demo: + +[source, plaintext] +---- +WARN [main] 2019-08-02 03:07:53,635 Slf4jExceptionHandler.java:42 - Using Pauser.sleepy() as not enough processors, have 2, needs 8+ + Type: single-query + Query start time: 1564708322030 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system.peers + Values: + + Type: single-query + Query start time: 1564708322054 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system.local WHERE key='local' + Values: + + Type: single-query + Query start time: 1564708322109 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.keyspaces + Values: + + Type: single-query + Query start time: 1564708322116 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.tables + Values: + + Type: single-query + Query start time: 1564708322139 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.columns + Values: + + Type: single-query + Query start time: 1564708322142 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.functions + Values: + + Type: single-query + Query start time: 1564708322141 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.aggregates + Values: + + Type: single-query + Query start time: 1564708322143 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.types + Values: + + Type: single-query + Query start time: 1564708322144 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.indexes + Values: + + Type: single-query + Query start time: 1564708322145 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.views + Values: + + Type: single-query + Query start time: 1564708345408 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: CREATE KEYSPACE querylogkeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + Values: + + Type: single-query + Query start time: 1564708360873 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: USE querylogkeyspace; + Values: + + Type: single-query + Query start time: 1564708360874 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: USE "querylogkeyspace" + Values: + + Type: single-query + Query start time: 1564708378837 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: CREATE TABLE t ( + id int, + k int, + v text, + PRIMARY KEY (id) + ); + Values: + + Type: single-query + Query start time: 1564708379247 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708379 + Query: SELECT * FROM system_schema.tables WHERE keyspace_name = 'querylogkeyspace' AND table_name = 't' + Values: + + Type: single-query + Query start time: 1564708397144 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708397 + Query: INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + Values: + + Type: single-query + Query start time: 1564708434782 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708434 + Query: SELECT * FROM t; + Values: +---- + +[arabic, start=5] +. To demonstrate ``fqltool replay``, first drop the keyspace. + +[source, cql] +---- +cqlsh:querylogkeyspace> DROP KEYSPACE querylogkeyspace; +---- + +[arabic, start=6] +. Now run ``fqltool replay`` specifying the directories in which to store the results of the queries and +the list of queries run, respectively, in `--results` and `--store-queries`: + +[source, bash] +---- +$ fqltool replay \ +--keyspace querylogkeyspace --results /cassandra/fql/logs/results/replay \ +--store-queries /cassandra/fql/logs/queries/replay \ +-- target 3.91.56.164 \ +/tmp/cassandrafullquerylog +---- + +The ``--results`` and ``--store-queries`` directories are optional, but if ``--store-queries`` is set, then ``--results`` must also be set. +The ``--target`` specifies the node on which to replay to logs. + +[arabic, start=7] +. Check that the keyspace was replayed and exists again using the ``DESCRIBE KEYSPACES`` command: + +[source, cql] +---- + cqlsh:querylogkeyspace> DESC KEYSPACES; + + system_schema system system_distributed system_virtual_schema + system_auth querylogkeyspace system_traces system_views +---- From 15c01895b7e747de11e1ecd1102024734983bb68 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 31 Jul 2020 10:10:35 -0700 Subject: [PATCH 026/115] remove unused file --- .../cassandra/pages/new/fqllogging.rst | 587 ------------------ 1 file changed, 587 deletions(-) delete mode 100644 doc/source/modules/cassandra/pages/new/fqllogging.rst diff --git a/doc/source/modules/cassandra/pages/new/fqllogging.rst b/doc/source/modules/cassandra/pages/new/fqllogging.rst deleted file mode 100644 index 04cff57105c6..000000000000 --- a/doc/source/modules/cassandra/pages/new/fqllogging.rst +++ /dev/null @@ -1,587 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -Full Query Logging (FQL) -======================== - -Apache Cassandra 4.0 adds a new highly performant feature that supports live query logging (`CASSANDRA-13983 `_). -FQL is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. -This feature is useful for live traffic capture, as well as traffic replay. The tool provided can be used for both debugging query traffic and migration. -New ``nodetool`` options are also added to enable, disable or reset FQL, as well as a new tool to read and replay the binary logs. -The full query logging (FQL) capability uses `Chronicle-Queue `_ to rotate a log of queries. -Full query logs will be referred to as *logs* for the remainder of the page. - -Some of the features of FQL are: - -- The impact on query latency is reduced by asynchronous single-thread log entry writes to disk. -- Heap memory usage is bounded by a weighted queue, with configurable maximum weight sitting in front of logging thread. -- If the weighted queue is full, producers can be blocked or samples can be dropped. -- Disk utilization is bounded by a configurable size, deleting old log segments once the limit is reached. -- A flexible schema binary format, `Chronicle-Wire `_, for on-disk serialization that can skip unrecognized fields, add new ones, and omit old ones. -- Can be enabled, disabled, or reset (to delete on-disk data) using the JMX tool, ``nodetool``. -- Can configure the settings in either the `cassandra.yaml` file or by using ``nodetool``. -- Introduces new ``fqltool`` that currently can ``Dump`` the binary logs to a readable format. Other options are ``Replay`` and ``Compare``. - -FQL logs all Cassandra Query Language (CQL) requests, both events that modify the data and those that query. -While audit logs also include CQL requests, FQL logs only the CQL request. This difference means that FQL can be used to replay or compare logs, which audit logging cannot. FQL is useful for debugging, performance benchmarking, testing and auditing CQL queries, while audit logs are useful for compliance. - -In performance testing, FQL appears to have little or no overhead in ``WRITE`` only workloads, and a minor overhead in ``MIXED`` workload. - -Query information logged ------------------------- - -The query log contains: - -- all queries invoked -- approximate time they were invoked -- any parameters necessary to bind wildcard values -- all query options - -The logger writes single or batched CQL queries after they finish, so only successfully completed queries are logged. Failed or timed-out queries are not logged. Different data is logged, depending on the type of query. - -A single CQL query log entry contains: - -- query - CQL query text -- queryOptions - Options associated with the query invocation -- queryState - Timestamp state associated with the query invocation -- queryTimeMillis - Approximate time in milliseconds since the epoch since the query was invoked - -A batch CQL query log entry contains: - -- queries - CQL text of the queries -- queryOptions - Options associated with the query invocation -- queryState - Timestamp state associated with the query invocation -- batchTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked -- type - The type of the batch -- values - Values to bind to as parameters for the queries - -Because FQL is backed by `Binlog`, the performance and footprint are predictable, with minimal impact on log record producers. -Performance safety prevents the producers from overloading the log, using a weighted queue to drop records if the logging falls behind. -Single-thread asynchronous writing produces the logs. Chronicle-Queue provides an easy method of rolling the logs. - -Logging information logged --------------------------- - -FQL also tracks information about the stored log files: - -- Stored log files that are added and their storage impact. Deletes them if over storage limit. -- The log files in Chronicle-Queue that have already rolled -- The number of bytes in the log files that have already rolled - -Logging sequence ----------------- - -The logger follows a well-defined sequence of events: - -1. The consumer thread that writes log records is started. This action can occur only once. -2. The consumer thread offers a record to the log. If the in-memory queue is full, the record will be dropped and offer returns a `false` value. -3. If accepted, the record is entered into the log. If the in-memory queue is full, the putting thread will be blocked until there is space or it is interrupted. -4. The buffers are cleaned up at thread exit. Finalization will check again, to ensure there are no stragglers in the queue. -5. The consumer thread is stopped. It can be called multiple times. - -Using FQL ---------- - -To use FQL, two actions must be completed. FQL must be configured using either the `cassandra.yaml` file or ``nodetool``, and logging must be enabled using ``nodetool enablefullquerylog``. -With either method, at a minimum, the path to the log directory must be specified. -Both actions are completed on a per-node basis. -Full query logs are generated on each enabled node, so logs on each node will have that node's queries. - -Configuring FQL in cassandra.yaml ---------------------------------- - -The `cassandra.yaml` file can be used to configure FQL before enabling the feature with ``nodetool``. - -The file includes the following options that can be uncommented for use: - -:: - - # default options for full query logging - these can be overridden from command line - # when executing nodetool enablefullquerylog - #full_query_logging_options: - # log_dir: - # roll_cycle: HOURLY - # block: true - # max_queue_weight: 268435456 # 256 MiB - # max_log_size: 17179869184 # 16 GiB - ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: - # archive_command: - # max_archive_retries: 10 - -log_dir -^^^^^^^ - -To write logs, an existing directory must be set in ``log_dir``. - -The directory must have appropriate permissions set to allow reading, writing, and executing. -Logging will recursively delete the directory contents as needed. -Do not place links in this directory to other sections of the filesystem. -For example, ``log_dir: /tmp/cassandrafullquerylog``. - -roll_cycle -^^^^^^^^^^ - -The ``roll_cycle`` defines the frequency with which the log segments are rolled. -Supported values are ``HOURLY`` (default), ``MINUTELY``, and ``DAILY``. -For example: ``roll_cycle: DAILY`` - -block -^^^^^ - -The ``block`` option specifies whether FQL should block writing or drop log records if FQL falls behind. Supported boolean values are ``true`` (default) or ``false``. -For example: ``block: false`` to drop records - -max_queue_weight -^^^^^^^^^^^^^^^^ - -The ``max_queue_weight`` option sets the maximum weight of in-memory queue for records waiting to be written to the file before blocking or dropping. The option must be set to a positive value. The default value is 268435456, or 256 MiB. -For example, to change the default: ``max_queue_weight: 134217728 # 128 MiB`` - -max_log_size -^^^^^^^^^^^^ - -The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The option must be set to a positive value. The default is 17179869184, or 16 GiB. -For example, to change the default: ``max_log_size: 34359738368 # 32 GiB`` - -archive_command -^^^^^^^^^^^^^^^ - -The ``archive_command`` option sets the user-defined archive script to execute on rolled log files. -For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the file being rolled`` - -max_archive_retries -^^^^^^^^^^^^^^^^^^^ - -The ``max_archive_retries`` option sets the max number of retries of failed archive commands. The default is 10. -For example: ``max_archive_retries: 10`` - -FQL can also be configured using ``nodetool` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. - -Enabling FQL ------------- - -FQL is enabled on a per-node basis using the ``nodetool enablefullquerylog`` command. At a minimum, the path to the logging directory must be defined, if ``log_dir`` is not set in the `cassandra.yaml` file. - -The syntax of the ``nodetool enablefullquerylog`` command has all the same options that can be set in the ``cassandra.yaml`` file. -In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. - -:: - - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enablefullquerylog - [--archive-command ] [--blocking] - [--max-archive-retries ] - [--max-log-size ] [--max-queue-weight ] - [--path ] [--roll-cycle ] - - OPTIONS - --archive-command - Command that will handle archiving rolled full query log files. - Format is "/path/to/script.sh %path" where %path will be replaced - with the file to archive - - --blocking - If the queue is full whether to block producers or drop samples. - - -h , --host - Node hostname or ip address - - --max-archive-retries - Max number of archive retries. - - --max-log-size - How many bytes of log data to store before dropping segments. Might - not be respected if a log file hasn't rolled so it can be deleted. - - --max-queue-weight - Maximum number of bytes of query data to queue to disk before - blocking or dropping samples. - - -p , --port - Remote jmx agent port number - - --path - Path to store the full query log at. Will have it's contents - recursively deleted. - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - --roll-cycle - How often to roll the log file (MINUTELY, HOURLY, DAILY). - - -u , --username - Remote jmx agent username - -To enable FQL, run the following command on each node in the cluster on which you want to enable logging: - -:: - - nodetool enablefullquerylog --path /tmp/cassandrafullquerylog - -Disabling or resetting FQL -------------- - -Use the ``nodetool disablefullquerylog`` to disable logging. -Use ``nodetool resetfullquerylog`` to stop FQL and clear the log files in the configured directory. -**IMPORTANT:** Using ``nodetool resetfullquerylog`` will delete the log files! Do not use this command unless you need to delete all log files. - -fqltool -------- - -The ``fqltool`` command is used to view (dump), replay, or compare logs. -``fqltool dump`` converts the binary log files into human-readable format; only the log directory must be supplied as a command-line option. - -``fqltool replay`` (CASSANDRA-14618) enables replay of logs. -The command can run from a different machine or cluster for testing, debugging, or performance benchmarking. -The command, run on the same node on which the logs are generated can recreate a dropped database object. -Use ``fqltool replay`` to record and compare different runs of production traffic against different versions/configurations of Cassandra or different clusters. -Another use is to gather logs from several machines and replay them in “order” by the timestamps recorded. - -The syntax of ``fqltool replay`` is: - -:: - - fqltool replay [--keyspace ] [--results ] - [--store-queries ] --target ... [--] - [...] - - OPTIONS - --keyspace - Only replay queries against this keyspace and queries without - keyspace set. - - --results - Where to store the results of the queries, this should be a - directory. Leave this option out to avoid storing results. - - --store-queries - Path to store the queries executed. Stores queries in the same order - as the result sets are in the result files. Requires --results - - --target - Hosts to replay the logs to, can be repeated to replay to more - hosts. - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [...] - Paths containing the FQ logs to replay. - -``fqltool compare`` (`CASSANDRA-14619 `_) compares result files generated by ``fqltool replay``. -The command uses recorded runs from ``fqltool replay`` and compareslog, outputting any differences (potentially all queries). -It also stores each row as a separate chronicle document to avoid reading the entire result from in-memory when comparing. - -The syntax of ``fqltool compare`` is: - -:: - -$ fqltool help compare - NAME - fqltool compare - Compare result files generated by fqltool replay - - SYNOPSIS - fqltool compare --queries [--] [...] - - OPTIONS - --queries - Directory to read the queries from. It is produced by the fqltool - replay --store-queries option. - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [...] - Directories containing result files to compare. - -The comparison sets the following marks: - -- Mark the beginning of a query set: - -:: - - ------------------- - version: int16 - type: column_definitions - column_count: int32; - column_definition: text, text - column_definition: text, text - .... - -------------------- - - -- Mark a failed query set: - -:: - - --------------------- - version: int16 - type: query_failed - message: text - --------------------- - -- Mark a row set: - -:: - - -------------------- - version: int16 - type: row - row_column_count: int32 - column: bytes - --------------------- - -- Mark the end of a result set: - -:: - - ------------------- - version: int16 - type: end_resultset - ------------------- - -Example -------- - -1. To demonstrate FQL, first configure and enable FQL on a node in your cluster: - -:: - - nodetool enablefullquerylog --path /tmp/cassandrafullquerylog - - -2. Now create a demo keyspace and table and insert some data using ``cqlsh``: - -:: - - cqlsh> CREATE KEYSPACE querylogkeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; - cqlsh> USE querylogkeyspace; - cqlsh:querylogkeyspace> CREATE TABLE t ( - ...id int, - ...k int, - ...v text, - ...PRIMARY KEY (id) - ... ); - cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); - -3. Then check that the data is inserted: - -:: - - cqlsh:querylogkeyspace> SELECT * FROM t; - - id | k | v - ----+---+------ - 0 | 1 | val1 - - (1 rows) - -4. Use the ``fqltool dump`` command to view the logs. - -:: - -$ fqltool dump /tmp/cassandrafullquerylog - -This command will return a readable version of the log. Here is a partial sample of the log for the commands in this demo: - -:: - - WARN [main] 2019-08-02 03:07:53,635 Slf4jExceptionHandler.java:42 - Using Pauser.sleepy() as not enough processors, have 2, needs 8+ - Type: single-query - Query start time: 1564708322030 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system.peers - Values: - - Type: single-query - Query start time: 1564708322054 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system.local WHERE key='local' - Values: - - Type: single-query - Query start time: 1564708322109 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.keyspaces - Values: - - Type: single-query - Query start time: 1564708322116 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.tables - Values: - - Type: single-query - Query start time: 1564708322139 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.columns - Values: - - Type: single-query - Query start time: 1564708322142 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.functions - Values: - - Type: single-query - Query start time: 1564708322141 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.aggregates - Values: - - Type: single-query - Query start time: 1564708322143 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.types - Values: - - Type: single-query - Query start time: 1564708322144 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.indexes - Values: - - Type: single-query - Query start time: 1564708322145 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.views - Values: - - Type: single-query - Query start time: 1564708345408 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: CREATE KEYSPACE querylogkeyspace - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; - Values: - - Type: single-query - Query start time: 1564708360873 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: USE querylogkeyspace; - Values: - - Type: single-query - Query start time: 1564708360874 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: USE "querylogkeyspace" - Values: - - Type: single-query - Query start time: 1564708378837 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: CREATE TABLE t ( - id int, - k int, - v text, - PRIMARY KEY (id) - ); - Values: - - Type: single-query - Query start time: 1564708379247 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708379 - Query: SELECT * FROM system_schema.tables WHERE keyspace_name = 'querylogkeyspace' AND table_name = 't' - Values: - - Type: single-query - Query start time: 1564708397144 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708397 - Query: INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - Values: - - Type: single-query - Query start time: 1564708434782 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708434 - Query: SELECT * FROM t; - Values: - -5. To demonstrate ``fqltool replay``, first drop the keyspace. - -:: - - cqlsh:querylogkeyspace> DROP KEYSPACE querylogkeyspace; - -6. Now run ``fqltool replay`` specifying the directories in which to store the results of the queries and -the list of queries run, respectively, in `--results` and `--store-queries`: - -:: - -$ fqltool replay \ ---keyspace querylogkeyspace --results /cassandra/fql/logs/results/replay \ ---store-queries /cassandra/fql/logs/queries/replay \ --- target 3.91.56.164 \ -/tmp/cassandrafullquerylog - -The ``--results`` and ``--store-queries`` directories are optional, but if ``--store-queries`` is set, then ``--results`` must also be set. -The ``--target`` specifies the node on which to replay to logs. - -7. Check that the keyspace was replayed and exists again using the ``DESCRIBE KEYSPACES`` command: - -:: - - cqlsh:querylogkeyspace> DESC KEYSPACES; - - system_schema system system_distributed system_virtual_schema - system_auth querylogkeyspace system_traces system_views From 603372b7f398d463b884c3b3e068a8a2569a34a5 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 31 Jul 2020 10:11:40 -0700 Subject: [PATCH 027/115] nodetool text page gen'd --- .../pages/tools/nodetool/nodetool.txt | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt new file mode 100644 index 000000000000..d7880e33a220 --- /dev/null +++ b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt @@ -0,0 +1,125 @@ +usage: nodetool [(-pwf | --password-file )] + [(-h | --host )] [(-u | --username )] + [(-pp | --print-port)] [(-p | --port )] + [(-pw | --password )] [] + +The most commonly used nodetool commands are: + assassinate Forcefully remove a dead node without re-replicating any data. Use as a last resort if you cannot removenode + bootstrap Monitor/manage node's bootstrap process + cleanup Triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces + clearsnapshot Remove the snapshot with the given name from the given keyspaces. If no snapshotName is specified we will remove all snapshots + clientstats Print information about connected clients + compact Force a (major) compaction on one or more tables or user-defined compaction on given SSTables + compactionhistory Print history of compaction + compactionstats Print statistics on compactions + decommission Decommission the *node I am connecting to* + describecluster Print the name, snitch, partitioner and schema version of a cluster + describering Shows the token ranges info of a given keyspace + disableauditlog Disable the audit log + disableautocompaction Disable autocompaction for the given keyspace and table + disablebackup Disable incremental backup + disablebinary Disable native transport (binary protocol) + disablefullquerylog Disable the full query log + disablegossip Disable gossip (effectively marking the node down) + disablehandoff Disable storing hinted handoffs + disablehintsfordc Disable hints for a data center + disableoldprotocolversions Disable old protocol versions + drain Drain the node (stop accepting writes and flush all tables) + enableauditlog Enable the audit log + enableautocompaction Enable autocompaction for the given keyspace and table + enablebackup Enable incremental backup + enablebinary Reenable native transport (binary protocol) + enablefullquerylog Enable full query logging, defaults for the options are configured in cassandra.yaml + enablegossip Reenable gossip + enablehandoff Reenable future hints storing on the current node + enablehintsfordc Enable hints for a data center that was previsouly disabled + enableoldprotocolversions Enable old protocol versions + failuredetector Shows the failure detector information for the cluster + flush Flush one or more tables + garbagecollect Remove deleted data from one or more tables + gcstats Print GC Statistics + getbatchlogreplaythrottle Print batchlog replay throttle in KB/s. This is reduced proportionally to the number of nodes in the cluster. + getcompactionthreshold Print min and max compaction thresholds for a given table + getcompactionthroughput Print the MB/s throughput cap for compaction in the system + getconcurrency Get maximum concurrency for processing stages + getconcurrentcompactors Get the number of concurrent compactors in the system. + getconcurrentviewbuilders Get the number of concurrent view builders in the system + getendpoints Print the end points that owns the key + getinterdcstreamthroughput Print the Mb/s throughput cap for inter-datacenter streaming in the system + getlogginglevels Get the runtime logging levels + getmaxhintwindow Print the max hint window in ms + getseeds Get the currently in use seed node IP list excluding the node IP + getsstables Print the sstable filenames that own the key + getstreamthroughput Print the Mb/s throughput cap for streaming in the system + gettimeout Print the timeout of the given type in ms + gettraceprobability Print the current trace probability value + gossipinfo Shows the gossip information for the cluster + help Display help information + import Import new SSTables to the system + info Print node information (uptime, load, ...) + invalidatecountercache Invalidate the counter cache + invalidatekeycache Invalidate the key cache + invalidaterowcache Invalidate the row cache + join Join the ring + listsnapshots Lists all the snapshots along with the size on disk and true size. True size is the total size of all SSTables which are not backed up to disk. Size on disk is total size of the snapshot on disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication. + move Move node on the token ring to a new token + netstats Print network information on provided host (connecting node by default) + pausehandoff Pause hints delivery process + profileload Low footprint profiling of activity for a period of time + proxyhistograms Print statistic histograms for network operations + rangekeysample Shows the sampled keys held across all keyspaces + rebuild Rebuild data by streaming from other nodes (similarly to bootstrap) + rebuild_index A full rebuild of native secondary indexes for a given table + refresh Load newly placed SSTables to the system without restart + refreshsizeestimates Refresh system.size_estimates + reloadlocalschema Reload local node schema from system tables + reloadseeds Reload the seed node list from the seed node provider + reloadssl Signals Cassandra to reload SSL certificates + reloadtriggers Reload trigger classes + relocatesstables Relocates sstables to the correct disk + removenode Show status of current node removal, force completion of pending removal or remove provided ID + repair Repair one or more tables + repair_admin list and fail incremental repair sessions + replaybatchlog Kick off batchlog replay and wait for finish + resetfullquerylog Stop the full query log and clean files in the configured full query log directory from cassandra.yaml as well as JMX + resetlocalschema Reset node's local schema and resync + resumehandoff Resume hints delivery process + ring Print information about the token ring + scrub Scrub (rebuild sstables for) one or more tables + setbatchlogreplaythrottle Set batchlog replay throttle in KB per second, or 0 to disable throttling. This will be reduced proportionally to the number of nodes in the cluster. + setcachecapacity Set global key, row, and counter cache capacities (in MB units) + setcachekeystosave Set number of keys saved by each cache for faster post-restart warmup. 0 to disable + setcompactionthreshold Set min and max compaction thresholds for a given table + setcompactionthroughput Set the MB/s throughput cap for compaction in the system, or 0 to disable throttling + setconcurrency Set maximum concurrency for processing stage + setconcurrentcompactors Set number of concurrent compactors in the system. + setconcurrentviewbuilders Set the number of concurrent view builders in the system + sethintedhandoffthrottlekb Set hinted handoff throttle in kb per second, per delivery thread. + setinterdcstreamthroughput Set the Mb/s throughput cap for inter-datacenter streaming in the system, or 0 to disable throttling + setlogginglevel Set the log level threshold for a given component or class. Will reset to the initial configuration if called with no parameters. + setmaxhintwindow Set the specified max hint window in ms + setstreamthroughput Set the Mb/s throughput cap for streaming in the system, or 0 to disable throttling + settimeout Set the specified timeout in ms, or 0 to disable timeout + settraceprobability Sets the probability for tracing any given request to value. 0 disables, 1 enables for all requests, 0 is the default + sjk Run commands of 'Swiss Java Knife'. Run 'nodetool sjk --help' for more information. + snapshot Take a snapshot of specified keyspaces or a snapshot of the specified table + status Print cluster information (state, load, IDs, ...) + statusautocompaction status of autocompaction of the given keyspace and table + statusbackup Status of incremental backup + statusbinary Status of native transport (binary protocol) + statusgossip Status of gossip + statushandoff Status of storing future hints on the current node + stop Stop compaction + stopdaemon Stop cassandra daemon + tablehistograms Print statistic histograms for a given table + tablestats Print statistics on tables + toppartitions Sample and print the most active partitions + tpstats Print usage statistics of thread pools + truncatehints Truncate all hints on the local node, or truncate hints for the endpoint(s) specified. + upgradesstables Rewrite sstables (for the requested tables) that are not on the current version (thus upgrading them to said current version) + verify Verify (check data checksum for) one or more tables + version Print cassandra version + viewbuildstatus Show progress of a materialized view build + +See 'nodetool help ' for more information on a specific command. + From ca9aa26fee579f78c0e262aca17c76db43aa695e Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 31 Jul 2020 15:08:06 -0700 Subject: [PATCH 028/115] rewrite audit logging --- .../cassandra/pages/new/auditlogging.adoc | 279 ++++++++---------- 1 file changed, 131 insertions(+), 148 deletions(-) diff --git a/doc/source/modules/cassandra/pages/new/auditlogging.adoc b/doc/source/modules/cassandra/pages/new/auditlogging.adoc index 58fb8913f0c8..68319247433c 100644 --- a/doc/source/modules/cassandra/pages/new/auditlogging.adoc +++ b/doc/source/modules/cassandra/pages/new/auditlogging.adoc @@ -1,53 +1,44 @@ = Audit Logging -Audit Logging is a new feature in Apache Cassandra 4.0 -(https://issues.apache.org/jira/browse/CASSANDRA-12151[CASSANDRA-12151]). -All database activity is logged to a directory in the local filesystem -and the audit log files are rolled periodically. All database operations -are monitored and recorded. Audit logs are stored in local directory -files instead of the database itself as it provides several benefits, -some of which are: +Audit Logging is a new feature in Apache Cassandra 4.0 (https://issues.apache.org/jira/browse/CASSANDRA-12151[CASSANDRA-12151]). +All database activity is logged to a directory in the local filesystem and the audit log files are rolled periodically. +All database operations are monitored and recorded. +Audit logs are stored in local directory files instead of the database itself as it provides several benefits, some of which are: * No additional database capacity is needed to store audit logs -* No query tool is required while storing the audit logs in the database -would require a query tool +* No query tool is required while storing the audit logs in the database would require a query tool * Latency of database operations is not affected; no performance impact -* It is easier to implement file based logging than database based -logging +* It is easier to implement file based logging than database based logging == What does Audit Logging Log? Audit logging logs: -[arabic] -. All authentication which includes successful and failed login attempts -. All database command requests to CQL. Both failed and successful CQL -is logged +* All authentication which includes successful and failed login attempts +* All database command requests to CQL. Both failed and successful CQL is logged More specifically an audit log entry could be one of two types: -[loweralpha] -. CQL Audit Log Entry Type or -. Common Audit Log Entry Type +* CQL Audit Log Entry Type or +* Common Audit Log Entry Type Each of these types comprises of several database operations. The CQL Audit Log Entry Type could be one of the following; the category of the CQL audit log entry type is listed in parentheses. -[arabic] -. SELECT(QUERY), -. UPDATE(DML), -. DELETE(DML), -. TRUNCATE(DDL), -. CREATE_KEYSPACE(DDL), -. ALTER_KEYSPACE(DDL), -. DROP_KEYSPACE(DDL), -. CREATE_TABLE(DDL), -. DROP_TABLE(DDL), -. PREPARE_STATEMENT(PREPARE), -. DROP_TRIGGER(DDL), -. LIST_USERS(DCL), -. CREATE_INDEX(DDL), +* SELECT(QUERY), +* UPDATE(DML), +* DELETE(DML), +* TRUNCATE(DDL), +* CREATE_KEYSPACE(DDL), +* ALTER_KEYSPACE(DDL), +* DROP_KEYSPACE(DDL), +* CREATE_TABLE(DDL), +* DROP_TABLE(DDL), +* PREPARE_STATEMENT(PREPARE), +* DROP_TRIGGER(DDL), +* LIST_USERS(DCL), +* CREATE_INDEX(DDL), . DROP_INDEX(DDL), . GRANT(DCL), . REVOKE(DCL), @@ -102,161 +93,153 @@ frequency is hourly. == Configuring Audit Logging -Audit Logging is configured on each node separately. Audit Logging is -configured in `cassandra.yaml` in the `audit_logging_options` setting. -The settings may be same/different on each node. +The ``cassandra.yaml`` file can be used to configure and enable audit logging. +Configuration and enablement may be the same or different on each node, depending on the ``cassandra.yaml`` file settings. +Audit logs are generated on each enabled node, so logs on each node will have that node's queries. +All options for audit logging can be set in the ``cassandra.yaml`` file under the `audit_logging_options:`. -=== Enabling Audit Logging +The file includes the following options that can be uncommented for use: + +[source, yaml] +---- +# Audit logging - Logs every incoming CQL command request, authentication to a node. See the docs +# on audit_logging for full details about the various configuration options. +audit_logging_options: + enabled: false + logger: + - class_name: BinAuditLogger + # audit_logs_dir: + # included_keyspaces: + # excluded_keyspaces: system, system_schema, system_virtual_schema + # included_categories: + # excluded_categories: + # included_users: + # excluded_users: + # roll_cycle: HOURLY + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: + # archive_command: + # max_archive_retries: 10 +---- + +=== enabled Audit logging is enabled by setting the `enabled` option to `true` in -the `audit_logging_options` setting. +the `audit_logging_options` setting. For example, ``enabled: true``. -.... -audit_logging_options: - enabled: true -.... +=== logger -=== Setting the Logger +The type of audit logger is set with the `logger` option. +Supported values are: `BinAuditLogger` (default), `FileAuditLogger` and `NoOpAuditLogger`. +`BinAuditLogger` logs events to a file in binary format. +`FileAuditLogger` uses the standard logging mechanism, `slf4j` to log events to the `audit/audit.log` file. It is a synchronous, file-based audit logger. +`NoOpAuditLogger` is a no-op implementation of the audit logger that shoudl be specified when audit logging is disabled. -The audit logger is set with the `logger` option. +For example: -.... -logger: BinAuditLogger -.... +[source, yaml] +---- +logger: + - class_name: FileAuditLogger +---- -Two types of audit loggers are supported: `FileAuditLogger` and -`BinAuditLogger`. `BinAuditLogger` is the default setting. The -`BinAuditLogger` is an efficient way to log events to file in a binary -format. -`FileAuditLogger` is synchronous, file-based audit logger; just uses the -standard logging mechanism. `FileAuditLogger` logs events to -`audit/audit.log` file using `slf4j` logger. +=== audit_logs_dir -The `NoOpAuditLogger` is a No-Op implementation of the audit logger to -be used as a default audit logger when audit logging is disabled. +To write audit logs, an existing directory must be set in ``audit_log_dir``. -=== Setting the Audit Logs Directory +The directory must have appropriate permissions set to allow reading, writing, and executing. +Logging will recursively delete the directory contents as needed. +Do not place links in this directory to other sections of the filesystem. +For example, ``audit_log_dir: /cassandra/audit/logs/hourly``. -The audit logs directory is set with the `audit_logs_dir` option. A new -directory is not created automatically and an existing directory must be -set. Audit Logs directory can be configured using -`cassandra.logdir.audit` system property or default is set to -`cassandra.logdir + /audit/`. A user created directory may be set. As an -example, create a directory for the audit logs and set its permissions. +The audit log directory can also be configured using the system property `cassandra.logdir.audit`, which by default is set to `cassandra.logdir + /audit/`. -.... -sudo mkdir –p /cassandra/audit/logs/hourly -sudo chmod -R 777 /cassandra/audit/logs/hourly -.... +=== included_keyspaces and excluded_keyspaces -Set the directory for the audit logs directory using the -`audit_logs_dir` option. +Set the keyspaces to include with the `included_keyspaces` option and +the keyspaces to exclude with the `excluded_keyspaces` option. +By default, `system`, `system_schema` and `system_virtual_schema` are excluded, and all other keyspaces are included. -.... -audit_logs_dir: "/cassandra/audit/logs/hourly" -.... +For example: +[source, yaml] +---- +included_keyspaces: test, demo +excluded_keyspaces: system, system_schema, system_virtual_schema +---- -=== Setting Keyspaces to Audit +=== included_categories and excluded_categories -Set the keyspaces to include with the `included_keyspaces` option and -the keyspaces to exclude with the `excluded_keyspaces` option. By -default all keyspaces are included. By default, `system`, -`system_schema` and `system_virtual_schema` are excluded. +The categories of database operations to include are specified with the `included_categories` option as a comma-separated list. +The categories of database operations to exclude are specified with `excluded_categories` option as a comma-separated list. +The supported categories for audit log are: `AUTH`, `DCL`, `DDL`, `DML`, `ERROR`, `OTHER`, `PREPARE`, and `QUERY`. +By default all supported categories are included, and no category is excluded. -.... -# included_keyspaces: -# excluded_keyspaces: system, system_schema, system_virtual_schema -.... +[source, yaml] +---- +included_categories: AUTH, ERROR, DCL +excluded_categories: DDL, DML, QUERY, PREPARE +---- -=== Setting Categories to Audit +=== included_users and excluded_users -The categories of database operations to be included are specified with -the `included_categories` option as a comma separated list. By default -all supported categories are included. The categories of database -operations to be excluded are specified with `excluded_categories` -option as a comma separated list. By default no category is excluded. +Users to audit log are set with the `included_users` and `excluded_users` options. +The `included_users` option specifies a comma-separated list of users to include explicitly. +The `excluded_users` option specifies a comma-separated list of users to exclude explicitly. +By default all users are included, and no users are excluded. -.... -# included_categories: -# excluded_categories: -.... +[source, yaml] +---- +included_users: +excluded_users: john, mary +---- -The supported categories for audit log are: +=== roll_cycle -[arabic] -. QUERY -. DML -. DDL -. DCL -. OTHER -. AUTH -. ERROR -. PREPARE - -=== Setting Users to Audit - -Users to audit log are set with the `included_users` and -`excluded_users` options. The `included_users` option specifies a comma -separated list of users to include explicitly and by default all users -are included. The `excluded_users` option specifies a comma separated -list of users to exclude explicitly and by default no user is excluded. +The ``roll_cycle`` defines the frequency with which the audit log segments are rolled. +Supported values are ``HOURLY`` (default), ``MINUTELY``, and ``DAILY``. +For example: ``roll_cycle: DAILY`` -.... -# included_users: -# excluded_users: -.... +=== block -=== Setting the Roll Frequency +The ``block`` option specifies whether audit logging should block writing or drop log records if the audit logging falls behind. Supported boolean values are ``true`` (default) or ``false``. +For example: ``block: false`` to drop records -The `roll_cycle` option sets the frequency at which the audit log file -is rolled. Supported values are `MINUTELY`, `HOURLY`, and `DAILY`. -Default value is `HOURLY`, which implies that after every hour a new -audit log file is created. +=== max_queue_weight -.... -roll_cycle: HOURLY -.... +The ``max_queue_weight`` option sets the maximum weight of in-memory queue for records waiting to be written to the file before blocking or dropping. The option must be set to a positive value. The default value is 268435456, or 256 MiB. +For example, to change the default: ``max_queue_weight: 134217728 # 128 MiB`` -An audit log file could get rolled for other reasons as well such as a -log file reaches the configured size threshold. +=== max_log_size -=== Setting Archiving Options +The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The option must be set to a positive value. The default is 17179869184, or 16 GiB. +For example, to change the default: ``max_log_size: 34359738368 # 32 GiB`` -The archiving options are for archiving the rolled audit logs. The -`archive` command to use is set with the `archive_command` option and -the `max_archive_retries` sets the maximum # of tries of failed archive -commands. +=== archive_command -.... -# archive_command: -# max_archive_retries: 10 -.... +The ``archive_command`` option sets the user-defined archive script to execute on rolled log files. +For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the file being rolled`` -Default archive command is `"/path/to/script.sh %path"` where `%path` is -replaced with the file being rolled: +=== max_archive_retries -=== Other Settings +The ``max_archive_retries`` option sets the max number of retries of failed archive commands. The default is 10. +For example: ``max_archive_retries: 10`` -The other audit logs settings are as follows. -.... -# block: true -# max_queue_weight: 268435456 # 256 MiB -# max_log_size: 17179869184 # 16 GiB -.... +An audit log file could get rolled for other reasons as well such as a +log file reaches the configured size threshold. -The `block` option specifies whether the audit logging should block if -the logging falls behind or should drop log records. +Audit logging can also be configured using ``nodetool` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. -The `max_queue_weight` option sets the maximum weight of in memory queue -for records waiting to be written to the file before blocking or -dropping. -The `max_log_size` option sets the maximum size of the rolled files to -retain on disk before deleting the oldest. +== Enabling Audit Logging with ``nodetool`` + +Audit logging is enabled on a per-node basis using the ``nodetool enableauditlog`` command. At a minimum, the path to the logging directory must be defined, if ``audit_log_dir`` is not set in the `cassandra.yaml` file. -== Using Nodetool to Enable Audit Logging +The syntax of the ``nodetool enableauditlog`` command has all the same options that can be set in the ``cassandra.yaml`` file. +In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. The `nodetool enableauditlog` command may be used to enable audit logs and it overrides the settings in `cassandra.yaml`. The From 561dad58387e63f2d53b4fde710992a957598553 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 31 Jul 2020 17:05:03 -0700 Subject: [PATCH 029/115] rewrite audit logging to match fql --- .../cassandra/pages/new/auditlogging.adoc | 489 +++++++++--------- 1 file changed, 250 insertions(+), 239 deletions(-) diff --git a/doc/source/modules/cassandra/pages/new/auditlogging.adoc b/doc/source/modules/cassandra/pages/new/auditlogging.adoc index 68319247433c..cec4aa926631 100644 --- a/doc/source/modules/cassandra/pages/new/auditlogging.adoc +++ b/doc/source/modules/cassandra/pages/new/auditlogging.adoc @@ -1,102 +1,96 @@ = Audit Logging Audit Logging is a new feature in Apache Cassandra 4.0 (https://issues.apache.org/jira/browse/CASSANDRA-12151[CASSANDRA-12151]). -All database activity is logged to a directory in the local filesystem and the audit log files are rolled periodically. +This new feature is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. +All database activity is logged per-node as file-based records to a specified local filesystem directory. +The audit log files are rolled periodically. All database operations are monitored and recorded. Audit logs are stored in local directory files instead of the database itself as it provides several benefits, some of which are: -* No additional database capacity is needed to store audit logs -* No query tool is required while storing the audit logs in the database would require a query tool -* Latency of database operations is not affected; no performance impact -* It is easier to implement file based logging than database based logging - -== What does Audit Logging Log? - -Audit logging logs: - -* All authentication which includes successful and failed login attempts -* All database command requests to CQL. Both failed and successful CQL is logged - -More specifically an audit log entry could be one of two types: - -* CQL Audit Log Entry Type or -* Common Audit Log Entry Type - -Each of these types comprises of several database operations. The CQL -Audit Log Entry Type could be one of the following; the category of the -CQL audit log entry type is listed in parentheses. - -* SELECT(QUERY), -* UPDATE(DML), -* DELETE(DML), -* TRUNCATE(DDL), -* CREATE_KEYSPACE(DDL), -* ALTER_KEYSPACE(DDL), -* DROP_KEYSPACE(DDL), -* CREATE_TABLE(DDL), -* DROP_TABLE(DDL), -* PREPARE_STATEMENT(PREPARE), -* DROP_TRIGGER(DDL), -* LIST_USERS(DCL), -* CREATE_INDEX(DDL), -. DROP_INDEX(DDL), -. GRANT(DCL), -. REVOKE(DCL), -. CREATE_TYPE(DDL), -. DROP_AGGREGATE(DDL), -. ALTER_VIEW(DDL), -. CREATE_VIEW(DDL), -. DROP_ROLE(DCL), -. CREATE_FUNCTION(DDL), -. ALTER_TABLE(DDL), -. BATCH(DML), -. CREATE_AGGREGATE(DDL), -. DROP_VIEW(DDL), -. DROP_TYPE(DDL), -. DROP_FUNCTION(DDL), -. ALTER_ROLE(DCL), -. CREATE_TRIGGER(DDL), -. LIST_ROLES(DCL), -. LIST_PERMISSIONS(DCL), -. ALTER_TYPE(DDL), -. CREATE_ROLE(DCL), -. USE_KEYSPACE (OTHER). - -The Common Audit Log Entry Type could be one of the following; the -category of the Common audit log entry type is listed in parentheses. - -[arabic] -. REQUEST_FAILURE(ERROR), -. LOGIN_ERROR(AUTH), -. UNAUTHORIZED_ATTEMPT(AUTH), -. LOGIN_SUCCESS (AUTH). - -== What Audit Logging does not Log? - -Audit logging does not log: - -[arabic] -. Configuration changes made in `cassandra.yaml` -. Nodetool Commands - -== Audit Logging is Flexible and Configurable - -Audit logging is flexible and configurable in `cassandra.yaml` as -follows: - -* Keyspaces and tables to be monitored and audited may be specified. -* Users to be included/excluded may be specified. By default all users -are audit logged. -* Categories of operations to audit or exclude may be specified. -* The frequency at which to roll the log files may be specified. Default -frequency is hourly. - -== Configuring Audit Logging - -The ``cassandra.yaml`` file can be used to configure and enable audit logging. -Configuration and enablement may be the same or different on each node, depending on the ``cassandra.yaml`` file settings. +* No additional database capacity is needed to store audit logs. +* No query tool is required to store the audit logs. +* Latency of database operations is not affected, so there is no performance impact. +* Heap memory usage is bounded by a weighted queue, with configurable maximum weight sitting in front of logging thread. +* Disk utilization is bounded by a configurable size, deleting old log segments once the limit is reached. +* Can be enabled, disabled, or reset (to delete on-disk data) using the JMX tool, ``nodetool``. +* Can configure the settings in either the `cassandra.yaml` file or by using ``nodetool``. + +Audit logging includes all CQL requests, both successful and failed. +It also captures all successful and failed authentication and authorization events, such as login attempts. +The difference between Full Query Logging (FQL) and audit logging is that FQL captures only successful CQL requests, which allow replay or comparison of logs. +Audit logs are useful for compliance and debugging, while FQL is useful for debugging, performance benchmarking, testing and auditing CQL queries. + +== Audit information logged + +The audit log contains: + +* all events in the configured keyspaces to include +* all events in the configured categories to include +* all events executed by the configured users to include + +The audit log does not contain: + +* configuration changes made in `cassandra.yaml` file +* `nodetool` commands + +The audit log is a series of log entries. +An audit log entry contains: + +* keyspace (String) - Keyspace on which request is made +* operation (String) - Database operation such as CQL command +* user (String) - User name +* scope (String) - Scope of request such as Table/Function/Aggregate name +* type (AuditLogEntryType) - Type of request +** CQL Audit Log Entry Type +** Common Audit Log Entry Type +* source (InetAddressAndPort) - Source IP Address from which request originated +* timestamp (long ) - Timestamp of the request +* batch (UUID) - Batch of request +* options (QueryOptions) - CQL Query options +* state (QueryState) - State related to a given query + +Each entry contains all applicable attributes for the given event, concatenated with a pipe (|). + +CQL audit log entry types are the following CQL commands. Each command is assigned to a particular specified category to log: + +[width="100%",cols="20%,80%",options="header",] +|=== +| Category | CQL commands + +| DDL | ALTER_KEYSPACE, CREATE_KEYSPACE, DROP_KEYSPACE, +ALTER_TABLE, CREATE_TABLE, DROP_TABLE, +CREATE_FUNCTION, DROP_FUNCTION, +CREATE_AGGREGATE, DROP_AGGREGATE, +CREATE_INDEX, DROP_INDEX, +ALTER_TYPE, CREATE_TYPE, DROP_TYPE, +CREATE_TRIGGER, DROP_TRIGGER, +ALTER_VIEW, CREATE_VIEW, DROP_VIEW, +TRUNCATE +| DML | BATCH, DELETE, UPDATE +| DCL | GRANT, REVOKE, +ALTER_ROLE, CREATE_ROLE, DROP_ROLE, +LIST_ROLES, LIST_PERMISSIONS, LIST_USERS +| OTHER | USE_KEYSPACE +| QUERY | SELECT +| PREPARE | PREPARE_STATEMENT +|=== + +Common audit log entry types are one of the following: + +[width="100%",cols="50%,50%",options="header",] +|=== +| Category | CQL commands + +| AUTH | LOGIN_SUCCESS, LOGIN_ERROR, UNAUTHORIZED_ATTEMPT +| ERROR | REQUEST_FAILURE +|=== + +== Configuring audit logging in cassandra.yaml + +The `cassandra.yaml` file can be used to configure and enable audit logging. +Configuration and enablement may be the same or different on each node, depending on the `cassandra.yaml` file settings. Audit logs are generated on each enabled node, so logs on each node will have that node's queries. -All options for audit logging can be set in the ``cassandra.yaml`` file under the `audit_logging_options:`. +All options for audit logging can be set in the `cassandra.yaml` file under the ``audit_logging_options:``. The file includes the following options that can be uncommented for use: @@ -241,110 +235,111 @@ Audit logging is enabled on a per-node basis using the ``nodetool enableauditlog The syntax of the ``nodetool enableauditlog`` command has all the same options that can be set in the ``cassandra.yaml`` file. In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. -The `nodetool enableauditlog` command may be used to enable audit logs -and it overrides the settings in `cassandra.yaml`. The -`nodetool enableauditlog` command syntax is as follows. - -.... -nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enableauditlog - [--excluded-categories ] - [--excluded-keyspaces ] - [--excluded-users ] - [--included-categories ] - [--included-keyspaces ] - [--included-users ] [--logger ] -.... - -OPTIONS:: - --excluded-categories ;; - Comma separated list of Audit Log Categories to be excluded for - audit log. If not set the value from cassandra.yaml will be used - --excluded-keyspaces ;; - Comma separated list of keyspaces to be excluded for audit log. If - not set the value from cassandra.yaml will be used - --excluded-users ;; - Comma separated list of users to be excluded for audit log. If not - set the value from cassandra.yaml will be used - -h , --host ;; - Node hostname or ip address - --included-categories ;; - Comma separated list of Audit Log Categories to be included for - audit log. If not set the value from cassandra.yaml will be used - --included-keyspaces ;; - Comma separated list of keyspaces to be included for audit log. If - not set the value from cassandra.yaml will be used - --included-users ;; - Comma separated list of users to be included for audit log. If not - set the value from cassandra.yaml will be used - --logger ;; - Logger name to be used for AuditLogging. Default BinAuditLogger. If - not set the value from cassandra.yaml will be used - -p , --port ;; - Remote jmx agent port number - -pp, --print-port;; - Operate in 4.0 mode with hosts disambiguated by port number - -pw , --password ;; - Remote jmx agent password - -pwf , --password-file ;; - Path to the JMX password file - -u , --username ;; - Remote jmx agent username - -The `nodetool disableauditlog` command disables audit log. The command -syntax is as follows. - -.... -nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] disableauditlog -.... - -OPTIONS:: - -h , --host ;; - Node hostname or ip address - -p , --port ;; - Remote jmx agent port number - -pp, --print-port;; - Operate in 4.0 mode with hosts disambiguated by port number - -pw , --password ;; - Remote jmx agent password - -pwf , --password-file ;; - Path to the JMX password file - -u , --username ;; - Remote jmx agent username - -== Viewing the Audit Logs - -An audit log event comprises of a keyspace that is being audited, the -operation that is being logged, the scope and the user. An audit log -entry comprises of the following attributes concatenated with a "|". - -.... -type (AuditLogEntryType): Type of request -source (InetAddressAndPort): Source IP Address from which request originated -user (String): User name -timestamp (long ): Timestamp of the request -batch (UUID): Batch of request -keyspace (String): Keyspace on which request is made -scope (String): Scope of request such as Table/Function/Aggregate name -operation (String): Database operation such as CQL command -options (QueryOptions): CQL Query options -state (QueryState): State related to a given query -.... - -Some of these attributes may not be applicable to a given request and -not all of these options must be set. - -== An Audit Logging Demo - -To demonstrate audit logging enable and configure audit logs with -following settings. - -.... +[source, plaintext] +---- + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableauditlog + [--excluded-categories ] + [--excluded-keyspaces ] + [--excluded-users ] + [--included-categories ] + [--included-keyspaces ] + [--included-users ] [--logger ] + +OPTIONS + --excluded-categories + Comma separated list of Audit Log Categories to be excluded for + audit log. If not set the value from cassandra.yaml will be used + + --excluded-keyspaces + Comma separated list of keyspaces to be excluded for audit log. If + not set the value from cassandra.yaml will be used + + --excluded-users + Comma separated list of users to be excluded for audit log. If not + set the value from cassandra.yaml will be used + + -h , --host + Node hostname or ip address + + --included-categories + Comma separated list of Audit Log Categories to be included for + audit log. If not set the value from cassandra.yaml will be used + + --included-keyspaces + Comma separated list of keyspaces to be included for audit log. If + not set the value from cassandra.yaml will be used + + --included-users + Comma separated list of users to be included for audit log. If not + set the value from cassandra.yaml will be used + + --logger + Logger name to be used for AuditLogging. Default BinAuditLogger. If + not set the value from cassandra.yaml will be used + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username +---- + +To enable audit logging, run following command on each node in the cluster on which you want to enable logging: + +[source, bash] +---- +$ nodetool enableauditlog +---- + +== Disabling audit logging + +Use the `nodetool disableauditlog` command to disable audit logging. + +== Viewing audit logs + +The `auditlogviewer` tool is used to view (dump) audit logs. +``auditlogviewer`` converts the binary log files into human-readable format; only the audit log directory must be supplied as a command-line option. + + +The syntax of `auditlogviewer` is: + +[source, plaintext] +---- +auditlogviewer + +Audit log files directory path is a required argument. +usage: auditlogviewer [...] [options] +-- +View the audit log contents in human readable format +-- +Options are: +-f,--follow Upon reaching the end of the log continue indefinitely + waiting for more records +-h,--help display this help message +-r,--roll_cycle How often to roll the log file was rolled. May be + necessary for Chronicle to correctly parse file names. (MINUTELY, HOURLY, + DAILY). Default HOURLY. +---- + +== Example + +[arabic, start=1] +. To demonstrate audit logging, first configure the ``cassandra.yaml`` file with the following settings: + +[source, yaml] +---- audit_logging_options: enabled: true logger: BinAuditLogger @@ -362,35 +357,71 @@ audit_logging_options: ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: # archive_command: # max_archive_retries: 10 -.... +---- -Create the audit log directory `/cassandra/audit/logs/hourly` and set -its permissions as discussed earlier. Run some CQL commands such as -create a keyspace, create a table and query a table. Any supported CQL -commands may be run as discussed in section *What does Audit Logging -Log?*. Change directory (with `cd` command) to the audit logs directory. +[arabic, start=2] +. Create the audit log directory `/cassandra/audit/logs/hourly` and set the directory permissions to read, write, and execute for all. -.... -cd /cassandra/audit/logs/hourly -.... +[arabic, start=3] +. Now create a demo keyspace and table and insert some data using ``cqlsh``: -List the files/directories and some `.cq4` files should get listed. -These are the audit logs files. +[source, cql] +---- + cqlsh> CREATE KEYSPACE auditlogkeyspace + ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + cqlsh> USE auditlogkeyspace; + cqlsh:auditlogkeyspace> CREATE TABLE t ( + ...id int, + ...k int, + ...v text, + ...PRIMARY KEY (id) + ... ); + cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); +---- -.... -[ec2-user@ip-10-0-2-238 hourly]$ ls -l +All the supported CQL commands will be logged to the audit log directory. + +[arabic, start=4] +. Change directory to the audit logs directory. + +[source, bash] +---- +$ cd /cassandra/audit/logs/hourly +---- + +[arabic, start=5] +. List the audit log files and directories. + +[source, bash] +---- +$ ls -l +---- + +You should see results similar to: + +[source, plaintext] +---- total 28 +-rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 03:01 directory-listing.cq4t -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-02.cq4 -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-03.cq4 --rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 03:01 directory-listing.cq4t -.... +---- -The `auditlogviewer` tool is used to dump audit logs. Run the -`auditlogviewer` tool. Audit log files directory path is a required -argument. The output should be similar to the following output. +The audit log files will all be listed with a `.cq4` file type. The audit directory is of `.cq4t` type. + +[arabic, start=6] +. Run `auditlogviewer` tool to view the audit logs. + +[source, bash] +---- +$ auditlogviewer /cassandra/audit/logs/hourly +---- -.... -[ec2-user@ip-10-0-2-238 hourly]$ auditlogviewer /cassandra/audit/logs/hourly +This command will return a readable version of the log. Here is a partial sample of the log for the commands in this demo: + +[source, plaintext] +---- WARN 03:12:11,124 Using Pauser.sleepy() as not enough processors, have 2, needs 8+ Type: AuditLog LogMessage: @@ -423,29 +454,9 @@ Type: AuditLog LogMessage: user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714870678|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE auditlogkeyspace; [ec2-user@ip-10-0-2-238 hourly]$ -.... - -The `auditlogviewer` tool usage syntax is as follows. - -.... -./auditlogviewer -Audit log files directory path is a required argument. -usage: auditlogviewer [...] [options] --- -View the audit log contents in human readable format --- -Options are: --f,--follow Upon reaching the end of the log continue indefinitely - waiting for more records --h,--help display this help message --r,--roll_cycle How often to roll the log file was rolled. May be - necessary for Chronicle to correctly parse file names. (MINUTELY, HOURLY, - DAILY). Default HOURLY. -.... +---- == Diagnostic events for user audit logging -Any native transport enabled client is able to subscribe to diagnostic -events that are raised around authentication and CQL operations. These -events can then be consumed and used by external tools to implement a -Cassandra user auditing solution. +Any native transport-enabled client can subscribe to audit log events for diagnosing cluster issues. +These events can be consumed by external tools to implement a Cassandra user auditing solution. From e7829ab023b6e4fdde9a3a659d23573b794112dc Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 31 Jul 2020 17:26:32 -0700 Subject: [PATCH 030/115] more rewrites of New features --- .../cassandra/pages/new/auditlogging.adoc | 5 +- .../cassandra/pages/new/virtualtables.adoc | 58 +++++++------------ 2 files changed, 23 insertions(+), 40 deletions(-) diff --git a/doc/source/modules/cassandra/pages/new/auditlogging.adoc b/doc/source/modules/cassandra/pages/new/auditlogging.adoc index cec4aa926631..46ebbbfc2871 100644 --- a/doc/source/modules/cassandra/pages/new/auditlogging.adoc +++ b/doc/source/modules/cassandra/pages/new/auditlogging.adoc @@ -3,9 +3,8 @@ Audit Logging is a new feature in Apache Cassandra 4.0 (https://issues.apache.org/jira/browse/CASSANDRA-12151[CASSANDRA-12151]). This new feature is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. All database activity is logged per-node as file-based records to a specified local filesystem directory. -The audit log files are rolled periodically. -All database operations are monitored and recorded. -Audit logs are stored in local directory files instead of the database itself as it provides several benefits, some of which are: +The audit log files are rolled periodically based on a configurable value. +Some of the features of audit logging are: * No additional database capacity is needed to store audit logs. * No query tool is required to store the audit logs. diff --git a/doc/source/modules/cassandra/pages/new/virtualtables.adoc b/doc/source/modules/cassandra/pages/new/virtualtables.adoc index b83fd8c70046..a18df678a192 100644 --- a/doc/source/modules/cassandra/pages/new/virtualtables.adoc +++ b/doc/source/modules/cassandra/pages/new/virtualtables.adoc @@ -1,42 +1,26 @@ = Virtual Tables -Apache Cassandra 4.0 implements virtual tables -(https://issues.apache.org/jira/browse/CASSANDRA-7622[CASSANDRA-7622]). - -== Definition - -A virtual table is a table that is backed by an API instead of data -explicitly managed and stored as SSTables. Apache Cassandra 4.0 -implements a virtual keyspace interface for virtual tables. Virtual -tables are specific to each node. - -== Objective - -A virtual table could have several uses including: - -* Expose metrics through CQL -* Expose YAML configuration information - -== How are Virtual Tables different from regular tables? - -Virtual tables and virtual keyspaces are quite different from regular -tables and keyspaces respectively such as: - -* Virtual tables are read-only, but it is likely to change -* Virtual tables are not replicated -* Virtual tables are local only and non distributed -* Virtual tables have no associated SSTables -* Consistency level of the queries sent virtual tables are ignored -* Virtual tables are managed by Cassandra and a user cannot run DDL to -create new virtual tables or DML to modify existing virtual tables -* Virtual tables are created in special keyspaces and not just any -keyspace -* All existing virtual tables use `LocalPartitioner`. Since a virtual -table is not replicated the partitioner sorts in order of partition keys -instead of by their hash. -* Making advanced queries with `ALLOW FILTERING` and aggregation -functions may be used with virtual tables even though in normal tables -we dont recommend it +Apache Cassandra 4.0 implements virtual tables (https://issues.apache.org/jira/browse/CASSANDRA-7622[CASSANDRA-7622]). +Virtual tables are tables backed by an API instead of data explicitly managed and stored as SSTables. +Apache Cassandra 4.0 implements a virtual keyspace interface for virtual tables. +Virtual tables are specific to each node. + +Some of the features of virtual tables are the ability to: + +* expose metrics through CQL +* expose YAML configuration information + +Virtual keyspaces and tables are quite different from regular tables and keyspaces: + +* Virtual tables are created in special keyspaces and not just any keyspace. +* Virtual tables are managed by Cassandra. Users cannot run DDL to create new virtual tables or DML to modify existing virtual tables. +* Virtual tables are currently read-only, although that may change in a later version. +* Virtual tables are local only, non-distributed, and thus not replicated. +* Virtual tables have no associated SSTables. +* Consistency level of the queries sent to virtual tables are ignored. +* All existing virtual tables use `LocalPartitioner`. +Since a virtual table is not replicated the partitioner sorts in order of partition keys instead of by their hash. +* Making advanced queries using `ALLOW FILTERING` and aggregation functions can be executed in virtual tables, even though in normal tables we dont recommend it. == Virtual Keyspaces From 4bfc5dd21f679d2311286448965248c8059366b6 Mon Sep 17 00:00:00 2001 From: polandll Date: Mon, 3 Aug 2020 10:56:31 -0700 Subject: [PATCH 031/115] fix a couple of errors --- .../cassandra/pages/new/auditlogging.adoc | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/doc/source/modules/cassandra/pages/new/auditlogging.adoc b/doc/source/modules/cassandra/pages/new/auditlogging.adoc index 46ebbbfc2871..e81776a097a2 100644 --- a/doc/source/modules/cassandra/pages/new/auditlogging.adoc +++ b/doc/source/modules/cassandra/pages/new/auditlogging.adoc @@ -4,6 +4,7 @@ Audit Logging is a new feature in Apache Cassandra 4.0 (https://issues.apache.or This new feature is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. All database activity is logged per-node as file-based records to a specified local filesystem directory. The audit log files are rolled periodically based on a configurable value. + Some of the features of audit logging are: * No additional database capacity is needed to store audit logs. @@ -120,14 +121,16 @@ audit_logging_options: === enabled Audit logging is enabled by setting the `enabled` option to `true` in -the `audit_logging_options` setting. For example, ``enabled: true``. +the `audit_logging_options` setting. +If this option is enabled, audit logging will start when Cassandra is started. +For example, ``enabled: true``. === logger The type of audit logger is set with the `logger` option. Supported values are: `BinAuditLogger` (default), `FileAuditLogger` and `NoOpAuditLogger`. `BinAuditLogger` logs events to a file in binary format. -`FileAuditLogger` uses the standard logging mechanism, `slf4j` to log events to the `audit/audit.log` file. It is a synchronous, file-based audit logger. +`FileAuditLogger` uses the standard logging mechanism, `slf4j` to log events to the `audit/audit.log` file. It is a synchronous, file-based audit logger. The roll_cycle will be set in the `logback.xml` file. `NoOpAuditLogger` is a no-op implementation of the audit logger that shoudl be specified when audit logging is disabled. For example: @@ -138,15 +141,14 @@ logger: - class_name: FileAuditLogger ---- - === audit_logs_dir -To write audit logs, an existing directory must be set in ``audit_log_dir``. +To write audit logs, an existing directory must be set in ``audit_logs_dir``. The directory must have appropriate permissions set to allow reading, writing, and executing. Logging will recursively delete the directory contents as needed. Do not place links in this directory to other sections of the filesystem. -For example, ``audit_log_dir: /cassandra/audit/logs/hourly``. +For example, ``audit_logs_dir: /cassandra/audit/logs/hourly``. The audit log directory can also be configured using the system property `cassandra.logdir.audit`, which by default is set to `cassandra.logdir + /audit/`. @@ -229,9 +231,9 @@ Audit logging can also be configured using ``nodetool` when enabling the feature == Enabling Audit Logging with ``nodetool`` -Audit logging is enabled on a per-node basis using the ``nodetool enableauditlog`` command. At a minimum, the path to the logging directory must be defined, if ``audit_log_dir`` is not set in the `cassandra.yaml` file. +Audit logging is enabled on a per-node basis using the ``nodetool enableauditlog`` command. The logging directory must be defined with ``audit_logs_dir`` in the `cassandra.yaml` file or uses the default value ``cassandra.logdir.audit``. -The syntax of the ``nodetool enableauditlog`` command has all the same options that can be set in the ``cassandra.yaml`` file. +The syntax of the ``nodetool enableauditlog`` command has all the same options that can be set in the ``cassandra.yaml`` file except ``audit_logs_dir``. In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. [source, plaintext] @@ -308,8 +310,9 @@ Use the `nodetool disableauditlog` command to disable audit logging. == Viewing audit logs -The `auditlogviewer` tool is used to view (dump) audit logs. +The `auditlogviewer` tool is used to view (dump) audit logs if the logger was ``BinAuditLogger``.. ``auditlogviewer`` converts the binary log files into human-readable format; only the audit log directory must be supplied as a command-line option. +If the logger ``FileAuditLogger`` was set, the log file are already in human-readable format and ``auditlogviewer`` is not needed to read files. The syntax of `auditlogviewer` is: From 0c1b99944546f546105e122bbe5088f568db22a1 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 4 Aug 2020 16:14:22 -0700 Subject: [PATCH 032/115] more virt table rewrite --- .../cassandra/pages/new/virtualtables.adoc | 214 ++++++++++++------ 1 file changed, 141 insertions(+), 73 deletions(-) diff --git a/doc/source/modules/cassandra/pages/new/virtualtables.adoc b/doc/source/modules/cassandra/pages/new/virtualtables.adoc index a18df678a192..b18ba3131674 100644 --- a/doc/source/modules/cassandra/pages/new/virtualtables.adoc +++ b/doc/source/modules/cassandra/pages/new/virtualtables.adoc @@ -25,98 +25,80 @@ Since a virtual table is not replicated the partitioner sorts in order of partit == Virtual Keyspaces Apache Cassandra 4.0 has added two new keyspaces for virtual tables: -`system_virtual_schema` and `system_views`. Run the following command to -list the keyspaces: -.... -cqlsh> DESC KEYSPACES; -system_schema system system_distributed system_virtual_schema -system_auth system_traces system_views -.... +* `system_virtual_schema` +* `system_views`. -The `system_virtual_schema keyspace` contains schema information on -virtual tables. The `system_views` keyspace contains the actual virtual -tables. +The `system_virtual_schema` keyspace has three tables: `keyspaces`, +`columns` and `tables` for the virtual keyspace, table, and column definitions, respectively. +These tables contain schema information for the virtual tables. +It is used by Cassandra internally and a user should not access it directly. + +The `system_views` keyspace contains the actual virtual tables. == Virtual Table Limitations -Virtual tables and virtual keyspaces have some limitations initially -though some of these could change such as: - -* Cannot alter or drop virtual keyspaces or tables -* Cannot truncate virtual tables -* Expiring columns are not supported by virtual tables -* Conditional updates are not supported by virtual tables -* Cannot create tables in virtual keyspaces -* Cannot perform any operations against virtual keyspace -* Secondary indexes are not supported on virtual tables -* Cannot create functions in virtual keyspaces -* Cannot create types in virtual keyspaces -* Materialized views are not supported on virtual tables -* Virtual tables don't support `DELETE` statements -* Cannot `CREATE TRIGGER` against a virtual table -* Conditional `BATCH` statements cannot include mutations for virtual -tables -* Cannot include a virtual table statement in a logged batch -* Mutations for virtual and regular tables cannot exist in the same -batch -* Conditional `BATCH` statements cannot include mutations for virtual -tables -* Cannot create aggregates in virtual keyspaces; but may run aggregate -functions on select - -== Listing and Describing Virtual Tables - -Virtual tables in a virtual keyspace may be listed with `DESC TABLES`. -The `system_views` virtual keyspace tables include the following: +Before disccusing virtual keyspaces and tables, note that virtual keyspaces and tables have some limitations. +These limitations are subject to change. +Virtual keyspaces cannot be altered or dropped. +In fact, no operations can be performed against virtual keyspaces. -.... -cqlsh> USE system_views; -cqlsh:system_views> DESC TABLES; -coordinator_scans clients tombstones_scanned internode_inbound -disk_usage sstable_tasks live_scanned caches -local_writes max_partition_size local_reads -coordinator_writes internode_outbound thread_pools -local_scans coordinator_reads settings -.... +Virtual tables cannot be created in virtual keyspaces. +Virtual tables cannot be altered, dropped, or truncated. +Secondary indexes, types, functions, aggregates, materialized views, and triggers cannot be created for virtual tables. +Expiring time-to-live (TTL) columns cannot be created. +Virtual tables do not support conditional updates or deletes. +Aggregates may be run in SELECT statements. -Some of the salient virtual tables in `system_views` virtual keyspace -are described in Table 1. +Conditional batch statements cannot include mutations for virtual tables, nor can a virtual table statement be included in a logged batch. +In fact, mutations for virtual and regular tables cannot occur in the same batch table. -Table 1 : Virtual Tables in system_views +== Virtual Tables + +Each of the virtual tables in the `system_views` virtual keyspace contain different information. + +The following table describes the virtual tables: [width="98%",cols="27%,73%",] |=== |Virtual Table |Description +|caches |Displays the general cache information including cache name, capacity_bytes, entry_count, hit_count, hit_ratio double, +recent_hit_rate_per_second, recent_request_rate_per_second, request_count, and size_bytes. + |clients |Lists information about all connected clients. -|disk_usage |Disk usage including disk_space, keyspace_name, and -table_name by system keyspaces. +|coordinator_read_latency |Records counts, keyspace_name, table_name, max, median, and per_second for coordinator reads. -|local_writes |A table metric for local writes including count, -keyspace_name, max, median, per_second, and table_name. +|coordinator_scan |Records counts, keyspace_name, table_name, max, median, and per_second for coordinator scans. -|caches |Displays the general cache information including cache name, -capacity_bytes, entry_count, hit_count, hit_ratio double, -recent_hit_rate_per_second, recent_request_rate_per_second, -request_count, and size_bytes. +|coordinator_write_latency |Records counts, keyspace_name, table_name, max, median, and per_second for coordinator writes. -|local_reads |A table metric for local reads information. +|disk_usage |Records disk usage including disk_space, keyspace_name, and table_name, sorted by system keyspaces. -|sstable_tasks |Lists currently running tasks such as compactions and -upgrades on SSTables. +|internode_inbound |Lists information about the inbound internode messaging. -|internode_inbound |Lists information about the inbound internode -messaging. +|internode_outbound |Information about the outbound internode messaging. -|thread_pools |Lists metrics for each thread pool. +|local_read_latency |Records counts, keyspace_name, table_name, max, median, and per_second for local reads. -|settings |Displays configuration settings in cassandra.yaml. +|local_scan |Records counts, keyspace_name, table_name, max, median, and per_second for local scans. + +|local_write_latency |Records counts, keyspace_name, table_name, max, median, and per_second for local writes. |max_partition_size |A table metric for maximum partition size. -|internode_outbound |Information about the outbound internode messaging. +|rows_per_read |Records counts, keyspace_name, tablek_name, max, and median for rows read. + +|settings |Displays configuration settings in cassandra.yaml. + +|sstable_tasks |Lists currently running tasks and progress on SSTables, for operations like compaction and upgrade. + +|system_properties |Displays environmental system properties set on the node. + +|thread_pools |Lists metrics for each thread pool. + +|tombstones_per_read |Records counts, keyspace_name, tablek_name, max, and median for tombstones. |=== We shall discuss some of the virtual tables in more detail next. @@ -333,10 +315,96 @@ keyspace_name | table_name | p50th_ms | p99th_ms | count | max_ms | per_seco tlp_stress | keyvalue | 0.043 | 0.152 | 49785158 | 186.563 | 11418.356 .... -== The system_virtual_schema keyspace -The `system_virtual_schema` keyspace has three tables: `keyspaces`, -`columns` and `tables` for the virtual keyspace definitions, virtual -table definitions, and virtual column definitions respectively. It is -used by Cassandra internally and a user would not need to access it -directly. +== Example + +[arabic, start=1] +. To list the keyspaces, enter ``cqlsh`` and run the CQL command ``DESCRIBE KEYSPACES``: + +[source, cql] +---- +cqlsh> DESC KEYSPACES; +system_schema system system_distributed system_virtual_schema +system_auth system_traces system_views +---- + +[arabic, start=2] +. To view the virtual table schema, run the CQL commands ``USE system_virtual_schema`` and ``SELECT * FROM tables``: + +[source, cql] +---- +cqlsh> USE system_virtual_schema; +cqlsh> SELECT * FROM tables; +---- + +results in: + +[source, cql] +---- + keyspace_name | table_name | comment +-----------------------+---------------------------+-------------------------------------- + system_views | caches | system caches + system_views | clients | currently connected clients + system_views | coordinator_read_latency | + system_views | coordinator_scan_latency | + system_views | coordinator_write_latency | + system_views | disk_usage | + system_views | internode_inbound | + system_views | internode_outbound | + system_views | local_read_latency | + system_views | local_scan_latency | + system_views | local_write_latency | + system_views | max_partition_size | + system_views | rows_per_read | + system_views | settings | current settings + system_views | sstable_tasks | current sstable tasks + system_views | system_properties | Cassandra relevant system properties + system_views | thread_pools | + system_views | tombstones_per_read | + system_virtual_schema | columns | virtual column definitions + system_virtual_schema | keyspaces | virtual keyspace definitions + system_virtual_schema | tables | virtual table definitions + +(21 rows) +---- + +[arabic, start=3] +. To view the virtual tables, run the CQL commands ``USE system_view`` and ``DESCRIBE tables``: + +[source, cql] +---- +cqlsh> USE system_view;; +cqlsh> DESCRIBE tables; +---- + +results in: + +[source, cql] +---- +sstable_tasks clients coordinator_write_latency +disk_usage local_write_latency tombstones_per_read +thread_pools internode_outbound settings +local_scan_latency coordinator_scan_latency system_properties +internode_inbound coordinator_read_latency max_partition_size +local_read_latency rows_per_read caches +---- + +[arabic, start=4] +. To look at any table data, run the CQL command ``SELECT``: + +[source, cql] +---- +cqlsh> USE system_view;; +cqlsh> SELECT * FROM clients LIMIT 2; +---- + results in: + +[source, cql] +---- + address | port | connection_stage | driver_name | driver_version | hostname | protocol_version | request_count | ssl_cipher_suite | ssl_enabled | ssl_protocol | username +-----------+-------+------------------+------------------------+----------------+-----------+------------------+---------------+------------------+-------------+--------------+----------- + 127.0.0.1 | 37308 | ready | DataStax Python Driver | 3.21.0.post0 | localhost | 4 | 17 | null | False | null | anonymous + 127.0.0.1 | 37310 | ready | DataStax Python Driver | 3.21.0.post0 | localhost | 4 | 8 | null | False | null | anonymous + +(2 rows) +---- From 415ab2aa4a8feaf8597c2151525aa148f636bdb3 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 4 Aug 2020 17:18:12 -0700 Subject: [PATCH 033/115] some config changes --- doc/Dockerfile | 6 +++++- doc/site.yml | 34 +++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index 4b7e16d72033..866e881779df 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -11,7 +11,7 @@ WORKDIR /usr/src/code # install antora # install any antora extensions -# FROM ANTORA DOCKER (https://gitlab.com/antora/docker-antora.git) +# FROM ANTORA DOCKER Dockerfile (https://gitlab.com/antora/docker-antora.git) FROM node:10-alpine @@ -38,14 +38,18 @@ ENTRYPOINT ["docker-entrypoint.sh"] CMD ["antora"] #-----------------OLD STUFF--------- +# llp sync apt package index files RUN apt-get update +# llp 08.04.20 This grabs a pre-built OpenJDK 11 and installs RUN wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add - \ && add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ \ && apt-get update \ && apt-get install -y adoptopenjdk-11-hotspot ant +# llp clear out local repo of retrieved package files RUN apt-get clean +# run sphinx and build the docs with jdk11 CMD CASSANDRA_USE_JDK11=true ant gen-doc \ && echo "The locally built documentation can be found here:\n\n build/html/index.html\n\n" diff --git a/doc/site.yml b/doc/site.yml index 62d4ef30bd25..f9b05a559602 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -4,11 +4,14 @@ site: # UNCOMMENT WHEN READY #keys: # google_analytics: 'UA-11583863-1' + #start_page: ROOT::index.adoc content: sources: - - url: /Users/lorina.poland/CLONES/cassandra - branches: [doc_redo_asciidoc,doc_redo_asciidoc3.11] + - url: https://github.com/polandll/cassandra.git + branches: + - 'doc_redo_asciidoc' + - 'doc_redo_asciidoc3.11' start_path: doc/source ui: @@ -23,19 +26,15 @@ ui: - path: .nojekyll output: + clean: false dir: ./build/html asciidoc: attributes: - experimental: '' - example-caption: ~ - hide-uri-scheme: '' idprefix: '' idseparator: '-' - linkattrs: '' + experimental: '' source-language: asciidoc - table-caption: ~ - tabs: tabs current-version: 4.0 latest-version: 4.0 previous-version: 3.11 @@ -44,6 +43,11 @@ asciidoc: 30_version: '3.0' 22_version: '2.2' 21_version: '2.1' + example-caption: ~ + hide-uri-scheme: '' + linkattrs: '' + table-caption: ~ + tabs: tabs url-project: https://asciidoctor.org url-org: https://github.com/asciidoctor url-exten-lab: https://github.com/asciidoctor/asciidoctor-extensions-lab @@ -51,12 +55,12 @@ asciidoc: url-tilt: https://github.com/rtomayko/tilt url-foundation: https://foundation.zurb.com url-jruby: https://jruby.org - url-asciimath: https://docs.mathjax.org/en/latest/asciimath.html - url-latexmath: https://docs.mathjax.org/en/latest/tex.html - url-mathjax: https://www.mathjax.org - url-mathjax-docs: https://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference - url-coderay: http://coderay.rubychan.de/ - url-coderay-gem: https://rubygems.org/gems/coderay + #url-asciimath: https://docs.mathjax.org/en/latest/asciimath.html + #url-latexmath: https://docs.mathjax.org/en/latest/tex.html + #url-mathjax: https://www.mathjax.org + #url-mathjax-docs: https://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference + #url-coderay: http://coderay.rubychan.de/ + #url-coderay-gem: https://rubygems.org/gems/coderay url-highlightjs: https://highlightjs.org/ url-highlightjs-lang: https://highlightjs.org/download/ url-prettify: https://code.google.com/p/google-code-prettify @@ -64,6 +68,6 @@ asciidoc: url-pygments-lang: http://pygments.org/languages/ url-pygments-gem: https://rubygems.org/gems/pygments.rb url-python: https://www.python.org - url-rouge: http://rouge.jneen.net + #url-rouge: http://rouge.jneen.net extensions: - ./lib/tabs-block.js From 7f9cc7297d5f1a3988abaa2faecf88e57145129e Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 4 Aug 2020 18:06:36 -0700 Subject: [PATCH 034/115] testing --- doc/Dockerfile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index 866e881779df..c10bc3eb2a9e 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -35,21 +35,21 @@ COPY docker-entrypoint.sh /usr/local/bin/ ENTRYPOINT ["docker-entrypoint.sh"] -CMD ["antora"] +CMD ["DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest antora site.yml"] #-----------------OLD STUFF--------- # llp sync apt package index files -RUN apt-get update +#RUN apt-get update # llp 08.04.20 This grabs a pre-built OpenJDK 11 and installs -RUN wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add - \ - && add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ \ - && apt-get update \ - && apt-get install -y adoptopenjdk-11-hotspot ant +#RUN wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add - \ +# && add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ \ +# && apt-get update \ +# && apt-get install -y adoptopenjdk-11-hotspot ant # llp clear out local repo of retrieved package files -RUN apt-get clean +#RUN apt-get clean # run sphinx and build the docs with jdk11 -CMD CASSANDRA_USE_JDK11=true ant gen-doc \ - && echo "The locally built documentation can be found here:\n\n build/html/index.html\n\n" +#CMD CASSANDRA_USE_JDK11=true ant gen-doc \ +# && echo "The locally built documentation can be found here:\n\n build/html/index.html\n\n" From c6bfc0ba369a31648252a96c692443d52827fb2e Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 5 Aug 2020 12:21:03 -0700 Subject: [PATCH 035/115] partial fix for docker files --- doc/Dockerfile | 106 +++++++++++++++++++-------------------- doc/Makefile | 21 -------- doc/docker-entrypoint.sh | 24 +++++++-- doc/newDockerfile | 11 ++++ 4 files changed, 83 insertions(+), 79 deletions(-) create mode 100644 doc/newDockerfile diff --git a/doc/Dockerfile b/doc/Dockerfile index c10bc3eb2a9e..01b5664b6f1d 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -1,55 +1,55 @@ -# Dockerfile for building the Cassandra documentation. -# If wanting to regenerate the documentation from scratch, -# run `ant realclean` from the root directory of this project. - -FROM python:2.7 - -WORKDIR /usr/src/code - -# LLP 07.28.2020 CHANGE THIS TO ANTORA -# install nodejs and nvm -# install antora -# install any antora extensions - -# FROM ANTORA DOCKER Dockerfile (https://gitlab.com/antora/docker-antora.git) - -FROM node:10-alpine - -ENV NODE_PATH /usr/local/share/.config/yarn/global/node_modules - -RUN apk --no-cache add curl findutils jq \ - && yarn global add --ignore-optional --silent @antora/cli@latest @antora/site-generator-default@latest \ - && rm -rf $(yarn cache dir)/* \ - && find $(yarn global dir)/node_modules/asciidoctor.js/dist/* -maxdepth 0 -not -name node -exec rm -rf {} \; \ - && find $(yarn global dir)/node_modules/handlebars/dist/* -maxdepth 0 -not -name cjs -exec rm -rf {} \; \ - && find $(yarn global dir)/node_modules/handlebars/lib/* -maxdepth 0 -not -name index.js -exec rm -rf {} \; \ - && find $(yarn global dir)/node_modules/isomorphic-git/dist/* -maxdepth 0 -not -name for-node -exec rm -rf {} \; \ - && rm -rf $(yarn global dir)/node_modules/moment/min \ - && rm -rf $(yarn global dir)/node_modules/moment/src \ - && rm -rf $(yarn global dir)/node_modules/source-map/dist \ - && rm -rf /tmp/* - -WORKDIR /antora - +FROM ubuntu:18.04 + +# Set up non-root user, 'build', with default uid:gid +# This allows passing --build-arg to use local host user's uid:gid: +# $ docker-compose build \ +# --build-arg UID=$(id -u) \ +# --build-arg GID=$(id -g) \ +# cassandra-website +ARG UID=1000 +ARG GID=1000 +RUN echo "Setting up user 'build' with UID=${UID} GID=${GID}" +RUN groupadd --gid $GID --non-unique build +RUN useradd --create-home --shell /bin/bash \ + --uid $UID --gid $GID --non-unique build + +# INSTALL wget, python3, java11, and other tools required to build the docs +RUN apt-get update && \ + apt-get install -y \ + wget \ + python3 \ + openjdk-11-jdk \ + git \ + make \ + ant \ + ant-optional + +# INSTALL nodejs and nvm +ARG NODE_PACKAGE="node-v12.16.2-linux-x64.tar.gz" +RUN wget https://nodejs.org/download/release/v12.16.2/${NODE_PACKAGE} && \ + tar -C /usr/local --strip-components 1 -xzf ${NODE_PACKAGE} && \ + rm ${NODE_PACKAGE} + +# INSTALL yarn +#RUN npm install yarn -g + +# Use npm to install Antora globally +RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 + +ENV BUILD_DIR="/antora" + +# Setup directories for building the docs +# Give the build user rw access to everything in the build directory, +# neccessary for the ASF 'websites' jenkins agent (which can't chown) +RUN mkdir -p ${BUILD_DIR}/cassandra-site && \ + git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ + chmod -R a+rw ${BUILD_DIR} + +# set the USER to `build`, the working directory to /antora, +# and copy the shell script and run +USER build + +WORKDIR $BUILD_DIR COPY docker-entrypoint.sh /usr/local/bin/ - ENTRYPOINT ["docker-entrypoint.sh"] - -CMD ["DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest antora site.yml"] - -#-----------------OLD STUFF--------- -# llp sync apt package index files -#RUN apt-get update - -# llp 08.04.20 This grabs a pre-built OpenJDK 11 and installs -#RUN wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add - \ -# && add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ \ -# && apt-get update \ -# && apt-get install -y adoptopenjdk-11-hotspot ant - -# llp clear out local repo of retrieved package files -#RUN apt-get clean - -# run sphinx and build the docs with jdk11 -#CMD CASSANDRA_USE_JDK11=true ant gen-doc \ -# && echo "The locally built documentation can be found here:\n\n build/html/index.html\n\n" +CMD [""] diff --git a/doc/Makefile b/doc/Makefile index 1e7f00ba8d7f..4687d05e65c4 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -23,27 +23,6 @@ help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " website to make HTML files for the Cassandra website" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " epub3 to make an epub3" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" @echo " coverage to run coverage check of the documentation (if enabled)" diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index 1f46341a5622..1137871d3e6a 100755 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -2,10 +2,24 @@ # abort script if a command fails set -e + +# DOING IN DOCKERFILE +#git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ +#chmod -R a+rw ${BUILD_DIR} + +# trunk will be the initial branch +cd ${BUILD_DIR}/cassandra; +git checkout doc_redo_asciidoc; +ant jar; +cd doc; python3 gen-nodetool-docs.py; python3 convert_yaml_to_adoc.py; + +# and clean to get ready for the next branch +ant realclean; + +#cd ${BUILD_DIR}/cassandra; +#git checkout doc_redo_asciidoc3.11; +#ant jar; +#cd doc; python3 gen-nodetool-docs.py; python3 convert_yaml_to_adoc.py; + -# prepend antora if command is not detected -if [ $# -eq 0 ] || [ "${1:0:1}" == '-' ] || [ -z `command -v "$1" || echo -n` ]; then - set -- antora "$@" -fi -exec "$@" diff --git a/doc/newDockerfile b/doc/newDockerfile new file mode 100644 index 000000000000..d42d5141feca --- /dev/null +++ b/doc/newDockerfile @@ -0,0 +1,11 @@ +FROM + + +WORKDIR /antora + +COPY docker-entrypoint.sh /usr/local/bin/ + +ENTRYPOINT ["docker-entrypoint.sh"] + +CMD ["antora"] + From 48e228309608eed6eb36e16a91c0625efa1d4725 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 5 Aug 2020 14:01:42 -0700 Subject: [PATCH 036/115] more docker changes --- doc/Dockerfile | 7 ++++--- doc/docker-entrypoint.sh | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index 01b5664b6f1d..196e2b67a222 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -41,9 +41,10 @@ ENV BUILD_DIR="/antora" # Setup directories for building the docs # Give the build user rw access to everything in the build directory, # neccessary for the ASF 'websites' jenkins agent (which can't chown) -RUN mkdir -p ${BUILD_DIR}/cassandra-site && \ - git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ - chmod -R a+rw ${BUILD_DIR} +# CHANGE THIS TO REAL REPO AFTER TESTING!!!! +RUN mkdir -p ${BUILD_DIR}/cassandra && \ + git clone https://github.com/polandll/cassandra.git ${BUILD_DIR}/cassandra && \ + chmod -R a+rw ${BUILD_DIR}/cassandra # set the USER to `build`, the working directory to /antora, # and copy the shell script and run diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index 1137871d3e6a..cdf685364459 100755 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -8,8 +8,7 @@ set -e #chmod -R a+rw ${BUILD_DIR} # trunk will be the initial branch -cd ${BUILD_DIR}/cassandra; -git checkout doc_redo_asciidoc; +cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc; ant jar; cd doc; python3 gen-nodetool-docs.py; python3 convert_yaml_to_adoc.py; From 919629fdaeccc3a224fa24a76b90b0c7e3f5ab6c Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 5 Aug 2020 14:06:13 -0700 Subject: [PATCH 037/115] remove unused files --- doc/newDockerfile | 11 ----- .../examples/TEXT/NODETOOL/cleanup.txt | 43 ------------------- 2 files changed, 54 deletions(-) delete mode 100644 doc/newDockerfile delete mode 100644 doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt diff --git a/doc/newDockerfile b/doc/newDockerfile deleted file mode 100644 index d42d5141feca..000000000000 --- a/doc/newDockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM - - -WORKDIR /antora - -COPY docker-entrypoint.sh /usr/local/bin/ - -ENTRYPOINT ["docker-entrypoint.sh"] - -CMD ["antora"] - diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt deleted file mode 100644 index e99479c7a838..000000000000 --- a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt +++ /dev/null @@ -1,43 +0,0 @@ -NAME - nodetool cleanup - Triggers the immediate cleanup of keys no longer - belonging to a node. By default, clean all keyspaces - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] cleanup - [(-j | --jobs )] [--] [ ...] - -OPTIONS - -h , --host - Node hostname or ip address - - -j , --jobs - Number of sstables to cleanup simultanously, set to 0 to use all - available compaction threads - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [ ...] - The keyspace followed by one or many tables - - From 8168d246f7eb9aa0f00a2f5bc40b44f335810562 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 5 Aug 2020 17:29:14 -0700 Subject: [PATCH 038/115] tests --- doc/docker-entrypoint.sh | 8 ++++---- doc/test_docker_run.sh | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 doc/test_docker_run.sh diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index cdf685364459..c6d9acc570cf 100755 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -10,13 +10,13 @@ set -e # trunk will be the initial branch cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc; ant jar; -cd doc; python3 gen-nodetool-docs.py; python3 convert_yaml_to_adoc.py; +cd doc && python3 gen-nodetool-docs.py; +#python3 convert_yaml_to_adoc.py; # and clean to get ready for the next branch -ant realclean; +#ant realclean; -#cd ${BUILD_DIR}/cassandra; -#git checkout doc_redo_asciidoc3.11; +#cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc3.11; #ant jar; #cd doc; python3 gen-nodetool-docs.py; python3 convert_yaml_to_adoc.py; diff --git a/doc/test_docker_run.sh b/doc/test_docker_run.sh new file mode 100644 index 000000000000..595a0c872e71 --- /dev/null +++ b/doc/test_docker_run.sh @@ -0,0 +1,5 @@ +docker run -i -t \ + --volume $(pwd)/source/modules/cassandra/examples/TEXT/NODETOOL:/antora/cassandra/doc/source/modules/cassandra/examples/TEXT/NODETOOL \ + --volume $(pwd)/source/modules/cassandra/pages/tools/nodetool:/antora/cassandra/doc/source/modules/cassandra/pages/tools/nodetool \ + --volume $(pwd)/source/modules/cassandra/pages/configuration:/antora/cassandra/doc/source/modules/cassandra/pages/configuration \ + cassandra-docs:latest From ac8cccfde0fb8f61d86a063ffb5ec590feb7ad11 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 7 Aug 2020 12:07:48 -0700 Subject: [PATCH 039/115] saving to switch --- doc/Dockerfile | 6 ++- doc/NEED_TO_ADD.txt | 2 + doc/TABS_SAMPLE.adoc | 24 ----------- doc/docker-entrypoint.sh | 3 +- .../examples/TEXT/NODETOOL/cleanup.txt | 43 +++++++++++++++++++ source/tools/nodetool/nodetool.txt | 0 6 files changed, 51 insertions(+), 27 deletions(-) create mode 100644 doc/NEED_TO_ADD.txt delete mode 100644 doc/TABS_SAMPLE.adoc create mode 100644 doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt delete mode 100644 source/tools/nodetool/nodetool.txt diff --git a/doc/Dockerfile b/doc/Dockerfile index 196e2b67a222..acc97ea10343 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -34,14 +34,18 @@ RUN wget https://nodejs.org/download/release/v12.16.2/${NODE_PACKAGE} && \ #RUN npm install yarn -g # Use npm to install Antora globally -RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 +# and antora-lunr for site search +RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 +RUN npm i -g antora-lunr ENV BUILD_DIR="/antora" # Setup directories for building the docs # Give the build user rw access to everything in the build directory, # neccessary for the ASF 'websites' jenkins agent (which can't chown) +# ************************* # CHANGE THIS TO REAL REPO AFTER TESTING!!!! +# ************************* RUN mkdir -p ${BUILD_DIR}/cassandra && \ git clone https://github.com/polandll/cassandra.git ${BUILD_DIR}/cassandra && \ chmod -R a+rw ${BUILD_DIR}/cassandra diff --git a/doc/NEED_TO_ADD.txt b/doc/NEED_TO_ADD.txt new file mode 100644 index 000000000000..22bbe9a9cd58 --- /dev/null +++ b/doc/NEED_TO_ADD.txt @@ -0,0 +1,2 @@ +lunr.js +highlight.js diff --git a/doc/TABS_SAMPLE.adoc b/doc/TABS_SAMPLE.adoc deleted file mode 100644 index 1b9cc50f7b28..000000000000 --- a/doc/TABS_SAMPLE.adoc +++ /dev/null @@ -1,24 +0,0 @@ -= TEST - -This is some text to make sure this page is build. -:tabs: - -[{tabs}] -==== -Tab 1 Title:: -+ --- -This is the content of the first tab. - -Another paragraph in the first tab. - -[source,console] ----- -$ a code block ----- --- -Tab 2 Title:: -+ -This is the content of the second tab. -==== - diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index c6d9acc570cf..8d053b1b8fd0 100755 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -10,8 +10,7 @@ set -e # trunk will be the initial branch cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc; ant jar; -cd doc && python3 gen-nodetool-docs.py; -#python3 convert_yaml_to_adoc.py; +cd doc && python3 gen-nodetool-docs.py && python3 convert_yaml_to_adoc.py; # and clean to get ready for the next branch #ant realclean; diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt new file mode 100644 index 000000000000..e99479c7a838 --- /dev/null +++ b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt @@ -0,0 +1,43 @@ +NAME + nodetool cleanup - Triggers the immediate cleanup of keys no longer + belonging to a node. By default, clean all keyspaces + +SYNOPSIS + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] cleanup + [(-j | --jobs )] [--] [ ...] + +OPTIONS + -h , --host + Node hostname or ip address + + -j , --jobs + Number of sstables to cleanup simultanously, set to 0 to use all + available compaction threads + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [ ...] + The keyspace followed by one or many tables + + diff --git a/source/tools/nodetool/nodetool.txt b/source/tools/nodetool/nodetool.txt deleted file mode 100644 index e69de29bb2d1..000000000000 From b4f35278bb031ef13c4f216d55caf9ae287520f2 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 7 Aug 2020 12:24:43 -0700 Subject: [PATCH 040/115] revise per dcapwell's review --- doc/source/modules/cassandra/pages/new/fqllogging.adoc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/source/modules/cassandra/pages/new/fqllogging.adoc b/doc/source/modules/cassandra/pages/new/fqllogging.adoc index 7f6821dfeb81..84febb5d5678 100644 --- a/doc/source/modules/cassandra/pages/new/fqllogging.adoc +++ b/doc/source/modules/cassandra/pages/new/fqllogging.adoc @@ -19,7 +19,7 @@ Some of the features of FQL are: * Can configure the settings in either the `cassandra.yaml` file or by using ``nodetool``. * Introduces new ``fqltool`` that currently can ``Dump`` the binary logs to a readable format. Other options are ``Replay`` and ``Compare``. -FQL logs all Cassandra Query Language (CQL) requests, both events that modify the data and those that query. +FQL logs all successful Cassandra Query Language (CQL) requests, both events that modify the data and those that query. While audit logs also include CQL requests, FQL logs only the CQL request. This difference means that FQL can be used to replay or compare logs, which audit logging cannot. FQL is useful for debugging, performance benchmarking, testing and auditing CQL queries, while audit logs are useful for compliance. In performance testing, FQL appears to have little or no overhead in ``WRITE`` only workloads, and a minor overhead in ``MIXED`` workload. @@ -135,6 +135,7 @@ For example, to change the default: ``max_log_size: 34359738368 # 32 GiB`` === archive_command The ``archive_command`` option sets the user-defined archive script to execute on rolled log files. +When not defined, files are deleted, with the default ``""`` which then maps to `org.apache.cassandra.utils.binlog.DeletingArchiver`. For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the file being rolled`` === max_archive_retries @@ -142,7 +143,7 @@ For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the The ``max_archive_retries`` option sets the max number of retries of failed archive commands. The default is 10. For example: ``max_archive_retries: 10`` -FQL can also be configured using ``nodetool` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. +FQL can also be configured using ``nodetool`` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. == Enabling FQL @@ -228,7 +229,7 @@ The ``fqltool`` command is used to view (dump), replay, or compare logs. ``fqltool replay`` (https://issues.apache.org/jira/browse/CASSANDRA-14618[CASSANDRA-14618]) enables replay of logs. The command can run from a different machine or cluster for testing, debugging, or performance benchmarking. -The command, run on the same node on which the logs are generated can recreate a dropped database object. +The command can also be used to recreate a dropped database object. Use ``fqltool replay`` to record and compare different runs of production traffic against different versions/configurations of Cassandra or different clusters. Another use is to gather logs from several machines and replay them in “order” by the timestamps recorded. From f69ecb4477757bebcea0e5ea13e768178f99485d Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 15:04:32 -0700 Subject: [PATCH 041/115] new edits --- doc/docker-entrypoint.sh | 56 +++++++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 7 deletions(-) mode change 100755 => 100644 doc/docker-entrypoint.sh diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh old mode 100755 new mode 100644 index 8d053b1b8fd0..b2661e61e1a7 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -2,15 +2,60 @@ # abort script if a command fails set -e - + +# -Check if we have an argument for a reference repository +# -If we have a reference repository, then copy changes to branch that is changed (optional) +# Run python scripts to generate nodetool output and cassandra.yaml +# Run antora + +USE_REPOSITORY="${1}" + +# @TODO: Consider changing the argument to be a path to a repository rather than a flag?? +if [ "${USE_REPOSITORY}" = "true" ] +then + cd "${REF_DIR}"/cassandra + ref_branch=$(git branch | grep "\*" | cut -d' ' -f2) + modified_files=$(git status | grep modified | tr -s ' ' | cut -d' ' -f2) + + cd "${BUILD_DIR}"/cassandra + git checkout "${ref_branch}" + git pull --rebase + + for file_itr in ${modified_files} + do + cp "${REF_DIR}"/cassandra/"${file_itr}" "${BUILD_DIR}"/cassandra/"${file_itr}" + done +fi + +# we are in build directory at this point +BRANCH_LIST="doc_redo_asciidoc doc_redo_asciidoc3.11" + +cd "${BUILD_DIR}"/cassandra +for branch_name in ${BRANCH_LIST} +do + ant jar + cd doc + git checkout "${branch_name}" + python3 gen-nodetool-docs.py + python3 convert_yaml_to_adoc.py + mkdir -p doc/build_gen/"${branch_name}"/ + mv source/modules/cassandra/pages/tools/nodetool/ doc/build_gen/"${branch_name}"/ + mv source/modules/cassandra/pages/configuration/cass_yaml_file.adoc doc/build_gen/"${branch_name}"/ + # After copy we will have: + # doc/build_gen/ + # - nodetool/ + # - cass_yaml_file.adoc + ant realclean +done + # DOING IN DOCKERFILE #git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ #chmod -R a+rw ${BUILD_DIR} # trunk will be the initial branch -cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc; -ant jar; -cd doc && python3 gen-nodetool-docs.py && python3 convert_yaml_to_adoc.py; +#cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc; +#ant jar; +#cd doc && python3 gen-nodetool-docs.py && python3 convert_yaml_to_adoc.py; # and clean to get ready for the next branch #ant realclean; @@ -18,6 +63,3 @@ cd doc && python3 gen-nodetool-docs.py && python3 convert_yaml_to_adoc.py; #cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc3.11; #ant jar; #cd doc; python3 gen-nodetool-docs.py; python3 convert_yaml_to_adoc.py; - - - From 73f7054e573fad9565b20962af6b453b94ce89d1 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 15:09:37 -0700 Subject: [PATCH 042/115] add perms --- doc/Dockerfile | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index acc97ea10343..5042c2a90489 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -1,5 +1,4 @@ FROM ubuntu:18.04 - # Set up non-root user, 'build', with default uid:gid # This allows passing --build-arg to use local host user's uid:gid: # $ docker-compose build \ @@ -12,7 +11,6 @@ RUN echo "Setting up user 'build' with UID=${UID} GID=${GID}" RUN groupadd --gid $GID --non-unique build RUN useradd --create-home --shell /bin/bash \ --uid $UID --gid $GID --non-unique build - # INSTALL wget, python3, java11, and other tools required to build the docs RUN apt-get update && \ apt-get install -y \ @@ -23,23 +21,20 @@ RUN apt-get update && \ make \ ant \ ant-optional - # INSTALL nodejs and nvm ARG NODE_PACKAGE="node-v12.16.2-linux-x64.tar.gz" RUN wget https://nodejs.org/download/release/v12.16.2/${NODE_PACKAGE} && \ tar -C /usr/local --strip-components 1 -xzf ${NODE_PACKAGE} && \ rm ${NODE_PACKAGE} - # INSTALL yarn #RUN npm install yarn -g - # Use npm to install Antora globally # and antora-lunr for site search RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 RUN npm i -g antora-lunr - ENV BUILD_DIR="/antora" - +ENV REF_DIR="/reference" +ENV USE_REPOSITORY="false" # Setup directories for building the docs # Give the build user rw access to everything in the build directory, # neccessary for the ASF 'websites' jenkins agent (which can't chown) @@ -48,13 +43,16 @@ ENV BUILD_DIR="/antora" # ************************* RUN mkdir -p ${BUILD_DIR}/cassandra && \ git clone https://github.com/polandll/cassandra.git ${BUILD_DIR}/cassandra && \ - chmod -R a+rw ${BUILD_DIR}/cassandra - + mkdir -p ${BUILD_DIR}/cassandra/doc/build_gen && \ + chmod -R a+rw ${BUILD_DIR}/cassandra && \ + mkdir -p ${REF_DIR}/cassandra && \ + chmod -R a+rw ${REF_DIR}/cassandra # set the USER to `build`, the working directory to /antora, # and copy the shell script and run USER build - WORKDIR $BUILD_DIR COPY docker-entrypoint.sh /usr/local/bin/ +RUN chown build /usr/local/bin/docker-entrypoint.sh && chmod 755 /usr/local/bin/docker-entrypoint.sh ENTRYPOINT ["docker-entrypoint.sh"] CMD [""] + From 45016ef5d5031db182c7f15649852ca743c9e16d Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 15:10:30 -0700 Subject: [PATCH 043/115] change dockerfile back --- doc/Dockerfile | 1 - doc/hold_Dockerfile | 60 +++++++++++++++++++++++++++++++++++ doc/hold_docker-entrypoint.sh | 23 ++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 doc/hold_Dockerfile create mode 100755 doc/hold_docker-entrypoint.sh diff --git a/doc/Dockerfile b/doc/Dockerfile index 5042c2a90489..5f10047e761f 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -52,7 +52,6 @@ RUN mkdir -p ${BUILD_DIR}/cassandra && \ USER build WORKDIR $BUILD_DIR COPY docker-entrypoint.sh /usr/local/bin/ -RUN chown build /usr/local/bin/docker-entrypoint.sh && chmod 755 /usr/local/bin/docker-entrypoint.sh ENTRYPOINT ["docker-entrypoint.sh"] CMD [""] diff --git a/doc/hold_Dockerfile b/doc/hold_Dockerfile new file mode 100644 index 000000000000..acc97ea10343 --- /dev/null +++ b/doc/hold_Dockerfile @@ -0,0 +1,60 @@ +FROM ubuntu:18.04 + +# Set up non-root user, 'build', with default uid:gid +# This allows passing --build-arg to use local host user's uid:gid: +# $ docker-compose build \ +# --build-arg UID=$(id -u) \ +# --build-arg GID=$(id -g) \ +# cassandra-website +ARG UID=1000 +ARG GID=1000 +RUN echo "Setting up user 'build' with UID=${UID} GID=${GID}" +RUN groupadd --gid $GID --non-unique build +RUN useradd --create-home --shell /bin/bash \ + --uid $UID --gid $GID --non-unique build + +# INSTALL wget, python3, java11, and other tools required to build the docs +RUN apt-get update && \ + apt-get install -y \ + wget \ + python3 \ + openjdk-11-jdk \ + git \ + make \ + ant \ + ant-optional + +# INSTALL nodejs and nvm +ARG NODE_PACKAGE="node-v12.16.2-linux-x64.tar.gz" +RUN wget https://nodejs.org/download/release/v12.16.2/${NODE_PACKAGE} && \ + tar -C /usr/local --strip-components 1 -xzf ${NODE_PACKAGE} && \ + rm ${NODE_PACKAGE} + +# INSTALL yarn +#RUN npm install yarn -g + +# Use npm to install Antora globally +# and antora-lunr for site search +RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 +RUN npm i -g antora-lunr + +ENV BUILD_DIR="/antora" + +# Setup directories for building the docs +# Give the build user rw access to everything in the build directory, +# neccessary for the ASF 'websites' jenkins agent (which can't chown) +# ************************* +# CHANGE THIS TO REAL REPO AFTER TESTING!!!! +# ************************* +RUN mkdir -p ${BUILD_DIR}/cassandra && \ + git clone https://github.com/polandll/cassandra.git ${BUILD_DIR}/cassandra && \ + chmod -R a+rw ${BUILD_DIR}/cassandra + +# set the USER to `build`, the working directory to /antora, +# and copy the shell script and run +USER build + +WORKDIR $BUILD_DIR +COPY docker-entrypoint.sh /usr/local/bin/ +ENTRYPOINT ["docker-entrypoint.sh"] +CMD [""] diff --git a/doc/hold_docker-entrypoint.sh b/doc/hold_docker-entrypoint.sh new file mode 100755 index 000000000000..8d053b1b8fd0 --- /dev/null +++ b/doc/hold_docker-entrypoint.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# abort script if a command fails +set -e + +# DOING IN DOCKERFILE +#git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ +#chmod -R a+rw ${BUILD_DIR} + +# trunk will be the initial branch +cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc; +ant jar; +cd doc && python3 gen-nodetool-docs.py && python3 convert_yaml_to_adoc.py; + +# and clean to get ready for the next branch +#ant realclean; + +#cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc3.11; +#ant jar; +#cd doc; python3 gen-nodetool-docs.py; python3 convert_yaml_to_adoc.py; + + + From 5babbfd840e6dbbef32c20b0beb7dc5fa12afbc8 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 16:18:56 -0700 Subject: [PATCH 044/115] add work --- doc/docker-entrypoint.sh | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index b2661e61e1a7..aeff8af637e4 100644 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -37,17 +37,30 @@ do cd doc git checkout "${branch_name}" python3 gen-nodetool-docs.py - python3 convert_yaml_to_adoc.py - mkdir -p doc/build_gen/"${branch_name}"/ - mv source/modules/cassandra/pages/tools/nodetool/ doc/build_gen/"${branch_name}"/ - mv source/modules/cassandra/pages/configuration/cass_yaml_file.adoc doc/build_gen/"${branch_name}"/ + YAML_INPUT="${BUILD_DIR}"/cassandra/conf/cassandra.yaml + YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc + #YAML_OUTPUT=doc/build_gen/"${branch_name}"/cass_yaml_file.adoc + python3 convert_yaml_to_adoc.py ${YAML_INPUT} ${YAML_OUTPUT} + #mkdir -p doc/build_gen/"${branch_name}"/ + #mv source/modules/cassandra/pages/tools/nodetool/ doc/build_gen/"${branch_name}"/ + #mv source/modules/cassandra/pages/configuration/cass_yaml_file.adoc doc/build_gen/"${branch_name}"/ # After copy we will have: + # ACTUALLY HAVE doc/doc/build_gen/ # doc/build_gen/ # - nodetool/ # - cass_yaml_file.adoc ant realclean done +# run antora +# You can set these variables from the command line. +ANTORAOPTS = DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest +ANTORAYAML = site.yml +ANTORACMD = antora + +$(ANTORAOPTS) $(ANTORACMD) $(ANTORAYAML) + + # DOING IN DOCKERFILE #git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ #chmod -R a+rw ${BUILD_DIR} From dc3a120b3f5a25e2e05342982f6599152a319c5d Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 17:33:52 -0700 Subject: [PATCH 045/115] add add commit --- doc/docker-entrypoint.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index aeff8af637e4..712a9fb95489 100644 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -41,9 +41,13 @@ do YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc #YAML_OUTPUT=doc/build_gen/"${branch_name}"/cass_yaml_file.adoc python3 convert_yaml_to_adoc.py ${YAML_INPUT} ${YAML_OUTPUT} + + # need to add,commit changes + git add && git commit -m "${branch_name} nodetool changes #mkdir -p doc/build_gen/"${branch_name}"/ #mv source/modules/cassandra/pages/tools/nodetool/ doc/build_gen/"${branch_name}"/ #mv source/modules/cassandra/pages/configuration/cass_yaml_file.adoc doc/build_gen/"${branch_name}"/ + # After copy we will have: # ACTUALLY HAVE doc/doc/build_gen/ # doc/build_gen/ From 7c5d983eb5db6d56b8b7ac6bc561680f8c115508 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 17:36:37 -0700 Subject: [PATCH 046/115] fix antora --- doc/docker-entrypoint.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index 712a9fb95489..8fdf421ed27a 100644 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -58,12 +58,11 @@ done # run antora # You can set these variables from the command line. -ANTORAOPTS = DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest -ANTORAYAML = site.yml -ANTORACMD = antora - -$(ANTORAOPTS) $(ANTORACMD) $(ANTORAYAML) +ANTORAOPTS = DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest +ANTORAYAML = site.yml +ANTORACMD = antora +RUN ${ANTORAOPTS} ${ANTORACMD} ${ANTORAYAML} # DOING IN DOCKERFILE #git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ From a8ee3d6d0777f07cd7c6b30d5439dbfab39e3fb1 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 17:38:53 -0700 Subject: [PATCH 047/115] fix antora --- doc/docker-entrypoint.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index 8fdf421ed27a..8eb115967e98 100644 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -62,7 +62,8 @@ ANTORAOPTS = DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSIO ANTORAYAML = site.yml ANTORACMD = antora -RUN ${ANTORAOPTS} ${ANTORACMD} ${ANTORAYAML} +DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest antora site.yml +#${ANTORAOPTS} ${ANTORACMD} ${ANTORAYAML} # DOING IN DOCKERFILE #git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ From dfe12a0856344ea69ecb638f5eeb054968ff3d9f Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 17:42:40 -0700 Subject: [PATCH 048/115] change ui bundle location --- doc/site.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/site.yml b/doc/site.yml index f9b05a559602..811bb5bd26ab 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -17,7 +17,8 @@ content: ui: # Need to replace this with a direct github url rather than a local path bundle: - url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip + url: /https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip + #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: - path: ui.yml From 7e07e6b1d2016d59ba1a5eba6037c33ef709edf9 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 17:46:22 -0700 Subject: [PATCH 049/115] locate ui in tree --- doc/site.yml | 2 +- doc/ui-bundle.zip | Bin 0 -> 423958 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 doc/ui-bundle.zip diff --git a/doc/site.yml b/doc/site.yml index 811bb5bd26ab..ceb35f66468e 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -17,7 +17,7 @@ content: ui: # Need to replace this with a direct github url rather than a local path bundle: - url: /https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip + url: ui-bundle.zip #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: diff --git a/doc/ui-bundle.zip b/doc/ui-bundle.zip new file mode 100644 index 0000000000000000000000000000000000000000..3c5ef7fc68f4fcaf8bf6b647eb170c4ed2c61b2b GIT binary patch literal 423958 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ɩ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

-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

_@uMvU5a5UO_PkCMB}P@A4OPCi9&_(BBt5Z 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 literal 0 HcmV?d00001 From 13bb0b125c082ea8ba02ab147f2dcebd8788545a Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 17:48:47 -0700 Subject: [PATCH 050/115] change content url --- doc/site.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/site.yml b/doc/site.yml index ceb35f66468e..3b67284d9653 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -8,7 +8,8 @@ site: content: sources: - - url: https://github.com/polandll/cassandra.git + - url: /antora/cassandra + #- url: https://github.com/polandll/cassandra.git branches: - 'doc_redo_asciidoc' - 'doc_redo_asciidoc3.11' From c3f247b4e587168a9b5e4923b8117d547ac2a6ad Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 17:54:27 -0700 Subject: [PATCH 051/115] fix missing quote --- doc/docker-entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index 8eb115967e98..eadd99fa148e 100644 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -39,11 +39,11 @@ do python3 gen-nodetool-docs.py YAML_INPUT="${BUILD_DIR}"/cassandra/conf/cassandra.yaml YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc - #YAML_OUTPUT=doc/build_gen/"${branch_name}"/cass_yaml_file.adoc python3 convert_yaml_to_adoc.py ${YAML_INPUT} ${YAML_OUTPUT} # need to add,commit changes - git add && git commit -m "${branch_name} nodetool changes + git add && git commit -m "${branch_name} nodetool changes" + #mkdir -p doc/build_gen/"${branch_name}"/ #mv source/modules/cassandra/pages/tools/nodetool/ doc/build_gen/"${branch_name}"/ #mv source/modules/cassandra/pages/configuration/cass_yaml_file.adoc doc/build_gen/"${branch_name}"/ From 7008c46aba70c8bf6724ff5f4648cb2a51747740 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 18:30:03 -0700 Subject: [PATCH 052/115] took out unneccesary steps --- doc/docker-entrypoint.sh | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index eadd99fa148e..dfd275ee49b9 100644 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -41,18 +41,9 @@ do YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc python3 convert_yaml_to_adoc.py ${YAML_INPUT} ${YAML_OUTPUT} - # need to add,commit changes + # need to add,commit changes before changing branches git add && git commit -m "${branch_name} nodetool changes" - #mkdir -p doc/build_gen/"${branch_name}"/ - #mv source/modules/cassandra/pages/tools/nodetool/ doc/build_gen/"${branch_name}"/ - #mv source/modules/cassandra/pages/configuration/cass_yaml_file.adoc doc/build_gen/"${branch_name}"/ - - # After copy we will have: - # ACTUALLY HAVE doc/doc/build_gen/ - # doc/build_gen/ - # - nodetool/ - # - cass_yaml_file.adoc ant realclean done From b615eac1a1dba4bc330f94a5c86cb96abfe9609e Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 18:36:37 -0700 Subject: [PATCH 053/115] change jdk from 11 to 8 --- doc/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index 5f10047e761f..4dab7397ab50 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -16,7 +16,7 @@ RUN apt-get update && \ apt-get install -y \ wget \ python3 \ - openjdk-11-jdk \ + openjdk-8-jdk \ git \ make \ ant \ From 2b5db410bfbfcaafd1ad9b28a99f81be5e6bd9f6 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 18:38:21 -0700 Subject: [PATCH 054/115] jdk 8 -> 11 --- doc/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index 4dab7397ab50..5f10047e761f 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -16,7 +16,7 @@ RUN apt-get update && \ apt-get install -y \ wget \ python3 \ - openjdk-8-jdk \ + openjdk-11-jdk \ git \ make \ ant \ From cf363cbc62d248e6047d5751511b7b3b84ccda78 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 18:39:16 -0700 Subject: [PATCH 055/115] jdk change --- doc/docker-entrypoint.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index dfd275ee49b9..69bdf5262743 100644 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -33,6 +33,7 @@ BRANCH_LIST="doc_redo_asciidoc doc_redo_asciidoc3.11" cd "${BUILD_DIR}"/cassandra for branch_name in ${BRANCH_LIST} do + export CASSANDRA_USE_JDK11=true ant jar cd doc git checkout "${branch_name}" From 10db4145e1997a1e2e9cc92814dd239cc765921a Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 18:56:51 -0700 Subject: [PATCH 056/115] more changes --- doc/docker-entrypoint.sh | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index 69bdf5262743..e8881e0869e7 100644 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -5,13 +5,16 @@ set -e # -Check if we have an argument for a reference repository # -If we have a reference repository, then copy changes to branch that is changed (optional) -# Run python scripts to generate nodetool output and cassandra.yaml +# -Run python scripts to generate nodetool output and cassandra.yaml # Run antora USE_REPOSITORY="${1}" +export CASSANDRA_USE_JDK11=true # @TODO: Consider changing the argument to be a path to a repository rather than a flag?? -if [ "${USE_REPOSITORY}" = "true" ] + +echo "If this is your first time running this container script, go get a coffee - it's going to take awhile." +if [ "${USE_REPOSITORY}" = "preview" ] then cd "${REF_DIR}"/cassandra ref_branch=$(git branch | grep "\*" | cut -d' ' -f2) @@ -31,20 +34,26 @@ fi BRANCH_LIST="doc_redo_asciidoc doc_redo_asciidoc3.11" cd "${BUILD_DIR}"/cassandra + +echo "checking out branch" for branch_name in ${BRANCH_LIST} do - export CASSANDRA_USE_JDK11=true + git checkout "${branch_name}" + echo "building jar files" ant jar cd doc - git checkout "${branch_name}" + # generate the nodetool docs + echo "generate nodetool" python3 gen-nodetool-docs.py + # generate cassandra.yaml doc file + echo "generate cassandra.yaml" YAML_INPUT="${BUILD_DIR}"/cassandra/conf/cassandra.yaml YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc python3 convert_yaml_to_adoc.py ${YAML_INPUT} ${YAML_OUTPUT} # need to add,commit changes before changing branches - git add && git commit -m "${branch_name} nodetool changes" - + git add . && git commit -m "${branch_name} nodetool changes" + echo "clean up" ant realclean done @@ -57,18 +66,3 @@ ANTORACMD = antora DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest antora site.yml #${ANTORAOPTS} ${ANTORACMD} ${ANTORAYAML} -# DOING IN DOCKERFILE -#git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ -#chmod -R a+rw ${BUILD_DIR} - -# trunk will be the initial branch -#cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc; -#ant jar; -#cd doc && python3 gen-nodetool-docs.py && python3 convert_yaml_to_adoc.py; - -# and clean to get ready for the next branch -#ant realclean; - -#cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc3.11; -#ant jar; -#cd doc; python3 gen-nodetool-docs.py; python3 convert_yaml_to_adoc.py; From f46b22d5b01614dd9c1972b314fb0e1695085421 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 19:16:05 -0700 Subject: [PATCH 057/115] changes to files --- doc/docker-entrypoint.sh | 2 +- doc/hold_Dockerfile | 60 --------- doc/hold_docker-entrypoint.sh | 23 ---- .../pages/tools/nodetool/nodetool.txt | 126 +----------------- 4 files changed, 2 insertions(+), 209 deletions(-) delete mode 100644 doc/hold_Dockerfile delete mode 100755 doc/hold_docker-entrypoint.sh diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index e8881e0869e7..aab5d90c0097 100644 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -52,7 +52,7 @@ do python3 convert_yaml_to_adoc.py ${YAML_INPUT} ${YAML_OUTPUT} # need to add,commit changes before changing branches - git add . && git commit -m "${branch_name} nodetool changes" + git add . && git commit -m "Generated nodetool and configuration documentation for ${branch_name}" echo "clean up" ant realclean done diff --git a/doc/hold_Dockerfile b/doc/hold_Dockerfile deleted file mode 100644 index acc97ea10343..000000000000 --- a/doc/hold_Dockerfile +++ /dev/null @@ -1,60 +0,0 @@ -FROM ubuntu:18.04 - -# Set up non-root user, 'build', with default uid:gid -# This allows passing --build-arg to use local host user's uid:gid: -# $ docker-compose build \ -# --build-arg UID=$(id -u) \ -# --build-arg GID=$(id -g) \ -# cassandra-website -ARG UID=1000 -ARG GID=1000 -RUN echo "Setting up user 'build' with UID=${UID} GID=${GID}" -RUN groupadd --gid $GID --non-unique build -RUN useradd --create-home --shell /bin/bash \ - --uid $UID --gid $GID --non-unique build - -# INSTALL wget, python3, java11, and other tools required to build the docs -RUN apt-get update && \ - apt-get install -y \ - wget \ - python3 \ - openjdk-11-jdk \ - git \ - make \ - ant \ - ant-optional - -# INSTALL nodejs and nvm -ARG NODE_PACKAGE="node-v12.16.2-linux-x64.tar.gz" -RUN wget https://nodejs.org/download/release/v12.16.2/${NODE_PACKAGE} && \ - tar -C /usr/local --strip-components 1 -xzf ${NODE_PACKAGE} && \ - rm ${NODE_PACKAGE} - -# INSTALL yarn -#RUN npm install yarn -g - -# Use npm to install Antora globally -# and antora-lunr for site search -RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 -RUN npm i -g antora-lunr - -ENV BUILD_DIR="/antora" - -# Setup directories for building the docs -# Give the build user rw access to everything in the build directory, -# neccessary for the ASF 'websites' jenkins agent (which can't chown) -# ************************* -# CHANGE THIS TO REAL REPO AFTER TESTING!!!! -# ************************* -RUN mkdir -p ${BUILD_DIR}/cassandra && \ - git clone https://github.com/polandll/cassandra.git ${BUILD_DIR}/cassandra && \ - chmod -R a+rw ${BUILD_DIR}/cassandra - -# set the USER to `build`, the working directory to /antora, -# and copy the shell script and run -USER build - -WORKDIR $BUILD_DIR -COPY docker-entrypoint.sh /usr/local/bin/ -ENTRYPOINT ["docker-entrypoint.sh"] -CMD [""] diff --git a/doc/hold_docker-entrypoint.sh b/doc/hold_docker-entrypoint.sh deleted file mode 100755 index 8d053b1b8fd0..000000000000 --- a/doc/hold_docker-entrypoint.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -# abort script if a command fails -set -e - -# DOING IN DOCKERFILE -#git clone https://gitbox.apache.org/repos/asf/cassandra.git ${BUILD_DIR}/cassandra && \ -#chmod -R a+rw ${BUILD_DIR} - -# trunk will be the initial branch -cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc; -ant jar; -cd doc && python3 gen-nodetool-docs.py && python3 convert_yaml_to_adoc.py; - -# and clean to get ready for the next branch -#ant realclean; - -#cd ${BUILD_DIR}/cassandra && git checkout doc_redo_asciidoc3.11; -#ant jar; -#cd doc; python3 gen-nodetool-docs.py; python3 convert_yaml_to_adoc.py; - - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt index d7880e33a220..3c236fe534f6 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt +++ b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt @@ -1,125 +1 @@ -usage: nodetool [(-pwf | --password-file )] - [(-h | --host )] [(-u | --username )] - [(-pp | --print-port)] [(-p | --port )] - [(-pw | --password )] [] - -The most commonly used nodetool commands are: - assassinate Forcefully remove a dead node without re-replicating any data. Use as a last resort if you cannot removenode - bootstrap Monitor/manage node's bootstrap process - cleanup Triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces - clearsnapshot Remove the snapshot with the given name from the given keyspaces. If no snapshotName is specified we will remove all snapshots - clientstats Print information about connected clients - compact Force a (major) compaction on one or more tables or user-defined compaction on given SSTables - compactionhistory Print history of compaction - compactionstats Print statistics on compactions - decommission Decommission the *node I am connecting to* - describecluster Print the name, snitch, partitioner and schema version of a cluster - describering Shows the token ranges info of a given keyspace - disableauditlog Disable the audit log - disableautocompaction Disable autocompaction for the given keyspace and table - disablebackup Disable incremental backup - disablebinary Disable native transport (binary protocol) - disablefullquerylog Disable the full query log - disablegossip Disable gossip (effectively marking the node down) - disablehandoff Disable storing hinted handoffs - disablehintsfordc Disable hints for a data center - disableoldprotocolversions Disable old protocol versions - drain Drain the node (stop accepting writes and flush all tables) - enableauditlog Enable the audit log - enableautocompaction Enable autocompaction for the given keyspace and table - enablebackup Enable incremental backup - enablebinary Reenable native transport (binary protocol) - enablefullquerylog Enable full query logging, defaults for the options are configured in cassandra.yaml - enablegossip Reenable gossip - enablehandoff Reenable future hints storing on the current node - enablehintsfordc Enable hints for a data center that was previsouly disabled - enableoldprotocolversions Enable old protocol versions - failuredetector Shows the failure detector information for the cluster - flush Flush one or more tables - garbagecollect Remove deleted data from one or more tables - gcstats Print GC Statistics - getbatchlogreplaythrottle Print batchlog replay throttle in KB/s. This is reduced proportionally to the number of nodes in the cluster. - getcompactionthreshold Print min and max compaction thresholds for a given table - getcompactionthroughput Print the MB/s throughput cap for compaction in the system - getconcurrency Get maximum concurrency for processing stages - getconcurrentcompactors Get the number of concurrent compactors in the system. - getconcurrentviewbuilders Get the number of concurrent view builders in the system - getendpoints Print the end points that owns the key - getinterdcstreamthroughput Print the Mb/s throughput cap for inter-datacenter streaming in the system - getlogginglevels Get the runtime logging levels - getmaxhintwindow Print the max hint window in ms - getseeds Get the currently in use seed node IP list excluding the node IP - getsstables Print the sstable filenames that own the key - getstreamthroughput Print the Mb/s throughput cap for streaming in the system - gettimeout Print the timeout of the given type in ms - gettraceprobability Print the current trace probability value - gossipinfo Shows the gossip information for the cluster - help Display help information - import Import new SSTables to the system - info Print node information (uptime, load, ...) - invalidatecountercache Invalidate the counter cache - invalidatekeycache Invalidate the key cache - invalidaterowcache Invalidate the row cache - join Join the ring - listsnapshots Lists all the snapshots along with the size on disk and true size. True size is the total size of all SSTables which are not backed up to disk. Size on disk is total size of the snapshot on disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication. - move Move node on the token ring to a new token - netstats Print network information on provided host (connecting node by default) - pausehandoff Pause hints delivery process - profileload Low footprint profiling of activity for a period of time - proxyhistograms Print statistic histograms for network operations - rangekeysample Shows the sampled keys held across all keyspaces - rebuild Rebuild data by streaming from other nodes (similarly to bootstrap) - rebuild_index A full rebuild of native secondary indexes for a given table - refresh Load newly placed SSTables to the system without restart - refreshsizeestimates Refresh system.size_estimates - reloadlocalschema Reload local node schema from system tables - reloadseeds Reload the seed node list from the seed node provider - reloadssl Signals Cassandra to reload SSL certificates - reloadtriggers Reload trigger classes - relocatesstables Relocates sstables to the correct disk - removenode Show status of current node removal, force completion of pending removal or remove provided ID - repair Repair one or more tables - repair_admin list and fail incremental repair sessions - replaybatchlog Kick off batchlog replay and wait for finish - resetfullquerylog Stop the full query log and clean files in the configured full query log directory from cassandra.yaml as well as JMX - resetlocalschema Reset node's local schema and resync - resumehandoff Resume hints delivery process - ring Print information about the token ring - scrub Scrub (rebuild sstables for) one or more tables - setbatchlogreplaythrottle Set batchlog replay throttle in KB per second, or 0 to disable throttling. This will be reduced proportionally to the number of nodes in the cluster. - setcachecapacity Set global key, row, and counter cache capacities (in MB units) - setcachekeystosave Set number of keys saved by each cache for faster post-restart warmup. 0 to disable - setcompactionthreshold Set min and max compaction thresholds for a given table - setcompactionthroughput Set the MB/s throughput cap for compaction in the system, or 0 to disable throttling - setconcurrency Set maximum concurrency for processing stage - setconcurrentcompactors Set number of concurrent compactors in the system. - setconcurrentviewbuilders Set the number of concurrent view builders in the system - sethintedhandoffthrottlekb Set hinted handoff throttle in kb per second, per delivery thread. - setinterdcstreamthroughput Set the Mb/s throughput cap for inter-datacenter streaming in the system, or 0 to disable throttling - setlogginglevel Set the log level threshold for a given component or class. Will reset to the initial configuration if called with no parameters. - setmaxhintwindow Set the specified max hint window in ms - setstreamthroughput Set the Mb/s throughput cap for streaming in the system, or 0 to disable throttling - settimeout Set the specified timeout in ms, or 0 to disable timeout - settraceprobability Sets the probability for tracing any given request to value. 0 disables, 1 enables for all requests, 0 is the default - sjk Run commands of 'Swiss Java Knife'. Run 'nodetool sjk --help' for more information. - snapshot Take a snapshot of specified keyspaces or a snapshot of the specified table - status Print cluster information (state, load, IDs, ...) - statusautocompaction status of autocompaction of the given keyspace and table - statusbackup Status of incremental backup - statusbinary Status of native transport (binary protocol) - statusgossip Status of gossip - statushandoff Status of storing future hints on the current node - stop Stop compaction - stopdaemon Stop cassandra daemon - tablehistograms Print statistic histograms for a given table - tablestats Print statistics on tables - toppartitions Sample and print the most active partitions - tpstats Print usage statistics of thread pools - truncatehints Truncate all hints on the local node, or truncate hints for the endpoint(s) specified. - upgradesstables Rewrite sstables (for the requested tables) that are not on the current version (thus upgrading them to said current version) - verify Verify (check data checksum for) one or more tables - version Print cassandra version - viewbuildstatus Show progress of a materialized view build - -See 'nodetool help ' for more information on a specific command. - +Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer). From 2306ffc091eddf9d6dabd5c118668182782cfb9e Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 11 Aug 2020 19:35:34 -0700 Subject: [PATCH 058/115] make sure the ui bundle is picked up --- doc/site.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/site.yml b/doc/site.yml index 3b67284d9653..423924a1f9f1 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -18,7 +18,7 @@ content: ui: # Need to replace this with a direct github url rather than a local path bundle: - url: ui-bundle.zip + url: /antora/cassandra/doc/ui-bundle.zip #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: From 451162473ca6b765638ea0454d6ba3f6aef92afb Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 12 Aug 2020 12:21:21 -0700 Subject: [PATCH 059/115] Anthony's additions to the docker files added --- doc/Dockerfile | 17 +++--- doc/docker-entrypoint.sh | 120 +++++++++++++++++++++++++++++++-------- 2 files changed, 107 insertions(+), 30 deletions(-) mode change 100644 => 100755 doc/docker-entrypoint.sh diff --git a/doc/Dockerfile b/doc/Dockerfile index 5f10047e761f..2f9737627d96 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -7,14 +7,16 @@ FROM ubuntu:18.04 # cassandra-website ARG UID=1000 ARG GID=1000 +ARG BUILD_USER=build RUN echo "Setting up user 'build' with UID=${UID} GID=${GID}" -RUN groupadd --gid $GID --non-unique build +RUN groupadd --gid ${GID} --non-unique ${BUILD_USER} RUN useradd --create-home --shell /bin/bash \ - --uid $UID --gid $GID --non-unique build + --uid ${UID} --gid ${GID} --non-unique ${BUILD_USER} # INSTALL wget, python3, java11, and other tools required to build the docs RUN apt-get update && \ apt-get install -y \ wget \ + gpg \ python3 \ openjdk-11-jdk \ git \ @@ -26,15 +28,16 @@ ARG NODE_PACKAGE="node-v12.16.2-linux-x64.tar.gz" RUN wget https://nodejs.org/download/release/v12.16.2/${NODE_PACKAGE} && \ tar -C /usr/local --strip-components 1 -xzf ${NODE_PACKAGE} && \ rm ${NODE_PACKAGE} -# INSTALL yarn -#RUN npm install yarn -g # Use npm to install Antora globally # and antora-lunr for site search RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 RUN npm i -g antora-lunr ENV BUILD_DIR="/antora" ENV REF_DIR="/reference" -ENV USE_REPOSITORY="false" +ENV BUILD_MODE="preview" +ENV GIT_EMAIL_ADDRESS="" +ENV GIT_USER_NAME="" +ENV GPG_KEY="" # Setup directories for building the docs # Give the build user rw access to everything in the build directory, # neccessary for the ASF 'websites' jenkins agent (which can't chown) @@ -49,8 +52,8 @@ RUN mkdir -p ${BUILD_DIR}/cassandra && \ chmod -R a+rw ${REF_DIR}/cassandra # set the USER to `build`, the working directory to /antora, # and copy the shell script and run -USER build -WORKDIR $BUILD_DIR +USER ${BUILD_USER} +WORKDIR ${BUILD_DIR} COPY docker-entrypoint.sh /usr/local/bin/ ENTRYPOINT ["docker-entrypoint.sh"] CMD [""] diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh old mode 100644 new mode 100755 index aab5d90c0097..098c00e8da45 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -1,24 +1,76 @@ -#!/bin/sh +#!/bin/bash # abort script if a command fails set -e -# -Check if we have an argument for a reference repository -# -If we have a reference repository, then copy changes to branch that is changed (optional) -# -Run python scripts to generate nodetool output and cassandra.yaml +# Run python scripts to generate nodetool output and cassandra.yaml # Run antora -USE_REPOSITORY="${1}" -export CASSANDRA_USE_JDK11=true +usage() { + cat << EOF +This container generates the Apache Cassandra documentation. +Usage: +$ docker run -i -t -v :/reference/cassandra cassandra-docs:latest [OPTIONS] +Options + -b Build mode; either "preview" or "production". Defaults to "preview". + -k Path to GPG private key to perform signed commits. + -h Help and usage. +EOF + exit 2 +} + +while getopts "b:k:h" opt_flag; do + case $opt_flag in + b) + BUILD_MODE=$OPTARG + ;; + k) + GPG_KEY=$OPTARG + ;; + h) + usage + ;; + esac +done + +shift $(($OPTIND - 1)) + +if [ "$#" -eq 0 ] +then + usage +fi + +GIT_EMAIL_ADDRESS=${1} +GIT_USER_NAME=${2} + +# Setup git and ssh +git config --global user.email "${GIT_EMAIL_ADDRESS}" +git config --global user.name "${GIT_USER_NAME}" + +if [ -n "${GPG_KEY}" ] +then + gpg --import "${GPG_KEY}" + GPG_KEY_ID=$(gpg --list-secret-keys --keyid-format LONG | grep sec | tr -s ' ' | cut -d' ' -f2 | cut -d'/' -f2) + git config --global user.signingkey "${GPG_KEY_ID}" + git config --global gpg.program gpg + git config --global commit.gpgsign true + export GPG_TTY=$(tty) +fi + +echo +echo "Running in '${BUILD_MODE}' mode!" +echo -# @TODO: Consider changing the argument to be a path to a repository rather than a flag?? +export CASSANDRA_USE_JDK11=true echo "If this is your first time running this container script, go get a coffee - it's going to take awhile." -if [ "${USE_REPOSITORY}" = "preview" ] +if [ "${BUILD_MODE}" = "preview" ] then cd "${REF_DIR}"/cassandra ref_branch=$(git branch | grep "\*" | cut -d' ' -f2) - modified_files=$(git status | grep modified | tr -s ' ' | cut -d' ' -f2) + + echo "Getting list of cleanly modified files in your repository." + modified_files=$(git status | grep -v "both modified" | grep "modified" | tr -s ' ' | cut -d' ' -f2) cd "${BUILD_DIR}"/cassandra git checkout "${ref_branch}" @@ -26,6 +78,7 @@ then for file_itr in ${modified_files} do + echo "Copying modified file '${file_itr}' to '${BUILD_DIR}/cassandra/${file_itr}'." cp "${REF_DIR}"/cassandra/"${file_itr}" "${BUILD_DIR}"/cassandra/"${file_itr}" done fi @@ -35,34 +88,55 @@ BRANCH_LIST="doc_redo_asciidoc doc_redo_asciidoc3.11" cd "${BUILD_DIR}"/cassandra -echo "checking out branch" for branch_name in ${BRANCH_LIST} do + echo "Checking out branch '${branch_name}'" git checkout "${branch_name}" - echo "building jar files" + + echo "Building JAR files" ant jar - cd doc + + # change into doc directory and push the current directory to the stack + pushd doc # generate the nodetool docs - echo "generate nodetool" + echo "Generating Cassandra nodetool documentation" python3 gen-nodetool-docs.py + # generate cassandra.yaml doc file - echo "generate cassandra.yaml" + echo "Generating Cassandra configuration documentation" YAML_INPUT="${BUILD_DIR}"/cassandra/conf/cassandra.yaml YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc - python3 convert_yaml_to_adoc.py ${YAML_INPUT} ${YAML_OUTPUT} + python3 convert_yaml_to_adoc.py "${YAML_INPUT}" "${YAML_OUTPUT}" # need to add,commit changes before changing branches - git add . && git commit -m "Generated nodetool and configuration documentation for ${branch_name}" - echo "clean up" + git add . + git commit -m "Generated nodetool and configuration documention for ${branch_name}." + + # change back to previous directory on the stack + popd ant realclean done +# ************************* +# CHANGE THIS TO trunk AFTER TESTING!!!! +# ************************* +# Antora is run only from one branch (trunk) +git checkout doc_redo_asciidoc +cd doc # run antora -# You can set these variables from the command line. -ANTORAOPTS = DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest -ANTORAYAML = site.yml -ANTORACMD = antora +# Set these environment variables first to run: ${ANTORAOPTS} ${ANTORACMD} ${ANTORAYAML} +#ANTORAOPTS = DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest +#ANTORAYAML = site.yml +#ANTORACMD = antora + +echo "Build the docs site with antora" +export DOCSEARCH_ENABLED=true +export DOCSEARCH_ENGINE=lunr +export DOCSEARCH_INDEX_VERSION=latest +antora site.yml -DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest antora site.yml -#${ANTORAOPTS} ${ANTORACMD} ${ANTORAYAML} +if [ "${BUILD_MODE}" = "preview" ] +then + echo "Starting webserver" +fi From 831128cf689d99816162fff888dead212172924d Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 12 Aug 2020 13:25:15 -0700 Subject: [PATCH 060/115] add http-server --- doc/docker-entrypoint.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index 098c00e8da45..47716a2ea744 100755 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -138,5 +138,6 @@ antora site.yml if [ "${BUILD_MODE}" = "preview" ] then echo "Starting webserver" + python3 -m http.server 8080 fi From a850ad0aa73de3bae3370c6df697cae1d443c967 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 12 Aug 2020 21:23:44 -0700 Subject: [PATCH 061/115] add npm i -g antora-site-generator-lunr --- doc/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index 2f9737627d96..3e28d27a8f41 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -30,8 +30,9 @@ RUN wget https://nodejs.org/download/release/v12.16.2/${NODE_PACKAGE} && \ rm ${NODE_PACKAGE} # Use npm to install Antora globally # and antora-lunr for site search -RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 RUN npm i -g antora-lunr +RUN npm i -g antora-site-generator-lunr +RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 ENV BUILD_DIR="/antora" ENV REF_DIR="/reference" ENV BUILD_MODE="preview" From fd462c03d7ae01af0e44fed201e73e54a3b37f6f Mon Sep 17 00:00:00 2001 From: Anthony Grasso Date: Thu, 13 Aug 2020 15:27:01 +1000 Subject: [PATCH 062/115] Added skip nodetool and config file generation flag. Fixed missing lunr index --- doc/Dockerfile | 27 ++++++--- doc/docker-entrypoint.sh | 126 +++++++++++++++++++++------------------ 2 files changed, 85 insertions(+), 68 deletions(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index 3e28d27a8f41..e8498ea982b8 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -23,22 +23,27 @@ RUN apt-get update && \ make \ ant \ ant-optional + # INSTALL nodejs and nvm ARG NODE_PACKAGE="node-v12.16.2-linux-x64.tar.gz" RUN wget https://nodejs.org/download/release/v12.16.2/${NODE_PACKAGE} && \ tar -C /usr/local --strip-components 1 -xzf ${NODE_PACKAGE} && \ rm ${NODE_PACKAGE} + # Use npm to install Antora globally # and antora-lunr for site search -RUN npm i -g antora-lunr -RUN npm i -g antora-site-generator-lunr -RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 -ENV BUILD_DIR="/antora" -ENV REF_DIR="/reference" -ENV BUILD_MODE="preview" -ENV GIT_EMAIL_ADDRESS="" -ENV GIT_USER_NAME="" -ENV GPG_KEY="" +RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 +RUN npm i -g antora-lunr antora-site-generator-lunr + +ENV BUILD_DIR "/antora" +ENV REF_DIR "/reference" +ENV BUILD_MODE "preview" +ENV GIT_EMAIL_ADDRESS "" +ENV GIT_USER_NAME "" +ENV GPG_KEY_PATH "" +ENV GENERATE_NODETOOL_AND_CONFIG_DOCS "true" +ENV WEB_SERVER_PORT "8080" + # Setup directories for building the docs # Give the build user rw access to everything in the build directory, # neccessary for the ASF 'websites' jenkins agent (which can't chown) @@ -51,8 +56,12 @@ RUN mkdir -p ${BUILD_DIR}/cassandra && \ chmod -R a+rw ${BUILD_DIR}/cassandra && \ mkdir -p ${REF_DIR}/cassandra && \ chmod -R a+rw ${REF_DIR}/cassandra + # set the USER to `build`, the working directory to /antora, # and copy the shell script and run + +EXPOSE ${WEB_SERVER_PORT}/tcp + USER ${BUILD_USER} WORKDIR ${BUILD_DIR} COPY docker-entrypoint.sh /usr/local/bin/ diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index 47716a2ea744..515ea55ae140 100755 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -1,36 +1,41 @@ #!/bin/bash -# abort script if a command fails +# Abort script if a command fails set -e -# Run python scripts to generate nodetool output and cassandra.yaml -# Run antora - usage() { cat << EOF This container generates the Apache Cassandra documentation. + Usage: -$ docker run -i -t -v :/reference/cassandra cassandra-docs:latest [OPTIONS] +$ docker run -i -t -p $WEB_SERVER_PORT:$WEB_SERVER_PORT -v :/reference/cassandra cassandra-docs:latest [OPTIONS] + Options - -b Build mode; either "preview" or "production". Defaults to "preview". - -k Path to GPG private key to perform signed commits. - -h Help and usage. + -b Build mode; either "preview" or "production". Defaults to "preview". + -k Path to GPG private key to perform signed commits. + -n Skip nodetool and Cassandra YAML document generation in preview mode. By default nodetool and Cassandra YAML + configuration documentation is generated. If this option is used the documentation will be missing in preview + mode. This option has no effect when running in "production" mode. + -h Help and usage. EOF exit 2 } -while getopts "b:k:h" opt_flag; do - case $opt_flag in - b) - BUILD_MODE=$OPTARG - ;; - k) - GPG_KEY=$OPTARG - ;; - h) - usage - ;; - esac +while getopts "b:k:nh" opt_flag; do + case $opt_flag in + b) + BUILD_MODE=$OPTARG + ;; + k) + GPG_KEY_PATH=$OPTARG + ;; + n) + GENERATE_NODETOOL_AND_CONFIG_DOCS="false" + ;; + h) + usage + ;; + esac done shift $(($OPTIND - 1)) @@ -47,9 +52,9 @@ GIT_USER_NAME=${2} git config --global user.email "${GIT_EMAIL_ADDRESS}" git config --global user.name "${GIT_USER_NAME}" -if [ -n "${GPG_KEY}" ] +if [ -n "${GPG_KEY_PATH}" ] then - gpg --import "${GPG_KEY}" + gpg --import "${GPG_KEY_PATH}" GPG_KEY_ID=$(gpg --list-secret-keys --keyid-format LONG | grep sec | tr -s ' ' | cut -d' ' -f2 | cut -d'/' -f2) git config --global user.signingkey "${GPG_KEY_ID}" git config --global gpg.program gpg @@ -70,7 +75,10 @@ then ref_branch=$(git branch | grep "\*" | cut -d' ' -f2) echo "Getting list of cleanly modified files in your repository." - modified_files=$(git status | grep -v "both modified" | grep "modified" | tr -s ' ' | cut -d' ' -f2) + if ! modified_files=$(git status | grep -v "both modified" | grep "modified" | tr -s ' ' | cut -d' ' -f2) + then + echo "Error quering git repository. Aborting." + fi cd "${BUILD_DIR}"/cassandra git checkout "${ref_branch}" @@ -88,34 +96,37 @@ BRANCH_LIST="doc_redo_asciidoc doc_redo_asciidoc3.11" cd "${BUILD_DIR}"/cassandra -for branch_name in ${BRANCH_LIST} -do - echo "Checking out branch '${branch_name}'" - git checkout "${branch_name}" - - echo "Building JAR files" - ant jar - - # change into doc directory and push the current directory to the stack - pushd doc - # generate the nodetool docs - echo "Generating Cassandra nodetool documentation" - python3 gen-nodetool-docs.py - - # generate cassandra.yaml doc file - echo "Generating Cassandra configuration documentation" - YAML_INPUT="${BUILD_DIR}"/cassandra/conf/cassandra.yaml - YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc - python3 convert_yaml_to_adoc.py "${YAML_INPUT}" "${YAML_OUTPUT}" - - # need to add,commit changes before changing branches - git add . - git commit -m "Generated nodetool and configuration documention for ${branch_name}." - - # change back to previous directory on the stack - popd - ant realclean -done +if [ "${GENERATE_NODETOOL_AND_CONFIG_DOCS}" = "true" ] || [ "${BUILD_MODE}" = "production" ] +then + for branch_name in ${BRANCH_LIST} + do + echo "Checking out branch '${branch_name}'" + git checkout "${branch_name}" + + echo "Building JAR files" + ant jar + + # change into doc directory and push the current directory to the stack + pushd doc + # generate the nodetool docs + echo "Generating Cassandra nodetool documentation" + python3 gen-nodetool-docs.py + + # generate cassandra.yaml doc file + echo "Generating Cassandra configuration documentation" + YAML_INPUT="${BUILD_DIR}"/cassandra/conf/cassandra.yaml + YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc + python3 convert_yaml_to_adoc.py "${YAML_INPUT}" "${YAML_OUTPUT}" + + # need to add,commit changes before changing branches + git add . + git commit -m "Generated nodetool and configuration documention for ${branch_name}." + + # change back to previous directory on the stack + popd + ant realclean + done +fi # ************************* # CHANGE THIS TO trunk AFTER TESTING!!!! @@ -123,21 +134,18 @@ done # Antora is run only from one branch (trunk) git checkout doc_redo_asciidoc cd doc -# run antora -# Set these environment variables first to run: ${ANTORAOPTS} ${ANTORACMD} ${ANTORAYAML} -#ANTORAOPTS = DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest -#ANTORAYAML = site.yml -#ANTORACMD = antora -echo "Build the docs site with antora" +# run antora +echo "Building the docs site with antora" export DOCSEARCH_ENABLED=true export DOCSEARCH_ENGINE=lunr +export NODE_PATH="$(npm -g root)" export DOCSEARCH_INDEX_VERSION=latest -antora site.yml +antora --generator antora-site-generator-lunr site.yml if [ "${BUILD_MODE}" = "preview" ] then echo "Starting webserver" - python3 -m http.server 8080 + python3 -m http.server "${WEB_SERVER_PORT}" fi From d363796a9ed8eb81ab6b069773fce9880c6e8f34 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 13 Aug 2020 15:37:36 -0700 Subject: [PATCH 063/115] testing rest of website --- doc/source/antora.yml | 1 + doc/source/modules/other/nav.adoc | 5 + .../modules/other/pages/apachecon_cfp.adoc | 83 +++++++++ doc/source/modules/other/pages/community.adoc | 80 ++++++++ doc/source/modules/other/pages/download.adoc | 150 +++++++++++++++ .../modules/other/pages/third-party.adoc | 173 ++++++++++++++++++ 6 files changed, 492 insertions(+) create mode 100644 doc/source/modules/other/nav.adoc create mode 100644 doc/source/modules/other/pages/apachecon_cfp.adoc create mode 100644 doc/source/modules/other/pages/community.adoc create mode 100644 doc/source/modules/other/pages/download.adoc create mode 100644 doc/source/modules/other/pages/third-party.adoc diff --git a/doc/source/antora.yml b/doc/source/antora.yml index c15ca966710e..34f2b3a795f9 100644 --- a/doc/source/antora.yml +++ b/doc/source/antora.yml @@ -3,4 +3,5 @@ version: '4.0' prerelease: -beta1 nav: - modules/ROOT/nav.adoc +- modules/other/nav.adoc - modules/cassandra/nav.adoc diff --git a/doc/source/modules/other/nav.adoc b/doc/source/modules/other/nav.adoc new file mode 100644 index 000000000000..ac6784114952 --- /dev/null +++ b/doc/source/modules/other/nav.adoc @@ -0,0 +1,5 @@ +* Other +** xref:community.adoc[Community] +*** xref:third-party.adoc[Third-party] +*** xref:download.adoc[Download] + diff --git a/doc/source/modules/other/pages/apachecon_cfp.adoc b/doc/source/modules/other/pages/apachecon_cfp.adoc new file mode 100644 index 000000000000..288f70a265c5 --- /dev/null +++ b/doc/source/modules/other/pages/apachecon_cfp.adoc @@ -0,0 +1,83 @@ += Announcing the 2019 Apache Cassandra Summit + +== Announcing the 2019 Apache Cassandra Summit + +Join the Apache Cassandra community for the 2019 Apache Cassandra +Summit, hosted with ApacheCon in Las Vegas, NV (Sept 9 - 13). + +''''' + +=== Apache Cassandra at ApacheCon + +image:/img/apachecon-2019.jpg[ApacheCon 2019]\{:style=``float: right; +width: 400px''} + +For more information about other events at ApacheCon, see +https://apachecon.com/acna19/index.html[ApacheCon 2019]. + +  + +==== Day One: Next Generation Cassandra Conference (NGCC) + +NGCC (Next Generation Cassandra Conference), a one-day event for Apache +Cassandra contributors and large system operators to meet, discuss, and +plan future development in the project. NGCC will take place on +*Tuesday, September 10th*. + +NGCC is an advanced event targeted toward Apache Cassandra contributors +and large system / platform operators. Content will focus on Cassandra +internals and is geared toward those with detailed knowledge of the +codebase and architecture. All are welcome to attend. + +  + +==== Day Two: Apache Cassandra Summit + +The Apache Cassandra Summit, a one-day event for Apache Cassandra users +to meet, network, and learn about what’s new and what’s coming in +Cassandra. The Apache Cassandra Summit will be held on *Wednesday, Sept +11*. + +The Apache Cassandra Summit is targeted toward a wider audience. Topics +should be interesting and accessible to those whose first introduction +to Cassandra is at this event, and those who have been active in the +community for many years. + +''''' + +=== Call for Presentations + +We’re excited to announce the Call for Presentations is now open for +both, closing Monday, May 13 at 2pm BST (UTC+1). + +  + +==== Apache Cassandra Summit CFP (40-minute presentation, 5-minute Q&A) – + +*Example proposals might include:* - Lessons learned operating Apache +Cassandra at scale. - Customizations and ways members of the community +have extended Apache Cassandra to make it a great fit for their use +case. - Stability improvements, performance enhancements, and new +features in an upcoming Cassandra release. - Something we haven’t +thought about that a general audience would be interested to hear. + +  + +==== Next Generation Cassandra Conference CFP (30-minute presentation, 15m breakout) – + +*Example proposals might include:* - Presentations from contributors and +large operators covering pain points and proposals to address them - +Planned or proposed improvements in specific areas of the Apache +Cassandra codebase - Planned or proposed improvements we can make to +strengthen and empower the Apache Cassandra community. - Something we +haven’t thought about that advanced operators / contributors would be +interested to hear. + +  + +https://asf.jamhosted.net/cfp.html[Click here] to submit a proposal for +the Apache Cassandra Summit or NGCC. + +When submitting, please ensure you select ``Cassandra'' as the category. +For NGCC submissions, please include ``NGCC Proposal'' in the ``Optional +Notes'' field. diff --git a/doc/source/modules/other/pages/community.adoc b/doc/source/modules/other/pages/community.adoc new file mode 100644 index 000000000000..0fa9be20bc46 --- /dev/null +++ b/doc/source/modules/other/pages/community.adoc @@ -0,0 +1,80 @@ += Community + +== Community + +=== Getting and keeping in touch + +==== Mailing lists + +Discussion and questions on Cassandra’s usage and development happens +mainly on the following mailing lists: + +* http://www.mail-archive.com/user@cassandra.apache.org/[Users]: General +mailing list for user questions and discussions. This is also where new +releases are announced +(mailto:user-subscribe@cassandra.apache.org[subscribe] | +mailto:user-unsubscribe@cassandra.apache.org[unsubscribe] | +https://lists.apache.org/list.html?user@cassandra.apache.org[Archives]). +* http://www.mail-archive.com/dev@cassandra.apache.org/[Developers]: +Questions and discussions related to Cassandra development +(mailto:dev-subscribe@cassandra.apache.org[subscribe] | +mailto:dev-unsubscribe@cassandra.apache.org[unsubscribe] | +https://lists.apache.org/list.html?dev@cassandra.apache.org[Archives]). +* http://www.mail-archive.com/commits@cassandra.apache.org/[Commits]: +Notification on commits done to the source repository and on +https://issues.apache.org/jira/browse/CASSANDRA[JIRA] updates. This is a +fairly noisy mailing list mostly useful for Cassandra developers and +those who would like to keep close tabs on Cassandra’s development +(mailto:commits-subscribe@cassandra.apache.org[subscribe] | +mailto:commits-unsubscribe@cassandra.apache.org[unsubscribe] | +https://lists.apache.org/list.html?commits@cassandra.apache.org[Archives]). + +==== Slack + +We have recently moved to the ASF Slack organization for all chat. +Please https://s.apache.org/slack-invite[sign up for an account] to +participate. + +* `#cassandra` - for user questions and general discussions +* `#cassandra-dev` - strictly for questions or discussions related to +Cassandra development +* `#cassandra-builds` - results of automated test builds +* `#cassandra-builds-patches` - results of patch test builds + +=== Stack Overflow + +You can also check the +http://stackoverflow.com/questions/tagged/cassandra[Q&A about using +Cassandra] on Stack Overflow. + +=== Books and publications + +* http://shop.oreilly.com/product/0636920299837.do[Cassandra: The +Definitive Guide, 3rd Edition], by Jeff Carpenter and Eben Hewitt. +Updated for Cassandra 4.0 +* https://www.amazon.com/Mastering-Apache-Cassandra-Nishant-Neeraj/dp/1784392618/[Mastering +Apache Cassandra, 2nd Edition], by Nishant Neeraj +* https://www.amazon.com/Learning-Apache-Cassandra-Tolerant-Real-Time/dp/1783989203/[Learning +Apache Cassandra - Manage Fault Tolerant and Scalable Real-Time Data], +by Mat Brown +* https://dl.acm.org/citation.cfm?id=1773922[Cassandra: a decentralized +structured storage system], by Avinash Lakshman and Prashant Malik + +=== Third-party projects + +There are a number of third-party Cassandra projects that could be +useful. Check out this +https://cassandra.apache.org/third-party/[listing]. + +=== Reporting bugs + +If you encounter a problem with Cassandra, the first places to ask for +help are the link:#mailing[user mailing list] and the `#cassandra` +https://s.apache.org/slack-invite[Slack channel]. + +If, after having asked for help, you suspect that you have found a bug +in Cassandra, you should report it by opening a ticket through the +https://issues.apache.org/jira/browse/CASSANDRA[Apache Cassandra JIRA +tracking system]. Please provide as much detail as you can on your +problem. Don’t forget to indicate which version of Cassandra you are +running and on which environment. diff --git a/doc/source/modules/other/pages/download.adoc b/doc/source/modules/other/pages/download.adoc new file mode 100644 index 000000000000..47ff79e7c1c6 --- /dev/null +++ b/doc/source/modules/other/pages/download.adoc @@ -0,0 +1,150 @@ += Download + +== Downloading Cassandra + +=== Latest Beta Version + +Download the latest Apache Cassandra 4.0 beta release: \{\{ ``latest'' | +full_release_link }}. + +=== Latest Stable Version + +Download the latest Apache Cassandra 3.11 release: \{\{ ``3.11'' | +full_release_link }}. + +=== Older Supported Releases + +The following older Cassandra releases are still supported: + +* Apache Cassandra 3.0 is supported until *6 months after 4.0 release +(date TBD)*. The latest release is \{\{ ``3.0'' | full_release_link }}. +* Apache Cassandra 2.2 is supported until *4.0 release (date TBD)*. The +latest release is \{\{ ``2.2'' | full_release_link }}. +* Apache Cassandra 2.1 is supported until *4.0 release (date TBD)* with +*critical fixes only*. The latest release is \{\{ ``2.1'' | +full_release_link }}. + +Older (unsupported) versions of Cassandra are +http://archive.apache.org/dist/cassandra/[archived here]. + +=== Installation from Debian packages + +* For the `` specify the major version number, without +dot, and with an appended `x`. +* The latest `` is `311x`. +* For older releases, the `` can be one of `30x`, `22x`, +or `21x`. +* Add the Apache repository of Cassandra to +`/etc/apt/sources.list.d/cassandra.sources.list`, for example for the +latest 3.11 version: + +.... +echo "deb https://downloads.apache.org/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list +.... + +* Add the Apache Cassandra repository keys: + +.... +curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add - +.... + +* Update the repositories: + +.... +sudo apt-get update +.... + +* If you encounter this error: + +.... +GPG error: http://www.apache.org 311x InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A278B781FE4B2BDA +.... + +Then add the public key A278B781FE4B2BDA as follows: + +.... +sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-key A278B781FE4B2BDA +.... + +and repeat `sudo apt-get update`. The actual key may be different, you +get it from the error message itself. For a full list of Apache +contributors public keys, you can refer to +https://downloads.apache.org/cassandra/KEYS. + +* Install Cassandra: + +.... +sudo apt-get install cassandra +.... + +* You can start Cassandra with `sudo service cassandra start` and stop +it with `sudo service cassandra stop`. However, normally the service +will start automatically. For this reason be sure to stop it if you need +to make any configuration changes. +* Verify that Cassandra is running by invoking `nodetool status` from +the command line. +* The default location of configuration files is `/etc/cassandra`. +* The default location of log and data directories is +`/var/log/cassandra/` and `/var/lib/cassandra`. +* Start-up options (heap size, etc) can be configured in +`/etc/default/cassandra`. + +=== Installation from RPM packages + +* For the `` specify the major version number, without +dot, and with an appended `x`. +* The latest `` is `311x`. +* For older releases, the `` can be one of `30x`, `22x`, +or `21x`. +* (Not all versions of Apache Cassandra are available, since building +RPMs is a recent addition to the project.) +* Add the Apache repository of Cassandra to +`/etc/yum.repos.d/cassandra.repo`, for example for the latest 3.11 +version: + +[source,text] +---- +[cassandra] +name=Apache Cassandra +baseurl=https://downloads.apache.org/cassandra/redhat/311x/ +gpgcheck=1 +repo_gpgcheck=1 +gpgkey=https://downloads.apache.org/cassandra/KEYS +---- + +* Install Cassandra, accepting the gpg key import prompts: + +.... +sudo yum install cassandra +.... + +Start Cassandra (will not start automatically): + +.... +service cassandra start +.... + +Systemd based distributions may require to run `systemctl daemon-reload` +once to make Cassandra available as a systemd service. This should +happen automatically by running the command above. + +Make Cassandra start automatically after reboot: + +.... +chkconfig cassandra on +.... + +Please note that official RPMs for Apache Cassandra only have been +available recently and are not tested thoroughly on all platforms yet. +We appreciate your feedback and support and ask you to post details on +any issues in the +https://issues.apache.org/jira/browse/CASSANDRA-13433[corresponding Jira +ticket]. + +=== Source + +Development is done in the Apache Git repository. To check out a copy: + +.... +git clone https://gitbox.apache.org/repos/asf/cassandra.git +.... diff --git a/doc/source/modules/other/pages/third-party.adoc b/doc/source/modules/other/pages/third-party.adoc new file mode 100644 index 000000000000..ffde41a1a9c0 --- /dev/null +++ b/doc/source/modules/other/pages/third-party.adoc @@ -0,0 +1,173 @@ += Third-party projects + +== Third-party projects + +=== Cassandra as-a-Service cloud offerings + +* https://aiven.io/cassandra[Aiven for Apache Cassandra]: Aiven for +Apache Cassandra is a fully managed NoSQL database, deployable in the +cloud of your choice. Snap it into your existing workflows with the +click of a button, automate away the mundane tasks, and focus on +building your core apps. Now running Cassandra 3.11. +* https://aws.amazon.com/keyspaces/[Amazon Keyspaces (for Apache +Cassandra)]: Scalable, highly available, and managed Apache +Cassandra–compatible database service. +* https://astra.datastax.com[DataStax Astra]: Cloud-native database +as-a-service built on Apache Cassandra™ complete with a free-tier and +CQL, REST and GraphQL APIs for faster development. Deployable in AWS and +GCP. +* https://www.instaclustr.com/solutions/managed-apache-cassandra[Instaclustr +Hosted & Managed Apache Cassandra as a Service]: Instaclustr provides a +fully managed and SOC 2 certified hosted & managed service for Apache +Cassandra® on AWS, Azure, GCP and IBM Cloud. + +=== Cassandra installation tools + +* https://hub.docker.com/_/cassandra[Docker community Cassandra images]: +Docker images for Apache Cassandra maintained by the Docker community +* https://downloads.datastax.com/#desktop[DataStax Desktop]: +Cross-platform (Windows, MacOSX, Linux) application that allows +developers to quickly explore Apache Cassandra™ with a few clicks on +their laptop, complete with tutorials and walkthroughs. +* https://github.com/thelastpickle/tlp-cluster[The Last Pickle +tlp-cluster]: tlp-cluster, a tool for launching Cassandra clusters in +AWS (DataStax) + +=== Cassandra tools + +* https://cassandra.link[cassandra.link]: Curated site with tools, along +with https://cassandra.tools[cassandra.tools]. +* https://github.com/criteo/cassandra_exporter[Cassandra Prometheus +Exporter]: Standalone application which exports Cassandra metrics +through a prometheus friendly endpoint +* https://downloads.datastax.com/#bulk-loader[DataStax Bulk Loader]: +Easy-to-use command line utility for loading and unloading JSON or CSV +files to/from the database, counting rows in tables and identifying +large partitions. +* https://github.com/datastax/metric-collector-for-apache-cassandra[DataStax +Metrics Collector for Cassandra]: Based on Collectd, aggregates OS and +Cassandra metrics along with diagnostic events to facilitate problem +resolution and remediation +* https://hackolade.com/nosqldb.html#cassandra[Hackolade]: Visual data +modeling tool for Cassandra +* https://github.com/thelastpickle/cassandra-medusa[The Last Pickle +Medusa]: Apache Cassandra Backup and Restore Tool (DataStax) +* https://github.com/thelastpickle/cassandra-reaper[The Last Pickle +Reaper]: Automated repair tool for Apache Cassandra (DataStax) +* https://github.com/thelastpickle/tlp-stress[The Last Pickle Cassandra +stress tool, tlp-stress]: A workload-centric stress tool for Apache +Cassandra. Designed for simplicity, no math degree required. (DataStax) +* https://github.com/nosqlbench/nosqlbench[NoSQLBench]: Pluggable +benchmarking suite for Cassandra and other distributed systems + +=== Cassandra Kubernetes operators + +* https://github.com/mesosphere/kudo-cassandra-operator[D2iQ Cassandra +Kudo Operator]: The KUDO Cassandra Operator makes it easy to deploy and +manage Apache Cassandra on Kubernetes. +* https://github.com/datastax/cass-operator[DataStax cass-operator]: The +DataStax Kubernetes Operator for Apache Cassandra +* https://github.com/instaclustr/cassandra-operator[Instaclustr +cassandra-operator]: The Cassandra operator manages Cassandra clusters +deployed to Kubernetes and automates tasks related to operating a +Cassandra cluster. +* https://orange-opensource.github.io/casskop/[Orange CassKop]: The +Orange Cassandra operator is a Kubernetes operator to automate +provisioning, management, autoscaling and operations of Apache Cassandra +clusters deployed to K8s. +* https://github.com/sky-uk/cassandra-operator[Sky Cassandra Operator]: +The Sky Cassandra Operator is a Kubernetes operator that manages +Cassandra clusters inside Kubernetes. + +=== Cassandra management sidecars + +* https://github.com/apache/cassandra-sidecar[Apache Cassandra +cassandra-sidecar]: Sidecar for the highly scalable Apache Cassandra +database, built as part of the Apache Cassandra project. +* https://github.com/datastax/management-api-for-apache-cassandra[DataStax +Management API for Apache Cassandra]: RESTful / Secure Management +Sidecar for Apache Cassandra +* https://github.com/datastax/spring-boot[DataStax Spring Boot]: Spring +Boot extension +* https://github.com/instaclustr/cassandra-sidecar[Instaclustr +cassandra-sidecar]: This repository is home of a sidecar for Apache +Cassandra database. Sidecar is meant to be run alongside of Cassandra +instance and sidecar talks to Cassandra via JMX. + +=== Developer Frameworks + +* http://r4fek.github.io/django-cassandra-engine/[Django Cassandra +Engine]: Cassandra backend for Django Framework that allows you to use +Cqlengine directly in your project. +* https://express-cassandra.readthedocs.io/en/stable/[Express +Cassandra]: Express-Cassandra is a Cassandra ORM/ODM/OGM for NodeJS with +Elassandra & JanusGraph Support. +* https://quarkus.io/guides/cassandra[Quarkus extension for Apache +Cassandra]: An Apache Cassandra(R) extension for Quarkus. Quarkus is A +Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM, +crafted from the best of breed Java libraries and standards. +* https://spring.io/projects/spring-data-cassandra[Spring Data +Cassandra]: With the power to stay at a high level with annotated POJOs, +or at a low level with high performance data ingestion capabilities, the +Spring Data for Apache Cassandra templates are sure to meet every +application need +* https://www.testcontainers.org/modules/databases/cassandra/[TestContainers]: +Testcontainers is a Java library that supports JUnit tests, providing +lightweight, throwaway instances of common databases, Selenium web +browsers, or anything else that can run in a Docker container. + +=== Cassandra connectors + +==== Apache Kafka + +* https://www.confluent.io/hub/confluentinc/kafka-connect-cassandra[Confluent +Connect Cassandra]: The Confluent Cassandra Sink Connector is used to +move messages from Kafka into Apache Cassandra. +* https://downloads.datastax.com/#akc[DataStax Sink Connector]: The +DataStax Apache Kafka Connector automatically takes records from Kafka +topics and writes them to a DataStax Enterprise or Apache Cassandra™ +database. This sink connector is deployed in the Kafka Connect framework +and removes the need to build a custom solution to move data between +these two systems. +* https://github.com/debezium/debezium-incubator/tree/master/debezium-connector-cassandra[Debezium +Source Connector]: This connector is currently in incubating state, and +Cassandra is different from the other Debezium connectors since it is +not implemented on top of the Kafka Connect framework. +* https://docs.lenses.io/connectors/sink/cassandra.html[Lenses Sink +Connector]: The Cassandra Sink allows you to write events from Kafka to +Cassandra. The connector converts the value from the Kafka Connect +SinkRecords to JSON and uses Cassandra’s JSON insert functionality to +insert the rows. The task expects pre-created tables in Cassandra. +* https://docs.lenses.io/connectors/source/cassandra.html[Lenses Source +Connector]: Kafka Connect Cassandra is a Source Connector for reading +data from Cassandra and writing to Kafka. + +==== Apache Spark + +* https://github.com/datastax/spark-cassandra-connector[DataStax Spark +Cassandra Connector]: This library lets you expose Cassandra tables as +Spark RDDs and Datasets/DataFrames, write Spark RDDs and +Datasets/DataFrames to Cassandra tables, and execute arbitrary CQL +queries in your Spark applications. + +==== Apache Flink + +* https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/cassandra.html[Flink +Sink Connector]: This connector provides sinks that writes data into a +Apache Cassandra database. + +==== Apache Pulsar + +* https://pulsar.apache.org/docs/en/io-quickstart/#connect-pulsar-to-cassandra[Pulsar +Sink Connector]: The Pulsar Cassandra Sink connector is used to write +messages to a Cassandra Cluster. + +==== Professional Support + +* https://luna.datastax.com/[DataStax Luna], +https://www.datastax.com/services/support/premium-support[DataStax +Premium Support], +https://www.datastax.com/services/professional-services[DataStax +Professional Services] +* https://www.instaclustr.com/services/[Instacluster] +* https://opencredo.com/about-us/[Open Credo] From ac882557d4ac3686a10f5dd7baf2443cb87076c3 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 13 Aug 2020 15:42:48 -0700 Subject: [PATCH 064/115] test 2 --- doc/NEED_TO_ADD.txt | 2 - doc/source/antora.yml | 2 +- doc/source/modules/REST/nav.adoc | 3 + .../modules/REST/pages/apachecon_cfp.adoc | 83 +++++++++ doc/source/modules/REST/pages/community.adoc | 80 ++++++++ doc/source/modules/REST/pages/download.adoc | 150 +++++++++++++++ .../modules/REST/pages/third-party.adoc | 173 ++++++++++++++++++ doc/test_docker_run.sh | 5 - 8 files changed, 490 insertions(+), 8 deletions(-) delete mode 100644 doc/NEED_TO_ADD.txt create mode 100644 doc/source/modules/REST/nav.adoc create mode 100644 doc/source/modules/REST/pages/apachecon_cfp.adoc create mode 100644 doc/source/modules/REST/pages/community.adoc create mode 100644 doc/source/modules/REST/pages/download.adoc create mode 100644 doc/source/modules/REST/pages/third-party.adoc delete mode 100644 doc/test_docker_run.sh diff --git a/doc/NEED_TO_ADD.txt b/doc/NEED_TO_ADD.txt deleted file mode 100644 index 22bbe9a9cd58..000000000000 --- a/doc/NEED_TO_ADD.txt +++ /dev/null @@ -1,2 +0,0 @@ -lunr.js -highlight.js diff --git a/doc/source/antora.yml b/doc/source/antora.yml index 34f2b3a795f9..8dc2142cdf9a 100644 --- a/doc/source/antora.yml +++ b/doc/source/antora.yml @@ -3,5 +3,5 @@ version: '4.0' prerelease: -beta1 nav: - modules/ROOT/nav.adoc -- modules/other/nav.adoc +- modules/REST/nav.adoc - modules/cassandra/nav.adoc diff --git a/doc/source/modules/REST/nav.adoc b/doc/source/modules/REST/nav.adoc new file mode 100644 index 000000000000..0886e9894faf --- /dev/null +++ b/doc/source/modules/REST/nav.adoc @@ -0,0 +1,3 @@ +* xref:community.adoc[Community] +** xref:third-party.adoc[Third-party] +** xref:download.adoc[Download] diff --git a/doc/source/modules/REST/pages/apachecon_cfp.adoc b/doc/source/modules/REST/pages/apachecon_cfp.adoc new file mode 100644 index 000000000000..288f70a265c5 --- /dev/null +++ b/doc/source/modules/REST/pages/apachecon_cfp.adoc @@ -0,0 +1,83 @@ += Announcing the 2019 Apache Cassandra Summit + +== Announcing the 2019 Apache Cassandra Summit + +Join the Apache Cassandra community for the 2019 Apache Cassandra +Summit, hosted with ApacheCon in Las Vegas, NV (Sept 9 - 13). + +''''' + +=== Apache Cassandra at ApacheCon + +image:/img/apachecon-2019.jpg[ApacheCon 2019]\{:style=``float: right; +width: 400px''} + +For more information about other events at ApacheCon, see +https://apachecon.com/acna19/index.html[ApacheCon 2019]. + +  + +==== Day One: Next Generation Cassandra Conference (NGCC) + +NGCC (Next Generation Cassandra Conference), a one-day event for Apache +Cassandra contributors and large system operators to meet, discuss, and +plan future development in the project. NGCC will take place on +*Tuesday, September 10th*. + +NGCC is an advanced event targeted toward Apache Cassandra contributors +and large system / platform operators. Content will focus on Cassandra +internals and is geared toward those with detailed knowledge of the +codebase and architecture. All are welcome to attend. + +  + +==== Day Two: Apache Cassandra Summit + +The Apache Cassandra Summit, a one-day event for Apache Cassandra users +to meet, network, and learn about what’s new and what’s coming in +Cassandra. The Apache Cassandra Summit will be held on *Wednesday, Sept +11*. + +The Apache Cassandra Summit is targeted toward a wider audience. Topics +should be interesting and accessible to those whose first introduction +to Cassandra is at this event, and those who have been active in the +community for many years. + +''''' + +=== Call for Presentations + +We’re excited to announce the Call for Presentations is now open for +both, closing Monday, May 13 at 2pm BST (UTC+1). + +  + +==== Apache Cassandra Summit CFP (40-minute presentation, 5-minute Q&A) – + +*Example proposals might include:* - Lessons learned operating Apache +Cassandra at scale. - Customizations and ways members of the community +have extended Apache Cassandra to make it a great fit for their use +case. - Stability improvements, performance enhancements, and new +features in an upcoming Cassandra release. - Something we haven’t +thought about that a general audience would be interested to hear. + +  + +==== Next Generation Cassandra Conference CFP (30-minute presentation, 15m breakout) – + +*Example proposals might include:* - Presentations from contributors and +large operators covering pain points and proposals to address them - +Planned or proposed improvements in specific areas of the Apache +Cassandra codebase - Planned or proposed improvements we can make to +strengthen and empower the Apache Cassandra community. - Something we +haven’t thought about that advanced operators / contributors would be +interested to hear. + +  + +https://asf.jamhosted.net/cfp.html[Click here] to submit a proposal for +the Apache Cassandra Summit or NGCC. + +When submitting, please ensure you select ``Cassandra'' as the category. +For NGCC submissions, please include ``NGCC Proposal'' in the ``Optional +Notes'' field. diff --git a/doc/source/modules/REST/pages/community.adoc b/doc/source/modules/REST/pages/community.adoc new file mode 100644 index 000000000000..0fa9be20bc46 --- /dev/null +++ b/doc/source/modules/REST/pages/community.adoc @@ -0,0 +1,80 @@ += Community + +== Community + +=== Getting and keeping in touch + +==== Mailing lists + +Discussion and questions on Cassandra’s usage and development happens +mainly on the following mailing lists: + +* http://www.mail-archive.com/user@cassandra.apache.org/[Users]: General +mailing list for user questions and discussions. This is also where new +releases are announced +(mailto:user-subscribe@cassandra.apache.org[subscribe] | +mailto:user-unsubscribe@cassandra.apache.org[unsubscribe] | +https://lists.apache.org/list.html?user@cassandra.apache.org[Archives]). +* http://www.mail-archive.com/dev@cassandra.apache.org/[Developers]: +Questions and discussions related to Cassandra development +(mailto:dev-subscribe@cassandra.apache.org[subscribe] | +mailto:dev-unsubscribe@cassandra.apache.org[unsubscribe] | +https://lists.apache.org/list.html?dev@cassandra.apache.org[Archives]). +* http://www.mail-archive.com/commits@cassandra.apache.org/[Commits]: +Notification on commits done to the source repository and on +https://issues.apache.org/jira/browse/CASSANDRA[JIRA] updates. This is a +fairly noisy mailing list mostly useful for Cassandra developers and +those who would like to keep close tabs on Cassandra’s development +(mailto:commits-subscribe@cassandra.apache.org[subscribe] | +mailto:commits-unsubscribe@cassandra.apache.org[unsubscribe] | +https://lists.apache.org/list.html?commits@cassandra.apache.org[Archives]). + +==== Slack + +We have recently moved to the ASF Slack organization for all chat. +Please https://s.apache.org/slack-invite[sign up for an account] to +participate. + +* `#cassandra` - for user questions and general discussions +* `#cassandra-dev` - strictly for questions or discussions related to +Cassandra development +* `#cassandra-builds` - results of automated test builds +* `#cassandra-builds-patches` - results of patch test builds + +=== Stack Overflow + +You can also check the +http://stackoverflow.com/questions/tagged/cassandra[Q&A about using +Cassandra] on Stack Overflow. + +=== Books and publications + +* http://shop.oreilly.com/product/0636920299837.do[Cassandra: The +Definitive Guide, 3rd Edition], by Jeff Carpenter and Eben Hewitt. +Updated for Cassandra 4.0 +* https://www.amazon.com/Mastering-Apache-Cassandra-Nishant-Neeraj/dp/1784392618/[Mastering +Apache Cassandra, 2nd Edition], by Nishant Neeraj +* https://www.amazon.com/Learning-Apache-Cassandra-Tolerant-Real-Time/dp/1783989203/[Learning +Apache Cassandra - Manage Fault Tolerant and Scalable Real-Time Data], +by Mat Brown +* https://dl.acm.org/citation.cfm?id=1773922[Cassandra: a decentralized +structured storage system], by Avinash Lakshman and Prashant Malik + +=== Third-party projects + +There are a number of third-party Cassandra projects that could be +useful. Check out this +https://cassandra.apache.org/third-party/[listing]. + +=== Reporting bugs + +If you encounter a problem with Cassandra, the first places to ask for +help are the link:#mailing[user mailing list] and the `#cassandra` +https://s.apache.org/slack-invite[Slack channel]. + +If, after having asked for help, you suspect that you have found a bug +in Cassandra, you should report it by opening a ticket through the +https://issues.apache.org/jira/browse/CASSANDRA[Apache Cassandra JIRA +tracking system]. Please provide as much detail as you can on your +problem. Don’t forget to indicate which version of Cassandra you are +running and on which environment. diff --git a/doc/source/modules/REST/pages/download.adoc b/doc/source/modules/REST/pages/download.adoc new file mode 100644 index 000000000000..47ff79e7c1c6 --- /dev/null +++ b/doc/source/modules/REST/pages/download.adoc @@ -0,0 +1,150 @@ += Download + +== Downloading Cassandra + +=== Latest Beta Version + +Download the latest Apache Cassandra 4.0 beta release: \{\{ ``latest'' | +full_release_link }}. + +=== Latest Stable Version + +Download the latest Apache Cassandra 3.11 release: \{\{ ``3.11'' | +full_release_link }}. + +=== Older Supported Releases + +The following older Cassandra releases are still supported: + +* Apache Cassandra 3.0 is supported until *6 months after 4.0 release +(date TBD)*. The latest release is \{\{ ``3.0'' | full_release_link }}. +* Apache Cassandra 2.2 is supported until *4.0 release (date TBD)*. The +latest release is \{\{ ``2.2'' | full_release_link }}. +* Apache Cassandra 2.1 is supported until *4.0 release (date TBD)* with +*critical fixes only*. The latest release is \{\{ ``2.1'' | +full_release_link }}. + +Older (unsupported) versions of Cassandra are +http://archive.apache.org/dist/cassandra/[archived here]. + +=== Installation from Debian packages + +* For the `` specify the major version number, without +dot, and with an appended `x`. +* The latest `` is `311x`. +* For older releases, the `` can be one of `30x`, `22x`, +or `21x`. +* Add the Apache repository of Cassandra to +`/etc/apt/sources.list.d/cassandra.sources.list`, for example for the +latest 3.11 version: + +.... +echo "deb https://downloads.apache.org/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list +.... + +* Add the Apache Cassandra repository keys: + +.... +curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add - +.... + +* Update the repositories: + +.... +sudo apt-get update +.... + +* If you encounter this error: + +.... +GPG error: http://www.apache.org 311x InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A278B781FE4B2BDA +.... + +Then add the public key A278B781FE4B2BDA as follows: + +.... +sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-key A278B781FE4B2BDA +.... + +and repeat `sudo apt-get update`. The actual key may be different, you +get it from the error message itself. For a full list of Apache +contributors public keys, you can refer to +https://downloads.apache.org/cassandra/KEYS. + +* Install Cassandra: + +.... +sudo apt-get install cassandra +.... + +* You can start Cassandra with `sudo service cassandra start` and stop +it with `sudo service cassandra stop`. However, normally the service +will start automatically. For this reason be sure to stop it if you need +to make any configuration changes. +* Verify that Cassandra is running by invoking `nodetool status` from +the command line. +* The default location of configuration files is `/etc/cassandra`. +* The default location of log and data directories is +`/var/log/cassandra/` and `/var/lib/cassandra`. +* Start-up options (heap size, etc) can be configured in +`/etc/default/cassandra`. + +=== Installation from RPM packages + +* For the `` specify the major version number, without +dot, and with an appended `x`. +* The latest `` is `311x`. +* For older releases, the `` can be one of `30x`, `22x`, +or `21x`. +* (Not all versions of Apache Cassandra are available, since building +RPMs is a recent addition to the project.) +* Add the Apache repository of Cassandra to +`/etc/yum.repos.d/cassandra.repo`, for example for the latest 3.11 +version: + +[source,text] +---- +[cassandra] +name=Apache Cassandra +baseurl=https://downloads.apache.org/cassandra/redhat/311x/ +gpgcheck=1 +repo_gpgcheck=1 +gpgkey=https://downloads.apache.org/cassandra/KEYS +---- + +* Install Cassandra, accepting the gpg key import prompts: + +.... +sudo yum install cassandra +.... + +Start Cassandra (will not start automatically): + +.... +service cassandra start +.... + +Systemd based distributions may require to run `systemctl daemon-reload` +once to make Cassandra available as a systemd service. This should +happen automatically by running the command above. + +Make Cassandra start automatically after reboot: + +.... +chkconfig cassandra on +.... + +Please note that official RPMs for Apache Cassandra only have been +available recently and are not tested thoroughly on all platforms yet. +We appreciate your feedback and support and ask you to post details on +any issues in the +https://issues.apache.org/jira/browse/CASSANDRA-13433[corresponding Jira +ticket]. + +=== Source + +Development is done in the Apache Git repository. To check out a copy: + +.... +git clone https://gitbox.apache.org/repos/asf/cassandra.git +.... diff --git a/doc/source/modules/REST/pages/third-party.adoc b/doc/source/modules/REST/pages/third-party.adoc new file mode 100644 index 000000000000..ffde41a1a9c0 --- /dev/null +++ b/doc/source/modules/REST/pages/third-party.adoc @@ -0,0 +1,173 @@ += Third-party projects + +== Third-party projects + +=== Cassandra as-a-Service cloud offerings + +* https://aiven.io/cassandra[Aiven for Apache Cassandra]: Aiven for +Apache Cassandra is a fully managed NoSQL database, deployable in the +cloud of your choice. Snap it into your existing workflows with the +click of a button, automate away the mundane tasks, and focus on +building your core apps. Now running Cassandra 3.11. +* https://aws.amazon.com/keyspaces/[Amazon Keyspaces (for Apache +Cassandra)]: Scalable, highly available, and managed Apache +Cassandra–compatible database service. +* https://astra.datastax.com[DataStax Astra]: Cloud-native database +as-a-service built on Apache Cassandra™ complete with a free-tier and +CQL, REST and GraphQL APIs for faster development. Deployable in AWS and +GCP. +* https://www.instaclustr.com/solutions/managed-apache-cassandra[Instaclustr +Hosted & Managed Apache Cassandra as a Service]: Instaclustr provides a +fully managed and SOC 2 certified hosted & managed service for Apache +Cassandra® on AWS, Azure, GCP and IBM Cloud. + +=== Cassandra installation tools + +* https://hub.docker.com/_/cassandra[Docker community Cassandra images]: +Docker images for Apache Cassandra maintained by the Docker community +* https://downloads.datastax.com/#desktop[DataStax Desktop]: +Cross-platform (Windows, MacOSX, Linux) application that allows +developers to quickly explore Apache Cassandra™ with a few clicks on +their laptop, complete with tutorials and walkthroughs. +* https://github.com/thelastpickle/tlp-cluster[The Last Pickle +tlp-cluster]: tlp-cluster, a tool for launching Cassandra clusters in +AWS (DataStax) + +=== Cassandra tools + +* https://cassandra.link[cassandra.link]: Curated site with tools, along +with https://cassandra.tools[cassandra.tools]. +* https://github.com/criteo/cassandra_exporter[Cassandra Prometheus +Exporter]: Standalone application which exports Cassandra metrics +through a prometheus friendly endpoint +* https://downloads.datastax.com/#bulk-loader[DataStax Bulk Loader]: +Easy-to-use command line utility for loading and unloading JSON or CSV +files to/from the database, counting rows in tables and identifying +large partitions. +* https://github.com/datastax/metric-collector-for-apache-cassandra[DataStax +Metrics Collector for Cassandra]: Based on Collectd, aggregates OS and +Cassandra metrics along with diagnostic events to facilitate problem +resolution and remediation +* https://hackolade.com/nosqldb.html#cassandra[Hackolade]: Visual data +modeling tool for Cassandra +* https://github.com/thelastpickle/cassandra-medusa[The Last Pickle +Medusa]: Apache Cassandra Backup and Restore Tool (DataStax) +* https://github.com/thelastpickle/cassandra-reaper[The Last Pickle +Reaper]: Automated repair tool for Apache Cassandra (DataStax) +* https://github.com/thelastpickle/tlp-stress[The Last Pickle Cassandra +stress tool, tlp-stress]: A workload-centric stress tool for Apache +Cassandra. Designed for simplicity, no math degree required. (DataStax) +* https://github.com/nosqlbench/nosqlbench[NoSQLBench]: Pluggable +benchmarking suite for Cassandra and other distributed systems + +=== Cassandra Kubernetes operators + +* https://github.com/mesosphere/kudo-cassandra-operator[D2iQ Cassandra +Kudo Operator]: The KUDO Cassandra Operator makes it easy to deploy and +manage Apache Cassandra on Kubernetes. +* https://github.com/datastax/cass-operator[DataStax cass-operator]: The +DataStax Kubernetes Operator for Apache Cassandra +* https://github.com/instaclustr/cassandra-operator[Instaclustr +cassandra-operator]: The Cassandra operator manages Cassandra clusters +deployed to Kubernetes and automates tasks related to operating a +Cassandra cluster. +* https://orange-opensource.github.io/casskop/[Orange CassKop]: The +Orange Cassandra operator is a Kubernetes operator to automate +provisioning, management, autoscaling and operations of Apache Cassandra +clusters deployed to K8s. +* https://github.com/sky-uk/cassandra-operator[Sky Cassandra Operator]: +The Sky Cassandra Operator is a Kubernetes operator that manages +Cassandra clusters inside Kubernetes. + +=== Cassandra management sidecars + +* https://github.com/apache/cassandra-sidecar[Apache Cassandra +cassandra-sidecar]: Sidecar for the highly scalable Apache Cassandra +database, built as part of the Apache Cassandra project. +* https://github.com/datastax/management-api-for-apache-cassandra[DataStax +Management API for Apache Cassandra]: RESTful / Secure Management +Sidecar for Apache Cassandra +* https://github.com/datastax/spring-boot[DataStax Spring Boot]: Spring +Boot extension +* https://github.com/instaclustr/cassandra-sidecar[Instaclustr +cassandra-sidecar]: This repository is home of a sidecar for Apache +Cassandra database. Sidecar is meant to be run alongside of Cassandra +instance and sidecar talks to Cassandra via JMX. + +=== Developer Frameworks + +* http://r4fek.github.io/django-cassandra-engine/[Django Cassandra +Engine]: Cassandra backend for Django Framework that allows you to use +Cqlengine directly in your project. +* https://express-cassandra.readthedocs.io/en/stable/[Express +Cassandra]: Express-Cassandra is a Cassandra ORM/ODM/OGM for NodeJS with +Elassandra & JanusGraph Support. +* https://quarkus.io/guides/cassandra[Quarkus extension for Apache +Cassandra]: An Apache Cassandra(R) extension for Quarkus. Quarkus is A +Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM, +crafted from the best of breed Java libraries and standards. +* https://spring.io/projects/spring-data-cassandra[Spring Data +Cassandra]: With the power to stay at a high level with annotated POJOs, +or at a low level with high performance data ingestion capabilities, the +Spring Data for Apache Cassandra templates are sure to meet every +application need +* https://www.testcontainers.org/modules/databases/cassandra/[TestContainers]: +Testcontainers is a Java library that supports JUnit tests, providing +lightweight, throwaway instances of common databases, Selenium web +browsers, or anything else that can run in a Docker container. + +=== Cassandra connectors + +==== Apache Kafka + +* https://www.confluent.io/hub/confluentinc/kafka-connect-cassandra[Confluent +Connect Cassandra]: The Confluent Cassandra Sink Connector is used to +move messages from Kafka into Apache Cassandra. +* https://downloads.datastax.com/#akc[DataStax Sink Connector]: The +DataStax Apache Kafka Connector automatically takes records from Kafka +topics and writes them to a DataStax Enterprise or Apache Cassandra™ +database. This sink connector is deployed in the Kafka Connect framework +and removes the need to build a custom solution to move data between +these two systems. +* https://github.com/debezium/debezium-incubator/tree/master/debezium-connector-cassandra[Debezium +Source Connector]: This connector is currently in incubating state, and +Cassandra is different from the other Debezium connectors since it is +not implemented on top of the Kafka Connect framework. +* https://docs.lenses.io/connectors/sink/cassandra.html[Lenses Sink +Connector]: The Cassandra Sink allows you to write events from Kafka to +Cassandra. The connector converts the value from the Kafka Connect +SinkRecords to JSON and uses Cassandra’s JSON insert functionality to +insert the rows. The task expects pre-created tables in Cassandra. +* https://docs.lenses.io/connectors/source/cassandra.html[Lenses Source +Connector]: Kafka Connect Cassandra is a Source Connector for reading +data from Cassandra and writing to Kafka. + +==== Apache Spark + +* https://github.com/datastax/spark-cassandra-connector[DataStax Spark +Cassandra Connector]: This library lets you expose Cassandra tables as +Spark RDDs and Datasets/DataFrames, write Spark RDDs and +Datasets/DataFrames to Cassandra tables, and execute arbitrary CQL +queries in your Spark applications. + +==== Apache Flink + +* https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/cassandra.html[Flink +Sink Connector]: This connector provides sinks that writes data into a +Apache Cassandra database. + +==== Apache Pulsar + +* https://pulsar.apache.org/docs/en/io-quickstart/#connect-pulsar-to-cassandra[Pulsar +Sink Connector]: The Pulsar Cassandra Sink connector is used to write +messages to a Cassandra Cluster. + +==== Professional Support + +* https://luna.datastax.com/[DataStax Luna], +https://www.datastax.com/services/support/premium-support[DataStax +Premium Support], +https://www.datastax.com/services/professional-services[DataStax +Professional Services] +* https://www.instaclustr.com/services/[Instacluster] +* https://opencredo.com/about-us/[Open Credo] diff --git a/doc/test_docker_run.sh b/doc/test_docker_run.sh deleted file mode 100644 index 595a0c872e71..000000000000 --- a/doc/test_docker_run.sh +++ /dev/null @@ -1,5 +0,0 @@ -docker run -i -t \ - --volume $(pwd)/source/modules/cassandra/examples/TEXT/NODETOOL:/antora/cassandra/doc/source/modules/cassandra/examples/TEXT/NODETOOL \ - --volume $(pwd)/source/modules/cassandra/pages/tools/nodetool:/antora/cassandra/doc/source/modules/cassandra/pages/tools/nodetool \ - --volume $(pwd)/source/modules/cassandra/pages/configuration:/antora/cassandra/doc/source/modules/cassandra/pages/configuration \ - cassandra-docs:latest From e9a811d0847279622b640390f9139c17591e6d06 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 13 Aug 2020 15:57:45 -0700 Subject: [PATCH 065/115] test 3 --- doc/source/modules/REST/pages/community.adoc | 16 +- doc/source/modules/ROOT/pages/index.adoc | 4 + doc/source/modules/other/nav.adoc | 5 - .../modules/other/pages/apachecon_cfp.adoc | 83 --------- doc/source/modules/other/pages/download.adoc | 150 --------------- .../modules/other/pages/third-party.adoc | 173 ------------------ 6 files changed, 11 insertions(+), 420 deletions(-) delete mode 100644 doc/source/modules/other/nav.adoc delete mode 100644 doc/source/modules/other/pages/apachecon_cfp.adoc delete mode 100644 doc/source/modules/other/pages/download.adoc delete mode 100644 doc/source/modules/other/pages/third-party.adoc diff --git a/doc/source/modules/REST/pages/community.adoc b/doc/source/modules/REST/pages/community.adoc index 0fa9be20bc46..b8afe4a24740 100644 --- a/doc/source/modules/REST/pages/community.adoc +++ b/doc/source/modules/REST/pages/community.adoc @@ -1,10 +1,8 @@ = Community -== Community +== Getting and keeping in touch -=== Getting and keeping in touch - -==== Mailing lists +== Mailing lists Discussion and questions on Cassandra’s usage and development happens mainly on the following mailing lists: @@ -29,7 +27,7 @@ those who would like to keep close tabs on Cassandra’s development mailto:commits-unsubscribe@cassandra.apache.org[unsubscribe] | https://lists.apache.org/list.html?commits@cassandra.apache.org[Archives]). -==== Slack +== Slack We have recently moved to the ASF Slack organization for all chat. Please https://s.apache.org/slack-invite[sign up for an account] to @@ -41,13 +39,13 @@ Cassandra development * `#cassandra-builds` - results of automated test builds * `#cassandra-builds-patches` - results of patch test builds -=== Stack Overflow +== Stack Overflow You can also check the http://stackoverflow.com/questions/tagged/cassandra[Q&A about using Cassandra] on Stack Overflow. -=== Books and publications +== Books and publications * http://shop.oreilly.com/product/0636920299837.do[Cassandra: The Definitive Guide, 3rd Edition], by Jeff Carpenter and Eben Hewitt. @@ -60,13 +58,13 @@ by Mat Brown * https://dl.acm.org/citation.cfm?id=1773922[Cassandra: a decentralized structured storage system], by Avinash Lakshman and Prashant Malik -=== Third-party projects +== Third-party projects There are a number of third-party Cassandra projects that could be useful. Check out this https://cassandra.apache.org/third-party/[listing]. -=== Reporting bugs +== Reporting bugs If you encounter a problem with Cassandra, the first places to ask for help are the link:#mailing[user mailing list] and the `#cassandra` diff --git a/doc/source/modules/ROOT/pages/index.adoc b/doc/source/modules/ROOT/pages/index.adoc index b01e65fea261..7d73f07e25ee 100644 --- a/doc/source/modules/ROOT/pages/index.adoc +++ b/doc/source/modules/ROOT/pages/index.adoc @@ -44,3 +44,7 @@ to do so by submitting your contribution like any other patch following == Meta information * xref:bugs.adoc[Reporting bugs] * xref:contactus.adoc[Contact us] + +== The rest of the information +* xref:REST:community.adoc[Community] +* xref:REST:download.adoc[Download] diff --git a/doc/source/modules/other/nav.adoc b/doc/source/modules/other/nav.adoc deleted file mode 100644 index ac6784114952..000000000000 --- a/doc/source/modules/other/nav.adoc +++ /dev/null @@ -1,5 +0,0 @@ -* Other -** xref:community.adoc[Community] -*** xref:third-party.adoc[Third-party] -*** xref:download.adoc[Download] - diff --git a/doc/source/modules/other/pages/apachecon_cfp.adoc b/doc/source/modules/other/pages/apachecon_cfp.adoc deleted file mode 100644 index 288f70a265c5..000000000000 --- a/doc/source/modules/other/pages/apachecon_cfp.adoc +++ /dev/null @@ -1,83 +0,0 @@ -= Announcing the 2019 Apache Cassandra Summit - -== Announcing the 2019 Apache Cassandra Summit - -Join the Apache Cassandra community for the 2019 Apache Cassandra -Summit, hosted with ApacheCon in Las Vegas, NV (Sept 9 - 13). - -''''' - -=== Apache Cassandra at ApacheCon - -image:/img/apachecon-2019.jpg[ApacheCon 2019]\{:style=``float: right; -width: 400px''} - -For more information about other events at ApacheCon, see -https://apachecon.com/acna19/index.html[ApacheCon 2019]. - -  - -==== Day One: Next Generation Cassandra Conference (NGCC) - -NGCC (Next Generation Cassandra Conference), a one-day event for Apache -Cassandra contributors and large system operators to meet, discuss, and -plan future development in the project. NGCC will take place on -*Tuesday, September 10th*. - -NGCC is an advanced event targeted toward Apache Cassandra contributors -and large system / platform operators. Content will focus on Cassandra -internals and is geared toward those with detailed knowledge of the -codebase and architecture. All are welcome to attend. - -  - -==== Day Two: Apache Cassandra Summit - -The Apache Cassandra Summit, a one-day event for Apache Cassandra users -to meet, network, and learn about what’s new and what’s coming in -Cassandra. The Apache Cassandra Summit will be held on *Wednesday, Sept -11*. - -The Apache Cassandra Summit is targeted toward a wider audience. Topics -should be interesting and accessible to those whose first introduction -to Cassandra is at this event, and those who have been active in the -community for many years. - -''''' - -=== Call for Presentations - -We’re excited to announce the Call for Presentations is now open for -both, closing Monday, May 13 at 2pm BST (UTC+1). - -  - -==== Apache Cassandra Summit CFP (40-minute presentation, 5-minute Q&A) – - -*Example proposals might include:* - Lessons learned operating Apache -Cassandra at scale. - Customizations and ways members of the community -have extended Apache Cassandra to make it a great fit for their use -case. - Stability improvements, performance enhancements, and new -features in an upcoming Cassandra release. - Something we haven’t -thought about that a general audience would be interested to hear. - -  - -==== Next Generation Cassandra Conference CFP (30-minute presentation, 15m breakout) – - -*Example proposals might include:* - Presentations from contributors and -large operators covering pain points and proposals to address them - -Planned or proposed improvements in specific areas of the Apache -Cassandra codebase - Planned or proposed improvements we can make to -strengthen and empower the Apache Cassandra community. - Something we -haven’t thought about that advanced operators / contributors would be -interested to hear. - -  - -https://asf.jamhosted.net/cfp.html[Click here] to submit a proposal for -the Apache Cassandra Summit or NGCC. - -When submitting, please ensure you select ``Cassandra'' as the category. -For NGCC submissions, please include ``NGCC Proposal'' in the ``Optional -Notes'' field. diff --git a/doc/source/modules/other/pages/download.adoc b/doc/source/modules/other/pages/download.adoc deleted file mode 100644 index 47ff79e7c1c6..000000000000 --- a/doc/source/modules/other/pages/download.adoc +++ /dev/null @@ -1,150 +0,0 @@ -= Download - -== Downloading Cassandra - -=== Latest Beta Version - -Download the latest Apache Cassandra 4.0 beta release: \{\{ ``latest'' | -full_release_link }}. - -=== Latest Stable Version - -Download the latest Apache Cassandra 3.11 release: \{\{ ``3.11'' | -full_release_link }}. - -=== Older Supported Releases - -The following older Cassandra releases are still supported: - -* Apache Cassandra 3.0 is supported until *6 months after 4.0 release -(date TBD)*. The latest release is \{\{ ``3.0'' | full_release_link }}. -* Apache Cassandra 2.2 is supported until *4.0 release (date TBD)*. The -latest release is \{\{ ``2.2'' | full_release_link }}. -* Apache Cassandra 2.1 is supported until *4.0 release (date TBD)* with -*critical fixes only*. The latest release is \{\{ ``2.1'' | -full_release_link }}. - -Older (unsupported) versions of Cassandra are -http://archive.apache.org/dist/cassandra/[archived here]. - -=== Installation from Debian packages - -* For the `` specify the major version number, without -dot, and with an appended `x`. -* The latest `` is `311x`. -* For older releases, the `` can be one of `30x`, `22x`, -or `21x`. -* Add the Apache repository of Cassandra to -`/etc/apt/sources.list.d/cassandra.sources.list`, for example for the -latest 3.11 version: - -.... -echo "deb https://downloads.apache.org/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list -.... - -* Add the Apache Cassandra repository keys: - -.... -curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add - -.... - -* Update the repositories: - -.... -sudo apt-get update -.... - -* If you encounter this error: - -.... -GPG error: http://www.apache.org 311x InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A278B781FE4B2BDA -.... - -Then add the public key A278B781FE4B2BDA as follows: - -.... -sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-key A278B781FE4B2BDA -.... - -and repeat `sudo apt-get update`. The actual key may be different, you -get it from the error message itself. For a full list of Apache -contributors public keys, you can refer to -https://downloads.apache.org/cassandra/KEYS. - -* Install Cassandra: - -.... -sudo apt-get install cassandra -.... - -* You can start Cassandra with `sudo service cassandra start` and stop -it with `sudo service cassandra stop`. However, normally the service -will start automatically. For this reason be sure to stop it if you need -to make any configuration changes. -* Verify that Cassandra is running by invoking `nodetool status` from -the command line. -* The default location of configuration files is `/etc/cassandra`. -* The default location of log and data directories is -`/var/log/cassandra/` and `/var/lib/cassandra`. -* Start-up options (heap size, etc) can be configured in -`/etc/default/cassandra`. - -=== Installation from RPM packages - -* For the `` specify the major version number, without -dot, and with an appended `x`. -* The latest `` is `311x`. -* For older releases, the `` can be one of `30x`, `22x`, -or `21x`. -* (Not all versions of Apache Cassandra are available, since building -RPMs is a recent addition to the project.) -* Add the Apache repository of Cassandra to -`/etc/yum.repos.d/cassandra.repo`, for example for the latest 3.11 -version: - -[source,text] ----- -[cassandra] -name=Apache Cassandra -baseurl=https://downloads.apache.org/cassandra/redhat/311x/ -gpgcheck=1 -repo_gpgcheck=1 -gpgkey=https://downloads.apache.org/cassandra/KEYS ----- - -* Install Cassandra, accepting the gpg key import prompts: - -.... -sudo yum install cassandra -.... - -Start Cassandra (will not start automatically): - -.... -service cassandra start -.... - -Systemd based distributions may require to run `systemctl daemon-reload` -once to make Cassandra available as a systemd service. This should -happen automatically by running the command above. - -Make Cassandra start automatically after reboot: - -.... -chkconfig cassandra on -.... - -Please note that official RPMs for Apache Cassandra only have been -available recently and are not tested thoroughly on all platforms yet. -We appreciate your feedback and support and ask you to post details on -any issues in the -https://issues.apache.org/jira/browse/CASSANDRA-13433[corresponding Jira -ticket]. - -=== Source - -Development is done in the Apache Git repository. To check out a copy: - -.... -git clone https://gitbox.apache.org/repos/asf/cassandra.git -.... diff --git a/doc/source/modules/other/pages/third-party.adoc b/doc/source/modules/other/pages/third-party.adoc deleted file mode 100644 index ffde41a1a9c0..000000000000 --- a/doc/source/modules/other/pages/third-party.adoc +++ /dev/null @@ -1,173 +0,0 @@ -= Third-party projects - -== Third-party projects - -=== Cassandra as-a-Service cloud offerings - -* https://aiven.io/cassandra[Aiven for Apache Cassandra]: Aiven for -Apache Cassandra is a fully managed NoSQL database, deployable in the -cloud of your choice. Snap it into your existing workflows with the -click of a button, automate away the mundane tasks, and focus on -building your core apps. Now running Cassandra 3.11. -* https://aws.amazon.com/keyspaces/[Amazon Keyspaces (for Apache -Cassandra)]: Scalable, highly available, and managed Apache -Cassandra–compatible database service. -* https://astra.datastax.com[DataStax Astra]: Cloud-native database -as-a-service built on Apache Cassandra™ complete with a free-tier and -CQL, REST and GraphQL APIs for faster development. Deployable in AWS and -GCP. -* https://www.instaclustr.com/solutions/managed-apache-cassandra[Instaclustr -Hosted & Managed Apache Cassandra as a Service]: Instaclustr provides a -fully managed and SOC 2 certified hosted & managed service for Apache -Cassandra® on AWS, Azure, GCP and IBM Cloud. - -=== Cassandra installation tools - -* https://hub.docker.com/_/cassandra[Docker community Cassandra images]: -Docker images for Apache Cassandra maintained by the Docker community -* https://downloads.datastax.com/#desktop[DataStax Desktop]: -Cross-platform (Windows, MacOSX, Linux) application that allows -developers to quickly explore Apache Cassandra™ with a few clicks on -their laptop, complete with tutorials and walkthroughs. -* https://github.com/thelastpickle/tlp-cluster[The Last Pickle -tlp-cluster]: tlp-cluster, a tool for launching Cassandra clusters in -AWS (DataStax) - -=== Cassandra tools - -* https://cassandra.link[cassandra.link]: Curated site with tools, along -with https://cassandra.tools[cassandra.tools]. -* https://github.com/criteo/cassandra_exporter[Cassandra Prometheus -Exporter]: Standalone application which exports Cassandra metrics -through a prometheus friendly endpoint -* https://downloads.datastax.com/#bulk-loader[DataStax Bulk Loader]: -Easy-to-use command line utility for loading and unloading JSON or CSV -files to/from the database, counting rows in tables and identifying -large partitions. -* https://github.com/datastax/metric-collector-for-apache-cassandra[DataStax -Metrics Collector for Cassandra]: Based on Collectd, aggregates OS and -Cassandra metrics along with diagnostic events to facilitate problem -resolution and remediation -* https://hackolade.com/nosqldb.html#cassandra[Hackolade]: Visual data -modeling tool for Cassandra -* https://github.com/thelastpickle/cassandra-medusa[The Last Pickle -Medusa]: Apache Cassandra Backup and Restore Tool (DataStax) -* https://github.com/thelastpickle/cassandra-reaper[The Last Pickle -Reaper]: Automated repair tool for Apache Cassandra (DataStax) -* https://github.com/thelastpickle/tlp-stress[The Last Pickle Cassandra -stress tool, tlp-stress]: A workload-centric stress tool for Apache -Cassandra. Designed for simplicity, no math degree required. (DataStax) -* https://github.com/nosqlbench/nosqlbench[NoSQLBench]: Pluggable -benchmarking suite for Cassandra and other distributed systems - -=== Cassandra Kubernetes operators - -* https://github.com/mesosphere/kudo-cassandra-operator[D2iQ Cassandra -Kudo Operator]: The KUDO Cassandra Operator makes it easy to deploy and -manage Apache Cassandra on Kubernetes. -* https://github.com/datastax/cass-operator[DataStax cass-operator]: The -DataStax Kubernetes Operator for Apache Cassandra -* https://github.com/instaclustr/cassandra-operator[Instaclustr -cassandra-operator]: The Cassandra operator manages Cassandra clusters -deployed to Kubernetes and automates tasks related to operating a -Cassandra cluster. -* https://orange-opensource.github.io/casskop/[Orange CassKop]: The -Orange Cassandra operator is a Kubernetes operator to automate -provisioning, management, autoscaling and operations of Apache Cassandra -clusters deployed to K8s. -* https://github.com/sky-uk/cassandra-operator[Sky Cassandra Operator]: -The Sky Cassandra Operator is a Kubernetes operator that manages -Cassandra clusters inside Kubernetes. - -=== Cassandra management sidecars - -* https://github.com/apache/cassandra-sidecar[Apache Cassandra -cassandra-sidecar]: Sidecar for the highly scalable Apache Cassandra -database, built as part of the Apache Cassandra project. -* https://github.com/datastax/management-api-for-apache-cassandra[DataStax -Management API for Apache Cassandra]: RESTful / Secure Management -Sidecar for Apache Cassandra -* https://github.com/datastax/spring-boot[DataStax Spring Boot]: Spring -Boot extension -* https://github.com/instaclustr/cassandra-sidecar[Instaclustr -cassandra-sidecar]: This repository is home of a sidecar for Apache -Cassandra database. Sidecar is meant to be run alongside of Cassandra -instance and sidecar talks to Cassandra via JMX. - -=== Developer Frameworks - -* http://r4fek.github.io/django-cassandra-engine/[Django Cassandra -Engine]: Cassandra backend for Django Framework that allows you to use -Cqlengine directly in your project. -* https://express-cassandra.readthedocs.io/en/stable/[Express -Cassandra]: Express-Cassandra is a Cassandra ORM/ODM/OGM for NodeJS with -Elassandra & JanusGraph Support. -* https://quarkus.io/guides/cassandra[Quarkus extension for Apache -Cassandra]: An Apache Cassandra(R) extension for Quarkus. Quarkus is A -Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM, -crafted from the best of breed Java libraries and standards. -* https://spring.io/projects/spring-data-cassandra[Spring Data -Cassandra]: With the power to stay at a high level with annotated POJOs, -or at a low level with high performance data ingestion capabilities, the -Spring Data for Apache Cassandra templates are sure to meet every -application need -* https://www.testcontainers.org/modules/databases/cassandra/[TestContainers]: -Testcontainers is a Java library that supports JUnit tests, providing -lightweight, throwaway instances of common databases, Selenium web -browsers, or anything else that can run in a Docker container. - -=== Cassandra connectors - -==== Apache Kafka - -* https://www.confluent.io/hub/confluentinc/kafka-connect-cassandra[Confluent -Connect Cassandra]: The Confluent Cassandra Sink Connector is used to -move messages from Kafka into Apache Cassandra. -* https://downloads.datastax.com/#akc[DataStax Sink Connector]: The -DataStax Apache Kafka Connector automatically takes records from Kafka -topics and writes them to a DataStax Enterprise or Apache Cassandra™ -database. This sink connector is deployed in the Kafka Connect framework -and removes the need to build a custom solution to move data between -these two systems. -* https://github.com/debezium/debezium-incubator/tree/master/debezium-connector-cassandra[Debezium -Source Connector]: This connector is currently in incubating state, and -Cassandra is different from the other Debezium connectors since it is -not implemented on top of the Kafka Connect framework. -* https://docs.lenses.io/connectors/sink/cassandra.html[Lenses Sink -Connector]: The Cassandra Sink allows you to write events from Kafka to -Cassandra. The connector converts the value from the Kafka Connect -SinkRecords to JSON and uses Cassandra’s JSON insert functionality to -insert the rows. The task expects pre-created tables in Cassandra. -* https://docs.lenses.io/connectors/source/cassandra.html[Lenses Source -Connector]: Kafka Connect Cassandra is a Source Connector for reading -data from Cassandra and writing to Kafka. - -==== Apache Spark - -* https://github.com/datastax/spark-cassandra-connector[DataStax Spark -Cassandra Connector]: This library lets you expose Cassandra tables as -Spark RDDs and Datasets/DataFrames, write Spark RDDs and -Datasets/DataFrames to Cassandra tables, and execute arbitrary CQL -queries in your Spark applications. - -==== Apache Flink - -* https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/cassandra.html[Flink -Sink Connector]: This connector provides sinks that writes data into a -Apache Cassandra database. - -==== Apache Pulsar - -* https://pulsar.apache.org/docs/en/io-quickstart/#connect-pulsar-to-cassandra[Pulsar -Sink Connector]: The Pulsar Cassandra Sink connector is used to write -messages to a Cassandra Cluster. - -==== Professional Support - -* https://luna.datastax.com/[DataStax Luna], -https://www.datastax.com/services/support/premium-support[DataStax -Premium Support], -https://www.datastax.com/services/professional-services[DataStax -Professional Services] -* https://www.instaclustr.com/services/[Instacluster] -* https://opencredo.com/about-us/[Open Credo] From 40161c07d066e1e64c11735c4e6995e4fbc083aa Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 13 Aug 2020 16:03:38 -0700 Subject: [PATCH 066/115] sitestuff --- doc/Makefile | 4 +- doc/site.yml | 10 +- doc/source/antora.yml | 2 +- doc/source/modules/ROOT/pages/index.adoc | 4 +- .../examples/TEXT/NODETOOL/assassinate.txt | 38 ------ .../pages/tools/nodetool/nodetool.txt | 126 +++++++++++++++++- doc/source/modules/other/pages/community.adoc | 80 ----------- .../modules/{REST => sitestuff}/nav.adoc | 0 .../pages/apachecon_cfp.adoc | 0 .../{REST => sitestuff}/pages/community.adoc | 0 .../{REST => sitestuff}/pages/download.adoc | 0 .../pages/third-party.adoc | 0 12 files changed, 135 insertions(+), 129 deletions(-) delete mode 100644 doc/source/modules/other/pages/community.adoc rename doc/source/modules/{REST => sitestuff}/nav.adoc (100%) rename doc/source/modules/{REST => sitestuff}/pages/apachecon_cfp.adoc (100%) rename doc/source/modules/{REST => sitestuff}/pages/community.adoc (100%) rename doc/source/modules/{REST => sitestuff}/pages/download.adoc (100%) rename doc/source/modules/{REST => sitestuff}/pages/third-party.adoc (100%) diff --git a/doc/Makefile b/doc/Makefile index 4687d05e65c4..4a6e4698cfee 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -40,8 +40,8 @@ gennodetool: .PHONY: html html: $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(ANTORAOPTS) $(ANTORACMD) $(ANTORAYAML) +# $(GENERATE_NODETOOL_DOCS) + $(ANTORAOPTS) $(ANTORACMD) --generator antora-site-generator-lunr $(ANTORAYAML) @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." diff --git a/doc/site.yml b/doc/site.yml index 423924a1f9f1..06418bd812c4 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -8,8 +8,8 @@ site: content: sources: - - url: /antora/cassandra - #- url: https://github.com/polandll/cassandra.git + #- url: /antora/cassandra + - url: https://github.com/polandll/cassandra.git branches: - 'doc_redo_asciidoc' - 'doc_redo_asciidoc3.11' @@ -18,8 +18,8 @@ content: ui: # Need to replace this with a direct github url rather than a local path bundle: - url: /antora/cassandra/doc/ui-bundle.zip - #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip + #url: /antora/cassandra/doc/ui-bundle.zip + url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: - path: ui.yml @@ -28,7 +28,7 @@ ui: - path: .nojekyll output: - clean: false + clean: true dir: ./build/html asciidoc: diff --git a/doc/source/antora.yml b/doc/source/antora.yml index 8dc2142cdf9a..e4e9ac88976e 100644 --- a/doc/source/antora.yml +++ b/doc/source/antora.yml @@ -3,5 +3,5 @@ version: '4.0' prerelease: -beta1 nav: - modules/ROOT/nav.adoc -- modules/REST/nav.adoc +- modules/sitestuff/nav.adoc - modules/cassandra/nav.adoc diff --git a/doc/source/modules/ROOT/pages/index.adoc b/doc/source/modules/ROOT/pages/index.adoc index 7d73f07e25ee..d7f9295def22 100644 --- a/doc/source/modules/ROOT/pages/index.adoc +++ b/doc/source/modules/ROOT/pages/index.adoc @@ -46,5 +46,5 @@ to do so by submitting your contribution like any other patch following * xref:contactus.adoc[Contact us] == The rest of the information -* xref:REST:community.adoc[Community] -* xref:REST:download.adoc[Download] +* xref:sitestuff:community.adoc[Community] +* xref:sitestuff:download.adoc[Download] diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt index baa42ed8feae..e69de29bb2d1 100644 --- a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt +++ b/doc/source/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt @@ -1,38 +0,0 @@ -NAME - nodetool assassinate - Forcefully remove a dead node without - re-replicating any data. Use as a last resort if you cannot removenode - -SYNOPSIS - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] assassinate [--] - -OPTIONS - -h , --host - Node hostname or ip address - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - - IP address of the endpoint to assassinate - - diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt index 3c236fe534f6..d7880e33a220 100644 --- a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt +++ b/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt @@ -1 +1,125 @@ -Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer). +usage: nodetool [(-pwf | --password-file )] + [(-h | --host )] [(-u | --username )] + [(-pp | --print-port)] [(-p | --port )] + [(-pw | --password )] [] + +The most commonly used nodetool commands are: + assassinate Forcefully remove a dead node without re-replicating any data. Use as a last resort if you cannot removenode + bootstrap Monitor/manage node's bootstrap process + cleanup Triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces + clearsnapshot Remove the snapshot with the given name from the given keyspaces. If no snapshotName is specified we will remove all snapshots + clientstats Print information about connected clients + compact Force a (major) compaction on one or more tables or user-defined compaction on given SSTables + compactionhistory Print history of compaction + compactionstats Print statistics on compactions + decommission Decommission the *node I am connecting to* + describecluster Print the name, snitch, partitioner and schema version of a cluster + describering Shows the token ranges info of a given keyspace + disableauditlog Disable the audit log + disableautocompaction Disable autocompaction for the given keyspace and table + disablebackup Disable incremental backup + disablebinary Disable native transport (binary protocol) + disablefullquerylog Disable the full query log + disablegossip Disable gossip (effectively marking the node down) + disablehandoff Disable storing hinted handoffs + disablehintsfordc Disable hints for a data center + disableoldprotocolversions Disable old protocol versions + drain Drain the node (stop accepting writes and flush all tables) + enableauditlog Enable the audit log + enableautocompaction Enable autocompaction for the given keyspace and table + enablebackup Enable incremental backup + enablebinary Reenable native transport (binary protocol) + enablefullquerylog Enable full query logging, defaults for the options are configured in cassandra.yaml + enablegossip Reenable gossip + enablehandoff Reenable future hints storing on the current node + enablehintsfordc Enable hints for a data center that was previsouly disabled + enableoldprotocolversions Enable old protocol versions + failuredetector Shows the failure detector information for the cluster + flush Flush one or more tables + garbagecollect Remove deleted data from one or more tables + gcstats Print GC Statistics + getbatchlogreplaythrottle Print batchlog replay throttle in KB/s. This is reduced proportionally to the number of nodes in the cluster. + getcompactionthreshold Print min and max compaction thresholds for a given table + getcompactionthroughput Print the MB/s throughput cap for compaction in the system + getconcurrency Get maximum concurrency for processing stages + getconcurrentcompactors Get the number of concurrent compactors in the system. + getconcurrentviewbuilders Get the number of concurrent view builders in the system + getendpoints Print the end points that owns the key + getinterdcstreamthroughput Print the Mb/s throughput cap for inter-datacenter streaming in the system + getlogginglevels Get the runtime logging levels + getmaxhintwindow Print the max hint window in ms + getseeds Get the currently in use seed node IP list excluding the node IP + getsstables Print the sstable filenames that own the key + getstreamthroughput Print the Mb/s throughput cap for streaming in the system + gettimeout Print the timeout of the given type in ms + gettraceprobability Print the current trace probability value + gossipinfo Shows the gossip information for the cluster + help Display help information + import Import new SSTables to the system + info Print node information (uptime, load, ...) + invalidatecountercache Invalidate the counter cache + invalidatekeycache Invalidate the key cache + invalidaterowcache Invalidate the row cache + join Join the ring + listsnapshots Lists all the snapshots along with the size on disk and true size. True size is the total size of all SSTables which are not backed up to disk. Size on disk is total size of the snapshot on disk. Total TrueDiskSpaceUsed does not make any SSTable deduplication. + move Move node on the token ring to a new token + netstats Print network information on provided host (connecting node by default) + pausehandoff Pause hints delivery process + profileload Low footprint profiling of activity for a period of time + proxyhistograms Print statistic histograms for network operations + rangekeysample Shows the sampled keys held across all keyspaces + rebuild Rebuild data by streaming from other nodes (similarly to bootstrap) + rebuild_index A full rebuild of native secondary indexes for a given table + refresh Load newly placed SSTables to the system without restart + refreshsizeestimates Refresh system.size_estimates + reloadlocalschema Reload local node schema from system tables + reloadseeds Reload the seed node list from the seed node provider + reloadssl Signals Cassandra to reload SSL certificates + reloadtriggers Reload trigger classes + relocatesstables Relocates sstables to the correct disk + removenode Show status of current node removal, force completion of pending removal or remove provided ID + repair Repair one or more tables + repair_admin list and fail incremental repair sessions + replaybatchlog Kick off batchlog replay and wait for finish + resetfullquerylog Stop the full query log and clean files in the configured full query log directory from cassandra.yaml as well as JMX + resetlocalschema Reset node's local schema and resync + resumehandoff Resume hints delivery process + ring Print information about the token ring + scrub Scrub (rebuild sstables for) one or more tables + setbatchlogreplaythrottle Set batchlog replay throttle in KB per second, or 0 to disable throttling. This will be reduced proportionally to the number of nodes in the cluster. + setcachecapacity Set global key, row, and counter cache capacities (in MB units) + setcachekeystosave Set number of keys saved by each cache for faster post-restart warmup. 0 to disable + setcompactionthreshold Set min and max compaction thresholds for a given table + setcompactionthroughput Set the MB/s throughput cap for compaction in the system, or 0 to disable throttling + setconcurrency Set maximum concurrency for processing stage + setconcurrentcompactors Set number of concurrent compactors in the system. + setconcurrentviewbuilders Set the number of concurrent view builders in the system + sethintedhandoffthrottlekb Set hinted handoff throttle in kb per second, per delivery thread. + setinterdcstreamthroughput Set the Mb/s throughput cap for inter-datacenter streaming in the system, or 0 to disable throttling + setlogginglevel Set the log level threshold for a given component or class. Will reset to the initial configuration if called with no parameters. + setmaxhintwindow Set the specified max hint window in ms + setstreamthroughput Set the Mb/s throughput cap for streaming in the system, or 0 to disable throttling + settimeout Set the specified timeout in ms, or 0 to disable timeout + settraceprobability Sets the probability for tracing any given request to value. 0 disables, 1 enables for all requests, 0 is the default + sjk Run commands of 'Swiss Java Knife'. Run 'nodetool sjk --help' for more information. + snapshot Take a snapshot of specified keyspaces or a snapshot of the specified table + status Print cluster information (state, load, IDs, ...) + statusautocompaction status of autocompaction of the given keyspace and table + statusbackup Status of incremental backup + statusbinary Status of native transport (binary protocol) + statusgossip Status of gossip + statushandoff Status of storing future hints on the current node + stop Stop compaction + stopdaemon Stop cassandra daemon + tablehistograms Print statistic histograms for a given table + tablestats Print statistics on tables + toppartitions Sample and print the most active partitions + tpstats Print usage statistics of thread pools + truncatehints Truncate all hints on the local node, or truncate hints for the endpoint(s) specified. + upgradesstables Rewrite sstables (for the requested tables) that are not on the current version (thus upgrading them to said current version) + verify Verify (check data checksum for) one or more tables + version Print cassandra version + viewbuildstatus Show progress of a materialized view build + +See 'nodetool help ' for more information on a specific command. + diff --git a/doc/source/modules/other/pages/community.adoc b/doc/source/modules/other/pages/community.adoc deleted file mode 100644 index 0fa9be20bc46..000000000000 --- a/doc/source/modules/other/pages/community.adoc +++ /dev/null @@ -1,80 +0,0 @@ -= Community - -== Community - -=== Getting and keeping in touch - -==== Mailing lists - -Discussion and questions on Cassandra’s usage and development happens -mainly on the following mailing lists: - -* http://www.mail-archive.com/user@cassandra.apache.org/[Users]: General -mailing list for user questions and discussions. This is also where new -releases are announced -(mailto:user-subscribe@cassandra.apache.org[subscribe] | -mailto:user-unsubscribe@cassandra.apache.org[unsubscribe] | -https://lists.apache.org/list.html?user@cassandra.apache.org[Archives]). -* http://www.mail-archive.com/dev@cassandra.apache.org/[Developers]: -Questions and discussions related to Cassandra development -(mailto:dev-subscribe@cassandra.apache.org[subscribe] | -mailto:dev-unsubscribe@cassandra.apache.org[unsubscribe] | -https://lists.apache.org/list.html?dev@cassandra.apache.org[Archives]). -* http://www.mail-archive.com/commits@cassandra.apache.org/[Commits]: -Notification on commits done to the source repository and on -https://issues.apache.org/jira/browse/CASSANDRA[JIRA] updates. This is a -fairly noisy mailing list mostly useful for Cassandra developers and -those who would like to keep close tabs on Cassandra’s development -(mailto:commits-subscribe@cassandra.apache.org[subscribe] | -mailto:commits-unsubscribe@cassandra.apache.org[unsubscribe] | -https://lists.apache.org/list.html?commits@cassandra.apache.org[Archives]). - -==== Slack - -We have recently moved to the ASF Slack organization for all chat. -Please https://s.apache.org/slack-invite[sign up for an account] to -participate. - -* `#cassandra` - for user questions and general discussions -* `#cassandra-dev` - strictly for questions or discussions related to -Cassandra development -* `#cassandra-builds` - results of automated test builds -* `#cassandra-builds-patches` - results of patch test builds - -=== Stack Overflow - -You can also check the -http://stackoverflow.com/questions/tagged/cassandra[Q&A about using -Cassandra] on Stack Overflow. - -=== Books and publications - -* http://shop.oreilly.com/product/0636920299837.do[Cassandra: The -Definitive Guide, 3rd Edition], by Jeff Carpenter and Eben Hewitt. -Updated for Cassandra 4.0 -* https://www.amazon.com/Mastering-Apache-Cassandra-Nishant-Neeraj/dp/1784392618/[Mastering -Apache Cassandra, 2nd Edition], by Nishant Neeraj -* https://www.amazon.com/Learning-Apache-Cassandra-Tolerant-Real-Time/dp/1783989203/[Learning -Apache Cassandra - Manage Fault Tolerant and Scalable Real-Time Data], -by Mat Brown -* https://dl.acm.org/citation.cfm?id=1773922[Cassandra: a decentralized -structured storage system], by Avinash Lakshman and Prashant Malik - -=== Third-party projects - -There are a number of third-party Cassandra projects that could be -useful. Check out this -https://cassandra.apache.org/third-party/[listing]. - -=== Reporting bugs - -If you encounter a problem with Cassandra, the first places to ask for -help are the link:#mailing[user mailing list] and the `#cassandra` -https://s.apache.org/slack-invite[Slack channel]. - -If, after having asked for help, you suspect that you have found a bug -in Cassandra, you should report it by opening a ticket through the -https://issues.apache.org/jira/browse/CASSANDRA[Apache Cassandra JIRA -tracking system]. Please provide as much detail as you can on your -problem. Don’t forget to indicate which version of Cassandra you are -running and on which environment. diff --git a/doc/source/modules/REST/nav.adoc b/doc/source/modules/sitestuff/nav.adoc similarity index 100% rename from doc/source/modules/REST/nav.adoc rename to doc/source/modules/sitestuff/nav.adoc diff --git a/doc/source/modules/REST/pages/apachecon_cfp.adoc b/doc/source/modules/sitestuff/pages/apachecon_cfp.adoc similarity index 100% rename from doc/source/modules/REST/pages/apachecon_cfp.adoc rename to doc/source/modules/sitestuff/pages/apachecon_cfp.adoc diff --git a/doc/source/modules/REST/pages/community.adoc b/doc/source/modules/sitestuff/pages/community.adoc similarity index 100% rename from doc/source/modules/REST/pages/community.adoc rename to doc/source/modules/sitestuff/pages/community.adoc diff --git a/doc/source/modules/REST/pages/download.adoc b/doc/source/modules/sitestuff/pages/download.adoc similarity index 100% rename from doc/source/modules/REST/pages/download.adoc rename to doc/source/modules/sitestuff/pages/download.adoc diff --git a/doc/source/modules/REST/pages/third-party.adoc b/doc/source/modules/sitestuff/pages/third-party.adoc similarity index 100% rename from doc/source/modules/REST/pages/third-party.adoc rename to doc/source/modules/sitestuff/pages/third-party.adoc From b10fd2d1d6781de90a85345d0db98bf992b8cb31 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 13 Aug 2020 18:10:55 -0700 Subject: [PATCH 067/115] switch back to container urls --- doc/site.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/site.yml b/doc/site.yml index 06418bd812c4..56aeb6925e4c 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -8,8 +8,8 @@ site: content: sources: - #- url: /antora/cassandra - - url: https://github.com/polandll/cassandra.git + - url: /antora/cassandra + #- url: https://github.com/polandll/cassandra.git branches: - 'doc_redo_asciidoc' - 'doc_redo_asciidoc3.11' @@ -18,8 +18,8 @@ content: ui: # Need to replace this with a direct github url rather than a local path bundle: - #url: /antora/cassandra/doc/ui-bundle.zip - url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip + url: /antora/cassandra/doc/ui-bundle.zip + #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: - path: ui.yml From 423673d2ab3a3fbf838e415cfac45ab798e628b2 Mon Sep 17 00:00:00 2001 From: polandll Date: Mon, 17 Aug 2020 17:08:41 -0700 Subject: [PATCH 068/115] rewrite new ui-bundle --- doc/ui-bundle.zip | Bin 423958 -> 423958 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/ui-bundle.zip b/doc/ui-bundle.zip index 3c5ef7fc68f4fcaf8bf6b647eb170c4ed2c61b2b..7d5450ccabf2cb9e9830e082e3352ba8f5802179 100644 GIT binary patch delta 1389 zcmZuwZA_b06uxiodyidKDr5+w-3lGz#^UHk{9;=vg-o_oST`Le#y`+cT3SYpg&D_0 z|EL>t(xgYj+%zGYDJ%}+-l-(&7KxbXzKqTcvmj1`iCdY`1Y@T6y%(%?HaY2Y&w0*s z&pG$J=}bvFQ)2dds9H#fk&wCP3wFG0wyENOeW{w!&kwJX=RFJl!IkQD-9IkGP6Sab&26yw~U_i7+l*W zTsCMJbxJsS$?)AS3E!@wa}5$6O;C`PX~#~}jkUu2-cPEvMaJP#b+#c-zv;+t>f}@t zAu5(tGMi=@RIfEjj%ilCtxm$?O4iaWVOKYE)s2-}L*3$>dU4=RZCGP3nboOdrX8AV zf~`6%B55C3a9?QNhfQL!MO6kATH+dIY;F6bl~eSP;lQ z(tiam-jvh>kwt~qxB{(nE0{T@l&tf56oZTEt7a6droZC5ndKCnUqol9O=r4+9=gP^*}ey!rJGezVa-rC%S4 z(3qQzZJOT2H>!n@vK);EUl80PToHp}!5#VX$S22naYMHh7`U>)H7V*+Z0vwM@w)%4 zYcnCGIpRCZ@p=sG+4-Frzr5`W7a^Z<%dI2YrBfGn&mQMpBu}XLOgAh0S9fvUf9@~g zw_|?{h0%wA2!h*H^Vpl@BsaqgDF3_sH>i#ExY%L%-wD84YTv@}QUEs6GzWJCVKXgnWcWxBYE36SjI_r>jH#nFGL5)f6kz(P_SU`%EhIvNC z9)_F4;H3BTGJIMGk3Yw7JPh~KABGwJu7j&14A-|qv3zMyJ6Oz5X^cdka3lk9e`ms> Q4aZ@dDnI)91gvC#1Ca-|=>Px# delta 1282 zcmZWoYfMx}6rR0v?{QJsga~yXE+DH?O$4JUh!pm2`JoAcUZUXR2d{N^*#{`QO_8Sd zka5-Q;Ay^PTTJ zX6D@930v=k&7xIMIfD>0A>a2u)4DBLGXGzjEq`bDTXKcpk>LBBg1;#E_`_nmZc~+T zJC|XXt}N&1T()Ca6X;fW(j(B#p|om&#;1dyaHLmxOs|AcS9?qerC$1*$^EGieB+YN zmI_$dD2>$!xI~v;mkXHsR)R!@4=U)!GK+D5*Uwr?#%l32JN`d3sw<0=7kn?2O*25 zI|w!ep_sm4pg#yD^oykg{|LecdYggF5V)zwNpM>TiY>>Tgf#midwkJY!R{!IhhQR33d6_Jid=MWQZn&W7*^Afl}s0gA{xyjXpX=JY5j*- zS*ciYXM}}2HG=yiEW5m#;58Pee>3nd!p4Iw1WQ_=NXpxao(?4gyINqiRJa4RubA^I zb7);1!GD;9KHX2SpcRTr{_G+o6f1}YKl9~>Vp@esa?`nGBuT%8N%*Db%N~NKT49N} ztcAP4E)Dh^84uf0-36(F)eLs~BgQ)LXfvcPGv0mp;75&jHA1GCS(8c*ep|D`bYx=M zhBsyljIjdL|G7ciu^|AdIYtG`kH@+%vh2tIt8i-sRUfPr-9tW>{Bw$g9v`s%@GwxQ%sw zNbJ^OKkL+=PqE$)%W%{`GrVm7~d-&HPiV0~aFeNTX; z-yt#{46xlbZUiqG)W5ZyO74`_%wFKhaZC>ySI{P#lU`@15u5&NHkLB?M&|nVxU-6o z&CIgroiAmTg1cR^6~~$(gOC2=UfF<2W$)?!?_GG?=d@-%zdq6mrLy>3C!^q0-UHeM Bv5)`& From 06191b37eca8e820cff5deacdd1d172587ddfde6 Mon Sep 17 00:00:00 2001 From: polandll Date: Mon, 17 Aug 2020 17:31:49 -0700 Subject: [PATCH 069/115] change ui-bundle url : --- doc/site.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/site.yml b/doc/site.yml index 56aeb6925e4c..590e683c079b 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -18,8 +18,8 @@ content: ui: # Need to replace this with a direct github url rather than a local path bundle: - url: /antora/cassandra/doc/ui-bundle.zip - #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip + #url: /antora/cassandra/doc/ui-bundle.zip + url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: - path: ui.yml From 964e62ae94f9d6f98cd0805a1b7e1a2c7d25888c Mon Sep 17 00:00:00 2001 From: polandll Date: Mon, 17 Aug 2020 17:33:44 -0700 Subject: [PATCH 070/115] change ui-bundle url again --- doc/hold-bundle.zip | Bin 0 -> 423958 bytes doc/site.yml | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 doc/hold-bundle.zip diff --git a/doc/hold-bundle.zip b/doc/hold-bundle.zip new file mode 100644 index 0000000000000000000000000000000000000000..3c5ef7fc68f4fcaf8bf6b647eb170c4ed2c61b2b GIT binary patch literal 423958 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ɩ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

-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

_@uMvU5a5UO_PkCMB}P@A4OPCi9&_(BBt5Z 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 literal 0 HcmV?d00001 diff --git a/doc/site.yml b/doc/site.yml index 590e683c079b..d2e401183a31 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -19,7 +19,8 @@ ui: # Need to replace this with a direct github url rather than a local path bundle: #url: /antora/cassandra/doc/ui-bundle.zip - url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip + #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip + url: https://github.com/ianevans/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: - path: ui.yml From e78e42e9b4192fcd264c2c46708f8fe796985b6d Mon Sep 17 00:00:00 2001 From: polandll Date: Mon, 17 Aug 2020 17:35:37 -0700 Subject: [PATCH 071/115] fix ian's url --- doc/site.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/site.yml b/doc/site.yml index d2e401183a31..b67a69afbac4 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -20,7 +20,7 @@ ui: bundle: #url: /antora/cassandra/doc/ui-bundle.zip #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip - url: https://github.com/ianevans/antora-ui-datastax/build/ui-bundle.zip + url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: - path: ui.yml From 9e2c33653ec537ae370420bc6e4725d3921c9a68 Mon Sep 17 00:00:00 2001 From: polandll Date: Mon, 17 Aug 2020 17:38:14 -0700 Subject: [PATCH 072/115] change ui-bundle url again for test --- doc/site.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/site.yml b/doc/site.yml index b67a69afbac4..5e245df18547 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -18,9 +18,9 @@ content: ui: # Need to replace this with a direct github url rather than a local path bundle: - #url: /antora/cassandra/doc/ui-bundle.zip + url: /antora/cassandra/doc/ui-bundle.zip #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip - url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip + #url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: - path: ui.yml From b0de92ab6bcfb8ee246718c8c4ef79903bd7bcc3 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 18 Aug 2020 21:46:52 -0700 Subject: [PATCH 073/115] rezip ui-bundle.zip --- doc/ui-bundle.zip | Bin 423958 -> 437793 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/ui-bundle.zip b/doc/ui-bundle.zip index 7d5450ccabf2cb9e9830e082e3352ba8f5802179..3ccbeed82084fe86186a5029658bd39f6052271d 100644 GIT binary patch delta 245844 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

  • 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�Y16 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 Hh~NGXq)={Q delta 231774 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

    &JckKbx%TzX9V;&8QtydZTJzN&HV5qHq-+M1mB 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 k$Nk3J^?%{yKu_}P>YR!^3^4T|(0$ Date: Wed, 19 Aug 2020 14:51:59 +1000 Subject: [PATCH 074/115] Updates to document generation * Added build output * Changed preview port number to 5000 --- doc/Dockerfile | 2 +- doc/docker-entrypoint.sh | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index e8498ea982b8..97bf75d0aa21 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -42,7 +42,7 @@ ENV GIT_EMAIL_ADDRESS "" ENV GIT_USER_NAME "" ENV GPG_KEY_PATH "" ENV GENERATE_NODETOOL_AND_CONFIG_DOCS "true" -ENV WEB_SERVER_PORT "8080" +ENV WEB_SERVER_PORT "5000" # Setup directories for building the docs # Give the build user rw access to everything in the build directory, diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh index 515ea55ae140..0d2e9ada708d 100755 --- a/doc/docker-entrypoint.sh +++ b/doc/docker-entrypoint.sh @@ -109,11 +109,11 @@ then # change into doc directory and push the current directory to the stack pushd doc # generate the nodetool docs - echo "Generating Cassandra nodetool documentation" + echo "Generating Cassandra nodetool documentation." python3 gen-nodetool-docs.py # generate cassandra.yaml doc file - echo "Generating Cassandra configuration documentation" + echo "Generating Cassandra configuration documentation." YAML_INPUT="${BUILD_DIR}"/cassandra/conf/cassandra.yaml YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc python3 convert_yaml_to_adoc.py "${YAML_INPUT}" "${YAML_OUTPUT}" @@ -126,6 +126,8 @@ then popd ant realclean done +else + echo "Skipping the generation of Cassandra nodetool and configuration (YAML) documentation." fi # ************************* @@ -136,7 +138,7 @@ git checkout doc_redo_asciidoc cd doc # run antora -echo "Building the docs site with antora" +echo "Building the docs site with antora." export DOCSEARCH_ENABLED=true export DOCSEARCH_ENGINE=lunr export NODE_PATH="$(npm -g root)" @@ -145,7 +147,7 @@ antora --generator antora-site-generator-lunr site.yml if [ "${BUILD_MODE}" = "preview" ] then - echo "Starting webserver" + echo "Starting webserver." python3 -m http.server "${WEB_SERVER_PORT}" fi From ba72612858868083a74e28dfcecaacd680df3fd9 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 18 Aug 2020 22:15:43 -0700 Subject: [PATCH 075/115] zip bundle with search.css --- doc/ui-bundle.zip | Bin 437793 -> 428721 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/ui-bundle.zip b/doc/ui-bundle.zip index 3ccbeed82084fe86186a5029658bd39f6052271d..ac02cb0dd7d33632ef234554455255324c0893f1 100644 GIT binary patch delta 3503 zcmZ8jdr(x@8NYY;?k7-0Tw#IbwTMR78kljgRY&Q9jS2-96x57S9)cDG7FnQWq#}tx zgsPBLPkdtqO)N=cNWH1WCNupbF>RV^UdEdG=xEwXjcwAI#!klm&OPil=fW_Y`}pZ)-#K~RdG3I7puwqWN|G}0<{~W$|3~MkZmSl_R{<@D5+ zJNmbxmQSo_>%$dANmi5yu34MMMpP zeOZ#4pc)QzmaKYgS{Rhslyo)Q@Xxx^)qiT7B71p;`iF2ER-1hd&7pMIjhSk+=Hd$b z_Rw@a?=kh&Qt>@7Y>8u@z4R?M9!WFwwstkrqoqw~y7W)S)W0m%Qu#MDQ`w_CmSjCk zwR})$nCl*|C1H(NLZ0H$;<@U#2gu3h^jH)1q`Q`#MVga?P>p5Yt5%zS|2x*ddxd84 zbL7;ad9_GO3@YhRTAVGuK{uA|2~e1R)1i$l(Gs{4jNqK`R@);B7?gb`eWa<{XR!z3wADsY-j6DZMM;+g0c}kiqRyI z%>Iiuo7eE6!}0c9u?@Stlx?&Cd+4RlwP?;Tt(Z=0F?{u?m^y{@^;Og?HmPbg?J?Si zxl8DaDBj^etgdUUZt`a~_}G+Hke9zxN|5mj)Ze3YMLxyubyPQZBl-n!lHzH!$ zNs7~VS5mDi%sHd5#*t_=Ah-etS(Lgm5EXy0|ib$e% z8#Nj$-QGl#R8fOsKLx}lCp9BSBisM*mC=?Tw9r1$^+#Iil)*x8{SmdOqJh)f=(CB~ z7e~PLsqK`d3UA(*&@!A0`?{TOiCB&uRK>pBLD6gzuXL z{9}$gB>nd|zW!;-w@;Pu?!Cb8Jxx#8r%AZ-3q=W(pNnOE&(OSBImOpT6@FK7Zf=&j ziz4k)B-?*M&N_F|Qd6q$z6Ly^i#(>%MBs{L{auvnoGkfSpc`>AH`V$4Y-$%h&I-E` zOs=2pbr_%MCQot@=Q}Xe`6uA~Lap;{@ntkNux-7R%Dg?~2qh}?I&LG;j=Qn!%^sR( zw@U=vpTYNnXK7ien8K!H95!PQ;@S0QVIvoGEJjsW$!-)>PNv!c{Kjs|aRzyczQ~PJ z4W9MY4J|CKo942^y+~3fQWg*6@m>%Kn;T4;BLa9+fF9LF_SV#0sh0z5c7me|uIqlELq2-ny_G)Uw=q?0OX zxE>1gRQ8j7lx6arwZdXdi|H((AJvr!6(5IipdWrqm*Pf@ED#03n}NY{gzQ zUw_NL72jP2hhcGsP`YYDGZaX(6kq~eZY<3 zhP{|?D$cD@2!lgzp~+*Km5i8)$a*?^hk>@-dxK9v!Sy^XPLUh^Ht^s)^EGAEvTeiU zPU-5sR9%kKQ;)ysi7JU+{csulxDV0y?J*MGu^c$&r-NNOgu2T?v=tEM9HtyogST`1 z?Zaqr`SzWh2fX+QZeJPK@_~QC@mMK%8^LO zd>ecP{NQn12En!wIX_bfb-W$5@1lhE;z%lXT*^!?ih&(6W=fY{Hkhq*- z?mFOj5|}f*!14J*z=H=>1ev`aI35ZsOhD@>$PHUh_+AwP6fgrBl9;CMR} zn2MoP0FOF@V#t;Kh~v+nL1kq;zY@6n1>o|AmTm%$cg8gK?h7bJ@Dz&R<6MZRMeoxtDY_t^5wevXRB`k!wBo<8!8 zt5Nv5Rs$R_ngSEqxm$tbWmA|cXSl46l*Wpt=9-E+e`ckxs*PP9p_CXK@!403-y3*( Jj6q3J{s)^L`qlsd delta 12625 zcmbuEdvH|s7035xcTb0qNf(5$B;;YB2C%R#MYz-?Y!Y(w+C0bu5TRkiCJ?gOO*XqB zJYynHrv+k!pO50;45F=sh9=}v3yjWSpEE^U9kf*|EmW&grAi0tbnLmgZ1lJM_XQ?Q z_~ZAv=Y4*^b50&ie&+4u)m3FyTfD{ivwmRW($QaT{WIS(%~IFV80v8OgQ4btcWztI z?+y4|1)j=^!Wx%15DtdCb0W=ieBQ9PBkb*RHAI^IK384sIE(f2Kz99~2Kp}zP42TL zsVa!-OZ&c>51u`_YL-=XgNKLqTIVL;zYsjVp~EGVPGwsEg{=7g%c%}E7X%I6NF5jl zpYH!jmRl`FKYcZ8s7WnEPaoaanV}Y;r_+8mXv;=}rnz<9nE4YQ9ZpaSKr#9q!x!-g z`e=BO0tfHV%#qoOnuiL$O#iJL4SmCW4c@ga{q=fAf7$7u;ug4h`p7Ii1`hx2m`&9{ z3k(&#pJj(*Uz`b%bLf$eJu~41(EmJ1c~;3oJ!m*#tvA#dHoPE?Cn6T7xo9ZlrX5^?#LX<**uu+UyyEEs>!=S{(Nl zZVth+WQv5j_8I!Ar{msSta?DD^uBlFPF1ND;BnSxvR?19eo~1`P~C0)ca>Us2NDRD zz<#Jx$Z)Jl)5#Ag~EQ;X5lhl{8uA8o(u8~ts@!>6(RP!XjIPbp=HmSVaWZ$(cQ(~scWpt!e$ zKFdcRLQ!P`K`~Ioim*0CY6)uBoNk(;pD3jvB`*hLw0T3}X0QKik0kL*H#zWI!t)+# zfp2PJN;&O<3#R@|IgPX8$4^wz#5lDKw4^v+O-Es0>i!xc1y9hG zyNtHu7yQM`=>#5c*Oqgz27oxM4 zv2xn#Z4QXOdM@!t)>0FEWf1W`E-G+I`nho$y^M?R?xAGUCi@!cLHLy+_V3}>!8e)P`Ox?AfUcn<=ztKz;3hYR|w1tusyfOOxfIKJ2hu%`<+* zX2f=5M$Gf!yTpMI#f#tg$)Ty1ud@RnTYTszRm;D{QkZhI=RK4)zm@Vex5Ub`VLFRF zt>i9QDCziI8pbjv%&%>v8OC&3%az1)rejDkJwUltQI^GGxc7fEF&2y0*%qa zR1_1@|2YM+E(AHE3naPLkASSHZB!5w(HnJ;6=)-OOs0Ks8f3lHM)?(al8&V>Vyw~W zsXy2u?hey*v8I)1Gy+9QJ0--ZUiM4u6JlLEs~#;3TwS=x)SUrYzc5(Qurpb6{sFSa zhdAss$&BMa0$IKgX<9T@O}RFF3bJ^lUK*38G*y9`hj4aqn#!T__hgV2?4Z1gs2|N{ z@p%fyGQzI4F%S{KcKUX8)$R%Y8{8^ZCR!}AKMGSZzL*qde`MeCty!VZW`Zn#n6k%W z&eZ#R(?QmYVJccGm#0-TFqYrDDHsWNxaNOnz8KuWcQ|*1lFAlIIyZa^W1ACwZksd3 z&2%L}s~w{n+4}}a9i8oq7K8dlgzJk;y|e|BRqy~bQ&erDd#bPg@Yu!U1s03(Qzwbs zat4I+I-*Xikyytpaab}MI|1S9V)f^2yiNUoRbbT7EdkqfevCO6Ka25`_zJ(Q_xQx6iH|+eceKi4xy(PZ z66bbdUlMP0kw>ePr2gO{#)?X97v-Diz8GkGk_|G2xruny2re!G@nWUNmY|hO@`h?b zH18%-gkv+`8|550bqE9++X}JY$bsL#&0@+fD!T$wNB0*@O*1WUb2F!xY=MId?3i(R zqmd%+@1%RgiY-i)%gUQw7?tB-x_Dv>n^n$+@n&Wvc>%*;-r!Bb^=4M;IPzB1BvyGN$#S&{^Dah*IM#V8Y zHdTYHtJ_#d`MNN%24uOn^J_+a>t94!2ez3i0t=)K;Hj24Pd4@nj+7LlF1L;+58iIhnruBG=g8?9noYl zVk}w)AEu-jLpYm2D({X`#oR|&?kPLCfyw4Qk5YN3R5{kOO}(3%K?!-cR1wp3u518V zyk1HYj-9u;{k$Ip^1{g}{01<3MKiTs6aay|g7U;9Ut$}`O5DZCCl?rJJIM0w;sPVH zUP4*CrYegm^IwKQxzcuXnUCIKP22yj17z`z z#@?=`q9vUmi+5SIF)1};BgneGhwpLG5rrw&Yh56VH(X!6sZG|Wn?cs8y=*TzFgmw_ uEM9x17)5ekjeI#dzYPP9Em#|ZzD>qdDs7UTjB)5P{(IPEu>`go|NTGlsxYDe From f3f114c06f890578819170eaa1a68bc5f9a87e0a Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 18 Aug 2020 22:36:23 -0700 Subject: [PATCH 076/115] add supplemental_ui --- doc/site.yml | 2 +- doc/supplemental_ui/css/search.css | 114 + .../js/vendor/highlight.bundle.js | 37 + doc/supplemental_ui/js/vendor/lunr.js | 3471 +++++++++++++++++ doc/supplemental_ui/js/vendor/search.js | 212 + .../partials/footer-scripts.hbs | 16 + doc/supplemental_ui/partials/head-meta.hbs | 2 + .../partials/header-content.hbs | 57 + doc/ui-bundle.zip | Bin 428721 -> 427824 bytes 9 files changed, 3910 insertions(+), 1 deletion(-) create mode 100644 doc/supplemental_ui/css/search.css create mode 100644 doc/supplemental_ui/js/vendor/highlight.bundle.js create mode 100644 doc/supplemental_ui/js/vendor/lunr.js create mode 100644 doc/supplemental_ui/js/vendor/search.js create mode 100644 doc/supplemental_ui/partials/footer-scripts.hbs create mode 100644 doc/supplemental_ui/partials/head-meta.hbs create mode 100644 doc/supplemental_ui/partials/header-content.hbs diff --git a/doc/site.yml b/doc/site.yml index 5e245df18547..14537af84c0f 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -22,7 +22,7 @@ ui: #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip #url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip snapshot: true - supplemental_files: + supplemental_files: ./supplemental_ui - path: ui.yml contents: | static_files: [ .nojekyll ] diff --git a/doc/supplemental_ui/css/search.css b/doc/supplemental_ui/css/search.css new file mode 100644 index 000000000000..0309a672f357 --- /dev/null +++ b/doc/supplemental_ui/css/search.css @@ -0,0 +1,114 @@ +.navbar-brand .navbar-item + .navbar-item { + flex-grow: 1; + justify-content: flex-end; +} + +@media screen and (min-width: 1024px) { + .navbar-brand { + flex-grow: 1; + } + + .navbar-menu { + flex-grow: 0; + } +} + +#search-input { + color: #333; + font-family: inherit; + font-size: 0.95rem; + width: 150px; + border: 1px solid #dbdbdb; + border-radius: 0.1em; + line-height: 1.5; + padding: 0 0.25em; +} + +@media screen and (min-width: 769px) { + #search-input { + width: 200px; + } +} + +.search-result-dropdown-menu { + position: absolute; + z-index: 100; + display: block; + right: 0; + left: inherit; + top: 100%; + border-radius: 4px; + margin: 6px 0 0; + padding: 0; + text-align: left; + height: auto; + background: transparent; + border: none; + max-width: 600px; + min-width: 500px; + box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2), 0 2px 3px 0 rgba(0, 0, 0, 0.1); +} + +@media screen and (max-width: 768px) { + .navbar-brand .navbar-item + .navbar-item { + padding-left: 0; + padding-right: 0; + } + + .search-result-dropdown-menu { + min-width: calc(100vw - 3.75rem); + } +} + +.search-result-dataset { + position: relative; + border: 1px solid #d9d9d9; + background: #fff; + border-radius: 4px; + overflow: auto; + padding: 0 8px 8px; + max-height: calc(100vh - 5.25rem); + color: #333; +} + +.search-result-highlight { + color: #174d8c; + background: rgba(143, 187, 237, 0.1); + padding: 0.1em 0.05em; +} + +.search-result-item { + display: flex; + font-size: 1rem; + margin-bottom: 0.5rem; + margin-top: 0.5rem; +} + +.search-result-document-title { + width: 33%; + border-right: 1px solid #ddd; + color: #a4a7ae; + font-size: 0.8rem; + padding: 0.25rem 0.5rem 0.25rem 0; + text-align: right; + position: relative; + word-wrap: break-word; +} + +.search-result-document-hit { + flex: 1; + font-size: 0.75em; + color: #02060c; + font-weight: 700; +} + +.search-result-document-hit > a { + color: inherit; + display: block; + padding: 0.5rem 0 0.5rem 1rem; + margin-bottom: 0.25rem; +} + +.search-result-document-hit > a:hover { + background-color: rgba(69, 142, 225, 0.05); +} diff --git a/doc/supplemental_ui/js/vendor/highlight.bundle.js b/doc/supplemental_ui/js/vendor/highlight.bundle.js new file mode 100644 index 000000000000..11145f624b7e --- /dev/null +++ b/doc/supplemental_ui/js/vendor/highlight.bundle.js @@ -0,0 +1,37 @@ +;(function () { + 'use strict' + + var hljs = require('highlight.js/lib/highlight') + hljs.registerLanguage('asciidoc', require('highlight.js/lib/languages/asciidoc')) + hljs.registerLanguage('bash', require('highlight.js/lib/languages/bash')) + hljs.registerLanguage('clojure', require('highlight.js/lib/languages/clojure')) + hljs.registerLanguage('cpp', require('highlight.js/lib/languages/cpp')) + hljs.registerLanguage('cs', require('highlight.js/lib/languages/cs')) + hljs.registerLanguage('css', require('highlight.js/lib/languages/css')) + hljs.registerLanguage('diff', require('highlight.js/lib/languages/diff')) + hljs.registerLanguage('dockerfile', require('highlight.js/lib/languages/dockerfile')) + hljs.registerLanguage('elixir', require('highlight.js/lib/languages/elixir')) + hljs.registerLanguage('go', require('highlight.js/lib/languages/go')) + hljs.registerLanguage('groovy', require('highlight.js/lib/languages/groovy')) + hljs.registerLanguage('haskell', require('highlight.js/lib/languages/haskell')) + hljs.registerLanguage('java', require('highlight.js/lib/languages/java')) + hljs.registerLanguage('javascript', require('highlight.js/lib/languages/javascript')) + hljs.registerLanguage('json', require('highlight.js/lib/languages/json')) + hljs.registerLanguage('kotlin', require('highlight.js/lib/languages/kotlin')) + hljs.registerLanguage('makefile', require('highlight.js/lib/languages/makefile')) + hljs.registerLanguage('markdown', require('highlight.js/lib/languages/markdown')) + hljs.registerLanguage('nix', require('highlight.js/lib/languages/nix')) + hljs.registerLanguage('objectivec', require('highlight.js/lib/languages/objectivec')) + hljs.registerLanguage('perl', require('highlight.js/lib/languages/perl')) + hljs.registerLanguage('php', require('highlight.js/lib/languages/php')) + hljs.registerLanguage('properties', require('highlight.js/lib/languages/properties')) + hljs.registerLanguage('python', require('highlight.js/lib/languages/python')) + hljs.registerLanguage('ruby', require('highlight.js/lib/languages/ruby')) + hljs.registerLanguage('scala', require('highlight.js/lib/languages/scala')) + hljs.registerLanguage('shell', require('highlight.js/lib/languages/shell')) + hljs.registerLanguage('sql', require('highlight.js/lib/languages/sql')) + hljs.registerLanguage('swift', require('highlight.js/lib/languages/swift')) + hljs.registerLanguage('xml', require('highlight.js/lib/languages/xml')) + hljs.registerLanguage('yaml', require('highlight.js/lib/languages/yaml')) + hljs.initHighlighting() +})() diff --git a/doc/supplemental_ui/js/vendor/lunr.js b/doc/supplemental_ui/js/vendor/lunr.js new file mode 100644 index 000000000000..ebe73e68e2bc --- /dev/null +++ b/doc/supplemental_ui/js/vendor/lunr.js @@ -0,0 +1,3471 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.8 + * Copyright (C) 2019 Oliver Nightingale + * @license MIT + */ + +;(function () { +/** + * A convenience function for configuring and constructing + * a new lunr Index. + * + * A lunr.Builder instance is created and the pipeline setup + * with a trimmer, stop word filter and stemmer. + * + * This builder object is yielded to the configuration function + * that is passed as a parameter, allowing the list of fields + * and other builder parameters to be customised. + * + * All documents _must_ be added within the passed config function. + * + * @example + * var idx = lunr(function () { + * this.field('title') + * this.field('body') + * this.ref('id') + * + * documents.forEach(function (doc) { + * this.add(doc) + * }, this) + * }) + * + * @see {@link lunr.Builder} + * @see {@link lunr.Pipeline} + * @see {@link lunr.trimmer} + * @see {@link lunr.stopWordFilter} + * @see {@link lunr.stemmer} + * @namespace {function} lunr + */ + var lunr = function (config) { + var builder = new lunr.Builder() + + builder.pipeline.add( + lunr.trimmer, + lunr.stopWordFilter, + lunr.stemmer + ) + + builder.searchPipeline.add( + lunr.stemmer + ) + + config.call(builder, builder) + return builder.build() + } + + lunr.version = '2.3.8' + /*! + * lunr.utils + * Copyright (C) 2019 Oliver Nightingale + */ + + /** + * A namespace containing utils for the rest of the lunr library + * @namespace lunr.utils + */ + lunr.utils = {} + + /** + * Print a warning message to the console. + * + * @param {String} message The message to be printed. + * @memberOf lunr.utils + * @function + */ + lunr.utils.warn = (function (global) { + /* eslint-disable no-console */ + return function (message) { + if (global.console && console.warn) { + console.warn(message) + } + } + /* eslint-enable no-console */ + })(this) + + /** + * Convert an object to a string. + * + * In the case of `null` and `undefined` the function returns + * the empty string, in all other cases the result of calling + * `toString` on the passed object is returned. + * + * @param {Any} obj The object to convert to a string. + * @return {String} string representation of the passed object. + * @memberOf lunr.utils + */ + lunr.utils.asString = function (obj) { + if (obj === undefined || obj === null) { + return '' + } else { + return obj.toString() + } + } + + /** + * Clones an object. + * + * Will create a copy of an existing object such that any mutations + * on the copy cannot affect the original. + * + * Only shallow objects are supported, passing a nested object to this + * function will cause a TypeError. + * + * Objects with primitives, and arrays of primitives are supported. + * + * @param {Object} obj The object to clone. + * @return {Object} a clone of the passed object. + * @throws {TypeError} when a nested object is passed. + * @memberOf Utils + */ + lunr.utils.clone = function (obj) { + if (obj === null || obj === undefined) { + return obj + } + + var clone = Object.create(null) + var keys = Object.keys(obj) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + var val = obj[key] + + if (Array.isArray(val)) { + clone[key] = val.slice() + continue + } + + if (typeof val === 'string' || + typeof val === 'number' || + typeof val === 'boolean') { + clone[key] = val + continue + } + + throw new TypeError('clone is not deep and does not support nested objects') + } + + return clone + } + lunr.FieldRef = function (docRef, fieldName, stringValue) { + this.docRef = docRef + this.fieldName = fieldName + this._stringValue = stringValue + } + + lunr.FieldRef.joiner = '/' + + lunr.FieldRef.fromString = function (s) { + var n = s.indexOf(lunr.FieldRef.joiner) + + if (n === -1) { + throw new TypeError('malformed field ref string') + } + + var fieldRef = s.slice(0, n) + var docRef = s.slice(n + 1) + + return new lunr.FieldRef(docRef, fieldRef, s) + } + + lunr.FieldRef.prototype.toString = function () { + if (this._stringValue === undefined) { + this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef + } + + return this._stringValue + } + /*! + * lunr.Set + * Copyright (C) 2019 Oliver Nightingale + */ + + /** + * A lunr set. + * + * @constructor + */ + lunr.Set = function (elements) { + this.elements = Object.create(null) + + if (elements) { + this.length = elements.length + + for (var i = 0; i < this.length; i++) { + this.elements[elements[i]] = true + } + } else { + this.length = 0 + } + } + + /** + * A complete set that contains all elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ + lunr.Set.complete = { + intersect: function (other) { + return other + }, + + union: function (other) { + return other + }, + + contains: function () { + return true + }, + } + + /** + * An empty set that contains no elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ + lunr.Set.empty = { + intersect: function () { + return this + }, + + union: function (other) { + return other + }, + + contains: function () { + return false + }, + } + + /** + * Returns true if this set contains the specified object. + * + * @param {object} object - Object whose presence in this set is to be tested. + * @returns {boolean} - True if this set contains the specified object. + */ + lunr.Set.prototype.contains = function (object) { + return !!this.elements[object] + } + + /** + * Returns a new set containing only the elements that are present in both + * this set and the specified set. + * + * @param {lunr.Set} other - set to intersect with this set. + * @returns {lunr.Set} a new set that is the intersection of this and the specified set. + */ + + lunr.Set.prototype.intersect = function (other) { + var a; var b; var elements; var intersection = [] + + if (other === lunr.Set.complete) { + return this + } + + if (other === lunr.Set.empty) { + return other + } + + if (this.length < other.length) { + a = this + b = other + } else { + a = other + b = this + } + + elements = Object.keys(a.elements) + + for (var i = 0; i < elements.length; i++) { + var element = elements[i] + if (element in b.elements) { + intersection.push(element) + } + } + + return new lunr.Set(intersection) + } + + /** + * Returns a new set combining the elements of this and the specified set. + * + * @param {lunr.Set} other - set to union with this set. + * @return {lunr.Set} a new set that is the union of this and the specified set. + */ + + lunr.Set.prototype.union = function (other) { + if (other === lunr.Set.complete) { + return lunr.Set.complete + } + + if (other === lunr.Set.empty) { + return this + } + + return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) + } + /** + * A function to calculate the inverse document frequency for + * a posting. This is shared between the builder and the index + * + * @private + * @param {object} posting - The posting for a given term + * @param {number} documentCount - The total number of documents. + */ + lunr.idf = function (posting, documentCount) { + var documentsWithTerm = 0 + + for (var fieldName in posting) { + if (fieldName === '_index') continue // Ignore the term index, its not a field + documentsWithTerm += Object.keys(posting[fieldName]).length + } + + var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) + + return Math.log(1 + Math.abs(x)) + } + + /** + * A token wraps a string representation of a token + * as it is passed through the text processing pipeline. + * + * @constructor + * @param {string} [str=''] - The string token being wrapped. + * @param {object} [metadata={}] - Metadata associated with this token. + */ + lunr.Token = function (str, metadata) { + this.str = str || '' + this.metadata = metadata || {} + } + + /** + * Returns the token string that is being wrapped by this object. + * + * @returns {string} + */ + lunr.Token.prototype.toString = function () { + return this.str + } + + /** + * A token update function is used when updating or optionally + * when cloning a token. + * + * @callback lunr.Token~updateFunction + * @param {string} str - The string representation of the token. + * @param {Object} metadata - All metadata associated with this token. + */ + + /** + * Applies the given function to the wrapped string token. + * + * @example + * token.update(function (str, metadata) { + * return str.toUpperCase() + * }) + * + * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. + * @returns {lunr.Token} + */ + lunr.Token.prototype.update = function (fn) { + this.str = fn(this.str, this.metadata) + return this + } + + /** + * Creates a clone of this token. Optionally a function can be + * applied to the cloned token. + * + * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. + * @returns {lunr.Token} + */ + lunr.Token.prototype.clone = function (fn) { + fn = fn || function (s) { return s } + return new lunr.Token(fn(this.str, this.metadata), this.metadata) + } + /*! + * lunr.tokenizer + * Copyright (C) 2019 Oliver Nightingale + */ + + /** + * A function for splitting a string into tokens ready to be inserted into + * the search index. Uses `lunr.tokenizer.separator` to split strings, change + * the value of this property to change how strings are split into tokens. + * + * This tokenizer will convert its parameter to a string by calling `toString` and + * then will split this string on the character in `lunr.tokenizer.separator`. + * Arrays will have their elements converted to strings and wrapped in a lunr.Token. + * + * Optional metadata can be passed to the tokenizer, this metadata will be cloned and + * added as metadata to every token that is created from the object to be tokenized. + * + * @static + * @param {?(string|object|object[])} obj - The object to convert into tokens + * @param {?object} metadata - Optional metadata to associate with every token + * @returns {lunr.Token[]} + * @see {@link lunr.Pipeline} + */ + lunr.tokenizer = function (obj, metadata) { + if (obj === null || obj === undefined) { + return [] + } + + if (Array.isArray(obj)) { + return obj.map(function (t) { + return new lunr.Token( + lunr.utils.asString(t).toLowerCase(), + lunr.utils.clone(metadata) + ) + }) + } + + var str = obj.toString().toLowerCase() + var len = str.length + var tokens = [] + + for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { + var char = str.charAt(sliceEnd) + var sliceLength = sliceEnd - sliceStart + + if ((char.match(lunr.tokenizer.separator) || sliceEnd === len)) { + if (sliceLength > 0) { + var tokenMetadata = lunr.utils.clone(metadata) || {} + tokenMetadata.position = [sliceStart, sliceLength] + tokenMetadata.index = tokens.length + + tokens.push( + new lunr.Token( + str.slice(sliceStart, sliceEnd), + tokenMetadata + ) + ) + } + + sliceStart = sliceEnd + 1 + } + } + + return tokens + } + + /** + * The separator used to split a string into tokens. Override this property to change the behaviour of + * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. + * + * @static + * @see lunr.tokenizer + */ + lunr.tokenizer.separator = /[\s-]+/ + /*! + * lunr.Pipeline + * Copyright (C) 2019 Oliver Nightingale + */ + + /** + * lunr.Pipelines maintain an ordered list of functions to be applied to all + * tokens in documents entering the search index and queries being ran against + * the index. + * + * An instance of lunr.Index created with the lunr shortcut will contain a + * pipeline with a stop word filter and an English language stemmer. Extra + * functions can be added before or after either of these functions or these + * default functions can be removed. + * + * When run the pipeline will call each function in turn, passing a token, the + * index of that token in the original list of all tokens and finally a list of + * all the original tokens. + * + * The output of functions in the pipeline will be passed to the next function + * in the pipeline. To exclude a token from entering the index the function + * should return undefined, the rest of the pipeline will not be called with + * this token. + * + * For serialisation of pipelines to work, all functions used in an instance of + * a pipeline should be registered with lunr.Pipeline. Registered functions can + * then be loaded. If trying to load a serialised pipeline that uses functions + * that are not registered an error will be thrown. + * + * If not planning on serialising the pipeline then registering pipeline functions + * is not necessary. + * + * @constructor + */ + lunr.Pipeline = function () { + this._stack = [] + } + + lunr.Pipeline.registeredFunctions = Object.create(null) + + /** + * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token + * string as well as all known metadata. A pipeline function can mutate the token string + * or mutate (or add) metadata for a given token. + * + * A pipeline function can indicate that the passed token should be discarded by returning + * null, undefined or an empty string. This token will not be passed to any downstream pipeline + * functions and will not be added to the index. + * + * Multiple tokens can be returned by returning an array of tokens. Each token will be passed + * to any downstream pipeline functions and all will returned tokens will be added to the index. + * + * Any number of pipeline functions may be chained together using a lunr.Pipeline. + * + * @interface lunr.PipelineFunction + * @param {lunr.Token} token - A token from the document being processed. + * @param {number} i - The index of this token in the complete list of tokens for this document/field. + * @param {lunr.Token[]} tokens - All tokens for this document/field. + * @returns {(?lunr.Token|lunr.Token[])} + */ + + /** + * Register a function with the pipeline. + * + * Functions that are used in the pipeline should be registered if the pipeline + * needs to be serialised, or a serialised pipeline needs to be loaded. + * + * Registering a function does not add it to a pipeline, functions must still be + * added to instances of the pipeline for them to be used when running a pipeline. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @param {String} label - The label to register this function with + */ + lunr.Pipeline.registerFunction = function (fn, label) { + if (label in this.registeredFunctions) { + lunr.utils.warn('Overwriting existing registered function: ' + label) + } + + fn.label = label + lunr.Pipeline.registeredFunctions[fn.label] = fn + } + + /** + * Warns if the function is not registered as a Pipeline function. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @private + */ + lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { + var isRegistered = fn.label && (fn.label in this.registeredFunctions) + + if (!isRegistered) { + lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) + } + } + + /** + * Loads a previously serialised pipeline. + * + * All functions to be loaded must already be registered with lunr.Pipeline. + * If any function from the serialised data has not been registered then an + * error will be thrown. + * + * @param {Object} serialised - The serialised pipeline to load. + * @returns {lunr.Pipeline} + */ + lunr.Pipeline.load = function (serialised) { + var pipeline = new lunr.Pipeline() + + serialised.forEach(function (fnName) { + var fn = lunr.Pipeline.registeredFunctions[fnName] + + if (fn) { + pipeline.add(fn) + } else { + throw new Error('Cannot load unregistered function: ' + fnName) + } + }) + + return pipeline + } + + /** + * Adds new functions to the end of the pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. + */ + lunr.Pipeline.prototype.add = function () { + var fns = Array.prototype.slice.call(arguments) + + fns.forEach(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + this._stack.push(fn) + }, this) + } + + /** + * Adds a single function after a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ + lunr.Pipeline.prototype.after = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos === -1) { + throw new Error('Cannot find existingFn') + } + + pos = pos + 1 + this._stack.splice(pos, 0, newFn) + } + + /** + * Adds a single function before a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ + lunr.Pipeline.prototype.before = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos === -1) { + throw new Error('Cannot find existingFn') + } + + this._stack.splice(pos, 0, newFn) + } + + /** + * Removes a function from the pipeline. + * + * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. + */ + lunr.Pipeline.prototype.remove = function (fn) { + var pos = this._stack.indexOf(fn) + if (pos === -1) { + return + } + + this._stack.splice(pos, 1) + } + + /** + * Runs the current list of functions that make up the pipeline against the + * passed tokens. + * + * @param {Array} tokens The tokens to run through the pipeline. + * @returns {Array} + */ + lunr.Pipeline.prototype.run = function (tokens) { + var stackLength = this._stack.length + + for (var i = 0; i < stackLength; i++) { + var fn = this._stack[i] + var memo = [] + + for (var j = 0; j < tokens.length; j++) { + var result = fn(tokens[j], j, tokens) + + if (result === null || result === undefined || result === '') continue + + if (Array.isArray(result)) { + for (var k = 0; k < result.length; k++) { + memo.push(result[k]) + } + } else { + memo.push(result) + } + } + + tokens = memo + } + + return tokens + } + + /** + * Convenience method for passing a string through a pipeline and getting + * strings out. This method takes care of wrapping the passed string in a + * token and mapping the resulting tokens back to strings. + * + * @param {string} str - The string to pass through the pipeline. + * @param {?object} metadata - Optional metadata to associate with the token + * passed to the pipeline. + * @returns {string[]} + */ + lunr.Pipeline.prototype.runString = function (str, metadata) { + var token = new lunr.Token(str, metadata) + + return this.run([token]).map(function (t) { + return t.toString() + }) + } + + /** + * Resets the pipeline by removing any existing processors. + * + */ + lunr.Pipeline.prototype.reset = function () { + this._stack = [] + } + + /** + * Returns a representation of the pipeline ready for serialisation. + * + * Logs a warning if the function has not been registered. + * + * @returns {Array} + */ + lunr.Pipeline.prototype.toJSON = function () { + return this._stack.map(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + + return fn.label + }) + } + /*! + * lunr.Vector + * Copyright (C) 2019 Oliver Nightingale + */ + + /** + * A vector is used to construct the vector space of documents and queries. These + * vectors support operations to determine the similarity between two documents or + * a document and a query. + * + * Normally no parameters are required for initializing a vector, but in the case of + * loading a previously dumped vector the raw elements can be provided to the constructor. + * + * For performance reasons vectors are implemented with a flat array, where an elements + * index is immediately followed by its value. E.g. [index, value, index, value]. This + * allows the underlying array to be as sparse as possible and still offer decent + * performance when being used for vector calculations. + * + * @constructor + * @param {Number[]} [elements] - The flat list of element index and element value pairs. + */ + lunr.Vector = function (elements) { + this._magnitude = 0 + this.elements = elements || [] + } + + /** + * Calculates the position within the vector to insert a given index. + * + * This is used internally by insert and upsert. If there are duplicate indexes then + * the position is returned as if the value for that index were to be updated, but it + * is the callers responsibility to check whether there is a duplicate at that index + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @returns {Number} + */ + lunr.Vector.prototype.positionForIndex = function (index) { + // For an empty vector the tuple can be inserted at the beginning + if (this.elements.length === 0) { + return 0 + } + + var start = 0 + var end = this.elements.length / 2 + var sliceLength = end - start + var pivotPoint = Math.floor(sliceLength / 2) + var pivotIndex = this.elements[pivotPoint * 2] + + while (sliceLength > 1) { + if (pivotIndex < index) { + start = pivotPoint + } + + if (pivotIndex > index) { + end = pivotPoint + } + + if (pivotIndex === index) { + break + } + + sliceLength = end - start + pivotPoint = start + Math.floor(sliceLength / 2) + pivotIndex = this.elements[pivotPoint * 2] + } + + if (pivotIndex === index) { + return pivotPoint * 2 + } + + if (pivotIndex > index) { + return pivotPoint * 2 + } + + if (pivotIndex < index) { + return (pivotPoint + 1) * 2 + } + } + + /** + * Inserts an element at an index within the vector. + * + * Does not allow duplicates, will throw an error if there is already an entry + * for this index. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + */ + lunr.Vector.prototype.insert = function (insertIdx, val) { + this.upsert(insertIdx, val, function () { + throw new TypeError('duplicate index') + }) + } + + /** + * Inserts or updates an existing index within the vector. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + * @param {function} fn - A function that is called for updates, the existing value and the + * requested value are passed as arguments + */ + lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { + this._magnitude = 0 + var position = this.positionForIndex(insertIdx) + + if (this.elements[position] === insertIdx) { + this.elements[position + 1] = fn(this.elements[position + 1], val) + } else { + this.elements.splice(position, 0, insertIdx, val) + } + } + + /** + * Calculates the magnitude of this vector. + * + * @returns {Number} + */ + lunr.Vector.prototype.magnitude = function () { + if (this._magnitude) return this._magnitude + + var sumOfSquares = 0 + var elementsLength = this.elements.length + + for (var i = 1; i < elementsLength; i += 2) { + var val = this.elements[i] + sumOfSquares += val * val + } + + return (this._magnitude = Math.sqrt(sumOfSquares)) + } + + /** + * Calculates the dot product of this vector and another vector. + * + * @param {lunr.Vector} otherVector - The vector to compute the dot product with. + * @returns {Number} + */ + lunr.Vector.prototype.dot = function (otherVector) { + var dotProduct = 0 + var a = this.elements; var b = otherVector.elements + var aLen = a.length; var bLen = b.length + var aVal = 0; var bVal = 0 + var i = 0; var j = 0 + + while (i < aLen && j < bLen) { + aVal = a[i]; bVal = b[j] + if (aVal < bVal) { + i += 2 + } else if (aVal > bVal) { + j += 2 + } else if (aVal === bVal) { + dotProduct += a[i + 1] * b[j + 1] + i += 2 + j += 2 + } + } + + return dotProduct + } + + /** + * Calculates the similarity between this vector and another vector. + * + * @param {lunr.Vector} otherVector - The other vector to calculate the + * similarity with. + * @returns {Number} + */ + lunr.Vector.prototype.similarity = function (otherVector) { + return this.dot(otherVector) / this.magnitude() || 0 + } + + /** + * Converts the vector to an array of the elements within the vector. + * + * @returns {Number[]} + */ + lunr.Vector.prototype.toArray = function () { + var output = new Array(this.elements.length / 2) + + for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { + output[j] = this.elements[i] + } + + return output + } + + /** + * A JSON serializable representation of the vector. + * + * @returns {Number[]} + */ + lunr.Vector.prototype.toJSON = function () { + return this.elements + } +/* eslint-disable */ +/*! + * lunr.stemmer + * Copyright (C) 2019 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/** + * lunr.stemmer is an english language stemmer, this is a JavaScript + * implementation of the PorterStemmer taken from http://tartarus.org/~martin + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token - The string to stem + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + * @function + */ +lunr.stemmer = (function(){ + var step2list = { + "ational" : "ate", + "tional" : "tion", + "enci" : "ence", + "anci" : "ance", + "izer" : "ize", + "bli" : "ble", + "alli" : "al", + "entli" : "ent", + "eli" : "e", + "ousli" : "ous", + "ization" : "ize", + "ation" : "ate", + "ator" : "ate", + "alism" : "al", + "iveness" : "ive", + "fulness" : "ful", + "ousness" : "ous", + "aliti" : "al", + "iviti" : "ive", + "biliti" : "ble", + "logi" : "log" + }, + + step3list = { + "icate" : "ic", + "ative" : "", + "alize" : "al", + "iciti" : "ic", + "ical" : "ic", + "ful" : "", + "ness" : "" + }, + + c = "[^aeiou]", // consonant + v = "[aeiouy]", // vowel + C = c + "[^aeiouy]*", // consonant sequence + V = v + "[aeiou]*", // vowel sequence + + mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 + meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 + mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 + s_v = "^(" + C + ")?" + v; // vowel in stem + + var re_mgr0 = new RegExp(mgr0); + var re_mgr1 = new RegExp(mgr1); + var re_meq1 = new RegExp(meq1); + var re_s_v = new RegExp(s_v); + + var re_1a = /^(.+?)(ss|i)es$/; + var re2_1a = /^(.+?)([^s])s$/; + var re_1b = /^(.+?)eed$/; + var re2_1b = /^(.+?)(ed|ing)$/; + var re_1b_2 = /.$/; + var re2_1b_2 = /(at|bl|iz)$/; + var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); + var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var re_1c = /^(.+?[^aeiou])y$/; + var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + + var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + + var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + var re2_4 = /^(.+?)(s|t)(ion)$/; + + var re_5 = /^(.+?)e$/; + var re_5_1 = /ll$/; + var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var porterStemmer = function porterStemmer(w) { + var stem, + suffix, + firstch, + re, + re2, + re3, + re4; + + if (w.length < 3) { return w; } + + firstch = w.substr(0,1); + if (firstch == "y") { + w = firstch.toUpperCase() + w.substr(1); + } + + // Step 1a + re = re_1a + re2 = re2_1a; + + if (re.test(w)) { w = w.replace(re,"$1$2"); } + else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } + + // Step 1b + re = re_1b; + re2 = re2_1b; + if (re.test(w)) { + var fp = re.exec(w); + re = re_mgr0; + if (re.test(fp[1])) { + re = re_1b_2; + w = w.replace(re,""); + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = re_s_v; + if (re2.test(stem)) { + w = stem; + re2 = re2_1b_2; + re3 = re3_1b_2; + re4 = re4_1b_2; + if (re2.test(w)) { w = w + "e"; } + else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } + else if (re4.test(w)) { w = w + "e"; } + } + } + + // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) + re = re_1c; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem + "i"; + } + + // Step 2 + re = re_2; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step2list[suffix]; + } + } + + // Step 3 + re = re_3; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step3list[suffix]; + } + } + + // Step 4 + re = re_4; + re2 = re2_4; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + if (re.test(stem)) { + w = stem; + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = re_mgr1; + if (re2.test(stem)) { + w = stem; + } + } + + // Step 5 + re = re_5; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + re2 = re_meq1; + re3 = re3_5; + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { + w = stem; + } + } + + re = re_5_1; + re2 = re_mgr1; + if (re.test(w) && re2.test(w)) { + re = re_1b_2; + w = w.replace(re,""); + } + + // and turn initial Y back to y + + if (firstch == "y") { + w = firstch.toLowerCase() + w.substr(1); + } + + return w; + }; + + return function (token) { + return token.update(porterStemmer); + } +})(); + +lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') +/*! + * lunr.stopWordFilter + * Copyright (C) 2019 Oliver Nightingale + */ + +/** + * lunr.generateStopWordFilter builds a stopWordFilter function from the provided + * list of stop words. + * + * The built in lunr.stopWordFilter is built using this generator and can be used + * to generate custom stopWordFilters for applications or non English languages. + * + * @function + * @param {Array} token The token to pass through the filter + * @returns {lunr.PipelineFunction} + * @see lunr.Pipeline + * @see lunr.stopWordFilter + */ +lunr.generateStopWordFilter = function (stopWords) { + var words = stopWords.reduce(function (memo, stopWord) { + memo[stopWord] = stopWord + return memo + }, {}) + + return function (token) { + if (token && words[token.toString()] !== token.toString()) return token + } +} + +/** + * lunr.stopWordFilter is an English language stop word list filter, any words + * contained in the list will not be passed through the filter. + * + * This is intended to be used in the Pipeline. If the token does not pass the + * filter then undefined will be returned. + * + * @function + * @implements {lunr.PipelineFunction} + * @params {lunr.Token} token - A token to check for being a stop word. + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + */ +lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'all', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'any', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'do', + 'does', + 'either', + 'else', + 'ever', + 'every', + 'for', + 'from', + 'get', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'in', + 'into', + 'is', + 'it', + 'its', + 'just', + 'least', + 'let', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'only', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'where', + 'which', + 'while', + 'who', + 'whom', + 'why', + 'will', + 'with', + 'would', + 'yet', + 'you', + 'your' +]) + +lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') +/*! + * lunr.trimmer + * Copyright (C) 2019 Oliver Nightingale + */ + +/** + * lunr.trimmer is a pipeline function for trimming non word + * characters from the beginning and end of tokens before they + * enter the index. + * + * This implementation may not work correctly for non latin + * characters and should either be removed or adapted for use + * with languages with non-latin characters. + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token The token to pass through the filter + * @returns {lunr.Token} + * @see lunr.Pipeline + */ +lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^\W+/, '').replace(/\W+$/, '') + }) +} + +lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') +/*! + * lunr.TokenSet + * Copyright (C) 2019 Oliver Nightingale + */ + +/** + * A token set is used to store the unique list of all tokens + * within an index. Token sets are also used to represent an + * incoming query to the index, this query token set and index + * token set are then intersected to find which tokens to look + * up in the inverted index. + * + * A token set can hold multiple tokens, as in the case of the + * index token set, or it can hold a single token as in the + * case of a simple query token set. + * + * Additionally token sets are used to perform wildcard matching. + * Leading, contained and trailing wildcards are supported, and + * from this edit distance matching can also be provided. + * + * Token sets are implemented as a minimal finite state automata, + * where both common prefixes and suffixes are shared between tokens. + * This helps to reduce the space used for storing the token set. + * + * @constructor + */ +lunr.TokenSet = function () { + this.final = false + this.edges = {} + this.id = lunr.TokenSet._nextId + lunr.TokenSet._nextId += 1 +} + +/** + * Keeps track of the next, auto increment, identifier to assign + * to a new tokenSet. + * + * TokenSets require a unique identifier to be correctly minimised. + * + * @private + */ +lunr.TokenSet._nextId = 1 + +/** + * Creates a TokenSet instance from the given sorted array of words. + * + * @param {String[]} arr - A sorted array of strings to create the set from. + * @returns {lunr.TokenSet} + * @throws Will throw an error if the input array is not sorted. + */ +lunr.TokenSet.fromArray = function (arr) { + var builder = new lunr.TokenSet.Builder + + for (var i = 0, len = arr.length; i < len; i++) { + builder.insert(arr[i]) + } + + builder.finish() + return builder.root +} + +/** + * Creates a token set from a query clause. + * + * @private + * @param {Object} clause - A single clause from lunr.Query. + * @param {string} clause.term - The query clause term. + * @param {number} [clause.editDistance] - The optional edit distance for the term. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromClause = function (clause) { + if ('editDistance' in clause) { + return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) + } else { + return lunr.TokenSet.fromString(clause.term) + } +} + +/** + * Creates a token set representing a single string with a specified + * edit distance. + * + * Insertions, deletions, substitutions and transpositions are each + * treated as an edit distance of 1. + * + * Increasing the allowed edit distance will have a dramatic impact + * on the performance of both creating and intersecting these TokenSets. + * It is advised to keep the edit distance less than 3. + * + * @param {string} str - The string to create the token set from. + * @param {number} editDistance - The allowed edit distance to match. + * @returns {lunr.Vector} + */ +lunr.TokenSet.fromFuzzyString = function (str, editDistance) { + var root = new lunr.TokenSet + + var stack = [{ + node: root, + editsRemaining: editDistance, + str: str + }] + + while (stack.length) { + var frame = stack.pop() + + // no edit + if (frame.str.length > 0) { + var char = frame.str.charAt(0), + noEditNode + + if (char in frame.node.edges) { + noEditNode = frame.node.edges[char] + } else { + noEditNode = new lunr.TokenSet + frame.node.edges[char] = noEditNode + } + + if (frame.str.length == 1) { + noEditNode.final = true + } + + stack.push({ + node: noEditNode, + editsRemaining: frame.editsRemaining, + str: frame.str.slice(1) + }) + } + + if (frame.editsRemaining == 0) { + continue + } + + // insertion + if ("*" in frame.node.edges) { + var insertionNode = frame.node.edges["*"] + } else { + var insertionNode = new lunr.TokenSet + frame.node.edges["*"] = insertionNode + } + + if (frame.str.length == 0) { + insertionNode.final = true + } + + stack.push({ + node: insertionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str + }) + + // deletion + // can only do a deletion if we have enough edits remaining + // and if there are characters left to delete in the string + if (frame.str.length > 1) { + stack.push({ + node: frame.node, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // deletion + // just removing the last character from the str + if (frame.str.length == 1) { + frame.node.final = true + } + + // substitution + // can only do a substitution if we have enough edits remaining + // and if there are characters left to substitute + if (frame.str.length >= 1) { + if ("*" in frame.node.edges) { + var substitutionNode = frame.node.edges["*"] + } else { + var substitutionNode = new lunr.TokenSet + frame.node.edges["*"] = substitutionNode + } + + if (frame.str.length == 1) { + substitutionNode.final = true + } + + stack.push({ + node: substitutionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // transposition + // can only do a transposition if there are edits remaining + // and there are enough characters to transpose + if (frame.str.length > 1) { + var charA = frame.str.charAt(0), + charB = frame.str.charAt(1), + transposeNode + + if (charB in frame.node.edges) { + transposeNode = frame.node.edges[charB] + } else { + transposeNode = new lunr.TokenSet + frame.node.edges[charB] = transposeNode + } + + if (frame.str.length == 1) { + transposeNode.final = true + } + + stack.push({ + node: transposeNode, + editsRemaining: frame.editsRemaining - 1, + str: charA + frame.str.slice(2) + }) + } + } + + return root +} + +/** + * Creates a TokenSet from a string. + * + * The string may contain one or more wildcard characters (*) + * that will allow wildcard matching when intersecting with + * another TokenSet. + * + * @param {string} str - The string to create a TokenSet from. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromString = function (str) { + var node = new lunr.TokenSet, + root = node + + /* + * Iterates through all characters within the passed string + * appending a node for each character. + * + * When a wildcard character is found then a self + * referencing edge is introduced to continually match + * any number of any characters. + */ + for (var i = 0, len = str.length; i < len; i++) { + var char = str[i], + final = (i == len - 1) + + if (char == "*") { + node.edges[char] = node + node.final = final + + } else { + var next = new lunr.TokenSet + next.final = final + + node.edges[char] = next + node = next + } + } + + return root +} + +/** + * Converts this TokenSet into an array of strings + * contained within the TokenSet. + * + * This is not intended to be used on a TokenSet that + * contains wildcards, in these cases the results are + * undefined and are likely to cause an infinite loop. + * + * @returns {string[]} + */ +lunr.TokenSet.prototype.toArray = function () { + var words = [] + + var stack = [{ + prefix: "", + node: this + }] + + while (stack.length) { + var frame = stack.pop(), + edges = Object.keys(frame.node.edges), + len = edges.length + + if (frame.node.final) { + /* In Safari, at this point the prefix is sometimes corrupted, see: + * https://github.com/olivernn/lunr.js/issues/279 Calling any + * String.prototype method forces Safari to "cast" this string to what + * it's supposed to be, fixing the bug. */ + frame.prefix.charAt(0) + words.push(frame.prefix) + } + + for (var i = 0; i < len; i++) { + var edge = edges[i] + + stack.push({ + prefix: frame.prefix.concat(edge), + node: frame.node.edges[edge] + }) + } + } + + return words +} + +/** + * Generates a string representation of a TokenSet. + * + * This is intended to allow TokenSets to be used as keys + * in objects, largely to aid the construction and minimisation + * of a TokenSet. As such it is not designed to be a human + * friendly representation of the TokenSet. + * + * @returns {string} + */ +lunr.TokenSet.prototype.toString = function () { + // NOTE: Using Object.keys here as this.edges is very likely + // to enter 'hash-mode' with many keys being added + // + // avoiding a for-in loop here as it leads to the function + // being de-optimised (at least in V8). From some simple + // benchmarks the performance is comparable, but allowing + // V8 to optimize may mean easy performance wins in the future. + + if (this._str) { + return this._str + } + + var str = this.final ? '1' : '0', + labels = Object.keys(this.edges).sort(), + len = labels.length + + for (var i = 0; i < len; i++) { + var label = labels[i], + node = this.edges[label] + + str = str + label + node.id + } + + return str +} + +/** + * Returns a new TokenSet that is the intersection of + * this TokenSet and the passed TokenSet. + * + * This intersection will take into account any wildcards + * contained within the TokenSet. + * + * @param {lunr.TokenSet} b - An other TokenSet to intersect with. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.prototype.intersect = function (b) { + var output = new lunr.TokenSet, + frame = undefined + + var stack = [{ + qNode: b, + output: output, + node: this + }] + + while (stack.length) { + frame = stack.pop() + + // NOTE: As with the #toString method, we are using + // Object.keys and a for loop instead of a for-in loop + // as both of these objects enter 'hash' mode, causing + // the function to be de-optimised in V8 + var qEdges = Object.keys(frame.qNode.edges), + qLen = qEdges.length, + nEdges = Object.keys(frame.node.edges), + nLen = nEdges.length + + for (var q = 0; q < qLen; q++) { + var qEdge = qEdges[q] + + for (var n = 0; n < nLen; n++) { + var nEdge = nEdges[n] + + if (nEdge == qEdge || qEdge == '*') { + var node = frame.node.edges[nEdge], + qNode = frame.qNode.edges[qEdge], + final = node.final && qNode.final, + next = undefined + + if (nEdge in frame.output.edges) { + // an edge already exists for this character + // no need to create a new node, just set the finality + // bit unless this node is already final + next = frame.output.edges[nEdge] + next.final = next.final || final + + } else { + // no edge exists yet, must create one + // set the finality bit and insert it + // into the output + next = new lunr.TokenSet + next.final = final + frame.output.edges[nEdge] = next + } + + stack.push({ + qNode: qNode, + output: next, + node: node + }) + } + } + } + } + + return output +} +lunr.TokenSet.Builder = function () { + this.previousWord = "" + this.root = new lunr.TokenSet + this.uncheckedNodes = [] + this.minimizedNodes = {} +} + +lunr.TokenSet.Builder.prototype.insert = function (word) { + var node, + commonPrefix = 0 + + if (word < this.previousWord) { + throw new Error ("Out of order word insertion") + } + + for (var i = 0; i < word.length && i < this.previousWord.length; i++) { + if (word[i] != this.previousWord[i]) break + commonPrefix++ + } + + this.minimize(commonPrefix) + + if (this.uncheckedNodes.length == 0) { + node = this.root + } else { + node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child + } + + for (var i = commonPrefix; i < word.length; i++) { + var nextNode = new lunr.TokenSet, + char = word[i] + + node.edges[char] = nextNode + + this.uncheckedNodes.push({ + parent: node, + char: char, + child: nextNode + }) + + node = nextNode + } + + node.final = true + this.previousWord = word +} + +lunr.TokenSet.Builder.prototype.finish = function () { + this.minimize(0) +} + +lunr.TokenSet.Builder.prototype.minimize = function (downTo) { + for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { + var node = this.uncheckedNodes[i], + childKey = node.child.toString() + + if (childKey in this.minimizedNodes) { + node.parent.edges[node.char] = this.minimizedNodes[childKey] + } else { + // Cache the key for this node since + // we know it can't change anymore + node.child._str = childKey + + this.minimizedNodes[childKey] = node.child + } + + this.uncheckedNodes.pop() + } +} +/*! + * lunr.Index + * Copyright (C) 2019 Oliver Nightingale + */ + +/** + * An index contains the built index of all documents and provides a query interface + * to the index. + * + * Usually instances of lunr.Index will not be created using this constructor, instead + * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be + * used to load previously built and serialized indexes. + * + * @constructor + * @param {Object} attrs - The attributes of the built search index. + * @param {Object} attrs.invertedIndex - An index of term/field to document reference. + * @param {Object} attrs.fieldVectors - Field vectors + * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. + * @param {string[]} attrs.fields - The names of indexed document fields. + * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. + */ +lunr.Index = function (attrs) { + this.invertedIndex = attrs.invertedIndex + this.fieldVectors = attrs.fieldVectors + this.tokenSet = attrs.tokenSet + this.fields = attrs.fields + this.pipeline = attrs.pipeline +} + +/** + * A result contains details of a document matching a search query. + * @typedef {Object} lunr.Index~Result + * @property {string} ref - The reference of the document this result represents. + * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. + * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. + */ + +/** + * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple + * query language which itself is parsed into an instance of lunr.Query. + * + * For programmatically building queries it is advised to directly use lunr.Query, the query language + * is best used for human entered text rather than program generated text. + * + * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported + * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' + * or 'world', though those that contain both will rank higher in the results. + * + * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can + * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding + * wildcards will increase the number of documents that will be found but can also have a negative + * impact on query performance, especially with wildcards at the beginning of a term. + * + * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term + * hello in the title field will match this query. Using a field not present in the index will lead + * to an error being thrown. + * + * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term + * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported + * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. + * Avoid large values for edit distance to improve query performance. + * + * Each term also supports a presence modifier. By default a term's presence in document is optional, however + * this can be changed to either required or prohibited. For a term's presence to be required in a document the + * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and + * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not + * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. + * + * To escape special characters the backslash character '\' can be used, this allows searches to include + * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead + * of attempting to apply a boost of 2 to the search term "foo". + * + * @typedef {string} lunr.Index~QueryString + * @example

  • +ko?-Vt!dk~ZQHhO+s3qQV|u!$ZQHiZ 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

    +ko?-Vt!dk~ZQHhO+s3qQV|u!$ZQHiZ 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

    + * hello + * @example + * hello world + * @example + * title:hello + * @example + * hello^10 + * @example + * hello~2 + * @example + * -foo +bar baz + */ + +/** + * Performs a search against the index using lunr query syntax. + * + * Results will be returned sorted by their score, the most relevant results + * will be returned first. For details on how the score is calculated, please see + * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. + * + * For more programmatic querying use lunr.Index#query. + * + * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. + * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.search = function (queryString) { + return this.query(function (query) { + var parser = new lunr.QueryParser(queryString, query) + parser.parse() + }) +} + +/** + * A query builder callback provides a query object to be used to express + * the query to perform on the index. + * + * @callback lunr.Index~queryBuilder + * @param {lunr.Query} query - The query object to build up. + * @this lunr.Query + */ + +/** + * Performs a query against the index using the yielded lunr.Query object. + * + * If performing programmatic queries against the index, this method is preferred + * over lunr.Index#search so as to avoid the additional query parsing overhead. + * + * A query object is yielded to the supplied function which should be used to + * express the query to be run against the index. + * + * Note that although this function takes a callback parameter it is _not_ an + * asynchronous operation, the callback is just yielded a query object to be + * customized. + * + * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.query = function (fn) { + // for each query clause + // * process terms + // * expand terms from token set + // * find matching documents and metadata + // * get document vectors + // * score documents + + var query = new lunr.Query(this.fields), + matchingFields = Object.create(null), + queryVectors = Object.create(null), + termFieldCache = Object.create(null), + requiredMatches = Object.create(null), + prohibitedMatches = Object.create(null) + + /* + * To support field level boosts a query vector is created per + * field. An empty vector is eagerly created to support negated + * queries. + */ + for (var i = 0; i < this.fields.length; i++) { + queryVectors[this.fields[i]] = new lunr.Vector + } + + fn.call(query, query) + + for (var i = 0; i < query.clauses.length; i++) { + /* + * Unless the pipeline has been disabled for this term, which is + * the case for terms with wildcards, we need to pass the clause + * term through the search pipeline. A pipeline returns an array + * of processed terms. Pipeline functions may expand the passed + * term, which means we may end up performing multiple index lookups + * for a single query term. + */ + var clause = query.clauses[i], + terms = null, + clauseMatches = lunr.Set.complete + + if (clause.usePipeline) { + terms = this.pipeline.runString(clause.term, { + fields: clause.fields + }) + } else { + terms = [clause.term] + } + + for (var m = 0; m < terms.length; m++) { + var term = terms[m] + + /* + * Each term returned from the pipeline needs to use the same query + * clause object, e.g. the same boost and or edit distance. The + * simplest way to do this is to re-use the clause object but mutate + * its term property. + */ + clause.term = term + + /* + * From the term in the clause we create a token set which will then + * be used to intersect the indexes token set to get a list of terms + * to lookup in the inverted index + */ + var termTokenSet = lunr.TokenSet.fromClause(clause), + expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() + + /* + * If a term marked as required does not exist in the tokenSet it is + * impossible for the search to return any matches. We set all the field + * scoped required matches set to empty and stop examining any further + * clauses. + */ + if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = lunr.Set.empty + } + + break + } + + for (var j = 0; j < expandedTerms.length; j++) { + /* + * For each term get the posting and termIndex, this is required for + * building the query vector. + */ + var expandedTerm = expandedTerms[j], + posting = this.invertedIndex[expandedTerm], + termIndex = posting._index + + for (var k = 0; k < clause.fields.length; k++) { + /* + * For each field that this query term is scoped by (by default + * all fields are in scope) we need to get all the document refs + * that have this term in that field. + * + * The posting is the entry in the invertedIndex for the matching + * term from above. + */ + var field = clause.fields[k], + fieldPosting = posting[field], + matchingDocumentRefs = Object.keys(fieldPosting), + termField = expandedTerm + "/" + field, + matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) + + /* + * if the presence of this term is required ensure that the matching + * documents are added to the set of required matches for this clause. + * + */ + if (clause.presence == lunr.Query.presence.REQUIRED) { + clauseMatches = clauseMatches.union(matchingDocumentsSet) + + if (requiredMatches[field] === undefined) { + requiredMatches[field] = lunr.Set.complete + } + } + + /* + * if the presence of this term is prohibited ensure that the matching + * documents are added to the set of prohibited matches for this field, + * creating that set if it does not yet exist. + */ + if (clause.presence == lunr.Query.presence.PROHIBITED) { + if (prohibitedMatches[field] === undefined) { + prohibitedMatches[field] = lunr.Set.empty + } + + prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) + + /* + * Prohibited matches should not be part of the query vector used for + * similarity scoring and no metadata should be extracted so we continue + * to the next field + */ + continue + } + + /* + * The query field vector is populated using the termIndex found for + * the term and a unit value with the appropriate boost applied. + * Using upsert because there could already be an entry in the vector + * for the term we are working with. In that case we just add the scores + * together. + */ + queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) + + /** + * If we've already seen this term, field combo then we've already collected + * the matching documents and metadata, no need to go through all that again + */ + if (termFieldCache[termField]) { + continue + } + + for (var l = 0; l < matchingDocumentRefs.length; l++) { + /* + * All metadata for this term/field/document triple + * are then extracted and collected into an instance + * of lunr.MatchData ready to be returned in the query + * results + */ + var matchingDocumentRef = matchingDocumentRefs[l], + matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), + metadata = fieldPosting[matchingDocumentRef], + fieldMatch + + if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { + matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) + } else { + fieldMatch.add(expandedTerm, field, metadata) + } + + } + + termFieldCache[termField] = true + } + } + } + + /** + * If the presence was required we need to update the requiredMatches field sets. + * We do this after all fields for the term have collected their matches because + * the clause terms presence is required in _any_ of the fields not _all_ of the + * fields. + */ + if (clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) + } + } + } + + /** + * Need to combine the field scoped required and prohibited + * matching documents into a global set of required and prohibited + * matches + */ + var allRequiredMatches = lunr.Set.complete, + allProhibitedMatches = lunr.Set.empty + + for (var i = 0; i < this.fields.length; i++) { + var field = this.fields[i] + + if (requiredMatches[field]) { + allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) + } + + if (prohibitedMatches[field]) { + allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) + } + } + + var matchingFieldRefs = Object.keys(matchingFields), + results = [], + matches = Object.create(null) + + /* + * If the query is negated (contains only prohibited terms) + * we need to get _all_ fieldRefs currently existing in the + * index. This is only done when we know that the query is + * entirely prohibited terms to avoid any cost of getting all + * fieldRefs unnecessarily. + * + * Additionally, blank MatchData must be created to correctly + * populate the results. + */ + if (query.isNegated()) { + matchingFieldRefs = Object.keys(this.fieldVectors) + + for (var i = 0; i < matchingFieldRefs.length; i++) { + var matchingFieldRef = matchingFieldRefs[i] + var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) + matchingFields[matchingFieldRef] = new lunr.MatchData + } + } + + for (var i = 0; i < matchingFieldRefs.length; i++) { + /* + * Currently we have document fields that match the query, but we + * need to return documents. The matchData and scores are combined + * from multiple fields belonging to the same document. + * + * Scores are calculated by field, using the query vectors created + * above, and combined into a final document score using addition. + */ + var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), + docRef = fieldRef.docRef + + if (!allRequiredMatches.contains(docRef)) { + continue + } + + if (allProhibitedMatches.contains(docRef)) { + continue + } + + var fieldVector = this.fieldVectors[fieldRef], + score = queryVectors[fieldRef.fieldName].similarity(fieldVector), + docMatch + + if ((docMatch = matches[docRef]) !== undefined) { + docMatch.score += score + docMatch.matchData.combine(matchingFields[fieldRef]) + } else { + var match = { + ref: docRef, + score: score, + matchData: matchingFields[fieldRef] + } + matches[docRef] = match + results.push(match) + } + } + + /* + * Sort the results objects by score, highest first. + */ + return results.sort(function (a, b) { + return b.score - a.score + }) +} + +/** + * Prepares the index for JSON serialization. + * + * The schema for this JSON blob will be described in a + * separate JSON schema file. + * + * @returns {Object} + */ +lunr.Index.prototype.toJSON = function () { + var invertedIndex = Object.keys(this.invertedIndex) + .sort() + .map(function (term) { + return [term, this.invertedIndex[term]] + }, this) + + var fieldVectors = Object.keys(this.fieldVectors) + .map(function (ref) { + return [ref, this.fieldVectors[ref].toJSON()] + }, this) + + return { + version: lunr.version, + fields: this.fields, + fieldVectors: fieldVectors, + invertedIndex: invertedIndex, + pipeline: this.pipeline.toJSON() + } +} + +/** + * Loads a previously serialized lunr.Index + * + * @param {Object} serializedIndex - A previously serialized lunr.Index + * @returns {lunr.Index} + */ +lunr.Index.load = function (serializedIndex) { + var attrs = {}, + fieldVectors = {}, + serializedVectors = serializedIndex.fieldVectors, + invertedIndex = Object.create(null), + serializedInvertedIndex = serializedIndex.invertedIndex, + tokenSetBuilder = new lunr.TokenSet.Builder, + pipeline = lunr.Pipeline.load(serializedIndex.pipeline) + + if (serializedIndex.version != lunr.version) { + lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") + } + + for (var i = 0; i < serializedVectors.length; i++) { + var tuple = serializedVectors[i], + ref = tuple[0], + elements = tuple[1] + + fieldVectors[ref] = new lunr.Vector(elements) + } + + for (var i = 0; i < serializedInvertedIndex.length; i++) { + var tuple = serializedInvertedIndex[i], + term = tuple[0], + posting = tuple[1] + + tokenSetBuilder.insert(term) + invertedIndex[term] = posting + } + + tokenSetBuilder.finish() + + attrs.fields = serializedIndex.fields + + attrs.fieldVectors = fieldVectors + attrs.invertedIndex = invertedIndex + attrs.tokenSet = tokenSetBuilder.root + attrs.pipeline = pipeline + + return new lunr.Index(attrs) +} +/*! + * lunr.Builder + * Copyright (C) 2019 Oliver Nightingale + */ + +/** + * lunr.Builder performs indexing on a set of documents and + * returns instances of lunr.Index ready for querying. + * + * All configuration of the index is done via the builder, the + * fields to index, the document reference, the text processing + * pipeline and document scoring parameters are all set on the + * builder before indexing. + * + * @constructor + * @property {string} _ref - Internal reference to the document reference field. + * @property {string[]} _fields - Internal reference to the document fields to index. + * @property {object} invertedIndex - The inverted index maps terms to document fields. + * @property {object} documentTermFrequencies - Keeps track of document term frequencies. + * @property {object} documentLengths - Keeps track of the length of documents added to the index. + * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. + * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. + * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. + * @property {number} documentCount - Keeps track of the total number of documents indexed. + * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. + * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. + * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. + * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. + */ +lunr.Builder = function () { + this._ref = "id" + this._fields = Object.create(null) + this._documents = Object.create(null) + this.invertedIndex = Object.create(null) + this.fieldTermFrequencies = {} + this.fieldLengths = {} + this.tokenizer = lunr.tokenizer + this.pipeline = new lunr.Pipeline + this.searchPipeline = new lunr.Pipeline + this.documentCount = 0 + this._b = 0.75 + this._k1 = 1.2 + this.termIndex = 0 + this.metadataWhitelist = [] +} + +/** + * Sets the document field used as the document reference. Every document must have this field. + * The type of this field in the document should be a string, if it is not a string it will be + * coerced into a string by calling toString. + * + * The default ref is 'id'. + * + * The ref should _not_ be changed during indexing, it should be set before any documents are + * added to the index. Changing it during indexing can lead to inconsistent results. + * + * @param {string} ref - The name of the reference field in the document. + */ +lunr.Builder.prototype.ref = function (ref) { + this._ref = ref +} + +/** + * A function that is used to extract a field from a document. + * + * Lunr expects a field to be at the top level of a document, if however the field + * is deeply nested within a document an extractor function can be used to extract + * the right field for indexing. + * + * @callback fieldExtractor + * @param {object} doc - The document being added to the index. + * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. + * @example + * function (doc) { return doc.nested.field } + */ + +/** + * Adds a field to the list of document fields that will be indexed. Every document being + * indexed should have this field. Null values for this field in indexed documents will + * not cause errors but will limit the chance of that document being retrieved by searches. + * + * All fields should be added before adding documents to the index. Adding fields after + * a document has been indexed will have no effect on already indexed documents. + * + * Fields can be boosted at build time. This allows terms within that field to have more + * importance when ranking search results. Use a field boost to specify that matches within + * one field are more important than other fields. + * + * @param {string} fieldName - The name of a field to index in all documents. + * @param {object} attributes - Optional attributes associated with this field. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. + * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. + * @throws {RangeError} fieldName cannot contain unsupported characters '/' + */ +lunr.Builder.prototype.field = function (fieldName, attributes) { + if (/\//.test(fieldName)) { + throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") + } + + this._fields[fieldName] = attributes || {} +} + +/** + * A parameter to tune the amount of field length normalisation that is applied when + * calculating relevance scores. A value of 0 will completely disable any normalisation + * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b + * will be clamped to the range 0 - 1. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.b = function (number) { + if (number < 0) { + this._b = 0 + } else if (number > 1) { + this._b = 1 + } else { + this._b = number + } +} + +/** + * A parameter that controls the speed at which a rise in term frequency results in term + * frequency saturation. The default value is 1.2. Setting this to a higher value will give + * slower saturation levels, a lower value will result in quicker saturation. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.k1 = function (number) { + this._k1 = number +} + +/** + * Adds a document to the index. + * + * Before adding fields to the index the index should have been fully setup, with the document + * ref and all fields to index already having been specified. + * + * The document must have a field name as specified by the ref (by default this is 'id') and + * it should have all fields defined for indexing, though null or undefined values will not + * cause errors. + * + * Entire documents can be boosted at build time. Applying a boost to a document indicates that + * this document should rank higher in search results than other documents. + * + * @param {object} doc - The document to add to the index. + * @param {object} attributes - Optional attributes associated with this document. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. + */ +lunr.Builder.prototype.add = function (doc, attributes) { + var docRef = doc[this._ref], + fields = Object.keys(this._fields) + + this._documents[docRef] = attributes || {} + this.documentCount += 1 + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i], + extractor = this._fields[fieldName].extractor, + field = extractor ? extractor(doc) : doc[fieldName], + tokens = this.tokenizer(field, { + fields: [fieldName] + }), + terms = this.pipeline.run(tokens), + fieldRef = new lunr.FieldRef (docRef, fieldName), + fieldTerms = Object.create(null) + + this.fieldTermFrequencies[fieldRef] = fieldTerms + this.fieldLengths[fieldRef] = 0 + + // store the length of this field for this document + this.fieldLengths[fieldRef] += terms.length + + // calculate term frequencies for this field + for (var j = 0; j < terms.length; j++) { + var term = terms[j] + + if (fieldTerms[term] == undefined) { + fieldTerms[term] = 0 + } + + fieldTerms[term] += 1 + + // add to inverted index + // create an initial posting if one doesn't exist + if (this.invertedIndex[term] == undefined) { + var posting = Object.create(null) + posting["_index"] = this.termIndex + this.termIndex += 1 + + for (var k = 0; k < fields.length; k++) { + posting[fields[k]] = Object.create(null) + } + + this.invertedIndex[term] = posting + } + + // add an entry for this term/fieldName/docRef to the invertedIndex + if (this.invertedIndex[term][fieldName][docRef] == undefined) { + this.invertedIndex[term][fieldName][docRef] = Object.create(null) + } + + // store all whitelisted metadata about this token in the + // inverted index + for (var l = 0; l < this.metadataWhitelist.length; l++) { + var metadataKey = this.metadataWhitelist[l], + metadata = term.metadata[metadataKey] + + if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { + this.invertedIndex[term][fieldName][docRef][metadataKey] = [] + } + + this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) + } + } + + } +} + +/** + * Calculates the average document length for this index + * + * @private + */ +lunr.Builder.prototype.calculateAverageFieldLengths = function () { + + var fieldRefs = Object.keys(this.fieldLengths), + numberOfFields = fieldRefs.length, + accumulator = {}, + documentsWithField = {} + + for (var i = 0; i < numberOfFields; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + field = fieldRef.fieldName + + documentsWithField[field] || (documentsWithField[field] = 0) + documentsWithField[field] += 1 + + accumulator[field] || (accumulator[field] = 0) + accumulator[field] += this.fieldLengths[fieldRef] + } + + var fields = Object.keys(this._fields) + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i] + accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] + } + + this.averageFieldLength = accumulator +} + +/** + * Builds a vector space model of every document using lunr.Vector + * + * @private + */ +lunr.Builder.prototype.createFieldVectors = function () { + var fieldVectors = {}, + fieldRefs = Object.keys(this.fieldTermFrequencies), + fieldRefsLength = fieldRefs.length, + termIdfCache = Object.create(null) + + for (var i = 0; i < fieldRefsLength; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + fieldName = fieldRef.fieldName, + fieldLength = this.fieldLengths[fieldRef], + fieldVector = new lunr.Vector, + termFrequencies = this.fieldTermFrequencies[fieldRef], + terms = Object.keys(termFrequencies), + termsLength = terms.length + + + var fieldBoost = this._fields[fieldName].boost || 1, + docBoost = this._documents[fieldRef.docRef].boost || 1 + + for (var j = 0; j < termsLength; j++) { + var term = terms[j], + tf = termFrequencies[term], + termIndex = this.invertedIndex[term]._index, + idf, score, scoreWithPrecision + + if (termIdfCache[term] === undefined) { + idf = lunr.idf(this.invertedIndex[term], this.documentCount) + termIdfCache[term] = idf + } else { + idf = termIdfCache[term] + } + + score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) + score *= fieldBoost + score *= docBoost + scoreWithPrecision = Math.round(score * 1000) / 1000 + // Converts 1.23456789 to 1.234. + // Reducing the precision so that the vectors take up less + // space when serialised. Doing it now so that they behave + // the same before and after serialisation. Also, this is + // the fastest approach to reducing a number's precision in + // JavaScript. + + fieldVector.insert(termIndex, scoreWithPrecision) + } + + fieldVectors[fieldRef] = fieldVector + } + + this.fieldVectors = fieldVectors +} + +/** + * Creates a token set of all tokens in the index using lunr.TokenSet + * + * @private + */ +lunr.Builder.prototype.createTokenSet = function () { + this.tokenSet = lunr.TokenSet.fromArray( + Object.keys(this.invertedIndex).sort() + ) +} + +/** + * Builds the index, creating an instance of lunr.Index. + * + * This completes the indexing process and should only be called + * once all documents have been added to the index. + * + * @returns {lunr.Index} + */ +lunr.Builder.prototype.build = function () { + this.calculateAverageFieldLengths() + this.createFieldVectors() + this.createTokenSet() + + return new lunr.Index({ + invertedIndex: this.invertedIndex, + fieldVectors: this.fieldVectors, + tokenSet: this.tokenSet, + fields: Object.keys(this._fields), + pipeline: this.searchPipeline + }) +} + +/** + * Applies a plugin to the index builder. + * + * A plugin is a function that is called with the index builder as its context. + * Plugins can be used to customise or extend the behaviour of the index + * in some way. A plugin is just a function, that encapsulated the custom + * behaviour that should be applied when building the index. + * + * The plugin function will be called with the index builder as its argument, additional + * arguments can also be passed when calling use. The function will be called + * with the index builder as its context. + * + * @param {Function} plugin The plugin to apply. + */ +lunr.Builder.prototype.use = function (fn) { + var args = Array.prototype.slice.call(arguments, 1) + args.unshift(this) + fn.apply(this, args) +} +/** + * Contains and collects metadata about a matching document. + * A single instance of lunr.MatchData is returned as part of every + * lunr.Index~Result. + * + * @constructor + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + * @property {object} metadata - A cloned collection of metadata associated with this document. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData = function (term, field, metadata) { + var clonedMetadata = Object.create(null), + metadataKeys = Object.keys(metadata || {}) + + // Cloning the metadata to prevent the original + // being mutated during match data combination. + // Metadata is kept in an array within the inverted + // index so cloning the data can be done with + // Array#slice + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + clonedMetadata[key] = metadata[key].slice() + } + + this.metadata = Object.create(null) + + if (term !== undefined) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = clonedMetadata + } +} + +/** + * An instance of lunr.MatchData will be created for every term that matches a + * document. However only one instance is required in a lunr.Index~Result. This + * method combines metadata from another instance of lunr.MatchData with this + * objects metadata. + * + * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData.prototype.combine = function (otherMatchData) { + var terms = Object.keys(otherMatchData.metadata) + + for (var i = 0; i < terms.length; i++) { + var term = terms[i], + fields = Object.keys(otherMatchData.metadata[term]) + + if (this.metadata[term] == undefined) { + this.metadata[term] = Object.create(null) + } + + for (var j = 0; j < fields.length; j++) { + var field = fields[j], + keys = Object.keys(otherMatchData.metadata[term][field]) + + if (this.metadata[term][field] == undefined) { + this.metadata[term][field] = Object.create(null) + } + + for (var k = 0; k < keys.length; k++) { + var key = keys[k] + + if (this.metadata[term][field][key] == undefined) { + this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] + } else { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) + } + + } + } + } +} + +/** + * Add metadata for a term/field pair to this instance of match data. + * + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + */ +lunr.MatchData.prototype.add = function (term, field, metadata) { + if (!(term in this.metadata)) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = metadata + return + } + + if (!(field in this.metadata[term])) { + this.metadata[term][field] = metadata + return + } + + var metadataKeys = Object.keys(metadata) + + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + + if (key in this.metadata[term][field]) { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) + } else { + this.metadata[term][field][key] = metadata[key] + } + } +} +/** + * A lunr.Query provides a programmatic way of defining queries to be performed + * against a {@link lunr.Index}. + * + * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method + * so the query object is pre-initialized with the right index fields. + * + * @constructor + * @property {lunr.Query~Clause[]} clauses - An array of query clauses. + * @property {string[]} allFields - An array of all available fields in a lunr.Index. + */ +lunr.Query = function (allFields) { + this.clauses = [] + this.allFields = allFields +} + +/** + * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. + * + * This allows wildcards to be added to the beginning and end of a term without having to manually do any string + * concatenation. + * + * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. + * + * @constant + * @default + * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour + * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists + * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example + * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) + * @example + * query.term('foo', { + * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING + * }) + */ + +lunr.Query.wildcard = new String ("*") +lunr.Query.wildcard.NONE = 0 +lunr.Query.wildcard.LEADING = 1 +lunr.Query.wildcard.TRAILING = 2 + +/** + * Constants for indicating what kind of presence a term must have in matching documents. + * + * @constant + * @enum {number} + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example + * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) + */ +lunr.Query.presence = { + /** + * Term's presence in a document is optional, this is the default value. + */ + OPTIONAL: 1, + + /** + * Term's presence in a document is required, documents that do not contain + * this term will not be returned. + */ + REQUIRED: 2, + + /** + * Term's presence in a document is prohibited, documents that do contain + * this term will not be returned. + */ + PROHIBITED: 3 +} + +/** + * A single clause in a {@link lunr.Query} contains a term and details on how to + * match that term against a {@link lunr.Index}. + * + * @typedef {Object} lunr.Query~Clause + * @property {string[]} fields - The fields in an index this clause should be matched against. + * @property {number} [boost=1] - Any boost that should be applied when matching this clause. + * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. + * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. + * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. + * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. + */ + +/** + * Adds a {@link lunr.Query~Clause} to this query. + * + * Unless the clause contains the fields to be matched all fields will be matched. In addition + * a default boost of 1 is applied to the clause. + * + * @param {lunr.Query~Clause} clause - The clause to add to this query. + * @see lunr.Query~Clause + * @returns {lunr.Query} + */ +lunr.Query.prototype.clause = function (clause) { + if (!('fields' in clause)) { + clause.fields = this.allFields + } + + if (!('boost' in clause)) { + clause.boost = 1 + } + + if (!('usePipeline' in clause)) { + clause.usePipeline = true + } + + if (!('wildcard' in clause)) { + clause.wildcard = lunr.Query.wildcard.NONE + } + + if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { + clause.term = "*" + clause.term + } + + if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { + clause.term = "" + clause.term + "*" + } + + if (!('presence' in clause)) { + clause.presence = lunr.Query.presence.OPTIONAL + } + + this.clauses.push(clause) + + return this +} + +/** + * A negated query is one in which every clause has a presence of + * prohibited. These queries require some special processing to return + * the expected results. + * + * @returns boolean + */ +lunr.Query.prototype.isNegated = function () { + for (var i = 0; i < this.clauses.length; i++) { + if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { + return false + } + } + + return true +} + +/** + * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} + * to the list of clauses that make up this query. + * + * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion + * to a token or token-like string should be done before calling this method. + * + * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an + * array, each term in the array will share the same options. + * + * @param {object|object[]} term - The term(s) to add to the query. + * @param {object} [options] - Any additional properties to add to the query clause. + * @returns {lunr.Query} + * @see lunr.Query#clause + * @see lunr.Query~Clause + * @example + * query.term("foo") + * @example + * query.term("foo", { + * fields: ["title"], + * boost: 10, + * wildcard: lunr.Query.wildcard.TRAILING + * }) + * @example + * query.term(lunr.tokenizer("foo bar")) + */ +lunr.Query.prototype.term = function (term, options) { + if (Array.isArray(term)) { + term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) + return this + } + + var clause = options || {} + clause.term = term.toString() + + this.clause(clause) + + return this +} +lunr.QueryParseError = function (message, start, end) { + this.name = "QueryParseError" + this.message = message + this.start = start + this.end = end +} + +lunr.QueryParseError.prototype = new Error +lunr.QueryLexer = function (str) { + this.lexemes = [] + this.str = str + this.length = str.length + this.pos = 0 + this.start = 0 + this.escapeCharPositions = [] +} + +lunr.QueryLexer.prototype.run = function () { + var state = lunr.QueryLexer.lexText + + while (state) { + state = state(this) + } +} + +lunr.QueryLexer.prototype.sliceString = function () { + var subSlices = [], + sliceStart = this.start, + sliceEnd = this.pos + + for (var i = 0; i < this.escapeCharPositions.length; i++) { + sliceEnd = this.escapeCharPositions[i] + subSlices.push(this.str.slice(sliceStart, sliceEnd)) + sliceStart = sliceEnd + 1 + } + + subSlices.push(this.str.slice(sliceStart, this.pos)) + this.escapeCharPositions.length = 0 + + return subSlices.join('') +} + +lunr.QueryLexer.prototype.emit = function (type) { + this.lexemes.push({ + type: type, + str: this.sliceString(), + start: this.start, + end: this.pos + }) + + this.start = this.pos +} + +lunr.QueryLexer.prototype.escapeCharacter = function () { + this.escapeCharPositions.push(this.pos - 1) + this.pos += 1 +} + +lunr.QueryLexer.prototype.next = function () { + if (this.pos >= this.length) { + return lunr.QueryLexer.EOS + } + + var char = this.str.charAt(this.pos) + this.pos += 1 + return char +} + +lunr.QueryLexer.prototype.width = function () { + return this.pos - this.start +} + +lunr.QueryLexer.prototype.ignore = function () { + if (this.start == this.pos) { + this.pos += 1 + } + + this.start = this.pos +} + +lunr.QueryLexer.prototype.backup = function () { + this.pos -= 1 +} + +lunr.QueryLexer.prototype.acceptDigitRun = function () { + var char, charCode + + do { + char = this.next() + charCode = char.charCodeAt(0) + } while (charCode > 47 && charCode < 58) + + if (char != lunr.QueryLexer.EOS) { + this.backup() + } +} + +lunr.QueryLexer.prototype.more = function () { + return this.pos < this.length +} + +lunr.QueryLexer.EOS = 'EOS' +lunr.QueryLexer.FIELD = 'FIELD' +lunr.QueryLexer.TERM = 'TERM' +lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' +lunr.QueryLexer.BOOST = 'BOOST' +lunr.QueryLexer.PRESENCE = 'PRESENCE' + +lunr.QueryLexer.lexField = function (lexer) { + lexer.backup() + lexer.emit(lunr.QueryLexer.FIELD) + lexer.ignore() + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexTerm = function (lexer) { + if (lexer.width() > 1) { + lexer.backup() + lexer.emit(lunr.QueryLexer.TERM) + } + + lexer.ignore() + + if (lexer.more()) { + return lunr.QueryLexer.lexText + } +} + +lunr.QueryLexer.lexEditDistance = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexBoost = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.BOOST) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexEOS = function (lexer) { + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } +} + +// This matches the separator used when tokenising fields +// within a document. These should match otherwise it is +// not possible to search for some tokens within a document. +// +// It is possible for the user to change the separator on the +// tokenizer so it _might_ clash with any other of the special +// characters already used within the search string, e.g. :. +// +// This means that it is possible to change the separator in +// such a way that makes some words unsearchable using a search +// string. +lunr.QueryLexer.termSeparator = lunr.tokenizer.separator + +lunr.QueryLexer.lexText = function (lexer) { + while (true) { + var char = lexer.next() + + if (char == lunr.QueryLexer.EOS) { + return lunr.QueryLexer.lexEOS + } + + // Escape character is '\' + if (char.charCodeAt(0) == 92) { + lexer.escapeCharacter() + continue + } + + if (char == ":") { + return lunr.QueryLexer.lexField + } + + if (char == "~") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexEditDistance + } + + if (char == "^") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexBoost + } + + // "+" indicates term presence is required + // checking for length to ensure that only + // leading "+" are considered + if (char == "+" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + // "-" indicates term presence is prohibited + // checking for length to ensure that only + // leading "-" are considered + if (char == "-" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + if (char.match(lunr.QueryLexer.termSeparator)) { + return lunr.QueryLexer.lexTerm + } + } +} + +lunr.QueryParser = function (str, query) { + this.lexer = new lunr.QueryLexer (str) + this.query = query + this.currentClause = {} + this.lexemeIdx = 0 +} + +lunr.QueryParser.prototype.parse = function () { + this.lexer.run() + this.lexemes = this.lexer.lexemes + + var state = lunr.QueryParser.parseClause + + while (state) { + state = state(this) + } + + return this.query +} + +lunr.QueryParser.prototype.peekLexeme = function () { + return this.lexemes[this.lexemeIdx] +} + +lunr.QueryParser.prototype.consumeLexeme = function () { + var lexeme = this.peekLexeme() + this.lexemeIdx += 1 + return lexeme +} + +lunr.QueryParser.prototype.nextClause = function () { + var completedClause = this.currentClause + this.query.clause(completedClause) + this.currentClause = {} +} + +lunr.QueryParser.parseClause = function (parser) { + var lexeme = parser.peekLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.type) { + case lunr.QueryLexer.PRESENCE: + return lunr.QueryParser.parsePresence + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expected either a field or a term, found " + lexeme.type + + if (lexeme.str.length >= 1) { + errorMessage += " with value '" + lexeme.str + "'" + } + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } +} + +lunr.QueryParser.parsePresence = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.str) { + case "-": + parser.currentClause.presence = lunr.Query.presence.PROHIBITED + break + case "+": + parser.currentClause.presence = lunr.Query.presence.REQUIRED + break + default: + var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term or field, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseField = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + if (parser.query.allFields.indexOf(lexeme.str) == -1) { + var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), + errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.fields = [lexeme.str] + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseTerm = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + parser.currentClause.term = lexeme.str.toLowerCase() + + if (lexeme.str.indexOf("*") != -1) { + parser.currentClause.usePipeline = false + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseEditDistance = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var editDistance = parseInt(lexeme.str, 10) + + if (isNaN(editDistance)) { + var errorMessage = "edit distance must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.editDistance = editDistance + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseBoost = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var boost = parseInt(lexeme.str, 10) + + if (isNaN(boost)) { + var errorMessage = "boost must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.boost = boost + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + + /** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ + ;(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like enviroments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + root.lunr = factory() + } + }(this, function () { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + return lunr + })) +})(); diff --git a/doc/supplemental_ui/js/vendor/search.js b/doc/supplemental_ui/js/vendor/search.js new file mode 100644 index 000000000000..98df4931ded2 --- /dev/null +++ b/doc/supplemental_ui/js/vendor/search.js @@ -0,0 +1,212 @@ +/* eslint-env browser */ +window.antoraLunr = (function (lunr) { + var searchInput = document.getElementById('search-input') + var searchResult = document.createElement('div') + searchResult.classList.add('search-result-dropdown-menu') + searchInput.parentNode.appendChild(searchResult) + + function highlightText (doc, position) { + var hits = [] + var start = position[0] + var length = position[1] + + var text = doc.text + var highlightSpan = document.createElement('span') + highlightSpan.classList.add('search-result-highlight') + highlightSpan.innerText = text.substr(start, length) + + var end = start + length + var textEnd = text.length - 1 + var contextOffset = 15 + var contextAfter = end + contextOffset > textEnd ? textEnd : end + contextOffset + var contextBefore = start - contextOffset < 0 ? 0 : start - contextOffset + if (start === 0 && end === textEnd) { + hits.push(highlightSpan) + } else if (start === 0) { + hits.push(highlightSpan) + hits.push(document.createTextNode(text.substr(end, contextAfter))) + } else if (end === textEnd) { + hits.push(document.createTextNode(text.substr(0, start))) + hits.push(highlightSpan) + } else { + hits.push(document.createTextNode('...' + text.substr(contextBefore, start - contextBefore))) + hits.push(highlightSpan) + hits.push(document.createTextNode(text.substr(end, contextAfter - end) + '...')) + } + return hits + } + + function highlightTitle (hash, doc, position) { + var hits = [] + var start = position[0] + var length = position[1] + + var highlightSpan = document.createElement('span') + highlightSpan.classList.add('search-result-highlight') + var title + if (hash) { + title = doc.titles.filter(function (item) { + return item.id === hash + })[0].text + } else { + title = doc.title + } + highlightSpan.innerText = title.substr(start, length) + + var end = start + length + var titleEnd = title.length - 1 + if (start === 0 && end === titleEnd) { + hits.push(highlightSpan) + } else if (start === 0) { + hits.push(highlightSpan) + hits.push(document.createTextNode(title.substr(length, titleEnd))) + } else if (end === titleEnd) { + hits.push(document.createTextNode(title.substr(0, start))) + hits.push(highlightSpan) + } else { + hits.push(document.createTextNode(title.substr(0, start))) + hits.push(highlightSpan) + hits.push(document.createTextNode(title.substr(end, titleEnd))) + } + return hits + } + + function highlightHit (metadata, hash, doc) { + var hits = [] + for (var token in metadata) { + var fields = metadata[token] + for (var field in fields) { + var positions = fields[field] + if (positions.position) { + var position = positions.position[0] // only higlight the first match + if (field === 'title') { + hits = highlightTitle(hash, doc, position) + } else if (field === 'text') { + hits = highlightText(doc, position) + } + } + } + } + return hits + } + + function createSearchResult (result, store, searchResultDataset) { + result.forEach(function (item) { + var url = item.ref + var hash + if (url.includes('#')) { + hash = url.substring(url.indexOf('#') + 1) + url = url.replace('#' + hash, '') + } + var doc = store[url] + var metadata = item.matchData.metadata + var hits = highlightHit(metadata, hash, doc) + searchResultDataset.appendChild(createSearchResultItem(doc, item, hits)) + }) + } + + function createSearchResultItem (doc, item, hits) { + var documentTitle = document.createElement('div') + documentTitle.classList.add('search-result-document-title') + documentTitle.innerText = doc.title + var documentHit = document.createElement('div') + documentHit.classList.add('search-result-document-hit') + var documentHitLink = document.createElement('a') + var rootPath = window.antora.basePath + documentHitLink.href = rootPath + item.ref + documentHit.appendChild(documentHitLink) + hits.forEach(function (hit) { + documentHitLink.appendChild(hit) + }) + var searchResultItem = document.createElement('div') + searchResultItem.classList.add('search-result-item') + searchResultItem.appendChild(documentTitle) + searchResultItem.appendChild(documentHit) + searchResultItem.addEventListener('mousedown', function (e) { + e.preventDefault() + }) + return searchResultItem + } + + function createNoResult (text) { + var searchResultItem = document.createElement('div') + searchResultItem.classList.add('search-result-item') + var documentHit = document.createElement('div') + documentHit.classList.add('search-result-document-hit') + var message = document.createElement('strong') + message.innerText = 'No results found for query "' + text + '"' + documentHit.appendChild(message) + searchResultItem.appendChild(documentHit) + return searchResultItem + } + + function search (index, text) { + // execute an exact match search + var result = index.search(text) + if (result.length > 0) { + return result + } + // no result, use a begins with search + result = index.search(text + '*') + if (result.length > 0) { + return result + } + // no result, use a contains search + result = index.search('*' + text + '*') + return result + } + + function searchIndex (index, store, text) { + // reset search result + while (searchResult.firstChild) { + searchResult.removeChild(searchResult.firstChild) + } + if (text.trim() === '') { + return + } + var result = search(index, text) + var searchResultDataset = document.createElement('div') + searchResultDataset.classList.add('search-result-dataset') + searchResult.appendChild(searchResultDataset) + if (result.length > 0) { + createSearchResult(result, store, searchResultDataset) + } else { + searchResultDataset.appendChild(createNoResult(text)) + } + } + + function debounce (func, wait, immediate) { + var timeout + return function () { + var context = this + var args = arguments + var later = function () { + timeout = null + if (!immediate) func.apply(context, args) + } + var callNow = immediate && !timeout + clearTimeout(timeout) + timeout = setTimeout(later, wait) + if (callNow) func.apply(context, args) + } + } + + function init (data) { + var index = Object.assign({ index: lunr.Index.load(data.index), store: data.store }) + var search = debounce(function () { + searchIndex(index.index, index.store, searchInput.value) + }, 100) + searchInput.addEventListener('keydown', search) + + // this is prevented in case of mousedown attached to SearchResultItem + searchInput.addEventListener('blur', function (e) { + while (searchResult.firstChild) { + searchResult.removeChild(searchResult.firstChild) + } + }) + } + + return { + init: init, + } +})(window.lunr) diff --git a/doc/supplemental_ui/partials/footer-scripts.hbs b/doc/supplemental_ui/partials/footer-scripts.hbs new file mode 100644 index 000000000000..42689e7ec63c --- /dev/null +++ b/doc/supplemental_ui/partials/footer-scripts.hbs @@ -0,0 +1,16 @@ + + +{{#if (eq env.DOCSEARCH_ENGINE 'lunr')}} + + + +{{/if}} + + + + + diff --git a/doc/supplemental_ui/partials/head-meta.hbs b/doc/supplemental_ui/partials/head-meta.hbs new file mode 100644 index 000000000000..510fc52045a0 --- /dev/null +++ b/doc/supplemental_ui/partials/head-meta.hbs @@ -0,0 +1,2 @@ + {{!-- Add additional meta tags here --}} + diff --git a/doc/supplemental_ui/partials/header-content.hbs b/doc/supplemental_ui/partials/header-content.hbs new file mode 100644 index 000000000000..beb509c929a4 --- /dev/null +++ b/doc/supplemental_ui/partials/header-content.hbs @@ -0,0 +1,57 @@ +
    + + +
    diff --git a/doc/ui-bundle.zip b/doc/ui-bundle.zip index ac02cb0dd7d33632ef234554455255324c0893f1..748a510423ddd1c7a7358e5f0e851eed5cd4bc59 100644 GIT binary patch delta 1121 zcmXw2ZA_C_6n=YedkDgcfXHZzh%}STXfu{`#nA=|>v1$~o~^PY3x^PJ~7 z_q*JIMO!+smS9w6)7ubC;v z=T)7iV>=gGFd@5}-WJVP^eTVWiqE^LLDbJ6(@Rcq`!fW*R4c+!eC4GB;>#$~d#FmB zSwdG2Im8baalMBs6BA;Z=Js^j+Pl1dWCtimaUh)WGaGv^nZ&m-9O~tQ3(L5oeC1Dw z_c8Flzo5-WHFD=4+FbAb41D9GLNS|+t$yzQS}Ht#st{>gaMRC4d1*)qP>tv};c$S; z#8nfn1{h?)jO0G5iVs?JT8Fngur4+it64hZQ?*L*xzKeBmiovg=Y2Zd?bGGJF+?w5 z=VhG{-hN6H_b;mR9r(DP_Q}V8>ku8F?XV3}E_M%)NyZfmR2&dF@C-0Z>uD?wFj~p? z0+Anu8LPu&+0gxpO+K6RM(4F%cxi}FX9uZB#*Ii+1f>}d2N~wS6?N1iD--kzJQa&Z zeFF0PnOQ@b-k7v;T^lf2cK#+PGw|FIX1HfYuVidjsJS?Ogc(M@)1yFAhDvQiVIOV6 zs>+{#(SS$04VDeux?xT&cNtW_Y|IZcRxG+6rQ+c*mC7e;1_fhL1KNSo0BsZgB78K$ zGhZ&ky%D~XPxc{yl&VGLew-SmI&o(|{v74}!D18~nw0ra1{Mbqu&?niZu_ zu%Z)AygI>E|J35c32K%l^@KIxb!~PuXQ4Mnwmt08$HwXvawpL)@Cv_ZPrb^ GCI16lBw#rJ delta 1896 zcmZWo3sh5A7Ja;zToD7L)bf*$fKgEq%2euyMoJsx6EKlPz<`JZY#<@z3n&<(L@HDY z0zH1I7FX+%sB~d#un5J}wlGDC3MyI!1sQ8vJ~F5jow>2IW@gR2weGujopbI!_v~|a zV}<*dweAdF3`Mgete?eL#h6E*F@~nTsIFY#p|cpB_>Lbp%^xNS!oe0V!h=XxsRC6Q zY0C5umgA#PFq@#P7pzN@KZmfPP1z6xZ7xPL2ya*P2QiCAmM%LUU0zn7Y^yg4{+@8; zrqA!IwL>c_Wxcx5o6Y78-*NIo53W*O`Dq|Z+4bS~2N&-5m9JEomrUx4ie{SLJ;^kh zT~6ot+ua?UX^=4j*@`nK(ypGkNL5c3J;`f&p7dtt>?~#1f%ijRiY~KS6;#mt;v;T<=t}? zNx@xRV)-*U>S<9KlQK^0{Dy9xU9;m#&F75I=$cY@)=G}((5)MVdsiH9kx366bM!Td zP2!miBwz0$62&eao**|5xP0F?&Qf%YhfYi-J}g-=Im=k#D9^oalo;9t4Tnx0K2l&5 zn(Y&UISY1|Z8BS$+I)gDj=u3%MNC2b9P*=#@L})1&;C%}IlaY@q^pt$e)D=UMGq+T zO5scz-s|%Vdh|3cGcK9Y=f-VIsfk^{O^~{*8H;7Ed^>ne)vT_8f-fKyx;$i}vPB zXWhP^ZngeSzvIjqZ%Msg`zSn77%}eRM+@!mKKbP4!gv--;AB3quhyu&l+I^`E|-4T zOU~X;y)*pub?=hv^Q2yceEc2 zju3`uTUv9?Z*OYjafbtJ<&A?8L7-u>%Qik)ZD}w_YnFHT&DzhLYFx9PI>Z^TcxH38 zu*F*mV=pA$zYxx?67q7!p(;nI{XYU4hcc(1xWA0q7+Gyvx7vBA^kq-?qVu}|E_`NMo{ZIcH858bN=Y+ ztFlu%J=?&xF|bJkn=-Iz1~&aGHcFA$SRg=(JfT^F>}_UXOodz_SBg-`|Le;2mHx1D zh!c7?{{OGa=vZa{0f1o%@*=Y-pl2Z-I_gOfSt{U55etg5u%q7-j%A@ZvV0MYS@-Tm z5SEQLk$WoONH!8u#95+xtic)Vq$rF$*92TCiXIZ|DrDi_Dqd%~k!#3hG4;cW#P2((P-j)fc=}=sjxw^efkVIHN|3 z!Kgy+)LW4xe5pasa8HF|DSjPkz3T@-TI2!DJY)y?YUEC;?m~?kC6mhnp;3c9ygcOf zr#nPr1<_Fu8bxyhsRo6UOMbQnrII=acuk8^DK3|0^?Ja^TFii`0(!J4ow|63R{I)q zvqFX2UkjkWDko5;kxC#;jg~{M5+}crhtcoL>HmJ>9BU!|z|P0^!6rKNG}1kxQH`JU zD!$HY_n{C*_JD2;uDc@_Q*(?1ZUvad`yAL-fLZR1fC~jkK*x`vFEXJ4@5)qsdV$9xRe0#A7T=Zx&sY-@CJub>? zGxX@uCMq=*!TMx052AMAC?XBYci|j;X)w48iOA@!z}}5_VLBY%jTK-?M{s8gX3wz% zN7smfUxK}%8E~cqB~#rQ2->zHJRb(^)n^@?=6?ck!RU4X From 75749b13ad720215e2d9ed94f711a09b5f968367 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 18 Aug 2020 22:43:20 -0700 Subject: [PATCH 077/115] comment out ui.yml --- doc/site.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/site.yml b/doc/site.yml index 14537af84c0f..c91ee3babf8a 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -23,10 +23,10 @@ ui: #url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip snapshot: true supplemental_files: ./supplemental_ui - - path: ui.yml - contents: | - static_files: [ .nojekyll ] - - path: .nojekyll + #- path: ui.yml + # contents: | + # static_files: [ .nojekyll ] + #- path: .nojekyll output: clean: true From 947725373ee8d738ddd5c6aad7b458d3c55011bd Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 19 Aug 2020 21:31:41 -0700 Subject: [PATCH 078/115] exchange ui-bundle --- doc/site.yml | 6 +----- doc/ui-bundle.zip | Bin 427824 -> 424371 bytes 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/doc/site.yml b/doc/site.yml index c91ee3babf8a..3b97b986c043 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -22,11 +22,7 @@ ui: #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip #url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip snapshot: true - supplemental_files: ./supplemental_ui - #- path: ui.yml - # contents: | - # static_files: [ .nojekyll ] - #- path: .nojekyll + #supplemental_files: ./supplemental_ui output: clean: true diff --git a/doc/ui-bundle.zip b/doc/ui-bundle.zip index 748a510423ddd1c7a7358e5f0e851eed5cd4bc59..42c7088d76be5f92c48d1964558bfbca3c5dd38e 100644 GIT binary patch delta 238299 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


    !kyni~))Yy@X~Bxj9fO7@YJRQV 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 A9{>OV From 5aa2a54f6e99c788894d2163a67a799ae0ca37da Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 19 Aug 2020 22:36:36 -0700 Subject: [PATCH 079/115] get bundle from ian repo --- doc/site.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/site.yml b/doc/site.yml index 3b97b986c043..72771c72f085 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -18,9 +18,9 @@ content: ui: # Need to replace this with a direct github url rather than a local path bundle: - url: /antora/cassandra/doc/ui-bundle.zip + #url: /antora/cassandra/doc/ui-bundle.zip #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip - #url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip + url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip snapshot: true #supplemental_files: ./supplemental_ui From 3f0665f93156643831a0efee3bf174dda0c72005 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 19 Aug 2020 22:41:35 -0700 Subject: [PATCH 080/115] change ui-bundle url --- doc/site.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/site.yml b/doc/site.yml index 72771c72f085..f75f801d6667 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -20,7 +20,8 @@ ui: bundle: #url: /antora/cassandra/doc/ui-bundle.zip #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip - url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip + #url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip + url: https://github.com/ianjevans/antora-ui-datastax/releases/download/v0.1/ui-bundle.zip snapshot: true #supplemental_files: ./supplemental_ui From 7f754c547dd7fce62a348cc5028e3126246ed1f8 Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 20 Aug 2020 15:08:42 -0700 Subject: [PATCH 081/115] cleanup, remove supplemental_ui directory --- doc/site.yml | 2 +- doc/supplemental_ui/css/search.css | 114 - .../js/vendor/highlight.bundle.js | 37 - doc/supplemental_ui/js/vendor/lunr.js | 3471 ----------------- doc/supplemental_ui/js/vendor/search.js | 212 - .../partials/footer-scripts.hbs | 16 - doc/supplemental_ui/partials/head-meta.hbs | 2 - .../partials/header-content.hbs | 57 - doc/ui-bundle.zip | Bin 424371 -> 0 bytes 9 files changed, 1 insertion(+), 3910 deletions(-) delete mode 100644 doc/supplemental_ui/css/search.css delete mode 100644 doc/supplemental_ui/js/vendor/highlight.bundle.js delete mode 100644 doc/supplemental_ui/js/vendor/lunr.js delete mode 100644 doc/supplemental_ui/js/vendor/search.js delete mode 100644 doc/supplemental_ui/partials/footer-scripts.hbs delete mode 100644 doc/supplemental_ui/partials/head-meta.hbs delete mode 100644 doc/supplemental_ui/partials/header-content.hbs delete mode 100644 doc/ui-bundle.zip diff --git a/doc/site.yml b/doc/site.yml index f75f801d6667..4fa51294c323 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -21,7 +21,7 @@ ui: #url: /antora/cassandra/doc/ui-bundle.zip #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip #url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip - url: https://github.com/ianjevans/antora-ui-datastax/releases/download/v0.1/ui-bundle.zip + url: https://github.com/ianjevans/antora-ui-datastax/releases/download/v0.1oss/ui-bundle.zip snapshot: true #supplemental_files: ./supplemental_ui diff --git a/doc/supplemental_ui/css/search.css b/doc/supplemental_ui/css/search.css deleted file mode 100644 index 0309a672f357..000000000000 --- a/doc/supplemental_ui/css/search.css +++ /dev/null @@ -1,114 +0,0 @@ -.navbar-brand .navbar-item + .navbar-item { - flex-grow: 1; - justify-content: flex-end; -} - -@media screen and (min-width: 1024px) { - .navbar-brand { - flex-grow: 1; - } - - .navbar-menu { - flex-grow: 0; - } -} - -#search-input { - color: #333; - font-family: inherit; - font-size: 0.95rem; - width: 150px; - border: 1px solid #dbdbdb; - border-radius: 0.1em; - line-height: 1.5; - padding: 0 0.25em; -} - -@media screen and (min-width: 769px) { - #search-input { - width: 200px; - } -} - -.search-result-dropdown-menu { - position: absolute; - z-index: 100; - display: block; - right: 0; - left: inherit; - top: 100%; - border-radius: 4px; - margin: 6px 0 0; - padding: 0; - text-align: left; - height: auto; - background: transparent; - border: none; - max-width: 600px; - min-width: 500px; - box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2), 0 2px 3px 0 rgba(0, 0, 0, 0.1); -} - -@media screen and (max-width: 768px) { - .navbar-brand .navbar-item + .navbar-item { - padding-left: 0; - padding-right: 0; - } - - .search-result-dropdown-menu { - min-width: calc(100vw - 3.75rem); - } -} - -.search-result-dataset { - position: relative; - border: 1px solid #d9d9d9; - background: #fff; - border-radius: 4px; - overflow: auto; - padding: 0 8px 8px; - max-height: calc(100vh - 5.25rem); - color: #333; -} - -.search-result-highlight { - color: #174d8c; - background: rgba(143, 187, 237, 0.1); - padding: 0.1em 0.05em; -} - -.search-result-item { - display: flex; - font-size: 1rem; - margin-bottom: 0.5rem; - margin-top: 0.5rem; -} - -.search-result-document-title { - width: 33%; - border-right: 1px solid #ddd; - color: #a4a7ae; - font-size: 0.8rem; - padding: 0.25rem 0.5rem 0.25rem 0; - text-align: right; - position: relative; - word-wrap: break-word; -} - -.search-result-document-hit { - flex: 1; - font-size: 0.75em; - color: #02060c; - font-weight: 700; -} - -.search-result-document-hit > a { - color: inherit; - display: block; - padding: 0.5rem 0 0.5rem 1rem; - margin-bottom: 0.25rem; -} - -.search-result-document-hit > a:hover { - background-color: rgba(69, 142, 225, 0.05); -} diff --git a/doc/supplemental_ui/js/vendor/highlight.bundle.js b/doc/supplemental_ui/js/vendor/highlight.bundle.js deleted file mode 100644 index 11145f624b7e..000000000000 --- a/doc/supplemental_ui/js/vendor/highlight.bundle.js +++ /dev/null @@ -1,37 +0,0 @@ -;(function () { - 'use strict' - - var hljs = require('highlight.js/lib/highlight') - hljs.registerLanguage('asciidoc', require('highlight.js/lib/languages/asciidoc')) - hljs.registerLanguage('bash', require('highlight.js/lib/languages/bash')) - hljs.registerLanguage('clojure', require('highlight.js/lib/languages/clojure')) - hljs.registerLanguage('cpp', require('highlight.js/lib/languages/cpp')) - hljs.registerLanguage('cs', require('highlight.js/lib/languages/cs')) - hljs.registerLanguage('css', require('highlight.js/lib/languages/css')) - hljs.registerLanguage('diff', require('highlight.js/lib/languages/diff')) - hljs.registerLanguage('dockerfile', require('highlight.js/lib/languages/dockerfile')) - hljs.registerLanguage('elixir', require('highlight.js/lib/languages/elixir')) - hljs.registerLanguage('go', require('highlight.js/lib/languages/go')) - hljs.registerLanguage('groovy', require('highlight.js/lib/languages/groovy')) - hljs.registerLanguage('haskell', require('highlight.js/lib/languages/haskell')) - hljs.registerLanguage('java', require('highlight.js/lib/languages/java')) - hljs.registerLanguage('javascript', require('highlight.js/lib/languages/javascript')) - hljs.registerLanguage('json', require('highlight.js/lib/languages/json')) - hljs.registerLanguage('kotlin', require('highlight.js/lib/languages/kotlin')) - hljs.registerLanguage('makefile', require('highlight.js/lib/languages/makefile')) - hljs.registerLanguage('markdown', require('highlight.js/lib/languages/markdown')) - hljs.registerLanguage('nix', require('highlight.js/lib/languages/nix')) - hljs.registerLanguage('objectivec', require('highlight.js/lib/languages/objectivec')) - hljs.registerLanguage('perl', require('highlight.js/lib/languages/perl')) - hljs.registerLanguage('php', require('highlight.js/lib/languages/php')) - hljs.registerLanguage('properties', require('highlight.js/lib/languages/properties')) - hljs.registerLanguage('python', require('highlight.js/lib/languages/python')) - hljs.registerLanguage('ruby', require('highlight.js/lib/languages/ruby')) - hljs.registerLanguage('scala', require('highlight.js/lib/languages/scala')) - hljs.registerLanguage('shell', require('highlight.js/lib/languages/shell')) - hljs.registerLanguage('sql', require('highlight.js/lib/languages/sql')) - hljs.registerLanguage('swift', require('highlight.js/lib/languages/swift')) - hljs.registerLanguage('xml', require('highlight.js/lib/languages/xml')) - hljs.registerLanguage('yaml', require('highlight.js/lib/languages/yaml')) - hljs.initHighlighting() -})() diff --git a/doc/supplemental_ui/js/vendor/lunr.js b/doc/supplemental_ui/js/vendor/lunr.js deleted file mode 100644 index ebe73e68e2bc..000000000000 --- a/doc/supplemental_ui/js/vendor/lunr.js +++ /dev/null @@ -1,3471 +0,0 @@ -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.8 - * Copyright (C) 2019 Oliver Nightingale - * @license MIT - */ - -;(function () { -/** - * A convenience function for configuring and constructing - * a new lunr Index. - * - * A lunr.Builder instance is created and the pipeline setup - * with a trimmer, stop word filter and stemmer. - * - * This builder object is yielded to the configuration function - * that is passed as a parameter, allowing the list of fields - * and other builder parameters to be customised. - * - * All documents _must_ be added within the passed config function. - * - * @example - * var idx = lunr(function () { - * this.field('title') - * this.field('body') - * this.ref('id') - * - * documents.forEach(function (doc) { - * this.add(doc) - * }, this) - * }) - * - * @see {@link lunr.Builder} - * @see {@link lunr.Pipeline} - * @see {@link lunr.trimmer} - * @see {@link lunr.stopWordFilter} - * @see {@link lunr.stemmer} - * @namespace {function} lunr - */ - var lunr = function (config) { - var builder = new lunr.Builder() - - builder.pipeline.add( - lunr.trimmer, - lunr.stopWordFilter, - lunr.stemmer - ) - - builder.searchPipeline.add( - lunr.stemmer - ) - - config.call(builder, builder) - return builder.build() - } - - lunr.version = '2.3.8' - /*! - * lunr.utils - * Copyright (C) 2019 Oliver Nightingale - */ - - /** - * A namespace containing utils for the rest of the lunr library - * @namespace lunr.utils - */ - lunr.utils = {} - - /** - * Print a warning message to the console. - * - * @param {String} message The message to be printed. - * @memberOf lunr.utils - * @function - */ - lunr.utils.warn = (function (global) { - /* eslint-disable no-console */ - return function (message) { - if (global.console && console.warn) { - console.warn(message) - } - } - /* eslint-enable no-console */ - })(this) - - /** - * Convert an object to a string. - * - * In the case of `null` and `undefined` the function returns - * the empty string, in all other cases the result of calling - * `toString` on the passed object is returned. - * - * @param {Any} obj The object to convert to a string. - * @return {String} string representation of the passed object. - * @memberOf lunr.utils - */ - lunr.utils.asString = function (obj) { - if (obj === undefined || obj === null) { - return '' - } else { - return obj.toString() - } - } - - /** - * Clones an object. - * - * Will create a copy of an existing object such that any mutations - * on the copy cannot affect the original. - * - * Only shallow objects are supported, passing a nested object to this - * function will cause a TypeError. - * - * Objects with primitives, and arrays of primitives are supported. - * - * @param {Object} obj The object to clone. - * @return {Object} a clone of the passed object. - * @throws {TypeError} when a nested object is passed. - * @memberOf Utils - */ - lunr.utils.clone = function (obj) { - if (obj === null || obj === undefined) { - return obj - } - - var clone = Object.create(null) - var keys = Object.keys(obj) - - for (var i = 0; i < keys.length; i++) { - var key = keys[i] - var val = obj[key] - - if (Array.isArray(val)) { - clone[key] = val.slice() - continue - } - - if (typeof val === 'string' || - typeof val === 'number' || - typeof val === 'boolean') { - clone[key] = val - continue - } - - throw new TypeError('clone is not deep and does not support nested objects') - } - - return clone - } - lunr.FieldRef = function (docRef, fieldName, stringValue) { - this.docRef = docRef - this.fieldName = fieldName - this._stringValue = stringValue - } - - lunr.FieldRef.joiner = '/' - - lunr.FieldRef.fromString = function (s) { - var n = s.indexOf(lunr.FieldRef.joiner) - - if (n === -1) { - throw new TypeError('malformed field ref string') - } - - var fieldRef = s.slice(0, n) - var docRef = s.slice(n + 1) - - return new lunr.FieldRef(docRef, fieldRef, s) - } - - lunr.FieldRef.prototype.toString = function () { - if (this._stringValue === undefined) { - this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef - } - - return this._stringValue - } - /*! - * lunr.Set - * Copyright (C) 2019 Oliver Nightingale - */ - - /** - * A lunr set. - * - * @constructor - */ - lunr.Set = function (elements) { - this.elements = Object.create(null) - - if (elements) { - this.length = elements.length - - for (var i = 0; i < this.length; i++) { - this.elements[elements[i]] = true - } - } else { - this.length = 0 - } - } - - /** - * A complete set that contains all elements. - * - * @static - * @readonly - * @type {lunr.Set} - */ - lunr.Set.complete = { - intersect: function (other) { - return other - }, - - union: function (other) { - return other - }, - - contains: function () { - return true - }, - } - - /** - * An empty set that contains no elements. - * - * @static - * @readonly - * @type {lunr.Set} - */ - lunr.Set.empty = { - intersect: function () { - return this - }, - - union: function (other) { - return other - }, - - contains: function () { - return false - }, - } - - /** - * Returns true if this set contains the specified object. - * - * @param {object} object - Object whose presence in this set is to be tested. - * @returns {boolean} - True if this set contains the specified object. - */ - lunr.Set.prototype.contains = function (object) { - return !!this.elements[object] - } - - /** - * Returns a new set containing only the elements that are present in both - * this set and the specified set. - * - * @param {lunr.Set} other - set to intersect with this set. - * @returns {lunr.Set} a new set that is the intersection of this and the specified set. - */ - - lunr.Set.prototype.intersect = function (other) { - var a; var b; var elements; var intersection = [] - - if (other === lunr.Set.complete) { - return this - } - - if (other === lunr.Set.empty) { - return other - } - - if (this.length < other.length) { - a = this - b = other - } else { - a = other - b = this - } - - elements = Object.keys(a.elements) - - for (var i = 0; i < elements.length; i++) { - var element = elements[i] - if (element in b.elements) { - intersection.push(element) - } - } - - return new lunr.Set(intersection) - } - - /** - * Returns a new set combining the elements of this and the specified set. - * - * @param {lunr.Set} other - set to union with this set. - * @return {lunr.Set} a new set that is the union of this and the specified set. - */ - - lunr.Set.prototype.union = function (other) { - if (other === lunr.Set.complete) { - return lunr.Set.complete - } - - if (other === lunr.Set.empty) { - return this - } - - return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) - } - /** - * A function to calculate the inverse document frequency for - * a posting. This is shared between the builder and the index - * - * @private - * @param {object} posting - The posting for a given term - * @param {number} documentCount - The total number of documents. - */ - lunr.idf = function (posting, documentCount) { - var documentsWithTerm = 0 - - for (var fieldName in posting) { - if (fieldName === '_index') continue // Ignore the term index, its not a field - documentsWithTerm += Object.keys(posting[fieldName]).length - } - - var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) - - return Math.log(1 + Math.abs(x)) - } - - /** - * A token wraps a string representation of a token - * as it is passed through the text processing pipeline. - * - * @constructor - * @param {string} [str=''] - The string token being wrapped. - * @param {object} [metadata={}] - Metadata associated with this token. - */ - lunr.Token = function (str, metadata) { - this.str = str || '' - this.metadata = metadata || {} - } - - /** - * Returns the token string that is being wrapped by this object. - * - * @returns {string} - */ - lunr.Token.prototype.toString = function () { - return this.str - } - - /** - * A token update function is used when updating or optionally - * when cloning a token. - * - * @callback lunr.Token~updateFunction - * @param {string} str - The string representation of the token. - * @param {Object} metadata - All metadata associated with this token. - */ - - /** - * Applies the given function to the wrapped string token. - * - * @example - * token.update(function (str, metadata) { - * return str.toUpperCase() - * }) - * - * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. - * @returns {lunr.Token} - */ - lunr.Token.prototype.update = function (fn) { - this.str = fn(this.str, this.metadata) - return this - } - - /** - * Creates a clone of this token. Optionally a function can be - * applied to the cloned token. - * - * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. - * @returns {lunr.Token} - */ - lunr.Token.prototype.clone = function (fn) { - fn = fn || function (s) { return s } - return new lunr.Token(fn(this.str, this.metadata), this.metadata) - } - /*! - * lunr.tokenizer - * Copyright (C) 2019 Oliver Nightingale - */ - - /** - * A function for splitting a string into tokens ready to be inserted into - * the search index. Uses `lunr.tokenizer.separator` to split strings, change - * the value of this property to change how strings are split into tokens. - * - * This tokenizer will convert its parameter to a string by calling `toString` and - * then will split this string on the character in `lunr.tokenizer.separator`. - * Arrays will have their elements converted to strings and wrapped in a lunr.Token. - * - * Optional metadata can be passed to the tokenizer, this metadata will be cloned and - * added as metadata to every token that is created from the object to be tokenized. - * - * @static - * @param {?(string|object|object[])} obj - The object to convert into tokens - * @param {?object} metadata - Optional metadata to associate with every token - * @returns {lunr.Token[]} - * @see {@link lunr.Pipeline} - */ - lunr.tokenizer = function (obj, metadata) { - if (obj === null || obj === undefined) { - return [] - } - - if (Array.isArray(obj)) { - return obj.map(function (t) { - return new lunr.Token( - lunr.utils.asString(t).toLowerCase(), - lunr.utils.clone(metadata) - ) - }) - } - - var str = obj.toString().toLowerCase() - var len = str.length - var tokens = [] - - for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { - var char = str.charAt(sliceEnd) - var sliceLength = sliceEnd - sliceStart - - if ((char.match(lunr.tokenizer.separator) || sliceEnd === len)) { - if (sliceLength > 0) { - var tokenMetadata = lunr.utils.clone(metadata) || {} - tokenMetadata.position = [sliceStart, sliceLength] - tokenMetadata.index = tokens.length - - tokens.push( - new lunr.Token( - str.slice(sliceStart, sliceEnd), - tokenMetadata - ) - ) - } - - sliceStart = sliceEnd + 1 - } - } - - return tokens - } - - /** - * The separator used to split a string into tokens. Override this property to change the behaviour of - * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. - * - * @static - * @see lunr.tokenizer - */ - lunr.tokenizer.separator = /[\s-]+/ - /*! - * lunr.Pipeline - * Copyright (C) 2019 Oliver Nightingale - */ - - /** - * lunr.Pipelines maintain an ordered list of functions to be applied to all - * tokens in documents entering the search index and queries being ran against - * the index. - * - * An instance of lunr.Index created with the lunr shortcut will contain a - * pipeline with a stop word filter and an English language stemmer. Extra - * functions can be added before or after either of these functions or these - * default functions can be removed. - * - * When run the pipeline will call each function in turn, passing a token, the - * index of that token in the original list of all tokens and finally a list of - * all the original tokens. - * - * The output of functions in the pipeline will be passed to the next function - * in the pipeline. To exclude a token from entering the index the function - * should return undefined, the rest of the pipeline will not be called with - * this token. - * - * For serialisation of pipelines to work, all functions used in an instance of - * a pipeline should be registered with lunr.Pipeline. Registered functions can - * then be loaded. If trying to load a serialised pipeline that uses functions - * that are not registered an error will be thrown. - * - * If not planning on serialising the pipeline then registering pipeline functions - * is not necessary. - * - * @constructor - */ - lunr.Pipeline = function () { - this._stack = [] - } - - lunr.Pipeline.registeredFunctions = Object.create(null) - - /** - * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token - * string as well as all known metadata. A pipeline function can mutate the token string - * or mutate (or add) metadata for a given token. - * - * A pipeline function can indicate that the passed token should be discarded by returning - * null, undefined or an empty string. This token will not be passed to any downstream pipeline - * functions and will not be added to the index. - * - * Multiple tokens can be returned by returning an array of tokens. Each token will be passed - * to any downstream pipeline functions and all will returned tokens will be added to the index. - * - * Any number of pipeline functions may be chained together using a lunr.Pipeline. - * - * @interface lunr.PipelineFunction - * @param {lunr.Token} token - A token from the document being processed. - * @param {number} i - The index of this token in the complete list of tokens for this document/field. - * @param {lunr.Token[]} tokens - All tokens for this document/field. - * @returns {(?lunr.Token|lunr.Token[])} - */ - - /** - * Register a function with the pipeline. - * - * Functions that are used in the pipeline should be registered if the pipeline - * needs to be serialised, or a serialised pipeline needs to be loaded. - * - * Registering a function does not add it to a pipeline, functions must still be - * added to instances of the pipeline for them to be used when running a pipeline. - * - * @param {lunr.PipelineFunction} fn - The function to check for. - * @param {String} label - The label to register this function with - */ - lunr.Pipeline.registerFunction = function (fn, label) { - if (label in this.registeredFunctions) { - lunr.utils.warn('Overwriting existing registered function: ' + label) - } - - fn.label = label - lunr.Pipeline.registeredFunctions[fn.label] = fn - } - - /** - * Warns if the function is not registered as a Pipeline function. - * - * @param {lunr.PipelineFunction} fn - The function to check for. - * @private - */ - lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { - var isRegistered = fn.label && (fn.label in this.registeredFunctions) - - if (!isRegistered) { - lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) - } - } - - /** - * Loads a previously serialised pipeline. - * - * All functions to be loaded must already be registered with lunr.Pipeline. - * If any function from the serialised data has not been registered then an - * error will be thrown. - * - * @param {Object} serialised - The serialised pipeline to load. - * @returns {lunr.Pipeline} - */ - lunr.Pipeline.load = function (serialised) { - var pipeline = new lunr.Pipeline() - - serialised.forEach(function (fnName) { - var fn = lunr.Pipeline.registeredFunctions[fnName] - - if (fn) { - pipeline.add(fn) - } else { - throw new Error('Cannot load unregistered function: ' + fnName) - } - }) - - return pipeline - } - - /** - * Adds new functions to the end of the pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. - */ - lunr.Pipeline.prototype.add = function () { - var fns = Array.prototype.slice.call(arguments) - - fns.forEach(function (fn) { - lunr.Pipeline.warnIfFunctionNotRegistered(fn) - this._stack.push(fn) - }, this) - } - - /** - * Adds a single function after a function that already exists in the - * pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. - * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. - */ - lunr.Pipeline.prototype.after = function (existingFn, newFn) { - lunr.Pipeline.warnIfFunctionNotRegistered(newFn) - - var pos = this._stack.indexOf(existingFn) - if (pos === -1) { - throw new Error('Cannot find existingFn') - } - - pos = pos + 1 - this._stack.splice(pos, 0, newFn) - } - - /** - * Adds a single function before a function that already exists in the - * pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. - * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. - */ - lunr.Pipeline.prototype.before = function (existingFn, newFn) { - lunr.Pipeline.warnIfFunctionNotRegistered(newFn) - - var pos = this._stack.indexOf(existingFn) - if (pos === -1) { - throw new Error('Cannot find existingFn') - } - - this._stack.splice(pos, 0, newFn) - } - - /** - * Removes a function from the pipeline. - * - * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. - */ - lunr.Pipeline.prototype.remove = function (fn) { - var pos = this._stack.indexOf(fn) - if (pos === -1) { - return - } - - this._stack.splice(pos, 1) - } - - /** - * Runs the current list of functions that make up the pipeline against the - * passed tokens. - * - * @param {Array} tokens The tokens to run through the pipeline. - * @returns {Array} - */ - lunr.Pipeline.prototype.run = function (tokens) { - var stackLength = this._stack.length - - for (var i = 0; i < stackLength; i++) { - var fn = this._stack[i] - var memo = [] - - for (var j = 0; j < tokens.length; j++) { - var result = fn(tokens[j], j, tokens) - - if (result === null || result === undefined || result === '') continue - - if (Array.isArray(result)) { - for (var k = 0; k < result.length; k++) { - memo.push(result[k]) - } - } else { - memo.push(result) - } - } - - tokens = memo - } - - return tokens - } - - /** - * Convenience method for passing a string through a pipeline and getting - * strings out. This method takes care of wrapping the passed string in a - * token and mapping the resulting tokens back to strings. - * - * @param {string} str - The string to pass through the pipeline. - * @param {?object} metadata - Optional metadata to associate with the token - * passed to the pipeline. - * @returns {string[]} - */ - lunr.Pipeline.prototype.runString = function (str, metadata) { - var token = new lunr.Token(str, metadata) - - return this.run([token]).map(function (t) { - return t.toString() - }) - } - - /** - * Resets the pipeline by removing any existing processors. - * - */ - lunr.Pipeline.prototype.reset = function () { - this._stack = [] - } - - /** - * Returns a representation of the pipeline ready for serialisation. - * - * Logs a warning if the function has not been registered. - * - * @returns {Array} - */ - lunr.Pipeline.prototype.toJSON = function () { - return this._stack.map(function (fn) { - lunr.Pipeline.warnIfFunctionNotRegistered(fn) - - return fn.label - }) - } - /*! - * lunr.Vector - * Copyright (C) 2019 Oliver Nightingale - */ - - /** - * A vector is used to construct the vector space of documents and queries. These - * vectors support operations to determine the similarity between two documents or - * a document and a query. - * - * Normally no parameters are required for initializing a vector, but in the case of - * loading a previously dumped vector the raw elements can be provided to the constructor. - * - * For performance reasons vectors are implemented with a flat array, where an elements - * index is immediately followed by its value. E.g. [index, value, index, value]. This - * allows the underlying array to be as sparse as possible and still offer decent - * performance when being used for vector calculations. - * - * @constructor - * @param {Number[]} [elements] - The flat list of element index and element value pairs. - */ - lunr.Vector = function (elements) { - this._magnitude = 0 - this.elements = elements || [] - } - - /** - * Calculates the position within the vector to insert a given index. - * - * This is used internally by insert and upsert. If there are duplicate indexes then - * the position is returned as if the value for that index were to be updated, but it - * is the callers responsibility to check whether there is a duplicate at that index - * - * @param {Number} insertIdx - The index at which the element should be inserted. - * @returns {Number} - */ - lunr.Vector.prototype.positionForIndex = function (index) { - // For an empty vector the tuple can be inserted at the beginning - if (this.elements.length === 0) { - return 0 - } - - var start = 0 - var end = this.elements.length / 2 - var sliceLength = end - start - var pivotPoint = Math.floor(sliceLength / 2) - var pivotIndex = this.elements[pivotPoint * 2] - - while (sliceLength > 1) { - if (pivotIndex < index) { - start = pivotPoint - } - - if (pivotIndex > index) { - end = pivotPoint - } - - if (pivotIndex === index) { - break - } - - sliceLength = end - start - pivotPoint = start + Math.floor(sliceLength / 2) - pivotIndex = this.elements[pivotPoint * 2] - } - - if (pivotIndex === index) { - return pivotPoint * 2 - } - - if (pivotIndex > index) { - return pivotPoint * 2 - } - - if (pivotIndex < index) { - return (pivotPoint + 1) * 2 - } - } - - /** - * Inserts an element at an index within the vector. - * - * Does not allow duplicates, will throw an error if there is already an entry - * for this index. - * - * @param {Number} insertIdx - The index at which the element should be inserted. - * @param {Number} val - The value to be inserted into the vector. - */ - lunr.Vector.prototype.insert = function (insertIdx, val) { - this.upsert(insertIdx, val, function () { - throw new TypeError('duplicate index') - }) - } - - /** - * Inserts or updates an existing index within the vector. - * - * @param {Number} insertIdx - The index at which the element should be inserted. - * @param {Number} val - The value to be inserted into the vector. - * @param {function} fn - A function that is called for updates, the existing value and the - * requested value are passed as arguments - */ - lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { - this._magnitude = 0 - var position = this.positionForIndex(insertIdx) - - if (this.elements[position] === insertIdx) { - this.elements[position + 1] = fn(this.elements[position + 1], val) - } else { - this.elements.splice(position, 0, insertIdx, val) - } - } - - /** - * Calculates the magnitude of this vector. - * - * @returns {Number} - */ - lunr.Vector.prototype.magnitude = function () { - if (this._magnitude) return this._magnitude - - var sumOfSquares = 0 - var elementsLength = this.elements.length - - for (var i = 1; i < elementsLength; i += 2) { - var val = this.elements[i] - sumOfSquares += val * val - } - - return (this._magnitude = Math.sqrt(sumOfSquares)) - } - - /** - * Calculates the dot product of this vector and another vector. - * - * @param {lunr.Vector} otherVector - The vector to compute the dot product with. - * @returns {Number} - */ - lunr.Vector.prototype.dot = function (otherVector) { - var dotProduct = 0 - var a = this.elements; var b = otherVector.elements - var aLen = a.length; var bLen = b.length - var aVal = 0; var bVal = 0 - var i = 0; var j = 0 - - while (i < aLen && j < bLen) { - aVal = a[i]; bVal = b[j] - if (aVal < bVal) { - i += 2 - } else if (aVal > bVal) { - j += 2 - } else if (aVal === bVal) { - dotProduct += a[i + 1] * b[j + 1] - i += 2 - j += 2 - } - } - - return dotProduct - } - - /** - * Calculates the similarity between this vector and another vector. - * - * @param {lunr.Vector} otherVector - The other vector to calculate the - * similarity with. - * @returns {Number} - */ - lunr.Vector.prototype.similarity = function (otherVector) { - return this.dot(otherVector) / this.magnitude() || 0 - } - - /** - * Converts the vector to an array of the elements within the vector. - * - * @returns {Number[]} - */ - lunr.Vector.prototype.toArray = function () { - var output = new Array(this.elements.length / 2) - - for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { - output[j] = this.elements[i] - } - - return output - } - - /** - * A JSON serializable representation of the vector. - * - * @returns {Number[]} - */ - lunr.Vector.prototype.toJSON = function () { - return this.elements - } -/* eslint-disable */ -/*! - * lunr.stemmer - * Copyright (C) 2019 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ - -/** - * lunr.stemmer is an english language stemmer, this is a JavaScript - * implementation of the PorterStemmer taken from http://tartarus.org/~martin - * - * @static - * @implements {lunr.PipelineFunction} - * @param {lunr.Token} token - The string to stem - * @returns {lunr.Token} - * @see {@link lunr.Pipeline} - * @function - */ -lunr.stemmer = (function(){ - var step2list = { - "ational" : "ate", - "tional" : "tion", - "enci" : "ence", - "anci" : "ance", - "izer" : "ize", - "bli" : "ble", - "alli" : "al", - "entli" : "ent", - "eli" : "e", - "ousli" : "ous", - "ization" : "ize", - "ation" : "ate", - "ator" : "ate", - "alism" : "al", - "iveness" : "ive", - "fulness" : "ful", - "ousness" : "ous", - "aliti" : "al", - "iviti" : "ive", - "biliti" : "ble", - "logi" : "log" - }, - - step3list = { - "icate" : "ic", - "ative" : "", - "alize" : "al", - "iciti" : "ic", - "ical" : "ic", - "ful" : "", - "ness" : "" - }, - - c = "[^aeiou]", // consonant - v = "[aeiouy]", // vowel - C = c + "[^aeiouy]*", // consonant sequence - V = v + "[aeiou]*", // vowel sequence - - mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 - meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 - mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 - s_v = "^(" + C + ")?" + v; // vowel in stem - - var re_mgr0 = new RegExp(mgr0); - var re_mgr1 = new RegExp(mgr1); - var re_meq1 = new RegExp(meq1); - var re_s_v = new RegExp(s_v); - - var re_1a = /^(.+?)(ss|i)es$/; - var re2_1a = /^(.+?)([^s])s$/; - var re_1b = /^(.+?)eed$/; - var re2_1b = /^(.+?)(ed|ing)$/; - var re_1b_2 = /.$/; - var re2_1b_2 = /(at|bl|iz)$/; - var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); - var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - - var re_1c = /^(.+?[^aeiou])y$/; - var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - - var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - - var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - var re2_4 = /^(.+?)(s|t)(ion)$/; - - var re_5 = /^(.+?)e$/; - var re_5_1 = /ll$/; - var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - - var porterStemmer = function porterStemmer(w) { - var stem, - suffix, - firstch, - re, - re2, - re3, - re4; - - if (w.length < 3) { return w; } - - firstch = w.substr(0,1); - if (firstch == "y") { - w = firstch.toUpperCase() + w.substr(1); - } - - // Step 1a - re = re_1a - re2 = re2_1a; - - if (re.test(w)) { w = w.replace(re,"$1$2"); } - else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } - - // Step 1b - re = re_1b; - re2 = re2_1b; - if (re.test(w)) { - var fp = re.exec(w); - re = re_mgr0; - if (re.test(fp[1])) { - re = re_1b_2; - w = w.replace(re,""); - } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = re_s_v; - if (re2.test(stem)) { - w = stem; - re2 = re2_1b_2; - re3 = re3_1b_2; - re4 = re4_1b_2; - if (re2.test(w)) { w = w + "e"; } - else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } - else if (re4.test(w)) { w = w + "e"; } - } - } - - // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) - re = re_1c; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - w = stem + "i"; - } - - // Step 2 - re = re_2; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = re_mgr0; - if (re.test(stem)) { - w = stem + step2list[suffix]; - } - } - - // Step 3 - re = re_3; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = re_mgr0; - if (re.test(stem)) { - w = stem + step3list[suffix]; - } - } - - // Step 4 - re = re_4; - re2 = re2_4; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = re_mgr1; - if (re.test(stem)) { - w = stem; - } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = re_mgr1; - if (re2.test(stem)) { - w = stem; - } - } - - // Step 5 - re = re_5; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = re_mgr1; - re2 = re_meq1; - re3 = re3_5; - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { - w = stem; - } - } - - re = re_5_1; - re2 = re_mgr1; - if (re.test(w) && re2.test(w)) { - re = re_1b_2; - w = w.replace(re,""); - } - - // and turn initial Y back to y - - if (firstch == "y") { - w = firstch.toLowerCase() + w.substr(1); - } - - return w; - }; - - return function (token) { - return token.update(porterStemmer); - } -})(); - -lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') -/*! - * lunr.stopWordFilter - * Copyright (C) 2019 Oliver Nightingale - */ - -/** - * lunr.generateStopWordFilter builds a stopWordFilter function from the provided - * list of stop words. - * - * The built in lunr.stopWordFilter is built using this generator and can be used - * to generate custom stopWordFilters for applications or non English languages. - * - * @function - * @param {Array} token The token to pass through the filter - * @returns {lunr.PipelineFunction} - * @see lunr.Pipeline - * @see lunr.stopWordFilter - */ -lunr.generateStopWordFilter = function (stopWords) { - var words = stopWords.reduce(function (memo, stopWord) { - memo[stopWord] = stopWord - return memo - }, {}) - - return function (token) { - if (token && words[token.toString()] !== token.toString()) return token - } -} - -/** - * lunr.stopWordFilter is an English language stop word list filter, any words - * contained in the list will not be passed through the filter. - * - * This is intended to be used in the Pipeline. If the token does not pass the - * filter then undefined will be returned. - * - * @function - * @implements {lunr.PipelineFunction} - * @params {lunr.Token} token - A token to check for being a stop word. - * @returns {lunr.Token} - * @see {@link lunr.Pipeline} - */ -lunr.stopWordFilter = lunr.generateStopWordFilter([ - 'a', - 'able', - 'about', - 'across', - 'after', - 'all', - 'almost', - 'also', - 'am', - 'among', - 'an', - 'and', - 'any', - 'are', - 'as', - 'at', - 'be', - 'because', - 'been', - 'but', - 'by', - 'can', - 'cannot', - 'could', - 'dear', - 'did', - 'do', - 'does', - 'either', - 'else', - 'ever', - 'every', - 'for', - 'from', - 'get', - 'got', - 'had', - 'has', - 'have', - 'he', - 'her', - 'hers', - 'him', - 'his', - 'how', - 'however', - 'i', - 'if', - 'in', - 'into', - 'is', - 'it', - 'its', - 'just', - 'least', - 'let', - 'like', - 'likely', - 'may', - 'me', - 'might', - 'most', - 'must', - 'my', - 'neither', - 'no', - 'nor', - 'not', - 'of', - 'off', - 'often', - 'on', - 'only', - 'or', - 'other', - 'our', - 'own', - 'rather', - 'said', - 'say', - 'says', - 'she', - 'should', - 'since', - 'so', - 'some', - 'than', - 'that', - 'the', - 'their', - 'them', - 'then', - 'there', - 'these', - 'they', - 'this', - 'tis', - 'to', - 'too', - 'twas', - 'us', - 'wants', - 'was', - 'we', - 'were', - 'what', - 'when', - 'where', - 'which', - 'while', - 'who', - 'whom', - 'why', - 'will', - 'with', - 'would', - 'yet', - 'you', - 'your' -]) - -lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') -/*! - * lunr.trimmer - * Copyright (C) 2019 Oliver Nightingale - */ - -/** - * lunr.trimmer is a pipeline function for trimming non word - * characters from the beginning and end of tokens before they - * enter the index. - * - * This implementation may not work correctly for non latin - * characters and should either be removed or adapted for use - * with languages with non-latin characters. - * - * @static - * @implements {lunr.PipelineFunction} - * @param {lunr.Token} token The token to pass through the filter - * @returns {lunr.Token} - * @see lunr.Pipeline - */ -lunr.trimmer = function (token) { - return token.update(function (s) { - return s.replace(/^\W+/, '').replace(/\W+$/, '') - }) -} - -lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') -/*! - * lunr.TokenSet - * Copyright (C) 2019 Oliver Nightingale - */ - -/** - * A token set is used to store the unique list of all tokens - * within an index. Token sets are also used to represent an - * incoming query to the index, this query token set and index - * token set are then intersected to find which tokens to look - * up in the inverted index. - * - * A token set can hold multiple tokens, as in the case of the - * index token set, or it can hold a single token as in the - * case of a simple query token set. - * - * Additionally token sets are used to perform wildcard matching. - * Leading, contained and trailing wildcards are supported, and - * from this edit distance matching can also be provided. - * - * Token sets are implemented as a minimal finite state automata, - * where both common prefixes and suffixes are shared between tokens. - * This helps to reduce the space used for storing the token set. - * - * @constructor - */ -lunr.TokenSet = function () { - this.final = false - this.edges = {} - this.id = lunr.TokenSet._nextId - lunr.TokenSet._nextId += 1 -} - -/** - * Keeps track of the next, auto increment, identifier to assign - * to a new tokenSet. - * - * TokenSets require a unique identifier to be correctly minimised. - * - * @private - */ -lunr.TokenSet._nextId = 1 - -/** - * Creates a TokenSet instance from the given sorted array of words. - * - * @param {String[]} arr - A sorted array of strings to create the set from. - * @returns {lunr.TokenSet} - * @throws Will throw an error if the input array is not sorted. - */ -lunr.TokenSet.fromArray = function (arr) { - var builder = new lunr.TokenSet.Builder - - for (var i = 0, len = arr.length; i < len; i++) { - builder.insert(arr[i]) - } - - builder.finish() - return builder.root -} - -/** - * Creates a token set from a query clause. - * - * @private - * @param {Object} clause - A single clause from lunr.Query. - * @param {string} clause.term - The query clause term. - * @param {number} [clause.editDistance] - The optional edit distance for the term. - * @returns {lunr.TokenSet} - */ -lunr.TokenSet.fromClause = function (clause) { - if ('editDistance' in clause) { - return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) - } else { - return lunr.TokenSet.fromString(clause.term) - } -} - -/** - * Creates a token set representing a single string with a specified - * edit distance. - * - * Insertions, deletions, substitutions and transpositions are each - * treated as an edit distance of 1. - * - * Increasing the allowed edit distance will have a dramatic impact - * on the performance of both creating and intersecting these TokenSets. - * It is advised to keep the edit distance less than 3. - * - * @param {string} str - The string to create the token set from. - * @param {number} editDistance - The allowed edit distance to match. - * @returns {lunr.Vector} - */ -lunr.TokenSet.fromFuzzyString = function (str, editDistance) { - var root = new lunr.TokenSet - - var stack = [{ - node: root, - editsRemaining: editDistance, - str: str - }] - - while (stack.length) { - var frame = stack.pop() - - // no edit - if (frame.str.length > 0) { - var char = frame.str.charAt(0), - noEditNode - - if (char in frame.node.edges) { - noEditNode = frame.node.edges[char] - } else { - noEditNode = new lunr.TokenSet - frame.node.edges[char] = noEditNode - } - - if (frame.str.length == 1) { - noEditNode.final = true - } - - stack.push({ - node: noEditNode, - editsRemaining: frame.editsRemaining, - str: frame.str.slice(1) - }) - } - - if (frame.editsRemaining == 0) { - continue - } - - // insertion - if ("*" in frame.node.edges) { - var insertionNode = frame.node.edges["*"] - } else { - var insertionNode = new lunr.TokenSet - frame.node.edges["*"] = insertionNode - } - - if (frame.str.length == 0) { - insertionNode.final = true - } - - stack.push({ - node: insertionNode, - editsRemaining: frame.editsRemaining - 1, - str: frame.str - }) - - // deletion - // can only do a deletion if we have enough edits remaining - // and if there are characters left to delete in the string - if (frame.str.length > 1) { - stack.push({ - node: frame.node, - editsRemaining: frame.editsRemaining - 1, - str: frame.str.slice(1) - }) - } - - // deletion - // just removing the last character from the str - if (frame.str.length == 1) { - frame.node.final = true - } - - // substitution - // can only do a substitution if we have enough edits remaining - // and if there are characters left to substitute - if (frame.str.length >= 1) { - if ("*" in frame.node.edges) { - var substitutionNode = frame.node.edges["*"] - } else { - var substitutionNode = new lunr.TokenSet - frame.node.edges["*"] = substitutionNode - } - - if (frame.str.length == 1) { - substitutionNode.final = true - } - - stack.push({ - node: substitutionNode, - editsRemaining: frame.editsRemaining - 1, - str: frame.str.slice(1) - }) - } - - // transposition - // can only do a transposition if there are edits remaining - // and there are enough characters to transpose - if (frame.str.length > 1) { - var charA = frame.str.charAt(0), - charB = frame.str.charAt(1), - transposeNode - - if (charB in frame.node.edges) { - transposeNode = frame.node.edges[charB] - } else { - transposeNode = new lunr.TokenSet - frame.node.edges[charB] = transposeNode - } - - if (frame.str.length == 1) { - transposeNode.final = true - } - - stack.push({ - node: transposeNode, - editsRemaining: frame.editsRemaining - 1, - str: charA + frame.str.slice(2) - }) - } - } - - return root -} - -/** - * Creates a TokenSet from a string. - * - * The string may contain one or more wildcard characters (*) - * that will allow wildcard matching when intersecting with - * another TokenSet. - * - * @param {string} str - The string to create a TokenSet from. - * @returns {lunr.TokenSet} - */ -lunr.TokenSet.fromString = function (str) { - var node = new lunr.TokenSet, - root = node - - /* - * Iterates through all characters within the passed string - * appending a node for each character. - * - * When a wildcard character is found then a self - * referencing edge is introduced to continually match - * any number of any characters. - */ - for (var i = 0, len = str.length; i < len; i++) { - var char = str[i], - final = (i == len - 1) - - if (char == "*") { - node.edges[char] = node - node.final = final - - } else { - var next = new lunr.TokenSet - next.final = final - - node.edges[char] = next - node = next - } - } - - return root -} - -/** - * Converts this TokenSet into an array of strings - * contained within the TokenSet. - * - * This is not intended to be used on a TokenSet that - * contains wildcards, in these cases the results are - * undefined and are likely to cause an infinite loop. - * - * @returns {string[]} - */ -lunr.TokenSet.prototype.toArray = function () { - var words = [] - - var stack = [{ - prefix: "", - node: this - }] - - while (stack.length) { - var frame = stack.pop(), - edges = Object.keys(frame.node.edges), - len = edges.length - - if (frame.node.final) { - /* In Safari, at this point the prefix is sometimes corrupted, see: - * https://github.com/olivernn/lunr.js/issues/279 Calling any - * String.prototype method forces Safari to "cast" this string to what - * it's supposed to be, fixing the bug. */ - frame.prefix.charAt(0) - words.push(frame.prefix) - } - - for (var i = 0; i < len; i++) { - var edge = edges[i] - - stack.push({ - prefix: frame.prefix.concat(edge), - node: frame.node.edges[edge] - }) - } - } - - return words -} - -/** - * Generates a string representation of a TokenSet. - * - * This is intended to allow TokenSets to be used as keys - * in objects, largely to aid the construction and minimisation - * of a TokenSet. As such it is not designed to be a human - * friendly representation of the TokenSet. - * - * @returns {string} - */ -lunr.TokenSet.prototype.toString = function () { - // NOTE: Using Object.keys here as this.edges is very likely - // to enter 'hash-mode' with many keys being added - // - // avoiding a for-in loop here as it leads to the function - // being de-optimised (at least in V8). From some simple - // benchmarks the performance is comparable, but allowing - // V8 to optimize may mean easy performance wins in the future. - - if (this._str) { - return this._str - } - - var str = this.final ? '1' : '0', - labels = Object.keys(this.edges).sort(), - len = labels.length - - for (var i = 0; i < len; i++) { - var label = labels[i], - node = this.edges[label] - - str = str + label + node.id - } - - return str -} - -/** - * Returns a new TokenSet that is the intersection of - * this TokenSet and the passed TokenSet. - * - * This intersection will take into account any wildcards - * contained within the TokenSet. - * - * @param {lunr.TokenSet} b - An other TokenSet to intersect with. - * @returns {lunr.TokenSet} - */ -lunr.TokenSet.prototype.intersect = function (b) { - var output = new lunr.TokenSet, - frame = undefined - - var stack = [{ - qNode: b, - output: output, - node: this - }] - - while (stack.length) { - frame = stack.pop() - - // NOTE: As with the #toString method, we are using - // Object.keys and a for loop instead of a for-in loop - // as both of these objects enter 'hash' mode, causing - // the function to be de-optimised in V8 - var qEdges = Object.keys(frame.qNode.edges), - qLen = qEdges.length, - nEdges = Object.keys(frame.node.edges), - nLen = nEdges.length - - for (var q = 0; q < qLen; q++) { - var qEdge = qEdges[q] - - for (var n = 0; n < nLen; n++) { - var nEdge = nEdges[n] - - if (nEdge == qEdge || qEdge == '*') { - var node = frame.node.edges[nEdge], - qNode = frame.qNode.edges[qEdge], - final = node.final && qNode.final, - next = undefined - - if (nEdge in frame.output.edges) { - // an edge already exists for this character - // no need to create a new node, just set the finality - // bit unless this node is already final - next = frame.output.edges[nEdge] - next.final = next.final || final - - } else { - // no edge exists yet, must create one - // set the finality bit and insert it - // into the output - next = new lunr.TokenSet - next.final = final - frame.output.edges[nEdge] = next - } - - stack.push({ - qNode: qNode, - output: next, - node: node - }) - } - } - } - } - - return output -} -lunr.TokenSet.Builder = function () { - this.previousWord = "" - this.root = new lunr.TokenSet - this.uncheckedNodes = [] - this.minimizedNodes = {} -} - -lunr.TokenSet.Builder.prototype.insert = function (word) { - var node, - commonPrefix = 0 - - if (word < this.previousWord) { - throw new Error ("Out of order word insertion") - } - - for (var i = 0; i < word.length && i < this.previousWord.length; i++) { - if (word[i] != this.previousWord[i]) break - commonPrefix++ - } - - this.minimize(commonPrefix) - - if (this.uncheckedNodes.length == 0) { - node = this.root - } else { - node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child - } - - for (var i = commonPrefix; i < word.length; i++) { - var nextNode = new lunr.TokenSet, - char = word[i] - - node.edges[char] = nextNode - - this.uncheckedNodes.push({ - parent: node, - char: char, - child: nextNode - }) - - node = nextNode - } - - node.final = true - this.previousWord = word -} - -lunr.TokenSet.Builder.prototype.finish = function () { - this.minimize(0) -} - -lunr.TokenSet.Builder.prototype.minimize = function (downTo) { - for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { - var node = this.uncheckedNodes[i], - childKey = node.child.toString() - - if (childKey in this.minimizedNodes) { - node.parent.edges[node.char] = this.minimizedNodes[childKey] - } else { - // Cache the key for this node since - // we know it can't change anymore - node.child._str = childKey - - this.minimizedNodes[childKey] = node.child - } - - this.uncheckedNodes.pop() - } -} -/*! - * lunr.Index - * Copyright (C) 2019 Oliver Nightingale - */ - -/** - * An index contains the built index of all documents and provides a query interface - * to the index. - * - * Usually instances of lunr.Index will not be created using this constructor, instead - * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be - * used to load previously built and serialized indexes. - * - * @constructor - * @param {Object} attrs - The attributes of the built search index. - * @param {Object} attrs.invertedIndex - An index of term/field to document reference. - * @param {Object} attrs.fieldVectors - Field vectors - * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. - * @param {string[]} attrs.fields - The names of indexed document fields. - * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. - */ -lunr.Index = function (attrs) { - this.invertedIndex = attrs.invertedIndex - this.fieldVectors = attrs.fieldVectors - this.tokenSet = attrs.tokenSet - this.fields = attrs.fields - this.pipeline = attrs.pipeline -} - -/** - * A result contains details of a document matching a search query. - * @typedef {Object} lunr.Index~Result - * @property {string} ref - The reference of the document this result represents. - * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. - * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. - */ - -/** - * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple - * query language which itself is parsed into an instance of lunr.Query. - * - * For programmatically building queries it is advised to directly use lunr.Query, the query language - * is best used for human entered text rather than program generated text. - * - * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported - * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' - * or 'world', though those that contain both will rank higher in the results. - * - * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can - * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding - * wildcards will increase the number of documents that will be found but can also have a negative - * impact on query performance, especially with wildcards at the beginning of a term. - * - * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term - * hello in the title field will match this query. Using a field not present in the index will lead - * to an error being thrown. - * - * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term - * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported - * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. - * Avoid large values for edit distance to improve query performance. - * - * Each term also supports a presence modifier. By default a term's presence in document is optional, however - * this can be changed to either required or prohibited. For a term's presence to be required in a document the - * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and - * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not - * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. - * - * To escape special characters the backslash character '\' can be used, this allows searches to include - * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead - * of attempting to apply a boost of 2 to the search term "foo". - * - * @typedef {string} lunr.Index~QueryString - * @example
    - * hello - * @example - * hello world - * @example - * title:hello - * @example - * hello^10 - * @example - * hello~2 - * @example - * -foo +bar baz - */ - -/** - * Performs a search against the index using lunr query syntax. - * - * Results will be returned sorted by their score, the most relevant results - * will be returned first. For details on how the score is calculated, please see - * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. - * - * For more programmatic querying use lunr.Index#query. - * - * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. - * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. - * @returns {lunr.Index~Result[]} - */ -lunr.Index.prototype.search = function (queryString) { - return this.query(function (query) { - var parser = new lunr.QueryParser(queryString, query) - parser.parse() - }) -} - -/** - * A query builder callback provides a query object to be used to express - * the query to perform on the index. - * - * @callback lunr.Index~queryBuilder - * @param {lunr.Query} query - The query object to build up. - * @this lunr.Query - */ - -/** - * Performs a query against the index using the yielded lunr.Query object. - * - * If performing programmatic queries against the index, this method is preferred - * over lunr.Index#search so as to avoid the additional query parsing overhead. - * - * A query object is yielded to the supplied function which should be used to - * express the query to be run against the index. - * - * Note that although this function takes a callback parameter it is _not_ an - * asynchronous operation, the callback is just yielded a query object to be - * customized. - * - * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. - * @returns {lunr.Index~Result[]} - */ -lunr.Index.prototype.query = function (fn) { - // for each query clause - // * process terms - // * expand terms from token set - // * find matching documents and metadata - // * get document vectors - // * score documents - - var query = new lunr.Query(this.fields), - matchingFields = Object.create(null), - queryVectors = Object.create(null), - termFieldCache = Object.create(null), - requiredMatches = Object.create(null), - prohibitedMatches = Object.create(null) - - /* - * To support field level boosts a query vector is created per - * field. An empty vector is eagerly created to support negated - * queries. - */ - for (var i = 0; i < this.fields.length; i++) { - queryVectors[this.fields[i]] = new lunr.Vector - } - - fn.call(query, query) - - for (var i = 0; i < query.clauses.length; i++) { - /* - * Unless the pipeline has been disabled for this term, which is - * the case for terms with wildcards, we need to pass the clause - * term through the search pipeline. A pipeline returns an array - * of processed terms. Pipeline functions may expand the passed - * term, which means we may end up performing multiple index lookups - * for a single query term. - */ - var clause = query.clauses[i], - terms = null, - clauseMatches = lunr.Set.complete - - if (clause.usePipeline) { - terms = this.pipeline.runString(clause.term, { - fields: clause.fields - }) - } else { - terms = [clause.term] - } - - for (var m = 0; m < terms.length; m++) { - var term = terms[m] - - /* - * Each term returned from the pipeline needs to use the same query - * clause object, e.g. the same boost and or edit distance. The - * simplest way to do this is to re-use the clause object but mutate - * its term property. - */ - clause.term = term - - /* - * From the term in the clause we create a token set which will then - * be used to intersect the indexes token set to get a list of terms - * to lookup in the inverted index - */ - var termTokenSet = lunr.TokenSet.fromClause(clause), - expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() - - /* - * If a term marked as required does not exist in the tokenSet it is - * impossible for the search to return any matches. We set all the field - * scoped required matches set to empty and stop examining any further - * clauses. - */ - if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { - for (var k = 0; k < clause.fields.length; k++) { - var field = clause.fields[k] - requiredMatches[field] = lunr.Set.empty - } - - break - } - - for (var j = 0; j < expandedTerms.length; j++) { - /* - * For each term get the posting and termIndex, this is required for - * building the query vector. - */ - var expandedTerm = expandedTerms[j], - posting = this.invertedIndex[expandedTerm], - termIndex = posting._index - - for (var k = 0; k < clause.fields.length; k++) { - /* - * For each field that this query term is scoped by (by default - * all fields are in scope) we need to get all the document refs - * that have this term in that field. - * - * The posting is the entry in the invertedIndex for the matching - * term from above. - */ - var field = clause.fields[k], - fieldPosting = posting[field], - matchingDocumentRefs = Object.keys(fieldPosting), - termField = expandedTerm + "/" + field, - matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) - - /* - * if the presence of this term is required ensure that the matching - * documents are added to the set of required matches for this clause. - * - */ - if (clause.presence == lunr.Query.presence.REQUIRED) { - clauseMatches = clauseMatches.union(matchingDocumentsSet) - - if (requiredMatches[field] === undefined) { - requiredMatches[field] = lunr.Set.complete - } - } - - /* - * if the presence of this term is prohibited ensure that the matching - * documents are added to the set of prohibited matches for this field, - * creating that set if it does not yet exist. - */ - if (clause.presence == lunr.Query.presence.PROHIBITED) { - if (prohibitedMatches[field] === undefined) { - prohibitedMatches[field] = lunr.Set.empty - } - - prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) - - /* - * Prohibited matches should not be part of the query vector used for - * similarity scoring and no metadata should be extracted so we continue - * to the next field - */ - continue - } - - /* - * The query field vector is populated using the termIndex found for - * the term and a unit value with the appropriate boost applied. - * Using upsert because there could already be an entry in the vector - * for the term we are working with. In that case we just add the scores - * together. - */ - queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) - - /** - * If we've already seen this term, field combo then we've already collected - * the matching documents and metadata, no need to go through all that again - */ - if (termFieldCache[termField]) { - continue - } - - for (var l = 0; l < matchingDocumentRefs.length; l++) { - /* - * All metadata for this term/field/document triple - * are then extracted and collected into an instance - * of lunr.MatchData ready to be returned in the query - * results - */ - var matchingDocumentRef = matchingDocumentRefs[l], - matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), - metadata = fieldPosting[matchingDocumentRef], - fieldMatch - - if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { - matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) - } else { - fieldMatch.add(expandedTerm, field, metadata) - } - - } - - termFieldCache[termField] = true - } - } - } - - /** - * If the presence was required we need to update the requiredMatches field sets. - * We do this after all fields for the term have collected their matches because - * the clause terms presence is required in _any_ of the fields not _all_ of the - * fields. - */ - if (clause.presence === lunr.Query.presence.REQUIRED) { - for (var k = 0; k < clause.fields.length; k++) { - var field = clause.fields[k] - requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) - } - } - } - - /** - * Need to combine the field scoped required and prohibited - * matching documents into a global set of required and prohibited - * matches - */ - var allRequiredMatches = lunr.Set.complete, - allProhibitedMatches = lunr.Set.empty - - for (var i = 0; i < this.fields.length; i++) { - var field = this.fields[i] - - if (requiredMatches[field]) { - allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) - } - - if (prohibitedMatches[field]) { - allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) - } - } - - var matchingFieldRefs = Object.keys(matchingFields), - results = [], - matches = Object.create(null) - - /* - * If the query is negated (contains only prohibited terms) - * we need to get _all_ fieldRefs currently existing in the - * index. This is only done when we know that the query is - * entirely prohibited terms to avoid any cost of getting all - * fieldRefs unnecessarily. - * - * Additionally, blank MatchData must be created to correctly - * populate the results. - */ - if (query.isNegated()) { - matchingFieldRefs = Object.keys(this.fieldVectors) - - for (var i = 0; i < matchingFieldRefs.length; i++) { - var matchingFieldRef = matchingFieldRefs[i] - var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) - matchingFields[matchingFieldRef] = new lunr.MatchData - } - } - - for (var i = 0; i < matchingFieldRefs.length; i++) { - /* - * Currently we have document fields that match the query, but we - * need to return documents. The matchData and scores are combined - * from multiple fields belonging to the same document. - * - * Scores are calculated by field, using the query vectors created - * above, and combined into a final document score using addition. - */ - var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), - docRef = fieldRef.docRef - - if (!allRequiredMatches.contains(docRef)) { - continue - } - - if (allProhibitedMatches.contains(docRef)) { - continue - } - - var fieldVector = this.fieldVectors[fieldRef], - score = queryVectors[fieldRef.fieldName].similarity(fieldVector), - docMatch - - if ((docMatch = matches[docRef]) !== undefined) { - docMatch.score += score - docMatch.matchData.combine(matchingFields[fieldRef]) - } else { - var match = { - ref: docRef, - score: score, - matchData: matchingFields[fieldRef] - } - matches[docRef] = match - results.push(match) - } - } - - /* - * Sort the results objects by score, highest first. - */ - return results.sort(function (a, b) { - return b.score - a.score - }) -} - -/** - * Prepares the index for JSON serialization. - * - * The schema for this JSON blob will be described in a - * separate JSON schema file. - * - * @returns {Object} - */ -lunr.Index.prototype.toJSON = function () { - var invertedIndex = Object.keys(this.invertedIndex) - .sort() - .map(function (term) { - return [term, this.invertedIndex[term]] - }, this) - - var fieldVectors = Object.keys(this.fieldVectors) - .map(function (ref) { - return [ref, this.fieldVectors[ref].toJSON()] - }, this) - - return { - version: lunr.version, - fields: this.fields, - fieldVectors: fieldVectors, - invertedIndex: invertedIndex, - pipeline: this.pipeline.toJSON() - } -} - -/** - * Loads a previously serialized lunr.Index - * - * @param {Object} serializedIndex - A previously serialized lunr.Index - * @returns {lunr.Index} - */ -lunr.Index.load = function (serializedIndex) { - var attrs = {}, - fieldVectors = {}, - serializedVectors = serializedIndex.fieldVectors, - invertedIndex = Object.create(null), - serializedInvertedIndex = serializedIndex.invertedIndex, - tokenSetBuilder = new lunr.TokenSet.Builder, - pipeline = lunr.Pipeline.load(serializedIndex.pipeline) - - if (serializedIndex.version != lunr.version) { - lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") - } - - for (var i = 0; i < serializedVectors.length; i++) { - var tuple = serializedVectors[i], - ref = tuple[0], - elements = tuple[1] - - fieldVectors[ref] = new lunr.Vector(elements) - } - - for (var i = 0; i < serializedInvertedIndex.length; i++) { - var tuple = serializedInvertedIndex[i], - term = tuple[0], - posting = tuple[1] - - tokenSetBuilder.insert(term) - invertedIndex[term] = posting - } - - tokenSetBuilder.finish() - - attrs.fields = serializedIndex.fields - - attrs.fieldVectors = fieldVectors - attrs.invertedIndex = invertedIndex - attrs.tokenSet = tokenSetBuilder.root - attrs.pipeline = pipeline - - return new lunr.Index(attrs) -} -/*! - * lunr.Builder - * Copyright (C) 2019 Oliver Nightingale - */ - -/** - * lunr.Builder performs indexing on a set of documents and - * returns instances of lunr.Index ready for querying. - * - * All configuration of the index is done via the builder, the - * fields to index, the document reference, the text processing - * pipeline and document scoring parameters are all set on the - * builder before indexing. - * - * @constructor - * @property {string} _ref - Internal reference to the document reference field. - * @property {string[]} _fields - Internal reference to the document fields to index. - * @property {object} invertedIndex - The inverted index maps terms to document fields. - * @property {object} documentTermFrequencies - Keeps track of document term frequencies. - * @property {object} documentLengths - Keeps track of the length of documents added to the index. - * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. - * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. - * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. - * @property {number} documentCount - Keeps track of the total number of documents indexed. - * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. - * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. - * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. - * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. - */ -lunr.Builder = function () { - this._ref = "id" - this._fields = Object.create(null) - this._documents = Object.create(null) - this.invertedIndex = Object.create(null) - this.fieldTermFrequencies = {} - this.fieldLengths = {} - this.tokenizer = lunr.tokenizer - this.pipeline = new lunr.Pipeline - this.searchPipeline = new lunr.Pipeline - this.documentCount = 0 - this._b = 0.75 - this._k1 = 1.2 - this.termIndex = 0 - this.metadataWhitelist = [] -} - -/** - * Sets the document field used as the document reference. Every document must have this field. - * The type of this field in the document should be a string, if it is not a string it will be - * coerced into a string by calling toString. - * - * The default ref is 'id'. - * - * The ref should _not_ be changed during indexing, it should be set before any documents are - * added to the index. Changing it during indexing can lead to inconsistent results. - * - * @param {string} ref - The name of the reference field in the document. - */ -lunr.Builder.prototype.ref = function (ref) { - this._ref = ref -} - -/** - * A function that is used to extract a field from a document. - * - * Lunr expects a field to be at the top level of a document, if however the field - * is deeply nested within a document an extractor function can be used to extract - * the right field for indexing. - * - * @callback fieldExtractor - * @param {object} doc - The document being added to the index. - * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. - * @example - * function (doc) { return doc.nested.field } - */ - -/** - * Adds a field to the list of document fields that will be indexed. Every document being - * indexed should have this field. Null values for this field in indexed documents will - * not cause errors but will limit the chance of that document being retrieved by searches. - * - * All fields should be added before adding documents to the index. Adding fields after - * a document has been indexed will have no effect on already indexed documents. - * - * Fields can be boosted at build time. This allows terms within that field to have more - * importance when ranking search results. Use a field boost to specify that matches within - * one field are more important than other fields. - * - * @param {string} fieldName - The name of a field to index in all documents. - * @param {object} attributes - Optional attributes associated with this field. - * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. - * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. - * @throws {RangeError} fieldName cannot contain unsupported characters '/' - */ -lunr.Builder.prototype.field = function (fieldName, attributes) { - if (/\//.test(fieldName)) { - throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") - } - - this._fields[fieldName] = attributes || {} -} - -/** - * A parameter to tune the amount of field length normalisation that is applied when - * calculating relevance scores. A value of 0 will completely disable any normalisation - * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b - * will be clamped to the range 0 - 1. - * - * @param {number} number - The value to set for this tuning parameter. - */ -lunr.Builder.prototype.b = function (number) { - if (number < 0) { - this._b = 0 - } else if (number > 1) { - this._b = 1 - } else { - this._b = number - } -} - -/** - * A parameter that controls the speed at which a rise in term frequency results in term - * frequency saturation. The default value is 1.2. Setting this to a higher value will give - * slower saturation levels, a lower value will result in quicker saturation. - * - * @param {number} number - The value to set for this tuning parameter. - */ -lunr.Builder.prototype.k1 = function (number) { - this._k1 = number -} - -/** - * Adds a document to the index. - * - * Before adding fields to the index the index should have been fully setup, with the document - * ref and all fields to index already having been specified. - * - * The document must have a field name as specified by the ref (by default this is 'id') and - * it should have all fields defined for indexing, though null or undefined values will not - * cause errors. - * - * Entire documents can be boosted at build time. Applying a boost to a document indicates that - * this document should rank higher in search results than other documents. - * - * @param {object} doc - The document to add to the index. - * @param {object} attributes - Optional attributes associated with this document. - * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. - */ -lunr.Builder.prototype.add = function (doc, attributes) { - var docRef = doc[this._ref], - fields = Object.keys(this._fields) - - this._documents[docRef] = attributes || {} - this.documentCount += 1 - - for (var i = 0; i < fields.length; i++) { - var fieldName = fields[i], - extractor = this._fields[fieldName].extractor, - field = extractor ? extractor(doc) : doc[fieldName], - tokens = this.tokenizer(field, { - fields: [fieldName] - }), - terms = this.pipeline.run(tokens), - fieldRef = new lunr.FieldRef (docRef, fieldName), - fieldTerms = Object.create(null) - - this.fieldTermFrequencies[fieldRef] = fieldTerms - this.fieldLengths[fieldRef] = 0 - - // store the length of this field for this document - this.fieldLengths[fieldRef] += terms.length - - // calculate term frequencies for this field - for (var j = 0; j < terms.length; j++) { - var term = terms[j] - - if (fieldTerms[term] == undefined) { - fieldTerms[term] = 0 - } - - fieldTerms[term] += 1 - - // add to inverted index - // create an initial posting if one doesn't exist - if (this.invertedIndex[term] == undefined) { - var posting = Object.create(null) - posting["_index"] = this.termIndex - this.termIndex += 1 - - for (var k = 0; k < fields.length; k++) { - posting[fields[k]] = Object.create(null) - } - - this.invertedIndex[term] = posting - } - - // add an entry for this term/fieldName/docRef to the invertedIndex - if (this.invertedIndex[term][fieldName][docRef] == undefined) { - this.invertedIndex[term][fieldName][docRef] = Object.create(null) - } - - // store all whitelisted metadata about this token in the - // inverted index - for (var l = 0; l < this.metadataWhitelist.length; l++) { - var metadataKey = this.metadataWhitelist[l], - metadata = term.metadata[metadataKey] - - if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { - this.invertedIndex[term][fieldName][docRef][metadataKey] = [] - } - - this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) - } - } - - } -} - -/** - * Calculates the average document length for this index - * - * @private - */ -lunr.Builder.prototype.calculateAverageFieldLengths = function () { - - var fieldRefs = Object.keys(this.fieldLengths), - numberOfFields = fieldRefs.length, - accumulator = {}, - documentsWithField = {} - - for (var i = 0; i < numberOfFields; i++) { - var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), - field = fieldRef.fieldName - - documentsWithField[field] || (documentsWithField[field] = 0) - documentsWithField[field] += 1 - - accumulator[field] || (accumulator[field] = 0) - accumulator[field] += this.fieldLengths[fieldRef] - } - - var fields = Object.keys(this._fields) - - for (var i = 0; i < fields.length; i++) { - var fieldName = fields[i] - accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] - } - - this.averageFieldLength = accumulator -} - -/** - * Builds a vector space model of every document using lunr.Vector - * - * @private - */ -lunr.Builder.prototype.createFieldVectors = function () { - var fieldVectors = {}, - fieldRefs = Object.keys(this.fieldTermFrequencies), - fieldRefsLength = fieldRefs.length, - termIdfCache = Object.create(null) - - for (var i = 0; i < fieldRefsLength; i++) { - var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), - fieldName = fieldRef.fieldName, - fieldLength = this.fieldLengths[fieldRef], - fieldVector = new lunr.Vector, - termFrequencies = this.fieldTermFrequencies[fieldRef], - terms = Object.keys(termFrequencies), - termsLength = terms.length - - - var fieldBoost = this._fields[fieldName].boost || 1, - docBoost = this._documents[fieldRef.docRef].boost || 1 - - for (var j = 0; j < termsLength; j++) { - var term = terms[j], - tf = termFrequencies[term], - termIndex = this.invertedIndex[term]._index, - idf, score, scoreWithPrecision - - if (termIdfCache[term] === undefined) { - idf = lunr.idf(this.invertedIndex[term], this.documentCount) - termIdfCache[term] = idf - } else { - idf = termIdfCache[term] - } - - score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) - score *= fieldBoost - score *= docBoost - scoreWithPrecision = Math.round(score * 1000) / 1000 - // Converts 1.23456789 to 1.234. - // Reducing the precision so that the vectors take up less - // space when serialised. Doing it now so that they behave - // the same before and after serialisation. Also, this is - // the fastest approach to reducing a number's precision in - // JavaScript. - - fieldVector.insert(termIndex, scoreWithPrecision) - } - - fieldVectors[fieldRef] = fieldVector - } - - this.fieldVectors = fieldVectors -} - -/** - * Creates a token set of all tokens in the index using lunr.TokenSet - * - * @private - */ -lunr.Builder.prototype.createTokenSet = function () { - this.tokenSet = lunr.TokenSet.fromArray( - Object.keys(this.invertedIndex).sort() - ) -} - -/** - * Builds the index, creating an instance of lunr.Index. - * - * This completes the indexing process and should only be called - * once all documents have been added to the index. - * - * @returns {lunr.Index} - */ -lunr.Builder.prototype.build = function () { - this.calculateAverageFieldLengths() - this.createFieldVectors() - this.createTokenSet() - - return new lunr.Index({ - invertedIndex: this.invertedIndex, - fieldVectors: this.fieldVectors, - tokenSet: this.tokenSet, - fields: Object.keys(this._fields), - pipeline: this.searchPipeline - }) -} - -/** - * Applies a plugin to the index builder. - * - * A plugin is a function that is called with the index builder as its context. - * Plugins can be used to customise or extend the behaviour of the index - * in some way. A plugin is just a function, that encapsulated the custom - * behaviour that should be applied when building the index. - * - * The plugin function will be called with the index builder as its argument, additional - * arguments can also be passed when calling use. The function will be called - * with the index builder as its context. - * - * @param {Function} plugin The plugin to apply. - */ -lunr.Builder.prototype.use = function (fn) { - var args = Array.prototype.slice.call(arguments, 1) - args.unshift(this) - fn.apply(this, args) -} -/** - * Contains and collects metadata about a matching document. - * A single instance of lunr.MatchData is returned as part of every - * lunr.Index~Result. - * - * @constructor - * @param {string} term - The term this match data is associated with - * @param {string} field - The field in which the term was found - * @param {object} metadata - The metadata recorded about this term in this field - * @property {object} metadata - A cloned collection of metadata associated with this document. - * @see {@link lunr.Index~Result} - */ -lunr.MatchData = function (term, field, metadata) { - var clonedMetadata = Object.create(null), - metadataKeys = Object.keys(metadata || {}) - - // Cloning the metadata to prevent the original - // being mutated during match data combination. - // Metadata is kept in an array within the inverted - // index so cloning the data can be done with - // Array#slice - for (var i = 0; i < metadataKeys.length; i++) { - var key = metadataKeys[i] - clonedMetadata[key] = metadata[key].slice() - } - - this.metadata = Object.create(null) - - if (term !== undefined) { - this.metadata[term] = Object.create(null) - this.metadata[term][field] = clonedMetadata - } -} - -/** - * An instance of lunr.MatchData will be created for every term that matches a - * document. However only one instance is required in a lunr.Index~Result. This - * method combines metadata from another instance of lunr.MatchData with this - * objects metadata. - * - * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. - * @see {@link lunr.Index~Result} - */ -lunr.MatchData.prototype.combine = function (otherMatchData) { - var terms = Object.keys(otherMatchData.metadata) - - for (var i = 0; i < terms.length; i++) { - var term = terms[i], - fields = Object.keys(otherMatchData.metadata[term]) - - if (this.metadata[term] == undefined) { - this.metadata[term] = Object.create(null) - } - - for (var j = 0; j < fields.length; j++) { - var field = fields[j], - keys = Object.keys(otherMatchData.metadata[term][field]) - - if (this.metadata[term][field] == undefined) { - this.metadata[term][field] = Object.create(null) - } - - for (var k = 0; k < keys.length; k++) { - var key = keys[k] - - if (this.metadata[term][field][key] == undefined) { - this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] - } else { - this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) - } - - } - } - } -} - -/** - * Add metadata for a term/field pair to this instance of match data. - * - * @param {string} term - The term this match data is associated with - * @param {string} field - The field in which the term was found - * @param {object} metadata - The metadata recorded about this term in this field - */ -lunr.MatchData.prototype.add = function (term, field, metadata) { - if (!(term in this.metadata)) { - this.metadata[term] = Object.create(null) - this.metadata[term][field] = metadata - return - } - - if (!(field in this.metadata[term])) { - this.metadata[term][field] = metadata - return - } - - var metadataKeys = Object.keys(metadata) - - for (var i = 0; i < metadataKeys.length; i++) { - var key = metadataKeys[i] - - if (key in this.metadata[term][field]) { - this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) - } else { - this.metadata[term][field][key] = metadata[key] - } - } -} -/** - * A lunr.Query provides a programmatic way of defining queries to be performed - * against a {@link lunr.Index}. - * - * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method - * so the query object is pre-initialized with the right index fields. - * - * @constructor - * @property {lunr.Query~Clause[]} clauses - An array of query clauses. - * @property {string[]} allFields - An array of all available fields in a lunr.Index. - */ -lunr.Query = function (allFields) { - this.clauses = [] - this.allFields = allFields -} - -/** - * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. - * - * This allows wildcards to be added to the beginning and end of a term without having to manually do any string - * concatenation. - * - * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. - * - * @constant - * @default - * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour - * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists - * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists - * @see lunr.Query~Clause - * @see lunr.Query#clause - * @see lunr.Query#term - * @example - * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) - * @example - * query.term('foo', { - * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING - * }) - */ - -lunr.Query.wildcard = new String ("*") -lunr.Query.wildcard.NONE = 0 -lunr.Query.wildcard.LEADING = 1 -lunr.Query.wildcard.TRAILING = 2 - -/** - * Constants for indicating what kind of presence a term must have in matching documents. - * - * @constant - * @enum {number} - * @see lunr.Query~Clause - * @see lunr.Query#clause - * @see lunr.Query#term - * @example - * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) - */ -lunr.Query.presence = { - /** - * Term's presence in a document is optional, this is the default value. - */ - OPTIONAL: 1, - - /** - * Term's presence in a document is required, documents that do not contain - * this term will not be returned. - */ - REQUIRED: 2, - - /** - * Term's presence in a document is prohibited, documents that do contain - * this term will not be returned. - */ - PROHIBITED: 3 -} - -/** - * A single clause in a {@link lunr.Query} contains a term and details on how to - * match that term against a {@link lunr.Index}. - * - * @typedef {Object} lunr.Query~Clause - * @property {string[]} fields - The fields in an index this clause should be matched against. - * @property {number} [boost=1] - Any boost that should be applied when matching this clause. - * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. - * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. - * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. - * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. - */ - -/** - * Adds a {@link lunr.Query~Clause} to this query. - * - * Unless the clause contains the fields to be matched all fields will be matched. In addition - * a default boost of 1 is applied to the clause. - * - * @param {lunr.Query~Clause} clause - The clause to add to this query. - * @see lunr.Query~Clause - * @returns {lunr.Query} - */ -lunr.Query.prototype.clause = function (clause) { - if (!('fields' in clause)) { - clause.fields = this.allFields - } - - if (!('boost' in clause)) { - clause.boost = 1 - } - - if (!('usePipeline' in clause)) { - clause.usePipeline = true - } - - if (!('wildcard' in clause)) { - clause.wildcard = lunr.Query.wildcard.NONE - } - - if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { - clause.term = "*" + clause.term - } - - if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { - clause.term = "" + clause.term + "*" - } - - if (!('presence' in clause)) { - clause.presence = lunr.Query.presence.OPTIONAL - } - - this.clauses.push(clause) - - return this -} - -/** - * A negated query is one in which every clause has a presence of - * prohibited. These queries require some special processing to return - * the expected results. - * - * @returns boolean - */ -lunr.Query.prototype.isNegated = function () { - for (var i = 0; i < this.clauses.length; i++) { - if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { - return false - } - } - - return true -} - -/** - * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} - * to the list of clauses that make up this query. - * - * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion - * to a token or token-like string should be done before calling this method. - * - * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an - * array, each term in the array will share the same options. - * - * @param {object|object[]} term - The term(s) to add to the query. - * @param {object} [options] - Any additional properties to add to the query clause. - * @returns {lunr.Query} - * @see lunr.Query#clause - * @see lunr.Query~Clause - * @example - * query.term("foo") - * @example - * query.term("foo", { - * fields: ["title"], - * boost: 10, - * wildcard: lunr.Query.wildcard.TRAILING - * }) - * @example - * query.term(lunr.tokenizer("foo bar")) - */ -lunr.Query.prototype.term = function (term, options) { - if (Array.isArray(term)) { - term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) - return this - } - - var clause = options || {} - clause.term = term.toString() - - this.clause(clause) - - return this -} -lunr.QueryParseError = function (message, start, end) { - this.name = "QueryParseError" - this.message = message - this.start = start - this.end = end -} - -lunr.QueryParseError.prototype = new Error -lunr.QueryLexer = function (str) { - this.lexemes = [] - this.str = str - this.length = str.length - this.pos = 0 - this.start = 0 - this.escapeCharPositions = [] -} - -lunr.QueryLexer.prototype.run = function () { - var state = lunr.QueryLexer.lexText - - while (state) { - state = state(this) - } -} - -lunr.QueryLexer.prototype.sliceString = function () { - var subSlices = [], - sliceStart = this.start, - sliceEnd = this.pos - - for (var i = 0; i < this.escapeCharPositions.length; i++) { - sliceEnd = this.escapeCharPositions[i] - subSlices.push(this.str.slice(sliceStart, sliceEnd)) - sliceStart = sliceEnd + 1 - } - - subSlices.push(this.str.slice(sliceStart, this.pos)) - this.escapeCharPositions.length = 0 - - return subSlices.join('') -} - -lunr.QueryLexer.prototype.emit = function (type) { - this.lexemes.push({ - type: type, - str: this.sliceString(), - start: this.start, - end: this.pos - }) - - this.start = this.pos -} - -lunr.QueryLexer.prototype.escapeCharacter = function () { - this.escapeCharPositions.push(this.pos - 1) - this.pos += 1 -} - -lunr.QueryLexer.prototype.next = function () { - if (this.pos >= this.length) { - return lunr.QueryLexer.EOS - } - - var char = this.str.charAt(this.pos) - this.pos += 1 - return char -} - -lunr.QueryLexer.prototype.width = function () { - return this.pos - this.start -} - -lunr.QueryLexer.prototype.ignore = function () { - if (this.start == this.pos) { - this.pos += 1 - } - - this.start = this.pos -} - -lunr.QueryLexer.prototype.backup = function () { - this.pos -= 1 -} - -lunr.QueryLexer.prototype.acceptDigitRun = function () { - var char, charCode - - do { - char = this.next() - charCode = char.charCodeAt(0) - } while (charCode > 47 && charCode < 58) - - if (char != lunr.QueryLexer.EOS) { - this.backup() - } -} - -lunr.QueryLexer.prototype.more = function () { - return this.pos < this.length -} - -lunr.QueryLexer.EOS = 'EOS' -lunr.QueryLexer.FIELD = 'FIELD' -lunr.QueryLexer.TERM = 'TERM' -lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' -lunr.QueryLexer.BOOST = 'BOOST' -lunr.QueryLexer.PRESENCE = 'PRESENCE' - -lunr.QueryLexer.lexField = function (lexer) { - lexer.backup() - lexer.emit(lunr.QueryLexer.FIELD) - lexer.ignore() - return lunr.QueryLexer.lexText -} - -lunr.QueryLexer.lexTerm = function (lexer) { - if (lexer.width() > 1) { - lexer.backup() - lexer.emit(lunr.QueryLexer.TERM) - } - - lexer.ignore() - - if (lexer.more()) { - return lunr.QueryLexer.lexText - } -} - -lunr.QueryLexer.lexEditDistance = function (lexer) { - lexer.ignore() - lexer.acceptDigitRun() - lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) - return lunr.QueryLexer.lexText -} - -lunr.QueryLexer.lexBoost = function (lexer) { - lexer.ignore() - lexer.acceptDigitRun() - lexer.emit(lunr.QueryLexer.BOOST) - return lunr.QueryLexer.lexText -} - -lunr.QueryLexer.lexEOS = function (lexer) { - if (lexer.width() > 0) { - lexer.emit(lunr.QueryLexer.TERM) - } -} - -// This matches the separator used when tokenising fields -// within a document. These should match otherwise it is -// not possible to search for some tokens within a document. -// -// It is possible for the user to change the separator on the -// tokenizer so it _might_ clash with any other of the special -// characters already used within the search string, e.g. :. -// -// This means that it is possible to change the separator in -// such a way that makes some words unsearchable using a search -// string. -lunr.QueryLexer.termSeparator = lunr.tokenizer.separator - -lunr.QueryLexer.lexText = function (lexer) { - while (true) { - var char = lexer.next() - - if (char == lunr.QueryLexer.EOS) { - return lunr.QueryLexer.lexEOS - } - - // Escape character is '\' - if (char.charCodeAt(0) == 92) { - lexer.escapeCharacter() - continue - } - - if (char == ":") { - return lunr.QueryLexer.lexField - } - - if (char == "~") { - lexer.backup() - if (lexer.width() > 0) { - lexer.emit(lunr.QueryLexer.TERM) - } - return lunr.QueryLexer.lexEditDistance - } - - if (char == "^") { - lexer.backup() - if (lexer.width() > 0) { - lexer.emit(lunr.QueryLexer.TERM) - } - return lunr.QueryLexer.lexBoost - } - - // "+" indicates term presence is required - // checking for length to ensure that only - // leading "+" are considered - if (char == "+" && lexer.width() === 1) { - lexer.emit(lunr.QueryLexer.PRESENCE) - return lunr.QueryLexer.lexText - } - - // "-" indicates term presence is prohibited - // checking for length to ensure that only - // leading "-" are considered - if (char == "-" && lexer.width() === 1) { - lexer.emit(lunr.QueryLexer.PRESENCE) - return lunr.QueryLexer.lexText - } - - if (char.match(lunr.QueryLexer.termSeparator)) { - return lunr.QueryLexer.lexTerm - } - } -} - -lunr.QueryParser = function (str, query) { - this.lexer = new lunr.QueryLexer (str) - this.query = query - this.currentClause = {} - this.lexemeIdx = 0 -} - -lunr.QueryParser.prototype.parse = function () { - this.lexer.run() - this.lexemes = this.lexer.lexemes - - var state = lunr.QueryParser.parseClause - - while (state) { - state = state(this) - } - - return this.query -} - -lunr.QueryParser.prototype.peekLexeme = function () { - return this.lexemes[this.lexemeIdx] -} - -lunr.QueryParser.prototype.consumeLexeme = function () { - var lexeme = this.peekLexeme() - this.lexemeIdx += 1 - return lexeme -} - -lunr.QueryParser.prototype.nextClause = function () { - var completedClause = this.currentClause - this.query.clause(completedClause) - this.currentClause = {} -} - -lunr.QueryParser.parseClause = function (parser) { - var lexeme = parser.peekLexeme() - - if (lexeme == undefined) { - return - } - - switch (lexeme.type) { - case lunr.QueryLexer.PRESENCE: - return lunr.QueryParser.parsePresence - case lunr.QueryLexer.FIELD: - return lunr.QueryParser.parseField - case lunr.QueryLexer.TERM: - return lunr.QueryParser.parseTerm - default: - var errorMessage = "expected either a field or a term, found " + lexeme.type - - if (lexeme.str.length >= 1) { - errorMessage += " with value '" + lexeme.str + "'" - } - - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } -} - -lunr.QueryParser.parsePresence = function (parser) { - var lexeme = parser.consumeLexeme() - - if (lexeme == undefined) { - return - } - - switch (lexeme.str) { - case "-": - parser.currentClause.presence = lunr.Query.presence.PROHIBITED - break - case "+": - parser.currentClause.presence = lunr.Query.presence.REQUIRED - break - default: - var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - var nextLexeme = parser.peekLexeme() - - if (nextLexeme == undefined) { - var errorMessage = "expecting term or field, found nothing" - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - switch (nextLexeme.type) { - case lunr.QueryLexer.FIELD: - return lunr.QueryParser.parseField - case lunr.QueryLexer.TERM: - return lunr.QueryParser.parseTerm - default: - var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" - throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) - } -} - -lunr.QueryParser.parseField = function (parser) { - var lexeme = parser.consumeLexeme() - - if (lexeme == undefined) { - return - } - - if (parser.query.allFields.indexOf(lexeme.str) == -1) { - var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), - errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields - - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - parser.currentClause.fields = [lexeme.str] - - var nextLexeme = parser.peekLexeme() - - if (nextLexeme == undefined) { - var errorMessage = "expecting term, found nothing" - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - switch (nextLexeme.type) { - case lunr.QueryLexer.TERM: - return lunr.QueryParser.parseTerm - default: - var errorMessage = "expecting term, found '" + nextLexeme.type + "'" - throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) - } -} - -lunr.QueryParser.parseTerm = function (parser) { - var lexeme = parser.consumeLexeme() - - if (lexeme == undefined) { - return - } - - parser.currentClause.term = lexeme.str.toLowerCase() - - if (lexeme.str.indexOf("*") != -1) { - parser.currentClause.usePipeline = false - } - - var nextLexeme = parser.peekLexeme() - - if (nextLexeme == undefined) { - parser.nextClause() - return - } - - switch (nextLexeme.type) { - case lunr.QueryLexer.TERM: - parser.nextClause() - return lunr.QueryParser.parseTerm - case lunr.QueryLexer.FIELD: - parser.nextClause() - return lunr.QueryParser.parseField - case lunr.QueryLexer.EDIT_DISTANCE: - return lunr.QueryParser.parseEditDistance - case lunr.QueryLexer.BOOST: - return lunr.QueryParser.parseBoost - case lunr.QueryLexer.PRESENCE: - parser.nextClause() - return lunr.QueryParser.parsePresence - default: - var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" - throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) - } -} - -lunr.QueryParser.parseEditDistance = function (parser) { - var lexeme = parser.consumeLexeme() - - if (lexeme == undefined) { - return - } - - var editDistance = parseInt(lexeme.str, 10) - - if (isNaN(editDistance)) { - var errorMessage = "edit distance must be numeric" - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - parser.currentClause.editDistance = editDistance - - var nextLexeme = parser.peekLexeme() - - if (nextLexeme == undefined) { - parser.nextClause() - return - } - - switch (nextLexeme.type) { - case lunr.QueryLexer.TERM: - parser.nextClause() - return lunr.QueryParser.parseTerm - case lunr.QueryLexer.FIELD: - parser.nextClause() - return lunr.QueryParser.parseField - case lunr.QueryLexer.EDIT_DISTANCE: - return lunr.QueryParser.parseEditDistance - case lunr.QueryLexer.BOOST: - return lunr.QueryParser.parseBoost - case lunr.QueryLexer.PRESENCE: - parser.nextClause() - return lunr.QueryParser.parsePresence - default: - var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" - throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) - } -} - -lunr.QueryParser.parseBoost = function (parser) { - var lexeme = parser.consumeLexeme() - - if (lexeme == undefined) { - return - } - - var boost = parseInt(lexeme.str, 10) - - if (isNaN(boost)) { - var errorMessage = "boost must be numeric" - throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) - } - - parser.currentClause.boost = boost - - var nextLexeme = parser.peekLexeme() - - if (nextLexeme == undefined) { - parser.nextClause() - return - } - - switch (nextLexeme.type) { - case lunr.QueryLexer.TERM: - parser.nextClause() - return lunr.QueryParser.parseTerm - case lunr.QueryLexer.FIELD: - parser.nextClause() - return lunr.QueryParser.parseField - case lunr.QueryLexer.EDIT_DISTANCE: - return lunr.QueryParser.parseEditDistance - case lunr.QueryLexer.BOOST: - return lunr.QueryParser.parseBoost - case lunr.QueryLexer.PRESENCE: - parser.nextClause() - return lunr.QueryParser.parsePresence - default: - var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" - throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) - } -} - - /** - * export the module via AMD, CommonJS or as a browser global - * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js - */ - ;(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(factory) - } else if (typeof exports === 'object') { - /** - * Node. Does not work with strict CommonJS, but - * only CommonJS-like enviroments that support module.exports, - * like Node. - */ - module.exports = factory() - } else { - // Browser globals (root is window) - root.lunr = factory() - } - }(this, function () { - /** - * Just return a value to define the module export. - * This example returns an object, but the module - * can return a function as the exported value. - */ - return lunr - })) -})(); diff --git a/doc/supplemental_ui/js/vendor/search.js b/doc/supplemental_ui/js/vendor/search.js deleted file mode 100644 index 98df4931ded2..000000000000 --- a/doc/supplemental_ui/js/vendor/search.js +++ /dev/null @@ -1,212 +0,0 @@ -/* eslint-env browser */ -window.antoraLunr = (function (lunr) { - var searchInput = document.getElementById('search-input') - var searchResult = document.createElement('div') - searchResult.classList.add('search-result-dropdown-menu') - searchInput.parentNode.appendChild(searchResult) - - function highlightText (doc, position) { - var hits = [] - var start = position[0] - var length = position[1] - - var text = doc.text - var highlightSpan = document.createElement('span') - highlightSpan.classList.add('search-result-highlight') - highlightSpan.innerText = text.substr(start, length) - - var end = start + length - var textEnd = text.length - 1 - var contextOffset = 15 - var contextAfter = end + contextOffset > textEnd ? textEnd : end + contextOffset - var contextBefore = start - contextOffset < 0 ? 0 : start - contextOffset - if (start === 0 && end === textEnd) { - hits.push(highlightSpan) - } else if (start === 0) { - hits.push(highlightSpan) - hits.push(document.createTextNode(text.substr(end, contextAfter))) - } else if (end === textEnd) { - hits.push(document.createTextNode(text.substr(0, start))) - hits.push(highlightSpan) - } else { - hits.push(document.createTextNode('...' + text.substr(contextBefore, start - contextBefore))) - hits.push(highlightSpan) - hits.push(document.createTextNode(text.substr(end, contextAfter - end) + '...')) - } - return hits - } - - function highlightTitle (hash, doc, position) { - var hits = [] - var start = position[0] - var length = position[1] - - var highlightSpan = document.createElement('span') - highlightSpan.classList.add('search-result-highlight') - var title - if (hash) { - title = doc.titles.filter(function (item) { - return item.id === hash - })[0].text - } else { - title = doc.title - } - highlightSpan.innerText = title.substr(start, length) - - var end = start + length - var titleEnd = title.length - 1 - if (start === 0 && end === titleEnd) { - hits.push(highlightSpan) - } else if (start === 0) { - hits.push(highlightSpan) - hits.push(document.createTextNode(title.substr(length, titleEnd))) - } else if (end === titleEnd) { - hits.push(document.createTextNode(title.substr(0, start))) - hits.push(highlightSpan) - } else { - hits.push(document.createTextNode(title.substr(0, start))) - hits.push(highlightSpan) - hits.push(document.createTextNode(title.substr(end, titleEnd))) - } - return hits - } - - function highlightHit (metadata, hash, doc) { - var hits = [] - for (var token in metadata) { - var fields = metadata[token] - for (var field in fields) { - var positions = fields[field] - if (positions.position) { - var position = positions.position[0] // only higlight the first match - if (field === 'title') { - hits = highlightTitle(hash, doc, position) - } else if (field === 'text') { - hits = highlightText(doc, position) - } - } - } - } - return hits - } - - function createSearchResult (result, store, searchResultDataset) { - result.forEach(function (item) { - var url = item.ref - var hash - if (url.includes('#')) { - hash = url.substring(url.indexOf('#') + 1) - url = url.replace('#' + hash, '') - } - var doc = store[url] - var metadata = item.matchData.metadata - var hits = highlightHit(metadata, hash, doc) - searchResultDataset.appendChild(createSearchResultItem(doc, item, hits)) - }) - } - - function createSearchResultItem (doc, item, hits) { - var documentTitle = document.createElement('div') - documentTitle.classList.add('search-result-document-title') - documentTitle.innerText = doc.title - var documentHit = document.createElement('div') - documentHit.classList.add('search-result-document-hit') - var documentHitLink = document.createElement('a') - var rootPath = window.antora.basePath - documentHitLink.href = rootPath + item.ref - documentHit.appendChild(documentHitLink) - hits.forEach(function (hit) { - documentHitLink.appendChild(hit) - }) - var searchResultItem = document.createElement('div') - searchResultItem.classList.add('search-result-item') - searchResultItem.appendChild(documentTitle) - searchResultItem.appendChild(documentHit) - searchResultItem.addEventListener('mousedown', function (e) { - e.preventDefault() - }) - return searchResultItem - } - - function createNoResult (text) { - var searchResultItem = document.createElement('div') - searchResultItem.classList.add('search-result-item') - var documentHit = document.createElement('div') - documentHit.classList.add('search-result-document-hit') - var message = document.createElement('strong') - message.innerText = 'No results found for query "' + text + '"' - documentHit.appendChild(message) - searchResultItem.appendChild(documentHit) - return searchResultItem - } - - function search (index, text) { - // execute an exact match search - var result = index.search(text) - if (result.length > 0) { - return result - } - // no result, use a begins with search - result = index.search(text + '*') - if (result.length > 0) { - return result - } - // no result, use a contains search - result = index.search('*' + text + '*') - return result - } - - function searchIndex (index, store, text) { - // reset search result - while (searchResult.firstChild) { - searchResult.removeChild(searchResult.firstChild) - } - if (text.trim() === '') { - return - } - var result = search(index, text) - var searchResultDataset = document.createElement('div') - searchResultDataset.classList.add('search-result-dataset') - searchResult.appendChild(searchResultDataset) - if (result.length > 0) { - createSearchResult(result, store, searchResultDataset) - } else { - searchResultDataset.appendChild(createNoResult(text)) - } - } - - function debounce (func, wait, immediate) { - var timeout - return function () { - var context = this - var args = arguments - var later = function () { - timeout = null - if (!immediate) func.apply(context, args) - } - var callNow = immediate && !timeout - clearTimeout(timeout) - timeout = setTimeout(later, wait) - if (callNow) func.apply(context, args) - } - } - - function init (data) { - var index = Object.assign({ index: lunr.Index.load(data.index), store: data.store }) - var search = debounce(function () { - searchIndex(index.index, index.store, searchInput.value) - }, 100) - searchInput.addEventListener('keydown', search) - - // this is prevented in case of mousedown attached to SearchResultItem - searchInput.addEventListener('blur', function (e) { - while (searchResult.firstChild) { - searchResult.removeChild(searchResult.firstChild) - } - }) - } - - return { - init: init, - } -})(window.lunr) diff --git a/doc/supplemental_ui/partials/footer-scripts.hbs b/doc/supplemental_ui/partials/footer-scripts.hbs deleted file mode 100644 index 42689e7ec63c..000000000000 --- a/doc/supplemental_ui/partials/footer-scripts.hbs +++ /dev/null @@ -1,16 +0,0 @@ - - -{{#if (eq env.DOCSEARCH_ENGINE 'lunr')}} - - - -{{/if}} - - - - - diff --git a/doc/supplemental_ui/partials/head-meta.hbs b/doc/supplemental_ui/partials/head-meta.hbs deleted file mode 100644 index 510fc52045a0..000000000000 --- a/doc/supplemental_ui/partials/head-meta.hbs +++ /dev/null @@ -1,2 +0,0 @@ - {{!-- Add additional meta tags here --}} - diff --git a/doc/supplemental_ui/partials/header-content.hbs b/doc/supplemental_ui/partials/header-content.hbs deleted file mode 100644 index beb509c929a4..000000000000 --- a/doc/supplemental_ui/partials/header-content.hbs +++ /dev/null @@ -1,57 +0,0 @@ -
    - - -
    diff --git a/doc/ui-bundle.zip b/doc/ui-bundle.zip deleted file mode 100644 index 42c7088d76be5f92c48d1964558bfbca3c5dd38e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424371 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

    -OKre^}U8~#eQWl%I7I= zdpJZg!L75rST3oAoIx3vM;e130eiC(Id^{It=w=e%TrqlBPO|*a>I0;Q;cX$)TZ0E zZQJH)+qP}nwr$(CPTRI^yL-;}&)m!;vy+`lt?Y}PRAp6a;dyr|$)jYdJcB6uG*=Ir zQ8@9y^>ul%Q6ZA(1j^k@PX}ql+Rv}7H3$*@d{1T5ZGBhkXnJeNCAzPH_9>b&B4M&U z-oyiwhBsjhI+*Q|DF+W=HBmH6^9+Z@N{)jZ?$fUOd6kbjUF(?S1SGyE3>{^xl?Uw* zKvBHguYI%-YB#d?ox?VU+fqnHNbA&aizuBv8h!nQ1&CTM$iSo}f-|WJ4n9BDAQS~> zTFAsa)aKe4-`p8HV<|6^q_*lJ=uA^A_OVNYDN3YBgL*V)`4AOn!bb;4kmD^F_Cv}# z%g8R1yb;btfV8K|k=~ueL$7ej7Lwo%qP_=%OzDE0q`6>G;aaczQ zP)?}tXZ{Pbi%%@07paz-mbd}WkG?SrighoIhciqs3TcwhGt$_sJZ-NJcN_-y29^}=wsQ;C$% z+BN)YhB$U-rQZ#WIS4{ zF#9}Yzr0GM~B{h+Za$$e5;O-ftG z;$aWMK_*p0Kn7m$(FGg!dYKk)j8cXJ4t;^eLg)*DNgsmHSa>A21L>#$it4Wq6+BBF zNug*t#31nprZ>Gy*R!T!T82Vm4iYNX*?1DtIa*cQZ zq~XU!uLQajpLF6_1vKaGrJjIux3)-tyOxifvx*NkIAxV@GqSj|Hfo0O1BqKIN!yd@ zqYwOjK97hjYolB!oMI!uuoK<9Atm2M9)3Pk@FIff_S!t)<}o0lccT7mu0|2VIC4=^ z1brwlHbo=;rK#&<$PPa+gvu?!gXUfK6B|~nE3@58U)=d^7#+-19CCkQ2hw`sq(d0x zn{$V1BbHfRU}Gs+V@OEoALHSbV(Y-7gfct^n(qi<EA*$WB6$;7447-emZtE?5ZkbC-gdSG3IrEY)NDA;qC1&b) z?^o+jmnO>}rK+0J(~4(`yZ`meUPaK3{OfkOSKbXF(yCk9nupnM!Gkqqb+&V@~Bn82^xwAvL(bb0K&9>+o~|QgVgud)CsFV^m0(>U#|#D!qJennk2(2Aczh_J3?Lz&R%AASSmg%!!H`58I+Ly3I(^C1{DwR#mS z7R`U{wh)$~J30?vc^EicUKmhzkPlhxz1M5d)06x+!ZoR6fXAm3e{_6fs1uy*t!%<* zE^7zfthl&+OB#>WI^23OHm;|OUhxG)%8okJ%MLPg1*f(v6~~7=@MBfuLTy?~G}YF# z`{w#G^vRE}h0bGZZ^%+9e0&^ow7nnK4TjQ$UTW}Rqp=;dlbW~?|8U)>) z;tKMR?ed0Si5%qh9f{XY#S_<{$S#}m*@8Od00cm1Kos|1N}GrWjEa9T3ma$47w2w? z4g+j{t0-B?lSdm++Hpt^#i)vJx%<*P*%a}t_epDxpS%NYuKZt)24yKAqmVhjA~;<` zl*#@#6mkrxVp8c(+gZ^gKKt^<6b?M8R*x8;_*1Gg{=Wx~v?EAY2Ld@C&d! zG)X0x;)y$Ijqy)}T zmgi)$JjC(*RDMXjLE!MPyIZ8PuT?4hNPGOd>(aPn58(i9Pjdc-_Kw=*DDFg(7S5Hd z(k=Ik*qyuei~{iOhmaP{6nxAsuAAZIYT<{qjI)i-@uOves*OevoZVzxL~K!XWE--IA^-|Qu6w+RykAgFPe zYIiAcyrN_WqOg-!k`>X>{ir6$$;sA@0ou;SEJcHcJ;xd@Q*@wxcLo$z z$XP7LMnlvp)6reczPjHR$g|=3uHcafFG?TUNzSAXO-lF9`WlF=X6j!~Jj+#KS>3Ap*G!d@TCWD8O(&ZyTeila7WLx5s!+ zaJxMDf}DK_cvloKUfb->8WsFYz-*>(U4(4y9@wQ$r6~C*c`u&JL|YhB`kpSQ`-cDw=^2ALk?UePB_81Gn4ce#(IH(Cd10w?Q%GO3ES{9nP>NfJE_-qCBU!L8fhjm zt@Gc!T1Q58OPV&ddBRVr={tTgbkp1EzOl2ZAwmDD&SUaen$ykf;@vY)XWGI_y1Opz zJ!GDtN&VhibID#S;m<(|MVyvk03zrc2{Eu+Q|8r2OMlKoNXf87+hN|z1sjszr3Y@cgBvBwMLH844!K3@-Xv(O0cR0lxbBMnxpy4LD#6# zHl%LTYQ3tJ;a~mzje3iPB4!zI6c!eJ+~fiq94Q?VGF~!U+)ja@L64F`Uc(PFpr>+V zQ#*0fp)zro&md3xptk&1BOQmLp-p(%WUu;N{9c2m?MriRsy!9WGC#V@H{VKkCx8BZH<28=zL>yQvpxT#dh z7q@s1gZwJS=%UeIL7-Ayp=V9sj0BDl6s#emv6y6d-qSauoFdgQ)zm50&NLodY-BH= zYVCbV-E?)ODXna83wg6PL&!+=*J^Meqs&;90}x z{E*T~vZ_YJ%Ih}LVGTsg(I;r4f&BKz`*Qp4D}G^Na*xbayMqx^;~p{m37QA$VDXA? zV|?Ljm$ik|+>kY7FJfo6YuD8soGwYxqwcHOfJDW3y*I5m<9US^X#;K6K~H#p54YrC zczZ=h2DR^OWWw<;@Ke*YGG!oN8>*Ls++uM<7XQP#c5V2)4g-&AUyJrp6PT*z+8w%j{C8NgIK6wasgWYDXLwTn4sTDDih? zCVQqMt7f|!7qtbK_0yen2WwGX_=xs2(z!cNq-HbpB)ZCyzO9$RYIpeF2quvRqBB-{ zgEQK4wO>n+7_cMK50ddu!kbqFB98 z8j5fi38(8I7qC>9AKXP{D@Ecn7-%{rS@2hgqKyv$AGlf}GY zh?%F0R1LRUvv^-18(D=%`>5KJI3w1FcXG3sc)SafYrDT9VkOrXCi-hD*jGZsbNJZ_ zdHR~U))MJaI3q%i2YVnq7%BM&v|Y3s61N$izMxKoBe+-b_1uRJj#!u~>aHcND5 zUjYGPx}qg|K~B#$*x11#Z#TP#vERtL(kskG@*C&Zu&*neo;i#4s$tKdt> z;rIWJeZ1=zus&-E+8w)!P5t~x$tuh{9Ol|#UvS+2(k*WE;eBizJ#1zZ714E_W3jYF z=dvGw`Y@z5lw03BWsD~r1Tqpr96w}dtRtL!CA zlw8Qc16R2k-`^-cXMkf&9~;%aP&S5|7(HckV%zTD-w(7F=p{Qjr*2_##=p6{EWk9r z6ArlWj*Q~Em5$hzHRM)VD7R@1__p zev`C9bQ~Ohhx*|rNN7EOdzeu=YDuR6q)kIZ_OBK^1C0vsv7<~5ja8UYPutSr0Q!<&Mx{yO}?ZR9H1F>AFoQ_Vrn#CZRR#@LCbnb9*d3Mb- zfb<9KTRB1c;+(`18tj*siJ3)`CXKi^VtrTr{K(23xw`=v;t0rx`4&D%DbbM&h%SU9 zb~2dLXYW?6V@&jDjbpgRmp5lSVA!Gv@#W6fD?UgLQ^@(KNnb zj6#%$x@S}A{RjaS=$!Wc75=dVAHmi)%6J09W3}`9QR=*Vu?{%B$pgZY^*IN7@iHf; zAMz(bB$5pah$12^JqTFisJovD44=a=EXO_gt8>@ksWH!4W`zWDe8+g{JVrDFPn25T zcXI{47eu6Kk=SEza;X`nEG?t_`FAWhg%=c$R;#tX!MUR+Shxx3DfhY>ZFr*!v3^EnD zgsR`~NQvI-AviT)Ip# zp#0T435UD;3LidmPqT~f`eb=uEARNNs$tyPDCzm2cIU>L{L!`fM|p=X9DbwQht?1y zGCj0g-C!541A^Lh-gkx_-?NG?SRjrNuu)nVni3q;6$m&{25gvCo@Tvwbx0Y_^a$sfp<&c1plDMeWaxSr6pHD#1UYCnOeER~8cJ zL3P}ldOF)S`JOgiU1*zs_j5aKunVnjTRhB2Uual<*4}8n=V)+n@>}>0ZAJCP$&OoW z4rSh7vRG|w!p}S3^?(c{f73F%ea6;u^(r}FJsoCcHVQ#VXLbb*xBG`o?XuY17b0#hM6u^W*S+(Sm$Rb{Q^ieX%8(nGKiea$i$* znzP9)AkLn^bWCpB>I=M_o6!<~_eUb@?VB<|JOMdyvHTMjo(~{BRfVQWfG)&;<>Bt_ z2}A9tIi81aNjA{M-jI1@*Hzb`0lf9!mR}ux!;<;V-o86RolD`$jPhviG6!auyQpWsCuRRwc~4pIp~)(#pQ)zO~)gTTw1)|Fd^ z5Bu@BQyKvyA4|E&SJ8IuECF4}b`Kt)IsxFRK`-Q7S-#7b!-m z!;&tvaB31TGyKWAkR2$TSyKta!1b zM0i4O>|UKl~Z*Wau53;nU78+vi>R>JkLv2G@&^C5>1Cz z`-c>0lP@+&0hz#6!9Lxv3oLkbxfm<)H#wn8h$?>a?x;J+T`VXtxQ_>MKnhH{4Pb>J*&?IbGB`J$r=P^}@XzRjBvWuP^)?FGa<% zju0Whlfkd`hs~Gj&`X;-{7i1A*25T0#iyJ=k4V^CW2!<=K{6c4m^u0?I8w6z+B!77yn?iktbQ)2m=gLh?|v+vo_`fzTMGi#z_(#y zq1`rZtwdv=T?PBN?>5FX{O%fR3Sw5GG(eW+4Ee;A;^koUzRvcEg+*Zu*F+bu)yA;& znC8XqY6odS;w)@c?c6Q)pxe1MDdDMpqtm=l+ey*v6_B%rxNjU1d%pk4Zdhr79BX+m{_n8iq32G_=i3$Dk45`5D~Q*pjN9iB;XYmsWkBi1N~lo&v2sY4W%{f5UZ2z4NI>sg5cN-B0UbKFtcCg7T54@|2G<#?!n?2Q z_H{9^&R<7`tV&pBG!S0%+r4D;E@p0<2DfK3!ag6I7$#}aR4*zM4 z9cbu}hB7KDnO$YHGL{Jk!k#@Y1HSH$UO$CnJG9`A_sl|FNSnYTNbbL(_I z8V+t)*#x`%(e!L&`&ekZUa;9rJDj+lRZ?wM8w`kloBeP^)8r)xET6?@*ONfR>k)Teu_gT$=fcUg}Ktk5@y8|yd_d-mGY_8IpD^{)N${I9MVQQ0SAbl3oB|mTz z`#>Ge4Rv5H_adIy;$3bnvO+_~I6?lIPIH4;xB#J8h#?37lt`>3u3~oZY<0HMP~*aS zkCEM3yBNo*I9)^?ZCdL782ZsP9Pu`rAIdY|AhgBxqsN7@F3RsGXH0XH@Od?;L10X- zHZ2`M!=ArPNE-))mK*;JC6B)cU^LyZ4SD2(YB&-L|37JPC~S~LGPz#LmhHN1Ht0Gh zu*N<=Pgv*1`_JAHFylP4`93DHu1b9kt8ARtn2jmDe-}0vdm`C*k$}DZi04?(=S7%Y znH2NqX%1bvxN8d7qpHy^A&IB~SdLVqH}3^4RU0}9Pp0pWF9UM7L~V4=O| zD)4fAoAw~Bj*tKGe2V)OU!R{LYlrHOsbxe52iJ^ik`$dJZf!oCn56z-Osr9i$+bkb zR9{bReR$L>h@IZLjt2O9D-!z<2(rCecYo9)Zak1okaWzl0MWPPwnjWj`T+3l9#=15 zM&_3Xwl)sWBG>95%kkz;p8M>v9rA4?0%E;0|5erl!J1^nH$Uu~k0BZx8jmrGg>7?w zTvjBMA#;cGeg2X9G;3jWZ=n}U-7m4@OU$S)U<{eBNYs?TeB^wa|v79N*# zUMMoUd6?*jyr7n@ZULKltG3qJvR0D{`eO%gB~%enzBLJmordLxY$R3@G?O_yy#HgP zYu4h2Gy_rZIXIqnx)4%>6L1F{{d!Ge%@zEHl-QTW4gkXx>?BN*CLg7^{-*J8=Z97$ z7CWLi>>_a}mz8iuw9m4aqD#HM_QLVDikC8@nWS2v*wDbpuwX7Gs4Z9VE=@!uk?+yP zjZaDcxe6wF1251C;nQuM!1=blsQ$GMW2G4nT0r_Kx2&nrMxX6T2O2LU+4>tjMgtFB?YNHi zieC#H(%r__JIKONuU;JGn^1i77uEXdDL%p%sgRb1v2KwAg=f=DLfWyiWzsx~j6^UV z$?f>->zE|u;9Irr_&{5&1mK|_^lTn&kSIrKD?EbL-d6^5*NB*CWIN)$bM9W}dH6i1 z50)%S=EoUaM>g?$h4NsyK{tQ+60s z+QFZk!2QsR4@A_W5|zpSJ$+95gJ4aaVEVycMUUD7w59e-pah% z#)!g-4}-#%gN<|3*O9+FrAib0TkItggUtxXctDUWfP`-vq;$8l=lBW54eOD?TE*Id zA4`raZd-PR7tP@n`?Nx+q9^0f=B39ah4k9EX(0r^rLj1=d`Hrup|?IVN1&CaFMfI( zv@HQL&fX`Xj&3nJTP^0Efc^Kax*r|1{!^ssg&m;WtHt;}TwRB^k7Yiy%CBDV5^xMh z(ocD(eH=dq$Lsafx@b+A43B-hi=1JMRYV^iA#E|{mOtUzbTbRosIzScXz)70_9QwL z>kgPj9#|-(WvBc9{$Qob&6QMm$=~lDe0^W}A--ssBTs_E>bm{zsT;wLDp6Yqjn;9| zyPBmcy~%N>ywOZUL8&P|@$V{Qw^|vdK@7VZE$UHOB^!X2L0~EjQ+NcGY7!P?36jfq z@`@sY(;>2s0KDVfpjceP4R&y90s5qz`KMdu6u+kl}>RfA^ zE!=I8V;lqU!4H3+-d>*}#t7%_{;zh*Zo1H{x|2XS^=VGCNRKScVMKbjBaN1bLmaiu z3j``DyL6bkjzpEZ4F2VacXIcW9peRgC1Rl7Ut`XoilSYV&NpLTCrkNxu!cDO{Va?c zIi@ocWL;tthghj!3Vl(L#r#rFRm%s5>ljP0^5J>ULoS@!hiC3$(C_a@%_kp}-Kgn1 zveL^LQ}20bb(5)OUs~)e2k8BQH`8P!;AySLfNI@cl@{*`!|!M7-j~JmSFWk}INbWL zr?cES-C;Cy#8I|4ES;b>3%`U6Gnj@gYgo#pJrtD(%7u!UcPFJB=a6Re?>LLqP6v@B z5?!6sVp|qw(PWe(g77oh6Q{o|@5Gv+VfM0voS8%b)PIF>hRQam0Nfro_5~*|>FV?0 zK7R0&&;I&BflJnE<+e?@i57tVkVa-g2>Dj!>W0}r1{kiaIH{*B8S+vHq%siT%jwpJn^uc3u&l*9v#75dJ$#&2K&fnt zi($LyRD7>b+&T_|sXvL!R}K)gSLVG*pzHRj*l$(@%^2C1UlNNRSLQBbzS{i&+dP4q z2iNJn+kuHEk1*`Ga*h^<<+3En)|1!=mB$nXSupG((TcTgq!adKKx{Y3h#8}+*RPc? z;P{&zUV$b9WA?~^+*O=E%vJ8abwu49EPZxFhq`|?f-HIxGbLrWv|#_Mxs{u8Y;h8) zx+`sR=~~4iEvC7Z{8S!sN@=#YJq}x2s9v;w85*jwk3$_!<7C9nPFf~281PzblbJKZ z%6%xMz`vF;0d050Q{0vlEV=3TEiV*YYA!)uA#5hh==}xjhrAekD||dP(U2@_FvE@Y z1HvSo!8wqzLmL(09v%cvWUK#dQyPESa#LhAX5tMQ8NQP-5b>BQ_%Id2pNPH82MEMYeyr#VL z0pxw{_mOH_Kk1fdy8{%qe-D_#P(J?lb{I@?sRYSwLz^gWRAuhjKp$v@b)BjkQOd~>Tmi6r~6E@+#p>tQ{u&tTIEZw-*2Bc#_+rC5K~6@?)~K1zatUff;G z2;vZRSbhp=RP&ws83xwv;7fFIc>ai&422MhlNLtk2=PP~7OzBAJ!fM(uS2&QF)WPj zkT*|2U=#nA9aXl4k2nCLp3syPc7S#KHd?=nnwC=Im(2 zwe$MMyfx+CcHisfdzP&ekHmZL+Hi4z;OI;O<3>;_rG@8!xS{x;a6uHGwd(aK$kKmK1j7)`~%h_L9qY2r0E z0d#rxS=-qv55${b#@W-}R8W0xmC{S3497iScAmI~==Vt}I>o%cul<{EEpzdcIXRNB zB!5Di<0A5LuhZo1GRZov>7`G$8>}|a+-ieaBO>^$;G7dJEr+yxx)IZHy=>XqD%Pf;E;JkDNiufm=Up3&%t=h+p&vY>lE1A4-cj7A`mFr&`o- z{qK`t;o*XLkdJ3FvBhXBKAj!tVX8Za)sKhqHRSkAO(at-F2QPX-dB{N1czt!en3!n zgxCp8pdNq|gWY{>em&azvAWC+KcPjYlQgapK^|9%^N2UusPNf@-H*&Hp9=D;f_c5p z<~EKxY9)r(Z0TLrh@wZ{Dm>50i>ic^1cM=WU$V)42Q%=2i>q9*s}mCtkTqXn8@vpj zgv)foR8AjM|EnR6zk~y*fs@UWgkL2LvBR*oV~reKWnUmp(Bsz zyxM2c@OrnP);OK3_LhCCXh(FLkm5izdCn@FX+-r?)RAXdvu>KV`VvJK2Iv^ zCt@%}d2own8(@C1`}m%E?<7SEeJ z$YsqrSsD>$B{T9?9$n72X@A@b7Kj)<XnN ziCE5+DFV`-b5!dhin#uTwbOeQR_h(O+21dE8FZ`d(HqJ?Cp@xaPS1F3n;9D1v0S`b>X04i1J;_73y~AEcM>j; zZ5+TpI2lRB7ESb+!DtBGz2gKujsxC2%l}e>? z18hPT{i05ccf?)FfpCqjd@}0(DP)*w;YYi(!LkU|{zQ$jx{?{x*&b@H{oZ)dhAmT$ zE3nOF1s6i7b-y`+KwL%h&@N6@SWTdx0iW&aLcDRGA|;TV9Xo>e>fgVm27Nb(=`n~^ z^Mh-)kbg-ll@cdKo=%VXGrBS)=|6OggBH#&PLnDQZma_Frm3Ncm3XImMAq~4Bkk0A z5A7fEt!y=Nn?PTGcJ!lp30&&8v*yjl+l{ds?AdSX#*Vq|-3_wJ;E7!7=EL{#0rZQ2 z)as>c&qIAn{ulEV{U|$m?lnvjiMROe;SX=vF!OrzJ=PL2((h-NAu73(??P2T>%wHZ zt${uQ!T27=+w08$x0A6}=&{W>>XjwvFb4?d+9}#Pyh)dOPS2}LS!AJ?*R6=z16&DS zMgxe+`T9`mvX?coh|%R`k2SxLG6;>gdHlY6 z02@&4uKna|G<{S%V?;uMx+wegQ~JoAH0V8m$ec({I^N_MmcJxSF~Q~GWU^^o3A%L!$p z_^`Z*)N>Fk9y)-$6|yOtF!b-mr5piL%@m2O!T-?0a5|?ww!pW`l=eSan67HZOnS5U z=QF0DrhcPmP8ibh2%7o$h>){?ON50XC?#WK{b7o_wQl?dx@{8B0&;p zn&<~pXag6q?fisFeI7AO9w*;ozMA|J0D}>_<3Pr;+F!+|hNuWdJS8zIKmcobCjk)B zvE2j9C;ge_Fv_LjN^nR943B5)DNxbsTymempNw_G3bXYNo11Q>9l`s|}(tty-Ox&P5tt zJP?r#KS0`|`U5e#MtY#h3{E z;XMRxezl8wdvURiczuq}=}w=xIhHgB9@c@5KygBIS>o!tXC+cd4ydqP#kS*MzXL}U zCmuJqoDoi)n@M#x)ElEAY>69S-+%%2YDh_;O@B!W5g2@*em5fDY#irIe}jq95YqGW zLREI?aj8y%mDPBn=j!=fus%FoX=XvQVwNEpr^6|1_D|`c^rHvPDlTiTA_t|sf^&;*cCk3~McXKm9 zfckMD*Pz+$PwK9PdKg5G#E3tW2tAUdlK|<93>=W*fLyeaty=%-L}ycO{nQJ098s~P z0?2wRm1cqL?a2jN!AS&OVLx!+9%FjpIB)~s<-AUVj%=3M)b{!=7AFfc&Zom}fU1^0 zTlSSwVVEhi;7MC$oHJhdvsPXBU#lWCvxSwNHOBm@Ynujm&6;aQyREI2&N<}V>Ar<6 zrXzDnVbqu5t~KmTwh_yr7+T!ebW+azsars(`v4Pn?6Q%kD(o7$6MH>4(wNQ;`x!Pw{&yo{R!uf%8|2N zD|onTDRtT&*pu=321+NPx)G=aji>Vv8XR;KuCXVD4sGH*O;YuXoN)%yBRN;wI@DEKdEibQ5E~JK5bCSJH@#@SdlGMVuzLQSg z!;kAw^y1YA-Xf)>Ar)0W8QW9kkoC3Ji$_nND)iD-!7tO+GAnf}TdsFmpXt@#J#z<6 ze*sLcv+BEr41Ge@P5tUcDJB9r(4~NCZb+_)A0I1`j8^T!C(#(;V9UuqL|5q9-)8xA zX)dLng4WW#UV19<6fCrJO5G&%Ri_+XZRjeOhN1VM+y0`El)n3YXG+-`! z{wku*49fP|{47dho1=9zi6037AlomflSqv_oxq}f#hF0;G|L$$R~vqUIw%(#HF%Dn&u3e*y>c zfo2wvdg06-+w$J2vnO}K`WBG` zuy7(PDjCIe&lSLI*qU~=n}8rb$2fRo*9pv#?|Qg|Df;nu2gBUh++9{pW5<1{-W)bt_`tR2y@)79>uZ~2`4gYo>b z-8^|A_v10vDMVH4z~kAvBSpggl`z4r)&=nYd<*ZwK5t71~iYGG0~JPuV!H{Ye=yhI+z&CO?B zSVCsdr1=XL6(aohYhFNUjrv;#TC{9wT@P5a;TLamMd}ABYL2e{20$8F<&A`NjL8=6 zTsKx$*c39TS=KajZu}A;;2+r*b;wI+%Y}GbXZfmOL?{%*S@{FLzOrrC#KvB~+nNgY zvcu{~DmwlzVReW;FKA6{4UUFNV&$U_`>Y>gHS)Icq4}p6D}q2l3BQAI4}ePIi9=jK zo+!;0qIrU7j_QJ)#PcE>HyFyow%lm-<${GLxH{3-2(5yFG3j3M=WO)yFqEpOtakjO zk|kwX?dc-3k|yOv{5NiLVvtKlr$(f-#cMR2hI{*l;?=5(Y3$pF4!AC|PYUTZ z@l8v|rrJ05w}(q-(+rwj0RsS&^M>G0E_GW2Vb-R=4Hp zC>EC+ga0>W!XCdTB!)f5=r}^?1z-sxr|Q3P%~Tid zm-Xis6cR+>-xLf0=szm}fcu7#zOlZ(?`K|2K!D0`-+7;~s%$<4l>QMQfOiSVhWkd$ z3~)6D14_vLqAPrp&41LYRvR&)Y>}pG^H!tj*6ABLGaiz6M_Z3Nj}pa~&cu;n-aGs& z(UztxWm0$PZxKiv<_9|y2Mv|%r5R!HySO{VG->GH@tGr8ycQ?gaWVfW#gufCF~Qjo z%P{-dn-aXDgVwCXxvFFS7b!?C$}XL1kk+_9{AM-A%>Xx@F^u;8N?|s}SrwS80y@W^ zNoV=wYr$=0nI}aT0jM7^-EiIqAXzB3hQSW(BCc*g%Sv_Wt&6!nxXk=?%nGiPj>xrj zOT&+au3D@g;vA$-KuJ4h$^}K>a8*jDFh8t^T1KvN+)J*~jK*|Z$;nQV(tIk(0uHP~ zmdXNz$Slf<(4DcMtFg$zv5>&AXqx+;*H_%@r|)giXRu@)c$I6n7xA&mK+Zxqar76Z z$`sB5oYt&|Or9TKd2L>4URVKFW^vLfeNq+|Rusr-RaS@{shbdCGL+wR(!P4QDM}Mz zvZP??Kej5U+sdfOw1Ql)luNBaTm>*t#F&w5a6hn|_{RXt0GLIEt+iO4D-$OxRmD05 zimj}_M+$&yx+Os-lIEgRa_L6YiRDi6!rSvwijMI=jGTap%8C#4`=lzzJ0S5$iCIKH zj65z94<&>6KkId`267iylir{;jsK`!?i(Tl!0iwJfM#-ozPKUVni|#Gn{&>Uo z;`Yhb3n!ZkM3a>wvqzK-i{Ta;xv;v(JmdLzd}DkI2_X&{4k-+&B@&1%2#Jn09x*tQ zzej$Fid1MXIb47}Cw_=LHs`5g2A)rA8{pN8tX*eEMLBSGC~Di-lIca_kI5aW-FLky zebN4){z~lyXaB)AC=U;39Zo&KyRUYa^R^p~fsMwMaago$TI3n|qq(8st0AR@uGOX< zr&*_ww+W(!sAab4z3I8>y9wT9QK4EnH{J{C1`o-#_dE4xk;F~ZiscKTrB*U4%rQ$2XEOsf@B{C`uKRTw) zqRQ9G(#qOPtH3c&dQZwpaxB*(XCtR0`K?@IY1`7mrL|qRqv~glMw_%EvstVY*r89T z4y78{qEEaA(tN7Ig(>o3Rb@8|RdT0&d&59IcrZvlh>Q2ysNWC6hcc@8Q7HGr6Z z_H;N@01yCR_YIx-7FSdS6#spAw=_?#FDy9Nn_3fR8n)Hd173;>#rYysQn_S4$CU`x z&s|#%;~lt7*P9`pgf`9|)7_i;z67`OcYKf2&~zO>jqvWxbDLQrd{>iA^P{2{+fS_b z^q|dN$nI$-zqszz9~*w+Tdme#C%uyEs9MF^xioVN^G>pRLBbSw3w=?_dr>tLNlT*P z9o9Lua_47~nNTbr8{W31<>LtiMuu9`KPGJI)G1rh%B4(Yb!ELP=L*d^n{%HfOT`QQ z)ozL&chTpT6&9A}?bj)*x*lgQnkOZ+^LfPv8%$5)Y$oIeA5-dURf-hT=V8;KnU=QY zpdKS8Y0*~c_KO{`+iWwKb%=KJ%!qW`aGNWGFwBo2;2=I+&^0J|M_22fS_L|jA)E{0062W!1@1t^4-pWJrRW=F|m=}5!l}x92gv! zaZqf`wVYNahO_Yo2J?V5IPH~x+_wpw!YdkWc|b2RCo&s0Ox1dTwnbfEFkLWNuoW;c zG%(wIh`vQ#uzy98QCG(LKm4O6MNmd!`omyhu@Dq`z{9%(0|3b3$vfq6NE;*b{rzJH za|t*=NdSQ0bXsIeWGZY9s%U&QxY55_?DbE!#)kImQ<;N*_YQyn2Jo0g|6d@YFL2`! z+aCY`ntw0mzYX&L10pg3Pzfyexygw#{m;1t@P`Hf>EGu7nbiOQf+PRi_TT*fey|j= zOMG!cbiwrbm6QdQ*#JU-AOe6Ovr!QtpaN#B16tXjgRuYr*?>rZ!x=ybK!dHp319-G zu(6{^57SBO9RSv*dJIrV4P0Gf#3iUwzJFg2jbRMHq?;=7E3Mnb$ZqJIHTO;ovf&cB}e|zDK%lk_p zC@JYD1Cnftm9l*#TI%PQ+xq@PN{VKbvEy#Ykp`C*4G6(aVQ5cdx5UIbEdm0~&-&r%(I8YD`GUz%+BeCmFeDmdG$A|ip-qNRzQ`#o> z-sy@Fjy@r6J*+x28jZ%%rk7X4b&m=Xc9C`F}xjcb6ITL$4sceELr72%% z!zomuP+eVUND2T=1!4q=RX}3}Nbd63KywZNIf^H_r}ey26eBpp6C++|=_%nU>rL(c z8;-QzbuZrg_ug>c@XR;7kIw{BNW_=DYJLJdR!lfYNeQJgD8Bu_-z+Q1Tq!LKZW9R- zL_{Ry%Hwmxm|De=v^zJw zZ4hLLVK85Pg&-I(7#Iuz0SqLjf$iR_PXYdAXB%sQj{uZz0^-v18*70D1P}-q7K8;G z`aJ>+J7a_xG(6l5;XseC?K*&rk-k?IXzwb$M8FF!ZXxLhKW({dyq+kUB(fQ70ew)5 z2HZ&poKn3=O0iq)87<r0cG!`kNQ@oc6N;|L$)auLm{=;576|$!5-aD(L7r!=q&{;5)ziT zA@_>GM4ZjaJ*(-|v}TX!yb0BC6mgP4fQm9>i_)rTc9nWR)W@RLYwcsp2WHfg6`)Tn zg~g0yydaI6;fc|o{Q)qR-GjA5gm5V?@D?GYf2o>X_rykP*YX-LM)7NUZ^u>gULEC{ zV$48mWxVFxw!pbK%JvChEA7Ruv2lXP_R(i0nG&Mz^dU_GOd;=xSS1Xjdc^4oW5#u6 z(EQQV80a5E#kw;kiQft6pMQ$wyENpyTxFi<%QI$vQW7(1RKVt&HhZT>fns-3BSunB zo(94w%Do)0C_}>_6er3hh&%3Ox%<6-tX{3h*JV3VD~hG3i%;KFklMOXFgwA6n=3GU#vS{DbR9 zUI>}smU~q)Eox&-&WmO`wE%FOD|skAh^#ITq(*yXRZwl3x3so$D5LAVOWE86ij5FT zFLKc^bjn85r-O8?#f4Ve{EQQgmlz_KUbSGws2)~H~Cl*Bvm^@<|_6X6G&aT*? zG4YWtwV!=@lM5id^~|Vw4Qr>zEPhPPBoFq+9ie|ZoQevJ@P{60^POg@!qjE$AjHcY zV+w#`S@hbtw_?QiFv#N~-~{7iV>S^Wg@8P=p+JYBOdQa_#1RhTe3Gu$9Y>maY>Rq~ zlOakF=QJX^`d{`u5KaxwPjaqTLK|Y@?1sZlJO(D^@wKN*LlWXS~#^r0vLvGcU z>NYAPs-kSKgykgw04n6lhmr{4V{yeMZ-x|l*m{0=*Y{Ga=!vy!n*t@!*6qNPy!zab zfuei}VcQE%_H^g#=U-w3d#65yA*bXbx)ZjvW|__b{I$*X$NGj(@sXa?a^$X0|q$c zn88lyFv2ajO!Uk%lf3Z4WN*AT1ttbU!?Cas*x2lFaPje&LHMi?tXZ=sAmG4}BOWJC z96595#EmCJLV_SAEJ(^p@l ze)_@ags~JM0w$6kDOM~G@#1l0$|R937e}6Am=YyOrOIH+m6NJaL7`G5r7BfCRja1b zs0o{qk(Xuzunjbjx1omO8Eyoj^){eww276?HluB^m9=fQk=brLxfZP`ZQ6+Kw3Dsf zcBAdFhnao$F|*%(lmiYhbI4JYV~(Mna02b5Gq}z=OTfg$M!R+b9Xi;!J*z{tsAl$3;2RBYwPd~Ao!AKqSwJ`i>Q+|fgl zZ*3+{93)->+?HF@lBC0B%7Uu^G%Yy%&4rhucbpQ&fcBtI3IqCsq&<{#xldN8`kG#s8F~i_O}(=? zW~Zf~bSofWIF;U=@Y8{afyjZVf#`u)!2bB$^RB3?0p0(q+5w`URg@J%%CkB{HDoQg z0GHxw+=vI(4u8>H(+FdU_H%%W1`Au1#e!KFVHy({Fo~&JHcMi)8Yhq4Pk(pK6Do!u zhcQ-+Alw@9N8qy~qDX3}E9iSyFbu=#U4ym~vXvkS1*CpxF&rYW`(7OY2_>_@E(xwC zoFNX9@_^b~)|l*{uttKjbx$$ccIJHqu%3}7#kgS+wo-6{hbC7;x=am2_DnX%(?nsH zNzYu%x@zT6JT!*FGx&R&U*MWUp>CZ za16{mgTEgNpxzy}(*fNDh<|GWrfZNfwn3-v*|2LaEH`HCk1(o1YzRhTKmgDUQUa<5 z6i$nOxQV<1SdT%l1BOrwGF&$r6v=t0XL_giF0z?H%xK1eabZM^2jjy8Gdjk|Y<1g< ztVA~5-M|nGFTqyEJCgEXqw7X7c8t@D&@e$iOChI#;{k;MIC{yK`jXx|y>RamfN$SD zTKwqzqgNkQJmNp%JRIx9I;tdUH9)uCKkm+ayU$15oSDA6AK2oY9jeIsPrOymxbFY< zw%Vi*#uqp5rJxLtzus{Cs>q-i8;%Swk&?EwmPF`x1%^ns@eNTKGAo5!^sBZ<`&>}1 zy9lw9X+U`836HnZrlv7k;!e)vt&s-Eb#J9qrP@R#3g+A+y+pbarzIuO1&PN7?CPL` z-JYY;=8d)WrCL%}HL)nlxjS{JprXc2-|45>B(*!BG`8kDFQoMU^JwJdVntH+eAqQ{ zU%jYRP~3ZK8J+NcoT+3Nsw!H*CPqr7+H(TJ{8*8AIwbnZu{$0LD&VwI)8Lk*szHJ+ zh^p1u&`HlnY1J)&y6%H@8r1VTQJhi8qY&wABp%RBMT17s8HkKQ;=~b!vU2QrG2Ur^ zCH=Z-mL~w3W=NyLR9y5oV8Y#l?X3~3A8bjTj9Yj4kEU4CU@(D#uJziHJE=BRpe1+( z2BEacgDGTN+>#VcMMF~o=?`Oah-6!fjYFTwZ%1FTKa=we*$4Oh#=%|M*a6!Q$;n{V zN2ayAi5f>U#+!@SUDofxs3+PLu;aTmRCR6=cj*>g7LBo$S7P7e28D1Wu*Yeou6|D_ zA~Z0RAM@>)0ZvJWNQBE4W%RJU!$^kj9(r0mhc2~!n*AP$OpN5&Hi4+Q@%Kj|ZDeZ1 zZBz>;KSkk}kon4#{})FuwWLc1r(oo12>BXDf!0BxMo^?lDAr^&(7Gtm6g1S-@hM`2 zO)1xnLocX^KF18{TW1wrZs4!~ysHk(zd}+*I4p!^at5yGtw%Pq*Pfx#FICSau&%nw?$s1EciYI#<*T}`xDt>dPa6wDaR@#8CG1<;2{rzB2GaQBb2 zjO1t?y`9S1(p|UPimP#!veWgSR6?~;%@WY1E%?s$*p3mf%!Hjo6nr#=T@>6)030sL zblzr1&aaR?m`9)Y9O2NB{u}9t>fwCJV?4q{jMUbjka5a>jjAmWiZL_2mTvn!Uyksn z#`o6uTzj06bMJ$xK84`YThqj^3}^ey63Cv4v()y0`E=Y2a5jjFR*G^KBP@V_c$Ru` z>o15+re-gf$xxlYy`BoGAkIlIbR9Kit>E*bbJGSyp%F@o&1jOFG|>wFt|56o3X~N^ zdU4teRa8Ay584FV@8FEbwHL%CziB+u8~yYQUxgomH`1K3#o89Gan)xRFun+JwI;*?` z&myH09bT_xI>xJ_tcpuDx|;=eXvT}ybCGO}icOzPsXv5DrfIwHk?BI^z|nT+e;54$ zOy!{=?EU9u+Ss8oWR*vBe;iH=jmQTHnTD+7ToNHZJd8VIKGVYFHm4+GKYmIcO+O|B zdP?)inor8|l0})VbqQ-84 zre<}E3xIwO+E~=tBhba7-nD?Bk41w$0z<4dVh3T`m?mhlTVSe*W<3xIb4|3^EwI#7 zE1p1y*EB_&Jpx;-+5rk+k41+)0!Qr4Co+NY)VY*q(g!Y(T33a$1TypXp)DHSb@4+N zJx2&B!YdHMI}oZ5V9)U7&*-O%{<>1cVQbfc;ei7q0tZG04vgXejn)wwqa!&MT{nyi z+%P_H!-T*M6FESWbc81Bs5FJI-1Y6Z{j^~M!~fBL!8E{=PXNfMiEtM$_->eQjA@OY@FhMM~uLbPamA>7rLM%jcUEq!1aZ;h5*jE7; zyF(BpioFId(r&BKLgw(eGZr8C*7LQY1dEXfms@z#6rMf#d=zab!Rw-_4t0~w2kH5A zGSyYgdeNeWI6aDGe_G%5ME z()ZJs(xob~8X{p>>#w`8{)6^qP!ya;xY1F={NOR(6gAll5N^O%uqF78Fr~PG8aZf$ zN~M3e`p=m!Y@f*)A%=KLvnO*AG#MYt4{ncob7eBdQ316mfE|&6uz{J_{P|p@IfHRE zBEoGbnMN%++{&7V949{_N&^YohghKQ19n&wo_{^o?#V*|)%y%~23`0dzOTrld!Z41 zkx*F2L6hHMUk92AqaT>6B)+)DUapc|wRK!wR&z)1E%CH@1EttUPDO+oM?}lPa%ZBk zhp!vXm8C`F%o@VqKQVvlya?*!_%YYX!`_cHUhLoZzjMzyuO-^#oCo^0EGf`H-u0D8z}wgOL+R5y8YmZP(kS$ zl$GW1sIr3v`;I6V6ngtPVx>YZdB(7mO5YkDZA>4JBbPywiE)UruE0eB)rA6545Tcw zT?{#6sjj^YpO^M8w$bvmxf@n-ludAXD3#@dPf2rnIM{7>r)NHMv4#M}D1^vH$-QQE zRXMXHnxK3u0gT====fays0~NTLJ#rw$;pkTF9Ub*dWpm+j3r+9=J^D5>UZ5$8xH`XRv(p0kLSvigVru6K=U z88zHA#11M&tuAnqW)~%HfjqoB_PEu8W6=m?WW1XT9ub54BJ=~n2?pp-TbJcKqZmHCR)th_J> z7tYhZ4Wz@qRni^Cn{i1!L1}jv6HJD4D+wpmGJk#2-jc;Kx{G?#-)50hhz$9@0*DFw zJ)EAP?t@Ba!3Xf%+FGUFABth(9p0f$eCWfrid2S;_2gE1srnV%iDyxL4|M-&9!N@n4qs zhBD_9zBCHar~dt*U+4@RHSuj*tbLeYEr?~ydHuPpOzx}|O{q52mO{c-`DRs6U)G3UicFPFtJla7nUnOW-1_liTw#zN9T(nyxI%_bd=xS`)W zL!UvX>knx=u0D5GW`B+%y_Y5e^qg7G_JNMYwlhpyWOtM0ReM--ot*rWP;E}7uw`R` zegJ-K)t1|MHd_%HubSO+^tlySK^T8=<36KKFNN+5aR$<)#UEC)ij!ee33mLzY&Gvf zZpD&(cPHsh7Ri+A@6L`0F^}u2yBD3<&6tGh$*$cE%kH~2OgBcbYFye)#Zt{`DT(o= zU3C7361}IZ`fb0DkAAga%&S*II-BtqjS%OmT_ z?i_D=bXoN;U(RnYbH;eT^?F=uA0y6M3AILrt88bLE0W6A`s~|VTI^fb`s%Q5-gPRR zSH)1Zb`PvrIq$VLRTU$T3SaN$iM*pvTempfn_5~uo3^-G28n@XOZ)n=QU=(`kg3Z= zfkvOUZE?Cv;JRDe>!#w=cXR}Ac;YAgFBamruLYy^8)o*wm+uB;gPs%z^ zy?H+OAr0nKF*UQhSNFZrJJ2nzOp6Df9zYX_TlTE-DMssP*{FLoG%5j!mk60R`A+6e zIBI);8RWy;(a~I5PE^l8o2OCM=CA&S zfdn`s!6fpIBIod>ZvQBH)>7wYEJ`XF@Y%LEw^+9g_-Z3z0+RlPw%S*XH+HS*>+2e5 zZ0dS#<;t$Le7vt4oAWgpO8W4>E#iN|BIBX*R1x|X-uNUy1YR`aM`RyWuyoCH)-GQ$ z_x1REE#X1n?nuAix;@@(-PZ4q%tN7{y`$9lyjc}x-3?7|m%e?_$V?LFrp06lODG zF(I)QDDRNkMZrvhb%P2|s$*;HK~Te-Zz6F+l@yG_0Yo}|aJER4(Dl@cSf6%Lo03+& zy1M^x=wxkGZMZU0S97xL@GGwlFck8UNNN{7wJWR`VdVZXQu#qU^+7wF@KIag-S*(` zBi47l+3$J9txYKnGH5KjaY9H6-(lWiN|Euwrm<{^F(pQs0OoELl%>^U(tA1pCpcsLj&!YFEs z1_HLqlgYc^Xg!Hd^OuevoM4rA)`5_rTqBC((>oQ0?c-9Q000xwihwiXD6Bw$(% z{esNR79uGMxv{q(CYJN9zKkG^yH&s$E`)eZ`XnXalXsR33>Zn~>9lZJq-x0*F9qsr z9^jvc>d#HdhnhlEui$QfXEgvq7oNI*$yyL4s)BwZjABG2(0o=|O-sZZ^y)U7RWmzo zz@?S6pU4I^LS~t~kx;->XyyTVSMjjSn8rk|+9BZv%1`DA29jy=edg>){b)09rnR1|;O<`z%K9=T^o zQOs;!y7y!eR!{=g=oE2_MbV6(RuB$DQ%=P~zqEC>b}3L>nbT=2M^Q())8z<#ihmxm z-3f+u`r&KpP^r_tj2))Qn20u9RrC&v-WQPN6Mo8dtI*@%f+$dKr~L(U6viFv83P8CsPaebVMlW|ikbpYYUx)jcR`^p-aV}ngurT0(P6VG z+M_yXn1;@lt;su383+(jHj&J=^;4%q^=ApsX{ZL29S*0mty*Kac_IuC`~7$|=88|h z8!8)f)`p|>cWA@pQjd57LjQ@iu~+H&f67hn-afTY8K_FB8c1+1FOWPWL2UB+-xFW9 z0Axdtmng~mzYHvpeVGnFc(UPXp_w>#B=m@S5H@?63od+_UU}q5 zMsl)PZymVoLebb#D0SV3O*Ku`b6%7k9YVs-4TY^zq|8r@Om*P9Hnod#20c!28y&#g{uA_=+`a z@jiYIC(3whp6^V%Y||ecVvwk?BQK^uBfLC?L8FmGi;}4D-~xdGs^rPsDs5?82S56I z&Qd}|PegioXK3(uHAQl>1pxGf*6tx-!e-DZK($s{RrG=i@9E(~V3;R$DnMiCNG_6M z38Cc+W;M6D^T_LyO_s^9>k&RGktTvY{5@1SDOw~mIqWE(0f8*O$i}*(+j`jI%Dg%n z;3|w!g{%fLs_Pn+^TDKrtB&oNYuMWz@afvQV})>D8IvE3Y#gv&YgS-xmK3Z~$ZH@- zRbQtV;>bR4nf$s*MdB|3}1$N6=DIcn_ZX??TIzTJu}VbzxAr#9W&|JEX?T$ zlFf$0`3q#{VJ6I&1=vF}&5{jF@DW%c(X1MpyD^(g&L@3$qVKqaTnu1(DT4~G=w9Ie z7!;qHAa{~?biMUmA!Abk^#Dr^2w9HQ_7+g?{-=X&L<~aKj%2d_Yc8V{q*&^RDLe|4uPnT|SfIjDy}^h7m)K1ZS$M@E z)Fy~JO2iCP-tfE=OUaaAps)Y(jljsulO99G zK>mdZdaqv2JDZg|Vq!_18U%4@q-@i0@^_yr_v+1R?y-EOciKCv^Yf1tpYlaWlrW1G zrjTAfdi0RU!sUc8n;>d05i`trCs(ozewzDOh9OlJ*H*HV*q}_VHT!69T&eKF~ zQ@q(RBi8xK1rce$7LOBLl8LgX`boSwuF*c;PvQTDz?kujotMWl~}bInn7D zX0!dp3i9VI2_pJILwx(j$E4BKKDG!E@o9)9#)j04Qi_CPzW&aAI%l(_5Y5ao`d+D2 zJUFlLGbJ_OL7u=+)vcn-DWZJn>hP1!fyf~i z2pmqa>|P-d+oU4la7iTveKo#{xoe6ufmfvy*FzKESS_>Uaw(N_XL}ZqOIMB{eIuS> zAOW~JY)lwe5PhIe&?AG6)C`uB^}RfG0xSIv3o0e?nt0B`VGbdFEqgVN&lnI5a4Z&v zzj!cp1!N4>#p~$)+?m5!1!rB_3L}IRXE0V;w5_uHEx4MT_|2NZ9L6k|@g)Dg|1RgQ z?*V@pwxf_573K#xXPCElXHCr7bD43Lgt%eExA}qtDTMeBp8T z;u8g~12ghsS$VnEL{p<)+itb$I^&>uWw<^UB{MCaXu$6d9CVljV8A#9n&0<3O8#W;iIc{99uSTPq?Xo0d;sY&3=#98N# zHwxI>%pOq9zJ!tN4@fS?E{0@UeXvzLGuEx1Deba$NoT6N7j`DOW_z^T+S{~S%_X_C zjr^5Vc+gkG_j_0MulB48@Z-jVRJgvaWb1#T8Hlf2f1x>@r|f&B+C9mVVa}K&n|!`QX7mn=(CI8ZJy z$OP28Jw@46_xTD6D1GX=)5G3gM%|kQy|>rMv~@jrV!1ZPyPB5!82gXsF~irOVOPUF zq|ohX;=d^>K3%`$a;)z1f?EByjJU6$m#-ZF7=z9s3`Z&MYgM< zQZ_U(c429xs&o-flrD^f7nTxbGaOR{o)d}CcDMj)E^)c}tq{a-ak(18MoS4nBsE(l zLVqu8sSG!D)PSN$nH1pKNoR(3?k?1UIA#I~UE%JXL)UDi8V0`-z191NF~X=;;xO_K zdGL{?x13nMr6)_Y_qzb6f=aL81e#yXk1j`Qkmb?Qy~cI)%yo3bUbE=eu1E6jM^usf z^v+_4#R7|qSs=tL=73D_=|I*BW?B(DgUS9syXaSCXyJwG-~3Q8g2O%Dp4?!k!|U+y zoL(pA+8=6m7VxB@?pn?(xL+JG{rC_+Hr9^i_RkVsyb>vo94;F#ff;!#7L66o=B>O@ z8@*9*lBcJ-+FU!&G3SQ1-_`;Dk2)ye?co*gr#RZ$`$R|#%;kkUr z5I^kXe%&IG!j|l18)tgV?u7S$)GoA5nwnl+eL*J@Z;roiVTd_*!t`Q$xOzTBD|K@0 zWWqcAb}BlD&iWRg&BZ(*po`9JPzvwEoA6d2pmFZwzjrpDUTZ4|@539t1>xJZ(fz#X z-}i5DYrC??50qQ-f}OYFeRvbz>I1O)1v@vx`|w6@?SLj|5duPMt`s#ek7HP%w~Ngv z!n^eEkob13Z~r&_fAs$eT}?^x z_jm?O`)B9yh-cb)T;Yj&o~IPv75-iSjcZ=;hbiGd!@KnF@n(5i-aeu(1t4RtoVNl` z8NO0R*ANtoOk^d)rmC|hE#U+!ofuU!lR->jeTqI+pQcaOXXrEaS^Df_oJ7I8)S&wxFcjp6 zYkARWWO=)pv=i!~c}W_`DN>`PZ6q*aQF`71Ccz(baEW$0 zKq5?SkR(PXu6YgQ^)!pq%R}f(qncl~sL0jwJWMCxekoLUnr8G3-WY%1&gibl{@-h%Ta(uf8{1@+sT5{UFBb_trF zL~uYqVhd|&5J&q=2bYiK+jJw=>R#d!`^e2shB!woq}a&hRJszxfiqM{Ib@ark<2HM zLNYkY0+LQR)=V0;hIx_EeNwwwO2J-?u-pIsWMp|-=14HYK zHrvu9UB1iwjc;}uSY`Ch-$Ex;d;*Yy`Z3M({9y9Lyf^Iq37hWz5?;BRch&y)*L-z) zXn)Dce!MyPe@z(Ou+@q;uuvcuJ%WkWVK*$jD9;i~ z=Ps0h9iijoBGY}K-FDkgiTy)b~Ec zz#;~V3Mv$%#)r z1D7kE7&exss^gt(%!{ueAjC7^XaOUq{bVv#R285a`ATj>iNVfTimkpOcWMN&^%nRe z&8BMDTlqy$n0i=?CO6-@0+N`-o^jF=JFMJ8N3n9CiN$$DP%n4B!ocgEjZd!RDlA~N z@EoX7A8eCns`TY{6-zqc=eLMy3`?7feb2swP2lxj<ZZ%qAHB?2 zW*x$6`vv2F*Tc71xs*2--WQ~NOylzukARvRROd!@b6c8zV?#ZmxSon> zgAMOf!ksAtR|2~1VlR_^HKE52%uV-p1acWyGY*l07E8(`a7(pQS|veZXx3HcD(Mf7 zN4<~qpTX#c&Gwh1sZB%T=}55LW7Aj=`IL8#{DGyZZxrMIYMgn1u)hwr_wATo{6Tc`1&aNI0Ca-fjY`0&~@E3(HnBP{h8zONhq!yNs zQGWR%Enj2J1p>sOvPkRLN^@>=5%yw_Rm)8hL9-TXsGlfKvM~-_xhPb3d=QGkC!hHZ zm1DgQ%KUhxG}Gr&JPnAUj@X04LP>Y9&#q*6o6YjsAog8D^MQSCBXd~ORSTU-*r4AV z8}l<|K+R`za&vzHp=u^YESx)vk2o)8Fw3m~yuE-X_gjw!hk66R38#bY3suP% zIp-(sG#u>|drcJ0pOx(mfGy2_Uo|Kz=ueL^K3KiSLNOrly)n$P3n(8`o$c6ksWVUF z*V^^f#j@G@R)9|@^n1E|kCN2Br_5mWB|MUHnzXddxLr~*iJm4>t!A!cZ^_tNXw*6h6HEZS$t;R9|2^`F7Wcm9NbgJrDx?Dq8O7UPx&XL? z_$sbG)iB?6)n^+#p~53Qx`{1#QRZ`5MsPMKTQ_n>aaK;Vl~*}kR1aT2&g)F!do2Qw z-#BDJWG(^qgHQR|iUAm5bS$~Fk}#%b#@J5CW7JC!i}vvq0h;gSfU4hZcP-BG1ftQy zrrKfevm|6|q`;n^KwGZk7hx1U=C{_W$V-f*d{x2Kk#hu%o>z#X6gE6mJ?s-ad0e%{ zrxv=>7?i2aQsGq6c3qaE!%qq|-HWag)M~)6RDG}qdz+tDCKldG`+uCh942i{zihsr z`2gF4@ZQH_8~SjANz50AM>H-6x3t*9d-(J;Yo5}^i4EuBAyuBr8i}^2mQE;HhBsyd z@O06Qr#P(pZa;@jPvKAqXX8RuUBaapQ`_akdRNRxfvb{1)h|*NaqM2L`G**qhNfj| zp}H$-`^}fs*dl#!gNvTz?pawdYn}yVdj`mt7f(^=K(f;a-38 zLoI@Ei|*7Wo72R@mfH=&;5eM6Gv95YcbDsP4ZMhA3-OFCI|_5k%7|S*K0Quc#mCxD z3?_e3(ZCmtO|td%r^$FYHZ<&T<#?ZCSJ--8$!~rQXqdt}j+1T3MVEY~QGOE6S%2}! z&uFZmSAlO=%o;s~nx7i-y1j0~9#vX-6CjvQtVV#rMY7bSa*-0OIcTfMPEUXk-R6EX z%qErY9BFK@mq(U$bBJIV*N)GU+ua1RyJ;iz=^xG2x>OoZo#wYn=(_nN-Zfts*c6EA zw)rzXn~=qF%9AQVw`4gwZ(E4uF&U-&Q7B{SWLzmni{{ftTOy877IHG1Q$J!FZmiBR zh4{&zCv9k2sj)_KFgJ1EBF3hW+dl>uc*#_rO3g1y$Yy&%qC80_fp-#0NM}buj-OQT zGO(2=;&uiEg2|xuJ=z51O^$`v4Q38z6fP#kr zXrO>lpu1DPiduK9(UyRMZaHix%L5O7Wx+;v#HaA14#qgjpbz{>nI4+i3PLCs;1G## z#h3$rdKFClO6cHXdHJJe2MXKAXDwLBZhfdTm*7JjsZ@WnW_8X$DB#W3+4mSCI9d7`5u0=KXc z!vVh!ok(sVJ||-8pcQk2JZtKzEMiet%_ZGkrz<n@5JaHo3gldiC z%?NXkHeOwb_vj1t=XXd1-@YOxh6j6y&ZlN!si&^EC@28RE#*ynaBquPEQ{ERZV|@7 zZ?{K?Pb<57RVoDcaXIKusDP6G$}<4_`z0W7_WcaGR6Kq`(bNi<68jXqp)-WBj8oei ze^N5Iw4{aa%bmp|Y9m7#)S>NSDWR6 z7;VjoS#G%Vx}B3KkV|nlsnJzy?4qDc&C!w3xSypiz4e*(DrT)w94@j={*u0CiIO&^ z*o0b4#q23hP$k1WUb7Mihqv1}eic(g)o4k@`8>dgj300xbfjLN!=_q?i!%V_hWa#S zf6W`usXM1q^6bI)BY}zctm`a#Sv#QA4F)U)217q+ncj_G=7t`hQ(Y4XHD%$vDGo`b z1>%Ri(`O6OsEDOn6Ky0$7;=?AC>3<0MqP*oA;X?^z0Id&rf=o5eDGNDr?1*kb1te4 zF|oAzp>OT1S1^70vX~Uy^f!vUv1e$JML(7(jYU7LIA@-R^K6D&bkrs!ON0PYo{-du zL(9UVhUyLh%=azA91K1`+!Td3V;)82AvqmVTHoHj7I6fLpS~T4Q8i7F390nY(Lv0PEpe;egbn2CYT&dUcSYM;6d&# zcJ=plhe(CWqJPCoMwLmwVK+p9U$C-s*LDmqaMkWPJWS3kgkwpQwXux~?KEIqy{ptkU`8B6Z z0%P6Atw;18o(tFhE7`+NCUO7WZqrnHhR6II*gkm;L(tHhz(0uVuE7(Yj@4!v*l=AT z;@;cFM%HGxn6-$n+z$Q%adU2V$HR17+%3Pao=8J%hfiy|c={6i^o*L%KZGo3SKUZC zQioO1mA#87K)#QHF$&*R;qyn0!x0{TJlZYW(ardq;fgm-(~Gdgp$DS_lyy+?FH9BH zkn7)(bA=+S2bzEKLS1=1!LwlGD!S|jXE?=8#e3ggeIA|r-^SU=ez#sN7t=8-y|~Qt zOLt_M#DXmv1)}KLHf{Mw66MOx{uxz3DmYc15$0@!n`{1HZ5w)Y$S2xv=Fp$X_82eP zJ8ZEwyJpFH;&XXc*>z;rHG?+^QB78MqGqXvL`;R0<$fA7o{c7ay~)<9@KGq9N>FdK zDJ*5y>T8IOr>m3Z_f9Cp$p~|7_!>?;`&z#WR107EF1{62Np1bys7cm!vavK{=ET_@ z|F|@x8F_Zj<*Gl;r{1DrbHi$(@m09-dm*3(?;zUvEW@CEe$9;j%~Mt$C>i_J#x@PaPp)i)P7j_0Z!O99YyV-<)%So8k1YEDz^701gx!9>kIk;P11$_7 zK=sQ|0L`)jDqIWM{T_Ho*hW2FJ`d(!)~3*dyX zf(3w8x0F!+dQ{mI!&r&e^xaFfXj)^3xp${aqafYA@psxt-8{VfN@B9p5m2APwKEZU zUU_{plTOu)Gct$$B*j%H7-fAvQvn8(VR$lbRmni-S*VVs_mvI-eQ=)0FA;Qb(K3NS zb5XZiM!Lp=m#7a_cCBMAbpZXJZB-iR@|mJz=u?8uJ)&+l6Jl2vv8@B@y8svKY4U=; zQRqB`)eJ4AoEL#|o z&*AE=p4px(tWdBoCuJxhY$r=eIg4o?_lV1D@X%@n30J}DG6Ag-8i=g(pSeu65~b?YGHRk`Vu$~lkZu?UJtd0g zH>;7PL>ctkU#O9WiZ?G_Ld1y|Crn7APD(;2O$n!}f_^*GP%)f4r3z(|b)Bl-C0-_N?86H@!s zJ$jpt82HoU^~!*hw@%H4xI5o82QzHs5d^M7=7Z4t9Rr{8Rlv)k?uwWbZw6a?Z_3zc zlJR{k$frV%ZJyhT1FVrytr<4Rz3ghicaamCe(B!YHpI|{ub}SDRx<4y2Hg*`xCPxI zP)h>@6aWAS2mr;a6HyM7nUTCu0087r000;O003rhZgekgb!=%ZY+-b1ZY?%2FfMm* zW@Z3MK(@bJcVm<$P0;1jwr$%srfu7{J#E|ev~AnAF>TvDZEU~0-;dpmQ#UK~X55nz zr}AV*xyy@*0e}EMrf>*A{_mZ!`7{3C%>QrVBBEjd08sKzm;VP!AnL%~;tKN0Kim=k z0O1V)Ab*87yL^c&s|o=CPzpc1F#rI(?Yk*eF0ahM3;;kk{pe(WU|@ueccQHFO9cRc z0sR?s{y^l&WeUUC*3jXH&#dnS;44008&n z2R;A*z@z1|qt2NdI{#=<{|goJe}HIi^V{r)`{}bQ0sv+n$ydY87N&+K0DzRv&pi8o zKp5AwwfG@_xc_qdSqnf4Ne@zJVe8`Y!~Mhz^Z)>WGJ-ABGT7J~|MM;O^Zuk)}mG)i8oE91Z>xmB-&AHK1TzbJVYfv$pifEmm`CHRI;%A!H~| zx)4ECm=GmEF{K5VDnJ3qUl0fkm1uxVYTh+T60}-`5%B z1Q71*j5eC%_&ss%JWBNTA!N75{Dr~v&sZrD9)ORX=9oSCLg@#A$T)5O8qNn_FUTvD zLEHI}{k0h*DH>#^?b6e9j=>fquBeAGWDC(gqn~mKK?S+bHP9uqW0y@`zi!F(GsH9Muc%qncZGjZ-M$0S5Wjnh z+Cl1q=I#g#@bV9YgR{A%;i|u&`ZV1(y+KJ#$+_Spw+or%h~#J+f`pEJE-Q>9HBv`y zL@TeLNWeWNL9$i#CoXSx*~i$B_28-!ZxCxPv(-+i&@a$F)4*oew#AI*&FmEp9?T`2 zi7CcCtn=?0;Jo&bb@K{($v99fV4C57X>3d&(MgO)_y^ikY}rrL*fN|#8zaZxC=A}| znI0%Am1EVm`Y3P8Huq3UX4Jg!doPt<6nWj-%*`oN304(`GpoCYOXO7Z>~_0<<uVQ`Yj1j>uk#^id~h zsvR@sb1jZ_XVeX{o&fosr?T#xAO_TB8c1s5K;I2i==;f@Tout%GgRpr|A|wi$H)n> zz$dwUtEtu9yqU%2z@;L-RY>JfFy67&EUv~F!Yzw!#BJt1Hm)jbp+Z=TM-aFr2PXGF zsLh)p>J17<_|WYn)A!u0_su;Mao>tmL95*@cv`ic6o$w1i-W7aVjTB^r6+l0!z%lJ zs~B4u8uzy46yELrBe9c@f)Nr(I@)cww>sH=uf(I7+8?ns0wOG!H^Y|fQ_WsAg-fBm z(rbtDw#rVe;l6-*^12|I6~3nQ9k{>EEHhMlu76pu-vn1#A*B@marHE@8T)>TTKAe3 z8jp_Tb>9<)s6fg$jlg+~I%f%wNWwl<=z*VnM(u@r=2ON?;pXmwm`?s8VXsP&v9>;u zj@Ge>#Lk8K7R%Z@2>vY9%`H}@)%rj`tlgzA)}w&faP+b^Gpfwj3bRH1h$le*n4M)) zcGBlPQ9ePAV#rJL$MOBE%^$8yoFL@s+oOg?XP`qH%tokf)D=}SS0nDDyXoC1?)NED z4}&(ygSE}4+b}P0C=!aCia3c}HT|HDehzDMckR9aQX`7j%2m6^)kj{3!+|KaI+wpk zV|{JCslF!^kH%_sW6~@Q!>Zzmpf~x{C%8d|Ep6pNGbdV&@}x8Y;_@vzvCh2L;h}Pu z_GMpeZ*+$$_2R^CFpk00^*)E~Z?eUOXCI{+9&sVqkDNQI8MGcAdP5XZtx5AswQNV~ zZRR*gq6t(W^l_p;s27G0WDVYYL4Rm`UeCbmI$pi8*u8qtBM8J-`e}KJ*ATjoj)e41 zZ27)hBRu_^Nnrgcz1>>VW?QEJw%CF<+YYPRbhg-XxEU`+PRo&dzS4hfS+G!O>W85s zDnP0z6n}G*D-D>Ku>`g=CloVB9O2Gwku;@hVYnHM1AZ(Zu@w4b}5RiqNwSG0rWF7j84gV@i&Xs zPi}(vo^6iBcXaEW2hz4a(ff8%D0=4*;2J5O)uNz_O~M&jOP2`bYpFo5#9@%}{rsWd zq?%R_Iwu&3yD6j|(>&E*deEN!?aN8)40UPQh~o|SAJ7X zhU*abQ?o&8P(ZCnA0h`xlj;=AkP)YqnbYt{wu}Ge!`>pf!k5L}XVk<^8B>MUA-kq- zuR%U(P;nHk*eV&Zwb~*-W=FGAK4o{jmM+;C+9XdJO*~^~O8G6?C7!~oKJNa18lfJk z0b8L~sI8KITk3C+mH^`;kH5O{AU0LMP(ylOS4SFcH(G49qs%MK)}4v>nZ-Ah^#}~47na&M+{#IxE;P3%@A~QkH4S9 zZtBWh?!O*Hz54hpls>&JJ4aat-#K3T_Ycq2e_eIs0X-VSRm+m&!UWT zj_Uh*-$ysrbJXTK@TGdAAJn{PcvFoG#qGP_+3!n#kQDp(!>rxzQ4r#xZxtZv7U+t& zgv-qf2Op81W>*DeWE!O-DUn;u$giB7E!)BJ)T5ZNOKaBZ`WZ9HuW!pdK}2a!_?k3i zOzktPI|hDvak0ZLGU19U_Vhb&urzSvB^Yb?k8ch}DC^1Rp2WLzjcUhmxR1P)nZX`< z%B+rmmj_OLrk+ogU5A-LG&k@a)XKgSRo9fj-^)pj*Oo##ec9I(grEor)VEF5N^UQ2 zV~_);169C&>KkJNLuS)R0|Qe7gLB{oSlDgEOs3fWaK$trC{{+svY(Dp#5tYcff!365bFHxW6DOSl{p7VesJC zxqM(q6;O>1Usg;cUBl0vB`-aaw$VEi^l9RFH6C&zykLaNaZnzQzdr{)08tYFnBz#Y zy)fUXcGuo`vTI>z*FL8E`S2S_SJv0aJD)^i(1*!F!P!b9bPD3}N_r+rn!38Y;T2*# zBa{1ZcL^^V5*W~ah2cOME6(#A3WgNvT z)3>83C=i99DXM55sVXRvr7SBb(={(Q5AjOp)Kf=x9rOM3*(Le&K9JUPU-;*9U%mHL z7$k;uMTBL#d0vg@%C%ukHY%rKkkt#fZuM8IPGnnERE(VVwG?V6Inx5=bGGZe%yZ1# zGWkI?+cs?Zkdg#R@zTNsVJB_F1bHv-{RBl)UXf8GO?7agRC!HgMMZgGcFFdA2S?X| zti9LjJO4wyy!Sc8&dZ8B|6`}$#~H)->ju-eRdq&SD?8M6sUTbx0zm;`$<1vwb zP59K$z9EE{5F}g_1qUA?`1bo)6|BQl3Sf*Uia!Gd0a*kYA%KMyT!;DgW8^b5di{Rr zWfmqy>|kzVt^q&S`2I$So^=USOg)1wBn1Q`;B9#Ptx{7r+7Lt3tt(eY$7qA?Dk*@3 z>DZvI(Flm$xKL!|nq(B}tn$^hE>c50de6nRS4|D`SIMZRBFiM8!vNSC8uFH@%sfgXgKC4l6C94Ma3_GXT z(cPd(o+UE>#1W)7Z6FT;1O33R);#;KuEcexKbU@3-74)f0r4O7AVA_&7I!9v>NnIa^9Dl_h3UV5wQ!QY`4)mi@HO^{(k$-| ztV}~hQ1beagN`7hE%Ceb96C>Sf&(u894}m-40ODw7bR4jUvn|Qte1qRB#?R19z{5u z8Y+T#sOLzA*bBA!MIYk(R5=Rtqnf#s$R#bulf)W6OcRn@~-%AFXNypu+2iI1RspbV)< zF7GBVNf3bs`=4|J7ER1r(^4|H$gvnyQVL7IekDx5$(w`V| zXt_FQCC~um&cw6*;aQ2Yk4s%WGv!X$3Qv<0froyDQ6EIZ6Tt(ShqFVNFCV1&DxKDV zV>lWq_c+&8;n%*#>6=I`68ms1tE&*3{i6}c$XT`!p`TgvKC)=uG>QC{StMY!LWY#w zkWc3yxENt_SU&@kR$AM&F>`~?-%&w9Oho^;Lwt2@h{rr265c@C!y4JiH^{hPshT1o zGUIi2Q03A;D0#LYT$JJrL{kJ+9yUuMk8LED9CFbyB_bMTBTYTX{$-hk5#EX&Q2iG^ zS0SSRo)l^JK3VFXR=%>RZ$U*e;Rq`wStD0<9C6Z_8q4gr9vKO(Eg3{mpOQqfv_;+> zj6M#;GQ6?vIk*8q@soAuW3Q3N6pc>BtA7XZ3%9^!Vx`jt-a*f z?EjqV^p^M`zqGn(Fp@6BQtG!!`SV;QzA0UrPIu{+IUP6phYxh-=kT2L3y>nT@UZ8E zh+hBlMjxcwj6;6F?SsIbJ)y%DY7vE|p*4q4j8!X?{#l~K!k~|}^kT7-@ZVrM(pkR( zkD(<v z*!nHCRU;bZ;ME5f-@>_iBD77Oc?~NQ%+<_c8WnYqdIN7ml^$)0%J2!knVKq@8IYK0 z7XvKq>gn0`AS}Z^6x7l!KsQd~XD?3S$ygIFaCRBOi+Sfmmfugyei!_-aqPJ}c$Jr+ z!%ppDPjJ~#lXa!5_T0BtNZd4F`d$`T39Wva?s?cHdEU1CdJ zR($qm(=Cq5SO^QV6bqf)qK_0Vy#Q#jnv4(Ty%?*UmUTmm`k{$yeDU~fVh&i>B7we1 z1VhU#Cuks20bEU!LIY)@k9#`2?iUC%t3eXD&9EDs#DB$7DC+*7Gx_5NBi_Hkg+{-6@NIR4F zw@Tg`BY(7@6=EsfkgakyOQ1S8cg2K|;*nyzfo5)2HmaT$k=;fUk@BjY3>FKW0 z%wMb+-nQSE~sc+YbT?X zY!B`+%l#6h8e5o7T)6aKnve9A)|xZo%1&CyPV}Gf{$CJ{DFc*Fga~>MZdi&V8sAwH zVdMqcg5aR9q!t+#`I)BpWoTp}QV;%+ivR^A2vMR%cD5koeF~7_`RWK3k574lCK|2$ z3$@A$;M3opxqPdc#?#|76DFWmp`svQsJgQY(1Ci7oVtw}m0 zgQlBhj|XVtiXKih?3ih{pzU0l%^v?`dEB}px}5I#3Ni8Uz@SM0hrCIgIM96{aP!=7 z<-ttx{>TwCEFk2+NkL1|L>> z3v^B)-oTND(k{w|0n^lqflM=Fu!P_Tf>cuykP2`hkgvbFG||x_>ov@BNz>ljX&m*P zDts4XFlh`+3wB{J^!Rx{?n82EmV2sM;KUj9I9C`Om(_hlvpn8j?kFfKg6=9J(|B+D z2GLaS4A>qpMkIrsg+4Z&1;Idkp#dTmH#vvo+S4I|OAyI5OR33AYIbrZDf1e<4Rfdm z5f@`BO0lCnPA5w^qa!;W_wyLrZL@8kLQc+yt`u@Tb}k?J5KJg#w<`z@>XatG_?N_m z0ni1YW7EPV0fq z)^Ozc?gwxvYhNZqsHL{b)n1k>Ir6EhXH9KQ&` z5-;3wKav-wgCkC>4;1=3j2^DHMWh--$JTIOO*2q0ma68O;_96=t+dsA^_PzE&ZIlL zfQqv3^{&YXOt3yk+H7l48m(h3g8pZ0`yu`Vyu;(Q)zRp0phX@62(CK}%SZ_%hn*S|>HKvnt+?4ET#*ah?oes>0jx;0(_w|4!?pNf!}-P~VvMk=_?n-FO8 zv7ya3_K5Q+Wz1w)l1hX`e4Yz_z94z{h_|HMq^=r1LsRjaQA_g$^*^FfW2^VX0bD)y zELG5|^$zXm{HpxG1*Cn|Ed?gtE^S({0|)5Mz{4Jr7zc!ub#x#e1mz3<-9F0P@qDA> zsm9v#ynh=0s`n`-uhBO>4mh_+p(PUS(-6{SPC-83NAlz%KcUu<4R6L2tD#b|;Pnry z!7)emHoDV&@PMRfkh2$*KiUqxa14-5VPj z@F9W~0YX;H(LdC0V%7LVFWDrlE(TC>nya77~p zV^tjNt~RtecuYR9+k+R21V(4ac*hGqN@XpwX4}-%fIb9(IQ}10Xq63RXv{pEV0i=) z7L=r@Hy=d**%;MI6jpcxleQ!T5`vQ@8|b#c^V-~;v9og=0-ON5`|ZbT&}E@4uj|K9 z5(cZ&qG;FT6rCCnsVpnDy7N~0Fzq3by|Xp+&T7f; zMQte${`1^BK08tHAtf?qI3reVuAF z53_tg1v$di-(h3*yn?EtGD3zlk}!}_L({RlU|>(qrtEPCE}1aANDfmtit=RA4+G{& ztWUC}>9E;c9+&p=gZrt$pdf@;@eXn1YT@Exz+2^SbQ%h_fD(; zbP-d-FoUKbpZJm80M9cs`d=#dU*= zN#Zeadp;XDINAoo+T5H5IF(LNgoru-h4=}<*Fv4~0pj*{Kzpo?cy3O@iHA3S%pM=E zmf}^!s%hw#U)%c5)|THx<0!ozx0Scq^;yDO$;j>4$KlezA~85LY7=x(R24`)2vMOTXncSwTXo^M$k6t_g=r)-8B|;lFtTdV zt9jCO|jrP52 zFL0^PER4*3l&|f-q1}8bwis+)#WX$rJ31%p3MP#yw&!aLT^z|64#Sne^WgS#rjxWV zEp~S6$}s*0AcO}6NlzluP{6xQ7P(|H$6RPCx*W>!X++DF3}1S?FA|zKa|PLB<;b4zf9+)0`XUzJ+I`R z%8T{1r0aLD1LTwa=%1*bOP_YIzUv+eFN@QXz;wL9Gz}zsz3#RI0e~@Mp+FnT2y`S= z@FG&Kud$VehbyjuKt0$EYsKb8z{=kok2_*B@oo3{wvESed3LNQjP0H9bq~%^u8}0i z18og%f3Il$p_tM3+#VRg>w|yLwFJzxpudOFwdD;9l>cBG{vFoHt{N{aR20Ap98Eq7^L11drQHqzvH%%V*+$oxgi z+6|Q2)lh|hx8!t}j!U~qL+K-(Blv;es3bgr#-CB&xVQ(Zi%KxR`F-$6sr3YEGl&4g z7EiKkWcQCF#T!GCq+=i)T_jfH%bL%$5t5-HAvMT^Ma=LGw8WR>32cU;)WL)P=DH9h z)Tr;E>PSnFf%jfJ0}%zes_%Uw>=CG_teqMyuE#uxI->CIJz4TxwA6=&xh)+e(2jyU z>Z&d+PwNh!Hrnq^b{oArCGrqFZ|^+Z2ac}q8U6jvw$(^if%&?LB-O&oJnnMS(Q)$3 zpHS0`CFcC|hbuVRt= za&LHogk3IKEhtbEc^EyYt}S`N(-OtFq+O7WlJ&^R^#X ztj1{IEqSzqGO3A@N%RKajWduz_A>F4tKX!aX7A8(IQgBG-Oc6sZqolkEBrfG7bh?1 z`L7pHDF+)agDF5i%(UDYgUejcK=2UcWjB?r@NBj=%V5ZGMd6wd^-?%hM2Xa6^~s71 z^9x7k>R9c6RtY;!O^G!~^uy8`RxwxSE+@h$at!(3Z!uR^i z+GQ5kULb=^_z(v;20@(eNhhKtABnIITHHizFGrOP$)J-%5e~^fdPm*EpQ+q`(ZT2B zh^KD|yO#NbUst-x+S8!j>Ymv)3~vuj@FJ)Ae9`vm9S7TN<8O)Ug*1;*eQZq+|2^D+ zYD-DW=~;iib9Hq>)w}1jT(qoQoU9Cx)6H-#5>%w2JL^UyD2z>Tq7bN*Z2Ln1V$w!R zVb?wzN86xC<98L)9|kwt1t;PjTYb%p*3JTR6Y<*GQSIaHTINtq4@!m$*LDqqwF9Sr zsi`nsqMV~c2zbOXUqILTvBf3-o*p!$B1nr%2I%utDD_S=XmTMqMF0Y6!`)UmYaMw= zz$=7l)H?}vP%IL$6X5drNatNNri<2R6GkiJgSuWDHa;FLIU&7M>-t&wH$7Dn))(#h z{fqN00aiheYGcJYiScu$Tul3BKpLXcna|s zdh9U`Up&CgP6-A*Tz~blO8(-u?c^>(^e;9*Aa% zz8^r9jh}vdas=ZlT&kUk;O>42gT){On`WTh#MffX$a!c@`>!P%51(@bor^v1!Gd}E z@{oFO`A@u{Nhm&x@D{^9e~HtmRiw7Ha=d&ArEgLZ;lwykQ0Z3ZxO7_dPk_KUWnA6x##!i$m+j* z<m09#QmW`X2pX_Y@m=d*j8`s)pb$hgv z;NP6$;(olX^bZ8)=HgV;=G(mAX?)*Z*~;D~eKNgt>v-g5!jzh_dl~ zR~Cstf z3fOo9gsT(s-43#*HvR&3a}HUC5C#EdefGVb3#*_Uw+tRMY&yswn3B+7mhIZ)_>g zTFjRy(|m(1z&<6mE-r2dDf~nbur*l7nxh6F5>Sd;R``ZYra%qi4q4)lnc_>JUTA+SDaeM$!>fhT zC0TF(zGUKw6JKx+DkFoAAT@goDiNXTS)gzmw!R7Xw)$=?ecAppP8h5I>M@?49)0te zUqrf5FEkH@m=!BDhX|V$346NS=HhC1e#UPMqDIBcVP-jlQFAq{q_V4){l%YA@FJTS zSmi!?vv7l$vMRoY$9CN0x1Td^_^qGcCUArRYz4@1;XCr_!4JFG*;ppHxQr~eb|?&M zO2LBja+8;llcT*z@FpSK%V8t!l4Z#JngjhtnXVBNtrjnc*8oX0K{y9NLoJ|wz;^0C z6w$UI(_zg@PB`b|_>^oaIN3}l1(B6j>VJd4RO%w5zjk%qV7G_1E30@+>CBYMRC_Zx zCb;W=bYuOfazo|w5hqC~^x1-egM-=1`K*76)e!K#eqr18bQ3LYjnJA4siwR71Ocf+ zcS&P_1j)9H$;HCv@8mlg5Ju25i;+6?*u- zTRX4$YZHD`4w7`Nw_m-=!t;C9TYg?-c9VN!jdO$g@cjJZ=Fn;0y}l%a&C)z9OujW; zNj4_tN?NKpK~mLB>q*pdi##o|H7TXCL$=?WP5uH$skufvUO}d?TymkxFGg};I#X98 zp3$m-E~WdeqJLsUpdn;h7zeBztq0nOi*bi6>9k0o&`)l@Sv1U+Uc@R-J^pPAI{%*sPjfBHXBI9;JIjH{*fUp*tb0+JB)G)^=+ejUB3b8?QZFxXw7$?>JX*Eu^$tFKj4X` z>|~2+5A7QBp#m*Z74%5CG&LNSxiJzmTRIk7Q*T(vh|!_`a}_SgZAV2{x0`}>eg$hM zyJqLO!3*4{{tf$gL91~u_o8)c2d6#+SDo9zYR zCm2)`gcEpzQW}bJGbuGD0CP1JBRpDMx)WbOWA!+kJ_3~xbaT5|%@wqg<+vCdzoqaN z)*4NeQf8nzw~nS3vcCS|iqW!g!bJ3~=svc}ghiJ6d>$^%R=|Sb`mZN3+E%h2$BD~} z81S8j$4zPp{N$U;4dlm1#RW$k_&duoTE~=#PuHxz@r}C%5q6m-0S7#$QOt~ljSI21 z*xD=B@9v162*{#D!nAZ~dM5KeK}jYupWk*-lk#)fy_=`4T3{UercxP`t%B44tf~C^ z&>y{3ByFX%$FXVy70VnhASg~MOpMDDa_So6Vk?Tqp*-eOsvlpPi4Sx!?qmBbl_LIH zhNLPfq+;a&06ksKGFmP$oa&YP8+AnbnI~aJ7)G%3z*G#AJS%fewfn#w3-!lRB`Osx zi!9C&Cd%KNu|}WKo_6qw>py>+u}uM7mF*fjfAloQ_9oe?KY#mN&m4K4QPauQZU^?X zt?k=O!E~TU`&9+^cbU+-L43W631r*5niuuuNDUzLuzg$nJ8<3!@iQyk^H~SJEGH3J z11+813wWqL3sByr_uSR{n)(PT@x%E&_BeNGZnmA`0fC=lzT5p#7(mfT5{wKgG3}7~ zzQcGevCFBPa4c_2HVlRx+7>IRCL2r+3$7a@ohC)LWaTj%bkXZ_HhqTCxIyn@`AL`N zL-kqT)64fa$p>#JSNwY=Ey;tXTI7^WMA{|8sbv3NH5FDBi%N_Fa}Iq+2x&tpQ)p9J zbuU#gWAWu>)1GcCtM=>lqfh{kx+zpgnBL<%gTVC7=TE`grP(25*d&(|ultHXkCOPw zzcJ_Yp)~klgA0HHg&n0`O&;mN-yZ`%ufp-8TbAeHsP)H$sFM+ z?E2jT`d^}LZ2lhYY(nH&V`p92z6eCAG{}$1d8gAliI0z^B7|T=f?6!oBE^XxOa0 z1A|2KpF#OmTp~i~EQ0#Ft1Y6Vq$5IR0M~9-o`F4M6=G&iXor!R1BZ4b3Wkk#7a*^! zfwtsGXId;S;RtyY_wH$D+B<{JgkaOC0v=dQ?$f+sQa(bhoYh%ut3n;!pH%@e63(EJ zM@LmzQSX{nIU$uPO}&68?_z~Z>tBv6&L#5a@ zIfA~mlP2Na&68KIbOX-*-aSMphhN{Ea_Q)%>fgICQEzW5;)F3b@FN(0R=noR=oFpUv15M_ar2vit)i)0?AwFllX*+Z2SK4{@QB~h6T(E^KCvUn8y zu8I&%y=9ra&ry=4j>|Sy{y~bm4WFZ#d$9PQnuGaqhIlLXQ6~H}dy>D1wdeZ@SNJu4396?2Fw;M!>-l`Xq6#5+()M0hI{Bkc5c4 z&T60?VUPn#E^PX0G)-um(a|fS=%)%v!NKTH8I69RF9R99eW#dLGkW_3IKle4mI^M( zTHaAfIvG^#*kyuPOkf?Sz`I4JiW*Zuh(Wet_|I-DS1uo2gmYC@mj{gc@fwMl){dF)!NsQ zESznn=J*yz6Wx_uQh?ee3$^>GknNLi-}Tln&AAAEH4$ z^wPvCnD|IV2`VLHVM}6Z-&VojNGBqU{lV51b@+j%WIiB)e1vui@CZTgu?Nb90jUpC z$r6?jJ7F|zmo#m8b^YV1%4N!=5jzm%sI?C_zu#2#fvy?jw8h79DT^Zc2~(0qmHItG z@C4R5co+~IEtfZE>pKmOf`8k(|E=Bj4Y{bVJ`M>^jtP3b_l0vaFE90WmsQzxR67RJ zq1dt%n-24MW|a^Z(#2dbW6PT98pD{dX1s-#l!U&)5+w&KzKi*NRR_YGqZto8ObT6>gLT3fV5Ax_v9 z7T%6g^Au!Vg;$NoOtg5c#ExC0whTX9hnIiEhC3?0iFZS^Hv8<_16d$yag;QuLwKeO zr?uT$1DD$yQNZBRpaPMp_Wfh1B1awj(8MW-NQa#WP1kBCI({Au=65UYKdsBmnkJvr z$ZOug;w^tu+sKkhk2YslX;IVCy4bu5n3UlI4TpObh{OaPi(^(@CX^ya6u~g+gMbDt z`mkv^Tr@p?c;D`7*q|D4oMDfQ&L)sM`@L7CTMapL?p3?T>vf}KmVHjr@7UP?SLxvX zl~>j=PRF>ph0(~f(=&*zC%jad^+KBl4!v?~)3iC$NyRqmcOsb5FXq#lR+ghRa6}$TG1!p_1;&TP(1QF+sHml&eX1w&#n<1{R=h*%POO?l<{yNq z`2>m{0DD6$hpm77Neq~8F{{b$bBe>t9)F+bbkF$G@gqjYlIe7_7Z&#$!DL89GB=ct zH`h0hT(~a1cpF{G%!%wTKQIKHJnPS_kBT-4DStFgxG zC=FgWJ|g7gGCklm>VM$}??F53V;J_>9L~b`ICV%S^QKTWsh=-V*Z6#-Z46H>3kn5T zwXW-G$;cQexiN_rE20zpj#%MxC0FgW@xs|mjuqzQ+TP+*Q}~Iea*F^S&s3ALB$9 zF)SED4CtWTp(dmhMn*b8t2P^to|OE3EvBa+;i)H4d=lnjM|hH8zvV=rz%OI0`H@?o z&*UV4M*t}%j#9%+*U@1By#WkIvYy_6GM$){X?U zs%V!=NB~&POkv<}R3CKVBaMdFJ9RUCRnD%@je?b7`ATTK`0uNn$|W`9ohYuuPPOuX z#yfOfPuHqecp9BC!ae3_RVJZmH(oc?KC)}>5I0_blxS#|nXP0V{=R=#Dg^Zn)P(5w zL4HCt-tq}U4FyeM2&}-}Tva^Ht9!#XhUi1K8o)68jt?vC!l~(_FcLxuKD^lJk^0nq z_1rM}6t=IT5L|fqq~($XHH%Qa%+?chMr|A_nPW`lj}WLj8i?sKMXG1sfCb9kT(4Xs zSobWS)wEY^fGgX~Ya)Qu`j;A!^fZ~%QdE3?XmN!|#QH4v!Z*t*cM|RGdEB)&!2*;@ zWH@sQIc%n~)?MXtj@tPuw4~zv*n}(k1=1@ZX#p<}-yQvE0?pQ^W&&kVdtY({kMbqQ zaAZ#m3JTnrCbgbb;bgzCr|mKc9%>(bG8$?>oyvgor*A}@V3*aDyNAmdmCE!~8hCm> z^)uPng_6Mk{#U%;e(y(Ej0s*G-2vA6<+i`5x;#IZ2vqTqthmnOLtej*0!b6qsA}w4 z5=F1f-qgUYS_$U`9mnz9>KnMtgSr4K8kbGwlX5RynJ`s?{n7 z&&wXwc~qm1Cyw>0%M`OJtkLf?(Y%hxPy8z_oi{UNUPbEXv7xmtjM=too{}E-CZPS~ zn_4OzeX@3T!=G!UOR}A+_56+_lCt4bV6GehzO#-Sf2df2LaYdr=`*rKOE5?xkKclOppraPeKg^+{sxY;wcB+4$ zr$(`-+($8VbK1%G&Umb}ytVB&D(4Yn`iFmU{T0@0pp~0v-Se|Dgh80+lLYwgxPd2X zZOon+z^q*jjXAB!-WO4B?wrigMwqY;>SC3%JNayX@HyE2HH_-tC!5U=nHT?Ost#68 zW{*I6F9BSlueK2e5(=pMi*Cgx)H|mO7VhNWeTpniaL|`_vwIGLDR((sF+HmGUp$de zos9KiEtK-etx7@iJ?}IDXcD-wuEP{gSsA2<9Grl|O<$i+df>-g^%Y)gmu2Rk?e{ST zBrC2B0aPOogRyi1{^v|%QW3d8c-z|-nkJwd4e1F5cdIwqR+pxox4Fmp8(jRhXP_0X zXwDfD){HHtpsHeQ#0*jCJmRBPB1u6J=2A*seD0xSx+u-sN=kD>xX9i>aaMr)--CvA1Sif6o?*%R{Nd<?!I;f!- zh&E1K2OX-r8L?y1`T9n8e?KfSe%>LnUy=(1bt}k&x(#TN=j*(Lrb%*0r`>?B&aTm^ zN-FLk3_k%M<~{hA!< zg88B=C1Brw{XNP`S_C8%$Okzt%|Ds(s2Mytxz|}2=8H1fJ2r8rP2~qRnX&p$y6Z!_ zDjQ%epF8{{Dg!J67+^a08no)4U%*n>HAx0W9k&)dkm zoPkuFuEK<@ug*fxxpqq6YhNauzBH_e3&haZ(hL@7vv z>(5cdKn*9qf*Ii~_tdlmCu}%|D+g!$PV6g+{zejR zk6}x4RBwmo7|@{;qIVA4HPV~TTh1hjj$S(kzhK1odt2)J&>6?nCUdT;};Ahfj+THJ9h zta;);r9C>(S8Qu?zRb%g5Kp1*ZfL}aNp=OR#ZNgm*InBR4;<7__TZVi*w`D%I#gp} zgYR117?JVA{duwR;)X{Gg9}>E;jz&cI6F|=>5a>zMMw$+rU6_7v7iDYONA)iVK$0etB^wWH{zujTCS79W!JJ(VL+!XOmIdl zYk}CM1#yh>x_YsE7Ut*1;CKbuj=l{l2dT{-ljs`f=Z-_EISD3?h$<@M;KGhg!^sJZ zNCkIbXSUo=VvA|5{I;I#4V@SL@^+2JH zKz)_Az#b*q<G^Qnj*9rWckqn83WA|tg0#n9fux~&K3FE@|CpHE3z6iPN37aZ+#10PRiR#e>N zPuXBd7(cS$nY)zi>5lm+2O@>$3V$U|MyTGz<(Br5YM> zZ4bG{8T~|sArON!dPxOJuMX<>2NDJxeg4GH45D`y4by0`&GI zpkrg2<|cwlB?`LvGd4$2K0b5ntItYmqgpFTt7RzM5q)lunL)z8)^X7}{8Zt=FJ`$> zgd{^r%M(%^Y*=T@MWifvA;IHa^T1y;b=^v8;J2d?v=XQ6Bn@k>P$W=p6(KNSDN@$V@87!IQSY7`#}pbe&VIC{47jmu=g&_p)uBG_6ivbJ$78+MhqaYbcMPL@)NP7>okYO+oeAGL=NNcWe9@GKA)aUz00@vzgQb?gEkq!%j|WF2ePR?1+Bgt`X0IIFp$M^Eja?cQ z%Y!{a3g+9=TS%SCu7uUBI$scH5 z!dt%7S^-1X_Y*t+Wkz&4tp@^c>gOS%u0be0>_w7G|Y;$&yYHAM&pQkwHWHLLZ9&Vptahq)7if$I9) z@Q?{Q*<2lqR6;~42+HF`uIpxob2Z@JS~BJ8hL4R1L~jc+d0BQm4=))ycDqVvme&bN zGeoQ}D{j%7SfPanvqThlQ0VDBnt5CM_+6exzb;#s9 zCVOUe8_&H)GBZzqT;R30ZR6g09->AsTVKF{YFn=_l-sFd0WCh+Mh~~__L_fplnnIN zK+>0(8OeMC!JDFCD6=cW%$9Gubaq86p9Z8xYOfFao7_y|T&PnqM{sZ~wSU z#C+Se{)p=suBU!y39X8bUV@kPV0#r>Jn@&F$#*eOF3)L~#>UoNZL6J0FK2ESlvg{2 zWN-MfA9l+6^Z;kyh6Z!29${bHySa>?c79|UFO{~<*m->>m;#a1&x@^G_mcZUQ@x%c zCjcZpL zXC&FQG@}k&@No5oRC#oR%02kMe!8d}9D8%y@O0PMW-XmwJQpwS-tQjF4y$FlzF!A4 z*z0U+c|C}Wsl%x$iza#*$)pB77;7x6Co!#MCDQIT;9}faF^&<{s;da*nny>Q%5mZJ zusP9O$6_JnMmW07E>bqH!py?u$d~h!yW;7>o^m5w821!~93|24^ zRC@f4AqeQ_j-hHP&LqDSM5xfrrU$Tf7zID^q$kDx;!Qo@SWcG|9qMKC%i7VTygDfa zDg?%@?D4iqvlr9kjX6PGS`k&6ZMhToxY~c_QmnvTgQuEn6*@Y&e=BHh9lG{#*Z(XS z7Ri_oFX{B`0d87djD22NNkyb&^&0Bmf8J86xLJdT+h)j$6eEkR=S>)YJ7{esMoyq5 zKizaCp)FmNG}1Fu>uYFSF(y2O`Y2Wqg>!(KDd43-tt_^Z&ry|9R#ft>Yab6ML29l+ zy&*flOIQwB^p=PfC(RZg$rk68EuMWzCDYqXv(;A1iykXX$oJ!Dn52tWZ)AH2g?{}T z)uxe`rpt_fgN=1r$pAj-(bS8bVj}o=MKVytwR;`Ua2)Dwfl=5RWv&J z(j-_9owO}$MsSn?tMUO=LxHG2;EzRQQA>yg=vOyLtp+6`&@Mo#Si9Xw9$&Nl!Z)o# z7BnhfK}|n}dH-}N&;aGb^Ir9cq*=Q16lJhNx1D<@Dzy@$ckY${IB*MlBDOR}-4CY) z2G)2N0ACPkHz6As<@?&j^63*=0=?UY0p1t;#L|t@(vMk+bB;NrI`MHj&7r3LB?gSk zt0zVIOyz7FR zlMx_(Jh0sg5g7#B4Dy^1$6#Kyeu9dlj(1UNW1i~s%_*4nEdPX>DY@NP^#;Bs2xI_( zGuvuo4{1Hl>u_p=i?X)SEA` zZ4*YI$Td`oZwCJuj;{DTH zlPI}4MyH1y@|{NKxuE6?)n9nOW}g>;7lSrcqd1Tk`2?)pBFPbtmf{tw7H(^ai-@YF z^<$HpG#S@=x5n&f2tfjff^-aeeYDh6fQo90fiM0R;m88_4I1gy8noPJyMofvcveFT zDAmlF6wjuNP;8+AQK@w#OJOa?k`YA>6NBAmzNMIX>0hocxm2SAasnuZ5imk1no%(R z^;zP|VAzgh&9bJ!i(zCSG5&qKGi>j`J=eiKJym>$v449cBf)q0981dqb_rl#EgVm8 zyHvbDjPLOft@n4AQ}Mq-9qAj-&=wTLDZ_%Y_dh2oC&`f}M4*)*e2qo^IS_>uI7CDR z1dBaW+BHaSEsrp83hfRvVA>HZsw(>{Jy@ttMAXH4cw&?A85P5dAQwR&?j{l`Vp=v1 zsA{OnXl78=q$?w_;#25QP(@fN|MW9*^Twx;qC@)@qsf|@DIC*j8>}u`PDIztk3Ok= zsarS0CS73c3iV=a%jRtl%17mxbvJhkyUs6VjoMo+!4HwwD+KEv;?Mnt70=nU4u@3; zwyBv}LS7##$)myn?)qN+==4$3?F&yA$i517!Xau!pZTh+4UAoC4?RmaNd)~Rkxu0kwy>ewpr77LYn@xk-!6#BM|6lIc z%Ps=IxuLCAle4#-$zR}F6A!O{EGYoMe;o)j6VzG4Ob?#>82}vk{J-=vL{8OzP4`ZiaVRm0S!9PV|^FBHPC`azO`pjd!^=saFf%hHVCp8 z1waoL63@b%>$y&x_qSje!@y-5PskU>xFx{&=1S}}GQu3I@J7UK6q^oTU(OSy`hCs^ zupdXl#}WD5oVaYT>jhbCD5(n=N)2QMvEZn+?XpZ4+6Vk$YU6Mw_Hf?%#2f^{B+6Vt z%5+DHXrzg_z+o141^7o2bVmX|M`FE3^0L(#D|Ya%WdIvwPlN%`y7<5J9+GqJ@$CMx z#wD*=MS?hiQP%@Kz$?Uv`~~M^k__?M!|K7|4h;G{*)YRs$Ctdoo7nyq0Jp@czaeVE zhuqf_0_qI3>0BN^#JP452=>A9YE!c3!vFUEr6?3!6>Za)C_=$3hHRATr^I4cP~UasmvH4`(~#44)AFZQAAke_Ph<#6 zK1Ns!_zUo>1=DLTUgc$eYgaz}dZ_QnnJ(Mf|K^0q0C0BKKT6rY>Q3qv!(Qv!z3qzp zo!!5e|Nq)i*(dKcU+~Fjq)|%4$GXFHV@0$@>P7DbE8S7dJ>(mXH)t;?pMM|8BVtbY z!Z3>=VMFM;tTs7^BI#99(YVDi>?7oRz*kZ~*|NB~p=;JuhFBK9I+PZg2AmeJ5<96p z9h7281>v&mCFpYq+!Dum(O=dNj_;rY40vQChgNd0h@LUj!`4Sx-4myK(s#`-n1W&k z{&a$B6jvznkgP$egR=1mj^Wiqgoij~9ZSNS)LC)261NCS4UQ9SBqAyR?pZLREJkL*!Eg?TlZcD=r*f1u{XCiy*BsQoyDZaM90w0sL!<3 zBCD#bI=2pPPkxd!nOoAto|Ru0cWrj9dTsduH3SglFw~VN!UY>0c)G*w2I?)9J@s;EhPg_>YSuyYSh%Z zDvgzgu}UhnJZ>u5SQ%?I+c!)7m9iGc8Ri;x8>S!gyI|vq+ZD|#!k@o8=Yy?E*f_Vf zW}_?GE@z;Mp(@%eXS9srEZQ|^+YFQ~G{ZdhbNT^g4k^C=Pb~gv3?K}E@;~*E1pxo2 zAXETq05Sja>2Rn3AOOJbn^i!<;3P4 zDlM^AQ#O_^+iL5CtekkXU4Cy?DtGQ}+F_;Dprpyl5*8sS^70z*EY$+A7C4;4P9tto z93rTJt_ox*qh1EhPT9r^r1xg^Tn992NLHG_+JJ}h`CMv!bn>Ioe+E$HlcjwrV#$K~ zG%YqhI(?UU`LTmeQ~I4Me6IaDc#1yiKQ27utwgsr4>STR7kvDd$JCvx<13CnQE!-$ z-xe6L&jghJ8kSBKU9J_&KSf&xPoD|vm|u$3`TTmeXf<$6YqanEMLfys$KLl2 zd;e3l@pHmCQ2SHk(=^BYp*6(G{1GLm-=RDEpB|e61pPW;L}Szg08j-1F8rs__qzl3 zL==X^#726@V52!WFgP$1pxBt}Iju|#=MxPK<^k()+N(69G?O@m*EHJlfL>%yWHxM= zs`UVEOS-;bx?r+kt6*SgV7B=XeM`Dv;1D2D*T(ukd}Ag>P)1_i^mr8`^J7XAX|; z9|8dk;4zE-qYeHq;vxM)%+jd9KeFJzj`?q*{QroDOaLVOTYYYFqD=p19Rm>P2KYxQ z1OUif2LKRI{=d2Z;{SbNDPouS;)Lje>GLTm3n&W%gaAPV{HrBKMTCF~m~{?l6@m`N z0sv$KA^{F(03iSk0Rbm~36R2;jbgRdwqa(62f4`aaUupD7zH#Qy#o^ynK>?=HvRpD zlo*R|xBw6LY+_<`b3(!lFfuMpp;1R^+PPM-;S0At&O=Y*B+=nXI!A9d%!vl5gINV z3}G68#>~i>>u*iqo0ymy`n`ki^_e{)XOsuh$cSdC!q$K_&HQ}*vhcfglK)_(BvKwI zR92K=?)whx5{*RNmPwl@85j_Fw7|_Cl_{Xna=lr>aLxzE%$4?+z=|x#8uEM*gc>h3 zr0EzYyej98Z>WQ5K(SsXWB2Fd&SOi8qA~#OeN@_L!p;XyzCb9>ciweU=%QfWQjzn5 z`R(3Qc@-gb=DNuM)uzt*{W@p)m4HAX2ogrrH&W8UqFc+n&E75hYNdT`BfYSK+W%EH z8|v=kq=`F<12{+G5OG!P8JyS!Qc(lMtA!2t*V(@7C|&wk?5^9}Frg7o9QXsB!rcrB^w%SofEB=+37v zMzVBTl1azKMl(Ns?jz&z7QR<*2JxydTSeIT^tZ2)e-w}jZy5P<70YOabo32*h-lDTEN3$t6JkPZ5E$$b_dP(Me!spx0|*F%JOHfq>uxelJa*z{s>$Ud_Mr z{$h!><>)wRkM)*=S~+HaT%ctcaZ|{mgyOHBaC`aX$4>;A!@9*(Yj-t~!LK9{!etMo zI%sl}7{Z(F=vW`o|G-$6m@92kkClcF|JKboef7eNW)aesx#^xsR7^FOOjJYk#A7@J zNi+tabLZ1&sR(`qsBS`XROJysFGK)Fo#T26Xnib-6t;q_@TxUOk~mJN^WKlJZP`}K zk_L2}RWRk7w*%ELwneTp`4zCrX#PwRQf(>^;!+cfwHT-rGkMWRP!V30Vzz}QLvtB2nxT-C z$fJy)U?ydh#`3CXit%bT$ti=XSvZ3$!CMYTk=8mr_pELq$7sd5)wXy7b4H<59+uQ- zEJ#^NqpDN(&X=Ft-{A!1a-C5tx#$ZE$@bGS`y-1rOlG)aNQiNXo4ndg@mg-*Wh4Na z-pV1Ckp`2D31kjvNT=^`lE|rIrKLv%6(;8>v$ixhbU8#P;i)0lSjDvnkTlN<8%+{+ z^8EouFVKNJIKf`(#zAjOt@a*l@ZvZ)QOwX_SBWq*i%cPRnm?8O=ot64pqZ-Qr}w&H)m`T zglP^2L-NVZOg579OlKCP!!1d=N`_j5%F_FzUZZ)2b;C>z}xstBG#m)T!jJOF@$Tc^O{oDX_q0c$$JBm zv|-D>T(y&@#^Y8+n<_elWvyuK<4_si;bZkCqel}F5XKO+pgd28wVpMHr{u$B3pu}= z^MiY^USZ>7U-Q1@@f?kN8%LWnJM&GdsM2=b8sQ+Fna_^N$!b`kOld%EX)$mC93o16 z-%J0cq^5o~R>!HUaDps;wosphCmhCd`Yh>2bCIkTIQ`PkD2kh$w5tZrk}7E@&nItJ zzGF*KV|5>*d4toR88iM+OvXR&del3heG40pAi|y-xBY7pG0S~L%hdI>(ThuhPa?!i z$-)16D5h^3yOu6}C5ca&3cTQHppLW9-L!)PJhU8e{#H}wsCjht-FJS{>~>jnJ4bS) z?VvMB?XO?E0Dj^!?QRh^mrctMUNLHuzNPYppPNlE+fTxq{T_8frps9*ond$~gpRWoms!s=PmG~rKc8pC;6zNX{6fKAtREwi@sh$hVx9BRY> zfrE3~?r#0C!Een$#O`o7kijgc+kNlxbUG3SZ}$^ONJIp}$cT@G^iy1nfQhN+=;(`r zqAsZ!jZknM3`vYY7s!K)OUT31OQ9gXP-tK{?1(^*M zuu_>|xjeXBL9AMrD;)&p7=s0BwJ2O5L>^10qulv?c)lcNGmg-USfu@Z`KNjBdtf2& zNBDDUFZ=5VAL;iaZQ1WfEQ5uzUs0+Ltc*7WZ6HRNr z_1_OMrjdscV{`S0#?k!Us@`C0mWe-n~vk2 z<~7!VfnKQ%p)%L{d$$Q=J2SWpyX7g+%1v+9fg9jV!o?B@;)zVN!G^R*uXdffnNIT_ znXxuFFh?rkp?PA12-Y3Q@i*4vC?RFVctg`NFMhKrSukWM`<*@jIEOfevzz>a-=Gu4 z;VZ@P!3Dw``Ded25~9qzNC&1(C$mi@@?)5-9H+4UF+iMHIQHhhag_881}P?XALp9r zSHI$DsY5G=W?U!HKisY3EGS9knzr-Lka~>jKy2t4Yr$pwFD*4LiH=oeehk<9c@-Niqzd!KNHN=ci<^avF+LO>w$js^t!`Ou3wt` zK)qi!+g*0m9AExczfE6XTr6otjIZ#=_Ihk*$m#HaIvDM~ru1IWbI~}=ld4@e4@xG* zzRz&>XJ+ed4Q5{h1kVpzBJ{19qN(5#ERxKxZ`Xzob@MRyWv^a13^N7LfZ=>(4w-& zKp@4SF=`Sl3Py=Uq!1}28gocbHx5&)7AR*>oyb-$*NRlJ@mM}1RlM~3Y-w1xuCQtG zyMO)6Z-O88*&^~BumlOA(JG|ojX+Je8Qz%i+0mgXoc@MPrqQcf{{TIR^9}t5RbIRu z&$^=&^a}>G^`Z;6-VOAukG6kYZ0MOhB8VyW^?-YM<_n(W73gAE1;q8scEJ*Ch^YDV zD~N((SgxR%$6rcjc`+Suf+S<;j5^__h27w$lN$wKrspUN%#Oj@wqW3zJWV1^V!Qc1 zo~CS1Ewc(hy``YIAJ7XCBcq9mXP^oHos37Gfa{D=9?UD>)c@I#Rt)PgfHxY`Vu2Uy z^ET?J;G>|Q<%4P=;rL1C_Jv4Ppi_|!HxQN4*s`K~93v&Ju)E4xC&If9wBEv>B;=4D zL)feZzh;07P{VWYMrLb+p$wWFQ0P2kDmJ}ydDptER0I$)-b|{OCHV(t!CgcSFOy`@ zus6sI%5*TY@hU*UsAWTmP-F{}h0CunDB|obCLB4P2XBopUA~?ANhGQh3yt?aKMIf# z8?dSukXOS)86}sFL4}sqZ`c9&=P`cSI$Z&96-07x58^3j1ZO=OXnyI+(M|r?hMLb* z89Y?6zN4KMGn$#AGuL9hh%lBVYyid(E7(CZY~*U9qgH{F6RgWnTc|F=K^=3tV(<3# z?)*V!&Iyp&IxJ$Ot(If4;0jfxRm9e89S|0+#q~u!foiWVMR4R$<#wORhK@13pK{zl zG}x{X=A7h3^t1U6q2vlJt&?MyraW%r?vU3t8m_;>dCV7epRI4={tY8zy$(IN< zN&$LOBk7tb;4G85vyQYZF&@3UG9YAkj40Qa?fs51Hi`m&C=^S1bAAH|C}Mexpg|Cn z(tHMB+UEF@YSOAlamC`IxJG0(XdBn8_6JrfRdp+SuRd!6rug_%)|rdz+dNC`sfktY zIWsqB@*7n{=5f!=yZ5*O!H%;`jd|$LcstEI?tYL=Be7gyD4xv3TJ&Q+fO{K}vq#^^ zYwtcB!BpdXFRb;L(Z7(Kg74N9`{}fBhCwwg|htm*w)KWE__iDms z(8!V=t=QT-n?5Qt80IZ0I zJ*?+FaTYU+nwafe{Pr$z=|0>&9&;*uC01i_CM@ir{5T0#+V%>u3?Ghey6Dizm>(W8 zHu<@jPIh-<$qKlmNKvw{wyG>~E`Ay^`t{BPktK0uAJIje26$M9M1gE0-dUUqxLBvv z%${@v5KDuogC^drSe|aANW3^1bW&PQ1dpax)4Vtp@RDwkB8h+ncX1NH2L0+BBz|X5 z)KepWZXEy>AyimYLx0*@Hr@neu5_JXHuw?7Z4Q?gtGmP9v%m^-lgj+t7^tyfV)b;R zz+tM_78MM4kW;sFWCG1hOWWFkwpeSPryATjtIS5X)nn^aNqjF~@6Av6i*u~a?(Jzz z-A25s=V%2BJJ3o9ySXOlLGW9M;t&`lCCwL*5hMOc00vwLJy78n@Df~r6@z96DE@@E z0-f@We?lw#Z4u@G2pd(I4~57h{D5UnAJnSfuj`iVk^LVaM70vDRR_mah@mwqbhzXF z_TB$C+pa?|*yR2I3rzS3e01s?`D5SMw@>xFTBbhyU19bz`D{+5XL%2(E>=9CCWL#5;uawe+Z6-3Kjmf2ml9=>> z6gq+dGGlmKRD{H2NNs!~GCX|e21yjgZL+XFb2odXLkfHXB0T9fp4+VXiUh-gDbGK= zcSE8*Oy%8>sX)1aby*%b ztP{Ebc&z@{)5f?Xsv#!aeogN>UjPeUgUPwg1GXF(ghgm}65U^jGuQ=x2pGjm&=s zDR6KElcm&Wi&s@Q_K0NHwK>BFvuNmT&7aFhbrDK=Z|CvZfsE!d zdj$!T#gQ4}Eq-2$h9#aeL7VnZt}obHlzN3$x3Wbvw$lY1G-vYw9fv6|YHnYlPb?U} z$ujZeEM|vC62C*;3x3AX&y9?bDi6WWive=u<9=OtLG(9F73-#D?2nMEMFdS7xsFLI zWY|8a@VE)}I1i()JtMhOHyc8DvMm}QU|b2pwD?24aE4*T~ zge8u|bhkc|#G%qW&r!%B(lQR6>r8Y z@p+lzbDQTy<{jmuKQGPC`0O;L?v0t=@|1U@4x7%`&T3< zHZ-&c=d_+ZgQOul!XFBH+~+8g#6oe*VthbSP7(|KJe|9IpXKdVTLjyDeZSsWeYUuU zTQ4+s82jvCudPG3r5R}N7%;+=l8`U6BjX@?ZtDbc#4aR~(Tx6bI z(xGvC#QnA<55kT0;%F5M4yCN`cZ|gP0P&kb(*AJpFDY+h82S#b*Xn_$%P>Y5T%0D) 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

    EEM??(#mpS4}Cs)zn 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�~ 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

    (+t4EUfOWiP|7 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


    qZy$ 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 z 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 V`5|VI2oQ7>{M-iXWZH>x`G2E+in#y) From 59d72e40e430e87a111c28408b18c5ef0767d684 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 21 Aug 2020 11:32:24 -0700 Subject: [PATCH 082/115] convert some add'l files to adoc --- doc/scripts/convert_yaml_to_adoc.py | 144 ++ doc/scripts/gen-nodetool-docs.py | 83 ++ doc/source/modules/ROOT/pages/index.adoc | 1 + .../modules/ROOT/pages/native_protocol.adoc | 22 + .../examples/TEXT/native_protocol_v3.spec | 1040 +++++++++++++ .../examples/TEXT/native_protocol_v4.spec | 1191 +++++++++++++++ .../examples/TEXT/native_protocol_v5.spec | 1281 +++++++++++++++++ .../modules/cassandra/pages/cql/SASI.adoc | 809 +++++++++++ 8 files changed, 4571 insertions(+) create mode 100644 doc/scripts/convert_yaml_to_adoc.py create mode 100644 doc/scripts/gen-nodetool-docs.py create mode 100644 doc/source/modules/ROOT/pages/native_protocol.adoc create mode 100644 doc/source/modules/cassandra/examples/TEXT/native_protocol_v3.spec create mode 100644 doc/source/modules/cassandra/examples/TEXT/native_protocol_v4.spec create mode 100644 doc/source/modules/cassandra/examples/TEXT/native_protocol_v5.spec create mode 100644 doc/source/modules/cassandra/pages/cql/SASI.adoc diff --git a/doc/scripts/convert_yaml_to_adoc.py b/doc/scripts/convert_yaml_to_adoc.py new file mode 100644 index 000000000000..c0cac0bfc769 --- /dev/null +++ b/doc/scripts/convert_yaml_to_adoc.py @@ -0,0 +1,144 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +A script to convert cassandra.yaml into Asciidoc for +the online documentation. + +Usage: + +YAML_INPUT=conf/cassandra.yaml +YAML_OUTPUT=source/modules/cassandra/pages/configuration/cass_yaml_file.adoc + + convert_yaml_to_adoc.py $YAML_INPUT $YAML_OUTPUT +""" + +import sys +import re + +# Detects options, whether commented or uncommented. +# Group 1 will be non-empty if the option is commented out. +# Group 2 will contain the option name. +# Group 3 will contain the default value, if one exists. +option_re = re.compile(r"^(# ?)?([a-z0-9_]+): ?([^/].*)") + +# Detects normal comment lines. +commented_re = re.compile(r"^# ?(.*)") + +# A set of option names that have complex values (i.e. lists or dicts). +# This list is hardcoded because there did not seem to be another +# good way to reliably detect this case, especially considering +# that these can be commented out (making it useless to use a yaml parser). +COMPLEX_OPTIONS = ( + 'seed_provider', + 'data_file_directories', + 'commitlog_compression', + 'hints_compression', + 'server_encryption_options', + 'client_encryption_options', + 'transparent_data_encryption_options', + 'hinted_handoff_disabled_datacenters' +) + +def convert(yaml_file, dest_file): + with open(yaml_file, 'r') as f: + # Trim off the boilerplate header + lines = f.readlines()[7:] + + with open(dest_file, 'w') as outfile: + outfile.write("= cassandra.yaml file configuration\n") + + # since comments preceed an option, this holds all of the comment + # lines we've seen since the last option + comments_since_last_option = [] + line_iter = iter(lines) + while True: + try: + line = next(line_iter) + except StopIteration: + break + + match = option_re.match(line) + if match: + option_name = match.group(2) + is_commented = bool(match.group(1)) + + is_complex = option_name in COMPLEX_OPTIONS + complex_option = read_complex_option(line_iter) if is_complex else None + + write_section_header(option_name, outfile) + write_comments(comments_since_last_option, is_commented, outfile) + if is_complex: + write_complex_option(complex_option, outfile) + else: + maybe_write_default_value(match, outfile) + comments_since_last_option = [] + else: + comment_match = commented_re.match(line) + if comment_match: + comments_since_last_option.append(comment_match.group(1)) + elif line == "\n": + comments_since_last_option.append('') + + +def write_section_header(option_name, outfile): + outfile.write("\n") + outfile.write("== `%s`\n\n" % (option_name,)) + + +def write_comments(comment_lines, is_commented, outfile): + if is_commented: + outfile.write("*This option is commented out by default.*\n") + + for comment in comment_lines: + if "SAFETY THRESHOLDS" not in comment_lines: + outfile.write(comment + "\n") + + +def maybe_write_default_value(option_match, outfile): + default_value = option_match.group(3) + if default_value and default_value != "\n": + outfile.write("\n_Default Value:_ %s\n" % (default_value,)) + + +def read_complex_option(line_iter): + option_lines = [] + try: + while True: + line = next(line_iter) + if line == '\n': + return option_lines + else: + option_lines.append(line) + except StopIteration: + return option_lines + + +def write_complex_option(lines, outfile): + outfile.write("\n_Default Value (complex option)_:\n\n....\n") + for line in lines: + outfile.write((" " * 4) + line) + outfile.write("....\n") + + +if __name__ == '__main__': + if len(sys.argv) != 3: + print >> sys.stderr, "Usage: %s " % (sys.argv[0],) + sys.exit(1) + + yaml_file = sys.argv[1] + dest_file = sys.argv[2] + convert(yaml_file, dest_file) diff --git a/doc/scripts/gen-nodetool-docs.py b/doc/scripts/gen-nodetool-docs.py new file mode 100644 index 000000000000..420ce473ad9a --- /dev/null +++ b/doc/scripts/gen-nodetool-docs.py @@ -0,0 +1,83 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +A script to use nodetool to generate documentation for nodetool +""" +from __future__ import print_function + +import os +import re +import sys +import subprocess +from subprocess import PIPE +from subprocess import Popen + +if(os.environ.get("SKIP_NODETOOL") == "1"): + sys.exit(0) + + +nodetool = "../bin/nodetool" +outdir = "source/modules/cassandra/pages/tools/nodetool" +examplesdir = "source/modules/cassandra/examples/TEXT/NODETOOL" +helpfilename = outdir + "/nodetool.txt" +command_re = re.compile("( )([_a-z]+)") +commandADOCContent = "== {0}\n\n== Usage\n[source,plaintext]\n----\ninclude::example$TEXT/NODETOOL/{0}.txt[]\n----\n" + +# create the documentation directory +if not os.path.exists(outdir): + os.makedirs(outdir) + +# create the base help file to use for discovering the commands +def create_help_file(): + with open(helpfilename, "w+") as output_file: + try: + subprocess.check_call([nodetool, "help"], stdout=output_file) + except subprocess.CalledProcessError as cpe: + print( + 'ERROR: Nodetool failed to run, you likely need to build ' + 'cassandra using ant jar from the top level directory' + ) + raise cpe + +# for a given command, create the help file and an ADOC file to contain it +def create_adoc(command): + if command: + cmdName = command.group(0).strip() + cmdFilename = examplesdir + "/" + cmdName + ".txt" + adocFilename = outdir + "/" + cmdName + ".adoc" + with open(cmdFilename, "wb+") as cmdFile: + proc = Popen([nodetool, "help", cmdName], stdin=PIPE, stdout=PIPE) + (out, err) = proc.communicate() + cmdFile.write(out) + with open(adocFilename, "w+") as adocFile: + adocFile.write(commandADOCContent.format(cmdName,cmdName,cmdName)) + +# create base file +create_help_file() + +# create the main usage page +with open(outdir + "/nodetool.adoc", "w+") as output: + with open(helpfilename, "r+") as helpfile: + output.write("== Nodetool\n\n== Usage\n\n") + for commandLine in helpfile: + command = command_re.sub(r'\nxref:tools/nodetool/\2.adoc[\2] - ',commandLine) + output.write(command) + +# create the command usage pages +with open(helpfilename, "r+") as helpfile: + for commandLine in helpfile: + command = command_re.match(commandLine) + create_adoc(command) diff --git a/doc/source/modules/ROOT/pages/index.adoc b/doc/source/modules/ROOT/pages/index.adoc index d7f9295def22..ec7bdbae1bfe 100644 --- a/doc/source/modules/ROOT/pages/index.adoc +++ b/doc/source/modules/ROOT/pages/index.adoc @@ -48,3 +48,4 @@ to do so by submitting your contribution like any other patch following == The rest of the information * xref:sitestuff:community.adoc[Community] * xref:sitestuff:download.adoc[Download] +* xref:native_protocol.adoc[Native Protocols] diff --git a/doc/source/modules/ROOT/pages/native_protocol.adoc b/doc/source/modules/ROOT/pages/native_protocol.adoc new file mode 100644 index 000000000000..93efd41767d2 --- /dev/null +++ b/doc/source/modules/ROOT/pages/native_protocol.adoc @@ -0,0 +1,22 @@ += Native protocols + +== Native Protocol Version 3 + +[source, plaintext] +---- +include::example$TEXT/native_protocol_v3.spec[Version 3] +---- + +== Native Protocol Version 4 + +[source, plaintext] +---- +include::example$TEXT/native_protocol_v4.spec[Version 4] +---- + +== Native Protocol Version 5 + +[source, plaintext] +---- +include::example$TEXT/native_protocol_v5.spec[Version 5] +---- diff --git a/doc/source/modules/cassandra/examples/TEXT/native_protocol_v3.spec b/doc/source/modules/cassandra/examples/TEXT/native_protocol_v3.spec new file mode 100644 index 000000000000..9b1084ba1a3f --- /dev/null +++ b/doc/source/modules/cassandra/examples/TEXT/native_protocol_v3.spec @@ -0,0 +1,1040 @@ + + CQL BINARY PROTOCOL v3 + + +Table of Contents + + 1. Overview + 2. Frame header + 2.1. version + 2.2. flags + 2.3. stream + 2.4. opcode + 2.5. length + 3. Notations + 4. Messages + 4.1. Requests + 4.1.1. STARTUP + 4.1.2. AUTH_RESPONSE + 4.1.3. OPTIONS + 4.1.4. QUERY + 4.1.5. PREPARE + 4.1.6. EXECUTE + 4.1.7. BATCH + 4.1.8. REGISTER + 4.2. Responses + 4.2.1. ERROR + 4.2.2. READY + 4.2.3. AUTHENTICATE + 4.2.4. SUPPORTED + 4.2.5. RESULT + 4.2.5.1. Void + 4.2.5.2. Rows + 4.2.5.3. Set_keyspace + 4.2.5.4. Prepared + 4.2.5.5. Schema_change + 4.2.6. EVENT + 4.2.7. AUTH_CHALLENGE + 4.2.8. AUTH_SUCCESS + 5. Compression + 6. Data Type Serialization Formats + 7. User Defined Type Serialization + 8. Result paging + 9. Error codes + 10. Changes from v2 + + +1. Overview + + The CQL binary protocol is a frame based protocol. Frames are defined as: + + 0 8 16 24 32 40 + +---------+---------+---------+---------+---------+ + | version | flags | stream | opcode | + +---------+---------+---------+---------+---------+ + | length | + +---------+---------+---------+---------+ + | | + . ... body ... . + . . + . . + +---------------------------------------- + + The protocol is big-endian (network byte order). + + Each frame contains a fixed size header (9 bytes) followed by a variable size + body. The header is described in Section 2. The content of the body depends + on the header opcode value (the body can in particular be empty for some + opcode values). The list of allowed opcode is defined Section 2.4 and the + details of each corresponding message is described Section 4. + + The protocol distinguishes 2 types of frames: requests and responses. Requests + are those frame sent by the clients to the server, response are the ones sent + by the server. Note however that the protocol supports server pushes (events) + so responses does not necessarily come right after a client request. + + Note to client implementors: clients library should always assume that the + body of a given frame may contain more data than what is described in this + document. It will however always be safe to ignore the remaining of the frame + body in such cases. The reason is that this may allow to sometimes extend the + protocol with optional features without needing to change the protocol + version. + + + +2. Frame header + +2.1. version + + The version is a single byte that indicate both the direction of the message + (request or response) and the version of the protocol in use. The up-most bit + of version is used to define the direction of the message: 0 indicates a + request, 1 indicates a responses. This can be useful for protocol analyzers to + distinguish the nature of the packet from the direction which it is moving. + The rest of that byte is the protocol version (3 for the protocol defined in + this document). In other words, for this version of the protocol, version will + have one of: + 0x03 Request frame for this protocol version + 0x83 Response frame for this protocol version + + Please note that the while every message ship with the version, only one version + of messages is accepted on a given connection. In other words, the first message + exchanged (STARTUP) sets the version for the connection for the lifetime of this + connection. + + This document describe the version 3 of the protocol. For the changes made since + version 2, see Section 10. + + +2.2. flags + + Flags applying to this frame. The flags have the following meaning (described + by the mask that allow to select them): + 0x01: Compression flag. If set, the frame body is compressed. The actual + compression to use should have been set up beforehand through the + Startup message (which thus cannot be compressed; Section 4.1.1). + 0x02: Tracing flag. For a request frame, this indicate the client requires + tracing of the request. Note that not all requests support tracing. + Currently, only QUERY, PREPARE and EXECUTE queries support tracing. + Other requests will simply ignore the tracing flag if set. If a + request support tracing and the tracing flag was set, the response to + this request will have the tracing flag set and contain tracing + information. + If a response frame has the tracing flag set, its body contains + a tracing ID. The tracing ID is a [uuid] and is the first thing in + the frame body. The rest of the body will then be the usual body + corresponding to the response opcode. + + The rest of the flags is currently unused and ignored. + +2.3. stream + + A frame has a stream id (a [short] value). When sending request messages, this + stream id must be set by the client to a non-negative value (negative stream id + are reserved for streams initiated by the server; currently all EVENT messages + (section 4.2.6) have a streamId of -1). If a client sends a request message + with the stream id X, it is guaranteed that the stream id of the response to + that message will be X. + + This allow to deal with the asynchronous nature of the protocol. If a client + sends multiple messages simultaneously (without waiting for responses), there + is no guarantee on the order of the responses. For instance, if the client + writes REQ_1, REQ_2, REQ_3 on the wire (in that order), the server might + respond to REQ_3 (or REQ_2) first. Assigning different stream id to these 3 + requests allows the client to distinguish to which request an received answer + respond to. As there can only be 32768 different simultaneous streams, it is up + to the client to reuse stream id. + + Note that clients are free to use the protocol synchronously (i.e. wait for + the response to REQ_N before sending REQ_N+1). In that case, the stream id + can be safely set to 0. Clients should also feel free to use only a subset of + the 32768 maximum possible stream ids if it is simpler for those + implementation. + +2.4. opcode + + An integer byte that distinguish the actual message: + 0x00 ERROR + 0x01 STARTUP + 0x02 READY + 0x03 AUTHENTICATE + 0x05 OPTIONS + 0x06 SUPPORTED + 0x07 QUERY + 0x08 RESULT + 0x09 PREPARE + 0x0A EXECUTE + 0x0B REGISTER + 0x0C EVENT + 0x0D BATCH + 0x0E AUTH_CHALLENGE + 0x0F AUTH_RESPONSE + 0x10 AUTH_SUCCESS + + Messages are described in Section 4. + + (Note that there is no 0x04 message in this version of the protocol) + + +2.5. length + + A 4 byte integer representing the length of the body of the frame (note: + currently a frame is limited to 256MB in length). + + +3. Notations + + To describe the layout of the frame body for the messages in Section 4, we + define the following: + + [int] A 4 bytes signed integer + [long] A 8 bytes signed integer + [short] A 2 bytes unsigned integer + [string] A [short] n, followed by n bytes representing an UTF-8 + string. + [long string] An [int] n, followed by n bytes representing an UTF-8 string. + [uuid] A 16 bytes long uuid. + [string list] A [short] n, followed by n [string]. + [bytes] A [int] n, followed by n bytes if n >= 0. If n < 0, + no byte should follow and the value represented is `null`. + [short bytes] A [short] n, followed by n bytes if n >= 0. + + [option] A pair of where is a [short] representing + the option id and depends on that option (and can be + of size 0). The supported id (and the corresponding ) + will be described when this is used. + [option list] A [short] n, followed by n [option]. + [inet] An address (ip and port) to a node. It consists of one + [byte] n, that represents the address size, followed by n + [byte] representing the IP address (in practice n can only be + either 4 (IPv4) or 16 (IPv6)), following by one [int] + representing the port. + [consistency] A consistency level specification. This is a [short] + representing a consistency level with the following + correspondance: + 0x0000 ANY + 0x0001 ONE + 0x0002 TWO + 0x0003 THREE + 0x0004 QUORUM + 0x0005 ALL + 0x0006 LOCAL_QUORUM + 0x0007 EACH_QUORUM + 0x0008 SERIAL + 0x0009 LOCAL_SERIAL + 0x000A LOCAL_ONE + + [string map] A [short] n, followed by n pair where and + are [string]. + [string multimap] A [short] n, followed by n pair where is a + [string] and is a [string list]. + + +4. Messages + +4.1. Requests + + Note that outside of their normal responses (described below), all requests + can get an ERROR message (Section 4.2.1) as response. + +4.1.1. STARTUP + + Initialize the connection. The server will respond by either a READY message + (in which case the connection is ready for queries) or an AUTHENTICATE message + (in which case credentials will need to be provided using AUTH_RESPONSE). + + This must be the first message of the connection, except for OPTIONS that can + be sent before to find out the options supported by the server. Once the + connection has been initialized, a client should not send any more STARTUP + message. + + The body is a [string map] of options. Possible options are: + - "CQL_VERSION": the version of CQL to use. This option is mandatory and + currenty, the only version supported is "3.0.0". Note that this is + different from the protocol version. + - "COMPRESSION": the compression algorithm to use for frames (See section 5). + This is optional, if not specified no compression will be used. + + +4.1.2. AUTH_RESPONSE + + Answers a server authentication challenge. + + Authentication in the protocol is SASL based. The server sends authentication + challenges (a bytes token) to which the client answer with this message. Those + exchanges continue until the server accepts the authentication by sending a + AUTH_SUCCESS message after a client AUTH_RESPONSE. It is however that client that + initiate the exchange by sending an initial AUTH_RESPONSE in response to a + server AUTHENTICATE request. + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + The response to a AUTH_RESPONSE is either a follow-up AUTH_CHALLENGE message, + an AUTH_SUCCESS message or an ERROR message. + + +4.1.3. OPTIONS + + Asks the server to return what STARTUP options are supported. The body of an + OPTIONS message should be empty and the server will respond with a SUPPORTED + message. + + +4.1.4. QUERY + + Performs a CQL query. The body of the message must be: + + where is a [long string] representing the query and + must be + [[name_1]...[name_n]][][][][] + where: + - is the [consistency] level for the operation. + - is a [byte] whose bits define the options for this query and + in particular influence what the remainder of the message contains. + A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given there mask: + 0x01: Values. In that case, a [short] followed by [bytes] + values are provided. Those value are used for bound variables in + the query. Optionally, if the 0x40 flag is present, each value + will be preceded by a [string] name, representing the name of + the marker the value must be binded to. This is optional, and + if not present, values will be binded by position. + 0x02: Skip_metadata. If present, the Result Set returned as a response + to that query (if any) will have the NO_METADATA flag (see + Section 4.2.5.2). + 0x04: Page_size. In that case, is an [int] + controlling the desired page size of the result (in CQL3 rows). + See the section on paging (Section 8) for more details. + 0x08: With_paging_state. If present, should be present. + is a [bytes] value that should have been returned + in a result set (Section 4.2.5.2). If provided, the query will be + executed but starting from a given paging state. This also to + continue paging on a different node from the one it has been + started (See Section 8 for more details). + 0x10: With serial consistency. If present, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consitency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else that a + conditional update/insert. + 0x20: With default timestamp. If present, should be present. + is a [long] representing the default timestamp for the query + in microseconds (negative values are discouraged but supported for + backward compatibility reasons except for the smallest negative + value (-2^63) that is forbidden). If provided, this will + replace the server side assigned timestamp as default timestamp. + Note that a timestamp in the query itself will still override + this timestamp. This is entirely optional. + 0x40: With names for values. This only makes sense if the 0x01 flag is set and + is ignored otherwise. If present, the values from the 0x01 flag will + be preceded by a name (see above). Note that this is only useful for + QUERY requests where named bind markers are used; for EXECUTE statements, + since the names for the expected values was returned during preparation, + a client can always provide values in the right order without any names + and using this flag, while supported, is almost surely inefficient. + + Note that the consistency is ignored by some queries (USE, CREATE, ALTER, + TRUNCATE, ...). + + The server will respond to a QUERY message with a RESULT message, the content + of which depends on the query. + + +4.1.5. PREPARE + + Prepare a query for later execution (through EXECUTE). The body consists of + the CQL query to prepare as a [long string]. + + The server will respond with a RESULT message with a `prepared` kind (0x0004, + see Section 4.2.5). + + +4.1.6. EXECUTE + + Executes a prepared query. The body of the message must be: + + where is the prepared query ID. It's the [short bytes] returned as a + response to a PREPARE message. As for , it has the exact + same definition than in QUERY (see Section 4.1.4). + + The response from the server will be a RESULT message. + + +4.1.7. BATCH + + Allows executing a list of queries (prepared or not) as a batch (note that + only DML statements are accepted in a batch). The body of the message must + be: + ...[][] + where: + - is a [byte] indicating the type of batch to use: + - If == 0, the batch will be "logged". This is equivalent to a + normal CQL3 batch statement. + - If == 1, the batch will be "unlogged". + - If == 2, the batch will be a "counter" batch (and non-counter + statements will be rejected). + - is a [byte] whose bits define the options for this query and + in particular influence the remainder of the message contains. It is similar + to the from QUERY and EXECUTE methods, except that the 4 rightmost + bits must always be 0 as their corresponding option do not make sense for + Batch. A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given there mask: + 0x10: With serial consistency. If present, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consitency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else that a + conditional update/insert. + 0x20: With default timestamp. If present, should be present. + is a [long] representing the default timestamp for the query + in microseconds. If provided, this will replace the server side assigned + timestamp as default timestamp. Note that a timestamp in the query itself + will still override this timestamp. This is entirely optional. + 0x40: With names for values. If set, then all values for all must be + preceded by a [string] that have the same meaning as in QUERY + requests [IMPORTANT NOTE: this feature does not work and should not be + used. It is specified in a way that makes it impossible for the server + to implement. This will be fixed in a future version of the native + protocol. See https://issues.apache.org/jira/browse/CASSANDRA-10246 for + more details]. + - is a [short] indicating the number of following queries. + - ... are the queries to execute. A must be of the + form: + []...[] + where: + - is a [byte] indicating whether the following query is a prepared + one or not. value must be either 0 or 1. + - depends on the value of . If == 0, it should be + a [long string] query string (as in QUERY, the query string might contain + bind markers). Otherwise (that is, if == 1), it should be a + [short bytes] representing a prepared query ID. + - is a [short] indicating the number (possibly 0) of following values. + - is the optional name of the following . It must be present + if and only if the 0x40 flag is provided for the batch. + - is the [bytes] to use for bound variable i (of bound variable + if the 0x40 flag is used). + - is the [consistency] level for the operation. + - is only present if the 0x10 flag is set. In that case, + is the [consistency] level for the serial phase of + conditional updates. That consitency can only be either SERIAL or + LOCAL_SERIAL and if not present will defaults to SERIAL. This option will + be ignored for anything else that a conditional update/insert. + + The server will respond with a RESULT message. + + +4.1.8. REGISTER + + Register this connection to receive some type of events. The body of the + message is a [string list] representing the event types to register to. See + section 4.2.6 for the list of valid event types. + + The response to a REGISTER message will be a READY message. + + Please note that if a client driver maintains multiple connections to a + Cassandra node and/or connections to multiple nodes, it is advised to + dedicate a handful of connections to receive events, but to *not* register + for events on all connections, as this would only result in receiving + multiple times the same event messages, wasting bandwidth. + + +4.2. Responses + + This section describes the content of the frame body for the different + responses. Please note that to make room for future evolution, clients should + support extra informations (that they should simply discard) to the one + described in this document at the end of the frame body. + +4.2.1. ERROR + + Indicates an error processing a request. The body of the message will be an + error code ([int]) followed by a [string] error message. Then, depending on + the exception, more content may follow. The error codes are defined in + Section 9, along with their additional content if any. + + +4.2.2. READY + + Indicates that the server is ready to process queries. This message will be + sent by the server either after a STARTUP message if no authentication is + required, or after a successful CREDENTIALS message. + + The body of a READY message is empty. + + +4.2.3. AUTHENTICATE + + Indicates that the server require authentication, and which authentication + mechanism to use. + + The authentication is SASL based and thus consists on a number of server + challenges (AUTH_CHALLENGE, Section 4.2.7) followed by client responses + (AUTH_RESPONSE, Section 4.1.2). The Initial exchange is however boostrapped + by an initial client response. The details of that exchange (including how + much challenge-response pair are required) are specific to the authenticator + in use. The exchange ends when the server sends an AUTH_SUCCESS message or + an ERROR message. + + This message will be sent following a STARTUP message if authentication is + required and must be answered by a AUTH_RESPONSE message from the client. + + The body consists of a single [string] indicating the full class name of the + IAuthenticator in use. + + +4.2.4. SUPPORTED + + Indicates which startup options are supported by the server. This message + comes as a response to an OPTIONS message. + + The body of a SUPPORTED message is a [string multimap]. This multimap gives + for each of the supported STARTUP options, the list of supported values. + + +4.2.5. RESULT + + The result to a query (QUERY, PREPARE, EXECUTE or BATCH messages). + + The first element of the body of a RESULT message is an [int] representing the + `kind` of result. The rest of the body depends on the kind. The kind can be + one of: + 0x0001 Void: for results carrying no information. + 0x0002 Rows: for results to select queries, returning a set of rows. + 0x0003 Set_keyspace: the result to a `use` query. + 0x0004 Prepared: result to a PREPARE message. + 0x0005 Schema_change: the result to a schema altering query. + + The body for each kind (after the [int] kind) is defined below. + + +4.2.5.1. Void + + The rest of the body for a Void result is empty. It indicates that a query was + successful without providing more information. + + +4.2.5.2. Rows + + Indicates a set of rows. The rest of body of a Rows result is: + + where: + - is composed of: + [][?...] + where: + - is an [int]. The bits of provides information on the + formatting of the remaining informations. A flag is set if the bit + corresponding to its `mask` is set. Supported flags are, given there + mask: + 0x0001 Global_tables_spec: if set, only one table spec (keyspace + and table name) is provided as . If not + set, is not present. + 0x0002 Has_more_pages: indicates whether this is not the last + page of results and more should be retrieve. If set, the + will be present. The is a + [bytes] value that should be used in QUERY/EXECUTE to + continue paging and retrieve the remained of the result for + this query (See Section 8 for more details). + 0x0004 No_metadata: if set, the is only composed of + these , the and optionally the + (depending on the Has_more_pages flage) but + no other information (so no nor ). + This will only ever be the case if this was requested + during the query (see QUERY and RESULT messages). + - is an [int] representing the number of columns selected + by the query this result is of. It defines the number of + elements in and the number of element for each row in . + - is present if the Global_tables_spec is set in + . If present, it is composed of two [string] representing the + (unique) keyspace name and table name the columns return are of. + - specifies the columns returned in the query. There is + such column specifications that are composed of: + ()? + The initial and are two [string] are only present + if the Global_tables_spec flag is not set. The is a + [string] and is an [option] that correspond to the description + (what this description is depends a bit on the context: in results to + selects, this will be either the user chosen alias or the selection used + (often a colum name, but it can be a function call too). In results to + a PREPARE, this will be either the name of the bind variable corresponding + or the column name for the variable if it is "anonymous") and type of + the corresponding result. The option for is either a native + type (see below), in which case the option has no value, or a + 'custom' type, in which case the value is a [string] representing + the full qualified class name of the type represented. Valid option + ids are: + 0x0000 Custom: the value is a [string], see above. + 0x0001 Ascii + 0x0002 Bigint + 0x0003 Blob + 0x0004 Boolean + 0x0005 Counter + 0x0006 Decimal + 0x0007 Double + 0x0008 Float + 0x0009 Int + 0x000B Timestamp + 0x000C Uuid + 0x000D Varchar + 0x000E Varint + 0x000F Timeuuid + 0x0010 Inet + 0x0020 List: the value is an [option], representing the type + of the elements of the list. + 0x0021 Map: the value is two [option], representing the types of the + keys and values of the map + 0x0022 Set: the value is an [option], representing the type + of the elements of the set + 0x0030 UDT: the value is ... + where: + - is a [string] representing the keyspace name this + UDT is part of. + - is a [string] representing the UDT name. + - is a [short] reprensenting the number of fields of + the UDT, and thus the number of pair + following + - is a [string] representing the name of the + i_th field of the UDT. + - is an [option] representing the type of the + i_th field of the UDT. + 0x0031 Tuple: the value is ... where is a [short] + representing the number of value in the type, and + are [option] representing the type of the i_th component + of the tuple + + - is an [int] representing the number of rows present in this + result. Those rows are serialized in the part. + - is composed of ... where m is . + Each is composed of ... where n is + and where is a [bytes] representing the value + returned for the jth column of the ith row. In other words, + is composed of ( * ) [bytes]. + + +4.2.5.3. Set_keyspace + + The result to a `use` query. The body (after the kind [int]) is a single + [string] indicating the name of the keyspace that has been set. + + +4.2.5.4. Prepared + + The result to a PREPARE message. The rest of the body of a Prepared result is: + + where: + - is [short bytes] representing the prepared query ID. + - is defined exactly as for a Rows RESULT (See section 4.2.5.2; you + can however assume that the Has_more_pages flag is always off) and + is the specification for the variable bound in this prepare statement. + - is defined exactly as but correspond to the + metadata for the resultSet that execute this query will yield. Note that + may be empty (have the No_metadata flag and 0 columns, See + section 4.2.5.2) and will be for any query that is not a Select. There is + in fact never a guarantee that this will non-empty so client should protect + themselves accordingly. The presence of this information is an + optimization that allows to later execute the statement that has been + prepared without requesting the metadata (Skip_metadata flag in EXECUTE). + Clients can safely discard this metadata if they do not want to take + advantage of that optimization. + + Note that prepared query ID return is global to the node on which the query + has been prepared. It can be used on any connection to that node and this + until the node is restarted (after which the query must be reprepared). + +4.2.5.5. Schema_change + + The result to a schema altering query (creation/update/drop of a + keyspace/table/index). The body (after the kind [int]) is the same + as the body for a "SCHEMA_CHANGE" event, so 3 strings: + + Please refer to the section 4.2.6 below for the meaning of those fields. + + Note that queries to create and drop an index are considered as change + updating the table the index is on. + + +4.2.6. EVENT + + And event pushed by the server. A client will only receive events for the + type it has REGISTER to. The body of an EVENT message will start by a + [string] representing the event type. The rest of the message depends on the + event type. The valid event types are: + - "TOPOLOGY_CHANGE": events related to change in the cluster topology. + Currently, events are sent when new nodes are added to the cluster, and + when nodes are removed. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of change ("NEW_NODE", "REMOVED_NODE", or "MOVED_NODE") followed + by the address of the new/removed/moved node. + - "STATUS_CHANGE": events related to change of node status. Currently, + up/down events are sent. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of status change ("UP" or "DOWN") followed by the address of the + concerned node. + - "SCHEMA_CHANGE": events related to schema change. After the event type, + the rest of the message will be where: + - is a [string] representing the type of changed involved. + It will be one of "CREATED", "UPDATED" or "DROPPED". + - is a [string] that can be one of "KEYSPACE", "TABLE" or "TYPE" + and describes what has been modified ("TYPE" stands for modifications + related to user types). + - depends on the preceding . If is + "KEYSPACE", then will be a single [string] representing the + keyspace changed. Otherwise, if is "TABLE" or "TYPE", then + will be 2 [string]: the first one will be the keyspace + containing the affected object, and the second one will be the name + of said affected object (so either the table name or the user type + name). + + All EVENT message have a streamId of -1 (Section 2.3). + + Please note that "NEW_NODE" and "UP" events are sent based on internal Gossip + communication and as such may be sent a short delay before the binary + protocol server on the newly up node is fully started. Clients are thus + advise to wait a short time before trying to connect to the node (1 seconds + should be enough), otherwise they may experience a connection refusal at + first. + + It is possible for the same event to be sent multiple times. Therefore, + a client library should ignore the same event if it has already been notified + of a change. + +4.2.7. AUTH_CHALLENGE + + A server authentication challenge (see AUTH_RESPONSE (Section 4.1.2) for more + details). + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + Clients are expected to answer the server challenge by an AUTH_RESPONSE + message. + +4.2.7. AUTH_SUCCESS + + Indicate the success of the authentication phase. See Section 4.2.3 for more + details. + + The body of this message is a single [bytes] token holding final information + from the server that the client may require to finish the authentication + process. What that token contains and whether it can be null depends on the + actual authenticator used. + + +5. Compression + + Frame compression is supported by the protocol, but then only the frame body + is compressed (the frame header should never be compressed). + + Before being used, client and server must agree on a compression algorithm to + use, which is done in the STARTUP message. As a consequence, a STARTUP message + must never be compressed. However, once the STARTUP frame has been received + by the server can be compressed (including the response to the STARTUP + request). Frame do not have to be compressed however, even if compression has + been agreed upon (a server may only compress frame above a certain size at its + discretion). A frame body should be compressed if and only if the compressed + flag (see Section 2.2) is set. + + As of this version 2 of the protocol, the following compressions are available: + - lz4 (https://code.google.com/p/lz4/). In that, note that the 4 first bytes + of the body will be the uncompressed length (followed by the compressed + bytes). + - snappy (https://code.google.com/p/snappy/). This compression might not be + available as it depends on a native lib (server-side) that might not be + avaivable on some installation. + + +6. Data Type Serialization Formats + + This sections describes the serialization formats for all CQL data types + supported by Cassandra through the native protocol. These serialization + formats should be used by client drivers to encode values for EXECUTE + messages. Cassandra will use these formats when returning values in + RESULT messages. + + All values are represented as [bytes] in EXECUTE and RESULT messages. + The [bytes] format includes an int prefix denoting the length of the value. + For that reason, the serialization formats described here will not include + a length component. + + For legacy compatibility reasons, note that most non-string types support + "empty" values (i.e. a value with zero length). An empty value is distinct + from NULL, which is encoded with a negative length. + + As with the rest of the native protocol, all encodings are big-endian. + +6.1. ascii + + A sequence of bytes in the ASCII range [0, 127]. Bytes with values outside of + this range will result in a validation error. + +6.2 bigint + + An eight-byte two's complement integer. + +6.3 blob + + Any sequence of bytes. + +6.4 boolean + + A single byte. A value of 0 denotes "false"; any other value denotes "true". + (However, it is recommended that a value of 1 be used to represent "true".) + +6.5 decimal + + The decimal format represents an arbitrary-precision number. It contains an + [int] "scale" component followed by a varint encoding (see section 6.17) + of the unscaled value. The encoded value represents "E<-scale>". + In other words, " * 10 ^ (-1 * )". + +6.6 double + + An eight-byte floating point number in the IEEE 754 binary64 format. + +6.7 float + + An four-byte floating point number in the IEEE 754 binary32 format. + +6.8 inet + + A 4 byte or 16 byte sequence denoting an IPv4 or IPv6 address, respectively. + +6.9 int + + A four-byte two's complement integer. + +6.10 list + + A [int] n indicating the number of elements in the list, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.11 map + + A [int] n indicating the number of key/value pairs in the map, followed by + n entries. Each entry is composed of two [bytes] representing the key + and value. + +6.12 set + + A [int] n indicating the number of elements in the set, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.13 text + + A sequence of bytes conforming to the UTF-8 specifications. + +6.14 timestamp + + An eight-byte two's complement integer representing a millisecond-precision + offset from the unix epoch (00:00:00, January 1st, 1970). Negative values + represent a negative offset from the epoch. + +6.15 uuid + + A 16 byte sequence representing any valid UUID as defined by RFC 4122. + +6.16 varchar + + An alias of the "text" type. + +6.17 varint + + A variable-length two's complement encoding of a signed integer. + + The following examples may help implementors of this spec: + + Value | Encoding + ------|--------- + 0 | 0x00 + 1 | 0x01 + 127 | 0x7F + 128 | 0x0080 + 129 | 0x0081 + -1 | 0xFF + -128 | 0x80 + -129 | 0xFF7F + + Note that positive numbers must use a most-significant byte with a value + less than 0x80, because a most-significant bit of 1 indicates a negative + value. Implementors should pad positive values that have a MSB >= 0x80 + with a leading 0x00 byte. + +6.18 timeuuid + + A 16 byte sequence representing a version 1 UUID as defined by RFC 4122. + +6.19 tuple + + A sequence of [bytes] values representing the items in a tuple. The encoding + of each element depends on the data type for that position in the tuple. + Null values may be represented by using length -1 for the [bytes] + representation of an element. + + Within a tuple, all data types should use the v3 protocol serialization format. + + +7. User Defined Types + + This section describes the serialization format for User defined types (UDT), + as described in section 4.2.5.2. + + A UDT value is composed of successive [bytes] values, one for each field of the UDT + value (in the order defined by the type). A UDT value will generally have one value + for each field of the type it represents, but it is allowed to have less values than + the type has fields. + + Within a user-defined type value, all data types should use the v3 protocol + serialization format. + + +8. Result paging + + The protocol allows for paging the result of queries. For that, the QUERY and + EXECUTE messages have a value that indicate the desired + page size in CQL3 rows. + + If a positive value is provided for , the result set of the + RESULT message returned for the query will contain at most the + first rows of the query result. If that first page of result + contains the full result set for the query, the RESULT message (of kind `Rows`) + will have the Has_more_pages flag *not* set. However, if some results are not + part of the first response, the Has_more_pages flag will be set and the result + will contain a value. In that case, the value + should be used in a QUERY or EXECUTE message (that has the *same* query than + the original one or the behavior is undefined) to retrieve the next page of + results. + + Only CQL3 queries that return a result set (RESULT message with a Rows `kind`) + support paging. For other type of queries, the value is + ignored. + + Note to client implementors: + - While can be as low as 1, it will likely be detrimental + to performance to pick a value too low. A value below 100 is probably too + low for most use cases. + - Clients should not rely on the actual size of the result set returned to + decide if there is more result to fetch or not. Instead, they should always + check the Has_more_pages flag (unless they did not enabled paging for the query + obviously). Clients should also not assert that no result will have more than + results. While the current implementation always respect + the exact value of , we reserve ourselves the right to return + slightly smaller or bigger pages in the future for performance reasons. + - The is specific to a protocol version and drivers should not + send a returned by a node using the protocol v3 to query a node + using the protocol v4 for instance. + + +9. Error codes + + The supported error codes are described below: + 0x0000 Server error: something unexpected happened. This indicates a + server-side bug. + 0x000A Protocol error: some client message triggered a protocol + violation (for instance a QUERY message is sent before a STARTUP + one has been sent) + 0x0100 Bad credentials: CREDENTIALS request failed because Cassandra + did not accept the provided credentials. + + 0x1000 Unavailable exception. The rest of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of node that + should be alive to respect + is an [int] representing the number of replica that + were known to be alive when the request has been + processed (since an unavailable exception has been + triggered, there will be < ) + 0x1001 Overloaded: the request cannot be processed because the + coordinator node is overloaded + 0x1002 Is_bootstrapping: the request was a read request but the + coordinator node is bootstrapping + 0x1003 Truncate_error: error during a truncation error. + 0x1100 Write_timeout: Timeout exception during a write request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + acknowledged the request. + is an [int] representing the number of replica whose + acknowledgement is required to achieve . + is a [string] that describe the type of the write + that timeouted. The value of that string can be one + of: + - "SIMPLE": the write was a non-batched + non-counter write. + - "BATCH": the write was a (logged) batch write. + If this type is received, it means the batch log + has been successfully written (otherwise a + "BATCH_LOG" type would have been send instead). + - "UNLOGGED_BATCH": the write was an unlogged + batch. Not batch log write has been attempted. + - "COUNTER": the write was a counter write + (batched or not). + - "BATCH_LOG": the timeout occured during the + write to the batch log when a (logged) batch + write was requested. + - "CAS": the timeout occured during the Compare And Set write/update. + 0x1200 Read_timeout: Timeout exception during a read request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replica whose + response is required to achieve . Please note that + it is possible to have >= if + is false. And also in the (unlikely) + case were is achieved but the coordinator node + timeout while waiting for read-repair + acknowledgement. + is a single byte. If its value is 0, it means + the replica that was asked for data has not + responded. Otherwise, the value is != 0. + + 0x2000 Syntax_error: The submitted query has a syntax error. + 0x2100 Unauthorized: The logged user doesn't have the right to perform + the query. + 0x2200 Invalid: The query is syntactically correct but invalid. + 0x2300 Config_error: The query is invalid because of some configuration issue + 0x2400 Already_exists: The query attempted to create a keyspace or a + table that was already existing. The rest of the ERROR message + body will be

    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

    Simple single term queryMultiple term queryterm scoped to a fieldterm with a boost of 10term with an edit distance of 2terms with presence modifiersExtracting a nested fieldquery term with trailing wildcardquery term with leading and trailing wildcardquery term with required presenceadding a single term to a queryadding a single term to a query and specifying search fields, term boost and automatic trailing wildcardusing lunr.tokenizer to convert a string to tokens before using them as termsSimple single term queryMultiple term queryterm scoped to a fieldterm with a boost of 10term with an edit distance of 2terms with presence modifiersExtracting a nested fieldquery term with trailing wildcardquery term with leading and trailing wildcardquery term with required presenceadding a single term to a queryadding a single term to a query and specifying search fields, term boost and automatic trailing wildcardusing lunr.tokenizer to convert a string to tokens before using them as terms
    where: + is a [string] representing either the keyspace that + already exists, or the keyspace in which the table that + already exists is. +
    is a [string] representing the name of the table that + already exists. If the query was attempting to create a + keyspace,
    will be present but will be the empty + string. + 0x2500 Unprepared: Can be thrown while a prepared statement tries to be + executed if the provide prepared statement ID is not known by + this host. The rest of the ERROR message body will be [short + bytes] representing the unknown ID. + +10. Changes from v2 + * stream id is now 2 bytes long (a [short] value), so the header is now 1 byte longer (9 bytes total). + * BATCH messages now have (like QUERY and EXECUTE) and a corresponding optional + parameters (see Section 4.1.7). + * User Defined Types and tuple types have to added to ResultSet metadata (see 4.2.5.2) and a + new section on the serialization format of UDT and tuple values has been added to the documentation + (Section 7). + * The serialization format for collection has changed (both the collection size and + the length of each argument is now 4 bytes long). See Section 6. + * QUERY, EXECUTE and BATCH messages can now optionally provide the default timestamp for the query. + As this feature is optionally enabled by clients, implementing it is at the discretion of the + client. + * QUERY and EXECUTE messages can now optionally provide the names for the values of the + query. As this feature is optionally enabled by clients, implementing it is at the discretion of the + client (Note that while the BATCH message has a flag for this, it actually doesn't work for BATCH, + see Section 4.1.7 for details). + * The format of "Schema_change" results (Section 4.2.5.5) and "SCHEMA_CHANGE" events (Section 4.2.6) + has been modified, and now includes changes related to user types. + diff --git a/doc/source/modules/cassandra/examples/TEXT/native_protocol_v4.spec b/doc/source/modules/cassandra/examples/TEXT/native_protocol_v4.spec new file mode 100644 index 000000000000..5670241655f8 --- /dev/null +++ b/doc/source/modules/cassandra/examples/TEXT/native_protocol_v4.spec @@ -0,0 +1,1191 @@ + + CQL BINARY PROTOCOL v4 + + +Table of Contents + + 1. Overview + 2. Frame header + 2.1. version + 2.2. flags + 2.3. stream + 2.4. opcode + 2.5. length + 3. Notations + 4. Messages + 4.1. Requests + 4.1.1. STARTUP + 4.1.2. AUTH_RESPONSE + 4.1.3. OPTIONS + 4.1.4. QUERY + 4.1.5. PREPARE + 4.1.6. EXECUTE + 4.1.7. BATCH + 4.1.8. REGISTER + 4.2. Responses + 4.2.1. ERROR + 4.2.2. READY + 4.2.3. AUTHENTICATE + 4.2.4. SUPPORTED + 4.2.5. RESULT + 4.2.5.1. Void + 4.2.5.2. Rows + 4.2.5.3. Set_keyspace + 4.2.5.4. Prepared + 4.2.5.5. Schema_change + 4.2.6. EVENT + 4.2.7. AUTH_CHALLENGE + 4.2.8. AUTH_SUCCESS + 5. Compression + 6. Data Type Serialization Formats + 7. User Defined Type Serialization + 8. Result paging + 9. Error codes + 10. Changes from v3 + + +1. Overview + + The CQL binary protocol is a frame based protocol. Frames are defined as: + + 0 8 16 24 32 40 + +---------+---------+---------+---------+---------+ + | version | flags | stream | opcode | + +---------+---------+---------+---------+---------+ + | length | + +---------+---------+---------+---------+ + | | + . ... body ... . + . . + . . + +---------------------------------------- + + The protocol is big-endian (network byte order). + + Each frame contains a fixed size header (9 bytes) followed by a variable size + body. The header is described in Section 2. The content of the body depends + on the header opcode value (the body can in particular be empty for some + opcode values). The list of allowed opcodes is defined in Section 2.4 and the + details of each corresponding message are described Section 4. + + The protocol distinguishes two types of frames: requests and responses. Requests + are those frames sent by the client to the server. Responses are those frames sent + by the server to the client. Note, however, that the protocol supports server pushes + (events) so a response does not necessarily come right after a client request. + + Note to client implementors: client libraries should always assume that the + body of a given frame may contain more data than what is described in this + document. It will however always be safe to ignore the remainder of the frame + body in such cases. The reason is that this may enable extending the protocol + with optional features without needing to change the protocol version. + + + +2. Frame header + +2.1. version + + The version is a single byte that indicates both the direction of the message + (request or response) and the version of the protocol in use. The most + significant bit of version is used to define the direction of the message: + 0 indicates a request, 1 indicates a response. This can be useful for protocol + analyzers to distinguish the nature of the packet from the direction in which + it is moving. The rest of that byte is the protocol version (4 for the protocol + defined in this document). In other words, for this version of the protocol, + version will be one of: + 0x04 Request frame for this protocol version + 0x84 Response frame for this protocol version + + Please note that while every message ships with the version, only one version + of messages is accepted on a given connection. In other words, the first message + exchanged (STARTUP) sets the version for the connection for the lifetime of this + connection. + + This document describes version 4 of the protocol. For the changes made since + version 3, see Section 10. + + +2.2. flags + + Flags applying to this frame. The flags have the following meaning (described + by the mask that allows selecting them): + 0x01: Compression flag. If set, the frame body is compressed. The actual + compression to use should have been set up beforehand through the + Startup message (which thus cannot be compressed; Section 4.1.1). + 0x02: Tracing flag. For a request frame, this indicates the client requires + tracing of the request. Note that only QUERY, PREPARE and EXECUTE queries + support tracing. Other requests will simply ignore the tracing flag if + set. If a request supports tracing and the tracing flag is set, the response + to this request will have the tracing flag set and contain tracing + information. + If a response frame has the tracing flag set, its body contains + a tracing ID. The tracing ID is a [uuid] and is the first thing in + the frame body. The rest of the body will then be the usual body + corresponding to the response opcode. + 0x04: Custom payload flag. For a request or response frame, this indicates + that a generic key-value custom payload for a custom QueryHandler + implementation is present in the frame. Such a custom payload is simply + ignored by the default QueryHandler implementation. + Currently, only QUERY, PREPARE, EXECUTE and BATCH requests support + payload. + Type of custom payload is [bytes map] (see below). + 0x08: Warning flag. The response contains warnings which were generated by the + server to go along with this response. + If a response frame has the warning flag set, its body will contain the + text of the warnings. The warnings are a [string list] and will be the + first value in the frame body if the tracing flag is not set, or directly + after the tracing ID if it is. + + The rest of flags is currently unused and ignored. + +2.3. stream + + A frame has a stream id (a [short] value). When sending request messages, this + stream id must be set by the client to a non-negative value (negative stream id + are reserved for streams initiated by the server; currently all EVENT messages + (section 4.2.6) have a streamId of -1). If a client sends a request message + with the stream id X, it is guaranteed that the stream id of the response to + that message will be X. + + This helps to enable the asynchronous nature of the protocol. If a client + sends multiple messages simultaneously (without waiting for responses), there + is no guarantee on the order of the responses. For instance, if the client + writes REQ_1, REQ_2, REQ_3 on the wire (in that order), the server might + respond to REQ_3 (or REQ_2) first. Assigning different stream ids to these 3 + requests allows the client to distinguish to which request a received answer + responds to. As there can only be 32768 different simultaneous streams, it is up + to the client to reuse stream id. + + Note that clients are free to use the protocol synchronously (i.e. wait for + the response to REQ_N before sending REQ_N+1). In that case, the stream id + can be safely set to 0. Clients should also feel free to use only a subset of + the 32768 maximum possible stream ids if it is simpler for its implementation. + +2.4. opcode + + An integer byte that distinguishes the actual message: + 0x00 ERROR + 0x01 STARTUP + 0x02 READY + 0x03 AUTHENTICATE + 0x05 OPTIONS + 0x06 SUPPORTED + 0x07 QUERY + 0x08 RESULT + 0x09 PREPARE + 0x0A EXECUTE + 0x0B REGISTER + 0x0C EVENT + 0x0D BATCH + 0x0E AUTH_CHALLENGE + 0x0F AUTH_RESPONSE + 0x10 AUTH_SUCCESS + + Messages are described in Section 4. + + (Note that there is no 0x04 message in this version of the protocol) + + +2.5. length + + A 4 byte integer representing the length of the body of the frame (note: + currently a frame is limited to 256MB in length). + + +3. Notations + + To describe the layout of the frame body for the messages in Section 4, we + define the following: + + [int] A 4 bytes integer + [long] A 8 bytes integer + [short] A 2 bytes unsigned integer + [string] A [short] n, followed by n bytes representing an UTF-8 + string. + [long string] An [int] n, followed by n bytes representing an UTF-8 string. + [uuid] A 16 bytes long uuid. + [string list] A [short] n, followed by n [string]. + [bytes] A [int] n, followed by n bytes if n >= 0. If n < 0, + no byte should follow and the value represented is `null`. + [value] A [int] n, followed by n bytes if n >= 0. + If n == -1 no byte should follow and the value represented is `null`. + If n == -2 no byte should follow and the value represented is + `not set` not resulting in any change to the existing value. + n < -2 is an invalid value and results in an error. + [short bytes] A [short] n, followed by n bytes if n >= 0. + + [option] A pair of where is a [short] representing + the option id and depends on that option (and can be + of size 0). The supported id (and the corresponding ) + will be described when this is used. + [option list] A [short] n, followed by n [option]. + [inet] An address (ip and port) to a node. It consists of one + [byte] n, that represents the address size, followed by n + [byte] representing the IP address (in practice n can only be + either 4 (IPv4) or 16 (IPv6)), following by one [int] + representing the port. + [consistency] A consistency level specification. This is a [short] + representing a consistency level with the following + correspondance: + 0x0000 ANY + 0x0001 ONE + 0x0002 TWO + 0x0003 THREE + 0x0004 QUORUM + 0x0005 ALL + 0x0006 LOCAL_QUORUM + 0x0007 EACH_QUORUM + 0x0008 SERIAL + 0x0009 LOCAL_SERIAL + 0x000A LOCAL_ONE + + [string map] A [short] n, followed by n pair where and + are [string]. + [string multimap] A [short] n, followed by n pair where is a + [string] and is a [string list]. + [bytes map] A [short] n, followed by n pair where is a + [string] and is a [bytes]. + + +4. Messages + +4.1. Requests + + Note that outside of their normal responses (described below), all requests + can get an ERROR message (Section 4.2.1) as response. + +4.1.1. STARTUP + + Initialize the connection. The server will respond by either a READY message + (in which case the connection is ready for queries) or an AUTHENTICATE message + (in which case credentials will need to be provided using AUTH_RESPONSE). + + This must be the first message of the connection, except for OPTIONS that can + be sent before to find out the options supported by the server. Once the + connection has been initialized, a client should not send any more STARTUP + messages. + + The body is a [string map] of options. Possible options are: + - "CQL_VERSION": the version of CQL to use. This option is mandatory and + currently the only version supported is "3.0.0". Note that this is + different from the protocol version. + - "COMPRESSION": the compression algorithm to use for frames (See section 5). + This is optional; if not specified no compression will be used. + - "NO_COMPACT": whether or not connection has to be established in compatibility + mode. This mode will make all Thrift and Compact Tables to be exposed as if + they were CQL Tables. This is optional; if not specified, the option will + not be used. + - "THROW_ON_OVERLOAD": In case of server overloaded with too many requests, by default the server puts + back pressure on the client connection. Instead, the server can send an OverloadedException error message back to + the client if this option is set to true. + + +4.1.2. AUTH_RESPONSE + + Answers a server authentication challenge. + + Authentication in the protocol is SASL based. The server sends authentication + challenges (a bytes token) to which the client answers with this message. Those + exchanges continue until the server accepts the authentication by sending a + AUTH_SUCCESS message after a client AUTH_RESPONSE. Note that the exchange + begins with the client sending an initial AUTH_RESPONSE in response to a + server AUTHENTICATE request. + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + The response to a AUTH_RESPONSE is either a follow-up AUTH_CHALLENGE message, + an AUTH_SUCCESS message or an ERROR message. + + +4.1.3. OPTIONS + + Asks the server to return which STARTUP options are supported. The body of an + OPTIONS message should be empty and the server will respond with a SUPPORTED + message. + + +4.1.4. QUERY + + Performs a CQL query. The body of the message must be: + + where is a [long string] representing the query and + must be + [[name_1]...[name_n]][][][][] + where: + - is the [consistency] level for the operation. + - is a [byte] whose bits define the options for this query and + in particular influence what the remainder of the message contains. + A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x01: Values. If set, a [short] followed by [value] + values are provided. Those values are used for bound variables in + the query. Optionally, if the 0x40 flag is present, each value + will be preceded by a [string] name, representing the name of + the marker the value must be bound to. + 0x02: Skip_metadata. If set, the Result Set returned as a response + to the query (if any) will have the NO_METADATA flag (see + Section 4.2.5.2). + 0x04: Page_size. If set, is an [int] + controlling the desired page size of the result (in CQL3 rows). + See the section on paging (Section 8) for more details. + 0x08: With_paging_state. If set, should be present. + is a [bytes] value that should have been returned + in a result set (Section 4.2.5.2). The query will be + executed but starting from a given paging state. This is also to + continue paging on a different node than the one where it + started (See Section 8 for more details). + 0x10: With serial consistency. If set, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consitency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else other than a + conditional update/insert. + 0x20: With default timestamp. If set, should be present. + is a [long] representing the default timestamp for the query + in microseconds (negative values are forbidden). This will + replace the server side assigned timestamp as default timestamp. + Note that a timestamp in the query itself will still override + this timestamp. This is entirely optional. + 0x40: With names for values. This only makes sense if the 0x01 flag is set and + is ignored otherwise. If present, the values from the 0x01 flag will + be preceded by a name (see above). Note that this is only useful for + QUERY requests where named bind markers are used; for EXECUTE statements, + since the names for the expected values was returned during preparation, + a client can always provide values in the right order without any names + and using this flag, while supported, is almost surely inefficient. + + Note that the consistency is ignored by some queries (USE, CREATE, ALTER, + TRUNCATE, ...). + + The server will respond to a QUERY message with a RESULT message, the content + of which depends on the query. + + +4.1.5. PREPARE + + Prepare a query for later execution (through EXECUTE). The body consists of + the CQL query to prepare as a [long string]. + + The server will respond with a RESULT message with a `prepared` kind (0x0004, + see Section 4.2.5). + + +4.1.6. EXECUTE + + Executes a prepared query. The body of the message must be: + + where is the prepared query ID. It's the [short bytes] returned as a + response to a PREPARE message. As for , it has the exact + same definition as in QUERY (see Section 4.1.4). + + The response from the server will be a RESULT message. + + +4.1.7. BATCH + + Allows executing a list of queries (prepared or not) as a batch (note that + only DML statements are accepted in a batch). The body of the message must + be: + ...[][] + where: + - is a [byte] indicating the type of batch to use: + - If == 0, the batch will be "logged". This is equivalent to a + normal CQL3 batch statement. + - If == 1, the batch will be "unlogged". + - If == 2, the batch will be a "counter" batch (and non-counter + statements will be rejected). + - is a [byte] whose bits define the options for this query and + in particular influence what the remainder of the message contains. It is similar + to the from QUERY and EXECUTE methods, except that the 4 rightmost + bits must always be 0 as their corresponding options do not make sense for + Batch. A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x10: With serial consistency. If set, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consistency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else other than a + conditional update/insert. + 0x20: With default timestamp. If set, should be present. + is a [long] representing the default timestamp for the query + in microseconds. This will replace the server side assigned + timestamp as default timestamp. Note that a timestamp in the query itself + will still override this timestamp. This is entirely optional. + 0x40: With names for values. If set, then all values for all must be + preceded by a [string] that have the same meaning as in QUERY + requests [IMPORTANT NOTE: this feature does not work and should not be + used. It is specified in a way that makes it impossible for the server + to implement. This will be fixed in a future version of the native + protocol. See https://issues.apache.org/jira/browse/CASSANDRA-10246 for + more details]. + - is a [short] indicating the number of following queries. + - ... are the queries to execute. A must be of the + form: + []...[] + where: + - is a [byte] indicating whether the following query is a prepared + one or not. value must be either 0 or 1. + - depends on the value of . If == 0, it should be + a [long string] query string (as in QUERY, the query string might contain + bind markers). Otherwise (that is, if == 1), it should be a + [short bytes] representing a prepared query ID. + - is a [short] indicating the number (possibly 0) of following values. + - is the optional name of the following . It must be present + if and only if the 0x40 flag is provided for the batch. + - is the [value] to use for bound variable i (of bound variable + if the 0x40 flag is used). + - is the [consistency] level for the operation. + - is only present if the 0x10 flag is set. In that case, + is the [consistency] level for the serial phase of + conditional updates. That consitency can only be either SERIAL or + LOCAL_SERIAL and if not present will defaults to SERIAL. This option will + be ignored for anything else other than a conditional update/insert. + + The server will respond with a RESULT message. + + +4.1.8. REGISTER + + Register this connection to receive some types of events. The body of the + message is a [string list] representing the event types to register for. See + section 4.2.6 for the list of valid event types. + + The response to a REGISTER message will be a READY message. + + Please note that if a client driver maintains multiple connections to a + Cassandra node and/or connections to multiple nodes, it is advised to + dedicate a handful of connections to receive events, but to *not* register + for events on all connections, as this would only result in receiving + multiple times the same event messages, wasting bandwidth. + + +4.2. Responses + + This section describes the content of the frame body for the different + responses. Please note that to make room for future evolution, clients should + support extra informations (that they should simply discard) to the one + described in this document at the end of the frame body. + +4.2.1. ERROR + + Indicates an error processing a request. The body of the message will be an + error code ([int]) followed by a [string] error message. Then, depending on + the exception, more content may follow. The error codes are defined in + Section 9, along with their additional content if any. + + +4.2.2. READY + + Indicates that the server is ready to process queries. This message will be + sent by the server either after a STARTUP message if no authentication is + required (if authentication is required, the server indicates readiness by + sending a AUTH_RESPONSE message). + + The body of a READY message is empty. + + +4.2.3. AUTHENTICATE + + Indicates that the server requires authentication, and which authentication + mechanism to use. + + The authentication is SASL based and thus consists of a number of server + challenges (AUTH_CHALLENGE, Section 4.2.7) followed by client responses + (AUTH_RESPONSE, Section 4.1.2). The initial exchange is however boostrapped + by an initial client response. The details of that exchange (including how + many challenge-response pairs are required) are specific to the authenticator + in use. The exchange ends when the server sends an AUTH_SUCCESS message or + an ERROR message. + + This message will be sent following a STARTUP message if authentication is + required and must be answered by a AUTH_RESPONSE message from the client. + + The body consists of a single [string] indicating the full class name of the + IAuthenticator in use. + + +4.2.4. SUPPORTED + + Indicates which startup options are supported by the server. This message + comes as a response to an OPTIONS message. + + The body of a SUPPORTED message is a [string multimap]. This multimap gives + for each of the supported STARTUP options, the list of supported values. + + +4.2.5. RESULT + + The result to a query (QUERY, PREPARE, EXECUTE or BATCH messages). + + The first element of the body of a RESULT message is an [int] representing the + `kind` of result. The rest of the body depends on the kind. The kind can be + one of: + 0x0001 Void: for results carrying no information. + 0x0002 Rows: for results to select queries, returning a set of rows. + 0x0003 Set_keyspace: the result to a `use` query. + 0x0004 Prepared: result to a PREPARE message. + 0x0005 Schema_change: the result to a schema altering query. + + The body for each kind (after the [int] kind) is defined below. + + +4.2.5.1. Void + + The rest of the body for a Void result is empty. It indicates that a query was + successful without providing more information. + + +4.2.5.2. Rows + + Indicates a set of rows. The rest of the body of a Rows result is: + + where: + - is composed of: + [][?...] + where: + - is an [int]. The bits of provides information on the + formatting of the remaining information. A flag is set if the bit + corresponding to its `mask` is set. Supported flags are, given their + mask: + 0x0001 Global_tables_spec: if set, only one table spec (keyspace + and table name) is provided as . If not + set, is not present. + 0x0002 Has_more_pages: indicates whether this is not the last + page of results and more should be retrieved. If set, the + will be present. The is a + [bytes] value that should be used in QUERY/EXECUTE to + continue paging and retrieve the remainder of the result for + this query (See Section 8 for more details). + 0x0004 No_metadata: if set, the is only composed of + these , the and optionally the + (depending on the Has_more_pages flag) but + no other information (so no nor ). + This will only ever be the case if this was requested + during the query (see QUERY and RESULT messages). + - is an [int] representing the number of columns selected + by the query that produced this result. It defines the number of + elements in and the number of elements for each row in . + - is present if the Global_tables_spec is set in + . It is composed of two [string] representing the + (unique) keyspace name and table name the columns belong to. + - specifies the columns returned in the query. There are + such column specifications that are composed of: + ()? + The initial and are two [string] and are only present + if the Global_tables_spec flag is not set. The is a + [string] and is an [option] that corresponds to the description + (what this description is depends a bit on the context: in results to + selects, this will be either the user chosen alias or the selection used + (often a colum name, but it can be a function call too). In results to + a PREPARE, this will be either the name of the corresponding bind variable + or the column name for the variable if it is "anonymous") and type of + the corresponding result. The option for is either a native + type (see below), in which case the option has no value, or a + 'custom' type, in which case the value is a [string] representing + the fully qualified class name of the type represented. Valid option + ids are: + 0x0000 Custom: the value is a [string], see above. + 0x0001 Ascii + 0x0002 Bigint + 0x0003 Blob + 0x0004 Boolean + 0x0005 Counter + 0x0006 Decimal + 0x0007 Double + 0x0008 Float + 0x0009 Int + 0x000B Timestamp + 0x000C Uuid + 0x000D Varchar + 0x000E Varint + 0x000F Timeuuid + 0x0010 Inet + 0x0011 Date + 0x0012 Time + 0x0013 Smallint + 0x0014 Tinyint + 0x0020 List: the value is an [option], representing the type + of the elements of the list. + 0x0021 Map: the value is two [option], representing the types of the + keys and values of the map + 0x0022 Set: the value is an [option], representing the type + of the elements of the set + 0x0030 UDT: the value is ... + where: + - is a [string] representing the keyspace name this + UDT is part of. + - is a [string] representing the UDT name. + - is a [short] representing the number of fields of + the UDT, and thus the number of pairs + following + - is a [string] representing the name of the + i_th field of the UDT. + - is an [option] representing the type of the + i_th field of the UDT. + 0x0031 Tuple: the value is ... where is a [short] + representing the number of values in the type, and + are [option] representing the type of the i_th component + of the tuple + + - is an [int] representing the number of rows present in this + result. Those rows are serialized in the part. + - is composed of ... where m is . + Each is composed of ... where n is + and where is a [bytes] representing the value + returned for the jth column of the ith row. In other words, + is composed of ( * ) [bytes]. + + +4.2.5.3. Set_keyspace + + The result to a `use` query. The body (after the kind [int]) is a single + [string] indicating the name of the keyspace that has been set. + + +4.2.5.4. Prepared + + The result to a PREPARE message. The body of a Prepared result is: + + where: + - is [short bytes] representing the prepared query ID. + - is composed of: + [...][?...] + where: + - is an [int]. The bits of provides information on the + formatting of the remaining information. A flag is set if the bit + corresponding to its `mask` is set. Supported masks and their flags + are: + 0x0001 Global_tables_spec: if set, only one table spec (keyspace + and table name) is provided as . If not + set, is not present. + - is an [int] representing the number of bind markers + in the prepared statement. It defines the number of + elements. + - is an [int] representing the number of + elements to follow. If this value is zero, at least one of the + partition key columns in the table that the statement acts on + did not have a corresponding bind marker (or the bind marker + was wrapped in a function call). + - is a short that represents the index of the bind marker + that corresponds to the partition key column in position i. + For example, a sequence of [2, 0, 1] indicates that the + table has three partition key columns; the full partition key + can be constructed by creating a composite of the values for + the bind markers at index 2, at index 0, and at index 1. + This allows implementations with token-aware routing to correctly + construct the partition key without needing to inspect table + metadata. + - is present if the Global_tables_spec is set in + . If present, it is composed of two [string]s. The first + [string] is the name of the keyspace that the statement acts on. + The second [string] is the name of the table that the columns + represented by the bind markers belong to. + - specifies the bind markers in the prepared statement. + There are such column specifications, each with the + following format: + ()? + The initial and are two [string] that are only + present if the Global_tables_spec flag is not set. The field + is a [string] that holds the name of the bind marker (if named), + or the name of the column, field, or expression that the bind marker + corresponds to (if the bind marker is "anonymous"). The + field is an [option] that represents the expected type of values for + the bind marker. See the Rows documentation (section 4.2.5.2) for + full details on the field. + + - is defined exactly the same as in the Rows + documentation (section 4.2.5.2). This describes the metadata for the + result set that will be returned when this prepared statement is executed. + Note that may be empty (have the No_metadata flag and + 0 columns, See section 4.2.5.2) and will be for any query that is not a + Select. In fact, there is never a guarantee that this will be non-empty, so + implementations should protect themselves accordingly. This result metadata + is an optimization that allows implementations to later execute the + prepared statement without requesting the metadata (see the Skip_metadata + flag in EXECUTE). Clients can safely discard this metadata if they do not + want to take advantage of that optimization. + + Note that the prepared query ID returned is global to the node on which the query + has been prepared. It can be used on any connection to that node + until the node is restarted (after which the query must be reprepared). + +4.2.5.5. Schema_change + + The result to a schema altering query (creation/update/drop of a + keyspace/table/index). The body (after the kind [int]) is the same + as the body for a "SCHEMA_CHANGE" event, so 3 strings: + + Please refer to section 4.2.6 below for the meaning of those fields. + + Note that a query to create or drop an index is considered to be a change + to the table the index is on. + + +4.2.6. EVENT + + An event pushed by the server. A client will only receive events for the + types it has REGISTERed to. The body of an EVENT message will start with a + [string] representing the event type. The rest of the message depends on the + event type. The valid event types are: + - "TOPOLOGY_CHANGE": events related to change in the cluster topology. + Currently, events are sent when new nodes are added to the cluster, and + when nodes are removed. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of change ("NEW_NODE" or "REMOVED_NODE") followed by the address of + the new/removed node. + - "STATUS_CHANGE": events related to change of node status. Currently, + up/down events are sent. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of status change ("UP" or "DOWN") followed by the address of the + concerned node. + - "SCHEMA_CHANGE": events related to schema change. After the event type, + the rest of the message will be where: + - is a [string] representing the type of changed involved. + It will be one of "CREATED", "UPDATED" or "DROPPED". + - is a [string] that can be one of "KEYSPACE", "TABLE", "TYPE", + "FUNCTION" or "AGGREGATE" and describes what has been modified + ("TYPE" stands for modifications related to user types, "FUNCTION" + for modifications related to user defined functions, "AGGREGATE" + for modifications related to user defined aggregates). + - depends on the preceding : + - If is "KEYSPACE", then will be a single [string] + representing the keyspace changed. + - If is "TABLE" or "TYPE", then + will be 2 [string]: the first one will be the keyspace + containing the affected object, and the second one will be the name + of said affected object (either the table, user type, function, or + aggregate name). + - If is "FUNCTION" or "AGGREGATE", multiple arguments follow: + - [string] keyspace containing the user defined function / aggregate + - [string] the function/aggregate name + - [string list] one string for each argument type (as CQL type) + + All EVENT messages have a streamId of -1 (Section 2.3). + + Please note that "NEW_NODE" and "UP" events are sent based on internal Gossip + communication and as such may be sent a short delay before the binary + protocol server on the newly up node is fully started. Clients are thus + advised to wait a short time before trying to connect to the node (1 second + should be enough), otherwise they may experience a connection refusal at + first. + +4.2.7. AUTH_CHALLENGE + + A server authentication challenge (see AUTH_RESPONSE (Section 4.1.2) for more + details). + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + Clients are expected to answer the server challenge with an AUTH_RESPONSE + message. + +4.2.8. AUTH_SUCCESS + + Indicates the success of the authentication phase. See Section 4.2.3 for more + details. + + The body of this message is a single [bytes] token holding final information + from the server that the client may require to finish the authentication + process. What that token contains and whether it can be null depends on the + actual authenticator used. + + +5. Compression + + Frame compression is supported by the protocol, but then only the frame body + is compressed (the frame header should never be compressed). + + Before being used, client and server must agree on a compression algorithm to + use, which is done in the STARTUP message. As a consequence, a STARTUP message + must never be compressed. However, once the STARTUP frame has been received + by the server, messages can be compressed (including the response to the STARTUP + request). Frames do not have to be compressed, however, even if compression has + been agreed upon (a server may only compress frames above a certain size at its + discretion). A frame body should be compressed if and only if the compressed + flag (see Section 2.2) is set. + + As of version 2 of the protocol, the following compressions are available: + - lz4 (https://code.google.com/p/lz4/). In that, note that the first four bytes + of the body will be the uncompressed length (followed by the compressed + bytes). + - snappy (https://code.google.com/p/snappy/). This compression might not be + available as it depends on a native lib (server-side) that might not be + avaivable on some installations. + + +6. Data Type Serialization Formats + + This sections describes the serialization formats for all CQL data types + supported by Cassandra through the native protocol. These serialization + formats should be used by client drivers to encode values for EXECUTE + messages. Cassandra will use these formats when returning values in + RESULT messages. + + All values are represented as [bytes] in EXECUTE and RESULT messages. + The [bytes] format includes an int prefix denoting the length of the value. + For that reason, the serialization formats described here will not include + a length component. + + For legacy compatibility reasons, note that most non-string types support + "empty" values (i.e. a value with zero length). An empty value is distinct + from NULL, which is encoded with a negative length. + + As with the rest of the native protocol, all encodings are big-endian. + +6.1. ascii + + A sequence of bytes in the ASCII range [0, 127]. Bytes with values outside of + this range will result in a validation error. + +6.2 bigint + + An eight-byte two's complement integer. + +6.3 blob + + Any sequence of bytes. + +6.4 boolean + + A single byte. A value of 0 denotes "false"; any other value denotes "true". + (However, it is recommended that a value of 1 be used to represent "true".) + +6.5 date + + An unsigned integer representing days with epoch centered at 2^31. + (unix epoch January 1st, 1970). + A few examples: + 0: -5877641-06-23 + 2^31: 1970-1-1 + 2^32: 5881580-07-11 + +6.6 decimal + + The decimal format represents an arbitrary-precision number. It contains an + [int] "scale" component followed by a varint encoding (see section 6.17) + of the unscaled value. The encoded value represents "E<-scale>". + In other words, " * 10 ^ (-1 * )". + +6.7 double + + An 8 byte floating point number in the IEEE 754 binary64 format. + +6.8 float + + A 4 byte floating point number in the IEEE 754 binary32 format. + +6.9 inet + + A 4 byte or 16 byte sequence denoting an IPv4 or IPv6 address, respectively. + +6.10 int + + A 4 byte two's complement integer. + +6.11 list + + A [int] n indicating the number of elements in the list, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.12 map + + A [int] n indicating the number of key/value pairs in the map, followed by + n entries. Each entry is composed of two [bytes] representing the key + and value. + +6.13 set + + A [int] n indicating the number of elements in the set, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.14 smallint + + A 2 byte two's complement integer. + +6.15 text + + A sequence of bytes conforming to the UTF-8 specifications. + +6.16 time + + An 8 byte two's complement long representing nanoseconds since midnight. + Valid values are in the range 0 to 86399999999999 + +6.17 timestamp + + An 8 byte two's complement integer representing a millisecond-precision + offset from the unix epoch (00:00:00, January 1st, 1970). Negative values + represent a negative offset from the epoch. + +6.18 timeuuid + + A 16 byte sequence representing a version 1 UUID as defined by RFC 4122. + +6.19 tinyint + + A 1 byte two's complement integer. + +6.20 tuple + + A sequence of [bytes] values representing the items in a tuple. The encoding + of each element depends on the data type for that position in the tuple. + Null values may be represented by using length -1 for the [bytes] + representation of an element. + +6.21 uuid + + A 16 byte sequence representing any valid UUID as defined by RFC 4122. + +6.22 varchar + + An alias of the "text" type. + +6.23 varint + + A variable-length two's complement encoding of a signed integer. + + The following examples may help implementors of this spec: + + Value | Encoding + ------|--------- + 0 | 0x00 + 1 | 0x01 + 127 | 0x7F + 128 | 0x0080 + 129 | 0x0081 + -1 | 0xFF + -128 | 0x80 + -129 | 0xFF7F + + Note that positive numbers must use a most-significant byte with a value + less than 0x80, because a most-significant bit of 1 indicates a negative + value. Implementors should pad positive values that have a MSB >= 0x80 + with a leading 0x00 byte. + + +7. User Defined Types + + This section describes the serialization format for User defined types (UDT), + as described in section 4.2.5.2. + + A UDT value is composed of successive [bytes] values, one for each field of the UDT + value (in the order defined by the type). A UDT value will generally have one value + for each field of the type it represents, but it is allowed to have less values than + the type has fields. + + +8. Result paging + + The protocol allows for paging the result of queries. For that, the QUERY and + EXECUTE messages have a value that indicate the desired + page size in CQL3 rows. + + If a positive value is provided for , the result set of the + RESULT message returned for the query will contain at most the + first rows of the query result. If that first page of results + contains the full result set for the query, the RESULT message (of kind `Rows`) + will have the Has_more_pages flag *not* set. However, if some results are not + part of the first response, the Has_more_pages flag will be set and the result + will contain a value. In that case, the value + should be used in a QUERY or EXECUTE message (that has the *same* query as + the original one or the behavior is undefined) to retrieve the next page of + results. + + Only CQL3 queries that return a result set (RESULT message with a Rows `kind`) + support paging. For other type of queries, the value is + ignored. + + Note to client implementors: + - While can be as low as 1, it will likely be detrimental + to performance to pick a value too low. A value below 100 is probably too + low for most use cases. + - Clients should not rely on the actual size of the result set returned to + decide if there are more results to fetch or not. Instead, they should always + check the Has_more_pages flag (unless they did not enable paging for the query + obviously). Clients should also not assert that no result will have more than + results. While the current implementation always respects + the exact value of , we reserve the right to return + slightly smaller or bigger pages in the future for performance reasons. + - The is specific to a protocol version and drivers should not + send a returned by a node using the protocol v3 to query a node + using the protocol v4 for instance. + + +9. Error codes + + Let us recall that an ERROR message is composed of [...] + (see 4.2.1 for details). The supported error codes, as well as any additional + information the message may contain after the are described below: + 0x0000 Server error: something unexpected happened. This indicates a + server-side bug. + 0x000A Protocol error: some client message triggered a protocol + violation (for instance a QUERY message is sent before a STARTUP + one has been sent) + 0x0100 Authentication error: authentication was required and failed. The + possible reason for failing depends on the authenticator in use, + which may or may not include more detail in the accompanying + error message. + 0x1000 Unavailable exception. The rest of the ERROR message body will be + + where: + is the [consistency] level of the query that triggered + the exception. + is an [int] representing the number of nodes that + should be alive to respect + is an [int] representing the number of replicas that + were known to be alive when the request had been + processed (since an unavailable exception has been + triggered, there will be < ) + 0x1001 Overloaded: the request cannot be processed because the + coordinator node is overloaded + 0x1002 Is_bootstrapping: the request was a read request but the + coordinator node is bootstrapping + 0x1003 Truncate_error: error during a truncation error. + 0x1100 Write_timeout: Timeout exception during a write request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + acknowledged the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is a [string] that describe the type of the write + that timed out. The value of that string can be one + of: + - "SIMPLE": the write was a non-batched + non-counter write. + - "BATCH": the write was a (logged) batch write. + If this type is received, it means the batch log + has been successfully written (otherwise a + "BATCH_LOG" type would have been sent instead). + - "UNLOGGED_BATCH": the write was an unlogged + batch. No batch log write has been attempted. + - "COUNTER": the write was a counter write + (batched or not). + - "BATCH_LOG": the timeout occurred during the + write to the batch log when a (logged) batch + write was requested. + - "CAS": the timeout occured during the Compare And Set write/update. + - "VIEW": the timeout occured when a write involves + VIEW update and failure to acqiure local view(MV) + lock for key within timeout + - "CDC": the timeout occured when cdc_total_space_in_mb is + exceeded when doing a write to data tracked by cdc. + 0x1200 Read_timeout: Timeout exception during a read request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + response is required to achieve . Please note that + it is possible to have >= if + is false. Also in the (unlikely) + case where is achieved but the coordinator node + times out while waiting for read-repair acknowledgement. + is a single byte. If its value is 0, it means + the replica that was asked for data has not + responded. Otherwise, the value is != 0. + 0x1300 Read_failure: A non-timeout exception during a read request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is an [int] representing the number of nodes that + experience a failure while executing the request. + is a single byte. If its value is 0, it means + the replica that was asked for data had not + responded. Otherwise, the value is != 0. + 0x1400 Function_failure: A (user defined) function failed during execution. + The rest of the ERROR message body will be + + where: + is the keyspace [string] of the failed function + is the name [string] of the failed function + [string list] one string for each argument type (as CQL type) of the failed function + 0x1500 Write_failure: A non-timeout exception during a write request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is an [int] representing the number of nodes that + experience a failure while executing the request. + is a [string] that describes the type of the write + that failed. The value of that string can be one + of: + - "SIMPLE": the write was a non-batched + non-counter write. + - "BATCH": the write was a (logged) batch write. + If this type is received, it means the batch log + has been successfully written (otherwise a + "BATCH_LOG" type would have been sent instead). + - "UNLOGGED_BATCH": the write was an unlogged + batch. No batch log write has been attempted. + - "COUNTER": the write was a counter write + (batched or not). + - "BATCH_LOG": the failure occured during the + write to the batch log when a (logged) batch + write was requested. + - "CAS": the failure occured during the Compare And Set write/update. + - "VIEW": the failure occured when a write involves + VIEW update and failure to acqiure local view(MV) + lock for key within timeout + - "CDC": the failure occured when cdc_total_space_in_mb is + exceeded when doing a write to data tracked by cdc. + + 0x2000 Syntax_error: The submitted query has a syntax error. + 0x2100 Unauthorized: The logged user doesn't have the right to perform + the query. + 0x2200 Invalid: The query is syntactically correct but invalid. + 0x2300 Config_error: The query is invalid because of some configuration issue + 0x2400 Already_exists: The query attempted to create a keyspace or a + table that was already existing. The rest of the ERROR message + body will be
    where: + is a [string] representing either the keyspace that + already exists, or the keyspace in which the table that + already exists is. +
    is a [string] representing the name of the table that + already exists. If the query was attempting to create a + keyspace,
    will be present but will be the empty + string. + 0x2500 Unprepared: Can be thrown while a prepared statement tries to be + executed if the provided prepared statement ID is not known by + this host. The rest of the ERROR message body will be [short + bytes] representing the unknown ID. + +10. Changes from v3 + + * Prepared responses (Section 4.2.5.4) now include partition-key bind indexes + * The format of "SCHEMA_CHANGE" events (Section 4.2.6) (and implicitly + "Schema_change" results (Section 4.2.5.5)) has been modified, and now includes + changes related to user defined functions and user defined aggregates. + * Read_failure error code was added. + * Function_failure error code was added. + * Add custom payload to frames for custom QueryHandler implementations (ignored by + Cassandra's standard QueryHandler) + * Add warnings to frames for responses for which the server generated a warning + during processing, which the client needs to address. + * Add the date and time data types + * Add the tinyint and smallint data types + * The returned in the v4 protocol is not compatible with the v3 + protocol. In other words, a returned by a node using protocol v4 + should not be used to query a node using protocol v3 (and vice-versa). + * Added THROW_ON_OVERLOAD startup option (Section 4.1.1). diff --git a/doc/source/modules/cassandra/examples/TEXT/native_protocol_v5.spec b/doc/source/modules/cassandra/examples/TEXT/native_protocol_v5.spec new file mode 100644 index 000000000000..d27945373323 --- /dev/null +++ b/doc/source/modules/cassandra/examples/TEXT/native_protocol_v5.spec @@ -0,0 +1,1281 @@ + + CQL BINARY PROTOCOL v5 + + +Table of Contents + + 1. Overview + 2. Frame header + 2.1. version + 2.2. flags + 2.3. stream + 2.4. opcode + 2.5. length + 3. Notations + 4. Messages + 4.1. Requests + 4.1.1. STARTUP + 4.1.2. AUTH_RESPONSE + 4.1.3. OPTIONS + 4.1.4. QUERY + 4.1.5. PREPARE + 4.1.6. EXECUTE + 4.1.7. BATCH + 4.1.8. REGISTER + 4.2. Responses + 4.2.1. ERROR + 4.2.2. READY + 4.2.3. AUTHENTICATE + 4.2.4. SUPPORTED + 4.2.5. RESULT + 4.2.5.1. Void + 4.2.5.2. Rows + 4.2.5.3. Set_keyspace + 4.2.5.4. Prepared + 4.2.5.5. Schema_change + 4.2.6. EVENT + 4.2.7. AUTH_CHALLENGE + 4.2.8. AUTH_SUCCESS + 5. Compression + 6. Data Type Serialization Formats + 7. User Defined Type Serialization + 8. Result paging + 9. Error codes + 10. Changes from v4 + + +1. Overview + + The CQL binary protocol is a frame based protocol. Frames are defined as: + + 0 8 16 24 32 40 + +---------+---------+---------+---------+---------+ + | version | flags | stream | opcode | + +---------+---------+---------+---------+---------+ + | length | + +---------+---------+---------+---------+ + | | + . ... body ... . + . . + . . + +---------------------------------------- + + The protocol is big-endian (network byte order). + + Each frame contains a fixed size header (9 bytes) followed by a variable size + body. The header is described in Section 2. The content of the body depends + on the header opcode value (the body can in particular be empty for some + opcode values). The list of allowed opcodes is defined in Section 2.4 and the + details of each corresponding message are described Section 4. + + The protocol distinguishes two types of frames: requests and responses. Requests + are those frames sent by the client to the server. Responses are those frames sent + by the server to the client. Note, however, that the protocol supports server pushes + (events) so a response does not necessarily come right after a client request. + + Note to client implementors: client libraries should always assume that the + body of a given frame may contain more data than what is described in this + document. It will however always be safe to ignore the remainder of the frame + body in such cases. The reason is that this may enable extending the protocol + with optional features without needing to change the protocol version. + + + +2. Frame header + +2.1. version + + The version is a single byte that indicates both the direction of the message + (request or response) and the version of the protocol in use. The most + significant bit of version is used to define the direction of the message: + 0 indicates a request, 1 indicates a response. This can be useful for protocol + analyzers to distinguish the nature of the packet from the direction in which + it is moving. The rest of that byte is the protocol version (5 for the protocol + defined in this document). In other words, for this version of the protocol, + version will be one of: + 0x05 Request frame for this protocol version + 0x85 Response frame for this protocol version + + Please note that while every message ships with the version, only one version + of messages is accepted on a given connection. In other words, the first message + exchanged (STARTUP) sets the version for the connection for the lifetime of this + connection. The single exception to this behavior is when a startup message + is sent with a version that is higher than the current server version. In this + case, the server will respond with its current version. + + This document describes version 5 of the protocol. For the changes made since + version 4, see Section 10. + + +2.2. flags + + Flags applying to this frame. The flags have the following meaning (described + by the mask that allows selecting them): + 0x01: Compression flag. If set, the frame body is compressed. The actual + compression to use should have been set up beforehand through the + Startup message (which thus cannot be compressed; Section 4.1.1). + 0x02: Tracing flag. For a request frame, this indicates the client requires + tracing of the request. Note that only QUERY, PREPARE and EXECUTE queries + support tracing. Other requests will simply ignore the tracing flag if + set. If a request supports tracing and the tracing flag is set, the response + to this request will have the tracing flag set and contain tracing + information. + If a response frame has the tracing flag set, its body contains + a tracing ID. The tracing ID is a [uuid] and is the first thing in + the frame body. The rest of the body will then be the usual body + corresponding to the response opcode. + 0x04: Custom payload flag. For a request or response frame, this indicates + that a generic key-value custom payload for a custom QueryHandler + implementation is present in the frame. Such a custom payload is simply + ignored by the default QueryHandler implementation. + Currently, only QUERY, PREPARE, EXECUTE and BATCH requests support + payload. + Type of custom payload is [bytes map] (see below). + 0x08: Warning flag. The response contains warnings which were generated by the + server to go along with this response. + If a response frame has the warning flag set, its body will contain the + text of the warnings. The warnings are a [string list] and will be the + first value in the frame body if the tracing flag is not set, or directly + after the tracing ID if it is. + 0x10: Use beta flag. Indicates that the client opts in to use protocol version + that is currently in beta. Server will respond with ERROR if protocol + version is marked as beta on server and client does not provide this flag. + + The rest of flags is currently unused and ignored. + +2.3. stream + + A frame has a stream id (a [short] value). When sending request messages, this + stream id must be set by the client to a non-negative value (negative stream id + are reserved for streams initiated by the server; currently all EVENT messages + (section 4.2.6) have a streamId of -1). If a client sends a request message + with the stream id X, it is guaranteed that the stream id of the response to + that message will be X. + + This helps to enable the asynchronous nature of the protocol. If a client + sends multiple messages simultaneously (without waiting for responses), there + is no guarantee on the order of the responses. For instance, if the client + writes REQ_1, REQ_2, REQ_3 on the wire (in that order), the server might + respond to REQ_3 (or REQ_2) first. Assigning different stream ids to these 3 + requests allows the client to distinguish to which request a received answer + responds to. As there can only be 32768 different simultaneous streams, it is up + to the client to reuse stream id. + + Note that clients are free to use the protocol synchronously (i.e. wait for + the response to REQ_N before sending REQ_N+1). In that case, the stream id + can be safely set to 0. Clients should also feel free to use only a subset of + the 32768 maximum possible stream ids if it is simpler for its implementation. + +2.4. opcode + + An integer byte that distinguishes the actual message: + 0x00 ERROR + 0x01 STARTUP + 0x02 READY + 0x03 AUTHENTICATE + 0x05 OPTIONS + 0x06 SUPPORTED + 0x07 QUERY + 0x08 RESULT + 0x09 PREPARE + 0x0A EXECUTE + 0x0B REGISTER + 0x0C EVENT + 0x0D BATCH + 0x0E AUTH_CHALLENGE + 0x0F AUTH_RESPONSE + 0x10 AUTH_SUCCESS + + Messages are described in Section 4. + + (Note that there is no 0x04 message in this version of the protocol) + + +2.5. length + + A 4 byte integer representing the length of the body of the frame (note: + currently a frame is limited to 256MB in length). + + +3. Notations + + To describe the layout of the frame body for the messages in Section 4, we + define the following: + + [int] A 4 bytes integer + [long] A 8 bytes integer + [byte] A 1 byte unsigned integer + [short] A 2 bytes unsigned integer + [string] A [short] n, followed by n bytes representing an UTF-8 + string. + [long string] An [int] n, followed by n bytes representing an UTF-8 string. + [uuid] A 16 bytes long uuid. + [string list] A [short] n, followed by n [string]. + [bytes] A [int] n, followed by n bytes if n >= 0. If n < 0, + no byte should follow and the value represented is `null`. + [value] A [int] n, followed by n bytes if n >= 0. + If n == -1 no byte should follow and the value represented is `null`. + If n == -2 no byte should follow and the value represented is + `not set` not resulting in any change to the existing value. + n < -2 is an invalid value and results in an error. + [short bytes] A [short] n, followed by n bytes if n >= 0. + + [unsigned vint] An unsigned variable length integer. A vint is encoded with the most significant byte (MSB) first. + The most significant byte will contains the information about how many extra bytes need to be read + as well as the most significant bits of the integer. + The number of extra bytes to read is encoded as 1 bits on the left side. + For example, if we need to read 2 more bytes the first byte will start with 110 + (e.g. 256 000 will be encoded on 3 bytes as [110]00011 11101000 00000000) + If the encoded integer is 8 bytes long the vint will be encoded on 9 bytes and the first + byte will be: 11111111 + + [vint] A signed variable length integer. This is encoded using zig-zag encoding and then sent + like an [unsigned vint]. Zig-zag encoding converts numbers as follows: + 0 = 0, -1 = 1, 1 = 2, -2 = 3, 2 = 4, -3 = 5, 3 = 6 and so forth. + The purpose is to send small negative values as small unsigned values, so that we save bytes on the wire. + To encode a value n use "(n >> 31) ^ (n << 1)" for 32 bit values, and "(n >> 63) ^ (n << 1)" + for 64 bit values where "^" is the xor operation, "<<" is the left shift operation and ">>" is + the arithemtic right shift operation (highest-order bit is replicated). + Decode with "(n >> 1) ^ -(n & 1)". + + [option] A pair of where is a [short] representing + the option id and depends on that option (and can be + of size 0). The supported id (and the corresponding ) + will be described when this is used. + [option list] A [short] n, followed by n [option]. + [inet] An address (ip and port) to a node. It consists of one + [byte] n, that represents the address size, followed by n + [byte] representing the IP address (in practice n can only be + either 4 (IPv4) or 16 (IPv6)), following by one [int] + representing the port. + [inetaddr] An IP address (without a port) to a node. It consists of one + [byte] n, that represents the address size, followed by n + [byte] representing the IP address. + [consistency] A consistency level specification. This is a [short] + representing a consistency level with the following + correspondance: + 0x0000 ANY + 0x0001 ONE + 0x0002 TWO + 0x0003 THREE + 0x0004 QUORUM + 0x0005 ALL + 0x0006 LOCAL_QUORUM + 0x0007 EACH_QUORUM + 0x0008 SERIAL + 0x0009 LOCAL_SERIAL + 0x000A LOCAL_ONE + + [string map] A [short] n, followed by n pair where and + are [string]. + [string multimap] A [short] n, followed by n pair where is a + [string] and is a [string list]. + [bytes map] A [short] n, followed by n pair where is a + [string] and is a [bytes]. + + +4. Messages + +4.1. Requests + + Note that outside of their normal responses (described below), all requests + can get an ERROR message (Section 4.2.1) as response. + +4.1.1. STARTUP + + Initialize the connection. The server will respond by either a READY message + (in which case the connection is ready for queries) or an AUTHENTICATE message + (in which case credentials will need to be provided using AUTH_RESPONSE). + + This must be the first message of the connection, except for OPTIONS that can + be sent before to find out the options supported by the server. Once the + connection has been initialized, a client should not send any more STARTUP + messages. + + The body is a [string map] of options. Possible options are: + - "CQL_VERSION": the version of CQL to use. This option is mandatory and + currently the only version supported is "3.0.0". Note that this is + different from the protocol version. + - "COMPRESSION": the compression algorithm to use for frames (See section 5). + This is optional; if not specified no compression will be used. + + +4.1.2. AUTH_RESPONSE + + Answers a server authentication challenge. + + Authentication in the protocol is SASL based. The server sends authentication + challenges (a bytes token) to which the client answers with this message. Those + exchanges continue until the server accepts the authentication by sending a + AUTH_SUCCESS message after a client AUTH_RESPONSE. Note that the exchange + begins with the client sending an initial AUTH_RESPONSE in response to a + server AUTHENTICATE request. + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + The response to a AUTH_RESPONSE is either a follow-up AUTH_CHALLENGE message, + an AUTH_SUCCESS message or an ERROR message. + + +4.1.3. OPTIONS + + Asks the server to return which STARTUP options are supported. The body of an + OPTIONS message should be empty and the server will respond with a SUPPORTED + message. + + +4.1.4. QUERY + + Performs a CQL query. The body of the message must be: + + where is a [long string] representing the query and + must be + [[name_1]...[name_n]][][][][][][] + where: + - is the [consistency] level for the operation. + - is a [int] whose bits define the options for this query and + in particular influence what the remainder of the message contains. + A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x0001: Values. If set, a [short] followed by [value] + values are provided. Those values are used for bound variables in + the query. Optionally, if the 0x40 flag is present, each value + will be preceded by a [string] name, representing the name of + the marker the value must be bound to. + 0x0002: Skip_metadata. If set, the Result Set returned as a response + to the query (if any) will have the NO_METADATA flag (see + Section 4.2.5.2). + 0x0004: Page_size. If set, is an [int] + controlling the desired page size of the result (in CQL3 rows). + See the section on paging (Section 8) for more details. + 0x0008: With_paging_state. If set, should be present. + is a [bytes] value that should have been returned + in a result set (Section 4.2.5.2). The query will be + executed but starting from a given paging state. This is also to + continue paging on a different node than the one where it + started (See Section 8 for more details). + 0x0010: With serial consistency. If set, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consitency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else other than a + conditional update/insert. + 0x0020: With default timestamp. If set, must be present. + is a [long] representing the default timestamp for the query + in microseconds (negative values are forbidden). This will + replace the server side assigned timestamp as default timestamp. + Note that a timestamp in the query itself will still override + this timestamp. This is entirely optional. + 0x0040: With names for values. This only makes sense if the 0x01 flag is set and + is ignored otherwise. If present, the values from the 0x01 flag will + be preceded by a name (see above). Note that this is only useful for + QUERY requests where named bind markers are used; for EXECUTE statements, + since the names for the expected values was returned during preparation, + a client can always provide values in the right order without any names + and using this flag, while supported, is almost surely inefficient. + 0x0080: With keyspace. If set, must be present. is a + [string] indicating the keyspace that the query should be executed in. + It supercedes the keyspace that the connection is bound to, if any. + 0x0100: With now in seconds. If set, must be present. + is an [int] representing the current time (now) for + the query. Affects TTL cell liveness in read queries and local deletion + time for tombstones and TTL cells in update requests. It's intended + for testing purposes and is optional. + + Note that the consistency is ignored by some queries (USE, CREATE, ALTER, + TRUNCATE, ...). + + The server will respond to a QUERY message with a RESULT message, the content + of which depends on the query. + + +4.1.5. PREPARE + + Prepare a query for later execution (through EXECUTE). The body of the message must be: + [] + where: + - is a [long string] representing the CQL query. + - is a [int] whose bits define the options for this statement and in particular + influence what the remainder of the message contains. + A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x01: With keyspace. If set, must be present. is a + [string] indicating the keyspace that the query should be executed in. + It supercedes the keyspace that the connection is bound to, if any. + + The server will respond with a RESULT message with a `prepared` kind (0x0004, + see Section 4.2.5). + + +4.1.6. EXECUTE + + Executes a prepared query. The body of the message must be: + + where + - is the prepared query ID. It's the [short bytes] returned as a + response to a PREPARE message. + - is the ID of the resultset metadata that was sent + along with response to PREPARE message. If a RESULT/Rows message reports + changed resultset metadata with the Metadata_changed flag, the reported new + resultset metadata must be used in subsequent executions. + - has the exact same definition as in QUERY (see Section 4.1.4). + + +4.1.7. BATCH + + Allows executing a list of queries (prepared or not) as a batch (note that + only DML statements are accepted in a batch). The body of the message must + be: + ...[][][][] + where: + - is a [byte] indicating the type of batch to use: + - If == 0, the batch will be "logged". This is equivalent to a + normal CQL3 batch statement. + - If == 1, the batch will be "unlogged". + - If == 2, the batch will be a "counter" batch (and non-counter + statements will be rejected). + - is a [int] whose bits define the options for this query and + in particular influence what the remainder of the message contains. It is similar + to the from QUERY and EXECUTE methods, except that the 4 rightmost + bits must always be 0 as their corresponding options do not make sense for + Batch. A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x0010: With serial consistency. If set, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consistency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else other than a + conditional update/insert. + 0x0020: With default timestamp. If set, should be present. + is a [long] representing the default timestamp for the query + in microseconds. This will replace the server side assigned + timestamp as default timestamp. Note that a timestamp in the query itself + will still override this timestamp. This is entirely optional. + 0x0040: With names for values. If set, then all values for all must be + preceded by a [string] that have the same meaning as in QUERY + requests [IMPORTANT NOTE: this feature does not work and should not be + used. It is specified in a way that makes it impossible for the server + to implement. This will be fixed in a future version of the native + protocol. See https://issues.apache.org/jira/browse/CASSANDRA-10246 for + more details]. + 0x0080: With keyspace. If set, must be present. is a + [string] indicating the keyspace that the query should be executed in. + It supercedes the keyspace that the connection is bound to, if any. + 0x0100: With now in seconds. If set, must be present. + is an [int] representing the current time (now) for + the query. Affects TTL cell liveness in read queries and local deletion + time for tombstones and TTL cells in update requests. It's intended + for testing purposes and is optional. + - is a [short] indicating the number of following queries. + - ... are the queries to execute. A must be of the + form: + []...[] + where: + - is a [byte] indicating whether the following query is a prepared + one or not. value must be either 0 or 1. + - depends on the value of . If == 0, it should be + a [long string] query string (as in QUERY, the query string might contain + bind markers). Otherwise (that is, if == 1), it should be a + [short bytes] representing a prepared query ID. + - is a [short] indicating the number (possibly 0) of following values. + - is the optional name of the following . It must be present + if and only if the 0x40 flag is provided for the batch. + - is the [value] to use for bound variable i (of bound variable + if the 0x40 flag is used). + - is the [consistency] level for the operation. + - is only present if the 0x10 flag is set. In that case, + is the [consistency] level for the serial phase of + conditional updates. That consitency can only be either SERIAL or + LOCAL_SERIAL and if not present will defaults to SERIAL. This option will + be ignored for anything else other than a conditional update/insert. + + The server will respond with a RESULT message. + + +4.1.8. REGISTER + + Register this connection to receive some types of events. The body of the + message is a [string list] representing the event types to register for. See + section 4.2.6 for the list of valid event types. + + The response to a REGISTER message will be a READY message. + + Please note that if a client driver maintains multiple connections to a + Cassandra node and/or connections to multiple nodes, it is advised to + dedicate a handful of connections to receive events, but to *not* register + for events on all connections, as this would only result in receiving + multiple times the same event messages, wasting bandwidth. + + +4.2. Responses + + This section describes the content of the frame body for the different + responses. Please note that to make room for future evolution, clients should + support extra informations (that they should simply discard) to the one + described in this document at the end of the frame body. + +4.2.1. ERROR + + Indicates an error processing a request. The body of the message will be an + error code ([int]) followed by a [string] error message. Then, depending on + the exception, more content may follow. The error codes are defined in + Section 9, along with their additional content if any. + + +4.2.2. READY + + Indicates that the server is ready to process queries. This message will be + sent by the server either after a STARTUP message if no authentication is + required (if authentication is required, the server indicates readiness by + sending a AUTH_RESPONSE message). + + The body of a READY message is empty. + + +4.2.3. AUTHENTICATE + + Indicates that the server requires authentication, and which authentication + mechanism to use. + + The authentication is SASL based and thus consists of a number of server + challenges (AUTH_CHALLENGE, Section 4.2.7) followed by client responses + (AUTH_RESPONSE, Section 4.1.2). The initial exchange is however boostrapped + by an initial client response. The details of that exchange (including how + many challenge-response pairs are required) are specific to the authenticator + in use. The exchange ends when the server sends an AUTH_SUCCESS message or + an ERROR message. + + This message will be sent following a STARTUP message if authentication is + required and must be answered by a AUTH_RESPONSE message from the client. + + The body consists of a single [string] indicating the full class name of the + IAuthenticator in use. + + +4.2.4. SUPPORTED + + Indicates which startup options are supported by the server. This message + comes as a response to an OPTIONS message. + + The body of a SUPPORTED message is a [string multimap]. This multimap gives + for each of the supported STARTUP options, the list of supported values. It + also includes: + - "PROTOCOL_VERSIONS": the list of native protocol versions that are + supported, encoded as the version number followed by a slash and the + version description. For example: 3/v3, 4/v4, 5/v5-beta. If a version is + in beta, it will have the word "beta" in its description. + + +4.2.5. RESULT + + The result to a query (QUERY, PREPARE, EXECUTE or BATCH messages). + + The first element of the body of a RESULT message is an [int] representing the + `kind` of result. The rest of the body depends on the kind. The kind can be + one of: + 0x0001 Void: for results carrying no information. + 0x0002 Rows: for results to select queries, returning a set of rows. + 0x0003 Set_keyspace: the result to a `use` query. + 0x0004 Prepared: result to a PREPARE message. + 0x0005 Schema_change: the result to a schema altering query. + + The body for each kind (after the [int] kind) is defined below. + + +4.2.5.1. Void + + The rest of the body for a Void result is empty. It indicates that a query was + successful without providing more information. + + +4.2.5.2. Rows + + Indicates a set of rows. The rest of the body of a Rows result is: + + where: + - is composed of: + [][][?...] + where: + - is an [int]. The bits of provides information on the + formatting of the remaining information. A flag is set if the bit + corresponding to its `mask` is set. Supported flags are, given their + mask: + 0x0001 Global_tables_spec: if set, only one table spec (keyspace + and table name) is provided as . If not + set, is not present. + 0x0002 Has_more_pages: indicates whether this is not the last + page of results and more should be retrieved. If set, the + will be present. The is a + [bytes] value that should be used in QUERY/EXECUTE to + continue paging and retrieve the remainder of the result for + this query (See Section 8 for more details). + 0x0004 No_metadata: if set, the is only composed of + these , the and optionally the + (depending on the Has_more_pages flag) but + no other information (so no nor ). + This will only ever be the case if this was requested + during the query (see QUERY and RESULT messages). + 0x0008 Metadata_changed: if set, the No_metadata flag has to be unset + and has to be supplied. This flag is to be + used to avoid a roundtrip in case of metadata changes for queries + that requested metadata to be skipped. + - is an [int] representing the number of columns selected + by the query that produced this result. It defines the number of + elements in and the number of elements for each row in . + - is [short bytes] representing the new, changed resultset + metadata. The new metadata ID must also be used in subsequent executions of + the corresponding prepared statement, if any. + - is present if the Global_tables_spec is set in + . It is composed of two [string] representing the + (unique) keyspace name and table name the columns belong to. + - specifies the columns returned in the query. There are + such column specifications that are composed of: + ()? + The initial and are two [string] and are only present + if the Global_tables_spec flag is not set. The is a + [string] and is an [option] that corresponds to the description + (what this description is depends a bit on the context: in results to + selects, this will be either the user chosen alias or the selection used + (often a colum name, but it can be a function call too). In results to + a PREPARE, this will be either the name of the corresponding bind variable + or the column name for the variable if it is "anonymous") and type of + the corresponding result. The option for is either a native + type (see below), in which case the option has no value, or a + 'custom' type, in which case the value is a [string] representing + the fully qualified class name of the type represented. Valid option + ids are: + 0x0000 Custom: the value is a [string], see above. + 0x0001 Ascii + 0x0002 Bigint + 0x0003 Blob + 0x0004 Boolean + 0x0005 Counter + 0x0006 Decimal + 0x0007 Double + 0x0008 Float + 0x0009 Int + 0x000B Timestamp + 0x000C Uuid + 0x000D Varchar + 0x000E Varint + 0x000F Timeuuid + 0x0010 Inet + 0x0011 Date + 0x0012 Time + 0x0013 Smallint + 0x0014 Tinyint + 0x0015 Duration + 0x0020 List: the value is an [option], representing the type + of the elements of the list. + 0x0021 Map: the value is two [option], representing the types of the + keys and values of the map + 0x0022 Set: the value is an [option], representing the type + of the elements of the set + 0x0030 UDT: the value is ... + where: + - is a [string] representing the keyspace name this + UDT is part of. + - is a [string] representing the UDT name. + - is a [short] representing the number of fields of + the UDT, and thus the number of pairs + following + - is a [string] representing the name of the + i_th field of the UDT. + - is an [option] representing the type of the + i_th field of the UDT. + 0x0031 Tuple: the value is ... where is a [short] + representing the number of values in the type, and + are [option] representing the type of the i_th component + of the tuple + + - is an [int] representing the number of rows present in this + result. Those rows are serialized in the part. + - is composed of ... where m is . + Each is composed of ... where n is + and where is a [bytes] representing the value + returned for the jth column of the ith row. In other words, + is composed of ( * ) [bytes]. + + +4.2.5.3. Set_keyspace + + The result to a `use` query. The body (after the kind [int]) is a single + [string] indicating the name of the keyspace that has been set. + + +4.2.5.4. Prepared + + The result to a PREPARE message. The body of a Prepared result is: + + where: + - is [short bytes] representing the prepared query ID. + - is [short bytes] representing the resultset metadata ID. + - is composed of: + [...][?...] + where: + - is an [int]. The bits of provides information on the + formatting of the remaining information. A flag is set if the bit + corresponding to its `mask` is set. Supported masks and their flags + are: + 0x0001 Global_tables_spec: if set, only one table spec (keyspace + and table name) is provided as . If not + set, is not present. + - is an [int] representing the number of bind markers + in the prepared statement. It defines the number of + elements. + - is an [int] representing the number of + elements to follow. If this value is zero, at least one of the + partition key columns in the table that the statement acts on + did not have a corresponding bind marker (or the bind marker + was wrapped in a function call). + - is a short that represents the index of the bind marker + that corresponds to the partition key column in position i. + For example, a sequence of [2, 0, 1] indicates that the + table has three partition key columns; the full partition key + can be constructed by creating a composite of the values for + the bind markers at index 2, at index 0, and at index 1. + This allows implementations with token-aware routing to correctly + construct the partition key without needing to inspect table + metadata. + - is present if the Global_tables_spec is set in + . If present, it is composed of two [string]s. The first + [string] is the name of the keyspace that the statement acts on. + The second [string] is the name of the table that the columns + represented by the bind markers belong to. + - specifies the bind markers in the prepared statement. + There are such column specifications, each with the + following format: + ()? + The initial and are two [string] that are only + present if the Global_tables_spec flag is not set. The field + is a [string] that holds the name of the bind marker (if named), + or the name of the column, field, or expression that the bind marker + corresponds to (if the bind marker is "anonymous"). The + field is an [option] that represents the expected type of values for + the bind marker. See the Rows documentation (section 4.2.5.2) for + full details on the field. + + - is defined exactly the same as in the Rows + documentation (section 4.2.5.2). This describes the metadata for the + result set that will be returned when this prepared statement is executed. + Note that may be empty (have the No_metadata flag and + 0 columns, See section 4.2.5.2) and will be for any query that is not a + Select. In fact, there is never a guarantee that this will be non-empty, so + implementations should protect themselves accordingly. This result metadata + is an optimization that allows implementations to later execute the + prepared statement without requesting the metadata (see the Skip_metadata + flag in EXECUTE). Clients can safely discard this metadata if they do not + want to take advantage of that optimization. + + Note that the prepared query ID returned is global to the node on which the query + has been prepared. It can be used on any connection to that node + until the node is restarted (after which the query must be reprepared). + +4.2.5.5. Schema_change + + The result to a schema altering query (creation/update/drop of a + keyspace/table/index). The body (after the kind [int]) is the same + as the body for a "SCHEMA_CHANGE" event, so 3 strings: + + Please refer to section 4.2.6 below for the meaning of those fields. + + Note that a query to create or drop an index is considered to be a change + to the table the index is on. + + +4.2.6. EVENT + + An event pushed by the server. A client will only receive events for the + types it has REGISTERed to. The body of an EVENT message will start with a + [string] representing the event type. The rest of the message depends on the + event type. The valid event types are: + - "TOPOLOGY_CHANGE": events related to change in the cluster topology. + Currently, events are sent when new nodes are added to the cluster, and + when nodes are removed. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of change ("NEW_NODE" or "REMOVED_NODE") followed by the address of + the new/removed node. + - "STATUS_CHANGE": events related to change of node status. Currently, + up/down events are sent. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of status change ("UP" or "DOWN") followed by the address of the + concerned node. + - "SCHEMA_CHANGE": events related to schema change. After the event type, + the rest of the message will be where: + - is a [string] representing the type of changed involved. + It will be one of "CREATED", "UPDATED" or "DROPPED". + - is a [string] that can be one of "KEYSPACE", "TABLE", "TYPE", + "FUNCTION" or "AGGREGATE" and describes what has been modified + ("TYPE" stands for modifications related to user types, "FUNCTION" + for modifications related to user defined functions, "AGGREGATE" + for modifications related to user defined aggregates). + - depends on the preceding : + - If is "KEYSPACE", then will be a single [string] + representing the keyspace changed. + - If is "TABLE" or "TYPE", then + will be 2 [string]: the first one will be the keyspace + containing the affected object, and the second one will be the name + of said affected object (either the table, user type, function, or + aggregate name). + - If is "FUNCTION" or "AGGREGATE", multiple arguments follow: + - [string] keyspace containing the user defined function / aggregate + - [string] the function/aggregate name + - [string list] one string for each argument type (as CQL type) + + All EVENT messages have a streamId of -1 (Section 2.3). + + Please note that "NEW_NODE" and "UP" events are sent based on internal Gossip + communication and as such may be sent a short delay before the binary + protocol server on the newly up node is fully started. Clients are thus + advised to wait a short time before trying to connect to the node (1 second + should be enough), otherwise they may experience a connection refusal at + first. + +4.2.7. AUTH_CHALLENGE + + A server authentication challenge (see AUTH_RESPONSE (Section 4.1.2) for more + details). + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + Clients are expected to answer the server challenge with an AUTH_RESPONSE + message. + +4.2.8. AUTH_SUCCESS + + Indicates the success of the authentication phase. See Section 4.2.3 for more + details. + + The body of this message is a single [bytes] token holding final information + from the server that the client may require to finish the authentication + process. What that token contains and whether it can be null depends on the + actual authenticator used. + + +5. Compression + + Frame compression is supported by the protocol, but then only the frame body + is compressed (the frame header should never be compressed). + + Before being used, client and server must agree on a compression algorithm to + use, which is done in the STARTUP message. As a consequence, a STARTUP message + must never be compressed. However, once the STARTUP frame has been received + by the server, messages can be compressed (including the response to the STARTUP + request). Frames do not have to be compressed, however, even if compression has + been agreed upon (a server may only compress frames above a certain size at its + discretion). A frame body should be compressed if and only if the compressed + flag (see Section 2.2) is set. + + As of version 2 of the protocol, the following compressions are available: + - lz4 (https://code.google.com/p/lz4/). In that, note that the first four bytes + of the body will be the uncompressed length (followed by the compressed + bytes). + - snappy (https://code.google.com/p/snappy/). This compression might not be + available as it depends on a native lib (server-side) that might not be + avaivable on some installations. + + +6. Data Type Serialization Formats + + This sections describes the serialization formats for all CQL data types + supported by Cassandra through the native protocol. These serialization + formats should be used by client drivers to encode values for EXECUTE + messages. Cassandra will use these formats when returning values in + RESULT messages. + + All values are represented as [bytes] in EXECUTE and RESULT messages. + The [bytes] format includes an int prefix denoting the length of the value. + For that reason, the serialization formats described here will not include + a length component. + + For legacy compatibility reasons, note that most non-string types support + "empty" values (i.e. a value with zero length). An empty value is distinct + from NULL, which is encoded with a negative length. + + As with the rest of the native protocol, all encodings are big-endian. + +6.1. ascii + + A sequence of bytes in the ASCII range [0, 127]. Bytes with values outside of + this range will result in a validation error. + +6.2 bigint + + An eight-byte two's complement integer. + +6.3 blob + + Any sequence of bytes. + +6.4 boolean + + A single byte. A value of 0 denotes "false"; any other value denotes "true". + (However, it is recommended that a value of 1 be used to represent "true".) + +6.5 date + + An unsigned integer representing days with epoch centered at 2^31. + (unix epoch January 1st, 1970). + A few examples: + 0: -5877641-06-23 + 2^31: 1970-1-1 + 2^32: 5881580-07-11 + +6.6 decimal + + The decimal format represents an arbitrary-precision number. It contains an + [int] "scale" component followed by a varint encoding (see section 6.17) + of the unscaled value. The encoded value represents "E<-scale>". + In other words, " * 10 ^ (-1 * )". + +6.7 double + + An 8 byte floating point number in the IEEE 754 binary64 format. + +6.8 duration + + A duration is composed of 3 signed variable length integers ([vint]s). + The first [vint] represents a number of months, the second [vint] represents + a number of days, and the last [vint] represents a number of nanoseconds. + The number of months and days must be valid 32 bits integers whereas the + number of nanoseconds must be a valid 64 bits integer. + A duration can either be positive or negative. If a duration is positive + all the integers must be positive or zero. If a duration is + negative all the numbers must be negative or zero. + +6.9 float + + A 4 byte floating point number in the IEEE 754 binary32 format. + +6.10 inet + + A 4 byte or 16 byte sequence denoting an IPv4 or IPv6 address, respectively. + +6.11 int + + A 4 byte two's complement integer. + +6.12 list + + A [int] n indicating the number of elements in the list, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.13 map + + A [int] n indicating the number of key/value pairs in the map, followed by + n entries. Each entry is composed of two [bytes] representing the key + and value. + +6.14 set + + A [int] n indicating the number of elements in the set, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.15 smallint + + A 2 byte two's complement integer. + +6.16 text + + A sequence of bytes conforming to the UTF-8 specifications. + +6.17 time + + An 8 byte two's complement long representing nanoseconds since midnight. + Valid values are in the range 0 to 86399999999999 + +6.18 timestamp + + An 8 byte two's complement integer representing a millisecond-precision + offset from the unix epoch (00:00:00, January 1st, 1970). Negative values + represent a negative offset from the epoch. + +6.19 timeuuid + + A 16 byte sequence representing a version 1 UUID as defined by RFC 4122. + +6.20 tinyint + + A 1 byte two's complement integer. + +6.21 tuple + + A sequence of [bytes] values representing the items in a tuple. The encoding + of each element depends on the data type for that position in the tuple. + Null values may be represented by using length -1 for the [bytes] + representation of an element. + +6.22 uuid + + A 16 byte sequence representing any valid UUID as defined by RFC 4122. + +6.23 varchar + + An alias of the "text" type. + +6.24 varint + + A variable-length two's complement encoding of a signed integer. + + The following examples may help implementors of this spec: + + Value | Encoding + ------|--------- + 0 | 0x00 + 1 | 0x01 + 127 | 0x7F + 128 | 0x0080 + 129 | 0x0081 + -1 | 0xFF + -128 | 0x80 + -129 | 0xFF7F + + Note that positive numbers must use a most-significant byte with a value + less than 0x80, because a most-significant bit of 1 indicates a negative + value. Implementors should pad positive values that have a MSB >= 0x80 + with a leading 0x00 byte. + + +7. User Defined Types + + This section describes the serialization format for User defined types (UDT), + as described in section 4.2.5.2. + + A UDT value is composed of successive [bytes] values, one for each field of the UDT + value (in the order defined by the type). A UDT value will generally have one value + for each field of the type it represents, but it is allowed to have less values than + the type has fields. + + +8. Result paging + + The protocol allows for paging the result of queries. For that, the QUERY and + EXECUTE messages have a value that indicate the desired + page size in CQL3 rows. + + If a positive value is provided for , the result set of the + RESULT message returned for the query will contain at most the + first rows of the query result. If that first page of results + contains the full result set for the query, the RESULT message (of kind `Rows`) + will have the Has_more_pages flag *not* set. However, if some results are not + part of the first response, the Has_more_pages flag will be set and the result + will contain a value. In that case, the value + should be used in a QUERY or EXECUTE message (that has the *same* query as + the original one or the behavior is undefined) to retrieve the next page of + results. + + Only CQL3 queries that return a result set (RESULT message with a Rows `kind`) + support paging. For other type of queries, the value is + ignored. + + Note to client implementors: + - While can be as low as 1, it will likely be detrimental + to performance to pick a value too low. A value below 100 is probably too + low for most use cases. + - Clients should not rely on the actual size of the result set returned to + decide if there are more results to fetch or not. Instead, they should always + check the Has_more_pages flag (unless they did not enable paging for the query + obviously). Clients should also not assert that no result will have more than + results. While the current implementation always respects + the exact value of , we reserve the right to return + slightly smaller or bigger pages in the future for performance reasons. + - The is specific to a protocol version and drivers should not + send a returned by a node using the protocol v3 to query a node + using the protocol v4 for instance. + + +9. Error codes + + Let us recall that an ERROR message is composed of [...] + (see 4.2.1 for details). The supported error codes, as well as any additional + information the message may contain after the are described below: + 0x0000 Server error: something unexpected happened. This indicates a + server-side bug. + 0x000A Protocol error: some client message triggered a protocol + violation (for instance a QUERY message is sent before a STARTUP + one has been sent) + 0x0100 Authentication error: authentication was required and failed. The + possible reason for failing depends on the authenticator in use, + which may or may not include more detail in the accompanying + error message. + 0x1000 Unavailable exception. The rest of the ERROR message body will be + + where: + is the [consistency] level of the query that triggered + the exception. + is an [int] representing the number of nodes that + should be alive to respect + is an [int] representing the number of replicas that + were known to be alive when the request had been + processed (since an unavailable exception has been + triggered, there will be < ) + 0x1001 Overloaded: the request cannot be processed because the + coordinator node is overloaded + 0x1002 Is_bootstrapping: the request was a read request but the + coordinator node is bootstrapping + 0x1003 Truncate_error: error during a truncation error. + 0x1100 Write_timeout: Timeout exception during a write request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + acknowledged the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is a [string] that describe the type of the write + that timed out. The value of that string can be one + of: + - "SIMPLE": the write was a non-batched + non-counter write. + - "BATCH": the write was a (logged) batch write. + If this type is received, it means the batch log + has been successfully written (otherwise a + "BATCH_LOG" type would have been sent instead). + - "UNLOGGED_BATCH": the write was an unlogged + batch. No batch log write has been attempted. + - "COUNTER": the write was a counter write + (batched or not). + - "BATCH_LOG": the timeout occurred during the + write to the batch log when a (logged) batch + write was requested. + - "CAS": the timeout occured during the Compare And Set write/update. + - "VIEW": the timeout occured when a write involves + VIEW update and failure to acqiure local view(MV) + lock for key within timeout + - "CDC": the timeout occured when cdc_total_space_in_mb is + exceeded when doing a write to data tracked by cdc. + is a [short] that describes the number of contentions occured during the CAS operation. + The field only presents when the is "CAS". + 0x1200 Read_timeout: Timeout exception during a read request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + response is required to achieve . Please note that + it is possible to have >= if + is false. Also in the (unlikely) + case where is achieved but the coordinator node + times out while waiting for read-repair acknowledgement. + is a single byte. If its value is 0, it means + the replica that was asked for data has not + responded. Otherwise, the value is != 0. + 0x1300 Read_failure: A non-timeout exception during a read request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is a map of endpoint to failure reason codes. This maps + the endpoints of the replica nodes that failed when + executing the request to a code representing the reason + for the failure. The map is encoded starting with an [int] n + followed by n pairs of where + is an [inetaddr] and is a [short]. + is a single byte. If its value is 0, it means + the replica that was asked for data had not + responded. Otherwise, the value is != 0. + 0x1400 Function_failure: A (user defined) function failed during execution. + The rest of the ERROR message body will be + + where: + is the keyspace [string] of the failed function + is the name [string] of the failed function + [string list] one string for each argument type (as CQL type) of the failed function + 0x1500 Write_failure: A non-timeout exception during a write request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is a map of endpoint to failure reason codes. This maps + the endpoints of the replica nodes that failed when + executing the request to a code representing the reason + for the failure. The map is encoded starting with an [int] n + followed by n pairs of where + is an [inetaddr] and is a [short]. + is a [string] that describes the type of the write + that failed. The value of that string can be one + of: + - "SIMPLE": the write was a non-batched + non-counter write. + - "BATCH": the write was a (logged) batch write. + If this type is received, it means the batch log + has been successfully written (otherwise a + "BATCH_LOG" type would have been sent instead). + - "UNLOGGED_BATCH": the write was an unlogged + batch. No batch log write has been attempted. + - "COUNTER": the write was a counter write + (batched or not). + - "BATCH_LOG": the failure occured during the + write to the batch log when a (logged) batch + write was requested. + - "CAS": the failure occured during the Compare And Set write/update. + - "VIEW": the failure occured when a write involves + VIEW update and failure to acqiure local view(MV) + lock for key within timeout + - "CDC": the failure occured when cdc_total_space_in_mb is + exceeded when doing a write to data tracked by cdc. + 0x1600 CDC_WRITE_FAILURE: // todo + 0x1700 CAS_WRITE_UNKNOWN: An exception occured due to contended Compare And Set write/update. + The CAS operation was only partially completed and the operation may or may not get completed by + the contending CAS write or SERIAL/LOCAL_SERIAL read. The rest of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + acknowledged the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + + 0x2000 Syntax_error: The submitted query has a syntax error. + 0x2100 Unauthorized: The logged user doesn't have the right to perform + the query. + 0x2200 Invalid: The query is syntactically correct but invalid. + 0x2300 Config_error: The query is invalid because of some configuration issue + 0x2400 Already_exists: The query attempted to create a keyspace or a + table that was already existing. The rest of the ERROR message + body will be
    where: + is a [string] representing either the keyspace that + already exists, or the keyspace in which the table that + already exists is. +
    is a [string] representing the name of the table that + already exists. If the query was attempting to create a + keyspace,
    will be present but will be the empty + string. + 0x2500 Unprepared: Can be thrown while a prepared statement tries to be + executed if the provided prepared statement ID is not known by + this host. The rest of the ERROR message body will be [short + bytes] representing the unknown ID. + +10. Changes from v4 + + * Beta protocol flag for v5 native protocol is added (Section 2.2) + * in Read_failure and Write_failure error message bodies (Section 9) + has been replaced with . The maps node IP addresses to + a failure reason code which indicates why the request failed on that node. + * Enlarged flag's bitmaps for QUERY, EXECUTE and BATCH messages from [byte] to [int] + (Sections 4.1.4, 4.1.6 and 4.1.7). + * Add the duration data type + * Added keyspace field in QUERY, PREPARE, and BATCH messages (Sections 4.1.4, 4.1.5, and 4.1.7). + * Added now_in_seconds field in QUERY, EXECUTE, and BATCH messages (Sections 4.1.4, 4.1.6, and 4.1.7). + * Added [int] flags field in PREPARE message (Section 4.1.5). + * Removed NO_COMPACT startup option (Section 4.1.1.) diff --git a/doc/source/modules/cassandra/pages/cql/SASI.adoc b/doc/source/modules/cassandra/pages/cql/SASI.adoc new file mode 100644 index 000000000000..6650bb4db2f3 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/SASI.adoc @@ -0,0 +1,809 @@ +== SASIIndex + +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/SASIIndex.java[`SASIIndex`], +or ``SASI'' for short, is an implementation of Cassandra’s `Index` +interface that can be used as an alternative to the existing +implementations. SASI’s indexing and querying improves on existing +implementations by tailoring it specifically to Cassandra’s needs. SASI +has superior performance in cases where queries would previously require +filtering. In achieving this performance, SASI aims to be significantly +less resource intensive than existing implementations, in memory, disk, +and CPU usage. In addition, SASI supports prefix and contains queries on +strings (similar to SQL’s `LIKE = "foo*"` or `LIKE = "*foo*"'`). + +The following goes on describe how to get up and running with SASI, +demonstrates usage with examples, and provides some details on its +implementation. + +=== Using SASI + +The examples below walk through creating a table and indexes on its +columns, and performing queries on some inserted data. + +The examples below assume the `demo` keyspace has been created and is in +use. + +.... +cqlsh> CREATE KEYSPACE demo WITH replication = { + ... 'class': 'SimpleStrategy', + ... 'replication_factor': '1' + ... }; +cqlsh> USE demo; +.... + +All examples are performed on the `sasi` table: + +.... +cqlsh:demo> CREATE TABLE sasi (id uuid, first_name text, last_name text, + ... age int, height int, created_at bigint, primary key (id)); +.... + +==== Creating Indexes + +To create SASI indexes use CQLs `CREATE CUSTOM INDEX` statement: + +.... +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (first_name) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = { + ... 'analyzer_class': + ... 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer', + ... 'case_sensitive': 'false' + ... }; + +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (last_name) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = {'mode': 'CONTAINS'}; + +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (age) USING 'org.apache.cassandra.index.sasi.SASIIndex'; + +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (created_at) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = {'mode': 'SPARSE'}; +.... + +The indexes created have some options specified that customize their +behaviour and potentially performance. The index on `first_name` is +case-insensitive. The analyzers are discussed more in a subsequent +example. The `NonTokenizingAnalyzer` performs no analysis on the text. +Each index has a mode: `PREFIX`, `CONTAINS`, or `SPARSE`, the first +being the default. The `last_name` index is created with the mode +`CONTAINS` which matches terms on suffixes instead of prefix only. +Examples of this are available below and more detail can be found in the +section on link:#ondiskindexbuilder[OnDiskIndex].The `created_at` column +is created with its mode set to `SPARSE`, which is meant to improve +performance of querying large, dense number ranges like timestamps for +data inserted every millisecond. Details of the `SPARSE` implementation +can also be found in the section on the +link:#ondiskindexbuilder[OnDiskIndex]. The `age` index is created with +the default `PREFIX` mode and no case-sensitivity or text analysis +options are specified since the field is numeric. + +After inserting the following data and performing a `nodetool flush`, +SASI performing index flushes to disk can be seen in Cassandra’s logs – +although the direct call to flush is not required (see +link:#indexmemtable[IndexMemtable] for more details). + +.... +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (556ebd54-cbe5-4b75-9aae-bf2a31a24500, 'Pavel', 'Yaskevich', 27, 181, 1442959315018); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (5770382a-c56f-4f3f-b755-450e24d55217, 'Jordan', 'West', 26, 173, 1442959315019); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (96053844-45c3-4f15-b1b7-b02c441d3ee1, 'Mikhail', 'Stepura', 36, 173, 1442959315020); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (f5dfcabe-de96-4148-9b80-a1c41ed276b4, 'Michael', 'Kjellman', 26, 180, 1442959315021); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (2970da43-e070-41a8-8bcb-35df7a0e608a, 'Johnny', 'Zhang', 32, 175, 1442959315022); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (6b757016-631d-4fdb-ac62-40b127ccfbc7, 'Jason', 'Brown', 40, 182, 1442959315023); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (8f909e8a-008e-49dd-8d43-1b0df348ed44, 'Vijay', 'Parthasarathy', 34, 183, 1442959315024); + +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi; + + first_name | last_name | age | height | created_at +------------+---------------+-----+--------+--------------- + Michael | Kjellman | 26 | 180 | 1442959315021 + Mikhail | Stepura | 36 | 173 | 1442959315020 + Jason | Brown | 40 | 182 | 1442959315023 + Pavel | Yaskevich | 27 | 181 | 1442959315018 + Vijay | Parthasarathy | 34 | 183 | 1442959315024 + Jordan | West | 26 | 173 | 1442959315019 + Johnny | Zhang | 32 | 175 | 1442959315022 + +(7 rows) +.... + +==== Equality & Prefix Queries + +SASI supports all queries already supported by CQL, including LIKE +statement for PREFIX, CONTAINS and SUFFIX searches. + +.... +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name = 'Pavel'; + + first_name | last_name | age | height | created_at +-------------+-----------+-----+--------+--------------- + Pavel | Yaskevich | 27 | 181 | 1442959315018 + +(1 rows) +.... + +.... +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name = 'pavel'; + + first_name | last_name | age | height | created_at +-------------+-----------+-----+--------+--------------- + Pavel | Yaskevich | 27 | 181 | 1442959315018 + +(1 rows) +.... + +.... +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name LIKE 'M%'; + + first_name | last_name | age | height | created_at +------------+-----------+-----+--------+--------------- + Michael | Kjellman | 26 | 180 | 1442959315021 + Mikhail | Stepura | 36 | 173 | 1442959315020 + +(2 rows) +.... + +Of course, the case of the query does not matter for the `first_name` +column because of the options provided at index creation time. + +.... +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name LIKE 'm%'; + + first_name | last_name | age | height | created_at +------------+-----------+-----+--------+--------------- + Michael | Kjellman | 26 | 180 | 1442959315021 + Mikhail | Stepura | 36 | 173 | 1442959315020 + +(2 rows) +.... + +==== Compound Queries + +SASI supports queries with multiple predicates, however, due to the +nature of the default indexing implementation, CQL requires the user to +specify `ALLOW FILTERING` to opt-in to the potential performance +pitfalls of such a query. With SASI, while the requirement to include +`ALLOW FILTERING` remains, to reduce modifications to the grammar, the +performance pitfalls do not exist because filtering is not performed. +Details on how SASI joins data from multiple predicates is available +below in the link:#implementation-details[Implementation Details] +section. + +.... +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name LIKE 'M%' and age < 30 ALLOW FILTERING; + + first_name | last_name | age | height | created_at +------------+-----------+-----+--------+--------------- + Michael | Kjellman | 26 | 180 | 1442959315021 + +(1 rows) +.... + +==== Suffix Queries + +The next example demonstrates `CONTAINS` mode on the `last_name` column. +By using this mode, predicates can search for any strings containing the +search string as a sub-string. In this case the strings containing ``a'' +or ``an''. + +.... +cqlsh:demo> SELECT * FROM sasi WHERE last_name LIKE '%a%'; + + id | age | created_at | first_name | height | last_name +--------------------------------------+-----+---------------+------------+--------+--------------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | 1442959315021 | Michael | 180 | Kjellman + 96053844-45c3-4f15-b1b7-b02c441d3ee1 | 36 | 1442959315020 | Mikhail | 173 | Stepura + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | 1442959315018 | Pavel | 181 | Yaskevich + 8f909e8a-008e-49dd-8d43-1b0df348ed44 | 34 | 1442959315024 | Vijay | 183 | Parthasarathy + 2970da43-e070-41a8-8bcb-35df7a0e608a | 32 | 1442959315022 | Johnny | 175 | Zhang + +(5 rows) + +cqlsh:demo> SELECT * FROM sasi WHERE last_name LIKE '%an%'; + + id | age | created_at | first_name | height | last_name +--------------------------------------+-----+---------------+------------+--------+----------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | 1442959315021 | Michael | 180 | Kjellman + 2970da43-e070-41a8-8bcb-35df7a0e608a | 32 | 1442959315022 | Johnny | 175 | Zhang + +(2 rows) +.... + +==== Expressions on Non-Indexed Columns + +SASI also supports filtering on non-indexed columns like `height`. The +expression can only narrow down an existing query using `AND`. + +.... +cqlsh:demo> SELECT * FROM sasi WHERE last_name LIKE '%a%' AND height >= 175 ALLOW FILTERING; + + id | age | created_at | first_name | height | last_name +--------------------------------------+-----+---------------+------------+--------+--------------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | 1442959315021 | Michael | 180 | Kjellman + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | 1442959315018 | Pavel | 181 | Yaskevich + 8f909e8a-008e-49dd-8d43-1b0df348ed44 | 34 | 1442959315024 | Vijay | 183 | Parthasarathy + 2970da43-e070-41a8-8bcb-35df7a0e608a | 32 | 1442959315022 | Johnny | 175 | Zhang + +(4 rows) +.... + +==== Delimiter based Tokenization Analysis + +A simple text analysis provided is delimiter based tokenization. This +provides an alternative to indexing collections, as delimiter separated +text can be indexed without the overhead of `CONTAINS` mode nor using +`PREFIX` or `SUFFIX` queries. + +.... +cqlsh:demo> ALTER TABLE sasi ADD aliases text; +cqlsh:demo> CREATE CUSTOM INDEX on sasi (aliases) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = { + ... 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.DelimiterAnalyzer', + ... 'delimiter': ',', + ... 'mode': 'prefix', + ... 'analyzed': 'true'}; +cqlsh:demo> UPDATE sasi SET aliases = 'Mike,Mick,Mikey,Mickey' WHERE id = f5dfcabe-de96-4148-9b80-a1c41ed276b4; +cqlsh:demo> SELECT * FROM sasi WHERE aliases LIKE 'Mikey' ALLOW FILTERING; + + id | age | aliases | created_at | first_name | height | last_name +--------------------------------------+-----+------------------------+---------------+------------+--------+----------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | Mike,Mick,Mikey,Mickey | 1442959315021 | Michael | 180 | Kjellman +.... + +==== Text Analysis (Tokenization and Stemming) + +Lastly, to demonstrate text analysis an additional column is needed on +the table. Its definition, index, and statements to update rows are +shown below. + +.... +cqlsh:demo> ALTER TABLE sasi ADD bio text; +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (bio) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = { + ... 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', + ... 'tokenization_enable_stemming': 'true', + ... 'analyzed': 'true', + ... 'tokenization_normalize_lowercase': 'true', + ... 'tokenization_locale': 'en' + ... }; +cqlsh:demo> UPDATE sasi SET bio = 'Software Engineer, who likes distributed systems, doesnt like to argue.' WHERE id = 5770382a-c56f-4f3f-b755-450e24d55217; +cqlsh:demo> UPDATE sasi SET bio = 'Software Engineer, works on the freight distribution at nights and likes arguing' WHERE id = 556ebd54-cbe5-4b75-9aae-bf2a31a24500; +cqlsh:demo> SELECT * FROM sasi; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+--------------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | null | 1442959315021 | Michael | 180 | Kjellman + 96053844-45c3-4f15-b1b7-b02c441d3ee1 | 36 | null | 1442959315020 | Mikhail | 173 | Stepura + 6b757016-631d-4fdb-ac62-40b127ccfbc7 | 40 | null | 1442959315023 | Jason | 182 | Brown + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + 8f909e8a-008e-49dd-8d43-1b0df348ed44 | 34 | null | 1442959315024 | Vijay | 183 | Parthasarathy + 5770382a-c56f-4f3f-b755-450e24d55217 | 26 | Software Engineer, who likes distributed systems, doesnt like to argue. | 1442959315019 | Jordan | 173 | West + 2970da43-e070-41a8-8bcb-35df7a0e608a | 32 | null | 1442959315022 | Johnny | 175 | Zhang + +(7 rows) +.... + +Index terms and query search strings are stemmed for the `bio` column +because it was configured to use the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java[`StandardAnalyzer`] +and `analyzed` is set to `true`. The `tokenization_normalize_lowercase` +is similar to the `case_sensitive` property but for the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java[`StandardAnalyzer`]. +These query demonstrates the stemming applied by +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java[`StandardAnalyzer`]. + +.... +cqlsh:demo> SELECT * FROM sasi WHERE bio LIKE 'distributing'; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+----------- + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + 5770382a-c56f-4f3f-b755-450e24d55217 | 26 | Software Engineer, who likes distributed systems, doesnt like to argue. | 1442959315019 | Jordan | 173 | West + +(2 rows) + +cqlsh:demo> SELECT * FROM sasi WHERE bio LIKE 'they argued'; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+----------- + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + 5770382a-c56f-4f3f-b755-450e24d55217 | 26 | Software Engineer, who likes distributed systems, doesnt like to argue. | 1442959315019 | Jordan | 173 | West + +(2 rows) + +cqlsh:demo> SELECT * FROM sasi WHERE bio LIKE 'working at the company'; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+----------- + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + +(1 rows) + +cqlsh:demo> SELECT * FROM sasi WHERE bio LIKE 'soft eng'; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+----------- + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + 5770382a-c56f-4f3f-b755-450e24d55217 | 26 | Software Engineer, who likes distributed systems, doesnt like to argue. | 1442959315019 | Jordan | 173 | West + +(2 rows) +.... + +=== Implementation Details + +While SASI, at the surface, is simply an implementation of the `Index` +interface, at its core there are several data structures and algorithms +used to satisfy it. These are described here. Additionally, the changes +internal to Cassandra to support SASI’s integration are described. + +The `Index` interface divides responsibility of the implementer into two +parts: Indexing and Querying. Further, Cassandra makes it possible to +divide those responsibilities into the memory and disk components. SASI +takes advantage of Cassandra’s write-once, immutable, ordered data model +to build indexes along with the flushing of the memtable to disk – this +is the origin of the name ``SSTable Attached Secondary Index''. + +The SASI index data structures are built in memory as the SSTable is +being written and they are flushed to disk before the writing of the +SSTable completes. The writing of each index file only requires +sequential writes to disk. In some cases, partial flushes are performed, +and later stitched back together, to reduce memory usage. These data +structures are optimized for this use case. + +Taking advantage of Cassandra’s ordered data model, at query time, +candidate indexes are narrowed down for searching, minimizing the amount +of work done. Searching is then performed using an efficient method that +streams data off disk as needed. + +==== Indexing + +Per SSTable, SASI writes an index file for each indexed column. The data +for these files is built in memory using the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndexBuilder.java[`OnDiskIndexBuilder`]. +Once flushed to disk, the data is read using the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java[`OnDiskIndex`] +class. These are composed of bytes representing indexed terms, organized +for efficient writing or searching respectively. The keys and values +they hold represent tokens and positions in an SSTable and these are +stored per-indexed term in +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java[`TokenTreeBuilder`]s +for writing, and +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java[`TokenTree`]s +for querying. These index files are memory mapped after being written to +disk, for quicker access. For indexing data in the memtable, SASI uses +its +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java[`IndexMemtable`] +class. + +===== OnDiskIndex(Builder) + +Each +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java[`OnDiskIndex`] +is an instance of a modified +https://en.wikipedia.org/wiki/Suffix_array[Suffix Array] data structure. +The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java[`OnDiskIndex`] +is comprised of page-size blocks of sorted terms and pointers to the +terms’ associated data, as well as the data itself, stored also in one +or more page-sized blocks. The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java[`OnDiskIndex`] +is structured as a tree of arrays, where each level describes the terms +in the level below, the final level being the terms themselves. The +`PointerLevel`s and their `PointerBlock`s contain terms and pointers to +other blocks that _end_ with those terms. The `DataLevel`, the final +level, and its `DataBlock`s contain terms and point to the data itself, +contained in +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java[`TokenTree`]s. + +The terms written to the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java[`OnDiskIndex`] +vary depending on its ``mode'': either `PREFIX`, `CONTAINS`, or +`SPARSE`. In the `PREFIX` and `SPARSE` cases, terms’ exact values are +written exactly once per `OnDiskIndex`. For example, when using a +`PREFIX` index with terms `Jason`, `Jordan`, `Pavel`, all three will be +included in the index. A `CONTAINS` index writes additional terms for +each suffix of each term recursively. Continuing with the example, a +`CONTAINS` index storing the previous terms would also store `ason`, +`ordan`, `avel`, `son`, `rdan`, `vel`, etc. This allows for queries on +the suffix of strings. The `SPARSE` mode differs from `PREFIX` in that +for every 64 blocks of terms a +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java[`TokenTree`] +is built merging all the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java[`TokenTree`]s +for each term into a single one. This copy of the data is used for +efficient iteration of large ranges of e.g. timestamps. The index +``mode'' is configurable per column at index creation time. + +===== TokenTree(Builder) + +The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java[`TokenTree`] +is an implementation of the well-known +https://en.wikipedia.org/wiki/B%2B_tree[B+-tree] that has been modified +to optimize for its use-case. In particular, it has been optimized to +associate tokens, longs, with a set of positions in an SSTable, also +longs. Allowing the set of long values accommodates the possibility of a +hash collision in the token, but the data structure is optimized for the +unlikely possibility of such a collision. + +To optimize for its write-once environment the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java[`TokenTreeBuilder`] +completely loads its interior nodes as the tree is built and it uses the +well-known algorithm optimized for bulk-loading the data structure. + +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java[`TokenTree`]s +provide the means to iterate over tokens, and file positions, that match +a given term, and to skip forward in that iteration, an operation used +heavily at query time. + +===== IndexMemtable + +The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java[`IndexMemtable`] +handles indexing the in-memory data held in the memtable. The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java[`IndexMemtable`] +in turn manages either a +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java[`TrieMemIndex`] +or a +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java[`SkipListMemIndex`] +per-column. The choice of which index type is used is data dependent. +The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java[`TrieMemIndex`] +is used for literal types. `AsciiType` and `UTF8Type` are literal types +by default but any column can be configured as a literal type using the +`is_literal` option at index creation time. For non-literal types the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java[`SkipListMemIndex`] +is used. The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java[`TrieMemIndex`] +is an implementation that can efficiently support prefix queries on +character-like data. The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java[`SkipListMemIndex`], +conversely, is better suited for other Cassandra data types like +numbers. + +The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java[`TrieMemIndex`] +is built using either the `ConcurrentRadixTree` or +`ConcurrentSuffixTree` from the `com.goooglecode.concurrenttrees` +package. The choice between the two is made based on the indexing mode, +`PREFIX` or other modes, and `CONTAINS` mode, respectively. + +The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java[`SkipListMemIndex`] +is built on top of `java.util.concurrent.ConcurrentSkipListSet`. + +==== Querying + +Responsible for converting the internal `IndexExpression` representation +into SASI’s +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`] +and +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java[`Expression`] +trees, optimizing the trees to reduce the amount of work done, and +driving the query itself, the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +is the work horse of SASI’s querying implementation. To efficiently +perform union and intersection operations, SASI provides several +iterators similar to Cassandra’s `MergeIterator`, but tailored +specifically for SASI’s use while including more features. The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeUnionIterator.java[`RangeUnionIterator`], +like its name suggests, performs set unions over sets of tokens/keys +matching the query, only reading as much data as it needs from each set +to satisfy the query. The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java[`RangeIntersectionIterator`], +similar to its counterpart, performs set intersections over its data. + +===== QueryPlan + +The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +instantiated per search query is at the core of SASI’s querying +implementation. Its work can be divided in two stages: analysis and +execution. + +During the analysis phase, +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +converts from Cassandra’s internal representation of `IndexExpression`s, +which has also been modified to support encoding queries that contain +ORs and groupings of expressions using parentheses (see the +link:#cassandra-internal-changes[Cassandra Internal Changes] section +below for more details). This process produces a tree of +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`]s, +which in turn may contain +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java[`Expression`]s, +all of which provide an alternative, more efficient, representation of +the query. + +During execution, the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +uses the `DecoratedKey`-generating iterator created from the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`] +tree. These keys are read from disk and a final check to ensure they +satisfy the query is made, once again using the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`] +tree. At the point the desired amount of matching data has been found, +or there is no more matching data, the result set is returned to the +coordinator through the existing internal components. + +The number of queries (total/failed/timed-out), and their latencies, are +maintined per-table/column family. + +SASI also supports concurrently iterating terms for the same index +across SSTables. The concurrency factor is controlled by the +`cassandra.search_concurrency_factor` system property. The default is +`1`. + +====== QueryController + +Each +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +references a +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryController.java[`QueryController`] +used throughout the execution phase. The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryController.java[`QueryController`] +has two responsibilities: to manage and ensure the proper cleanup of +resources (indexes), and to strictly enforce the time bound per query, +specified by the user via the range slice timeout. All indexes are +accessed via the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryController.java[`QueryController`] +so that they can be safely released by it later. The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryController.java[`QueryController`]’s +`checkpoint` function is called in specific places in the execution path +to ensure the time-bound is enforced. + +====== QueryPlan Optimizations + +While in the analysis phase, the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +performs several potential optimizations to the query. The goal of these +optimizations is to reduce the amount of work performed during the +execution phase. + +The simplest optimization performed is compacting multiple expressions +joined by logical intersections (`AND`) into a single +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`] +with three or more +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java[`Expression`]s. +For example, the query +`WHERE age < 100 AND fname = 'p*' AND first_name != 'pa*' AND age > 21` +would, without modification, have the following tree: + +.... + ┌───────┐ + ┌────────│ AND │──────┐ + │ └───────┘ │ + ▼ ▼ + ┌───────┐ ┌──────────┐ + ┌─────│ AND │─────┐ │age < 100 │ + │ └───────┘ │ └──────────┘ + ▼ ▼ +┌──────────┐ ┌───────┐ +│ fname=p* │ ┌─│ AND │───┐ +└──────────┘ │ └───────┘ │ + ▼ ▼ + ┌──────────┐ ┌──────────┐ + │fname!=pa*│ │ age > 21 │ + └──────────┘ └──────────┘ +.... + +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +will remove the redundant right branch whose root is the final `AND` and +has leaves `fname != pa*` and `age > 21`. These +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java[`Expression`]s +will be compacted into the parent `AND`, a safe operation due to `AND` +being associative and commutative. The resulting tree looks like the +following: + +.... + ┌───────┐ + ┌────────│ AND │──────┐ + │ └───────┘ │ + ▼ ▼ + ┌───────┐ ┌──────────┐ + ┌───────────│ AND │────────┐ │age < 100 │ + │ └───────┘ │ └──────────┘ + ▼ │ ▼ +┌──────────┐ │ ┌──────────┐ +│ fname=p* │ ▼ │ age > 21 │ +└──────────┘ ┌──────────┐ └──────────┘ + │fname!=pa*│ + └──────────┘ +.... + +When excluding results from the result set, using `!=`, the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +determines the best method for handling it. For range queries, for +example, it may be optimal to divide the range into multiple parts with +a hole for the exclusion. For string queries, such as this one, it is +more optimal, however, to simply note which data to skip, or exclude, +while scanning the index. Following this optimization the tree looks +like this: + +.... + ┌───────┐ + ┌────────│ AND │──────┐ + │ └───────┘ │ + ▼ ▼ + ┌───────┐ ┌──────────┐ + ┌───────│ AND │────────┐ │age < 100 │ + │ └───────┘ │ └──────────┘ + ▼ ▼ + ┌──────────────────┐ ┌──────────┐ + │ fname=p* │ │ age > 21 │ + │ exclusions=[pa*] │ └──────────┘ + └──────────────────┘ +.... + +The last type of optimization applied, for this query, is to merge range +expressions across branches of the tree – without modifying the meaning +of the query, of course. In this case, because the query contains all +`AND`s the `age` expressions can be collapsed. Along with this +optimization, the initial collapsing of unneeded `AND`s can also be +applied once more to result in this final tree using to execute the +query: + +.... + ┌───────┐ + ┌──────│ AND │───────┐ + │ └───────┘ │ + ▼ ▼ + ┌──────────────────┐ ┌────────────────┐ + │ fname=p* │ │ 21 < age < 100 │ + │ exclusions=[pa*] │ └────────────────┘ + └──────────────────┘ +.... + +===== Operations and Expressions + +As discussed, the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +optimizes a tree represented by +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`]s +as interior nodes, and +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java[`Expression`]s +as leaves. The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`] +class, more specifically, can have zero, one, or two +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`]s +as children and an unlimited number of expressions. The iterators used +to perform the queries, discussed below in the +``Range(Union|Intersection)Iterator'' section, implement the necessary +logic to merge results transparently regardless of the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`]s +children. + +Besides participating in the optimizations performed by the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`], +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`] +is also responsible for taking a row that has been returned by the query +and performing a final validation that it in fact does match. This +`satisfiesBy` operation is performed recursively from the root of the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java[`Operation`] +tree for a given query. These checks are performed directly on the data +in a given row. For more details on how `satisfiesBy` works, see the +documentation +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java#L87-L123[in +the code]. + +===== Range(Union|Intersection)Iterator + +The abstract `RangeIterator` class provides a unified interface over the +two main operations performed by SASI at various layers in the execution +path: set intersection and union. These operations are performed in a +iterated, or ``streaming'', fashion to prevent unneeded reads of +elements from either set. In both the intersection and union cases the +algorithms take advantage of the data being pre-sorted using the same +sort order, e.g. term or token order. + +The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeUnionIterator.java[`RangeUnionIterator`] +performs the ``Merge-Join'' portion of the +https://en.wikipedia.org/wiki/Sort-merge_join[Sort-Merge-Join] +algorithm, with the properties of an outer-join, or union. It is +implemented with several optimizations to improve its performance over a +large number of iterators – sets to union. Specifically, the iterator +exploits the likely case of the data having many sub-groups of +overlapping ranges and the unlikely case that all ranges will overlap +each other. For more details see the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeUnionIterator.java#L9-L21[javadoc]. + +The +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java[`RangeIntersectionIterator`] +itself is not a subclass of `RangeIterator`. It is a container for +several classes, one of which, `AbstractIntersectionIterator`, +sub-classes `RangeIterator`. SASI supports two methods of performing the +intersection operation, and the ability to be adaptive in choosing +between them based on some properties of the data. + +`BounceIntersectionIterator`, and the `BOUNCE` strategy, works like the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeUnionIterator.java[`RangeUnionIterator`] +in that it performs a ``Merge-Join'', however, its nature is similar to +a inner-join, where like values are merged by a data-specific merge +function (e.g. merging two tokens in a list to lookup in a SSTable +later). See the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java#L88-L101[javadoc] +for more details on its implementation. + +`LookupIntersectionIterator`, and the `LOOKUP` strategy, performs a +different operation, more similar to a lookup in an associative data +structure, or ``hash lookup'' in database terminology. Once again, +details on the implementation can be found in the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java#L199-L208[javadoc]. + +The choice between the two iterators, or the `ADAPTIVE` strategy, is +based upon the ratio of data set sizes of the minimum and maximum range +of the sets being intersected. If the number of the elements in minimum +range divided by the number of elements is the maximum range is less +than or equal to `0.01`, then the `ADAPTIVE` strategy chooses the +`LookupIntersectionIterator`, otherwise the `BounceIntersectionIterator` +is chosen. + +==== The SASIIndex Class + +The above components are glued together by the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/SASIIndex.java[`SASIIndex`] +class which implements `Index`, and is instantiated per-table containing +SASI indexes. It manages all indexes for a table via the +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/conf/DataTracker.java[`sasi.conf.DataTracker`] +and +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/conf/view/View.java[`sasi.conf.view.View`] +components, controls writing of all indexes for an SSTable via its +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriter.java[`PerSSTableIndexWriter`], +and initiates searches with `Searcher`. These classes glue the +previously mentioned indexing components together with Cassandra’s +SSTable life-cycle ensuring indexes are not only written when Memtable’s +flush, but also as SSTable’s are compacted. For querying, the `Searcher` +does little but defer to +https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java[`QueryPlan`] +and update e.g. latency metrics exposed by SASI. + +==== Cassandra Internal Changes + +To support the above changes and integrate them into Cassandra a few +minor internal changes were made to Cassandra itself. These are +described here. + +===== SSTable Write Life-cycle Notifications + +The `SSTableFlushObserver` is an observer pattern-like interface, whose +sub-classes can register to be notified about events in the life-cycle +of writing out a SSTable. Sub-classes can be notified when a flush +begins and ends, as well as when each next row is about to be written, +and each next column. SASI’s `PerSSTableIndexWriter`, discussed above, +is the only current subclass. + +==== Limitations and Caveats + +The following are items that can be addressed in future updates but are +not available in this repository or are not currently implemented. + +* The cluster must be configured to use a partitioner that produces +`LongToken`s, e.g. `Murmur3Partitioner`. Other existing partitioners +which don’t produce LongToken e.g. `ByteOrderedPartitioner` and +`RandomPartitioner` will not work with SASI. +* Not Equals and OR support have been removed in this release while +changes are made to Cassandra itself to support them. + +==== Contributors + +* https://github.com/xedin[Pavel Yaskevich] +* https://github.com/jrwest[Jordan West] +* https://github.com/mkjellman[Michael Kjellman] +* https://github.com/jasobrown[Jason Brown] +* https://github.com/mishail[Mikhail Stepura] From 0af1b18e665e0e8663e06bc553036fa4d20bdb57 Mon Sep 17 00:00:00 2001 From: polandll Date: Fri, 21 Aug 2020 11:34:28 -0700 Subject: [PATCH 083/115] add module to xref --- doc/source/modules/ROOT/pages/native_protocol.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/source/modules/ROOT/pages/native_protocol.adoc b/doc/source/modules/ROOT/pages/native_protocol.adoc index 93efd41767d2..beb86824b3e4 100644 --- a/doc/source/modules/ROOT/pages/native_protocol.adoc +++ b/doc/source/modules/ROOT/pages/native_protocol.adoc @@ -4,19 +4,19 @@ [source, plaintext] ---- -include::example$TEXT/native_protocol_v3.spec[Version 3] +include::cassandra:example$TEXT/native_protocol_v3.spec[Version 3] ---- == Native Protocol Version 4 [source, plaintext] ---- -include::example$TEXT/native_protocol_v4.spec[Version 4] +include::cassandra:example$TEXT/native_protocol_v4.spec[Version 4] ---- == Native Protocol Version 5 [source, plaintext] ---- -include::example$TEXT/native_protocol_v5.spec[Version 5] +include::cassandra:example$TEXT/native_protocol_v5.spec[Version 5] ---- From 39a945a3e60b1d8f3164260dc7041537ef5a2a16 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 26 Aug 2020 16:02:11 -0700 Subject: [PATCH 084/115] fix url --- doc/site.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/site.yml b/doc/site.yml index 4fa51294c323..60be37caf5a8 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -14,6 +14,10 @@ content: - 'doc_redo_asciidoc' - 'doc_redo_asciidoc3.11' start_path: doc/source + - url: https://github.com/polandll/cassandra-website.git + branches: + - test_new_doc_builder + start_path: source ui: # Need to replace this with a direct github url rather than a local path @@ -48,6 +52,7 @@ asciidoc: linkattrs: '' table-caption: ~ tabs: tabs + page-pagination: true url-project: https://asciidoctor.org url-org: https://github.com/asciidoctor url-exten-lab: https://github.com/asciidoctor/asciidoctor-extensions-lab From 5b18e2e8b278236fb13392e15b72615202816e49 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 26 Aug 2020 16:17:41 -0700 Subject: [PATCH 085/115] combine nav.adoc files --- doc/source/modules/ROOT/nav.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/source/modules/ROOT/nav.adoc b/doc/source/modules/ROOT/nav.adoc index cc31a0498060..e42604f0bda8 100644 --- a/doc/source/modules/ROOT/nav.adoc +++ b/doc/source/modules/ROOT/nav.adoc @@ -1,3 +1,7 @@ +* website nav links +** xref:Website:glossary.adoc[Glossary] +** xref:Website:bugs.adoc[How to report bugs] +** xref:Website: contactus.adoc[Contact us] * xref:index.adoc[Main] ** xref:glossary.adoc[Glossary] ** xref:bugs.adoc[How to report bugs] From bdd568b3d40dce7b084fad932ea740c907648bc1 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 26 Aug 2020 16:20:42 -0700 Subject: [PATCH 086/115] fix website nav items --- doc/source/modules/ROOT/nav.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/source/modules/ROOT/nav.adoc b/doc/source/modules/ROOT/nav.adoc index e42604f0bda8..6b41325d1b87 100644 --- a/doc/source/modules/ROOT/nav.adoc +++ b/doc/source/modules/ROOT/nav.adoc @@ -1,7 +1,7 @@ * website nav links -** xref:Website:glossary.adoc[Glossary] -** xref:Website:bugs.adoc[How to report bugs] -** xref:Website: contactus.adoc[Contact us] +** xref:master@Website:ROOT:glossary.adoc[Glossary] +** xref:master@Website:ROOT:bugs.adoc[How to report bugs] +** xref:master@Website:ROOT:contactus.adoc[Contact us] * xref:index.adoc[Main] ** xref:glossary.adoc[Glossary] ** xref:bugs.adoc[How to report bugs] From 4f8847fe7c1a484f1e7064a8271f01a6ee1f6d6f Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 26 Aug 2020 16:40:03 -0700 Subject: [PATCH 087/115] add misc files to source --- doc/source/modules/ROOT/nav.adoc | 6 +- doc/source/modules/ROOT/pages/index.adoc | 19 +- doc/source/modules/cassandra/nav.adoc | 2 + .../cassandra/pages/cql/cql_singlefile.adoc | 3904 +++++++++++++++++ .../pages/getting_started/index.adoc | 1 - 5 files changed, 3916 insertions(+), 16 deletions(-) create mode 100644 doc/source/modules/cassandra/pages/cql/cql_singlefile.adoc diff --git a/doc/source/modules/ROOT/nav.adoc b/doc/source/modules/ROOT/nav.adoc index 6b41325d1b87..6b2926988122 100644 --- a/doc/source/modules/ROOT/nav.adoc +++ b/doc/source/modules/ROOT/nav.adoc @@ -1,8 +1,4 @@ -* website nav links +* xref:index.adoc[Main] ** xref:master@Website:ROOT:glossary.adoc[Glossary] ** xref:master@Website:ROOT:bugs.adoc[How to report bugs] ** xref:master@Website:ROOT:contactus.adoc[Contact us] -* xref:index.adoc[Main] -** xref:glossary.adoc[Glossary] -** xref:bugs.adoc[How to report bugs] -** xref:contactus.adoc[Contact us] diff --git a/doc/source/modules/ROOT/pages/index.adoc b/doc/source/modules/ROOT/pages/index.adoc index ec7bdbae1bfe..f9acf03e60ba 100644 --- a/doc/source/modules/ROOT/pages/index.adoc +++ b/doc/source/modules/ROOT/pages/index.adoc @@ -17,7 +17,7 @@ to do so by submitting your contribution like any other patch following | xref:cassandra:getting_started/index.adoc[Getting started] | Newbie starting point -| xref:cassandra:new/index.adoc[New in 4.0] | What's new in Cassandra 4.0 +| xref:cassandra:new/index.adoc[What's new in 4.0] | What's new in Cassandra 4.0 | xref:cassandra:architecture/index.adoc[Architecture] | Cassandra's big picture @@ -33,19 +33,18 @@ to do so by submitting your contribution like any other patch following | xref:cassandra:troubleshooting/index.adoc[Troubleshooting] | What to look for when you have a problem -| xref:cassandra:development/index.adoc[Development] | Learn how to improve Cassandra and contribute patches - | xref:cassandra:faq/index.adoc[FAQ] | Frequently asked questions | xref:cassandra:plugins/index.adoc[Plug-ins] | Third-party plug-ins +| xref:master@Website:ROOT:native_protocol.adoc[Native Protocols] | Native Cassandra protocol specifications + |=== == Meta information -* xref:bugs.adoc[Reporting bugs] -* xref:contactus.adoc[Contact us] - -== The rest of the information -* xref:sitestuff:community.adoc[Community] -* xref:sitestuff:download.adoc[Download] -* xref:native_protocol.adoc[Native Protocols] +* xref:master@Website:ROOT:bugs.adoc[Reporting bugs] +* xref:master@Website:ROOT:contactus.adoc[Contact us] +* xref:master@Website:ROOT:development/index.adoc[Contributing code] +* xref:master@Website:ROOT:docdev/index.adoc[Contributing to the docs] +* xref:master@Website:ROOT:community.adoc[Community] +* xref:master@Website:ROOT:download.adoc[Download] diff --git a/doc/source/modules/cassandra/nav.adoc b/doc/source/modules/cassandra/nav.adoc index b0e53478a19e..981dd8defc66 100644 --- a/doc/source/modules/cassandra/nav.adoc +++ b/doc/source/modules/cassandra/nav.adoc @@ -46,6 +46,8 @@ *** xref:cql/triggers.adoc[Triggers] *** xref:cql/appendices.adoc[Appendices] *** xref:cql/changes.adoc[Changes] +*** xref:cql/SASI.adoc[SASI] +*** xref:cql/cql_singlefile.adoc[Single file of CQL information] ** xref:configuration/index.adoc[Configuration] *** xref:configuration/cass_yaml_file.adoc[cassandra.yaml] diff --git a/doc/source/modules/cassandra/pages/cql/cql_singlefile.adoc b/doc/source/modules/cassandra/pages/cql/cql_singlefile.adoc new file mode 100644 index 000000000000..e2fea00dc010 --- /dev/null +++ b/doc/source/modules/cassandra/pages/cql/cql_singlefile.adoc @@ -0,0 +1,3904 @@ +== Cassandra Query Language (CQL) v3.4.3 + +\{toc:maxLevel=3} + +=== CQL Syntax + +==== Preamble + +This document describes the Cassandra Query Language (CQL) version 3. +CQL v3 is not backward compatible with CQL v2 and differs from it in +numerous ways. Note that this document describes the last version of the +languages. However, the link:#changes[changes] section provides the diff +between the different versions of CQL v3. + +CQL v3 offers a model very close to SQL in the sense that data is put in +_tables_ containing _rows_ of _columns_. For that reason, when used in +this document, these terms (tables, rows and columns) have the same +definition than they have in SQL. But please note that as such, they do +*not* refer to the concept of rows and columns found in the internal +implementation of Cassandra and in the thrift and CQL v2 API. + +==== Conventions + +To aid in specifying the CQL syntax, we will use the following +conventions in this document: + +* Language rules will be given in a +http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form[BNF] -like +notation: + +bc(syntax). ::= TERMINAL + +* Nonterminal symbols will have ``. +* As additional shortcut notations to BNF, we’ll use traditional regular +expression’s symbols (`?`, `+` and `*`) to signify that a given symbol +is optional and/or can be repeated. We’ll also allow parentheses to +group symbols and the `[]` notation to represent any one of +``. +* The grammar is provided for documentation purposes and leave some +minor details out. For instance, the last column definition in a +`CREATE TABLE` statement is optional but supported if present even +though the provided grammar in this document suggest it is not +supported. +* Sample code will be provided in a code block: + +bc(sample). SELECT sample_usage FROM cql; + +* References to keywords or pieces of CQL code in running text will be +shown in a `fixed-width font`. + +[[identifiers]] +==== Identifiers and keywords + +The CQL language uses _identifiers_ (or _names_) to identify tables, +columns and other objects. An identifier is a token matching the regular +expression `[a-zA-Z]``[a-zA-Z0-9_]``*`. + +A number of such identifiers, like `SELECT` or `WITH`, are _keywords_. +They have a fixed meaning for the language and most are reserved. The +list of those keywords can be found in link:#appendixA[Appendix A]. + +Identifiers and (unquoted) keywords are case insensitive. Thus `SELECT` +is the same than `select` or `sElEcT`, and `myId` is the same than +`myid` or `MYID` for instance. A convention often used (in particular by +the samples of this documentation) is to use upper case for keywords and +lower case for other identifiers. + +There is a second kind of identifiers called _quoted identifiers_ +defined by enclosing an arbitrary sequence of characters in +double-quotes(`"`). Quoted identifiers are never keywords. Thus +`"select"` is not a reserved keyword and can be used to refer to a +column, while `select` would raise a parse error. Also, contrarily to +unquoted identifiers and keywords, quoted identifiers are case sensitive +(`"My Quoted Id"` is _different_ from `"my quoted id"`). A fully +lowercase quoted identifier that matches `[a-zA-Z]``[a-zA-Z0-9_]``*` is +equivalent to the unquoted identifier obtained by removing the +double-quote (so `"myid"` is equivalent to `myid` and to `myId` but +different from `"myId"`). Inside a quoted identifier, the double-quote +character can be repeated to escape it, so `"foo "" bar"` is a valid +identifier. + +*Warning*: _quoted identifiers_ allows to declare columns with arbitrary +names, and those can sometime clash with specific names used by the +server. For instance, when using conditional update, the server will +respond with a result-set containing a special result named +`"[applied]"`. If you’ve declared a column with such a name, this could +potentially confuse some tools and should be avoided. In general, +unquoted identifiers should be preferred but if you use quoted +identifiers, it is strongly advised to avoid any name enclosed by +squared brackets (like `"[applied]"`) and any name that looks like a +function call (like `"f(x)"`). + +==== Constants + +CQL defines the following kind of _constants_: strings, integers, +floats, booleans, uuids and blobs: + +* A string constant is an arbitrary sequence of characters characters +enclosed by single-quote(`'`). One can include a single-quote in a +string by repeating it, e.g. `'It''s raining today'`. Those are not to +be confused with quoted identifiers that use double-quotes. +* An integer constant is defined by `'-'?[0-9]+`. +* A float constant is defined by +`'-'?[0-9]+('.'[0-9]*)?([eE][+-]?[0-9+])?`. On top of that, `NaN` and +`Infinity` are also float constants. +* A boolean constant is either `true` or `false` up to +case-insensitivity (i.e. `True` is a valid boolean constant). +* A http://en.wikipedia.org/wiki/Universally_unique_identifier[UUID] +constant is defined by `hex{8}-hex{4}-hex{4}-hex{4}-hex{12}` where `hex` +is an hexadecimal character, e.g. `[0-9a-fA-F]` and `{4}` is the number +of such characters. +* A blob constant is an hexadecimal number defined by `0[xX](hex)+` +where `hex` is an hexadecimal character, e.g. `[0-9a-fA-F]`. + +For how these constants are typed, see the link:#types[data types +section]. + +==== Comments + +A comment in CQL is a line beginning by either double dashes (`--`) or +double slash (`//`). + +Multi-line comments are also supported through enclosure within `/*` and +`*/` (but nesting is not supported). + +bc(sample). + +— This is a comment + +// This is a comment too + +/* This is + +a multi-line comment */ + +==== Statements + +CQL consists of statements. As in SQL, these statements can be divided +in 3 categories: + +* Data definition statements, that allow to set and change the way data +is stored. +* Data manipulation statements, that allow to change data +* Queries, to look up data + +All statements end with a semicolon (`;`) but that semicolon can be +omitted when dealing with a single statement. The supported statements +are described in the following sections. When describing the grammar of +said statements, we will reuse the non-terminal symbols defined below: + +bc(syntax).. + +::= any quoted or unquoted identifier, excluding reserved keywords + +::= ( `.')? + +::= a string constant + +::= an integer constant + +::= a float constant + +::= | + +::= a uuid constant + +::= a boolean constant + +::= a blob constant + +::= + +| + +| + +| + +| + +::= `?' + +| `:' + +::= + +| + +| + +| `(' ( (`,' )*)? `)' + +::= + +| + +| + +::= `\{' ( `:' ( `,' `:' )* )? `}' + +::= `\{' ( ( `,' )* )? `}' + +::= `[' ( ( `,' )* )? `]' + +::= + +::= (AND )* + +::= `=' ( | | ) + +p. + +Please note that not every possible productions of the grammar above +will be valid in practice. Most notably, `` and nested +`` are currently not allowed inside +``. + +A `` can be either anonymous (a question mark (`?`)) or named +(an identifier preceded by `:`). Both declare a bind variables for +link:#preparedStatement[prepared statements]. The only difference +between an anymous and a named variable is that a named one will be +easier to refer to (how exactly depends on the client driver used). + +The `` production is use by statement that create and alter +keyspaces and tables. Each `` is either a _simple_ one, in +which case it just has a value, or a _map_ one, in which case it’s value +is a map grouping sub-options. The following will refer to one or the +other as the _kind_ (_simple_ or _map_) of the property. + +A `` will be used to identify a table. This is an identifier +representing the table name that can be preceded by a keyspace name. The +keyspace name, if provided, allow to identify a table in another +keyspace than the currently active one (the currently active keyspace is +set through the `USE` statement). + +For supported ``, see the section on +link:#functions[functions]. + +Strings can be either enclosed with single quotes or two dollar +characters. The second syntax has been introduced to allow strings that +contain single quotes. Typical candidates for such strings are source +code fragments for user-defined functions. + +_Sample:_ + +bc(sample).. + +`some string value' + +$$double-dollar string can contain single ’ quotes$$ + +p. + +[[preparedStatement]] +==== Prepared Statement + +CQL supports _prepared statements_. Prepared statement is an +optimization that allows to parse a query only once but execute it +multiple times with different concrete values. + +In a statement, each time a column value is expected (in the data +manipulation and query statements), a `` (see above) can be +used instead. A statement with bind variables must then be _prepared_. +Once it has been prepared, it can executed by providing concrete values +for the bind variables. The exact procedure to prepare a statement and +execute a prepared statement depends on the CQL driver used and is +beyond the scope of this document. + +In addition to providing column values, bind markers may be used to +provide values for `LIMIT`, `TIMESTAMP`, and `TTL` clauses. If anonymous +bind markers are used, the names for the query parameters will be +`[limit]`, `[timestamp]`, and `[ttl]`, respectively. + +[[dataDefinition]] +=== Data Definition + +[[createKeyspaceStmt]] +==== CREATE KEYSPACE + +_Syntax:_ + +bc(syntax).. + +::= CREATE KEYSPACE (IF NOT EXISTS)? WITH + +p. + +_Sample:_ + +bc(sample).. + +CREATE KEYSPACE Excelsior + +WITH replication = \{’class’: `SimpleStrategy', `replication_factor' : +3}; + +CREATE KEYSPACE Excalibur + +WITH replication = \{’class’: `NetworkTopologyStrategy', `DC1' : 1, +`DC2' : 3} + +AND durable_writes = false; + +p. + +The `CREATE KEYSPACE` statement creates a new top-level _keyspace_. A +keyspace is a namespace that defines a replication strategy and some +options for a set of tables. Valid keyspaces names are identifiers +composed exclusively of alphanumerical characters and whose length is +lesser or equal to 32. Note that as identifiers, keyspace names are case +insensitive: use a quoted identifier for case sensitive keyspace names. + +The supported `` for `CREATE KEYSPACE` are: + +[cols=",,,,",options="header",] +|=== +|name |kind |mandatory |default |description +|`replication` |_map_ |yes | |The replication strategy and options to +use for the keyspace. + +|`durable_writes` |_simple_ |no |true |Whether to use the commit log for +updates on this keyspace (disable this option at your own risk!). +|=== + +The `replication` `` is mandatory. It must at least contains +the `'class'` sub-option which defines the replication strategy class to +use. The rest of the sub-options depends on that replication strategy +class. By default, Cassandra support the following `'class'`: + +* `'SimpleStrategy'`: A simple strategy that defines a simple +replication factor for the whole cluster. The only sub-options supported +is `'replication_factor'` to define that replication factor and is +mandatory. +* `'NetworkTopologyStrategy'`: A replication strategy that allows to set +the replication factor independently for each data-center. The rest of +the sub-options are key-value pairs where each time the key is the name +of a datacenter and the value the replication factor for that +data-center. + +Attempting to create an already existing keyspace will return an error +unless the `IF NOT EXISTS` option is used. If it is used, the statement +will be a no-op if the keyspace already exists. + +[[useStmt]] +==== USE + +_Syntax:_ + +bc(syntax). ::= USE + +_Sample:_ + +bc(sample). USE myApp; + +The `USE` statement takes an existing keyspace name as argument and set +it as the per-connection current working keyspace. All subsequent +keyspace-specific actions will be performed in the context of the +selected keyspace, unless link:#statements[otherwise specified], until +another USE statement is issued or the connection terminates. + +[[alterKeyspaceStmt]] +==== ALTER KEYSPACE + +_Syntax:_ + +bc(syntax).. + +::= ALTER KEYSPACE WITH + +p. + +_Sample:_ + +bc(sample).. + +ALTER KEYSPACE Excelsior + +WITH replication = \{’class’: `SimpleStrategy', `replication_factor' : +4}; + +The `ALTER KEYSPACE` statement alters the properties of an existing +keyspace. The supported `` are the same as for the +link:#createKeyspaceStmt[`CREATE KEYSPACE`] statement. + +[[dropKeyspaceStmt]] +==== DROP KEYSPACE + +_Syntax:_ + +bc(syntax). ::= DROP KEYSPACE ( IF EXISTS )? + +_Sample:_ + +bc(sample). DROP KEYSPACE myApp; + +A `DROP KEYSPACE` statement results in the immediate, irreversible +removal of an existing keyspace, including all column families in it, +and all data contained in those column families. + +If the keyspace does not exists, the statement will return an error, +unless `IF EXISTS` is used in which case the operation is a no-op. + +[[createTableStmt]] +==== CREATE TABLE + +_Syntax:_ + +bc(syntax).. + +::= CREATE ( TABLE | COLUMNFAMILY ) ( IF NOT EXISTS )? + +`(' ( `,' )* `)' + +( WITH ( AND )* )? + +::= ( STATIC )? ( PRIMARY KEY )? + +| PRIMARY KEY `(' ( `,' )* `)' + +::= + +| `(' (`,' )* `)' + +::= + +| COMPACT STORAGE + +| CLUSTERING ORDER + +p. + +_Sample:_ + +bc(sample).. + +CREATE TABLE monkeySpecies ( + +species text PRIMARY KEY, + +common_name text, + +population varint, + +average_size int + +) WITH comment=`Important biological records'; + +CREATE TABLE timeline ( + +userid uuid, + +posted_month int, + +posted_time uuid, + +body text, + +posted_by text, + +PRIMARY KEY (userid, posted_month, posted_time) + +) WITH compaction = \{ `class' : `LeveledCompactionStrategy' }; + +p. + +The `CREATE TABLE` statement creates a new table. Each such table is a +set of _rows_ (usually representing related entities) for which it +defines a number of properties. A table is defined by a +link:#createTableName[name], it defines the columns composing rows of +the table and have a number of link:#createTableOptions[options]. Note +that the `CREATE COLUMNFAMILY` syntax is supported as an alias for +`CREATE TABLE` (for historical reasons). + +Attempting to create an already existing table will return an error +unless the `IF NOT EXISTS` option is used. If it is used, the statement +will be a no-op if the table already exists. + +[[createTableName]] +===== `` + +Valid table names are the same as valid +link:#createKeyspaceStmt[keyspace names] (up to 32 characters long +alphanumerical identifiers). If the table name is provided alone, the +table is created within the current keyspace (see `USE`), but if it is +prefixed by an existing keyspace name (see +link:#statements[``] grammar), it is created in the specified +keyspace (but does *not* change the current keyspace). + +[[createTableColumn]] +===== `` + +A `CREATE TABLE` statement defines the columns that rows of the table +can have. A _column_ is defined by its name (an identifier) and its type +(see the link:#types[data types] section for more details on allowed +types and their properties). + +Within a table, a row is uniquely identified by its `PRIMARY KEY` (or +more simply the key), and hence all table definitions *must* define a +PRIMARY KEY (and only one). A `PRIMARY KEY` is composed of one or more +of the columns defined in the table. If the `PRIMARY KEY` is only one +column, this can be specified directly after the column definition. +Otherwise, it must be specified by following `PRIMARY KEY` by the +comma-separated list of column names composing the key within +parenthesis. Note that: + +bc(sample). + +CREATE TABLE t ( + +k int PRIMARY KEY, + +other text + +) + +is equivalent to + +bc(sample). + +CREATE TABLE t ( + +k int, + +other text, + +PRIMARY KEY (k) + +) + +[[createTablepartitionClustering]] +===== Partition key and clustering columns + +In CQL, the order in which columns are defined for the `PRIMARY KEY` +matters. The first column of the key is called the _partition key_. It +has the property that all the rows sharing the same partition key (even +across table in fact) are stored on the same physical node. Also, +insertion/update/deletion on rows sharing the same partition key for a +given table are performed _atomically_ and in _isolation_. Note that it +is possible to have a composite partition key, i.e. a partition key +formed of multiple columns, using an extra set of parentheses to define +which columns forms the partition key. + +The remaining columns of the `PRIMARY KEY` definition, if any, are +called __clustering columns. On a given physical node, rows for a given +partition key are stored in the order induced by the clustering columns, +making the retrieval of rows in that clustering order particularly +efficient (see `SELECT`). + +[[createTableStatic]] +===== `STATIC` columns + +Some columns can be declared as `STATIC` in a table definition. A column +that is static will be ``shared'' by all the rows belonging to the same +partition (having the same partition key). For instance, in: + +bc(sample). + +CREATE TABLE test ( + +pk int, + +t int, + +v text, + +s text static, + +PRIMARY KEY (pk, t) + +); + +INSERT INTO test(pk, t, v, s) VALUES (0, 0, `val0', `static0'); + +INSERT INTO test(pk, t, v, s) VALUES (0, 1, `val1', `static1'); + +SELECT * FROM test WHERE pk=0 AND t=0; + +the last query will return `'static1'` as value for `s`, since `s` is +static and thus the 2nd insertion modified this ``shared'' value. Note +however that static columns are only static within a given partition, +and if in the example above both rows where from different partitions +(i.e. if they had different value for `pk`), then the 2nd insertion +would not have modified the value of `s` for the first row. + +A few restrictions applies to when static columns are allowed: + +* tables with the `COMPACT STORAGE` option (see below) cannot have them +* a table without clustering columns cannot have static columns (in a +table without clustering columns, every partition has only one row, and +so every column is inherently static). +* only non `PRIMARY KEY` columns can be static + +[[createTableOptions]] +===== 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ɩ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

    _@uMvU5a5UO_PkCMB}P@A4OPCi9&_(BBt5Z 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 From 1e8324d4da75e422e46259be88f4dbbf7790b7c9 Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 1 Sep 2020 22:02:37 -0600 Subject: [PATCH 089/115] delete unneeded cql textile file --- doc/cql3/CQL.css | 103 -- doc/cql3/CQL.textile | 2553 ------------------------------------------ 2 files changed, 2656 deletions(-) delete mode 100644 doc/cql3/CQL.css delete mode 100644 doc/cql3/CQL.textile diff --git a/doc/cql3/CQL.css b/doc/cql3/CQL.css deleted file mode 100644 index 601c01364007..000000000000 --- a/doc/cql3/CQL.css +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* Default (and example) style sheet for CQL.html */ - -pre.sample { - padding: 1ex; - padding-left: 4ex; - border: 1px solid #ada; - background-color: #fafffa; -} - -pre.syntax { - padding: 1ex; - padding-left: 4ex; - border: 1px solid #aaf; - background-color: #fafaff; -} - -p.banner { - padding: 1ex; - padding-left: 4ex; - border-top: 1px solid #faa; - border-bottom: 1px solid #faa; - background-color: #fffafa; - color: #b33; - text-align: center; -} - -table { - margin-left: 4ex; - /* width: 80%; */ - border-collapse: collapse; - border: 2px solid #bbb; -} - -td, th { - padding: 2px 1ex; - border: 1px solid #bbb; -} - -th { - background-color: #f0f0f0; -} - -body { - background-color: white; - padding: 0 2ex; -} - -h1 { - text-align: center; - margin-bottom: 3ex; -} - -h2 { - text-align: center; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - background-color: #eee; - margin-top: 5ex; -} - -h3 { - padding-top: 3ex; -} - -a { - color:#333; - font-size:90%; - text-decoration:none; - font-weight:bold; -} - -a:link {color:#333;} -a:visited {color:#111;} -a:hover { - color:#777; - text-decoration: underline; -} - -span#tableOfContents { - border: 1px solid #bbb; - background-color: #fafafa; - display: inline-block; - padding-right: 6ex; -} diff --git a/doc/cql3/CQL.textile b/doc/cql3/CQL.textile deleted file mode 100644 index fafca1436e68..000000000000 --- a/doc/cql3/CQL.textile +++ /dev/null @@ -1,2553 +0,0 @@ - -h1. Cassandra Query Language (CQL) v3.4.3 - - - - - -{toc:maxLevel=3} - - - -h2. CQL Syntax - -h3. Preamble - -This document describes the Cassandra Query Language (CQL) version 3. CQL v3 is not backward compatible with CQL v2 and differs from it in numerous ways. Note that this document describes the last version of the languages. However, the "changes":#changes section provides the diff between the different versions of CQL v3. - -CQL v3 offers a model very close to SQL in the sense that data is put in _tables_ containing _rows_ of _columns_. For that reason, when used in this document, these terms (tables, rows and columns) have the same definition than they have in SQL. But please note that as such, they do *not* refer to the concept of rows and columns found in the internal implementation of Cassandra and in the thrift and CQL v2 API. - - -h3. Conventions - -To aid in specifying the CQL syntax, we will use the following conventions in this document: - -* Language rules will be given in a "BNF":http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form -like notation: - -bc(syntax). ::= TERMINAL - -* Nonterminal symbols will have @@. -* As additional shortcut notations to BNF, we'll use traditional regular expression's symbols (@?@, @+@ and @*@) to signify that a given symbol is optional and/or can be repeated. We'll also allow parentheses to group symbols and the @[]@ notation to represent any one of @@. -* The grammar is provided for documentation purposes and leave some minor details out. For instance, the last column definition in a @CREATE TABLE@ statement is optional but supported if present even though the provided grammar in this document suggest it is not supported. -* Sample code will be provided in a code block: - -bc(sample). SELECT sample_usage FROM cql; - -* References to keywords or pieces of CQL code in running text will be shown in a @fixed-width font@. - -h3(#identifiers). Identifiers and keywords - -p. The CQL language uses _identifiers_ (or _names_) to identify tables, columns and other objects. An identifier is a token matching the regular expression @[a-zA-Z]@@[a-zA-Z0-9_]@@*@. - -p. A number of such identifiers, like @SELECT@ or @WITH@, are _keywords_. They have a fixed meaning for the language and most are reserved. The list of those keywords can be found in "Appendix A":#appendixA. - -p. Identifiers and (unquoted) keywords are case insensitive. Thus @SELECT@ is the same than @select@ or @sElEcT@, and @myId@ is the same than @myid@ or @MYID@ for instance. A convention often used (in particular by the samples of this documentation) is to use upper case for keywords and lower case for other identifiers. - -p. There is a second kind of identifiers called _quoted identifiers_ defined by enclosing an arbitrary sequence of characters in double-quotes(@"@). Quoted identifiers are never keywords. Thus @"select"@ is not a reserved keyword and can be used to refer to a column, while @select@ would raise a parse error. Also, contrarily to unquoted identifiers and keywords, quoted identifiers are case sensitive (@"My Quoted Id"@ is _different_ from @"my quoted id"@). A fully lowercase quoted identifier that matches @[a-zA-Z]@@[a-zA-Z0-9_]@@*@ is equivalent to the unquoted identifier obtained by removing the double-quote (so @"myid"@ is equivalent to @myid@ and to @myId@ but different from @"myId"@). Inside a quoted identifier, the double-quote character can be repeated to escape it, so @"foo "" bar"@ is a valid identifier. - -p. *Warning*: _quoted identifiers_ allows to declare columns with arbitrary names, and those can sometime clash with specific names used by the server. For instance, when using conditional update, the server will respond with a result-set containing a special result named @"[applied]"@. If you've declared a column with such a name, this could potentially confuse some tools and should be avoided. In general, unquoted identifiers should be preferred but if you use quoted identifiers, it is strongly advised to avoid any name enclosed by squared brackets (like @"[applied]"@) and any name that looks like a function call (like @"f(x)"@). - -h3(#constants). Constants - -CQL defines the following kind of _constants_: strings, integers, floats, booleans, uuids and blobs: -* A string constant is an arbitrary sequence of characters characters enclosed by single-quote(@'@). One can include a single-quote in a string by repeating it, e.g. @'It''s raining today'@. Those are not to be confused with quoted identifiers that use double-quotes. -* An integer constant is defined by @'-'?[0-9]+@. -* A float constant is defined by @'-'?[0-9]+('.'[0-9]*)?([eE][+-]?[0-9+])?@. On top of that, @NaN@ and @Infinity@ are also float constants. -* A boolean constant is either @true@ or @false@ up to case-insensitivity (i.e. @True@ is a valid boolean constant). -* A "UUID":http://en.wikipedia.org/wiki/Universally_unique_identifier constant is defined by @hex{8}-hex{4}-hex{4}-hex{4}-hex{12}@ where @hex@ is an hexadecimal character, e.g. @[0-9a-fA-F]@ and @{4}@ is the number of such characters. -* A blob constant is an hexadecimal number defined by @0[xX](hex)+@ where @hex@ is an hexadecimal character, e.g. @[0-9a-fA-F]@. - -For how these constants are typed, see the "data types section":#types. - -h3. Comments - -A comment in CQL is a line beginning by either double dashes (@--@) or double slash (@//@). - -Multi-line comments are also supported through enclosure within @/*@ and @*/@ (but nesting is not supported). - -bc(sample). --- This is a comment -// This is a comment too -/* This is - a multi-line comment */ - -h3(#statements). Statements - -CQL consists of statements. As in SQL, these statements can be divided in 3 categories: -* Data definition statements, that allow to set and change the way data is stored. -* Data manipulation statements, that allow to change data -* Queries, to look up data - -All statements end with a semicolon (@;@) but that semicolon can be omitted when dealing with a single statement. The supported statements are described in the following sections. When describing the grammar of said statements, we will reuse the non-terminal symbols defined below: - -bc(syntax).. - ::= any quoted or unquoted identifier, excluding reserved keywords - ::= ( '.')? - - ::= a string constant - ::= an integer constant - ::= a float constant - ::= | - ::= a uuid constant - ::= a boolean constant - ::= a blob constant - - ::= - | - | - | - | - ::= '?' - | ':' - ::= - | - | - | '(' ( (',' )*)? ')' - - ::= - | - | - ::= '{' ( ':' ( ',' ':' )* )? '}' - ::= '{' ( ( ',' )* )? '}' - ::= '[' ( ( ',' )* )? ']' - - ::= - - ::= (AND )* - ::= '=' ( | | ) -p. -Please note that not every possible productions of the grammar above will be valid in practice. Most notably, @@ and nested @@ are currently not allowed inside @@. - -p. A @@ can be either anonymous (a question mark (@?@)) or named (an identifier preceded by @:@). Both declare a bind variables for "prepared statements":#preparedStatement. The only difference between an anymous and a named variable is that a named one will be easier to refer to (how exactly depends on the client driver used). - -p. The @@ production is use by statement that create and alter keyspaces and tables. Each @@ is either a _simple_ one, in which case it just has a value, or a _map_ one, in which case it's value is a map grouping sub-options. The following will refer to one or the other as the _kind_ (_simple_ or _map_) of the property. - -p. A @@ will be used to identify a table. This is an identifier representing the table name that can be preceded by a keyspace name. The keyspace name, if provided, allow to identify a table in another keyspace than the currently active one (the currently active keyspace is set through the USE statement). - -p. For supported @@, see the section on "functions":#functions. - -p. Strings can be either enclosed with single quotes or two dollar characters. The second syntax has been introduced to allow strings that contain single quotes. Typical candidates for such strings are source code fragments for user-defined functions. - -__Sample:__ - -bc(sample).. - 'some string value' - - $$double-dollar string can contain single ' quotes$$ -p. - -h3(#preparedStatement). Prepared Statement - -CQL supports _prepared statements_. Prepared statement is an optimization that allows to parse a query only once but execute it multiple times with different concrete values. - -In a statement, each time a column value is expected (in the data manipulation and query statements), a @@ (see above) can be used instead. A statement with bind variables must then be _prepared_. Once it has been prepared, it can executed by providing concrete values for the bind variables. The exact procedure to prepare a statement and execute a prepared statement depends on the CQL driver used and is beyond the scope of this document. - -In addition to providing column values, bind markers may be used to provide values for @LIMIT@, @TIMESTAMP@, and @TTL@ clauses. If anonymous bind markers are used, the names for the query parameters will be @[limit]@, @[timestamp]@, and @[ttl]@, respectively. - - -h2(#dataDefinition). Data Definition - -h3(#createKeyspaceStmt). CREATE KEYSPACE - -__Syntax:__ - -bc(syntax).. - ::= CREATE KEYSPACE (IF NOT EXISTS)? WITH -p. -__Sample:__ - -bc(sample).. -CREATE KEYSPACE Excelsior - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; - -CREATE KEYSPACE Excalibur - WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 3} - AND durable_writes = false; -p. -The @CREATE KEYSPACE@ statement creates a new top-level _keyspace_. A keyspace is a namespace that defines a replication strategy and some options for a set of tables. Valid keyspaces names are identifiers composed exclusively of alphanumerical characters and whose length is lesser or equal to 32. Note that as identifiers, keyspace names are case insensitive: use a quoted identifier for case sensitive keyspace names. - -The supported @@ for @CREATE KEYSPACE@ are: - -|_. name |_. kind |_. mandatory |_. default |_. description| -|@replication@ | _map_ | yes | | The replication strategy and options to use for the keyspace. | -|@durable_writes@ | _simple_ | no | true | Whether to use the commit log for updates on this keyspace (disable this option at your own risk!). | - -The @replication@ @@ is mandatory. It must at least contains the @'class'@ sub-option which defines the replication strategy class to use. The rest of the sub-options depends on that replication strategy class. By default, Cassandra support the following @'class'@: -* @'SimpleStrategy'@: A simple strategy that defines a simple replication factor for the whole cluster. The only sub-options supported is @'replication_factor'@ to define that replication factor and is mandatory. -* @'NetworkTopologyStrategy'@: A replication strategy that allows to set the replication factor independently for each data-center. The rest of the sub-options are key-value pairs where each time the key is the name of a datacenter and the value the replication factor for that data-center. - -Attempting to create an already existing keyspace will return an error unless the @IF NOT EXISTS@ option is used. If it is used, the statement will be a no-op if the keyspace already exists. - -h3(#useStmt). USE - -__Syntax:__ - -bc(syntax). ::= USE - -__Sample:__ - -bc(sample). USE myApp; - -The @USE@ statement takes an existing keyspace name as argument and set it as the per-connection current working keyspace. All subsequent keyspace-specific actions will be performed in the context of the selected keyspace, unless "otherwise specified":#statements, until another USE statement is issued or the connection terminates. - -h3(#alterKeyspaceStmt). ALTER KEYSPACE - -__Syntax:__ - -bc(syntax).. - ::= ALTER KEYSPACE WITH -p. -__Sample:__ - -bc(sample).. -ALTER KEYSPACE Excelsior - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4}; - -p. -The @ALTER KEYSPACE@ statement alters the properties of an existing keyspace. The supported @@ are the same as for the "@CREATE KEYSPACE@":#createKeyspaceStmt statement. - - -h3(#dropKeyspaceStmt). DROP KEYSPACE - -__Syntax:__ - -bc(syntax). ::= DROP KEYSPACE ( IF EXISTS )? - -__Sample:__ - -bc(sample). DROP KEYSPACE myApp; - -A @DROP KEYSPACE@ statement results in the immediate, irreversible removal of an existing keyspace, including all column families in it, and all data contained in those column families. - -If the keyspace does not exists, the statement will return an error, unless @IF EXISTS@ is used in which case the operation is a no-op. - - -h3(#createTableStmt). CREATE TABLE - -__Syntax:__ - -bc(syntax).. - ::= CREATE ( TABLE | COLUMNFAMILY ) ( IF NOT EXISTS )? - '(' ( ',' )* ')' - ( WITH

    +ko?-Vt!dk~ZQHhO+s3qQV|u!$ZQHiZ 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

    where: - is a [string] representing either the keyspace that - already exists, or the keyspace in which the table that - already exists is. -
    is a [string] representing the name of the table that - already exists. If the query was attempting to create a - keyspace,
    will be present but will be the empty - string. - 0x2500 Unprepared: Can be thrown while a prepared statement tries to be - executed if the provide prepared statement ID is not known by - this host. The rest of the ERROR message body will be [short - bytes] representing the unknown ID. - -10. Changes from v2 - * stream id is now 2 bytes long (a [short] value), so the header is now 1 byte longer (9 bytes total). - * BATCH messages now have (like QUERY and EXECUTE) and a corresponding optional - parameters (see Section 4.1.7). - * User Defined Types and tuple types have to added to ResultSet metadata (see 4.2.5.2) and a - new section on the serialization format of UDT and tuple values has been added to the documentation - (Section 7). - * The serialization format for collection has changed (both the collection size and - the length of each argument is now 4 bytes long). See Section 6. - * QUERY, EXECUTE and BATCH messages can now optionally provide the default timestamp for the query. - As this feature is optionally enabled by clients, implementing it is at the discretion of the - client. - * QUERY and EXECUTE messages can now optionally provide the names for the values of the - query. As this feature is optionally enabled by clients, implementing it is at the discretion of the - client (Note that while the BATCH message has a flag for this, it actually doesn't work for BATCH, - see Section 4.1.7 for details). - * The format of "Schema_change" results (Section 4.2.5.5) and "SCHEMA_CHANGE" events (Section 4.2.6) - has been modified, and now includes changes related to user types. - diff --git a/doc/native_protocol_v4.spec b/doc/native_protocol_v4.spec deleted file mode 100644 index 5670241655f8..000000000000 --- a/doc/native_protocol_v4.spec +++ /dev/null @@ -1,1191 +0,0 @@ - - CQL BINARY PROTOCOL v4 - - -Table of Contents - - 1. Overview - 2. Frame header - 2.1. version - 2.2. flags - 2.3. stream - 2.4. opcode - 2.5. length - 3. Notations - 4. Messages - 4.1. Requests - 4.1.1. STARTUP - 4.1.2. AUTH_RESPONSE - 4.1.3. OPTIONS - 4.1.4. QUERY - 4.1.5. PREPARE - 4.1.6. EXECUTE - 4.1.7. BATCH - 4.1.8. REGISTER - 4.2. Responses - 4.2.1. ERROR - 4.2.2. READY - 4.2.3. AUTHENTICATE - 4.2.4. SUPPORTED - 4.2.5. RESULT - 4.2.5.1. Void - 4.2.5.2. Rows - 4.2.5.3. Set_keyspace - 4.2.5.4. Prepared - 4.2.5.5. Schema_change - 4.2.6. EVENT - 4.2.7. AUTH_CHALLENGE - 4.2.8. AUTH_SUCCESS - 5. Compression - 6. Data Type Serialization Formats - 7. User Defined Type Serialization - 8. Result paging - 9. Error codes - 10. Changes from v3 - - -1. Overview - - The CQL binary protocol is a frame based protocol. Frames are defined as: - - 0 8 16 24 32 40 - +---------+---------+---------+---------+---------+ - | version | flags | stream | opcode | - +---------+---------+---------+---------+---------+ - | length | - +---------+---------+---------+---------+ - | | - . ... body ... . - . . - . . - +---------------------------------------- - - The protocol is big-endian (network byte order). - - Each frame contains a fixed size header (9 bytes) followed by a variable size - body. The header is described in Section 2. The content of the body depends - on the header opcode value (the body can in particular be empty for some - opcode values). The list of allowed opcodes is defined in Section 2.4 and the - details of each corresponding message are described Section 4. - - The protocol distinguishes two types of frames: requests and responses. Requests - are those frames sent by the client to the server. Responses are those frames sent - by the server to the client. Note, however, that the protocol supports server pushes - (events) so a response does not necessarily come right after a client request. - - Note to client implementors: client libraries should always assume that the - body of a given frame may contain more data than what is described in this - document. It will however always be safe to ignore the remainder of the frame - body in such cases. The reason is that this may enable extending the protocol - with optional features without needing to change the protocol version. - - - -2. Frame header - -2.1. version - - The version is a single byte that indicates both the direction of the message - (request or response) and the version of the protocol in use. The most - significant bit of version is used to define the direction of the message: - 0 indicates a request, 1 indicates a response. This can be useful for protocol - analyzers to distinguish the nature of the packet from the direction in which - it is moving. The rest of that byte is the protocol version (4 for the protocol - defined in this document). In other words, for this version of the protocol, - version will be one of: - 0x04 Request frame for this protocol version - 0x84 Response frame for this protocol version - - Please note that while every message ships with the version, only one version - of messages is accepted on a given connection. In other words, the first message - exchanged (STARTUP) sets the version for the connection for the lifetime of this - connection. - - This document describes version 4 of the protocol. For the changes made since - version 3, see Section 10. - - -2.2. flags - - Flags applying to this frame. The flags have the following meaning (described - by the mask that allows selecting them): - 0x01: Compression flag. If set, the frame body is compressed. The actual - compression to use should have been set up beforehand through the - Startup message (which thus cannot be compressed; Section 4.1.1). - 0x02: Tracing flag. For a request frame, this indicates the client requires - tracing of the request. Note that only QUERY, PREPARE and EXECUTE queries - support tracing. Other requests will simply ignore the tracing flag if - set. If a request supports tracing and the tracing flag is set, the response - to this request will have the tracing flag set and contain tracing - information. - If a response frame has the tracing flag set, its body contains - a tracing ID. The tracing ID is a [uuid] and is the first thing in - the frame body. The rest of the body will then be the usual body - corresponding to the response opcode. - 0x04: Custom payload flag. For a request or response frame, this indicates - that a generic key-value custom payload for a custom QueryHandler - implementation is present in the frame. Such a custom payload is simply - ignored by the default QueryHandler implementation. - Currently, only QUERY, PREPARE, EXECUTE and BATCH requests support - payload. - Type of custom payload is [bytes map] (see below). - 0x08: Warning flag. The response contains warnings which were generated by the - server to go along with this response. - If a response frame has the warning flag set, its body will contain the - text of the warnings. The warnings are a [string list] and will be the - first value in the frame body if the tracing flag is not set, or directly - after the tracing ID if it is. - - The rest of flags is currently unused and ignored. - -2.3. stream - - A frame has a stream id (a [short] value). When sending request messages, this - stream id must be set by the client to a non-negative value (negative stream id - are reserved for streams initiated by the server; currently all EVENT messages - (section 4.2.6) have a streamId of -1). If a client sends a request message - with the stream id X, it is guaranteed that the stream id of the response to - that message will be X. - - This helps to enable the asynchronous nature of the protocol. If a client - sends multiple messages simultaneously (without waiting for responses), there - is no guarantee on the order of the responses. For instance, if the client - writes REQ_1, REQ_2, REQ_3 on the wire (in that order), the server might - respond to REQ_3 (or REQ_2) first. Assigning different stream ids to these 3 - requests allows the client to distinguish to which request a received answer - responds to. As there can only be 32768 different simultaneous streams, it is up - to the client to reuse stream id. - - Note that clients are free to use the protocol synchronously (i.e. wait for - the response to REQ_N before sending REQ_N+1). In that case, the stream id - can be safely set to 0. Clients should also feel free to use only a subset of - the 32768 maximum possible stream ids if it is simpler for its implementation. - -2.4. opcode - - An integer byte that distinguishes the actual message: - 0x00 ERROR - 0x01 STARTUP - 0x02 READY - 0x03 AUTHENTICATE - 0x05 OPTIONS - 0x06 SUPPORTED - 0x07 QUERY - 0x08 RESULT - 0x09 PREPARE - 0x0A EXECUTE - 0x0B REGISTER - 0x0C EVENT - 0x0D BATCH - 0x0E AUTH_CHALLENGE - 0x0F AUTH_RESPONSE - 0x10 AUTH_SUCCESS - - Messages are described in Section 4. - - (Note that there is no 0x04 message in this version of the protocol) - - -2.5. length - - A 4 byte integer representing the length of the body of the frame (note: - currently a frame is limited to 256MB in length). - - -3. Notations - - To describe the layout of the frame body for the messages in Section 4, we - define the following: - - [int] A 4 bytes integer - [long] A 8 bytes integer - [short] A 2 bytes unsigned integer - [string] A [short] n, followed by n bytes representing an UTF-8 - string. - [long string] An [int] n, followed by n bytes representing an UTF-8 string. - [uuid] A 16 bytes long uuid. - [string list] A [short] n, followed by n [string]. - [bytes] A [int] n, followed by n bytes if n >= 0. If n < 0, - no byte should follow and the value represented is `null`. - [value] A [int] n, followed by n bytes if n >= 0. - If n == -1 no byte should follow and the value represented is `null`. - If n == -2 no byte should follow and the value represented is - `not set` not resulting in any change to the existing value. - n < -2 is an invalid value and results in an error. - [short bytes] A [short] n, followed by n bytes if n >= 0. - - [option] A pair of where is a [short] representing - the option id and depends on that option (and can be - of size 0). The supported id (and the corresponding ) - will be described when this is used. - [option list] A [short] n, followed by n [option]. - [inet] An address (ip and port) to a node. It consists of one - [byte] n, that represents the address size, followed by n - [byte] representing the IP address (in practice n can only be - either 4 (IPv4) or 16 (IPv6)), following by one [int] - representing the port. - [consistency] A consistency level specification. This is a [short] - representing a consistency level with the following - correspondance: - 0x0000 ANY - 0x0001 ONE - 0x0002 TWO - 0x0003 THREE - 0x0004 QUORUM - 0x0005 ALL - 0x0006 LOCAL_QUORUM - 0x0007 EACH_QUORUM - 0x0008 SERIAL - 0x0009 LOCAL_SERIAL - 0x000A LOCAL_ONE - - [string map] A [short] n, followed by n pair where and - are [string]. - [string multimap] A [short] n, followed by n pair where is a - [string] and is a [string list]. - [bytes map] A [short] n, followed by n pair where is a - [string] and is a [bytes]. - - -4. Messages - -4.1. Requests - - Note that outside of their normal responses (described below), all requests - can get an ERROR message (Section 4.2.1) as response. - -4.1.1. STARTUP - - Initialize the connection. The server will respond by either a READY message - (in which case the connection is ready for queries) or an AUTHENTICATE message - (in which case credentials will need to be provided using AUTH_RESPONSE). - - This must be the first message of the connection, except for OPTIONS that can - be sent before to find out the options supported by the server. Once the - connection has been initialized, a client should not send any more STARTUP - messages. - - The body is a [string map] of options. Possible options are: - - "CQL_VERSION": the version of CQL to use. This option is mandatory and - currently the only version supported is "3.0.0". Note that this is - different from the protocol version. - - "COMPRESSION": the compression algorithm to use for frames (See section 5). - This is optional; if not specified no compression will be used. - - "NO_COMPACT": whether or not connection has to be established in compatibility - mode. This mode will make all Thrift and Compact Tables to be exposed as if - they were CQL Tables. This is optional; if not specified, the option will - not be used. - - "THROW_ON_OVERLOAD": In case of server overloaded with too many requests, by default the server puts - back pressure on the client connection. Instead, the server can send an OverloadedException error message back to - the client if this option is set to true. - - -4.1.2. AUTH_RESPONSE - - Answers a server authentication challenge. - - Authentication in the protocol is SASL based. The server sends authentication - challenges (a bytes token) to which the client answers with this message. Those - exchanges continue until the server accepts the authentication by sending a - AUTH_SUCCESS message after a client AUTH_RESPONSE. Note that the exchange - begins with the client sending an initial AUTH_RESPONSE in response to a - server AUTHENTICATE request. - - The body of this message is a single [bytes] token. The details of what this - token contains (and when it can be null/empty, if ever) depends on the actual - authenticator used. - - The response to a AUTH_RESPONSE is either a follow-up AUTH_CHALLENGE message, - an AUTH_SUCCESS message or an ERROR message. - - -4.1.3. OPTIONS - - Asks the server to return which STARTUP options are supported. The body of an - OPTIONS message should be empty and the server will respond with a SUPPORTED - message. - - -4.1.4. QUERY - - Performs a CQL query. The body of the message must be: - - where is a [long string] representing the query and - must be - [[name_1]...[name_n]][][][][] - where: - - is the [consistency] level for the operation. - - is a [byte] whose bits define the options for this query and - in particular influence what the remainder of the message contains. - A flag is set if the bit corresponding to its `mask` is set. Supported - flags are, given their mask: - 0x01: Values. If set, a [short] followed by [value] - values are provided. Those values are used for bound variables in - the query. Optionally, if the 0x40 flag is present, each value - will be preceded by a [string] name, representing the name of - the marker the value must be bound to. - 0x02: Skip_metadata. If set, the Result Set returned as a response - to the query (if any) will have the NO_METADATA flag (see - Section 4.2.5.2). - 0x04: Page_size. If set, is an [int] - controlling the desired page size of the result (in CQL3 rows). - See the section on paging (Section 8) for more details. - 0x08: With_paging_state. If set, should be present. - is a [bytes] value that should have been returned - in a result set (Section 4.2.5.2). The query will be - executed but starting from a given paging state. This is also to - continue paging on a different node than the one where it - started (See Section 8 for more details). - 0x10: With serial consistency. If set, should be - present. is the [consistency] level for the - serial phase of conditional updates. That consitency can only be - either SERIAL or LOCAL_SERIAL and if not present, it defaults to - SERIAL. This option will be ignored for anything else other than a - conditional update/insert. - 0x20: With default timestamp. If set, should be present. - is a [long] representing the default timestamp for the query - in microseconds (negative values are forbidden). This will - replace the server side assigned timestamp as default timestamp. - Note that a timestamp in the query itself will still override - this timestamp. This is entirely optional. - 0x40: With names for values. This only makes sense if the 0x01 flag is set and - is ignored otherwise. If present, the values from the 0x01 flag will - be preceded by a name (see above). Note that this is only useful for - QUERY requests where named bind markers are used; for EXECUTE statements, - since the names for the expected values was returned during preparation, - a client can always provide values in the right order without any names - and using this flag, while supported, is almost surely inefficient. - - Note that the consistency is ignored by some queries (USE, CREATE, ALTER, - TRUNCATE, ...). - - The server will respond to a QUERY message with a RESULT message, the content - of which depends on the query. - - -4.1.5. PREPARE - - Prepare a query for later execution (through EXECUTE). The body consists of - the CQL query to prepare as a [long string]. - - The server will respond with a RESULT message with a `prepared` kind (0x0004, - see Section 4.2.5). - - -4.1.6. EXECUTE - - Executes a prepared query. The body of the message must be: - - where is the prepared query ID. It's the [short bytes] returned as a - response to a PREPARE message. As for , it has the exact - same definition as in QUERY (see Section 4.1.4). - - The response from the server will be a RESULT message. - - -4.1.7. BATCH - - Allows executing a list of queries (prepared or not) as a batch (note that - only DML statements are accepted in a batch). The body of the message must - be: - ...[][] - where: - - is a [byte] indicating the type of batch to use: - - If == 0, the batch will be "logged". This is equivalent to a - normal CQL3 batch statement. - - If == 1, the batch will be "unlogged". - - If == 2, the batch will be a "counter" batch (and non-counter - statements will be rejected). - - is a [byte] whose bits define the options for this query and - in particular influence what the remainder of the message contains. It is similar - to the from QUERY and EXECUTE methods, except that the 4 rightmost - bits must always be 0 as their corresponding options do not make sense for - Batch. A flag is set if the bit corresponding to its `mask` is set. Supported - flags are, given their mask: - 0x10: With serial consistency. If set, should be - present. is the [consistency] level for the - serial phase of conditional updates. That consistency can only be - either SERIAL or LOCAL_SERIAL and if not present, it defaults to - SERIAL. This option will be ignored for anything else other than a - conditional update/insert. - 0x20: With default timestamp. If set, should be present. - is a [long] representing the default timestamp for the query - in microseconds. This will replace the server side assigned - timestamp as default timestamp. Note that a timestamp in the query itself - will still override this timestamp. This is entirely optional. - 0x40: With names for values. If set, then all values for all must be - preceded by a [string] that have the same meaning as in QUERY - requests [IMPORTANT NOTE: this feature does not work and should not be - used. It is specified in a way that makes it impossible for the server - to implement. This will be fixed in a future version of the native - protocol. See https://issues.apache.org/jira/browse/CASSANDRA-10246 for - more details]. - - is a [short] indicating the number of following queries. - - ... are the queries to execute. A must be of the - form: - []...[] - where: - - is a [byte] indicating whether the following query is a prepared - one or not. value must be either 0 or 1. - - depends on the value of . If == 0, it should be - a [long string] query string (as in QUERY, the query string might contain - bind markers). Otherwise (that is, if == 1), it should be a - [short bytes] representing a prepared query ID. - - is a [short] indicating the number (possibly 0) of following values. - - is the optional name of the following . It must be present - if and only if the 0x40 flag is provided for the batch. - - is the [value] to use for bound variable i (of bound variable - if the 0x40 flag is used). - - is the [consistency] level for the operation. - - is only present if the 0x10 flag is set. In that case, - is the [consistency] level for the serial phase of - conditional updates. That consitency can only be either SERIAL or - LOCAL_SERIAL and if not present will defaults to SERIAL. This option will - be ignored for anything else other than a conditional update/insert. - - The server will respond with a RESULT message. - - -4.1.8. REGISTER - - Register this connection to receive some types of events. The body of the - message is a [string list] representing the event types to register for. See - section 4.2.6 for the list of valid event types. - - The response to a REGISTER message will be a READY message. - - Please note that if a client driver maintains multiple connections to a - Cassandra node and/or connections to multiple nodes, it is advised to - dedicate a handful of connections to receive events, but to *not* register - for events on all connections, as this would only result in receiving - multiple times the same event messages, wasting bandwidth. - - -4.2. Responses - - This section describes the content of the frame body for the different - responses. Please note that to make room for future evolution, clients should - support extra informations (that they should simply discard) to the one - described in this document at the end of the frame body. - -4.2.1. ERROR - - Indicates an error processing a request. The body of the message will be an - error code ([int]) followed by a [string] error message. Then, depending on - the exception, more content may follow. The error codes are defined in - Section 9, along with their additional content if any. - - -4.2.2. READY - - Indicates that the server is ready to process queries. This message will be - sent by the server either after a STARTUP message if no authentication is - required (if authentication is required, the server indicates readiness by - sending a AUTH_RESPONSE message). - - The body of a READY message is empty. - - -4.2.3. AUTHENTICATE - - Indicates that the server requires authentication, and which authentication - mechanism to use. - - The authentication is SASL based and thus consists of a number of server - challenges (AUTH_CHALLENGE, Section 4.2.7) followed by client responses - (AUTH_RESPONSE, Section 4.1.2). The initial exchange is however boostrapped - by an initial client response. The details of that exchange (including how - many challenge-response pairs are required) are specific to the authenticator - in use. The exchange ends when the server sends an AUTH_SUCCESS message or - an ERROR message. - - This message will be sent following a STARTUP message if authentication is - required and must be answered by a AUTH_RESPONSE message from the client. - - The body consists of a single [string] indicating the full class name of the - IAuthenticator in use. - - -4.2.4. SUPPORTED - - Indicates which startup options are supported by the server. This message - comes as a response to an OPTIONS message. - - The body of a SUPPORTED message is a [string multimap]. This multimap gives - for each of the supported STARTUP options, the list of supported values. - - -4.2.5. RESULT - - The result to a query (QUERY, PREPARE, EXECUTE or BATCH messages). - - The first element of the body of a RESULT message is an [int] representing the - `kind` of result. The rest of the body depends on the kind. The kind can be - one of: - 0x0001 Void: for results carrying no information. - 0x0002 Rows: for results to select queries, returning a set of rows. - 0x0003 Set_keyspace: the result to a `use` query. - 0x0004 Prepared: result to a PREPARE message. - 0x0005 Schema_change: the result to a schema altering query. - - The body for each kind (after the [int] kind) is defined below. - - -4.2.5.1. Void - - The rest of the body for a Void result is empty. It indicates that a query was - successful without providing more information. - - -4.2.5.2. Rows - - Indicates a set of rows. The rest of the body of a Rows result is: - - where: - - is composed of: - [][?...] - where: - - is an [int]. The bits of provides information on the - formatting of the remaining information. A flag is set if the bit - corresponding to its `mask` is set. Supported flags are, given their - mask: - 0x0001 Global_tables_spec: if set, only one table spec (keyspace - and table name) is provided as . If not - set, is not present. - 0x0002 Has_more_pages: indicates whether this is not the last - page of results and more should be retrieved. If set, the - will be present. The is a - [bytes] value that should be used in QUERY/EXECUTE to - continue paging and retrieve the remainder of the result for - this query (See Section 8 for more details). - 0x0004 No_metadata: if set, the is only composed of - these , the and optionally the - (depending on the Has_more_pages flag) but - no other information (so no nor ). - This will only ever be the case if this was requested - during the query (see QUERY and RESULT messages). - - is an [int] representing the number of columns selected - by the query that produced this result. It defines the number of - elements in and the number of elements for each row in . - - is present if the Global_tables_spec is set in - . It is composed of two [string] representing the - (unique) keyspace name and table name the columns belong to. - - specifies the columns returned in the query. There are - such column specifications that are composed of: - ()? - The initial and are two [string] and are only present - if the Global_tables_spec flag is not set. The is a - [string] and is an [option] that corresponds to the description - (what this description is depends a bit on the context: in results to - selects, this will be either the user chosen alias or the selection used - (often a colum name, but it can be a function call too). In results to - a PREPARE, this will be either the name of the corresponding bind variable - or the column name for the variable if it is "anonymous") and type of - the corresponding result. The option for is either a native - type (see below), in which case the option has no value, or a - 'custom' type, in which case the value is a [string] representing - the fully qualified class name of the type represented. Valid option - ids are: - 0x0000 Custom: the value is a [string], see above. - 0x0001 Ascii - 0x0002 Bigint - 0x0003 Blob - 0x0004 Boolean - 0x0005 Counter - 0x0006 Decimal - 0x0007 Double - 0x0008 Float - 0x0009 Int - 0x000B Timestamp - 0x000C Uuid - 0x000D Varchar - 0x000E Varint - 0x000F Timeuuid - 0x0010 Inet - 0x0011 Date - 0x0012 Time - 0x0013 Smallint - 0x0014 Tinyint - 0x0020 List: the value is an [option], representing the type - of the elements of the list. - 0x0021 Map: the value is two [option], representing the types of the - keys and values of the map - 0x0022 Set: the value is an [option], representing the type - of the elements of the set - 0x0030 UDT: the value is ... - where: - - is a [string] representing the keyspace name this - UDT is part of. - - is a [string] representing the UDT name. - - is a [short] representing the number of fields of - the UDT, and thus the number of pairs - following - - is a [string] representing the name of the - i_th field of the UDT. - - is an [option] representing the type of the - i_th field of the UDT. - 0x0031 Tuple: the value is ... where is a [short] - representing the number of values in the type, and - are [option] representing the type of the i_th component - of the tuple - - - is an [int] representing the number of rows present in this - result. Those rows are serialized in the part. - - is composed of ... where m is . - Each is composed of ... where n is - and where is a [bytes] representing the value - returned for the jth column of the ith row. In other words, - is composed of ( * ) [bytes]. - - -4.2.5.3. Set_keyspace - - The result to a `use` query. The body (after the kind [int]) is a single - [string] indicating the name of the keyspace that has been set. - - -4.2.5.4. Prepared - - The result to a PREPARE message. The body of a Prepared result is: - - where: - - is [short bytes] representing the prepared query ID. - - is composed of: - [...][?...] - where: - - is an [int]. The bits of provides information on the - formatting of the remaining information. A flag is set if the bit - corresponding to its `mask` is set. Supported masks and their flags - are: - 0x0001 Global_tables_spec: if set, only one table spec (keyspace - and table name) is provided as . If not - set, is not present. - - is an [int] representing the number of bind markers - in the prepared statement. It defines the number of - elements. - - is an [int] representing the number of - elements to follow. If this value is zero, at least one of the - partition key columns in the table that the statement acts on - did not have a corresponding bind marker (or the bind marker - was wrapped in a function call). - - is a short that represents the index of the bind marker - that corresponds to the partition key column in position i. - For example, a sequence of [2, 0, 1] indicates that the - table has three partition key columns; the full partition key - can be constructed by creating a composite of the values for - the bind markers at index 2, at index 0, and at index 1. - This allows implementations with token-aware routing to correctly - construct the partition key without needing to inspect table - metadata. - - is present if the Global_tables_spec is set in - . If present, it is composed of two [string]s. The first - [string] is the name of the keyspace that the statement acts on. - The second [string] is the name of the table that the columns - represented by the bind markers belong to. - - specifies the bind markers in the prepared statement. - There are such column specifications, each with the - following format: - ()? - The initial and are two [string] that are only - present if the Global_tables_spec flag is not set. The field - is a [string] that holds the name of the bind marker (if named), - or the name of the column, field, or expression that the bind marker - corresponds to (if the bind marker is "anonymous"). The - field is an [option] that represents the expected type of values for - the bind marker. See the Rows documentation (section 4.2.5.2) for - full details on the field. - - - is defined exactly the same as in the Rows - documentation (section 4.2.5.2). This describes the metadata for the - result set that will be returned when this prepared statement is executed. - Note that may be empty (have the No_metadata flag and - 0 columns, See section 4.2.5.2) and will be for any query that is not a - Select. In fact, there is never a guarantee that this will be non-empty, so - implementations should protect themselves accordingly. This result metadata - is an optimization that allows implementations to later execute the - prepared statement without requesting the metadata (see the Skip_metadata - flag in EXECUTE). Clients can safely discard this metadata if they do not - want to take advantage of that optimization. - - Note that the prepared query ID returned is global to the node on which the query - has been prepared. It can be used on any connection to that node - until the node is restarted (after which the query must be reprepared). - -4.2.5.5. Schema_change - - The result to a schema altering query (creation/update/drop of a - keyspace/table/index). The body (after the kind [int]) is the same - as the body for a "SCHEMA_CHANGE" event, so 3 strings: - - Please refer to section 4.2.6 below for the meaning of those fields. - - Note that a query to create or drop an index is considered to be a change - to the table the index is on. - - -4.2.6. EVENT - - An event pushed by the server. A client will only receive events for the - types it has REGISTERed to. The body of an EVENT message will start with a - [string] representing the event type. The rest of the message depends on the - event type. The valid event types are: - - "TOPOLOGY_CHANGE": events related to change in the cluster topology. - Currently, events are sent when new nodes are added to the cluster, and - when nodes are removed. The body of the message (after the event type) - consists of a [string] and an [inet], corresponding respectively to the - type of change ("NEW_NODE" or "REMOVED_NODE") followed by the address of - the new/removed node. - - "STATUS_CHANGE": events related to change of node status. Currently, - up/down events are sent. The body of the message (after the event type) - consists of a [string] and an [inet], corresponding respectively to the - type of status change ("UP" or "DOWN") followed by the address of the - concerned node. - - "SCHEMA_CHANGE": events related to schema change. After the event type, - the rest of the message will be where: - - is a [string] representing the type of changed involved. - It will be one of "CREATED", "UPDATED" or "DROPPED". - - is a [string] that can be one of "KEYSPACE", "TABLE", "TYPE", - "FUNCTION" or "AGGREGATE" and describes what has been modified - ("TYPE" stands for modifications related to user types, "FUNCTION" - for modifications related to user defined functions, "AGGREGATE" - for modifications related to user defined aggregates). - - depends on the preceding : - - If is "KEYSPACE", then will be a single [string] - representing the keyspace changed. - - If is "TABLE" or "TYPE", then - will be 2 [string]: the first one will be the keyspace - containing the affected object, and the second one will be the name - of said affected object (either the table, user type, function, or - aggregate name). - - If is "FUNCTION" or "AGGREGATE", multiple arguments follow: - - [string] keyspace containing the user defined function / aggregate - - [string] the function/aggregate name - - [string list] one string for each argument type (as CQL type) - - All EVENT messages have a streamId of -1 (Section 2.3). - - Please note that "NEW_NODE" and "UP" events are sent based on internal Gossip - communication and as such may be sent a short delay before the binary - protocol server on the newly up node is fully started. Clients are thus - advised to wait a short time before trying to connect to the node (1 second - should be enough), otherwise they may experience a connection refusal at - first. - -4.2.7. AUTH_CHALLENGE - - A server authentication challenge (see AUTH_RESPONSE (Section 4.1.2) for more - details). - - The body of this message is a single [bytes] token. The details of what this - token contains (and when it can be null/empty, if ever) depends on the actual - authenticator used. - - Clients are expected to answer the server challenge with an AUTH_RESPONSE - message. - -4.2.8. AUTH_SUCCESS - - Indicates the success of the authentication phase. See Section 4.2.3 for more - details. - - The body of this message is a single [bytes] token holding final information - from the server that the client may require to finish the authentication - process. What that token contains and whether it can be null depends on the - actual authenticator used. - - -5. Compression - - Frame compression is supported by the protocol, but then only the frame body - is compressed (the frame header should never be compressed). - - Before being used, client and server must agree on a compression algorithm to - use, which is done in the STARTUP message. As a consequence, a STARTUP message - must never be compressed. However, once the STARTUP frame has been received - by the server, messages can be compressed (including the response to the STARTUP - request). Frames do not have to be compressed, however, even if compression has - been agreed upon (a server may only compress frames above a certain size at its - discretion). A frame body should be compressed if and only if the compressed - flag (see Section 2.2) is set. - - As of version 2 of the protocol, the following compressions are available: - - lz4 (https://code.google.com/p/lz4/). In that, note that the first four bytes - of the body will be the uncompressed length (followed by the compressed - bytes). - - snappy (https://code.google.com/p/snappy/). This compression might not be - available as it depends on a native lib (server-side) that might not be - avaivable on some installations. - - -6. Data Type Serialization Formats - - This sections describes the serialization formats for all CQL data types - supported by Cassandra through the native protocol. These serialization - formats should be used by client drivers to encode values for EXECUTE - messages. Cassandra will use these formats when returning values in - RESULT messages. - - All values are represented as [bytes] in EXECUTE and RESULT messages. - The [bytes] format includes an int prefix denoting the length of the value. - For that reason, the serialization formats described here will not include - a length component. - - For legacy compatibility reasons, note that most non-string types support - "empty" values (i.e. a value with zero length). An empty value is distinct - from NULL, which is encoded with a negative length. - - As with the rest of the native protocol, all encodings are big-endian. - -6.1. ascii - - A sequence of bytes in the ASCII range [0, 127]. Bytes with values outside of - this range will result in a validation error. - -6.2 bigint - - An eight-byte two's complement integer. - -6.3 blob - - Any sequence of bytes. - -6.4 boolean - - A single byte. A value of 0 denotes "false"; any other value denotes "true". - (However, it is recommended that a value of 1 be used to represent "true".) - -6.5 date - - An unsigned integer representing days with epoch centered at 2^31. - (unix epoch January 1st, 1970). - A few examples: - 0: -5877641-06-23 - 2^31: 1970-1-1 - 2^32: 5881580-07-11 - -6.6 decimal - - The decimal format represents an arbitrary-precision number. It contains an - [int] "scale" component followed by a varint encoding (see section 6.17) - of the unscaled value. The encoded value represents "E<-scale>". - In other words, " * 10 ^ (-1 * )". - -6.7 double - - An 8 byte floating point number in the IEEE 754 binary64 format. - -6.8 float - - A 4 byte floating point number in the IEEE 754 binary32 format. - -6.9 inet - - A 4 byte or 16 byte sequence denoting an IPv4 or IPv6 address, respectively. - -6.10 int - - A 4 byte two's complement integer. - -6.11 list - - A [int] n indicating the number of elements in the list, followed by n - elements. Each element is [bytes] representing the serialized value. - -6.12 map - - A [int] n indicating the number of key/value pairs in the map, followed by - n entries. Each entry is composed of two [bytes] representing the key - and value. - -6.13 set - - A [int] n indicating the number of elements in the set, followed by n - elements. Each element is [bytes] representing the serialized value. - -6.14 smallint - - A 2 byte two's complement integer. - -6.15 text - - A sequence of bytes conforming to the UTF-8 specifications. - -6.16 time - - An 8 byte two's complement long representing nanoseconds since midnight. - Valid values are in the range 0 to 86399999999999 - -6.17 timestamp - - An 8 byte two's complement integer representing a millisecond-precision - offset from the unix epoch (00:00:00, January 1st, 1970). Negative values - represent a negative offset from the epoch. - -6.18 timeuuid - - A 16 byte sequence representing a version 1 UUID as defined by RFC 4122. - -6.19 tinyint - - A 1 byte two's complement integer. - -6.20 tuple - - A sequence of [bytes] values representing the items in a tuple. The encoding - of each element depends on the data type for that position in the tuple. - Null values may be represented by using length -1 for the [bytes] - representation of an element. - -6.21 uuid - - A 16 byte sequence representing any valid UUID as defined by RFC 4122. - -6.22 varchar - - An alias of the "text" type. - -6.23 varint - - A variable-length two's complement encoding of a signed integer. - - The following examples may help implementors of this spec: - - Value | Encoding - ------|--------- - 0 | 0x00 - 1 | 0x01 - 127 | 0x7F - 128 | 0x0080 - 129 | 0x0081 - -1 | 0xFF - -128 | 0x80 - -129 | 0xFF7F - - Note that positive numbers must use a most-significant byte with a value - less than 0x80, because a most-significant bit of 1 indicates a negative - value. Implementors should pad positive values that have a MSB >= 0x80 - with a leading 0x00 byte. - - -7. User Defined Types - - This section describes the serialization format for User defined types (UDT), - as described in section 4.2.5.2. - - A UDT value is composed of successive [bytes] values, one for each field of the UDT - value (in the order defined by the type). A UDT value will generally have one value - for each field of the type it represents, but it is allowed to have less values than - the type has fields. - - -8. Result paging - - The protocol allows for paging the result of queries. For that, the QUERY and - EXECUTE messages have a value that indicate the desired - page size in CQL3 rows. - - If a positive value is provided for , the result set of the - RESULT message returned for the query will contain at most the - first rows of the query result. If that first page of results - contains the full result set for the query, the RESULT message (of kind `Rows`) - will have the Has_more_pages flag *not* set. However, if some results are not - part of the first response, the Has_more_pages flag will be set and the result - will contain a value. In that case, the value - should be used in a QUERY or EXECUTE message (that has the *same* query as - the original one or the behavior is undefined) to retrieve the next page of - results. - - Only CQL3 queries that return a result set (RESULT message with a Rows `kind`) - support paging. For other type of queries, the value is - ignored. - - Note to client implementors: - - While can be as low as 1, it will likely be detrimental - to performance to pick a value too low. A value below 100 is probably too - low for most use cases. - - Clients should not rely on the actual size of the result set returned to - decide if there are more results to fetch or not. Instead, they should always - check the Has_more_pages flag (unless they did not enable paging for the query - obviously). Clients should also not assert that no result will have more than - results. While the current implementation always respects - the exact value of , we reserve the right to return - slightly smaller or bigger pages in the future for performance reasons. - - The is specific to a protocol version and drivers should not - send a returned by a node using the protocol v3 to query a node - using the protocol v4 for instance. - - -9. Error codes - - Let us recall that an ERROR message is composed of [...] - (see 4.2.1 for details). The supported error codes, as well as any additional - information the message may contain after the are described below: - 0x0000 Server error: something unexpected happened. This indicates a - server-side bug. - 0x000A Protocol error: some client message triggered a protocol - violation (for instance a QUERY message is sent before a STARTUP - one has been sent) - 0x0100 Authentication error: authentication was required and failed. The - possible reason for failing depends on the authenticator in use, - which may or may not include more detail in the accompanying - error message. - 0x1000 Unavailable exception. The rest of the ERROR message body will be - - where: - is the [consistency] level of the query that triggered - the exception. - is an [int] representing the number of nodes that - should be alive to respect - is an [int] representing the number of replicas that - were known to be alive when the request had been - processed (since an unavailable exception has been - triggered, there will be < ) - 0x1001 Overloaded: the request cannot be processed because the - coordinator node is overloaded - 0x1002 Is_bootstrapping: the request was a read request but the - coordinator node is bootstrapping - 0x1003 Truncate_error: error during a truncation error. - 0x1100 Write_timeout: Timeout exception during a write request. The rest - of the ERROR message body will be - - where: - is the [consistency] level of the query having triggered - the exception. - is an [int] representing the number of nodes having - acknowledged the request. - is an [int] representing the number of replicas whose - acknowledgement is required to achieve . - is a [string] that describe the type of the write - that timed out. The value of that string can be one - of: - - "SIMPLE": the write was a non-batched - non-counter write. - - "BATCH": the write was a (logged) batch write. - If this type is received, it means the batch log - has been successfully written (otherwise a - "BATCH_LOG" type would have been sent instead). - - "UNLOGGED_BATCH": the write was an unlogged - batch. No batch log write has been attempted. - - "COUNTER": the write was a counter write - (batched or not). - - "BATCH_LOG": the timeout occurred during the - write to the batch log when a (logged) batch - write was requested. - - "CAS": the timeout occured during the Compare And Set write/update. - - "VIEW": the timeout occured when a write involves - VIEW update and failure to acqiure local view(MV) - lock for key within timeout - - "CDC": the timeout occured when cdc_total_space_in_mb is - exceeded when doing a write to data tracked by cdc. - 0x1200 Read_timeout: Timeout exception during a read request. The rest - of the ERROR message body will be - - where: - is the [consistency] level of the query having triggered - the exception. - is an [int] representing the number of nodes having - answered the request. - is an [int] representing the number of replicas whose - response is required to achieve . Please note that - it is possible to have >= if - is false. Also in the (unlikely) - case where is achieved but the coordinator node - times out while waiting for read-repair acknowledgement. - is a single byte. If its value is 0, it means - the replica that was asked for data has not - responded. Otherwise, the value is != 0. - 0x1300 Read_failure: A non-timeout exception during a read request. The rest - of the ERROR message body will be - - where: - is the [consistency] level of the query having triggered - the exception. - is an [int] representing the number of nodes having - answered the request. - is an [int] representing the number of replicas whose - acknowledgement is required to achieve . - is an [int] representing the number of nodes that - experience a failure while executing the request. - is a single byte. If its value is 0, it means - the replica that was asked for data had not - responded. Otherwise, the value is != 0. - 0x1400 Function_failure: A (user defined) function failed during execution. - The rest of the ERROR message body will be - - where: - is the keyspace [string] of the failed function - is the name [string] of the failed function - [string list] one string for each argument type (as CQL type) of the failed function - 0x1500 Write_failure: A non-timeout exception during a write request. The rest - of the ERROR message body will be - - where: - is the [consistency] level of the query having triggered - the exception. - is an [int] representing the number of nodes having - answered the request. - is an [int] representing the number of replicas whose - acknowledgement is required to achieve . - is an [int] representing the number of nodes that - experience a failure while executing the request. - is a [string] that describes the type of the write - that failed. The value of that string can be one - of: - - "SIMPLE": the write was a non-batched - non-counter write. - - "BATCH": the write was a (logged) batch write. - If this type is received, it means the batch log - has been successfully written (otherwise a - "BATCH_LOG" type would have been sent instead). - - "UNLOGGED_BATCH": the write was an unlogged - batch. No batch log write has been attempted. - - "COUNTER": the write was a counter write - (batched or not). - - "BATCH_LOG": the failure occured during the - write to the batch log when a (logged) batch - write was requested. - - "CAS": the failure occured during the Compare And Set write/update. - - "VIEW": the failure occured when a write involves - VIEW update and failure to acqiure local view(MV) - lock for key within timeout - - "CDC": the failure occured when cdc_total_space_in_mb is - exceeded when doing a write to data tracked by cdc. - - 0x2000 Syntax_error: The submitted query has a syntax error. - 0x2100 Unauthorized: The logged user doesn't have the right to perform - the query. - 0x2200 Invalid: The query is syntactically correct but invalid. - 0x2300 Config_error: The query is invalid because of some configuration issue - 0x2400 Already_exists: The query attempted to create a keyspace or a - table that was already existing. The rest of the ERROR message - body will be
    where: - is a [string] representing either the keyspace that - already exists, or the keyspace in which the table that - already exists is. -
    is a [string] representing the name of the table that - already exists. If the query was attempting to create a - keyspace,
    will be present but will be the empty - string. - 0x2500 Unprepared: Can be thrown while a prepared statement tries to be - executed if the provided prepared statement ID is not known by - this host. The rest of the ERROR message body will be [short - bytes] representing the unknown ID. - -10. Changes from v3 - - * Prepared responses (Section 4.2.5.4) now include partition-key bind indexes - * The format of "SCHEMA_CHANGE" events (Section 4.2.6) (and implicitly - "Schema_change" results (Section 4.2.5.5)) has been modified, and now includes - changes related to user defined functions and user defined aggregates. - * Read_failure error code was added. - * Function_failure error code was added. - * Add custom payload to frames for custom QueryHandler implementations (ignored by - Cassandra's standard QueryHandler) - * Add warnings to frames for responses for which the server generated a warning - during processing, which the client needs to address. - * Add the date and time data types - * Add the tinyint and smallint data types - * The returned in the v4 protocol is not compatible with the v3 - protocol. In other words, a returned by a node using protocol v4 - should not be used to query a node using protocol v3 (and vice-versa). - * Added THROW_ON_OVERLOAD startup option (Section 4.1.1). diff --git a/doc/native_protocol_v5.spec b/doc/native_protocol_v5.spec deleted file mode 100644 index d27945373323..000000000000 --- a/doc/native_protocol_v5.spec +++ /dev/null @@ -1,1281 +0,0 @@ - - CQL BINARY PROTOCOL v5 - - -Table of Contents - - 1. Overview - 2. Frame header - 2.1. version - 2.2. flags - 2.3. stream - 2.4. opcode - 2.5. length - 3. Notations - 4. Messages - 4.1. Requests - 4.1.1. STARTUP - 4.1.2. AUTH_RESPONSE - 4.1.3. OPTIONS - 4.1.4. QUERY - 4.1.5. PREPARE - 4.1.6. EXECUTE - 4.1.7. BATCH - 4.1.8. REGISTER - 4.2. Responses - 4.2.1. ERROR - 4.2.2. READY - 4.2.3. AUTHENTICATE - 4.2.4. SUPPORTED - 4.2.5. RESULT - 4.2.5.1. Void - 4.2.5.2. Rows - 4.2.5.3. Set_keyspace - 4.2.5.4. Prepared - 4.2.5.5. Schema_change - 4.2.6. EVENT - 4.2.7. AUTH_CHALLENGE - 4.2.8. AUTH_SUCCESS - 5. Compression - 6. Data Type Serialization Formats - 7. User Defined Type Serialization - 8. Result paging - 9. Error codes - 10. Changes from v4 - - -1. Overview - - The CQL binary protocol is a frame based protocol. Frames are defined as: - - 0 8 16 24 32 40 - +---------+---------+---------+---------+---------+ - | version | flags | stream | opcode | - +---------+---------+---------+---------+---------+ - | length | - +---------+---------+---------+---------+ - | | - . ... body ... . - . . - . . - +---------------------------------------- - - The protocol is big-endian (network byte order). - - Each frame contains a fixed size header (9 bytes) followed by a variable size - body. The header is described in Section 2. The content of the body depends - on the header opcode value (the body can in particular be empty for some - opcode values). The list of allowed opcodes is defined in Section 2.4 and the - details of each corresponding message are described Section 4. - - The protocol distinguishes two types of frames: requests and responses. Requests - are those frames sent by the client to the server. Responses are those frames sent - by the server to the client. Note, however, that the protocol supports server pushes - (events) so a response does not necessarily come right after a client request. - - Note to client implementors: client libraries should always assume that the - body of a given frame may contain more data than what is described in this - document. It will however always be safe to ignore the remainder of the frame - body in such cases. The reason is that this may enable extending the protocol - with optional features without needing to change the protocol version. - - - -2. Frame header - -2.1. version - - The version is a single byte that indicates both the direction of the message - (request or response) and the version of the protocol in use. The most - significant bit of version is used to define the direction of the message: - 0 indicates a request, 1 indicates a response. This can be useful for protocol - analyzers to distinguish the nature of the packet from the direction in which - it is moving. The rest of that byte is the protocol version (5 for the protocol - defined in this document). In other words, for this version of the protocol, - version will be one of: - 0x05 Request frame for this protocol version - 0x85 Response frame for this protocol version - - Please note that while every message ships with the version, only one version - of messages is accepted on a given connection. In other words, the first message - exchanged (STARTUP) sets the version for the connection for the lifetime of this - connection. The single exception to this behavior is when a startup message - is sent with a version that is higher than the current server version. In this - case, the server will respond with its current version. - - This document describes version 5 of the protocol. For the changes made since - version 4, see Section 10. - - -2.2. flags - - Flags applying to this frame. The flags have the following meaning (described - by the mask that allows selecting them): - 0x01: Compression flag. If set, the frame body is compressed. The actual - compression to use should have been set up beforehand through the - Startup message (which thus cannot be compressed; Section 4.1.1). - 0x02: Tracing flag. For a request frame, this indicates the client requires - tracing of the request. Note that only QUERY, PREPARE and EXECUTE queries - support tracing. Other requests will simply ignore the tracing flag if - set. If a request supports tracing and the tracing flag is set, the response - to this request will have the tracing flag set and contain tracing - information. - If a response frame has the tracing flag set, its body contains - a tracing ID. The tracing ID is a [uuid] and is the first thing in - the frame body. The rest of the body will then be the usual body - corresponding to the response opcode. - 0x04: Custom payload flag. For a request or response frame, this indicates - that a generic key-value custom payload for a custom QueryHandler - implementation is present in the frame. Such a custom payload is simply - ignored by the default QueryHandler implementation. - Currently, only QUERY, PREPARE, EXECUTE and BATCH requests support - payload. - Type of custom payload is [bytes map] (see below). - 0x08: Warning flag. The response contains warnings which were generated by the - server to go along with this response. - If a response frame has the warning flag set, its body will contain the - text of the warnings. The warnings are a [string list] and will be the - first value in the frame body if the tracing flag is not set, or directly - after the tracing ID if it is. - 0x10: Use beta flag. Indicates that the client opts in to use protocol version - that is currently in beta. Server will respond with ERROR if protocol - version is marked as beta on server and client does not provide this flag. - - The rest of flags is currently unused and ignored. - -2.3. stream - - A frame has a stream id (a [short] value). When sending request messages, this - stream id must be set by the client to a non-negative value (negative stream id - are reserved for streams initiated by the server; currently all EVENT messages - (section 4.2.6) have a streamId of -1). If a client sends a request message - with the stream id X, it is guaranteed that the stream id of the response to - that message will be X. - - This helps to enable the asynchronous nature of the protocol. If a client - sends multiple messages simultaneously (without waiting for responses), there - is no guarantee on the order of the responses. For instance, if the client - writes REQ_1, REQ_2, REQ_3 on the wire (in that order), the server might - respond to REQ_3 (or REQ_2) first. Assigning different stream ids to these 3 - requests allows the client to distinguish to which request a received answer - responds to. As there can only be 32768 different simultaneous streams, it is up - to the client to reuse stream id. - - Note that clients are free to use the protocol synchronously (i.e. wait for - the response to REQ_N before sending REQ_N+1). In that case, the stream id - can be safely set to 0. Clients should also feel free to use only a subset of - the 32768 maximum possible stream ids if it is simpler for its implementation. - -2.4. opcode - - An integer byte that distinguishes the actual message: - 0x00 ERROR - 0x01 STARTUP - 0x02 READY - 0x03 AUTHENTICATE - 0x05 OPTIONS - 0x06 SUPPORTED - 0x07 QUERY - 0x08 RESULT - 0x09 PREPARE - 0x0A EXECUTE - 0x0B REGISTER - 0x0C EVENT - 0x0D BATCH - 0x0E AUTH_CHALLENGE - 0x0F AUTH_RESPONSE - 0x10 AUTH_SUCCESS - - Messages are described in Section 4. - - (Note that there is no 0x04 message in this version of the protocol) - - -2.5. length - - A 4 byte integer representing the length of the body of the frame (note: - currently a frame is limited to 256MB in length). - - -3. Notations - - To describe the layout of the frame body for the messages in Section 4, we - define the following: - - [int] A 4 bytes integer - [long] A 8 bytes integer - [byte] A 1 byte unsigned integer - [short] A 2 bytes unsigned integer - [string] A [short] n, followed by n bytes representing an UTF-8 - string. - [long string] An [int] n, followed by n bytes representing an UTF-8 string. - [uuid] A 16 bytes long uuid. - [string list] A [short] n, followed by n [string]. - [bytes] A [int] n, followed by n bytes if n >= 0. If n < 0, - no byte should follow and the value represented is `null`. - [value] A [int] n, followed by n bytes if n >= 0. - If n == -1 no byte should follow and the value represented is `null`. - If n == -2 no byte should follow and the value represented is - `not set` not resulting in any change to the existing value. - n < -2 is an invalid value and results in an error. - [short bytes] A [short] n, followed by n bytes if n >= 0. - - [unsigned vint] An unsigned variable length integer. A vint is encoded with the most significant byte (MSB) first. - The most significant byte will contains the information about how many extra bytes need to be read - as well as the most significant bits of the integer. - The number of extra bytes to read is encoded as 1 bits on the left side. - For example, if we need to read 2 more bytes the first byte will start with 110 - (e.g. 256 000 will be encoded on 3 bytes as [110]00011 11101000 00000000) - If the encoded integer is 8 bytes long the vint will be encoded on 9 bytes and the first - byte will be: 11111111 - - [vint] A signed variable length integer. This is encoded using zig-zag encoding and then sent - like an [unsigned vint]. Zig-zag encoding converts numbers as follows: - 0 = 0, -1 = 1, 1 = 2, -2 = 3, 2 = 4, -3 = 5, 3 = 6 and so forth. - The purpose is to send small negative values as small unsigned values, so that we save bytes on the wire. - To encode a value n use "(n >> 31) ^ (n << 1)" for 32 bit values, and "(n >> 63) ^ (n << 1)" - for 64 bit values where "^" is the xor operation, "<<" is the left shift operation and ">>" is - the arithemtic right shift operation (highest-order bit is replicated). - Decode with "(n >> 1) ^ -(n & 1)". - - [option] A pair of where is a [short] representing - the option id and depends on that option (and can be - of size 0). The supported id (and the corresponding ) - will be described when this is used. - [option list] A [short] n, followed by n [option]. - [inet] An address (ip and port) to a node. It consists of one - [byte] n, that represents the address size, followed by n - [byte] representing the IP address (in practice n can only be - either 4 (IPv4) or 16 (IPv6)), following by one [int] - representing the port. - [inetaddr] An IP address (without a port) to a node. It consists of one - [byte] n, that represents the address size, followed by n - [byte] representing the IP address. - [consistency] A consistency level specification. This is a [short] - representing a consistency level with the following - correspondance: - 0x0000 ANY - 0x0001 ONE - 0x0002 TWO - 0x0003 THREE - 0x0004 QUORUM - 0x0005 ALL - 0x0006 LOCAL_QUORUM - 0x0007 EACH_QUORUM - 0x0008 SERIAL - 0x0009 LOCAL_SERIAL - 0x000A LOCAL_ONE - - [string map] A [short] n, followed by n pair where and - are [string]. - [string multimap] A [short] n, followed by n pair where is a - [string] and is a [string list]. - [bytes map] A [short] n, followed by n pair where is a - [string] and is a [bytes]. - - -4. Messages - -4.1. Requests - - Note that outside of their normal responses (described below), all requests - can get an ERROR message (Section 4.2.1) as response. - -4.1.1. STARTUP - - Initialize the connection. The server will respond by either a READY message - (in which case the connection is ready for queries) or an AUTHENTICATE message - (in which case credentials will need to be provided using AUTH_RESPONSE). - - This must be the first message of the connection, except for OPTIONS that can - be sent before to find out the options supported by the server. Once the - connection has been initialized, a client should not send any more STARTUP - messages. - - The body is a [string map] of options. Possible options are: - - "CQL_VERSION": the version of CQL to use. This option is mandatory and - currently the only version supported is "3.0.0". Note that this is - different from the protocol version. - - "COMPRESSION": the compression algorithm to use for frames (See section 5). - This is optional; if not specified no compression will be used. - - -4.1.2. AUTH_RESPONSE - - Answers a server authentication challenge. - - Authentication in the protocol is SASL based. The server sends authentication - challenges (a bytes token) to which the client answers with this message. Those - exchanges continue until the server accepts the authentication by sending a - AUTH_SUCCESS message after a client AUTH_RESPONSE. Note that the exchange - begins with the client sending an initial AUTH_RESPONSE in response to a - server AUTHENTICATE request. - - The body of this message is a single [bytes] token. The details of what this - token contains (and when it can be null/empty, if ever) depends on the actual - authenticator used. - - The response to a AUTH_RESPONSE is either a follow-up AUTH_CHALLENGE message, - an AUTH_SUCCESS message or an ERROR message. - - -4.1.3. OPTIONS - - Asks the server to return which STARTUP options are supported. The body of an - OPTIONS message should be empty and the server will respond with a SUPPORTED - message. - - -4.1.4. QUERY - - Performs a CQL query. The body of the message must be: - - where is a [long string] representing the query and - must be - [[name_1]...[name_n]][][][][][][] - where: - - is the [consistency] level for the operation. - - is a [int] whose bits define the options for this query and - in particular influence what the remainder of the message contains. - A flag is set if the bit corresponding to its `mask` is set. Supported - flags are, given their mask: - 0x0001: Values. If set, a [short] followed by [value] - values are provided. Those values are used for bound variables in - the query. Optionally, if the 0x40 flag is present, each value - will be preceded by a [string] name, representing the name of - the marker the value must be bound to. - 0x0002: Skip_metadata. If set, the Result Set returned as a response - to the query (if any) will have the NO_METADATA flag (see - Section 4.2.5.2). - 0x0004: Page_size. If set, is an [int] - controlling the desired page size of the result (in CQL3 rows). - See the section on paging (Section 8) for more details. - 0x0008: With_paging_state. If set, should be present. - is a [bytes] value that should have been returned - in a result set (Section 4.2.5.2). The query will be - executed but starting from a given paging state. This is also to - continue paging on a different node than the one where it - started (See Section 8 for more details). - 0x0010: With serial consistency. If set, should be - present. is the [consistency] level for the - serial phase of conditional updates. That consitency can only be - either SERIAL or LOCAL_SERIAL and if not present, it defaults to - SERIAL. This option will be ignored for anything else other than a - conditional update/insert. - 0x0020: With default timestamp. If set, must be present. - is a [long] representing the default timestamp for the query - in microseconds (negative values are forbidden). This will - replace the server side assigned timestamp as default timestamp. - Note that a timestamp in the query itself will still override - this timestamp. This is entirely optional. - 0x0040: With names for values. This only makes sense if the 0x01 flag is set and - is ignored otherwise. If present, the values from the 0x01 flag will - be preceded by a name (see above). Note that this is only useful for - QUERY requests where named bind markers are used; for EXECUTE statements, - since the names for the expected values was returned during preparation, - a client can always provide values in the right order without any names - and using this flag, while supported, is almost surely inefficient. - 0x0080: With keyspace. If set, must be present. is a - [string] indicating the keyspace that the query should be executed in. - It supercedes the keyspace that the connection is bound to, if any. - 0x0100: With now in seconds. If set, must be present. - is an [int] representing the current time (now) for - the query. Affects TTL cell liveness in read queries and local deletion - time for tombstones and TTL cells in update requests. It's intended - for testing purposes and is optional. - - Note that the consistency is ignored by some queries (USE, CREATE, ALTER, - TRUNCATE, ...). - - The server will respond to a QUERY message with a RESULT message, the content - of which depends on the query. - - -4.1.5. PREPARE - - Prepare a query for later execution (through EXECUTE). The body of the message must be: - [] - where: - - is a [long string] representing the CQL query. - - is a [int] whose bits define the options for this statement and in particular - influence what the remainder of the message contains. - A flag is set if the bit corresponding to its `mask` is set. Supported - flags are, given their mask: - 0x01: With keyspace. If set, must be present. is a - [string] indicating the keyspace that the query should be executed in. - It supercedes the keyspace that the connection is bound to, if any. - - The server will respond with a RESULT message with a `prepared` kind (0x0004, - see Section 4.2.5). - - -4.1.6. EXECUTE - - Executes a prepared query. The body of the message must be: - - where - - is the prepared query ID. It's the [short bytes] returned as a - response to a PREPARE message. - - is the ID of the resultset metadata that was sent - along with response to PREPARE message. If a RESULT/Rows message reports - changed resultset metadata with the Metadata_changed flag, the reported new - resultset metadata must be used in subsequent executions. - - has the exact same definition as in QUERY (see Section 4.1.4). - - -4.1.7. BATCH - - Allows executing a list of queries (prepared or not) as a batch (note that - only DML statements are accepted in a batch). The body of the message must - be: - ...[][][][] - where: - - is a [byte] indicating the type of batch to use: - - If == 0, the batch will be "logged". This is equivalent to a - normal CQL3 batch statement. - - If == 1, the batch will be "unlogged". - - If == 2, the batch will be a "counter" batch (and non-counter - statements will be rejected). - - is a [int] whose bits define the options for this query and - in particular influence what the remainder of the message contains. It is similar - to the from QUERY and EXECUTE methods, except that the 4 rightmost - bits must always be 0 as their corresponding options do not make sense for - Batch. A flag is set if the bit corresponding to its `mask` is set. Supported - flags are, given their mask: - 0x0010: With serial consistency. If set, should be - present. is the [consistency] level for the - serial phase of conditional updates. That consistency can only be - either SERIAL or LOCAL_SERIAL and if not present, it defaults to - SERIAL. This option will be ignored for anything else other than a - conditional update/insert. - 0x0020: With default timestamp. If set, should be present. - is a [long] representing the default timestamp for the query - in microseconds. This will replace the server side assigned - timestamp as default timestamp. Note that a timestamp in the query itself - will still override this timestamp. This is entirely optional. - 0x0040: With names for values. If set, then all values for all must be - preceded by a [string] that have the same meaning as in QUERY - requests [IMPORTANT NOTE: this feature does not work and should not be - used. It is specified in a way that makes it impossible for the server - to implement. This will be fixed in a future version of the native - protocol. See https://issues.apache.org/jira/browse/CASSANDRA-10246 for - more details]. - 0x0080: With keyspace. If set, must be present. is a - [string] indicating the keyspace that the query should be executed in. - It supercedes the keyspace that the connection is bound to, if any. - 0x0100: With now in seconds. If set, must be present. - is an [int] representing the current time (now) for - the query. Affects TTL cell liveness in read queries and local deletion - time for tombstones and TTL cells in update requests. It's intended - for testing purposes and is optional. - - is a [short] indicating the number of following queries. - - ... are the queries to execute. A must be of the - form: - []...[] - where: - - is a [byte] indicating whether the following query is a prepared - one or not. value must be either 0 or 1. - - depends on the value of . If == 0, it should be - a [long string] query string (as in QUERY, the query string might contain - bind markers). Otherwise (that is, if == 1), it should be a - [short bytes] representing a prepared query ID. - - is a [short] indicating the number (possibly 0) of following values. - - is the optional name of the following . It must be present - if and only if the 0x40 flag is provided for the batch. - - is the [value] to use for bound variable i (of bound variable - if the 0x40 flag is used). - - is the [consistency] level for the operation. - - is only present if the 0x10 flag is set. In that case, - is the [consistency] level for the serial phase of - conditional updates. That consitency can only be either SERIAL or - LOCAL_SERIAL and if not present will defaults to SERIAL. This option will - be ignored for anything else other than a conditional update/insert. - - The server will respond with a RESULT message. - - -4.1.8. REGISTER - - Register this connection to receive some types of events. The body of the - message is a [string list] representing the event types to register for. See - section 4.2.6 for the list of valid event types. - - The response to a REGISTER message will be a READY message. - - Please note that if a client driver maintains multiple connections to a - Cassandra node and/or connections to multiple nodes, it is advised to - dedicate a handful of connections to receive events, but to *not* register - for events on all connections, as this would only result in receiving - multiple times the same event messages, wasting bandwidth. - - -4.2. Responses - - This section describes the content of the frame body for the different - responses. Please note that to make room for future evolution, clients should - support extra informations (that they should simply discard) to the one - described in this document at the end of the frame body. - -4.2.1. ERROR - - Indicates an error processing a request. The body of the message will be an - error code ([int]) followed by a [string] error message. Then, depending on - the exception, more content may follow. The error codes are defined in - Section 9, along with their additional content if any. - - -4.2.2. READY - - Indicates that the server is ready to process queries. This message will be - sent by the server either after a STARTUP message if no authentication is - required (if authentication is required, the server indicates readiness by - sending a AUTH_RESPONSE message). - - The body of a READY message is empty. - - -4.2.3. AUTHENTICATE - - Indicates that the server requires authentication, and which authentication - mechanism to use. - - The authentication is SASL based and thus consists of a number of server - challenges (AUTH_CHALLENGE, Section 4.2.7) followed by client responses - (AUTH_RESPONSE, Section 4.1.2). The initial exchange is however boostrapped - by an initial client response. The details of that exchange (including how - many challenge-response pairs are required) are specific to the authenticator - in use. The exchange ends when the server sends an AUTH_SUCCESS message or - an ERROR message. - - This message will be sent following a STARTUP message if authentication is - required and must be answered by a AUTH_RESPONSE message from the client. - - The body consists of a single [string] indicating the full class name of the - IAuthenticator in use. - - -4.2.4. SUPPORTED - - Indicates which startup options are supported by the server. This message - comes as a response to an OPTIONS message. - - The body of a SUPPORTED message is a [string multimap]. This multimap gives - for each of the supported STARTUP options, the list of supported values. It - also includes: - - "PROTOCOL_VERSIONS": the list of native protocol versions that are - supported, encoded as the version number followed by a slash and the - version description. For example: 3/v3, 4/v4, 5/v5-beta. If a version is - in beta, it will have the word "beta" in its description. - - -4.2.5. RESULT - - The result to a query (QUERY, PREPARE, EXECUTE or BATCH messages). - - The first element of the body of a RESULT message is an [int] representing the - `kind` of result. The rest of the body depends on the kind. The kind can be - one of: - 0x0001 Void: for results carrying no information. - 0x0002 Rows: for results to select queries, returning a set of rows. - 0x0003 Set_keyspace: the result to a `use` query. - 0x0004 Prepared: result to a PREPARE message. - 0x0005 Schema_change: the result to a schema altering query. - - The body for each kind (after the [int] kind) is defined below. - - -4.2.5.1. Void - - The rest of the body for a Void result is empty. It indicates that a query was - successful without providing more information. - - -4.2.5.2. Rows - - Indicates a set of rows. The rest of the body of a Rows result is: - - where: - - is composed of: - [][][?...] - where: - - is an [int]. The bits of provides information on the - formatting of the remaining information. A flag is set if the bit - corresponding to its `mask` is set. Supported flags are, given their - mask: - 0x0001 Global_tables_spec: if set, only one table spec (keyspace - and table name) is provided as . If not - set, is not present. - 0x0002 Has_more_pages: indicates whether this is not the last - page of results and more should be retrieved. If set, the - will be present. The is a - [bytes] value that should be used in QUERY/EXECUTE to - continue paging and retrieve the remainder of the result for - this query (See Section 8 for more details). - 0x0004 No_metadata: if set, the is only composed of - these , the and optionally the - (depending on the Has_more_pages flag) but - no other information (so no nor ). - This will only ever be the case if this was requested - during the query (see QUERY and RESULT messages). - 0x0008 Metadata_changed: if set, the No_metadata flag has to be unset - and has to be supplied. This flag is to be - used to avoid a roundtrip in case of metadata changes for queries - that requested metadata to be skipped. - - is an [int] representing the number of columns selected - by the query that produced this result. It defines the number of - elements in and the number of elements for each row in . - - is [short bytes] representing the new, changed resultset - metadata. The new metadata ID must also be used in subsequent executions of - the corresponding prepared statement, if any. - - is present if the Global_tables_spec is set in - . It is composed of two [string] representing the - (unique) keyspace name and table name the columns belong to. - - specifies the columns returned in the query. There are - such column specifications that are composed of: - ()? - The initial and are two [string] and are only present - if the Global_tables_spec flag is not set. The is a - [string] and is an [option] that corresponds to the description - (what this description is depends a bit on the context: in results to - selects, this will be either the user chosen alias or the selection used - (often a colum name, but it can be a function call too). In results to - a PREPARE, this will be either the name of the corresponding bind variable - or the column name for the variable if it is "anonymous") and type of - the corresponding result. The option for is either a native - type (see below), in which case the option has no value, or a - 'custom' type, in which case the value is a [string] representing - the fully qualified class name of the type represented. Valid option - ids are: - 0x0000 Custom: the value is a [string], see above. - 0x0001 Ascii - 0x0002 Bigint - 0x0003 Blob - 0x0004 Boolean - 0x0005 Counter - 0x0006 Decimal - 0x0007 Double - 0x0008 Float - 0x0009 Int - 0x000B Timestamp - 0x000C Uuid - 0x000D Varchar - 0x000E Varint - 0x000F Timeuuid - 0x0010 Inet - 0x0011 Date - 0x0012 Time - 0x0013 Smallint - 0x0014 Tinyint - 0x0015 Duration - 0x0020 List: the value is an [option], representing the type - of the elements of the list. - 0x0021 Map: the value is two [option], representing the types of the - keys and values of the map - 0x0022 Set: the value is an [option], representing the type - of the elements of the set - 0x0030 UDT: the value is ... - where: - - is a [string] representing the keyspace name this - UDT is part of. - - is a [string] representing the UDT name. - - is a [short] representing the number of fields of - the UDT, and thus the number of pairs - following - - is a [string] representing the name of the - i_th field of the UDT. - - is an [option] representing the type of the - i_th field of the UDT. - 0x0031 Tuple: the value is ... where is a [short] - representing the number of values in the type, and - are [option] representing the type of the i_th component - of the tuple - - - is an [int] representing the number of rows present in this - result. Those rows are serialized in the part. - - is composed of ... where m is . - Each is composed of ... where n is - and where is a [bytes] representing the value - returned for the jth column of the ith row. In other words, - is composed of ( * ) [bytes]. - - -4.2.5.3. Set_keyspace - - The result to a `use` query. The body (after the kind [int]) is a single - [string] indicating the name of the keyspace that has been set. - - -4.2.5.4. Prepared - - The result to a PREPARE message. The body of a Prepared result is: - - where: - - is [short bytes] representing the prepared query ID. - - is [short bytes] representing the resultset metadata ID. - - is composed of: - [...][?...] - where: - - is an [int]. The bits of provides information on the - formatting of the remaining information. A flag is set if the bit - corresponding to its `mask` is set. Supported masks and their flags - are: - 0x0001 Global_tables_spec: if set, only one table spec (keyspace - and table name) is provided as . If not - set, is not present. - - is an [int] representing the number of bind markers - in the prepared statement. It defines the number of - elements. - - is an [int] representing the number of - elements to follow. If this value is zero, at least one of the - partition key columns in the table that the statement acts on - did not have a corresponding bind marker (or the bind marker - was wrapped in a function call). - - is a short that represents the index of the bind marker - that corresponds to the partition key column in position i. - For example, a sequence of [2, 0, 1] indicates that the - table has three partition key columns; the full partition key - can be constructed by creating a composite of the values for - the bind markers at index 2, at index 0, and at index 1. - This allows implementations with token-aware routing to correctly - construct the partition key without needing to inspect table - metadata. - - is present if the Global_tables_spec is set in - . If present, it is composed of two [string]s. The first - [string] is the name of the keyspace that the statement acts on. - The second [string] is the name of the table that the columns - represented by the bind markers belong to. - - specifies the bind markers in the prepared statement. - There are such column specifications, each with the - following format: - ()? - The initial and are two [string] that are only - present if the Global_tables_spec flag is not set. The field - is a [string] that holds the name of the bind marker (if named), - or the name of the column, field, or expression that the bind marker - corresponds to (if the bind marker is "anonymous"). The - field is an [option] that represents the expected type of values for - the bind marker. See the Rows documentation (section 4.2.5.2) for - full details on the field. - - - is defined exactly the same as in the Rows - documentation (section 4.2.5.2). This describes the metadata for the - result set that will be returned when this prepared statement is executed. - Note that may be empty (have the No_metadata flag and - 0 columns, See section 4.2.5.2) and will be for any query that is not a - Select. In fact, there is never a guarantee that this will be non-empty, so - implementations should protect themselves accordingly. This result metadata - is an optimization that allows implementations to later execute the - prepared statement without requesting the metadata (see the Skip_metadata - flag in EXECUTE). Clients can safely discard this metadata if they do not - want to take advantage of that optimization. - - Note that the prepared query ID returned is global to the node on which the query - has been prepared. It can be used on any connection to that node - until the node is restarted (after which the query must be reprepared). - -4.2.5.5. Schema_change - - The result to a schema altering query (creation/update/drop of a - keyspace/table/index). The body (after the kind [int]) is the same - as the body for a "SCHEMA_CHANGE" event, so 3 strings: - - Please refer to section 4.2.6 below for the meaning of those fields. - - Note that a query to create or drop an index is considered to be a change - to the table the index is on. - - -4.2.6. EVENT - - An event pushed by the server. A client will only receive events for the - types it has REGISTERed to. The body of an EVENT message will start with a - [string] representing the event type. The rest of the message depends on the - event type. The valid event types are: - - "TOPOLOGY_CHANGE": events related to change in the cluster topology. - Currently, events are sent when new nodes are added to the cluster, and - when nodes are removed. The body of the message (after the event type) - consists of a [string] and an [inet], corresponding respectively to the - type of change ("NEW_NODE" or "REMOVED_NODE") followed by the address of - the new/removed node. - - "STATUS_CHANGE": events related to change of node status. Currently, - up/down events are sent. The body of the message (after the event type) - consists of a [string] and an [inet], corresponding respectively to the - type of status change ("UP" or "DOWN") followed by the address of the - concerned node. - - "SCHEMA_CHANGE": events related to schema change. After the event type, - the rest of the message will be where: - - is a [string] representing the type of changed involved. - It will be one of "CREATED", "UPDATED" or "DROPPED". - - is a [string] that can be one of "KEYSPACE", "TABLE", "TYPE", - "FUNCTION" or "AGGREGATE" and describes what has been modified - ("TYPE" stands for modifications related to user types, "FUNCTION" - for modifications related to user defined functions, "AGGREGATE" - for modifications related to user defined aggregates). - - depends on the preceding : - - If is "KEYSPACE", then will be a single [string] - representing the keyspace changed. - - If is "TABLE" or "TYPE", then - will be 2 [string]: the first one will be the keyspace - containing the affected object, and the second one will be the name - of said affected object (either the table, user type, function, or - aggregate name). - - If is "FUNCTION" or "AGGREGATE", multiple arguments follow: - - [string] keyspace containing the user defined function / aggregate - - [string] the function/aggregate name - - [string list] one string for each argument type (as CQL type) - - All EVENT messages have a streamId of -1 (Section 2.3). - - Please note that "NEW_NODE" and "UP" events are sent based on internal Gossip - communication and as such may be sent a short delay before the binary - protocol server on the newly up node is fully started. Clients are thus - advised to wait a short time before trying to connect to the node (1 second - should be enough), otherwise they may experience a connection refusal at - first. - -4.2.7. AUTH_CHALLENGE - - A server authentication challenge (see AUTH_RESPONSE (Section 4.1.2) for more - details). - - The body of this message is a single [bytes] token. The details of what this - token contains (and when it can be null/empty, if ever) depends on the actual - authenticator used. - - Clients are expected to answer the server challenge with an AUTH_RESPONSE - message. - -4.2.8. AUTH_SUCCESS - - Indicates the success of the authentication phase. See Section 4.2.3 for more - details. - - The body of this message is a single [bytes] token holding final information - from the server that the client may require to finish the authentication - process. What that token contains and whether it can be null depends on the - actual authenticator used. - - -5. Compression - - Frame compression is supported by the protocol, but then only the frame body - is compressed (the frame header should never be compressed). - - Before being used, client and server must agree on a compression algorithm to - use, which is done in the STARTUP message. As a consequence, a STARTUP message - must never be compressed. However, once the STARTUP frame has been received - by the server, messages can be compressed (including the response to the STARTUP - request). Frames do not have to be compressed, however, even if compression has - been agreed upon (a server may only compress frames above a certain size at its - discretion). A frame body should be compressed if and only if the compressed - flag (see Section 2.2) is set. - - As of version 2 of the protocol, the following compressions are available: - - lz4 (https://code.google.com/p/lz4/). In that, note that the first four bytes - of the body will be the uncompressed length (followed by the compressed - bytes). - - snappy (https://code.google.com/p/snappy/). This compression might not be - available as it depends on a native lib (server-side) that might not be - avaivable on some installations. - - -6. Data Type Serialization Formats - - This sections describes the serialization formats for all CQL data types - supported by Cassandra through the native protocol. These serialization - formats should be used by client drivers to encode values for EXECUTE - messages. Cassandra will use these formats when returning values in - RESULT messages. - - All values are represented as [bytes] in EXECUTE and RESULT messages. - The [bytes] format includes an int prefix denoting the length of the value. - For that reason, the serialization formats described here will not include - a length component. - - For legacy compatibility reasons, note that most non-string types support - "empty" values (i.e. a value with zero length). An empty value is distinct - from NULL, which is encoded with a negative length. - - As with the rest of the native protocol, all encodings are big-endian. - -6.1. ascii - - A sequence of bytes in the ASCII range [0, 127]. Bytes with values outside of - this range will result in a validation error. - -6.2 bigint - - An eight-byte two's complement integer. - -6.3 blob - - Any sequence of bytes. - -6.4 boolean - - A single byte. A value of 0 denotes "false"; any other value denotes "true". - (However, it is recommended that a value of 1 be used to represent "true".) - -6.5 date - - An unsigned integer representing days with epoch centered at 2^31. - (unix epoch January 1st, 1970). - A few examples: - 0: -5877641-06-23 - 2^31: 1970-1-1 - 2^32: 5881580-07-11 - -6.6 decimal - - The decimal format represents an arbitrary-precision number. It contains an - [int] "scale" component followed by a varint encoding (see section 6.17) - of the unscaled value. The encoded value represents "E<-scale>". - In other words, " * 10 ^ (-1 * )". - -6.7 double - - An 8 byte floating point number in the IEEE 754 binary64 format. - -6.8 duration - - A duration is composed of 3 signed variable length integers ([vint]s). - The first [vint] represents a number of months, the second [vint] represents - a number of days, and the last [vint] represents a number of nanoseconds. - The number of months and days must be valid 32 bits integers whereas the - number of nanoseconds must be a valid 64 bits integer. - A duration can either be positive or negative. If a duration is positive - all the integers must be positive or zero. If a duration is - negative all the numbers must be negative or zero. - -6.9 float - - A 4 byte floating point number in the IEEE 754 binary32 format. - -6.10 inet - - A 4 byte or 16 byte sequence denoting an IPv4 or IPv6 address, respectively. - -6.11 int - - A 4 byte two's complement integer. - -6.12 list - - A [int] n indicating the number of elements in the list, followed by n - elements. Each element is [bytes] representing the serialized value. - -6.13 map - - A [int] n indicating the number of key/value pairs in the map, followed by - n entries. Each entry is composed of two [bytes] representing the key - and value. - -6.14 set - - A [int] n indicating the number of elements in the set, followed by n - elements. Each element is [bytes] representing the serialized value. - -6.15 smallint - - A 2 byte two's complement integer. - -6.16 text - - A sequence of bytes conforming to the UTF-8 specifications. - -6.17 time - - An 8 byte two's complement long representing nanoseconds since midnight. - Valid values are in the range 0 to 86399999999999 - -6.18 timestamp - - An 8 byte two's complement integer representing a millisecond-precision - offset from the unix epoch (00:00:00, January 1st, 1970). Negative values - represent a negative offset from the epoch. - -6.19 timeuuid - - A 16 byte sequence representing a version 1 UUID as defined by RFC 4122. - -6.20 tinyint - - A 1 byte two's complement integer. - -6.21 tuple - - A sequence of [bytes] values representing the items in a tuple. The encoding - of each element depends on the data type for that position in the tuple. - Null values may be represented by using length -1 for the [bytes] - representation of an element. - -6.22 uuid - - A 16 byte sequence representing any valid UUID as defined by RFC 4122. - -6.23 varchar - - An alias of the "text" type. - -6.24 varint - - A variable-length two's complement encoding of a signed integer. - - The following examples may help implementors of this spec: - - Value | Encoding - ------|--------- - 0 | 0x00 - 1 | 0x01 - 127 | 0x7F - 128 | 0x0080 - 129 | 0x0081 - -1 | 0xFF - -128 | 0x80 - -129 | 0xFF7F - - Note that positive numbers must use a most-significant byte with a value - less than 0x80, because a most-significant bit of 1 indicates a negative - value. Implementors should pad positive values that have a MSB >= 0x80 - with a leading 0x00 byte. - - -7. User Defined Types - - This section describes the serialization format for User defined types (UDT), - as described in section 4.2.5.2. - - A UDT value is composed of successive [bytes] values, one for each field of the UDT - value (in the order defined by the type). A UDT value will generally have one value - for each field of the type it represents, but it is allowed to have less values than - the type has fields. - - -8. Result paging - - The protocol allows for paging the result of queries. For that, the QUERY and - EXECUTE messages have a value that indicate the desired - page size in CQL3 rows. - - If a positive value is provided for , the result set of the - RESULT message returned for the query will contain at most the - first rows of the query result. If that first page of results - contains the full result set for the query, the RESULT message (of kind `Rows`) - will have the Has_more_pages flag *not* set. However, if some results are not - part of the first response, the Has_more_pages flag will be set and the result - will contain a value. In that case, the value - should be used in a QUERY or EXECUTE message (that has the *same* query as - the original one or the behavior is undefined) to retrieve the next page of - results. - - Only CQL3 queries that return a result set (RESULT message with a Rows `kind`) - support paging. For other type of queries, the value is - ignored. - - Note to client implementors: - - While can be as low as 1, it will likely be detrimental - to performance to pick a value too low. A value below 100 is probably too - low for most use cases. - - Clients should not rely on the actual size of the result set returned to - decide if there are more results to fetch or not. Instead, they should always - check the Has_more_pages flag (unless they did not enable paging for the query - obviously). Clients should also not assert that no result will have more than - results. While the current implementation always respects - the exact value of , we reserve the right to return - slightly smaller or bigger pages in the future for performance reasons. - - The is specific to a protocol version and drivers should not - send a returned by a node using the protocol v3 to query a node - using the protocol v4 for instance. - - -9. Error codes - - Let us recall that an ERROR message is composed of [...] - (see 4.2.1 for details). The supported error codes, as well as any additional - information the message may contain after the are described below: - 0x0000 Server error: something unexpected happened. This indicates a - server-side bug. - 0x000A Protocol error: some client message triggered a protocol - violation (for instance a QUERY message is sent before a STARTUP - one has been sent) - 0x0100 Authentication error: authentication was required and failed. The - possible reason for failing depends on the authenticator in use, - which may or may not include more detail in the accompanying - error message. - 0x1000 Unavailable exception. The rest of the ERROR message body will be - - where: - is the [consistency] level of the query that triggered - the exception. - is an [int] representing the number of nodes that - should be alive to respect - is an [int] representing the number of replicas that - were known to be alive when the request had been - processed (since an unavailable exception has been - triggered, there will be < ) - 0x1001 Overloaded: the request cannot be processed because the - coordinator node is overloaded - 0x1002 Is_bootstrapping: the request was a read request but the - coordinator node is bootstrapping - 0x1003 Truncate_error: error during a truncation error. - 0x1100 Write_timeout: Timeout exception during a write request. The rest - of the ERROR message body will be - - where: - is the [consistency] level of the query having triggered - the exception. - is an [int] representing the number of nodes having - acknowledged the request. - is an [int] representing the number of replicas whose - acknowledgement is required to achieve . - is a [string] that describe the type of the write - that timed out. The value of that string can be one - of: - - "SIMPLE": the write was a non-batched - non-counter write. - - "BATCH": the write was a (logged) batch write. - If this type is received, it means the batch log - has been successfully written (otherwise a - "BATCH_LOG" type would have been sent instead). - - "UNLOGGED_BATCH": the write was an unlogged - batch. No batch log write has been attempted. - - "COUNTER": the write was a counter write - (batched or not). - - "BATCH_LOG": the timeout occurred during the - write to the batch log when a (logged) batch - write was requested. - - "CAS": the timeout occured during the Compare And Set write/update. - - "VIEW": the timeout occured when a write involves - VIEW update and failure to acqiure local view(MV) - lock for key within timeout - - "CDC": the timeout occured when cdc_total_space_in_mb is - exceeded when doing a write to data tracked by cdc. - is a [short] that describes the number of contentions occured during the CAS operation. - The field only presents when the is "CAS". - 0x1200 Read_timeout: Timeout exception during a read request. The rest - of the ERROR message body will be - - where: - is the [consistency] level of the query having triggered - the exception. - is an [int] representing the number of nodes having - answered the request. - is an [int] representing the number of replicas whose - response is required to achieve . Please note that - it is possible to have >= if - is false. Also in the (unlikely) - case where is achieved but the coordinator node - times out while waiting for read-repair acknowledgement. - is a single byte. If its value is 0, it means - the replica that was asked for data has not - responded. Otherwise, the value is != 0. - 0x1300 Read_failure: A non-timeout exception during a read request. The rest - of the ERROR message body will be - - where: - is the [consistency] level of the query having triggered - the exception. - is an [int] representing the number of nodes having - answered the request. - is an [int] representing the number of replicas whose - acknowledgement is required to achieve . - is a map of endpoint to failure reason codes. This maps - the endpoints of the replica nodes that failed when - executing the request to a code representing the reason - for the failure. The map is encoded starting with an [int] n - followed by n pairs of where - is an [inetaddr] and is a [short]. - is a single byte. If its value is 0, it means - the replica that was asked for data had not - responded. Otherwise, the value is != 0. - 0x1400 Function_failure: A (user defined) function failed during execution. - The rest of the ERROR message body will be - - where: - is the keyspace [string] of the failed function - is the name [string] of the failed function - [string list] one string for each argument type (as CQL type) of the failed function - 0x1500 Write_failure: A non-timeout exception during a write request. The rest - of the ERROR message body will be - - where: - is the [consistency] level of the query having triggered - the exception. - is an [int] representing the number of nodes having - answered the request. - is an [int] representing the number of replicas whose - acknowledgement is required to achieve . - is a map of endpoint to failure reason codes. This maps - the endpoints of the replica nodes that failed when - executing the request to a code representing the reason - for the failure. The map is encoded starting with an [int] n - followed by n pairs of where - is an [inetaddr] and is a [short]. - is a [string] that describes the type of the write - that failed. The value of that string can be one - of: - - "SIMPLE": the write was a non-batched - non-counter write. - - "BATCH": the write was a (logged) batch write. - If this type is received, it means the batch log - has been successfully written (otherwise a - "BATCH_LOG" type would have been sent instead). - - "UNLOGGED_BATCH": the write was an unlogged - batch. No batch log write has been attempted. - - "COUNTER": the write was a counter write - (batched or not). - - "BATCH_LOG": the failure occured during the - write to the batch log when a (logged) batch - write was requested. - - "CAS": the failure occured during the Compare And Set write/update. - - "VIEW": the failure occured when a write involves - VIEW update and failure to acqiure local view(MV) - lock for key within timeout - - "CDC": the failure occured when cdc_total_space_in_mb is - exceeded when doing a write to data tracked by cdc. - 0x1600 CDC_WRITE_FAILURE: // todo - 0x1700 CAS_WRITE_UNKNOWN: An exception occured due to contended Compare And Set write/update. - The CAS operation was only partially completed and the operation may or may not get completed by - the contending CAS write or SERIAL/LOCAL_SERIAL read. The rest of the ERROR message body will be - - where: - is the [consistency] level of the query having triggered - the exception. - is an [int] representing the number of nodes having - acknowledged the request. - is an [int] representing the number of replicas whose - acknowledgement is required to achieve . - - 0x2000 Syntax_error: The submitted query has a syntax error. - 0x2100 Unauthorized: The logged user doesn't have the right to perform - the query. - 0x2200 Invalid: The query is syntactically correct but invalid. - 0x2300 Config_error: The query is invalid because of some configuration issue - 0x2400 Already_exists: The query attempted to create a keyspace or a - table that was already existing. The rest of the ERROR message - body will be
    where: - is a [string] representing either the keyspace that - already exists, or the keyspace in which the table that - already exists is. -
    is a [string] representing the name of the table that - already exists. If the query was attempting to create a - keyspace,
    will be present but will be the empty - string. - 0x2500 Unprepared: Can be thrown while a prepared statement tries to be - executed if the provided prepared statement ID is not known by - this host. The rest of the ERROR message body will be [short - bytes] representing the unknown ID. - -10. Changes from v4 - - * Beta protocol flag for v5 native protocol is added (Section 2.2) - * in Read_failure and Write_failure error message bodies (Section 9) - has been replaced with . The maps node IP addresses to - a failure reason code which indicates why the request failed on that node. - * Enlarged flag's bitmaps for QUERY, EXECUTE and BATCH messages from [byte] to [int] - (Sections 4.1.4, 4.1.6 and 4.1.7). - * Add the duration data type - * Added keyspace field in QUERY, PREPARE, and BATCH messages (Sections 4.1.4, 4.1.5, and 4.1.7). - * Added now_in_seconds field in QUERY, EXECUTE, and BATCH messages (Sections 4.1.4, 4.1.6, and 4.1.7). - * Added [int] flags field in PREPARE message (Section 4.1.5). - * Removed NO_COMPACT startup option (Section 4.1.1.) diff --git a/doc/site.yml b/doc/site.yml index 60be37caf5a8..d64834d8582a 100644 --- a/doc/site.yml +++ b/doc/site.yml @@ -8,11 +8,11 @@ site: content: sources: - - url: /antora/cassandra - #- url: https://github.com/polandll/cassandra.git + #- url: /antora/cassandra + - url: https://github.com/polandll/cassandra.git branches: - 'doc_redo_asciidoc' - - 'doc_redo_asciidoc3.11' + #- 'doc_redo_asciidoc3.11' start_path: doc/source - url: https://github.com/polandll/cassandra-website.git branches: diff --git a/doc/source/modules/cassandra/examples/BASH/docker_cqlsh.sh b/doc/source/modules/cassandra/examples/BASH/docker_cqlsh.sh new file mode 100644 index 000000000000..92a4a8f356d2 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/docker_cqlsh.sh @@ -0,0 +1 @@ +docker exec -it cass_cluster cqlsh diff --git a/doc/source/modules/cassandra/examples/BASH/docker_pull.sh b/doc/source/modules/cassandra/examples/BASH/docker_pull.sh new file mode 100644 index 000000000000..a732b1a11285 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/docker_pull.sh @@ -0,0 +1 @@ +docker pull cassandra:latest diff --git a/doc/source/modules/cassandra/examples/BASH/docker_run.sh b/doc/source/modules/cassandra/examples/BASH/docker_run.sh new file mode 100644 index 000000000000..00e75fae69c4 --- /dev/null +++ b/doc/source/modules/cassandra/examples/BASH/docker_run.sh @@ -0,0 +1 @@ +docker run --name cass_cluster cassandra:latest diff --git a/doc/source/modules/cassandra/pages/getting_started/installing.adoc b/doc/source/modules/cassandra/pages/getting_started/installing.adoc index 6da0fcde8b75..40793c5d9369 100644 --- a/doc/source/modules/cassandra/pages/getting_started/installing.adoc +++ b/doc/source/modules/cassandra/pages/getting_started/installing.adoc @@ -38,20 +38,63 @@ that you have the correct version of Python installed, type == Choosing an installation method -For most users, installing the binary tarball is the simplest choice. +There are three methods of installing Cassandra that are common: + +* Docker image +* Tarball binary file +* Package installation (RPM, YUM) + +If you are a current Docker user, installing a Docker image is simple. +You'll need to install Docker Desktop for Mac, Docker Desktop for Windows, +or have `docker` installed on Linux. +Pull the appropriate image and then start Cassandra with a run command. + +For most users, installing the binary tarball is also a simple choice. The tarball unpacks all its contents into a single location with binaries and configuration files located in their own subdirectories. The most obvious attribute of the tarball installation is it does not require `root` permissions and can be installed on any Linux distribution. -Packaged installations require `root` permissions. Install the RPM build -on CentOS and RHEL-based distributions if you want to install Cassandra -using YUM. Install the Debian build on Ubuntu and other Debian-based -distributions if you want to install Cassandra using APT. Note that both -the YUM and APT methods required `root` permissions and will install the -binaries and configuration files as the `cassandra` OS user. +Packaged installations require `root` permissions, and are most appropriate for +production installs. +Install the RPM build on CentOS and RHEL-based distributions if you want to +install Cassandra using YUM. +Install the Debian build on Ubuntu and other Debian-based +distributions if you want to install Cassandra using APT. +Note that both the YUM and APT methods required `root` permissions and +will install the binaries and configuration files as the `cassandra` OS user. + +== Installing the docker image + +[arabic, start=1] +. Pull the docker image. For the latest image, use: +[source, shell] +---- +include::example$BASH/docker_pull.sh[] +---- + +This `docker pull` command will get the latest version of the official +Apache Cassandra image available from the https://hub.docker.com/_/cassandra[Dockerhub]. + +[arabic, start=2] +. Start Cassandra with a `docker run` command: + +[source, shell] +---- +include::example$BASH/docker_run.sh[] +---- + +`--name` will be the name of the Cassandra cluster created. + +[arabic, start=3] +. Start the CQL shell, `cqlsh` to interact with the Cassandra node created: + +[source, shell] +---- +include::example$BASH/docker_cqlsh.sh[] +---- == Installing the binary tarball include::partial$java_version.adoc[] From 1baa432fc1fe09e5567a13ed6f01c3187ec529a0 Mon Sep 17 00:00:00 2001 From: polandll Date: Mon, 21 Dec 2020 15:55:46 -0800 Subject: [PATCH 092/115] fix sentence --- .../modules/cassandra/pages/getting_started/installing.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/modules/cassandra/pages/getting_started/installing.adoc b/doc/source/modules/cassandra/pages/getting_started/installing.adoc index 40793c5d9369..24e55468c50e 100644 --- a/doc/source/modules/cassandra/pages/getting_started/installing.adoc +++ b/doc/source/modules/cassandra/pages/getting_started/installing.adoc @@ -86,7 +86,7 @@ Apache Cassandra image available from the https://hub.docker.com/_/cassandra[Doc include::example$BASH/docker_run.sh[] ---- -`--name` will be the name of the Cassandra cluster created. +The `--name` option will be the name of the Cassandra cluster created. [arabic, start=3] . Start the CQL shell, `cqlsh` to interact with the Cassandra node created: From 17a7d1c15ab356caac7ca6800a891d2eb4f05bce Mon Sep 17 00:00:00 2001 From: polandll Date: Tue, 22 Dec 2020 16:31:49 -0800 Subject: [PATCH 093/115] improvements to writing --- .../modules/cassandra/pages/cql/SASI.adoc | 4 +- .../pages/getting_started/configuring.adoc | 1 + .../pages/getting_started/drivers.adoc | 6 +- .../pages/getting_started/index.adoc | 3 +- .../pages/getting_started/production.adoc | 146 +++++++++++------- .../pages/getting_started/querying.adoc | 3 +- 6 files changed, 95 insertions(+), 68 deletions(-) diff --git a/doc/source/modules/cassandra/pages/cql/SASI.adoc b/doc/source/modules/cassandra/pages/cql/SASI.adoc index 6650bb4db2f3..c24009ad24c3 100644 --- a/doc/source/modules/cassandra/pages/cql/SASI.adoc +++ b/doc/source/modules/cassandra/pages/cql/SASI.adoc @@ -1,9 +1,9 @@ == SASIIndex https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/SASIIndex.java[`SASIIndex`], -or ``SASI'' for short, is an implementation of Cassandra’s `Index` +or ``SASI`` for short, is an implementation of Cassandra's `Index` interface that can be used as an alternative to the existing -implementations. SASI’s indexing and querying improves on existing +implementations. SASI's indexing and querying improves on existing implementations by tailoring it specifically to Cassandra’s needs. SASI has superior performance in cases where queries would previously require filtering. In achieving this performance, SASI aims to be significantly diff --git a/doc/source/modules/cassandra/pages/getting_started/configuring.adoc b/doc/source/modules/cassandra/pages/getting_started/configuring.adoc index fd028078e13d..ba72f97917b9 100644 --- a/doc/source/modules/cassandra/pages/getting_started/configuring.adoc +++ b/doc/source/modules/cassandra/pages/getting_started/configuring.adoc @@ -3,6 +3,7 @@ The `Cassandra` configuration files location varies, depending on the type of installation: +* docker: `/etc/cassandra` directory * tarball: `conf` directory within the tarball install location * package: `/etc/cassandra` directory diff --git a/doc/source/modules/cassandra/pages/getting_started/drivers.adoc b/doc/source/modules/cassandra/pages/getting_started/drivers.adoc index e05d9c89c1e0..eb15a5583054 100644 --- a/doc/source/modules/cassandra/pages/getting_started/drivers.adoc +++ b/doc/source/modules/cassandra/pages/getting_started/drivers.adoc @@ -30,15 +30,13 @@ functionality supported by a specific driver. == Nodejs * https://github.com/datastax/nodejs-driver[Datastax Nodejs driver] -* https://github.com/jorgebay/node-cassandra-cql[Node-Cassandra-CQL] == PHP * http://code.google.com/a/apache-extras.org/p/cassandra-pdo[CQL | PHP] * https://github.com/datastax/php-driver/[Datastax PHP driver] * https://github.com/aparkhomenko/php-cassandra[PHP-Cassandra] -* http://evseevnn.github.io/php-cassandra-binary/[PHP Library for -Cassandra] +* https://github.com/duoshuo/php-cassandra[PHP Library for Cassandra] == C++ @@ -65,7 +63,7 @@ connector] == Go -* http://relops.com/cqlc/[CQLc] +* https://github.com/relops/cqlc[CQLc] * https://github.com/hailocab/gocassa[Gocassa] * https://github.com/gocql/gocql[GoCQL] diff --git a/doc/source/modules/cassandra/pages/getting_started/index.adoc b/doc/source/modules/cassandra/pages/getting_started/index.adoc index 46f6d5ead0d5..af43c17a0bfc 100644 --- a/doc/source/modules/cassandra/pages/getting_started/index.adoc +++ b/doc/source/modules/cassandra/pages/getting_started/index.adoc @@ -4,7 +4,8 @@ This section covers how to get started using Apache Cassandra and should be the first thing to read if you are new to Cassandra. * xref:getting_started/installing.adoc[Installing Cassandra]: Installation instructions plus information on choosing a method. -** [ xref:getting_started/installing.adoc#installing-the-binary-tarball[tarball] ] +** [ xref:getting_started/installing.adoc#installing-the-docker-image[Docker] ] +[ xref:getting_started/installing.adoc#installing-the-binary-tarball[tarball] ] [ xref:getting_started/installing.adoc#installing-the-debian-packages[Debian] ] [ xref:getting_started/installing.adoc#installing-the-rpm-packages[RPM] ] * xref:getting_started/configuring.adoc[Configuring Cassandra] diff --git a/doc/source/modules/cassandra/pages/getting_started/production.adoc b/doc/source/modules/cassandra/pages/getting_started/production.adoc index 36bd50af9743..de7fb54234ac 100644 --- a/doc/source/modules/cassandra/pages/getting_started/production.adoc +++ b/doc/source/modules/cassandra/pages/getting_started/production.adoc @@ -1,21 +1,21 @@ -= Production Recommendations += Production recommendations The `cassandra.yaml` and `jvm.options` files have a number of notes and -recommendations for production usage. This page expands on some of this -information. +recommendations for production usage. +This page expands on some of the information in the files. == Tokens -Using more than one token-range per node (referred to as vnodes) allows for flexible -expansion and more streaming peers when bootstrapping new nodes into the -cluster. Limiting the negative impact of streaming (I/O and CPU -overhead) enables incremental cluster expansion. - -As a tradeoff, more tokens will lead to sharing data with more peers, -resulting in decreased availability. To learn more, +Using more than one token-range per node is referred to as virtual nodes, or vnodes. +`vnodes` facilitate flexible expansion with more streaming peers when a new node bootstraps +into a cluster. +Limiting the negative impact of streaming (I/O and CPU overhead) enables incremental cluster expansion. +However, more tokens leads to sharing data with more peers, and results in decreased availability. +These two factors must be balanced based on a cluster's characteristic reads and writes. +To learn more, https://github.com/jolynch/python_performance_toolkit/raw/master/notebooks/cassandra_availability/whitepaper/cassandra-availability-virtual.pdf[Cassandra Availability in Virtual Nodes, Joseph Lynch and Josh Snyder] is recommended reading. -The number of tokens can be changed using the following setting: +Change the number of tokens using the setting in the `cassandra.yaml` file: `num_tokens: 16` @@ -34,33 +34,39 @@ clusters which will eventually reach over 30 nodes. Requires adding approximately 20% more nodes to remain balanced. Shrinking a cluster may result in cluster imbalance. +|8 | Using 8 vnodes distributes the workload between systems with a ~10% variance +and has minimal impact on performance. + |16 |Best for heavily elastic clusters which expand and shrink regularly, but may have issues availability with larger clusters. Not recommended for clusters over 50 nodes. |=== In addition to setting the token count, it's extremely important that -`allocate_tokens_for_local_replication_factor` be set as well to an appropriate number of replicates, to ensure -even token allocation. +`allocate_tokens_for_local_replication_factor` in `cassandra.yaml` is set to an +appropriate number of replicates, to ensure even token allocation. -== Read Ahead +== Read ahead Read ahead is an operating system feature that attempts to keep as much -data loaded in the page cache as possible. The goal is to decrease -latency by using additional throughput on reads where the latency -penalty is high due to seek times on spinning disks. By leveraging read -ahead, the OS can pull additional data into memory without the cost of -additional seeks. This works well when the available RAM is greater than the -size of the hot dataset, but can be problematic when the hot dataset is -much larger than available RAM. The benefit of read ahead decreases as -the size of your hot dataset gets bigger in proportion to available -memory. - -With small partitions (usually tables with a single partition key, but not -limited to this case) and solid state drives (SSDs), read ahead can increase -disk usage without any of the latency benefits, and in some cases can -result in up to a 5x latency and throughput performance penalty. Read -heavy, key/value tables with small (under 1KB) rows are especially prone +data as possible loaded in the page cache. +Spinning disks can have long seek times causing high latency, so additional +throughout on reads using page cache can improve performance. +By leveraging read ahead, the OS can pull additional data into memory without +the cost of additional seeks. +This method works well when the available RAM is greater than the size of the +hot dataset, but can be problematic when the reverse is true (dataset > RAM). +The larger the hot dataset, the less read ahead is useful. + +Read ahead is definitely not useful in the following cases: + +* Small partitions, such as tables with a single partition key +* Solid state drives (SSDs) + + +Read ahead can actually increase disk usage, and in some cases result in as much +as a 5x latency and throughput performance penalty. +Read-heavy, key/value tables with small (under 1KB) rows are especially prone to this problem. The recommended read ahead settings are: @@ -72,9 +78,9 @@ The recommended read ahead settings are: |SSD |4KB |=== -Read ahead can be adjusted on Linux systems by using the `blockdev` tool. +Read ahead can be adjusted on Linux systems using the `blockdev` tool. -For example, we can set the read ahead of `/dev/sda1\` to 4KB by doing the following: +For example, set the read ahead of the disk `/dev/sda1\` to 4KB: [source, shell] ---- @@ -82,56 +88,76 @@ $ blockdev --setra 8 /dev/sda1 ---- [NOTE] ==== -`blockdev` accepts the number of 512 byte sectors to read ahead. The argument of 8 above is equivilent to 4KB. +The `blockdev` setting sets the number of 512 byte sectors to read ahead. +The argument of 8 above is equivalent to 4KB, or 8 * 512 bytes. ==== -Since each system is different, use the above recommendations as a starting point and tuning based on your SLA -and throughput requirements. To understand how read ahead impacts disk resource usage, we recommend carefully -reading through the xref:troubleshooting/use_tools.adoc[Diving Deep, using external tools] section. +All systems are different, so use these recommendations as a starting point and +tune, based on your SLA and throughput requirements. +To understand how read ahead impacts disk resource usage, we recommend carefully +reading through the xref:troubleshooting/use_tools.adoc[Diving Deep, using external tools] +section. == Compression -Compressed data is stored by compressing fixed size byte buffers and writing the data to disk. The buffer size -is determined by the`chunk_length_in_kb` element in the compression map of the schema settings. The default setting -is 16KB starting with Cassandra {40_version}. +Compressed data is stored by compressing fixed size byte buffers and writing the +data to disk. +The buffer size is determined by the `chunk_length_in_kb` element in the compression +map of a table's schema settings for `WITH COMPRESSION`. +The default setting is 16KB starting with Cassandra {40_version}. -Since the entire compressed buffer must be read off disk, using a compression chunk length that is too large can lead to -significant overhead when reading small records. Combined with the default read ahead setting, the result can be massive -read amplification for certain workloads. +Since the entire compressed buffer must be read off-disk, using a compression +chunk length that is too large can lead to significant overhead when reading small records. +Combined with the default read ahead setting, the result can be massive +read amplification for certain workloads. Therefore, picking an appropriate +value for this setting is important. -LZ4Compressor is the default and recommended compression algorithm. There is additional information on compression in +LZ4Compressor is the default and recommended compression algorithm. +If you need additional information on compression, read https://thelastpickle.com/blog/2018/08/08/compression_performance.html[The Last Pickle blogpost on compression performance]. -== Compaction +== Compaction -There are different xref:compaction/index.adoc[compaction] strategies available for different workloads. We recommend reading -about the different strategies to understand which is the best for your environment. Different tables may (and frequently do) -use different compaction strategies on the same cluster. +There are different xref:compaction/index.adoc[compaction] strategies available +for different workloads. +We recommend reading about the different strategies to understand which is the +best for your environment. +Different tables may, and frequently do use different compaction strategies in +the same cluster. -== Encryption +== Encryption -It is significantly better to set up peer-to-peer encryption and client server encryption when setting up your production cluster. -Setting it up once the cluster is already serving production traffic is challenging to get right. If you plan to use -network encryption eventually (in any form), we recommend setting it up now. Changing these configurations down the line is not impossible, but mistakes can result in downtime or data loss. +It is significantly better to set up peer-to-peer encryption and client server +encryption when setting up your production cluster. +Setting it up after the cluster is serving production traffic is challenging +to do correctly. +If you ever plan to use network encryption of any type, we recommend setting it +up when initially configuring your cluster. +Changing these configurations later is not impossible, but mistakes can +result in downtime or data loss. -== Ensure Keyspaces are Created with NetworkTopologyStrategy +== Ensure keyspaces are created with NetworkTopologyStrategy -Production clusters should never use `SimpleStrategy`. Production keyspaces should use the `NetworkTopologyStrategy` (NTS). -For example: +Production clusters should never use `SimpleStrategy`. +Production keyspaces should use the `NetworkTopologyStrategy` (NTS). +For example: [source, cql] ---- CREATE KEYSPACE mykeyspace WITH replication = { - 'class': 'NetworkTopologyStrategy', + 'class': 'NetworkTopologyStrategy', 'datacenter1': 3 }; ---- -`NetworkTopologyStrategy` allows Cassandra to take advantage of multiple racks and data centers. +Cassandra clusters initialized with `NetworkTopologyStrategy` can take advantage +of the ability to configure multiple racks and data centers. -== Configure Racks and Snitch +== Configure racks and snitch -**Correctly configuring or changing racks after a cluster has been provisioned is an unsupported process**. -Migrating from a single rack to multiple racks is also unsupported and can result in data loss. -Using `GossipingPropertyFileSnitch` is the most flexible solution for on premise or mixed cloud environments.`Ec2Snitch` -is reliable for AWS EC2 only environments. +**Correctly configuring or changing racks after a cluster has been provisioned is an unsupported process**. +Migrating from a single rack to multiple racks is also unsupported and can +result in data loss. +Using `GossipingPropertyFileSnitch` is the most flexible solution for on +premise or mixed cloud environments. +`Ec2Snitch` is reliable for AWS EC2 only environments. diff --git a/doc/source/modules/cassandra/pages/getting_started/querying.adoc b/doc/source/modules/cassandra/pages/getting_started/querying.adoc index 78d51857b476..a8b348a06c02 100644 --- a/doc/source/modules/cassandra/pages/getting_started/querying.adoc +++ b/doc/source/modules/cassandra/pages/getting_started/querying.adoc @@ -4,7 +4,8 @@ The API for Cassandra is xref:cql/ddl.adoc[`CQL`, the Cassandra Query Language]. use CQL, you will need to connect to the cluster, using either: * `cqlsh`, a shell for CQL -* through a client driver for Cassandra +* a client driver for Cassandra +* for the adventurous, check out https://zeppelin.apache.org/docs/0.7.0/interpreter/cassandra.html[Apache Zeppelin], a notebook-style tool == CQLSH From 549839760389d8da41779adb34471518e9ee0035 Mon Sep 17 00:00:00 2001 From: polandll Date: Wed, 20 Jan 2021 16:05:27 -0800 Subject: [PATCH 094/115] fix index --- .../cassandra/pages/operating/index.adoc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/source/modules/cassandra/pages/operating/index.adoc b/doc/source/modules/cassandra/pages/operating/index.adoc index afcbda077432..613d40c37f65 100644 --- a/doc/source/modules/cassandra/pages/operating/index.adoc +++ b/doc/source/modules/cassandra/pages/operating/index.adoc @@ -1,16 +1,16 @@ == Operating Cassandra -* xref:operating/snitch.adoc[Snitches] +* xref:operating/hardware.adoc[Hardware] +* xref:operating/security.adoc[Security] * xref:operating/topo_changes.adoc[Topology changes] +* xref:operating/hints.adoc[Hints] * xref:operating/repair.adoc[Repair] * xref:operating/read_repair.adoc[Read repair] -* xref:operating/hints.adoc[Hints] -* xref:operating/bloom_filters.adoc[Bloom filters] -* xref:operating/compression.adoc[Compression] -* xref:operating/cdc.adoc[CDC] +* xref:operating/metrics.adoc[Monitoring] * xref:operating/backups.adoc[Backups] -* xref:operating/bulk_loading.adoc[Bulk loading] -* xref:operating/metrics.adoc[Metrics] -* xref:operating/security.adoc[Security] -* xref:operating/hardware.adoc[Hardware] +* xref:operating/compression.adoc[Compression] * xref:operating/compaction/index.adoc[Compaction] +* xref:operating/bulk_loading.adoc[Bulk loading] +* xref:operating/cdc.adoc[CDC] +* xref:operating/bloom_filters.adoc[Bloom filters] +* xref:operating/snitch.adoc[Snitches] From 05f61eea506de352dbb1842aff9631dca2039fcb Mon Sep 17 00:00:00 2001 From: polandll Date: Thu, 21 Jan 2021 12:00:36 -0800 Subject: [PATCH 095/115] changes due to CASS tickets --- .../cassandra/pages/architecture/index.adoc | 1 + .../pages/architecture/overview.adoc | 22 ++-- .../{operating => architecture}/snitch.adoc | 0 .../pages/getting_started/quickstart.adoc | 116 ++++++++++++++++++ .../cassandra/pages/operating/hardware.adoc | 7 +- .../cassandra/pages/operating/index.adoc | 3 +- 6 files changed, 135 insertions(+), 14 deletions(-) rename doc/source/modules/cassandra/pages/{operating => architecture}/snitch.adoc (100%) create mode 100644 doc/source/modules/cassandra/pages/getting_started/quickstart.adoc diff --git a/doc/source/modules/cassandra/pages/architecture/index.adoc b/doc/source/modules/cassandra/pages/architecture/index.adoc index 27c5173bbf9b..c4bef05cfdf0 100644 --- a/doc/source/modules/cassandra/pages/architecture/index.adoc +++ b/doc/source/modules/cassandra/pages/architecture/index.adoc @@ -6,3 +6,4 @@ This section describes the general architecture of Apache Cassandra. * xref:architecture/dynamo.adoc[Dynamo] * xref:architecture/storage_engine.adoc[Storage Engine] * xref:architecture/guarantees.adoc[Guarantees] +* xref:architecture/snitch.adoc[Snitches] diff --git a/doc/source/modules/cassandra/pages/architecture/overview.adoc b/doc/source/modules/cassandra/pages/architecture/overview.adoc index 7e771e1b7402..605e347830af 100644 --- a/doc/source/modules/cassandra/pages/architecture/overview.adoc +++ b/doc/source/modules/cassandra/pages/architecture/overview.adoc @@ -42,19 +42,19 @@ Cassandra provides the Cassandra Query Language (xref:cql/ddl.adoc[CQL]), an SQL language, to create and update database schema and access data. CQL allows users to organize data within a cluster of Cassandra nodes using: -* *Keyspace*: defines how a dataset is replicated, for example in which -datacenters and how many copies. Keyspaces contain tables. -* *Table*: defines the typed schema for a collection of partitions. -Cassandra tables have flexible addition of new columns to tables with -zero downtime. Tables contain partitions, which contain partitions, -which contain columns. -* *Partition*: defines the mandatory part of the primary key all rows in -Cassandra must have. All performant queries supply the partition key in -the query. -* *Row*: contains a collection of columns identified by a unique primary +* *Keyspace*: Defines how a dataset is replicated, per datacenter. +Replication is the number of copies saved per cluster. +Keyspaces contain tables. +* *Table*: Defines the typed schema for a collection of partitions. +Tables contain partitions, which contain rows, which contain columns. +Cassandra tables can flexibly add new columns to tables with zero downtime. +* *Partition*: Defines the mandatory part of the primary key all rows in +Cassandra must have to identify the node in a cluster where the row is stored. +All performant queries supply the partition key in the query. +* *Row*: Contains a collection of columns identified by a unique primary key made up of the partition key and optionally additional clustering keys. -* *Column*: A single datum with a type which belong to a row. +* *Column*: A single datum with a type which belongs to a row. CQL supports numerous advanced features over a partitioned dataset such as: diff --git a/doc/source/modules/cassandra/pages/operating/snitch.adoc b/doc/source/modules/cassandra/pages/architecture/snitch.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/snitch.adoc rename to doc/source/modules/cassandra/pages/architecture/snitch.adoc diff --git a/doc/source/modules/cassandra/pages/getting_started/quickstart.adoc b/doc/source/modules/cassandra/pages/getting_started/quickstart.adoc new file mode 100644 index 000000000000..69b55a6b5327 --- /dev/null +++ b/doc/source/modules/cassandra/pages/getting_started/quickstart.adoc @@ -0,0 +1,116 @@ += Apache Cassandra Quickstart +:tabs: + +_Interested in getting started with Cassandra? Follow these instructions._ + +*STEP 1: GET CASSANDRA USING DOCKER* + +You'll need to have Docker Desktop for Mac, Docker Desktop for Windows, or +similar software installed on your computer. + +[source, plaintext] +---- +docker pull cassandra:latest +---- + +Apache Cassandra is also available as a https://cassandra.apache.org/download/[tarball or package download]. + +*STEP 2: START CASSANDRA* + +[source, plaintext] +---- +docker run --name cassandra cassandra +---- + +*STEP 3: CREATE FILES* + +In the directory where you plan to run the next step, create these two files +so that some data can be automatically inserted in the next step. + +A _cqlshrc_ file will log into the Cassandra database with the default superuser: + +[source, plaintext] +---- +[authentication] + username = cassandra + password = cassandra +---- + +Create a _scripts_ directory and change to that directory. +The following _data.cql_ file will create a keyspace, the layer at which Cassandra +replicates its data, a table to hold the data, and insert some data: + +[source, plaintext] +---- +# Create a keyspace +CREATE KEYSPACE IF NOT EXISTS store WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : '1' }; + +# Create a table +CREATE TABLE IF NOT EXISTS store.shopping_cart ( + userid text PRIMARY KEY, + item_count int, + last_update_timestamp timestamp +); + +# Insert some data +INSERT INTO store.shopping_cart +(userid, item_count, last_update_timestamp) +VALUES ('9876', 2, toTimeStamp(toDate(now)))); +INSERT INTO store.shopping_cart +(userid, item_count, last_update_timestamp) +VALUES (1234, 5, toTimeStamp(toDate(now)))); +---- + +You should now have a _cqlshrc_ file and _/scripts/data.cql_ file. + +*STEP 4: RUN CQLSH TO INTERACT* + +Cassandra is a distributed database that can read and write data across multiple +nodes with peer-to-peer replication. The Cassandra Query Language (CQL) is +similar to SQL but suited for the JOINless structure of Cassandra. The CQL +shell, or `cqlsh`, is one tool to use in interacting with the database. + +[source, plaintext] +---- +docker run --rm -it -v //scripts:/scripts \ +-v / Date: Thu, 24 Jun 2021 16:27:13 -0700 Subject: [PATCH 096/115] remove one more rst file --- doc/source/getting_started/installing.rst | 324 ---------------------- 1 file changed, 324 deletions(-) delete mode 100644 doc/source/getting_started/installing.rst diff --git a/doc/source/getting_started/installing.rst b/doc/source/getting_started/installing.rst deleted file mode 100644 index 1d59b8b37ed8..000000000000 --- a/doc/source/getting_started/installing.rst +++ /dev/null @@ -1,324 +0,0 @@ -.. Licensed to the Apache Software Foundation (ASF) under one -.. or more contributor license agreements. See the NOTICE file -.. distributed with this work for additional information -.. regarding copyright ownership. The ASF licenses this file -.. to you under the Apache License, Version 2.0 (the -.. "License"); you may not use this file except in compliance -.. with the License. You may obtain a copy of the License at -.. -.. http://www.apache.org/licenses/LICENSE-2.0 -.. -.. Unless required by applicable law or agreed to in writing, software -.. distributed under the License is distributed on an "AS IS" BASIS, -.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -.. See the License for the specific language governing permissions and -.. limitations under the License. - -.. highlight:: none - -Installing Cassandra --------------------- - -These are the instructions for deploying the supported releases of Apache Cassandra on Linux servers. - -Cassandra runs on a wide array of Linux distributions including (but not limited to): - -- Ubuntu, most notably LTS releases 16.04 to 18.04 -- CentOS & RedHat Enterprise Linux (RHEL) including 6.6 to 7.7 -- Amazon Linux AMIs including 2016.09 through to Linux 2 -- Debian versions 8 & 9 -- SUSE Enterprise Linux 12 - -This is not an exhaustive list of operating system platforms, nor is it prescriptive. However users will be -well-advised to conduct exhaustive tests of their own particularly for less-popular distributions of Linux. -Deploying on older versions is not recommended unless you have previous experience with the older distribution -in a production environment. - -Prerequisites -^^^^^^^^^^^^^ - -- Install the latest version of Java 8, either the `Oracle Java Standard Edition 8 - `__ or `OpenJDK 8 `__. To - verify that you have the correct version of java installed, type ``java -version``. -- **NOTE**: *Experimental* support for Java 11 was added in Cassandra 4.0 (`CASSANDRA-9608 `__). - Running Cassandra on Java 11 is *experimental*. Do so at your own risk. For more information, see - `NEWS.txt `__. -- For using cqlsh, the latest version of `Python 2.7 `__ or Python 3.6+. To verify that you have - the correct version of Python installed, type ``python --version``. - -Choosing an installation method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For most users, installing the binary tarball is the simplest choice. The tarball unpacks all its contents -into a single location with binaries and configuration files located in their own subdirectories. The most -obvious attribute of the tarball installation is it does not require ``root`` permissions and can be -installed on any Linux distribution. - -Packaged installations require ``root`` permissions. Install the RPM build on CentOS and RHEL-based -distributions if you want to install Cassandra using YUM. Install the Debian build on Ubuntu and other -Debian-based distributions if you want to install Cassandra using APT. Note that both the YUM and APT -methods required ``root`` permissions and will install the binaries and configuration files as the -``cassandra`` OS user. - -Installing the binary tarball -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -1. Verify the version of Java installed. For example: - -:: - - $ java -version - openjdk version "1.8.0_222" - OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) - OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) - -2. Download the binary tarball from one of the mirrors on the `Apache Cassandra Download `__ - site. For example, to download 4.0: - -:: - - $ curl -OL http://apache.mirror.digitalpacific.com.au/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz - -NOTE: The mirrors only host the latest versions of each major supported release. To download an earlier -version of Cassandra, visit the `Apache Archives `__. - -3. OPTIONAL: Verify the integrity of the downloaded tarball using one of the methods `here `__. - For example, to verify the hash of the downloaded file using GPG: - -:: - - $ gpg --print-md SHA256 apache-cassandra-4.0.0-bin.tar.gz - apache-cassandra-4.0.0-bin.tar.gz: 28757DDE 589F7041 0F9A6A95 C39EE7E6 - CDE63440 E2B06B91 AE6B2006 14FA364D - -Compare the signature with the SHA256 file from the Downloads site: - -:: - - $ curl -L https://downloads.apache.org/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz.sha256 - 28757dde589f70410f9a6a95c39ee7e6cde63440e2b06b91ae6b200614fa364d - -4. Unpack the tarball: - -:: - - $ tar xzvf apache-cassandra-4.0.0-bin.tar.gz - -The files will be extracted to the ``apache-cassandra-4.0.0/`` directory. This is the tarball installation -location. - -5. Located in the tarball installation location are the directories for the scripts, binaries, utilities, configuration, data and log files: - -:: - - / - bin/ - conf/ - data/ - doc/ - interface/ - javadoc/ - lib/ - logs/ - pylib/ - tools/ - -For information on how to configure your installation, see -`Configuring Cassandra `__. - -6. Start Cassandra: - -:: - - $ cd apache-cassandra-4.0.0/ - $ bin/cassandra - -NOTE: This will run Cassandra as the authenticated Linux user. - -You can monitor the progress of the startup with: - -:: - - $ tail -f logs/system.log - -Cassandra is ready when you see an entry like this in the ``system.log``: - -:: - - INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... - -7. Check the status of Cassandra: - -:: - - $ bin/nodetool status - -The status column in the output should report UN which stands for "Up/Normal". - -Alternatively, connect to the database with: - -:: - - $ bin/cqlsh - -Installing the Debian packages -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -1. Verify the version of Java installed. For example: - -:: - - $ java -version - openjdk version "1.8.0_222" - OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) - OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) - -2. Add the Apache repository of Cassandra to the file ``cassandra.sources.list``. The latest major version - is 4.0 and the corresponding distribution name is ``40x`` (with an "x" as the suffix). - For older releases use ``311x`` for C* 3.11 series, ``30x`` for 3.0, ``22x`` for 2.2 and ``21x`` for 2.1. - For example, to add the repository for version 4.0 (``40x``): - -:: - - $ echo "deb http://downloads.apache.org/cassandra/debian 40x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list - deb http://downloads.apache.org/cassandra/debian 40x main - -3. Add the Apache Cassandra repository keys to the list of trusted keys on the server: - -:: - - $ curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add - - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed - 100 266k 100 266k 0 0 320k 0 --:--:-- --:--:-- --:--:-- 320k - OK - -4. Update the package index from sources: - -:: - - $ sudo apt-get update - -5. Install Cassandra with APT: - -:: - - $ sudo apt-get install cassandra - - -NOTE: A new Linux user ``cassandra`` will get created as part of the installation. The Cassandra service -will also be run as this user. - -6. The Cassandra service gets started automatically after installation. Monitor the progress of - the startup with: - -:: - - $ tail -f /var/log/cassandra/system.log - -Cassandra is ready when you see an entry like this in the ``system.log``: - -:: - - INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... - -NOTE: For information on how to configure your installation, see -`Configuring Cassandra `__. - -7. Check the status of Cassandra: - -:: - - $ nodetool status - -The status column in the output should report ``UN`` which stands for "Up/Normal". - -Alternatively, connect to the database with: - -:: - - $ cqlsh - -Installing the RPM packages -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -1. Verify the version of Java installed. For example: - -:: - - $ java -version - openjdk version "1.8.0_222" - OpenJDK Runtime Environment (build 1.8.0_232-b09) - OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode) - -2. Add the Apache repository of Cassandra to the file ``/etc/yum.repos.d/cassandra.repo`` (as the ``root`` - user). The latest major version is 4.0 and the corresponding distribution name is ``40x`` (with an "x" as the suffix). - For older releases use ``311x`` for C* 3.11 series, ``30x`` for 3.0, ``22x`` for 2.2 and ``21x`` for 2.1. - For example, to add the repository for version 4.0 (``40x``): - -:: - - [cassandra] - name=Apache Cassandra - baseurl=https://downloads.apache.org/cassandra/redhat/40x/ - gpgcheck=1 - repo_gpgcheck=1 - gpgkey=https://downloads.apache.org/cassandra/KEYS - -3. Update the package index from sources: - -:: - - $ sudo yum update - -4. Install Cassandra with YUM: - -:: - - $ sudo yum install cassandra - - -NOTE: A new Linux user ``cassandra`` will get created as part of the installation. The Cassandra service -will also be run as this user. - -5. Start the Cassandra service: - -:: - - $ sudo service cassandra start - -6. Monitor the progress of the startup with: - -:: - - $ tail -f /var/log/cassandra/system.log - -Cassandra is ready when you see an entry like this in the ``system.log``: - -:: - - INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... - -NOTE: For information on how to configure your installation, see -`Configuring Cassandra `__. - -7. Check the status of Cassandra: - -:: - - $ nodetool status - -The status column in the output should report ``UN`` which stands for "Up/Normal". - -Alternatively, connect to the database with: - -:: - - $ cqlsh - -Further installation info -^^^^^^^^^^^^^^^^^^^^^^^^^ - -For help with installation issues, see the `Troubleshooting `__ section. - - From 48b8b25f28ae37cea0dc4dba09f39f38c0a06a44 Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Thu, 24 Jun 2021 16:29:16 -0700 Subject: [PATCH 097/115] remove new from 4.0 docs to create 3.11 --- .../modules/cassandra/pages/new/Figure_1.jpg | Bin 27827 -> 0 bytes .../modules/cassandra/pages/new/Figure_2.jpg | Bin 36650 -> 0 bytes .../cassandra/pages/new/auditlogging.adoc | 464 -------------- .../cassandra/pages/new/fqllogging.adoc | 566 ------------------ .../modules/cassandra/pages/new/index.adoc | 11 - .../modules/cassandra/pages/new/java11.adoc | 292 --------- .../cassandra/pages/new/messaging.adoc | 360 ----------- .../cassandra/pages/new/streaming.adoc | 217 ------- .../pages/new/transientreplication.adoc | 186 ------ .../cassandra/pages/new/virtualtables.adoc | 410 ------------- 10 files changed, 2506 deletions(-) delete mode 100644 doc/source/modules/cassandra/pages/new/Figure_1.jpg delete mode 100644 doc/source/modules/cassandra/pages/new/Figure_2.jpg delete mode 100644 doc/source/modules/cassandra/pages/new/auditlogging.adoc delete mode 100644 doc/source/modules/cassandra/pages/new/fqllogging.adoc delete mode 100644 doc/source/modules/cassandra/pages/new/index.adoc delete mode 100644 doc/source/modules/cassandra/pages/new/java11.adoc delete mode 100644 doc/source/modules/cassandra/pages/new/messaging.adoc delete mode 100644 doc/source/modules/cassandra/pages/new/streaming.adoc delete mode 100644 doc/source/modules/cassandra/pages/new/transientreplication.adoc delete mode 100644 doc/source/modules/cassandra/pages/new/virtualtables.adoc diff --git a/doc/source/modules/cassandra/pages/new/Figure_1.jpg b/doc/source/modules/cassandra/pages/new/Figure_1.jpg deleted file mode 100644 index ccaec67b84e7e4ca1e587ecd63d390a5e5c1ac15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27827 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 diff --git a/doc/source/modules/cassandra/pages/new/Figure_2.jpg b/doc/source/modules/cassandra/pages/new/Figure_2.jpg deleted file mode 100644 index 099e15fb893a80770298b468ccf30f186146a020..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36650 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 S_g@Lo{*9-}UtI8mq5lD1{1+Yo diff --git a/doc/source/modules/cassandra/pages/new/auditlogging.adoc b/doc/source/modules/cassandra/pages/new/auditlogging.adoc deleted file mode 100644 index e81776a097a2..000000000000 --- a/doc/source/modules/cassandra/pages/new/auditlogging.adoc +++ /dev/null @@ -1,464 +0,0 @@ -= Audit Logging - -Audit Logging is a new feature in Apache Cassandra 4.0 (https://issues.apache.org/jira/browse/CASSANDRA-12151[CASSANDRA-12151]). -This new feature is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. -All database activity is logged per-node as file-based records to a specified local filesystem directory. -The audit log files are rolled periodically based on a configurable value. - -Some of the features of audit logging are: - -* No additional database capacity is needed to store audit logs. -* No query tool is required to store the audit logs. -* Latency of database operations is not affected, so there is no performance impact. -* Heap memory usage is bounded by a weighted queue, with configurable maximum weight sitting in front of logging thread. -* Disk utilization is bounded by a configurable size, deleting old log segments once the limit is reached. -* Can be enabled, disabled, or reset (to delete on-disk data) using the JMX tool, ``nodetool``. -* Can configure the settings in either the `cassandra.yaml` file or by using ``nodetool``. - -Audit logging includes all CQL requests, both successful and failed. -It also captures all successful and failed authentication and authorization events, such as login attempts. -The difference between Full Query Logging (FQL) and audit logging is that FQL captures only successful CQL requests, which allow replay or comparison of logs. -Audit logs are useful for compliance and debugging, while FQL is useful for debugging, performance benchmarking, testing and auditing CQL queries. - -== Audit information logged - -The audit log contains: - -* all events in the configured keyspaces to include -* all events in the configured categories to include -* all events executed by the configured users to include - -The audit log does not contain: - -* configuration changes made in `cassandra.yaml` file -* `nodetool` commands - -The audit log is a series of log entries. -An audit log entry contains: - -* keyspace (String) - Keyspace on which request is made -* operation (String) - Database operation such as CQL command -* user (String) - User name -* scope (String) - Scope of request such as Table/Function/Aggregate name -* type (AuditLogEntryType) - Type of request -** CQL Audit Log Entry Type -** Common Audit Log Entry Type -* source (InetAddressAndPort) - Source IP Address from which request originated -* timestamp (long ) - Timestamp of the request -* batch (UUID) - Batch of request -* options (QueryOptions) - CQL Query options -* state (QueryState) - State related to a given query - -Each entry contains all applicable attributes for the given event, concatenated with a pipe (|). - -CQL audit log entry types are the following CQL commands. Each command is assigned to a particular specified category to log: - -[width="100%",cols="20%,80%",options="header",] -|=== -| Category | CQL commands - -| DDL | ALTER_KEYSPACE, CREATE_KEYSPACE, DROP_KEYSPACE, -ALTER_TABLE, CREATE_TABLE, DROP_TABLE, -CREATE_FUNCTION, DROP_FUNCTION, -CREATE_AGGREGATE, DROP_AGGREGATE, -CREATE_INDEX, DROP_INDEX, -ALTER_TYPE, CREATE_TYPE, DROP_TYPE, -CREATE_TRIGGER, DROP_TRIGGER, -ALTER_VIEW, CREATE_VIEW, DROP_VIEW, -TRUNCATE -| DML | BATCH, DELETE, UPDATE -| DCL | GRANT, REVOKE, -ALTER_ROLE, CREATE_ROLE, DROP_ROLE, -LIST_ROLES, LIST_PERMISSIONS, LIST_USERS -| OTHER | USE_KEYSPACE -| QUERY | SELECT -| PREPARE | PREPARE_STATEMENT -|=== - -Common audit log entry types are one of the following: - -[width="100%",cols="50%,50%",options="header",] -|=== -| Category | CQL commands - -| AUTH | LOGIN_SUCCESS, LOGIN_ERROR, UNAUTHORIZED_ATTEMPT -| ERROR | REQUEST_FAILURE -|=== - -== Configuring audit logging in cassandra.yaml - -The `cassandra.yaml` file can be used to configure and enable audit logging. -Configuration and enablement may be the same or different on each node, depending on the `cassandra.yaml` file settings. -Audit logs are generated on each enabled node, so logs on each node will have that node's queries. -All options for audit logging can be set in the `cassandra.yaml` file under the ``audit_logging_options:``. - -The file includes the following options that can be uncommented for use: - -[source, yaml] ----- -# Audit logging - Logs every incoming CQL command request, authentication to a node. See the docs -# on audit_logging for full details about the various configuration options. -audit_logging_options: - enabled: false - logger: - - class_name: BinAuditLogger - # audit_logs_dir: - # included_keyspaces: - # excluded_keyspaces: system, system_schema, system_virtual_schema - # included_categories: - # excluded_categories: - # included_users: - # excluded_users: - # roll_cycle: HOURLY - # block: true - # max_queue_weight: 268435456 # 256 MiB - # max_log_size: 17179869184 # 16 GiB - ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: - # archive_command: - # max_archive_retries: 10 ----- - -=== enabled - -Audit logging is enabled by setting the `enabled` option to `true` in -the `audit_logging_options` setting. -If this option is enabled, audit logging will start when Cassandra is started. -For example, ``enabled: true``. - -=== logger - -The type of audit logger is set with the `logger` option. -Supported values are: `BinAuditLogger` (default), `FileAuditLogger` and `NoOpAuditLogger`. -`BinAuditLogger` logs events to a file in binary format. -`FileAuditLogger` uses the standard logging mechanism, `slf4j` to log events to the `audit/audit.log` file. It is a synchronous, file-based audit logger. The roll_cycle will be set in the `logback.xml` file. -`NoOpAuditLogger` is a no-op implementation of the audit logger that shoudl be specified when audit logging is disabled. - -For example: - -[source, yaml] ----- -logger: - - class_name: FileAuditLogger ----- - -=== audit_logs_dir - -To write audit logs, an existing directory must be set in ``audit_logs_dir``. - -The directory must have appropriate permissions set to allow reading, writing, and executing. -Logging will recursively delete the directory contents as needed. -Do not place links in this directory to other sections of the filesystem. -For example, ``audit_logs_dir: /cassandra/audit/logs/hourly``. - -The audit log directory can also be configured using the system property `cassandra.logdir.audit`, which by default is set to `cassandra.logdir + /audit/`. - -=== included_keyspaces and excluded_keyspaces - -Set the keyspaces to include with the `included_keyspaces` option and -the keyspaces to exclude with the `excluded_keyspaces` option. -By default, `system`, `system_schema` and `system_virtual_schema` are excluded, and all other keyspaces are included. - -For example: -[source, yaml] ----- -included_keyspaces: test, demo -excluded_keyspaces: system, system_schema, system_virtual_schema ----- - -=== included_categories and excluded_categories - -The categories of database operations to include are specified with the `included_categories` option as a comma-separated list. -The categories of database operations to exclude are specified with `excluded_categories` option as a comma-separated list. -The supported categories for audit log are: `AUTH`, `DCL`, `DDL`, `DML`, `ERROR`, `OTHER`, `PREPARE`, and `QUERY`. -By default all supported categories are included, and no category is excluded. - -[source, yaml] ----- -included_categories: AUTH, ERROR, DCL -excluded_categories: DDL, DML, QUERY, PREPARE ----- - -=== included_users and excluded_users - -Users to audit log are set with the `included_users` and `excluded_users` options. -The `included_users` option specifies a comma-separated list of users to include explicitly. -The `excluded_users` option specifies a comma-separated list of users to exclude explicitly. -By default all users are included, and no users are excluded. - -[source, yaml] ----- -included_users: -excluded_users: john, mary ----- - -=== roll_cycle - -The ``roll_cycle`` defines the frequency with which the audit log segments are rolled. -Supported values are ``HOURLY`` (default), ``MINUTELY``, and ``DAILY``. -For example: ``roll_cycle: DAILY`` - -=== block - -The ``block`` option specifies whether audit logging should block writing or drop log records if the audit logging falls behind. Supported boolean values are ``true`` (default) or ``false``. -For example: ``block: false`` to drop records - -=== max_queue_weight - -The ``max_queue_weight`` option sets the maximum weight of in-memory queue for records waiting to be written to the file before blocking or dropping. The option must be set to a positive value. The default value is 268435456, or 256 MiB. -For example, to change the default: ``max_queue_weight: 134217728 # 128 MiB`` - -=== max_log_size - -The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The option must be set to a positive value. The default is 17179869184, or 16 GiB. -For example, to change the default: ``max_log_size: 34359738368 # 32 GiB`` - -=== archive_command - -The ``archive_command`` option sets the user-defined archive script to execute on rolled log files. -For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the file being rolled`` - -=== max_archive_retries - -The ``max_archive_retries`` option sets the max number of retries of failed archive commands. The default is 10. -For example: ``max_archive_retries: 10`` - - -An audit log file could get rolled for other reasons as well such as a -log file reaches the configured size threshold. - -Audit logging can also be configured using ``nodetool` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. - - -== Enabling Audit Logging with ``nodetool`` - -Audit logging is enabled on a per-node basis using the ``nodetool enableauditlog`` command. The logging directory must be defined with ``audit_logs_dir`` in the `cassandra.yaml` file or uses the default value ``cassandra.logdir.audit``. - -The syntax of the ``nodetool enableauditlog`` command has all the same options that can be set in the ``cassandra.yaml`` file except ``audit_logs_dir``. -In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. - -[source, plaintext] ----- - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enableauditlog - [--excluded-categories ] - [--excluded-keyspaces ] - [--excluded-users ] - [--included-categories ] - [--included-keyspaces ] - [--included-users ] [--logger ] - -OPTIONS - --excluded-categories - Comma separated list of Audit Log Categories to be excluded for - audit log. If not set the value from cassandra.yaml will be used - - --excluded-keyspaces - Comma separated list of keyspaces to be excluded for audit log. If - not set the value from cassandra.yaml will be used - - --excluded-users - Comma separated list of users to be excluded for audit log. If not - set the value from cassandra.yaml will be used - - -h , --host - Node hostname or ip address - - --included-categories - Comma separated list of Audit Log Categories to be included for - audit log. If not set the value from cassandra.yaml will be used - - --included-keyspaces - Comma separated list of keyspaces to be included for audit log. If - not set the value from cassandra.yaml will be used - - --included-users - Comma separated list of users to be included for audit log. If not - set the value from cassandra.yaml will be used - - --logger - Logger name to be used for AuditLogging. Default BinAuditLogger. If - not set the value from cassandra.yaml will be used - - -p , --port - Remote jmx agent port number - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - -u , --username - Remote jmx agent username ----- - -To enable audit logging, run following command on each node in the cluster on which you want to enable logging: - -[source, bash] ----- -$ nodetool enableauditlog ----- - -== Disabling audit logging - -Use the `nodetool disableauditlog` command to disable audit logging. - -== Viewing audit logs - -The `auditlogviewer` tool is used to view (dump) audit logs if the logger was ``BinAuditLogger``.. -``auditlogviewer`` converts the binary log files into human-readable format; only the audit log directory must be supplied as a command-line option. -If the logger ``FileAuditLogger`` was set, the log file are already in human-readable format and ``auditlogviewer`` is not needed to read files. - - -The syntax of `auditlogviewer` is: - -[source, plaintext] ----- -auditlogviewer - -Audit log files directory path is a required argument. -usage: auditlogviewer [...] [options] --- -View the audit log contents in human readable format --- -Options are: --f,--follow Upon reaching the end of the log continue indefinitely - waiting for more records --h,--help display this help message --r,--roll_cycle How often to roll the log file was rolled. May be - necessary for Chronicle to correctly parse file names. (MINUTELY, HOURLY, - DAILY). Default HOURLY. ----- - -== Example - -[arabic, start=1] -. To demonstrate audit logging, first configure the ``cassandra.yaml`` file with the following settings: - -[source, yaml] ----- -audit_logging_options: - enabled: true - logger: BinAuditLogger - audit_logs_dir: "/cassandra/audit/logs/hourly" - # included_keyspaces: - # excluded_keyspaces: system, system_schema, system_virtual_schema - # included_categories: - # excluded_categories: - # included_users: - # excluded_users: - roll_cycle: HOURLY - # block: true - # max_queue_weight: 268435456 # 256 MiB - # max_log_size: 17179869184 # 16 GiB - ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: - # archive_command: - # max_archive_retries: 10 ----- - -[arabic, start=2] -. Create the audit log directory `/cassandra/audit/logs/hourly` and set the directory permissions to read, write, and execute for all. - -[arabic, start=3] -. Now create a demo keyspace and table and insert some data using ``cqlsh``: - -[source, cql] ----- - cqlsh> CREATE KEYSPACE auditlogkeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; - cqlsh> USE auditlogkeyspace; - cqlsh:auditlogkeyspace> CREATE TABLE t ( - ...id int, - ...k int, - ...v text, - ...PRIMARY KEY (id) - ... ); - cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); ----- - -All the supported CQL commands will be logged to the audit log directory. - -[arabic, start=4] -. Change directory to the audit logs directory. - -[source, bash] ----- -$ cd /cassandra/audit/logs/hourly ----- - -[arabic, start=5] -. List the audit log files and directories. - -[source, bash] ----- -$ ls -l ----- - -You should see results similar to: - -[source, plaintext] ----- -total 28 --rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 03:01 directory-listing.cq4t --rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-02.cq4 --rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-03.cq4 ----- - -The audit log files will all be listed with a `.cq4` file type. The audit directory is of `.cq4t` type. - -[arabic, start=6] -. Run `auditlogviewer` tool to view the audit logs. - -[source, bash] ----- -$ auditlogviewer /cassandra/audit/logs/hourly ----- - -This command will return a readable version of the log. Here is a partial sample of the log for the commands in this demo: - -[source, plaintext] ----- -WARN 03:12:11,124 Using Pauser.sleepy() as not enough processors, have 2, needs 8+ -Type: AuditLog -LogMessage: -user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427328|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE AuditLogKeyspace; -Type: AuditLog -LogMessage: -user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427329|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE "auditlogkeyspace" -Type: AuditLog -LogMessage: -user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711446279|type :SELECT|category:QUERY|ks:auditlogkeyspace|scope:t|operation:SELECT * FROM t; -Type: AuditLog -LogMessage: -user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564713878834|type :DROP_TABLE|category:DDL|ks:auditlogkeyspace|scope:t|operation:DROP TABLE IF EXISTS -AuditLogKeyspace.t; -Type: AuditLog -LogMessage: -user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42382|timestamp:1564714618360|ty -pe:REQUEST_FAILURE|category:ERROR|operation:CREATE KEYSPACE AuditLogKeyspace -WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};; Cannot add -existing keyspace "auditlogkeyspace" -Type: AuditLog -LogMessage: -user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714690968|type :DROP_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:DROP KEYSPACE AuditLogKeyspace; -Type: AuditLog -LogMessage: -user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42406|timestamp:1564714708329|ty pe:CREATE_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:CREATE KEYSPACE -AuditLogKeyspace -WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; -Type: AuditLog -LogMessage: -user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714870678|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE auditlogkeyspace; -[ec2-user@ip-10-0-2-238 hourly]$ ----- - -== Diagnostic events for user audit logging - -Any native transport-enabled client can subscribe to audit log events for diagnosing cluster issues. -These events can be consumed by external tools to implement a Cassandra user auditing solution. diff --git a/doc/source/modules/cassandra/pages/new/fqllogging.adoc b/doc/source/modules/cassandra/pages/new/fqllogging.adoc deleted file mode 100644 index 84febb5d5678..000000000000 --- a/doc/source/modules/cassandra/pages/new/fqllogging.adoc +++ /dev/null @@ -1,566 +0,0 @@ -= Full Query Logging - -Apache Cassandra 4.0 adds a new highly performant feature that supports live query logging (https://issues.apache.org/jira/browse/CASSANDRA-13983[CASSANDRA-13983]). -FQL is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. -This feature is useful for live traffic capture, as well as traffic replay. -The tool provided can be used for both debugging query traffic and migration. -New ``nodetool`` options are also added to enable, disable or reset FQL, as well as a new tool to read and replay the binary logs. -The full query logging (FQL) capability uses http://github.com/OpenHFT/Chronicle-Queue[Chronicle-Queue] to rotate a log of queries. -Full query logs will be referred to as *logs* for the remainder of the page. - -Some of the features of FQL are: - -* The impact on query latency is reduced by asynchronous single-thread log entry writes to disk. -* Heap memory usage is bounded by a weighted queue, with configurable maximum weight sitting in front of logging thread. -* If the weighted queue is full, producers can be blocked or samples can be dropped. -* Disk utilization is bounded by a configurable size, deleting old log segments once the limit is reached. -* A flexible schema binary format, http://github.com/OpenHFT/Chronicle-Wire[Chronicle-Wire], for on-disk serialization that can skip unrecognized fields, add new ones, and omit old ones. -* Can be enabled, disabled, or reset (to delete on-disk data) using the JMX tool, ``nodetool``. -* Can configure the settings in either the `cassandra.yaml` file or by using ``nodetool``. -* Introduces new ``fqltool`` that currently can ``Dump`` the binary logs to a readable format. Other options are ``Replay`` and ``Compare``. - -FQL logs all successful Cassandra Query Language (CQL) requests, both events that modify the data and those that query. -While audit logs also include CQL requests, FQL logs only the CQL request. This difference means that FQL can be used to replay or compare logs, which audit logging cannot. FQL is useful for debugging, performance benchmarking, testing and auditing CQL queries, while audit logs are useful for compliance. - -In performance testing, FQL appears to have little or no overhead in ``WRITE`` only workloads, and a minor overhead in ``MIXED`` workload. - -== Query information logged - -The query log contains: - -* all queries invoked -* approximate time they were invoked -* any parameters necessary to bind wildcard values -* all query options - -The logger writes single or batched CQL queries after they finish, so only successfully completed queries are logged. -Failed or timed-out queries are not logged. Different data is logged, depending on the type of query. - -A single CQL query log entry contains: - -* query - CQL query text -* queryOptions - Options associated with the query invocation -* queryState - Timestamp state associated with the query invocation -* queryTimeMillis - Approximate time in milliseconds since the epoch since the query was invoked - -A batch CQL query log entry contains: - -* queries - CQL text of the queries -* queryOptions - Options associated with the query invocation -* queryState - Timestamp state associated with the query invocation -* batchTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked -* type - The type of the batch -* values - Values to bind to as parameters for the queries - -Because FQL is backed by `Binlog`, the performance and footprint are predictable, with minimal impact on log record producers. -Performance safety prevents the producers from overloading the log, using a weighted queue to drop records if the logging falls behind. -Single-thread asynchronous writing produces the logs. Chronicle-Queue provides an easy method of rolling the logs. - -== Logging information logged - -FQL also tracks information about the stored log files: - -* Stored log files that are added and their storage impact. Deletes them if over storage limit. -* The log files in Chronicle-Queue that have already rolled -* The number of bytes in the log files that have already rolled - -== Logging sequence - -The logger follows a well-defined sequence of events: - -. The consumer thread that writes log records is started. This action can occur only once. -. The consumer thread offers a record to the log. If the in-memory queue is full, the record will be dropped and offer returns a `false` value. -. If accepted, the record is entered into the log. If the in-memory queue is full, the putting thread will be blocked until there is space or it is interrupted. -. The buffers are cleaned up at thread exit. Finalization will check again, to ensure there are no stragglers in the queue. -. The consumer thread is stopped. It can be called multiple times. - -== Using FQL - -To use FQL, two actions must be completed. FQL must be configured using either the `cassandra.yaml` file or ``nodetool``, and logging must be enabled using ``nodetool enablefullquerylog``. -With either method, at a minimum, the path to the log directory must be specified. -Both actions are completed on a per-node basis. -Full query logs are generated on each enabled node, so logs on each node will have that node's queries. - -== Configuring FQL in cassandra.yaml - -The `cassandra.yaml` file can be used to configure FQL before enabling the feature with ``nodetool``. - -The file includes the following options that can be uncommented for use: - -[source, yaml] ----- -# default options for full query logging - these can be overridden from command line -# when executing nodetool enablefullquerylog -#full_query_logging_options: - # log_dir: - # roll_cycle: HOURLY - # block: true - # max_queue_weight: 268435456 # 256 MiB - # max_log_size: 17179869184 # 16 GiB - # archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: - # archive_command: - # max_archive_retries: 10 ----- - -=== log_dir - -To write logs, an existing directory must be set in ``log_dir``. - -The directory must have appropriate permissions set to allow reading, writing, and executing. -Logging will recursively delete the directory contents as needed. -Do not place links in this directory to other sections of the filesystem. -For example, ``log_dir: /tmp/cassandrafullquerylog``. - -=== roll_cycle - -The ``roll_cycle`` defines the frequency with which the log segments are rolled. -Supported values are ``HOURLY`` (default), ``MINUTELY``, and ``DAILY``. -For example: ``roll_cycle: DAILY`` - -=== block - -The ``block`` option specifies whether FQL should block writing or drop log records if FQL falls behind. Supported boolean values are ``true`` (default) or ``false``. -For example: ``block: false`` to drop records - -=== max_queue_weight - -The ``max_queue_weight`` option sets the maximum weight of in-memory queue for records waiting to be written to the file before blocking or dropping. The option must be set to a positive value. The default value is 268435456, or 256 MiB. -For example, to change the default: ``max_queue_weight: 134217728 # 128 MiB`` - -=== max_log_size - -The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The option must be set to a positive value. The default is 17179869184, or 16 GiB. -For example, to change the default: ``max_log_size: 34359738368 # 32 GiB`` - -=== archive_command - -The ``archive_command`` option sets the user-defined archive script to execute on rolled log files. -When not defined, files are deleted, with the default ``""`` which then maps to `org.apache.cassandra.utils.binlog.DeletingArchiver`. -For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the file being rolled`` - -=== max_archive_retries - -The ``max_archive_retries`` option sets the max number of retries of failed archive commands. The default is 10. -For example: ``max_archive_retries: 10`` - -FQL can also be configured using ``nodetool`` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. - -== Enabling FQL - -FQL is enabled on a per-node basis using the ``nodetool enablefullquerylog`` command. At a minimum, the path to the logging directory must be defined, if ``log_dir`` is not set in the `cassandra.yaml` file. - -The syntax of the ``nodetool enablefullquerylog`` command has all the same options that can be set in the ``cassandra.yaml`` file. -In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. - -[source, plaintext] ----- - nodetool [(-h | --host )] [(-p | --port )] - [(-pp | --print-port)] [(-pw | --password )] - [(-pwf | --password-file )] - [(-u | --username )] enablefullquerylog - [--archive-command ] [--blocking] - [--max-archive-retries ] - [--max-log-size ] [--max-queue-weight ] - [--path ] [--roll-cycle ] - - OPTIONS - --archive-command - Command that will handle archiving rolled full query log files. - Format is "/path/to/script.sh %path" where %path will be replaced - with the file to archive - - --blocking - If the queue is full whether to block producers or drop samples. - - -h , --host - Node hostname or ip address - - --max-archive-retries - Max number of archive retries. - - --max-log-size - How many bytes of log data to store before dropping segments. Might - not be respected if a log file hasn't rolled so it can be deleted. - - --max-queue-weight - Maximum number of bytes of query data to queue to disk before - blocking or dropping samples. - - -p , --port - Remote jmx agent port number - - --path - Path to store the full query log at. Will have it's contents - recursively deleted. - - -pp, --print-port - Operate in 4.0 mode with hosts disambiguated by port number - - -pw , --password - Remote jmx agent password - - -pwf , --password-file - Path to the JMX password file - - --roll-cycle - How often to roll the log file (MINUTELY, HOURLY, DAILY). - - -u , --username - Remote jmx agent username ----- - -To enable FQL, run the following command on each node in the cluster on which you want to enable logging: - -[source, bash] ----- -$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog ----- - -== Disabling or resetting FQL - -Use the ``nodetool disablefullquerylog`` to disable logging. -Use ``nodetool resetfullquerylog`` to stop FQL and clear the log files in the configured directory. -**IMPORTANT:** Using ``nodetool resetfullquerylog`` will delete the log files! Do not use this command unless you need to delete all log files. - -== fqltool - -The ``fqltool`` command is used to view (dump), replay, or compare logs. -``fqltool dump`` converts the binary log files into human-readable format; only the log directory must be supplied as a command-line option. - -``fqltool replay`` (https://issues.apache.org/jira/browse/CASSANDRA-14618[CASSANDRA-14618]) enables replay of logs. -The command can run from a different machine or cluster for testing, debugging, or performance benchmarking. -The command can also be used to recreate a dropped database object. -Use ``fqltool replay`` to record and compare different runs of production traffic against different versions/configurations of Cassandra or different clusters. -Another use is to gather logs from several machines and replay them in “order” by the timestamps recorded. - -The syntax of ``fqltool replay`` is: - -[source, plaintext] ----- - fqltool replay [--keyspace ] [--results ] - [--store-queries ] --target ... [--] - [...] - - OPTIONS - --keyspace - Only replay queries against this keyspace and queries without - keyspace set. - - --results - Where to store the results of the queries, this should be a - directory. Leave this option out to avoid storing results. - - --store-queries - Path to store the queries executed. Stores queries in the same order - as the result sets are in the result files. Requires --results - - --target - Hosts to replay the logs to, can be repeated to replay to more - hosts. - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [...] - Paths containing the FQ logs to replay. ----- - -``fqltool compare`` (https://issues.apache.org/jira/browse/CASSANDRA-14619[CASSANDRA-14619]) compares result files generated by ``fqltool replay``. -The command uses recorded runs from ``fqltool replay`` and compareslog, outputting any differences (potentially all queries). -It also stores each row as a separate chronicle document to avoid reading the entire result from in-memory when comparing. - -The syntax of ``fqltool compare`` is: - -[source, plaintext] ----- - fqltool compare --queries [--] [...] - - OPTIONS - --queries - Directory to read the queries from. It is produced by the fqltool - replay --store-queries option. - - -- - This option can be used to separate command-line options from the - list of argument, (useful when arguments might be mistaken for - command-line options - - [...] - Directories containing result files to compare. ----- - -The comparison sets the following marks: - -* Mark the beginning of a query set: - -[source, plaintext] ----- - version: int16 - type: column_definitions - column_count: int32; - column_definition: text, text - column_definition: text, text - .... ----- - -* Mark a failed query set: - -[source, plaintext] ----- - version: int16 - type: query_failed - message: text ----- - -* Mark a row set: - -[source, plaintext] ----- - version: int16 - type: row - row_column_count: int32 - column: bytes ----- - -* Mark the end of a result set: - -[source, plaintext] ----- - version: int16 - type: end_resultset ----- - -== Example - -[arabic, start=1] -. To demonstrate FQL, first configure and enable FQL on a node in your cluster: - -[source, bash] ----- -$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog ----- - -[arabic, start=2] -. Now create a demo keyspace and table and insert some data using ``cqlsh``: - -[source, cql] ----- - cqlsh> CREATE KEYSPACE querylogkeyspace - ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; - cqlsh> USE querylogkeyspace; - cqlsh:querylogkeyspace> CREATE TABLE t ( - ...id int, - ...k int, - ...v text, - ...PRIMARY KEY (id) - ... ); - cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); ----- - -[arabic, start=3] -. Then check that the data is inserted: - -[source, plaintext] ----- - cqlsh:querylogkeyspace> SELECT * FROM t; - - id | k | v - ----+---+------ - 0 | 1 | val1 - - (1 rows) ----- - -[arabic, start=4] -. Use the ``fqltool dump`` command to view the logs. - -[source, bash] ----- -$ fqltool dump /tmp/cassandrafullquerylog ----- - -This command will return a readable version of the log. Here is a partial sample of the log for the commands in this demo: - -[source, plaintext] ----- -WARN [main] 2019-08-02 03:07:53,635 Slf4jExceptionHandler.java:42 - Using Pauser.sleepy() as not enough processors, have 2, needs 8+ - Type: single-query - Query start time: 1564708322030 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system.peers - Values: - - Type: single-query - Query start time: 1564708322054 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system.local WHERE key='local' - Values: - - Type: single-query - Query start time: 1564708322109 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.keyspaces - Values: - - Type: single-query - Query start time: 1564708322116 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.tables - Values: - - Type: single-query - Query start time: 1564708322139 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.columns - Values: - - Type: single-query - Query start time: 1564708322142 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.functions - Values: - - Type: single-query - Query start time: 1564708322141 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.aggregates - Values: - - Type: single-query - Query start time: 1564708322143 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.types - Values: - - Type: single-query - Query start time: 1564708322144 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.indexes - Values: - - Type: single-query - Query start time: 1564708322145 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708322 - Query: SELECT * FROM system_schema.views - Values: - - Type: single-query - Query start time: 1564708345408 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: CREATE KEYSPACE querylogkeyspace - WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; - Values: - - Type: single-query - Query start time: 1564708360873 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: USE querylogkeyspace; - Values: - - Type: single-query - Query start time: 1564708360874 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: USE "querylogkeyspace" - Values: - - Type: single-query - Query start time: 1564708378837 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:-2147483648 - Query: CREATE TABLE t ( - id int, - k int, - v text, - PRIMARY KEY (id) - ); - Values: - - Type: single-query - Query start time: 1564708379247 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708379 - Query: SELECT * FROM system_schema.tables WHERE keyspace_name = 'querylogkeyspace' AND table_name = 't' - Values: - - Type: single-query - Query start time: 1564708397144 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708397 - Query: INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); - Values: - - Type: single-query - Query start time: 1564708434782 - Protocol version: 4 - Generated timestamp:-9223372036854775808 - Generated nowInSeconds:1564708434 - Query: SELECT * FROM t; - Values: ----- - -[arabic, start=5] -. To demonstrate ``fqltool replay``, first drop the keyspace. - -[source, cql] ----- -cqlsh:querylogkeyspace> DROP KEYSPACE querylogkeyspace; ----- - -[arabic, start=6] -. Now run ``fqltool replay`` specifying the directories in which to store the results of the queries and -the list of queries run, respectively, in `--results` and `--store-queries`: - -[source, bash] ----- -$ fqltool replay \ ---keyspace querylogkeyspace --results /cassandra/fql/logs/results/replay \ ---store-queries /cassandra/fql/logs/queries/replay \ --- target 3.91.56.164 \ -/tmp/cassandrafullquerylog ----- - -The ``--results`` and ``--store-queries`` directories are optional, but if ``--store-queries`` is set, then ``--results`` must also be set. -The ``--target`` specifies the node on which to replay to logs. - -[arabic, start=7] -. Check that the keyspace was replayed and exists again using the ``DESCRIBE KEYSPACES`` command: - -[source, cql] ----- - cqlsh:querylogkeyspace> DESC KEYSPACES; - - system_schema system system_distributed system_virtual_schema - system_auth querylogkeyspace system_traces system_views ----- diff --git a/doc/source/modules/cassandra/pages/new/index.adoc b/doc/source/modules/cassandra/pages/new/index.adoc deleted file mode 100644 index 50fafa756ff3..000000000000 --- a/doc/source/modules/cassandra/pages/new/index.adoc +++ /dev/null @@ -1,11 +0,0 @@ -= New Features in Apache Cassandra 4.0 - -This section covers the new features in Apache Cassandra 4.0. - -* xref:new/java11.adoc[Java 11] -* xref:new/virtualtables.adoc[Virtual tables] -* xref:new/auditlogging.adoc[Audit logging] -* xref:new/fqllogging.adoc[Full query logging] -* xref:new/messaging.adoc[Messaging] -* xref:new/streaming.adoc[Streaming] -* xref:new/transientreplication.adoc[Transient replication] diff --git a/doc/source/modules/cassandra/pages/new/java11.adoc b/doc/source/modules/cassandra/pages/new/java11.adoc deleted file mode 100644 index f3efc50c1ac4..000000000000 --- a/doc/source/modules/cassandra/pages/new/java11.adoc +++ /dev/null @@ -1,292 +0,0 @@ -= Support for Java 11 - -In the new Java release cadence a new Java version is made available -every six months. The more frequent release cycle is favored as it -brings new Java features to the developers as and when they are -developed without the wait that the earlier 3 year release model -incurred. Not every Java version is a Long Term Support (LTS) version. -After Java 8 the next LTS version is Java 11. Java 9, 10, 12 and 13 are -all non-LTS versions. - -One of the objectives of the Apache Cassandra 4.0 version is to support -the recent LTS Java versions 8 and 11 -(https://issues.apache.org/jira/browse/CASSANDRA-9608[CASSANDRA-9608]). -Java 8 and Java 11 may be used to build and run Apache Cassandra 4.0. - -*Note*: Support for JDK 11 in Apache Cassandra 4.0 is an experimental -feature, and not recommended for production use. - -== Support Matrix - -The support matrix for the Java versions for compiling and running -Apache Cassandra 4.0 is detailed in Table 1. The build version is along -the vertical axis and the run version is along the horizontal axis. - -Table 1 : Support Matrix for Java - -[width="68%",cols="34%,30%,36%",] -|=== -| |Java 8 (Run) |Java 11 (Run) -|Java 8 (Build) |Supported |Supported -|Java 11(Build) |Not Supported |Supported -|=== - -Essentially Apache 4.0 source code built with Java 11 cannot be run with -Java 8. Next, we shall discuss using each of Java 8 and 11 to build and -run Apache Cassandra 4.0. - -== Using Java 8 to Build - -To start with, install Java 8. As an example, for installing Java 8 on -RedHat Linux the command is as follows: - -.... -$ sudo yum install java-1.8.0-openjdk-devel -.... - -Set `JAVA_HOME` and `JRE_HOME` environment variables in the shell bash -script. First, open the bash script: - -.... -$ sudo vi ~/.bashrc -.... - -Set the environment variables including the `PATH`. - -.... -$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk -$ export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre -$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin -.... - -Download and install Apache Cassandra 4.0 source code from the Git along -with the dependencies. - -.... -$ git clone https://github.com/apache/cassandra.git -.... - -If Cassandra is already running stop Cassandra with the following -command. - -.... -[ec2-user@ip-172-30-3-146 bin]$ ./nodetool stopdaemon -.... - -Build the source code from the `cassandra` directory, which has the -`build.xml` build script. The Apache Ant uses the Java version set in -the `JAVA_HOME` environment variable. - -.... -$ cd ~/cassandra -$ ant -.... - -Apache Cassandra 4.0 gets built with Java 8. Set the environment -variable for `CASSANDRA_HOME` in the bash script. Also add the -`CASSANDRA_HOME/bin` to the `PATH` variable. - -.... -$ export CASSANDRA_HOME=~/cassandra -$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CASSANDRA_HOME/bin -.... - -To run Apache Cassandra 4.0 with either of Java 8 or Java 11 run the -Cassandra application in the `CASSANDRA_HOME/bin` directory, which is in -the `PATH` env variable. - -.... -$ cassandra -.... - -The Java version used to run Cassandra gets output as Cassandra is -getting started. As an example if Java 11 is used, the run output should -include similar to the following output snippet: - -.... -INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:480 - Hostname: ip-172-30-3- -146.ec2.internal:7000:7001 -INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:487 - JVM vendor/version: OpenJDK -64-Bit Server VM/11.0.3 -INFO [main] 2019-07-31 21:18:16,863 CassandraDaemon.java:488 - Heap size: -1004.000MiB/1004.000MiB -.... - -The following output indicates a single node Cassandra 4.0 cluster has -started. - -.... -INFO [main] 2019-07-31 21:18:19,687 InboundConnectionInitiator.java:130 - Listening on -address: (127.0.0.1:7000), nic: lo, encryption: enabled (openssl) -... -... -INFO [main] 2019-07-31 21:18:19,850 StorageService.java:512 - Unable to gossip with any -peers but continuing anyway since node is in its own seed list -INFO [main] 2019-07-31 21:18:19,864 StorageService.java:695 - Loading persisted ring state -INFO [main] 2019-07-31 21:18:19,865 StorageService.java:814 - Starting up server gossip -INFO [main] 2019-07-31 21:18:20,088 BufferPool.java:216 - Global buffer pool is enabled, -when pool is exhausted (max is 251.000MiB) it will allocate on heap -INFO [main] 2019-07-31 21:18:20,110 StorageService.java:875 - This node will not auto -bootstrap because it is configured to be a seed node. -... -... -INFO [main] 2019-07-31 21:18:20,809 StorageService.java:1507 - JOINING: Finish joining ring -INFO [main] 2019-07-31 21:18:20,921 StorageService.java:2508 - Node 127.0.0.1:7000 state -jump to NORMAL -.... - -== Using Java 11 to Build - -If Java 11 is used to build Apache Cassandra 4.0, first Java 11 must be -installed and the environment variables set. As an example, to download -and install Java 11 on RedHat Linux run the following command. - -.... -$ yum install java-11-openjdk-devel -.... - -Set the environment variables in the bash script for Java 11. The first -command is to open the bash script. - -.... -$ sudo vi ~/.bashrc -$ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk -$ export JRE_HOME=/usr/lib/jvm/java-11-openjdk/jre -$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin -.... - -To build source code with Java 11 one of the following two options must -be used. - -____ -[arabic] -. {blank} -+ -Include Apache Ant command-line option `-Duse.jdk=11` as follows::: -.... -$ ant -Duse.jdk=11 -.... -. {blank} -+ -Set environment variable `CASSANDRA_USE_JDK11` to `true`::: -.... -$ export CASSANDRA_USE_JDK11=true -.... -____ - -As an example, set the environment variable `CASSANDRA_USE_JDK11` to -`true`. - -.... -[ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true -[ec2-user@ip-172-30-3-146 cassandra]$ ant -Buildfile: /home/ec2-user/cassandra/build.xml -.... - -Or, set the command-line option. - -.... -[ec2-user@ip-172-30-3-146 cassandra]$ ant -Duse.jdk11=true -.... - -The build output should include the following. - -.... -_build_java: - [echo] Compiling for Java 11 -... -... -build: - -_main-jar: - [copy] Copying 1 file to /home/ec2-user/cassandra/build/classes/main/META-INF - [jar] Building jar: /home/ec2-user/cassandra/build/apache-cassandra-4.0-SNAPSHOT.jar -... -... -_build-test: - [javac] Compiling 739 source files to /home/ec2-user/cassandra/build/test/classes - [copy] Copying 25 files to /home/ec2-user/cassandra/build/test/classes -... -... -jar: - [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/stress/META-INF - [mkdir] Created dir: /home/ec2-user/cassandra/build/tools/lib - [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/stress.jar - [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/fqltool/META-INF - [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/fqltool.jar - -BUILD SUCCESSFUL -Total time: 1 minute 3 seconds -[ec2-user@ip-172-30-3-146 cassandra]$ -.... - -== Common Issues - -One of the two options mentioned must be used to compile with JDK 11 or -the build fails and the following error message is output. - -.... -[ec2-user@ip-172-30-3-146 cassandra]$ ant -Buildfile: /home/ec2-user/cassandra/build.xml -validate-build-conf: - -BUILD FAILED -/home/ec2-user/cassandra/build.xml:293: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true must -be set when building from java 11 -Total time: 1 second -[ec2-user@ip-172-30-3-146 cassandra]$ -.... - -The Java 11 built Apache Cassandra 4.0 source code may be run with Java -11 only. If a Java 11 built code is run with Java 8 the following error -message gets output. - -.... -[root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com -Last login: Wed Jul 31 20:47:26 2019 from 75.155.255.51 -[ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME -/usr/lib/jvm/java-1.8.0-openjdk -[ec2-user@ip-172-30-3-146 ~]$ cassandra -... -... -Error: A JNI error has occurred, please check your installation and try again -Exception in thread "main" java.lang.UnsupportedClassVersionError: -org/apache/cassandra/service/CassandraDaemon has been compiled by a more recent version of -the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes -class file versions up to 52.0 - at java.lang.ClassLoader.defineClass1(Native Method) - at java.lang.ClassLoader.defineClass(ClassLoader.java:763) - at ... -... -.... - -The `CASSANDRA_USE_JDK11` variable or the command-line option -`-Duse.jdk11` cannot be used to build with Java 8. To demonstrate set -`JAVA_HOME` to version 8. - -.... -[root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com -Last login: Wed Jul 31 21:41:50 2019 from 75.155.255.51 -[ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME -/usr/lib/jvm/java-1.8.0-openjdk -.... - -Set the `CASSANDRA_USE_JDK11=true` or command-line option -`-Duse.jdk11=true`. Subsequently, run Apache Ant to start the build. The -build fails with error message listed. - -.... -[ec2-user@ip-172-30-3-146 ~]$ cd -cassandra -[ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true -[ec2-user@ip-172-30-3-146 cassandra]$ ant -Buildfile: /home/ec2-user/cassandra/build.xml - -validate-build-conf: - -BUILD FAILED -/home/ec2-user/cassandra/build.xml:285: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true cannot -be set when building from java 8 - -Total time: 0 seconds -.... diff --git a/doc/source/modules/cassandra/pages/new/messaging.adoc b/doc/source/modules/cassandra/pages/new/messaging.adoc deleted file mode 100644 index 07a423bf1502..000000000000 --- a/doc/source/modules/cassandra/pages/new/messaging.adoc +++ /dev/null @@ -1,360 +0,0 @@ -= Improved Internode Messaging - -Apache Cassandra 4.0 has added several new improvements to internode -messaging. - -== Optimized Internode Messaging Protocol - -The internode messaging protocol has been optimized -(https://issues.apache.org/jira/browse/CASSANDRA-14485[CASSANDRA-14485]). -Previously the `IPAddressAndPort` of the sender was included with each -message that was sent even though the `IPAddressAndPort` had already -been sent once when the initial connection/session was established. In -Cassandra 4.0 `IPAddressAndPort` has been removed from every separate -message sent and only sent when connection/session is initiated. - -Another improvement is that at several instances (listed) a fixed 4-byte -integer value has been replaced with `vint` as a `vint` is almost always -less than 1 byte: - -* The `paramSize` (the number of parameters in the header) -* Each individual parameter value -* The `payloadSize` - -== NIO Messaging - -In Cassandra 4.0 peer-to-peer (internode) messaging has been switched to -non-blocking I/O (NIO) via Netty -(https://issues.apache.org/jira/browse/CASSANDRA-8457[CASSANDRA-8457]). - -As serialization format, each message contains a header with several -fixed fields, an optional key-value parameters section, and then the -message payload itself. Note: the IP address in the header may be either -IPv4 (4 bytes) or IPv6 (16 bytes). - -____ -The diagram below shows the IPv4 address for brevity. -____ - -.... -1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 -0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| PROTOCOL MAGIC | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Message ID | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Timestamp | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Addr len | IP Address (IPv4) / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ | Verb / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ | Parameters size / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ | Parameter data / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Payload size | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| / -/ Payload / -/ | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -.... - -An individual parameter has a String key and a byte array value. The key -is serialized with its length, encoded as two bytes, followed by the -UTF-8 byte encoding of the string. The body is serialized with its -length, encoded as four bytes, followed by the bytes of the value. - -== Resource limits on Queued Messages - -System stability is improved by enforcing strict resource limits -(https://issues.apache.org/jira/browse/CASSANDRA-15066[CASSANDRA-15066]) -on the number of outbound messages that are queued, measured by the -`serializedSize` of the message. There are three separate limits imposed -simultaneously to ensure that progress is always made without any -reasonable combination of failures impacting a node’s stability. - -[arabic] -. Global, per-endpoint and per-connection limits are imposed on messages -queued for delivery to other nodes and waiting to be processed on -arrival from other nodes in the cluster. These limits are applied to the -on-wire size of the message being sent or received. -. The basic per-link limit is consumed in isolation before any endpoint -or global limit is imposed. Each node-pair has three links: urgent, -small and large. So any given node may have a maximum of -`N*3 * (internode_application_send_queue_capacity_in_bytes + internode_application_receive_queue_capacity_in_bytes)` -messages queued without any coordination between them although in -practice, with token-aware routing, only RF*tokens nodes should need to -communicate with significant bandwidth. -. The per-endpoint limit is imposed on all messages exceeding the -per-link limit, simultaneously with the global limit, on all links to or -from a single node in the cluster. The global limit is imposed on all -messages exceeding the per-link limit, simultaneously with the -per-endpoint limit, on all links to or from any node in the cluster. The -following configuration settings have been added to `cassandra.yaml` for -resource limits on queued messages. - -.... -internode_application_send_queue_capacity_in_bytes: 4194304 #4MiB -internode_application_send_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB -internode_application_send_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB -internode_application_receive_queue_capacity_in_bytes: 4194304 #4MiB -internode_application_receive_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB -internode_application_receive_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB -.... - -== Virtual Tables for Messaging Metrics - -Metrics is improved by keeping metrics using virtual tables for -inter-node inbound and outbound messaging -(https://issues.apache.org/jira/browse/CASSANDRA-15066[CASSANDRA-15066]). -For inbound messaging a virtual table (`internode_inbound`) has been -added to keep metrics for: - -* Bytes and count of messages that could not be serialized or flushed -due to an error -* Bytes and count of messages scheduled -* Bytes and count of messages successfully processed -* Bytes and count of messages successfully received -* Nanos and count of messages throttled -* Bytes and count of messages expired -* Corrupt frames recovered and unrecovered - -A separate virtual table (`internode_outbound`) has been added for -outbound inter-node messaging. The outbound virtual table keeps metrics -for: - -* Bytes and count of messages pending -* Bytes and count of messages sent -* Bytes and count of messages expired -* Bytes and count of messages that could not be sent due to an error -* Bytes and count of messages overloaded -* Active Connection Count -* Connection Attempts -* Successful Connection Attempts - -== Hint Messaging - -A specialized version of hint message that takes an already encoded in a -`ByteBuffer` hint and sends it verbatim has been added. It is an -optimization for when dispatching a hint file of the current messaging -version to a node of the same messaging version, which is the most -common case. It saves on extra `ByteBuffer` allocations one redundant -hint deserialization-serialization cycle. - -== Internode Application Timeout - -A configuration setting has been added to `cassandra.yaml` for the -maximum continuous period a connection may be unwritable in application -space. - -.... -# internode_application_timeout_in_ms = 30000 -.... - -Some other new features include logging of message size to trace message -for tracing a query. - -== Paxos prepare and propose stage for local requests optimized - -In pre-4.0 Paxos prepare and propose messages always go through entire -`MessagingService` stack in Cassandra even if request is to be served -locally, we can enhance and make local requests severed w/o involving -`MessagingService`. Similar things are done elsewhere in Cassandra which -skips `MessagingService` stage for local requests. - -This is what it looks like in pre 4.0 if we have tracing on and run a -light-weight transaction: - -.... -Sending PAXOS_PREPARE message to /A.B.C.D [MessagingService-Outgoing-/A.B.C.D] | 2017-09-11 -21:55:18.971000 | A.B.C.D | 15045 -… REQUEST_RESPONSE message received from /A.B.C.D [MessagingService-Incoming-/A.B.C.D] | -2017-09-11 21:55:18.976000 | A.B.C.D | 20270 -… Processing response from /A.B.C.D [SharedPool-Worker-4] | 2017-09-11 21:55:18.976000 | -A.B.C.D | 20372 -.... - -Same thing applies for Propose stage as well. - -In version 4.0 Paxos prepare and propose stage for local requests are -optimized -(https://issues.apache.org/jira/browse/CASSANDRA-13862[CASSANDRA-13862]). - -== Quality Assurance - -Several other quality assurance improvements have been made in version -4.0 -(https://issues.apache.org/jira/browse/CASSANDRA-15066[CASSANDRA-15066]). - -=== Framing - -Version 4.0 introduces framing to all internode messages, i.e. the -grouping of messages into a single logical payload with headers and -trailers; these frames are guaranteed to either contain at most one -message, that is split into its own unique sequence of frames (for large -messages), or that a frame contains only complete messages. - -=== Corruption prevention - -Previously, intra-datacenter internode messages would be unprotected -from corruption by default, as only LZ4 provided any integrity checks. -All messages to post 4.0 nodes are written to explicit frames, which may -be: - -* LZ4 encoded -* CRC protected - -The Unprotected option is still available. - -=== Resilience - -For resilience, all frames are written with a separate CRC protected -header, of 8 and 6 bytes respectively. If corruption occurs in this -header, the connection must be reset, as before. If corruption occurs -anywhere outside of the header, the corrupt frame will be skipped, -leaving the connection intact and avoiding the loss of any messages -unnecessarily. - -Previously, any issue at any point in the stream would result in the -connection being reset, with the loss of any in-flight messages. - -=== Efficiency - -The overall memory usage, and number of byte shuffles, on both inbound -and outbound messages is reduced. - -Outbound the Netty LZ4 encoder maintains a chunk size buffer (64KiB), -that is filled before any compressed frame can be produced. Our frame -encoders avoid this redundant copy, as well as freeing 192KiB per -endpoint. - -Inbound, frame decoders guarantee only to copy the number of bytes -necessary to parse a frame, and to never store more bytes than -necessary. This improvement applies twice to LZ4 connections, improving -both the message decode and the LZ4 frame decode. - -=== Inbound Path - -Version 4.0 introduces several improvements to the inbound path. - -An appropriate message handler is used based on whether large or small -messages are expected on a particular connection as set in a flag. -`NonblockingBufferHandler`, running on event loop, is used for small -messages, and `BlockingBufferHandler`, running off event loop, for large -messages. The single implementation of `InboundMessageHandler` handles -messages of any size effectively by deriving size of the incoming -message from the byte stream. In addition to deriving size of the -message from the stream, incoming message expiration time is proactively -read, before attempting to deserialize the entire message. If it’s -expired at the time when a message is encountered the message is just -skipped in the byte stream altogether. And if a message fails to be -deserialized while still on the receiving side - say, because of table -id or column being unknown - bytes are skipped, without dropping the -entire connection and losing all the buffered messages. An immediately -reply back is sent to the coordinator node with the failure reason, -rather than waiting for the coordinator callback to expire. This logic -is extended to a corrupted frame; a corrupted frame is safely skipped -over without dropping the connection. - -Inbound path imposes strict limits on memory utilization. Specifically, -the memory occupied by all parsed, but unprocessed messages is bound - -on per-connection, per-endpoint, and global basis. Once a connection -exceeds its local unprocessed capacity and cannot borrow any permits -from per-endpoint and global reserve, it simply stops processing further -messages, providing natural backpressure - until sufficient capacity is -regained. - -=== Outbound Connections - -==== Opening a connection - -A consistent approach is adopted for all kinds of failure to connect, -including: refused by endpoint, incompatible versions, or unexpected -exceptions; - -* Retry forever, until either success or no messages waiting to deliver. -* Wait incrementally longer periods before reconnecting, up to a maximum -of 1s. -* While failing to connect, no reserve queue limits are acquired. - -==== Closing a connection - -* Correctly drains outbound messages that are waiting to be delivered -(unless disconnected and fail to reconnect). -* Messages written to a closing connection are either delivered or -rejected, with a new connection being opened if the old is irrevocably -closed. -* Unused connections are pruned eventually. - -==== Reconnecting - -We sometimes need to reconnect a perfectly valid connection, e.g. if the -preferred IP address changes. We ensure that the underlying connection -has no in-progress operations before closing it and reconnecting. - -==== Message Failure - -Propagates to callbacks instantly, better preventing overload by -reclaiming committed memory. - -===== Expiry - -* No longer experiences head-of-line blocking (e.g. undroppable message -preventing all droppable messages from being expired). -* While overloaded, expiry is attempted eagerly on enqueuing threads. -* While disconnected we schedule regular pruning, to handle the case -where messages are no longer being sent, but we have a large backlog to -expire. - -===== Overload - -* Tracked by bytes queued, as opposed to number of messages. - -===== Serialization Errors - -* Do not result in the connection being invalidated; the message is -simply completed with failure, and then erased from the frame. -* Includes detected mismatch between calculated serialization size to -actual. - -Failures to flush to network, perhaps because the connection has been -reset are not currently notified to callback handlers, as the necessary -information has been discarded, though it would be possible to do so in -future if we decide it is worth our while. - -==== QoS - -"Gossip" connection has been replaced with a general purpose "Urgent" -connection, for any small messages impacting system stability. - -==== Metrics - -We track, and expose via Virtual Table and JMX, the number of messages -and bytes that: we could not serialize or flush due to an error, we -dropped due to overload or timeout, are pending, and have successfully -sent. - -== Added a Message size limit - -Cassandra pre-4.0 doesn't protect the server from allocating huge -buffers for the inter-node Message objects. Adding a message size limit -would be good to deal with issues such as a malfunctioning cluster -participant. Version 4.0 introduced max message size config param, akin -to max mutation size - set to endpoint reserve capacity by default. - -== Recover from unknown table when deserializing internode messages - -As discussed in -(https://issues.apache.org/jira/browse/CASSANDRA-9289[CASSANDRA-9289]) -it would be nice to gracefully recover from seeing an unknown table in a -message from another node. Pre-4.0, we close the connection and -reconnect, which can cause other concurrent queries to fail. Version 4.0 -fixes the issue by wrapping message in-stream with -`TrackedDataInputPlus`, catching `UnknownCFException`, and skipping the -remaining bytes in this message. TCP won't be closed and it will remain -connected for other messages. diff --git a/doc/source/modules/cassandra/pages/new/streaming.adoc b/doc/source/modules/cassandra/pages/new/streaming.adoc deleted file mode 100644 index 991bec77d1d9..000000000000 --- a/doc/source/modules/cassandra/pages/new/streaming.adoc +++ /dev/null @@ -1,217 +0,0 @@ -= Improved Streaming - -Apache Cassandra 4.0 has made several improvements to streaming. -Streaming is the process used by nodes of a cluster to exchange data in -the form of SSTables. Streaming of SSTables is performed for several -operations, such as: - -* SSTable Repair -* Host Replacement -* Range movements -* Bootstrapping -* Rebuild -* Cluster expansion - -== Streaming based on Netty - -Streaming in Cassandra 4.0 is based on Non-blocking Input/Output (NIO) -with Netty -(https://issues.apache.org/jira/browse/CASSANDRA-12229[CASSANDRA-12229]). -It replaces the single-threaded (or sequential), synchronous, blocking -model of streaming messages and transfer of files. Netty supports -non-blocking, asynchronous, multi-threaded streaming with which multiple -connections are opened simultaneously. Non-blocking implies that threads -are not blocked as they don’t wait for a response for a sent request. A -response could be returned in a different thread. With asynchronous, -connections and threads are decoupled and do not have a 1:1 relation. -Several more connections than threads may be opened. - -== Zero Copy Streaming - -Pre-4.0, during streaming Cassandra reifies the SSTables into objects. -This creates unnecessary garbage and slows down the whole streaming -process as some SSTables can be transferred as a whole file rather than -individual partitions. Cassandra 4.0 has added support for streaming -entire SSTables when possible -(https://issues.apache.org/jira/browse/CASSANDRA-14556[CASSANDRA-14556]) -for faster Streaming using ZeroCopy APIs. If enabled, Cassandra will use -ZeroCopy for eligible SSTables significantly speeding up transfers and -increasing throughput. A zero-copy path avoids bringing data into -user-space on both sending and receiving side. Any streaming related -operations will notice corresponding improvement. Zero copy streaming is -hardware bound; only limited by the hardware limitations (Network and -Disk IO ). - -=== High Availability - -In benchmark tests Zero Copy Streaming is 5x faster than partitions -based streaming. Faster streaming provides the benefit of improved -availability. A cluster’s recovery mainly depends on the streaming -speed, Cassandra clusters with failed nodes will be able to recover much -more quickly (5x faster). If a node fails, SSTables need to be streamed -to a replacement node. During the replacement operation, the new -Cassandra node streams SSTables from the neighboring nodes that hold -copies of the data belonging to this new node’s token range. Depending -on the amount of data stored, this process can require substantial -network bandwidth, taking some time to complete. The longer these range -movement operations take, the more the cluster availability is lost. -Failure of multiple nodes would reduce high availability greatly. The -faster the new node completes streaming its data, the faster it can -serve traffic, increasing the availability of the cluster. - -=== Enabling Zero Copy Streaming - -Zero copy streaming is enabled by setting the following setting in -`cassandra.yaml`. - -.... -stream_entire_sstables: true -.... - -By default zero copy streaming is enabled. - -=== SSTables Eligible for Zero Copy Streaming - -Zero copy streaming is used if all partitions within the SSTable need to -be transmitted. This is common when using `LeveledCompactionStrategy` or -when partitioning SSTables by token range has been enabled. All -partition keys in the SSTables are iterated over to determine the -eligibility for Zero Copy streaming. - -=== Benefits of Zero Copy Streaming - -When enabled, it permits Cassandra to zero-copy stream entire eligible -SSTables between nodes, including every component. This speeds up the -network transfer significantly subject to throttling specified by -`stream_throughput_outbound_megabits_per_sec`. - -Enabling this will reduce the GC pressure on sending and receiving node. -While this feature tries to keep the disks balanced, it cannot guarantee -it. This feature will be automatically disabled if internode encryption -is enabled. Currently this can be used with Leveled Compaction. - -=== Configuring for Zero Copy Streaming - -Throttling would reduce the streaming speed. The -`stream_throughput_outbound_megabits_per_sec` throttles all outbound -streaming file transfers on a node to the given total throughput in -Mbps. When unset, the default is 200 Mbps or 25 MB/s. - -.... -stream_throughput_outbound_megabits_per_sec: 200 -.... - -To run any Zero Copy streaming benchmark the -`stream_throughput_outbound_megabits_per_sec` must be set to a really -high value otherwise, throttling will be significant and the benchmark -results will not be meaningful. - -The `inter_dc_stream_throughput_outbound_megabits_per_sec` throttles all -streaming file transfer between the datacenters, this setting allows -users to throttle inter dc stream throughput in addition to throttling -all network stream traffic as configured with -`stream_throughput_outbound_megabits_per_sec`. When unset, the default -is 200 Mbps or 25 MB/s. - -.... -inter_dc_stream_throughput_outbound_megabits_per_sec: 200 -.... - -=== SSTable Components Streamed with Zero Copy Streaming - -Zero Copy Streaming streams entire SSTables. SSTables are made up of -multiple components in separate files. SSTable components streamed are -listed in Table 1. - -Table 1. SSTable Components - -[width="98%",cols="27%,73%",] -|=== -|SSTable Component |Description - -|Data.db |The base data for an SSTable: the remaining components can be -regenerated based on the data component. - -|Index.db |Index of the row keys with pointers to their positions in the -data file. - -|Filter.db |Serialized bloom filter for the row keys in the SSTable. - -|CompressionInfo.db |File to hold information about uncompressed data -length, chunk offsets etc. - -|Statistics.db |Statistical metadata about the content of the SSTable. - -|Digest.crc32 |Holds CRC32 checksum of the data file size_bytes. - -|CRC.db |Holds the CRC32 for chunks in an uncompressed file. - -|Summary.db |Holds SSTable Index Summary (sampling of Index component) - -|TOC.txt |Table of contents, stores the list of all components for the -SSTable. -|=== - -Custom component, used by e.g. custom compaction strategy may also be -included. - -== Repair Streaming Preview - -Repair with `nodetool repair` involves streaming of repaired SSTables -and a repair preview has been added to provide an estimate of the amount -of repair streaming that would need to be performed. Repair preview -(https://issues.apache.org/jira/browse/CASSANDRA-13257[CASSANDRA-13257]) -is invoke with `nodetool repair --preview` using option: - -.... --prv, --preview -.... - -It determines ranges and amount of data to be streamed, but doesn't -actually perform repair. - -== Parallelizing of Streaming of Keyspaces - -The streaming of the different keyspaces for bootstrap and rebuild has -been parallelized in Cassandra 4.0 -(https://issues.apache.org/jira/browse/CASSANDRA-4663[CASSANDRA-4663]). - -== Unique nodes for Streaming in Multi-DC deployment - -Range Streamer picks unique nodes to stream data from when number of -replicas in each DC is three or more -(https://issues.apache.org/jira/browse/CASSANDRA-4650[CASSANDRA-4650]). -What the optimization does is to even out the streaming load across the -cluster. Without the optimization, some node can be picked up to stream -more data than others. This patch allows to select dedicated node to -stream only one range. - -This will increase the performance of bootstrapping a node and will also -put less pressure on nodes serving the data. This does not affect if N < -3 in each DC as then it streams data from only 2 nodes. - -Stream Operation Types ^^^^^^^^^^^^^ - -It is important to know the type or purpose of a certain stream. Version -4.0 -(https://issues.apache.org/jira/browse/CASSANDRA-13064[CASSANDRA-13064]) -adds an `enum` to distinguish between the different types of streams. -Stream types are available both in a stream request and a stream task. -The different stream types are: - -* Restore replica count -* Unbootstrap -* Relocation -* Bootstrap -* Rebuild -* Bulk Load -* Repair - -== Disallow Decommission when number of Replicas will drop below configured RF - -https://issues.apache.org/jira/browse/CASSANDRA-12510[CASSANDRA-12510] -guards against decommission that will drop # of replicas below -configured replication factor (RF), and adds the `--force` option that -allows decommission to continue if intentional; force decommission of -this node even when it reduces the number of replicas to below -configured RF. diff --git a/doc/source/modules/cassandra/pages/new/transientreplication.adoc b/doc/source/modules/cassandra/pages/new/transientreplication.adoc deleted file mode 100644 index c939497e5e42..000000000000 --- a/doc/source/modules/cassandra/pages/new/transientreplication.adoc +++ /dev/null @@ -1,186 +0,0 @@ -= Transient Replication - -*Note*: - -Transient Replication -(https://issues.apache.org/jira/browse/CASSANDRA-14404[CASSANDRA-14404]) -is an experimental feature designed for expert Apache Cassandra users -who are able to validate every aspect of the database for their -application and deployment. That means being able to check that -operations like reads, writes, decommission, remove, rebuild, repair, -and replace all work with your queries, data, configuration, operational -practices, and availability requirements. Apache Cassandra 4.0 has the -initial implementation of transient replication. Future releases of -Cassandra will make this feature suitable for a wider audience. It is -anticipated that a future version will support monotonic reads with -transient replication as well as LWT, logged batches, and counters. -Being experimental, Transient replication is *not* recommended for -production use. - -== Objective - -The objective of transient replication is to decouple storage -requirements from data redundancy (or consensus group size) using -incremental repair, in order to reduce storage overhead. Certain nodes -act as full replicas (storing all the data for a given token range), and -some nodes act as transient replicas, storing only unrepaired data for -the same token ranges. - -The optimization that is made possible with transient replication is -called "Cheap quorums", which implies that data redundancy is increased -without corresponding increase in storage usage. - -Transient replication is useful when sufficient full replicas are -unavailable to receive and store all the data. Transient replication -allows you to configure a subset of replicas to only replicate data that -hasn't been incrementally repaired. As an optimization, we can avoid -writing data to a transient replica if we have successfully written data -to the full replicas. - -After incremental repair, transient data stored on transient replicas -can be discarded. - -== Enabling Transient Replication - -Transient replication is not enabled by default. Transient replication -must be enabled on each node in a cluster separately by setting the -following configuration property in `cassandra.yaml`. - -.... -enable_transient_replication: true -.... - -Transient replication may be configured with both `SimpleStrategy` and -`NetworkTopologyStrategy`. Transient replication is configured by -setting replication factor as `/`. - -As an example, create a keyspace with replication factor (RF) 3. - -.... -CREATE KEYSPACE CassandraKeyspaceSimple WITH replication = {'class': 'SimpleStrategy', -'replication_factor' : 4/1}; -.... - -As another example, `some_keysopace keyspace` will have 3 replicas in -DC1, 1 of which is transient, and 5 replicas in DC2, 2 of which are -transient: - -.... -CREATE KEYSPACE some_keysopace WITH replication = {'class': 'NetworkTopologyStrategy', -'DC1' : '3/1'', 'DC2' : '5/2'}; -.... - -Transiently replicated keyspaces only support tables with `read_repair` -set to `NONE`. - -Important Restrictions: - -* RF cannot be altered while some endpoints are not in a normal state -(no range movements). -* You can't add full replicas if there are any transient replicas. You -must first remove all transient replicas, then change the # of full -replicas, then add back the transient replicas. -* You can only safely increase number of transients one at a time with -incremental repair run in between each time. - -Additionally, transient replication cannot be used for: - -* Monotonic Reads -* Lightweight Transactions (LWTs) -* Logged Batches -* Counters -* Keyspaces using materialized views -* Secondary indexes (2i) - -== Cheap Quorums - -Cheap quorums are a set of optimizations on the write path to avoid -writing to transient replicas unless sufficient full replicas are not -available to satisfy the requested consistency level. Hints are never -written for transient replicas. Optimizations on the read path prefer -reading from transient replicas. When writing at quorum to a table -configured to use transient replication the quorum will always prefer -available full replicas over transient replicas so that transient -replicas don't have to process writes. Tail latency is reduced by rapid -write protection (similar to rapid read protection) when full replicas -are slow or unavailable by sending writes to transient replicas. -Transient replicas can serve reads faster as they don't have to do -anything beyond bloom filter checks if they have no data. With vnodes -and large cluster sizes they will not have a large quantity of data even -for failure of one or more full replicas where transient replicas start -to serve a steady amount of write traffic for some of their transiently -replicated ranges. - -== Speculative Write Option - -The `CREATE TABLE` adds an option `speculative_write_threshold` for use -with transient replicas. The option is of type `simple` with default -value as `99PERCENTILE`. When replicas are slow or unresponsive -`speculative_write_threshold` specifies the threshold at which a cheap -quorum write will be upgraded to include transient replicas. - -== Pending Ranges and Transient Replicas - -Pending ranges refers to the movement of token ranges between transient -replicas. When a transient range is moved, there will be a period of -time where both transient replicas would need to receive any write -intended for the logical transient replica so that after the movement -takes effect a read quorum is able to return a response. Nodes are _not_ -temporarily transient replicas during expansion. They stream data like a -full replica for the transient range before they can serve reads. A -pending state is incurred similar to how there is a pending state for -full replicas. Transient replicas also always receive writes when they -are pending. Pending transient ranges are sent a bit more data and -reading from them is avoided. - -== Read Repair and Transient Replicas - -Read repair never attempts to repair a transient replica. Reads will -always include at least one full replica. They should also prefer -transient replicas where possible. Range scans ensure the entire scanned -range performs replica selection that satisfies the requirement that -every range scanned includes one full replica. During incremental & -validation repair handling, at transient replicas anti-compaction does -not output any data for transient ranges as the data will be dropped -after repair, and transient replicas never have data streamed to them. - -== Transitioning between Full Replicas and Transient Replicas - -The additional state transitions that transient replication introduces -requires streaming and `nodetool cleanup` to behave differently. When -data is streamed it is ensured that it is streamed from a full replica -and not a transient replica. - -Transitioning from not replicated to transiently replicated means that a -node must stay pending until the next incremental repair completes at -which point the data for that range is known to be available at full -replicas. - -Transitioning from transiently replicated to fully replicated requires -streaming from a full replica and is identical to how data is streamed -when transitioning from not replicated to replicated. The transition is -managed so the transient replica is not read from as a full replica -until streaming completes. It can be used immediately for a write -quorum. - -Transitioning from fully replicated to transiently replicated requires -cleanup to remove repaired data from the transiently replicated range to -reclaim space. It can be used immediately for a write quorum. - -Transitioning from transiently replicated to not replicated requires -cleanup to be run to remove the formerly transiently replicated data. - -When transient replication is in use ring changes are supported -including add/remove node, change RF, add/remove DC. - -== Transient Replication supports EACH_QUORUM - -(https://issues.apache.org/jira/browse/CASSANDRA-14727[CASSANDRA-14727]) -adds support for Transient Replication support for `EACH_QUORUM`. Per -(https://issues.apache.org/jira/browse/CASSANDRA-14768[CASSANDRA-14768]), -we ensure we write to at least a `QUORUM` of nodes in every DC, -regardless of how many responses we need to wait for and our requested -consistency level. This is to minimally surprise users with transient -replication; with normal writes, we soft-ensure that we reach `QUORUM` -in all DCs we are able to, by writing to every node; even if we don't -wait for ACK, we have in both cases sent sufficient messages. diff --git a/doc/source/modules/cassandra/pages/new/virtualtables.adoc b/doc/source/modules/cassandra/pages/new/virtualtables.adoc deleted file mode 100644 index b18ba3131674..000000000000 --- a/doc/source/modules/cassandra/pages/new/virtualtables.adoc +++ /dev/null @@ -1,410 +0,0 @@ -= Virtual Tables - -Apache Cassandra 4.0 implements virtual tables (https://issues.apache.org/jira/browse/CASSANDRA-7622[CASSANDRA-7622]). -Virtual tables are tables backed by an API instead of data explicitly managed and stored as SSTables. -Apache Cassandra 4.0 implements a virtual keyspace interface for virtual tables. -Virtual tables are specific to each node. - -Some of the features of virtual tables are the ability to: - -* expose metrics through CQL -* expose YAML configuration information - -Virtual keyspaces and tables are quite different from regular tables and keyspaces: - -* Virtual tables are created in special keyspaces and not just any keyspace. -* Virtual tables are managed by Cassandra. Users cannot run DDL to create new virtual tables or DML to modify existing virtual tables. -* Virtual tables are currently read-only, although that may change in a later version. -* Virtual tables are local only, non-distributed, and thus not replicated. -* Virtual tables have no associated SSTables. -* Consistency level of the queries sent to virtual tables are ignored. -* All existing virtual tables use `LocalPartitioner`. -Since a virtual table is not replicated the partitioner sorts in order of partition keys instead of by their hash. -* Making advanced queries using `ALLOW FILTERING` and aggregation functions can be executed in virtual tables, even though in normal tables we dont recommend it. - -== Virtual Keyspaces - -Apache Cassandra 4.0 has added two new keyspaces for virtual tables: - -* `system_virtual_schema` -* `system_views`. - -The `system_virtual_schema` keyspace has three tables: `keyspaces`, -`columns` and `tables` for the virtual keyspace, table, and column definitions, respectively. -These tables contain schema information for the virtual tables. -It is used by Cassandra internally and a user should not access it directly. - -The `system_views` keyspace contains the actual virtual tables. - -== Virtual Table Limitations - -Before disccusing virtual keyspaces and tables, note that virtual keyspaces and tables have some limitations. -These limitations are subject to change. -Virtual keyspaces cannot be altered or dropped. -In fact, no operations can be performed against virtual keyspaces. - -Virtual tables cannot be created in virtual keyspaces. -Virtual tables cannot be altered, dropped, or truncated. -Secondary indexes, types, functions, aggregates, materialized views, and triggers cannot be created for virtual tables. -Expiring time-to-live (TTL) columns cannot be created. -Virtual tables do not support conditional updates or deletes. -Aggregates may be run in SELECT statements. - -Conditional batch statements cannot include mutations for virtual tables, nor can a virtual table statement be included in a logged batch. -In fact, mutations for virtual and regular tables cannot occur in the same batch table. - -== Virtual Tables - -Each of the virtual tables in the `system_views` virtual keyspace contain different information. - -The following table describes the virtual tables: - -[width="98%",cols="27%,73%",] -|=== -|Virtual Table |Description - -|caches |Displays the general cache information including cache name, capacity_bytes, entry_count, hit_count, hit_ratio double, -recent_hit_rate_per_second, recent_request_rate_per_second, request_count, and size_bytes. - -|clients |Lists information about all connected clients. - -|coordinator_read_latency |Records counts, keyspace_name, table_name, max, median, and per_second for coordinator reads. - -|coordinator_scan |Records counts, keyspace_name, table_name, max, median, and per_second for coordinator scans. - -|coordinator_write_latency |Records counts, keyspace_name, table_name, max, median, and per_second for coordinator writes. - -|disk_usage |Records disk usage including disk_space, keyspace_name, and table_name, sorted by system keyspaces. - -|internode_inbound |Lists information about the inbound internode messaging. - -|internode_outbound |Information about the outbound internode messaging. - -|local_read_latency |Records counts, keyspace_name, table_name, max, median, and per_second for local reads. - -|local_scan |Records counts, keyspace_name, table_name, max, median, and per_second for local scans. - -|local_write_latency |Records counts, keyspace_name, table_name, max, median, and per_second for local writes. - -|max_partition_size |A table metric for maximum partition size. - -|rows_per_read |Records counts, keyspace_name, tablek_name, max, and median for rows read. - -|settings |Displays configuration settings in cassandra.yaml. - -|sstable_tasks |Lists currently running tasks and progress on SSTables, for operations like compaction and upgrade. - -|system_properties |Displays environmental system properties set on the node. - -|thread_pools |Lists metrics for each thread pool. - -|tombstones_per_read |Records counts, keyspace_name, tablek_name, max, and median for tombstones. -|=== - -We shall discuss some of the virtual tables in more detail next. - -=== Clients Virtual Table - -The `clients` virtual table lists all active connections (connected -clients) including their ip address, port, connection stage, driver -name, driver version, hostname, protocol version, request count, ssl -enabled, ssl protocol and user name: - -.... -cqlsh:system_views> select * from system_views.clients; - address | port | connection_stage | driver_name | driver_version | hostname | protocol_version | request_count | ssl_cipher_suite | ssl_enabled | ssl_protocol | username ------------+-------+------------------+-------------+----------------+-----------+------------------+---------------+------------------+-------------+--------------+----------- - 127.0.0.1 | 50628 | ready | null | null | localhost | 4 | 55 | null | False | null | anonymous - 127.0.0.1 | 50630 | ready | null | null | localhost | 4 | 70 | null | False | null | anonymous - -(2 rows) -.... - -Some examples of how `clients` can be used are: - -* To find applications using old incompatible versions of drivers before -upgrading and with `nodetool enableoldprotocolversions` and -`nodetool disableoldprotocolversions` during upgrades. -* To identify clients sending too many requests. -* To find if SSL is enabled during the migration to and from ssl. - -The virtual tables may be described with `DESCRIBE` statement. The DDL -listed however cannot be run to create a virtual table. As an example -describe the `system_views.clients` virtual table: - -.... -cqlsh:system_views> DESC TABLE system_views.clients; -CREATE TABLE system_views.clients ( - address inet, - connection_stage text, - driver_name text, - driver_version text, - hostname text, - port int, - protocol_version int, - request_count bigint, - ssl_cipher_suite text, - ssl_enabled boolean, - ssl_protocol text, - username text, - PRIMARY KEY (address, port)) WITH CLUSTERING ORDER BY (port ASC) - AND compaction = {'class': 'None'} - AND compression = {}; -.... - -=== Caches Virtual Table - -The `caches` virtual table lists information about the caches. The four -caches presently created are chunks, counters, keys and rows. A query on -the `caches` virtual table returns the following details: - -.... -cqlsh:system_views> SELECT * FROM system_views.caches; -name | capacity_bytes | entry_count | hit_count | hit_ratio | recent_hit_rate_per_second | recent_request_rate_per_second | request_count | size_bytes ----------+----------------+-------------+-----------+-----------+----------------------------+--------------------------------+---------------+------------ - chunks | 229638144 | 29 | 166 | 0.83 | 5 | 6 | 200 | 475136 -counters | 26214400 | 0 | 0 | NaN | 0 | 0 | 0 | 0 - keys | 52428800 | 14 | 124 | 0.873239 | 4 | 4 | 142 | 1248 - rows | 0 | 0 | 0 | NaN | 0 | 0 | 0 | 0 - -(4 rows) -.... - -=== Settings Virtual Table - -The `settings` table is rather useful and lists all the current -configuration settings from the `cassandra.yaml`. The encryption options -are overridden to hide the sensitive truststore information or -passwords. The configuration settings however cannot be set using DML on -the virtual table presently: : - -.... -cqlsh:system_views> SELECT * FROM system_views.settings; - -name | value --------------------------------------+-------------------- - allocate_tokens_for_keyspace | null - audit_logging_options_enabled | false - auto_snapshot | true - automatic_sstable_upgrade | false - cluster_name | Test Cluster - enable_transient_replication | false - hinted_handoff_enabled | true - hints_directory | /home/ec2-user/cassandra/data/hints - incremental_backups | false - initial_token | null - ... - ... - ... - rpc_address | localhost - ssl_storage_port | 7001 - start_native_transport | true - storage_port | 7000 - stream_entire_sstables | true - (224 rows) -.... - -The `settings` table can be really useful if yaml file has been changed -since startup and dont know running configuration, or to find if they -have been modified via jmx/nodetool or virtual tables. - -=== Thread Pools Virtual Table - -The `thread_pools` table lists information about all thread pools. -Thread pool information includes active tasks, active tasks limit, -blocked tasks, blocked tasks all time, completed tasks, and pending -tasks. A query on the `thread_pools` returns following details: - -.... -cqlsh:system_views> select * from system_views.thread_pools; - -name | active_tasks | active_tasks_limit | blocked_tasks | blocked_tasks_all_time | completed_tasks | pending_tasks -------------------------------+--------------+--------------------+---------------+------------------------+-----------------+--------------- - AntiEntropyStage | 0 | 1 | 0 | 0 | 0 | 0 - CacheCleanupExecutor | 0 | 1 | 0 | 0 | 0 | 0 - CompactionExecutor | 0 | 2 | 0 | 0 | 881 | 0 - CounterMutationStage | 0 | 32 | 0 | 0 | 0 | 0 - GossipStage | 0 | 1 | 0 | 0 | 0 | 0 - HintsDispatcher | 0 | 2 | 0 | 0 | 0 | 0 - InternalResponseStage | 0 | 2 | 0 | 0 | 0 | 0 - MemtableFlushWriter | 0 | 2 | 0 | 0 | 1 | 0 - MemtablePostFlush | 0 | 1 | 0 | 0 | 2 | 0 - MemtableReclaimMemory | 0 | 1 | 0 | 0 | 1 | 0 - MigrationStage | 0 | 1 | 0 | 0 | 0 | 0 - MiscStage | 0 | 1 | 0 | 0 | 0 | 0 - MutationStage | 0 | 32 | 0 | 0 | 0 | 0 - Native-Transport-Requests | 1 | 128 | 0 | 0 | 130 | 0 - PendingRangeCalculator | 0 | 1 | 0 | 0 | 1 | 0 -PerDiskMemtableFlushWriter_0 | 0 | 2 | 0 | 0 | 1 | 0 - ReadStage | 0 | 32 | 0 | 0 | 13 | 0 - Repair-Task | 0 | 2147483647 | 0 | 0 | 0 | 0 - RequestResponseStage | 0 | 2 | 0 | 0 | 0 | 0 - Sampler | 0 | 1 | 0 | 0 | 0 | 0 - SecondaryIndexManagement | 0 | 1 | 0 | 0 | 0 | 0 - ValidationExecutor | 0 | 2147483647 | 0 | 0 | 0 | 0 - ViewBuildExecutor | 0 | 1 | 0 | 0 | 0 | 0 - ViewMutationStage | 0 | 32 | 0 | 0 | 0 | 0 -.... - -(24 rows) - -=== Internode Inbound Messaging Virtual Table - -The `internode_inbound` virtual table is for the internode inbound -messaging. Initially no internode inbound messaging may get listed. In -addition to the address, port, datacenter and rack information includes -corrupt frames recovered, corrupt frames unrecovered, error bytes, error -count, expired bytes, expired count, processed bytes, processed count, -received bytes, received count, scheduled bytes, scheduled count, -throttled count, throttled nanos, using bytes, using reserve bytes. A -query on the `internode_inbound` returns following details: - -.... -cqlsh:system_views> SELECT * FROM system_views.internode_inbound; -address | port | dc | rack | corrupt_frames_recovered | corrupt_frames_unrecovered | -error_bytes | error_count | expired_bytes | expired_count | processed_bytes | -processed_count | received_bytes | received_count | scheduled_bytes | scheduled_count | throttled_count | throttled_nanos | using_bytes | using_reserve_bytes ----------+------+----+------+--------------------------+----------------------------+- ----------- -(0 rows) -.... - -=== SSTables Tasks Virtual Table - -The `sstable_tasks` could be used to get information about running -tasks. It lists following columns: - -.... -cqlsh:system_views> SELECT * FROM sstable_tasks; -keyspace_name | table_name | task_id | kind | progress | total | unit ----------------+------------+--------------------------------------+------------+----------+----------+------- - basic | wide2 | c3909740-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 60418761 | 70882110 | bytes - basic | wide2 | c7556770-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 2995623 | 40314679 | bytes -.... - -As another example, to find how much time is remaining for SSTable -tasks, use the following query: - -.... -SELECT total - progress AS remaining -FROM system_views.sstable_tasks; -.... - -=== Other Virtual Tables - -Some examples of using other virtual tables are as follows. - -Find tables with most disk usage: - -.... -cqlsh> SELECT * FROM disk_usage WHERE mebibytes > 1 ALLOW FILTERING; - -keyspace_name | table_name | mebibytes ----------------+------------+----------- - keyspace1 | standard1 | 288 - tlp_stress | keyvalue | 3211 -.... - -Find queries on table/s with greatest read latency: - -.... -cqlsh> SELECT * FROM local_read_latency WHERE per_second > 1 ALLOW FILTERING; - -keyspace_name | table_name | p50th_ms | p99th_ms | count | max_ms | per_second ----------------+------------+----------+----------+----------+---------+------------ - tlp_stress | keyvalue | 0.043 | 0.152 | 49785158 | 186.563 | 11418.356 -.... - - -== Example - -[arabic, start=1] -. To list the keyspaces, enter ``cqlsh`` and run the CQL command ``DESCRIBE KEYSPACES``: - -[source, cql] ----- -cqlsh> DESC KEYSPACES; -system_schema system system_distributed system_virtual_schema -system_auth system_traces system_views ----- - -[arabic, start=2] -. To view the virtual table schema, run the CQL commands ``USE system_virtual_schema`` and ``SELECT * FROM tables``: - -[source, cql] ----- -cqlsh> USE system_virtual_schema; -cqlsh> SELECT * FROM tables; ----- - -results in: - -[source, cql] ----- - keyspace_name | table_name | comment ------------------------+---------------------------+-------------------------------------- - system_views | caches | system caches - system_views | clients | currently connected clients - system_views | coordinator_read_latency | - system_views | coordinator_scan_latency | - system_views | coordinator_write_latency | - system_views | disk_usage | - system_views | internode_inbound | - system_views | internode_outbound | - system_views | local_read_latency | - system_views | local_scan_latency | - system_views | local_write_latency | - system_views | max_partition_size | - system_views | rows_per_read | - system_views | settings | current settings - system_views | sstable_tasks | current sstable tasks - system_views | system_properties | Cassandra relevant system properties - system_views | thread_pools | - system_views | tombstones_per_read | - system_virtual_schema | columns | virtual column definitions - system_virtual_schema | keyspaces | virtual keyspace definitions - system_virtual_schema | tables | virtual table definitions - -(21 rows) ----- - -[arabic, start=3] -. To view the virtual tables, run the CQL commands ``USE system_view`` and ``DESCRIBE tables``: - -[source, cql] ----- -cqlsh> USE system_view;; -cqlsh> DESCRIBE tables; ----- - -results in: - -[source, cql] ----- -sstable_tasks clients coordinator_write_latency -disk_usage local_write_latency tombstones_per_read -thread_pools internode_outbound settings -local_scan_latency coordinator_scan_latency system_properties -internode_inbound coordinator_read_latency max_partition_size -local_read_latency rows_per_read caches ----- - -[arabic, start=4] -. To look at any table data, run the CQL command ``SELECT``: - -[source, cql] ----- -cqlsh> USE system_view;; -cqlsh> SELECT * FROM clients LIMIT 2; ----- - results in: - -[source, cql] ----- - address | port | connection_stage | driver_name | driver_version | hostname | protocol_version | request_count | ssl_cipher_suite | ssl_enabled | ssl_protocol | username ------------+-------+------------------+------------------------+----------------+-----------+------------------+---------------+------------------+-------------+--------------+----------- - 127.0.0.1 | 37308 | ready | DataStax Python Driver | 3.21.0.post0 | localhost | 4 | 17 | null | False | null | anonymous - 127.0.0.1 | 37310 | ready | DataStax Python Driver | 3.21.0.post0 | localhost | 4 | 8 | null | False | null | anonymous - -(2 rows) ----- From 84d73df1edd9b13cf69f004f7d3474c690400651 Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Fri, 25 Jun 2021 11:30:25 -0700 Subject: [PATCH 098/115] Revert "remove new from 4.0 docs to create 3.11" --- .../modules/cassandra/pages/new/Figure_1.jpg | Bin 0 -> 27827 bytes .../modules/cassandra/pages/new/Figure_2.jpg | Bin 0 -> 36650 bytes .../cassandra/pages/new/auditlogging.adoc | 464 ++++++++++++++ .../cassandra/pages/new/fqllogging.adoc | 566 ++++++++++++++++++ .../modules/cassandra/pages/new/index.adoc | 11 + .../modules/cassandra/pages/new/java11.adoc | 292 +++++++++ .../cassandra/pages/new/messaging.adoc | 360 +++++++++++ .../cassandra/pages/new/streaming.adoc | 217 +++++++ .../pages/new/transientreplication.adoc | 186 ++++++ .../cassandra/pages/new/virtualtables.adoc | 410 +++++++++++++ 10 files changed, 2506 insertions(+) create mode 100644 doc/source/modules/cassandra/pages/new/Figure_1.jpg create mode 100644 doc/source/modules/cassandra/pages/new/Figure_2.jpg create mode 100644 doc/source/modules/cassandra/pages/new/auditlogging.adoc create mode 100644 doc/source/modules/cassandra/pages/new/fqllogging.adoc create mode 100644 doc/source/modules/cassandra/pages/new/index.adoc create mode 100644 doc/source/modules/cassandra/pages/new/java11.adoc create mode 100644 doc/source/modules/cassandra/pages/new/messaging.adoc create mode 100644 doc/source/modules/cassandra/pages/new/streaming.adoc create mode 100644 doc/source/modules/cassandra/pages/new/transientreplication.adoc create mode 100644 doc/source/modules/cassandra/pages/new/virtualtables.adoc diff --git a/doc/source/modules/cassandra/pages/new/Figure_1.jpg b/doc/source/modules/cassandra/pages/new/Figure_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ccaec67b84e7e4ca1e587ecd63d390a5e5c1ac15 GIT binary patch literal 27827 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 literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/new/Figure_2.jpg b/doc/source/modules/cassandra/pages/new/Figure_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..099e15fb893a80770298b468ccf30f186146a020 GIT binary patch literal 36650 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 S_g@Lo{*9-}UtI8mq5lD1{1+Yo literal 0 HcmV?d00001 diff --git a/doc/source/modules/cassandra/pages/new/auditlogging.adoc b/doc/source/modules/cassandra/pages/new/auditlogging.adoc new file mode 100644 index 000000000000..e81776a097a2 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/auditlogging.adoc @@ -0,0 +1,464 @@ += Audit Logging + +Audit Logging is a new feature in Apache Cassandra 4.0 (https://issues.apache.org/jira/browse/CASSANDRA-12151[CASSANDRA-12151]). +This new feature is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. +All database activity is logged per-node as file-based records to a specified local filesystem directory. +The audit log files are rolled periodically based on a configurable value. + +Some of the features of audit logging are: + +* No additional database capacity is needed to store audit logs. +* No query tool is required to store the audit logs. +* Latency of database operations is not affected, so there is no performance impact. +* Heap memory usage is bounded by a weighted queue, with configurable maximum weight sitting in front of logging thread. +* Disk utilization is bounded by a configurable size, deleting old log segments once the limit is reached. +* Can be enabled, disabled, or reset (to delete on-disk data) using the JMX tool, ``nodetool``. +* Can configure the settings in either the `cassandra.yaml` file or by using ``nodetool``. + +Audit logging includes all CQL requests, both successful and failed. +It also captures all successful and failed authentication and authorization events, such as login attempts. +The difference between Full Query Logging (FQL) and audit logging is that FQL captures only successful CQL requests, which allow replay or comparison of logs. +Audit logs are useful for compliance and debugging, while FQL is useful for debugging, performance benchmarking, testing and auditing CQL queries. + +== Audit information logged + +The audit log contains: + +* all events in the configured keyspaces to include +* all events in the configured categories to include +* all events executed by the configured users to include + +The audit log does not contain: + +* configuration changes made in `cassandra.yaml` file +* `nodetool` commands + +The audit log is a series of log entries. +An audit log entry contains: + +* keyspace (String) - Keyspace on which request is made +* operation (String) - Database operation such as CQL command +* user (String) - User name +* scope (String) - Scope of request such as Table/Function/Aggregate name +* type (AuditLogEntryType) - Type of request +** CQL Audit Log Entry Type +** Common Audit Log Entry Type +* source (InetAddressAndPort) - Source IP Address from which request originated +* timestamp (long ) - Timestamp of the request +* batch (UUID) - Batch of request +* options (QueryOptions) - CQL Query options +* state (QueryState) - State related to a given query + +Each entry contains all applicable attributes for the given event, concatenated with a pipe (|). + +CQL audit log entry types are the following CQL commands. Each command is assigned to a particular specified category to log: + +[width="100%",cols="20%,80%",options="header",] +|=== +| Category | CQL commands + +| DDL | ALTER_KEYSPACE, CREATE_KEYSPACE, DROP_KEYSPACE, +ALTER_TABLE, CREATE_TABLE, DROP_TABLE, +CREATE_FUNCTION, DROP_FUNCTION, +CREATE_AGGREGATE, DROP_AGGREGATE, +CREATE_INDEX, DROP_INDEX, +ALTER_TYPE, CREATE_TYPE, DROP_TYPE, +CREATE_TRIGGER, DROP_TRIGGER, +ALTER_VIEW, CREATE_VIEW, DROP_VIEW, +TRUNCATE +| DML | BATCH, DELETE, UPDATE +| DCL | GRANT, REVOKE, +ALTER_ROLE, CREATE_ROLE, DROP_ROLE, +LIST_ROLES, LIST_PERMISSIONS, LIST_USERS +| OTHER | USE_KEYSPACE +| QUERY | SELECT +| PREPARE | PREPARE_STATEMENT +|=== + +Common audit log entry types are one of the following: + +[width="100%",cols="50%,50%",options="header",] +|=== +| Category | CQL commands + +| AUTH | LOGIN_SUCCESS, LOGIN_ERROR, UNAUTHORIZED_ATTEMPT +| ERROR | REQUEST_FAILURE +|=== + +== Configuring audit logging in cassandra.yaml + +The `cassandra.yaml` file can be used to configure and enable audit logging. +Configuration and enablement may be the same or different on each node, depending on the `cassandra.yaml` file settings. +Audit logs are generated on each enabled node, so logs on each node will have that node's queries. +All options for audit logging can be set in the `cassandra.yaml` file under the ``audit_logging_options:``. + +The file includes the following options that can be uncommented for use: + +[source, yaml] +---- +# Audit logging - Logs every incoming CQL command request, authentication to a node. See the docs +# on audit_logging for full details about the various configuration options. +audit_logging_options: + enabled: false + logger: + - class_name: BinAuditLogger + # audit_logs_dir: + # included_keyspaces: + # excluded_keyspaces: system, system_schema, system_virtual_schema + # included_categories: + # excluded_categories: + # included_users: + # excluded_users: + # roll_cycle: HOURLY + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: + # archive_command: + # max_archive_retries: 10 +---- + +=== enabled + +Audit logging is enabled by setting the `enabled` option to `true` in +the `audit_logging_options` setting. +If this option is enabled, audit logging will start when Cassandra is started. +For example, ``enabled: true``. + +=== logger + +The type of audit logger is set with the `logger` option. +Supported values are: `BinAuditLogger` (default), `FileAuditLogger` and `NoOpAuditLogger`. +`BinAuditLogger` logs events to a file in binary format. +`FileAuditLogger` uses the standard logging mechanism, `slf4j` to log events to the `audit/audit.log` file. It is a synchronous, file-based audit logger. The roll_cycle will be set in the `logback.xml` file. +`NoOpAuditLogger` is a no-op implementation of the audit logger that shoudl be specified when audit logging is disabled. + +For example: + +[source, yaml] +---- +logger: + - class_name: FileAuditLogger +---- + +=== audit_logs_dir + +To write audit logs, an existing directory must be set in ``audit_logs_dir``. + +The directory must have appropriate permissions set to allow reading, writing, and executing. +Logging will recursively delete the directory contents as needed. +Do not place links in this directory to other sections of the filesystem. +For example, ``audit_logs_dir: /cassandra/audit/logs/hourly``. + +The audit log directory can also be configured using the system property `cassandra.logdir.audit`, which by default is set to `cassandra.logdir + /audit/`. + +=== included_keyspaces and excluded_keyspaces + +Set the keyspaces to include with the `included_keyspaces` option and +the keyspaces to exclude with the `excluded_keyspaces` option. +By default, `system`, `system_schema` and `system_virtual_schema` are excluded, and all other keyspaces are included. + +For example: +[source, yaml] +---- +included_keyspaces: test, demo +excluded_keyspaces: system, system_schema, system_virtual_schema +---- + +=== included_categories and excluded_categories + +The categories of database operations to include are specified with the `included_categories` option as a comma-separated list. +The categories of database operations to exclude are specified with `excluded_categories` option as a comma-separated list. +The supported categories for audit log are: `AUTH`, `DCL`, `DDL`, `DML`, `ERROR`, `OTHER`, `PREPARE`, and `QUERY`. +By default all supported categories are included, and no category is excluded. + +[source, yaml] +---- +included_categories: AUTH, ERROR, DCL +excluded_categories: DDL, DML, QUERY, PREPARE +---- + +=== included_users and excluded_users + +Users to audit log are set with the `included_users` and `excluded_users` options. +The `included_users` option specifies a comma-separated list of users to include explicitly. +The `excluded_users` option specifies a comma-separated list of users to exclude explicitly. +By default all users are included, and no users are excluded. + +[source, yaml] +---- +included_users: +excluded_users: john, mary +---- + +=== roll_cycle + +The ``roll_cycle`` defines the frequency with which the audit log segments are rolled. +Supported values are ``HOURLY`` (default), ``MINUTELY``, and ``DAILY``. +For example: ``roll_cycle: DAILY`` + +=== block + +The ``block`` option specifies whether audit logging should block writing or drop log records if the audit logging falls behind. Supported boolean values are ``true`` (default) or ``false``. +For example: ``block: false`` to drop records + +=== max_queue_weight + +The ``max_queue_weight`` option sets the maximum weight of in-memory queue for records waiting to be written to the file before blocking or dropping. The option must be set to a positive value. The default value is 268435456, or 256 MiB. +For example, to change the default: ``max_queue_weight: 134217728 # 128 MiB`` + +=== max_log_size + +The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The option must be set to a positive value. The default is 17179869184, or 16 GiB. +For example, to change the default: ``max_log_size: 34359738368 # 32 GiB`` + +=== archive_command + +The ``archive_command`` option sets the user-defined archive script to execute on rolled log files. +For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the file being rolled`` + +=== max_archive_retries + +The ``max_archive_retries`` option sets the max number of retries of failed archive commands. The default is 10. +For example: ``max_archive_retries: 10`` + + +An audit log file could get rolled for other reasons as well such as a +log file reaches the configured size threshold. + +Audit logging can also be configured using ``nodetool` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. + + +== Enabling Audit Logging with ``nodetool`` + +Audit logging is enabled on a per-node basis using the ``nodetool enableauditlog`` command. The logging directory must be defined with ``audit_logs_dir`` in the `cassandra.yaml` file or uses the default value ``cassandra.logdir.audit``. + +The syntax of the ``nodetool enableauditlog`` command has all the same options that can be set in the ``cassandra.yaml`` file except ``audit_logs_dir``. +In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. + +[source, plaintext] +---- + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableauditlog + [--excluded-categories ] + [--excluded-keyspaces ] + [--excluded-users ] + [--included-categories ] + [--included-keyspaces ] + [--included-users ] [--logger ] + +OPTIONS + --excluded-categories + Comma separated list of Audit Log Categories to be excluded for + audit log. If not set the value from cassandra.yaml will be used + + --excluded-keyspaces + Comma separated list of keyspaces to be excluded for audit log. If + not set the value from cassandra.yaml will be used + + --excluded-users + Comma separated list of users to be excluded for audit log. If not + set the value from cassandra.yaml will be used + + -h , --host + Node hostname or ip address + + --included-categories + Comma separated list of Audit Log Categories to be included for + audit log. If not set the value from cassandra.yaml will be used + + --included-keyspaces + Comma separated list of keyspaces to be included for audit log. If + not set the value from cassandra.yaml will be used + + --included-users + Comma separated list of users to be included for audit log. If not + set the value from cassandra.yaml will be used + + --logger + Logger name to be used for AuditLogging. Default BinAuditLogger. If + not set the value from cassandra.yaml will be used + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username +---- + +To enable audit logging, run following command on each node in the cluster on which you want to enable logging: + +[source, bash] +---- +$ nodetool enableauditlog +---- + +== Disabling audit logging + +Use the `nodetool disableauditlog` command to disable audit logging. + +== Viewing audit logs + +The `auditlogviewer` tool is used to view (dump) audit logs if the logger was ``BinAuditLogger``.. +``auditlogviewer`` converts the binary log files into human-readable format; only the audit log directory must be supplied as a command-line option. +If the logger ``FileAuditLogger`` was set, the log file are already in human-readable format and ``auditlogviewer`` is not needed to read files. + + +The syntax of `auditlogviewer` is: + +[source, plaintext] +---- +auditlogviewer + +Audit log files directory path is a required argument. +usage: auditlogviewer [...] [options] +-- +View the audit log contents in human readable format +-- +Options are: +-f,--follow Upon reaching the end of the log continue indefinitely + waiting for more records +-h,--help display this help message +-r,--roll_cycle How often to roll the log file was rolled. May be + necessary for Chronicle to correctly parse file names. (MINUTELY, HOURLY, + DAILY). Default HOURLY. +---- + +== Example + +[arabic, start=1] +. To demonstrate audit logging, first configure the ``cassandra.yaml`` file with the following settings: + +[source, yaml] +---- +audit_logging_options: + enabled: true + logger: BinAuditLogger + audit_logs_dir: "/cassandra/audit/logs/hourly" + # included_keyspaces: + # excluded_keyspaces: system, system_schema, system_virtual_schema + # included_categories: + # excluded_categories: + # included_users: + # excluded_users: + roll_cycle: HOURLY + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: + # archive_command: + # max_archive_retries: 10 +---- + +[arabic, start=2] +. Create the audit log directory `/cassandra/audit/logs/hourly` and set the directory permissions to read, write, and execute for all. + +[arabic, start=3] +. Now create a demo keyspace and table and insert some data using ``cqlsh``: + +[source, cql] +---- + cqlsh> CREATE KEYSPACE auditlogkeyspace + ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + cqlsh> USE auditlogkeyspace; + cqlsh:auditlogkeyspace> CREATE TABLE t ( + ...id int, + ...k int, + ...v text, + ...PRIMARY KEY (id) + ... ); + cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); +---- + +All the supported CQL commands will be logged to the audit log directory. + +[arabic, start=4] +. Change directory to the audit logs directory. + +[source, bash] +---- +$ cd /cassandra/audit/logs/hourly +---- + +[arabic, start=5] +. List the audit log files and directories. + +[source, bash] +---- +$ ls -l +---- + +You should see results similar to: + +[source, plaintext] +---- +total 28 +-rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 03:01 directory-listing.cq4t +-rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-02.cq4 +-rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-03.cq4 +---- + +The audit log files will all be listed with a `.cq4` file type. The audit directory is of `.cq4t` type. + +[arabic, start=6] +. Run `auditlogviewer` tool to view the audit logs. + +[source, bash] +---- +$ auditlogviewer /cassandra/audit/logs/hourly +---- + +This command will return a readable version of the log. Here is a partial sample of the log for the commands in this demo: + +[source, plaintext] +---- +WARN 03:12:11,124 Using Pauser.sleepy() as not enough processors, have 2, needs 8+ +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427328|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE AuditLogKeyspace; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427329|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE "auditlogkeyspace" +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711446279|type :SELECT|category:QUERY|ks:auditlogkeyspace|scope:t|operation:SELECT * FROM t; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564713878834|type :DROP_TABLE|category:DDL|ks:auditlogkeyspace|scope:t|operation:DROP TABLE IF EXISTS +AuditLogKeyspace.t; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42382|timestamp:1564714618360|ty +pe:REQUEST_FAILURE|category:ERROR|operation:CREATE KEYSPACE AuditLogKeyspace +WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};; Cannot add +existing keyspace "auditlogkeyspace" +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714690968|type :DROP_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:DROP KEYSPACE AuditLogKeyspace; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42406|timestamp:1564714708329|ty pe:CREATE_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:CREATE KEYSPACE +AuditLogKeyspace +WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; +Type: AuditLog +LogMessage: +user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714870678|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE auditlogkeyspace; +[ec2-user@ip-10-0-2-238 hourly]$ +---- + +== Diagnostic events for user audit logging + +Any native transport-enabled client can subscribe to audit log events for diagnosing cluster issues. +These events can be consumed by external tools to implement a Cassandra user auditing solution. diff --git a/doc/source/modules/cassandra/pages/new/fqllogging.adoc b/doc/source/modules/cassandra/pages/new/fqllogging.adoc new file mode 100644 index 000000000000..84febb5d5678 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/fqllogging.adoc @@ -0,0 +1,566 @@ += Full Query Logging + +Apache Cassandra 4.0 adds a new highly performant feature that supports live query logging (https://issues.apache.org/jira/browse/CASSANDRA-13983[CASSANDRA-13983]). +FQL is safe for production use, with configurable limits to heap memory and disk space to prevent out-of-memory errors. +This feature is useful for live traffic capture, as well as traffic replay. +The tool provided can be used for both debugging query traffic and migration. +New ``nodetool`` options are also added to enable, disable or reset FQL, as well as a new tool to read and replay the binary logs. +The full query logging (FQL) capability uses http://github.com/OpenHFT/Chronicle-Queue[Chronicle-Queue] to rotate a log of queries. +Full query logs will be referred to as *logs* for the remainder of the page. + +Some of the features of FQL are: + +* The impact on query latency is reduced by asynchronous single-thread log entry writes to disk. +* Heap memory usage is bounded by a weighted queue, with configurable maximum weight sitting in front of logging thread. +* If the weighted queue is full, producers can be blocked or samples can be dropped. +* Disk utilization is bounded by a configurable size, deleting old log segments once the limit is reached. +* A flexible schema binary format, http://github.com/OpenHFT/Chronicle-Wire[Chronicle-Wire], for on-disk serialization that can skip unrecognized fields, add new ones, and omit old ones. +* Can be enabled, disabled, or reset (to delete on-disk data) using the JMX tool, ``nodetool``. +* Can configure the settings in either the `cassandra.yaml` file or by using ``nodetool``. +* Introduces new ``fqltool`` that currently can ``Dump`` the binary logs to a readable format. Other options are ``Replay`` and ``Compare``. + +FQL logs all successful Cassandra Query Language (CQL) requests, both events that modify the data and those that query. +While audit logs also include CQL requests, FQL logs only the CQL request. This difference means that FQL can be used to replay or compare logs, which audit logging cannot. FQL is useful for debugging, performance benchmarking, testing and auditing CQL queries, while audit logs are useful for compliance. + +In performance testing, FQL appears to have little or no overhead in ``WRITE`` only workloads, and a minor overhead in ``MIXED`` workload. + +== Query information logged + +The query log contains: + +* all queries invoked +* approximate time they were invoked +* any parameters necessary to bind wildcard values +* all query options + +The logger writes single or batched CQL queries after they finish, so only successfully completed queries are logged. +Failed or timed-out queries are not logged. Different data is logged, depending on the type of query. + +A single CQL query log entry contains: + +* query - CQL query text +* queryOptions - Options associated with the query invocation +* queryState - Timestamp state associated with the query invocation +* queryTimeMillis - Approximate time in milliseconds since the epoch since the query was invoked + +A batch CQL query log entry contains: + +* queries - CQL text of the queries +* queryOptions - Options associated with the query invocation +* queryState - Timestamp state associated with the query invocation +* batchTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked +* type - The type of the batch +* values - Values to bind to as parameters for the queries + +Because FQL is backed by `Binlog`, the performance and footprint are predictable, with minimal impact on log record producers. +Performance safety prevents the producers from overloading the log, using a weighted queue to drop records if the logging falls behind. +Single-thread asynchronous writing produces the logs. Chronicle-Queue provides an easy method of rolling the logs. + +== Logging information logged + +FQL also tracks information about the stored log files: + +* Stored log files that are added and their storage impact. Deletes them if over storage limit. +* The log files in Chronicle-Queue that have already rolled +* The number of bytes in the log files that have already rolled + +== Logging sequence + +The logger follows a well-defined sequence of events: + +. The consumer thread that writes log records is started. This action can occur only once. +. The consumer thread offers a record to the log. If the in-memory queue is full, the record will be dropped and offer returns a `false` value. +. If accepted, the record is entered into the log. If the in-memory queue is full, the putting thread will be blocked until there is space or it is interrupted. +. The buffers are cleaned up at thread exit. Finalization will check again, to ensure there are no stragglers in the queue. +. The consumer thread is stopped. It can be called multiple times. + +== Using FQL + +To use FQL, two actions must be completed. FQL must be configured using either the `cassandra.yaml` file or ``nodetool``, and logging must be enabled using ``nodetool enablefullquerylog``. +With either method, at a minimum, the path to the log directory must be specified. +Both actions are completed on a per-node basis. +Full query logs are generated on each enabled node, so logs on each node will have that node's queries. + +== Configuring FQL in cassandra.yaml + +The `cassandra.yaml` file can be used to configure FQL before enabling the feature with ``nodetool``. + +The file includes the following options that can be uncommented for use: + +[source, yaml] +---- +# default options for full query logging - these can be overridden from command line +# when executing nodetool enablefullquerylog +#full_query_logging_options: + # log_dir: + # roll_cycle: HOURLY + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + # archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: + # archive_command: + # max_archive_retries: 10 +---- + +=== log_dir + +To write logs, an existing directory must be set in ``log_dir``. + +The directory must have appropriate permissions set to allow reading, writing, and executing. +Logging will recursively delete the directory contents as needed. +Do not place links in this directory to other sections of the filesystem. +For example, ``log_dir: /tmp/cassandrafullquerylog``. + +=== roll_cycle + +The ``roll_cycle`` defines the frequency with which the log segments are rolled. +Supported values are ``HOURLY`` (default), ``MINUTELY``, and ``DAILY``. +For example: ``roll_cycle: DAILY`` + +=== block + +The ``block`` option specifies whether FQL should block writing or drop log records if FQL falls behind. Supported boolean values are ``true`` (default) or ``false``. +For example: ``block: false`` to drop records + +=== max_queue_weight + +The ``max_queue_weight`` option sets the maximum weight of in-memory queue for records waiting to be written to the file before blocking or dropping. The option must be set to a positive value. The default value is 268435456, or 256 MiB. +For example, to change the default: ``max_queue_weight: 134217728 # 128 MiB`` + +=== max_log_size + +The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The option must be set to a positive value. The default is 17179869184, or 16 GiB. +For example, to change the default: ``max_log_size: 34359738368 # 32 GiB`` + +=== archive_command + +The ``archive_command`` option sets the user-defined archive script to execute on rolled log files. +When not defined, files are deleted, with the default ``""`` which then maps to `org.apache.cassandra.utils.binlog.DeletingArchiver`. +For example: ``archive_command: /usr/local/bin/archiveit.sh %path # %path is the file being rolled`` + +=== max_archive_retries + +The ``max_archive_retries`` option sets the max number of retries of failed archive commands. The default is 10. +For example: ``max_archive_retries: 10`` + +FQL can also be configured using ``nodetool`` when enabling the feature, and will override any values set in the `cassandra.yaml` file, as discussed in the next section. + +== Enabling FQL + +FQL is enabled on a per-node basis using the ``nodetool enablefullquerylog`` command. At a minimum, the path to the logging directory must be defined, if ``log_dir`` is not set in the `cassandra.yaml` file. + +The syntax of the ``nodetool enablefullquerylog`` command has all the same options that can be set in the ``cassandra.yaml`` file. +In addition, ``nodetool`` has options to set which host and port to run the command on, and username and password if the command requires authentication. + +[source, plaintext] +---- + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablefullquerylog + [--archive-command ] [--blocking] + [--max-archive-retries ] + [--max-log-size ] [--max-queue-weight ] + [--path ] [--roll-cycle ] + + OPTIONS + --archive-command + Command that will handle archiving rolled full query log files. + Format is "/path/to/script.sh %path" where %path will be replaced + with the file to archive + + --blocking + If the queue is full whether to block producers or drop samples. + + -h , --host + Node hostname or ip address + + --max-archive-retries + Max number of archive retries. + + --max-log-size + How many bytes of log data to store before dropping segments. Might + not be respected if a log file hasn't rolled so it can be deleted. + + --max-queue-weight + Maximum number of bytes of query data to queue to disk before + blocking or dropping samples. + + -p , --port + Remote jmx agent port number + + --path + Path to store the full query log at. Will have it's contents + recursively deleted. + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + --roll-cycle + How often to roll the log file (MINUTELY, HOURLY, DAILY). + + -u , --username + Remote jmx agent username +---- + +To enable FQL, run the following command on each node in the cluster on which you want to enable logging: + +[source, bash] +---- +$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog +---- + +== Disabling or resetting FQL + +Use the ``nodetool disablefullquerylog`` to disable logging. +Use ``nodetool resetfullquerylog`` to stop FQL and clear the log files in the configured directory. +**IMPORTANT:** Using ``nodetool resetfullquerylog`` will delete the log files! Do not use this command unless you need to delete all log files. + +== fqltool + +The ``fqltool`` command is used to view (dump), replay, or compare logs. +``fqltool dump`` converts the binary log files into human-readable format; only the log directory must be supplied as a command-line option. + +``fqltool replay`` (https://issues.apache.org/jira/browse/CASSANDRA-14618[CASSANDRA-14618]) enables replay of logs. +The command can run from a different machine or cluster for testing, debugging, or performance benchmarking. +The command can also be used to recreate a dropped database object. +Use ``fqltool replay`` to record and compare different runs of production traffic against different versions/configurations of Cassandra or different clusters. +Another use is to gather logs from several machines and replay them in “order” by the timestamps recorded. + +The syntax of ``fqltool replay`` is: + +[source, plaintext] +---- + fqltool replay [--keyspace ] [--results ] + [--store-queries ] --target ... [--] + [...] + + OPTIONS + --keyspace + Only replay queries against this keyspace and queries without + keyspace set. + + --results + Where to store the results of the queries, this should be a + directory. Leave this option out to avoid storing results. + + --store-queries + Path to store the queries executed. Stores queries in the same order + as the result sets are in the result files. Requires --results + + --target + Hosts to replay the logs to, can be repeated to replay to more + hosts. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Paths containing the FQ logs to replay. +---- + +``fqltool compare`` (https://issues.apache.org/jira/browse/CASSANDRA-14619[CASSANDRA-14619]) compares result files generated by ``fqltool replay``. +The command uses recorded runs from ``fqltool replay`` and compareslog, outputting any differences (potentially all queries). +It also stores each row as a separate chronicle document to avoid reading the entire result from in-memory when comparing. + +The syntax of ``fqltool compare`` is: + +[source, plaintext] +---- + fqltool compare --queries [--] [...] + + OPTIONS + --queries + Directory to read the queries from. It is produced by the fqltool + replay --store-queries option. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Directories containing result files to compare. +---- + +The comparison sets the following marks: + +* Mark the beginning of a query set: + +[source, plaintext] +---- + version: int16 + type: column_definitions + column_count: int32; + column_definition: text, text + column_definition: text, text + .... +---- + +* Mark a failed query set: + +[source, plaintext] +---- + version: int16 + type: query_failed + message: text +---- + +* Mark a row set: + +[source, plaintext] +---- + version: int16 + type: row + row_column_count: int32 + column: bytes +---- + +* Mark the end of a result set: + +[source, plaintext] +---- + version: int16 + type: end_resultset +---- + +== Example + +[arabic, start=1] +. To demonstrate FQL, first configure and enable FQL on a node in your cluster: + +[source, bash] +---- +$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog +---- + +[arabic, start=2] +. Now create a demo keyspace and table and insert some data using ``cqlsh``: + +[source, cql] +---- + cqlsh> CREATE KEYSPACE querylogkeyspace + ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + cqlsh> USE querylogkeyspace; + cqlsh:querylogkeyspace> CREATE TABLE t ( + ...id int, + ...k int, + ...v text, + ...PRIMARY KEY (id) + ... ); + cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + cqlsh:querylogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); +---- + +[arabic, start=3] +. Then check that the data is inserted: + +[source, plaintext] +---- + cqlsh:querylogkeyspace> SELECT * FROM t; + + id | k | v + ----+---+------ + 0 | 1 | val1 + + (1 rows) +---- + +[arabic, start=4] +. Use the ``fqltool dump`` command to view the logs. + +[source, bash] +---- +$ fqltool dump /tmp/cassandrafullquerylog +---- + +This command will return a readable version of the log. Here is a partial sample of the log for the commands in this demo: + +[source, plaintext] +---- +WARN [main] 2019-08-02 03:07:53,635 Slf4jExceptionHandler.java:42 - Using Pauser.sleepy() as not enough processors, have 2, needs 8+ + Type: single-query + Query start time: 1564708322030 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system.peers + Values: + + Type: single-query + Query start time: 1564708322054 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system.local WHERE key='local' + Values: + + Type: single-query + Query start time: 1564708322109 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.keyspaces + Values: + + Type: single-query + Query start time: 1564708322116 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.tables + Values: + + Type: single-query + Query start time: 1564708322139 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.columns + Values: + + Type: single-query + Query start time: 1564708322142 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.functions + Values: + + Type: single-query + Query start time: 1564708322141 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.aggregates + Values: + + Type: single-query + Query start time: 1564708322143 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.types + Values: + + Type: single-query + Query start time: 1564708322144 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.indexes + Values: + + Type: single-query + Query start time: 1564708322145 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.views + Values: + + Type: single-query + Query start time: 1564708345408 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: CREATE KEYSPACE querylogkeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + Values: + + Type: single-query + Query start time: 1564708360873 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: USE querylogkeyspace; + Values: + + Type: single-query + Query start time: 1564708360874 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: USE "querylogkeyspace" + Values: + + Type: single-query + Query start time: 1564708378837 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: CREATE TABLE t ( + id int, + k int, + v text, + PRIMARY KEY (id) + ); + Values: + + Type: single-query + Query start time: 1564708379247 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708379 + Query: SELECT * FROM system_schema.tables WHERE keyspace_name = 'querylogkeyspace' AND table_name = 't' + Values: + + Type: single-query + Query start time: 1564708397144 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708397 + Query: INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + Values: + + Type: single-query + Query start time: 1564708434782 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708434 + Query: SELECT * FROM t; + Values: +---- + +[arabic, start=5] +. To demonstrate ``fqltool replay``, first drop the keyspace. + +[source, cql] +---- +cqlsh:querylogkeyspace> DROP KEYSPACE querylogkeyspace; +---- + +[arabic, start=6] +. Now run ``fqltool replay`` specifying the directories in which to store the results of the queries and +the list of queries run, respectively, in `--results` and `--store-queries`: + +[source, bash] +---- +$ fqltool replay \ +--keyspace querylogkeyspace --results /cassandra/fql/logs/results/replay \ +--store-queries /cassandra/fql/logs/queries/replay \ +-- target 3.91.56.164 \ +/tmp/cassandrafullquerylog +---- + +The ``--results`` and ``--store-queries`` directories are optional, but if ``--store-queries`` is set, then ``--results`` must also be set. +The ``--target`` specifies the node on which to replay to logs. + +[arabic, start=7] +. Check that the keyspace was replayed and exists again using the ``DESCRIBE KEYSPACES`` command: + +[source, cql] +---- + cqlsh:querylogkeyspace> DESC KEYSPACES; + + system_schema system system_distributed system_virtual_schema + system_auth querylogkeyspace system_traces system_views +---- diff --git a/doc/source/modules/cassandra/pages/new/index.adoc b/doc/source/modules/cassandra/pages/new/index.adoc new file mode 100644 index 000000000000..50fafa756ff3 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/index.adoc @@ -0,0 +1,11 @@ += New Features in Apache Cassandra 4.0 + +This section covers the new features in Apache Cassandra 4.0. + +* xref:new/java11.adoc[Java 11] +* xref:new/virtualtables.adoc[Virtual tables] +* xref:new/auditlogging.adoc[Audit logging] +* xref:new/fqllogging.adoc[Full query logging] +* xref:new/messaging.adoc[Messaging] +* xref:new/streaming.adoc[Streaming] +* xref:new/transientreplication.adoc[Transient replication] diff --git a/doc/source/modules/cassandra/pages/new/java11.adoc b/doc/source/modules/cassandra/pages/new/java11.adoc new file mode 100644 index 000000000000..f3efc50c1ac4 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/java11.adoc @@ -0,0 +1,292 @@ += Support for Java 11 + +In the new Java release cadence a new Java version is made available +every six months. The more frequent release cycle is favored as it +brings new Java features to the developers as and when they are +developed without the wait that the earlier 3 year release model +incurred. Not every Java version is a Long Term Support (LTS) version. +After Java 8 the next LTS version is Java 11. Java 9, 10, 12 and 13 are +all non-LTS versions. + +One of the objectives of the Apache Cassandra 4.0 version is to support +the recent LTS Java versions 8 and 11 +(https://issues.apache.org/jira/browse/CASSANDRA-9608[CASSANDRA-9608]). +Java 8 and Java 11 may be used to build and run Apache Cassandra 4.0. + +*Note*: Support for JDK 11 in Apache Cassandra 4.0 is an experimental +feature, and not recommended for production use. + +== Support Matrix + +The support matrix for the Java versions for compiling and running +Apache Cassandra 4.0 is detailed in Table 1. The build version is along +the vertical axis and the run version is along the horizontal axis. + +Table 1 : Support Matrix for Java + +[width="68%",cols="34%,30%,36%",] +|=== +| |Java 8 (Run) |Java 11 (Run) +|Java 8 (Build) |Supported |Supported +|Java 11(Build) |Not Supported |Supported +|=== + +Essentially Apache 4.0 source code built with Java 11 cannot be run with +Java 8. Next, we shall discuss using each of Java 8 and 11 to build and +run Apache Cassandra 4.0. + +== Using Java 8 to Build + +To start with, install Java 8. As an example, for installing Java 8 on +RedHat Linux the command is as follows: + +.... +$ sudo yum install java-1.8.0-openjdk-devel +.... + +Set `JAVA_HOME` and `JRE_HOME` environment variables in the shell bash +script. First, open the bash script: + +.... +$ sudo vi ~/.bashrc +.... + +Set the environment variables including the `PATH`. + +.... +$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk +$ export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre +$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin +.... + +Download and install Apache Cassandra 4.0 source code from the Git along +with the dependencies. + +.... +$ git clone https://github.com/apache/cassandra.git +.... + +If Cassandra is already running stop Cassandra with the following +command. + +.... +[ec2-user@ip-172-30-3-146 bin]$ ./nodetool stopdaemon +.... + +Build the source code from the `cassandra` directory, which has the +`build.xml` build script. The Apache Ant uses the Java version set in +the `JAVA_HOME` environment variable. + +.... +$ cd ~/cassandra +$ ant +.... + +Apache Cassandra 4.0 gets built with Java 8. Set the environment +variable for `CASSANDRA_HOME` in the bash script. Also add the +`CASSANDRA_HOME/bin` to the `PATH` variable. + +.... +$ export CASSANDRA_HOME=~/cassandra +$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CASSANDRA_HOME/bin +.... + +To run Apache Cassandra 4.0 with either of Java 8 or Java 11 run the +Cassandra application in the `CASSANDRA_HOME/bin` directory, which is in +the `PATH` env variable. + +.... +$ cassandra +.... + +The Java version used to run Cassandra gets output as Cassandra is +getting started. As an example if Java 11 is used, the run output should +include similar to the following output snippet: + +.... +INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:480 - Hostname: ip-172-30-3- +146.ec2.internal:7000:7001 +INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:487 - JVM vendor/version: OpenJDK +64-Bit Server VM/11.0.3 +INFO [main] 2019-07-31 21:18:16,863 CassandraDaemon.java:488 - Heap size: +1004.000MiB/1004.000MiB +.... + +The following output indicates a single node Cassandra 4.0 cluster has +started. + +.... +INFO [main] 2019-07-31 21:18:19,687 InboundConnectionInitiator.java:130 - Listening on +address: (127.0.0.1:7000), nic: lo, encryption: enabled (openssl) +... +... +INFO [main] 2019-07-31 21:18:19,850 StorageService.java:512 - Unable to gossip with any +peers but continuing anyway since node is in its own seed list +INFO [main] 2019-07-31 21:18:19,864 StorageService.java:695 - Loading persisted ring state +INFO [main] 2019-07-31 21:18:19,865 StorageService.java:814 - Starting up server gossip +INFO [main] 2019-07-31 21:18:20,088 BufferPool.java:216 - Global buffer pool is enabled, +when pool is exhausted (max is 251.000MiB) it will allocate on heap +INFO [main] 2019-07-31 21:18:20,110 StorageService.java:875 - This node will not auto +bootstrap because it is configured to be a seed node. +... +... +INFO [main] 2019-07-31 21:18:20,809 StorageService.java:1507 - JOINING: Finish joining ring +INFO [main] 2019-07-31 21:18:20,921 StorageService.java:2508 - Node 127.0.0.1:7000 state +jump to NORMAL +.... + +== Using Java 11 to Build + +If Java 11 is used to build Apache Cassandra 4.0, first Java 11 must be +installed and the environment variables set. As an example, to download +and install Java 11 on RedHat Linux run the following command. + +.... +$ yum install java-11-openjdk-devel +.... + +Set the environment variables in the bash script for Java 11. The first +command is to open the bash script. + +.... +$ sudo vi ~/.bashrc +$ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk +$ export JRE_HOME=/usr/lib/jvm/java-11-openjdk/jre +$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin +.... + +To build source code with Java 11 one of the following two options must +be used. + +____ +[arabic] +. {blank} ++ +Include Apache Ant command-line option `-Duse.jdk=11` as follows::: +.... +$ ant -Duse.jdk=11 +.... +. {blank} ++ +Set environment variable `CASSANDRA_USE_JDK11` to `true`::: +.... +$ export CASSANDRA_USE_JDK11=true +.... +____ + +As an example, set the environment variable `CASSANDRA_USE_JDK11` to +`true`. + +.... +[ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true +[ec2-user@ip-172-30-3-146 cassandra]$ ant +Buildfile: /home/ec2-user/cassandra/build.xml +.... + +Or, set the command-line option. + +.... +[ec2-user@ip-172-30-3-146 cassandra]$ ant -Duse.jdk11=true +.... + +The build output should include the following. + +.... +_build_java: + [echo] Compiling for Java 11 +... +... +build: + +_main-jar: + [copy] Copying 1 file to /home/ec2-user/cassandra/build/classes/main/META-INF + [jar] Building jar: /home/ec2-user/cassandra/build/apache-cassandra-4.0-SNAPSHOT.jar +... +... +_build-test: + [javac] Compiling 739 source files to /home/ec2-user/cassandra/build/test/classes + [copy] Copying 25 files to /home/ec2-user/cassandra/build/test/classes +... +... +jar: + [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/stress/META-INF + [mkdir] Created dir: /home/ec2-user/cassandra/build/tools/lib + [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/stress.jar + [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/fqltool/META-INF + [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/fqltool.jar + +BUILD SUCCESSFUL +Total time: 1 minute 3 seconds +[ec2-user@ip-172-30-3-146 cassandra]$ +.... + +== Common Issues + +One of the two options mentioned must be used to compile with JDK 11 or +the build fails and the following error message is output. + +.... +[ec2-user@ip-172-30-3-146 cassandra]$ ant +Buildfile: /home/ec2-user/cassandra/build.xml +validate-build-conf: + +BUILD FAILED +/home/ec2-user/cassandra/build.xml:293: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true must +be set when building from java 11 +Total time: 1 second +[ec2-user@ip-172-30-3-146 cassandra]$ +.... + +The Java 11 built Apache Cassandra 4.0 source code may be run with Java +11 only. If a Java 11 built code is run with Java 8 the following error +message gets output. + +.... +[root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com +Last login: Wed Jul 31 20:47:26 2019 from 75.155.255.51 +[ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME +/usr/lib/jvm/java-1.8.0-openjdk +[ec2-user@ip-172-30-3-146 ~]$ cassandra +... +... +Error: A JNI error has occurred, please check your installation and try again +Exception in thread "main" java.lang.UnsupportedClassVersionError: +org/apache/cassandra/service/CassandraDaemon has been compiled by a more recent version of +the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes +class file versions up to 52.0 + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at ... +... +.... + +The `CASSANDRA_USE_JDK11` variable or the command-line option +`-Duse.jdk11` cannot be used to build with Java 8. To demonstrate set +`JAVA_HOME` to version 8. + +.... +[root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com +Last login: Wed Jul 31 21:41:50 2019 from 75.155.255.51 +[ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME +/usr/lib/jvm/java-1.8.0-openjdk +.... + +Set the `CASSANDRA_USE_JDK11=true` or command-line option +`-Duse.jdk11=true`. Subsequently, run Apache Ant to start the build. The +build fails with error message listed. + +.... +[ec2-user@ip-172-30-3-146 ~]$ cd +cassandra +[ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true +[ec2-user@ip-172-30-3-146 cassandra]$ ant +Buildfile: /home/ec2-user/cassandra/build.xml + +validate-build-conf: + +BUILD FAILED +/home/ec2-user/cassandra/build.xml:285: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true cannot +be set when building from java 8 + +Total time: 0 seconds +.... diff --git a/doc/source/modules/cassandra/pages/new/messaging.adoc b/doc/source/modules/cassandra/pages/new/messaging.adoc new file mode 100644 index 000000000000..07a423bf1502 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/messaging.adoc @@ -0,0 +1,360 @@ += Improved Internode Messaging + +Apache Cassandra 4.0 has added several new improvements to internode +messaging. + +== Optimized Internode Messaging Protocol + +The internode messaging protocol has been optimized +(https://issues.apache.org/jira/browse/CASSANDRA-14485[CASSANDRA-14485]). +Previously the `IPAddressAndPort` of the sender was included with each +message that was sent even though the `IPAddressAndPort` had already +been sent once when the initial connection/session was established. In +Cassandra 4.0 `IPAddressAndPort` has been removed from every separate +message sent and only sent when connection/session is initiated. + +Another improvement is that at several instances (listed) a fixed 4-byte +integer value has been replaced with `vint` as a `vint` is almost always +less than 1 byte: + +* The `paramSize` (the number of parameters in the header) +* Each individual parameter value +* The `payloadSize` + +== NIO Messaging + +In Cassandra 4.0 peer-to-peer (internode) messaging has been switched to +non-blocking I/O (NIO) via Netty +(https://issues.apache.org/jira/browse/CASSANDRA-8457[CASSANDRA-8457]). + +As serialization format, each message contains a header with several +fixed fields, an optional key-value parameters section, and then the +message payload itself. Note: the IP address in the header may be either +IPv4 (4 bytes) or IPv6 (16 bytes). + +____ +The diagram below shows the IPv4 address for brevity. +____ + +.... +1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 +0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| PROTOCOL MAGIC | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Message ID | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Timestamp | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Addr len | IP Address (IPv4) / ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/ | Verb / ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/ | Parameters size / ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/ | Parameter data / ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +/ | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Payload size | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| / +/ Payload / +/ | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +.... + +An individual parameter has a String key and a byte array value. The key +is serialized with its length, encoded as two bytes, followed by the +UTF-8 byte encoding of the string. The body is serialized with its +length, encoded as four bytes, followed by the bytes of the value. + +== Resource limits on Queued Messages + +System stability is improved by enforcing strict resource limits +(https://issues.apache.org/jira/browse/CASSANDRA-15066[CASSANDRA-15066]) +on the number of outbound messages that are queued, measured by the +`serializedSize` of the message. There are three separate limits imposed +simultaneously to ensure that progress is always made without any +reasonable combination of failures impacting a node’s stability. + +[arabic] +. Global, per-endpoint and per-connection limits are imposed on messages +queued for delivery to other nodes and waiting to be processed on +arrival from other nodes in the cluster. These limits are applied to the +on-wire size of the message being sent or received. +. The basic per-link limit is consumed in isolation before any endpoint +or global limit is imposed. Each node-pair has three links: urgent, +small and large. So any given node may have a maximum of +`N*3 * (internode_application_send_queue_capacity_in_bytes + internode_application_receive_queue_capacity_in_bytes)` +messages queued without any coordination between them although in +practice, with token-aware routing, only RF*tokens nodes should need to +communicate with significant bandwidth. +. The per-endpoint limit is imposed on all messages exceeding the +per-link limit, simultaneously with the global limit, on all links to or +from a single node in the cluster. The global limit is imposed on all +messages exceeding the per-link limit, simultaneously with the +per-endpoint limit, on all links to or from any node in the cluster. The +following configuration settings have been added to `cassandra.yaml` for +resource limits on queued messages. + +.... +internode_application_send_queue_capacity_in_bytes: 4194304 #4MiB +internode_application_send_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB +internode_application_send_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB +internode_application_receive_queue_capacity_in_bytes: 4194304 #4MiB +internode_application_receive_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB +internode_application_receive_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB +.... + +== Virtual Tables for Messaging Metrics + +Metrics is improved by keeping metrics using virtual tables for +inter-node inbound and outbound messaging +(https://issues.apache.org/jira/browse/CASSANDRA-15066[CASSANDRA-15066]). +For inbound messaging a virtual table (`internode_inbound`) has been +added to keep metrics for: + +* Bytes and count of messages that could not be serialized or flushed +due to an error +* Bytes and count of messages scheduled +* Bytes and count of messages successfully processed +* Bytes and count of messages successfully received +* Nanos and count of messages throttled +* Bytes and count of messages expired +* Corrupt frames recovered and unrecovered + +A separate virtual table (`internode_outbound`) has been added for +outbound inter-node messaging. The outbound virtual table keeps metrics +for: + +* Bytes and count of messages pending +* Bytes and count of messages sent +* Bytes and count of messages expired +* Bytes and count of messages that could not be sent due to an error +* Bytes and count of messages overloaded +* Active Connection Count +* Connection Attempts +* Successful Connection Attempts + +== Hint Messaging + +A specialized version of hint message that takes an already encoded in a +`ByteBuffer` hint and sends it verbatim has been added. It is an +optimization for when dispatching a hint file of the current messaging +version to a node of the same messaging version, which is the most +common case. It saves on extra `ByteBuffer` allocations one redundant +hint deserialization-serialization cycle. + +== Internode Application Timeout + +A configuration setting has been added to `cassandra.yaml` for the +maximum continuous period a connection may be unwritable in application +space. + +.... +# internode_application_timeout_in_ms = 30000 +.... + +Some other new features include logging of message size to trace message +for tracing a query. + +== Paxos prepare and propose stage for local requests optimized + +In pre-4.0 Paxos prepare and propose messages always go through entire +`MessagingService` stack in Cassandra even if request is to be served +locally, we can enhance and make local requests severed w/o involving +`MessagingService`. Similar things are done elsewhere in Cassandra which +skips `MessagingService` stage for local requests. + +This is what it looks like in pre 4.0 if we have tracing on and run a +light-weight transaction: + +.... +Sending PAXOS_PREPARE message to /A.B.C.D [MessagingService-Outgoing-/A.B.C.D] | 2017-09-11 +21:55:18.971000 | A.B.C.D | 15045 +… REQUEST_RESPONSE message received from /A.B.C.D [MessagingService-Incoming-/A.B.C.D] | +2017-09-11 21:55:18.976000 | A.B.C.D | 20270 +… Processing response from /A.B.C.D [SharedPool-Worker-4] | 2017-09-11 21:55:18.976000 | +A.B.C.D | 20372 +.... + +Same thing applies for Propose stage as well. + +In version 4.0 Paxos prepare and propose stage for local requests are +optimized +(https://issues.apache.org/jira/browse/CASSANDRA-13862[CASSANDRA-13862]). + +== Quality Assurance + +Several other quality assurance improvements have been made in version +4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-15066[CASSANDRA-15066]). + +=== Framing + +Version 4.0 introduces framing to all internode messages, i.e. the +grouping of messages into a single logical payload with headers and +trailers; these frames are guaranteed to either contain at most one +message, that is split into its own unique sequence of frames (for large +messages), or that a frame contains only complete messages. + +=== Corruption prevention + +Previously, intra-datacenter internode messages would be unprotected +from corruption by default, as only LZ4 provided any integrity checks. +All messages to post 4.0 nodes are written to explicit frames, which may +be: + +* LZ4 encoded +* CRC protected + +The Unprotected option is still available. + +=== Resilience + +For resilience, all frames are written with a separate CRC protected +header, of 8 and 6 bytes respectively. If corruption occurs in this +header, the connection must be reset, as before. If corruption occurs +anywhere outside of the header, the corrupt frame will be skipped, +leaving the connection intact and avoiding the loss of any messages +unnecessarily. + +Previously, any issue at any point in the stream would result in the +connection being reset, with the loss of any in-flight messages. + +=== Efficiency + +The overall memory usage, and number of byte shuffles, on both inbound +and outbound messages is reduced. + +Outbound the Netty LZ4 encoder maintains a chunk size buffer (64KiB), +that is filled before any compressed frame can be produced. Our frame +encoders avoid this redundant copy, as well as freeing 192KiB per +endpoint. + +Inbound, frame decoders guarantee only to copy the number of bytes +necessary to parse a frame, and to never store more bytes than +necessary. This improvement applies twice to LZ4 connections, improving +both the message decode and the LZ4 frame decode. + +=== Inbound Path + +Version 4.0 introduces several improvements to the inbound path. + +An appropriate message handler is used based on whether large or small +messages are expected on a particular connection as set in a flag. +`NonblockingBufferHandler`, running on event loop, is used for small +messages, and `BlockingBufferHandler`, running off event loop, for large +messages. The single implementation of `InboundMessageHandler` handles +messages of any size effectively by deriving size of the incoming +message from the byte stream. In addition to deriving size of the +message from the stream, incoming message expiration time is proactively +read, before attempting to deserialize the entire message. If it’s +expired at the time when a message is encountered the message is just +skipped in the byte stream altogether. And if a message fails to be +deserialized while still on the receiving side - say, because of table +id or column being unknown - bytes are skipped, without dropping the +entire connection and losing all the buffered messages. An immediately +reply back is sent to the coordinator node with the failure reason, +rather than waiting for the coordinator callback to expire. This logic +is extended to a corrupted frame; a corrupted frame is safely skipped +over without dropping the connection. + +Inbound path imposes strict limits on memory utilization. Specifically, +the memory occupied by all parsed, but unprocessed messages is bound - +on per-connection, per-endpoint, and global basis. Once a connection +exceeds its local unprocessed capacity and cannot borrow any permits +from per-endpoint and global reserve, it simply stops processing further +messages, providing natural backpressure - until sufficient capacity is +regained. + +=== Outbound Connections + +==== Opening a connection + +A consistent approach is adopted for all kinds of failure to connect, +including: refused by endpoint, incompatible versions, or unexpected +exceptions; + +* Retry forever, until either success or no messages waiting to deliver. +* Wait incrementally longer periods before reconnecting, up to a maximum +of 1s. +* While failing to connect, no reserve queue limits are acquired. + +==== Closing a connection + +* Correctly drains outbound messages that are waiting to be delivered +(unless disconnected and fail to reconnect). +* Messages written to a closing connection are either delivered or +rejected, with a new connection being opened if the old is irrevocably +closed. +* Unused connections are pruned eventually. + +==== Reconnecting + +We sometimes need to reconnect a perfectly valid connection, e.g. if the +preferred IP address changes. We ensure that the underlying connection +has no in-progress operations before closing it and reconnecting. + +==== Message Failure + +Propagates to callbacks instantly, better preventing overload by +reclaiming committed memory. + +===== Expiry + +* No longer experiences head-of-line blocking (e.g. undroppable message +preventing all droppable messages from being expired). +* While overloaded, expiry is attempted eagerly on enqueuing threads. +* While disconnected we schedule regular pruning, to handle the case +where messages are no longer being sent, but we have a large backlog to +expire. + +===== Overload + +* Tracked by bytes queued, as opposed to number of messages. + +===== Serialization Errors + +* Do not result in the connection being invalidated; the message is +simply completed with failure, and then erased from the frame. +* Includes detected mismatch between calculated serialization size to +actual. + +Failures to flush to network, perhaps because the connection has been +reset are not currently notified to callback handlers, as the necessary +information has been discarded, though it would be possible to do so in +future if we decide it is worth our while. + +==== QoS + +"Gossip" connection has been replaced with a general purpose "Urgent" +connection, for any small messages impacting system stability. + +==== Metrics + +We track, and expose via Virtual Table and JMX, the number of messages +and bytes that: we could not serialize or flush due to an error, we +dropped due to overload or timeout, are pending, and have successfully +sent. + +== Added a Message size limit + +Cassandra pre-4.0 doesn't protect the server from allocating huge +buffers for the inter-node Message objects. Adding a message size limit +would be good to deal with issues such as a malfunctioning cluster +participant. Version 4.0 introduced max message size config param, akin +to max mutation size - set to endpoint reserve capacity by default. + +== Recover from unknown table when deserializing internode messages + +As discussed in +(https://issues.apache.org/jira/browse/CASSANDRA-9289[CASSANDRA-9289]) +it would be nice to gracefully recover from seeing an unknown table in a +message from another node. Pre-4.0, we close the connection and +reconnect, which can cause other concurrent queries to fail. Version 4.0 +fixes the issue by wrapping message in-stream with +`TrackedDataInputPlus`, catching `UnknownCFException`, and skipping the +remaining bytes in this message. TCP won't be closed and it will remain +connected for other messages. diff --git a/doc/source/modules/cassandra/pages/new/streaming.adoc b/doc/source/modules/cassandra/pages/new/streaming.adoc new file mode 100644 index 000000000000..991bec77d1d9 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/streaming.adoc @@ -0,0 +1,217 @@ += Improved Streaming + +Apache Cassandra 4.0 has made several improvements to streaming. +Streaming is the process used by nodes of a cluster to exchange data in +the form of SSTables. Streaming of SSTables is performed for several +operations, such as: + +* SSTable Repair +* Host Replacement +* Range movements +* Bootstrapping +* Rebuild +* Cluster expansion + +== Streaming based on Netty + +Streaming in Cassandra 4.0 is based on Non-blocking Input/Output (NIO) +with Netty +(https://issues.apache.org/jira/browse/CASSANDRA-12229[CASSANDRA-12229]). +It replaces the single-threaded (or sequential), synchronous, blocking +model of streaming messages and transfer of files. Netty supports +non-blocking, asynchronous, multi-threaded streaming with which multiple +connections are opened simultaneously. Non-blocking implies that threads +are not blocked as they don’t wait for a response for a sent request. A +response could be returned in a different thread. With asynchronous, +connections and threads are decoupled and do not have a 1:1 relation. +Several more connections than threads may be opened. + +== Zero Copy Streaming + +Pre-4.0, during streaming Cassandra reifies the SSTables into objects. +This creates unnecessary garbage and slows down the whole streaming +process as some SSTables can be transferred as a whole file rather than +individual partitions. Cassandra 4.0 has added support for streaming +entire SSTables when possible +(https://issues.apache.org/jira/browse/CASSANDRA-14556[CASSANDRA-14556]) +for faster Streaming using ZeroCopy APIs. If enabled, Cassandra will use +ZeroCopy for eligible SSTables significantly speeding up transfers and +increasing throughput. A zero-copy path avoids bringing data into +user-space on both sending and receiving side. Any streaming related +operations will notice corresponding improvement. Zero copy streaming is +hardware bound; only limited by the hardware limitations (Network and +Disk IO ). + +=== High Availability + +In benchmark tests Zero Copy Streaming is 5x faster than partitions +based streaming. Faster streaming provides the benefit of improved +availability. A cluster’s recovery mainly depends on the streaming +speed, Cassandra clusters with failed nodes will be able to recover much +more quickly (5x faster). If a node fails, SSTables need to be streamed +to a replacement node. During the replacement operation, the new +Cassandra node streams SSTables from the neighboring nodes that hold +copies of the data belonging to this new node’s token range. Depending +on the amount of data stored, this process can require substantial +network bandwidth, taking some time to complete. The longer these range +movement operations take, the more the cluster availability is lost. +Failure of multiple nodes would reduce high availability greatly. The +faster the new node completes streaming its data, the faster it can +serve traffic, increasing the availability of the cluster. + +=== Enabling Zero Copy Streaming + +Zero copy streaming is enabled by setting the following setting in +`cassandra.yaml`. + +.... +stream_entire_sstables: true +.... + +By default zero copy streaming is enabled. + +=== SSTables Eligible for Zero Copy Streaming + +Zero copy streaming is used if all partitions within the SSTable need to +be transmitted. This is common when using `LeveledCompactionStrategy` or +when partitioning SSTables by token range has been enabled. All +partition keys in the SSTables are iterated over to determine the +eligibility for Zero Copy streaming. + +=== Benefits of Zero Copy Streaming + +When enabled, it permits Cassandra to zero-copy stream entire eligible +SSTables between nodes, including every component. This speeds up the +network transfer significantly subject to throttling specified by +`stream_throughput_outbound_megabits_per_sec`. + +Enabling this will reduce the GC pressure on sending and receiving node. +While this feature tries to keep the disks balanced, it cannot guarantee +it. This feature will be automatically disabled if internode encryption +is enabled. Currently this can be used with Leveled Compaction. + +=== Configuring for Zero Copy Streaming + +Throttling would reduce the streaming speed. The +`stream_throughput_outbound_megabits_per_sec` throttles all outbound +streaming file transfers on a node to the given total throughput in +Mbps. When unset, the default is 200 Mbps or 25 MB/s. + +.... +stream_throughput_outbound_megabits_per_sec: 200 +.... + +To run any Zero Copy streaming benchmark the +`stream_throughput_outbound_megabits_per_sec` must be set to a really +high value otherwise, throttling will be significant and the benchmark +results will not be meaningful. + +The `inter_dc_stream_throughput_outbound_megabits_per_sec` throttles all +streaming file transfer between the datacenters, this setting allows +users to throttle inter dc stream throughput in addition to throttling +all network stream traffic as configured with +`stream_throughput_outbound_megabits_per_sec`. When unset, the default +is 200 Mbps or 25 MB/s. + +.... +inter_dc_stream_throughput_outbound_megabits_per_sec: 200 +.... + +=== SSTable Components Streamed with Zero Copy Streaming + +Zero Copy Streaming streams entire SSTables. SSTables are made up of +multiple components in separate files. SSTable components streamed are +listed in Table 1. + +Table 1. SSTable Components + +[width="98%",cols="27%,73%",] +|=== +|SSTable Component |Description + +|Data.db |The base data for an SSTable: the remaining components can be +regenerated based on the data component. + +|Index.db |Index of the row keys with pointers to their positions in the +data file. + +|Filter.db |Serialized bloom filter for the row keys in the SSTable. + +|CompressionInfo.db |File to hold information about uncompressed data +length, chunk offsets etc. + +|Statistics.db |Statistical metadata about the content of the SSTable. + +|Digest.crc32 |Holds CRC32 checksum of the data file size_bytes. + +|CRC.db |Holds the CRC32 for chunks in an uncompressed file. + +|Summary.db |Holds SSTable Index Summary (sampling of Index component) + +|TOC.txt |Table of contents, stores the list of all components for the +SSTable. +|=== + +Custom component, used by e.g. custom compaction strategy may also be +included. + +== Repair Streaming Preview + +Repair with `nodetool repair` involves streaming of repaired SSTables +and a repair preview has been added to provide an estimate of the amount +of repair streaming that would need to be performed. Repair preview +(https://issues.apache.org/jira/browse/CASSANDRA-13257[CASSANDRA-13257]) +is invoke with `nodetool repair --preview` using option: + +.... +-prv, --preview +.... + +It determines ranges and amount of data to be streamed, but doesn't +actually perform repair. + +== Parallelizing of Streaming of Keyspaces + +The streaming of the different keyspaces for bootstrap and rebuild has +been parallelized in Cassandra 4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-4663[CASSANDRA-4663]). + +== Unique nodes for Streaming in Multi-DC deployment + +Range Streamer picks unique nodes to stream data from when number of +replicas in each DC is three or more +(https://issues.apache.org/jira/browse/CASSANDRA-4650[CASSANDRA-4650]). +What the optimization does is to even out the streaming load across the +cluster. Without the optimization, some node can be picked up to stream +more data than others. This patch allows to select dedicated node to +stream only one range. + +This will increase the performance of bootstrapping a node and will also +put less pressure on nodes serving the data. This does not affect if N < +3 in each DC as then it streams data from only 2 nodes. + +Stream Operation Types ^^^^^^^^^^^^^ + +It is important to know the type or purpose of a certain stream. Version +4.0 +(https://issues.apache.org/jira/browse/CASSANDRA-13064[CASSANDRA-13064]) +adds an `enum` to distinguish between the different types of streams. +Stream types are available both in a stream request and a stream task. +The different stream types are: + +* Restore replica count +* Unbootstrap +* Relocation +* Bootstrap +* Rebuild +* Bulk Load +* Repair + +== Disallow Decommission when number of Replicas will drop below configured RF + +https://issues.apache.org/jira/browse/CASSANDRA-12510[CASSANDRA-12510] +guards against decommission that will drop # of replicas below +configured replication factor (RF), and adds the `--force` option that +allows decommission to continue if intentional; force decommission of +this node even when it reduces the number of replicas to below +configured RF. diff --git a/doc/source/modules/cassandra/pages/new/transientreplication.adoc b/doc/source/modules/cassandra/pages/new/transientreplication.adoc new file mode 100644 index 000000000000..c939497e5e42 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/transientreplication.adoc @@ -0,0 +1,186 @@ += Transient Replication + +*Note*: + +Transient Replication +(https://issues.apache.org/jira/browse/CASSANDRA-14404[CASSANDRA-14404]) +is an experimental feature designed for expert Apache Cassandra users +who are able to validate every aspect of the database for their +application and deployment. That means being able to check that +operations like reads, writes, decommission, remove, rebuild, repair, +and replace all work with your queries, data, configuration, operational +practices, and availability requirements. Apache Cassandra 4.0 has the +initial implementation of transient replication. Future releases of +Cassandra will make this feature suitable for a wider audience. It is +anticipated that a future version will support monotonic reads with +transient replication as well as LWT, logged batches, and counters. +Being experimental, Transient replication is *not* recommended for +production use. + +== Objective + +The objective of transient replication is to decouple storage +requirements from data redundancy (or consensus group size) using +incremental repair, in order to reduce storage overhead. Certain nodes +act as full replicas (storing all the data for a given token range), and +some nodes act as transient replicas, storing only unrepaired data for +the same token ranges. + +The optimization that is made possible with transient replication is +called "Cheap quorums", which implies that data redundancy is increased +without corresponding increase in storage usage. + +Transient replication is useful when sufficient full replicas are +unavailable to receive and store all the data. Transient replication +allows you to configure a subset of replicas to only replicate data that +hasn't been incrementally repaired. As an optimization, we can avoid +writing data to a transient replica if we have successfully written data +to the full replicas. + +After incremental repair, transient data stored on transient replicas +can be discarded. + +== Enabling Transient Replication + +Transient replication is not enabled by default. Transient replication +must be enabled on each node in a cluster separately by setting the +following configuration property in `cassandra.yaml`. + +.... +enable_transient_replication: true +.... + +Transient replication may be configured with both `SimpleStrategy` and +`NetworkTopologyStrategy`. Transient replication is configured by +setting replication factor as `/`. + +As an example, create a keyspace with replication factor (RF) 3. + +.... +CREATE KEYSPACE CassandraKeyspaceSimple WITH replication = {'class': 'SimpleStrategy', +'replication_factor' : 4/1}; +.... + +As another example, `some_keysopace keyspace` will have 3 replicas in +DC1, 1 of which is transient, and 5 replicas in DC2, 2 of which are +transient: + +.... +CREATE KEYSPACE some_keysopace WITH replication = {'class': 'NetworkTopologyStrategy', +'DC1' : '3/1'', 'DC2' : '5/2'}; +.... + +Transiently replicated keyspaces only support tables with `read_repair` +set to `NONE`. + +Important Restrictions: + +* RF cannot be altered while some endpoints are not in a normal state +(no range movements). +* You can't add full replicas if there are any transient replicas. You +must first remove all transient replicas, then change the # of full +replicas, then add back the transient replicas. +* You can only safely increase number of transients one at a time with +incremental repair run in between each time. + +Additionally, transient replication cannot be used for: + +* Monotonic Reads +* Lightweight Transactions (LWTs) +* Logged Batches +* Counters +* Keyspaces using materialized views +* Secondary indexes (2i) + +== Cheap Quorums + +Cheap quorums are a set of optimizations on the write path to avoid +writing to transient replicas unless sufficient full replicas are not +available to satisfy the requested consistency level. Hints are never +written for transient replicas. Optimizations on the read path prefer +reading from transient replicas. When writing at quorum to a table +configured to use transient replication the quorum will always prefer +available full replicas over transient replicas so that transient +replicas don't have to process writes. Tail latency is reduced by rapid +write protection (similar to rapid read protection) when full replicas +are slow or unavailable by sending writes to transient replicas. +Transient replicas can serve reads faster as they don't have to do +anything beyond bloom filter checks if they have no data. With vnodes +and large cluster sizes they will not have a large quantity of data even +for failure of one or more full replicas where transient replicas start +to serve a steady amount of write traffic for some of their transiently +replicated ranges. + +== Speculative Write Option + +The `CREATE TABLE` adds an option `speculative_write_threshold` for use +with transient replicas. The option is of type `simple` with default +value as `99PERCENTILE`. When replicas are slow or unresponsive +`speculative_write_threshold` specifies the threshold at which a cheap +quorum write will be upgraded to include transient replicas. + +== Pending Ranges and Transient Replicas + +Pending ranges refers to the movement of token ranges between transient +replicas. When a transient range is moved, there will be a period of +time where both transient replicas would need to receive any write +intended for the logical transient replica so that after the movement +takes effect a read quorum is able to return a response. Nodes are _not_ +temporarily transient replicas during expansion. They stream data like a +full replica for the transient range before they can serve reads. A +pending state is incurred similar to how there is a pending state for +full replicas. Transient replicas also always receive writes when they +are pending. Pending transient ranges are sent a bit more data and +reading from them is avoided. + +== Read Repair and Transient Replicas + +Read repair never attempts to repair a transient replica. Reads will +always include at least one full replica. They should also prefer +transient replicas where possible. Range scans ensure the entire scanned +range performs replica selection that satisfies the requirement that +every range scanned includes one full replica. During incremental & +validation repair handling, at transient replicas anti-compaction does +not output any data for transient ranges as the data will be dropped +after repair, and transient replicas never have data streamed to them. + +== Transitioning between Full Replicas and Transient Replicas + +The additional state transitions that transient replication introduces +requires streaming and `nodetool cleanup` to behave differently. When +data is streamed it is ensured that it is streamed from a full replica +and not a transient replica. + +Transitioning from not replicated to transiently replicated means that a +node must stay pending until the next incremental repair completes at +which point the data for that range is known to be available at full +replicas. + +Transitioning from transiently replicated to fully replicated requires +streaming from a full replica and is identical to how data is streamed +when transitioning from not replicated to replicated. The transition is +managed so the transient replica is not read from as a full replica +until streaming completes. It can be used immediately for a write +quorum. + +Transitioning from fully replicated to transiently replicated requires +cleanup to remove repaired data from the transiently replicated range to +reclaim space. It can be used immediately for a write quorum. + +Transitioning from transiently replicated to not replicated requires +cleanup to be run to remove the formerly transiently replicated data. + +When transient replication is in use ring changes are supported +including add/remove node, change RF, add/remove DC. + +== Transient Replication supports EACH_QUORUM + +(https://issues.apache.org/jira/browse/CASSANDRA-14727[CASSANDRA-14727]) +adds support for Transient Replication support for `EACH_QUORUM`. Per +(https://issues.apache.org/jira/browse/CASSANDRA-14768[CASSANDRA-14768]), +we ensure we write to at least a `QUORUM` of nodes in every DC, +regardless of how many responses we need to wait for and our requested +consistency level. This is to minimally surprise users with transient +replication; with normal writes, we soft-ensure that we reach `QUORUM` +in all DCs we are able to, by writing to every node; even if we don't +wait for ACK, we have in both cases sent sufficient messages. diff --git a/doc/source/modules/cassandra/pages/new/virtualtables.adoc b/doc/source/modules/cassandra/pages/new/virtualtables.adoc new file mode 100644 index 000000000000..b18ba3131674 --- /dev/null +++ b/doc/source/modules/cassandra/pages/new/virtualtables.adoc @@ -0,0 +1,410 @@ += Virtual Tables + +Apache Cassandra 4.0 implements virtual tables (https://issues.apache.org/jira/browse/CASSANDRA-7622[CASSANDRA-7622]). +Virtual tables are tables backed by an API instead of data explicitly managed and stored as SSTables. +Apache Cassandra 4.0 implements a virtual keyspace interface for virtual tables. +Virtual tables are specific to each node. + +Some of the features of virtual tables are the ability to: + +* expose metrics through CQL +* expose YAML configuration information + +Virtual keyspaces and tables are quite different from regular tables and keyspaces: + +* Virtual tables are created in special keyspaces and not just any keyspace. +* Virtual tables are managed by Cassandra. Users cannot run DDL to create new virtual tables or DML to modify existing virtual tables. +* Virtual tables are currently read-only, although that may change in a later version. +* Virtual tables are local only, non-distributed, and thus not replicated. +* Virtual tables have no associated SSTables. +* Consistency level of the queries sent to virtual tables are ignored. +* All existing virtual tables use `LocalPartitioner`. +Since a virtual table is not replicated the partitioner sorts in order of partition keys instead of by their hash. +* Making advanced queries using `ALLOW FILTERING` and aggregation functions can be executed in virtual tables, even though in normal tables we dont recommend it. + +== Virtual Keyspaces + +Apache Cassandra 4.0 has added two new keyspaces for virtual tables: + +* `system_virtual_schema` +* `system_views`. + +The `system_virtual_schema` keyspace has three tables: `keyspaces`, +`columns` and `tables` for the virtual keyspace, table, and column definitions, respectively. +These tables contain schema information for the virtual tables. +It is used by Cassandra internally and a user should not access it directly. + +The `system_views` keyspace contains the actual virtual tables. + +== Virtual Table Limitations + +Before disccusing virtual keyspaces and tables, note that virtual keyspaces and tables have some limitations. +These limitations are subject to change. +Virtual keyspaces cannot be altered or dropped. +In fact, no operations can be performed against virtual keyspaces. + +Virtual tables cannot be created in virtual keyspaces. +Virtual tables cannot be altered, dropped, or truncated. +Secondary indexes, types, functions, aggregates, materialized views, and triggers cannot be created for virtual tables. +Expiring time-to-live (TTL) columns cannot be created. +Virtual tables do not support conditional updates or deletes. +Aggregates may be run in SELECT statements. + +Conditional batch statements cannot include mutations for virtual tables, nor can a virtual table statement be included in a logged batch. +In fact, mutations for virtual and regular tables cannot occur in the same batch table. + +== Virtual Tables + +Each of the virtual tables in the `system_views` virtual keyspace contain different information. + +The following table describes the virtual tables: + +[width="98%",cols="27%,73%",] +|=== +|Virtual Table |Description + +|caches |Displays the general cache information including cache name, capacity_bytes, entry_count, hit_count, hit_ratio double, +recent_hit_rate_per_second, recent_request_rate_per_second, request_count, and size_bytes. + +|clients |Lists information about all connected clients. + +|coordinator_read_latency |Records counts, keyspace_name, table_name, max, median, and per_second for coordinator reads. + +|coordinator_scan |Records counts, keyspace_name, table_name, max, median, and per_second for coordinator scans. + +|coordinator_write_latency |Records counts, keyspace_name, table_name, max, median, and per_second for coordinator writes. + +|disk_usage |Records disk usage including disk_space, keyspace_name, and table_name, sorted by system keyspaces. + +|internode_inbound |Lists information about the inbound internode messaging. + +|internode_outbound |Information about the outbound internode messaging. + +|local_read_latency |Records counts, keyspace_name, table_name, max, median, and per_second for local reads. + +|local_scan |Records counts, keyspace_name, table_name, max, median, and per_second for local scans. + +|local_write_latency |Records counts, keyspace_name, table_name, max, median, and per_second for local writes. + +|max_partition_size |A table metric for maximum partition size. + +|rows_per_read |Records counts, keyspace_name, tablek_name, max, and median for rows read. + +|settings |Displays configuration settings in cassandra.yaml. + +|sstable_tasks |Lists currently running tasks and progress on SSTables, for operations like compaction and upgrade. + +|system_properties |Displays environmental system properties set on the node. + +|thread_pools |Lists metrics for each thread pool. + +|tombstones_per_read |Records counts, keyspace_name, tablek_name, max, and median for tombstones. +|=== + +We shall discuss some of the virtual tables in more detail next. + +=== Clients Virtual Table + +The `clients` virtual table lists all active connections (connected +clients) including their ip address, port, connection stage, driver +name, driver version, hostname, protocol version, request count, ssl +enabled, ssl protocol and user name: + +.... +cqlsh:system_views> select * from system_views.clients; + address | port | connection_stage | driver_name | driver_version | hostname | protocol_version | request_count | ssl_cipher_suite | ssl_enabled | ssl_protocol | username +-----------+-------+------------------+-------------+----------------+-----------+------------------+---------------+------------------+-------------+--------------+----------- + 127.0.0.1 | 50628 | ready | null | null | localhost | 4 | 55 | null | False | null | anonymous + 127.0.0.1 | 50630 | ready | null | null | localhost | 4 | 70 | null | False | null | anonymous + +(2 rows) +.... + +Some examples of how `clients` can be used are: + +* To find applications using old incompatible versions of drivers before +upgrading and with `nodetool enableoldprotocolversions` and +`nodetool disableoldprotocolversions` during upgrades. +* To identify clients sending too many requests. +* To find if SSL is enabled during the migration to and from ssl. + +The virtual tables may be described with `DESCRIBE` statement. The DDL +listed however cannot be run to create a virtual table. As an example +describe the `system_views.clients` virtual table: + +.... +cqlsh:system_views> DESC TABLE system_views.clients; +CREATE TABLE system_views.clients ( + address inet, + connection_stage text, + driver_name text, + driver_version text, + hostname text, + port int, + protocol_version int, + request_count bigint, + ssl_cipher_suite text, + ssl_enabled boolean, + ssl_protocol text, + username text, + PRIMARY KEY (address, port)) WITH CLUSTERING ORDER BY (port ASC) + AND compaction = {'class': 'None'} + AND compression = {}; +.... + +=== Caches Virtual Table + +The `caches` virtual table lists information about the caches. The four +caches presently created are chunks, counters, keys and rows. A query on +the `caches` virtual table returns the following details: + +.... +cqlsh:system_views> SELECT * FROM system_views.caches; +name | capacity_bytes | entry_count | hit_count | hit_ratio | recent_hit_rate_per_second | recent_request_rate_per_second | request_count | size_bytes +---------+----------------+-------------+-----------+-----------+----------------------------+--------------------------------+---------------+------------ + chunks | 229638144 | 29 | 166 | 0.83 | 5 | 6 | 200 | 475136 +counters | 26214400 | 0 | 0 | NaN | 0 | 0 | 0 | 0 + keys | 52428800 | 14 | 124 | 0.873239 | 4 | 4 | 142 | 1248 + rows | 0 | 0 | 0 | NaN | 0 | 0 | 0 | 0 + +(4 rows) +.... + +=== Settings Virtual Table + +The `settings` table is rather useful and lists all the current +configuration settings from the `cassandra.yaml`. The encryption options +are overridden to hide the sensitive truststore information or +passwords. The configuration settings however cannot be set using DML on +the virtual table presently: : + +.... +cqlsh:system_views> SELECT * FROM system_views.settings; + +name | value +-------------------------------------+-------------------- + allocate_tokens_for_keyspace | null + audit_logging_options_enabled | false + auto_snapshot | true + automatic_sstable_upgrade | false + cluster_name | Test Cluster + enable_transient_replication | false + hinted_handoff_enabled | true + hints_directory | /home/ec2-user/cassandra/data/hints + incremental_backups | false + initial_token | null + ... + ... + ... + rpc_address | localhost + ssl_storage_port | 7001 + start_native_transport | true + storage_port | 7000 + stream_entire_sstables | true + (224 rows) +.... + +The `settings` table can be really useful if yaml file has been changed +since startup and dont know running configuration, or to find if they +have been modified via jmx/nodetool or virtual tables. + +=== Thread Pools Virtual Table + +The `thread_pools` table lists information about all thread pools. +Thread pool information includes active tasks, active tasks limit, +blocked tasks, blocked tasks all time, completed tasks, and pending +tasks. A query on the `thread_pools` returns following details: + +.... +cqlsh:system_views> select * from system_views.thread_pools; + +name | active_tasks | active_tasks_limit | blocked_tasks | blocked_tasks_all_time | completed_tasks | pending_tasks +------------------------------+--------------+--------------------+---------------+------------------------+-----------------+--------------- + AntiEntropyStage | 0 | 1 | 0 | 0 | 0 | 0 + CacheCleanupExecutor | 0 | 1 | 0 | 0 | 0 | 0 + CompactionExecutor | 0 | 2 | 0 | 0 | 881 | 0 + CounterMutationStage | 0 | 32 | 0 | 0 | 0 | 0 + GossipStage | 0 | 1 | 0 | 0 | 0 | 0 + HintsDispatcher | 0 | 2 | 0 | 0 | 0 | 0 + InternalResponseStage | 0 | 2 | 0 | 0 | 0 | 0 + MemtableFlushWriter | 0 | 2 | 0 | 0 | 1 | 0 + MemtablePostFlush | 0 | 1 | 0 | 0 | 2 | 0 + MemtableReclaimMemory | 0 | 1 | 0 | 0 | 1 | 0 + MigrationStage | 0 | 1 | 0 | 0 | 0 | 0 + MiscStage | 0 | 1 | 0 | 0 | 0 | 0 + MutationStage | 0 | 32 | 0 | 0 | 0 | 0 + Native-Transport-Requests | 1 | 128 | 0 | 0 | 130 | 0 + PendingRangeCalculator | 0 | 1 | 0 | 0 | 1 | 0 +PerDiskMemtableFlushWriter_0 | 0 | 2 | 0 | 0 | 1 | 0 + ReadStage | 0 | 32 | 0 | 0 | 13 | 0 + Repair-Task | 0 | 2147483647 | 0 | 0 | 0 | 0 + RequestResponseStage | 0 | 2 | 0 | 0 | 0 | 0 + Sampler | 0 | 1 | 0 | 0 | 0 | 0 + SecondaryIndexManagement | 0 | 1 | 0 | 0 | 0 | 0 + ValidationExecutor | 0 | 2147483647 | 0 | 0 | 0 | 0 + ViewBuildExecutor | 0 | 1 | 0 | 0 | 0 | 0 + ViewMutationStage | 0 | 32 | 0 | 0 | 0 | 0 +.... + +(24 rows) + +=== Internode Inbound Messaging Virtual Table + +The `internode_inbound` virtual table is for the internode inbound +messaging. Initially no internode inbound messaging may get listed. In +addition to the address, port, datacenter and rack information includes +corrupt frames recovered, corrupt frames unrecovered, error bytes, error +count, expired bytes, expired count, processed bytes, processed count, +received bytes, received count, scheduled bytes, scheduled count, +throttled count, throttled nanos, using bytes, using reserve bytes. A +query on the `internode_inbound` returns following details: + +.... +cqlsh:system_views> SELECT * FROM system_views.internode_inbound; +address | port | dc | rack | corrupt_frames_recovered | corrupt_frames_unrecovered | +error_bytes | error_count | expired_bytes | expired_count | processed_bytes | +processed_count | received_bytes | received_count | scheduled_bytes | scheduled_count | throttled_count | throttled_nanos | using_bytes | using_reserve_bytes +---------+------+----+------+--------------------------+----------------------------+- +---------- +(0 rows) +.... + +=== SSTables Tasks Virtual Table + +The `sstable_tasks` could be used to get information about running +tasks. It lists following columns: + +.... +cqlsh:system_views> SELECT * FROM sstable_tasks; +keyspace_name | table_name | task_id | kind | progress | total | unit +---------------+------------+--------------------------------------+------------+----------+----------+------- + basic | wide2 | c3909740-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 60418761 | 70882110 | bytes + basic | wide2 | c7556770-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 2995623 | 40314679 | bytes +.... + +As another example, to find how much time is remaining for SSTable +tasks, use the following query: + +.... +SELECT total - progress AS remaining +FROM system_views.sstable_tasks; +.... + +=== Other Virtual Tables + +Some examples of using other virtual tables are as follows. + +Find tables with most disk usage: + +.... +cqlsh> SELECT * FROM disk_usage WHERE mebibytes > 1 ALLOW FILTERING; + +keyspace_name | table_name | mebibytes +---------------+------------+----------- + keyspace1 | standard1 | 288 + tlp_stress | keyvalue | 3211 +.... + +Find queries on table/s with greatest read latency: + +.... +cqlsh> SELECT * FROM local_read_latency WHERE per_second > 1 ALLOW FILTERING; + +keyspace_name | table_name | p50th_ms | p99th_ms | count | max_ms | per_second +---------------+------------+----------+----------+----------+---------+------------ + tlp_stress | keyvalue | 0.043 | 0.152 | 49785158 | 186.563 | 11418.356 +.... + + +== Example + +[arabic, start=1] +. To list the keyspaces, enter ``cqlsh`` and run the CQL command ``DESCRIBE KEYSPACES``: + +[source, cql] +---- +cqlsh> DESC KEYSPACES; +system_schema system system_distributed system_virtual_schema +system_auth system_traces system_views +---- + +[arabic, start=2] +. To view the virtual table schema, run the CQL commands ``USE system_virtual_schema`` and ``SELECT * FROM tables``: + +[source, cql] +---- +cqlsh> USE system_virtual_schema; +cqlsh> SELECT * FROM tables; +---- + +results in: + +[source, cql] +---- + keyspace_name | table_name | comment +-----------------------+---------------------------+-------------------------------------- + system_views | caches | system caches + system_views | clients | currently connected clients + system_views | coordinator_read_latency | + system_views | coordinator_scan_latency | + system_views | coordinator_write_latency | + system_views | disk_usage | + system_views | internode_inbound | + system_views | internode_outbound | + system_views | local_read_latency | + system_views | local_scan_latency | + system_views | local_write_latency | + system_views | max_partition_size | + system_views | rows_per_read | + system_views | settings | current settings + system_views | sstable_tasks | current sstable tasks + system_views | system_properties | Cassandra relevant system properties + system_views | thread_pools | + system_views | tombstones_per_read | + system_virtual_schema | columns | virtual column definitions + system_virtual_schema | keyspaces | virtual keyspace definitions + system_virtual_schema | tables | virtual table definitions + +(21 rows) +---- + +[arabic, start=3] +. To view the virtual tables, run the CQL commands ``USE system_view`` and ``DESCRIBE tables``: + +[source, cql] +---- +cqlsh> USE system_view;; +cqlsh> DESCRIBE tables; +---- + +results in: + +[source, cql] +---- +sstable_tasks clients coordinator_write_latency +disk_usage local_write_latency tombstones_per_read +thread_pools internode_outbound settings +local_scan_latency coordinator_scan_latency system_properties +internode_inbound coordinator_read_latency max_partition_size +local_read_latency rows_per_read caches +---- + +[arabic, start=4] +. To look at any table data, run the CQL command ``SELECT``: + +[source, cql] +---- +cqlsh> USE system_view;; +cqlsh> SELECT * FROM clients LIMIT 2; +---- + results in: + +[source, cql] +---- + address | port | connection_stage | driver_name | driver_version | hostname | protocol_version | request_count | ssl_cipher_suite | ssl_enabled | ssl_protocol | username +-----------+-------+------------------+------------------------+----------------+-----------+------------------+---------------+------------------+-------------+--------------+----------- + 127.0.0.1 | 37308 | ready | DataStax Python Driver | 3.21.0.post0 | localhost | 4 | 17 | null | False | null | anonymous + 127.0.0.1 | 37310 | ready | DataStax Python Driver | 3.21.0.post0 | localhost | 4 | 8 | null | False | null | anonymous + +(2 rows) +---- From a89e4f22a014f55d7fe46f7640c68015f92f7b4d Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Mon, 28 Jun 2021 09:42:36 -0700 Subject: [PATCH 099/115] remove legacy docker files --- doc/Dockerfile | 72 ------------------ doc/docker-compose.yml | 29 -------- doc/docker-entrypoint.sh | 153 --------------------------------------- 3 files changed, 254 deletions(-) delete mode 100644 doc/Dockerfile delete mode 100644 doc/docker-compose.yml delete mode 100755 doc/docker-entrypoint.sh diff --git a/doc/Dockerfile b/doc/Dockerfile deleted file mode 100644 index 88392fb240b1..000000000000 --- a/doc/Dockerfile +++ /dev/null @@ -1,72 +0,0 @@ -FROM ubuntu:18.04 -# Set up non-root user, 'build', with default uid:gid -# This allows passing --build-arg to use local host user's uid:gid: -# $ docker-compose build \ -# --build-arg UID=$(id -u) \ -# --build-arg GID=$(id -g) \ -# cassandra-website -ARG UID=1000 -ARG GID=1000 -ARG BUILD_USER=build -RUN echo "Setting up user 'build' with UID=${UID} GID=${GID}" -RUN groupadd --gid ${GID} --non-unique ${BUILD_USER} -RUN useradd --create-home --shell /bin/bash \ - --uid ${UID} --gid ${GID} --non-unique ${BUILD_USER} -# INSTALL wget, python3, java11, and other tools required to build the docs -RUN apt-get update && \ - apt-get install -y \ - wget \ - gpg \ - python3 \ - openjdk-11-jdk \ - git \ - make \ - ant \ - ant-optional - -# INSTALL nodejs and nvm -ARG NODE_PACKAGE="node-v12.16.2-linux-x64.tar.gz" -RUN wget https://nodejs.org/download/release/v12.16.2/${NODE_PACKAGE} && \ - tar -C /usr/local --strip-components 1 -xzf ${NODE_PACKAGE} && \ - rm ${NODE_PACKAGE} - -# Use npm to install Antora globally -# and antora-lunr for site search -RUN npm i -g @antora/cli@2.3 @antora/site-generator-default@2.3 -RUN npm i -g antora-lunr antora-site-generator-lunr - -ENV BUILD_DIR "/antora" -ENV REF_DIR "/reference" -ENV BUILD_MODE "preview" -ENV GIT_EMAIL_ADDRESS "" -ENV GIT_USER_NAME "" -ENV GPG_KEY_PATH "" -ENV GENERATE_NODETOOL_AND_CONFIG_DOCS "true" -ENV WEB_SERVER_PORT "5000" - -# Setup directories for building the docs -# Give the build user rw access to everything in the build directory, -# neccessary for the ASF 'websites' jenkins agent (which can't chown) -# ************************* -# CHANGE THIS TO REAL REPO AFTER TESTING!!!! -# ************************* -RUN mkdir -p ${BUILD_DIR}/cassandra && \ - git clone https://github.com/polandll/cassandra.git ${BUILD_DIR}/cassandra && \ - mkdir -p ${BUILD_DIR}/cassandra/doc/build_gen && \ - chmod -R a+rw ${BUILD_DIR}/cassandra && \ - mkdir -p ${REF_DIR}/cassandra && \ - chmod -R a+rw ${REF_DIR}/cassandra - -# set the USER to `build`, the working directory to /antora, -# and copy the shell script and run - -EXPOSE ${WEB_SERVER_PORT}/tcp - -USER ${BUILD_USER} -WORKDIR ${BUILD_DIR} -COPY docker-entrypoint.sh /usr/local/bin/ -ENTRYPOINT ["docker-entrypoint.sh"] -CMD [""] - -CMD CASSANDRA_USE_JDK11=true ant realclean gen-doc \ - && echo "The locally built documentation can be found here:\n\n build/html/index.html\n\n" diff --git a/doc/docker-compose.yml b/doc/docker-compose.yml deleted file mode 100644 index b1477b6a8bf6..000000000000 --- a/doc/docker-compose.yml +++ /dev/null @@ -1,29 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# docker-compose.yml for building the Cassandra documentation. - -version: '2.0' - -services: - build-docs: - build: . - volumes: - - ..:/usr/src/code - environment: - - SKIP_NODETOOL # set this to skip nodetool build, saves a lot of time when debugging html diff --git a/doc/docker-entrypoint.sh b/doc/docker-entrypoint.sh deleted file mode 100755 index 0d2e9ada708d..000000000000 --- a/doc/docker-entrypoint.sh +++ /dev/null @@ -1,153 +0,0 @@ -#!/bin/bash - -# Abort script if a command fails -set -e - -usage() { - cat << EOF -This container generates the Apache Cassandra documentation. - -Usage: -$ docker run -i -t -p $WEB_SERVER_PORT:$WEB_SERVER_PORT -v :/reference/cassandra cassandra-docs:latest [OPTIONS] - -Options - -b Build mode; either "preview" or "production". Defaults to "preview". - -k Path to GPG private key to perform signed commits. - -n Skip nodetool and Cassandra YAML document generation in preview mode. By default nodetool and Cassandra YAML - configuration documentation is generated. If this option is used the documentation will be missing in preview - mode. This option has no effect when running in "production" mode. - -h Help and usage. -EOF - exit 2 -} - -while getopts "b:k:nh" opt_flag; do - case $opt_flag in - b) - BUILD_MODE=$OPTARG - ;; - k) - GPG_KEY_PATH=$OPTARG - ;; - n) - GENERATE_NODETOOL_AND_CONFIG_DOCS="false" - ;; - h) - usage - ;; - esac -done - -shift $(($OPTIND - 1)) - -if [ "$#" -eq 0 ] -then - usage -fi - -GIT_EMAIL_ADDRESS=${1} -GIT_USER_NAME=${2} - -# Setup git and ssh -git config --global user.email "${GIT_EMAIL_ADDRESS}" -git config --global user.name "${GIT_USER_NAME}" - -if [ -n "${GPG_KEY_PATH}" ] -then - gpg --import "${GPG_KEY_PATH}" - GPG_KEY_ID=$(gpg --list-secret-keys --keyid-format LONG | grep sec | tr -s ' ' | cut -d' ' -f2 | cut -d'/' -f2) - git config --global user.signingkey "${GPG_KEY_ID}" - git config --global gpg.program gpg - git config --global commit.gpgsign true - export GPG_TTY=$(tty) -fi - -echo -echo "Running in '${BUILD_MODE}' mode!" -echo - -export CASSANDRA_USE_JDK11=true - -echo "If this is your first time running this container script, go get a coffee - it's going to take awhile." -if [ "${BUILD_MODE}" = "preview" ] -then - cd "${REF_DIR}"/cassandra - ref_branch=$(git branch | grep "\*" | cut -d' ' -f2) - - echo "Getting list of cleanly modified files in your repository." - if ! modified_files=$(git status | grep -v "both modified" | grep "modified" | tr -s ' ' | cut -d' ' -f2) - then - echo "Error quering git repository. Aborting." - fi - - cd "${BUILD_DIR}"/cassandra - git checkout "${ref_branch}" - git pull --rebase - - for file_itr in ${modified_files} - do - echo "Copying modified file '${file_itr}' to '${BUILD_DIR}/cassandra/${file_itr}'." - cp "${REF_DIR}"/cassandra/"${file_itr}" "${BUILD_DIR}"/cassandra/"${file_itr}" - done -fi - -# we are in build directory at this point -BRANCH_LIST="doc_redo_asciidoc doc_redo_asciidoc3.11" - -cd "${BUILD_DIR}"/cassandra - -if [ "${GENERATE_NODETOOL_AND_CONFIG_DOCS}" = "true" ] || [ "${BUILD_MODE}" = "production" ] -then - for branch_name in ${BRANCH_LIST} - do - echo "Checking out branch '${branch_name}'" - git checkout "${branch_name}" - - echo "Building JAR files" - ant jar - - # change into doc directory and push the current directory to the stack - pushd doc - # generate the nodetool docs - echo "Generating Cassandra nodetool documentation." - python3 gen-nodetool-docs.py - - # generate cassandra.yaml doc file - echo "Generating Cassandra configuration documentation." - YAML_INPUT="${BUILD_DIR}"/cassandra/conf/cassandra.yaml - YAML_OUTPUT="${BUILD_DIR}"/cassandra/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc - python3 convert_yaml_to_adoc.py "${YAML_INPUT}" "${YAML_OUTPUT}" - - # need to add,commit changes before changing branches - git add . - git commit -m "Generated nodetool and configuration documention for ${branch_name}." - - # change back to previous directory on the stack - popd - ant realclean - done -else - echo "Skipping the generation of Cassandra nodetool and configuration (YAML) documentation." -fi - -# ************************* -# CHANGE THIS TO trunk AFTER TESTING!!!! -# ************************* -# Antora is run only from one branch (trunk) -git checkout doc_redo_asciidoc -cd doc - -# run antora -echo "Building the docs site with antora." -export DOCSEARCH_ENABLED=true -export DOCSEARCH_ENGINE=lunr -export NODE_PATH="$(npm -g root)" -export DOCSEARCH_INDEX_VERSION=latest -antora --generator antora-site-generator-lunr site.yml - -if [ "${BUILD_MODE}" = "preview" ] -then - echo "Starting webserver." - python3 -m http.server "${WEB_SERVER_PORT}" -fi - From fbcf757e9264be580561ed224995a528e29c3819 Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Mon, 28 Jun 2021 10:01:25 -0700 Subject: [PATCH 100/115] remove sitestuff, redirect development to cass-website site-content --- doc/source/modules/cassandra/nav.adoc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/source/modules/cassandra/nav.adoc b/doc/source/modules/cassandra/nav.adoc index 981dd8defc66..4a0ece8441d4 100644 --- a/doc/source/modules/cassandra/nav.adoc +++ b/doc/source/modules/cassandra/nav.adoc @@ -87,18 +87,18 @@ *** xref:troubleshooting/use_nodetool.adoc[Using nodetool] *** xref:troubleshooting/use_tools.adoc[Using external tools to deep-dive] -** xref:development/index.adoc[Development] -*** xref:development/gettingstarted.adoc[Getting started] -*** xref:development/ide.adoc[Building and IDE integration] -*** xref:development/testing.adoc[Testing] -*** xref:development/patches.adoc[Contributing code changes] -*** xref:development/code_style.adoc[Code style] -*** xref:development/how_to_review.adoc[Review checklist] -*** xref:development/how_to_commit.adoc[How to commit] -*** xref:development/documentation.adoc[Working on documentation] -*** xref:development/ci.adoc[Jenkins CI environment] -*** xref:development/dependencies.adoc[Dependency management] -*** xref:development/release_process.adoc[Release process] +** xref:master@Website:ROOT:development/index.adoc[Development] +*** xref:master@Website:ROOT:development/gettingstarted.adoc[Getting started] +*** xref:master@Website:ROOT:development/ide.adoc[Building and IDE integration] +*** xref:master@Website:ROOT:development/testing.adoc[Testing] +*** xref:master@Website:ROOT:development/patches.adoc[Contributing code changes] +*** xref:master@Website:ROOT:development/code_style.adoc[Code style] +*** xref:master@Website:ROOT:development/how_to_review.adoc[Review checklist] +*** xref:master@Website:ROOT:development/how_to_commit.adoc[How to commit] +*** xref:master@Website:ROOT:development/documentation.adoc[Working on documentation] +*** xref:master@Website:ROOT:development/ci.adoc[Jenkins CI environment] +*** xref:master@Website:ROOT:development/dependencies.adoc[Dependency management] +*** xref:master@Website:ROOT:development/release_process.adoc[Release process] ** xref:faq/index.adoc[FAQ] From b315e07e36d86c573936ac85790e71ff2eeaf47d Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Mon, 28 Jun 2021 10:02:04 -0700 Subject: [PATCH 101/115] more cleanup --- doc/source/modules/ROOT/pages/bugs.adoc | 17 -- doc/source/modules/ROOT/pages/contactus.adoc | 30 --- doc/source/modules/ROOT/pages/glossary.adoc | 38 ---- .../modules/ROOT/pages/native_protocol.adoc | 22 --- doc/source/modules/sitestuff/nav.adoc | 3 - .../sitestuff/pages/apachecon_cfp.adoc | 83 --------- .../modules/sitestuff/pages/community.adoc | 78 -------- .../modules/sitestuff/pages/download.adoc | 150 --------------- .../modules/sitestuff/pages/third-party.adoc | 173 ------------------ 9 files changed, 594 deletions(-) delete mode 100644 doc/source/modules/ROOT/pages/bugs.adoc delete mode 100644 doc/source/modules/ROOT/pages/contactus.adoc delete mode 100644 doc/source/modules/ROOT/pages/glossary.adoc delete mode 100644 doc/source/modules/ROOT/pages/native_protocol.adoc delete mode 100644 doc/source/modules/sitestuff/nav.adoc delete mode 100644 doc/source/modules/sitestuff/pages/apachecon_cfp.adoc delete mode 100644 doc/source/modules/sitestuff/pages/community.adoc delete mode 100644 doc/source/modules/sitestuff/pages/download.adoc delete mode 100644 doc/source/modules/sitestuff/pages/third-party.adoc diff --git a/doc/source/modules/ROOT/pages/bugs.adoc b/doc/source/modules/ROOT/pages/bugs.adoc deleted file mode 100644 index d2d06de6d074..000000000000 --- a/doc/source/modules/ROOT/pages/bugs.adoc +++ /dev/null @@ -1,17 +0,0 @@ -= Reporting Bugs - -If you encounter a problem with Cassandra, the first places to ask for help are the -link:++https://lists.apache.org/list.html?user@cassandra.apache.org++[user mailing list] and -the https://s.apache.org/slack-invite[Cassandra slack room]. - -If, after having asked for help, you suspect that you have found a bug -in Cassandra, you should report it by opening a ticket through the -xref:https://issues.apache.org/jira/browse/CASSANDRA[Apache Cassandra JIRA]. -Please provide as much details as you can on your problem, and don't -forget to indicate which version of Cassandra you are running and on -which environment. - -Further details on how to contribute can be found at our -xref:cassandra:development/index.adoc[Contributing to Cassandra] section. Please note that the source of this -documentation is part of the Cassandra git repository and hence -contributions to the documentation should follow the same path. diff --git a/doc/source/modules/ROOT/pages/contactus.adoc b/doc/source/modules/ROOT/pages/contactus.adoc deleted file mode 100644 index 7382f109f037..000000000000 --- a/doc/source/modules/ROOT/pages/contactus.adoc +++ /dev/null @@ -1,30 +0,0 @@ -= Contact us - -You can get in touch with the Cassandra community either via the mailing -lists or Slack rooms. - -== Mailing lists - -The following mailing lists are available: - -* http://www.mail-archive.com/user@cassandra.apache.org/[Users]: -General discussion list for users - link:mail-to:user-subscribe@cassandra.apache.org[Subscribe] -* http://www.mail-archive.com/dev@cassandra.apache.org/[Developers]: -Development related discussion - link:mail-to:dev-subscribe@cassandra.apache.org[Subscribe] -* http://www.mail-archive.com/commits@cassandra.apache.org/[Commits]: -Commit notification source repository - link:mail-to:commits-subscribe@cassandra.apache.org[Subscribe] -* http://www.mail-archive.com/client-dev@cassandra.apache.org/[Client Libraries]: -Discussion related to the development of idiomatic client APIs - link:mail-to:client-dev-subscribe@cassandra.apache.org[Subscribe] - -Subscribe by clicking on the Subscribe links above. Follow the instructions -in the welcome email to confirm your subscription. Make sure to keep the welcome email -as it contains instructions on how to unsubscribe. - -== Slack - -To chat with users or developers in real-time, join our rooms on -https://s.apache.org/slack-invite[ASF Slack]: - -* `cassandra` - for user questions and general discussions. -* `cassandra-dev` - strictly for questions or discussions related to -Cassandra development. diff --git a/doc/source/modules/ROOT/pages/glossary.adoc b/doc/source/modules/ROOT/pages/glossary.adoc deleted file mode 100644 index f7fa0b31df3c..000000000000 --- a/doc/source/modules/ROOT/pages/glossary.adoc +++ /dev/null @@ -1,38 +0,0 @@ -Cassandra:: - Apache Cassandra is a distributed, high-available, eventually - consistent NoSQL open-source database. -cluster:: - Two or more database instances that exchange messages using the gossip - protocol. -commitlog:: - A file to which the database appends changed data for recovery in the - event of a hardware failure. -datacenter:: - A group of related nodes that are configured together within a cluster - for replication and workload segregation purposes. Not necessarily a - separate location or physical data center. Datacenter names are - case-sensitive and cannot be changed. -gossip:: - A peer-to-peer communication protocol for exchanging location and - state information between nodes. -hint:: - One of the three ways, in addition to read-repair and full/incremental - anti-entropy repair, that Cassandra implements the eventual - consistency guarantee that all updates are eventually received by all - replicas. -listen address:: - Address or interface to bind to and tell other Cassandra nodes to - connect to -seed node:: - A seed node is used to bootstrap the gossip process for new nodes - joining a cluster. To learn the topology of the ring, a joining node - contacts one of the nodes in the -seeds list in cassandra. yaml. The - first time you bring up a node in a new cluster, only one node is the - seed node. -snitch:: - The mapping from the IP addresses of nodes to physical and virtual - locations, such as racks and data centers. There are several types of - snitches. The type of snitch affects the request routing mechanism. -SSTable:: - An SSTable provides a persistent,ordered immutable map from keys to - values, where both keys and values are arbitrary byte strings. diff --git a/doc/source/modules/ROOT/pages/native_protocol.adoc b/doc/source/modules/ROOT/pages/native_protocol.adoc deleted file mode 100644 index beb86824b3e4..000000000000 --- a/doc/source/modules/ROOT/pages/native_protocol.adoc +++ /dev/null @@ -1,22 +0,0 @@ -= Native protocols - -== Native Protocol Version 3 - -[source, plaintext] ----- -include::cassandra:example$TEXT/native_protocol_v3.spec[Version 3] ----- - -== Native Protocol Version 4 - -[source, plaintext] ----- -include::cassandra:example$TEXT/native_protocol_v4.spec[Version 4] ----- - -== Native Protocol Version 5 - -[source, plaintext] ----- -include::cassandra:example$TEXT/native_protocol_v5.spec[Version 5] ----- diff --git a/doc/source/modules/sitestuff/nav.adoc b/doc/source/modules/sitestuff/nav.adoc deleted file mode 100644 index 0886e9894faf..000000000000 --- a/doc/source/modules/sitestuff/nav.adoc +++ /dev/null @@ -1,3 +0,0 @@ -* xref:community.adoc[Community] -** xref:third-party.adoc[Third-party] -** xref:download.adoc[Download] diff --git a/doc/source/modules/sitestuff/pages/apachecon_cfp.adoc b/doc/source/modules/sitestuff/pages/apachecon_cfp.adoc deleted file mode 100644 index 288f70a265c5..000000000000 --- a/doc/source/modules/sitestuff/pages/apachecon_cfp.adoc +++ /dev/null @@ -1,83 +0,0 @@ -= Announcing the 2019 Apache Cassandra Summit - -== Announcing the 2019 Apache Cassandra Summit - -Join the Apache Cassandra community for the 2019 Apache Cassandra -Summit, hosted with ApacheCon in Las Vegas, NV (Sept 9 - 13). - -''''' - -=== Apache Cassandra at ApacheCon - -image:/img/apachecon-2019.jpg[ApacheCon 2019]\{:style=``float: right; -width: 400px''} - -For more information about other events at ApacheCon, see -https://apachecon.com/acna19/index.html[ApacheCon 2019]. - -  - -==== Day One: Next Generation Cassandra Conference (NGCC) - -NGCC (Next Generation Cassandra Conference), a one-day event for Apache -Cassandra contributors and large system operators to meet, discuss, and -plan future development in the project. NGCC will take place on -*Tuesday, September 10th*. - -NGCC is an advanced event targeted toward Apache Cassandra contributors -and large system / platform operators. Content will focus on Cassandra -internals and is geared toward those with detailed knowledge of the -codebase and architecture. All are welcome to attend. - -  - -==== Day Two: Apache Cassandra Summit - -The Apache Cassandra Summit, a one-day event for Apache Cassandra users -to meet, network, and learn about what’s new and what’s coming in -Cassandra. The Apache Cassandra Summit will be held on *Wednesday, Sept -11*. - -The Apache Cassandra Summit is targeted toward a wider audience. Topics -should be interesting and accessible to those whose first introduction -to Cassandra is at this event, and those who have been active in the -community for many years. - -''''' - -=== Call for Presentations - -We’re excited to announce the Call for Presentations is now open for -both, closing Monday, May 13 at 2pm BST (UTC+1). - -  - -==== Apache Cassandra Summit CFP (40-minute presentation, 5-minute Q&A) – - -*Example proposals might include:* - Lessons learned operating Apache -Cassandra at scale. - Customizations and ways members of the community -have extended Apache Cassandra to make it a great fit for their use -case. - Stability improvements, performance enhancements, and new -features in an upcoming Cassandra release. - Something we haven’t -thought about that a general audience would be interested to hear. - -  - -==== Next Generation Cassandra Conference CFP (30-minute presentation, 15m breakout) – - -*Example proposals might include:* - Presentations from contributors and -large operators covering pain points and proposals to address them - -Planned or proposed improvements in specific areas of the Apache -Cassandra codebase - Planned or proposed improvements we can make to -strengthen and empower the Apache Cassandra community. - Something we -haven’t thought about that advanced operators / contributors would be -interested to hear. - -  - -https://asf.jamhosted.net/cfp.html[Click here] to submit a proposal for -the Apache Cassandra Summit or NGCC. - -When submitting, please ensure you select ``Cassandra'' as the category. -For NGCC submissions, please include ``NGCC Proposal'' in the ``Optional -Notes'' field. diff --git a/doc/source/modules/sitestuff/pages/community.adoc b/doc/source/modules/sitestuff/pages/community.adoc deleted file mode 100644 index b8afe4a24740..000000000000 --- a/doc/source/modules/sitestuff/pages/community.adoc +++ /dev/null @@ -1,78 +0,0 @@ -= Community - -== Getting and keeping in touch - -== Mailing lists - -Discussion and questions on Cassandra’s usage and development happens -mainly on the following mailing lists: - -* http://www.mail-archive.com/user@cassandra.apache.org/[Users]: General -mailing list for user questions and discussions. This is also where new -releases are announced -(mailto:user-subscribe@cassandra.apache.org[subscribe] | -mailto:user-unsubscribe@cassandra.apache.org[unsubscribe] | -https://lists.apache.org/list.html?user@cassandra.apache.org[Archives]). -* http://www.mail-archive.com/dev@cassandra.apache.org/[Developers]: -Questions and discussions related to Cassandra development -(mailto:dev-subscribe@cassandra.apache.org[subscribe] | -mailto:dev-unsubscribe@cassandra.apache.org[unsubscribe] | -https://lists.apache.org/list.html?dev@cassandra.apache.org[Archives]). -* http://www.mail-archive.com/commits@cassandra.apache.org/[Commits]: -Notification on commits done to the source repository and on -https://issues.apache.org/jira/browse/CASSANDRA[JIRA] updates. This is a -fairly noisy mailing list mostly useful for Cassandra developers and -those who would like to keep close tabs on Cassandra’s development -(mailto:commits-subscribe@cassandra.apache.org[subscribe] | -mailto:commits-unsubscribe@cassandra.apache.org[unsubscribe] | -https://lists.apache.org/list.html?commits@cassandra.apache.org[Archives]). - -== Slack - -We have recently moved to the ASF Slack organization for all chat. -Please https://s.apache.org/slack-invite[sign up for an account] to -participate. - -* `#cassandra` - for user questions and general discussions -* `#cassandra-dev` - strictly for questions or discussions related to -Cassandra development -* `#cassandra-builds` - results of automated test builds -* `#cassandra-builds-patches` - results of patch test builds - -== Stack Overflow - -You can also check the -http://stackoverflow.com/questions/tagged/cassandra[Q&A about using -Cassandra] on Stack Overflow. - -== Books and publications - -* http://shop.oreilly.com/product/0636920299837.do[Cassandra: The -Definitive Guide, 3rd Edition], by Jeff Carpenter and Eben Hewitt. -Updated for Cassandra 4.0 -* https://www.amazon.com/Mastering-Apache-Cassandra-Nishant-Neeraj/dp/1784392618/[Mastering -Apache Cassandra, 2nd Edition], by Nishant Neeraj -* https://www.amazon.com/Learning-Apache-Cassandra-Tolerant-Real-Time/dp/1783989203/[Learning -Apache Cassandra - Manage Fault Tolerant and Scalable Real-Time Data], -by Mat Brown -* https://dl.acm.org/citation.cfm?id=1773922[Cassandra: a decentralized -structured storage system], by Avinash Lakshman and Prashant Malik - -== Third-party projects - -There are a number of third-party Cassandra projects that could be -useful. Check out this -https://cassandra.apache.org/third-party/[listing]. - -== Reporting bugs - -If you encounter a problem with Cassandra, the first places to ask for -help are the link:#mailing[user mailing list] and the `#cassandra` -https://s.apache.org/slack-invite[Slack channel]. - -If, after having asked for help, you suspect that you have found a bug -in Cassandra, you should report it by opening a ticket through the -https://issues.apache.org/jira/browse/CASSANDRA[Apache Cassandra JIRA -tracking system]. Please provide as much detail as you can on your -problem. Don’t forget to indicate which version of Cassandra you are -running and on which environment. diff --git a/doc/source/modules/sitestuff/pages/download.adoc b/doc/source/modules/sitestuff/pages/download.adoc deleted file mode 100644 index 47ff79e7c1c6..000000000000 --- a/doc/source/modules/sitestuff/pages/download.adoc +++ /dev/null @@ -1,150 +0,0 @@ -= Download - -== Downloading Cassandra - -=== Latest Beta Version - -Download the latest Apache Cassandra 4.0 beta release: \{\{ ``latest'' | -full_release_link }}. - -=== Latest Stable Version - -Download the latest Apache Cassandra 3.11 release: \{\{ ``3.11'' | -full_release_link }}. - -=== Older Supported Releases - -The following older Cassandra releases are still supported: - -* Apache Cassandra 3.0 is supported until *6 months after 4.0 release -(date TBD)*. The latest release is \{\{ ``3.0'' | full_release_link }}. -* Apache Cassandra 2.2 is supported until *4.0 release (date TBD)*. The -latest release is \{\{ ``2.2'' | full_release_link }}. -* Apache Cassandra 2.1 is supported until *4.0 release (date TBD)* with -*critical fixes only*. The latest release is \{\{ ``2.1'' | -full_release_link }}. - -Older (unsupported) versions of Cassandra are -http://archive.apache.org/dist/cassandra/[archived here]. - -=== Installation from Debian packages - -* For the `` specify the major version number, without -dot, and with an appended `x`. -* The latest `` is `311x`. -* For older releases, the `` can be one of `30x`, `22x`, -or `21x`. -* Add the Apache repository of Cassandra to -`/etc/apt/sources.list.d/cassandra.sources.list`, for example for the -latest 3.11 version: - -.... -echo "deb https://downloads.apache.org/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list -.... - -* Add the Apache Cassandra repository keys: - -.... -curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add - -.... - -* Update the repositories: - -.... -sudo apt-get update -.... - -* If you encounter this error: - -.... -GPG error: http://www.apache.org 311x InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A278B781FE4B2BDA -.... - -Then add the public key A278B781FE4B2BDA as follows: - -.... -sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-key A278B781FE4B2BDA -.... - -and repeat `sudo apt-get update`. The actual key may be different, you -get it from the error message itself. For a full list of Apache -contributors public keys, you can refer to -https://downloads.apache.org/cassandra/KEYS. - -* Install Cassandra: - -.... -sudo apt-get install cassandra -.... - -* You can start Cassandra with `sudo service cassandra start` and stop -it with `sudo service cassandra stop`. However, normally the service -will start automatically. For this reason be sure to stop it if you need -to make any configuration changes. -* Verify that Cassandra is running by invoking `nodetool status` from -the command line. -* The default location of configuration files is `/etc/cassandra`. -* The default location of log and data directories is -`/var/log/cassandra/` and `/var/lib/cassandra`. -* Start-up options (heap size, etc) can be configured in -`/etc/default/cassandra`. - -=== Installation from RPM packages - -* For the `` specify the major version number, without -dot, and with an appended `x`. -* The latest `` is `311x`. -* For older releases, the `` can be one of `30x`, `22x`, -or `21x`. -* (Not all versions of Apache Cassandra are available, since building -RPMs is a recent addition to the project.) -* Add the Apache repository of Cassandra to -`/etc/yum.repos.d/cassandra.repo`, for example for the latest 3.11 -version: - -[source,text] ----- -[cassandra] -name=Apache Cassandra -baseurl=https://downloads.apache.org/cassandra/redhat/311x/ -gpgcheck=1 -repo_gpgcheck=1 -gpgkey=https://downloads.apache.org/cassandra/KEYS ----- - -* Install Cassandra, accepting the gpg key import prompts: - -.... -sudo yum install cassandra -.... - -Start Cassandra (will not start automatically): - -.... -service cassandra start -.... - -Systemd based distributions may require to run `systemctl daemon-reload` -once to make Cassandra available as a systemd service. This should -happen automatically by running the command above. - -Make Cassandra start automatically after reboot: - -.... -chkconfig cassandra on -.... - -Please note that official RPMs for Apache Cassandra only have been -available recently and are not tested thoroughly on all platforms yet. -We appreciate your feedback and support and ask you to post details on -any issues in the -https://issues.apache.org/jira/browse/CASSANDRA-13433[corresponding Jira -ticket]. - -=== Source - -Development is done in the Apache Git repository. To check out a copy: - -.... -git clone https://gitbox.apache.org/repos/asf/cassandra.git -.... diff --git a/doc/source/modules/sitestuff/pages/third-party.adoc b/doc/source/modules/sitestuff/pages/third-party.adoc deleted file mode 100644 index ffde41a1a9c0..000000000000 --- a/doc/source/modules/sitestuff/pages/third-party.adoc +++ /dev/null @@ -1,173 +0,0 @@ -= Third-party projects - -== Third-party projects - -=== Cassandra as-a-Service cloud offerings - -* https://aiven.io/cassandra[Aiven for Apache Cassandra]: Aiven for -Apache Cassandra is a fully managed NoSQL database, deployable in the -cloud of your choice. Snap it into your existing workflows with the -click of a button, automate away the mundane tasks, and focus on -building your core apps. Now running Cassandra 3.11. -* https://aws.amazon.com/keyspaces/[Amazon Keyspaces (for Apache -Cassandra)]: Scalable, highly available, and managed Apache -Cassandra–compatible database service. -* https://astra.datastax.com[DataStax Astra]: Cloud-native database -as-a-service built on Apache Cassandra™ complete with a free-tier and -CQL, REST and GraphQL APIs for faster development. Deployable in AWS and -GCP. -* https://www.instaclustr.com/solutions/managed-apache-cassandra[Instaclustr -Hosted & Managed Apache Cassandra as a Service]: Instaclustr provides a -fully managed and SOC 2 certified hosted & managed service for Apache -Cassandra® on AWS, Azure, GCP and IBM Cloud. - -=== Cassandra installation tools - -* https://hub.docker.com/_/cassandra[Docker community Cassandra images]: -Docker images for Apache Cassandra maintained by the Docker community -* https://downloads.datastax.com/#desktop[DataStax Desktop]: -Cross-platform (Windows, MacOSX, Linux) application that allows -developers to quickly explore Apache Cassandra™ with a few clicks on -their laptop, complete with tutorials and walkthroughs. -* https://github.com/thelastpickle/tlp-cluster[The Last Pickle -tlp-cluster]: tlp-cluster, a tool for launching Cassandra clusters in -AWS (DataStax) - -=== Cassandra tools - -* https://cassandra.link[cassandra.link]: Curated site with tools, along -with https://cassandra.tools[cassandra.tools]. -* https://github.com/criteo/cassandra_exporter[Cassandra Prometheus -Exporter]: Standalone application which exports Cassandra metrics -through a prometheus friendly endpoint -* https://downloads.datastax.com/#bulk-loader[DataStax Bulk Loader]: -Easy-to-use command line utility for loading and unloading JSON or CSV -files to/from the database, counting rows in tables and identifying -large partitions. -* https://github.com/datastax/metric-collector-for-apache-cassandra[DataStax -Metrics Collector for Cassandra]: Based on Collectd, aggregates OS and -Cassandra metrics along with diagnostic events to facilitate problem -resolution and remediation -* https://hackolade.com/nosqldb.html#cassandra[Hackolade]: Visual data -modeling tool for Cassandra -* https://github.com/thelastpickle/cassandra-medusa[The Last Pickle -Medusa]: Apache Cassandra Backup and Restore Tool (DataStax) -* https://github.com/thelastpickle/cassandra-reaper[The Last Pickle -Reaper]: Automated repair tool for Apache Cassandra (DataStax) -* https://github.com/thelastpickle/tlp-stress[The Last Pickle Cassandra -stress tool, tlp-stress]: A workload-centric stress tool for Apache -Cassandra. Designed for simplicity, no math degree required. (DataStax) -* https://github.com/nosqlbench/nosqlbench[NoSQLBench]: Pluggable -benchmarking suite for Cassandra and other distributed systems - -=== Cassandra Kubernetes operators - -* https://github.com/mesosphere/kudo-cassandra-operator[D2iQ Cassandra -Kudo Operator]: The KUDO Cassandra Operator makes it easy to deploy and -manage Apache Cassandra on Kubernetes. -* https://github.com/datastax/cass-operator[DataStax cass-operator]: The -DataStax Kubernetes Operator for Apache Cassandra -* https://github.com/instaclustr/cassandra-operator[Instaclustr -cassandra-operator]: The Cassandra operator manages Cassandra clusters -deployed to Kubernetes and automates tasks related to operating a -Cassandra cluster. -* https://orange-opensource.github.io/casskop/[Orange CassKop]: The -Orange Cassandra operator is a Kubernetes operator to automate -provisioning, management, autoscaling and operations of Apache Cassandra -clusters deployed to K8s. -* https://github.com/sky-uk/cassandra-operator[Sky Cassandra Operator]: -The Sky Cassandra Operator is a Kubernetes operator that manages -Cassandra clusters inside Kubernetes. - -=== Cassandra management sidecars - -* https://github.com/apache/cassandra-sidecar[Apache Cassandra -cassandra-sidecar]: Sidecar for the highly scalable Apache Cassandra -database, built as part of the Apache Cassandra project. -* https://github.com/datastax/management-api-for-apache-cassandra[DataStax -Management API for Apache Cassandra]: RESTful / Secure Management -Sidecar for Apache Cassandra -* https://github.com/datastax/spring-boot[DataStax Spring Boot]: Spring -Boot extension -* https://github.com/instaclustr/cassandra-sidecar[Instaclustr -cassandra-sidecar]: This repository is home of a sidecar for Apache -Cassandra database. Sidecar is meant to be run alongside of Cassandra -instance and sidecar talks to Cassandra via JMX. - -=== Developer Frameworks - -* http://r4fek.github.io/django-cassandra-engine/[Django Cassandra -Engine]: Cassandra backend for Django Framework that allows you to use -Cqlengine directly in your project. -* https://express-cassandra.readthedocs.io/en/stable/[Express -Cassandra]: Express-Cassandra is a Cassandra ORM/ODM/OGM for NodeJS with -Elassandra & JanusGraph Support. -* https://quarkus.io/guides/cassandra[Quarkus extension for Apache -Cassandra]: An Apache Cassandra(R) extension for Quarkus. Quarkus is A -Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM, -crafted from the best of breed Java libraries and standards. -* https://spring.io/projects/spring-data-cassandra[Spring Data -Cassandra]: With the power to stay at a high level with annotated POJOs, -or at a low level with high performance data ingestion capabilities, the -Spring Data for Apache Cassandra templates are sure to meet every -application need -* https://www.testcontainers.org/modules/databases/cassandra/[TestContainers]: -Testcontainers is a Java library that supports JUnit tests, providing -lightweight, throwaway instances of common databases, Selenium web -browsers, or anything else that can run in a Docker container. - -=== Cassandra connectors - -==== Apache Kafka - -* https://www.confluent.io/hub/confluentinc/kafka-connect-cassandra[Confluent -Connect Cassandra]: The Confluent Cassandra Sink Connector is used to -move messages from Kafka into Apache Cassandra. -* https://downloads.datastax.com/#akc[DataStax Sink Connector]: The -DataStax Apache Kafka Connector automatically takes records from Kafka -topics and writes them to a DataStax Enterprise or Apache Cassandra™ -database. This sink connector is deployed in the Kafka Connect framework -and removes the need to build a custom solution to move data between -these two systems. -* https://github.com/debezium/debezium-incubator/tree/master/debezium-connector-cassandra[Debezium -Source Connector]: This connector is currently in incubating state, and -Cassandra is different from the other Debezium connectors since it is -not implemented on top of the Kafka Connect framework. -* https://docs.lenses.io/connectors/sink/cassandra.html[Lenses Sink -Connector]: The Cassandra Sink allows you to write events from Kafka to -Cassandra. The connector converts the value from the Kafka Connect -SinkRecords to JSON and uses Cassandra’s JSON insert functionality to -insert the rows. The task expects pre-created tables in Cassandra. -* https://docs.lenses.io/connectors/source/cassandra.html[Lenses Source -Connector]: Kafka Connect Cassandra is a Source Connector for reading -data from Cassandra and writing to Kafka. - -==== Apache Spark - -* https://github.com/datastax/spark-cassandra-connector[DataStax Spark -Cassandra Connector]: This library lets you expose Cassandra tables as -Spark RDDs and Datasets/DataFrames, write Spark RDDs and -Datasets/DataFrames to Cassandra tables, and execute arbitrary CQL -queries in your Spark applications. - -==== Apache Flink - -* https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/cassandra.html[Flink -Sink Connector]: This connector provides sinks that writes data into a -Apache Cassandra database. - -==== Apache Pulsar - -* https://pulsar.apache.org/docs/en/io-quickstart/#connect-pulsar-to-cassandra[Pulsar -Sink Connector]: The Pulsar Cassandra Sink connector is used to write -messages to a Cassandra Cluster. - -==== Professional Support - -* https://luna.datastax.com/[DataStax Luna], -https://www.datastax.com/services/support/premium-support[DataStax -Premium Support], -https://www.datastax.com/services/professional-services[DataStax -Professional Services] -* https://www.instaclustr.com/services/[Instacluster] -* https://opencredo.com/about-us/[Open Credo] From b9f00bc6d9ef0769b4b1aa89bd3fe531120b2791 Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Mon, 28 Jun 2021 10:46:21 -0700 Subject: [PATCH 102/115] remove sitestuff from nav.adoc --- doc/source/antora.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/source/antora.yml b/doc/source/antora.yml index e4e9ac88976e..c15ca966710e 100644 --- a/doc/source/antora.yml +++ b/doc/source/antora.yml @@ -3,5 +3,4 @@ version: '4.0' prerelease: -beta1 nav: - modules/ROOT/nav.adoc -- modules/sitestuff/nav.adoc - modules/cassandra/nav.adoc From 1e8d32dd4e66b3a1f6edcb32e1e1ed8d99812105 Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Mon, 28 Jun 2021 22:05:07 -0700 Subject: [PATCH 103/115] remove all but antora.yml and modules --- doc/Makefile | 56 ------- doc/{source => }/antora.yml | 0 doc/lib/tabs-block.js | 80 ---------- doc/{source => }/modules/ROOT/nav.adoc | 0 .../modules/ROOT/pages/index.adoc | 0 .../assets/images/Figure_1_backups.jpg | Bin .../assets/images/Figure_1_data_model.jpg | Bin .../assets/images/Figure_1_guarantees.jpg | Bin .../assets/images/Figure_1_read_repair.jpg | Bin .../assets/images/Figure_2_data_model.jpg | Bin .../assets/images/Figure_2_read_repair.jpg | Bin .../assets/images/Figure_3_read_repair.jpg | Bin .../assets/images/Figure_4_read_repair.jpg | Bin .../assets/images/Figure_5_read_repair.jpg | Bin .../assets/images/Figure_6_read_repair.jpg | Bin .../images/data_modeling_chebotko_logical.png | Bin .../data_modeling_chebotko_physical.png | Bin .../images/data_modeling_hotel_bucketing.png | Bin .../assets/images/data_modeling_hotel_erd.png | Bin .../images/data_modeling_hotel_logical.png | Bin .../images/data_modeling_hotel_physical.png | Bin .../images/data_modeling_hotel_queries.png | Bin .../images/data_modeling_hotel_relational.png | Bin .../data_modeling_reservation_logical.png | Bin .../data_modeling_reservation_physical.png | Bin .../cassandra/assets/images/docs_commit.png | Bin .../assets/images/docs_create_branch.png | Bin .../assets/images/docs_create_file.png | Bin .../cassandra/assets/images/docs_editor.png | Bin .../cassandra/assets/images/docs_fork.png | Bin .../cassandra/assets/images/docs_pr.png | Bin .../cassandra/assets/images/docs_preview.png | Bin .../assets/images/eclipse_debug0.png | Bin .../assets/images/eclipse_debug1.png | Bin .../assets/images/eclipse_debug2.png | Bin .../assets/images/eclipse_debug3.png | Bin .../assets/images/eclipse_debug4.png | Bin .../assets/images/eclipse_debug5.png | Bin .../assets/images/eclipse_debug6.png | Bin .../assets/images/example-stress-graph.png | Bin .../modules/cassandra/assets/images/hints.svg | 0 .../modules/cassandra/assets/images/ring.svg | 0 .../cassandra/assets/images/vnodes.svg | 0 .../cassandra/examples/BASH/add_repo_keys.sh | 0 .../cassandra/examples/BASH/apt-get_cass.sh | 0 .../cassandra/examples/BASH/apt-get_update.sh | 0 .../cassandra/examples/BASH/check_backups.sh | 0 .../examples/BASH/cqlsh_localhost.sh | 0 .../cassandra/examples/BASH/curl_install.sh | 0 .../examples/BASH/curl_verify_sha.sh | 0 .../cassandra/examples/BASH/docker_cqlsh.sh | 0 .../cassandra/examples/BASH/docker_pull.sh | 0 .../cassandra/examples/BASH/docker_run.sh | 0 .../cassandra/examples/BASH/find_backups.sh | 0 .../cassandra/examples/BASH/find_snapshots.sh | 0 .../cassandra/examples/BASH/find_sstables.sh | 0 .../examples/BASH/find_two_snapshots.sh | 0 .../examples/BASH/flush_and_check.sh | 0 .../examples/BASH/get_deb_package.sh | 0 .../cassandra/examples/BASH/java_verify.sh | 0 .../examples/BASH/nodetool_clearsnapshot.sh | 0 .../BASH/nodetool_clearsnapshot_all.sh | 0 .../cassandra/examples/BASH/nodetool_flush.sh | 0 .../examples/BASH/nodetool_flush_table.sh | 0 .../examples/BASH/nodetool_list_snapshots.sh | 0 .../examples/BASH/nodetool_snapshot.sh | 0 .../examples/BASH/nodetool_status.sh | 0 .../examples/BASH/nodetool_status_nobin.sh | 0 .../cassandra/examples/BASH/run_cqlsh.sh | 0 .../examples/BASH/run_cqlsh_nobin.sh | 0 .../examples/BASH/snapshot_backup2.sh | 0 .../examples/BASH/snapshot_both_backups.sh | 0 .../cassandra/examples/BASH/snapshot_files.sh | 0 .../examples/BASH/snapshot_mult_ks.sh | 0 .../examples/BASH/snapshot_mult_tables.sh | 0 .../BASH/snapshot_mult_tables_again.sh | 0 .../examples/BASH/snapshot_one_table.sh | 0 .../examples/BASH/snapshot_one_table2.sh | 0 .../cassandra/examples/BASH/start_tarball.sh | 0 .../cassandra/examples/BASH/tail_syslog.sh | 0 .../examples/BASH/tail_syslog_package.sh | 0 .../cassandra/examples/BASH/tarball.sh | 0 .../cassandra/examples/BASH/verify_gpg.sh | 0 .../cassandra/examples/BASH/yum_cass.sh | 0 .../cassandra/examples/BASH/yum_start.sh | 0 .../cassandra/examples/BASH/yum_update.sh | 0 .../cassandra/examples/BNF/alter_ks.bnf | 0 .../examples/BNF/alter_mv_statement.bnf | 0 .../examples/BNF/alter_role_statement.bnf | 0 .../cassandra/examples/BNF/alter_table.bnf | 0 .../examples/BNF/alter_udt_statement.bnf | 0 .../examples/BNF/alter_user_statement.bnf | 0 .../examples/BNF/batch_statement.bnf | 0 .../examples/BNF/collection_literal.bnf | 0 .../examples/BNF/collection_type.bnf | 0 .../modules/cassandra/examples/BNF/column.bnf | 0 .../cassandra/examples/BNF/constant.bnf | 0 .../cassandra/examples/BNF/cql_statement.bnf | 0 .../cassandra/examples/BNF/cql_type.bnf | 0 .../BNF/create_aggregate_statement.bnf | 0 .../BNF/create_function_statement.bnf | 0 .../examples/BNF/create_index_statement.bnf | 0 .../cassandra/examples/BNF/create_ks.bnf | 0 .../examples/BNF/create_mv_statement.bnf | 0 .../examples/BNF/create_role_statement.bnf | 0 .../cassandra/examples/BNF/create_table.bnf | 0 .../examples/BNF/create_trigger_statement.bnf | 0 .../cassandra/examples/BNF/create_type.bnf | 0 .../examples/BNF/create_user_statement.bnf | 0 .../cassandra/examples/BNF/custom_type.bnf | 0 .../examples/BNF/delete_statement.bnf | 0 .../examples/BNF/drop_aggregate_statement.bnf | 0 .../examples/BNF/drop_function_statement.bnf | 0 .../examples/BNF/drop_index_statement.bnf | 0 .../cassandra/examples/BNF/drop_ks.bnf | 0 .../examples/BNF/drop_mv_statement.bnf | 0 .../examples/BNF/drop_role_statement.bnf | 0 .../cassandra/examples/BNF/drop_table.bnf | 0 .../examples/BNF/drop_trigger_statement.bnf | 0 .../examples/BNF/drop_udt_statement.bnf | 0 .../examples/BNF/drop_user_statement.bnf | 0 .../cassandra/examples/BNF/function.bnf | 0 .../BNF/grant_permission_statement.bnf | 0 .../examples/BNF/grant_role_statement.bnf | 0 .../cassandra/examples/BNF/identifier.bnf | 0 .../cassandra/examples/BNF/index_name.bnf | 0 .../examples/BNF/insert_statement.bnf | 0 .../cassandra/examples/BNF/ks_table.bnf | 0 .../BNF/list_permissions_statement.bnf | 0 .../examples/BNF/list_roles_statement.bnf | 0 .../examples/BNF/list_users_statement.bnf | 0 .../cassandra/examples/BNF/native_type.bnf | 0 .../cassandra/examples/BNF/options.bnf | 0 .../BNF/revoke_permission_statement.bnf | 0 .../examples/BNF/revoke_role_statement.bnf | 0 .../cassandra/examples/BNF/role_name.bnf | 0 .../examples/BNF/select_statement.bnf | 0 .../modules/cassandra/examples/BNF/term.bnf | 0 .../cassandra/examples/BNF/trigger_name.bnf | 0 .../cassandra/examples/BNF/truncate_table.bnf | 0 .../modules/cassandra/examples/BNF/tuple.bnf | 0 .../modules/cassandra/examples/BNF/udt.bnf | 0 .../cassandra/examples/BNF/udt_literal.bnf | 0 .../examples/BNF/update_statement.bnf | 0 .../modules/cassandra/examples/BNF/use_ks.bnf | 0 .../cassandra/examples/BNF/view_name.bnf | 0 .../examples/CQL/allow_filtering.cql | 0 .../cassandra/examples/CQL/alter_ks.cql | 0 .../cassandra/examples/CQL/alter_role.cql | 0 .../examples/CQL/alter_table_add_column.cql | 0 .../examples/CQL/alter_table_spec_retry.cql | 0 .../CQL/alter_table_spec_retry_percent.cql | 0 .../examples/CQL/alter_table_with_comment.cql | 0 .../cassandra/examples/CQL/alter_user.cql | 0 .../modules/cassandra/examples/CQL/as.cql | 0 .../examples/CQL/autoexpand_exclude_dc.cql | 0 .../cassandra/examples/CQL/autoexpand_ks.cql | 0 .../examples/CQL/autoexpand_ks_override.cql | 0 .../modules/cassandra/examples/CQL/avg.cql | 0 .../examples/CQL/batch_statement.cql | 0 .../cassandra/examples/CQL/caching_option.cql | 0 .../cassandra/examples/CQL/chunk_length.cql | 0 .../modules/cassandra/examples/CQL/count.cql | 0 .../cassandra/examples/CQL/count_nonnull.cql | 0 .../examples/CQL/create_function.cql | 0 .../cassandra/examples/CQL/create_index.cql | 0 .../cassandra/examples/CQL/create_ks.cql | 0 .../examples/CQL/create_ks2_backup.cql | 0 .../examples/CQL/create_ks_backup.cql | 0 .../examples/CQL/create_ks_trans_repl.cql | 0 .../examples/CQL/create_mv_statement.cql | 0 .../cassandra/examples/CQL/create_role.cql | 0 .../examples/CQL/create_role_ifnotexists.cql | 0 .../examples/CQL/create_static_column.cql | 0 .../cassandra/examples/CQL/create_table.cql | 0 .../examples/CQL/create_table2_backup.cql | 0 .../examples/CQL/create_table_backup.cql | 0 .../CQL/create_table_clustercolumn.cql | 0 .../examples/CQL/create_table_compound_pk.cql | 0 .../examples/CQL/create_table_simple.cql | 0 .../examples/CQL/create_table_single_pk.cql | 0 .../cassandra/examples/CQL/create_trigger.cql | 0 .../cassandra/examples/CQL/create_user.cql | 0 .../examples/CQL/create_user_role.cql | 0 .../cassandra/examples/CQL/currentdate.cql | 0 .../examples/CQL/datetime_arithmetic.cql | 0 .../examples/CQL/delete_all_elements_list.cql | 0 .../examples/CQL/delete_element_list.cql | 0 .../cassandra/examples/CQL/delete_map.cql | 0 .../cassandra/examples/CQL/delete_set.cql | 0 .../examples/CQL/delete_statement.cql | 0 .../cassandra/examples/CQL/drop_aggregate.cql | 0 .../cassandra/examples/CQL/drop_function.cql | 0 .../cassandra/examples/CQL/drop_ks.cql | 0 .../cassandra/examples/CQL/drop_trigger.cql | 0 .../examples/CQL/function_dollarsign.cql | 0 .../examples/CQL/function_overload.cql | 0 .../examples/CQL/function_udfcontext.cql | 0 .../cassandra/examples/CQL/grant_describe.cql | 0 .../cassandra/examples/CQL/grant_drop.cql | 0 .../cassandra/examples/CQL/grant_execute.cql | 0 .../cassandra/examples/CQL/grant_modify.cql | 0 .../cassandra/examples/CQL/grant_perm.cql | 0 .../cassandra/examples/CQL/grant_role.cql | 0 .../examples/CQL/insert_data2_backup.cql | 0 .../examples/CQL/insert_data_backup.cql | 0 .../examples/CQL/insert_duration.cql | 0 .../cassandra/examples/CQL/insert_json.cql | 0 .../examples/CQL/insert_statement.cql | 0 .../examples/CQL/insert_static_data.cql | 0 .../examples/CQL/insert_table_cc_addl.cql | 0 .../CQL/insert_table_clustercolumn.cql | 0 .../CQL/insert_table_clustercolumn2.cql | 0 .../examples/CQL/insert_table_compound_pk.cql | 0 .../cassandra/examples/CQL/insert_udt.cql | 0 .../modules/cassandra/examples/CQL/list.cql | 0 .../cassandra/examples/CQL/list_all_perm.cql | 0 .../cassandra/examples/CQL/list_perm.cql | 0 .../cassandra/examples/CQL/list_roles.cql | 0 .../examples/CQL/list_roles_nonrecursive.cql | 0 .../cassandra/examples/CQL/list_roles_of.cql | 0 .../examples/CQL/list_select_perm.cql | 0 .../modules/cassandra/examples/CQL/map.cql | 0 .../cassandra/examples/CQL/min_max.cql | 0 .../cassandra/examples/CQL/mv_table_def.cql | 0 .../cassandra/examples/CQL/mv_table_error.cql | 0 .../examples/CQL/mv_table_from_base.cql | 0 .../cassandra/examples/CQL/no_revoke.cql | 0 .../examples/CQL/query_allow_filtering.cql | 0 .../CQL/query_fail_allow_filtering.cql | 0 .../CQL/query_nofail_allow_filtering.cql | 0 .../examples/CQL/rename_udt_field.cql | 0 .../cassandra/examples/CQL/revoke_perm.cql | 0 .../cassandra/examples/CQL/revoke_role.cql | 0 .../cassandra/examples/CQL/role_error.cql | 0 .../examples/CQL/select_data2_backup.cql | 0 .../examples/CQL/select_data_backup.cql | 0 .../cassandra/examples/CQL/select_range.cql | 0 .../examples/CQL/select_statement.cql | 0 .../examples/CQL/select_static_data.cql | 0 .../CQL/select_table_clustercolumn.cql | 0 .../examples/CQL/select_table_compound_pk.cql | 0 .../modules/cassandra/examples/CQL/set.cql | 0 .../examples/CQL/spec_retry_values.cql | 0 .../modules/cassandra/examples/CQL/sum.cql | 0 .../examples/CQL/table_for_where.cql | 0 .../examples/CQL/timeuuid_min_max.cql | 0 .../cassandra/examples/CQL/timeuuid_now.cql | 0 .../modules/cassandra/examples/CQL/token.cql | 0 .../modules/cassandra/examples/CQL/tuple.cql | 0 .../modules/cassandra/examples/CQL/uda.cql | 0 .../modules/cassandra/examples/CQL/udt.cql | 0 .../cassandra/examples/CQL/update_list.cql | 0 .../cassandra/examples/CQL/update_map.cql | 0 .../CQL/update_particular_list_element.cql | 0 .../cassandra/examples/CQL/update_set.cql | 0 .../examples/CQL/update_statement.cql | 0 .../cassandra/examples/CQL/update_ttl_map.cql | 0 .../modules/cassandra/examples/CQL/use_ks.cql | 0 .../modules/cassandra/examples/CQL/where.cql | 0 .../cassandra/examples/CQL/where_fail.cql | 0 .../CQL/where_group_cluster_columns.cql | 0 .../cassandra/examples/CQL/where_in_tuple.cql | 0 .../CQL/where_no_group_cluster_columns.cql | 0 .../cassandra/examples/JAVA/udf_imports.java | 0 .../cassandra/examples/JAVA/udfcontext.java | 0 .../examples/RESULTS/add_repo_keys.result | 0 .../examples/RESULTS/add_yum_repo.result | 0 .../RESULTS/autoexpand_exclude_dc.result | 0 .../examples/RESULTS/autoexpand_ks.result | 0 .../RESULTS/autoexpand_ks_override.result | 0 .../examples/RESULTS/cqlsh_localhost.result | 0 .../examples/RESULTS/find_backups.result | 0 .../RESULTS/find_backups_table.result | 0 .../RESULTS/find_two_snapshots.result | 0 .../examples/RESULTS/flush_and_check.result | 0 .../examples/RESULTS/flush_and_check2.result | 0 .../RESULTS/insert_data2_backup.result | 0 .../RESULTS/insert_table_cc_addl.result | 0 .../examples/RESULTS/java_verify.result | 0 .../cassandra/examples/RESULTS/no_bups.result | 0 .../RESULTS/nodetool_list_snapshots.result | 0 .../RESULTS/nodetool_snapshot_help.result | 0 .../RESULTS/select_data2_backup.result | 0 .../RESULTS/select_data_backup.result | 0 .../examples/RESULTS/select_range.result | 0 .../RESULTS/select_static_data.result | 0 .../RESULTS/select_table_clustercolumn.result | 0 .../RESULTS/select_table_compound_pk.result | 0 .../examples/RESULTS/snapshot_all.result | 0 .../examples/RESULTS/snapshot_backup2.result | 0 .../RESULTS/snapshot_backup2_find.result | 0 .../examples/RESULTS/snapshot_files.result | 0 .../examples/RESULTS/snapshot_mult_ks.result | 0 .../RESULTS/snapshot_mult_tables.result | 0 .../RESULTS/snapshot_mult_tables_again.result | 0 .../RESULTS/snapshot_one_table2.result | 0 .../examples/RESULTS/tail_syslog.result | 0 .../examples/RESULTS/verify_gpg.result | 0 .../examples/TEXT/NODETOOL/assassinate.txt | 0 .../examples/TEXT/NODETOOL/bootstrap.txt | 0 .../examples/TEXT/NODETOOL/cleanup.txt | 0 .../examples/TEXT/NODETOOL/clearsnapshot.txt | 0 .../examples/TEXT/NODETOOL/clientstats.txt | 0 .../examples/TEXT/NODETOOL/compact.txt | 0 .../TEXT/NODETOOL/compactionhistory.txt | 0 .../TEXT/NODETOOL/compactionstats.txt | 0 .../examples/TEXT/NODETOOL/decommission.txt | 0 .../TEXT/NODETOOL/describecluster.txt | 0 .../examples/TEXT/NODETOOL/describering.txt | 0 .../TEXT/NODETOOL/disableauditlog.txt | 0 .../TEXT/NODETOOL/disableautocompaction.txt | 0 .../examples/TEXT/NODETOOL/disablebackup.txt | 0 .../examples/TEXT/NODETOOL/disablebinary.txt | 0 .../TEXT/NODETOOL/disablefullquerylog.txt | 0 .../examples/TEXT/NODETOOL/disablegossip.txt | 0 .../examples/TEXT/NODETOOL/disablehandoff.txt | 0 .../TEXT/NODETOOL/disablehintsfordc.txt | 0 .../NODETOOL/disableoldprotocolversions.txt | 0 .../examples/TEXT/NODETOOL/drain.txt | 0 .../examples/TEXT/NODETOOL/enableauditlog.txt | 0 .../TEXT/NODETOOL/enableautocompaction.txt | 0 .../examples/TEXT/NODETOOL/enablebackup.txt | 0 .../examples/TEXT/NODETOOL/enablebinary.txt | 0 .../TEXT/NODETOOL/enablefullquerylog.txt | 0 .../examples/TEXT/NODETOOL/enablegossip.txt | 0 .../examples/TEXT/NODETOOL/enablehandoff.txt | 0 .../TEXT/NODETOOL/enablehintsfordc.txt | 0 .../NODETOOL/enableoldprotocolversions.txt | 0 .../TEXT/NODETOOL/failuredetector.txt | 0 .../examples/TEXT/NODETOOL/flush.txt | 0 .../examples/TEXT/NODETOOL/garbagecollect.txt | 0 .../examples/TEXT/NODETOOL/gcstats.txt | 0 .../NODETOOL/getbatchlogreplaythrottle.txt | 0 .../TEXT/NODETOOL/getcompactionthreshold.txt | 0 .../TEXT/NODETOOL/getcompactionthroughput.txt | 0 .../examples/TEXT/NODETOOL/getconcurrency.txt | 0 .../TEXT/NODETOOL/getconcurrentcompactors.txt | 0 .../NODETOOL/getconcurrentviewbuilders.txt | 0 .../examples/TEXT/NODETOOL/getendpoints.txt | 0 .../NODETOOL/getinterdcstreamthroughput.txt | 0 .../TEXT/NODETOOL/getlogginglevels.txt | 0 .../TEXT/NODETOOL/getmaxhintwindow.txt | 0 .../examples/TEXT/NODETOOL/getseeds.txt | 0 .../examples/TEXT/NODETOOL/getsstables.txt | 0 .../TEXT/NODETOOL/getstreamthroughput.txt | 0 .../examples/TEXT/NODETOOL/gettimeout.txt | 0 .../TEXT/NODETOOL/gettraceprobability.txt | 0 .../examples/TEXT/NODETOOL/gossipinfo.txt | 0 .../cassandra/examples/TEXT/NODETOOL/help.txt | 0 .../examples/TEXT/NODETOOL/import.txt | 0 .../cassandra/examples/TEXT/NODETOOL/info.txt | 0 .../TEXT/NODETOOL/invalidatecountercache.txt | 0 .../TEXT/NODETOOL/invalidatekeycache.txt | 0 .../TEXT/NODETOOL/invalidaterowcache.txt | 0 .../cassandra/examples/TEXT/NODETOOL/join.txt | 0 .../examples/TEXT/NODETOOL/listsnapshots.txt | 0 .../cassandra/examples/TEXT/NODETOOL/move.txt | 0 .../examples/TEXT/NODETOOL/netstats.txt | 0 .../examples/TEXT/NODETOOL/pausehandoff.txt | 0 .../examples/TEXT/NODETOOL/profileload.txt | 0 .../TEXT/NODETOOL/proxyhistograms.txt | 0 .../examples/TEXT/NODETOOL/rangekeysample.txt | 0 .../examples/TEXT/NODETOOL/rebuild.txt | 0 .../examples/TEXT/NODETOOL/rebuild_index.txt | 0 .../examples/TEXT/NODETOOL/refresh.txt | 0 .../TEXT/NODETOOL/refreshsizeestimates.txt | 0 .../TEXT/NODETOOL/reloadlocalschema.txt | 0 .../examples/TEXT/NODETOOL/reloadseeds.txt | 0 .../examples/TEXT/NODETOOL/reloadssl.txt | 0 .../examples/TEXT/NODETOOL/reloadtriggers.txt | 0 .../TEXT/NODETOOL/relocatesstables.txt | 0 .../examples/TEXT/NODETOOL/removenode.txt | 0 .../examples/TEXT/NODETOOL/repair.txt | 0 .../examples/TEXT/NODETOOL/repair_admin.txt | 0 .../examples/TEXT/NODETOOL/replaybatchlog.txt | 0 .../TEXT/NODETOOL/resetfullquerylog.txt | 0 .../TEXT/NODETOOL/resetlocalschema.txt | 0 .../examples/TEXT/NODETOOL/resumehandoff.txt | 0 .../cassandra/examples/TEXT/NODETOOL/ring.txt | 0 .../examples/TEXT/NODETOOL/scrub.txt | 0 .../NODETOOL/setbatchlogreplaythrottle.txt | 0 .../TEXT/NODETOOL/setcachecapacity.txt | 0 .../TEXT/NODETOOL/setcachekeystosave.txt | 0 .../TEXT/NODETOOL/setcompactionthreshold.txt | 0 .../TEXT/NODETOOL/setcompactionthroughput.txt | 0 .../examples/TEXT/NODETOOL/setconcurrency.txt | 0 .../TEXT/NODETOOL/setconcurrentcompactors.txt | 0 .../NODETOOL/setconcurrentviewbuilders.txt | 0 .../NODETOOL/sethintedhandoffthrottlekb.txt | 0 .../NODETOOL/setinterdcstreamthroughput.txt | 0 .../TEXT/NODETOOL/setlogginglevel.txt | 0 .../TEXT/NODETOOL/setmaxhintwindow.txt | 0 .../TEXT/NODETOOL/setstreamthroughput.txt | 0 .../examples/TEXT/NODETOOL/settimeout.txt | 0 .../TEXT/NODETOOL/settraceprobability.txt | 0 .../cassandra/examples/TEXT/NODETOOL/sjk.txt | 0 .../examples/TEXT/NODETOOL/snapshot.txt | 0 .../examples/TEXT/NODETOOL/status.txt | 0 .../TEXT/NODETOOL/statusautocompaction.txt | 0 .../examples/TEXT/NODETOOL/statusbackup.txt | 0 .../examples/TEXT/NODETOOL/statusbinary.txt | 0 .../examples/TEXT/NODETOOL/statusgossip.txt | 0 .../examples/TEXT/NODETOOL/statushandoff.txt | 0 .../cassandra/examples/TEXT/NODETOOL/stop.txt | 0 .../examples/TEXT/NODETOOL/stopdaemon.txt | 0 .../TEXT/NODETOOL/tablehistograms.txt | 0 .../examples/TEXT/NODETOOL/tablestats.txt | 0 .../examples/TEXT/NODETOOL/toppartitions.txt | 0 .../examples/TEXT/NODETOOL/tpstats.txt | 0 .../examples/TEXT/NODETOOL/truncatehints.txt | 0 .../TEXT/NODETOOL/upgradesstables.txt | 0 .../examples/TEXT/NODETOOL/verify.txt | 0 .../examples/TEXT/NODETOOL/version.txt | 0 .../TEXT/NODETOOL/viewbuildstatus.txt | 0 .../examples/TEXT/native_protocol_v3.spec | 0 .../examples/TEXT/native_protocol_v4.spec | 0 .../examples/TEXT/native_protocol_v5.spec | 0 .../examples/TEXT/tarball_install_dirs.txt | 0 .../examples/YAML/auto_snapshot.yaml | 0 .../examples/YAML/incremental_bups.yaml | 0 .../YAML/snapshot_before_compaction.yaml | 0 .../examples/YAML/stress-example.yaml | 0 .../examples/YAML/stress-lwt-example.yaml | 0 doc/{source => }/modules/cassandra/nav.adoc | 0 .../cassandra/pages/architecture/dynamo.adoc | 0 .../pages/architecture/guarantees.adoc | 0 .../pages/architecture/images/ring.svg | 0 .../pages/architecture/images/vnodes.svg | 0 .../cassandra/pages/architecture/index.adoc | 0 .../pages/architecture/overview.adoc | 0 .../cassandra/pages/architecture/snitch.adoc | 0 .../pages/architecture/storage_engine.adoc | 0 .../configuration/cass_cl_archive_file.adoc | 0 .../pages/configuration/cass_env_sh_file.adoc | 0 .../configuration/cass_jvm_options_file.adoc | 0 .../configuration/cass_logback_xml_file.adoc | 0 .../pages/configuration/cass_rackdc_file.adoc | 0 .../pages/configuration/cass_topo_file.adoc | 0 .../pages/configuration/cass_yaml_file.adoc | 0 .../cassandra/pages/configuration/index.adoc | 0 .../modules/cassandra/pages/cql/SASI.adoc | 0 .../cassandra/pages/cql/appendices.adoc | 0 .../modules/cassandra/pages/cql/changes.adoc | 0 .../cassandra/pages/cql/cql_singlefile.adoc | 0 .../modules/cassandra/pages/cql/ddl.adoc | 0 .../cassandra/pages/cql/definitions.adoc | 0 .../modules/cassandra/pages/cql/dml.adoc | 0 .../cassandra/pages/cql/functions.adoc | 0 .../modules/cassandra/pages/cql/index.adoc | 0 .../modules/cassandra/pages/cql/indexes.adoc | 0 .../modules/cassandra/pages/cql/json.adoc | 0 .../modules/cassandra/pages/cql/mvs.adoc | 0 .../cassandra/pages/cql/operators.adoc | 0 .../modules/cassandra/pages/cql/security.adoc | 0 .../modules/cassandra/pages/cql/triggers.adoc | 0 .../modules/cassandra/pages/cql/types.adoc | 0 .../data_modeling_conceptual.adoc | 0 .../data_modeling/data_modeling_logical.adoc | 0 .../data_modeling/data_modeling_physical.adoc | 0 .../data_modeling/data_modeling_queries.adoc | 0 .../data_modeling/data_modeling_rdbms.adoc | 0 .../data_modeling/data_modeling_refining.adoc | 0 .../data_modeling/data_modeling_schema.adoc | 0 .../data_modeling/data_modeling_tools.adoc | 0 .../images/Figure_1_data_model.jpg | Bin .../images/Figure_2_data_model.jpg | Bin .../images/data_modeling_chebotko_logical.png | Bin .../data_modeling_chebotko_physical.png | Bin .../images/data_modeling_hotel_bucketing.png | Bin .../images/data_modeling_hotel_erd.png | Bin .../images/data_modeling_hotel_logical.png | Bin .../images/data_modeling_hotel_physical.png | Bin .../images/data_modeling_hotel_queries.png | Bin .../images/data_modeling_hotel_relational.png | Bin .../data_modeling_reservation_logical.png | Bin .../data_modeling_reservation_physical.png | Bin .../cassandra/pages/data_modeling/index.adoc | 0 .../cassandra/pages/data_modeling/intro.adoc | 0 .../cassandra/pages/development/ci.adoc | 0 .../pages/development/code_style.adoc | 0 .../pages/development/dependencies.adoc | 0 .../pages/development/documentation.adoc | 0 .../pages/development/gettingstarted.adoc | 0 .../pages/development/how_to_commit.adoc | 0 .../pages/development/how_to_review.adoc | 0 .../cassandra/pages/development/ide.adoc | 0 .../pages/development/images/docs_commit.png | Bin .../development/images/docs_create_branch.png | Bin .../development/images/docs_create_file.png | Bin .../pages/development/images/docs_editor.png | Bin .../pages/development/images/docs_fork.png | Bin .../pages/development/images/docs_pr.png | Bin .../pages/development/images/docs_preview.png | Bin .../development/images/eclipse_debug0.png | Bin .../development/images/eclipse_debug1.png | Bin .../development/images/eclipse_debug2.png | Bin .../development/images/eclipse_debug3.png | Bin .../development/images/eclipse_debug4.png | Bin .../development/images/eclipse_debug5.png | Bin .../development/images/eclipse_debug6.png | Bin .../cassandra/pages/development/index.adoc | 0 .../cassandra/pages/development/patches.adoc | 0 .../pages/development/release_process.adoc | 0 .../cassandra/pages/development/testing.adoc | 0 .../modules/cassandra/pages/faq/index.adoc | 0 .../pages/getting_started/configuring.adoc | 0 .../pages/getting_started/drivers.adoc | 0 .../pages/getting_started/index.adoc | 0 .../pages/getting_started/installing.adoc | 0 .../pages/getting_started/production.adoc | 0 .../pages/getting_started/querying.adoc | 0 .../pages/getting_started/quickstart.adoc | 0 .../modules/cassandra/pages/new/Figure_1.jpg | Bin .../modules/cassandra/pages/new/Figure_2.jpg | Bin .../cassandra/pages/new/auditlogging.adoc | 0 .../cassandra/pages/new/fqllogging.adoc | 0 .../modules/cassandra/pages/new/index.adoc | 0 .../modules/cassandra/pages/new/java11.adoc | 0 .../cassandra/pages/new/messaging.adoc | 0 .../cassandra/pages/new/streaming.adoc | 0 .../pages/new/transientreplication.adoc | 0 .../cassandra/pages/new/virtualtables.adoc | 0 .../pages/operating/audit_logging.adoc | 0 .../cassandra/pages/operating/backups.adoc | 0 .../pages/operating/bloom_filters.adoc | 0 .../pages/operating/bulk_loading.adoc | 0 .../cassandra/pages/operating/cdc.adoc | 0 .../pages/operating/compaction/index.adoc | 0 .../pages/operating/compaction/lcs.adoc | 0 .../pages/operating/compaction/stcs.adoc | 0 .../pages/operating/compaction/twcs.adoc | 0 .../pages/operating/compression.adoc | 0 .../cassandra/pages/operating/hardware.adoc | 0 .../cassandra/pages/operating/hints.adoc | 0 .../cassandra/pages/operating/index.adoc | 0 .../cassandra/pages/operating/metrics.adoc | 0 .../pages/operating/read_repair.adoc | 0 .../cassandra/pages/operating/repair.adoc | 0 .../cassandra/pages/operating/security.adoc | 0 .../pages/operating/topo_changes.adoc | 0 .../cassandra/pages/plugins/index.adoc | 0 .../pages/tools/cassandra_stress.adoc | 0 .../modules/cassandra/pages/tools/cqlsh.adoc | 0 .../modules/cassandra/pages/tools/index.adoc | 0 .../pages/tools/nodetool/assassinate.adoc | 0 .../pages/tools/nodetool/bootstrap.adoc | 0 .../pages/tools/nodetool/cleanup.adoc | 0 .../pages/tools/nodetool/clearsnapshot.adoc | 0 .../pages/tools/nodetool/clientstats.adoc | 0 .../pages/tools/nodetool/compact.adoc | 0 .../tools/nodetool/compactionhistory.adoc | 0 .../pages/tools/nodetool/compactionstats.adoc | 0 .../cassandra/pages/tools/nodetool/convert.sh | 0 .../pages/tools/nodetool/decommission.adoc | 0 .../pages/tools/nodetool/describecluster.adoc | 0 .../pages/tools/nodetool/describering.adoc | 0 .../pages/tools/nodetool/disableauditlog.adoc | 0 .../tools/nodetool/disableautocompaction.adoc | 0 .../pages/tools/nodetool/disablebackup.adoc | 0 .../pages/tools/nodetool/disablebinary.adoc | 0 .../tools/nodetool/disablefullquerylog.adoc | 0 .../pages/tools/nodetool/disablegossip.adoc | 0 .../pages/tools/nodetool/disablehandoff.adoc | 0 .../tools/nodetool/disablehintsfordc.adoc | 0 .../nodetool/disableoldprotocolversions.adoc | 0 .../cassandra/pages/tools/nodetool/drain.adoc | 0 .../pages/tools/nodetool/enableauditlog.adoc | 0 .../tools/nodetool/enableautocompaction.adoc | 0 .../pages/tools/nodetool/enablebackup.adoc | 0 .../pages/tools/nodetool/enablebinary.adoc | 0 .../tools/nodetool/enablefullquerylog.adoc | 0 .../pages/tools/nodetool/enablegossip.adoc | 0 .../pages/tools/nodetool/enablehandoff.adoc | 0 .../tools/nodetool/enablehintsfordc.adoc | 0 .../nodetool/enableoldprotocolversions.adoc | 0 .../pages/tools/nodetool/failuredetector.adoc | 0 .../cassandra/pages/tools/nodetool/flush.adoc | 0 .../pages/tools/nodetool/garbagecollect.adoc | 0 .../pages/tools/nodetool/gcstats.adoc | 0 .../nodetool/getbatchlogreplaythrottle.adoc | 0 .../nodetool/getcompactionthreshold.adoc | 0 .../nodetool/getcompactionthroughput.adoc | 0 .../pages/tools/nodetool/getconcurrency.adoc | 0 .../nodetool/getconcurrentcompactors.adoc | 0 .../nodetool/getconcurrentviewbuilders.adoc | 0 .../pages/tools/nodetool/getendpoints.adoc | 0 .../nodetool/getinterdcstreamthroughput.adoc | 0 .../tools/nodetool/getlogginglevels.adoc | 0 .../tools/nodetool/getmaxhintwindow.adoc | 0 .../pages/tools/nodetool/getseeds.adoc | 0 .../pages/tools/nodetool/getsstables.adoc | 0 .../tools/nodetool/getstreamthroughput.adoc | 0 .../pages/tools/nodetool/gettimeout.adoc | 0 .../tools/nodetool/gettraceprobability.adoc | 0 .../pages/tools/nodetool/gossipinfo.adoc | 0 .../cassandra/pages/tools/nodetool/help.adoc | 0 .../pages/tools/nodetool/import.adoc | 0 .../cassandra/pages/tools/nodetool/info.adoc | 0 .../nodetool/invalidatecountercache.adoc | 0 .../tools/nodetool/invalidatekeycache.adoc | 0 .../tools/nodetool/invalidaterowcache.adoc | 0 .../cassandra/pages/tools/nodetool/join.adoc | 0 .../pages/tools/nodetool/listsnapshots.adoc | 0 .../cassandra/pages/tools/nodetool/move.adoc | 0 .../pages/tools/nodetool/netstats.adoc | 0 .../pages/tools/nodetool/nodetool.adoc | 0 .../pages/tools/nodetool/nodetool.txt | 0 .../pages/tools/nodetool/pausehandoff.adoc | 0 .../pages/tools/nodetool/profileload.adoc | 0 .../pages/tools/nodetool/proxyhistograms.adoc | 0 .../pages/tools/nodetool/rangekeysample.adoc | 0 .../pages/tools/nodetool/rebuild.adoc | 0 .../pages/tools/nodetool/rebuild_index.adoc | 0 .../pages/tools/nodetool/refresh.adoc | 0 .../tools/nodetool/refreshsizeestimates.adoc | 0 .../tools/nodetool/reloadlocalschema.adoc | 0 .../pages/tools/nodetool/reloadseeds.adoc | 0 .../pages/tools/nodetool/reloadssl.adoc | 0 .../pages/tools/nodetool/reloadtriggers.adoc | 0 .../tools/nodetool/relocatesstables.adoc | 0 .../pages/tools/nodetool/removenode.adoc | 0 .../pages/tools/nodetool/repair.adoc | 0 .../pages/tools/nodetool/repair_admin.adoc | 0 .../pages/tools/nodetool/replaybatchlog.adoc | 0 .../tools/nodetool/resetfullquerylog.adoc | 0 .../tools/nodetool/resetlocalschema.adoc | 0 .../pages/tools/nodetool/resumehandoff.adoc | 0 .../cassandra/pages/tools/nodetool/ring.adoc | 0 .../cassandra/pages/tools/nodetool/scrub.adoc | 0 .../nodetool/setbatchlogreplaythrottle.adoc | 0 .../tools/nodetool/setcachecapacity.adoc | 0 .../tools/nodetool/setcachekeystosave.adoc | 0 .../nodetool/setcompactionthreshold.adoc | 0 .../nodetool/setcompactionthroughput.adoc | 0 .../pages/tools/nodetool/setconcurrency.adoc | 0 .../nodetool/setconcurrentcompactors.adoc | 0 .../nodetool/setconcurrentviewbuilders.adoc | 0 .../nodetool/sethintedhandoffthrottlekb.adoc | 0 .../nodetool/setinterdcstreamthroughput.adoc | 0 .../pages/tools/nodetool/setlogginglevel.adoc | 0 .../tools/nodetool/setmaxhintwindow.adoc | 0 .../tools/nodetool/setstreamthroughput.adoc | 0 .../pages/tools/nodetool/settimeout.adoc | 0 .../tools/nodetool/settraceprobability.adoc | 0 .../cassandra/pages/tools/nodetool/sjk.adoc | 0 .../pages/tools/nodetool/snapshot.adoc | 0 .../pages/tools/nodetool/status.adoc | 0 .../tools/nodetool/statusautocompaction.adoc | 0 .../pages/tools/nodetool/statusbackup.adoc | 0 .../pages/tools/nodetool/statusbinary.adoc | 0 .../pages/tools/nodetool/statusgossip.adoc | 0 .../pages/tools/nodetool/statushandoff.adoc | 0 .../cassandra/pages/tools/nodetool/stop.adoc | 0 .../pages/tools/nodetool/stopdaemon.adoc | 0 .../pages/tools/nodetool/tablehistograms.adoc | 0 .../pages/tools/nodetool/tablestats.adoc | 0 .../pages/tools/nodetool/toppartitions.adoc | 0 .../pages/tools/nodetool/tpstats.adoc | 0 .../pages/tools/nodetool/truncatehints.adoc | 0 .../pages/tools/nodetool/upgradesstables.adoc | 0 .../pages/tools/nodetool/verify.adoc | 0 .../pages/tools/nodetool/version.adoc | 0 .../pages/tools/nodetool/viewbuildstatus.adoc | 0 .../cassandra/pages/tools/sstable/index.adoc | 0 .../pages/tools/sstable/sstabledump.adoc | 0 .../tools/sstable/sstableexpiredblockers.adoc | 0 .../tools/sstable/sstablelevelreset.adoc | 0 .../pages/tools/sstable/sstableloader.adoc | 0 .../pages/tools/sstable/sstablemetadata.adoc | 0 .../tools/sstable/sstableofflinerelevel.adoc | 0 .../tools/sstable/sstablerepairedset.adoc | 0 .../pages/tools/sstable/sstablescrub.adoc | 0 .../pages/tools/sstable/sstablesplit.adoc | 0 .../pages/tools/sstable/sstableupgrade.adoc | 0 .../pages/tools/sstable/sstableutil.adoc | 0 .../pages/tools/sstable/sstableverify.adoc | 0 .../cassandra/pages/tools/stress-example.yaml | 0 .../pages/tools/stress-lwt-example.yaml | 0 .../pages/troubleshooting/finding_nodes.adoc | 0 .../pages/troubleshooting/index.adoc | 0 .../pages/troubleshooting/reading_logs.adoc | 0 .../pages/troubleshooting/use_nodetool.adoc | 0 .../pages/troubleshooting/use_tools.adoc | 0 .../cassandra/partials/java_version.adoc | 0 .../partials/nodetool_and_cqlsh.adoc | 0 .../partials/nodetool_and_cqlsh_nobin.adoc | 0 .../cassandra/partials/package_versions.adoc | 0 .../cassandra/partials/tail_syslog.adoc | 0 doc/scripts/convert_yaml_to_adoc.py | 144 ------------------ doc/scripts/gen-nodetool-docs.py | 83 ---------- doc/site.yml | 78 ---------- 692 files changed, 441 deletions(-) delete mode 100644 doc/Makefile rename doc/{source => }/antora.yml (100%) delete mode 100644 doc/lib/tabs-block.js rename doc/{source => }/modules/ROOT/nav.adoc (100%) rename doc/{source => }/modules/ROOT/pages/index.adoc (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_1_backups.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_1_data_model.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_1_guarantees.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_1_read_repair.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_2_data_model.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_2_read_repair.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_3_read_repair.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_4_read_repair.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_5_read_repair.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/Figure_6_read_repair.jpg (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_chebotko_logical.png (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_chebotko_physical.png (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_hotel_bucketing.png (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_hotel_erd.png (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_hotel_logical.png (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_hotel_physical.png (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_hotel_queries.png (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_hotel_relational.png (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_reservation_logical.png (100%) rename doc/{source => }/modules/cassandra/assets/images/data_modeling_reservation_physical.png (100%) rename doc/{source => }/modules/cassandra/assets/images/docs_commit.png (100%) rename doc/{source => }/modules/cassandra/assets/images/docs_create_branch.png (100%) rename doc/{source => }/modules/cassandra/assets/images/docs_create_file.png (100%) rename doc/{source => }/modules/cassandra/assets/images/docs_editor.png (100%) rename doc/{source => }/modules/cassandra/assets/images/docs_fork.png (100%) rename doc/{source => }/modules/cassandra/assets/images/docs_pr.png (100%) rename doc/{source => }/modules/cassandra/assets/images/docs_preview.png (100%) rename doc/{source => }/modules/cassandra/assets/images/eclipse_debug0.png (100%) rename doc/{source => }/modules/cassandra/assets/images/eclipse_debug1.png (100%) rename doc/{source => }/modules/cassandra/assets/images/eclipse_debug2.png (100%) rename doc/{source => }/modules/cassandra/assets/images/eclipse_debug3.png (100%) rename doc/{source => }/modules/cassandra/assets/images/eclipse_debug4.png (100%) rename doc/{source => }/modules/cassandra/assets/images/eclipse_debug5.png (100%) rename doc/{source => }/modules/cassandra/assets/images/eclipse_debug6.png (100%) rename doc/{source => }/modules/cassandra/assets/images/example-stress-graph.png (100%) rename doc/{source => }/modules/cassandra/assets/images/hints.svg (100%) rename doc/{source => }/modules/cassandra/assets/images/ring.svg (100%) rename doc/{source => }/modules/cassandra/assets/images/vnodes.svg (100%) rename doc/{source => }/modules/cassandra/examples/BASH/add_repo_keys.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/apt-get_cass.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/apt-get_update.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/check_backups.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/cqlsh_localhost.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/curl_install.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/curl_verify_sha.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/docker_cqlsh.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/docker_pull.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/docker_run.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/find_backups.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/find_snapshots.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/find_sstables.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/find_two_snapshots.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/flush_and_check.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/get_deb_package.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/java_verify.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/nodetool_flush.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/nodetool_flush_table.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/nodetool_list_snapshots.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/nodetool_snapshot.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/nodetool_status.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/nodetool_status_nobin.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/run_cqlsh.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/run_cqlsh_nobin.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/snapshot_backup2.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/snapshot_both_backups.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/snapshot_files.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/snapshot_mult_ks.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/snapshot_mult_tables.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/snapshot_one_table.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/snapshot_one_table2.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/start_tarball.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/tail_syslog.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/tail_syslog_package.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/tarball.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/verify_gpg.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/yum_cass.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/yum_start.sh (100%) rename doc/{source => }/modules/cassandra/examples/BASH/yum_update.sh (100%) rename doc/{source => }/modules/cassandra/examples/BNF/alter_ks.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/alter_mv_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/alter_role_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/alter_table.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/alter_udt_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/alter_user_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/batch_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/collection_literal.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/collection_type.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/column.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/constant.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/cql_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/cql_type.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_aggregate_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_function_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_index_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_ks.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_mv_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_role_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_table.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_trigger_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_type.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/create_user_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/custom_type.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/delete_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_aggregate_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_function_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_index_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_ks.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_mv_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_role_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_table.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_trigger_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_udt_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/drop_user_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/function.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/grant_permission_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/grant_role_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/identifier.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/index_name.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/insert_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/ks_table.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/list_permissions_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/list_roles_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/list_users_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/native_type.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/options.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/revoke_permission_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/revoke_role_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/role_name.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/select_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/term.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/trigger_name.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/truncate_table.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/tuple.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/udt.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/udt_literal.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/update_statement.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/use_ks.bnf (100%) rename doc/{source => }/modules/cassandra/examples/BNF/view_name.bnf (100%) rename doc/{source => }/modules/cassandra/examples/CQL/allow_filtering.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/alter_ks.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/alter_role.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/alter_table_add_column.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/alter_table_spec_retry.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/alter_table_spec_retry_percent.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/alter_table_with_comment.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/alter_user.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/as.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/autoexpand_exclude_dc.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/autoexpand_ks.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/autoexpand_ks_override.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/avg.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/batch_statement.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/caching_option.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/chunk_length.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/count.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/count_nonnull.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_function.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_index.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_ks.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_ks2_backup.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_ks_backup.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_ks_trans_repl.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_mv_statement.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_role.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_role_ifnotexists.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_static_column.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_table.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_table2_backup.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_table_backup.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_table_clustercolumn.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_table_compound_pk.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_table_simple.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_table_single_pk.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_trigger.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_user.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/create_user_role.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/currentdate.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/datetime_arithmetic.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/delete_all_elements_list.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/delete_element_list.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/delete_map.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/delete_set.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/delete_statement.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/drop_aggregate.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/drop_function.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/drop_ks.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/drop_trigger.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/function_dollarsign.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/function_overload.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/function_udfcontext.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/grant_describe.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/grant_drop.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/grant_execute.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/grant_modify.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/grant_perm.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/grant_role.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_data2_backup.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_data_backup.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_duration.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_json.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_statement.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_static_data.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_table_cc_addl.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_table_clustercolumn.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_table_clustercolumn2.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_table_compound_pk.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/insert_udt.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/list.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/list_all_perm.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/list_perm.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/list_roles.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/list_roles_nonrecursive.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/list_roles_of.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/list_select_perm.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/map.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/min_max.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/mv_table_def.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/mv_table_error.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/mv_table_from_base.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/no_revoke.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/query_allow_filtering.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/query_fail_allow_filtering.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/query_nofail_allow_filtering.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/rename_udt_field.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/revoke_perm.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/revoke_role.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/role_error.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/select_data2_backup.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/select_data_backup.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/select_range.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/select_statement.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/select_static_data.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/select_table_clustercolumn.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/select_table_compound_pk.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/set.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/spec_retry_values.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/sum.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/table_for_where.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/timeuuid_min_max.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/timeuuid_now.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/token.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/tuple.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/uda.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/udt.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/update_list.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/update_map.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/update_particular_list_element.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/update_set.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/update_statement.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/update_ttl_map.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/use_ks.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/where.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/where_fail.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/where_group_cluster_columns.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/where_in_tuple.cql (100%) rename doc/{source => }/modules/cassandra/examples/CQL/where_no_group_cluster_columns.cql (100%) rename doc/{source => }/modules/cassandra/examples/JAVA/udf_imports.java (100%) rename doc/{source => }/modules/cassandra/examples/JAVA/udfcontext.java (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/add_repo_keys.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/add_yum_repo.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/autoexpand_exclude_dc.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/autoexpand_ks.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/autoexpand_ks_override.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/cqlsh_localhost.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/find_backups.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/find_backups_table.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/find_two_snapshots.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/flush_and_check.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/flush_and_check2.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/insert_data2_backup.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/insert_table_cc_addl.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/java_verify.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/no_bups.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/nodetool_snapshot_help.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/select_data2_backup.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/select_data_backup.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/select_range.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/select_static_data.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/select_table_clustercolumn.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/select_table_compound_pk.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/snapshot_all.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/snapshot_backup2.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/snapshot_backup2_find.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/snapshot_files.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/snapshot_mult_tables.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/snapshot_mult_tables_again.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/snapshot_one_table2.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/tail_syslog.result (100%) rename doc/{source => }/modules/cassandra/examples/RESULTS/verify_gpg.result (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/bootstrap.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/clearsnapshot.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/clientstats.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/compact.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/compactionhistory.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/compactionstats.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/describecluster.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/describering.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/disableauditlog.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/disableautocompaction.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/disablebackup.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/disablebinary.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/disablefullquerylog.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/disablegossip.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/disablehandoff.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/disablehintsfordc.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/disableoldprotocolversions.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/drain.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/enableauditlog.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/enableautocompaction.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/enablebackup.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/enablebinary.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/enablefullquerylog.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/enablegossip.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/enablehandoff.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/enablehintsfordc.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/enableoldprotocolversions.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/failuredetector.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/flush.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/garbagecollect.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/gcstats.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getbatchlogreplaythrottle.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthreshold.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthroughput.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getconcurrency.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentcompactors.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentviewbuilders.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getendpoints.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getinterdcstreamthroughput.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getlogginglevels.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getmaxhintwindow.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getseeds.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getsstables.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/getstreamthroughput.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/gettimeout.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/gettraceprobability.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/gossipinfo.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/help.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/import.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/info.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/invalidatecountercache.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/invalidatekeycache.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/invalidaterowcache.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/join.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/listsnapshots.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/move.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/netstats.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/pausehandoff.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/profileload.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/proxyhistograms.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/rangekeysample.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/rebuild.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/rebuild_index.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/refresh.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/refreshsizeestimates.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/reloadlocalschema.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/reloadseeds.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/reloadssl.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/reloadtriggers.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/relocatesstables.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/removenode.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/repair.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/repair_admin.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/replaybatchlog.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/resetfullquerylog.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/resetlocalschema.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/resumehandoff.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/ring.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/scrub.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setbatchlogreplaythrottle.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setcachecapacity.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setcachekeystosave.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthreshold.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthroughput.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setconcurrency.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentcompactors.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentviewbuilders.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/sethintedhandoffthrottlekb.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setinterdcstreamthroughput.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setlogginglevel.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setmaxhintwindow.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/setstreamthroughput.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/settimeout.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/settraceprobability.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/sjk.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/snapshot.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/status.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/statusautocompaction.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/statusbackup.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/statusbinary.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/statusgossip.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/statushandoff.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/stop.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/stopdaemon.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/tablehistograms.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/tablestats.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/toppartitions.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/tpstats.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/truncatehints.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/upgradesstables.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/verify.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/version.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/NODETOOL/viewbuildstatus.txt (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/native_protocol_v3.spec (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/native_protocol_v4.spec (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/native_protocol_v5.spec (100%) rename doc/{source => }/modules/cassandra/examples/TEXT/tarball_install_dirs.txt (100%) rename doc/{source => }/modules/cassandra/examples/YAML/auto_snapshot.yaml (100%) rename doc/{source => }/modules/cassandra/examples/YAML/incremental_bups.yaml (100%) rename doc/{source => }/modules/cassandra/examples/YAML/snapshot_before_compaction.yaml (100%) rename doc/{source => }/modules/cassandra/examples/YAML/stress-example.yaml (100%) rename doc/{source => }/modules/cassandra/examples/YAML/stress-lwt-example.yaml (100%) rename doc/{source => }/modules/cassandra/nav.adoc (100%) rename doc/{source => }/modules/cassandra/pages/architecture/dynamo.adoc (100%) rename doc/{source => }/modules/cassandra/pages/architecture/guarantees.adoc (100%) rename doc/{source => }/modules/cassandra/pages/architecture/images/ring.svg (100%) rename doc/{source => }/modules/cassandra/pages/architecture/images/vnodes.svg (100%) rename doc/{source => }/modules/cassandra/pages/architecture/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/architecture/overview.adoc (100%) rename doc/{source => }/modules/cassandra/pages/architecture/snitch.adoc (100%) rename doc/{source => }/modules/cassandra/pages/architecture/storage_engine.adoc (100%) rename doc/{source => }/modules/cassandra/pages/configuration/cass_cl_archive_file.adoc (100%) rename doc/{source => }/modules/cassandra/pages/configuration/cass_env_sh_file.adoc (100%) rename doc/{source => }/modules/cassandra/pages/configuration/cass_jvm_options_file.adoc (100%) rename doc/{source => }/modules/cassandra/pages/configuration/cass_logback_xml_file.adoc (100%) rename doc/{source => }/modules/cassandra/pages/configuration/cass_rackdc_file.adoc (100%) rename doc/{source => }/modules/cassandra/pages/configuration/cass_topo_file.adoc (100%) rename doc/{source => }/modules/cassandra/pages/configuration/cass_yaml_file.adoc (100%) rename doc/{source => }/modules/cassandra/pages/configuration/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/SASI.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/appendices.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/changes.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/cql_singlefile.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/ddl.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/definitions.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/dml.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/functions.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/indexes.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/json.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/mvs.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/operators.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/security.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/triggers.adoc (100%) rename doc/{source => }/modules/cassandra/pages/cql/types.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/data_modeling_conceptual.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/data_modeling_logical.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/data_modeling_physical.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/data_modeling_queries.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/data_modeling_rdbms.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/data_modeling_refining.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/data_modeling_schema.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/data_modeling_tools.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/Figure_1_data_model.jpg (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/Figure_2_data_model.jpg (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_logical.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_physical.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_bucketing.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_erd.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_logical.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_physical.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_queries.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_relational.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_logical.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_physical.png (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/data_modeling/intro.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/ci.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/code_style.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/dependencies.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/documentation.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/gettingstarted.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/how_to_commit.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/how_to_review.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/ide.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/images/docs_commit.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/docs_create_branch.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/docs_create_file.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/docs_editor.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/docs_fork.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/docs_pr.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/docs_preview.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/eclipse_debug0.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/eclipse_debug1.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/eclipse_debug2.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/eclipse_debug3.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/eclipse_debug4.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/eclipse_debug5.png (100%) rename doc/{source => }/modules/cassandra/pages/development/images/eclipse_debug6.png (100%) rename doc/{source => }/modules/cassandra/pages/development/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/patches.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/release_process.adoc (100%) rename doc/{source => }/modules/cassandra/pages/development/testing.adoc (100%) rename doc/{source => }/modules/cassandra/pages/faq/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/getting_started/configuring.adoc (100%) rename doc/{source => }/modules/cassandra/pages/getting_started/drivers.adoc (100%) rename doc/{source => }/modules/cassandra/pages/getting_started/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/getting_started/installing.adoc (100%) rename doc/{source => }/modules/cassandra/pages/getting_started/production.adoc (100%) rename doc/{source => }/modules/cassandra/pages/getting_started/querying.adoc (100%) rename doc/{source => }/modules/cassandra/pages/getting_started/quickstart.adoc (100%) rename doc/{source => }/modules/cassandra/pages/new/Figure_1.jpg (100%) rename doc/{source => }/modules/cassandra/pages/new/Figure_2.jpg (100%) rename doc/{source => }/modules/cassandra/pages/new/auditlogging.adoc (100%) rename doc/{source => }/modules/cassandra/pages/new/fqllogging.adoc (100%) rename doc/{source => }/modules/cassandra/pages/new/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/new/java11.adoc (100%) rename doc/{source => }/modules/cassandra/pages/new/messaging.adoc (100%) rename doc/{source => }/modules/cassandra/pages/new/streaming.adoc (100%) rename doc/{source => }/modules/cassandra/pages/new/transientreplication.adoc (100%) rename doc/{source => }/modules/cassandra/pages/new/virtualtables.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/audit_logging.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/backups.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/bloom_filters.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/bulk_loading.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/cdc.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/compaction/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/compaction/lcs.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/compaction/stcs.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/compaction/twcs.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/compression.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/hardware.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/hints.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/metrics.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/read_repair.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/repair.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/security.adoc (100%) rename doc/{source => }/modules/cassandra/pages/operating/topo_changes.adoc (100%) rename doc/{source => }/modules/cassandra/pages/plugins/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/cassandra_stress.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/cqlsh.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/assassinate.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/bootstrap.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/cleanup.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/clientstats.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/compact.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/compactionstats.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/convert.sh (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/decommission.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/describecluster.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/describering.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/disablebackup.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/disablebinary.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/disablegossip.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/drain.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/enablebackup.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/enablebinary.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/enablegossip.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/failuredetector.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/flush.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/gcstats.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getendpoints.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getseeds.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getsstables.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/gettimeout.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/help.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/import.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/info.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/join.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/move.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/netstats.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/nodetool.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/nodetool.txt (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/profileload.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/rebuild.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/refresh.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/reloadssl.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/removenode.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/repair.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/repair_admin.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/ring.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/scrub.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/settimeout.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/sjk.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/snapshot.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/status.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/statusbackup.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/statusbinary.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/statusgossip.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/statushandoff.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/stop.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/tablestats.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/toppartitions.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/tpstats.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/truncatehints.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/verify.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/version.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstabledump.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstableexpiredblockers.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstablelevelreset.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstableloader.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstablemetadata.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstableofflinerelevel.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstablerepairedset.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstablescrub.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstablesplit.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstableupgrade.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstableutil.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/sstable/sstableverify.adoc (100%) rename doc/{source => }/modules/cassandra/pages/tools/stress-example.yaml (100%) rename doc/{source => }/modules/cassandra/pages/tools/stress-lwt-example.yaml (100%) rename doc/{source => }/modules/cassandra/pages/troubleshooting/finding_nodes.adoc (100%) rename doc/{source => }/modules/cassandra/pages/troubleshooting/index.adoc (100%) rename doc/{source => }/modules/cassandra/pages/troubleshooting/reading_logs.adoc (100%) rename doc/{source => }/modules/cassandra/pages/troubleshooting/use_nodetool.adoc (100%) rename doc/{source => }/modules/cassandra/pages/troubleshooting/use_tools.adoc (100%) rename doc/{source => }/modules/cassandra/partials/java_version.adoc (100%) rename doc/{source => }/modules/cassandra/partials/nodetool_and_cqlsh.adoc (100%) rename doc/{source => }/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc (100%) rename doc/{source => }/modules/cassandra/partials/package_versions.adoc (100%) rename doc/{source => }/modules/cassandra/partials/tail_syslog.adoc (100%) delete mode 100644 doc/scripts/convert_yaml_to_adoc.py delete mode 100644 doc/scripts/gen-nodetool-docs.py delete mode 100644 doc/site.yml diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index 4a6e4698cfee..000000000000 --- a/doc/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -# Makefile for Antora documentation -# - -# You can set these variables from the command line. -ANTORAOPTS = DOCSEARCH_ENABLED=true DOCSEARCH_ENGINE=lunr DOCSEARCH_INDEX_VERSION=latest -ANTORAYAML = site.yml -ANTORACMD = antora - -# Internal variables. -BUILDDIR = build - -YAML_DOC_INPUT=../conf/cassandra.yaml -YAML_DOC_OUTPUT=source/modules/cassandra/pages/configuration/cass_yaml_file.adoc - -MAKE_CASSANDRA_YAML = python convert_yaml_to_adoc.py $(YAML_DOC_INPUT) $(YAML_DOC_OUTPUT) - -GENERATE_NODETOOL_DOCS = python gen-nodetool-docs.py - -WEB_SITE_PRESENCE_FILE='source/.build_for_website' - -.PHONY: help -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " website to make HTML files for the Cassandra website" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - @echo " dummy to check syntax errors of document sources" - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - rm -f $(YAML_DOC_OUTPUT) - -.PHONY: gennodetool -gennodetool: - $(GENERATE_NODETOOL_DOCS) - -.PHONY: html -html: - $(MAKE_CASSANDRA_YAML) -# $(GENERATE_NODETOOL_DOCS) - $(ANTORAOPTS) $(ANTORACMD) --generator antora-site-generator-lunr $(ANTORAYAML) - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: website -website: clean - @touch $(WEB_SITE_PRESENCE_FILE) - $(MAKE_CASSANDRA_YAML) - $(GENERATE_NODETOOL_DOCS) - $(ANTORAOPTS) $(ANTORACMD) $(ANTORAYAML) - @rm $(WEB_SITE_PRESENCE_FILE) - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." diff --git a/doc/source/antora.yml b/doc/antora.yml similarity index 100% rename from doc/source/antora.yml rename to doc/antora.yml diff --git a/doc/lib/tabs-block.js b/doc/lib/tabs-block.js deleted file mode 100644 index 6a84944cacff..000000000000 --- a/doc/lib/tabs-block.js +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (c) 2018 OpenDevise, Inc. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/** - * Extends the AsciiDoc syntax to support a tabset. The tabset is created from - * a dlist enclosed in an example block that is marked with the tabs style. - * - * Usage: - * - * [tabs] - * ==== - * Tab A:: - * + - * -- - * Contents of tab A. - * -- - * Tab B:: - * + - * -- - * Contents of tab B. - * -- - * ==== - * - * @author Dan Allen - */ -const IdSeparatorCh = '-' -const ExtraIdSeparatorsRx = /^-+|-+$|-(-)+/g -const InvalidIdCharsRx = /[^a-zA-Z0-9_]/g -const List = Opal.const_get_local(Opal.module(null, 'Asciidoctor'), 'List') -const ListItem = Opal.const_get_local(Opal.module(null, 'Asciidoctor'), 'ListItem') - -const generateId = (str, idx) => - `tabset${idx}_${str.toLowerCase().replace(InvalidIdCharsRx, IdSeparatorCh).replace(ExtraIdSeparatorsRx, '$1')}` - -function tabsBlock () { - this.onContext('example') - this.process((parent, reader, attrs) => { - const createHtmlFragment = (html) => this.createBlock(parent, 'pass', html) - const tabsetIdx = parent.getDocument().counter('idx-tabset') - const nodes = [] - nodes.push(createHtmlFragment('
    ')) - const container = this.parseContent(this.createBlock(parent, 'open'), reader) - const sourceTabs = container.getBlocks()[0] - if (!(sourceTabs && sourceTabs.getContext() === 'dlist' && sourceTabs.getItems().length)) return - const tabs = List.$new(parent, 'ulist') - tabs.addRole('tabs') - const panes = {} - sourceTabs.getItems().forEach(([[title], details]) => { - const tab = ListItem.$new(tabs) - tabs.$append(tab) - const id = generateId(title.getText(), tabsetIdx) - tab.text = `[[${id}]]${title.text}` - let blocks = details.getBlocks() - const numBlocks = blocks.length - if (numBlocks) { - if (blocks[0].context === 'open' && numBlocks === 1) blocks = blocks[0].getBlocks() - panes[id] = blocks.map((block) => (block.parent = parent) && block) - } - }) - nodes.push(tabs) - nodes.push(createHtmlFragment('
    ')) - Object.entries(panes).forEach(([id, blocks]) => { - nodes.push(createHtmlFragment(`
    `)) - nodes.push(...blocks) - nodes.push(createHtmlFragment('
    ')) - }) - nodes.push(createHtmlFragment('
    ')) - nodes.push(createHtmlFragment('
    ')) - parent.blocks.push(...nodes) - }) -} - -function register (registry, context) { - registry.block('tabs', tabsBlock) -} - -module.exports.register = register diff --git a/doc/source/modules/ROOT/nav.adoc b/doc/modules/ROOT/nav.adoc similarity index 100% rename from doc/source/modules/ROOT/nav.adoc rename to doc/modules/ROOT/nav.adoc diff --git a/doc/source/modules/ROOT/pages/index.adoc b/doc/modules/ROOT/pages/index.adoc similarity index 100% rename from doc/source/modules/ROOT/pages/index.adoc rename to doc/modules/ROOT/pages/index.adoc diff --git a/doc/source/modules/cassandra/assets/images/Figure_1_backups.jpg b/doc/modules/cassandra/assets/images/Figure_1_backups.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_1_backups.jpg rename to doc/modules/cassandra/assets/images/Figure_1_backups.jpg diff --git a/doc/source/modules/cassandra/assets/images/Figure_1_data_model.jpg b/doc/modules/cassandra/assets/images/Figure_1_data_model.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_1_data_model.jpg rename to doc/modules/cassandra/assets/images/Figure_1_data_model.jpg diff --git a/doc/source/modules/cassandra/assets/images/Figure_1_guarantees.jpg b/doc/modules/cassandra/assets/images/Figure_1_guarantees.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_1_guarantees.jpg rename to doc/modules/cassandra/assets/images/Figure_1_guarantees.jpg diff --git a/doc/source/modules/cassandra/assets/images/Figure_1_read_repair.jpg b/doc/modules/cassandra/assets/images/Figure_1_read_repair.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_1_read_repair.jpg rename to doc/modules/cassandra/assets/images/Figure_1_read_repair.jpg diff --git a/doc/source/modules/cassandra/assets/images/Figure_2_data_model.jpg b/doc/modules/cassandra/assets/images/Figure_2_data_model.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_2_data_model.jpg rename to doc/modules/cassandra/assets/images/Figure_2_data_model.jpg diff --git a/doc/source/modules/cassandra/assets/images/Figure_2_read_repair.jpg b/doc/modules/cassandra/assets/images/Figure_2_read_repair.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_2_read_repair.jpg rename to doc/modules/cassandra/assets/images/Figure_2_read_repair.jpg diff --git a/doc/source/modules/cassandra/assets/images/Figure_3_read_repair.jpg b/doc/modules/cassandra/assets/images/Figure_3_read_repair.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_3_read_repair.jpg rename to doc/modules/cassandra/assets/images/Figure_3_read_repair.jpg diff --git a/doc/source/modules/cassandra/assets/images/Figure_4_read_repair.jpg b/doc/modules/cassandra/assets/images/Figure_4_read_repair.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_4_read_repair.jpg rename to doc/modules/cassandra/assets/images/Figure_4_read_repair.jpg diff --git a/doc/source/modules/cassandra/assets/images/Figure_5_read_repair.jpg b/doc/modules/cassandra/assets/images/Figure_5_read_repair.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_5_read_repair.jpg rename to doc/modules/cassandra/assets/images/Figure_5_read_repair.jpg diff --git a/doc/source/modules/cassandra/assets/images/Figure_6_read_repair.jpg b/doc/modules/cassandra/assets/images/Figure_6_read_repair.jpg similarity index 100% rename from doc/source/modules/cassandra/assets/images/Figure_6_read_repair.jpg rename to doc/modules/cassandra/assets/images/Figure_6_read_repair.jpg diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_chebotko_logical.png b/doc/modules/cassandra/assets/images/data_modeling_chebotko_logical.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_chebotko_logical.png rename to doc/modules/cassandra/assets/images/data_modeling_chebotko_logical.png diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_chebotko_physical.png b/doc/modules/cassandra/assets/images/data_modeling_chebotko_physical.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_chebotko_physical.png rename to doc/modules/cassandra/assets/images/data_modeling_chebotko_physical.png diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_hotel_bucketing.png b/doc/modules/cassandra/assets/images/data_modeling_hotel_bucketing.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_hotel_bucketing.png rename to doc/modules/cassandra/assets/images/data_modeling_hotel_bucketing.png diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_hotel_erd.png b/doc/modules/cassandra/assets/images/data_modeling_hotel_erd.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_hotel_erd.png rename to doc/modules/cassandra/assets/images/data_modeling_hotel_erd.png diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_hotel_logical.png b/doc/modules/cassandra/assets/images/data_modeling_hotel_logical.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_hotel_logical.png rename to doc/modules/cassandra/assets/images/data_modeling_hotel_logical.png diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_hotel_physical.png b/doc/modules/cassandra/assets/images/data_modeling_hotel_physical.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_hotel_physical.png rename to doc/modules/cassandra/assets/images/data_modeling_hotel_physical.png diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_hotel_queries.png b/doc/modules/cassandra/assets/images/data_modeling_hotel_queries.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_hotel_queries.png rename to doc/modules/cassandra/assets/images/data_modeling_hotel_queries.png diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_hotel_relational.png b/doc/modules/cassandra/assets/images/data_modeling_hotel_relational.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_hotel_relational.png rename to doc/modules/cassandra/assets/images/data_modeling_hotel_relational.png diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_reservation_logical.png b/doc/modules/cassandra/assets/images/data_modeling_reservation_logical.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_reservation_logical.png rename to doc/modules/cassandra/assets/images/data_modeling_reservation_logical.png diff --git a/doc/source/modules/cassandra/assets/images/data_modeling_reservation_physical.png b/doc/modules/cassandra/assets/images/data_modeling_reservation_physical.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/data_modeling_reservation_physical.png rename to doc/modules/cassandra/assets/images/data_modeling_reservation_physical.png diff --git a/doc/source/modules/cassandra/assets/images/docs_commit.png b/doc/modules/cassandra/assets/images/docs_commit.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/docs_commit.png rename to doc/modules/cassandra/assets/images/docs_commit.png diff --git a/doc/source/modules/cassandra/assets/images/docs_create_branch.png b/doc/modules/cassandra/assets/images/docs_create_branch.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/docs_create_branch.png rename to doc/modules/cassandra/assets/images/docs_create_branch.png diff --git a/doc/source/modules/cassandra/assets/images/docs_create_file.png b/doc/modules/cassandra/assets/images/docs_create_file.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/docs_create_file.png rename to doc/modules/cassandra/assets/images/docs_create_file.png diff --git a/doc/source/modules/cassandra/assets/images/docs_editor.png b/doc/modules/cassandra/assets/images/docs_editor.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/docs_editor.png rename to doc/modules/cassandra/assets/images/docs_editor.png diff --git a/doc/source/modules/cassandra/assets/images/docs_fork.png b/doc/modules/cassandra/assets/images/docs_fork.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/docs_fork.png rename to doc/modules/cassandra/assets/images/docs_fork.png diff --git a/doc/source/modules/cassandra/assets/images/docs_pr.png b/doc/modules/cassandra/assets/images/docs_pr.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/docs_pr.png rename to doc/modules/cassandra/assets/images/docs_pr.png diff --git a/doc/source/modules/cassandra/assets/images/docs_preview.png b/doc/modules/cassandra/assets/images/docs_preview.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/docs_preview.png rename to doc/modules/cassandra/assets/images/docs_preview.png diff --git a/doc/source/modules/cassandra/assets/images/eclipse_debug0.png b/doc/modules/cassandra/assets/images/eclipse_debug0.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/eclipse_debug0.png rename to doc/modules/cassandra/assets/images/eclipse_debug0.png diff --git a/doc/source/modules/cassandra/assets/images/eclipse_debug1.png b/doc/modules/cassandra/assets/images/eclipse_debug1.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/eclipse_debug1.png rename to doc/modules/cassandra/assets/images/eclipse_debug1.png diff --git a/doc/source/modules/cassandra/assets/images/eclipse_debug2.png b/doc/modules/cassandra/assets/images/eclipse_debug2.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/eclipse_debug2.png rename to doc/modules/cassandra/assets/images/eclipse_debug2.png diff --git a/doc/source/modules/cassandra/assets/images/eclipse_debug3.png b/doc/modules/cassandra/assets/images/eclipse_debug3.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/eclipse_debug3.png rename to doc/modules/cassandra/assets/images/eclipse_debug3.png diff --git a/doc/source/modules/cassandra/assets/images/eclipse_debug4.png b/doc/modules/cassandra/assets/images/eclipse_debug4.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/eclipse_debug4.png rename to doc/modules/cassandra/assets/images/eclipse_debug4.png diff --git a/doc/source/modules/cassandra/assets/images/eclipse_debug5.png b/doc/modules/cassandra/assets/images/eclipse_debug5.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/eclipse_debug5.png rename to doc/modules/cassandra/assets/images/eclipse_debug5.png diff --git a/doc/source/modules/cassandra/assets/images/eclipse_debug6.png b/doc/modules/cassandra/assets/images/eclipse_debug6.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/eclipse_debug6.png rename to doc/modules/cassandra/assets/images/eclipse_debug6.png diff --git a/doc/source/modules/cassandra/assets/images/example-stress-graph.png b/doc/modules/cassandra/assets/images/example-stress-graph.png similarity index 100% rename from doc/source/modules/cassandra/assets/images/example-stress-graph.png rename to doc/modules/cassandra/assets/images/example-stress-graph.png diff --git a/doc/source/modules/cassandra/assets/images/hints.svg b/doc/modules/cassandra/assets/images/hints.svg similarity index 100% rename from doc/source/modules/cassandra/assets/images/hints.svg rename to doc/modules/cassandra/assets/images/hints.svg diff --git a/doc/source/modules/cassandra/assets/images/ring.svg b/doc/modules/cassandra/assets/images/ring.svg similarity index 100% rename from doc/source/modules/cassandra/assets/images/ring.svg rename to doc/modules/cassandra/assets/images/ring.svg diff --git a/doc/source/modules/cassandra/assets/images/vnodes.svg b/doc/modules/cassandra/assets/images/vnodes.svg similarity index 100% rename from doc/source/modules/cassandra/assets/images/vnodes.svg rename to doc/modules/cassandra/assets/images/vnodes.svg diff --git a/doc/source/modules/cassandra/examples/BASH/add_repo_keys.sh b/doc/modules/cassandra/examples/BASH/add_repo_keys.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/add_repo_keys.sh rename to doc/modules/cassandra/examples/BASH/add_repo_keys.sh diff --git a/doc/source/modules/cassandra/examples/BASH/apt-get_cass.sh b/doc/modules/cassandra/examples/BASH/apt-get_cass.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/apt-get_cass.sh rename to doc/modules/cassandra/examples/BASH/apt-get_cass.sh diff --git a/doc/source/modules/cassandra/examples/BASH/apt-get_update.sh b/doc/modules/cassandra/examples/BASH/apt-get_update.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/apt-get_update.sh rename to doc/modules/cassandra/examples/BASH/apt-get_update.sh diff --git a/doc/source/modules/cassandra/examples/BASH/check_backups.sh b/doc/modules/cassandra/examples/BASH/check_backups.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/check_backups.sh rename to doc/modules/cassandra/examples/BASH/check_backups.sh diff --git a/doc/source/modules/cassandra/examples/BASH/cqlsh_localhost.sh b/doc/modules/cassandra/examples/BASH/cqlsh_localhost.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/cqlsh_localhost.sh rename to doc/modules/cassandra/examples/BASH/cqlsh_localhost.sh diff --git a/doc/source/modules/cassandra/examples/BASH/curl_install.sh b/doc/modules/cassandra/examples/BASH/curl_install.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/curl_install.sh rename to doc/modules/cassandra/examples/BASH/curl_install.sh diff --git a/doc/source/modules/cassandra/examples/BASH/curl_verify_sha.sh b/doc/modules/cassandra/examples/BASH/curl_verify_sha.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/curl_verify_sha.sh rename to doc/modules/cassandra/examples/BASH/curl_verify_sha.sh diff --git a/doc/source/modules/cassandra/examples/BASH/docker_cqlsh.sh b/doc/modules/cassandra/examples/BASH/docker_cqlsh.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/docker_cqlsh.sh rename to doc/modules/cassandra/examples/BASH/docker_cqlsh.sh diff --git a/doc/source/modules/cassandra/examples/BASH/docker_pull.sh b/doc/modules/cassandra/examples/BASH/docker_pull.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/docker_pull.sh rename to doc/modules/cassandra/examples/BASH/docker_pull.sh diff --git a/doc/source/modules/cassandra/examples/BASH/docker_run.sh b/doc/modules/cassandra/examples/BASH/docker_run.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/docker_run.sh rename to doc/modules/cassandra/examples/BASH/docker_run.sh diff --git a/doc/source/modules/cassandra/examples/BASH/find_backups.sh b/doc/modules/cassandra/examples/BASH/find_backups.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/find_backups.sh rename to doc/modules/cassandra/examples/BASH/find_backups.sh diff --git a/doc/source/modules/cassandra/examples/BASH/find_snapshots.sh b/doc/modules/cassandra/examples/BASH/find_snapshots.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/find_snapshots.sh rename to doc/modules/cassandra/examples/BASH/find_snapshots.sh diff --git a/doc/source/modules/cassandra/examples/BASH/find_sstables.sh b/doc/modules/cassandra/examples/BASH/find_sstables.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/find_sstables.sh rename to doc/modules/cassandra/examples/BASH/find_sstables.sh diff --git a/doc/source/modules/cassandra/examples/BASH/find_two_snapshots.sh b/doc/modules/cassandra/examples/BASH/find_two_snapshots.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/find_two_snapshots.sh rename to doc/modules/cassandra/examples/BASH/find_two_snapshots.sh diff --git a/doc/source/modules/cassandra/examples/BASH/flush_and_check.sh b/doc/modules/cassandra/examples/BASH/flush_and_check.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/flush_and_check.sh rename to doc/modules/cassandra/examples/BASH/flush_and_check.sh diff --git a/doc/source/modules/cassandra/examples/BASH/get_deb_package.sh b/doc/modules/cassandra/examples/BASH/get_deb_package.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/get_deb_package.sh rename to doc/modules/cassandra/examples/BASH/get_deb_package.sh diff --git a/doc/source/modules/cassandra/examples/BASH/java_verify.sh b/doc/modules/cassandra/examples/BASH/java_verify.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/java_verify.sh rename to doc/modules/cassandra/examples/BASH/java_verify.sh diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh b/doc/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh rename to doc/modules/cassandra/examples/BASH/nodetool_clearsnapshot.sh diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh b/doc/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh rename to doc/modules/cassandra/examples/BASH/nodetool_clearsnapshot_all.sh diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh b/doc/modules/cassandra/examples/BASH/nodetool_flush.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/nodetool_flush.sh rename to doc/modules/cassandra/examples/BASH/nodetool_flush.sh diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_flush_table.sh b/doc/modules/cassandra/examples/BASH/nodetool_flush_table.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/nodetool_flush_table.sh rename to doc/modules/cassandra/examples/BASH/nodetool_flush_table.sh diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_list_snapshots.sh b/doc/modules/cassandra/examples/BASH/nodetool_list_snapshots.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/nodetool_list_snapshots.sh rename to doc/modules/cassandra/examples/BASH/nodetool_list_snapshots.sh diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_snapshot.sh b/doc/modules/cassandra/examples/BASH/nodetool_snapshot.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/nodetool_snapshot.sh rename to doc/modules/cassandra/examples/BASH/nodetool_snapshot.sh diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_status.sh b/doc/modules/cassandra/examples/BASH/nodetool_status.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/nodetool_status.sh rename to doc/modules/cassandra/examples/BASH/nodetool_status.sh diff --git a/doc/source/modules/cassandra/examples/BASH/nodetool_status_nobin.sh b/doc/modules/cassandra/examples/BASH/nodetool_status_nobin.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/nodetool_status_nobin.sh rename to doc/modules/cassandra/examples/BASH/nodetool_status_nobin.sh diff --git a/doc/source/modules/cassandra/examples/BASH/run_cqlsh.sh b/doc/modules/cassandra/examples/BASH/run_cqlsh.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/run_cqlsh.sh rename to doc/modules/cassandra/examples/BASH/run_cqlsh.sh diff --git a/doc/source/modules/cassandra/examples/BASH/run_cqlsh_nobin.sh b/doc/modules/cassandra/examples/BASH/run_cqlsh_nobin.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/run_cqlsh_nobin.sh rename to doc/modules/cassandra/examples/BASH/run_cqlsh_nobin.sh diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh b/doc/modules/cassandra/examples/BASH/snapshot_backup2.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/snapshot_backup2.sh rename to doc/modules/cassandra/examples/BASH/snapshot_backup2.sh diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh b/doc/modules/cassandra/examples/BASH/snapshot_both_backups.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/snapshot_both_backups.sh rename to doc/modules/cassandra/examples/BASH/snapshot_both_backups.sh diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_files.sh b/doc/modules/cassandra/examples/BASH/snapshot_files.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/snapshot_files.sh rename to doc/modules/cassandra/examples/BASH/snapshot_files.sh diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh b/doc/modules/cassandra/examples/BASH/snapshot_mult_ks.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/snapshot_mult_ks.sh rename to doc/modules/cassandra/examples/BASH/snapshot_mult_ks.sh diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh b/doc/modules/cassandra/examples/BASH/snapshot_mult_tables.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables.sh rename to doc/modules/cassandra/examples/BASH/snapshot_mult_tables.sh diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh b/doc/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh rename to doc/modules/cassandra/examples/BASH/snapshot_mult_tables_again.sh diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_one_table.sh b/doc/modules/cassandra/examples/BASH/snapshot_one_table.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/snapshot_one_table.sh rename to doc/modules/cassandra/examples/BASH/snapshot_one_table.sh diff --git a/doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh b/doc/modules/cassandra/examples/BASH/snapshot_one_table2.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/snapshot_one_table2.sh rename to doc/modules/cassandra/examples/BASH/snapshot_one_table2.sh diff --git a/doc/source/modules/cassandra/examples/BASH/start_tarball.sh b/doc/modules/cassandra/examples/BASH/start_tarball.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/start_tarball.sh rename to doc/modules/cassandra/examples/BASH/start_tarball.sh diff --git a/doc/source/modules/cassandra/examples/BASH/tail_syslog.sh b/doc/modules/cassandra/examples/BASH/tail_syslog.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/tail_syslog.sh rename to doc/modules/cassandra/examples/BASH/tail_syslog.sh diff --git a/doc/source/modules/cassandra/examples/BASH/tail_syslog_package.sh b/doc/modules/cassandra/examples/BASH/tail_syslog_package.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/tail_syslog_package.sh rename to doc/modules/cassandra/examples/BASH/tail_syslog_package.sh diff --git a/doc/source/modules/cassandra/examples/BASH/tarball.sh b/doc/modules/cassandra/examples/BASH/tarball.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/tarball.sh rename to doc/modules/cassandra/examples/BASH/tarball.sh diff --git a/doc/source/modules/cassandra/examples/BASH/verify_gpg.sh b/doc/modules/cassandra/examples/BASH/verify_gpg.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/verify_gpg.sh rename to doc/modules/cassandra/examples/BASH/verify_gpg.sh diff --git a/doc/source/modules/cassandra/examples/BASH/yum_cass.sh b/doc/modules/cassandra/examples/BASH/yum_cass.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/yum_cass.sh rename to doc/modules/cassandra/examples/BASH/yum_cass.sh diff --git a/doc/source/modules/cassandra/examples/BASH/yum_start.sh b/doc/modules/cassandra/examples/BASH/yum_start.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/yum_start.sh rename to doc/modules/cassandra/examples/BASH/yum_start.sh diff --git a/doc/source/modules/cassandra/examples/BASH/yum_update.sh b/doc/modules/cassandra/examples/BASH/yum_update.sh similarity index 100% rename from doc/source/modules/cassandra/examples/BASH/yum_update.sh rename to doc/modules/cassandra/examples/BASH/yum_update.sh diff --git a/doc/source/modules/cassandra/examples/BNF/alter_ks.bnf b/doc/modules/cassandra/examples/BNF/alter_ks.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/alter_ks.bnf rename to doc/modules/cassandra/examples/BNF/alter_ks.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/alter_mv_statement.bnf b/doc/modules/cassandra/examples/BNF/alter_mv_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/alter_mv_statement.bnf rename to doc/modules/cassandra/examples/BNF/alter_mv_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/alter_role_statement.bnf b/doc/modules/cassandra/examples/BNF/alter_role_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/alter_role_statement.bnf rename to doc/modules/cassandra/examples/BNF/alter_role_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/alter_table.bnf b/doc/modules/cassandra/examples/BNF/alter_table.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/alter_table.bnf rename to doc/modules/cassandra/examples/BNF/alter_table.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/alter_udt_statement.bnf b/doc/modules/cassandra/examples/BNF/alter_udt_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/alter_udt_statement.bnf rename to doc/modules/cassandra/examples/BNF/alter_udt_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/alter_user_statement.bnf b/doc/modules/cassandra/examples/BNF/alter_user_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/alter_user_statement.bnf rename to doc/modules/cassandra/examples/BNF/alter_user_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/batch_statement.bnf b/doc/modules/cassandra/examples/BNF/batch_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/batch_statement.bnf rename to doc/modules/cassandra/examples/BNF/batch_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/collection_literal.bnf b/doc/modules/cassandra/examples/BNF/collection_literal.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/collection_literal.bnf rename to doc/modules/cassandra/examples/BNF/collection_literal.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/collection_type.bnf b/doc/modules/cassandra/examples/BNF/collection_type.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/collection_type.bnf rename to doc/modules/cassandra/examples/BNF/collection_type.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/column.bnf b/doc/modules/cassandra/examples/BNF/column.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/column.bnf rename to doc/modules/cassandra/examples/BNF/column.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/constant.bnf b/doc/modules/cassandra/examples/BNF/constant.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/constant.bnf rename to doc/modules/cassandra/examples/BNF/constant.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/cql_statement.bnf b/doc/modules/cassandra/examples/BNF/cql_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/cql_statement.bnf rename to doc/modules/cassandra/examples/BNF/cql_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/cql_type.bnf b/doc/modules/cassandra/examples/BNF/cql_type.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/cql_type.bnf rename to doc/modules/cassandra/examples/BNF/cql_type.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_aggregate_statement.bnf b/doc/modules/cassandra/examples/BNF/create_aggregate_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_aggregate_statement.bnf rename to doc/modules/cassandra/examples/BNF/create_aggregate_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_function_statement.bnf b/doc/modules/cassandra/examples/BNF/create_function_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_function_statement.bnf rename to doc/modules/cassandra/examples/BNF/create_function_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_index_statement.bnf b/doc/modules/cassandra/examples/BNF/create_index_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_index_statement.bnf rename to doc/modules/cassandra/examples/BNF/create_index_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_ks.bnf b/doc/modules/cassandra/examples/BNF/create_ks.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_ks.bnf rename to doc/modules/cassandra/examples/BNF/create_ks.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_mv_statement.bnf b/doc/modules/cassandra/examples/BNF/create_mv_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_mv_statement.bnf rename to doc/modules/cassandra/examples/BNF/create_mv_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_role_statement.bnf b/doc/modules/cassandra/examples/BNF/create_role_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_role_statement.bnf rename to doc/modules/cassandra/examples/BNF/create_role_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_table.bnf b/doc/modules/cassandra/examples/BNF/create_table.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_table.bnf rename to doc/modules/cassandra/examples/BNF/create_table.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_trigger_statement.bnf b/doc/modules/cassandra/examples/BNF/create_trigger_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_trigger_statement.bnf rename to doc/modules/cassandra/examples/BNF/create_trigger_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_type.bnf b/doc/modules/cassandra/examples/BNF/create_type.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_type.bnf rename to doc/modules/cassandra/examples/BNF/create_type.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/create_user_statement.bnf b/doc/modules/cassandra/examples/BNF/create_user_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/create_user_statement.bnf rename to doc/modules/cassandra/examples/BNF/create_user_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/custom_type.bnf b/doc/modules/cassandra/examples/BNF/custom_type.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/custom_type.bnf rename to doc/modules/cassandra/examples/BNF/custom_type.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/delete_statement.bnf b/doc/modules/cassandra/examples/BNF/delete_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/delete_statement.bnf rename to doc/modules/cassandra/examples/BNF/delete_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_aggregate_statement.bnf b/doc/modules/cassandra/examples/BNF/drop_aggregate_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_aggregate_statement.bnf rename to doc/modules/cassandra/examples/BNF/drop_aggregate_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_function_statement.bnf b/doc/modules/cassandra/examples/BNF/drop_function_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_function_statement.bnf rename to doc/modules/cassandra/examples/BNF/drop_function_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_index_statement.bnf b/doc/modules/cassandra/examples/BNF/drop_index_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_index_statement.bnf rename to doc/modules/cassandra/examples/BNF/drop_index_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_ks.bnf b/doc/modules/cassandra/examples/BNF/drop_ks.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_ks.bnf rename to doc/modules/cassandra/examples/BNF/drop_ks.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_mv_statement.bnf b/doc/modules/cassandra/examples/BNF/drop_mv_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_mv_statement.bnf rename to doc/modules/cassandra/examples/BNF/drop_mv_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_role_statement.bnf b/doc/modules/cassandra/examples/BNF/drop_role_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_role_statement.bnf rename to doc/modules/cassandra/examples/BNF/drop_role_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_table.bnf b/doc/modules/cassandra/examples/BNF/drop_table.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_table.bnf rename to doc/modules/cassandra/examples/BNF/drop_table.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_trigger_statement.bnf b/doc/modules/cassandra/examples/BNF/drop_trigger_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_trigger_statement.bnf rename to doc/modules/cassandra/examples/BNF/drop_trigger_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_udt_statement.bnf b/doc/modules/cassandra/examples/BNF/drop_udt_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_udt_statement.bnf rename to doc/modules/cassandra/examples/BNF/drop_udt_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/drop_user_statement.bnf b/doc/modules/cassandra/examples/BNF/drop_user_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/drop_user_statement.bnf rename to doc/modules/cassandra/examples/BNF/drop_user_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/function.bnf b/doc/modules/cassandra/examples/BNF/function.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/function.bnf rename to doc/modules/cassandra/examples/BNF/function.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/grant_permission_statement.bnf b/doc/modules/cassandra/examples/BNF/grant_permission_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/grant_permission_statement.bnf rename to doc/modules/cassandra/examples/BNF/grant_permission_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/grant_role_statement.bnf b/doc/modules/cassandra/examples/BNF/grant_role_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/grant_role_statement.bnf rename to doc/modules/cassandra/examples/BNF/grant_role_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/identifier.bnf b/doc/modules/cassandra/examples/BNF/identifier.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/identifier.bnf rename to doc/modules/cassandra/examples/BNF/identifier.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/index_name.bnf b/doc/modules/cassandra/examples/BNF/index_name.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/index_name.bnf rename to doc/modules/cassandra/examples/BNF/index_name.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/insert_statement.bnf b/doc/modules/cassandra/examples/BNF/insert_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/insert_statement.bnf rename to doc/modules/cassandra/examples/BNF/insert_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/ks_table.bnf b/doc/modules/cassandra/examples/BNF/ks_table.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/ks_table.bnf rename to doc/modules/cassandra/examples/BNF/ks_table.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/list_permissions_statement.bnf b/doc/modules/cassandra/examples/BNF/list_permissions_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/list_permissions_statement.bnf rename to doc/modules/cassandra/examples/BNF/list_permissions_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/list_roles_statement.bnf b/doc/modules/cassandra/examples/BNF/list_roles_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/list_roles_statement.bnf rename to doc/modules/cassandra/examples/BNF/list_roles_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/list_users_statement.bnf b/doc/modules/cassandra/examples/BNF/list_users_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/list_users_statement.bnf rename to doc/modules/cassandra/examples/BNF/list_users_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/native_type.bnf b/doc/modules/cassandra/examples/BNF/native_type.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/native_type.bnf rename to doc/modules/cassandra/examples/BNF/native_type.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/options.bnf b/doc/modules/cassandra/examples/BNF/options.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/options.bnf rename to doc/modules/cassandra/examples/BNF/options.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/revoke_permission_statement.bnf b/doc/modules/cassandra/examples/BNF/revoke_permission_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/revoke_permission_statement.bnf rename to doc/modules/cassandra/examples/BNF/revoke_permission_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/revoke_role_statement.bnf b/doc/modules/cassandra/examples/BNF/revoke_role_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/revoke_role_statement.bnf rename to doc/modules/cassandra/examples/BNF/revoke_role_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/role_name.bnf b/doc/modules/cassandra/examples/BNF/role_name.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/role_name.bnf rename to doc/modules/cassandra/examples/BNF/role_name.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/select_statement.bnf b/doc/modules/cassandra/examples/BNF/select_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/select_statement.bnf rename to doc/modules/cassandra/examples/BNF/select_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/term.bnf b/doc/modules/cassandra/examples/BNF/term.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/term.bnf rename to doc/modules/cassandra/examples/BNF/term.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/trigger_name.bnf b/doc/modules/cassandra/examples/BNF/trigger_name.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/trigger_name.bnf rename to doc/modules/cassandra/examples/BNF/trigger_name.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/truncate_table.bnf b/doc/modules/cassandra/examples/BNF/truncate_table.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/truncate_table.bnf rename to doc/modules/cassandra/examples/BNF/truncate_table.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/tuple.bnf b/doc/modules/cassandra/examples/BNF/tuple.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/tuple.bnf rename to doc/modules/cassandra/examples/BNF/tuple.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/udt.bnf b/doc/modules/cassandra/examples/BNF/udt.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/udt.bnf rename to doc/modules/cassandra/examples/BNF/udt.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/udt_literal.bnf b/doc/modules/cassandra/examples/BNF/udt_literal.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/udt_literal.bnf rename to doc/modules/cassandra/examples/BNF/udt_literal.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/update_statement.bnf b/doc/modules/cassandra/examples/BNF/update_statement.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/update_statement.bnf rename to doc/modules/cassandra/examples/BNF/update_statement.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/use_ks.bnf b/doc/modules/cassandra/examples/BNF/use_ks.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/use_ks.bnf rename to doc/modules/cassandra/examples/BNF/use_ks.bnf diff --git a/doc/source/modules/cassandra/examples/BNF/view_name.bnf b/doc/modules/cassandra/examples/BNF/view_name.bnf similarity index 100% rename from doc/source/modules/cassandra/examples/BNF/view_name.bnf rename to doc/modules/cassandra/examples/BNF/view_name.bnf diff --git a/doc/source/modules/cassandra/examples/CQL/allow_filtering.cql b/doc/modules/cassandra/examples/CQL/allow_filtering.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/allow_filtering.cql rename to doc/modules/cassandra/examples/CQL/allow_filtering.cql diff --git a/doc/source/modules/cassandra/examples/CQL/alter_ks.cql b/doc/modules/cassandra/examples/CQL/alter_ks.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/alter_ks.cql rename to doc/modules/cassandra/examples/CQL/alter_ks.cql diff --git a/doc/source/modules/cassandra/examples/CQL/alter_role.cql b/doc/modules/cassandra/examples/CQL/alter_role.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/alter_role.cql rename to doc/modules/cassandra/examples/CQL/alter_role.cql diff --git a/doc/source/modules/cassandra/examples/CQL/alter_table_add_column.cql b/doc/modules/cassandra/examples/CQL/alter_table_add_column.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/alter_table_add_column.cql rename to doc/modules/cassandra/examples/CQL/alter_table_add_column.cql diff --git a/doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry.cql b/doc/modules/cassandra/examples/CQL/alter_table_spec_retry.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry.cql rename to doc/modules/cassandra/examples/CQL/alter_table_spec_retry.cql diff --git a/doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry_percent.cql b/doc/modules/cassandra/examples/CQL/alter_table_spec_retry_percent.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/alter_table_spec_retry_percent.cql rename to doc/modules/cassandra/examples/CQL/alter_table_spec_retry_percent.cql diff --git a/doc/source/modules/cassandra/examples/CQL/alter_table_with_comment.cql b/doc/modules/cassandra/examples/CQL/alter_table_with_comment.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/alter_table_with_comment.cql rename to doc/modules/cassandra/examples/CQL/alter_table_with_comment.cql diff --git a/doc/source/modules/cassandra/examples/CQL/alter_user.cql b/doc/modules/cassandra/examples/CQL/alter_user.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/alter_user.cql rename to doc/modules/cassandra/examples/CQL/alter_user.cql diff --git a/doc/source/modules/cassandra/examples/CQL/as.cql b/doc/modules/cassandra/examples/CQL/as.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/as.cql rename to doc/modules/cassandra/examples/CQL/as.cql diff --git a/doc/source/modules/cassandra/examples/CQL/autoexpand_exclude_dc.cql b/doc/modules/cassandra/examples/CQL/autoexpand_exclude_dc.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/autoexpand_exclude_dc.cql rename to doc/modules/cassandra/examples/CQL/autoexpand_exclude_dc.cql diff --git a/doc/source/modules/cassandra/examples/CQL/autoexpand_ks.cql b/doc/modules/cassandra/examples/CQL/autoexpand_ks.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/autoexpand_ks.cql rename to doc/modules/cassandra/examples/CQL/autoexpand_ks.cql diff --git a/doc/source/modules/cassandra/examples/CQL/autoexpand_ks_override.cql b/doc/modules/cassandra/examples/CQL/autoexpand_ks_override.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/autoexpand_ks_override.cql rename to doc/modules/cassandra/examples/CQL/autoexpand_ks_override.cql diff --git a/doc/source/modules/cassandra/examples/CQL/avg.cql b/doc/modules/cassandra/examples/CQL/avg.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/avg.cql rename to doc/modules/cassandra/examples/CQL/avg.cql diff --git a/doc/source/modules/cassandra/examples/CQL/batch_statement.cql b/doc/modules/cassandra/examples/CQL/batch_statement.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/batch_statement.cql rename to doc/modules/cassandra/examples/CQL/batch_statement.cql diff --git a/doc/source/modules/cassandra/examples/CQL/caching_option.cql b/doc/modules/cassandra/examples/CQL/caching_option.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/caching_option.cql rename to doc/modules/cassandra/examples/CQL/caching_option.cql diff --git a/doc/source/modules/cassandra/examples/CQL/chunk_length.cql b/doc/modules/cassandra/examples/CQL/chunk_length.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/chunk_length.cql rename to doc/modules/cassandra/examples/CQL/chunk_length.cql diff --git a/doc/source/modules/cassandra/examples/CQL/count.cql b/doc/modules/cassandra/examples/CQL/count.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/count.cql rename to doc/modules/cassandra/examples/CQL/count.cql diff --git a/doc/source/modules/cassandra/examples/CQL/count_nonnull.cql b/doc/modules/cassandra/examples/CQL/count_nonnull.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/count_nonnull.cql rename to doc/modules/cassandra/examples/CQL/count_nonnull.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_function.cql b/doc/modules/cassandra/examples/CQL/create_function.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_function.cql rename to doc/modules/cassandra/examples/CQL/create_function.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_index.cql b/doc/modules/cassandra/examples/CQL/create_index.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_index.cql rename to doc/modules/cassandra/examples/CQL/create_index.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks.cql b/doc/modules/cassandra/examples/CQL/create_ks.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_ks.cql rename to doc/modules/cassandra/examples/CQL/create_ks.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql b/doc/modules/cassandra/examples/CQL/create_ks2_backup.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_ks2_backup.cql rename to doc/modules/cassandra/examples/CQL/create_ks2_backup.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql b/doc/modules/cassandra/examples/CQL/create_ks_backup.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_ks_backup.cql rename to doc/modules/cassandra/examples/CQL/create_ks_backup.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_ks_trans_repl.cql b/doc/modules/cassandra/examples/CQL/create_ks_trans_repl.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_ks_trans_repl.cql rename to doc/modules/cassandra/examples/CQL/create_ks_trans_repl.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_mv_statement.cql b/doc/modules/cassandra/examples/CQL/create_mv_statement.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_mv_statement.cql rename to doc/modules/cassandra/examples/CQL/create_mv_statement.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_role.cql b/doc/modules/cassandra/examples/CQL/create_role.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_role.cql rename to doc/modules/cassandra/examples/CQL/create_role.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_role_ifnotexists.cql b/doc/modules/cassandra/examples/CQL/create_role_ifnotexists.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_role_ifnotexists.cql rename to doc/modules/cassandra/examples/CQL/create_role_ifnotexists.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_static_column.cql b/doc/modules/cassandra/examples/CQL/create_static_column.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_static_column.cql rename to doc/modules/cassandra/examples/CQL/create_static_column.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_table.cql b/doc/modules/cassandra/examples/CQL/create_table.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_table.cql rename to doc/modules/cassandra/examples/CQL/create_table.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql b/doc/modules/cassandra/examples/CQL/create_table2_backup.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_table2_backup.cql rename to doc/modules/cassandra/examples/CQL/create_table2_backup.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_backup.cql b/doc/modules/cassandra/examples/CQL/create_table_backup.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_table_backup.cql rename to doc/modules/cassandra/examples/CQL/create_table_backup.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_clustercolumn.cql b/doc/modules/cassandra/examples/CQL/create_table_clustercolumn.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_table_clustercolumn.cql rename to doc/modules/cassandra/examples/CQL/create_table_clustercolumn.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_compound_pk.cql b/doc/modules/cassandra/examples/CQL/create_table_compound_pk.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_table_compound_pk.cql rename to doc/modules/cassandra/examples/CQL/create_table_compound_pk.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_simple.cql b/doc/modules/cassandra/examples/CQL/create_table_simple.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_table_simple.cql rename to doc/modules/cassandra/examples/CQL/create_table_simple.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_table_single_pk.cql b/doc/modules/cassandra/examples/CQL/create_table_single_pk.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_table_single_pk.cql rename to doc/modules/cassandra/examples/CQL/create_table_single_pk.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_trigger.cql b/doc/modules/cassandra/examples/CQL/create_trigger.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_trigger.cql rename to doc/modules/cassandra/examples/CQL/create_trigger.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_user.cql b/doc/modules/cassandra/examples/CQL/create_user.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_user.cql rename to doc/modules/cassandra/examples/CQL/create_user.cql diff --git a/doc/source/modules/cassandra/examples/CQL/create_user_role.cql b/doc/modules/cassandra/examples/CQL/create_user_role.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/create_user_role.cql rename to doc/modules/cassandra/examples/CQL/create_user_role.cql diff --git a/doc/source/modules/cassandra/examples/CQL/currentdate.cql b/doc/modules/cassandra/examples/CQL/currentdate.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/currentdate.cql rename to doc/modules/cassandra/examples/CQL/currentdate.cql diff --git a/doc/source/modules/cassandra/examples/CQL/datetime_arithmetic.cql b/doc/modules/cassandra/examples/CQL/datetime_arithmetic.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/datetime_arithmetic.cql rename to doc/modules/cassandra/examples/CQL/datetime_arithmetic.cql diff --git a/doc/source/modules/cassandra/examples/CQL/delete_all_elements_list.cql b/doc/modules/cassandra/examples/CQL/delete_all_elements_list.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/delete_all_elements_list.cql rename to doc/modules/cassandra/examples/CQL/delete_all_elements_list.cql diff --git a/doc/source/modules/cassandra/examples/CQL/delete_element_list.cql b/doc/modules/cassandra/examples/CQL/delete_element_list.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/delete_element_list.cql rename to doc/modules/cassandra/examples/CQL/delete_element_list.cql diff --git a/doc/source/modules/cassandra/examples/CQL/delete_map.cql b/doc/modules/cassandra/examples/CQL/delete_map.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/delete_map.cql rename to doc/modules/cassandra/examples/CQL/delete_map.cql diff --git a/doc/source/modules/cassandra/examples/CQL/delete_set.cql b/doc/modules/cassandra/examples/CQL/delete_set.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/delete_set.cql rename to doc/modules/cassandra/examples/CQL/delete_set.cql diff --git a/doc/source/modules/cassandra/examples/CQL/delete_statement.cql b/doc/modules/cassandra/examples/CQL/delete_statement.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/delete_statement.cql rename to doc/modules/cassandra/examples/CQL/delete_statement.cql diff --git a/doc/source/modules/cassandra/examples/CQL/drop_aggregate.cql b/doc/modules/cassandra/examples/CQL/drop_aggregate.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/drop_aggregate.cql rename to doc/modules/cassandra/examples/CQL/drop_aggregate.cql diff --git a/doc/source/modules/cassandra/examples/CQL/drop_function.cql b/doc/modules/cassandra/examples/CQL/drop_function.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/drop_function.cql rename to doc/modules/cassandra/examples/CQL/drop_function.cql diff --git a/doc/source/modules/cassandra/examples/CQL/drop_ks.cql b/doc/modules/cassandra/examples/CQL/drop_ks.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/drop_ks.cql rename to doc/modules/cassandra/examples/CQL/drop_ks.cql diff --git a/doc/source/modules/cassandra/examples/CQL/drop_trigger.cql b/doc/modules/cassandra/examples/CQL/drop_trigger.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/drop_trigger.cql rename to doc/modules/cassandra/examples/CQL/drop_trigger.cql diff --git a/doc/source/modules/cassandra/examples/CQL/function_dollarsign.cql b/doc/modules/cassandra/examples/CQL/function_dollarsign.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/function_dollarsign.cql rename to doc/modules/cassandra/examples/CQL/function_dollarsign.cql diff --git a/doc/source/modules/cassandra/examples/CQL/function_overload.cql b/doc/modules/cassandra/examples/CQL/function_overload.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/function_overload.cql rename to doc/modules/cassandra/examples/CQL/function_overload.cql diff --git a/doc/source/modules/cassandra/examples/CQL/function_udfcontext.cql b/doc/modules/cassandra/examples/CQL/function_udfcontext.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/function_udfcontext.cql rename to doc/modules/cassandra/examples/CQL/function_udfcontext.cql diff --git a/doc/source/modules/cassandra/examples/CQL/grant_describe.cql b/doc/modules/cassandra/examples/CQL/grant_describe.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/grant_describe.cql rename to doc/modules/cassandra/examples/CQL/grant_describe.cql diff --git a/doc/source/modules/cassandra/examples/CQL/grant_drop.cql b/doc/modules/cassandra/examples/CQL/grant_drop.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/grant_drop.cql rename to doc/modules/cassandra/examples/CQL/grant_drop.cql diff --git a/doc/source/modules/cassandra/examples/CQL/grant_execute.cql b/doc/modules/cassandra/examples/CQL/grant_execute.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/grant_execute.cql rename to doc/modules/cassandra/examples/CQL/grant_execute.cql diff --git a/doc/source/modules/cassandra/examples/CQL/grant_modify.cql b/doc/modules/cassandra/examples/CQL/grant_modify.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/grant_modify.cql rename to doc/modules/cassandra/examples/CQL/grant_modify.cql diff --git a/doc/source/modules/cassandra/examples/CQL/grant_perm.cql b/doc/modules/cassandra/examples/CQL/grant_perm.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/grant_perm.cql rename to doc/modules/cassandra/examples/CQL/grant_perm.cql diff --git a/doc/source/modules/cassandra/examples/CQL/grant_role.cql b/doc/modules/cassandra/examples/CQL/grant_role.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/grant_role.cql rename to doc/modules/cassandra/examples/CQL/grant_role.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_data2_backup.cql b/doc/modules/cassandra/examples/CQL/insert_data2_backup.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_data2_backup.cql rename to doc/modules/cassandra/examples/CQL/insert_data2_backup.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_data_backup.cql b/doc/modules/cassandra/examples/CQL/insert_data_backup.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_data_backup.cql rename to doc/modules/cassandra/examples/CQL/insert_data_backup.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_duration.cql b/doc/modules/cassandra/examples/CQL/insert_duration.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_duration.cql rename to doc/modules/cassandra/examples/CQL/insert_duration.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_json.cql b/doc/modules/cassandra/examples/CQL/insert_json.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_json.cql rename to doc/modules/cassandra/examples/CQL/insert_json.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_statement.cql b/doc/modules/cassandra/examples/CQL/insert_statement.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_statement.cql rename to doc/modules/cassandra/examples/CQL/insert_statement.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_static_data.cql b/doc/modules/cassandra/examples/CQL/insert_static_data.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_static_data.cql rename to doc/modules/cassandra/examples/CQL/insert_static_data.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_table_cc_addl.cql b/doc/modules/cassandra/examples/CQL/insert_table_cc_addl.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_table_cc_addl.cql rename to doc/modules/cassandra/examples/CQL/insert_table_cc_addl.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn.cql b/doc/modules/cassandra/examples/CQL/insert_table_clustercolumn.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn.cql rename to doc/modules/cassandra/examples/CQL/insert_table_clustercolumn.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn2.cql b/doc/modules/cassandra/examples/CQL/insert_table_clustercolumn2.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_table_clustercolumn2.cql rename to doc/modules/cassandra/examples/CQL/insert_table_clustercolumn2.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_table_compound_pk.cql b/doc/modules/cassandra/examples/CQL/insert_table_compound_pk.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_table_compound_pk.cql rename to doc/modules/cassandra/examples/CQL/insert_table_compound_pk.cql diff --git a/doc/source/modules/cassandra/examples/CQL/insert_udt.cql b/doc/modules/cassandra/examples/CQL/insert_udt.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/insert_udt.cql rename to doc/modules/cassandra/examples/CQL/insert_udt.cql diff --git a/doc/source/modules/cassandra/examples/CQL/list.cql b/doc/modules/cassandra/examples/CQL/list.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/list.cql rename to doc/modules/cassandra/examples/CQL/list.cql diff --git a/doc/source/modules/cassandra/examples/CQL/list_all_perm.cql b/doc/modules/cassandra/examples/CQL/list_all_perm.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/list_all_perm.cql rename to doc/modules/cassandra/examples/CQL/list_all_perm.cql diff --git a/doc/source/modules/cassandra/examples/CQL/list_perm.cql b/doc/modules/cassandra/examples/CQL/list_perm.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/list_perm.cql rename to doc/modules/cassandra/examples/CQL/list_perm.cql diff --git a/doc/source/modules/cassandra/examples/CQL/list_roles.cql b/doc/modules/cassandra/examples/CQL/list_roles.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/list_roles.cql rename to doc/modules/cassandra/examples/CQL/list_roles.cql diff --git a/doc/source/modules/cassandra/examples/CQL/list_roles_nonrecursive.cql b/doc/modules/cassandra/examples/CQL/list_roles_nonrecursive.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/list_roles_nonrecursive.cql rename to doc/modules/cassandra/examples/CQL/list_roles_nonrecursive.cql diff --git a/doc/source/modules/cassandra/examples/CQL/list_roles_of.cql b/doc/modules/cassandra/examples/CQL/list_roles_of.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/list_roles_of.cql rename to doc/modules/cassandra/examples/CQL/list_roles_of.cql diff --git a/doc/source/modules/cassandra/examples/CQL/list_select_perm.cql b/doc/modules/cassandra/examples/CQL/list_select_perm.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/list_select_perm.cql rename to doc/modules/cassandra/examples/CQL/list_select_perm.cql diff --git a/doc/source/modules/cassandra/examples/CQL/map.cql b/doc/modules/cassandra/examples/CQL/map.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/map.cql rename to doc/modules/cassandra/examples/CQL/map.cql diff --git a/doc/source/modules/cassandra/examples/CQL/min_max.cql b/doc/modules/cassandra/examples/CQL/min_max.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/min_max.cql rename to doc/modules/cassandra/examples/CQL/min_max.cql diff --git a/doc/source/modules/cassandra/examples/CQL/mv_table_def.cql b/doc/modules/cassandra/examples/CQL/mv_table_def.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/mv_table_def.cql rename to doc/modules/cassandra/examples/CQL/mv_table_def.cql diff --git a/doc/source/modules/cassandra/examples/CQL/mv_table_error.cql b/doc/modules/cassandra/examples/CQL/mv_table_error.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/mv_table_error.cql rename to doc/modules/cassandra/examples/CQL/mv_table_error.cql diff --git a/doc/source/modules/cassandra/examples/CQL/mv_table_from_base.cql b/doc/modules/cassandra/examples/CQL/mv_table_from_base.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/mv_table_from_base.cql rename to doc/modules/cassandra/examples/CQL/mv_table_from_base.cql diff --git a/doc/source/modules/cassandra/examples/CQL/no_revoke.cql b/doc/modules/cassandra/examples/CQL/no_revoke.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/no_revoke.cql rename to doc/modules/cassandra/examples/CQL/no_revoke.cql diff --git a/doc/source/modules/cassandra/examples/CQL/query_allow_filtering.cql b/doc/modules/cassandra/examples/CQL/query_allow_filtering.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/query_allow_filtering.cql rename to doc/modules/cassandra/examples/CQL/query_allow_filtering.cql diff --git a/doc/source/modules/cassandra/examples/CQL/query_fail_allow_filtering.cql b/doc/modules/cassandra/examples/CQL/query_fail_allow_filtering.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/query_fail_allow_filtering.cql rename to doc/modules/cassandra/examples/CQL/query_fail_allow_filtering.cql diff --git a/doc/source/modules/cassandra/examples/CQL/query_nofail_allow_filtering.cql b/doc/modules/cassandra/examples/CQL/query_nofail_allow_filtering.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/query_nofail_allow_filtering.cql rename to doc/modules/cassandra/examples/CQL/query_nofail_allow_filtering.cql diff --git a/doc/source/modules/cassandra/examples/CQL/rename_udt_field.cql b/doc/modules/cassandra/examples/CQL/rename_udt_field.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/rename_udt_field.cql rename to doc/modules/cassandra/examples/CQL/rename_udt_field.cql diff --git a/doc/source/modules/cassandra/examples/CQL/revoke_perm.cql b/doc/modules/cassandra/examples/CQL/revoke_perm.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/revoke_perm.cql rename to doc/modules/cassandra/examples/CQL/revoke_perm.cql diff --git a/doc/source/modules/cassandra/examples/CQL/revoke_role.cql b/doc/modules/cassandra/examples/CQL/revoke_role.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/revoke_role.cql rename to doc/modules/cassandra/examples/CQL/revoke_role.cql diff --git a/doc/source/modules/cassandra/examples/CQL/role_error.cql b/doc/modules/cassandra/examples/CQL/role_error.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/role_error.cql rename to doc/modules/cassandra/examples/CQL/role_error.cql diff --git a/doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql b/doc/modules/cassandra/examples/CQL/select_data2_backup.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/select_data2_backup.cql rename to doc/modules/cassandra/examples/CQL/select_data2_backup.cql diff --git a/doc/source/modules/cassandra/examples/CQL/select_data_backup.cql b/doc/modules/cassandra/examples/CQL/select_data_backup.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/select_data_backup.cql rename to doc/modules/cassandra/examples/CQL/select_data_backup.cql diff --git a/doc/source/modules/cassandra/examples/CQL/select_range.cql b/doc/modules/cassandra/examples/CQL/select_range.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/select_range.cql rename to doc/modules/cassandra/examples/CQL/select_range.cql diff --git a/doc/source/modules/cassandra/examples/CQL/select_statement.cql b/doc/modules/cassandra/examples/CQL/select_statement.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/select_statement.cql rename to doc/modules/cassandra/examples/CQL/select_statement.cql diff --git a/doc/source/modules/cassandra/examples/CQL/select_static_data.cql b/doc/modules/cassandra/examples/CQL/select_static_data.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/select_static_data.cql rename to doc/modules/cassandra/examples/CQL/select_static_data.cql diff --git a/doc/source/modules/cassandra/examples/CQL/select_table_clustercolumn.cql b/doc/modules/cassandra/examples/CQL/select_table_clustercolumn.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/select_table_clustercolumn.cql rename to doc/modules/cassandra/examples/CQL/select_table_clustercolumn.cql diff --git a/doc/source/modules/cassandra/examples/CQL/select_table_compound_pk.cql b/doc/modules/cassandra/examples/CQL/select_table_compound_pk.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/select_table_compound_pk.cql rename to doc/modules/cassandra/examples/CQL/select_table_compound_pk.cql diff --git a/doc/source/modules/cassandra/examples/CQL/set.cql b/doc/modules/cassandra/examples/CQL/set.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/set.cql rename to doc/modules/cassandra/examples/CQL/set.cql diff --git a/doc/source/modules/cassandra/examples/CQL/spec_retry_values.cql b/doc/modules/cassandra/examples/CQL/spec_retry_values.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/spec_retry_values.cql rename to doc/modules/cassandra/examples/CQL/spec_retry_values.cql diff --git a/doc/source/modules/cassandra/examples/CQL/sum.cql b/doc/modules/cassandra/examples/CQL/sum.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/sum.cql rename to doc/modules/cassandra/examples/CQL/sum.cql diff --git a/doc/source/modules/cassandra/examples/CQL/table_for_where.cql b/doc/modules/cassandra/examples/CQL/table_for_where.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/table_for_where.cql rename to doc/modules/cassandra/examples/CQL/table_for_where.cql diff --git a/doc/source/modules/cassandra/examples/CQL/timeuuid_min_max.cql b/doc/modules/cassandra/examples/CQL/timeuuid_min_max.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/timeuuid_min_max.cql rename to doc/modules/cassandra/examples/CQL/timeuuid_min_max.cql diff --git a/doc/source/modules/cassandra/examples/CQL/timeuuid_now.cql b/doc/modules/cassandra/examples/CQL/timeuuid_now.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/timeuuid_now.cql rename to doc/modules/cassandra/examples/CQL/timeuuid_now.cql diff --git a/doc/source/modules/cassandra/examples/CQL/token.cql b/doc/modules/cassandra/examples/CQL/token.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/token.cql rename to doc/modules/cassandra/examples/CQL/token.cql diff --git a/doc/source/modules/cassandra/examples/CQL/tuple.cql b/doc/modules/cassandra/examples/CQL/tuple.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/tuple.cql rename to doc/modules/cassandra/examples/CQL/tuple.cql diff --git a/doc/source/modules/cassandra/examples/CQL/uda.cql b/doc/modules/cassandra/examples/CQL/uda.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/uda.cql rename to doc/modules/cassandra/examples/CQL/uda.cql diff --git a/doc/source/modules/cassandra/examples/CQL/udt.cql b/doc/modules/cassandra/examples/CQL/udt.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/udt.cql rename to doc/modules/cassandra/examples/CQL/udt.cql diff --git a/doc/source/modules/cassandra/examples/CQL/update_list.cql b/doc/modules/cassandra/examples/CQL/update_list.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/update_list.cql rename to doc/modules/cassandra/examples/CQL/update_list.cql diff --git a/doc/source/modules/cassandra/examples/CQL/update_map.cql b/doc/modules/cassandra/examples/CQL/update_map.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/update_map.cql rename to doc/modules/cassandra/examples/CQL/update_map.cql diff --git a/doc/source/modules/cassandra/examples/CQL/update_particular_list_element.cql b/doc/modules/cassandra/examples/CQL/update_particular_list_element.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/update_particular_list_element.cql rename to doc/modules/cassandra/examples/CQL/update_particular_list_element.cql diff --git a/doc/source/modules/cassandra/examples/CQL/update_set.cql b/doc/modules/cassandra/examples/CQL/update_set.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/update_set.cql rename to doc/modules/cassandra/examples/CQL/update_set.cql diff --git a/doc/source/modules/cassandra/examples/CQL/update_statement.cql b/doc/modules/cassandra/examples/CQL/update_statement.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/update_statement.cql rename to doc/modules/cassandra/examples/CQL/update_statement.cql diff --git a/doc/source/modules/cassandra/examples/CQL/update_ttl_map.cql b/doc/modules/cassandra/examples/CQL/update_ttl_map.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/update_ttl_map.cql rename to doc/modules/cassandra/examples/CQL/update_ttl_map.cql diff --git a/doc/source/modules/cassandra/examples/CQL/use_ks.cql b/doc/modules/cassandra/examples/CQL/use_ks.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/use_ks.cql rename to doc/modules/cassandra/examples/CQL/use_ks.cql diff --git a/doc/source/modules/cassandra/examples/CQL/where.cql b/doc/modules/cassandra/examples/CQL/where.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/where.cql rename to doc/modules/cassandra/examples/CQL/where.cql diff --git a/doc/source/modules/cassandra/examples/CQL/where_fail.cql b/doc/modules/cassandra/examples/CQL/where_fail.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/where_fail.cql rename to doc/modules/cassandra/examples/CQL/where_fail.cql diff --git a/doc/source/modules/cassandra/examples/CQL/where_group_cluster_columns.cql b/doc/modules/cassandra/examples/CQL/where_group_cluster_columns.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/where_group_cluster_columns.cql rename to doc/modules/cassandra/examples/CQL/where_group_cluster_columns.cql diff --git a/doc/source/modules/cassandra/examples/CQL/where_in_tuple.cql b/doc/modules/cassandra/examples/CQL/where_in_tuple.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/where_in_tuple.cql rename to doc/modules/cassandra/examples/CQL/where_in_tuple.cql diff --git a/doc/source/modules/cassandra/examples/CQL/where_no_group_cluster_columns.cql b/doc/modules/cassandra/examples/CQL/where_no_group_cluster_columns.cql similarity index 100% rename from doc/source/modules/cassandra/examples/CQL/where_no_group_cluster_columns.cql rename to doc/modules/cassandra/examples/CQL/where_no_group_cluster_columns.cql diff --git a/doc/source/modules/cassandra/examples/JAVA/udf_imports.java b/doc/modules/cassandra/examples/JAVA/udf_imports.java similarity index 100% rename from doc/source/modules/cassandra/examples/JAVA/udf_imports.java rename to doc/modules/cassandra/examples/JAVA/udf_imports.java diff --git a/doc/source/modules/cassandra/examples/JAVA/udfcontext.java b/doc/modules/cassandra/examples/JAVA/udfcontext.java similarity index 100% rename from doc/source/modules/cassandra/examples/JAVA/udfcontext.java rename to doc/modules/cassandra/examples/JAVA/udfcontext.java diff --git a/doc/source/modules/cassandra/examples/RESULTS/add_repo_keys.result b/doc/modules/cassandra/examples/RESULTS/add_repo_keys.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/add_repo_keys.result rename to doc/modules/cassandra/examples/RESULTS/add_repo_keys.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/add_yum_repo.result b/doc/modules/cassandra/examples/RESULTS/add_yum_repo.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/add_yum_repo.result rename to doc/modules/cassandra/examples/RESULTS/add_yum_repo.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/autoexpand_exclude_dc.result b/doc/modules/cassandra/examples/RESULTS/autoexpand_exclude_dc.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/autoexpand_exclude_dc.result rename to doc/modules/cassandra/examples/RESULTS/autoexpand_exclude_dc.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks.result b/doc/modules/cassandra/examples/RESULTS/autoexpand_ks.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks.result rename to doc/modules/cassandra/examples/RESULTS/autoexpand_ks.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks_override.result b/doc/modules/cassandra/examples/RESULTS/autoexpand_ks_override.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/autoexpand_ks_override.result rename to doc/modules/cassandra/examples/RESULTS/autoexpand_ks_override.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/cqlsh_localhost.result b/doc/modules/cassandra/examples/RESULTS/cqlsh_localhost.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/cqlsh_localhost.result rename to doc/modules/cassandra/examples/RESULTS/cqlsh_localhost.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/find_backups.result b/doc/modules/cassandra/examples/RESULTS/find_backups.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/find_backups.result rename to doc/modules/cassandra/examples/RESULTS/find_backups.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/find_backups_table.result b/doc/modules/cassandra/examples/RESULTS/find_backups_table.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/find_backups_table.result rename to doc/modules/cassandra/examples/RESULTS/find_backups_table.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/find_two_snapshots.result b/doc/modules/cassandra/examples/RESULTS/find_two_snapshots.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/find_two_snapshots.result rename to doc/modules/cassandra/examples/RESULTS/find_two_snapshots.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/flush_and_check.result b/doc/modules/cassandra/examples/RESULTS/flush_and_check.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/flush_and_check.result rename to doc/modules/cassandra/examples/RESULTS/flush_and_check.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/flush_and_check2.result b/doc/modules/cassandra/examples/RESULTS/flush_and_check2.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/flush_and_check2.result rename to doc/modules/cassandra/examples/RESULTS/flush_and_check2.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/insert_data2_backup.result b/doc/modules/cassandra/examples/RESULTS/insert_data2_backup.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/insert_data2_backup.result rename to doc/modules/cassandra/examples/RESULTS/insert_data2_backup.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/insert_table_cc_addl.result b/doc/modules/cassandra/examples/RESULTS/insert_table_cc_addl.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/insert_table_cc_addl.result rename to doc/modules/cassandra/examples/RESULTS/insert_table_cc_addl.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/java_verify.result b/doc/modules/cassandra/examples/RESULTS/java_verify.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/java_verify.result rename to doc/modules/cassandra/examples/RESULTS/java_verify.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/no_bups.result b/doc/modules/cassandra/examples/RESULTS/no_bups.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/no_bups.result rename to doc/modules/cassandra/examples/RESULTS/no_bups.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result b/doc/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result rename to doc/modules/cassandra/examples/RESULTS/nodetool_list_snapshots.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/nodetool_snapshot_help.result b/doc/modules/cassandra/examples/RESULTS/nodetool_snapshot_help.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/nodetool_snapshot_help.result rename to doc/modules/cassandra/examples/RESULTS/nodetool_snapshot_help.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_data2_backup.result b/doc/modules/cassandra/examples/RESULTS/select_data2_backup.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/select_data2_backup.result rename to doc/modules/cassandra/examples/RESULTS/select_data2_backup.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_data_backup.result b/doc/modules/cassandra/examples/RESULTS/select_data_backup.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/select_data_backup.result rename to doc/modules/cassandra/examples/RESULTS/select_data_backup.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_range.result b/doc/modules/cassandra/examples/RESULTS/select_range.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/select_range.result rename to doc/modules/cassandra/examples/RESULTS/select_range.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_static_data.result b/doc/modules/cassandra/examples/RESULTS/select_static_data.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/select_static_data.result rename to doc/modules/cassandra/examples/RESULTS/select_static_data.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_table_clustercolumn.result b/doc/modules/cassandra/examples/RESULTS/select_table_clustercolumn.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/select_table_clustercolumn.result rename to doc/modules/cassandra/examples/RESULTS/select_table_clustercolumn.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/select_table_compound_pk.result b/doc/modules/cassandra/examples/RESULTS/select_table_compound_pk.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/select_table_compound_pk.result rename to doc/modules/cassandra/examples/RESULTS/select_table_compound_pk.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_all.result b/doc/modules/cassandra/examples/RESULTS/snapshot_all.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/snapshot_all.result rename to doc/modules/cassandra/examples/RESULTS/snapshot_all.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result b/doc/modules/cassandra/examples/RESULTS/snapshot_backup2.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2.result rename to doc/modules/cassandra/examples/RESULTS/snapshot_backup2.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2_find.result b/doc/modules/cassandra/examples/RESULTS/snapshot_backup2_find.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/snapshot_backup2_find.result rename to doc/modules/cassandra/examples/RESULTS/snapshot_backup2_find.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_files.result b/doc/modules/cassandra/examples/RESULTS/snapshot_files.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/snapshot_files.result rename to doc/modules/cassandra/examples/RESULTS/snapshot_files.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result b/doc/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result rename to doc/modules/cassandra/examples/RESULTS/snapshot_mult_ks.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables.result b/doc/modules/cassandra/examples/RESULTS/snapshot_mult_tables.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables.result rename to doc/modules/cassandra/examples/RESULTS/snapshot_mult_tables.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables_again.result b/doc/modules/cassandra/examples/RESULTS/snapshot_mult_tables_again.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/snapshot_mult_tables_again.result rename to doc/modules/cassandra/examples/RESULTS/snapshot_mult_tables_again.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result b/doc/modules/cassandra/examples/RESULTS/snapshot_one_table2.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/snapshot_one_table2.result rename to doc/modules/cassandra/examples/RESULTS/snapshot_one_table2.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/tail_syslog.result b/doc/modules/cassandra/examples/RESULTS/tail_syslog.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/tail_syslog.result rename to doc/modules/cassandra/examples/RESULTS/tail_syslog.result diff --git a/doc/source/modules/cassandra/examples/RESULTS/verify_gpg.result b/doc/modules/cassandra/examples/RESULTS/verify_gpg.result similarity index 100% rename from doc/source/modules/cassandra/examples/RESULTS/verify_gpg.result rename to doc/modules/cassandra/examples/RESULTS/verify_gpg.result diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/assassinate.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/bootstrap.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/bootstrap.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/bootstrap.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/bootstrap.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/cleanup.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/clearsnapshot.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/clearsnapshot.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/clearsnapshot.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/clearsnapshot.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/clientstats.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/clientstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/clientstats.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/clientstats.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/compact.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/compact.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/compact.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/compact.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/compactionhistory.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/compactionhistory.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/compactionhistory.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/compactionhistory.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/compactionstats.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/compactionstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/compactionstats.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/compactionstats.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/describecluster.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/describecluster.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/describecluster.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/describecluster.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/describering.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/describering.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/describering.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/describering.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableauditlog.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/disableauditlog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableauditlog.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/disableauditlog.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableautocompaction.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/disableautocompaction.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableautocompaction.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/disableautocompaction.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablebackup.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/disablebackup.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablebackup.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/disablebackup.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablebinary.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/disablebinary.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablebinary.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/disablebinary.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablefullquerylog.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/disablefullquerylog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablefullquerylog.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/disablefullquerylog.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablegossip.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/disablegossip.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablegossip.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/disablegossip.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablehandoff.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/disablehandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablehandoff.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/disablehandoff.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablehintsfordc.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/disablehintsfordc.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/disablehintsfordc.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/disablehintsfordc.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableoldprotocolversions.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/disableoldprotocolversions.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/disableoldprotocolversions.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/disableoldprotocolversions.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/drain.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/drain.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/drain.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/drain.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableauditlog.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/enableauditlog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableauditlog.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/enableauditlog.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableautocompaction.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/enableautocompaction.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableautocompaction.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/enableautocompaction.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablebackup.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/enablebackup.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablebackup.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/enablebackup.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablebinary.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/enablebinary.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablebinary.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/enablebinary.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablefullquerylog.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/enablefullquerylog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablefullquerylog.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/enablefullquerylog.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablegossip.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/enablegossip.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablegossip.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/enablegossip.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablehandoff.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/enablehandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablehandoff.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/enablehandoff.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablehintsfordc.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/enablehintsfordc.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/enablehintsfordc.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/enablehintsfordc.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableoldprotocolversions.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/enableoldprotocolversions.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/enableoldprotocolversions.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/enableoldprotocolversions.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/failuredetector.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/failuredetector.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/failuredetector.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/failuredetector.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/flush.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/flush.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/flush.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/flush.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/garbagecollect.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/garbagecollect.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/garbagecollect.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/garbagecollect.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/gcstats.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/gcstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/gcstats.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/gcstats.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getbatchlogreplaythrottle.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getbatchlogreplaythrottle.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getbatchlogreplaythrottle.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getbatchlogreplaythrottle.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthreshold.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthreshold.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthreshold.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthreshold.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthroughput.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthroughput.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getcompactionthroughput.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrency.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getconcurrency.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrency.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getconcurrency.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentcompactors.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentcompactors.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentcompactors.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentcompactors.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentviewbuilders.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentviewbuilders.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentviewbuilders.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getconcurrentviewbuilders.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getendpoints.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getendpoints.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getendpoints.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getendpoints.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getinterdcstreamthroughput.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getinterdcstreamthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getinterdcstreamthroughput.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getinterdcstreamthroughput.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getlogginglevels.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getlogginglevels.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getlogginglevels.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getlogginglevels.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getmaxhintwindow.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getmaxhintwindow.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getmaxhintwindow.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getmaxhintwindow.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getseeds.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getseeds.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getseeds.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getseeds.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getsstables.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getsstables.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getsstables.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getsstables.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/getstreamthroughput.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/getstreamthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/getstreamthroughput.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/getstreamthroughput.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/gettimeout.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/gettimeout.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/gettimeout.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/gettimeout.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/gettraceprobability.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/gettraceprobability.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/gettraceprobability.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/gettraceprobability.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/gossipinfo.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/gossipinfo.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/gossipinfo.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/gossipinfo.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/help.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/help.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/help.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/help.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/import.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/import.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/import.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/import.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/info.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/info.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/info.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/info.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidatecountercache.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/invalidatecountercache.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidatecountercache.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/invalidatecountercache.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidatekeycache.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/invalidatekeycache.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidatekeycache.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/invalidatekeycache.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidaterowcache.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/invalidaterowcache.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/invalidaterowcache.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/invalidaterowcache.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/join.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/join.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/join.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/join.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/listsnapshots.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/listsnapshots.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/listsnapshots.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/listsnapshots.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/move.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/move.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/move.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/move.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/netstats.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/netstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/netstats.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/netstats.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/pausehandoff.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/pausehandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/pausehandoff.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/pausehandoff.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/profileload.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/profileload.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/profileload.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/profileload.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/proxyhistograms.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/proxyhistograms.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/proxyhistograms.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/proxyhistograms.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/rangekeysample.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/rangekeysample.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/rangekeysample.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/rangekeysample.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/rebuild.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/rebuild.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/rebuild.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/rebuild.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/rebuild_index.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/rebuild_index.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/rebuild_index.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/rebuild_index.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/refresh.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/refresh.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/refresh.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/refresh.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/refreshsizeestimates.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/refreshsizeestimates.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/refreshsizeestimates.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/refreshsizeestimates.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadlocalschema.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/reloadlocalschema.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadlocalschema.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/reloadlocalschema.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadseeds.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/reloadseeds.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadseeds.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/reloadseeds.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadssl.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/reloadssl.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadssl.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/reloadssl.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadtriggers.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/reloadtriggers.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/reloadtriggers.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/reloadtriggers.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/relocatesstables.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/relocatesstables.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/relocatesstables.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/relocatesstables.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/removenode.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/removenode.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/removenode.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/removenode.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/repair.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/repair.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/repair.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/repair.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/repair_admin.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/repair_admin.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/repair_admin.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/repair_admin.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/replaybatchlog.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/replaybatchlog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/replaybatchlog.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/replaybatchlog.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/resetfullquerylog.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/resetfullquerylog.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/resetfullquerylog.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/resetfullquerylog.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/resetlocalschema.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/resetlocalschema.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/resetlocalschema.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/resetlocalschema.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/resumehandoff.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/resumehandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/resumehandoff.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/resumehandoff.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/ring.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/ring.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/ring.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/ring.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/scrub.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/scrub.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/scrub.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/scrub.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setbatchlogreplaythrottle.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setbatchlogreplaythrottle.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setbatchlogreplaythrottle.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setbatchlogreplaythrottle.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcachecapacity.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setcachecapacity.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcachecapacity.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setcachecapacity.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcachekeystosave.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setcachekeystosave.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcachekeystosave.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setcachekeystosave.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthreshold.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthreshold.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthreshold.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthreshold.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthroughput.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthroughput.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setcompactionthroughput.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrency.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setconcurrency.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrency.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setconcurrency.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentcompactors.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentcompactors.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentcompactors.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentcompactors.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentviewbuilders.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentviewbuilders.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentviewbuilders.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setconcurrentviewbuilders.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/sethintedhandoffthrottlekb.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/sethintedhandoffthrottlekb.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/sethintedhandoffthrottlekb.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/sethintedhandoffthrottlekb.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setinterdcstreamthroughput.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setinterdcstreamthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setinterdcstreamthroughput.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setinterdcstreamthroughput.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setlogginglevel.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setlogginglevel.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setlogginglevel.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setlogginglevel.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setmaxhintwindow.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setmaxhintwindow.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setmaxhintwindow.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setmaxhintwindow.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/setstreamthroughput.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/setstreamthroughput.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/setstreamthroughput.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/setstreamthroughput.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/settimeout.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/settimeout.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/settimeout.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/settimeout.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/settraceprobability.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/settraceprobability.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/settraceprobability.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/settraceprobability.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/sjk.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/sjk.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/sjk.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/sjk.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/snapshot.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/snapshot.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/snapshot.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/snapshot.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/status.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/status.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/status.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/status.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusautocompaction.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/statusautocompaction.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusautocompaction.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/statusautocompaction.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusbackup.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/statusbackup.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusbackup.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/statusbackup.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusbinary.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/statusbinary.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusbinary.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/statusbinary.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusgossip.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/statusgossip.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/statusgossip.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/statusgossip.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/statushandoff.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/statushandoff.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/statushandoff.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/statushandoff.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/stop.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/stop.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/stop.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/stop.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/stopdaemon.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/stopdaemon.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/stopdaemon.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/stopdaemon.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/tablehistograms.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/tablehistograms.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/tablehistograms.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/tablehistograms.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/tablestats.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/tablestats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/tablestats.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/tablestats.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/toppartitions.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/toppartitions.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/toppartitions.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/toppartitions.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/tpstats.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/tpstats.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/tpstats.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/tpstats.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/truncatehints.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/truncatehints.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/truncatehints.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/truncatehints.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/upgradesstables.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/upgradesstables.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/upgradesstables.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/upgradesstables.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/verify.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/verify.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/verify.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/verify.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/version.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/version.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/version.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/version.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/NODETOOL/viewbuildstatus.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/viewbuildstatus.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/NODETOOL/viewbuildstatus.txt rename to doc/modules/cassandra/examples/TEXT/NODETOOL/viewbuildstatus.txt diff --git a/doc/source/modules/cassandra/examples/TEXT/native_protocol_v3.spec b/doc/modules/cassandra/examples/TEXT/native_protocol_v3.spec similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/native_protocol_v3.spec rename to doc/modules/cassandra/examples/TEXT/native_protocol_v3.spec diff --git a/doc/source/modules/cassandra/examples/TEXT/native_protocol_v4.spec b/doc/modules/cassandra/examples/TEXT/native_protocol_v4.spec similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/native_protocol_v4.spec rename to doc/modules/cassandra/examples/TEXT/native_protocol_v4.spec diff --git a/doc/source/modules/cassandra/examples/TEXT/native_protocol_v5.spec b/doc/modules/cassandra/examples/TEXT/native_protocol_v5.spec similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/native_protocol_v5.spec rename to doc/modules/cassandra/examples/TEXT/native_protocol_v5.spec diff --git a/doc/source/modules/cassandra/examples/TEXT/tarball_install_dirs.txt b/doc/modules/cassandra/examples/TEXT/tarball_install_dirs.txt similarity index 100% rename from doc/source/modules/cassandra/examples/TEXT/tarball_install_dirs.txt rename to doc/modules/cassandra/examples/TEXT/tarball_install_dirs.txt diff --git a/doc/source/modules/cassandra/examples/YAML/auto_snapshot.yaml b/doc/modules/cassandra/examples/YAML/auto_snapshot.yaml similarity index 100% rename from doc/source/modules/cassandra/examples/YAML/auto_snapshot.yaml rename to doc/modules/cassandra/examples/YAML/auto_snapshot.yaml diff --git a/doc/source/modules/cassandra/examples/YAML/incremental_bups.yaml b/doc/modules/cassandra/examples/YAML/incremental_bups.yaml similarity index 100% rename from doc/source/modules/cassandra/examples/YAML/incremental_bups.yaml rename to doc/modules/cassandra/examples/YAML/incremental_bups.yaml diff --git a/doc/source/modules/cassandra/examples/YAML/snapshot_before_compaction.yaml b/doc/modules/cassandra/examples/YAML/snapshot_before_compaction.yaml similarity index 100% rename from doc/source/modules/cassandra/examples/YAML/snapshot_before_compaction.yaml rename to doc/modules/cassandra/examples/YAML/snapshot_before_compaction.yaml diff --git a/doc/source/modules/cassandra/examples/YAML/stress-example.yaml b/doc/modules/cassandra/examples/YAML/stress-example.yaml similarity index 100% rename from doc/source/modules/cassandra/examples/YAML/stress-example.yaml rename to doc/modules/cassandra/examples/YAML/stress-example.yaml diff --git a/doc/source/modules/cassandra/examples/YAML/stress-lwt-example.yaml b/doc/modules/cassandra/examples/YAML/stress-lwt-example.yaml similarity index 100% rename from doc/source/modules/cassandra/examples/YAML/stress-lwt-example.yaml rename to doc/modules/cassandra/examples/YAML/stress-lwt-example.yaml diff --git a/doc/source/modules/cassandra/nav.adoc b/doc/modules/cassandra/nav.adoc similarity index 100% rename from doc/source/modules/cassandra/nav.adoc rename to doc/modules/cassandra/nav.adoc diff --git a/doc/source/modules/cassandra/pages/architecture/dynamo.adoc b/doc/modules/cassandra/pages/architecture/dynamo.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/architecture/dynamo.adoc rename to doc/modules/cassandra/pages/architecture/dynamo.adoc diff --git a/doc/source/modules/cassandra/pages/architecture/guarantees.adoc b/doc/modules/cassandra/pages/architecture/guarantees.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/architecture/guarantees.adoc rename to doc/modules/cassandra/pages/architecture/guarantees.adoc diff --git a/doc/source/modules/cassandra/pages/architecture/images/ring.svg b/doc/modules/cassandra/pages/architecture/images/ring.svg similarity index 100% rename from doc/source/modules/cassandra/pages/architecture/images/ring.svg rename to doc/modules/cassandra/pages/architecture/images/ring.svg diff --git a/doc/source/modules/cassandra/pages/architecture/images/vnodes.svg b/doc/modules/cassandra/pages/architecture/images/vnodes.svg similarity index 100% rename from doc/source/modules/cassandra/pages/architecture/images/vnodes.svg rename to doc/modules/cassandra/pages/architecture/images/vnodes.svg diff --git a/doc/source/modules/cassandra/pages/architecture/index.adoc b/doc/modules/cassandra/pages/architecture/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/architecture/index.adoc rename to doc/modules/cassandra/pages/architecture/index.adoc diff --git a/doc/source/modules/cassandra/pages/architecture/overview.adoc b/doc/modules/cassandra/pages/architecture/overview.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/architecture/overview.adoc rename to doc/modules/cassandra/pages/architecture/overview.adoc diff --git a/doc/source/modules/cassandra/pages/architecture/snitch.adoc b/doc/modules/cassandra/pages/architecture/snitch.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/architecture/snitch.adoc rename to doc/modules/cassandra/pages/architecture/snitch.adoc diff --git a/doc/source/modules/cassandra/pages/architecture/storage_engine.adoc b/doc/modules/cassandra/pages/architecture/storage_engine.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/architecture/storage_engine.adoc rename to doc/modules/cassandra/pages/architecture/storage_engine.adoc diff --git a/doc/source/modules/cassandra/pages/configuration/cass_cl_archive_file.adoc b/doc/modules/cassandra/pages/configuration/cass_cl_archive_file.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/configuration/cass_cl_archive_file.adoc rename to doc/modules/cassandra/pages/configuration/cass_cl_archive_file.adoc diff --git a/doc/source/modules/cassandra/pages/configuration/cass_env_sh_file.adoc b/doc/modules/cassandra/pages/configuration/cass_env_sh_file.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/configuration/cass_env_sh_file.adoc rename to doc/modules/cassandra/pages/configuration/cass_env_sh_file.adoc diff --git a/doc/source/modules/cassandra/pages/configuration/cass_jvm_options_file.adoc b/doc/modules/cassandra/pages/configuration/cass_jvm_options_file.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/configuration/cass_jvm_options_file.adoc rename to doc/modules/cassandra/pages/configuration/cass_jvm_options_file.adoc diff --git a/doc/source/modules/cassandra/pages/configuration/cass_logback_xml_file.adoc b/doc/modules/cassandra/pages/configuration/cass_logback_xml_file.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/configuration/cass_logback_xml_file.adoc rename to doc/modules/cassandra/pages/configuration/cass_logback_xml_file.adoc diff --git a/doc/source/modules/cassandra/pages/configuration/cass_rackdc_file.adoc b/doc/modules/cassandra/pages/configuration/cass_rackdc_file.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/configuration/cass_rackdc_file.adoc rename to doc/modules/cassandra/pages/configuration/cass_rackdc_file.adoc diff --git a/doc/source/modules/cassandra/pages/configuration/cass_topo_file.adoc b/doc/modules/cassandra/pages/configuration/cass_topo_file.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/configuration/cass_topo_file.adoc rename to doc/modules/cassandra/pages/configuration/cass_topo_file.adoc diff --git a/doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc b/doc/modules/cassandra/pages/configuration/cass_yaml_file.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/configuration/cass_yaml_file.adoc rename to doc/modules/cassandra/pages/configuration/cass_yaml_file.adoc diff --git a/doc/source/modules/cassandra/pages/configuration/index.adoc b/doc/modules/cassandra/pages/configuration/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/configuration/index.adoc rename to doc/modules/cassandra/pages/configuration/index.adoc diff --git a/doc/source/modules/cassandra/pages/cql/SASI.adoc b/doc/modules/cassandra/pages/cql/SASI.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/SASI.adoc rename to doc/modules/cassandra/pages/cql/SASI.adoc diff --git a/doc/source/modules/cassandra/pages/cql/appendices.adoc b/doc/modules/cassandra/pages/cql/appendices.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/appendices.adoc rename to doc/modules/cassandra/pages/cql/appendices.adoc diff --git a/doc/source/modules/cassandra/pages/cql/changes.adoc b/doc/modules/cassandra/pages/cql/changes.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/changes.adoc rename to doc/modules/cassandra/pages/cql/changes.adoc diff --git a/doc/source/modules/cassandra/pages/cql/cql_singlefile.adoc b/doc/modules/cassandra/pages/cql/cql_singlefile.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/cql_singlefile.adoc rename to doc/modules/cassandra/pages/cql/cql_singlefile.adoc diff --git a/doc/source/modules/cassandra/pages/cql/ddl.adoc b/doc/modules/cassandra/pages/cql/ddl.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/ddl.adoc rename to doc/modules/cassandra/pages/cql/ddl.adoc diff --git a/doc/source/modules/cassandra/pages/cql/definitions.adoc b/doc/modules/cassandra/pages/cql/definitions.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/definitions.adoc rename to doc/modules/cassandra/pages/cql/definitions.adoc diff --git a/doc/source/modules/cassandra/pages/cql/dml.adoc b/doc/modules/cassandra/pages/cql/dml.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/dml.adoc rename to doc/modules/cassandra/pages/cql/dml.adoc diff --git a/doc/source/modules/cassandra/pages/cql/functions.adoc b/doc/modules/cassandra/pages/cql/functions.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/functions.adoc rename to doc/modules/cassandra/pages/cql/functions.adoc diff --git a/doc/source/modules/cassandra/pages/cql/index.adoc b/doc/modules/cassandra/pages/cql/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/index.adoc rename to doc/modules/cassandra/pages/cql/index.adoc diff --git a/doc/source/modules/cassandra/pages/cql/indexes.adoc b/doc/modules/cassandra/pages/cql/indexes.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/indexes.adoc rename to doc/modules/cassandra/pages/cql/indexes.adoc diff --git a/doc/source/modules/cassandra/pages/cql/json.adoc b/doc/modules/cassandra/pages/cql/json.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/json.adoc rename to doc/modules/cassandra/pages/cql/json.adoc diff --git a/doc/source/modules/cassandra/pages/cql/mvs.adoc b/doc/modules/cassandra/pages/cql/mvs.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/mvs.adoc rename to doc/modules/cassandra/pages/cql/mvs.adoc diff --git a/doc/source/modules/cassandra/pages/cql/operators.adoc b/doc/modules/cassandra/pages/cql/operators.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/operators.adoc rename to doc/modules/cassandra/pages/cql/operators.adoc diff --git a/doc/source/modules/cassandra/pages/cql/security.adoc b/doc/modules/cassandra/pages/cql/security.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/security.adoc rename to doc/modules/cassandra/pages/cql/security.adoc diff --git a/doc/source/modules/cassandra/pages/cql/triggers.adoc b/doc/modules/cassandra/pages/cql/triggers.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/triggers.adoc rename to doc/modules/cassandra/pages/cql/triggers.adoc diff --git a/doc/source/modules/cassandra/pages/cql/types.adoc b/doc/modules/cassandra/pages/cql/types.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/cql/types.adoc rename to doc/modules/cassandra/pages/cql/types.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_conceptual.adoc b/doc/modules/cassandra/pages/data_modeling/data_modeling_conceptual.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/data_modeling_conceptual.adoc rename to doc/modules/cassandra/pages/data_modeling/data_modeling_conceptual.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_logical.adoc b/doc/modules/cassandra/pages/data_modeling/data_modeling_logical.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/data_modeling_logical.adoc rename to doc/modules/cassandra/pages/data_modeling/data_modeling_logical.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_physical.adoc b/doc/modules/cassandra/pages/data_modeling/data_modeling_physical.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/data_modeling_physical.adoc rename to doc/modules/cassandra/pages/data_modeling/data_modeling_physical.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_queries.adoc b/doc/modules/cassandra/pages/data_modeling/data_modeling_queries.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/data_modeling_queries.adoc rename to doc/modules/cassandra/pages/data_modeling/data_modeling_queries.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_rdbms.adoc b/doc/modules/cassandra/pages/data_modeling/data_modeling_rdbms.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/data_modeling_rdbms.adoc rename to doc/modules/cassandra/pages/data_modeling/data_modeling_rdbms.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_refining.adoc b/doc/modules/cassandra/pages/data_modeling/data_modeling_refining.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/data_modeling_refining.adoc rename to doc/modules/cassandra/pages/data_modeling/data_modeling_refining.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_schema.adoc b/doc/modules/cassandra/pages/data_modeling/data_modeling_schema.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/data_modeling_schema.adoc rename to doc/modules/cassandra/pages/data_modeling/data_modeling_schema.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/data_modeling_tools.adoc b/doc/modules/cassandra/pages/data_modeling/data_modeling_tools.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/data_modeling_tools.adoc rename to doc/modules/cassandra/pages/data_modeling/data_modeling_tools.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/Figure_1_data_model.jpg b/doc/modules/cassandra/pages/data_modeling/images/Figure_1_data_model.jpg similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/Figure_1_data_model.jpg rename to doc/modules/cassandra/pages/data_modeling/images/Figure_1_data_model.jpg diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/Figure_2_data_model.jpg b/doc/modules/cassandra/pages/data_modeling/images/Figure_2_data_model.jpg similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/Figure_2_data_model.jpg rename to doc/modules/cassandra/pages/data_modeling/images/Figure_2_data_model.jpg diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_logical.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_logical.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_logical.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_logical.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_physical.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_physical.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_physical.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_chebotko_physical.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_bucketing.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_bucketing.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_bucketing.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_bucketing.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_erd.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_erd.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_erd.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_erd.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_logical.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_logical.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_logical.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_logical.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_physical.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_physical.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_physical.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_physical.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_queries.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_queries.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_queries.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_queries.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_relational.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_relational.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_relational.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_hotel_relational.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_logical.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_logical.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_logical.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_logical.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_physical.png b/doc/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_physical.png similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_physical.png rename to doc/modules/cassandra/pages/data_modeling/images/data_modeling_reservation_physical.png diff --git a/doc/source/modules/cassandra/pages/data_modeling/index.adoc b/doc/modules/cassandra/pages/data_modeling/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/index.adoc rename to doc/modules/cassandra/pages/data_modeling/index.adoc diff --git a/doc/source/modules/cassandra/pages/data_modeling/intro.adoc b/doc/modules/cassandra/pages/data_modeling/intro.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/data_modeling/intro.adoc rename to doc/modules/cassandra/pages/data_modeling/intro.adoc diff --git a/doc/source/modules/cassandra/pages/development/ci.adoc b/doc/modules/cassandra/pages/development/ci.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/ci.adoc rename to doc/modules/cassandra/pages/development/ci.adoc diff --git a/doc/source/modules/cassandra/pages/development/code_style.adoc b/doc/modules/cassandra/pages/development/code_style.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/code_style.adoc rename to doc/modules/cassandra/pages/development/code_style.adoc diff --git a/doc/source/modules/cassandra/pages/development/dependencies.adoc b/doc/modules/cassandra/pages/development/dependencies.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/dependencies.adoc rename to doc/modules/cassandra/pages/development/dependencies.adoc diff --git a/doc/source/modules/cassandra/pages/development/documentation.adoc b/doc/modules/cassandra/pages/development/documentation.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/documentation.adoc rename to doc/modules/cassandra/pages/development/documentation.adoc diff --git a/doc/source/modules/cassandra/pages/development/gettingstarted.adoc b/doc/modules/cassandra/pages/development/gettingstarted.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/gettingstarted.adoc rename to doc/modules/cassandra/pages/development/gettingstarted.adoc diff --git a/doc/source/modules/cassandra/pages/development/how_to_commit.adoc b/doc/modules/cassandra/pages/development/how_to_commit.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/how_to_commit.adoc rename to doc/modules/cassandra/pages/development/how_to_commit.adoc diff --git a/doc/source/modules/cassandra/pages/development/how_to_review.adoc b/doc/modules/cassandra/pages/development/how_to_review.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/how_to_review.adoc rename to doc/modules/cassandra/pages/development/how_to_review.adoc diff --git a/doc/source/modules/cassandra/pages/development/ide.adoc b/doc/modules/cassandra/pages/development/ide.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/ide.adoc rename to doc/modules/cassandra/pages/development/ide.adoc diff --git a/doc/source/modules/cassandra/pages/development/images/docs_commit.png b/doc/modules/cassandra/pages/development/images/docs_commit.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/docs_commit.png rename to doc/modules/cassandra/pages/development/images/docs_commit.png diff --git a/doc/source/modules/cassandra/pages/development/images/docs_create_branch.png b/doc/modules/cassandra/pages/development/images/docs_create_branch.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/docs_create_branch.png rename to doc/modules/cassandra/pages/development/images/docs_create_branch.png diff --git a/doc/source/modules/cassandra/pages/development/images/docs_create_file.png b/doc/modules/cassandra/pages/development/images/docs_create_file.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/docs_create_file.png rename to doc/modules/cassandra/pages/development/images/docs_create_file.png diff --git a/doc/source/modules/cassandra/pages/development/images/docs_editor.png b/doc/modules/cassandra/pages/development/images/docs_editor.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/docs_editor.png rename to doc/modules/cassandra/pages/development/images/docs_editor.png diff --git a/doc/source/modules/cassandra/pages/development/images/docs_fork.png b/doc/modules/cassandra/pages/development/images/docs_fork.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/docs_fork.png rename to doc/modules/cassandra/pages/development/images/docs_fork.png diff --git a/doc/source/modules/cassandra/pages/development/images/docs_pr.png b/doc/modules/cassandra/pages/development/images/docs_pr.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/docs_pr.png rename to doc/modules/cassandra/pages/development/images/docs_pr.png diff --git a/doc/source/modules/cassandra/pages/development/images/docs_preview.png b/doc/modules/cassandra/pages/development/images/docs_preview.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/docs_preview.png rename to doc/modules/cassandra/pages/development/images/docs_preview.png diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug0.png b/doc/modules/cassandra/pages/development/images/eclipse_debug0.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/eclipse_debug0.png rename to doc/modules/cassandra/pages/development/images/eclipse_debug0.png diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug1.png b/doc/modules/cassandra/pages/development/images/eclipse_debug1.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/eclipse_debug1.png rename to doc/modules/cassandra/pages/development/images/eclipse_debug1.png diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug2.png b/doc/modules/cassandra/pages/development/images/eclipse_debug2.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/eclipse_debug2.png rename to doc/modules/cassandra/pages/development/images/eclipse_debug2.png diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug3.png b/doc/modules/cassandra/pages/development/images/eclipse_debug3.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/eclipse_debug3.png rename to doc/modules/cassandra/pages/development/images/eclipse_debug3.png diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug4.png b/doc/modules/cassandra/pages/development/images/eclipse_debug4.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/eclipse_debug4.png rename to doc/modules/cassandra/pages/development/images/eclipse_debug4.png diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug5.png b/doc/modules/cassandra/pages/development/images/eclipse_debug5.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/eclipse_debug5.png rename to doc/modules/cassandra/pages/development/images/eclipse_debug5.png diff --git a/doc/source/modules/cassandra/pages/development/images/eclipse_debug6.png b/doc/modules/cassandra/pages/development/images/eclipse_debug6.png similarity index 100% rename from doc/source/modules/cassandra/pages/development/images/eclipse_debug6.png rename to doc/modules/cassandra/pages/development/images/eclipse_debug6.png diff --git a/doc/source/modules/cassandra/pages/development/index.adoc b/doc/modules/cassandra/pages/development/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/index.adoc rename to doc/modules/cassandra/pages/development/index.adoc diff --git a/doc/source/modules/cassandra/pages/development/patches.adoc b/doc/modules/cassandra/pages/development/patches.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/patches.adoc rename to doc/modules/cassandra/pages/development/patches.adoc diff --git a/doc/source/modules/cassandra/pages/development/release_process.adoc b/doc/modules/cassandra/pages/development/release_process.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/release_process.adoc rename to doc/modules/cassandra/pages/development/release_process.adoc diff --git a/doc/source/modules/cassandra/pages/development/testing.adoc b/doc/modules/cassandra/pages/development/testing.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/development/testing.adoc rename to doc/modules/cassandra/pages/development/testing.adoc diff --git a/doc/source/modules/cassandra/pages/faq/index.adoc b/doc/modules/cassandra/pages/faq/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/faq/index.adoc rename to doc/modules/cassandra/pages/faq/index.adoc diff --git a/doc/source/modules/cassandra/pages/getting_started/configuring.adoc b/doc/modules/cassandra/pages/getting_started/configuring.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/getting_started/configuring.adoc rename to doc/modules/cassandra/pages/getting_started/configuring.adoc diff --git a/doc/source/modules/cassandra/pages/getting_started/drivers.adoc b/doc/modules/cassandra/pages/getting_started/drivers.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/getting_started/drivers.adoc rename to doc/modules/cassandra/pages/getting_started/drivers.adoc diff --git a/doc/source/modules/cassandra/pages/getting_started/index.adoc b/doc/modules/cassandra/pages/getting_started/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/getting_started/index.adoc rename to doc/modules/cassandra/pages/getting_started/index.adoc diff --git a/doc/source/modules/cassandra/pages/getting_started/installing.adoc b/doc/modules/cassandra/pages/getting_started/installing.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/getting_started/installing.adoc rename to doc/modules/cassandra/pages/getting_started/installing.adoc diff --git a/doc/source/modules/cassandra/pages/getting_started/production.adoc b/doc/modules/cassandra/pages/getting_started/production.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/getting_started/production.adoc rename to doc/modules/cassandra/pages/getting_started/production.adoc diff --git a/doc/source/modules/cassandra/pages/getting_started/querying.adoc b/doc/modules/cassandra/pages/getting_started/querying.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/getting_started/querying.adoc rename to doc/modules/cassandra/pages/getting_started/querying.adoc diff --git a/doc/source/modules/cassandra/pages/getting_started/quickstart.adoc b/doc/modules/cassandra/pages/getting_started/quickstart.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/getting_started/quickstart.adoc rename to doc/modules/cassandra/pages/getting_started/quickstart.adoc diff --git a/doc/source/modules/cassandra/pages/new/Figure_1.jpg b/doc/modules/cassandra/pages/new/Figure_1.jpg similarity index 100% rename from doc/source/modules/cassandra/pages/new/Figure_1.jpg rename to doc/modules/cassandra/pages/new/Figure_1.jpg diff --git a/doc/source/modules/cassandra/pages/new/Figure_2.jpg b/doc/modules/cassandra/pages/new/Figure_2.jpg similarity index 100% rename from doc/source/modules/cassandra/pages/new/Figure_2.jpg rename to doc/modules/cassandra/pages/new/Figure_2.jpg diff --git a/doc/source/modules/cassandra/pages/new/auditlogging.adoc b/doc/modules/cassandra/pages/new/auditlogging.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/new/auditlogging.adoc rename to doc/modules/cassandra/pages/new/auditlogging.adoc diff --git a/doc/source/modules/cassandra/pages/new/fqllogging.adoc b/doc/modules/cassandra/pages/new/fqllogging.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/new/fqllogging.adoc rename to doc/modules/cassandra/pages/new/fqllogging.adoc diff --git a/doc/source/modules/cassandra/pages/new/index.adoc b/doc/modules/cassandra/pages/new/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/new/index.adoc rename to doc/modules/cassandra/pages/new/index.adoc diff --git a/doc/source/modules/cassandra/pages/new/java11.adoc b/doc/modules/cassandra/pages/new/java11.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/new/java11.adoc rename to doc/modules/cassandra/pages/new/java11.adoc diff --git a/doc/source/modules/cassandra/pages/new/messaging.adoc b/doc/modules/cassandra/pages/new/messaging.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/new/messaging.adoc rename to doc/modules/cassandra/pages/new/messaging.adoc diff --git a/doc/source/modules/cassandra/pages/new/streaming.adoc b/doc/modules/cassandra/pages/new/streaming.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/new/streaming.adoc rename to doc/modules/cassandra/pages/new/streaming.adoc diff --git a/doc/source/modules/cassandra/pages/new/transientreplication.adoc b/doc/modules/cassandra/pages/new/transientreplication.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/new/transientreplication.adoc rename to doc/modules/cassandra/pages/new/transientreplication.adoc diff --git a/doc/source/modules/cassandra/pages/new/virtualtables.adoc b/doc/modules/cassandra/pages/new/virtualtables.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/new/virtualtables.adoc rename to doc/modules/cassandra/pages/new/virtualtables.adoc diff --git a/doc/source/modules/cassandra/pages/operating/audit_logging.adoc b/doc/modules/cassandra/pages/operating/audit_logging.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/audit_logging.adoc rename to doc/modules/cassandra/pages/operating/audit_logging.adoc diff --git a/doc/source/modules/cassandra/pages/operating/backups.adoc b/doc/modules/cassandra/pages/operating/backups.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/backups.adoc rename to doc/modules/cassandra/pages/operating/backups.adoc diff --git a/doc/source/modules/cassandra/pages/operating/bloom_filters.adoc b/doc/modules/cassandra/pages/operating/bloom_filters.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/bloom_filters.adoc rename to doc/modules/cassandra/pages/operating/bloom_filters.adoc diff --git a/doc/source/modules/cassandra/pages/operating/bulk_loading.adoc b/doc/modules/cassandra/pages/operating/bulk_loading.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/bulk_loading.adoc rename to doc/modules/cassandra/pages/operating/bulk_loading.adoc diff --git a/doc/source/modules/cassandra/pages/operating/cdc.adoc b/doc/modules/cassandra/pages/operating/cdc.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/cdc.adoc rename to doc/modules/cassandra/pages/operating/cdc.adoc diff --git a/doc/source/modules/cassandra/pages/operating/compaction/index.adoc b/doc/modules/cassandra/pages/operating/compaction/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/compaction/index.adoc rename to doc/modules/cassandra/pages/operating/compaction/index.adoc diff --git a/doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc b/doc/modules/cassandra/pages/operating/compaction/lcs.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/compaction/lcs.adoc rename to doc/modules/cassandra/pages/operating/compaction/lcs.adoc diff --git a/doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc b/doc/modules/cassandra/pages/operating/compaction/stcs.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/compaction/stcs.adoc rename to doc/modules/cassandra/pages/operating/compaction/stcs.adoc diff --git a/doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc b/doc/modules/cassandra/pages/operating/compaction/twcs.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/compaction/twcs.adoc rename to doc/modules/cassandra/pages/operating/compaction/twcs.adoc diff --git a/doc/source/modules/cassandra/pages/operating/compression.adoc b/doc/modules/cassandra/pages/operating/compression.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/compression.adoc rename to doc/modules/cassandra/pages/operating/compression.adoc diff --git a/doc/source/modules/cassandra/pages/operating/hardware.adoc b/doc/modules/cassandra/pages/operating/hardware.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/hardware.adoc rename to doc/modules/cassandra/pages/operating/hardware.adoc diff --git a/doc/source/modules/cassandra/pages/operating/hints.adoc b/doc/modules/cassandra/pages/operating/hints.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/hints.adoc rename to doc/modules/cassandra/pages/operating/hints.adoc diff --git a/doc/source/modules/cassandra/pages/operating/index.adoc b/doc/modules/cassandra/pages/operating/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/index.adoc rename to doc/modules/cassandra/pages/operating/index.adoc diff --git a/doc/source/modules/cassandra/pages/operating/metrics.adoc b/doc/modules/cassandra/pages/operating/metrics.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/metrics.adoc rename to doc/modules/cassandra/pages/operating/metrics.adoc diff --git a/doc/source/modules/cassandra/pages/operating/read_repair.adoc b/doc/modules/cassandra/pages/operating/read_repair.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/read_repair.adoc rename to doc/modules/cassandra/pages/operating/read_repair.adoc diff --git a/doc/source/modules/cassandra/pages/operating/repair.adoc b/doc/modules/cassandra/pages/operating/repair.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/repair.adoc rename to doc/modules/cassandra/pages/operating/repair.adoc diff --git a/doc/source/modules/cassandra/pages/operating/security.adoc b/doc/modules/cassandra/pages/operating/security.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/security.adoc rename to doc/modules/cassandra/pages/operating/security.adoc diff --git a/doc/source/modules/cassandra/pages/operating/topo_changes.adoc b/doc/modules/cassandra/pages/operating/topo_changes.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/operating/topo_changes.adoc rename to doc/modules/cassandra/pages/operating/topo_changes.adoc diff --git a/doc/source/modules/cassandra/pages/plugins/index.adoc b/doc/modules/cassandra/pages/plugins/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/plugins/index.adoc rename to doc/modules/cassandra/pages/plugins/index.adoc diff --git a/doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc b/doc/modules/cassandra/pages/tools/cassandra_stress.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/cassandra_stress.adoc rename to doc/modules/cassandra/pages/tools/cassandra_stress.adoc diff --git a/doc/source/modules/cassandra/pages/tools/cqlsh.adoc b/doc/modules/cassandra/pages/tools/cqlsh.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/cqlsh.adoc rename to doc/modules/cassandra/pages/tools/cqlsh.adoc diff --git a/doc/source/modules/cassandra/pages/tools/index.adoc b/doc/modules/cassandra/pages/tools/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/index.adoc rename to doc/modules/cassandra/pages/tools/index.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc b/doc/modules/cassandra/pages/tools/nodetool/assassinate.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/assassinate.adoc rename to doc/modules/cassandra/pages/tools/nodetool/assassinate.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc b/doc/modules/cassandra/pages/tools/nodetool/bootstrap.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/bootstrap.adoc rename to doc/modules/cassandra/pages/tools/nodetool/bootstrap.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc b/doc/modules/cassandra/pages/tools/nodetool/cleanup.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/cleanup.adoc rename to doc/modules/cassandra/pages/tools/nodetool/cleanup.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc b/doc/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc rename to doc/modules/cassandra/pages/tools/nodetool/clearsnapshot.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc b/doc/modules/cassandra/pages/tools/nodetool/clientstats.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/clientstats.adoc rename to doc/modules/cassandra/pages/tools/nodetool/clientstats.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc b/doc/modules/cassandra/pages/tools/nodetool/compact.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/compact.adoc rename to doc/modules/cassandra/pages/tools/nodetool/compact.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc b/doc/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc rename to doc/modules/cassandra/pages/tools/nodetool/compactionhistory.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc b/doc/modules/cassandra/pages/tools/nodetool/compactionstats.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/compactionstats.adoc rename to doc/modules/cassandra/pages/tools/nodetool/compactionstats.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/convert.sh b/doc/modules/cassandra/pages/tools/nodetool/convert.sh similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/convert.sh rename to doc/modules/cassandra/pages/tools/nodetool/convert.sh diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc b/doc/modules/cassandra/pages/tools/nodetool/decommission.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/decommission.adoc rename to doc/modules/cassandra/pages/tools/nodetool/decommission.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc b/doc/modules/cassandra/pages/tools/nodetool/describecluster.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/describecluster.adoc rename to doc/modules/cassandra/pages/tools/nodetool/describecluster.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc b/doc/modules/cassandra/pages/tools/nodetool/describering.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/describering.adoc rename to doc/modules/cassandra/pages/tools/nodetool/describering.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc b/doc/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc rename to doc/modules/cassandra/pages/tools/nodetool/disableauditlog.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc b/doc/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc rename to doc/modules/cassandra/pages/tools/nodetool/disableautocompaction.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc b/doc/modules/cassandra/pages/tools/nodetool/disablebackup.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/disablebackup.adoc rename to doc/modules/cassandra/pages/tools/nodetool/disablebackup.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc b/doc/modules/cassandra/pages/tools/nodetool/disablebinary.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/disablebinary.adoc rename to doc/modules/cassandra/pages/tools/nodetool/disablebinary.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc b/doc/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc rename to doc/modules/cassandra/pages/tools/nodetool/disablefullquerylog.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc b/doc/modules/cassandra/pages/tools/nodetool/disablegossip.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/disablegossip.adoc rename to doc/modules/cassandra/pages/tools/nodetool/disablegossip.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc b/doc/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc rename to doc/modules/cassandra/pages/tools/nodetool/disablehandoff.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc b/doc/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc rename to doc/modules/cassandra/pages/tools/nodetool/disablehintsfordc.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc b/doc/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc rename to doc/modules/cassandra/pages/tools/nodetool/disableoldprotocolversions.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc b/doc/modules/cassandra/pages/tools/nodetool/drain.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/drain.adoc rename to doc/modules/cassandra/pages/tools/nodetool/drain.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc b/doc/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc rename to doc/modules/cassandra/pages/tools/nodetool/enableauditlog.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc b/doc/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc rename to doc/modules/cassandra/pages/tools/nodetool/enableautocompaction.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc b/doc/modules/cassandra/pages/tools/nodetool/enablebackup.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/enablebackup.adoc rename to doc/modules/cassandra/pages/tools/nodetool/enablebackup.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc b/doc/modules/cassandra/pages/tools/nodetool/enablebinary.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/enablebinary.adoc rename to doc/modules/cassandra/pages/tools/nodetool/enablebinary.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc b/doc/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc rename to doc/modules/cassandra/pages/tools/nodetool/enablefullquerylog.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc b/doc/modules/cassandra/pages/tools/nodetool/enablegossip.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/enablegossip.adoc rename to doc/modules/cassandra/pages/tools/nodetool/enablegossip.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc b/doc/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc rename to doc/modules/cassandra/pages/tools/nodetool/enablehandoff.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc b/doc/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc rename to doc/modules/cassandra/pages/tools/nodetool/enablehintsfordc.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc b/doc/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc rename to doc/modules/cassandra/pages/tools/nodetool/enableoldprotocolversions.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc b/doc/modules/cassandra/pages/tools/nodetool/failuredetector.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/failuredetector.adoc rename to doc/modules/cassandra/pages/tools/nodetool/failuredetector.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc b/doc/modules/cassandra/pages/tools/nodetool/flush.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/flush.adoc rename to doc/modules/cassandra/pages/tools/nodetool/flush.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc b/doc/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc rename to doc/modules/cassandra/pages/tools/nodetool/garbagecollect.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc b/doc/modules/cassandra/pages/tools/nodetool/gcstats.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/gcstats.adoc rename to doc/modules/cassandra/pages/tools/nodetool/gcstats.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc b/doc/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getbatchlogreplaythrottle.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc b/doc/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getcompactionthreshold.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc b/doc/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getcompactionthroughput.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc b/doc/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getconcurrency.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc b/doc/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getconcurrentcompactors.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc b/doc/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getconcurrentviewbuilders.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc b/doc/modules/cassandra/pages/tools/nodetool/getendpoints.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getendpoints.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getendpoints.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc b/doc/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getinterdcstreamthroughput.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc b/doc/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getlogginglevels.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc b/doc/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getmaxhintwindow.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc b/doc/modules/cassandra/pages/tools/nodetool/getseeds.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getseeds.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getseeds.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc b/doc/modules/cassandra/pages/tools/nodetool/getsstables.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getsstables.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getsstables.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc b/doc/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc rename to doc/modules/cassandra/pages/tools/nodetool/getstreamthroughput.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc b/doc/modules/cassandra/pages/tools/nodetool/gettimeout.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/gettimeout.adoc rename to doc/modules/cassandra/pages/tools/nodetool/gettimeout.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc b/doc/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc rename to doc/modules/cassandra/pages/tools/nodetool/gettraceprobability.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc b/doc/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc rename to doc/modules/cassandra/pages/tools/nodetool/gossipinfo.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/help.adoc b/doc/modules/cassandra/pages/tools/nodetool/help.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/help.adoc rename to doc/modules/cassandra/pages/tools/nodetool/help.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/import.adoc b/doc/modules/cassandra/pages/tools/nodetool/import.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/import.adoc rename to doc/modules/cassandra/pages/tools/nodetool/import.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/info.adoc b/doc/modules/cassandra/pages/tools/nodetool/info.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/info.adoc rename to doc/modules/cassandra/pages/tools/nodetool/info.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc b/doc/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc rename to doc/modules/cassandra/pages/tools/nodetool/invalidatecountercache.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc b/doc/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc rename to doc/modules/cassandra/pages/tools/nodetool/invalidatekeycache.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc b/doc/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc rename to doc/modules/cassandra/pages/tools/nodetool/invalidaterowcache.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/join.adoc b/doc/modules/cassandra/pages/tools/nodetool/join.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/join.adoc rename to doc/modules/cassandra/pages/tools/nodetool/join.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc b/doc/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc rename to doc/modules/cassandra/pages/tools/nodetool/listsnapshots.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/move.adoc b/doc/modules/cassandra/pages/tools/nodetool/move.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/move.adoc rename to doc/modules/cassandra/pages/tools/nodetool/move.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc b/doc/modules/cassandra/pages/tools/nodetool/netstats.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/netstats.adoc rename to doc/modules/cassandra/pages/tools/nodetool/netstats.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.adoc b/doc/modules/cassandra/pages/tools/nodetool/nodetool.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/nodetool.adoc rename to doc/modules/cassandra/pages/tools/nodetool/nodetool.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt b/doc/modules/cassandra/pages/tools/nodetool/nodetool.txt similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/nodetool.txt rename to doc/modules/cassandra/pages/tools/nodetool/nodetool.txt diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc b/doc/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc rename to doc/modules/cassandra/pages/tools/nodetool/pausehandoff.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc b/doc/modules/cassandra/pages/tools/nodetool/profileload.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/profileload.adoc rename to doc/modules/cassandra/pages/tools/nodetool/profileload.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc b/doc/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc rename to doc/modules/cassandra/pages/tools/nodetool/proxyhistograms.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc b/doc/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc rename to doc/modules/cassandra/pages/tools/nodetool/rangekeysample.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc b/doc/modules/cassandra/pages/tools/nodetool/rebuild.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/rebuild.adoc rename to doc/modules/cassandra/pages/tools/nodetool/rebuild.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc b/doc/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc rename to doc/modules/cassandra/pages/tools/nodetool/rebuild_index.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc b/doc/modules/cassandra/pages/tools/nodetool/refresh.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/refresh.adoc rename to doc/modules/cassandra/pages/tools/nodetool/refresh.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc b/doc/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc rename to doc/modules/cassandra/pages/tools/nodetool/refreshsizeestimates.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc b/doc/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc rename to doc/modules/cassandra/pages/tools/nodetool/reloadlocalschema.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc b/doc/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc rename to doc/modules/cassandra/pages/tools/nodetool/reloadseeds.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc b/doc/modules/cassandra/pages/tools/nodetool/reloadssl.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/reloadssl.adoc rename to doc/modules/cassandra/pages/tools/nodetool/reloadssl.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc b/doc/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc rename to doc/modules/cassandra/pages/tools/nodetool/reloadtriggers.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc b/doc/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc rename to doc/modules/cassandra/pages/tools/nodetool/relocatesstables.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc b/doc/modules/cassandra/pages/tools/nodetool/removenode.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/removenode.adoc rename to doc/modules/cassandra/pages/tools/nodetool/removenode.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc b/doc/modules/cassandra/pages/tools/nodetool/repair.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/repair.adoc rename to doc/modules/cassandra/pages/tools/nodetool/repair.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc b/doc/modules/cassandra/pages/tools/nodetool/repair_admin.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/repair_admin.adoc rename to doc/modules/cassandra/pages/tools/nodetool/repair_admin.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc b/doc/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc rename to doc/modules/cassandra/pages/tools/nodetool/replaybatchlog.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc b/doc/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc rename to doc/modules/cassandra/pages/tools/nodetool/resetfullquerylog.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc b/doc/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc rename to doc/modules/cassandra/pages/tools/nodetool/resetlocalschema.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc b/doc/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc rename to doc/modules/cassandra/pages/tools/nodetool/resumehandoff.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc b/doc/modules/cassandra/pages/tools/nodetool/ring.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/ring.adoc rename to doc/modules/cassandra/pages/tools/nodetool/ring.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc b/doc/modules/cassandra/pages/tools/nodetool/scrub.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/scrub.adoc rename to doc/modules/cassandra/pages/tools/nodetool/scrub.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc b/doc/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setbatchlogreplaythrottle.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc b/doc/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setcachecapacity.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc b/doc/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setcachekeystosave.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc b/doc/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setcompactionthreshold.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc b/doc/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setcompactionthroughput.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc b/doc/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setconcurrency.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc b/doc/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setconcurrentcompactors.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc b/doc/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setconcurrentviewbuilders.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc b/doc/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc rename to doc/modules/cassandra/pages/tools/nodetool/sethintedhandoffthrottlekb.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc b/doc/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setinterdcstreamthroughput.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc b/doc/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setlogginglevel.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc b/doc/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setmaxhintwindow.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc b/doc/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc rename to doc/modules/cassandra/pages/tools/nodetool/setstreamthroughput.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc b/doc/modules/cassandra/pages/tools/nodetool/settimeout.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/settimeout.adoc rename to doc/modules/cassandra/pages/tools/nodetool/settimeout.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc b/doc/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc rename to doc/modules/cassandra/pages/tools/nodetool/settraceprobability.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc b/doc/modules/cassandra/pages/tools/nodetool/sjk.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/sjk.adoc rename to doc/modules/cassandra/pages/tools/nodetool/sjk.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc b/doc/modules/cassandra/pages/tools/nodetool/snapshot.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/snapshot.adoc rename to doc/modules/cassandra/pages/tools/nodetool/snapshot.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/status.adoc b/doc/modules/cassandra/pages/tools/nodetool/status.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/status.adoc rename to doc/modules/cassandra/pages/tools/nodetool/status.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc b/doc/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc rename to doc/modules/cassandra/pages/tools/nodetool/statusautocompaction.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc b/doc/modules/cassandra/pages/tools/nodetool/statusbackup.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/statusbackup.adoc rename to doc/modules/cassandra/pages/tools/nodetool/statusbackup.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc b/doc/modules/cassandra/pages/tools/nodetool/statusbinary.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/statusbinary.adoc rename to doc/modules/cassandra/pages/tools/nodetool/statusbinary.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc b/doc/modules/cassandra/pages/tools/nodetool/statusgossip.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/statusgossip.adoc rename to doc/modules/cassandra/pages/tools/nodetool/statusgossip.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc b/doc/modules/cassandra/pages/tools/nodetool/statushandoff.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/statushandoff.adoc rename to doc/modules/cassandra/pages/tools/nodetool/statushandoff.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc b/doc/modules/cassandra/pages/tools/nodetool/stop.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/stop.adoc rename to doc/modules/cassandra/pages/tools/nodetool/stop.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc b/doc/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc rename to doc/modules/cassandra/pages/tools/nodetool/stopdaemon.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc b/doc/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc rename to doc/modules/cassandra/pages/tools/nodetool/tablehistograms.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc b/doc/modules/cassandra/pages/tools/nodetool/tablestats.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/tablestats.adoc rename to doc/modules/cassandra/pages/tools/nodetool/tablestats.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc b/doc/modules/cassandra/pages/tools/nodetool/toppartitions.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/toppartitions.adoc rename to doc/modules/cassandra/pages/tools/nodetool/toppartitions.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc b/doc/modules/cassandra/pages/tools/nodetool/tpstats.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/tpstats.adoc rename to doc/modules/cassandra/pages/tools/nodetool/tpstats.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc b/doc/modules/cassandra/pages/tools/nodetool/truncatehints.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/truncatehints.adoc rename to doc/modules/cassandra/pages/tools/nodetool/truncatehints.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc b/doc/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc rename to doc/modules/cassandra/pages/tools/nodetool/upgradesstables.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc b/doc/modules/cassandra/pages/tools/nodetool/verify.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/verify.adoc rename to doc/modules/cassandra/pages/tools/nodetool/verify.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/version.adoc b/doc/modules/cassandra/pages/tools/nodetool/version.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/version.adoc rename to doc/modules/cassandra/pages/tools/nodetool/version.adoc diff --git a/doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc b/doc/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc rename to doc/modules/cassandra/pages/tools/nodetool/viewbuildstatus.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/index.adoc b/doc/modules/cassandra/pages/tools/sstable/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/index.adoc rename to doc/modules/cassandra/pages/tools/sstable/index.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstabledump.adoc b/doc/modules/cassandra/pages/tools/sstable/sstabledump.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstabledump.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstabledump.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableexpiredblockers.adoc b/doc/modules/cassandra/pages/tools/sstable/sstableexpiredblockers.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstableexpiredblockers.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstableexpiredblockers.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablelevelreset.adoc b/doc/modules/cassandra/pages/tools/sstable/sstablelevelreset.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstablelevelreset.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstablelevelreset.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableloader.adoc b/doc/modules/cassandra/pages/tools/sstable/sstableloader.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstableloader.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstableloader.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablemetadata.adoc b/doc/modules/cassandra/pages/tools/sstable/sstablemetadata.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstablemetadata.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstablemetadata.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableofflinerelevel.adoc b/doc/modules/cassandra/pages/tools/sstable/sstableofflinerelevel.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstableofflinerelevel.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstableofflinerelevel.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablerepairedset.adoc b/doc/modules/cassandra/pages/tools/sstable/sstablerepairedset.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstablerepairedset.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstablerepairedset.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablescrub.adoc b/doc/modules/cassandra/pages/tools/sstable/sstablescrub.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstablescrub.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstablescrub.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstablesplit.adoc b/doc/modules/cassandra/pages/tools/sstable/sstablesplit.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstablesplit.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstablesplit.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableupgrade.adoc b/doc/modules/cassandra/pages/tools/sstable/sstableupgrade.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstableupgrade.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstableupgrade.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableutil.adoc b/doc/modules/cassandra/pages/tools/sstable/sstableutil.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstableutil.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstableutil.adoc diff --git a/doc/source/modules/cassandra/pages/tools/sstable/sstableverify.adoc b/doc/modules/cassandra/pages/tools/sstable/sstableverify.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/tools/sstable/sstableverify.adoc rename to doc/modules/cassandra/pages/tools/sstable/sstableverify.adoc diff --git a/doc/source/modules/cassandra/pages/tools/stress-example.yaml b/doc/modules/cassandra/pages/tools/stress-example.yaml similarity index 100% rename from doc/source/modules/cassandra/pages/tools/stress-example.yaml rename to doc/modules/cassandra/pages/tools/stress-example.yaml diff --git a/doc/source/modules/cassandra/pages/tools/stress-lwt-example.yaml b/doc/modules/cassandra/pages/tools/stress-lwt-example.yaml similarity index 100% rename from doc/source/modules/cassandra/pages/tools/stress-lwt-example.yaml rename to doc/modules/cassandra/pages/tools/stress-lwt-example.yaml diff --git a/doc/source/modules/cassandra/pages/troubleshooting/finding_nodes.adoc b/doc/modules/cassandra/pages/troubleshooting/finding_nodes.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/troubleshooting/finding_nodes.adoc rename to doc/modules/cassandra/pages/troubleshooting/finding_nodes.adoc diff --git a/doc/source/modules/cassandra/pages/troubleshooting/index.adoc b/doc/modules/cassandra/pages/troubleshooting/index.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/troubleshooting/index.adoc rename to doc/modules/cassandra/pages/troubleshooting/index.adoc diff --git a/doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc b/doc/modules/cassandra/pages/troubleshooting/reading_logs.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/troubleshooting/reading_logs.adoc rename to doc/modules/cassandra/pages/troubleshooting/reading_logs.adoc diff --git a/doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc b/doc/modules/cassandra/pages/troubleshooting/use_nodetool.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/troubleshooting/use_nodetool.adoc rename to doc/modules/cassandra/pages/troubleshooting/use_nodetool.adoc diff --git a/doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc b/doc/modules/cassandra/pages/troubleshooting/use_tools.adoc similarity index 100% rename from doc/source/modules/cassandra/pages/troubleshooting/use_tools.adoc rename to doc/modules/cassandra/pages/troubleshooting/use_tools.adoc diff --git a/doc/source/modules/cassandra/partials/java_version.adoc b/doc/modules/cassandra/partials/java_version.adoc similarity index 100% rename from doc/source/modules/cassandra/partials/java_version.adoc rename to doc/modules/cassandra/partials/java_version.adoc diff --git a/doc/source/modules/cassandra/partials/nodetool_and_cqlsh.adoc b/doc/modules/cassandra/partials/nodetool_and_cqlsh.adoc similarity index 100% rename from doc/source/modules/cassandra/partials/nodetool_and_cqlsh.adoc rename to doc/modules/cassandra/partials/nodetool_and_cqlsh.adoc diff --git a/doc/source/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc b/doc/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc similarity index 100% rename from doc/source/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc rename to doc/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc diff --git a/doc/source/modules/cassandra/partials/package_versions.adoc b/doc/modules/cassandra/partials/package_versions.adoc similarity index 100% rename from doc/source/modules/cassandra/partials/package_versions.adoc rename to doc/modules/cassandra/partials/package_versions.adoc diff --git a/doc/source/modules/cassandra/partials/tail_syslog.adoc b/doc/modules/cassandra/partials/tail_syslog.adoc similarity index 100% rename from doc/source/modules/cassandra/partials/tail_syslog.adoc rename to doc/modules/cassandra/partials/tail_syslog.adoc diff --git a/doc/scripts/convert_yaml_to_adoc.py b/doc/scripts/convert_yaml_to_adoc.py deleted file mode 100644 index c0cac0bfc769..000000000000 --- a/doc/scripts/convert_yaml_to_adoc.py +++ /dev/null @@ -1,144 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -A script to convert cassandra.yaml into Asciidoc for -the online documentation. - -Usage: - -YAML_INPUT=conf/cassandra.yaml -YAML_OUTPUT=source/modules/cassandra/pages/configuration/cass_yaml_file.adoc - - convert_yaml_to_adoc.py $YAML_INPUT $YAML_OUTPUT -""" - -import sys -import re - -# Detects options, whether commented or uncommented. -# Group 1 will be non-empty if the option is commented out. -# Group 2 will contain the option name. -# Group 3 will contain the default value, if one exists. -option_re = re.compile(r"^(# ?)?([a-z0-9_]+): ?([^/].*)") - -# Detects normal comment lines. -commented_re = re.compile(r"^# ?(.*)") - -# A set of option names that have complex values (i.e. lists or dicts). -# This list is hardcoded because there did not seem to be another -# good way to reliably detect this case, especially considering -# that these can be commented out (making it useless to use a yaml parser). -COMPLEX_OPTIONS = ( - 'seed_provider', - 'data_file_directories', - 'commitlog_compression', - 'hints_compression', - 'server_encryption_options', - 'client_encryption_options', - 'transparent_data_encryption_options', - 'hinted_handoff_disabled_datacenters' -) - -def convert(yaml_file, dest_file): - with open(yaml_file, 'r') as f: - # Trim off the boilerplate header - lines = f.readlines()[7:] - - with open(dest_file, 'w') as outfile: - outfile.write("= cassandra.yaml file configuration\n") - - # since comments preceed an option, this holds all of the comment - # lines we've seen since the last option - comments_since_last_option = [] - line_iter = iter(lines) - while True: - try: - line = next(line_iter) - except StopIteration: - break - - match = option_re.match(line) - if match: - option_name = match.group(2) - is_commented = bool(match.group(1)) - - is_complex = option_name in COMPLEX_OPTIONS - complex_option = read_complex_option(line_iter) if is_complex else None - - write_section_header(option_name, outfile) - write_comments(comments_since_last_option, is_commented, outfile) - if is_complex: - write_complex_option(complex_option, outfile) - else: - maybe_write_default_value(match, outfile) - comments_since_last_option = [] - else: - comment_match = commented_re.match(line) - if comment_match: - comments_since_last_option.append(comment_match.group(1)) - elif line == "\n": - comments_since_last_option.append('') - - -def write_section_header(option_name, outfile): - outfile.write("\n") - outfile.write("== `%s`\n\n" % (option_name,)) - - -def write_comments(comment_lines, is_commented, outfile): - if is_commented: - outfile.write("*This option is commented out by default.*\n") - - for comment in comment_lines: - if "SAFETY THRESHOLDS" not in comment_lines: - outfile.write(comment + "\n") - - -def maybe_write_default_value(option_match, outfile): - default_value = option_match.group(3) - if default_value and default_value != "\n": - outfile.write("\n_Default Value:_ %s\n" % (default_value,)) - - -def read_complex_option(line_iter): - option_lines = [] - try: - while True: - line = next(line_iter) - if line == '\n': - return option_lines - else: - option_lines.append(line) - except StopIteration: - return option_lines - - -def write_complex_option(lines, outfile): - outfile.write("\n_Default Value (complex option)_:\n\n....\n") - for line in lines: - outfile.write((" " * 4) + line) - outfile.write("....\n") - - -if __name__ == '__main__': - if len(sys.argv) != 3: - print >> sys.stderr, "Usage: %s " % (sys.argv[0],) - sys.exit(1) - - yaml_file = sys.argv[1] - dest_file = sys.argv[2] - convert(yaml_file, dest_file) diff --git a/doc/scripts/gen-nodetool-docs.py b/doc/scripts/gen-nodetool-docs.py deleted file mode 100644 index 420ce473ad9a..000000000000 --- a/doc/scripts/gen-nodetool-docs.py +++ /dev/null @@ -1,83 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -""" -A script to use nodetool to generate documentation for nodetool -""" -from __future__ import print_function - -import os -import re -import sys -import subprocess -from subprocess import PIPE -from subprocess import Popen - -if(os.environ.get("SKIP_NODETOOL") == "1"): - sys.exit(0) - - -nodetool = "../bin/nodetool" -outdir = "source/modules/cassandra/pages/tools/nodetool" -examplesdir = "source/modules/cassandra/examples/TEXT/NODETOOL" -helpfilename = outdir + "/nodetool.txt" -command_re = re.compile("( )([_a-z]+)") -commandADOCContent = "== {0}\n\n== Usage\n[source,plaintext]\n----\ninclude::example$TEXT/NODETOOL/{0}.txt[]\n----\n" - -# create the documentation directory -if not os.path.exists(outdir): - os.makedirs(outdir) - -# create the base help file to use for discovering the commands -def create_help_file(): - with open(helpfilename, "w+") as output_file: - try: - subprocess.check_call([nodetool, "help"], stdout=output_file) - except subprocess.CalledProcessError as cpe: - print( - 'ERROR: Nodetool failed to run, you likely need to build ' - 'cassandra using ant jar from the top level directory' - ) - raise cpe - -# for a given command, create the help file and an ADOC file to contain it -def create_adoc(command): - if command: - cmdName = command.group(0).strip() - cmdFilename = examplesdir + "/" + cmdName + ".txt" - adocFilename = outdir + "/" + cmdName + ".adoc" - with open(cmdFilename, "wb+") as cmdFile: - proc = Popen([nodetool, "help", cmdName], stdin=PIPE, stdout=PIPE) - (out, err) = proc.communicate() - cmdFile.write(out) - with open(adocFilename, "w+") as adocFile: - adocFile.write(commandADOCContent.format(cmdName,cmdName,cmdName)) - -# create base file -create_help_file() - -# create the main usage page -with open(outdir + "/nodetool.adoc", "w+") as output: - with open(helpfilename, "r+") as helpfile: - output.write("== Nodetool\n\n== Usage\n\n") - for commandLine in helpfile: - command = command_re.sub(r'\nxref:tools/nodetool/\2.adoc[\2] - ',commandLine) - output.write(command) - -# create the command usage pages -with open(helpfilename, "r+") as helpfile: - for commandLine in helpfile: - command = command_re.match(commandLine) - create_adoc(command) diff --git a/doc/site.yml b/doc/site.yml deleted file mode 100644 index d64834d8582a..000000000000 --- a/doc/site.yml +++ /dev/null @@ -1,78 +0,0 @@ -site: - title: Apache Cassandra Documentation - url: file:///Users/lorina.poland/CLONES/cassandra/build/html/Cassandra/4.0 - # UNCOMMENT WHEN READY - #keys: - # google_analytics: 'UA-11583863-1' - #start_page: ROOT::index.adoc - -content: - sources: - #- url: /antora/cassandra - - url: https://github.com/polandll/cassandra.git - branches: - - 'doc_redo_asciidoc' - #- 'doc_redo_asciidoc3.11' - start_path: doc/source - - url: https://github.com/polandll/cassandra-website.git - branches: - - test_new_doc_builder - start_path: source - -ui: - # Need to replace this with a direct github url rather than a local path - bundle: - #url: /antora/cassandra/doc/ui-bundle.zip - #url: /Users/lorina.poland/CLONES/antora-ui-datastax/build/ui-bundle.zip - #url: https://github.com/ianjevans/antora-ui-datastax/build/ui-bundle.zip - url: https://github.com/ianjevans/antora-ui-datastax/releases/download/v0.1oss/ui-bundle.zip - snapshot: true - #supplemental_files: ./supplemental_ui - -output: - clean: true - dir: ./build/html - -asciidoc: - attributes: - idprefix: '' - idseparator: '-' - experimental: '' - source-language: asciidoc - current-version: 4.0 - latest-version: 4.0 - previous-version: 3.11 - 40_version: '4.0' - 3x_version: '3.11' - 30_version: '3.0' - 22_version: '2.2' - 21_version: '2.1' - example-caption: ~ - hide-uri-scheme: '' - linkattrs: '' - table-caption: ~ - tabs: tabs - page-pagination: true - url-project: https://asciidoctor.org - url-org: https://github.com/asciidoctor - url-exten-lab: https://github.com/asciidoctor/asciidoctor-extensions-lab - url-rubygem: https://rubygems.org/gems/asciidoctor - url-tilt: https://github.com/rtomayko/tilt - url-foundation: https://foundation.zurb.com - url-jruby: https://jruby.org - #url-asciimath: https://docs.mathjax.org/en/latest/asciimath.html - #url-latexmath: https://docs.mathjax.org/en/latest/tex.html - #url-mathjax: https://www.mathjax.org - #url-mathjax-docs: https://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference - #url-coderay: http://coderay.rubychan.de/ - #url-coderay-gem: https://rubygems.org/gems/coderay - url-highlightjs: https://highlightjs.org/ - url-highlightjs-lang: https://highlightjs.org/download/ - url-prettify: https://code.google.com/p/google-code-prettify - url-pygments: http://pygments.org - url-pygments-lang: http://pygments.org/languages/ - url-pygments-gem: https://rubygems.org/gems/pygments.rb - url-python: https://www.python.org - #url-rouge: http://rouge.jneen.net - extensions: - - ./lib/tabs-block.js From 194fdb9c045a73b9433eedbcda50613988b4074b Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Mon, 28 Jun 2021 23:10:44 -0700 Subject: [PATCH 104/115] fix py scripts --- doc/scripts/convert_yaml_to_adoc.py | 144 ++++++++++++++++++++++++++++ doc/scripts/gen-nodetool-docs.py | 83 ++++++++++++++++ 2 files changed, 227 insertions(+) create mode 100644 doc/scripts/convert_yaml_to_adoc.py create mode 100644 doc/scripts/gen-nodetool-docs.py diff --git a/doc/scripts/convert_yaml_to_adoc.py b/doc/scripts/convert_yaml_to_adoc.py new file mode 100644 index 000000000000..5eff522a00d0 --- /dev/null +++ b/doc/scripts/convert_yaml_to_adoc.py @@ -0,0 +1,144 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +A script to convert cassandra.yaml into Asciidoc for +the online documentation. + +Usage: + +YAML_INPUT=conf/cassandra.yaml +YAML_OUTPUT=modules/cassandra/pages/configuration/cass_yaml_file.adoc + + convert_yaml_to_adoc.py $YAML_INPUT $YAML_OUTPUT +""" + +import sys +import re + +# Detects options, whether commented or uncommented. +# Group 1 will be non-empty if the option is commented out. +# Group 2 will contain the option name. +# Group 3 will contain the default value, if one exists. +option_re = re.compile(r"^(# ?)?([a-z0-9_]+): ?([^/].*)") + +# Detects normal comment lines. +commented_re = re.compile(r"^# ?(.*)") + +# A set of option names that have complex values (i.e. lists or dicts). +# This list is hardcoded because there did not seem to be another +# good way to reliably detect this case, especially considering +# that these can be commented out (making it useless to use a yaml parser). +COMPLEX_OPTIONS = ( + 'seed_provider', + 'data_file_directories', + 'commitlog_compression', + 'hints_compression', + 'server_encryption_options', + 'client_encryption_options', + 'transparent_data_encryption_options', + 'hinted_handoff_disabled_datacenters' +) + +def convert(yaml_file, dest_file): + with open(yaml_file, 'r') as f: + # Trim off the boilerplate header + lines = f.readlines()[7:] + + with open(dest_file, 'w') as outfile: + outfile.write("= cassandra.yaml file configuration\n") + + # since comments preceed an option, this holds all of the comment + # lines we've seen since the last option + comments_since_last_option = [] + line_iter = iter(lines) + while True: + try: + line = next(line_iter) + except StopIteration: + break + + match = option_re.match(line) + if match: + option_name = match.group(2) + is_commented = bool(match.group(1)) + + is_complex = option_name in COMPLEX_OPTIONS + complex_option = read_complex_option(line_iter) if is_complex else None + + write_section_header(option_name, outfile) + write_comments(comments_since_last_option, is_commented, outfile) + if is_complex: + write_complex_option(complex_option, outfile) + else: + maybe_write_default_value(match, outfile) + comments_since_last_option = [] + else: + comment_match = commented_re.match(line) + if comment_match: + comments_since_last_option.append(comment_match.group(1)) + elif line == "\n": + comments_since_last_option.append('') + + +def write_section_header(option_name, outfile): + outfile.write("\n") + outfile.write("== `%s`\n\n" % (option_name,)) + + +def write_comments(comment_lines, is_commented, outfile): + if is_commented: + outfile.write("*This option is commented out by default.*\n") + + for comment in comment_lines: + if "SAFETY THRESHOLDS" not in comment_lines: + outfile.write(comment + "\n") + + +def maybe_write_default_value(option_match, outfile): + default_value = option_match.group(3) + if default_value and default_value != "\n": + outfile.write("\n_Default Value:_ %s\n" % (default_value,)) + + +def read_complex_option(line_iter): + option_lines = [] + try: + while True: + line = next(line_iter) + if line == '\n': + return option_lines + else: + option_lines.append(line) + except StopIteration: + return option_lines + + +def write_complex_option(lines, outfile): + outfile.write("\n_Default Value (complex option)_:\n\n....\n") + for line in lines: + outfile.write((" " * 4) + line) + outfile.write("....\n") + + +if __name__ == '__main__': + if len(sys.argv) != 3: + print >> sys.stderr, "Usage: %s " % (sys.argv[0],) + sys.exit(1) + + yaml_file = sys.argv[1] + dest_file = sys.argv[2] + convert(yaml_file, dest_file) diff --git a/doc/scripts/gen-nodetool-docs.py b/doc/scripts/gen-nodetool-docs.py new file mode 100644 index 000000000000..1903dca8763c --- /dev/null +++ b/doc/scripts/gen-nodetool-docs.py @@ -0,0 +1,83 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +A script to use nodetool to generate documentation for nodetool +""" +from __future__ import print_function + +import os +import re +import sys +import subprocess +from subprocess import PIPE +from subprocess import Popen + +if(os.environ.get("SKIP_NODETOOL") == "1"): + sys.exit(0) + + +nodetool = "../bin/nodetool" +outdir = "modules/cassandra/pages/tools/nodetool" +examplesdir = "modules/cassandra/examples/TEXT/NODETOOL" +helpfilename = outdir + "/nodetool.txt" +command_re = re.compile("( )([_a-z]+)") +commandADOCContent = "== {0}\n\n== Usage\n[source,plaintext]\n----\ninclude::example$TEXT/NODETOOL/{0}.txt[]\n----\n" + +# create the documentation directory +if not os.path.exists(outdir): + os.makedirs(outdir) + +# create the base help file to use for discovering the commands +def create_help_file(): + with open(helpfilename, "w+") as output_file: + try: + subprocess.check_call([nodetool, "help"], stdout=output_file) + except subprocess.CalledProcessError as cpe: + print( + 'ERROR: Nodetool failed to run, you likely need to build ' + 'cassandra using ant jar from the top level directory' + ) + raise cpe + +# for a given command, create the help file and an ADOC file to contain it +def create_adoc(command): + if command: + cmdName = command.group(0).strip() + cmdFilename = examplesdir + "/" + cmdName + ".txt" + adocFilename = outdir + "/" + cmdName + ".adoc" + with open(cmdFilename, "wb+") as cmdFile: + proc = Popen([nodetool, "help", cmdName], stdin=PIPE, stdout=PIPE) + (out, err) = proc.communicate() + cmdFile.write(out) + with open(adocFilename, "w+") as adocFile: + adocFile.write(commandADOCContent.format(cmdName,cmdName,cmdName)) + +# create base file +create_help_file() + +# create the main usage page +with open(outdir + "/nodetool.adoc", "w+") as output: + with open(helpfilename, "r+") as helpfile: + output.write("== Nodetool\n\n== Usage\n\n") + for commandLine in helpfile: + command = command_re.sub(r'\nxref:tools/nodetool/\2.adoc[\2] - ',commandLine) + output.write(command) + +# create the command usage pages +with open(helpfilename, "r+") as helpfile: + for commandLine in helpfile: + command = command_re.match(commandLine) + create_adoc(command) From 350b79e1e02c90f14628c8c179281306dcccf37c Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Mon, 28 Jun 2021 23:27:52 -0700 Subject: [PATCH 105/115] change prelease version --- doc/antora.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/antora.yml b/doc/antora.yml index c15ca966710e..8864f941d27d 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -1,6 +1,6 @@ name: Cassandra version: '4.0' -prerelease: -beta1 +prerelease: '-rc1' nav: - modules/ROOT/nav.adoc - modules/cassandra/nav.adoc From 0c80645518822e6eee4fa5ecb4f6524269944d74 Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Wed, 30 Jun 2021 10:33:01 -0700 Subject: [PATCH 106/115] change to 4.0 --- doc/antora.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/antora.yml b/doc/antora.yml index 8864f941d27d..8f358ab3bbc0 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -1,6 +1,5 @@ name: Cassandra version: '4.0' -prerelease: '-rc1' nav: - modules/ROOT/nav.adoc - modules/cassandra/nav.adoc From 3f77a687057a91e9300dc0f49fe9cb6305e79c95 Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Wed, 14 Jul 2021 09:14:54 -0700 Subject: [PATCH 107/115] change Website to _ --- doc/modules/cassandra/nav.adoc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/modules/cassandra/nav.adoc b/doc/modules/cassandra/nav.adoc index 4a0ece8441d4..21880069c793 100644 --- a/doc/modules/cassandra/nav.adoc +++ b/doc/modules/cassandra/nav.adoc @@ -87,18 +87,18 @@ *** xref:troubleshooting/use_nodetool.adoc[Using nodetool] *** xref:troubleshooting/use_tools.adoc[Using external tools to deep-dive] -** xref:master@Website:ROOT:development/index.adoc[Development] -*** xref:master@Website:ROOT:development/gettingstarted.adoc[Getting started] -*** xref:master@Website:ROOT:development/ide.adoc[Building and IDE integration] -*** xref:master@Website:ROOT:development/testing.adoc[Testing] -*** xref:master@Website:ROOT:development/patches.adoc[Contributing code changes] -*** xref:master@Website:ROOT:development/code_style.adoc[Code style] -*** xref:master@Website:ROOT:development/how_to_review.adoc[Review checklist] -*** xref:master@Website:ROOT:development/how_to_commit.adoc[How to commit] -*** xref:master@Website:ROOT:development/documentation.adoc[Working on documentation] -*** xref:master@Website:ROOT:development/ci.adoc[Jenkins CI environment] -*** xref:master@Website:ROOT:development/dependencies.adoc[Dependency management] -*** xref:master@Website:ROOT:development/release_process.adoc[Release process] +** xref:master@_:ROOT:development/index.adoc[Development] +*** xref:master@_:ROOT:development/gettingstarted.adoc[Getting started] +*** xref:master@_:ROOT:development/ide.adoc[Building and IDE integration] +*** xref:master@_:ROOT:development/testing.adoc[Testing] +*** xref:master@_:ROOT:development/patches.adoc[Contributing code changes] +*** xref:master@_:ROOT:development/code_style.adoc[Code style] +*** xref:master@_:ROOT:development/how_to_review.adoc[Review checklist] +*** xref:master@_:ROOT:development/how_to_commit.adoc[How to commit] +*** xref:master@_:ROOT:development/documentation.adoc[Working on documentation] +*** xref:master@_:ROOT:development/ci.adoc[Jenkins CI environment] +*** xref:master@_:ROOT:development/dependencies.adoc[Dependency management] +*** xref:master@_:ROOT:development/release_process.adoc[Release process] ** xref:faq/index.adoc[FAQ] From 3e2202fa821dfedbb7c28ffbc4951c458592a6ad Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Wed, 14 Jul 2021 09:15:16 -0700 Subject: [PATCH 108/115] change Website to _ --- doc/modules/ROOT/nav.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/modules/ROOT/nav.adoc b/doc/modules/ROOT/nav.adoc index 6b2926988122..74c129c5a2b2 100644 --- a/doc/modules/ROOT/nav.adoc +++ b/doc/modules/ROOT/nav.adoc @@ -1,4 +1,4 @@ * xref:index.adoc[Main] -** xref:master@Website:ROOT:glossary.adoc[Glossary] -** xref:master@Website:ROOT:bugs.adoc[How to report bugs] -** xref:master@Website:ROOT:contactus.adoc[Contact us] +** xref:master@_:ROOT:glossary.adoc[Glossary] +** xref:master@_:ROOT:bugs.adoc[How to report bugs] +** xref:master@_:ROOT:contactus.adoc[Contact us] From ce048b5c6e13f39a4e66607e90a7022f310e784d Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Wed, 14 Jul 2021 10:07:52 -0700 Subject: [PATCH 109/115] change http://cassandra.apache.org to use antora variable {cass_url} --- .../cassandra/pages/development/ci.adoc | 83 ------ .../pages/development/code_style.adoc | 100 ------- .../pages/development/dependencies.adoc | 51 ---- .../pages/development/documentation.adoc | 135 ---------- .../pages/development/gettingstarted.adoc | 62 ----- .../pages/development/how_to_commit.adoc | 71 ----- .../pages/development/how_to_review.adoc | 72 ----- .../cassandra/pages/development/ide.adoc | 234 ----------------- .../pages/development/images/docs_commit.png | Bin 104667 -> 0 bytes .../development/images/docs_create_branch.png | Bin 181860 -> 0 bytes .../development/images/docs_create_file.png | Bin 209110 -> 0 bytes .../pages/development/images/docs_editor.png | Bin 106175 -> 0 bytes .../pages/development/images/docs_fork.png | Bin 76159 -> 0 bytes .../pages/development/images/docs_pr.png | Bin 156081 -> 0 bytes .../pages/development/images/docs_preview.png | Bin 123826 -> 0 bytes .../development/images/eclipse_debug0.png | Bin 48174 -> 0 bytes .../development/images/eclipse_debug1.png | Bin 34446 -> 0 bytes .../development/images/eclipse_debug2.png | Bin 57032 -> 0 bytes .../development/images/eclipse_debug3.png | Bin 58677 -> 0 bytes .../development/images/eclipse_debug4.png | Bin 24793 -> 0 bytes .../development/images/eclipse_debug5.png | Bin 66632 -> 0 bytes .../development/images/eclipse_debug6.png | Bin 87568 -> 0 bytes .../cassandra/pages/development/index.adoc | 13 - .../cassandra/pages/development/patches.adoc | 218 ---------------- .../pages/development/release_process.adoc | 245 ------------------ .../cassandra/pages/development/testing.adoc | 145 ----------- .../pages/getting_started/installing.adoc | 8 +- .../partials/nodetool_and_cqlsh.adoc | 2 +- .../partials/nodetool_and_cqlsh_nobin.adoc | 2 +- 29 files changed, 6 insertions(+), 1435 deletions(-) delete mode 100644 doc/modules/cassandra/pages/development/ci.adoc delete mode 100644 doc/modules/cassandra/pages/development/code_style.adoc delete mode 100644 doc/modules/cassandra/pages/development/dependencies.adoc delete mode 100644 doc/modules/cassandra/pages/development/documentation.adoc delete mode 100644 doc/modules/cassandra/pages/development/gettingstarted.adoc delete mode 100644 doc/modules/cassandra/pages/development/how_to_commit.adoc delete mode 100644 doc/modules/cassandra/pages/development/how_to_review.adoc delete mode 100644 doc/modules/cassandra/pages/development/ide.adoc delete mode 100644 doc/modules/cassandra/pages/development/images/docs_commit.png delete mode 100644 doc/modules/cassandra/pages/development/images/docs_create_branch.png delete mode 100644 doc/modules/cassandra/pages/development/images/docs_create_file.png delete mode 100644 doc/modules/cassandra/pages/development/images/docs_editor.png delete mode 100644 doc/modules/cassandra/pages/development/images/docs_fork.png delete mode 100644 doc/modules/cassandra/pages/development/images/docs_pr.png delete mode 100644 doc/modules/cassandra/pages/development/images/docs_preview.png delete mode 100644 doc/modules/cassandra/pages/development/images/eclipse_debug0.png delete mode 100644 doc/modules/cassandra/pages/development/images/eclipse_debug1.png delete mode 100644 doc/modules/cassandra/pages/development/images/eclipse_debug2.png delete mode 100644 doc/modules/cassandra/pages/development/images/eclipse_debug3.png delete mode 100644 doc/modules/cassandra/pages/development/images/eclipse_debug4.png delete mode 100644 doc/modules/cassandra/pages/development/images/eclipse_debug5.png delete mode 100644 doc/modules/cassandra/pages/development/images/eclipse_debug6.png delete mode 100644 doc/modules/cassandra/pages/development/index.adoc delete mode 100644 doc/modules/cassandra/pages/development/patches.adoc delete mode 100644 doc/modules/cassandra/pages/development/release_process.adoc delete mode 100644 doc/modules/cassandra/pages/development/testing.adoc diff --git a/doc/modules/cassandra/pages/development/ci.adoc b/doc/modules/cassandra/pages/development/ci.adoc deleted file mode 100644 index 1ace38c414bd..000000000000 --- a/doc/modules/cassandra/pages/development/ci.adoc +++ /dev/null @@ -1,83 +0,0 @@ -= Jenkins CI Environment - -== About CI testing and Apache Cassandra - -Cassandra can be automatically tested using various test suites, that -are either implemented based on JUnit or the -https://github.com/riptano/cassandra-dtest[dtest] scripts written in -Python. As outlined in `testing`, each kind of test suite addresses a -different way how to test Cassandra. But in the end, all of them will be -executed together on our CI platform at -https://builds.apache.org[builds.apache.org], running -http://jenkins-ci.org[Jenkins]. - -== Setting up your own Jenkins server - -Jenkins is an open source solution that can be installed on a large -number of platforms. Setting up a custom Jenkins instance for Cassandra -may be desirable for users who have hardware to spare, or organizations -that want to run Cassandra tests for custom patches before contribution. - -Please refer to the Jenkins download and documentation pages for details -on how to get Jenkins running, possibly also including slave build -executor instances. The rest of the document will focus on how to setup -Cassandra jobs in your Jenkins environment. - -=== Required plugins - -The following plugins need to be installed additionally to the standard -plugins (git, ant, ..). - -You can install any missing plugins through the install manager. - -Go to `Manage Jenkins -> Manage Plugins -> Available` and install the -following plugins and respective dependencies: - -* Job DSL -* Javadoc Plugin -* description setter plugin -* Throttle Concurrent Builds Plug-in -* Test stability history -* Hudson Post build task - -=== Setup seed job - -Config `New Item` - -* Name it `Cassandra-Job-DSL` -* Select `Freestyle project` - -Under `Source Code Management` select Git using the repository: -`https://github.com/apache/cassandra-builds` - -Under `Build`, confirm `Add build step` -> `Process Job DSLs` and enter -at `Look on Filesystem`: `jenkins-dsl/cassandra_job_dsl_seed.groovy` - -Generated jobs will be created based on the Groovy script's default -settings. You may want to override settings by checking -`This project is parameterized` and add `String Parameter` for on the -variables that can be found in the top of the script. This will allow -you to setup jobs for your own repository and branches (e.g. working -branches). - -*When done, confirm "Save"* - -You should now find a new entry with the given name in your project -list. However, building the project will still fail and abort with an -error message [.title-ref]#"Processing DSL script -cassandra_job_dsl_seed.groovy ERROR: script not yet approved for use"#. -Goto `Manage Jenkins` -> `In-process Script Approval` to fix this issue. -Afterwards you should be able to run the script and have it generate -numerous new jobs based on the found branches and configured templates. - -Jobs are triggered by either changes in Git or are scheduled to execute -periodically, e.g. on daily basis. Jenkins will use any available -executor with the label "cassandra", once the job is to be run. Please -make sure to make any executors available by selecting -`Build Executor Status` -> `Configure` -> Add "`cassandra`" as label and -save. - -Executors need to have "JDK 1.8 (latest)" installed. This is done under -`Manage Jenkins -> Global Tool Configuration -> JDK Installations…`. -Executors also need to have the virtualenv package installed on their -system. diff --git a/doc/modules/cassandra/pages/development/code_style.adoc b/doc/modules/cassandra/pages/development/code_style.adoc deleted file mode 100644 index bc2edce5f6e8..000000000000 --- a/doc/modules/cassandra/pages/development/code_style.adoc +++ /dev/null @@ -1,100 +0,0 @@ -= Code Style - -== General Code Conventions - -* The Cassandra project follows -http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html[Sun's Java -coding conventions] with an important exception: `{` and `}` are always -placed on a new line - -== Exception handling - -* Never ever write `catch (...) {}` or `catch (...) { logger.error() }` -merely to satisfy Java's compile-time exception checking. Always -propagate the exception up or throw `RuntimeException` (or, if it "can't -happen," `AssertionError`). This makes the exceptions visible to -automated tests. -* Avoid propagating up checked exceptions that no caller handles. -Rethrow as `RuntimeException` (or `IOError`, if that is more -applicable). -* Similarly, logger.warn() is often a cop-out: is this an error or not? -If it is don't hide it behind a warn; if it isn't, no need for the -warning. -* If you genuinely know an exception indicates an expected condition, -it's okay to ignore it BUT this must be explicitly explained in a -comment. - -== Boilerplate - -* Avoid redundant `@Override` annotations when implementing abstract or -interface methods. -* Do not implement equals or hashcode methods unless they are actually -needed. -* Prefer public final fields to private fields with getters. (But prefer -encapsulating behavior in "real" methods to either.) -* Prefer requiring initialization in the constructor to setters. -* Avoid redundant `this` references to member fields or methods. -* Do not extract interfaces (or abstract classes) unless you actually -need multiple implementations of it. -* Always include braces for nested levels of conditionals and loops. -Only avoid braces for single level. - -== Multiline statements - -* Try to keep lines under 120 characters, but use good judgement -- it's -better to exceed 120 by a little, than split a line that has no natural -splitting points. -* When splitting inside a method call, use one line per parameter and -align them, like this: - -[source,none] ----- -SSTableWriter writer = new SSTableWriter(cfs.getTempSSTablePath(), - columnFamilies.size(), - StorageService.getPartitioner()); ----- - -* When splitting a ternary, use one line per clause, carry the operator, -and align like this: - -[source,none] ----- -var = bar == null - ? doFoo() - : doBar(); ----- - -== Whitespace - -* Please make sure to use 4 spaces instead of the tab character for all -your indentation. -* Many lines in many files have a bunch of trailing whitespace... Please -either clean these up in a separate patch, or leave them alone, so that -reviewers now and anyone reading code history later doesn't have to pay -attention to whitespace diffs. - -== Imports - -Please observe the following order for your imports: - -[source,none] ----- -java -[blank line] -com.google.common -org.apache.commons -org.junit -org.slf4j -[blank line] -everything else alphabetically ----- - -== Format files for IDEs - -* IntelliJ: -https://wiki.apache.org/cassandra/CodeStyle?action=AttachFile&do=view&target=intellij-codestyle.jar[intellij-codestyle.jar] -* IntelliJ 13: -https://gist.github.com/jdsumsion/9ab750a05c2a567c6afc[gist for IntelliJ -13] (this is a work in progress, still working on javadoc, ternary -style, line continuations, etc) -* Eclipse (https://github.com/tjake/cassandra-style-eclipse) diff --git a/doc/modules/cassandra/pages/development/dependencies.adoc b/doc/modules/cassandra/pages/development/dependencies.adoc deleted file mode 100644 index 3e147541d6ef..000000000000 --- a/doc/modules/cassandra/pages/development/dependencies.adoc +++ /dev/null @@ -1,51 +0,0 @@ -= Dependency Management - -Managing libraries for Cassandra is a bit less straight forward compared -to other projects, as the build process is based on ant, maven and -manually managed jars. Make sure to follow the steps below carefully and -pay attention to any emerging issues in the `ci` and reported related -issues on Jira/ML, in case of any project dependency changes. - -As Cassandra is an Apache product, all included libraries must follow -Apache's https://www.apache.org/legal/resolved.html[software license -requirements]. - -== Required steps to add or update libraries - -* Add or replace jar file in `lib` directory -* Add or update `lib/license` files -* Update dependencies in `build.xml` -** Add to `parent-pom` with correct version -** Add to `all-pom` if simple Cassandra dependency (see below) - -== POM file types - -* *parent-pom* - contains all dependencies with the respective version. -All other poms will refer to the artifacts with specified versions -listed here. -* *build-deps-pom(-sources)* + *coverage-deps-pom* - used by `ant build` -compile target. Listed dependenices will be resolved and copied to -`build/lib/{jar,sources}` by executing the -`maven-ant-tasks-retrieve-build` target. This should contain libraries -that are required for build tools (grammar, docs, instrumentation), but -are not shipped as part of the Cassandra distribution. -* *test-deps-pom* - refered by `maven-ant-tasks-retrieve-test` to -retrieve and save dependencies to `build/test/lib`. Exclusively used -during JUnit test execution. -* *all-pom* - pom for -https://mvnrepository.com/artifact/org.apache.cassandra/cassandra-all[cassandra-all.jar] -that can be installed or deployed to public maven repos via -`ant publish` - -== Troubleshooting and conflict resolution - -Here are some useful commands that may help you out resolving conflicts. - -* `ant realclean` - gets rid of the build directory, including build -artifacts. -* `mvn dependency:tree -f build/apache-cassandra-*-SNAPSHOT.pom -Dverbose -Dincludes=org.slf4j` -- shows transitive dependency tree for artifacts, e.g. org.slf4j. In -case the command above fails due to a missing parent pom file, try -running `ant mvn-install`. -* `rm ~/.m2/repository/org/apache/cassandra/apache-cassandra/` - removes -cached local Cassandra maven artifacts diff --git a/doc/modules/cassandra/pages/development/documentation.adoc b/doc/modules/cassandra/pages/development/documentation.adoc deleted file mode 100644 index 177258afd432..000000000000 --- a/doc/modules/cassandra/pages/development/documentation.adoc +++ /dev/null @@ -1,135 +0,0 @@ -= Working on Documentation - -== How Cassandra is documented - -The official Cassandra documentation lives in the project's git -repository. -We use a static site generator, http://www.antora.org/[Antora], to create pages hosted at -https://cassandra.apache.org/doc/latest/[cassandra.apache.org]. - - - -Using a static site generator often requires the use of a markup language -instead of visual editors (which some people would call good news). -Antora processes http://www.asciidoc.org[Ascidoc], the markup language used to generate our documentation. -Markup languages allow you to format text using certain syntax elements. -Your document structure will also have to follow specific conventions. -Feel free to take a look at http://cassandra.apache.org/docs[existing documents] to get a better idea how we structure our documents. - -So how do you actually start making contributions? - -== GitHub based work flow - -_Recommended for shorter documents and minor changes on existing content -(e.g. fixing typos or updating descriptions)_ - -Follow these steps to contribute using GitHub. It's assumed that you're -logged in with an existing account. - -[arabic] -. Fork the GitHub mirror of the -https://github.com/apache/cassandra[Cassandra repository] - -image::docs_fork.png[image] - -[arabic, start=2] -. Create a new branch that you can use to make your edits. It's -recommended to have a separate branch for each of your working projects. -It will also make it easier to create a pull request later to when you -decide you’re ready to contribute your work. - -image::docs_create_branch.png[image] - -[arabic, start=3] -. Navigate to document sources `doc/source/modules` to find the `.adoc` file to -edit. The URL of the document should correspond to the directory -structure within the modules, where first the `component` name, such as `cassandra` is listed, and then the actual pages inside the `pages` directory. New files can be created using the "Create new file" button: - -image::docs_create_file.png[image] - -[arabic, start=4] -. At this point you should be able to edit the file using the GitHub web -editor. Start by naming your file and add some content. Have a look at -other existing `.adoc` files to get a better idea what format elements to -use. - -image::docs_editor.png[image] - -Make sure to preview added content before committing any changes. - -image::docs_preview.png[image] - -[arabic, start=5] -. Commit your work when you're done. Make sure to add a short -description of all your edits since the last time you committed before. - -image::docs_commit.png[image] - -[arabic, start=6] -. Finally if you decide that you're done working on your branch, it's -time to create a pull request! - -image::docs_pr.png[image] - -Afterwards the GitHub Cassandra mirror will list your pull request and -you're done. Congratulations! Please give us some time to look at your -suggested changes before we get back to you. - -== Jira based work flow - -_Recommended for major changes_ - -Significant changes to the documentation are best managed through our -Jira issue tracker. Please follow the same -https://cassandra.apache.org/doc/latest/development/patches.html[contribution -guides] as for regular code contributions. Creating high quality content -takes a lot of effort. It’s therefore always a good idea to create a -ticket before you start and explain what you’re planning to do. This will -create the opportunity for other contributors and committers to comment -on your ideas and work so far. Eventually your patch gets a formal -review before it is committed. - -== Working on documents locally using Antora - -_Recommended for advanced editing_ - -Using the GitHub web interface should allow you to use most common -layout elements including images. More advanced formatting options and -navigation elements depend on Antora to render correctly. Therefore, it’s -a good idea to setup Antora locally for any serious editing. Please -follow the instructions in the Cassandra source directory at -`doc/README.md`. Setup is very easy (at least on OSX and Linux). - -== Notes for committers - -Please feel free to get involved and merge pull requests created on the -GitHub mirror if you're a committer. As this is a read-only repository, -you won't be able to merge a PR directly on GitHub. You'll have to -commit the changes against the Apache repository with a comment that -will close the PR when the committ syncs with GitHub. - -You may use a git work flow like this: - -.... -git remote add github https://github.com/apache/cassandra.git -git fetch github pull//head: -git checkout -.... - -Now either rebase or squash the commit, e.g. for squashing: - -.... -git reset --soft origin/trunk -git commit --author -.... - -Make sure to add a proper commit message including a "Closes #" -text to automatically close the PR. - -=== Publishing - -Details for building and publishing of the site at cassandra.apache.org -can be found -https://github.com/apache/cassandra-website/blob/master/README.md[here]. diff --git a/doc/modules/cassandra/pages/development/gettingstarted.adoc b/doc/modules/cassandra/pages/development/gettingstarted.adoc deleted file mode 100644 index bd7039a6ddf5..000000000000 --- a/doc/modules/cassandra/pages/development/gettingstarted.adoc +++ /dev/null @@ -1,62 +0,0 @@ -= Getting Started - -== Initial Contributions - -Writing a new feature is just one way to contribute to the Cassandra -project. In fact, making sure that supporting tasks, such as QA, -documentation and helping users, keep up with the development of new -features is an ongoing challenge for the project (and most open source -projects). So, before firing up your IDE to create that new feature, -we'd suggest you consider some of the following activities as a way of -introducing yourself to the project and getting to know how things -work.:: - * Add to or update the documentation - * Answer questions on the user list - * Review and test a submitted patch - * Investigate and fix a reported bug - * Create unit tests and d-tests - -== Updating documentation - -The Cassandra documentation is maintained in the Cassandra source -repository along with the Cassandra code base. To submit changes to the -documentation, follow the standard process for submitting a patch -(`patches`). - -== Answering questions on the user list - -Subscribe to the user list, look out for some questions you know the -answer to and reply with an answer. Simple as that! See the -http://cassandra.apache.org/community/[community] page for details on -how to subscribe to the mailing list. - -== Reviewing and testing a submitted patch - -Reviewing patches is not the sole domain of committers, if others have -reviewed a patch it can reduce the load on the committers allowing them -to write more great features or review more patches. Follow the -instructions in xref:development/development_how_to_review[How to review] or create a build with the -patch and test it with your own workload. Add a comment to the JIRA -ticket to let others know what you have done and the results of your -work. (For example, "I tested this performance enhacement on our -application's standard production load test and found a 3% -improvement.") - -== Investigate and/or fix a reported bug - -Often, the hardest work in fixing a bug is reproducing it. Even if you -don't have the knowledge to produce a fix, figuring out a way to -reliable reproduce an issues can be a massive contribution to getting a -bug fixed. Document your method of reproduction in a JIRA comment or, -better yet, produce an automated test that reproduces the issue and -attach it to the ticket. If you go as far as producing a fix, follow the -process for submitting a patch (`patches`). - -== Create unit tests and Dtests - -Test coverage in Cassandra is improving but, as with most code bases, it -could benefit from more automated test coverage. Before starting work in -an area, consider reviewing and enhancing the existing test coverage. -This will both improve your knowledge of the code before you start on an -enhancement and reduce the chances of your change in introducing new -issues. See `testing` and `patches` for more detail. diff --git a/doc/modules/cassandra/pages/development/how_to_commit.adoc b/doc/modules/cassandra/pages/development/how_to_commit.adoc deleted file mode 100644 index 2018606806ac..000000000000 --- a/doc/modules/cassandra/pages/development/how_to_commit.adoc +++ /dev/null @@ -1,71 +0,0 @@ -= How-to Commit - -If you are a committer, feel free to pick any process that works for you -- so long as you are planning to commit the work yourself. - -Here is how committing and merging will usually look for merging and -pushing for tickets that follow the convention (if patch-based): - -Hypothetical CASSANDRA-12345 ticket is a cassandra-3.0 based bug fix -that requires different code for cassandra-3.3, and trunk. Contributor -Jackie supplied a patch for the root branch (12345-3.0.patch), and -patches for the remaining branches (12345-3.3.patch, 12345-trunk.patch). - -On cassandra-3.0::: - . `git am -3 12345-3.0.patch` (if we have a problem b/c of CHANGES.txt - not merging anymore, we fix it ourselves, in place) -On cassandra-3.3::: - . `git merge cassandra-3.0 -s ours` - . `git apply -3 12345-3.3.patch` (likely to have an issue with - CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) - . `git commit -amend` -On trunk::: - . `git merge cassandra-3.3 -s ours` - . `git apply -3 12345-trunk.patch` (likely to have an issue with - CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) - . `git commit -amend` -On any branch::: - . `git push origin cassandra-3.0 cassandra-3.3 trunk -atomic` - -Same scenario, but a branch-based contribution: - -On cassandra-3.0::: - . `git cherry-pick ` (if we have a problem b/c of - CHANGES.txt not merging anymore, we fix it ourselves, in place) -On cassandra-3.3::: - . `git merge cassandra-3.0 -s ours` - . `git format-patch -1 ` - . `git apply -3 .patch` (likely to have an issue - with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) - . `git commit -amend` -On trunk::: - . `git merge cassandra-3.3 -s ours` - . `git format-patch -1 ` - . `git apply -3 .patch` (likely to have an issue - with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) - . `git commit -amend` -On any branch::: - . `git push origin cassandra-3.0 cassandra-3.3 trunk -atomic` - -[TIP] -.Tip -==== -Notes on git flags: `-3` flag to am and apply will instruct git to -perform a 3-way merge for you. If a conflict is detected, you can either -resolve it manually or invoke git mergetool - for both am and apply. - -`-atomic` flag to git push does the obvious thing: pushes all or -nothing. Without the flag, the command is equivalent to running git push -once per each branch. This is nifty in case a race condition happens - -you won’t push half the branches, blocking other committers’ progress -while you are resolving the issue. -==== - -[TIP] -.Tip -==== -The fastest way to get a patch from someone’s commit in a branch on GH - -if you don’t have their repo in remotes - is to append .patch to the -commit url, e.g. curl -O -https://github.com/apache/cassandra/commit/7374e9b5ab08c1f1e612bf72293ea14c959b0c3c.patch -==== diff --git a/doc/modules/cassandra/pages/development/how_to_review.adoc b/doc/modules/cassandra/pages/development/how_to_review.adoc deleted file mode 100644 index 7bb04d13414d..000000000000 --- a/doc/modules/cassandra/pages/development/how_to_review.adoc +++ /dev/null @@ -1,72 +0,0 @@ -= Review Checklist - -When reviewing tickets in Apache JIRA, the following items should be -covered as part of the review process: - -== *General* - -* Does it conform to the `code_style` guidelines? -* Is there any redundant or duplicate code? -* Is the code as modular as possible? -* Can any singletons be avoided? -* Can any of the code be replaced with library functions? -* Are units of measurement used in the code consistent, both internally -and with the rest of the ecosystem? - -== *Error-Handling* - -* Are all data inputs and outputs checked (for the correct type, length, -format, and range) and encoded? -* Where third-party utilities are used, are returning errors being -caught? -* Are invalid parameter values handled? -* Are any Throwable/Exceptions passed to the JVMStabilityInspector? -* Are errors well-documented? Does the error message tell the user how -to proceed? -* Do exceptions propagate to the appropriate level in the code? - -== *Documentation* - -* Do comments exist and describe the intent of the code (the "why", not -the "how")? -* Are javadocs added where appropriate? -* Is any unusual behavior or edge-case handling described? -* Are data structures and units of measurement explained? -* Is there any incomplete code? If so, should it be removed or flagged -with a suitable marker like ‘TODO’? -* Does the code self-document via clear naming, abstractions, and flow -control? -* Have NEWS.txt, the cql3 docs, and the native protocol spec been -updated if needed? -* Is the ticket tagged with "client-impacting" and "doc-impacting", -where appropriate? -* Has lib/licences been updated for third-party libs? Are they Apache -License compatible? -* Is the Component on the JIRA ticket set appropriately? - -== *Testing* - -* Is the code testable? i.e. don’t add too many or hide dependencies, -unable to initialize objects, test frameworks can use methods etc. -* Do tests exist and are they comprehensive? -* Do unit tests actually test that the code is performing the intended -functionality? -* Could any test code use common functionality (e.g. ccm, dtest, or -CqlTester methods) or abstract it there for reuse? -* If the code may be affected by multi-node clusters, are there dtests? -* If the code may take a long time to test properly, are there CVH -tests? -* Is the test passing on CI for all affected branches (up to trunk, if -applicable)? Are there any regressions? -* If patch affects read/write path, did we test for performance -regressions w/multiple workloads? -* If adding a new feature, were tests added and performed confirming it -meets the expected SLA/use-case requirements for the feature? - -== *Logging* - -* Are logging statements logged at the correct level? -* Are there logs in the critical path that could affect performance? -* Is there any log that could be added to communicate status or -troubleshoot potential problems in this feature? -* Can any unnecessary logging statement be removed? diff --git a/doc/modules/cassandra/pages/development/ide.adoc b/doc/modules/cassandra/pages/development/ide.adoc deleted file mode 100644 index 5a48cbfbe059..000000000000 --- a/doc/modules/cassandra/pages/development/ide.adoc +++ /dev/null @@ -1,234 +0,0 @@ -= Building and IDE Integration - -== Building From Source - -Getting started with Cassandra and IntelliJ IDEA or Eclipse is simple, -once you manage to build Cassandra from source using -http://www.oracle.com/technetwork/java/javase/downloads/index.html[Java -8], https://git-scm.com/[Git] and http://ant.apache.org/[Ant]. - -The source code for Cassandra is shared through the central Apache Git -repository and organized by different branches. You can access the code -for the current development branch through git as follows: - -.... -git clone https://gitbox.apache.org/repos/asf/cassandra.git cassandra-trunk -.... - -Other branches will point to different versions of Cassandra. Switching -to a different branch requires checking out the branch by its name: - -.... -git checkout cassandra-3.0 -.... - -You can get a list of available branches with `git branch`. - -Finally build Cassandra using ant: - -.... -ant -.... - -This may take a significant amount of time depending on whether -artifacts have to be downloaded and the number of classes that need to -be compiled. - -[TIP] -.Hint -==== -You can setup multiple working trees for different Cassandra versions -from the same repository using -https://git-scm.com/docs/git-worktree[git-worktree]. -==== - -== Setting up Cassandra in IntelliJ IDEA - -https://www.jetbrains.com/idea/[IntelliJ IDEA] by JetBrains is one of -the most popular IDEs for Cassandra and Java development in general. The -Community Edition is provided as a free download with all features -needed to get started developing Cassandra. - -=== Setup Cassandra as a Project (C* 2.1 and newer) - -Since 2.1.5, there is a new ant target: `generate-idea-files`. Please -see our https://wiki.apache.org/cassandra/RunningCassandraInIDEA[wiki] -for instructions for older Cassandra versions. - -Please clone and build Cassandra as described above and execute the -following steps: - -[arabic] -. Once Cassandra is built, generate the IDEA files using ant: - -.... -ant generate-idea-files -.... - -[arabic, start=2] -. Start IDEA -. Open the IDEA project from the checked out Cassandra directory using -the menu item Open in IDEA's File menu - -The project generated by the ant task `generate-idea-files` contains -nearly everything you need to debug Cassandra and execute unit tests. - -____ -* Run/debug defaults for JUnit -* Run/debug configuration for Cassandra daemon -* License header for Java source files -* Cassandra code style -* Inspections -____ - -[verse] --- - --- - -== Opening Cassandra in Apache NetBeans - -https://netbeans.apache.org/[Apache NetBeans] is the elder of the open -sourced java IDEs, and can be used for Cassandra development. There is -no project setup or generation required to open Cassandra in NetBeans. - -=== Open Cassandra as a Project (C* 4.0 and newer) - -Please clone and build Cassandra as described above and execute the -following steps: - -[arabic] -. Start Apache NetBeans -. Open the NetBeans project from the [.title-ref]#ide/# folder of the -checked out Cassandra directory using the menu item "Open Project…" in -NetBeans' File menu - -The project opened supports building, running, debugging, and profiling -Cassandra from within the IDE. These actions delegate to the ant -[.title-ref]#build.xml# script. - -____ -* Build/Run/Debug Project is available via the Run/Debug menus, or the -project context menu. -* Profile Project is available via the Profile menu. In the opened -Profiler tab, click the green "Profile" button. -* Cassandra's code style is honored in -[.title-ref]#ide/nbproject/project.properties# -____ - -The [.title-ref]#JAVA8_HOME# system variable must be set in the -environment that NetBeans starts in for the Run/Debug/Profile ant -targets to execute. - -[verse] --- - --- - -== Setting up Cassandra in Eclipse - -Eclipse is a popular open source IDE that can be used for Cassandra -development. Various Eclipse environments are available from the -https://www.eclipse.org/downloads/eclipse-packages/[download page]. The -following guide was created with "Eclipse IDE for Java Developers". - -These instructions were tested on Ubuntu 16.04 with Eclipse Neon (4.6) -using Cassandra 2.1, 2.2 and 3.x. - -=== Project Settings - -*It is important that you generate the Eclipse files with Ant before -trying to set up the Eclipse project.* - -____ -* Clone and build Cassandra as described above. -* Run `ant generate-eclipse-files` to create the Eclipse settings. -* Start Eclipse. -* Select -`File->Import->Existing Projects into Workspace->Select git directory`. -* Make sure "cassandra-trunk" is recognized and selected as a project -(assuming you checked the code out into the folder cassandra-trunk as -described above). -* Confirm "Finish" to have your project imported. -____ - -You should now be able to find the project as part of the "Package -Explorer" or "Project Explorer" without having Eclipse complain about -any errors after building the project automatically. - -=== Unit Tests - -Unit tests can be run from Eclipse by simply right-clicking the class -file or method and selecting `Run As->JUnit Test`. Tests can be debugged -this way as well by defining breakpoints (double-click line number) and -selecting `Debug As->JUnit Test`. - -Alternatively all unit tests can be run from the command line as -described in `testing` - -=== Debugging Cassandra Using Eclipse - -There are two ways how to start and debug a local Cassandra instance -with Eclipse. You can either start Cassandra just as you normally would -by using the `./bin/cassandra` script and connect to the JVM through -https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/introclientissues005.html[remotely] -from Eclipse or start Cassandra from Eclipse right away. - -==== Starting Cassandra From Command Line - -____ -* Set environment variable to define remote debugging options for the -JVM: -`export JVM_EXTRA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1414"` -* Start Cassandra by executing the `./bin/cassandra` -____ - -Afterwards you should be able to connect to the running Cassandra -process through the following steps: - -From the menu, select `Run->Debug Configurations..` - -image::eclipse_debug0.png[image] - -Create new remote application - -image::eclipse_debug1.png[image] - -Configure connection settings by specifying a name and port 1414 - -image::eclipse_debug2.png[image] - -Afterwards confirm "Debug" to connect to the JVM and start debugging -Cassandra! - -==== Starting Cassandra From Eclipse - -Cassandra can also be started directly from Eclipse if you don't want to -use the command line. - -From the menu, select `Run->Run Configurations..` - -image::eclipse_debug3.png[image] - -Create new application - -image::eclipse_debug4.png[image] - -Specify name, project and main class -`org.apache.cassandra.service.CassandraDaemon` - -image::eclipse_debug5.png[image] - -Configure additional JVM specific parameters that will start Cassandra -with some of the settings created by the regular startup script. Change -heap related values as needed. - -.... --Xms1024M -Xmx1024M -Xmn220M -Xss256k -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCondCardMark -javaagent:./lib/jamm-0.3.0.jar -Djava.net.preferIPv4Stack=true -.... - -image::eclipse_debug6.png[image] - -Now just confirm "Debug" and you should see the output of Cassandra -starting up in the Eclipse console and should be able to set breakpoints -and start debugging! diff --git a/doc/modules/cassandra/pages/development/images/docs_commit.png b/doc/modules/cassandra/pages/development/images/docs_commit.png deleted file mode 100644 index d90d96a88ba55b758f377519b25a956fbbe23bc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104667 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 diff --git a/doc/modules/cassandra/pages/development/images/docs_create_branch.png b/doc/modules/cassandra/pages/development/images/docs_create_branch.png deleted file mode 100644 index a04cb54f34d6079728cfcb2eb4a4fca365b99648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181860 zcmeFYWmp_tvn~uI1b25Q1b5e9!QI`0>);v!1b27W;BEs1cMa|?gF6gz$n(5s?|rWC zPxk+BuAb?h)vK1&y{fvZR&}VNyd)AlK0E{j1d`MjF=Yq{m}3YCC|TGKZzYq~28s|6 zh`5%bqKZ;mX}$nbEhW_9i*HCzs;;}Uq~1K6KP1&lxK zucW5qLG0LSL5X}QgAk?`(!kw3>x&3iFpTqrfMU);q!G^Q8%J~h5gZIbWAePdyUJjJ zwALUApLNjPx)88Lid9@6HAwsI$<(nwe}_OF zGR`3H!#B>L>`OvVFM+iW@qr*!(V{nkhj7}uALVz2kD&PYZ6R)A^MY&*x`u!+vCqGm zU`r}BRSR`Qg^W}Fkx_nl-IzLZz_doWzlI$rG{(oB=R4wD`)eKHs}3uhmCz(E51(bf> zi`Wg)s@95YQ6;+_l#7Iqc{Fxh$!LyYK_;w>u1a{K2*<$42;vpXKhz-lyEqPKy zw1W5wYnfR?!Q&BY(xKPl;4cOGCLnJD9VGK$a`wJuQ%Tv58~O7$u5(CP((ep#rvB_* z)+8ka-#QB@e7`{ll0rN9Ka_kOrBG+>4xacDgYps>g5cEu+)kOV8v}D=(BCj!%=0BF zVo!>H`j<)wo1@DLlG`uQjhT0x)+=ak_*W*w(PPrrRFA0dLVU&I9f@rQdEar8Z9Eg` zF(0=u^ReK(XdoKVUukp zA#b1e+tB}{2Qvu0nz+u2Fz-diDB6KM$LWFgBR^ui3 zXBwh#Lm&s_=OD9xuiJoXhT`p#b0DdV6g-DQ{O)FmD}svtS@a+TKQ9uO^lJ#mR!B2h z#}`<1|6YpFFYw)xVuMhoJj#KX6lQ~V1?Uf0JfRuljAWUEdId0tlKK?ciim}I!zI*K zA@UMLN($__k)O@;K3Q<4MOO;X=M`E&d%{+TPvmJ#rdx15LJ@UCP=~WH6O9rAdfRK5 z=^ z{+6pTQcdWB)G-xu>=#OoIJ}`mObO#yCn@NHiUQFBwgN_FlEZgeN#$~l)Zkc*LGMde zC%6aF2lkfmrwD%fd{PtAZF&sqp4ilnb@E@UWCKPyQUz0u!pQqVwxmPz3Y3zRr9aIk zTqVFHaMjkiFYzon-q{**wMq1s%*T<}GsUKvqkR8=?MUGXAr3qTbYmm61wE@>GwOl*I%keo~&#sg`?PeIZ;34zeRm9Z<22tuda->t3PF3 z#a|8f#1xPOngZoK$2-Ne7K170Y@9nY;R%FAJg*0oyeb+o{E&=4tz66Uq8X`k$*X^v{5qKpao52SdRZ z!63nt4(X1m4zrHvC+BD7r?RIH&nHj&U@mA>sPFGM->)G5Ml^*{|A72~=RE_W6)iWXnLjSNu^uo2n%p!VOX5Xqmx7?k{lF$^V z53z_WkQ|TV$9-TNrnA!f{cN#qq2vsR@E(mw8BV#Y5v=K}S#^xx#_rb()rj8joBtSt zZj63Qg(!EI+2P^2j@X6=&1N^op2p+0SEzMV$NDuhjX@}#1FT6-#=?1FxMi-6`|~?T z0%l4*gJsOg*jl&muZs0rGjfhgrLZC8Q%x5T!Zw*Q_17iV#T$pTk+Rq>->>pdN8syHU_y7!{qT-{os*nQ*1B zrh`}E$Z+P*bG3H0lb^Qg_Il3^F)HpYgS90E2UqyFX(K{9&$^FSgG)ONC!pi`6HNu( z2?Iat0Pv4@ePMkMeL#X@yYkiE71id$lfA`sro@G$#Ce;Ug+|Y1@JYsr9v{D}>e=rVt@^7O#D}M0GYKO$Q00O_scoG#pX2Q5QK&2UcF7uf{)jJw7oWG-IqTHvjMr;*|1pTb zpQ~~O5xD3<_c)ii%x34dzPaMz%e8&_)63)T#~G7{u)E^D;-=9MMWiHFXZn-=jP1Hl z*+6meiQ~>T7Hl2_>viRJ z`hNGKlmEqvAcEl7i^`kh(sPWUfeXC8)L}~uPvUvac(r;C?nbd9LH2fjT6p|)J5#sG zlP#4k)0yIJd5`~e^XtprV8}NrQ>iE@TpJ4~R*0&*cf#Sp<}mKj`GZnt2IwLMZW3@% zuW&MF7U(rFhMh1FQ!)^+{^kip)p)|PLBRWaqFqQug7gbcTAm@!xoJ&R_i!?ATs)6_ zIEYfnZ%o~>v709p6b84SYuz9%hLhI7y`KZkpY-AY<7&Xf4aonG)ZW;P(cRYJtu_P%zdP^SrLCE> z5vjYajU9m3U4ZPfAM4?_~Ow zS6NKrKjd%!1jsF%ogH|YnB3gl7~R+y?VZe-Sa^7Nn3!3aSXmj~YA^si?3|6<8SDTQ z|2Fb}+YvJZm^fKFI9uA=k^X7d$k^V+S%94UPe=dt`FEUV?w0@ElO5nc(|VgA)1Ny` zER4)d|JC*zDgU2RUPViHGaF4YOItHLz*`@Jtjw(3{QnUAe{TJEm;ZxQ>%U1kxc?u@ z|8eI(l>AJ8X7E2|^e?;qDShLYAUr?QfAL-r{>I*_;|&f%OECr2w=>iqY~GNge*2;M z_xyGZDfB)?F7@r6Focwth^jl}aVA2B{Osd^pWY8$f|dem^cFe_JPu5iG~I4IvmN#^ zDP*$)ZpOYZc0-DcLls}+(wyOmt`uS^h%$zGl<>^LdL5Z#Wm1fAF`ly<)|Z#StKdwx zugq1CClkSLC%}1Izje2{C2N5u8Q;Wr{9nGk|NDcH#$Se}x-+MJ5f?57;%^V!_cYb} zDE|M8ex&^&pl=HyGUej_x|5hUiYKJMA5@I+C)Av-4$Pc7DRffEzddrgvO52|@>{bs z&`_8Q$xzOmQc#q_e|umqTygz%<+o-Fg}*_8mA{QsOZ_jfgz|d%@b|!f$-#tGG&F#p zT%`P4)Zd^`G@MxfUjPV~00jwuECb1#PWiv!G5qlZ!QTT&>aR>H?Cv$CNd{T;XbPNta1FQ)sOd4mUr*uQ6=a4ejz(-0Lb zLK`90aB@##A}w~y(*q-_G8EXr_W>FPndH~u4D>#@MN8%L0@>ipAiw&tP&2=s0?({NC=vC-w^rRrTxZ3ajG2t)@=U7=zN|QeXZ*T4GktM zj(rBdLD=I&f+q?|Ku+Mz{O=M8k!KI^uolbTj`gVnmgd)U$Gc#}T%W}AVX|#vA=CG_ z#Gps~*~-rkP8v@gzC_;Ie=Fyt{#VkZXFHz=xv%St#E5CtZ^kCXMzJ(77M_bJN>p{~9lcSaev97IubXrfCxNHo3p1Q)GWre0=Bd z9L&h8J7#}Bz3>F#lA%INBfr>}m<8Lvr^`dj>00yGDDihZpl148SRmkZ3*LX0W0XSx zhhGQx+WkEpX5`!B2D$w+QiLd%N9tb-`35-^s+E(a_JToy5T$GSU(@ASyy+9S4J<1| z!q%aYzgI*!pZ+YCneG?zXR?~*zo!$Y5cUVYt5SToJt?P8{nyI4`3qcNnr<5QEzTiI z=<46o(cr)7eIoZDeB5BWOV+=Y_?RwnY0}?2)AiMzU;MrtbN)4*@YLJ0?5vCKcNe#F zeDdEvG#Qnla;cMxf}X`6MU9*Oo-Rz{8{d**%pgOx#42F{!Fr0b5{%a-NpP(sPqZDsX%P_gL z_JRJbjT6&V)%g;}c6#y1ikHsRvJ;1}z?)9~?@IQML*sV3PEis`Jg1XUN0a#@_TT^8Uk>ygnC5P_W2(z z>d*m4lRM$2)3jZOWI)DrRzP+?WhO+9^Bo;ojm7}k*4{pd8p)o2UC;RW-#H<_=k&ed zc)7UfbU2?hqL6f1q-ec6<(oQ6N+*&&|G#1r_`yHESbj5~Bik4pr6&=5H2*We%Xleo z1&duCG15K+Na`P+{vRFd_?qSLnRBqw_x0VJ&n?djxD$A;*{tijSjY|7qaO~*(bp2m zVx(ctx~?5zWP5+-w(7xWSFSU#Al5dBRt^3StG{(^W=9*#Yqzpw|E^Hcd4CJN0N(Z$ zCA~@>AQp){QezTkT6q5t^um@HirtT$op)rM-Ys}<1_eT8r4muHfp4lo({JE2405il zCT^Zili1xjk#M+|kZk)uX7GMumyXO@&*MaAy{%~E7|PADo!0~)HtB&F{pnwp(;z{~ ztiQqt>ffc79=0tvh(uT3rBz-8{!y@DqJN~%>L2MVboJOha{2M0{6pY$OrBA zl`<)+mTZrQR--H=#JaM-;ZngijEL8}x4Pr?aDz+%TQtVc<;LnDeF0(ir~WQ*{B17Z z!iCqOZte#@@+lR0vh_NLig|n|^Izxj=fW`~y-K&A0{h!Fb6ir3D!#hRsgL>rSnRB( zQJ-I~H_kF*Koc7<8d1x56i&N{$L~{!Fzyx6scQ>ESOZ!>oJb2Q;DcR z>5=;zqu;*-zZ&n2AV4J%Ke>~zH(z{M=C2=Z>gx{QPZ7Q?9ywn`;VD^T$7iWHO0$~a zi`(X9GQis%NwfRIwGB66;ZKor+0V4DFZR)gmY^`4&D?;O(Q`&>+WnV6lk*nyVSLf( zf0q%7XD3=G@h7^ZO$DJ~FTRyf|=V&)oM%lRS>JG&)R z+N5yw<75Vv{t&&YmECL}zy~3j(aoy5M!dQEVOC{1&rJ>W{(w6-jz9)qB%IyP`kXJo zM~w1EQ?}c^UFjj|5`6|JxxBo|mvI_hjZe+Pw|0x)8h#4(Yb@6p{Z{V4x0M=W0>A8;oQ>P;z}(Sv=q77O0GDRH z_mN98j%^4>x#sm7ZCrG5&?xzXJv~}*-(NNv-fsh9PZ;qZgjpq=OVuL6Gy~uJ61-1H z+^J(4)wJ2OQuK}@Kk+_p7Y@%7SKakbV{z2(AYXb z!fqt;JqVTuY{^MxYp2W6RXM! zO8c-Q_@C!K%nvP*vKPaQo9u794e?6l)WfzjnpB~;!tf^OJW0OXe=|rDPI@>oqd$8H z9``j118nL>E;HY{vzkVm2OLukwE>S4H`DqL=2~!!O^&cFN7X=qW-@Hmr{S6XyqhV3 zavhb9n5}(o65z+6vlGnVp0ftoU-JmD+$O-g3vhIHc*@f0%#$plJ3p4>tYx3YXm+Bo zC_K|A>Mt92qJ~H1>=(2)*b6_aJA1MZ+%`#fNct-?D}73;&#ikE-|$#}ydb~}sN))5 za`3@+eYT-LLRH_CW)F{$NOz5e6@o!vH9Noi1p_k6zQm=~RU-Z<4~b-F7qoCngsODW z^g{7q%TMxV7_OWAF+{(X>Z*6&pqUg4!=3U;XVm<(R_)n}*zMn2pqkF7jwHw#@VUc3 z4M6~~mFn)1aJ%Eu32Fy0u{GgN!1&7cY0W_~kk6J#OS{;-mp zB-beUl8cnG(n*4C*8n_e)vRONYv+ZpaT!bh1}VL;wp8QI$t#%p^-WFI?BBD?9^vis zxcKbZO5EvSTvR+*p_)fl--nA^pbd(FCqIUC08o*&t$*?$8oaPg#in!cO-!KqZ>L^v zB_Cle1UDT;dq~9=4I@Nl2clVg)|$!+fLl}LQTRgI3tRGFJ{-=p?F9Gp^7qDoEHM3M zm_V`SB(ZDl2;Bp8OQhLo%;Dq|O+ajL^t(eoq4!ku!ATrrlz1h>U+9h)$KlC#nhFm< zEf@lVfA$*f15Y6JPBw9-XZ3hb!^UHeicHLjug36&M&$NX--ndRy}zv!Gn~M2X45{g z0fQzCM_YUP6Bz@jDRK*EbiS*HyoGZ7m8q)Fir;N*TCVc z1CI37(*yEmxgRT(sMdTh&0h9hu%sa%85!!!Y?92iE=E=)Yad^X&5oo}iD#kRSkOlj z)t44khN-*BDn${Qoq?q=$c*ZkLMzI1{rC{fY2y7VM$b~=_+67=LCsa9(vi50G-VMM zP8R~o>dbt)zD04{HD^2Rr?uhlYD$&CxH#=S7^?{{rjiTJ5Jw%_l^R|oqF2^sod$!v zuY}l4#KG7>9ZUNrC+)rmTq7QtiokvDb}nk<+3>;@(0pC^<>##9pb`q%Tl5}j?!16`)j8VxwHtuiWO@pG;FHyF5l!?j}Vi}iKQ}^o+#xVG)!hRN#krebe=0notp~(kDn-duj+nZG82>HbMB$$ z)%9w}%bvY>CpNHJeF9Upm1hl1P9#SNecO_p?m z@6Rn*Y!1vhZD=k5CpwY6N-}!=s3o-U6BCb^S)vk}rWb;ug~#N6WAy*VhTK}(--+^j zWOfJtoZqT@^)^zSk(fiv0DJb@mK>)6ZOxsAKcxwK~1-W#}&Ptw<4q5VBFfo|{SK z2+crx=OcsTfrqu0ciS;hdBY0EMJcRlKbD7My-6ypkHjN_PwTBWss`aBvdr8)!ll=E z>`Q+$SjPqdyk~5beQIHJ_M7RQ1O?gxQ(@N{xTiTLwC8S)w3 zD>t>bS%?myQZBvj{LYL-`aVhG2f^5gX#n$NY^Mrl>*&dBdtK(>H%b^L!4yC&)K_j=cVC4lOy*2M|?ggm-*IcUlPEE4lFD zOeR!h*p=nW1CXe-OYrmiTNN4FY7L0!{f&cCsDx70*<+yMy4xo;QMk$rU;9pgp#35G zn+tT-`26io!#864qdabAtPFbCMM|t|5R~gpjd2kC!P12tyPdm9=njQ{mL|y^|3mlD zjqu|Ea@NfHp7~(JFY!Jv^btwKp3hYQxx-(+;D<0)Sm9w2J=+oKr?!2mYex}%m108! z$eo`MYI0x%tgr1cprS1z<&&IQG%rkGjJ#->^woBD0n*pF1Smh>u>BK5L76oOn`8Ru z|4h=_i|+^;NvMIvXs8XMQd_lW(xN`S==`;7luS`-{~gx&2vc45bl*5vGbnm~j%~Ir z#JYMY&AOUGhvnr(U$X>Z#UAe?_O_#b_{9^$p#^poQ+1iq^m6!QU5f(mo?<^qEwfK)c%Kyd^2 zHaSsz{LymDNl5f3<+r|lG{>Oz{(h{EVs_|TV)Wb_4_AaZ@OU5N>`&U07(pOT*sBJv zc69$*j4&ybmQLru6BiDJ&})5cg>ld&F6q?|CzmP`^NAN)>|_8E-D81}(6JtODTry@ z3(359OHxlGDP=rZvxPDwFnZAutujnvyO*-^PKtS#ob)hjfv;7 zj?3_==ee4)Yw5!SA4|QsE}8lx=ECw5y?f}Jt4D}IQ`yx)ne-qc(9MJ2G@F&sS=`MR z^HR0gyb4rZX!GPWeu?{fl+=k9x-y=49$dk&iDD90^HK=2T6xyjwgU*oy-#X{r0y&7 ztJg~Cl%0LuQ-JT#3GCgU$D6>LVuVv6v2=aO;xP>rhep4(spdOQb%%7VCYqip}2|x;XQ71l{m^YWLOo?L^;gm(gxMn)NJiw^X;SpFbIn z-jCDyxHK7Ez#3aUa5i9InmMP$QuK?kKr<%8cIi4HONI# zPM2!j^0W6mg)Dy+<4*J5YuBzu(Pw2P0nL51`bGVl}UR<(HYQ1}=* z;Y}|a((NwSl|ZWgXdKF+&@fKzE`GL7s#-%h#pM(23VN49P@LYBk+dju{<$Me#uBrx-ySvAHM#ZZfT5 z8sx}4R1bh$dU4X@?TJ_;e_h#6`E6}R|MqLgdCsYW(e)4(zW*`!2 zr4|_!Zzm;Wa_U`k{m_THpfhslB8*wFMTHn@p9Ptb(D1^5%@W!w9-+Bt-=w*yvyX;# zYYGe$s3GRr5-2J>6(}mAv3s5=ZZ;dU7i@w(Hb}y~txW}Nw8@&poS+kVFbkrcMDw9lI+Z2Etn$O2tb2wtl{6qdw9~uv2 z-&~4!G(R_BY+w}M%CY&rw*j)RFgTX~_bgDAb|&pit#AfP%Y;blHVaO!b<|EDE37 z=9oC1#Nw^3ooMmGEi8t=pAw3YNSi1uBSXp6yZl1;-FvkIBEH>mGr7*OR&f*pT z>+)#X?N?L#nyk6##p(Yv_a!f)-H_MmE0uArn~x%*KX9zA%6e4otmCpny94huJlq*r z<;h3KND|J^sJ&MMVdodF-!xZaJgTK_Iis7q*9Jdpo##KwCY&i`@PABJTDOUB5xbda z@U>WFoVL%-+n6L?B>B`8YM*4h70joHqS8jBjIIM&Y(`wBsFTp_V{-0)*0`BMuRE+! zWnM0>3zpW2@wqNIPS*{+1@h(n06)KUArE=ALKr3S8q(3n-3%uaoIgiBi=2RH_6HWH zaT*Zm{3^=BuLWqH>3BLw+FXg_R*Xv4s&l=nWD^t3834El9~s4pVucVdq@+TWy%d$r z19uqgKejh{cUtMGba>jbheU{pVF8U8^vYY-+9!6kt>?s_i(*SQe@D$x##1V$y?^t~ zMT7MDudmQ9Zb3`yf5N`10RC@du9 zPamD4NF=Ei<7rij5EIjVO?Qj|~1Xb)z$1tlj8L2D7f>A|QOHcT zjq)v2&scEL2@I=#?b+iy*@8XsdVEJk-GdAqHpDy@JEM}Gt=I1@RqgJwBUH3fbymQ8 zale3_2E~qSCI%~&A%|&Zx|a!V2`HNV8`oNJuxvnt5k7Z!vqc?yqeVZihO$h|LEjlq zQ?sFtc5k;MFak=I_3>Sa&ojVf=U-o$y$m5-R`_wlV!153GBq6XP$$Am{1Vqh8MY)0 zF0a?D28Z=%beZNk1#|?{P0qs9&^d_g9!UQ0CYm6oA61gzCk^I_4rYX4@tjJML@`BW z;F22pyIL%53CJ%RcED zdR!86s8`C5{(kz5PUFpVt>uWc%N;(;oTl4xa+vQru=*g`{ z(E|V#AN}B%`t{RsQhQklp(W^Ty0vWp3~9$&C7Y@eZd zv@Cm=9f5RFGB#)WUEuKQqh>#(tlK(`LgV}8%H3!VjTzTxmPa%I$;}WKc`JeO)ts?N zkxi>sRJAA3`Q-sIO{WP*+($+iprO{)AUWV@L4U0;57bDUFKb*gp7ym@X=b@WbzAUe z*F}#;cy6nuHs_{gh$R_8)aH!xI@H#pW0VaYRtahme7pUCW55D;EctZfsIwVS+xzOe z?0WsGV$WV~Fz=p+WMJ1neWwwYC#!OOyf(xKvnW`pwmI?@Fs3uE@Xa{OniML*H_xt-DiVMZXg?S7mybTBjBl(Woe^6ZQUisrp$)$Q-b#6#$jySs5M zV3M*u|FvS)xJ^mR*%JsSRdQB;2rxy!mX+@*dxu;XNpB+=A^o{Pd`K8)Vc_P33D5^+ zx-h4N?DHc+{CKRxoKpZE*(7mP10iGYC++mBdB)>}%Fh147i4_mMP!y1P;8AT0iZ|Q$k&QQZbNs) zQ7L;MV}%R5$qr|2YfS63N<(L130{GG|BAi-m~9zAo9+7D=cG}T74z1zm695Q z4#)TbvQ7RmI{1+|S`Y5vYVzVO;!8f;z!~cz_IZS#UUwh+k|3zT2LlZj$$ceLqe^sl zCPf6x5D;eudN_Jbfrrd0k9xO{yf2!M3eHPkYKI?lb^F9 z_bZPlCgjAA`USEOe6zEjT{;O)5&F{H=uOTKqC8SkPO*h`@Zs%O&}OoZ_C~irX6~;2 z(%@(6Qo14?^v8izGo2*r?}7{qHRvY#y4DVMOD;LbE#MIbRkK!MAPp2)FI*+&DHqfR zYrP^<4q9HkJ2~c*J?5LSHp^!Aq;CBU_*ArjvoSkO{wKZQ;ZJ(Om~vZr{kW63$*3od zzt^sGqGHDi)|!qqf$ebk6{1YC45K5bl!~LF1de%;1C;IpZb7^GI9r zojp5dldWiMYLtaF0&;qUOos#Rl`(T{#2bB0$~3n}_+vM+K3+D3@IBpQ8UV;k78$?e zXABKQF{EFd+$|c<#zxmB(r&l5jycNI!B(LTXwal22)e$HC;5WQilk>Z7j&D&`@6(O z2o^*jy1Xv^D`j>Zfyp`rO;#`FJ!sDC*Xiv2$U@;Qfq4=B zNbc*wP{b?d0(+9XvJE^1?1C-W1B(w!LoHJ&* zkHsd+O?#)072P?;u*aSHAsuXU1ZSW|wgAQ*nyKcJ2_#M^F#0S5RIKrY*7wUnPehVd z=5s!vNIO~4I7tNT3@i72gHm#bNzCM&4MSf`_p{30fViZv7G>r0wGbq@f}ivDDWDyv zEqY6P&ubXwO6$^bnYR*3z(Ctyim2Satc;7bUnYfN6(P@3NJ^ugmDfN{ch%44>}YKw z(@$yOYGWX8dabyo!wW~s@C@yeo6)@92SY)>uS2>XwiDeOg!PTH!Yr!kCEWy%naofPwoOa$1j9lx(;1~qEVHPo17A)ljXxGX|ts3r%KNS z<4(`@&Zu-=Zp+4v{p=2Uc*2X)0TPbpU7rd$hUV*o#t)-ltH)>*XVI(lG+{hEbq6me z)vGvGLM5=$QAl$Ub=D)uq*>RL{D_Tr;}BGiqzYTL zMYN}R0H+Yz)!-Plhpcx?qaPyxKSCT(%rLQDzu!JN5mvzrP$x-|qXAG7gTF8kw*eS# z?dD~e&)!@lz|Ri8#>&lI*W0od1^_pFcuT=uFmsyu0~7wh7%nxCnsjoQCGR-1X9IUZAC*Wm`mvlya=ygdXB@ zZP? z`U&CdY7l?Cwd*NsTF3lJxK7^9`^%g9!sDy;g-2Q#mRB~+Qm(|qh@67!lzslX#I!lM-m#p8>?|)%f+$a!R}2>oD|i zj^yHwT|9Ng_I|^xW_snsOAtUJR(D!VPoGvNT=$`&pA4{2j(L{}<2(E=%C7f(Ke46trR8Kr%M)g;~sqC(8?lT*UI>=igno5wcXbR#zM)mzjg zv|H44zDawH7pD26&h&4<8@bsmzQeLrKTUVZJN>eS!f=w0f`rs>;o(Z-juDiU>qzEa z0jM@I+E>yitu6(#H$}Bw8NY>%)ozLRf3E+|x5B+t#*gD|=6{!B2hBeKQE(wl z(knhMj)#Z#()MzeVtnas{0wgTnNMik<{~;e)}ZLXj-tVdk!&taP1PL^N#5>om^aeh z;K;{+YY6kZrIi)l>CQx@|MRH+8OGj#5Qm&@vq!=^naUZQyn?K3|3-&HRN_cNSK z6dkoNOKWYyts?p1YsbVe^QFIO#KBfwQB7qeIXR!;GQGKHr2J*JaM=TmnKlP#EdwUvtaXmQoKsyXSQNLtzxy|>vGN&EnlSH{I`Kxb?5 zqD7${$Qs0Ojj;fOpIXxS+4GnN161phG#>3ce7kb0b(v| zB_aaXav_o)a3JmD?MYrr!InYb-7+GZN<5;`BcqbAoGXFc0>Y3U!_u=HUDKmzoM*0< z9@^#0u@Ix?Kxunq>6ZHHeho#LC{yqHG86}GVh`Nn@{8e1y5{NX>#f^_ex8RUfsg=V zk6Alj!U7zU>4a26HW@LMhKGQ`BCZx;9Pr|!kJmQpSun+i+qg^C>HX6rN0wQ3#{N(d znf9TazL`s&mlYs-sL3k$QQ5^0@1x0g{EvMURpp7S5$4G8PHgXzmS5)Bj19Nb@{Prt z*FS!9cqJ4f`$_lbjR7LVe=n9V}p(oV=! zwIiGDqC1Ywx?7!Z2MyG?l`S-%c3wcQ_}_J;L{hIcoqfYbH0k}HeWz~Izp3>bL%}AC|CUjBu>PG!FW!5}sz=WhxtsX%nH(5_1t~`o z|4qW>nHf9UT|yV9jijfRh84l6%((a39IcdKCalP*w)xBQE+ev|J*Qt-U*x1f`hb)u9$;{WQmtX`N%B4X5Yh$MDvvx-5>BC9kyirm-^y*gSUfd&%Fs(i105 zaJ8U?Pd{9C=u;*sf+Fh9)!|Z-O=rH9y;ick324#E5DKaY@4?Fj(C+N>kS8+}f6tJlt1g|MCG6|VLLqcmah>c+hYlsM&i1uO`s{ic#k z_3W+~M(ONFjw=^bW3Ba_egW_TS$?oc58PNWMRm&wZ5L8=M?OMO!Y## z-waQ-H^WoT@VeL1xAG#9?kO}scu`Qpk^ah-j&{5+r{DI~(d7c?&|$b#g=3?_@Ke@nsJAT>40#=at@in&}|I4654L>UZ@{4~Cr+ z|JccSsu%T`$JU{CuHB#Fn5kwY<5a(KI4eAjtl~QNm3?eKq+m5wfOVq)zz&jKR2&{U zxw&s3J?k#_)T(X9K!{P8fKTYKY2TDrd^~>Xl()eYDJ#I)usnOksu*%EFSwN&nvsJ-Sr&aW_K!zC9kwmxO^5_>G zG5=}pVrhu&n~(LcQJ9Xn*5kg`?7fjbRZEP2U#*Y<j=}R(%t%L@=HhNysyaK^y)-e*6%bG9q#z`S(_Za z*pBlCu(OPgQ0qZ8)9~%1BqwQyoKT&ifFhzv@bHr^na*VcD&$Mz0H@)JMliiwf&-0c zplFbe=3`&JTm5^iUvbT2*~e^^0|h9YIp%tIvNm;^E9BUGr)|E^b!~>eWasmhS4pwS zPrq5h9X8;no`9`HKcsEwILM9=utFdXPA*p4#brYwpj?2+S3gpVe?U1NvMqq7CEd=B zhjKX)eYCB=%HYhfEx~~c(VzQhb&V6p>O$3u?q;5p^A)=G8Y5p0nHc883&D`^VuslV zZ;5(1$Zg5!>vgQ+P&hFDdGN=H2=Wb^`#h=CV=d4) z;pcMehxU#yTiiq|3L!0Dx}=3$s&pS;q@S#xC3;jeK0lF6R{L(Ajm&wL@2{WTGrhd+ zy8{3U8(D3qF{pZO+I5&0PcbyktF}r9R#AP~;fe#TlswlgN9#PlmHhy+o-Tx^Kq>FG zr?`MB^@7}W0A3RRk!rWCt+a^1KxsGa2AnC-QU$2X3IwP18v|bAqQd>(-%?dAue@c> z3Imcf3{fz}?+x)m;`i(dfeM?PkvLzLLr)*jm%zYM{`EuK!HelW;VyYY1G+8z2twAb z8ZfP{loI_F5gqMxB}WcPF@O<0LpCxVyV+SjJh)pU(>dqf`@d`EojFF z+qG-gQ}yiHRrR=xc0Xbq?cQn|@3aVa9FMm3>T16I^W8RLbQc1SDK1eEF@S5`KK!hl z?jWe*+_FB817Rq=pK@lS4%Z10EqI1H+&`d{cYIrfX>E-{ZFR_&))w%@(x`v!F~FCQ ziWPC~^D9j6(I?!a><4P_424+s+SN!K=fy?ysm9r@aoM`w&@@$__VTAnX|H^)cv2#} zlL4#N1o%vpYbBmkA*b(pUw#U+xo&Q+TfrUEuxz6^^z+$FF+fkjyU)I@XL8=QCkj@cKbF&te)K z^RwGI+6SduYU+a-G^y9`zj2dok?3tjl9}JZM0n*9uXDm#dtaRL?>-6kITnU4Ia2*p z4b>$+QT%lizu3wH&Ft#|PX0WKT57yH$KAc34>o6}JHCPA=2N0;eWy*|3K(0;zYdl% zaHHqexbOW$Cs^@?xufmCD~!9*hAo@^ z@fwN0+@top^ct%A%ms?G$Sl1Jn&KD-d}A>excC$k4pZFVb>sDf8Czd4JRZ2OkdPFE z9!+;3x)*TDg5yo#452TvM$zsPJ04rQfA1V|vb0)?S?~7D8}jNDwm=phBi~(Q9pio% z<%lb9+FvN(Iv60+c*?XJi?PODMTyIVAe~0XRTgi#|FDJMyh$z>ZZ$lEUb4NZF3mh; z<6xvmasWW8qMoMbdJobZto^b!6Z?pJ%%+~?kpwDEj6UXnFKW8Zo)dcz85G|W6KRQ? z(caheWjSp&9&J`PYKDiq;4=vcM16L`MHh|tVS9$Y(=d$?N)DtQ_G?n#VZsttJ7;ao{T&~iCi{rQ+tD~#;6`hlw`vG>PhesnMf=BA z2P3TWI57RcJ}ph5xoEOb!si_@t`Nl4EQ01WFUI};8U5|F`sbNJ*O2hYek2#GY;V8M zTKX7SdMKm5HIWuVO}f?|r5F$jr{?b7Whe3m;cn&whf4U#wOh zU^v%FE&^I}J?l%Y&sN|b-)ioysG(o?kw&Zx!@m+O1zw!4K@q8!TS4d=L?1^}ATB6u zfL@_d7r%82$bxJ3$mLqoOAk7&pa3%LmGpItS{saT7O`2g8>F6IcPCiceawa9cW|1K zkhnv@SoBS=#{w731w0zbZk)*j`!+9d+AeN4vTySq1uqATG?#FWHNtvBOLgz9`JpzW?0VL*b^o&N)Y2X%gZNN_gnh63F3sP*UXq-noLlkXol~T%-Qr+MC*Hk zmDUg$qPv=OVJNR< zV~?>wV(r;K^gnNTjLB(Ae^DY3n#=i)N^Ds^fBVE*eV=(!eUGClkvXM|cEmwlO~2_@ zef}WC_#>Set0(b)S6Xm0^Y7kZ2M*ePVlI!WWDJi(yi)Gb8U_JS96D zWI3HUbM=qJ!mHZRrpXg*yhWc1` zQj_O=p|e0AUAyVTfi}E@k!?P>LqaR!=jm{;$BPJ zZ}U?~itB1u%Q^wz2Q_%8W2oD0iI+KrYo%vi@SC?v2Dldj$yB#eq}e@+r@pesIQsgl z5-II)OfAJ*`t1Q|1|?QxvR1zOy;+itVjgS^hrOP*c;nqT9GADMuq6p+!^E{?fX1*<$2pb!IWpBAF?!OeYwqsnm z7vIfUzE7y}6ugmTdv1Z}B~=rVO)r$vr>cv)!Ywm(#3V}Irv-|2*1aJ9h}m`)(rWt* z2?19$R)tkMZ**e*Dx4pNWtzK#B5@Gw7YyHAylT*X=o%?#IT{=XIm zGo6Noo+vPBM2aJww@NL|?L;p$@w3O?{*Y~h7m$5+w69@MX&02tNQqBJxcp!@KlTnSebA)(OAEl zD0Q{VU_z{3jBRiwp-5kCBatg4sGIJp+y%-_Z}xWveAs8I!=&TWFO{YDYW~0_igwe? zeoMiDqJ?GKbL`tkFFWe98O#RksXNV4D+HvrcDbrHFRNyqAt8?&FIDo0EoW(5@p2ZR zK4n+jUrd1L8FaDH2BBOFQ~JPED;pVYA;c{;qeCA=aYV66HDdQ&X#Sp zm@TpZjyR#iB0-vur**Y0taqRCFC9D!an?087f&(g8zekFu6&Ju&hiP}`go77vHQLy z7hpdZ6^v;U~w?~a&ezozW-%WMwu)-QCzNkU8S_n6Zq+1B8!%V3mYl+oW6MPoZi*r zM&ZL@I{?<8^~WPSK!Dnt7~B^@#%!h=rRe{9SF$kTY>EE6G1}+f{V3RUwR#?JhhYIcf&JFX=(U#&wO)!E<1}fjgC9a3{J?YXFWU*W z>HE#)zK7w&v8A8Nk!M_hRaEJLyT+Ma-D?@ax%(~8g&zK>CcIz|fYi91jQb)+Q=_U( zlVMWQ8(U{Le^FvbR29|biB{-ycom<~@x5-$C~DjJ!>D^I6eKD&xW9Dd^+I0MqH><< zORmgE3#@%Ek4sE5a5EQyn_!NUH6qW(Ogrw}BElL1&b(L3@IYfJj$vBcTTt+4%UQgc z0c6nyiEpSIIf;zc>e(M!%OEp46S6Wg4l=viKr|o18PnqQTE5p=>hNV6+kW1oyJLMn z+#8^2XEbNKKQp2++sZ>aR0(GKfIe9+ z-8yg%Ts=n-`P|bKqr)e{2W0wmAhv9pDo&4~8lNu5iiudtt{)8v%$32T@lbk+Tw{^# zJlD;Xln#iG1GCp_b$QpQbe@^l=987$VP5jlKFx@=`ud?|+w0Okp&Az=^HlTtpVt`4 z7{7NyQ)WS3RnpmOE(l&uzLi+@n1kM>6ns9(H!|%&KnYLvHZ>*wG@e~{w1IhdcXKo^ zY;;DXcXuZ>e(|V%hOc%Tee;m3{+)Q%IAiT=D8Rf$x9*)Pq$|;v@Jmi`;NAR0S%4_( z^6lftHpa&nx1l{kOKAc@+3k{i0=bFgyIqm%bm01r*7KP~;n=Cd{1H|gwPhw5owKKP zyIC`>k;R1$s|yu!--8-wb?zJ@T!wYoFjfvJE~pERw4X$7>D?dPJ<;54FLt)f|2wB( z0wVUQ!=~NIoc8fy`yj9>hG9YK^u-q3wIYEC!q`$0w~2D0*@9U@Mw@r5Lz~ALs?o!i z5;e^>!J01w#4#k?2!AR`CmNS9$gJ8_j&FJO{y3D&d~rKkyE_i+2TFwGRF0oBgx~1Zs^k!_@slY1 zr>P9E7T?W~<)f|T9s!$<#&d%AtID;p?cO<|d=9~F)^1=aQ7;av`Fe$GW${De)2lU_ zZRJ)8g>PYRL7QEgnkoB|4rtNPshm6@UZfwn{9S>&9_5`;*Fv_oV^K+u6{o09YC%Ym zC&lm}NaVrZ0qu1TlDxxeKY(`7HLagl*?VLw(s10k3VFCVbMK+V^4rUSleQ^l8gf}1 zDz+X08upR2yw&@{zZwn1$+Fr?O}wk7?W6U<!@Z&jp-!>^f#(?))c^0jA908$jd2Z)aS@e8y*qsUf-3yctk zz74%`i>)xByY3bn=OfL>;k#5I7j%!{>h{9I=ANg1YKBTz4FA0Vt2A9$BMGY&Rn3?( zY1(ZM-|oX_NSqYEny^eB+OhNT#R^%go+?qiz@jSPfTLr!&MqUsmm-C&ZR(um{ikte zyB87f){}QjPKOpv?Hx*dJT#03;0o8x(lPDx${Pav6Lxju`z)WY^*&4!CEBg;VmAhr zTgj#e+%SAg+Iy}!*W`5i1hNIaRy@v(MJ%a`<>5tBs|-f^ONCy z#YZ}Nd6wA=3rj<^v8m1=hO#K9Y?#6w&#kR{XNdLja)9&6cR)W5ErIr`Oj`tJU zYRjfGb#foMbhRrrG!zv))CkyB`yc{vgV*f9r1>;iIq^r#{Oiwxep096xj2v zUTud%d$>h5>lC9gxL3@sFVnN#m9=zF$R3$+@Jp6hM{8qaw^0k`rb4vlOp(!c>1Rb=h+rxQU4 ztB5{7SgQhg3FSt6nMzS#&B>M9T?h2*1B_Je=$8n&a0Y()pMWa4v~e4P3Dh0w@Rznd zXNZ~wy6)cV8@&;)LV=W#iwG#GL?K1!+qn`w3V4GP`;~I~u&E30<9qM7t~(H>dDp*K zO&zplFlh)NJ)K-0wAY1e?=d&TOKGJA?WiGE%^r7=OiZ_}rsJmvkVy=$Wt<&CzL{#Z zg|NRoX%gY+c@pkbPpqbB)-HS&T~t(FnVM^B#xgJeQcGcOn9@gW((XX?Hr?ZX56!`R zUcIhrrKPTlUS45TIcla4YQU&N8FH9xaU-!g=$57c=xDQ4_01~gnRD|U}Ig3%XK zbsw?8;MWJo=6yP1*;X)EYzC8J!y*W6A#(T7B=j+Y8l^hh@|?1S4o;x<;Thp6MFRZL zYoarsjIz633&&|bcpCP!Jg8{RXz*>+vQi6=?6i!7N+i@sV6f=p)XG_X<| znXEuwG|x+4XLs(kz;OBMq7?42Y4c_}+lxKOorQoOkC_7`Ew^qbdx9e>V1O@J?`CCn zcH=5zoEXv3Lwx6M8qv!K_ZH8V-aBI=+E&L8!im#UyO<0f`r~sN7F8SGTXN@Jcqsfc z`i%{ei_Q7Hls8ycYQ<>(dM7w3RH*x^`W}?1=b^g=`HCW?easjw7?8q#eB6XKsT!eM z3PO3`E6vzpYf(Md`qT4iw^}kFO25On8TKfX4dG}7MP76{*S}1L4)`6;HV(GkrSY

    F2JAd)%bUhp<YR|+u$%ER@o52E#b5Zu}=-oKjj!Jj`mCkQ+P{^d&Rhcg0}k_<_Qf@PF?m$ z0vv1H&@A5^3wQ*_xl*yx8&!2Hih?VhQ5#YQs(P!F0qNC;3~UNgf-^eThnHs~M)HC$ z#`dFJ*2x(AI5nm-R_NHKhi2t-TxAbt?<;B*F(+A?V;`F+e4lSTNdV68UacKX$9lVR zpil6Nd+_f>9+gk55AE@ZRn>syB}q)LnzM~~=FTVjGh0I{0z$lxl!>M>1q+eOYbM4e zxgfkz;>Rsk+exc9f`!eQ1rIcnkQz`9$(r0O`1{!+xoSnqWBGUE z4qE%8Y;bXDop?(c+6`M|-j`>Q{hqsBM7mQ|?WUs*Y**mEDR-NnM#szPk-WBcsxl*< zXpa$C!P>HmkSaZc(68Uxk%{W**8Em8H?4}cs|FYkhXaLYz9O(ynGjwNN&zH}gHCYS`e z2S_7&zBGeb7L(NBN)~GIB8` z6F>TLcH`LZEi0>)b(N#?cYN>ZL7}7njI+5%ERLPv7~RdwW(P>-&{wT(okk~l{SwaoVgEZ z!~|sOpN!!WEg@XNc-^kGC5C5k)giyl(AiO)wMXwgL${+DvbCf6erDJ1?TgK&G zk#^t=+vSXftDEuQ4(2SnZ(rf)8q4^ld}80p8c%M%{FhJVYc+=arLbP;iPq5 z$ih`yY5=DS4Y9gPxX1!7;4Kqzsh&*NFj*(okL@^%4P?UDA~=m2=G@QbqwK2A?+QB7 zBNintUA-uA^y%ee$I{$nxHt3i(>t)9$z6A~=-qxaEfJ#|C^Nl&;sE!CHl{?05PNJV zitqOT2P_%px4yp!3(j)IMh~+eh0)5DcfA=>z3kp}P(|5w-3vBhV+ZyUV>j|l7+gT8 zQ&49Apiq-{-;PSURpFe;Q>yyA!J(rw#5K3CUYF(odhycz5Ff@$L>J0jb$`B+qk2N! z9zUZoh8(fv=a&(Klhg=zy>;T?N)`o*Cn-r3CeLJpX`e7frK0_r+L&2-_=R}J@IYR{ z{-RS+S!3oj9c3bPoCLQ+2D*HfWGifWPgL28gl0BIf{{H+<5}$#1^pT}JO*rzXbzNu z)*q6@jXL6_yf*_O?pJLsx?ARvQ(NZA^cOcgqsE!d7-k4}N$W!g#M&cq6kg3uFP?7U zcPSoih&6V6F>ma#{TwgX#|kN@ip+f^|v#x zSvgG&DpuhHM|yVJ%{686UfVWL@~fM)Zb>N4oCpfm2oJh(?43^O%;)r(rg^mCZTsOu z{XX;`N<(YV4k(>M)sJbde)!}FwW(Ehn7yCYJN&jnAem+T@}bPr_&v<{qu2!6&U=TS zP`A`So7`XeSJB5cTTR>Xj*{($4MSi>a%8LsHV+DogjqLigpHN9XgV*^0;?y1r^4}S zNh#Cs_Cl(w6{+EY$ z5l@DnaM@sVwOTMsbX0c?9(v8ICd*;VZ#$Iss6ccV`N);Qg_!4eQfhvqb#O^FFI9z- z91J^SPD#(}k){=BeU)$@0~Pggu7_It19plvcGuqqROnEaA9-o)xuiB)NsxjqVb<3z z`p75=IQPYDnRVSfCm5JaJRuU;DgO@nr|CtN%VyRM;rg6ledX+H%z6=EtsVm0>0cx^ z=X7sAL7edL0DeLEIzaLDd5)cqF>23xopnuHGJ9PiZ+1#vdH0!hMs=Nq^3Zpt0#TLO zprW1+*WP!HZw2lfY(&Zt1h?* zjX1E}OL!goZM1GHwjh~^)x`amt0$%CB~t*sOguARcR#MURn7U%=^QSTYw<#8DTqanN22k~;kHb70pT@E70%`W*#yAkOyB&+u@q+*ReXK#(Z z`3eJL0{q`?VeKkDFnv}ka0?smptE}(E86aE2FZmex9#zRd7t_7E^y7l+)Il5OC-4A z-?}NKx!IEJsrc@hT3ZbYCzvRwcr};4KXn&BI6(>T8d~Wk!P&u>kG{yUK!*KWD7#lq z!%zd(1*y=+&e)C}R&0l^5w08Y{ur8!(c?QKUHyd;9t3ZY8flAQp{4=0kuI@}wggdV z=Dhq?VfhValQ^9a&ZD-Ur!B8fN}ZQ(bI!7h*l48sRws()phjaKuVry7px4H!Y)@_A zIv|H7NLAdskfTTuLdgdM+s>I0d6r+L??5xhu#8?T0ImD}k_#>`Etu_5I(kM#V!{|; z$lOBz`tYbA=FdN>74Ti(C{a$ah&0V;YZ-4C>7CkG?`C78N6HVlcDzStAO=zeTu)bd zvc~l~&#@!I_hVd71Qub)4q_7*vwJ-S zUeo~AjBPp-IBEt;I9}2?ywHA~>@ddM#S2-{+U-Y%?D(YF#GxrB2yjG`7GOGvJ41@VR=o54e4zh3`zMI$8eh`w`=;qjN12US#+$J|Ur=7U| zvWP35Mg{OqJTCE+Eu9=?I^q-zxHu670?VaInNVWqYiQJ}8PHoKa^>P7kB5i5-xWMm zRM5SA^}Csy#$1%P zqQJwM*iX`~;kN3~IFLElIuN4EFydJaOwz_DDKik{D1Sf=XXQ`zXCZd|Br+^I*0y2b zudzt}1)HP9+qzILq(mJ_(#<-C{le44gF`A`CG%n{dldL#xVbw#CKQz_>(>8kWQxTR z+>wYg5S%k^8SD^=cH*+#{;sjKVcAfFvgjid=Dv7%yl*HS&)ww1k@K2{UDf0>GoG91 zv%vvCJD$PhKrzU4r^nm9&?1%pc=mG9I42T(D2qlgGkLQZTt+No4Y@maW*L0Q7A2um z7jZGrK(Y1yO>V(dti;+{{*;l+TfLXLccH)5xFX0>>Cugf zMHmUAo*+8o)iTr~8V?CCmdvfFY^F9m%uIMHF>|=Hsnyzpl(sEcJ5AKvQq@jlP?cv7~xkJP6~cDrV70(S!J*!A=dn0K2}9_D0a zysm2>Ze1H*1l=#07x3o}zWXXIw#l_ zde1gb6}P~@RT80AQGl9ABbpTFTSj{r^zG-tLMgLDvUX@s)BZ6~V{K3I@vjLu$bV13 zd9JAuN`Bol5_OV+n{Vx14+b~hd_k`%4Yl4vsC791ZZ(tR$&OYez&(grDh~H5_&kB5 z(SDez@T){!Re0muwgZ6P>%+I#KyA*9Cnql5DdX;ayTqoRHRZG#9(}twy6SGCYjDZq z>7>!IE+MZ6bd{CGU>eq^u> zXt3YjXt6KvE2=-UN9cOg>iNQ8EIe?uA6peg2M60ld?EQW0{X+ zsi;}=R4rvHX3ljQS39(FM$(bXt3}JcKxjl%9MYgn4_Vk>Buq2Uqg=@v$C7&xmzGG| zb%hbo22j!(s2!a+&x~HO_Mq5$RJ}cixS2nZP(*64#t!` zO6HbIvc^W`lTgr2!KGaCRW;KG`0b9%)kdoor->J3-%9rA-P;Fg76t|)p3xJCVIO1~ z*ENci+FqsIR#W$8RKxOQwH_4Vhzgl)I30 zwY!kh@W>Ilf)va95#qUueL=-h?r!y^XHWee zw!M=0p1!yR%IyI@e(*ML1=>REN^MN2J0e|WbhwnM&k29hxFZ{oAxu>fN&TV!Lso zgIS(PcnC!?!!hU=iCTpoZM9KDPFB_%DJS}BbriOa;_4W|rdKfoK_>XzFf<~Y z9~$L%&f4WT1BYt|nc}R=H1~EF&M?@5CO!{0eCp%3@=P92Tyzh^>nC!t41wQSNYP|V zlF6wvw!o8X-h(IC{N#6YPCXkz^On;2iHPNvcIG9;MNQ;xi}Tpbh=HKzjZunhfgN=! z^0S`oLSw5Zq|6*ca3FoZvp+v6reQg+`q;A8vNY;orZH7~a;K$K`?gm)B7-Xxmw#o$ z6UJDLHu#M%0zjRfst>Ts)Cd~ZN;-FBIc)7fUz6(pBE0=ee|;gRim7M!>rzSc@zD0_ z1f+vHr%pFKHAI~9EByC*cL=l8x)0Bs9F2_nAq#3@^SNgA+m;=2+pg}{Q+h@EV@|=D zHZ2IERj46!jjP?{*M9o0gROFsh7D5^lK)nEeP~sO*@t)?} zV77t^JQ01j64Y>fL+9%qC2MT5kktayS*`UJxajY-8#X96&@190{w|A znG5fba|?gfZu$PjD9*!K@%&B-5iWaPY~pZ;OeMQs!RfQO&79B4)$zdP;UWWF8V8QF zD-W+mdf@B}O74P-Nek7sN$O~I}E>q@c3F|g#Pi`C21$&n21s>{?R zFD02QCGZv%-*d>^ekI{O%yVi!@mkkemHj*Gtk@wIJ48ssBiQr zjj);KFHw#|<&x|3yeqJp=zbfM@B-y4hrIgFe515vhJ@v*Az=8%nv@{ZKKua|X3*Nl=qrg(s@+et*rN%=T6NW!+%|Y|r2kUo4*R3C>R;}A{-sRgIH*@COj4H0r zS^s$c_Ok$?J#Oma^jA2bp4jvgXff4EZQ0D^Ga&Pc1XM+$p#j%82e6&iip-kckg*@zh7h5xl$~emnQ0V=J7SWD-r{U1!?Vi)^-St7^zDj~RlA8@~U3YkDs$%h)5f zIjBnK+anU**He1n1eCqe9Zu5A@Ya)W$MA6g3g0cNk{n%vHdafee*5w!+UQx-F8*;E z{gl-4LcR1Bp>#o8Xz;^wxrzOw2i&xO>${f5E24qw(~-=D`KSBZb}z!_^srvSQO{@> zsb?C;@Yta!?X&{|f$EdDPuqRFdb~zO#n-Rgwj}uT*Mc}Ywa!quRd+v$Y?%aV@HoOd z} zp#=lqI|rd#MP&xjX-T1@(9NV(H&Tskyn7vY`8>Kqs zqDENHTH1Z`@AL`--QHod2&kB=4=b6f2LqwOP%O_I-GvK zFM3)(et95~E8c)@?kFhrq+_s|e~5R=uzuI&M~)0^v28tH zanrsie}d`d2oZ0X#mONc&;G1jOohoLBDncB)g7DhaOIa`T ztmxQIj>N>Ps%^20$5wuRTy3|T6~dyv6G{fLV{pRYm0OVxaY^qmJ=L=n>kvQX$?&wf z@EYWWyRFMFYkaY9X{0Zwm_DiAOROOO%b{ zMSM5pNVik%E_%+Ii$H}mT<0J-wofhSkqmHKPxtZ66)LNcKd}?{U_n~~Jrqs+b6$^v zBWgz9p4^MSJ$5MpQ|6ve=AJc6#KkQ~R8ZL1`F-SUGhDNo=WXZ&zxe)IhQsOC&B~A7 z@pbKBeXpCLlS>>R!`iG@&=gVCU-#+OeEp-4e+?s((>Ubu!-Kkw*0%H(qeNdAR^3J> zUhV#ei)koCV5|O;6GC7msi%+EL=z4~ zEM4uoVs&_oed-CvHyHF22uTo*z%o@!7O@-Ja-q%EKA<%qZsB(v0WZ%4iMR+-K;XnB zUP2t{JL0tID$K0x>k|D&PQnP(MsP1O@Uc$kIiQI&`NHP2c?9V7!0M&*?`L{R$&^{0J7__gg*vTEllQgo28HSuL zzXqq+pldIb|2mJq{s%t3-)H>S4j`fQd;lCQEWVOs_@|0j&}CnI@+7v2d3|(JZSG&Z zV3J0pLC|k+^8qkTzVP={oqj-+Li@mrn6VJ8vQxZbqWED?yZxD8xN~$^uTv9p9qMX^ zPcB_+6B-*(nSZPE4TQ@+6Z>;MJ~$lybsGO!{6BJpk!B$Y#Kl|*^P7;jKh}OdS`q(Qlby1A9XSeRTyiH z`00?z_{ZPo`S1PxFMpzvLckmYI=>P`L|Z#D|KG^;m+=4d8L=XvroMdcZUGSl^jg{f z-xhn8JzXdt{Qlo#D@Q~SbxDv1iG7^VGQjSP3wD-%|GnpUkk#@_(6CP>-~h; zCQH?k`7_bbX#O_7=*fUyYvuph=Kq7@gbaRT@*Ms*CU=bfOtcUMfBSH0ryxKOHn~~q zzijRwB!t8;=v@D%-qdwJNQv`@q6NYKZ53p7B+M&+TlPP!LXDdA=IyOOTQ^d_Bu8`7 zpNU4QLbAFw{oar`8#;8U;5UB$X%!*=&c8?$)^8Fu)c1#?W&bM_z|wyj<@l3TAmE`W ze?znKH#B7#{!lbnEZD{-HpxXv3t^*%KeSJ#-_UUn{@>84`u{F;JUv@(hi=uEA2b60 z%1AGsM zf}O}M#+V;)jqJb;aq*q(K+vCPg&Pg*<9u@Psv5nZo}(Z@S-+CL|A7mlrUJX*6?wL| zx31Ay8_Wj8Y=jtp(Y1dNbyo}=AwZ#Ko$IG)*Ss*tfd$4Qf8fBg(*8QUssCRbp4aVh z*HW!{_4bV%SGpI?!3oo!7!H_J)BLu$Q5f{9$`I;VK`vq}8WkaL?>2yF{&htF)X+r2 zbh}OK*x;bw$ZmJc80*D|y4{k%Ho+h09~_q7fXy;7KnU`-p0-YM>@`wEMFn$fYwMVR zCg05vqe{^Go(Y+dCrHX%&Hyx;%01j32M^^Y{RaRGs{C!aPTO{!J~y0R3a`CRouLSd zg>rq&ba$tdPa_ z;5Edm;*64zjrM)Ici7q4**spV?KcwmGsf@+`U$&8Asezptvn2${Y%go+x`6LH`C7b z6yf$ii=JQ~B@W)?$d=|Vv*Mo-s6_-O1LE7l5WGKeE#TWl4Rxm6tK(IiDzF|qif2L9DaInKo z?5iC%&iMxy`?tpZt8ffD1&-y>SpOu*fyuV1q8|jP#$C-r=Fg4{^%gA9x95*WFn3HpY-Qo4Z z1rM|921odC)6`X1u=DeV1V`#l?tPWmGasATQZJtinkaDc%5f4#yE8gdwt%YMy$-%^Dgo2&^51b;s z=lA4n)*(ejB@`V_r!oHnT#{obmBJ%k!KXn_-Nke~v!XIsdks-d?pQu#c!f@4|C|Qi zXV)h;zP1<5tN00;>6(`^Ex; zQq5qHZ!3#)>|XmXFCP>ul%iKzO3BJHSFVl2ZZ+$dk{pQwc3|#M4Ze54hHNw0RLlvO zW-Rz1|2HEpxM@L5BO(sp#SO`{b?^JO|RlzNmTAp`2xYDXry>!DMtqQRKDxdU?!XNvR7IvyWa*ck1 zf={}5tYt9;?&xPW_(VrU3DO9IN-M32&adxj&hNDQ1&R!w`*3tI{i#P;poa^E9y9p0 zCfkKqp;`ES)-FRkbN`D(OhTyu8AK0VXf!fWi6?~kN1&laNIE;sU=^B&lyD518E%wO z8}O*5T4%IdvA6qd>_niCXkS0lSVza;ft5$9O~R;bd*XeGNc4#)q!qo#*z*az1%lio z0^NC7_VMB<_-SLQwL3A8JoItB0T8bx`uIoZs&ZBk^lG)|gF2`Ke(~rvojZJ+N`6x^ z`H?9}@wWfqG3fql(FZc7doVajMTKtMn>u@`dE-WBA7jRv78 z=GG&b;f@+K&iJTT4J8Pd>i4|*5N^LWil^hT8?W`fJqPM&?%ImRfbkXg!ZX`&vK?yV zotr8Q)Nz+5HwnK+WxJjEj*G1=LxbH$1z_Xx<`>>1ns2RXD)!TUoGnDPgDHGmOXshd z!fH{o2E~qQb^REf!v{l{{~{bx@&>hfl~$|wj!_kiz?n||Ly;WQa<1l-8p89k6~g1Y!6=gZWi{Dn)QVuJ?@7=kEj`*G<5@JM-!k z@?@~0{g9?SpeW!*t5YwsPW@Hc-|L1c^BU(g|0xj?^PH4q`(RBvk_xL#{WUf`2D?gK z*z4gebu6|1=5b?vWkk)JahbfaS^))|Q6ad%fDbD5Q>?cA(AcvH&U60TXJ$RY7p-8F zNGh*uw?1J*5_t?lM?B)J$cxC05yoYKkpO2Txmgi$iDuENd>N2hms|b=%+a7ST+Nap z(I~#B`iP92HLMeV6>slhFxaROM^GtKfs4QP19A`RHH~HgG$xrbFhl4d*pb>ji_FP1 ze6^sDP4iCrWmD@WAdwgC%sTY~w*@gngdl3SoUz{CqPagNnf`}7DOf{p9Nh509EV57 z5#$I7K;*vk`2hs*8A1#o5{_U6JSe`q%uST5$*Ym5QLvU3(iD@q6 zr$f}l5buun-4>7&$&Se`%2+3UZ=Tg)V?VcQ(0wto%5JR$i$=AAPS{Jnv)w2-3?Caz z7!}QuLSeC(Bo;HPp^oKC{Q!DI?ckacUK*HVvg;j|6--zWlEpA()K(+(|ENaDp9vex z1ta8+X;*mtBkC#5ou}w)o zEQq6AJGTbADiMrT!13Zdc(Cwg8FPm5Tik2LetFH9_x)8-xbQX+(gW4(H=K4tBZ}osadvLAn?&E4! zj7&5m?|q8=%aCf_@TySyQ!T;as1thB@A(9r0l1FvduF#;24{0(e-glBX8Kk7Jtyh| z@=t;wKwGtY3Dl^kkX>qN-Oo))g8!w2-|0`3(Qqqe65PLygUM3{qXLp{;isorH<`Y~ z11y)ps~qRa8!ieT_cY1907z5KPQ=BH3kQw&W{a|+zGLj*n{{46Z)M(dp~O7F>qq9O zI+Sq79vQJDKW4&qv?}$9!}XiPj`%2vuPflAa|I{2NH%D;g~A z@B7iAGZU++N@tNTvw^;ZygfHRUBZ#0=hicyHTXyftD-AU_cNOC!R*(66Uy-}Z4%wq zymKAdBBIL9YmD8jN)P&EuI^sq`?`BW;STTbunS=|`7(;v>;@zP%W~BIq_hGhxdfC?z*ijU0QSNyNUIxd*P6QFw+2p#-w7TK(O3DSCgyDd9oWR}rjjj$PP%;FkO z_yNe%ZTI3K(LNeL9fOln>pm~m5TM~N&cKM8eg5Nn3`BwQat= zCFuAGL=JbCN=k#wr!-JW)6yIBT1;I2yczYM3xg0YtTo%I;YQwP+?}tQSwc&gOo#g5 zYtGn}wqA7DZcAH+$7|FIHL-sKFME2ad?>MRlrQg=)^CIbU=FT1DM>%*3d)7rk=4CB zrX8ufKb^YihxLl8Xmq$hf(}5hf;m>56p)XsnHWLv4B`jp;L>3zbA&Wtp|l;~!$(;$ z{tK#o;H)*ETG3Gy^ZcX1YzMg9;Bzkuse<1w52U;noY~S}Xx%XDY=@G^a1-};q&I*$ zJ~QcDS3?EoMI6qNphdv>KENl9W<_|hyx%7t!lz-D@;~0Qvk>eH1T60%pu=SUK5^^3 zRRvsFaFIpVXV`5z++DIwzvr}yWkuDWuplOZ)=_-u;jeypRc9S^bjU>kQ0L=cMdiSk z(4=KWipFi&b>;CGz+&qeZb^x8kp~1mM-g6(WRD*}ETaL{gy$We z;E8Yp%@nuLYW_vYJbdFZ4HdyJLDTMMMYb)*auhuZ5qtP^o23vQC$;xu@%|eNWNfx`VBY4rzWPB*|z5;hkiXvoS|6ud|mPe zLq4NYQ0#Dx93E|M0@)SFv?<{zB66hqzSc%4UCjB+0|EUD2=GZwq+&nJY@9k~v z8rTR8-&e_pwjva>PdE)|IL@5Ad%8n`j?J?WJ4%<}jJHy<5Am|_UpfzoH$;}W-;Obr zC{m?WzCf11T5~fYA-uqDI3+uGo!}~z68#@ky@g*BaQiMSA&3ZwNS6wVO1CtKlpsh+ zw{%Q8#u%t5NC`-ZfJ#Y@9Npc`Ms0MnksC0^-aY5{o^zh_AMCSzcHP%~#r@SCXlS3a zIXc%P&?1LJ2F$WWA76(bK2_P^wMBOdD_yU)hKI;JQ+6~e(We&O>iezE2;u*c71=;3 z0vud`L*oB!*0LPcG2Q9C@D2c{OS6y_;gQOIX)F6*xF`0Y!kfrC z_#=RD?kiWG)MhM+B0iLd)-9kiO8c9}S6W!^+L=Kbb?yy!))%$(A-CpCW!B7Me?k{i z2{>e8i2IsLX$JgW7ZXtN=hcL|Uoix+WgCzN4N`GGOuDfTsy>|i?v%}_eUYM1cutg{ z@%3U-xMNrA@=rjj4w{j?5voyIZwZd56s@BVy*~-di?2(;Kotw0fylGKo9@PT!goK6w0!F(p`v>z#PU8{M0qr!GcSZ@I8Io5 zFG7@ZxGoX@7e!{8GmVIybJT2a1a{xbM+9Vk~WAvTW#+QRU#t_fkW`r zujNCQA|D0wDuN#y%Q0a;_FvT16M?jqO26Hjbg)H`WCN}^Rk53xiul91M_Wgp)55oG zU@Xch#5g4>+w*DiaKeU7ak}el>QUZl=sQ9lD^qD^BrnCjf5Nz;E91n7nONv63`261 z7xCtT+RIAk+|?iVY6$Op<1cxPkUy-X^N}z8&*(Do%RdAOg>82kia;x++u9VhJ>-Fg zpD{&+ikS|$(u@9vbnyohRgse**Xg#G3>9M?92(A%#;vmaFXrDG^-<*PQD~+rf_V*c z%(is>H(Wf@XT(F>hHlox+z)^|*2XdgEFu)?JR2yC_`W05`R)Q(D+I&`tM&@9`Br;W zV|>vDOj~KnX74kO)Au0%!$ha%tZD>}yn=LFJ(;#XuDr47U1rf6hvA^Ul`F8KdOlF? z!P=1^)1w)di{MS^STkQRE8B{v+;m0g)LB)U=nm=H;)ea)sI?=XEjXKeKUprlEeD8c z`#3E^3)i>|dXa&k<%02@>hxs)1z=t6`!~;&+zsg zj_py)-q*T#ec=PTzDByyGxD4R{^P7?Z^JW~D$tHpa0pQ-_M<+cE_)=~BhF@bP&FQ} zevZPSYk6+htlqb$@XG$bBZ#<$y?h4|kLLk0_gXH{akHbTgX0g51QfY|S#xjA`gils zE6KHRgHc|1y>s}V9_Dj_o=?v=teoxKU_$AC5|SwIiN5z!;_cr~$Q!k)nLDkL9#v}s zo|&zbvqU63Zs#r>=`W<*udAo~a}gy%4c|M16!a{G{pIw!(T8%Od#cMPXiF$1QWKTQ z;Kz4)X`tP*99IDC=S_|hEU$B|9!hMmRiqTX6ieqtUfeY2%Muu7oxUl&4g0tG3CuyIN<1Okz;u_kr#k|cx@#@h6xn41>knS_DLr?ZM0t2C%Uixy}S+n-$Nug zWhkcrO>q2^m)FD}1Q&hVtSf#k!4iwewCiQA{=Ujlv1|$>yiUbBJZILX7IA2AJ$b`DD^B^g#&^Hdm%}>@s9;((s^`6)udQm^{1C`uK-HLb zj-3vrGfy}KFEdI>hC%${I3U@OvIW1S_*Qdr=l)TXV9}j4ee}(O<$U#~mjmSc4&P zS+Pz8TLr;N9sbp~U9q!`+NnM40T~7=X5~YI3!>`9_H)N79rIXc97V9!w7DMMk|;0J z*gvuCmkre!0&Ms?eDF$r?K5S&E=MU=t zGn1n@6Z%K(P;h^&L;EXi*&GO4S#;*#TD6bGxucgX{~O| zBqG5oy%DNaO81+UG}^7%?a;CxZNdh+SCWaZ1U85j&y>c*2z`5&T6CO1d=`7I928W7 zBs+gQ7C3CvyJAx}bPM;3qg$$;MRG>|qA+3QYYq2$yo0_^UD?n2#(|#x#Q6J!rE|_I zM}=QN#_P!<`r=KFPCDd)n(hx^i&IrLUP@gCo`&HOn`x=HRK^cwE)!9SW8o`0?7Pj( z(~IAmjxHhIZ#Zxlz|e*rx&35ZXb}}o*kzIp?6tG_RI|gHuY=(0&>im7 zW5fP}ZebMHYW(fIfhP(zu-9~+7XC|>6Doz5=%48$A>v?&nVbTWSW^YMw`#K(PlJD>*Z}Uo|0XH1? z;ZZaTn9hwPT$I%eMLXN|Yma?5HjIkEK{f7i)hY4oigm#ia#lV-P6=SnTU(qssA z&!(2E>x*i>_KN?UUi{*GDj=_f)q|J%U7$(oFNhyLRE@76b8r#9#$kzg!8I|zeFrG? zaTMMA243Z!VA=N`=rdJYA9AGWmLU)fTC?v`QYIA&3|1C7;C_g2`l(!5ePCESB`0XI#y7I`+SBDe)0r$v{!*=-e zaS4q5oAJ;(+Ad}CNE-NUI@287(&z&l9aYrO;`ox;z zNp@|e!V~-6@b^W(8$MjC89+W_QF*F8S3B{<+jxK%8M5%AQxu6c8bLhl)t2%t^y+cVc z4BSR3%L%v64Eg}iMjxmA2d7Z3Dob>@|scjIdOz?EKf{%Sjgg- z`)&QA6erK^hyP;Srqg>xI;ipbQ^Yp7wOfFfd){Anl1u)KUy8%@OHoFAb2^ahhki~v z`2ojff5VFqF-~!)o|*;~96Lc8T2(cM{^+P`hnc(u2P?U#nXZ>|=tc|YZfW#y2V*5i zeeNAscp~l#jC~NUqS!wPLw+9cZTkTJpd~Ibiiqc=l-F87Dsp)4Hi3H+u9~TQnL&0G z*9z_pHnnIO7Ed84Inq~L6gVjF!Wq769Wi=DdAM__<199<*+}vU;FgL`h-~I*v)yP` zgKwhrz6)Drq5}WmH&S2!l(YqFX`H$~XC`1_TiRcLj)>SU)BM{y-&+sb)D1mbf*82B z+!eI26v|>g<~tKeEII`C8=VtQ1iV`tw`vnaervs1&l7C-S1s7#hIM!bT1R3LP|K*% zHadPLth(_+NSp{hIm5+`eBF3AS;>Bx=F`!q*2fOG-2=K43WsG0koC2C(WEwz`$@}D zZEL~C&XrN~$*86&AldM3`!!`l8(w+s8sjD&#|xSldIJ38^u>hP#H z`tlT*^oosH)*6^IS1%HZab}qu)^zup3|*NQWqyW_4VCO#-)RxSA-p$TNPX3U69Kn{ z{gDj;pVsMaV0j3wJ|b=I7CMtcLIx_8x?`r{W+KEGlM%{FWPMN}-H!EPGB3{Bc2P-> z&16$v>XvY6Dg~2p0ZDSqAh8r#MLHu=vzRvOuo7e&Ixl zbkue8VCwRWKssBoRd@fYpCdC+lLv++(!dMRMcUOZpw}Y1W8ap?oI~ldwHZl~3N>=fh z$zOJaOa%%MMQ!($S!&#D^>tRxCrNR2hx3v>dAZuwVm_L~6Lp>LU8rS#|hs9zx1Rs2X;XbQ!B&IP5IyU)%8U z;!)Aqt0G^&0a(1z+oji!b+cYDGc>aMqdat4c0-28>)7O6*xu0qTv0r0xry6SqYer? z__*zWKS$nDPMY&Y>gMiQ)22N^0nKh1qOf0YvKrss^RfC6A-geIG=vy5#;gfA`3g4`o6r>`iCYf&GBVQ13d$( zm5v+N_~bEd(jM$B{?bvd_)!~`XF~w_ehba&5%GMDdrj?|p4sb1urn%{v;D_9B=tp^ z>2bFA2zEcO`Ny*{dgg-^eZ|gawmE(~;-()GkJ$P80t1u^!onaIa?WzAmunRdcihJO zg|^rwY~=JU@`)dMFn>+tqO*j)j1-FC3f@U?48HGVYA?IQrq`3FBsmUCjrZ@nR{j`! zIz}KWNXUY}1iE-`LI_zU?+z2MsT_~#y(XV2(cqD%!*v4u`;H=gqD5yf{YuIMoxW#K zi|Lvq(o$Xm=l<-iyXA#SHdI)xb?_JDf;j+*1TPtBfRB#x5Oo6@K&Ih}N zKkIvIr`{|l)pCc54NC@o64mwG$%;)dzt@dMvXquTY@duNUMkLehD?PjU9f4D$kMwd zAVpTHS4<7`KBC^pt6)F%g{k_DP-IuVFBKZ2ObCmO&&>1va`cp_Hj@}yAY(8yOA%n6 zj58Teg4}i%#PAj0aQ!A%o{>1+^v_qoEMejKN!s)YrxymJM@hP}-#tc(_&s+no$tW6 z#A*CgWbVL$+;%yEL3{;cSEh6|eQREpU`{3vQzgqLRDV5r<^;Okx>xEX9@q*S1{p{h}B1>ZY;TI8WYHRGM z&Nl-gO;HdnT~oVA3T9egR%i&szgJL4nW2Im$)|lM z)0P`ago717v`&6nHul_;?8wZ~>2jP62aP5K{adpQ%`fCuT;n-?ElZcDwJdrIGJTk>N*Z;20;m;qWNrJaI>_EQsX zgMzWYBUmI3%U{Aypf9~C_hI0ZGH9kfMlFK&Won#Fy>5vAjuLsizlKbR8rtld z+<+U1>`Rr8>C?9>Goa60>7fNL5Jt8jV<6c@84&)T1aDRuG1|^BG`_Nyg!B{Yrmb%pl z^70FL%&d!e>qft~)|Sgj{V`hY=04?KRvj56c@vrK94+_MbNWPnsHJW9avGOD-7^)R z=Opjqn0eF=Yz)X%;M}MiP*}ya6?2!mmQ8M8p$B@TzsT~E8|VdUXQz%2jAsuVcD`q$ zeH+qRb}h?xVVGmvvg&!y>3;8OS^;(e#L0K1uaSbHyEZ+D<1>e(oGqY56vpQ>T()6KXPlQALhs%wJtZ)j zD$YDnwN^g?=S+K@C~?3b43oMuqX^v;r8t2~P+&_r{dDJes`~}Pd?B;BW+!N@295sY z2}CdeQv-sTEV3I%Pg?&6_K4cBBB^Jf+i@?=e5Arc%qB&47l3wwDTZ+6zj!*b>>YmjWy_xU6a zKUasfjR~9}SZaTe7p75d4I*c+Sqkh;+WW%u=dYabX5~!qUH0-*^8L79mm!EoXO7Fl zz1#&(*IIfE5?svpruUaS-`@r<^V3>|TKP4wSh)AXBTx#tju$T0PhfoQ*-hRWG+p|9 z0R22JQFkHlHr%3>8WC_(_gRsJ4GCM&h!g_)kI6Tua%rX|zm%r({fuAAx!>wTRjN-* zh9M$@H4z!2p_|W^#fA2fC!C5`_Dutz0h+*7=z8NOPF}$lAoQKt+r&C1Rjk$rab)-} z?Wy6a#>UEmjN#!938<|8-L|iT_;iUrO<~n!UdaQkU&|3Rqmm*>1g-r#q%G~*QvP?%5G0tP9|T}#H2l2sB1|8 z_Kr-BMq(0l8tT;xER9rFJ*z4I5booD+7{id4@>Edv*-<;>@O*2$S28bY9i^zd~JK2 zB^a?0*Yc<1`~iIzAFY~?j#R3=BJEJALf#%t=b)qN($q^Pzs322P?NW}#j3Xk=Fjcc zg$dOM^&<%k6F?W{UxYquqZC}!SsE@XKiZwU%Xn5hiC%!=vR2K{nj%%+pWA6Si+cJ= zX%>T&{K8G_@R(SgfC+7Eh}}OOo0LeI)QA;v!9Qvq4pRT8Qp5Tu_arxy+VJ}hJy!C!4OjI;jw$7Zlw~kgMJZPb=w~U z;-9GsvZ%D(fv(;^rOo)S5bgtkn=grBfr&=4_ci786}2}h$i7z)Mo?Pt^0BvhzXI>F z8biANkq9O_>?sTGJw|*iT0?~!5h@Pw(JbOaQz!=-30b-Eg7_dNJS2^_?`xplbxdw$ zyMZ2So2hJqbm=#Rk~D{*j!&kC-S_qS?B|f@VS*39ow>njLMZ(!m02wXjh#?O$QEl( zL40~td9=RiS))Q*vG{4o&Yc6=pR#gq`&}+4g#UmoTyri#>`&lMK<(~5oBr4j_Gv9v zvITVMf6;>m8mE(gIIW)8;|)>zc+AP>EipD$>1@YuJGE%=7s5bnYJy%c()781FFnf# zM~V1G`-ualBDvSV7*JE{)i%$5+~^(X@w@%4j^V$^|Ja{I52lGWD{7kmZz6QvSO+>> zK*?HueCh17K)v%mmrHREd2tmHP&KlW#o&For^a$!O8@o)pifrhQ98PCe$d=igT>2T zQgrJ6hMLQe|Fzf#O2XJQ{s5-6SKIzh{cPml-tZwi z!%^FqP0t#WaG5U*Hrb#JU>6d0EEZW(R+Jvp7$?ESl;xh1&Q+uR`D&o#^BaMx)Th@d zAjl>M4$b}eBZrj)NVRN@rdoE}(HoLL9m{2cMmM%i`xFOdas3803)@`Numc}q5}df$ zPkHU7MoE>hZ=V%+<)cGL52A?1&m zK~~CwOhcS|bjvlvl{egD*mG-nIhyQ)u_9eL4>ym02}Jkaa}}l1-RY^NYtKC9uQmHi z9|n#j(u&Rw=y1V)=KpBFxKg(Ej*8b#w0eoz3o?CQ2BHayA8VAf!dr^?+Ou2rJlag4 z_Z|?c#g)T2PGHD*tz#@#XuhEewnToxcgw`-&5NWjvEu&gXcM5!2Tq)ktf-DZWK%P< zRj;5MMusVRW79$I%S3_QWz}fy`03D>=o9A7+b5Z7(X3SF-*tocGvtyJxjG0`yY9KDTh~qa6?|6iOV0q{iQI<6H>rNa{Z_ zpq}R=XQ}~9ww!-Ddu|b|lr!yvCB_>t)kZ$piaIpxq8w2x_N^r!4`C*De5-XL!1;G;|rIWM^&d(xJZtP2Y9l8}}!kkgDCY=PXdnL>5z#(HZ9 zJIQviRc{6HHyWcIrwc;RvQ#BoB-NA>$Jc`Rkp&pPd3)=~c1F;(aNKYxybuccbacYB z{DlG)^Gnbc8NhL^aR1z0348wqipH-~E+@A7O)kKzKAbs%{2+#{)MV}{CLCWdGC#ox zj5NHNyRaBt+qiU&on8F~;8xjXxD3=3)JypiUMc-rg8|o=i?EKozC6XSa>uD+!KLGM zlXoDHkgihA;>bBMP+YBjE+&`F#!?QUQX&^e5e+pxo{2Hv3RkFVG4cgoI>~7&TK@?B z*Be1Ozv7KWYPnz!UuHD6{b^0Y^1-|$JFjJizIr}R5H>%4O7lE0P@*uzgg@TqX>jwa zK}V9l1H|w3Ew6zDME!JV_d@!T4O`Z9?td7w)>_|BX?Y&K#iA2@lk+v1CTP^x%f2bL zCkc%3Xk)(GX<+)&2{~}Wo(T`s;z3IcFbRroxEc<%MhMrq@9{o25Ua-YaNsBYwo{rd+~VS`-W7o`A5lCjigd(JvW++I{9c zK^sL|oQtib+OQ#f*@pF!KC|^#1WeMXq=|cuc=LZOd#<(ApQg66s>x8K_n)s8=Lcvm zEsIB%5wa%?QMC5656eb=jQZCizZ zmvOn*&ih0Ce?y>YllvgaBy%X_(KmUQ?&AeuPji7Ij<`*NsUGIqgD)_`OByX~+yB z;~!)Z(5P<%mw_g7y4n^=A?TA8c)-z*iDiflYe|kOmXc{_?jSk^Depn$<7hW`HTJ|M^qWqkzQ^YYFQ^}E&xFNuy^F!(fbDY$DB$CpCHD&#vw^a}( z(^95`DAdBeY+P_ zj)UuZAe#3r#MCR#wJ?s_Ul|Xu86^?A{%B&UTXjy94LFkG{J$; z8=Q_;D}eTMRivqj@pL5S7KY!R`G9KJ%pd!?IJCzR`l3|)2`dQ>=VTvZ)AUE-F5R8< zD|(dcPWB+8Q3V&GMg^Dd@XOF`E2_;!{DF9%2qq|78P0SOc1|s{w>~-_`wM*lh)r2ObM0xT3ex?1ug4SU&g*S0A-cg+H2_m-nXTvb6uD z-$0lyZhLs?7vCCD93@*xqv{1}=b*QH_sWsC{}6+rB`ePAoW1ehNtKPa)qv(6CcK9J zO4{V)xDzq{AonbP(k-j}t@fk1=O#h!M&3qw3VojY{ed?h*N^~NqmPhvwTUe1x;0zF zjN7Ma-kSncEjcz(D`Eznk3qktd0sz)%Q+9lG6Qz`Oy9ts(0CYg#wiz#3HO}u?KUy& z5E?OI4`|f%(uYc!po69lNN^8MN`5v;4L47Tby_>!+ZMa8Y5-B0%s-zi7) z6y6SVB?b(avHd^(E5Nw&^sXxju4C$*T@ZgCaiEJI1r3&EKeNWkf06{dlbFO?6H0hV zHm!Uo@QT={Qj+d4j-6loXG~588s1thqJ0}l`j`a~%iUOuGY01}_kZ*jigH@+d(3}y zcdLKHu{&iBohnqz{$gZ7*=xh+S5$uBZ8Ff1Xpr5`%RHm82#$PARPk=-N5mwnc}_>^ zMU-^jRG|39aH}4V^4^`!-OPw4ArFWWyKAg}s3NoZSch|LvDSqnXaL>wk`Zmz>O0}#(@QW-XJB95ViuiJ zYtHB>Zv>PFP6s~{y6;$X3nsj!e4iH)b)@Rm!5AI=&qkO{Keau6P4nA^ClLwL!doDg z3-iEzn1K5hrv>X7M(%qpZI)M1yGN5)`Nc+&&c!2Irv{>2K?@%fA;rvmob!xuePVe6 z0JeuM*eIw>lN!z|)p%|VLxTMB z?ka)>k0U;h&T+6t`L~7jJD!n&w@qE+hWMWiHU0Q5CmtA9QttYjU7MMdb^lPG`Iu^s zIagQN4v+Vi9tt?ZuEp)nv-gU9FX+yR+53^6Go*k-lIs`|m+cBRvQKw1gxyKJEn1BW zzZmo6>%&^hD<8rp5_mr-Sdq@BHt)LD#NU0s9d=gh)JFoNk}+|&5lI^IC3UjK-7|+VrxANt$P=RaR>Wz5Nq{){sv@zcfSXj@$MhC z;=gP828zSDarO-}*;{_0os%ldFPuUrP4+BT=dv9*hXOmQV07Y)463e1eE zf8J|3cG2m-&Fq1w;Z(Z1Cgwn1pswI}YZMJy(iSaw=#_PeV5q30n4um@7G#*EB|Y>Q zYt)_H>pcf1#3qTDKBC+k1evQx+Xgcr`m{}R|-=O<=Q>^pKRXf2I#F(Quu=(_qL!j1($@l@jNJu6~ zN0ve$d0G_oWVJ{ewu<0;=d!@o=11mLRzqs?T6rE{PakupfAf+Qq9+6W@`XkIEXQ%% zEkRAY#a|c&SYx%z<_-Q;s6MFuc%me+flr2ln70|L9JqZmuXd}5b@PHaCB9COnRy9T z9Ir))iDu&yt5uyC>Q7{Fouo*~E{|F?Xx8kO{oyg+(6|t?7i95oFg-)Mg>-9&`RRSA z@3IWS_N0XEs%p0Fo34}U?~?}(TS+L3bj^vF>w=r#V45FYEzq{oJnmh2cHA4tM!C#|@`Tap> zl9_Mi>B$?-g`5q4Q0@3nb%Tp?UssE#ud}92nD%i-hPbin5zEb{_+%-9*D1)W2|}}F zBXm|c6EbcTmx{I$O_zF@>Ui zjuGcSY2JI_IBh*zGa@&?9DCxfROr~O!?@0|>`V;o*DMts?LE8$uk$D0m)2@Wz?lDq zuVvXT#osmv+ogpo2@Z|Wk2+(uo0aGmvT8vN9}TOZ+Ug!!3uZ~R)Vw?jIS{?w^m zk&@r>;wjO!u#Ab!;(leIhP@|fE3C5YHNtBJ()*39ZiSeHgadORV~%+N^h8iv>uSel zlQ>_p+MiePsC+XWsWElU;#v>dXOe**uDRUNt)s-%{tlqldn@Na@bgu@iM+Eq~d1t>_<%6x7xJ65~YFu%exeNGeRTb zcm-nFL|0|tO*D4`2@mjh_O)7-lRW{NAcAAyxeveH#pOmhqu0k&(T34ooR}1gY<46w zlT++q=f>$@95GhZ2}#%O5tUb(;y%Xje7@qnF;TbRKvo&ZRvVm1$#{+~_=_+~?|j34 z#OyB<Ch7**rTSnb?KvR9je_o8^;KOFDf{J+yNp1ybp0Esv2^KqR z^#%xtm*rO3zLU6J#yg*Y)G3s*R5k}@mojRLYg|~vpUa!{*PH-OYru8WLY@&vp_zwO z5A;bf069{OV(j~$gZz#^U$5C2{hJ0_AV{g;lo>V-pLKh8rM;)fAZ%vGmy2gB(uYPl zPMgk=8#9)b>DI)m#q)wCU-AF?>)SoLTNU0C+YPex0yz4WtM7`R2kiTkaM!j7t>nh9 z{#!e*PPUsA4XyCIV>0C(SfSHr_14_os*AP0W~QMg4!-yPrYG!t*ql!?buQ;%VYp4t zd1+|Pu>=5@-oKPq0u~2#ya3RU&^LJjp~`fR z5V3U9u`>l5*jAn)gTCMzU=!@biYs&uo@RmBJaJsv>Tov5;bu95Xx@e^6(g_P!``BH z7M8Lk*BRXVXd#@N2iL8#DELs}G#;jji}H)2+r+sF^F-9~z!PBq;Ud$OZ~C}eS|!VE zcDsJrz*bZ;sNR>sB+nu_d+pCo;w_k&YFcx0BB7RY^M3Ec`@d?V+b`V2%!Ct)d$-3) zWew*BGwLw>eGMYzDjQ`w!7DUwiT}$yCfM>*wa-eaJCRvnV|%icSgfe=N;)Bd_U;1=<0BwT9u7JMys1;(i@H&AxtD#O3$UPYb%UHv+$x4Q9t>q_8oUH!|K;$;r` zFA*Ws^J%XttQ}*Br^WaR*GVx5jTHB}!J$r|a7*OUJo}j6Q5dl)IEXW`wz}h>1B$D6 zazXy3chgXNSR6uQG&IzG+Hkos$Ch44F|#+!CXQrZ@5 zw`2p4ufR&%BF#xR#^7Wd*YQaJUJ{&H4`T)MDm3@#VruE+=CgzI$hK;VgBUqe2*#R; z6tnwcTA>r2gKoj)9`)52?NuljjDthcUO%Lx`YX)!q(k4~^((BwLR+mp+aq;?@n|Ii zDeV0qyHSQAL80!Y1)+%Gp$rQVJGKIRkJ>pF;fl41?>ogk3_(YFEu>(2uPK!d|LNe7 zO_jM{Gjj|5F z(@`(t5(Z!CDl>M?V2^!vVnA%QkueyH(mivkd9 zWsKf+I=cV2N`Kdh^dU7|?&Fhtb0>sjzhHr_$`_2amJ%-xIadk(Wv4;0FRbzbC z7dt`wMBjPl0OM|JQyVtNCBvP}tlRI;%E`FZ`__YAMa6M6qjK$a;ZOWCVD*NPIzBnbnUP~pm=tO7)1i!ikLTgz$y8kS$}c*pa1{=Gw1=CcH`Ph zu;HEP1F@5yC4_V9hjTuqD=8RkKEWz5$A6Wg@d(eAnf`>_;N?U*x8w+nt zn=Zu#tUNkuRAW zKN7bU8n}&OOEvUhkeQkAfT7Ji24ILI<1@i+?^ZGmHDT}n|z>l zaA$B|NH8v_2`g{7r~UmnQ4cjmdNNi6rdx7jIY{lR407O(4V0k7Xl8%u8=*hCXM_l0 z=b9@de&1cROvUsV!CCnPuc{Vj;>~+GEa)@M@rl=ZXR~TFzjwN`MbvvX@JG$52G`MvpqiR}o)eq;o&X>j(y`y!T%&cS=1Q6r&>-EmMvRW25jILGtgx4qui$3MhPdv{B3#}36I?^nw&)a8F9B!r4R zvZ4IpyxwFx`rNL-|NT%xovPyxJSYuOUM6!;82E=2^Z1CkJIbMJi9S3pW*@}8@!@r- z-UCJMft9SFfP#swf$D4}5?nK~&h~iG81?4$GU)SSuHs-7*`Aaw&9DX8_Uwj}Ihq8x zfcgHpNyA?wR*~~tqJ;a_lhDlI*NAt$j%5~Wk31X0$tIr>y=}wJaC(rwUfZpVo!6k( zpUKY!3>I{GiQt9NQt`2 zA{RTV(NU>aMz(maNAi@-3}^G{-B`ftpX;yaN1x%sS;4uqnL>;`Oc(s$WG4T-#8qpc zTpT`6Jg-tr!^tVuXxiBRuhj(l z-t&GrCTIVSoix1M*iM{B|l2t3_l4IWIz!_-R`somqb!x0W^5$H&jYw27 z9;gBBekA-R!!R>~+qr5fR)(NOn@`>RKg)r`xLN|>8cHP_OFzxYw(mVqI(lrr-2oDO z%2`H`BzlMZizK*Kld*0G|GlF1c^*&>xm%qnS%eSzINor4@JdzlL;>O6_B5?}S+w>B0}c$qdb3u;tyW6X@r-QDQ$yh$YU&(&mTZKT|quH{km zT{yuntT>zGwTu3w>AHtPTnTUDEYiJY$_zh=Rms;Z`^P$`MxNf$6Tx3g-Gf7i+iiJ= zM$Mz#rJCd3#TD9a_E7cOk5!YO0?RI&`Xp!RE9&;UG}osFoae1g5gWSQMYQC*4>!D; ze>C-=0#RUgEwlP*L#Eg@*vDP<;FO1b!oqu>V1hf@JGMJ6_Rq$quCKV}a~$r^a+J<_ zv!ifxNp}NRPs&^Fx(ih0Niy9$majU>h~;rf%9EUXoOVhE zAE)D=9a(9Fb!?q5*)53jXqzk}zRJE_QeR@@z)Iqq6>Py}3j*ISS4D{)HoenQ{%tfcu05slxX2%@5?e7g ze<7*3_*8%Q`Psz9X8b>N19S(7!Tk7y{o>!d?s@4Phw5%~zSDa%Rf(56Yu8%O%|?$2 z${7tNh%++(+v`otIl3gni!R)IMMqpq({%~`PIsDjNUnZwy-|qEz(4bPEh1!}O4qsW zSV_4r?KK-;3g`bt6j0nz5``yhk{WGaTYB^}lhBYg0qsTMvOOn22m|N!W=3lBQrFa> z4?yp+poO|g;I?OMd8##x`u*o7$5Tu(U(@QJ$LdjYE%kuz1Tp2Ny%s2VeOU{DZFGu@mP$;N+m&oS^yi}rc=-j zmL^VQx86?~OR}qsYqC-7qM)8vdFh^ZbEX(NU32BiMyPI$+dV0XnHo159- z{544kU1(=%cyZ*cnC(zz=q!p*uyV6Ou>|0XK{2u*fWKs_l;iFnaR9zwj3g3|mb38a zy$6duTG>D}HtmZ$Lt?iHC0MaEXnTmBmJE!$IU-;;^vky0J7N)^@vp*%>i^ov5+77p zLtv7wlX>UWnGnRIrtL!!CM5*JQ3zq_S80o>NHE6}2z+C%jZI5t$_jE=7hh#p;0F&I zsgBdIvG{@z9KKCC$@_Z|tCidN5R3yq^UrFwVi{l2t=1hs%b`9ps{4Wp{WaP-2|n#w z29TZGm80+*Vn?j?YUN+f^T5pKhIt4Ut)aYK`%ems{uuB7}m99Yp3M=G|3|R ztOcbw)}pZ?Um9A@XCDjA*tZJWZ@@Ltn-E0fFmeQRLb_e=DX zKxLE6e4!aLjWnPF#B{T~OV%I+wD(jv01$XPr>{^}{Ji4X^~tg%_NI`;{{-gH#(Vop zgCSw>pL~|)`|B>=QvJDx!QfobC_5Fg@gMe3zjNl zBO}eK$KY?TWA3-PsQi1H_~WITe(IxqgS;O<9#b(2RwaY@7T|GC6!-T9UzH%qtZJ{g8?6UKB>3%b2=#FhYE`L>3uTt%%imchU zGfUULivKjVLwFZfnuIW0qX}t!`AbxB|K>^paJwhBJgL}(Q(e4VVlN<)(ApsF&ycMa zGG3KAAJpn>HQ{%<-RC#NJ?{}ursmgH9&MZ;6S!!$e=^R&pcJejaq-REVgY>kC`o*1 zJ31dye4$#|vRyboQuNtw8iy4!i>-oNGmj;V)sI0Maf?N$h0{F_MdsJkD_*VIY>eZu2>GzevNFo zU+sL+cX|O)@1pLR5Tt?pKGA?qj+F$wzK8WzP&hh$WAqj^`3TO(U66pdhEJu{Lr*<2 zpEur9+Tt}oob)_Rav1G<%NTN;>^u)GD~Y)9Dpbq~+{`pV}^}ayxil<5>1* zx+(Y3BRKo)#SvKdFBD{Db6);DbD~g*_V4XY=9Iz=)-c9r9g6$H0q2xH!m4jkYibqD z=~W*ILVJ-h)DQ(hiwu~%hWP(S*jGSBwYF^of)YwIs7Q;_s34sRf*@T|LkN=6HH-rS zA|--Sk|W*SF?6@&(A`}#z!3lTyyqOx|GnS)erxT;+H08E`+4rX?(4bteqJ4D>J3nE zEv|KJK=|Hdt$K$c&(0=i#~s0R&!+uF_h#Ng=U6tZL_ZIDpE@f}N(om9x9@dr(ATZ+SfdO>Ny;}K1z#;Se7o9tr2TC))JZ53fLTA&n_m>vq@`1Dgx zR593k`0I`>kon3lo;7EzQGX=&Vun@O@M$`G8E(O^2&awR3BxEKrtzCPdW@x(KIr|>S(Y!w`Jzw^Tc4rTof5m#G zT%5OJ~ee02Izc;qN#Mz&|@8A0~dZ7HAZW(V=EGQspX7*NPOJ8TX z+r7scHMX2Aw6A63Z06gX9Pf(5F{_7A+*SV)4X$j1BP_2~LCpNQjl%5vd&DnLySUnk zVJjA_vxfQ!HZ1nDx8K;DCTPRI2&e|8((+v#vyGbEw~V=+1$0AXRqDo-*MChMt6Pnz zcg0+C%aw^rEXEnEL`W1jwymF%Z9y|O7MVGa>Ra^ zpL{&qd&)^fX{%Hv$+-WXeA#6s+^4s;eCF*8jY6SU4b_bffbl24hQ zdd12}9#8QHT&S=z&1$Wp6F;5`fgVzi`%p)+V&d&5z1H{)O*lePBC`!TbySnw?>L3) z79ZK@pc*zIIv8R_*}qL_{_{c|G;P2czg+dL1>+dFTey+Y9j894RK}U(Dcf2;$y*zg zCA0go{880UpKA3&c%{+35$E&fbl%-Flv%ZxsS!PcLEX~y@$#bcl^(Zu(9NF)(F!m1 zvM_nm76_4s#0rVki(aZ`$g0;sB4O3g#W7f5@RGauo6)Qv z9;VFJc82bQzG?;p?;8VUcnRwqI6}1%h?>Af`1FQjF@RJEP{^5IdfdN6g4>qCAO*Vr^PHZOx`# z3&`p^0j?O=`Xb$ZzTPz`$1OKbrM)Q4rY&Gk+NSHfkc5j{d58>wzVx;PF|DJS&4pI_ zl)ChXug1b`_8n>TY6T5xk!^k2#*82R&*mtfX?Eb?Fkt<4gar~v>lQ}m@5WyVPd^bqunP%^LmQV2IkW33~X&101c%#g3 zd9EW&2%qxTR<9qGJ6l2?jNs|6-j6kYeGG+a?R5vs9CwnGr?|ny-KyEMr>&pxoaCF0 zY*fp!RSUztsBe`(vnaHehH&%;@;8ivH@H8^l!c_!Jgvh-6UG&O@x7*qRdII8;pihK zz~qVNV!7|0y(^*NG~Na4WNp5yheK;(_DU19jtH1!m$A@uTj$L*Fyo+xw&5QicJ2nBh&8FecgajD@%FViYI~n@4AutB-Mh7n z2}bg^NjCF-8rL`!UYY-CqrY$fviy{BEIfEPu^WFd?mjz^W~^=;b+!)AQAf{lCshRdAsCTft1^Y~ULP1s#TvW=gc<`PQjsYA*piHu#sFiT zN4ArJgW)F!Jqf2zPy|UHy%K-%_j!?mWeh>>f~77vCvbI^)Lade*-5?=-qDx+1Tpfx zLXspKQ{W&h@n?vu4N=j`aAw@q|iZwOD3h$`eSXj)ea+q4m>o(CDe|nMf zkfHV@9;TeQai+5~_Bki=YMB(%TN?@%N%V;PNhFf{R*1WA&~0-k=@L5C_yr|MK4}N} z^7`HUcad=%ueIe*cy(e=c`W9z#6a-^sr#-`F<;QSg|oPgGfHB`-201=Sro}MrhIbq zc#0~ut88;{WNbKDo+W~-n#$#JP5AC{k~Q9EONbpyAvd{Y_krKhae?bd9Ul+Y+CU}c zg(&LzSm;U@r*nlH(e!FadCa_4Of9JqhzA$RjZL+lG~*_WikDD^j&dj2QRluj2cc4& z_1{=QtPR)`X1PWc_{IeMb!;?VTC0v_#HxQL<7(Wuu21PC(uWo5ujd>Emb#9L@F|!1 zWlFWvIXgi_I3j!6;a->LUuI||0zo!nZ`0PgxtDfLs1IIZKx+O?eau~VgtM2P8KbsOv54|^6S@q%7#FmZ;L4_X3tbBI}>6l$z{;f{&E zuSJZ0P2%Wle)(!U!o?@rN~s_PT;W^-JjZwG)J4@yP_wpZ>}y%NZt~MWV;hCY+-;^E z2|A2OgQs_*pB~osWKMK5-lw=Y@Gvh|8HhULJh|ixw1Osbse>#(-hT(Te2o-H<%uRv zQ`|)*c@J&-xawoPkIs1CP46sx#yL@&T0w7#BKIZfo-2R8E34QK>*8sBn{%@a9wSe0 zHD=!9#&DRh$!+zB*LoFf#>G8pxAv%qcF2dT!Cx0Nx6?qGadGGm;cVU{PMv*FR_0ZH zPso+~BH}uVHoQsK&%F!^pFylAf@~}oJ5pLMvkKJFkMl3r)+#~$1BDN>f2NjC=UyJg zREN>=f$w%aADJ3ccMP!{4xWKl)4`_7OQ1hxo}*YF3Aci1Z+&gffSYls8WC zV?;>Un7>F|H78cWC9d8E=5G#2z-#fngzIJ9r%&mUZrq|7U>xap?TWIO`?&fG`dRg4 z?74mKO@Y@OYtjrFdG-(PoDqU+!bcnA`Zp75jTZBbcdDiWW(7hHuIf5R=*tUNcX1G} zQ$_~X`Etv0u7LO~e+)C_k5RWwxV>}k;fafxVY8je%l;@=)q-{|5K^=q49VwNQka!X zrri&=L>^Rdb$cYZ8KvB@Dcb6DOXP}KJ$4KjRJ71vv>nbYoZc{4u6K{}oE3UEotD>&7 zTiFd9hH1wRbR2GF_9pwAS{^Q{OOJJDVx1oYm@jh&ZQAQ#)Nx zn3Hu;(<~I6@x^)@VpkykF){1)?8+sW+Vc!(c{>$_xyt)j_Kk3eKDTRqn%YepwJ#gW z^W$+l`_Mp_t?Gfm^Cf)FKmdO9kyd5ZWO3)QwlQlB+zI-Q|~6Y=((G5d!SwRKRxa z?-Pmo6sw+dNw5WO+Z?JS>g#_#r{8d34D5>+eV!3c&Zd0XL`jkNZss}H-e7;U87@Zd zmQ0hSFpN7;iKUn#z7~>YI)B^oJdQpq77=Alz13PB*Xjvzh-k32bO%%PJ1kTgAdzux z)>8M}&!k0JSndzjLx|Knzc-=$O$=k62%aAW4n?$J)-JjYdbNMxwhDrKAn(BBq4Sn2 z--5kzm&y3!|7WP9|_phSc>*eOjHIPMykz;3{8wMu2-$2evt^4-t zZ^#6-RZiGMY#txrxCOUMgdXv7&4z=C-0(h~%`IifNqb}AfB5S#mBLwPL0a==ERqcT ze4fGf72e4@&&sl2BH7x_j*Ak}p(bw-3iR@aub@c|FcS0<52=XfgkE|ct}espGWv_$ zd)Ix1aUf$~V-jDULY^mT4m+iKXc26U^RhmOdFpWev#;l6P^D2p%;Cw7g#CvF5?Ysc z1YK|Rlb!LhU-$Lby5gf?>6bmh^QYGso&076GTkUS87YaE#tkZ(Cu1ZyvPC^d#aiK2 zOplAOVVBP@-&b#TcOSE?IM&PVjpo0i1a+aK?>^k*?cLQmLCC%e+ZFSX3EMdoMqYox z4s!+Eb17q0cEIPNrXo9*nFm=T^14_^%%EC0aw)nc@Vu)CpN5Q1=vV+&2Kk~bCBVul zvoVnHnDfUW+G76P?8I!A4%ne?;YSd@xPw`BiHQsQ*BZg)H{Qpy_QNrZ7xu^JXWcrb z{Vt!bxEA+?iayji;s3lm)kvQ#$W)SX+;3Rne$KLf`=apa&BcxSLFZsZqL`7k$uz^` zB8JFiNX-R&J?kK=50YIX99!e<+VIu z<2XKuTaMCPTkoFEU&k%x@wO*Ib>|_7nQNb&lhZyS+oE|5MRs4VhiAs(4+#1&&v|C; z<%mS%qezgPTfQ9JHL0T{O1Cx)!wsrGd;0uk0e~sEGk#bV=20QV#W8;H171I~)!Ffk5;eJ6!rJ=$=jU6FKa`^~M! znZ9do45S1&q+85VPmi83BK`aNq9}N%Yy@!-1jmhR0|#G;aV4?-IvA`;KN!KEwh`p@ zOyC|JQsZKB#lBb|5+tL(kD(qca?=t3n70&o!>{^CmpWvHjRwoiWykdxBjYHuyBGJ97V^BAAFE(Ay`{2cy)1! z+doPMzY(pAr(*&(v>GT;@j5!UAYFoH2;!r3EFyktkakSqG9WRxC0-*jSiVN2_{`Y& zDC3WJqLRO{UcytB9BaQt%Y#ATET}{hg|TM+fGuB0PzCe1=i6TGlUwt9$_&Fd9$uv} zf&P*XASQ+!GC)8hFK%x41_1)nP6ut>;Y`dcS=j2TZVF^T=^LOrgtdJToGk?_=X8-=FWKCelk0q24ec{cqCVk;20DVKO2> zAsCR84N`>_^9{G~r9Vnm;$h6}6K;QXc$UNvMu&UktKQ6D5S}JGsdD3Y%=sXBM%LhD za8~p}aXk8i=cSJk9Jbn!hIH!LRB+H}9(yPz;RD;HMDycf_Cj#vaj;4EWE;r0pwEHV z_WBsvHG9*L2H<<|5uv=YTo=4~nVS8cNiihjijpXey(p!l1Pt?c{aHo8iMiJA5(E7> zP_5t%+^h)`u3*gf^M)eUp>BA?I1RR##9c7;6g0!iZZKIsGg;t*D;Jd}LY=pgA&$mRPrv)hXd7zJE!$UyD;y)R1aEodGkSHyy^X=d2<8}ZX zfoC841^NjdAW*zUarK)w?vgzKg!0g)~l;vXR6dAcCIN)ynWq!j{+Zv6z5!0fxoqgg>&a6mJjU3pzQRx-@gpT;Dspkh~iKf z`q?QHF?`7Uy0LB}^Fg*eJ}T*(tT-u_whgI;#^eQ#B9J;F*^i7I6%~F@@ruT%fkP7 zHW!g4?A`Wv-ULokW3X^Be9Y3=3}Nj5(yyk5T$mre5!gJbvFk(n#vj4!?VAx@eAJys z7MbL@#dok33U@2+s~?Fv5u&Q33*9aX@SsU7O=85rhzIZkUi0|J^RO3P;t-+ouK?k+ zQC3MZaQq<=4)mROH~yl90qM*Al8F2Rd~9#~e@VVs5wvV}AG>Gsb1M9FbM%newDIzw zHl{w@f)S8<)B}5CuVkw$5Izd!aK3cN6A|DJu+CAhd6E$UM@$o&*OCzrym|3)l_Z0Y zzddj9s2VeYnV2wLT(;A1IH4L4wAXkd)VVQl(%6Ye;-!qAn~-+c;~bpMmRgpa36#&f zjG4Ma2eAGTPrN@f7oIDRIT`5dyLfVcOpJHf3_r=0Dz2^;V6EK)>P?M$7h@+A5_V}|kzSZ@ANE(=@wLoR! zCa|ZjtRE3|-yZ4*HiJDI`G-OX+ZXn;kB|_dxnN1%8IkGJ&Xm&2fwx^cOhJxI$G08N zvWez@SurW0_Z2zMU~5XJMv3#&vkhu#@T8%TM z+{7YMl=wJ00Urb!J*TT(oEMf}R--nAoi&due|VH!!Jn5}_lvWur9SHHro9JTU&prr z82(x=XL(gJr-7%=dhX9Ph0@5^VeWy%oYi=L#tGnhqGQ`LHK7N~-R;3e98F!~L?N`X zu`c+M$R6Q0eo@zzunvXowZ^&3fVn819Xj2uau!|gXm5*utU7*+_KXOJAxsIEo9<=$ z)i>_Jk`THS+v8ou4BZRua7$dMWqNrrPiHc0yx1&DCFxnjLuI-xgI%wiWJEaFWCKLn zrG6KI6b~&P2D>^Ew^oC-v-7rON_oJdp9~L{G>L4TMf-r6#Q1**IFkKxPs>Cscayij zGBu5b^nBm{-rol((bb>B?A=`*xTZK>hc)*LJ5~MKCTP1 z7{?GVwwt17fJD7N1RRIhTFLoAykD`l*9QicLNDz^#E5PL{G zpzidEb?jvP`dwi{;F9^kCB1TbNvo4BY^p~$3yNPcBCWd(r&Sz6>#fmr!k!EFJH;n| zU86~X0obw#FnvBvRxg?_VM1ak<}X@bj;RHc^Saw!W>MV_7AyP;QCPY$>b}4mGyim}D61Y2fCq{CEkxjkaE~jfo2U8WqV56{sR?ubY7xY(`)WqizoLTm)^B-oYvP>8 zZ6J%>g`HMPi_3YSr^`_R1)l0srS%%JbQb``{+I3l``?Zx+(DVbiom0r3ez>M9<&c_ z_ZCBGQ<8tmuvNd_=lo2m_#2e~Dc_#+k~Kjb7Gx4cT`{%D(G5Y{@w}7S72O1F+QUNs z4^LV8g?GnrYHf=lJYyR(jH3$3%WF5*X1%V`4wgC8zQhZ;xc+}8;KQ&t+ZtR7MJshh z^Uxd6(OBz@KQAT0Vfyx4+BT5lw!4R4m=EwD*@%?_!f}EoW+c6{D_d^?wav=&^}T!GciuL^Bu{!#?6nCiu@-_)*ema}bh{wHmDFxQq$LxI{;?rp>~ zg5SCh3n8$XE`CXH1neWI!t`DVv{3e_p#R<+p_5Z_(=A)lty{M%asRVdVtE5)dazLe z=UPbHI&_oMVW!2SsBo2)Y(u6n`Uv=S*gt;lO^VNXacXX6Y*=oi(-p&iU)>;$_5vF;+eXZ^KE#6!A_;7!FMlq9j2#o-%8=9&s zI^*6BVpFl=M7NT<;^crvQ5wS4vstoJaR~PRXBPOam%p45K!9t5fq^fbH+ppBm6RTk zZNE{7?%`8Zrf!^>ygZh#G{5N>Mcul|Z<`wauwNy-E#%3+jp7!~C}2zGjbLdA%Yc(? zsfr!J5!0|!rOR#|KjvoROsco_fAPFrdC89$=Kc0a3&UKCudf#ABo2HKpKrT?vDU82 zB7eyrc+-u3t39_$_zMB^k;gA;ekVr;by6e)2sK4sR7m|59Eh^z@bF4T@XfFdi0typ z-1v$ApYMxJitpV}fAv7^e4iqwt4kb6r~!wLC#CtT?#txxR*#o8TcK1o@2=>lafmRa z>7e4@arJ|L17L*a-gW0x+LgH*I;CUW`!E93x5?7du{5c|vHSM_1=w_K;7Uh}+wT>6 zQ0vxhnZ+cF7*lU?C5b<6Ospy3+}0_KK6E78(wX)*g0rpQ-Tj;W2=gNdFtXD{c8jCr zGgrj}vFw6S_kIk@yOjwR^xyUVzZD(QaOp*y^+21II*u(i5x^$v#D*;wS5rP0#j`Sn zSD~@|mho&20L%E7X)uIo66EUDE9nedN1reuIg)0A_1*(4pi9J0+y5+AZxwvWLbsX* zY6ox&bbJ=v*L``SkO0*9Px8WU{5D=u+z6w7CKz6Y!h5pi)@*Q1tM&pyuf^YJcm5N{ zf4RB>919of|10X}i)}F?4bO(?#r}>TawIrFLRhF>CpWBV9y7;Btv_bUy!QL1|1*X% zl#q6e`XH8x4W&Kk$Xxoz9Kn~X@~@HRQ941cf9u=S5{C)-NA0anvDLcxl^i7$de8A4 zT_2Q}_`ia{u*iRj!i^BMKyJvnUE-^7u9>4X)Fcy}DfgAh8E6O9D3%Tk=r=a5c{k}= z{R1SY|ASo{{8Cj_)iNL5(ivXrb>(?%QV-xYXS|x3-h5d#HS%|pbqPSUNpsiNsVa7q zh&O=znEj>%_lSa4$Ri@?1$A1JACW51#g{2_IGL$G zUQCt{t+tw1QC7NP0hOikI8CEge_gCY(B$lZvcZ`iEq~N$ffRNPE)*hD#S!+h*QoAay>5KoEXa(q93Ze=&3Ylj+8_rTM zJ+GJ@dFG3QN2uaUlOKBW{-$!bD&a5iVtUj2x$Kw0qBjq-q+dN|S4|egV;-j$zpK2z z|ByA^T@_r|4xx?On&0?2;bJ{f-+sxtm1gS@T;P?{iLeb7-$V)Sx(NOQoBVD3f1iYn z;G60-f`gBv?E9I`t6QiW!8>+{w3pIt8XL5j9rswi(`)t1ZtLd^Vk0%?Ez+yBB5rCm zA|kr)G9j9`&P+G_wO}=FyGiw0`KeP?P9>zI&u`tGGD3(}Jn^&N=h4HN@st%Qlang; z5ejYv(XLQ_}craK$SqHmOwrgLpk%^Cz=z(_= zJxk_=waeu0ULq;76Iz3*Gh`%s)Ze(D9a)~ux64H6iC!=KF|<(r7T_roU(M3m1@;$Y6E{Wt+18uG|B1Nd_Ung`upw`hW6p)|^y)57mJ3V=0)l!_@{=w$S z^nfCOE^jjI*_kkHPnCs|Lx?D0g*!?`X7U+UmON3%H*|8NXR*&Zx`Th@vr;PnWWbn| zvB(W}WOoy`PK2M>R`Vx1yx%D9-;lDYBfwx!`&`I~cXt~@9JsDz2b(;vF0Tz|E9zNW zbk3-qRAfV=Q^*XWIh=F!J z9YVlZUs4O2RYu|iv-&tlw@bNI;-m2XbW04mOr~35i@BXKLOQTGeZ zIj3KNwNJ`YYN1a6?ga~HJo1C3alxGqyTESwXf@j%gibeoh=kJBJ>lfs1DC`jfc?wg zZRPl&&yfUf@xVuU$o<#6^8i@(u>LAei-#Gp9#u03u^d0%UJT8A+naNgCoEzxLgIBy zWi_465{Tr%%mfFYou3}6mSt<^y~$&Hu31D7dxL~78HPdYL2|UR zlEI(trmI8x9^Bsx#vE!Sy~hg*WK&x3JVzES^1WGkb#@YNnf>LNAK_1b`r3kgg-Fhq zGQps-jVPiluaWGL(uIOZ=Xs`@m1XL^<*ul-i83qI@#5&oL18?M^7yU#M<*`hj^9un zs=2RKtBZ`Uv3I)Qd3@*IFY|+)7ri;U!Q&&?2~Bxe^wcC|VS6-07qCo9JB4`q*7BRw8}wHnK{bee>>fI@PFY!}lN?_ZF8ZPfPi>s{&9lgni^ zv#}b<&O+S=m!AtvltM~2z+ahUGA+X&Z1q)^_U|N$xP9@&T#)G28())=kx@;|6xGO5 zlgZYrP$G0gD>Zs{Ci_`E?)sJ{F*M&STZw2{RMUFg2cNBYy8Jaoc74^*GYtkstIoWK zyj+nAsT9ms&u}ID^tSnFO?ZY9JOAUYnL679;h>zt1J`OnGOaa}GgGJ(t4{uss9 zV5$@`D0*<#%Ptwazy3#YCsTCb;;b3b;O(xshdc(JklegVqqeplRwtwN{(4sN!T#F0v@m#unJy`C|0gVsm=|v}}1m9+JAoyi@ z^DGS9`y@qJ1t9wB;HZM}?yd+EYV_lBv2B?-33sHe4v&tB=ETutGZ^OY$PDCmH|`&N z|0QYX%3}G55oL8{C-$$K8A~h%#~gL#G>_PjsXAVwo#ap({3K-V^$CZx3F1zlWLEB1 z@3&pQkApcO*!_7DxSN&wZM7ZGNyn%!Z6_fL^W6Vty6e?y(GvWqk@7At${@1bG?2VD z;}k6~w|!Q>BX1fVU~5311XdPTO6PbV*|;y8G1SPUCO)y~V6E&yo8OO~n*N%&dG(pa z5wNj3n8#2%z1POmt4x6xY9)Gc8_DO1ij9})G&F;~0@Kn3A-7|gLh) zu?Ul!Lo#WCBv3QfX$R;gJ+GU$ zKi&NuVe{L&t1gQ#1coM4W;M1Q2vL2deVFl*x>Q1{E)ie#sW=~4keuv?*D5?l6&rp? z58W@r2jctgBpa9YwpI?!%+vbG#VK-=d2czr8&T-Zg1R5_R2;g?Fw8WXZ_lrB6j2Z? zbq${Jg;w8o@wl?X=L-=v_eocBQ}7Gfp->>pYGKG34j0PE3WipP%ujkBnxJZT>&sfu zxTxWQ%lw*1YJ9IdW$0@ek!MS6^n;UcW>j@*oIO=w+&zd*M5HAE3a1&7MPHw^4oQW! z!;iGy2R%BSx_IQ3Ke8$$%HMzE5r6oDFBzNpIq+mr++R3NvJ#(l^OQ0Q#n}=4R{7~U zf_tC(v)E?ZjGW%+X5If)cwk|R02%rmN930-ByDFlTrqNc(<57>wPe8)WBRbCnz^qV z$#Hu>nqNw;Qys z(9_UR!hnr0c1%LJ{9EeJ2T5H^=w)lrTWL}}b*5!{ zT=?HbWUIo^BeRXZ;2$`m;yfhK-mZtsu@_VV`+2(-vJ=9F3ucc$^hB0fkLk|by|2Ha z-_iuFdw&{XjY84xL>X;ns@L#~O{JAg=*}Mt$m+~H?spEeSz&OhW?F#l4C}_;jBxAm z-1L|idit;)-6X(^56WvRi-f=TA#!$9CIc0G73j=+S?v&_0d&R?l- zzCTzuzYnH6n%Dox==3vQVR7cp^97c9N;|W?<|cZ}!>GJ+JX|$%hw{52E3MZn_z^Nx zG+oFJ5Z?CAR_4^sW_f4)*Va4x?V&>h(T1wrXD;!dt3X=`@4f`*yjWPDJ3w|@-thX= z!t9gSzVLK@IU1}1=5p5ggA0Ada{@B9W^`o<-I+o7?^vuBuSH>$&@+nH5@BuRED1z-rKH=Gg{_D)>LH1e+-aFqpe*ub zagCk9Nu@LNS9h+jX*M`Ice=>q-yJXU->Jrc6+TdHZt3uvtL#iwslP^6*!&~#@aPXZYXVFhon^+Yt>KoR^9i^>fMD*IeeqR z_fiF8-!M4zapA;+)^y#+fYHkmvpIFlQFDT50IEa@4FyT9aZ#Eo)$$!too#H|X^0nn zx;jZ=8yzJg7mTdnaep&xL1otm?7C)7CuZ_FM+dTP`MpP*nDh;8$D z;Ch&wt()l-Z2B1$y!>x59Sg@5fXlpch0(?*o;#v<_s)q>Wc!W}^BdtC(?jICimJLb zF|##pa7Dqf*4jsVLgYU^E`8|NVlMl$j1pw0zGgf?#<@V8-q=>pqaPH@`!U_57jumG zrZbhRmB${*p~vqRd{Sf=lH3+Tv;H>cP-GF<-(y!r!(J zHEj~)UOnZ8i2MrYEb{wTt4m&Q1~&nJ1E;Ez{O0TbEZqODWhAwju^Pp%;Xz|KnOJQB zj^I*%pZenbkmsl!&QaUPs6N1-x7?}*-47+Q*#DN+bpXa~2hd}hl&?RlHI!_%z3{fU zk3o+z=6y9gbdRV%JfP4q6)4AA`y^#tvc}kqyp~*l@;IE~r`hl-BdiOOUhXOu0&n(m zgb~!g1>5-)_3@ZH+yQDM_<{SyOQ3}0Psz1bN4lWgnrhx;88=_o(ye;5ImRhdC?Lje zp*kJ)vpuB1b7QHlZDyTHDg*6yX@7um?tQ8qUb$PJXJ*~)>&+YL&Q+PfwQ0AKhZm0- z^Ez1PyL1GmI4xLG=aB_%MM zJUXI@=_vFl&Lt5ivOlg~vI=o^Ia#niZyU-UY|XZp!;?M~sja1Dh9Q6F(yH|MFg%NX z;-ePtOtfTv_mh4lY(1j7w|7fyxQs+(z`O|kILP}lbCF%HnM>}mnVs~LyK>;HMFrQ* z%fasErNLd}sO_y?S^8JWIR*LF-FBk|7!H%5Dl_jHwFW@eidHxk1x0SNWoMU{#fXZ?%*)}U2ElftgI;<1FG<{B8fA(t+S`3%Wp(nOd~cAb9%@zSU3@!V z;I30klh>$qccAlCDTOezFlz6Jg}KnS8BT6pZ&_o4w^$I&aFmK2@u9g zL>TM~cv76LO@|ZzxV7Toi}96)dv0t{^p04m)Z)@4MJ^|zqPDrP^ zcxpv^ZA$i|?qQd%#KZo>g_~K6Q&nE;eycaa0-Cc3rs~?jpkUDs%s_!&1z3|2THO7N zc$INdD4>$tU%b1_wch5_%NUMJ-A=6|1gG2S%0k#J8UeKojEI73wGZ0!>MVyxZOaX= z>-7qyru5?t^R~xFF_pFEsVC2xK89B*Bb;tJd$Ht=n~&2;>M!@7A8-UN_z5MpGO}ZN z{TZ%W@Gd24-4H{?bvJjldHe%T-^QP#3|fq5SuT6Z@CsVXG)p&)GQNtL_95 z0h+5!%@ek>YLgLR-7;Hdmvv`q8ntC5vQVIn&3l*t7htzv^W62m=b*_hRjN$Oq4rS@ zsMoy)mgpOU54?xQ-q&x1)@z*PRqzpz<)Lj38u`)T(HhNQ&p=zd>8|41NWR&=(=RP~ z2=VyjtfAP~gMqJ4w#N*A(KsB|Yy9sfIVw)8Zwl3)p5a&Ljpu2F4KMdMUFPT*4uvHZ zWF9dI_QhXTk^8z}XDB5k1Bi#Eh&$@J{y~4dc!nmOx9vejAEr@YP`M&um( zrT9oKV=(utp9aY?VOK|sBw0`N8WapO4(bl=zIb$ZS=v4|S~*@(lzbACTr|~xvZWpr zobw>s>IwxF7BhM*;5S`*ppG zZ~5BC%QnxAcK9Go%8SiZK8N#~;ki$ndC(a6wHt`cowO~0ZPk7wVY=3BrH2z}&;5jq z=prg_cTOxaH2Zxz)N82A0QH{!MBgj2?R=4PsWq*R^K!s{+>n6C*(RP2@BXgS1w2h; zr!t}C;Hqq%*%C<1wUof^B`X8Y5AF^Z=>t&BU#_P-V#y$i`mi!N0NyFH?* zV1eIFHUvHiNJ$_#w*eC7U8XAOzu|)h7WuigqQz3rMbNL-s^H_Qh_5<%cQsG-TQ-Vn zhc2vpuj`h%`abE}e6I{erN>pb>*ZkS1Ky6r{|;trm+^4W?g6?*w zxdf1U&cVGnIo<_^oz=s6uT zyYET*$l}6UJKVE4B*&(C??8bkn?4|Yk2?k+K;>y6U_+p=eNZRyvZ{8>&uaI^An{P# zM<>-lC9k;#>@q>=*>0VcUu=<_?~Plj2q-#jkDaUoDJKM1hD#L`Kceq2E~YHHDv!#0 z_r`u#%uRh-xNN;*_UcDLeat&5h{1)&(acAO(WZMGIMl!LV%Q6unUC&lYWg$L?04Qk zM!r5GJ0_tG)UIb<0u!5A8h%2ThLWLA@(b;+{EX;rlUe`0V{A^1$^N{BO?Pjo-#KwM zr3=$8TDzT#f8s|7`Y{F1))Fa`#^r_NbPb)@(eK;r1m zvty@MU?g3!iM@D>(BKjf-QEtrxTTEx`cXtF1%LR z=9h#tT`2WHOPy3nk$6eY#E@TU;C~zpA-JHc1Ci~C8hGr?`)iSi^Cw-MyTTPVvocHr zzzVNISwT=ry?~uI`mN>yzv0X~5VwX3*8~rZ-Y0hL%BEM}SPH`X<4t&)rj9btHGYIO z`${ed$;+vH)%fxHl5<>wPZ&mUPtg5!;I=suOIcjco30PB$vAOCo_PHkBUWSL)nf%a zBB+=OQ$XF*x4FH#I_;f0`ax(fl%-jk&8JQ4)yw_AFiXn1#e31R>I-588vz;D1i8z{ z0y0Xgm($;DXX`F%snIojc9%E_A+Ow4$XS=)pN??;K@#1CFt1z&s@b(<*zM)^$4|El_2kvuG#$b_{czdOioOz~^ZHh9JDuM3Rf37I zo`1{C?2aAYf#14f1N>>}k!EhIS>s1Y00$a~H|ZZ;$Z}ip&PWdHQhL{Us z3^$%%OB&WmAFB#~SUB@toHUEhxOMI`_ZWQR#`uy*l&+KsX(fFQ8ShYxs|d5X<`CA- z^RT8GXbI1rXp$1eEv;L;(ooAV;_)s%_I)3f5KM4i>AR~}Y1})T`}h8M5+ybAL++2+ zDrTz6dWMN_F2PuXxgeu7gkDskIl2aPT(K?oO?dd`74)X^yUJ=x{P(Ekiu)#r zdsRA<_)B|bZm?8o%(a}T1FdOmi^)WH;Wz;as#I2Xo$8wgIwiy-d2UoPG;nXpiBLYB zP@vYkNx60GEaZ7!NuEzZ-p4kt*V5%^)~$9^ugWa_If(!MAqmduGm6I1Nr(9+JYmQ| z>e)Pl1RWuWQ~GBcoyg2Vs_b`n!j4D|0hV|LBeayv$mli8Jnb`&C@)R|YAqSg;LXyg zI9*S&yfp9~qQpnPiUXj1&(Laokdo)Tg~R7_R!{%;@8313mGP-#h*kyRr6rP$KHxhs ziMJ*ytQDSLCpqAFvi>DNa@m^uIxj!dL3c9tc+QJlc@C}2Fq6g)RUv-(C?z|*YQ-n~ z#R-1)-$wGD@H@8s(K7OtiJ=KIpRx};?jdtLt@CMmE}9km`Kq@&#wzmL?tpP8RO<3h z${>rvo)&W}?2-m<3ISDQ`Kcd=pxinn;76oJ3rKD`KekXj9=T4SY+A>MKL z_uqOVprr(P7C;{dfk@hCk?Q#vtS#E=W!t`Int68#FPbh(iJxuDAlD&JkVos>`;;iL zOlVN)6JY*!85_-p7e!@?yXqX{H360PGq-IyN=k^k7`iAKLf9&FDNbNZDO(jx-db~n z-!?JmbSa|;ep=%9$h}jzF_S!NrXITcjR7rIDl!B?`MQEwwMkQnY;PaFfcXV5!gGHQ zjWO8epX=P2n6@U`#FMP6Y!~MbUdTU81vYBEPixbvjm`x(R$I)@3z2Be>|Lv6(etbE zh%U{yWGhTea~y|^*9j@5c{mzzlTv6eQeJu9>1ULx&*d?6@MgVlaMJcAX&)Kp@u2EQ z!hp_ojMKgGsv4tw*fFF^HJ)H`PSgO`dqF~fwW-V@jqCGijDDU{D?uXWmx=gXRfgoJ z#l~L&_5m8vaWRZ{+GzrPP0SxiW1;}iQ;jb9tISw&-2qx1G>qYQB_e!2Xz4t0e6DQeSTFGEAuBUeWv&AKGVux;lZN^4{)GFBU2*riz+CX%|&C zQR4iEI<@79EuSS-@wl%L)znx?L7P%O07tvI({1#piydFrwzzA>+}0ZLmfU)WGtRnO z%zf!{t42O-aeC!CfgDmV+G3yv~+puuQb^CLxRr7^Lyvq zDq7?}@J(#rQYhI}T*sx}S7@AO&r1Rh=S6OElE%LqS%=KFjV;p7vr}OHWEojng9S84 zOswmKmJE?U|7{ZOyw2Ev&{}%-<0uIN0sbvc;t_# zk!&n}Q91GFHE)Sm5ArA6s{z}KUo<@xSI??#mOMrrEmAE4vl#7LUd8g)Lt|i@wTtGY zDB@p#D$M;#*+k}~I^M0_#VNXvcbm9_tV~8|_EzriVU%$>>V*tKYIe~AtS~VxpW8#q zyNFg#RUm#`id8S{=Y$@QClh=eO&Qdk6ML&Ict$C1yVm5($4Dlr{x2<3PiwT`#|lbo zn<|<6x#{?GD>DB1{n^3=bgsRcol*7-fmE%rZnv>N zxL7YNnG_zf>a#o%$`Ggh6D#-&LU9tJBI6x-PUk%1+R~5K?`yzH>>GoD*)lm>E41vh zWu~KxBzvG#xeP9IWHQxTX1-7Mp1VV;xvKpnm(7@8UkSwA-mJhXmS1!bQE9tEn%8&h zyL;Z$-dptge1V-NtzIBKDjGB!^g(F5Z4^CgepFSowAk>OO)W!H;7yF2_SX8P39Dij zk+UhAnO|c0CJfJId0jv{i+J2Kss5V!Am#2 zj*VG2lB_>95|d9)lJ?`KxtM4&UnNAEY*p#0X7}?V)VoFN7rxi&AABEvTQ;U`juomM ziFur>`*|ri?(~LpeLa`=3{uG9@=7nofi^2EyP$^`FJIXC?f!jvN)5Y=1xa0J?n1G9 z@nz~Cth(YIP2_UXQrw&{j?ZSS$1NhmBD3%pycI`@Qrm-q6r-UBOeD;4>qceOHT>U+iL4+j%x#U zY~iR)&dY)aPd8xHF3PoY%k|zHyyq9qX#%Yt#Tq3Uk;r__s34XCCcaXd$%5@v;!>+K zi0)9DbSV$EH~&a-y!Mt&fQ7WE*B6{4^K8FtLDja)hiBCj4T6=%c(&SgAENrct!9h4 zSQg&bh%a?Xv}K$i*SqrgGN{?CeARc_(55!AbG!3k>2+yD|MAJ?hWpoR>KMu6b@#8l zyBh^Y5x;yUaAsx}k#B@PrjWm6Hv4>=vY15+x%lk+VNZuvhCW;_=O2y%v4Ot}NV=|WP)o6DvdBija8LdH_RJv_US+0F8sbhCc ztX}azV3<*Y&-hVm71@a`gTaAgI`D1;jTG;jHg(A$bU3$lzBy2e(;X39YUF;4eKrGP z=hP0VqMq-ye=;&6Kv_%z4X2-|clWnaA4e_+znLhY6HAV+lhO=YaQj!mF_rV4hv)C6 z462pKPWBL_=d28h(?uJJX5SN)VEHtk$F$%ZRwzl_BNFFC*nW)1b6JC3z5YE0^gXVG z;4Yy5&?w^R?#b%QWFaqh-`Y>)Y#t&;`PQw7i5J5hd?^vlxlB&bammVZ3}mzyX0m)Z zbT&(`_S?n9sa9cg05-Ir$K62xYOlO89HphR^3%0wkJlW3tVc^jf|LiECS((yuK~Hs z^2YL%n{v?ZGKG;nr@&e{%2PEbmj_x8RW<0Pr#PEspWV;-lJ690ae+%sjjKOAY90-c zah?np(hK6gel`m|U{0=|_KG!+ivtRZECS!@+H&F_yWG}zk;v7)~ilD>q z$?y6`h$hgJCZ7lhusM1F)cbI4!4>Eo1^0rHm6_#ey%y#{2nN zbH$sh*_hi!9dYseo!D(%-19lKr`?aNbq}{M`#)gL5Tgq{?W24>+AW)S(cdK3EoPj8 zqd)^uQ_Ue`ZDmUW$p#>b;&7I{oE`_Mj^dRBzs&3-};;O+rFqm{0MjWeI86Yvg41G zU_tNwL2e6w zMhQl)pLaL0VzPPubY+my?*yN0SN~LV>UFWk_oIJ{p#FPLfDV_a&noby=aUUeO9!LH zwDl6utA?{E-`Y^tE|tF8TvHYW#PSv%j{Cvj&=OrKvvT6{_MLJh+sXK+SS8h!oiOPm z(Mk{0bNGa@7Oi$3%lVEA8|e_GxH;@bN`=Yqr8WCA(2QRe+EPRYiZfJ;S3JH*@`lDv zK~36GL`Y*~k03Xv+{3*R=Uq8hSKy6>N;$-L?6w#FO}m8oRa%3)v9*Vu&S#%5e8VXc z#$=wt_qrB;=n)AvHa&iuzyOHI@#C)j?hMJRg}G->MS^VsjckB=V}YSmgR}N>B66jq ztX0cRy4oELTn5dNLm2xcWWg*J+>~We@E{DQZKHm2k4Nv@lP;Mis(R-Q`ff_2sx@6EO$J2Hxn$$lO=aYBYj43}qFFQEBA2?BM)}ULkbFZ9#60a{-{}g& zI}gpWAV=unwd^iM=nn7x+q8F6d07}=EMX@CXVARC$Zp1A&?JkV*z=L9_un+tpkyN- ztyEX`dA=x&st*JFdT`kMFLOn8A4Pw8={hey*PLQctWr#DI1^?xoY8IgSuR~@PQf2N{e_dB^9Qgq zf_u5L($Rzy=1OR2`$5N?bz8YlH%T%@7z}Vchv_S z#RTxcUNm$1f!;v}bc`{0o&Q$5NZ0`D$n#geVQue()B zBd=FInUOYLyJ+P5mz^z>yOiwswlnv-XpN7H`QBOaHS!K+p+ z^4hT0QA1MD)Y%7*aFmUT49%bGm~6uZ`>0HnCfCU{J^wV+My%7T`vH1O)&Y9GNh_P_ z(BYHEzKVe&&XjHQaR#(x6^Z0#$dh=}t5{i@>Gqu}KlrmEk;~8{V2w8{jK{}FKg^XY z^(mlg45+>kqL}BEJM$tM(q@hqO(>k3?U@;1D|+1Ip9*P)I~&8O42Cfa0`k%7>PyDQ zUkQT>P=xbzr1FKi*gdqk*d4T+xnxLYQX#A$a}kY&eip+?p2eunnr?Ifvho*j%{)1U z9hiT*IBvteF#UlgTYb$AeN0zNnyd}0}FWCz7oKHO&NFs0`3dL`Tu z2YFFTA_cN17!zvpaWyzk@Jsa91!a)$@Q2kvzDKaD%5W_MVI#O?;SL! zH3E!j!smq}I9}SMVV~Un>453-?tS@ldQQyYX95ygV+xUK22ztEuRH^Pzcr1CwFQ0M zz?*Y+Fknx&JP(P^he}K38&dA;=HW$p5qVEx^3(tOA??2<_jv}(gs(lFzc!m<17~FB z4S7MJjc4<%fpFTHN0>TcNdtkgwNCVT4NF84YI#~6%d!B5uD_#UWjTxioV1@Oy>IzS zpKOnaD$NW6b}lZ_7$JCh5JK{EQ>WEG!EF(5V*3TYOeCC4VG=u#vVO*o$utDuf2QM#dM=kb*$FE zVU%WftawQQUUC-Gc*F#jDVeR*3%WjY_++nrf7P7kuJq%tm$kWwB4tUB)pt?&H}@=!R#!sth$_*ud@Bv5Eg-F z0mDyD&jD;(yn3?V79Y-v5cfGWfH*N9e0TyDB&FnE_X zysaureZuC{aa;}GfoF}c7d)>FaQqNKFIk3UclW}XhE?3c$S!tN=(Q;T+qFFMG5zjh z?Aka4{#~{LzK*nVeojFfRtpK?ku1pYb(u)YC0W;bxZm9BO;nkP>9<2=;yu@!%-q=P zm-StBky_Ny<&mKxOw5JSiQ!EjIolR$E#ZJVF>pp$1YdE-5UAJ||3Q3;g zt1gq|ZNq~+7K{8sz00oRoB@WtPRRnkqBr&Y8>^41I1oCkNcLXoRn{Zw;UVqR?*!3Wl1IsXYgeg#Hh{eM=HEBiYN&Qf}zVYq~60nT*Vz zOygjl8btMKEbpCy4f__7vZ%BHZp+>G27lRAT2_jED@NbQ`q{uIe6oWm+U0Y_P%{__8;|%O6DFMdT z>N^m@ua{pPsh6&qe|xvsS`|^=Mt1^+5Q93pTA~ zqG1MrSaPBvb=*%)2|FTB3u)vYz&=kO5+6Qn3VDU}#D~6SbR>V2u;UF~Q=l)&WWH(; z-$7{IJBYmk3mYNl|Nc7%X>{p`iTi87h0Ad+ zX1k3aIXS87m^DjT@ch4XG6G$%y4*|#RDuRHkn2b@zom{0wpL5(eUlABz)fgF%aw~G zZu5*Udx;}|)oWO~YS{}Vr!UzH$XmBfXBL_h#UFH)_7d34yw#pA%Ox$U9ZBwt!ob6K zR4OhC{eUDN9@E~Afmv1Rt&}RRwN!=k;2HDt= zU91y2_Y(e*=o#8P@-kZI@#`PSE2R`V{zE*&^@Zb}o5iP9+ZRo(+!0n_GLJ2y^`_{a zYkTw(#h2;zz;Xoc&M{P3q2rZlfo<#+5}G|={mKO(4dr}=0V>T%w;y)Tar_}wb<=Xy z2fY98MKwTfVfU(O+F~|RP+va?z>fgjDv1v&*(6=3*9LoF{Dj`2Dws2WxJ>sHbp@%L zW&6^`-V-?s+>)aim+5LX=LZKMf){T5J^?lO1%KZD3X>Y`?u`~`o2Q(PxxnmjA(wpdkd!jx?i63kA5Ri5=EGo_ zhwF?9kg|j4m{j2JN3NgF6@Jui6X2u7=P|twh6#%O3hDl9n2#`8kM` zRw?=ur?!boSNyBQQ=!=71NSGRdpmx`+dGSe@x9i)6th>+Y#Fbb1xfa6eMBoQ(b9yu zRz_7@%x2 zQTRkpq*QwYPG6pgF$DuuN;4As8mgOr;N$X^)y@_f%yBWachENaOnt9@T+gC#Wv!6} zM;inSu1G%|NV9RSULyaREmAzolwjqnyS|CDp$*zp(*v3LYud&~fBhEE2C?+9K}XS^ zR?eH0;mcoi-&?M^fIQK#_@Z8xlIVcHl1rh+K9`TCM;-8f44_|MB{S1Z;C|!X*KWm; z@1ayOD!9p6rkXUT1GOF^nCkgBfjpFlvujE9-7q6ZVlcs@m!L)AlXF1czS4f0KdlHs zU)v(Jmv1IsGfnGOM}c#-g`MLxC4)SV1zcsfW_!p&yNVuBzVNU|B(r&Th+$BJbHw~+ zzr?t;Frj2p-rf#6Z-n~;(uI2JN3gd~f%9akBp#5Q;Lse&Wjpc(()5X{c<5?24bTT- zNiG?<9Hk`73bH-iSM1K7%i>3w8EAuK3QcdRn~qDdS8YFT0;yG=#@*a2O1{_~pQ zrk$9X**@6ix^-m(Jn>iE>8RlN^wRmMSk%7T6vi#pL`+(En2g%Vr7*R3ou0OvHfTRc zu;F8~HaXXn8NbdwyWQxvMfwqb{fQgv)#jx%N`e8i`P}~L^@8&SUoTUI$Q^|)E_xal z$*G#=TBTDzGHS9VUDFMjJWHRb^Ils&nG`ok@1vd~MRNOH0g-91t6o|LUgsVc(pl|G zC}o)y@}?=D*eVh%W`KK2@on_eE%?Ay&rI;)BJ< zc}_R!BWb2e>-3A1)XrPBn9*yWNkv=w6Zq$$b+4})`P!Kz;N*eEE*7cM0d770l z2yi~WyxgPsxOXDim9CYSBDMvkG8aEE@-(;PzwR&P$!NPOh%T6OADhd#xLa2dtNIN- zZgiw8MyqM8J~g<`MK^zOElr8P1c&R*rQ;>TT!eoRY$zxr57h7qYhNvMHCCSwC1};Hb#B9b1R$3~M%Hz1>F4KHx*ec$>~}X4uSj+F;)k!3+S1!Z zPp4i>q2Cv~gM$3ZphP8@hl}ve`DuAFzJqNoP}p^z^!Gp;!Iw)3T$K>$6{LC@0GsvN z4og9ZNBgz*=^m;swb;kfXx=ix-Xb0yFOWhN<|skdi~f5jdaS)4=Znrh&g0&NKEmDe zcZ1fq8^u@rFU@-|MvMDGWS24pzsTiXMJfA(-MfdwyMWuAVZ7x$-~Ar2`}%T$kI}nuw<#YcP81fV-d-nX&I1*A+9T4-%4OZb4&2zY-h zK3R3rD({9be@Xk}M&3rHT-5xvL_o93$Se5yV7h9_;UfMJSzu~pxC zUxLG9z&|$B-`b~skA~9oB%y0@83AKeLn;xImbPouGHtD>Bdxyyt@6ru_DNb{8bAT3 zO#iHEW32}J)RU!r^mZeGY0_HPIQBXRnufO15GLoF!CU*xxoi*rw;}LIn zYh(ss`Y=fdCI(~9p_dWtJojZcHQKkQ06@P;Oe1U>ojF$mwrVV%G5bAXv?~bK*u= zP*!)e*z=u>xx;JKwW+nF(EKSW7XjIP9QxchOWh0PKDnveXwm z2fBF5pC~f>Tvez0uGCR@&R{KwI(zL^rwQz*oydz+wYpl{`0fOkyQvG?bh=0qtvjWx zd6~IH?M|2~+gtkDrXX&}gWIbB@=Vsw{(93)AR0zMY6i&j?(7oQpo3axE|hs)PKWKfmYOGL+fO zdPy~l2(-ntuFgF1oNVAHyQl+yUR(=PMJ#x$@;tkQukNJ{8;o{%QXt@JQ?dL+I8W}T z9ve^E&t&kWT*7#^UD$3m?Z2VY#mK3&XM~}42`u#cH?(T%KVCCsBt2z({HO> zrUB$^LRthX!(@}!UfF!Jp?5xI)4$*~w{+UJZ8#Ll8IV$+f?5>&Dye}~nIa?{;2)xQ zODXA{^CXAM>~Hbz?jhc{@S}R?iRRHjRtTVt{%XBy+UGJQ3eR@}H9}64E~iffSP@1B z?@;YSww%8g$g9PJw&FWm(sxE}1un(C4BCBJspig4S80`unik$yKJUk4Mhri1r@30R zyztIlI$!JM=z}hr`x^lBHWZ3S3dn7)q^)DydoQw-Mb4IOBIRdu>D2-JMQzcf0xCG{ z6)YIFT)Ov@hUt$U9uD)~1?4z`PT$@BC!-E^ibaXg`T30uw6+o;|U=3%G{fq&cKKF~4x$^~=hMQKkRZ1=5m(JKJ~oVwXa zDu$l?ZogK53hAcMQ<||6F5Pj-B>qS0|kR6cu69~FMEOl zY@phh#LT2aOHxAlaY?F1w=tk`WqHS-3buc|D^zbdq-qsKWa!6k2QQ) zW4<18DjE4@+`8p5J9}W@DlS(W3t)DZKM`y@C@C3jDS2*}w!P=#y#o{^os#U0Vi97K zshhucjU3qRc1#&h$ENhA7c*EQF8Kl7-+$j+w>!93cvqVR6@JiUj1EPIE?6?{efWjN zP1wZ@fX}Egesk?#3i>g$Ewgi|(0k2)(rCro9Kyu=sQ`-?DXzW9Dy!{@9;C|^3hZI_72wZ~AECNIW|E8- zJw+2k_|2QS7uH~q`EB_d56*ME$jbfMCXb3*8rRY({>O-s?-zFZi~%=VsPNs}<10Jk zN`~Ju6w?SG0NA{^bq2eOa7_K4lz$`Cr_1PqC5cU^4yf(2H1eL|A};-mN%5fduW|jd z8ICeJ2{v1a-&pvP?Ktu%*zog%Q=B~`^0qR(Msk2qv>BfLU#NZ>ps%&Gx1>Q{pM3M2U1(-vL-_QZ@S3C zkkcjLCU`8N9{+EKJjg(f4(%**rTYJ-Yq<$23t})3CeerecQ7?Z1uq z_c*cWo__y}Uzi%<8#aGS#b5;cKA51PE`s=fW0QXw2xOS&1B-y0TeLfOZf_MOxeI>X zTfdiv`(EA@(c8+&Wo9ui9`W2Za^Z=Lw6+zYG|`l)E*WDz&*+21&l7P$Iz4Yo`0q`F*m2|WtH7GFR~i)6+n1Q+c7lRrc7bj;8n%m!T$WO zPg{=M@?crZ8)V*PN43t6J$17oO|kK6wDy6@1GN|p9g-nV22^AkknmOIa>74V6knh-gURtF6JGt7cCN4#%lS)oCWTR) zfn?B}LwU%1!(4#uJaK}p z*X_^nf3^EJH|}7Q@S@;A$={X(ybt)Vza&M*npZkXKwSpJD!kOF02|FyKbWwD|qP(TCCLozV{=(w#S*&i^6|`OPej&Kb=d z&1RiIe%zvynNErUf7RXJ@%BCXfBHxhA_?tg2K(Q%R=tIH>xS9UrsMpQs+i^D`&ymB zyQTSx7I_lwEhCDRbboW5Z1AU)iK?iPb(rJg6HK#6>-QY(qzq^)Z3)orN z7%4XFe&rae(B4wL$SBP9U)l>K$}rHs7kHBgS5PVD+DaR^{>__id9hDWen~Y}hh~yJ z+=$N@zd8TULYy*E*x{Pxd6d`6SA#2-e+!|F@m0pt`8AdD);D%!=}&%*`5&VEES8R~ zSWZ9>F1tPRHn~lROt&>Uxi|UaNM_S>Ptajj_}<0hv9I{vO$F+hLPF=|-g}F?e~1u^ zA!61b%h%WtPS*1yvn>@St}Z2uWX+V=aC*7s9PVK(i8GME67F?g_9m&)R7o9?Df=-0 zcEayr4cBeNQz=YO0C%+7OizpYryI@iRnGrRKlu zZuJz*HkM*IGc!X!EK{@S;HvW=u=!mbqBp`BCC~XxRg3+m@HxKOy8p6JhT^{yj)KJ# z`XU--+C0llbD6zkkYRvwcLq}Dfdjo{?DhFAiGLOnagZt%%nk;Mz$j}E2c4SyiQIL~ zLeHNi-hRyFZ*X+Jsmj+}e8z$%^;<17`mj=CJcEHWh3_$djh|19A2N@Mwse<8oiB{O zpduX@?CSNg0p6&v?{$Ac41Cm}NPy-B`)VQcA!vb-*?nDY-hopR&Nl0`YHq;yApHN8 zOFXEzh|zJQzeuDNb)@kgM_pK9V}h4&6K3T<}3WS!*~9zXChRZ_Qfg_MK`ED_|n(& zo`2&jMK<`-WWoETNym*M4wAjo;K-!kQ|+GxPL!Xs;BEQsmA`omG+bzz%*(}_H#ITG z5a7>@Ygk(O(Oa|grpO6Jrd{+sIoj_A!alwy+KYE>zRG*TmF{G|)06t&|uc7_2h4rA`4Usm#uS@`wjI|*_cahbLIolRNw_(IPa^6)D3w7`_R z-=&$SjhjjQ1BK219`N_4=y8f=e4XQ;k=Y*2fxWJvkcWmh+!jNLK2GI8a(6ktA~JVq^Sk!JN=OS&;C#hHTd=WKqP4$ z^|6|NT*N0Nds@15pYwhF!{Xn{^LHU5jxfUjY4GC~#)PSV_o?{Ptj3d!|8a`HiTqs< z8@>NmO^XBe1nFP2IgBDbv;U|*J>Td5)+h3%pM5T^3XA;i(*WtaF&R1?em(fVSj$X< zoGC0|a!^{&J8AR)Ys8UccG~UbG(hH!_srYBY6b)%2c-Yh?}ywkn*QOdk#-RSDQhIB zUmiZ%gK}p&@e01k3*Ct^$;0e)dGXx7Hic zDRgM}934*JZX;1+H7UJ6lrsLQ%P&=CzWEl!fDGO!n@+bCP^ zp-d*7HAOaN!K`)vr@@HBLTb58m#GoMA2s0!Wx;RU|*$lN({L2 zrSr1X&si&`h-~9SmLd8t3-nug|E)lR`&S#`8xm{>(qYOIoCnSo({*+?LJw}Xj3tgJ z*%C6hX;Z+l>+r9EzAdBA82+N}?N92~O^vhv8+AXiE2CohQtRy<(OV;e%Bm_Qt*NJF zDtY+HJfB|XgpnTilLZXU9Z3*mCEcEbWT5h z5hLG|Q_?O|NjoGx-&y%+=Fc-MQuqAaxrEu1O`|lTD4QbF@vH{Ly3gFy^wIwEBWA+& zfsZj*xVX5?h>R|vpf3dk1nlK)g;Nj2vsp`JpZJ{uZ>2p1bkuWjI9r?W5sB$h+~&hZ z-2?pP>yxGuS5m~i*^~Pmjyn^UI-IbV=R1?^8~JEzQ>}<*0+tT#{UU2M@d1|xb&@@_ zqi27~P?{Iz-2LT^$|1>5y@ENjK7a@nEgZi;jVfO0aMkcwMWc7dzSsk@Fl*NqU+Xpz znGVMBLN^HV_Yz+|#OBIw8A66{N1jj@WvQjM%tW8RIQTEX=Cha-asn<2y-nj-vU1SG z(=77e1>Dfgw3=p{r+oF%1(n^plUcTYM>~mH+#yuG6*(z>G*;Md?fhPlu7X1hyPX*5 zfwRkRQ{CNme{0Fd7$f1vH~7((I>|AjlRAaE8#bg}x3(g=iZ<{RjfRr{F6{g^#r)~Q zy@{51vD1-F63tcmCmLr_fzC}5ZbCi^hbl2hYIekJ`QLtc?dz&VzmWmgZ=g3EGtO5n$RZR+UK$PKmfx4hHNYL}Dstl_RTIkch?fF;Moily9hp!kSF zrL5nJqXpRaDr0j7Jzv?BlekBza8wgWiR zFw#Tn6#mdjUsJ_$_cvW)KdmWq%}-xBD>F#^8yx)~R_@Wym+rLd;pGBEOeqptp$&(% zVbPRPtk*c%D`bXf&V3G)_mn z5GFF0@8sZLVyD4-Pat~rfI%YaI38Xn+I&yOnOiJvcfn|-#s3zC;q9lBDs$ORpuP2{ zlaA}~X78NlY#)f%jH%kusJAvA4CbXLGS5D@$k&)(RtmfLq+l?ly?YOYEiGH7+ej8g zEo4{i+g~*38_P+Omr%EeYFb09#M{B&zXD;9bl3&XC96?Pzp#WluXX?^%oofnRu<&G z#yy=OU#gX}ehiX(<08w=um`xk%HxU>`q$zvClTrF#=LE1PLt|E-&YE^ScmfZod36Q z0>Wd(YPEZ^bjO$)U!?S^|K%X0kPxT^9SbV$V>{lGU99id^Btu3HaSvg4&JRvn!oA= zYh2RI)1jWj@MfgHtvS4NeL7gC%0olLhwjK=gfi@`k z5q34_E0G$D(HvH;JzA#QJmwHXD;vazbL!_4f5O{vGr1pr~Zxhp9%AZU9)9{6=Uz6?Oz

    }VT6_6aNtKkdCP*9a^lwy+<8@>U7w@1_QS8btK(yG8as;KWEkZfg%@bq z;QmiX-G)KGELu(&EvFxHub@@$)bH&BpIr>?z}>?00{m5lLYrp}{_wOwy5JZB(O z%JI1O==m6Qt?v{2cOA|+g0kRuF}yh#nRa&H@^V*$BGA+nwOFTLsb)81nhonWa6f!| ziwxn*EG*I?H6&D1Dl&V67#J|-L^^G;@@b5Bjl8vf&9EH558k(9<5-or(5vJvdG#eT zfd<#_INTV9ycuQ1kR`%Fo0^Ts`Svrl3+2mhK%tNeNt&KXC8dvww(lZ~u8TAf)N-ZK zN{!-`+dpyvLJzH|J>ae?@zJ$dO zICCC9O*+n#2TG*4xx<@Cw}|il;Ms&ZS8W=Mt}^yy7Fu8Zcw-C=?Kad91XgED+sJh<>L*OQI{3Bh$H zNROrF)I3Z7jMEY|%fj-oy&Z%ryG*i}f_R}$joy)ZAVnBnlt8{xqxaYj;Vi@x&eDG~ zuL7>R#$ZPvLromAom9KEa)hv@pMIDkYQi0 zo3(h&awDd(_|aff+}FF_SJ}PIa%ppWaw!$=cxIrbFc%p;0S9rTk)s$3!j2^o_gVQL z3hzFsUTS}e5qn3k&fnN=7#{$Vm zcA#@qb`PS@-GB&~F^t?BjeXCx9nl^DGn@x2MVaQeP3zraru%q>5dxX*mW39a>%_a% zSCJXorZe>xnnWgYhrR}P%OqUwP_q+!C`}W3Xx&S0((I)lFdM~bl@g0zZDFhd49ZY& zC=W^D+}^*ObTl)2GP^k0f4_I~-4U(LQiOCo>${H0F|<$Id6c{06g?bO-`y^F+w15q zN;_D5?}wP@^)GFAr&>RZMvI#53CY=vfH=MyEI~`X@8SBwE72t~XG82vm$J1r@+&7L z+Vwtk>Hg*Ly3sjV+Y$O@#(UQa_u5+)mRYtIJM5stwjGcWpJX41I}R5nAnDNnqbK66Cr_-}%&NhrLS`B!fq8KCAC{wbVWH)V|1S zqJA~Yj+XM@&_p7AKylngC=gcRxU(N3_c}Va+wca`lP=C(;dYB1S2j+u7Kr_(+xKPI zccAiop7XQm#1`8pM2m{Pd^0-yj~oxgE^Zu2H*aD-mGPCe7g_VIv?*y3m3+aCx1N%m zsNv7BZREQcuW=Q&#k%-mFS@*(m~ymZZGF^T*Nak6_HIKk)P^LI5;1?**1n!B9&LwJ z>^+>R2|h5WdF~hXe1(()#lmM$*W;+g&f>GNxZO(SJ+6|OC|b4f$7>ts_L9I5_=-Y| zfawqW7SvSZ3UiU*8e$3K&WihNrHdqMG}M9lU-)tzT(~wBbVEg$YEFxtinbJPs+Y3( z502y?KQ6vU(o|DyRX6DH>|-d4j&Z0+c#kpSpiK%jp^#zjk)u&vo10A5S!DlP4;epN z0UK&e1&PE>-VeE8m>Ut%QbpKd`>mdt!C;(}W<1%`#x~^^wg&F>*j8TzB%QIL4HNl~ zfm6F4dGzEY{u9xn7a}E`VnyHUrb>Fj$HbGIsl~OCScf48_J|Hd|+^8wcaW3%9Nn)XsK z(OO!qV)2=4^j)dbFVDC0xnm_bs86?V&{C8{h7xt_x2XR`L-NPB?YIymwwMGJc)m;Ad8f$?0 z=N6bTm3ryK4&Q58m!l|T+V^n&pun4MZ(H#5Kep++CbrIlc0KfpXY`>gnap3sTu|PV zx&k&(Q^&-0HdyxN>T&aiQEHMG!}^jNa;zRL&>kFq7B-@)rN#@)RAyq=odPI|f$T+1 zRzIvueXUwk{ESodXeA!wyC{>0@LT!bWqp;;M{OoP8xOQ-jbqK%6l&7wxht*;Fpu8d z$2&bxsybfgIH!KT$q#(3MD9AmVspRUujCQ9apZ-dv`v<&5Zi56VuR2wmhyO1m`Fp5 zxBS!2XD z=EFD{_v~wbl=0J+$DZK+3y()VoC~{ygfmTOS8f&o<<227CkIx=S7WzpQ8wJ@(J-qW znIgCO0=8%KN66UqD2oXkf^%CY8Twqq(+)=PNtGw5uF+mh5Sd$}(J^be)s?K2Im^@w ztS8_@>4?r%)hZpj&D!Cu*+P~9AUHaDQ7e)IQ~nYsd|MEOLGaC06s~g!a#!#E9_>S3 zGD?2iXT_UKx^+F}Z`~WP<2-!KdpR!}iKf;@&`xZ?UHT zZo;}%Gt7NS&$w8Cu=+C{q1A%>hTB5*x|=kakjv9mi7pDVZTaKOpl!&mNpR@^lCE7y zVbB>~$9xN-apt3eX}-sTvR=HSt183%LVb#%5-qTn1pPlln{5zSh!r}lNO=7SGOWpaTF)^#;$=c6LE#HBIqep>-SeOprCX$nZg;?vA1I((<(sl8R1nEUR`LojU0$n9*H^BQSzqC`7z4o+X-rmYI1`3rG zK8@Pe?OHU`pF%xEnh})1n|1R%EU%)K z$NSwoFnq=#`se-|Ck86{t8xHzfBM4h_R)7;QYDU6C)MzXSJ{1qFSt05B|k0`0d^f& z@vnDpp!nf*L@=)8SYMNKCS=I z((?JVp74ZP^qZg$HFbrIn#skTmaBq#P3Y2#@4jf%2%Ybuy~v!U9=$(0ltQsmc(0~D zI(KC*PL*o-1*V3F=Y-9D2JVji@gNb)a}Yy;cg1ZA?Po^Fnp3>wWP?(u9R(@)nOf4Y z3EfQ|aV2q-S4`pQibR9Qw3Lv=X0({0ESnl_yx$(dC)rf8hnAfYT?Ml$^z(!Fl7bFSRLYq`_O22+0?TOfYdKPouXH-~7 z)}Y8%S$gPG85H{fjGO%~Uv2!dp#Wd!YEc9XbbE6$=!&0+Kf4k0UGNDOxs>bU{c@jy z`iVs6nCaZ&YLa@rF*jGdVC$hRWT->mtYPeWaHUc?7fA$r(4YN&P8QT)da(JR_i3wg z4#44o)=sm=Vv03iXvgGeObg7OxNv95_UMQQ{`RZO+`wK@?swaoX4r=kD@%nbp zPQ?Zk=BjX)5DHgxoRj)7C)wYC#2x>SvcG_es$Czr;Ri%gS~?Y^yO9>@2I=kw5ov}L z1xZ0#7!c|19J*6LLIj4cff;gW_y(V&KL2yhci#713)b2Uv+sS!b;rKqclmj|ZHW!M zjBex9sFva*zv(zCgR)8huOFJ;(29_u!7WUSjz2`TN;Y(SS*H0M74R&MEpsX1U2a?I z%C_s^`P+9gSvp;I&+m(XgKkpy=RjBz=$!RykZAV&a;%>Vvmq`3h@1o; zc?8;7r!}Jqs!7j(7R&5XWZy3d|2UqUT6wr99uwMUY^UB_Ma%@uJIMN6$ ztcP}<|t9vBB zWm|hVJ-KN=FEeIGk^VAFF3aQv&KQc4$+hH>$)gVT=9rEkkp*uCfdR`Wu$Qfuy6>gB zamKKxUIm38)T74OTJ4#HpUL<|zklpP9YS_5l=rJ)!s<=xLs0~~(q1=+)OBOHy$FA` zQifXNZO2=v`N6DeR7S-FYlR%0c>v{3>i1z7uU~FVm`Edqs5KCFF(=XVrGp6D+JS6yN=)s@mYH(4!U#|m-f!yr- z)j}FFBmx)Fb(2=JofI1a0$g~Kd>I+m82C1I@8f= zstsd*7E6BX!H@WLJ7Cw|fCU>de7{Rh?^n>6CC6D?n%<-@^d&dF5^6eak|$}e+jA;2 zsL&q1XaYD|?G=qo*A@?7mCdPeJA8EB=@TB&@>SKQi98w*rP9z!;B)9k!Q zO^>XuzXw1>Y}lV&YQ zKu5qpE6ZsB5jnpYIB$?BIZ2UA_11n4@sOQq5GOFnjD~RXuD-fJEDKA;x^j=qL2|oL z(QWJbndc-B_ad#8`Bb5}3vBrHCI#iwSCqCg{l&C|Q;;Dm*v5#ZdS7+{Zr*9vr!nlF zF$e6x8xiGgF&xtr?P*w8u6xsY3p(XIH*9MifKdwj7zQprNWjB1_QU0zLuzS0 z`aCW|LF-f9?d;bw=Ir;7AifU;esaVOwLthvL-~0GDyMv$I<*P!Svh^qJ&)q&y?+gl z38TfNW9S`l)#RwSA||w=q%&T3!`qDwzr5OZEyf4FT@er;J@gkS9+=Bu3jx`_=oc@u z%tNSx^`PaxuW-Jt<}a(<PKwF4I>oOEAM@g+_l)sVA{e>T(>Ko z$y|P;MnqA5&{iyjh6Am^QP-_$>GtAKH+wo?7r8Z!FAH^}tFtp}w5zoc0XwU2oWx5@ z^n>Sea$-7=xr{kVjH-Oo+4eAB9ECLMyGPZoYd4`mVX+voF&fQCKMrS1`n1NB`8$8q z-0*IUDOEKb0*|h+yv=W(eJeA@N}eeU{aAiWw6wG6RGissG`VQs8JcRM?O?D2!PX+Y z58a;YdI>7;3}p|_QX^L1W>BGw9ni`vG{%IZ-VeAlq)Toysyl^Tqq(k3ojZQeP}tav zRCOiU)y|5CJ?RX074*hziae=f%s{aYh;Fnr?Vf2gj^9D3PQL|Ll_j=DG?#3za6lx@ zNYvGGyXVge4=qdU%wh}rVPP%M zluwxS#N}ueEsO-&Ani?Dqq0{ozi0yO`$KaLr{oPuceH7oV zdj@kJ59FP23l?yW7`%>DY%1h7HxX9TfC6sZKbl>mIh13s%fFBwlkhdITkn72co0_` zY{*in!^S|^Z83rOmXcR5xu&WC$5Xi+Ifu(-gY>!fI05A~DF$J(;f`CQk-BB?#dOse z;Yw2@$Kiz9_>suoyScvi50&Qo*pnLaD`e(*%U`AJJC-sc(^<{)%ksXOD$nLG-78Q; zd8}$9q#CgQ<$+P3K1qR7u09T3kzBap-V#7ee}GJDqwnH!)&M*(qc*yFZEhbF@X}7i zH`d7P*xlH-fla0M@!QZ?=wY*U6L|V68%0~X4IX%`<#whHKZr-Y|^zm4C(*f?1 z_LEY1H9pVLS2d+D1&7Mn(+#Njy7e)C3(A@xus-Wkt7@JZG{s8p-d{=r@3_;{VJh0H zBxI9Y1=03;gE&H8d$A}{c7xUiEyL@2o5AYs2|V9yLjdzK>#BYt3iJ7BsqH!ZUslcB zK#N9xOm=SYg=-NB+0q}bGH;k4I=0C$b}VLsw}k+f@ygQ&HPxx2y6*iX@re$AEdtIo)%f|e7sAeBBkgn)@_Gt2pSG*OTOrS*FUPqRT--M zR-Ia*J3V)~R>S{=4iW4Vx6G!8hOO#PYs;WT)1L9^(k3vLbf)ao)Q{GD;(27sbz%eW z-eh3bqyFOOo=67R{prv{?JJr9Fljl5$x?N@uKA#%sLQvU*}7FR5ACV_>|D~_kpeHslbxQ;#XU@Trc;zOv&@t zF+UF7w%()O&(#na6l;a`(S7G9A1*_4W{-NGRra4Y zKzJAk^lZ+klVV0DGh?EyJY*K%Xmt5T*27JkyucINC zla+6VTMl)SRKSDm70SoByyzegUallOk=I+UY_a<;H~r{Ri`~jvVN+%Y?xf@B!=Dpi zR}NpXka*y-y}#>Yi9sCbkeR$Ow>!+ddXdW(FyG8zNcvXAAC;TOr!)Exy?liqHx2?a z4=J(EV>8*M+V7&^<}=Tzr&^JwZK9H02;|(+_8NGF(&=Bxb?Wv3NoHX^&67&({_}n@ zfo}KMffIQjM~n^Vz8cCFF9$~H9v0?>!{{Xr!pn`<66YUU!*3W{FgOzObJdq?3xZOj z5veQ9JMUgQyJxT=Z2(*YI>5SaGF}O_!JzA$gu_wj(-3XK{1s4wrc`2{dW$QHkP{WSAOJuG z7B{CROfDDonW!gQU~6URaY9~M-nv+|z<5GDqWlQCov%b;<~gXJQyZ$hXq39B^^fMj zvBAn#@^EFVxG(S03gEv%Bw3 zisQl1S;gVT(zhrM3I!(_Y}ae*FkEf@ICd?DKwNK!X#5}71NZHcubE8%?jksYhfa)Y zk)Ye!k*}cS5?fQSLsKT$zh7Bu{yM=;-NEUrB|#?Wp5DP>`Wef0%D3bQmXk7>cWuYL z3o1KkHA1}BsWl!T#uiO}BN}&h@^1wpq0RNHtXZ{@!C1TJ(1H4M=(mq8J^KCA(kGl<_;RjfMa7#4}QiI~#@ZTUf08Zq^ToIOUIFQD zS2-%g?$MFgcGBT`N`GNnO-ZaHp-AFLsKjuem!TlRnCQ*wm~$P!al%NGixpxB#9}zR zB|c6~iJJCtv&%|O>;qiuySDZES&>DZo3e;oyx`S}ayV8nHW0fwnmlBim`G{95VO7Y zD@-Q*Zi9ZIb4@x4R^+ZWXe)kB7ZBpjitZc}#_t-AIMyo#nU$BVOX!q#bTeii8tYh7 zNx1AX={HxSdbXU3n-CmmgO!o$4ES$bxB#G6i8>fNv1;BAPs$sRC9bck!|SULAmtmA zU%&hQs38@EXigs?a#HXO`szMk;debpQ%r;atiw#}ob(Y<7pu_G1%DlI5nwgQ(xTWY@YL_F)+cKlXs>9ObuLv4ciC(1f^Fpw1pEkuK!LMMwE({3swDxcrE zF%-~RZfqk|YF(!iS7wyOv1n+Ew#uDCesDJ8wyK8?A#WO^|2Bxy%v>$U%HkoEwGVzN zYneDYT2H~yJ|8JEokG+LwUm(boxzW0m3f@3w}btDot!kSQEvkMx1G!bj{#BX$GGME zQYddDZPOu+5l>p{^lil<5Z!G@<$BkPJ$))^N474Y$DDFf_n9ZkjBF zNl|+bO-(v>1K%L`lG|%m8SM1Bt+r8Oz)x$Xq7yHrbfro>lGI`^gK2t^C-1Yf<|#dX zZ6F+_Hi_&9poO>YBqrRzT@%=|tH2HkkN)7%9W^862x3{xsG{uJ1US*xj)|YHd0EcH zTlxDMz1?IniIl=odWa&znFt0)V3z#QYVDn3n9Y~ZcPSe$Oz6nlxQ^pG(@`S^=NpQ$ zM;-VWggX&N_NmM`&3U|lilRLkeuf2U(cCqp4}I4x7WyuDW>Qz7)sty<6N`fPj{|J` z6BWt8`g$xp;Sk|!n&SAGrGEWXZ$A~Z2U{BlAJ>O+n$d{8b|QEaxm;Z4E*nDoSQA-f zrjaup%kHzm<_|VR>h<5~@ru*Ad=i`V?%DA#(#!AzeFD%wUeYW_7qWBUG4SpZ)6Xrh zWWoU6JeEt=za(!w)fyhmXk!PkZ8JUzueB93)C@G0VL*#~S4sBvU1itG^tpYxp>0-e z3E@IttLibCTRo+1lOb{B^0EatEzH*=+!aT^$$ShO?X@B}4qjlV_5Hwa) zKSQ0*vsJ=Q$lJ16I^*2fR@16w*4PN9SzMuN<7vb12>2{l;ibHU-Ll*|kTSb%U>bk5 zk$_XC*P;eDXt{ikHS4x;_7`z%^U!AIqWr!ircHR{1rER(S?Y^vpoSY7*fgl2@kg{( znW5~`iAFuyr7r;6S6Nn*(*vjPV4@=1TQ}lL*Xx;6H7u@WkdD|hK-1{BuV4TpRgXR7 z+EKBh9IRrre#$eqQa{*+SxM*8{<$$Tf(QGl%CiZ;j#mcQKb}8-ub_lmeB8)V^sD=u zL2~~nS=i~2YoP+?aQF!+-bIlpL#6eRokPHFIDR;(y%X0Qk&{t>x_0`@IK#`6&Fpm_1{wX#E+j@L<-*D^*}>-_7*dP` zvjm&xaR>_#{_a%JMGaZ?{vj*;yUvYcS;m#Ux1Z_V|FE4oS zfA@Q2F93A{3()G+u14f%c0g|Ri16~!n37K&b=zVF6R&v}KR!7J1#WL2A!p^!oF;OK z2QD5Vt<+~S)L*OLzm)671gz$<$FzK-4|R)G=`@5)Z|W^XkGQrg9c}85P7P;yry|yz z3bQikNd(^V^75HkpUrcljTU(|8=E|Dqb(~oDzoXFRvPj{TG?pIWvr(GS3*xcx1mSF zOOX|O-8fWH4fvJ4-I$ng0U=TPJ11X6o~{OzOX|n7tP$5mNnKpoU>dQZKD!V=Do=jp zcEo{RppoXlZIjX!-49^j7i}=9?q`#s4sXqQ+_bX8lcAikeK;rx!kg~CwMF&4nUMLN zTE}`(q>XbA`7@#tkARTYD>RiHk9JDP)XIqh@*Kwb!V3ctWGI&j#f)H#Tsd?IH`;H_ROIQ_jW@S;-!J+(A6#H;Bd<$de}-b_jx^GKqbmzAA@@!RLM5Yq84z}E$P7HzeJB*y{! zd^}@7gf1y6itJym^a$PDQaqzNDQu&I)+O~}q_zWc#m%S_Jq}#lCF!-^;t&wtk{r1& zCjG`0FjtkzVm!^Hx?iSIa>{y@l*se_B2(`{!;C;`J6k*4Se>}pihZqTu{JJLbyUoq zv{?Yge?h=+X^`zkhre)glNY+=B5)Mmkde9NAwpFWIBme-b6Tlo0$>dcoYd#~2AM9`7`8*G0+u-(wH2oXhe?InMp%_O^ILvx9I1V2?H@XoF4o!j z-kHAhX1MK)5yMWH(sSW)#px0HF29KR_SFq_rD^fl!ztVnU=(+`?@ok@NyHXz-y>)( zEQ;qk=mg8t)M5Vfq*o!`3^f zcIV3b`J^tlDA|cKm1wLs6UwvnsY<}FLYj$Zz?dVn{l zC%{wBz?53Uc`n<8Xei>1XI8W&ig>X*OJ{T}L7!RSX=;8;?r@55_kn(f7V~+8JI!qP z+4dqg88hw6_ykXEs@^Cz4~I?Hz#ILEf#BOrETb-yHnd^?w~RwlD+5(!qMOxf5i=jA zh|B51cY}NgMM!ouBWxBBXOVC-SCfhniwN)OOg@iqlHtASqhWh?uZbsN*=^9HdpE1c@~gFb`WJ zb2OJ=db%v2oRqqGkuXWL_BIr49holFI`IlCJW^D(A>>$don>= zC-s*v2rQ%hCV7MLm-e%hNWB9VBZ*l9ClyW9%94cjm|B2=%Q9lKv#yj>(Tp@SxctlQ z^Gvhp^k+Y#E|O7$SBQ6E0d~Yq0vHI!GmAt4QD3^e8Wyy&$(`c*-mo4RE zJMxXQ%(z-zo9)rl;R$}UhgEQnWUg2lZx_yeBwf*u$+ubdHL7n{+oOqTz7Vd!)VDHP z9+VJaonbSIl{)()oTG|aGQ^Zthaw|^<&}dFUlR#e5Z#K?Bit>=lvK)*mD2MbM@g;x zWkEHE)5iT?&%N-bAFM1tpL~t-g$<-78Rz6>e4V&%02TnVYgQc$PvA7Q_UOe($ND45=@j%@xKQ~A`Qr$^k z-A~ai(P7?8Ixd9dFIVcGdSgbAy`NHhkL&mSFrD)#o!?>{hTo_y?5T7y>^g1vwcC2} z#*>#Gk?IV4u<+x}2;d6O6L#^C`8JV^gTo`RX{l(RYP$6F{dHbD2lvlCUQRRLlJxa0 zpJitdb5(xXL)79{UY30fIMlV9u$?}ZG3WxcfAOh#-{BT*zl>o?7Y~L40xe<;SH*$- zW%oKHUVCkH^b);r$>$~~g0`I^_o2LKnY*$G+~>>ucwx&i#wb?kW$Ky(?lhqgjC<`v z?lm3&@gW?iB2PAqgBuPj88fely)2vY%OX!62Yp)8u?}9rg*|`PsW=8EX6`>oO-ddh zCwJVex+*;Zy9bYnTs#C>GuS4V$&cc^&S4TU>4RS|7O4c!k&AsV zWP+5BNM)zu7HQhr@?dnsO)E5yQO$;YooQx|zi37>ktOly#rr|8i*NQ!_0Ysl76q~? z>8B)!Gm;vm;9(J_Hb}d8Fuc01kS|{?9pYn$FT7iXaqryxgY*a4j|6-Om*N=kTHDd) zC`AIX!%SIXjyljVH4MLe{zvmdRa3E1pa--=AQ3u~z^Gxu!1ZZ(_*t$Zkw&#_bkG_i z5+RQ3Uy%sGD@41jmfxz!9yR&u%XQpbwVCwwp92xz!I!r;C^r6IuBc_r)~dC}^=wQ< zK!V$x-#3PusPk}9!d`3Cj>hVnNVaC#zk)D19N=`;7WIL%zls$2wgycLq1h4N5L0)3 zx__FL^ib26>D-M0n_^?QWA0ufsB3$3-M;Ba7?Pix(I)Oqdi-?DXR0;Hbdy@~hO$I= zw|4DBNG;@goRiyekYHDYuJ(oFV?sN$6^GR0($T%i8Pj$pn*J{&-(4Vr)Taxt8Y=_W zim|;dZip?j3U^M7x$N~E$%L>0#TuLMzY_93`J;u6ldQx;-(C=vSDLq{u?&c>Q+*xx zI{0xMT)ea`HvPQz)Pa|&9u~eK&1G4^%xAllvzA}+t@&G`Sb4D`{nJ5$EGk18!_SzV zofC3jFI1C+=5D2au>debDD`%*^-xuYzPOJ!=pTw4j~#pWi5KdWiHX;@CQ68_w`;P` zKsY!$7E2>Wzp_sPm~hQy$28(J?qy9-$r}hf#I_P_J7)_K*s)w0s&)$8jNyfh!( zR9tm4w>o?^Z(^v;k$#D%GnN@PBYt|^CK`+bOfxH=@dAJk8qV9?D_4>DG*G~;IZR7Pg<+#cCo?x(l64h6n6I+S44sco2`$Qi1jtdi>CvO^p zp#K|z2{K-IInwMzL{T1aQ3u$`7YwA1B4XP?*yy-FU6MW$GMRL=ilR!SzM-&2R%&_y>%0f67xs4gkp1=&q6gauuuy@T_OgK4qAY6NpYajIudY$e8JJek zffjAVfbA7^9vKNcMh^8|EdvX0VzilF?EtseMc`UBul5caPfD*2NMg;(BS*1)`=9QD zcHe%SOWS>1!Pvq>F%!9G9&ohnI0$j0J&DUOR-MP@2-n1- z(bgEhOdeitrr9HgyJ(zXrAWyGOn8;Rb)5Ycv-o@l%B5?PO6UAo_Xz-pb;)oFJ#mfYp^O)PGFxnm2F5H zbeRMK1z0D*L&f!-A%&pf6#u|xHR_(_TWH6-VsNjYL^^UIIzYi96;j*sO<(9l>s6VN zR|E|MG~4zOLwHXGh|)1o>-3?SlFw_#-uDm>em8xX;m)3C(_7z`9NI)_njTJd;mFT7 zXO9VXGoZK>#FyqagFFws9YFXck>fY7Q@uTA@9E_?B{Z1<$9}1HzcQ&#zXj4cc3raa z!dngaUR;!CB69eVoNTsrr7W(BcKYQKdkgsReRfVdhxDFy7K0V>o5DaQz>^{i6<>>0*6Q?;%h2-t$eumcJ|xT6Sz0{$GpSKGtNiz6(6*2kHt-| z=zmsocLaimw-M63a&?+{1R`@Fucp4O7Z_a;!dX=-gdbzv?>&33=PpM!_7OR%d238E zxddCH9)0HROu%g;23*dQqr01kI$J-(@3JFdJjVx*_f=xnR{`!F(j&e_k!^PMOf23! zc!Ea7l3|)Rl6NoUK5dl>B{hs_FGa|D+|F$ecCec=2`J#XgbBaf%n&F;cyzzVP zMdL~(IZ&EY(6gyffp)B_FocxAy`;0Lsxz&i*4Oi7de1?%b?z96CLbw#eq!s~5blF~ z&p@AD9?nh^+l?y*KN@xX-dJg^NvT7|J9|%L^G5Xr!f2BkW`mTU=T`l?J=S6>MPb(B zHL@{jT-=+a>Ad@&B&`18)b7pC2^qYGIy+6oZdGPNr=&bEgYVM4YJ4eZCUR+)WTO!*?Wq;wG zylAW4)M~FD0uIh5fZabw5s{4vV}!>=T=Jp{oIDx4ZBTj}r4n@-qk>Y8H#XOd8Y!4N zpcjo*zaU7;?J*VosZWI>2i;%ia%ga_nc(0EM7%~YU$u$yz|Qf+VMWb2#gA;3%f4kS z6sd?$rqf;e)v4Jl?_%#@{nZ0x!q*dB0mD=RguU!ER>~?8gtymgw6jVoH*PEtP*HMr zfUR%S*ITH8(!gH$-G(v`#qTwJhL~rj&q&hqf5IG|-D&dP-FmjY4hybOTy7}s6S_L_ zB%A+=AfxzwpY%ScHjUzHHY+cg1x5pL%e7={AQBj2h6bC>d7z9pwu=fUMq0X24=8(l z(PHMkT@@*Hym{rGdnHvpJwtJ#lb(}(0IV9FBvaRcY?SQmz8H>HIrRLC(gg-Uedg*yCBrT*zu5`SuJE*Ahc@9cJNBxe>+!nW4i=`gcDYYP!#*J8`-$CCy^z$Y z7?n}Ae^pI8Zd}qM529;1@#TmbmR(GWdLt-m%(6{Dw^(PA!Esif6r3hLQc8T4g!If1 z%?KD4{kNaVbVpYLbBe?xGQSpC;iO>E(i}%njLp!x$nQxgI4I_U$v6s3z+gyzG(S-; z!FUhI)1Qj{BD$iAm*J(=P?p`BwE?A7dUnJPjcobqkMWcV75T!?uWwml#eDeCg7nLM z7k@s$gCuHo&K^|=NpmHuk0^1vWB-rE#;MD*IgA_xiW(Wbshyj2dMKYtFETEoFg^3Q zIDAshh?>HY38E7-k*^ddo>4o)=t#jBL)>AaqFkpsF;WU#DSp}?bJEh;K<_ORfJaaH4h}D8m$cg1)ZvNVM%d zsQh`H+CJu?vs}bkK%~j?qv0)K%&M0_r6zW-rCjXcB@pCfk{D68&&P z?oJmm>j?J2VGjXSy`f=D+Fxv-kTW|GnrxyLYOo|;iJzJ~maG*x6p3=S*)7IBt#|zD zccln(!)jr2T)bo;p`4>9L^pxYTP8v~SFCZ{MI)~^jew9`+8?Rfk zP76I^0Oz$uuwi#11!X}Vn21CST9!!oLl!?AS;R$Aeyy?S3S;j}N|0L~# z{jrTd;;_C~qyuwGrUb}>z)F9Q@;-P;n?Nn_>6kvI#TlI%wh2_ues&tJ8+pC~E~G^j z$ehm{GXi?0`2iX}ADj&fjU7f9Ji72so}vp)D!}t(p4F=0eDfn*<|FYPbYUoQ&F7~( zmEBL5iIZdX5@j(;8_y&XbE4*w9j*qtDRN0N4kFm-pktQ0Ti!X^Gj(5rY9+euPz0Y1!J~7FX zd}s}oB(1iQqBKyKL^~(#J%tL{^RF{E@l_TskSM=2fq2zJ4gZ7Dr;VyM%`a5oM^#NE zS_f2qp0clN(fOQ+Ltl1v%8Gc2=z^+?-X{-`h+Vwyo8li@-Hr9DJi`V_b0j?7NKbf5 zUzjxGOBEd=N|XI%Jbu$!a4ZC1g30-&1_3HVdK~#Dls)(vLsnb8-1FY>nOrW@wqBFO z%THK>r(5rsd~EB{cNWD*v7@_drv~oLwpdWXy=4e;9$bplqZnMsPt=pYgsBveQAhNu zfQZvq3U^bvu>gc+Q=0nsplu`?9!5fy688-k7sDS`<0ze5WJo+KIRX(niCx$Ejh_t~ z^k3Oai2FLG9=i_*n0_qbm*{mZOjVNT8Kv9TV`H@be9GdU)Ie`Hoksz+#}6AmcHLk6 z0kat6t~SSC5eQ5hb8ZcwdeM02)mz|*^@7Na6#&y=yMEbL{`6W0Ed2g zo7$U0)qrfooTs($^1^QxOUKHP6ANu+FGCKv#wl0vqlC1cn4G4d?O!B#`Jk9pX2lX> z`F16?%C7<##e$(KU)Z6mXKS^MDV5?qhME4~QT*1iv+9*q1z~x0l?mKuW6}Gonf&4D zt-Z;x*6%~(!kWqHfzPVE@6CG7C48A8aQZY2F_dl6MOm*UkfWIwhhss+tm@Xdh1q zai4^H~;5?_FFR7rpIIZ#GX6)$MXaZq{iDA~L-g zf)a2p>U=Im#e(ac!x%R=Gq`0L6UwK_7iqO!8f^e;X);64KWfQUY?iL;rSFvUR;iRU z?8H{;YBBZwq$CYScR%}Wn^L3>ULn|(xZIRGdwKJCSD1C-iN=PQ<5$**8$ocubE0iR z+ah^=NWlKX*RBRrn-{Ihsgpb+UIa-1OPsGl)iDnv-}a%QmT3W7owM~kVIHGaZ=dR0 z8=?jbzZnHjBRw2B?B+qY-k4gUdgGWl2oo63CiLUcF6l||=dBvi+yjp^skT?(1nAmc z1jSAU#SH@8$$!wM)jvyCew`wyr=lbDgc@7+Qk2{~C)8i~Q*y&cN)C=Edkb>6zE;I7EaJ38-;NFNv{t`#P|Q3SXz@hCjlsa- zvsIFEUCa!lA({=(v!(|m!R)dmv#%ieD9rM>bw28oImg%27Ao_7HY!etH%TqW%i12S zS*?}(%I+uSzcA-A(z_?Zv_i zSr#&x^g3(UY>h|hxblf7V49<{TNmaDFLi9X1d=8ATY*Y4cDOZ8;|U zD`)Q0nge8BrhFL7csLE=yWWf0piFV#Du*n-y&<>fV46`c!{hGNUOr$SHfSdfUJL$w z7i2MDM<0-ObW-_kwFx7_9qocacxw!u5%+yk%SEtga_``m(ocQX#}9&Fums{3HBmVR zUokm{j-&;f({A%w(5T})1mpTN;pk{o-Vx}ON0PPI{P@RmW5k00r<#Ii-*fL!TIw$J z#J`cD>WAnLfo8zRkm+W(mCzCI^+*`tF$fVP>ae_M()E?&&^_u?YY*No46r3k7KAZ_ z;`aoql<&MsFl>71vlJPaD1W>yh*z493b8Mg$|==r*>bMjs2J)nw*%M)S~66+!fQR5 z7ZAE%x5HPJ1z(Y^1s@;ki1HLLdnzmR%4u4yIrDVY0foDCY%J5O-Pf%HGFyfr?yFOC zx(LG~U1yzx(nD%Ba>6ASR_76A(Q18t%Woe$$_H9II89lrVpl*tSd|v_t}b<)MVZ4U z(D8af3-awyJqLBQX^!;zNqG_{;#Xz%F}Y?_o$F~tZQdk!B-R+>B-UiJwN{Uk0-C@K zEpl0ESC--84bK_W3f8gKTCC24dj;wp^qF5}+;Gec*mgX24989n<4~E3vX6G$^OXOz z`&B`6Pst>N-9DIVvUfxz>o#jNNs8y*TLE6sL55qEO|JAi&X0Vu=03Lwo}8D>u+$$u zTJlq*Ymk^1F~@N@FanFmwgyReyW)SNDpE%Y(vbjngxo*-ffS| zOG|>nMrm9dYx0R}^Jg!wM!V4>GkZUcfbVw;I2`>&P2)>al!z4`kMMjW#J|3_Cgt@4 zmEy8e6PC5!BkaTNIhoo$v0h2gwKXi=j;6QBl~}=V@Dz=mVx9ocupiYv#%aCfS=n%z zcqZB$*yKvk>&eqcg#39~^%9RzcBBW%@I|d5b$f|MXAiLpH6qYCRbsZDJjX{P^FC7B zG-a>dt7buMerT$ZbgN z&>=IS^)^8pyZqP3QRqX5@xqM!mLfRG+`yD}TgRrW($vFVTckFn^@FU{pbuNG9POeN z2@h_`q_4aJ7E|}yQ~8_}Ov1Gb18{+@LR~|hlE+(kSEt)*>9=A(;f8^yT#UagDv}Wl z>WFM@`bOXP6+e0adn%(Q(Tnv^zqf_uIFt^)O zKuvMY!KW_Ijmcs{xAhB5U@YGn+1@=^EV$YT6(K~^#BKMmrqdr=ic>Z#j76>8gYVQ` z@W!sTFDt)D0;+D*!T=j8ku(^0+NVK~-3lfT^mDI(l~X5WHO4uax0KoqS5l1k z9G5E6=MP*G9Nj0Iky+!mF&4Mbho1`c2+gYk6--eGiM^}{ydAb__^#r5w&`{q8PpC5eEZNzO7YNu5VY#;;2KG=u)@-YhNz zyG7T+`?IZZ&)-%IN(R^ddMJ7T2jDcb7qhx}yl<({n^ep7r9%$wgMmdQ5tvN8g$ zSb|$l5d1z-w0Jg=G|P$UzceFGvK9S{tJ1Shio*DrFewZLJ1LO3DdkZ@#9dpi<^_j; z!VG_g$Yb6SChwDc$p3F7%fCbE!z5{0t?6_?Z8YeS&tikA-dpd%pV@g9GKJg~r|Cv_ zME|?ihpGrv;bJN`+JCFoubzI$@DmM)brfKs|2ta$N%$RF@pa|wi$5o<-$$)~T?A_? z{6vvz`dA))`TfjS2(qcTm#p$XHl5$4{=Sg;`_9iTZF&N~>eeoU04rY0_`A*W{f}oV zh5U7=OHS^N9!!0F#(2yA%ha2IFYuF*fRaA9-?QPLg7@oMkpR*4G6+)cF9NaO zBexlAp%e|A0prn}y{Wc=rP>EN#liO9h0Z90B9Z>|-*d@`6NjPE(WJmO^B?urc+GW` zOAW zf8(k1m0A6s%;B~@p^f} z!FOotHNX=I1QPQ~-IDr$iOwCk9bwLy8mZoV$9u*tE!*k*V_eI+^0;{Lt)su;!=HBL zzsF`N1W(=K8sVX+!OJF+b%Wq;=jeC6M_SHC{eQ&e8aW`;t0dWGw?EP3cw5BamVu9c zS0D);$%}zkLNr1GE)1*xpkqJ82u6sQul8up_PQ`nEW{%T^)r0zvFS8`ZqhIj&tZB^(PCRiNhF`Ph-{&&| z`qy(;^-8mHXolJ;u(z`0DECZYrSNxgA7zoJx`viF3KZ{)^JBvA%l0Gxmznlkx|tE8 z)kAxSAWyH%6qC8sykK4V1%8)grqAm3t#tu}9a>}hd;Y)V$4gZR!l;`11Qqtve@)dT z3kG#km;IBY9JBJtCGlUY$*(!4z7-gisT)co-dEhJxc-M!X+B4+vD{ej4N%Vf+U@_pECU)wi@Jq+I?pev z!d7k;w<(!sMKsJw|666-Z>zl+f;6;kDFQ+X<!m|rg$6ZVRCUpxZ5`&S?Sg$cK&pRGRn(+`r?j}TH-Rl^5S_%j3leeqD& zLue`yh~~O6F3~?NdH5bN%bqP;{6=&Cr?>?xBKi!mSt)*7(AWOewZT=ih)1#&@csk! z{_heRd?@+z#>1~_`m(=oe02xp6?PFN{;!+--_n@%0x|aaW~N0{Q4#-ur{4F2|7Z37 z@yWi*-ShmwVxeAt5V%=y?sn-%amsIh$>1-E|1%k~I{$`kcX~MJg#Y>)ZOt8Vx)g3^ z|L2SUaqF{pKR3ASNeX>}-%Z3s?3aKrCmo&lzsmZL`{c7w5TzrUh`bQ4@JH%{0uh6B zUA;{BtE_*t?$y8prg*?kD!2iU-V+V7Y2d6zujoX^ngXV|&uIp=A zUEE0jvFWnh&ta{~?tul!$J$Mwkuzho2*I93FD47nU0Mym*FOrOipH zE2Pf;nf!B+ZuuJ&J?o$S96X4asQ_y`>*)`F9`x_!XE7nFlN@XocwoUXYAO^vKi~4X zhHUkPI`Z-|&bRQQ;3DlVRy%Bc_J0+rcvqye&-CxL|G!KET15X1NmfXBT+}?8W;L(# ze68~Qy@y8%Pwj@rHu@FYHK$Sw+ou5`wAwi72)GC2Tj6U;J@daG@E$P_06i|I(=q>} z&Rd8&o7!}kGA*egtxcIl zkXV0uU=tzc;3ei}}*R^^7>)5UUOJ{(GV`IxpaykOlrI?O}~#7r1+oH!(m@;iSLshed4icXL0w z-^qZ_y{fbSoI1Zh$(3#YhW69wR;$|kCX~^vH4Z^hx9yGl`y1J62vOLo$5;Bt3H0~9 z|GH2YKv4$7-ECx5+rh(A&)WSTG0z%S?1%i6o~%!IT{ub+*YiKRkcl5TPh9@)ZL`pW zhk;TQ(RW|WXheD6{{3o$4nVX-x-DAo+5hSI|06`fRgcVeLhm->WEEViGGgQnEQOB6 zkT8V*x4x`D?IV1HpvkIDChQh!-6p7-#>;s!4JoF zSvwN)ETbSEJeCrQZOy}wzKyoxG54A(rvZ&8rf-wVf-Hr5a;;zUyY<9g8s0zbYW;E&I174`Fg}V0^w^#wM5Q#ZP;>MM8H|>yRwDKFJo6 z$k!iXfQ1)`keFL~5&3jPrn`DLZCdQJ<@~&uT=kT9-5Se(6@Q9iI~sK>w|3-*x(`dk zNMyPqRKr-0X2tOz>Sr-=VM21|$bZZ4%1ZE;-O#}3^$(J zHGP9bW|bgQZh8s|m0UHdpUPLx^8cZ*VNk>CoMs}#cjZbgeNl?`fMf#1xU6G;`WL?A zNDDb#ToieI-|#{mJz;dKm<51Ah`3X7ish1&Ge=8IDcVA=bcqnLQ)SuDR<`J~Ah%ac z`;h)h^|PZvW!n*d0yMk4?FN8oU=9b+e(_Pn=64}@syV)zc2<4QF3u4vj&g9Esm2z` zeFASSBbryqWK19<;2*S9(X5}8iqPm$*29Ifu+5zTQc#{7g#S8t^2(fU{v_M7t=PZA zu!2AXl4B=F?X+Hg>gFVw$Wx5T`5?%85`Bj5%pvxbm3{~XaYGv;PUXUgzr@F5lmF)> zLiN5<-1v?^kSRJm49#R|X}Mkg3H2Kn#Yv71zJR-m>|;vs_>B+x<`*FkS4514`Q*g3XR2+IKq+F?1?qAI&c(*+_NpHvDb9tu3 zkQr#Xn$|UIYcYzW z{uzIn1t==XeZO{!pW$LZ`DTL_>V)1uzc630m2Fns28l+u7juJ(3aQr-fOK7uYv zD?VZ;rN|)<4Gj(FuD84j3K?Hs^u3xY*2WQE8l#SVEGkrUa{b;0Wh8-dAVBe^>leIS z5iswY@QQ?&8Z@Q*Z$(;8H1v`&nojD!?Gy?`g8fc5+Z9!^BPeN-hpj4JI_}Y+ac^T{ zJm#uAXoNz6hemZ{1t&@NE9V~>5@Z1g*bDY-Mnr)G20?4G26?fSTrgIX$2A z6zOc8i_IQ|EKz^@-%pPflQ;$J6H$InQ*f@#4_q^%JgNGDCE&x1doIRptUaT;j=fTC zG>hW)o2jU)e$z>;uh#C0mw=eJ8VcZ4=2l?*yhj@3EEP|S^xx9|At8D9*3a$}64aYY z1C}^g^c1jNUNzcuf1!1TvD+1SLO&zoDd5yYv1@SnY1{mP55{v6uUI4TUx=LL4*|o< z*M!lhO;KCD2ZjL{2AAyx;I%1@t~XY%W&I1!7U+|=UC6)|!H&_o zgDFN!N!*r;t7h=QWKfrR(WuCPknbOY;)8RYqL>5f;q>)ePsi9=*{gHm7+*Gpt_cQy zVo}GLHWa)$mK*e$Pxal^Bc^MCsh3zb<99<-{ocLZ*^RofT z9_D@=b6Vb~f>Y%>i={@{oX+i1aG*WG1tNUF6g`I#!T4S2X55wCwJ|Y>FV8VOXY0e{ z-|t{rBMkK#aimAIUy!BW)0MOAS*|^Ly_3Z4mu?}ah^Pc5hfkTB zThGR;W|S2W$5wod`Gbg3??5R2bGgi*f$3fS zVdETACv_#1gR8JsekKy;(JQ)G@}_i#FZv$f74mi1IjC00&`oJZ;c>p%1PE}{bu{%| z1+79qY)v*h;*ho$w|k&;A-u;8iO*DQ;0cS3tB6$@Hd2=>4KbPTu^8gkR9JMZX1$Ys zhh$XwRjUO}O;$0S485&)o%oi($xAa&kGzPu*ymRE5%;H(I)rl=dD6+5?^+s+GB{25sI-rEbnUu6OgL7Ot9@l0pYZF;vd=x+N3~5k z{Aw9%t8~ns-@TU8y^O9yaAJ*WYg>?ZS{6vMD;GDVJR9yS&BR^REtL3`)D_xOPzP=T zHt+GhSY6Ul{q~8A#BkNQElEkQN;C=ZP55%t$vG*Lr0B}ApCI5eQJuDvx zKO7qI5*4?K4bU(x;-4|W{?wH1y;c|W8J68ln{A-HPUZVX3JS+*dXyQVa2O>q`+iEW z)=Vl%<=ff4j}J3H4eZUWIyw~CFSkSQAuca%fuj$d4(YDco z$hk~dO%JgfhZ*c066QY2{5vR$UZ>uH!@9&``~0iwL^9*6r1m_a2fAkx-X9HlqbJ_lO%r)FzI45$P106 zqyFYPU1=5^e@~952-U2*udC7fZpp6rk>} z+@3y|LaTQc+ONt>e0fk1d2~J{hQ+Qbx88#AJl$pQJnq_zr;Gn_aOrn_uBaB}aowZu z&9M-8xgr%2*|;#f`Eps<{1s%)v{)&MR$}q#oR$V{sAOGvP2xZa`l7HDdppNl1GxWM zsqZC`r+=e0r(W}gW}C!zXAlypuoEX9ffva1Ys8n>aAUY_HP>uwyp#Fm(Da)dymjE; z10+(`<8$ly%~t`mAC>x<;iq_Jw_yR^wrdwI?dYWzegVKq(Oa}$fY)vLFD3s?x7x1! z@7I>d)w{S+zCOm@N2#Ky041qx-+-*;@X)gqE3hT&UZZoCa&M1iN65*_$xMukKRL4? znw7;(_X}tBg6?6QZ)3e&PhZ||ELCdwZ1h`9%=|6O z@oRw%>mIby5YU}s;`RyEd>J>n%F1S){7XFjqaGT*m9HX-Zs!SK*zb4tJW}j!lFi!6 zZu^;H-uvs8k8Fnf72`RREVhjCJpQ@Qs{p`nf|RDZI;Q!cI3#gTrLobzxam$2rX_k% z=3!`qBDfdmT<3kGkwR;V4-EhOa)VrM=)G}lQhhbraCe03qJ}CJ71!(Bj0(z7>Or(^ zE{|9vxYJ`75s_rTPaHz^+%C4XEgsX1bf{)#iFoAm>;jfH8?u89P zefG2Bt--L-H(N(jiXxb`j`Y>udUSc8g z9g=@_(OBdJkFXo@$pvrgczc$V2QOKLToBN2;?_GKH4HW~m`|7-=X*Zu*l6r{RJoA@d)qN znsvuCldZMbez!xA(7}wk2yL9P9!@D?vej&e4e`EbTFATmG%ay`w#$N+?@3yXNnvR3 z=hQ9WQT_K{#iKiG@vQ|M2i{q$;{;mQp2Nk~1I=GQlt?*m7~<&uv60&UR}Ww6iG4as z3Lnf3g_8eC5^y#O3%niX>-@L^%cbbySc?y&buy^@?dR2Q7FlMk5-Xx)7oM@|(|Z`^ zd6Vu6b$*gtHf;c;jCwTA!U+pWiUJ5^z#h`FyP zM-tQBz`LDn|1Y~gMIW7rxAe*!g<=7a%|w9-5>d;iRIVF=ca3AOj7#xp zWG?*&5m2;bMk16UDG6P%JksAkFZ^o*jOK}l2B1e%W$lZ1 zas?ZOv&l^pM4ik5fY$ZV6#TgPlNoVH6dO#z;!P#d{zEBgjQP8GgUW2Z1SySqA|nxrhPD!K&D1{3Hkif zf%YHiqxHz$z|5y;>eP7NAU&Dmo8zPUbf3BN1%|TuP1mX~oZbyxcaSa;!0H5^A9DB} zXSvO>_?+-15$S|~0Z}t!c+{7<5q9hn0f%f}D)G%0dMV^r;8f^pB-g{U-YA)^Bim?U}ERR2OY5uUl<#R}6aNeCDZ)lt~ sz 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 G^1lG2{5`?| diff --git a/doc/modules/cassandra/pages/development/images/docs_create_file.png b/doc/modules/cassandra/pages/development/images/docs_create_file.png deleted file mode 100644 index b51e370353250b39be08c1484a89b020e81ca074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209110 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%0Adn+wIs)h*VW%;w+n@4C4s!x``Sp}clA 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

    Qre}HwckW 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

    9Uu?Oq9t2VSgN)0`UZ#! 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 PeZWiSjDZ$G!#4Ea^tgK0 diff --git a/doc/modules/cassandra/pages/development/images/docs_pr.png b/doc/modules/cassandra/pages/development/images/docs_pr.png deleted file mode 100644 index 211eb25ef1a625a773e26440026f1448a60a0bb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156081 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ⅅKs zp2P&hR|UfrZArMitE0HI*nQI z!4&&qL~V_-TO9dYOZ^nYOK9UcXYKn@!MO^#9I)s<1euV9Ng`~f97V*^Jl(2YlsH6` z25h^tY^JYEiF(aG>f8DW&I^31ac&QdptYl}peqI6Sas{%eHZH|=+v!EJc$sKjVFuTJ#^`HpxQdDm zg97RJdBt%|Jal*jhxGvZ#SVHM0(^Go1w!Sa}DdM0w907SeER*^m|qx=pH)F z*9f}ISH07Y zRTiWT0j|X0>jFbY#KY&i9P2oJ-SDXJp3X?<7|tSLQxm>&JAe`E5ye(oPleHo){gP_ zy=n3O)Ny+e zCDtVjs6?9`nAQYVm9{S>+Q2sT_N-?ZpKqNjSA*ygexu0iG^z-cH@t7^DPtwIU6`J- zz-kdH#R_Ji@El97>&Jg@SXvULvw?YEe_SLsQQnQxkc-XjyuUJ`k(sEnvDHP-5+YXj zsp?4Y*kPU`W_*l(BRCvC+(=&0MZZ3=>Rpqa!R(5>8iuZ0c$({vvkXaD7@8Y&$az|u z7>K#de=y_4Q>U8~_y$#M(EIHnhClxGf>|p;MX|SJm8JNLW6N`s%fR7p$sQCpyWB!b z8WutVO2!@^2wRs=Jq<5e3<9#?HM6AHvhL4#r%~3AhN%ouNYMy_-`lDP>$7C~o4W_is6q}11R$sOt^~tJQ^&%I^b@L0%WF(O`Xe|1WN+AB?!ku#Y!Pk6o zd!HwW1O9K>^iU~FX3}pA6At%mvd&@YW2e6=;P1q%#u_|Z_=VrPG3wBY+^>;6s8AS0 z&D)3l0z5!8T0Th71ph)<>6A<5>FQHhiGs;UStcW#drRvXP7AGpQ%*+YrqY0LS9mtK zG^_Vq{@7G)&8Yt!x=GyVGP>umYgoCrVf+~OqV;`kfNbJ<<+bS7MeZ1-FX^7c#j{4= zXhK@N=9vI<{9We*REL+d3sJC>Q5VAw#7Pwo;{;SxMOf_qoU_9}@pA~eOk{$7O!V>@ zw~QS4z)5Y~ZQ!v;vMmm}*pyH;_l8qCT9EG?anR0jo_b>m0WMVk4`Xi~71y%8izWnu z1qkl$?yf-s1b24}?oLB+x8M%J-Q7ZP55XI0+@bNt8ZPJe?tSl`efAss{L^Es9;>S6 zn(M1tv*!F}O;^(xNuN5s4`KdPhAc7r1K3PndNfM08t+3h8uOI#4QH&Z_)SNz08v69 z?05>`lCE$Y(WnwGK@xJ)C{Hc8asYO5fu@J!d@($FowZpA_hHBh^$onn#xm+U3gN`9-!ydLY# z)m>9b%?S9W9Rv7<1)rzaGdbzpU??HDZq)Nx^wS?Z^t#=XCTD7dK=b9aj?WY#b?3w& z3K7X{gAAPqrU{eOrDJ}P^}0KtizGP` z);7_8o?*h*P<*ZQ&L)j5CcPI!Ed|n^>10?1j35qytdF_@B%Rcy{HP5fFVrNcF|LA& z9Vx7WuA!#9NQ{HRU5kL@{w;P$=wTQ&R`pM-AJg{&sz%zD=ohhG9QP(iv(`i9d;?PT z#qwKwFZjidBTL%m=ogbk0NRlw+t8V(X3__|eoF#~^2H113JwMBiukJ8+;i9LhPNeQ zH>5>sfVVo#r0D3jyK11n8jw}9ch}{a-~4juVJA!?wxH*@MLbN438B-s<53fWeZTD> zHLy7Q&IIrAQnTwS%+ic_{n4KEDm5fX12lHhKI zxgACG4ScUTDMLe6Bx&-g2p!JVA14q`v{xU-Ii*&w@--}4|GlTu3rRUFi}K5S55|P1 zTP42eu`&9EyP%kDk$jX`!1ga}yGe~zAP9*1SQ_E^Zn!j9V}SP$0@{T(n>Igdg}M%x zM9eRfWR46m*`VJ=+B?qz7@b6UEi!T3`?g^%>ZCD~Gg{~u3WU`c8&#-FH)WQTFr=|s z94RvFkQUE*iKDAW?dS-{`ipP$D@KXX(28Rt#?n>OR|)hAWOM3NGNxOFU%Cc0muoo2 zsUq>qiK{7k9Ln6`Cwv(6ttp{lFW|YImL4fTW@}~OLI8eD=S{L!&d}FcnTgC2$Z5;c ztxT1QKKIAWIg-lc8ui<1jyfvS-$R+1Lo#R1QpIM74uqH*(Y$$3w2j-RD<@V6{Sp65l`&U$H#SH13Ipv0G4Yln7k zOV(IP-VTYP?7Qe&{g~j#WIuVHk-^`M+P6IZ%ztww@bpk_3Q6Xgg*Kh2Kod0>T{Mf7 zZ#h7NAFGa8PDpcktY_N)eRxj%Z`Kv z_tl%#m02u}=4^Y!;DN?q{~a>3v{uC;kXG+DyK79Z2YNiL>rgskl!rDP_#68k+ z9NN{Jym%G{N!B>f{pqefcDBHaqX^;Uk@VA~g(FJL(CCor|a8>7XBTXx30>ib% znCTV61{|5@!RN7-+ol6XZv#p3w)x_dUf5p-ssg^WnA2Tr$`K0OL`ZuM)1q!homsN- z&b}iY7<7p9R7|Wt$Sqrzk<@~m!UU<}7OKXHdG=0!r@Q{bvz=E{r#MCb>=N#cX?E_^ zkQYa|0MGe~`7JHnWM)My@awTGi|^2C?_r^)m@xz!W}$UE*yLyF8lSWeGd{7(y1%!I zk7=kfc8>>L?N?*5pCX~QE1lagh#zgiCii>{|AULkW?$COu&{<#;h9oPQ?7W;I->Dt z%PEg{l*O;>Ibf6*^Xu7qYFbj`t0NG}z{gE2XnT7&?1b0eCPz!zNgNx8HGib}mqBHJ zqa*J2H+jEvA-f3KsKogxVCg&Y6eDkq()q}@xOH~@h|zQoOE$C)(}NNc;;PbAZkn1c zw&=RiY45vPYMAk2+-$^_1s}&kqwgwIyRA`dw@kk98g)0}J9JO_eKZuYjf%@m!K66J zl6GCzlv;lOvupFiXyXOF#a6_l{qz-0`ok=0ZrVKKCu_a={5&V&U5!?D;0N@z>z=i~ zdZ}Otf%XdTaXPS7N)l~B+jZP;>!Yh=`x*?exz8=Hb(&1eIU_HV=&&C9n@z2iO*)6{ z4u)c$CRmfy13cV&P^!4lkhI!SHVbS8bWFO~tx5(3#`eAEC_WU1QI&&X5-zejn3TaB<_FnA&?c?w_jgqr*bF zVtSncQkpyPF4`x2f8fHE$h;S=h+NAx0eh;T7RpC503Vxubn0u-Wd~q1dA!cx{2IRP zr0NIK_#P3X^^6%Cl0O1Tz|o5OjbY)s)P^o?^s}v5r`GjKKzcJk`WBGpn`Hp$9t{!s zzHsIuRZl@hGo}eQkHsdbPcJ8E@6nWGt^|}R(pmds>se%%X%!x0 zl@p&Dqan!V>h#99dAKxRiyJ`yP=kfu#oK0>inApXNxarwQ9uGOS z6}87@q~x^JLVe&DCmS6!(dWfdEGo%lY_^NH^wz`Z7i?;DO zk3tT|U0C#-@Df+wRnJ_(Q>OXnUyiUVpKUV?diRzU;f|P4Wwg9WPb*h0asow9Y zYsunNstMAHjnZ-@mJgAqdQK0}8ib%HQsx?&H%(E4H{1)E`HR)hB+1X3X>#`|m$?Zb z^LF^?ro6AY(z7&m09!3huu-3XM*APmKSt{n_~kFwSAI@!rZZV&#n0aXD3nmrUb1xF zhVG-(Qi;6*ye7SWmP$3rI`*#4H2qta?#2*}(?(K2;q*P7x>r|;U_6cqFQs9Z?9uSl zylX;f9$!zV2~f=pozQf+MN~A_v)6fD9ZOlxE)$~$L=||g+X!^^(XUxh)p?~m& ztjUjg$pSePBU^&cHNih)$#Drqt((m%0O;8LQ)ZVP^sjv^Y8Uq%G|;AxO+Me zL#|0fo9#B7T$FQ7i(#HerZhEa3B=2K3nnwFIsG1cU3eRgO^Ym%r&; z&csup-v(q{z6raIzA|TB!Dj-v3;4W@-DkU&jP^fR?Pr`FnqjbeRLP^Zc_vg1L8R)> z+-Ju1S{()B_A>*f>~pzqP1m(@x+GEVR3$diodQ*I&hgudAL8gM8ot&&qgAG->R~ON zd~xKd?70LpfWDVBz!0LaSG+Q!Rs&F%Rh<4{JxECHR2-``f$35$vik@qL76)8c(WvO zXxTsAsG(D4xcPuOsYl-cm|$*`05QCHOwV?T7# z{gl~YJGq6VpN-v;UXx$4h1knmnj8l;&OQ0)E)HdgL35yJbDiXd{5>4$Hw&c`8_592 zb}$QFpE{{;jc>Hkwrz7?*;lS`k7*_b91s2}yK{}}SacZh%~ zw{r+cYcSd%uKQPao% z6~wR9)i9b9yRPNT;T+NR{!l1Veat$FAg{ej)IC7`Or(N;Lt15X(GpqKdwQex^SJcl z?1^u=fBk`zRh$MfCxU*ULW}V{nIh1b_J8_Kv3rh|%{3~KXK!Ya{M zro{R#O5~flItThsF?Is6MYZh-WzPDh8DB|12WzZ}=PmrVFy*qr@syZvD2|m!Dg>Cm zqcQ2-=uoUU5eWx(uH0vOVWvwBQT%N}X`u1PI#NM9Z%FFpiCI_#xCw-cHsOsi?*HsI z+1P2W5qE+LiFBX&VPhC#oA~P?45FJ%_SJjLaHp3zOoOvkfXTAzL0P{rK1q0mvCi70 zByl|AkUoNEioi!qr=BE%&YNVH!uV)-WWdL;*bblbZIygl(DJEe&iAm}4_{Gg4D)~h ztqo{e4&X=0VI!{j)}6$m{~EyRMHu%MF>-#c9}>KC*CO>w4~+;fp}enQiNN4JEU5nR zk;FlwO&A_}rUcOmogE|Adp#0=P}v|TwTGN!*Jx4_)Dnm%#7g0x9+38IIPrDmOFE1r zqNe>=|4+ncS`#n!?VCUF$ghF*Qo+X_15@+`)fU{Zgkk5Yn{}kxfsdBy(*(6cMWxpY zIWe9)YKH0Y)2KVf)9Yx7iS_RWQ(*7R3;EbhQEz|lss7?kMMoJ_%<#x<*Uv;!e%feeZUc`J5Q0_9Ac1y0DkRV<+*e)ND zRV!CI5TOV0nfrz;#n3gy@xlGlEyZ!NWP?-9t4i^;yl&MHv~#}Wrs`m=R#@_hYZ+67 zzW|P6h3nIS!sPD~1y{-3YRRsvj`?E2YH>6hcm8i?S+8SD0ET}K4G-r_rK`3;fW`x39iR0h<% z*kC{oraPnW6tZjX2QkIW$4lx$c~b(0-!`etM_#4A$jmj%_u1>c z6qm<$9SMDoC%*c4k+UMa^t)I=Eu;lCP@x6paA^-Fby7HV_qp<*i%?APy=jS}^Ug&+ zi+~dG$GB@!E{T-;rE`13Ew>ZH@Nh%2n>0jT%X{(PSGT~(yMi-sjpIJCTtSCvL=c(R z-zEa(_aGjqL2tkh6SZscs)MlrEGAn9Vtmcf@dQEQDH!72HglVAVuDY1Q(3||W36rN zSxhZ~yTUoO0$&#aYqJdyPo++yv_cX4#Ug#)gakCV@4}Nwb@T1G-s`Ge0dB8F&K&w( z<1`)!QYD4H6X{`!EOI%xZ5fY(npJ%R0woTPcWNcAt}c2SWETDDWf&U)JJ!*1AJ?5u zp}Eo9mzpy#3}2n!zIbW@sB#v&KLd6&j>kg<>$FWcOvi+%Y#(Q{eB!NjHCqaq;Ae5Z zGX7|m5aRb^M=^7RG&;1&-!`VDcT8-`>^&>V1~&8pD0~Ln{URdFyB}ZZemPFybwMC* zV2YLrE&@7_*3OlMDf@c7WjSEqZUZ2|p&)q~%dwlf9BjMLgC1YwIZ$A0F1$y86Ygtf zUfg0^WhL7Ac9?eJN)Sd9F+iPdkzHW^PiVm_@!{xPQm0X#`c zgBc=()+wyQ!f<+sKj=a&#DfZGjz4)6aTig}?Zst%AxEjyKSl6PtzPB99}j!YmB&Ft;^=9q{@Iq{^OEw+;Yu8bhWmO9B(B^bj7WXKVtnYb|32sD-9Fs+ zKLNeXxO%jVu-PfC5jRUM>kYP5i%ra6DDwT5X2)C+XOk5(T%C=ByPF+pSyveKUo`NsCEfTGS+5%ceFx5yyo4{&&A9l4|D28y zn_hy^$C6ZZsi0=Ct!uImcD!)gWK}VpN{#FcXk53fFb=D-S0{S}XnCpwj!)wQ+{^ve zYHM3=QjMUy8fomAkBI^oMTmxZe-I^ny$Jg~sG3CKvadCHZ3P$ntGpWx#%-(h%+!xn z?OY=lE^_*R7iYEhJ~cNv%34+jd@A67W|~P(s^~9~M&EFm?8ZB6aX?8i66&aC906*@ zh4}j)S=WlCUii(#o@f1C!cIQ>N13cALLuX}dbFmYiw5I)IeqWpy4i6H!^>A*1-I`u z5i=(HO#xk@$T6?O;GRNB88-A_$0o#*(mEJn$<781^i6>uNYd65zZK9&l1ZN1M+|;!WY1J3_Use?PHw$a7~K!*sdSe@u@HN@eiz@j>>ByMSN!5 z9*@;E#95lv7q+#Zc?rql2~tEO60_7hk!G12zik_#gYjyXxgBV(XDa{}+CN^mC$_D) zfO)MBJUF*g93%@oohm^^$!p%hvOO6mSJ7Hpgp~Q+2j`0-gmV8%)8X8kd+inh(n`%e zGo>E6jV`;Kvh(X&(^o!_?&o4$i?l}|3B`$LQp#<#plRG65jc=0s{xK-i6G7C@+-&Q-zjv5OE(={6(ykRi#Xwk@k4|yXv{_tXh^YY zt>1{V@^s1&CL;0fq1vxjyhyit#D`^8ebEjjSw!Pd54Dxd7~+W;#pMyeg{jM&gRpGYC!uF9*x#SyA=c*&B%UCo2^XNmh6vs<+kmfRS&!DLtTX^?vXA+^JT6n3qIJ2-oeZ#P8Af9UsXyJ`CG(N-wd%PWt0) zSFJ&-^I_FC&Lq-MUlJD(T;&;0Zo9}UGOpwF6YFcGYf5e8a|hn8(lz*UTN4#m$)}pc z>#%J4$@va8?5u9P9N;nWJQoKoW(idDw+LkjGR}y&Sw|CG2h^`Z)J$6VM=4pvSv;4rCoZTL+pHyz1wFZbkMT;^z%jHyVlvRT{F=ycxws>= zk)V2vEmk{OsbW2P(=va=gPDMOTX?eNpox9PSvN50|L)6R6b;@G>o_0Xdk>)hl%kZMQzWX zwlC6_h>8DDg~U_41&My0&&Sr!~f3XEhDQ;Ke9Q?4ZZ^z}ZOLYA?hy;+nr4DS!@2 z*Lzv@d1^@c_2VXjd(`zQGZ~%W3Ui+^GL{{-G-eQ){9eD=#Sy;cqxRV>s~VUM@Sa5{ z)xt-oUt)B9kwD&i={}3tr~?{38BE4Aq7Cm#+&O0r_&na{>|^DRR3BNu$8XM9>`z1> zd}`P^7wMkIS_iw*r|B9FbQ^4+CU3nUnJp8#O}Q4h#c8Fuo#j& zy1FM}s<=eH2p^V%SwS|a*Elwo_nmNXED>>O!vF>B(Ty?Los6tqQ+Jrtrj|iw}4=-+32`M%qUX8_)N{aR5za5uT0Wj*Jk(a?Q%39m>M0d*q~O#lOfFr z?)TPhZHv6|F~YkMxmVP;L_(n)8P#g3Mj^bZy9MLAzN;cedHAwPI4`kZJF3BKr<9DQ}}R$dM$IKbWyF8|2@CxSh9Dq90O0>4o?zXQq20eDEW8k4a>z~&vPbT2L8^2SWSO$2dRtEJ=M0bB=OX1FyP z>aQP${cOK49O_~4^{#z=ewk?BYLh~X)_X+9v~7WL=xA`x4vw0WoeRq9r1Dsk0X@ja zKIj8hw}gAWFKw;kk=;vOAbS|GBaR~7F*4tfcoG`l5J&gjyx^wChy2cyjOVpfpzWhy z)ij$hk~Z?8KTdQ;fKkYer~!ApK}|O zo-VBqTJ<%7qEvv51*fIxt9oc&#)tg?Zm8FX=Fq&Lc+t;xvkxF!dFAyHXJ|LSmQ13VQt3v9Eob@sHWSGP`eG5Qg8Be9gs(Rw|&e*+`?2ZAVa8OHU)giTv~To zsQRRjQ!oUYC7BItX-+OPYsG0W>Z0F~*Y^KVD;Y+n?k}W}eN9ZImusI|f1=YqL3A~~RBK=6-QOd$%TYnPRKITbK8+icw zFq#CUIK5EQ-j=AlGw+>DQO9Ws56UB4*KJo6gDR=C^fiL z>j!C-kiA;5Wk<^GD?8!HOX&uYk=-}9$cBdN$3~s(nF&a{*6pi$v606;{8H(N-Qg$rE;N@1QG zzAK{;H?WqND#tBqO&r|&+<`>=Vk%9g!Q;)xluY5yENu9sf?_H|f3a!aP7W1)O3$-cA6;+2 zUfwH5Kg#Vu2*?2&WLK*h#1aX;lSQlksV9TWZiHJDXo_CSDO3oBYhuT%wZ#~Ug+Dw)pI8LAgH>tX5 zi6L7lP*UzywKnuwRg%w)&GPGM_N&~;*D@_Aw< zYCqZ8YW>aU3B&O6QJZ(K=K9orYNl4sulnGGn>cy9Hlx$lEqAj1?(VJnli0%%A7z@d zHjXBaTc*&L$G+{&j4SRQieE0}s<5?0=5Plm4!d|hOEF$Lnzpvnr_WOR?2}z52vXO! z(fqbb8}z#mQ>vwW!q?YuRK8Et3lw3-8ZK(`6D|yE(p1mr&BiQxnHx_RYOUTiLuro< z2&<mRSulh2BmJ-DApAq3}Gv5Zkq5+=@%%LjHc_E{eL=u!`ldbqI)14 z3j$AM7qzRz1e2k~7LD}oeynqKPF;f%6ir&Uh_BD)dgkK;?=uK3i10Zw`k>kZUD&sF z{AN$6Y_4-=x~W;mxVDhBc1{n)#8LF|X>Ccf>e#AYiOh`~>HdV~j@9(^O&u0n^omZ> z?3NTnV&=(|Qy;{RHuq=a-QpEb|3&8*k50J9aBZzsTYydbAL(YlCXJ)xEtV}@-|XoR zw)py1pYUvfRdzS%Y6g$q%;7HVKRk($hW7O|3ysj<28@b;Z_=+CQSlg(+^VEG$8QOM z-5;&>)CN2U<4z*xky$BCQ;k8UbMuBVy3LV(AC9kQ4X&R5sXWYzvT|P%l)jd)YL*bWe!o3jqiqd-t|9%x8q;b|71U* ziEyveHzg6~2K8X9Ams9jV<5ESO9ZT;IKJ%Gx!maaJ$jQcG-)OCmL-7i_mp32)qY?Q z*Bf@K{qt6Qi_O{}sbiRyg5FS*YMRsvePGU~`S5G*GLtV&XAL6?h(?}&#zF3BWn$+m z=+9}7ixL`;qUoNZrm!;p@)!~eri(Gi2!WOLYvG|%XuA`%iuAZj)14|0a zB|W1mda8Un#CnoQbVC5(k*F&#PBhyNFL{G5RQQ*~Gf;{zvMXEzykq63UaQ+*eilC@ zut@Onz`Q+=lZvmIX=g)H&Q|_KzxW#8o2OhkE^b!en^mR7HhN9yXG9u^tVj(EQ2Smi zY>j^L|7@CZN2Vtw^T3T6_UYpDR%2}_1TV~h)XLP-=7*^y%4^BDWT}w{DtI%@?k0^0 zjvifLS3K*Qz6^4y7Q%2lxM$V#7t)E38T#ito1k>bLqgj+uqa18naqlj8)-&dFu1yJ z$?F8{e1N3m)w6-?jk8`VUa7 z0>s5-m}nf5TMRjfMLG-X(%U76Mhm25E*r*b)LaNqpQi<^L2rFNlYnH)XD=3fed|xi zSpj4+?&UL$lHPN71hXwGIZ%%Zwrh{C?mqk5yzIaJSaq|tlq-p{Le^s8Bf~qFANbHT zZhtuZ2zfn23et(koB4n@Jm~~!;yWR5=r`uA*I%1mV|$10Zgdc_2zDqr**)pqt`djUYORLBvO*1_ag#7Y;U0dN^XIV({bEoYZ~kVmE4NAz z`HTT_mK@rMe<6;JH9V@3J_Id?Re?N*@`e~h8LqPupe=b_a5@rPtO&W`GzryTVt*YO zt$o0jFqh-4X%P3?Qmv=7Ppx26VYUI7m9q(4fIRc91U)~gc%jDiN77Q(sq5_?Z{sno zV>kE*L_<0vmL7(21vXOF*JnNLK}3Y5Ye9&Vj^9ZNNfl;>s^g^?&_+H^HU^W-AGeMc zSj&O$!*1K)@|f(R;c_P1D(I^fJ8_20zB=v(!cMz{>Yn(nYuO9*f3jI=LtXMJ)wz9M z)Ahb^K`-iJN-2B9JH5PGNn|t=nv~AVW+(eFoEs(a{nG2~M^kSxpF6SbTj9qEqIs(| z1(DoJbm*3{faotP(4Q)W!!@KwT+rF(=s-r&9yf)&_j{f`pt^fdj1Eat^kAN$n}}_4 zWorJm4&^ka5rzNcW8JLZ*Vd^KuX;|8;+9`Qf>~yt^*QAer?b}!mhQg7XX_RStBDio z`5nMj{CW5H4z#u**e3UrzUQX%a_-k8!E_0u`SITbqIxawUWCnxr04E@17dqEx+CEr znXTEts$5M#z#^Q<K(47_vuR|40)Sf{ykdmAr{s2*yk0k9P3hJ}?L%Omp}OJkbu zXYvk~Qw9qI4>MDB-7(JxqKK zuKcj_gyV6T`<;5!g}4z`Y7Dl2AEuUN-pEzQTGT$eD6pk^pvFgux5;~zO%~MC;oxlP ztT@l5hic-K%iZf}opB&i>W-NqH}QR{lCwVoGsXr--|8bLsgO;#pVOi5ysJ)PEezCm z%ol>8_fg(b&kdv*3*o_C;!%3LlsPP=p7O;Gy+^$H88jDT)!u7LV^O1S=HBr7Od$Cg!_PB?rRfg#Grdn<)>Y##B6Bs|qeQ zFc{oPHQ8FkVjN_|BvH_Zw;<^Vim%N5PMs@0DQfC`{$Rb1g?>7i;xA@Tfp2q&Obu`? ze_W16um>TbSHDv@p>u&g6*{By?iAQ(epxdQb$!fiQZk6b3Ta8{U5P6M!h4@yRphZB zZE3!qHlXSor=PkXY1jU-unfX2rMF+NIs4&Vgb}^(kXA15u>3f|oXXKQUL}x|C&79S zc*h{T|8c6>O6t)1LK(xidN|!6xAlJL$|KB+?DuQ&#J{CTIN2kd+(Z1Ohd|JpcBUI( z@_*lOMM4Pd~2gTl85+`~2w=c|1udEc1NH*ZLi$Pbd-C<6RSL zUs6sBvzgd%ru8_2&hog&)6|cH6ZZ9<4^@kwP!~T~heV>~BRRKzh^O@99LKxxuR7yR zB%_iD2#X>|7)tRnT9BY(NB!a|dkR?EQChn2g`s*1Cc&7DW3a86p4p5nDQz=*eu@-k zyKR!D9OgjBTnobbADy<>RIL>;Z!a@-)O5FE4+s01sf&vUQ>$G6jz1UVh>Wv68PI zC%>07pfH`lsc?>Ly55S+?;~cwos?VD5Dfa=GLLlUV-b{)HlDm3OTmVJNb zwf)1~^MZqgz3pxR4odG35*3R6_4nRMZmRrR{Ka0|^rs_9#~GOF-9qBb*{S?gjg$9l zC51&(0YSQ&gJ&;RV8xBXGVn`$FTc1r0(qidoVYT%IQQ32QcNWj*eXm-`I=v%HG!(} zK1~QWRda<>%u@AI^e+^KzsG9nY?yJ%39!|F27Qys50MEGGi}58b@AeF<>_I?)5$OM zji}aJ$jQp8=PCy*L_2ljCkg_4RtU(E^;Vb`Nxyju`%&yopf0&`alvIJ)^#m*xHS2{ z{xM@vw)|bQ21#D?p=~NjoI3JJE{qJhG=Bd-o&5Vx zKE+#@du+sdlE6z?8yCEU%iDf|{~3w{CQGy9EuHla{;p?Awd(KQiCpb(Z(tDSL<3QA zo94>yJGn%?zV;d=*Gi}296a|RegXfHoSdvw7I`+$^UpbT3>LWy!m=P*L}xw96P6Bn zZA$j9_W%1wtQl@~*d5Xc#Qz?sl%Lv$F#^fK?jcjI7n2>0bNa!Gy41R?W!*G)J~To8 z+U!O?f9~a&=57dV=9WMW>}tQ1*u@R=$Hx2X9yr&-*L_6s{?4C!Bw`4?rFAblKhOyAEbtO*m_ zM|S*8Or0fv-6J__08auH9II4$&m;BP#HLV8ycH+Yxuyw(!%~yckphzK$qfHkTi}^n z5rjcF;b>Yjy8BXe$o9mA?I*a@l>Y}zQEQ35Ocba~iVPtjr2}6 zz`H}NRqDD6;_#cVJaW&!H#RI6@ZFRB>i_8K|I^wVm|^976(666#0GPtzW;L;z}A+j zg_RX)|5^g~|Eu5sX(LvRO}AXwHR+p@=BfOJ2c^h^MBUj`&0S7TH5_%g$wIT5y1@9a zqs(arR#}h=N*%8~UITRp1Pp4pZAIM2MDt&CXs`Lkz&#$~(L+<{|E{~ZXt6HDB}mgt z-1zzu;=fDrDvG+?PrzjPqfYh2Qd^AJsgu2ai9XZ6_wXMt<9|aQlSVB53G?%G++Rlg z&-()zklKic)}|R86fcorZ6X;1pOB_7EC0D2kYZyfV{IC!TJxY92izL_{cy9(8nyjj z$XA971ABQqXuU)BpW^&Gv|gX)DEdv{(}N2QKk9!X?=L`n6X-)OM%HVX{TUVJKl=I0 zPy|6@g`Z;yewpMZmLjUV)!v99V4vl5t<~tY{!jVN0@W1~m(85atLny4ON|J9wmK~+6Tn~2BmeKI`nP(U zBY#WiRin_iFCeLP91Uz+NK1gB_`lZ0|Gy4?e}hGMt(%ZES@2)nJ?HEw_9g%ocQUzcey+AN8Gt;T+RBm#j4^qQ5aj5 z4PXrHy;EL7F3m6DI~8`?oqx`ji>YhFF@RNe75LN~?P0UC!gJ2VZQw5{ zcvfrprrRumf&5PAKK^rVQQ)N)&Or90USeglcldml1agio0mWQNd0W}#uu9gLg3e!G z@_#JVfgMcB!|(1xeI^fuN%-L4TfwtqF!YqoHQC?0ecUw@9XKWKd7~KTapUufDtO7t zmdzAMS5;s4;kDvdQQsary1wA=z~jsKqRCE46{Z;X>rFz2gbOKjK!5Ogvu^{t{%QOC*p@;{4|` z=3HKLlX5S6;M1jV3#t0%gJ1QyU{OfhP?RHa?OAE2{T9J;y3hUWrZBMSh!LPeMNP%6 zQaK0ft|V7(9H7#`v{bm&|JZD=WW2U19NuKTPvXubToy7%MLi&$o9UEc5yws56Din|j`kT^v*TEUSH;Mz9C8tQ&d0_QoX{e#FD77@EkOiNrZpGUq*X(Tg+^mYUVRwYn zVm?7FG$ECu!`$n@6gYw<>Q740hE9RIpaY&4ecG44jKR!x_q;zZx)@`uY-(kFR#b-> zd7c;C;&g^Nm1nc>tV!>!wG37kLCR#Twn;TFw$34e*7NzS?%Qyq50mMN=#TU>W4JEK z?E}1SL9%A8qq8xj9>3?`Ask5OU;N{8OHe1a-QjZ*3I@NPTd~;-s;w5tUJ-v640>tc z6MZl_otQ5hoe8?*xhF@-F)S+m;aL8w%FaC=W1w{u&4G2{TSg16FLuemlJ)7xn=|z; z(?$W26SS?B8Ti%1oNUu#&~-bH)X-tDH4ZENIoySB8)4@3VBU$!BE23K$>PtN4`4kc zu4E@(okz&DykX)eKhJ6|=;>=jbEbL|&eGv@RiTH>AMFY$FtFf~bS9+NVfKn~tV#KN zw-5Ip=S@C2;@pf_&!Kzo(&;8~>4ZoL1n?x=(PFSM$Lt>ve|SvHPdxXXHoA$gtxeXZ ztARvDtuJp@<6Opf@&F@a{SlBxa&!Ha)ZIhQ{-JPr%C7Tt%6ttEN#3`W-mxdNrU&Ez zl8uLzu64}Ds#R!VQp&BkHv_`+@;pM-+5&%;xxRaZo;xR<1*$`N=GUalKMUs^`$s-_ zFV?A-c9A~ctJ@QhI$SGfHfjZoHgs<@reC%k!8;NmQFj~*(!!nC`HL$2Dci`5J@&Ny z(nm>I9y#`kN+IGvBAQvohJRF=5xH^buCMKcqG_q^SO@v zTYyBl(;d~3F7N=!;4lN2D6;FlKRpenF$}gI&%HXQ+y@1zZSOc z5!&4eYMk^R4uw=M5OZx7+;%XwL5GxXZR}&>PJ4;w4O>w?!;c&*k{dgZcJ=xt_CQy< zCijC}wp!1Cc%JuaYupuu4#Y=1JZ$$jr#~_<`|qLDjOj-Dn8om|_nIJ06UWA?{%>aw zcaO~1Y2?gYj$iAzCD@or|2pgc<9j70fm4O;eYP?LZD8Kd7p&ClCA>%VYGf!6rm^5bEauP5pgeo? zE;p8OwN~*DB)mNq7xl0kWrpJ3xx?dJHdjBmQF!IJeS;46cK(emW%wS%-h=>gr>*~F zL9hr_*rm=&46bogR5Bb<^ApS ze}Vi>gt@nZ=NN(T*b@$S}n0hujBE-z54;iSsy90R6J)U zyfjmUK4GmxXA;G6ic9 zZ*wU>-YCZSb+$6>V}%P2kH>aPPg+ikbmMR-(XsY&5N0hB%b!#%?)euGu8ZIipqrTW zk*~en8txly7x@9aK=el>SJ}y<$#DOSvu>O+SK&)77F3V;+5u~CH|K(=;KL59wt^#x zv6Zt(W36-~d}Z2zksQd1R=So3MhL{$OX&oP<0$x%Gr|#ao2TFUR^tAV z#nT*GluD36u+-CV9|~Cz-;d+hAbsXn$fC(DN(-YpNHc)R<(b?RE~bE?ZxsR>PmBklHf`9%n z_#-AGf*1Ds84Xp+4*OsXdC8=RCpxz=Rg<1xwvyb|6P!NY-v{ao!A!`KKC&fXA?pBmVS~oRW)!H7z373Iv~i9tCvkz zqvSQmJ|5vVDx#Qap>C;Vc{iEfhvOEG@hhDD!+-S+;nIj>q;@ zj(hBY>*A?Qoih0=@K69Y|8caI<4l?0LPkKIwXEU*9YXo(O*L2RW}it)$O>ihXx4uL zK?w{xUO&A~GSs8)L5KYA#LtG>Ez;e3>mef5Zf57>p!H>9JXF#0LVrLQA)iRm+t%vY zpm>imuW6Fq>XDgRhX>W(cyxKigB9Igl-qRCHbAcc=%QWIGRx!^zIIW}?;HHMR{Sd`6qww+3_F4> zL5UDE#)U#?nmsuP#yz@}ZvCpJSb%ipaR_ZEOcoLKtLuGMTtSLnfi{@OB9-Vq`6rG# zHuCJAs$5LH8jKJ-lx%zv-d2N?Jx`fvh3yD)7>f{J2R*kGp5J&drr5W}uRjiP2XGxafrHA&z;sSVn zURaNA+v?OU4RHws9;k~y0A}3xe8?=~QQ0HG^g|tP3qDTbHZe^!%xYNiCWRIRsalAf zfOkdeZa5q09>i<4_ql>I&z}T`Hmc}-`;miO3t41hA1c0aAZ`mD#PgE;emV>kTG#0{ zvRX@0qgmc?)jM3>XqP>hRSY<6_+RY3S5%W-7cQ!ZA|j$9z1aW}0qICrR1^pxMLLM| z-a7;V1(c?A2vsC>LJuto3erP|0D%PQ5JG?ep(Y3aea^W!XOI1TH~V6b@n2^o@00b; zHP@WaeCC=jP?^@MY77pGxz1C4sgyMjJQH_No<{1wpvl;im17lW>Id^=poTFKzngvB z)jow`V}JfhgF_5qB2_jEN!~afxwR(o8O!V(|v2n|zi0@L=oy(P)tE2iC z{rGTcZ?3ZQOAdQ2pq;FHKSm-IsnTzB#k^Vz1QRs_6i( zI=_n?#aive#H7tzEgICIuCBO67PtjZUPXu$dcTVIXxLvrlxwhm7Dk(z3vxW`d^B{6 zug#N@aSmPZY>4}2v-rN~QIwu(;AAqiNk<3J)R(n?kR9+OTJruQ zji8OV`2Kk;j`UPcH7(hiYAbA^e7$Ouwxs7L_f`r6+2E0*=8G5fRP!e3bEM%EBS**Z zmDi#{n+B%v=vzN)^e_XPSf7~g7|1`a(>ba;VY1?Nz~YYn|6jcIKM7B@6E0p}M4^&Q z*k!5!g|-iXeE+yR&xOg}8+xFiaQe!_qq?TH7N?OfV9!f^<%^y@Mm6`H`JJ!Y!(UHR zy5sNv3$R_PZLR6qCFWPsNy9~BeHRw;{yFDA5^6i6ZjVnqz5m4nd^FCe9xge{TP**a zisu3U(q7n=v;viXrh1C4{&K>Tv;~d-0>z%m8H!Uy1Si)&TFM7yF2*y$sY{df_rIaN zuzyjI4wqK{aox_C>GU&ZTGsd11L1#x;*|Le1!7P{HR^w2Hvbon`FFzgveDa?H)c^Xegvs)qv6k`KkH5tH3lxaIwoD-Q4gW1A{li-s6Fp-seKtP6 zG5r??efAOl)0Y~)9_klnrq3C2_K&PvwJyD9sjJ&mlL{ecRc9J=Z2Ei2Y_-89v^)c zdCK&7_BOEA)e^nc;!uNRkopkE}22*0r$cI8iZvl`)tx|xhSJIaSF zun%st+So^pLMv`NUq@KANU1sJC|{?r8YKz+lgqq4be-C{%Y!4RLDZfjra{z!1Ee^t zn@zijw!FGw9W*~mM|n<}stWzbf1F3YJjq%Y_X6D$2gvO%C=(Am85xO)PvX+drTu3I zdoC>Vmb=xkt8+6SvC`4phwrN!7VwTgaKT{jRucC=fB#GhA|tE-O20Bx5uw+POx7dPgjO$*$2S2MXXUXmllI=Fd3kzw+r)RVx&E;S5``KIMGJvf9lZQlKulku+ zkCR%Rwc&BX!cR4oyEz!ew(m~my@}~qX7@K&%El0rqd5=0{EZ*nTd7k+Pd<|mmqY9B zg%;KJHGtz+(JUdlrvtJJ{!C$~|06AQ*P}X)iP?kj671VMkpufh`>Ws>ahlQqs%++j zE6H(Z|M2Y<2{kP(B^_sB|EZ~|`kD`}`BE#vfBJoKo;5AegKC#IB$@1RipQqv*i&T? z8LID^kj@8S#|`DTJK9nmG@us4Ms)b0e1J@u^QUehMEUH*31o?BS%>SZ@V`ih+AjKT zJ{)7zLV9fSJIpp`Dg#RzfZtZA9bJ!l62>ZBaF>KT{@gorcJwN3m$oV71XSHdfxfK& zR^Bw!sSFGNB|q_R5q1lLXa4@}(DuX*_eGs1hWp4S{XYsePTerO6^e=xPw*`tp8e@y zWU=7)N-vg?By7qY<9}@9`Q_H#9i_eH5x_bB!Q z=0Y>ed%xAQnMW~y27NbX3XQzX^)P8*yB{SFyowf6U$2iIZbW{ z;7<9fC=J_(o?S?L+~DFpJ1IEcu=jcs9DMh~2SM#BbGH+#rYj56t0#iOZ;I~wUCg~K zp%G?4sef*P$5fOdq)oBi2hEIa6lR)!xn732JI&ldO$$PM+AZqk^8?GPx^h{`S`yEG;%XDjD z|F>xy-)w139ljfMr9y3zjnf~kKPVSoEaokd(8mMpgJ6@EL)PY&QvO5Aj9G3!B*9ep zPY6W$FUXfH(A!#Dq{Qlpm-kCTP7UEpwRDYtZFvBZddiaIaxOG2plF-lX+jQ0a?$F| znsGU5k43DO63i6pc>8vx?)GTUvwfvYuU!Bv&#?CZn+p0h6)GjyS28wbxhev zhI$owXZvB4vybEIR+ogPDk_@f^mKlQbn-*>SER@_EG|70@$TrDD_$C|AaDcu(ZjP| zgz+1bkc%X((bjNfZaS&ggV=!AK4R7;)a!L0@cM@V`;;tH?c{BE_D0BZzv9|}7+R+M zd&v=l5$|;R9=J*M(dZYEoeM4Eq-eNmK!Qx^vGNNV0WW;IcNFtRHEoj5N-npK+rzB) zr4<=oMPO^Z-$X*=(v3L9h<8AZM{jRyt5fgev4pEdZUj21XzZC(YQ?DiT7UzDD0Gt% zsfF80n82(RJ)wt@k7lsD1IIiM2dKBB%!BhsFV7ir>cq(>rH7|1+Jfvr(tDU*{b|cw z7wa4s&4xiKmJB-(>);hphT`WYwO;Lm*8xf6O->x+1LzB+>hz*-Oqa)={*@T&8#;pc zjBhI$Ymr?nTu~Hp6cK6C;5gFNJ7F9`hB(udxHy zQrHtS-WEDlhG-fdj8F-k4#he7>jmQi&8o*7u}5Zy8zycYDyVpXgiyW zIwF#}B&4=2YOa%4&<9;1u5XXvqaP|?vr1+){e2d>NnAZ|La@HXE-XG}(gQKJj0 zy|Ab4A;1NoQS-_zA?PYJU0M;A-YzYdoNnz4DAqNNdApt@s=UI`tF1;a{}qo;FElXk z5!*|)D0%Vh`#!UJQTDKwN+qjCQQHxj@`|2^C+vj%lERHCE~%&fL0*A)3w58xtsCOO zHXKNks_qgA@#>Il3{Eeubpt(6)j1ql=A1G1OThO_z`3=F`dV5&yYBt+6Z<8{qC0Kk zBCS7iV~^p1-W20;2FQH_Vv**^qMgBuSzmH(0%*y_yN@S#GguNMoy%|7PWYXGl%z zk@m8E3;c_26nb|U(KW5wGpG0clM;LW@y-l^DYOCR5nluJwf#-|`i%-zVHkJ4tE)*v zk3;S}5SrV-UqbBs0^V)jYkq7Ya*;h_*ld0Qsg>SUzOA%%C9m|0ww>44o7stzz_1riWZbH+D=2mjah96uql9%Gw;AOY`k+GX8{g z)B;3iw|5JgU6qTj#8@OE)JSnWWrw)d*Fg@LD3MaP`W%PW!|@GyQg!CueQ9dVLmU<7l?xM~Iw2H<@yQ@yOak(#SAg~ zc-j+Sg1U2Mqa&u*h5sI*?ofU7T!B;L{-fXJ-c*N}=lt(;j&d3E2NZ9(Q*WGhO5LuF zi^MPbKJzR5?zfhh1|e*;J2HfXJk|b zQI!)jD+>~fL5vcvhJ)SIDJSNoDO!N>cB3abyK>ow$QZBP&Uuu?a%2y?uN36Y-Z@c| zcxA~@os=Z;vUt!37+?yNfC z>hOaz5UKLt)!`lxskim&t)Q-aQzYw?$1ksA0oF<=hn>b4Z|r|f? zencobn&lxo%XU-0G%M+U>YSxiqC<+-Vo@mWhch_h@;yB(Hbe5V%8fpq1sM|5VG)Hi zfQ9nen%w_}fQb zDh`0leuz%Owg6I=oz|OOe2+>3-bQnGkdhy`g}n?Vs=-oB%xy+ok(2;R@zY=}&1q5W zn1$Ji|KT7fhJJnOL~%4iQJcXN{wF`a=jyfj7`W94PL zqy75)vAjpy*prlG&LQc3!FQLkynOA|<=oPye53$%b_v?^>=~j@r{-RThi%l&U~U+>e`NGPM$YeERMVs-fcSOH>NKu zQvaN2Cp>fwJAJWvF^sP64?HGVU68EvJKpUiecC4q1+hntB{OMzgEWBtC77A=)w#?*=SUA7M|TZ8Oy3E-Y7z6#}NB zUSnZRo<@mR!eoWs@uWI498>Jrld=={B_+im0Y*?@L8fHPC`r}q&GMvk9@ry^uNks9%Pv`iYjacM{B;=Z17ftM= zV?PCj^)?g2#n6-7QsZ!j=RGMe&T^77NsfE2x@iR1HaXQ$7cv@X-@i&of7wIKw%m7_ z>6TJ!i2GeCKHe?<8K!!&qXsht-*)jnEdHt1ZQ+pPa>8)a%Z`Gtk}FLO7<}J!T<73yEUxh-sZv(quy6KEIDj;T7Jk?F@_vzQ z_o)xkWL^RHH}MKV;eDFP^ECB~2vVt6vg%hREwW)!pD7e@I&narZr&1rE#YIok&?v- zuSO%W7VA$+Bc(Z5k83l#W<9EwH3*Pj^E#4FQ^ueFe5rM`HLV5dQgmx`79*7dsP+%v zxr!jo^WhklG-H40EBN( zx3GKd&qWsoS8!1s*RL{&1itioJ&{hUgsK9XWz92Hnw2UI`iqX~hA#bbF!tP(u<* z9EN!9&J~MCoX2r^cSRcPMF{d8hCiaK^#s@$8b6?Du_$gbjLE6w0K`;sE&^fL_kr?= zlc5BFNZ=rRS!AfQhowZ72{?z2ya;_MpS;IKY0NqNeevgxrp}vv(9yOH)bT~J_Xr~$ z;5KDiJezlW&EO$UX-TPgDxRobWd6fML5Oo22urdv3`rWl6RHRN#YpEpi%POV+r5zc zk(hXsx9H`>^}s7V8={P_oUOR;7c6hW>M|*mcyj2^;-=c`Vbc$W3UyUO2w(Cu_xj~S zYWUm%nvUO!b2HvpHv1}087#IhOFowKV_vP}p0&m%I2U!=-pYX6?M{sNDQRnNN-=>t z-w0`loKB9q3bh95bgY{PdSe)yTeYe_jYIg?V22Ej8w!6eS;{SA^A4?29mYz?f{uV0 zn!8up4gTi!Kk4dTX(V%LV)r|sPlM&g;EdP5-0>=H5{ab@j}N$?5LzkuQ{d0S$NMk9 zq;L{cKQ^vFs50L!(Vi4N3JK8G!U9XCFS+rP7KKMclp4*6DnGM=PlM;FDstrRo^ZhL zn?Qk9&yz2mAHFgu_Vs)oE@Q|SQG?xq5bZ7KkUwKs0R#lfHypyF%hY^Pc$e0 zE(8~R;Xl6g7>9H5uOn@~D*9nvIJSN+iX?qyPw87x0^zcrYFp<@!epm)j)TF|`~co9 zlj-;GZw-UPf4P$y%`RFzaX{C*R3z!(mAC%%Na@u=?pJQsowd!_)I6AN9E%;0O`mgS z%P_8b*N2esYcYvmZeAiWlpxTrM;~dv=K1k?w0X4}2foB%pS(Uxs!e%vmlNU%jVCwh z#*iBn>mCY+`~YL*Wp)*+ts?m}bMpk0vhyVeM(!d{yBrn#0lC`jw%4Qi=1%KxxG40k zfA|nWQm?yGZGe1yyg!@Ba!nqp)4r}Mr-x>pGl{rlKbp$91j_5{gTNdxPKWo3bcBop z{fu638e6oPv~%xLZ(k@$)Pm`0op_`KxQh|)(`ll;Tp)g=UxwckD6n3$rC`M)Z<%Pq zBl{7ZG|JJNkdx)YOpa0sbUuFh(~>^zB0?H^65`9`}acUleVD08U_3-go12KUGcojtZts+rUobMpG`Mj|>>8PNlE&UM4ujvwfh z&Lq^-d79-o%XP}2+fNoHviJ8e>to=XH&zp~jg#t4b594e;;BVG081~F#(X^EaSpGJvpLwgIk|k$UE2APy1Z<9u?lxQ>SAsQ6vS?hOEANTdVl} z%=^Ad*@1fooorm+H?5DS_l|lOQzjdtWPK!lwuN&F^%>{SJVW0V9&iTb!|jSPnzr;B zJqjm+6J5wa4JS9RM*{q$x7aX+0va4?(ZS0X&SuZA=@PW>Z9G0@>F0^cyyKUNAG5pY z3V(65k+e4uQPlG`TVuMWqWiSVmJ6NX7^sIE47N#% zsX6p*bhScp)BqEQZ8T!+TK>`VdVD3{B=iIbNOdp9V~Y3gaZH@4b`qAm9`cnkFp z5socB_>EYq{r(ub-Tk0GK*9+hyX@k#-zlRYC1wYte9|kEv=_1D!~n?h>CuS$2h6S8 zaNSUat%RbwI^Hb&RvYZN6mpC7$jzgbbR`JkG~5so(6Dx<6Yis+y>_Zl z$AyITS`iI##}#wS&9vFG4TE4Eq{eW0LAD$pTl8JrAnbO}y{bFAFIuWXZVGoWyu0WJ zg{;XTG_uKxoZX!U1MQoy#F)8(ipJ)kF4t z)a-3|l74IC$&thC_OLQmF_*mZ(2RTI;LWf{nh}8vXPBs!LA11h0yD*rsBzrA&VNj_ zGjl7Lc*@6YkNe+2Y`|gO=mCdyuZDom%ek6ZsfXR8k(?%wq+-oAhk@E?V%83JZ`u5P z(xn`p0k-5fd-dq_9P1( z3+W*6=lJlY8TjxRp7XJ!$c=!HzKbByK|vm&Q9BO6X{vzNi@ld&vRQjI36`JvK`Y-4 zecnkLQ>?CVdH@p|xGUy^6np@1B?kDIK-l-$pxt?O$b(RWu=$AWTMS&X8&}g1K?FtJ zgyE-YW;;TnmK+6-Br|t1$~NQ^)T~$vuFPac$?=G04kq&_YcuQx|Ksa7j`UPi&Qy6<%mLYdEmy zi5r!0b>30dr8qUu08$xKlWD_{N*Y#zAC z7wSH1mLflQse(KgrOAe`Ij|Kf;7$W6?s)yKWmpv&{MCS(;i#M>J|Ye9sSDQ^!as1PP!v9a z#`SIXrK_l~A#M))z0sg~CpspSRTbHLewxzdqNs=^cXGgthT7GTw6gJ&`jLEXM;ggE7`h28~F-sujG8==sDQY<-41X!ryQ ztnAh8Y>`9+DtS)sYovz%tA(Qs9{r#R`!6k6?HwH?NEAQ}$Er9)V4)(RuMwbX!>0UQ za)#^a%k@gy2&+rGCnblGZJ(KByk$5${M0>%TJJsatVs#O_eV45X8sva93AIQd& z!rV*x>0NPZ$dh&rp(#dl_Vij*&P4N{fgV|e>S8hV@!p7nZhd!?DX-J+R*rF%dy~V< zTRHo{kYbUq2+Ls&g(GN6PJa6@2fXQ*rU^y+%6f9tB?3^xh%XCbVEeqqqSck#@OV`k zk&&lsB`N>VuwsfqfoX}|$(Iae$)>@4PU26;l@nK2L`=6#YQIZnN_#XgCpT$=sB1Hw zW`s!g-E7s|u1J;LI;Heujbu_=W>B0C;E?b|pR7}nA+4foP6sW%#xlg&($r4h6d2w~ zzs6?X&q;OpfZEx{Sf5{xYH}RQv8jiF?F}5u+D8J(16460KYyq#8L153e*!v1jBOrF z&8-fe6FLUHY_{XXk%nh$!)?S=^cDAyGmM!XwQ&MC;_{bS;dWC( zSD8s{ZyPA#F%(+j{mG^bu&)h!V z1LU~c4BL+AzGTSY_zG1s$P&^uGZ(69NQzE%ZPH1L8cAJ+t*{(iqwGZW*P~4bPj%Jf zGW{dC*-8HP+eNxa`)^9};%d{{iN)d|q#LOP>E<`6Ka(bGwdD_xfP9Em#E;!1w)olB zVPON8kdpJw7WTVsHS`{+6Cu+sQRfZTwY?_eTkG|#7Fa$jXitSELt z6QOla8fBMaVqa(&6RXDJMipZM3-^ z<4m=KM3r@?2GTTVLHGgDh#aC)iV5l37%+`cG7&S;U8Y_?I=$%Mv+Id?o^aym?;NAW zyiV>iXD~Wy2*q3t7Y`2aOjuno39hr4*OAS%3$yNO@(Y{_$_KgC{^)L&@dF&@g0Kv` zwa}9J5gNgll7%;2F3@LOi;=QiQ-e9>%tr1-oAKKwiAp;ERm;ttpt%nb2UGRSk@|c$ z=cwnCOd58%3SD6PTRb`5u5aVmFM=A6bg1Ezq<#&!OZdjI^~U2gb7z7isLZfxkNW>k3osNj;prU@;tBG4 zq6?Gz=(Sz>S;`_2Ho{_Ru*~3-!z->b<7Ns|%LS%78BUHeF?=EEX6$?>a)^PzJBB#~7$CeMkHuaC%~jOT4VOM=nA zVw#@4^+@{Z$<{-xsY3&JMnRvgccRyx38*>GsURN^2}b7Jb|a?Pf>W9`2zqkAf0MD@ zMug)8ewRNxQ_W8%j|S2@i8i&gyB5+*dCM~auQM*)$g%FftGz;f)}0nl>`h&vG-#g{ z<7FxepulS6T1h~4Kt&8%U1=gL<<{bn1*}GRLjTv|PR;sGR##PFN=X53|`tL;CUu4>aAK35>c6)K;glPMT z#GfkLL4_nx)42eN?X4(4yMUH$*y-d&@FTux9fLQr zvZf-aDsTe77NANLyvMuy01@a=8HibR0MPG%SO3Z~s$aav)#dbo_S#BLNu1nFQ%!D< z%Sqf9^BkxKL#8tP*t=%dS!_N3N#MJK3>#_1Y2KgMiTwfXM$eLyJ4MkNWdUZf-AGD( zW`My;PGR_?S;YX?e!EL1LnC-W$+b?0Oj(?*&&~-SR6z`z?Hk2SYV8{deYbD&tqC=g zk4Mc`h+a5_l{Fe9kH3G7XQ`rh8r(<{MjMv4_JFtdyP-tY(IiA`h(Bt)-v=GLd5{2w zO*xKTCP^m1e}i$h%`dZgXIDyer#Da63~FAx`Ak_KTb z6+)J_Cp;cyild+dl;7qIRww)W{IO)@O!>1t$>k^ST^~>ID0n=sFw3wec#4AY;Ni9f z(TS;m49C!9d8OWb-yxXwoQZ6QNJVg08X)>(S4*Y1B=5Ug=BYLux-{RV zsAcoK>AK!4W%%+~!Ea4t)_kCTsHC=OTMz(J959e}3C$JG^iQ)ZKG5ETvjt((f6%^( zbb~C1bj`*zUDC=}016x%*~{J}@A`etwAwWJrfW0LsLnhvWOryKv3GR-8_3`=$TUHH zcWzhx;f(93rrN=~xeZzoUF$&9vm9@h9D{4v)GU#WG z>)&y+m`|$9y%ic_GQi>(ZhqPyehEF<767njF&pb-WRPqXZgSg>I=>5AuwY%Xh5N*j z!n`V$6%X^4HAC+l3Co(6J{g=TBc8n3Uv+?~69Ei<7S|E=odDLNFuU|r`xdXd`INNX zM)ck0vAWAAx~a=EoNyyo>9}*PPfr>vPbIdS|HxL_%R?B3WRFWHc9mlCMvZN$cl{>DkkmiW%gvv(|N`%C2*# z%SBjys1)Bjs9n)pxU9k1v>Rn<;ju)av~+IjKW3s)%4RI9!>3Nodn-y4Aq-k{_2CV$ z-B9`chxJk_S^5&ciyGdTBt5vLzBVK#VXT(nLPTA}DlnPr&R_k?-D>~bR4#rz@@n7;)z zItDpqUlxeqafWWvLQ6b33!8{n3`&m;YPq=>E1hN=3>kvL57;6q#~KOrk6{t>b%R$& z5sMWGU%O2o@!p<%bglYu5gwG>I5l>KR>bGDD|lN6SexvF~& zu`tIUIXT4e0O>zb%X@-x67w~8n56c1Y|T#X5^WtxKE#3$GnsVkMAO0nhkDELj6J); zF*pRQl5aFO<2Zj-Xr}4YxbP>MBf%}AfHDsg|B;SeS%_rNF6z)B%9csxJDJp1#xUKg zFb*&v=Im|iibO^n*p5}0xUvBDcs z_Z~S}jBNNFIi9p_36^5ArP|K`yS!B5B*C6KrcLTy#MMfmP5Eb?rg}e())k{9=+#9; z0%uLz;iL;@QpNLF3=EP}?r^W)ZIQv&NoQ-e&10<{FjSbU=e(&&TcJYAzg|cJr;NQ= zc$xX;ce9j1{@S-;1%c#;@(TbSb9Pa?^*GnZJ|+#Leff~xpYm=n&4x{KJ1!98oml*> zL~TzAEcBFqydZ$>I~G^sRQipm&c|=sM&499aVyx#5@ru2X=RHNYE7q0Dvt$i3xubq@>?@PO@@ z=`97KqspMwD<6VfemJ$Aj>hahy;an@gzkzp3DFj-d>GlpFkRw}?+f%pzYAT7=|1?# zCgd?c2$4X8I94`=_~4JlZ&`FBGs^;2b}JfP6{}j-PyPCEf&KxF`q(Nr{r!ynyeob! z25XI1EbdJ;wUo4=S)&z_H~pYx=EGCX(lRIhlm=YWQ<4rc{HXb3D!qg1&T~Y|~lEpg{yVR$6fA@Of=4m8-mu0c* zL7S}0LAe=jHpwC{z+H`JMln^u{_Dt94XeD@d>yfXcaDjDR5 z0->HOa`dc_5@`l$f}B%j$C&WIc0ixqXk6o;e0MgDObuNyhde{Qpdx0~)?m}_OMt4b z8i?DGBXCQCa6wJHuYbpvtKyA2F%hyz#^{Uy^(^I4Fd&#gv%MAbWu&U@Oq-XYqAsD~x(&=W7lD&4>cP1l3V^{x zRSDOQ+djB&U|nR82)c>Ew&el?cSFA47Z;zCGQn(`&oV23X_4R+ULo2gs|24+0lO_@w*;SVRs{#D zmFyV_Ul~!-spn?RP*D?u{898v23ltxyUHY(s>V=~RXam&nIZSu&?6RehcoUI|2ving_)>^UlcerBlvI z$C)cP{JJY0Z7oXd68*)))tlW^#euHut1k~j;r8R4r!%Bp;o6LnC{K|-sU$0=4ifWY zs{>@<$cZ8$v>^Zs2@qK>k;-!^ax`bTkkN7A=0mKUP;f#t5WFFiNXcPE{>HAE#-?U^ z&JwJDj>{D~#13bNrqGUr`=)|-cz`RbLk>rO$kdF;bjC|}#v*LRoqX*63*#-v17HvA zmr9RwHe;2-4G5dhCmmhm6oD2qTht3pS1oe)(l_kApdHmprFB9|v+FUWC6TSZ`bsvB zBBoBxcRMfz>(LPegZijGxwy2rgjUZX7$?6EpY!78CbSyJ2*aBWg>v(U8**%v8{zgn zed;O*ef-|(U=Frgr4v&j2SGf~)&cdA_uc#=VX3o_8##fgO`)Nq22_-^<>o(OsuG=w zMd?_?A1o&1S&y1m4M3%O&Kd}UildO4X1{z`@zXwU<%l3eb_LyQdVNfz$wx&OLbnk( zV&H54RiE`?T^RCJ_VR?$UXLQAUu^HCZ_u&xIG;8|e4M)S*=T2|gAs7mq~7kK8N~{7 z(Rg&vUX*Ya>FXc2CO*aAsLH-hNlPjl4fIC!a7{a9J3QE+-!N$S;mgrdfoxy4A(j_M zSiJ~vBm4QYo@icxv#kqY@g}Fw3JRUgk9b14UIb(`a9CGqzTM1lA@@n<6C2A_GJBe$PKN%fA&aajW40p-e)5ZJazzo5uKB~$hu#H|o@?Cgy=qe2Z_sD?R#epi43pz`0=|YXrOd^1gktA2A%TK(3KD85f zoROJn!G<7gF#Fn+u7?D{s;6+<(=DAtnsr%SVh-n@vc=K|#P1Bt4~Srv;GQFlqN-Kt zBcvHvj7CyIYM%GxkGjWF|*vfcWnmK-mXXcjpnXPzm!>mA;z2&2`o=U!sbQHDasX z{9V%Wx>NXz&Eye6%O7)*&1bcQKKU?LbkgmkF=M4|>cAO^qU?o$boKS3zJY6$$L^!M zu#VC6KgEKvfTs6M$k{h*n)u86J02`kgBTPRvSK&rPL4YpIDC!}*?&)4mD)LGwS8H^ zW^)W~W>POkDo_IeMl_bbBkYhSr1Xg{ge2j6KepogtnGtEdN-$??y$hsg_j2Xk&MDK3E*7{elYzha2Dve6>#0TxS? zpiMW;!ISkX-neNar4zCr5@%q%jxS#dBq|w=BS)Mq4($@TGw$8pCzVznbQ&TDdwn;h zUo88GxG4ld2H;2EqP>@KU1fFko(WfNpbDA1%gupS9qv7@QsXe;=ELX5<-Qn6-@$1J z;E7GH+|A=Sy3>4=8_(W@ zb7&{u@K^x~;9ezci3b~oW!Y!iG^AEat7{tDH6^hs3t&&{&x1rEr&Gv#iAR{dr4_xy z`i2}{Zy_-*Hdok_qq4m~kRQsfL7d(gp!y{i@(K4?sU{ z&*&VCigjMCB!+@_kHZisYj>aCJoWxE+KAB{XO}OKz>QBXLD83 zEr}cgM9_-EBvhOURae4{*mF%`=y0`y)(1?sI_F5awImdP`h(U~3V1quP*yEgp=QhG zUi}ZC)pCOVq#0A_jEBvbQ$7NypxP(TH6=^mGIava20sB~?B0)kb58=aW4dKYZNRc1 z>~^ZTnz+KYiXY8j=`~xu-&=0DLGlXiVp{or2mc1FjZ&&AofM1HSU5-OOSL(AG!I{> zEX^1^4P4+RI(7~r9{~_eunpX~hi5fk(gi|8wk9p~y8R!spYl|1s9BAbuBe%rT4Q;g zFC3|g*Gs6ZTDV1uZB8#)QS-EDwGYF0ioB&Y*;eQ=OGoCB=GT3-u&)PC*M%Dl?dnOb@GMVuN&r5gHc=BcnLR?yY*w4!Vv9fxo+N zxLMGt;tU9h-d>-mR6C`G*!E! zfqEr#Eads8*@~1v?5eO}|K9dZBIJ9CpD|iH(F(|O8Q&vk75SOst3{x~o|G6|)$bi? z3RB*NhiLxJk~X~lYQ{KZ)^az*B#l_uakbjC*@CA3dRoKzvG|SbrTe}H8BvJcRgzl0 zmN-i132MY0pWl*wY(%d16<5IV#KwMW0$oySA+54jcbrZ?d`zY0-YDf)LSzd(NNmm? zd0H6sMMK2g;>xK1?5>XN)c!NN2H<{qf;w%2RNfgmJA1IlehSN94}F_C+N*GvAAa|P zvi9xAC#O&(^ra@l5sP`CkwJW;2CURSE`hopX7@70E`6DTy(@loH>!E@yW2~?l3%2U zib-`%ue@A03adw9_YmbHi#!QK)>w0Nx?31_XJ2?hB6QOSJl%PGlWSBYd!Re|v}M98 zPA(JozUiV8bAZ87j!j_Mv|S-S?B+nwhE#>NJocGzqa>hCsQR-b!}R2b_=w=t5we7H`j08z>9_+^kTQdBO&-#n!1dT&uCgKXW| zJjS*>82zN4vP31bblmi0vk9o7_FYiYLCZ?+%SSNG^c zHqdwB37twaUC;+ReP3e+6HITBF&-b-EUojIpM-tA>p~gvzJ0mt#yC?E8b!TQ zFb?=zn2O)&uQGCBoXi9jAt|{qx$_C%dr_CjHTT1mpM9;mbe&4gP~s`?!8#?kK$p(N%oihavw=}DVi2#vNLSIyE=L) zW(Dl@v(mKbwYlYLpjm~Psbz)hiyHGoLUlxaa0qH3LhFYP8+5E#J3`_vgW>%P5l!Q*VvS?w$2U8fJZ z%l(zK*su4ycMy%31La$R8ad%qY`uUKX{PSzbEkx)eDtGF zS~nWs1nv%EQux}BTOOWLl2Un@4tcR1i$!iKVBn>CTz63TDX0eMJriAA;5hDK7K?vY z0x?c?nE|^@`)KPk2fSTuk9s@p*iF{aS{7_gQ+B*~y*2H&y1AJocYCC7TRH=mqBhLH zpy%<}juya!embuYkUdn`63FA#^V5Uj%EwY=B)eqnk8C+VZX*QuNTe~@@l;yI^`V3w zOlV>0JQ7mkDyC?BTj4ehK!9BJQoz4CRLVT7egKFNgI}9eW&hlqlg5Lp{1)G-*yIR! zs;FlKveRM;Xwx2KO?CPx+a_z%bDiX+2x#BGr}NEa_SQ#UVtblEW4QMZwiMjAV*Qz> z%xgp`9IMZ7z3NRDRjX46XLNq0T)acyjKO2?O8DaGsA%bj+MDG8p#eT^#;uhJ?{({V z=$3osrt92)4LxK3zPCBUh4OQacqPJ6fw7urzG6B<<+!>eccwlFga_CE;pjg_73qBN zWT~_tznjOHP+?#|M@+t@nF4$`E8Y`VfcZ&>Zhk+XIsbm3vu%69eK*CxOhJa1D0~Mb zEUZj{2Ed@#p21foC4bVj)S=3A+G*bX?0C`n>JfTr{M~wP=C3iQ+Dd$Mjw{xlCK+5rOKQTL|;=1clU5TJPs44Zej%xMrFslGbnzWL~ zI9cFww^X>ibIp;f*%X6{s`st^ZN~Kp)Nm{j3D>t0?^e~cQKK2^o&PzA*@k}BNkFnb; zA_a~nWrEa*Q>X3V7OewMtGd_RJ<=nJ?cs023EJ9K3#Tpb9#g*bM&5?D#`g&vXXRq~ zva6LQfG^;1rzUczP_TGg(l{h?f<@E}WJ5+!BLnLEN-pj4Z8gsTs)S}!)YBzNKUvH? z=l4FOF({8ufvhS~#V6}SdsZcO3V+L-F3%v)IR^n6rG$bgn z9N**wo!~#ODIzBO<`Fpox?Bl7He*mLp;H%IN%QW0?s=wH<`_k8wXr;S7zoH=Y-;Ee z>KrLKlX-d9)HhGgK0H`R{{#f9etX8fO1R}Ix~V3J;yRS%#`I!-XF`Y0im0WK7|%{7S7BC(v57RyLBClfNzH) zYVFC=UVO);>j|Z28ohh*2mJt#L#)|&gJblJ5~ut6x{S{hH~0gWX&IyxKhISnjzKN# zBPqR2!d6*6lt}MdXCSdQip_LBF6f;sUdrVjj^NlYd{L_WbjQ3qFktyZ%zM;p3}5`a zCP>DAC^&e_OV-Ll^U!3#!POiaAaQ;k)9&i%EkqgZz?#Gc{gTKO5QZ^V>q>MZ&G4`z zx0z4!Rfd$QlyoDpLdSU3|NGrJg$5+0$-4%ey66QB0u#be&A^flb^GGRr?iox&04v_ z=48?`M*Sd@Y{qA#U4c{%Zkv*rTa#gN4GPG`##Z(&=OY60$VBU+3_3T9xk)#RdrT1Z zxtgZGzN_`*=BTs^aBtQqDYN2sD@o3W)|B22T19SE>0)`at@TG?zMvT^6sc5i6-}q+ znL|!lp@5XQ&z7kF2GkrWh%-~VM()~82`hiu(|4ROf2xYnk}E}J=9h@}+YG|whb!-a z&LRc38-4KApP)7Kk}lU%=Mw63tRx_s0Z*{yNgaX~r{l=td|>BPjK*UB^OxCJ=)0?7 zxJt3qG64sC+beF>C`S#)rEWI);++{wkLWxl|Jy6hj_7hC8$<-HpR4C11_nfKs<5%n zs@rXO!q&6478|yYCu|bB59coA` zOjLO=7>Cq$=iZJr214YL<>2}~Z*D4t$tB=^Yw}&yZzQi4seZ(0VEV}ZwsYH=vXcUH z?TbG9&)JNAE0qJ8Q2@%lnicPT6d?JC3V`bm_L^(p+0x zqeP$xuAVBx3CAk;clk~h(TyI=xZx2!=s4)%KTcPB0~7{`0WR-F(h5ezR`jxI_^>ur zN4p);O9vSTFBB6t`(zhyaYKzbMDvQr5}FqB$!NhJHj@}WCd9h&K=-XCN7)G2_9hLd zSNn`Isn{Pf4W)47FxdgWEHVy~<5vD?CnL?lwOl4~f0}nRuQR%NeR&aJdh&(oM@gc4 zVy2{|?b12*3V?j)BgRqEbxMH*^_2bXTo%pWr7g(V|B0rrKM5XBLQP53iS|H(>!c&P zGBt9zu&b_xD%UA5D76E2#QN+)Z1f6>&_%IQt6B>CCgX{QGibUP*iRAW=kK1 z+9iKcO9gm{VoI5P_vn_gC(TPJqyXt<987;Nppz+`oWtGV(24eN$1q|CYJKss35)n) zOdlKy8+<^qKQP;1?5X~iTi;0K;v)vNW4Tan5Erdg9IXsfp+i!+fofp10BK_C<=W(& z^BHU0vN(~wn0kO-i*&J~!?CW#4sD+0d_MQk6dm))!F$5nNA_SS=frz$75(imv{vv3 z8hz~pN`lU?S~W)q89cu7xa@3Q)tg+D3FdF7CGQ&0-L<=cr8%o-!@e^3`Uc02JF@;R z5tfF9;yCIehh;U?7&lo%234l_SlHRzKe|?)xrJU_nGfQDYn!_R4D5!IvoD1ieaC_t z-j$0my&JKJCLuVS&03|`Mb&rRT3@dwU5{q@OISSg2>{M_ zcU~b|PEtgum%TJ2n%IBffSXEuOA+q1B5MoA4uY}Ky(T#hmhWzHZ8^ELiAD&gXCEEa z=0ZnLY8mKSxFv|}wWF~q@c7v}ql7!j<#}_eysD#PH|vNaw;LRO>S6sz@YPHaO17X& z2rk-RHKu)eb9q6kg?_W|%6b;b?=!g$Mc< z04x1trmKzqQNmBtCI)2YA!WLK;{IM_RAI^dGF+Kr$+qp4ZL{^-dvk za0lCCo?fAU8HLd($lYebY7(roRAX9;;*VkGs$hQ2yAQWNU4D-JDn^q%qKh$C0`ulw zzLEXzA)tHhZNsBehI7%IY$*rkvuRgPf6EJH>ix`;N<0pI)bPSWt58xP@6+zGds4CI zr{Dp;uVVZ2M)$`+ywLT~s)WORrmpE>d}hk95@DW0o{a z{V^9$JN1w%Oo(w;Ol!iVRq}!o;5tHhJ3Pb7>9`7LuUolbw%GfWPN2fd-Sf`Hw>(&N zJ(~h~J*4sH*#)h=>8KBBXr(lxNg{iEU8l26m2E5;z#ynMtDc5-)s8DUue!YdhGu;L z1(VbDh1bD1eilNyvzqM?`0I7?=llh?A)94Y>5+i<4&v6iaJs7iL7kq>B=9?o&dwT>y!+0 z6p61~&#_zQM{9Eehb_Z>zU_}^r&<&1GTGeq>f0C0QoAuo68NCIuJc<9Q->u($O7<42voNWEQ*%oPEDSc zY8jBOtFpE^ou$0%_xLs3t^o( zgri@%VH@Hgu$B{rtJ5*e8qYV|yn9bH{9Zdk!t8D{vjtzSK^32xewEz)%%eVA^>g|p zT6oc_!RhSR2WXtZvC9#-B+A3v48K!M=s9!)_A7^Cewz%o{`$OlWjl0(^Oxn41OAL)c8MDOu zm~cn^pNNc;I0N5zMwLT~U(DvQ#p@5Es!K8>AuVwnGjav@;8p!^VN6S}o#^(v^9Zvx za5<(t)}s}?ixU#>269kdagxF$h~&Cq?{D{rBn+26ra#g8QjjC2eHJ=oD$QmC(8VA6 zkx4HG-aF1NRBF)7rq>6ug)`JcS9=proObnj9<1L0Zvx%ZH45j62+y=}W-c9OA*a8& z8+afw*?@0&trM^0Kmf8JDeYdvuCj}!ooJ|!ye8k0uoir?9ekjh1Nx9M*XqqyJQ+-8 z-aBzSjJEXR1T|)fFxK-B)i0Sf%D&}!%a%6l_u@U4cX+M6xpp7UFY++T?q0w6tJl$i z>G6BhLQINY{>Qzn)z$U-V1{sif%uHMIz-YJPW6_R;?dj->zdvjOz+VSth1%t9oB1+ zS1WIC7iJ<2_Dlbr@a_WYsw&9V&zS;|vb)~Sg%Qd-{DIRp--XbFEdm1<*f$@(c-QwY zUon_NvfiRhUBDf4S9?#2Td%HDBW~AqjD#HutF4t?uiojR+PS_5s&Ax6tMT1WQ@(kT z^WR;R1Aw59hhk5>FaUr7WM@ zDvj5onUb&vMyfMKGDQ~xoN4YlxkQl??`fuo^8=N@l9`ecy$%e1^^L(1uElDHY?qWL z4fKZ9Wdynfmv#*1iQrz4{4-N=6Y$i+>n4$gXkr#On}TD#mZ&u$urU!Zo2-AcU^-%Z zK%Q47N5=mZmS(p3L?`mjlzi+kimP0CSf*2_w}Dmy%jVaHG59VQG6LC#KEAu8Q&o|M zHQ9R}OrxnGIdMZKsqaj~T*k@OH6K{)XVdkEix1=?dK_oknUm>US&bFTwjU4Y=9)8Q zK77S86a%(MlId0Ix8bU;C#6k6TijzA2q6jK?5Qd$hK#D0&vd97m2j%+k|{uI-eZ+? zanxzM;7?*A)yx{LcXZdk?$F9PzF#<*YcX6+-gAG1vMT#LKlM|Db%wqU*<`)<@@#t4 z_EaEV{VPj$ieKoce5~)qy?$E3kCz^jk{RhtHkC1>5XA5%1_h5@tiG{S9L>ArU)Waz z>VqW>c-h|y+3^q9-k{H>xL)US02lPA<86;D_}^oDdI}6ZdC|yA0#y3=dd4GIW$}p* zX)Ah6n3}V_$s*ZU>!x5Eu5CV-uhd*2HEDY2Pc`^H0r%fBU^3NZ2D5^ozvJx%XZJ+x zuC$MyDDZ4Nzp&KGV&#wA>FH<$M)_QIKkYYHbCP#%dty?4uJ9%rZRJ;a$|a=jKo;cj>O~n8U#T?oWrL$pP#qAJ$$wnZUz8k$^Ghzo?RErnyM^*y4Yo4+5jKpn5xnED87gok8$+d*)Sl8d19^? zK!aP9JlF~hJ~n+$U1{RKyR8)Gd*BCprCsK-mGL6f*YIbD&Sr}E+@ocI9zU(FEIaoB z3sN4ccbj&6IEVmvk-!c`kknZvhQ0S=PGA;bqDRZ2G`!I=niX&TgLs@!<@mm^|^m;q?UbYR>`E=aEhUZ^7NQ zhk@{MpJs|>*wYbnE%{kX8`5v$rVF`;MaoH8;A#xL(7RG38>n(NT~GU=?;7TQUi03C z`hnM~qRWEgh45!s6~1OJ!f)?G#y?gC+5DN{4gx*nb{f5qKbSRLyrv0{qbW;nh;+G; zZ?X02>2V>%Y{rpJcmZ$JVm7pdW!LaPfE_#Cy@HXF6MX}s^rOjc!)YnOt5obv$$4F135T$j;5cQ{d|lE7HDg2v~l@>6#A{9oBQPs<#~ z@fv6Mt|w+X6leES8nPk^93s*TR${U`RRz|J|cyxIGD!T7SP8vycSoh(DG<5atUfKs{l&_we%*glLq$97kcPs1-O zQhw!)M6!FDR;>pBTzz2NmhBNLK7_{+-By_6H#qDJX6-WQOpo1enh$lzI3T}FMBFdz z(ewxvWX?ChZx#ZWqoSm6{Tg~x1^^Ls`k%MdxB&u%-272JV?|r@zjQG_EaEhzAIfEA zS}fBG?Yt5L9+=tqWlkpN8?!t^W6P-gF02WqPM9$zn@b5)?VgD0Pp4i=W~?}zfh)aX zuA^O|`f9lIm1aw6#AudYlXMjHdpdO11O!>`mH zKt@Y@IiG!Yzima7-*7H{)zqrUv-YoD$Xt) z@DAZMjv5KjN+fW$ZPCNlQ=_2>fJ}-B*PE;H!VL16g%NphikrnxAu>hdJZpH%(djPcr@620(|V7-H>8wV`zY28f7 zU2k^!r2H)JHbzE}tLd3Qbb-Kj|U&H++ar4*Z_dguNr&sW8= zuGh8?9f_9k6D)8aH_q=~$v4VCDY(~!+7YPVF|p#yKQN5KcjGJ1q(cm0h0Ey+8ohHH zw#b(9@vX8OUJ^=SMB1{#0?18pv>D~N>GYWMmJUaA0G{uGC7tZ2{y zK(|am(X1v_c?z)M9rF|UXUm?qzVv=LHKXAxGIBFcu&~=LcWQKd%0$(?8?&CQuW-A% zsVp=*w2s~_%*m5eoM|hUX$!vX%`i{qrulqha)6!}yVQp4QD6C;w57qMdK-v=?Eom5 z5V}}1dfsGOnZM+9?S)4qYJ&Uz;3D*0J7$x^hl1fi$nwrp ziBIe7?lTj3N@YE7HaT2{!#v*iUDM*#D){to3zVk&xF`P3;a+q$76!=1s)T3>AF_qC z+X6fY6*I+0vO#{ZIFag!TqOgyJK%1aZpw0|tbGze&u?G#Zvtn)?V7W$dXlY_kIa($ zFD3AsU7HBO`As4ET-Cz#Tv3rKP`cl)T1A$E%G1pifq7a#4*V4(2V$FCWPSNNqRzw7 zC?VxteMwui&>t#~runE=_a3LYAXg*-10DTQYPi0M3(oy76uq{m^k$b1wDJTU=7SaY z*=+Q^%7U{5EpMK6XN3vsa4UP2O!pP_MdZ*nLKyn+bmeM>m)lXIqd2+Zsghq-*X-Lr?=EajJ z-7K#+q>3zY{nBUB>v%Trt3G(fBshy#IZ5xdGfB;QEzCH2_*k5EcL=&?NCG@aw`i8m zSW#PpU9CzT>@nZb&O7q#C`V5`FVTQ3xCfV?K#j=|Sa0=5T29;J+||ty(S{U1bx4D5 zotB4nr9~Lnq%~6#)LKxA@nYvr*UY_bMKk)@)tTw-n^t;>uG`KY*P5~W+znjR#`ge$ zuekiUX0ti%bS9y4U6L-1sjyxM@Cs_WYkQ4k7hkZ`H%jLejRK{%hZge` z`cPOOUc@wOEum-JL_Z;q-bVH2lzpG=oFIoERdYZ$@ld~9I?>%6846qTK zVF`2B#&N6?QlB&iNgPPp`BbR;LW5}+>k1-}>U|{QzJ$2^RmZcID1dzC#>v{jcxuJ6 z>a)lA$tKO>O0a*a2DMgp6yYEye?*G2**?5Xt%(ZXV3W!gM6bXfO*$&y1JP#I)LL}+ z+{C_1jm!X$Jvz0oEZlO-q@#bq{7$}BvP!;L5IF*$5s#C?GJAby^WJG}lQi-jOC3&11 zZ+u-@-5i*qW5bz#b5!BVKapk8ygVmWN%JhtfSGTOmgwhlJKS@WC&FYrGZHsBNeNBE zU+b%0#naesQ}9@`xZ{Tj*^i~xWtO-L<1%a+5S)GVeRxuXbJA5iOD<_Z0Iw8gndzRt zWQ|GA$mZQzG&K6y%{fgzxS!C zH}>`q6U{2868i`%a@>;mEUN1^EBo2EtS3>6hxFYW_~zCQry#?orN`jsAaJ`JhH06F z!2CHzT{t>>1HO#L`pmD}Bqg%3ZY%}(JI;BuJs6s@%DzwTF{)!Na(uza?cYK#Bc(IT z`O+ChUQ&xNhx1~aMji9TytB~;eNB5EXntp?FLh_NaR^;(76G28C($g-$|r!}s4p1z z&OfY3>sQPO&0W^NmC5{c*FP?%zLY>F`jMzn@_;r?OsriQ4AfZT$y>a|z~rH^Q!^>1 z&#cJvbo(S-5who(P;b;j84&(j3*BZDWQSa~h=}BHW3|n!!(Pce@O8+jKDlPyNKcP% zP7N1EU8xsslwfg|l~j zPU!v2hylQs@!d=-7GW)p-ehYy!{t3rdSqk7bM#RI8%Mp2dCHR4euBngT@SCu*2BF; zS*Lb?ZTFaU#Qm7o8;t~i9F`SEqKyo@ASs5(nS(KFb_Wb-S_uDoqiU$0z%VSuwliN} z38D(;w9<%IRgatJ%Xl)*wBrMRMX@*>9YEzx7WQ=|HXC3CDNh0X4zrXXFG|g*ILVe; z_W7Ch!N=?pCwR}YFvi=O!;o7zy#n2g?`-eHIZ3aXqFXD80AT{}#TV2S)~bG zO)&B3y%|mPLqazIIB;=4`~#VGkbo#X1n=28R1b6sYpuhCm*+{Y*-=CPX=C0s$!OCN z2yz{E@LK*P>v4-yqIxrNAftVQgu_p0CzG3^htQcKFLJhyKssLQ?@i_{3kmlc$iZ0N zunTFenR0ViNJc?Bq2u{cqkO#*i%&w&5L7WUY@EH7`e#i^$N1X z^KVzmR6g({&N+>o5!PhoI53g!s0z*v3M!8ykY^|9dF$>aB~jWvY+@@``vc0nd5J-9 z6xz7N3Gs)KJs)h@VwtaSc-elm#2RQ{av5wg?KV{MYDJ5|kctgB0t|^WDbxSz1)%IZ z>Di%+XC_Zb`}qD>ORe?DG-m_jROC<4OmU7S&f~o2r${$K0ODyBr-^_gM8_CVg`xFg zK{nrwH6`w+oCl;YP)B>*)7=o<#E0kQ=|UEfS=%7JbB7n2a!pQ9kJM)sgxoAG)^>oA zm!(mE`h*i4{dseEo=6g)WHFWIg(S_90c_BG);hhB{Xu~1Pw1Owuu&_F?5=)iTc^6Q zXcnp;hoaQmN`i~JvrBSG&Tt7_)@gZ9?+v8HKo!@=wHomKj^ZLXOY1&b#LEA2wmq(2 z=^h7MxMtj28BckfFjTSg(rCtWA_#KLj#nByz@^w*pmek!jz62q$71TQK=pGW*sSX? z?hYKoaMSc4D_sv!D*$@TTyGmxjfh9WhYA(5Li^hO{&s?%iNzXewQ2CIY#ndR5Y$ZWw z_OI;VX5i#R(rYpCAP|2z_G=Q`z5%fS1B^fJgqA{EWwqMiPJQBCsYs|t)))mFV5Uid z$@vFa#Gt)c8Rm<|hK!+>zzN$o#CQk4o11Bf9{vZ}V4eKDWXFN!SX-V}pYK-hBvZR2 zKg}odNb<9qUa>eJA84`TQ$;GRX0pz`ywuf4P~LQuVY}3p4fQL#oXD!|19&QVv6IE{ z?yG$&AIw8XsUmqy7FP4ob8MOtc|E5hXAdZL_&M5d2=$|TXGg0f2frsr2Ww?}RyH;z zD@6rWvF};3aGQM3B0WFZ^p+*X*U5vo8iSiO?b^R_t~hKGeQO7ywoq^5xjvN2(${x3 z!Q8tTyWPq^$pxhu{+SFpU3o+bp?^m~A?RMc>C_=@}f2;fEy`pYqTC2arY6`PVl|KqWQ zSNUz0RM)pxpDzMGYpB}MADOG31?#6!`V#LOm)=Z8i#*b7pdN1qE__fGtc7-;=Op&c zevF26{)q6El>tI-b90=Uf5ytn9z@D(5a89+&y|`CxHc}qn1*H2hp)Eo(-aI2Yo1Uo?EpR zUOG+*Pc^J6O?vO(w}dY5?4o#8FD9Ci(n*--W^qF|L%MQncJM<>ZDsmRTDK(%eqEfW zJmELZWZWZBm#H8tA{h_5{)~OfFhTQ;?K1cjI2&uMH|hyIa*-EvupYr_k}v(dJ7Pl9 zF-E7Qn=e>^sW=-AE{FCkM6UiwVjYWsMV{3kbO3*Oh$!7emp^(Oplf&Y6c@>Ipe2M$ z{6Ug*bVh^hN6Gjcb$-0vC;Aw#aoDaw*^`lGVQn{6R*@_j#n(p=0WlPlx zZn3_4GYNp;ygk{IGkf8yVQe8)XRA8J4i-l~w_ zO5%Im7j@|m6^<4|Pkj?=M&~$1x6DWwnBN~uC)#1Hwbxh7(a!qK6;}7fJLDA?UZnNC zSJqb*HhBY*SH0+XYF&-V+ct~ClHv*%7=?}E)m&f-#E`;vcs<=c_bHgRHCG!+@Krxa zFOzAuq3%D9g6rT;4Bp+s;2PyYL`oZc21c*%?BWZL*k9-Tu)Q_e*6O~s3MLFx*cPzd zy`cU_m@<8K`SHVCED$f7RxhekqQ*?sSgqx)%@)@5;)|_2o5mu0g~(0$rEkjjbpTIu zRxuF{hVKjxlyT-UiDjUko}Z_65S-I8 z21uZxP>2sXZ=i)m1S4Co*IUK<26;lMnSX={OhQ{Q<^)}7QX8wn}N<`x;p{UfZI2&$CDI{D$zmAv>WkIY(?i=W>L_U&m#eK=6#%t@YB1VA{}c2Vg!UQf>k`1C z?}pn?aJyO3%23Hej#=HuV=|DPHELEiW^Rs0uAypLa8ZvJZF?j4B9-Lr^=NelLxI37ASN> zX>=OOGbj$|rp*!7vE$pTMWVavS8ldE{s9qXfu9FPcxjcv^|S{*ual@}N^^~x%+ks( zrus(mL_+Xy7#b6xrY>Rsg}vU}3gN88i`++OCbQqGq<8SgD4W^1+MiSeSScZOd!?$L zKF1fy3lVsB_hAC@JG?0c-@*rEyrH=eIiaCyfhvLba3pK%qvxW#gpzoJ>Yi2iu{qJo2_t^hp&VLQ|?uI#b zt*cw{4@Uo!3rZnB@EPql_ALKg-2V&J|H*9*FSKT?LDoV<_u|9Clq0CO>RZWgx`zJ?p}!~o8$$n!4~Aks?v^a{f65UY1lYH| z4N0f^H%<7vdA6zA!=5gtKI{G|M`%!BnL?m&sQewpeGN+GXWsXnOnCiyINTH((|A~N!6QEwc zX$VtsnI$DPypHu0Re>U&!;gK?Jp#360QV>6Hcb}e6iL?@b?t=r7-XYve`;&&V3-?( z)~Wy0mc`(}mhfW>hv7dh_FsD0E)F&|c1qnpRik1`uwrW@@NO3Tp<>U0O>-3{u8x|*zx57(ZMFX#U=3!-?t6#YA1>HG3=Qmy#QItE|4=9VA_WUd`T)uWVM$Mx zMr_vd-~Skl0<7Y&gN0un%TD_u@K1fxDzQX_gq4{#OU}1YJ~N2^e=0(>kjl7nx_xJG z3yy7m9SiCUtLf5$b={<^cU2lbO|SCUB!7aQf4I8fbq~PXGRMUS%#v7^HF#aop`k*e zqEI7hkzH!YbYhoyM23MrVlNKZ9DhVonqDzaob%y&FNFM_0rGzMC%1(fhu*kKV!h3x zKBwajA~Q2HH8&kukMF~k1-^g}J~T8m*~uWm->T!kfdYgtj@nMvbHTBkDc?UNF{?MY zW=3d2gitrMx3}*b9_}ttDN@wb3_-x6PY{wtjQcZ*(!2OmtCbS-^5R=^J}d5p0z5Uq zANBB!!!stJTsxh|{}~lZlw!eYLCCf9Kh(Up@K6e1Z}F?vRPqm>@b?2pQ$&m;kpENT z|6X|iJHdZNyMMRs{I7`qS4960^ZQ>z`#W>_FJ<}vqlj`m&c0EDV%`&Rg=H-1{yt%Y zMXyT<3c*1KZ(jZ~iaFAW)Wur0Fb6$dIY!?fgisCn2|tL#2>UamQ-*^cnPq4p|4Mms zmZ02-3~Z+&LjLLezbe5ch;enkYr$L>csH}TyUMKO^l~J&-5n3E>kJqWms>jPDiuNd z%>JY~0XYcXQ?$!O{9m=^zOx#cy>fa=N>TC8cw$v~M*QDC7Ah zA}UJQy3M0lDG#O;Tq0W!k^LQk`iJYSO_iu{dTqhVXAT56&)Y8U3@B$Z|HW2_VAabB z&8PE-gn#Xc{yFeRPD#B}F|p0KtY7>V>MV0D)qoXD#eIlJahP}Zi!R4cfP=A@IG444 z16_zGJpE`V|wZs~MM6g8@Yf^wZSV_YBOZ>)6JI`$noU0Y$X zMlym+hq65ftuW}7D}0_GR7SG+!kJ8ZRNaijWc*46xm|eQm7={~>%EIsB=y> zqh;J9O1q-%=9LdsbAx)f!L>ptg|(1YaaB2_f?PxjcwO4xi=bUKJsTm#-bQ?tGzd^& z0R@zH0ahp>)Jg~W;Ou0+-I6hVg4f-EpjIfsRU;@Be*Ln-G*zw-DOGJlqgpV*n$4dT zUnW$Nb(isvy*tMk>Pi@zPvM3F~0Zr|BPMR@s(WuV30%-}plQdO=bRhnu{>q#G?+v(|BF8DQGZ z=Fjs+j%D`3Tg6l30Bc#SVsE=ETFW4Qb7cjBhI05M&vHu*+6o+5cCMMekw z5xxHy3hdS?KkJBJ$zQP!G0NL#{;alhNTsdnzaZQDJ=up$1_!9lhmV=@*%hAM78@amb>7fs+a|;&#v?v!Geb zKZ*KFf6Q5Zx0jvxX<~`5hXyIp~6V~!&~sfC%7EZ>}>KwIC8)TV40|&4DM9>? zWx$*xDB=7f>-kJ#k>9R(4O}SV_l5fl@Bi9;{(XBQq05a}f4?4Ia$LNDciy6u)`Vf3myN{uF8!Kt|@#yNBE~~!e5JeSn~fv4IoiR@N@tGelJvO zbU-EOuZRg7>lK7?pZi2wlJhf@Hz|^Z`lPfDRi{B5x}XEsMtw(rD>KnKP|!L&DJ1fz z?XEH`+!j$+P4sIdU9W!t-h;8=Z4yZWCwU;)Dl!F0YFuRaBfioRMOiJQDKVGH1-kdm zd80(hDSer5hWjXu1sDBqIs00=pb<$;ZLJcqr-Y~|2{k!9>a=NY3Ug@dvuA8#(KiNB z)%c{4@Npu`DQi`I6i;MJg~S+!H|N7Y2Dk_OI*=P_<3QtnPlFe0<#IGtU#^kc z&1}9dw)3D8sU%f5b?n#;n4ykk)COCJOabPzq#c$ZB}?>Xm3ozbqK}% zFvy0qz_0K6}z*y^}>ld0h?tnalH@U6mahJ90A$n zWbt%8#vufVqwsX@(SJnkMlIXBNhMM>nHtf{uN#S~5qLA~10AmR?hD*0z1z zv8I|4|6H$`I7=(6BB7eumx7S!F2{ynx9V}V@es(7(Nh0Q0&j;nHnIY-Io!Mu@x_*b z5I+m$E^r|}pne*;6xxSenp<=qiGD}XA!;RaYo9xWHt>)J? z(qb;FEN`45GMhT$HhTG!YJRvVo#~S+g@}>DY)p4Xbs9^6f~QF^)ZUlmzE_QaSrc^=VMh5e`5WlL3P@m1NuN+b@Qt*~)LP)I3SVW7&_T-ZSKXcLK( zTQ~Dv>-_nEtcga32XXG3-oT_gA?gdP#iL#|Gtx1RN&y%S>jU^F4scwspws+a$L5I_iDF0)&FT#tjUSgpHFstG)`z70wN#X-x=RjaM ze&THRQ6YQX3I7|&mO7yVf0}hKUUnIpEbSU)$4V7~Qo?fCA-<3FK4RYUf*zFI(~5mM`(@ zenG2={yfvAog~ezF*uSuC2aBfaU zZy(H4MK#<|F0;H*Ce`~`O3b)}jym@zP+Xx`ya@N$9{_I7qF8xn6E#+_^rqgm5Edi7 zM|14Tp;OJw{CMCC!)NC6z+Eu3aIB>lps9))iTRGhY2st#*ZgWf3dmc&3|w*8NT)N@ zdT3uM7(|_WXA767JyFPz1~Ig;8OQ8yo6C+4mj3!a>+P-JS8uK+IGn+UzCaB=$ht-|(lQyI5@m zik(kblC4wfVVsjdR5a%MzE~rqgN-simcbn7ihL?&RV??Y%DF_SD=7U)4+9{5$wdK3 zQWju+#uCnDfB#b|vwRtu1O1!Q+Xg0#{%&y~)TOJjby)yQ;0!v|)W~o%eZolT#VcJv zkj-{kG(AEC^|aDrufgp}UHIAO7h>L(mc(cY)tcoYAajJbr0LfkRx0_rBcOc6?uQt` z84Wwb4!p{w@#Un!vH25{9rKN8xcJC{iK&?h(hg>BVNMS|W*8Mhmzxne-0wP-35wL4 zw`v1P_p|dE>Y1?E+X0OA|m!qbxKnY$vO!+B38J z*&atbHV@oBNuhoU_b#bjLxO(=DUJEyfR68(WsV{{ISOt$*f14&y)ylt;);irV37Q} z94hfX@a_T-e_ndY#N(2n8dBdp5L~-OzXBa)vdp{9Me(rXLxPw-yuM!8L&Cl|TxOgJ+740IW1@$1a}GDLI>5HTR~O%B={-Gv zT(=wO*qr_L;=P~kLjbGm@|YBP%qh^)mq*8?Vzs$zgqbVBEz`eJbXom(#?>9}wZG`}Y>?W$EEc6Gc2V6#rdXx3DK-s4$(3K4$=*Wn^L zD1+pl>KnIs*SshD^DwAfshSOUdPAD)rLDvISDy-FtMxU(_Ll z9%7F)!F~8lI;@3LQNMIK+Ysv!f9-$zgDUFvs!j}r6jCb&>fANEzRo5wy6 zGH^O=AdU=(HCv?Lgs_1a?pm#1*${%Gwl*S;6x%$Irhv4Vk+>Y9HqovR8Db~nt2ugy zorlEgK`jFDj@T{8_#LS%HR@53Hn_o<*Ct^FL(kV(_?!uJ=lvwzJ?2Q_Je@2}eNSWv zP50Cl(@LbxsM@;v40jk$7g2{5cw3ozp0%iisDXPaUp_e<>_76H!4vcr*{p_t3xO4t z5F=qPghsQKq-8?9CImX;`G~4#MbI)hPbyuf5x*Rina#Br>z`z~qFB5x2V}NHmniL+ zNfLwt%pl@;^aC}YSH=eRSK|UeCx>!#>6!1;v{XP+_-KHnDpG{l^G)@w+@LNUyikq0 zpG%y3v6>@P)c8th;)_;W%b!n9h2q_q9T2K6DW12X(K?cds@YUln0)HrpdxLeQ0&In z3E)9D2^a)xM~R$kjfwp zGH~#n&-OKOf-Zk9zpGOuHO*+LY*>l7^C0wvU2wTJn2E-Vxp~&#>c_&sBR!R|_GUxV znHBj}-8PqIuRQS;M#=snlj9tb^sq=y@{vUE#b^2}y0NlCsuLQzBfv(g2(W9JAI6eP zbw(;4p&N4T_|7AWeqH9}sG;Hr+ow2Vu>+_JYxT^G{3!`$zMr>ik zBqW4Z(8U%i&hFqFRJ4Y6apMHpX$*%+2AqVKF&>vX^6YtPg8%`~dkpT^D739pO6=5B zw)Zwt7nv1t`jqj-P;>?kPu`z@#fvP4{KFKjGdyn_?=UX3%rLAl-o7Gcrp*BARoMwj zS;@A^I4n;dIE@v^F8y&Bdk^4e74_KUd(s(i((UY#ny$vO<~2-rf)cLLhAv0A=R(?D zy(k2%jLxaU>|c=&mJv4ic1Sgp1S&IpX5IkTWB(N2VQ)#sgBZ(PD_sL!&cbMhE%iqV z3l|+yd)-L5<5O{mpRDl39~<87hAXcyj_iA*y^(Z=Z0;MOPz#+!bt`z61Y;s-pKtI_n6nq6L4l zKOE2SehZw+!Ybuzs278An*G*lialp1XS0D9wZ}9(2lxW4sAa0v=SG({u+u@{`rNxR z%gCea4Qh+g>|{a{{dKQv&3DCA_;m3dHHm%Gh43KR?6x7M{FS}q(=ZnPs-w%Vw_Z)B zY(q3Vx3No3*g-SN7Zy^%Nu&MM^X50C$9)b%oO?-_Dgz1QeAgRwr&Wqi3K=8qM?~g1 z?F1_~cE3I-h72#vtBayVmKT2fh&;?$p#1CNJ(4-~;ZNbw&+SEzd@9~Id+M#vE0(=M zH2;UFuZ(IdY__gZTBIpZ+=@FX?p6x4xD$RS0o}*%gr0xp-70?8O#3I{RRLX^T?1k@FfLgFkvD&56 zYcYhVK9nRZ`?N#2UFs$J^ukuY67LZhESitUVe&jjE1EyjpL zm*B@5w&$A&fv?<}$l-vC5IoAhazn~`0Rwi2m)V0t2?!$m45324UL(*~&~_*t5rBYo@AUof3Z}_EkhHeGDm(_YT8oz3f82s}O(IDi-PwUf=fp4n@U@;%MOFIP?F zzTKP}=%hh)l9Xm;t`s~UO_@PY!(g~KS}NMdDb_^p+4hIt%aD3%9-)_W^jx%I&}a=t zK9z+dL(3QTqt>tV$P>x#6;j|K(dkT3!0C=xOQJiuVhiM&?|@j7N|chRG9=57VHwhS z2pwXhd(KwoV_A|75O?TeS43@IT_szDK zksUb-18-<-O>2Db-qUn_Hzq6qc5mEYLxP!NW@y;Wz3O?{65E~IV7mVTX2kH$(xL%5 zE?88@YMuJhkgRM9-~VzNe*Z<=G4Px>llw$tk*1jCoI9wXZv1*>N#nVAk5*Bzy&V2e3F?>Pa%C=G@cb%J*~rbe1UM zCL=m87`!ZZ{E_kdLjJB`J54qFIRT(+#)Go8Q|Tse_^bAgmQxoY{P<21@b6~EODV@; zGU340LD0hIwCQqXCeC5<(#daW@Vb3tRVryRGU0+4Zs{r#n7F@hG-8XmRHq;qb$$|P z4=kcvZjH_=BC3XTxX2|Lz!k-8OM$+sO?#;qH8%eOQaAOOZ|)?s%?I8&h>RXkv1YSQ zUM%|`cdlBe1^Oy;+>A(=ZdQ>TG%C)g85`|<*`7H6Xe7NTXEU$51& znsU-3w@PB6^9S^+CbS#|f(&fjnYcQTpu}L9H0v;qKyoSN#SJL3C{wO8orZmHyCDmq40L`r=6N{;1IDN znvHK6>a~jK{V}$}69g5}_?rDI3lZF7Vz0pT+E-*=;|G!Y+T#9`cu6w>F~fgd|9#6^ zuIll-))6GF!X8%ieT$H<@@{{nrs&USY3Wxch`o}u}4ojQN&Um*jj>wWh{H<{WfLW z{G7)|1-IbspeotFo8|DF3+rvzdI~ri#+$;@OFS&Or3hRx%sTL>iAg#w%QJw_xW>_NxyqeJR#32Z`u2!^SJy#)Ry|kKQjx)*Pu<#TUvqlsW*jj|GR8 zKPyA_kgH5V==xk3HD?_{jU!CkTFnnvQoFtqVEp+7kH^{042K8Yf*YsW5GQ5ou7Jl*cOm_vyE`l5Ot0;^8lHW%`GCG35 zc8K?^ZFT_-*)D6!sc`knz1{fB52f!ZowyXow4=JqIK}9nm#Rh=Y8F-BGvUR!wT;A~ zoV9P4ognQmbODOe2^P@}CF`73ufJ+iwW=r5u~EFS^ONC1?fewq=!6QEZcv7&r55jd zJE_^ANU>5#-7h`Mw|hxP{U(khccEW3GT=NJX$$3_##UzQ);_S)cs}!@I>C6d%UqFr zBxRS%-g|RMwBD-54C~P2T2P?0WlH7FDW|iIqIpmMJbe=8-z=;sr8ja#aAM%^s~Tpw z+Tfhc?OSr6?USSV|@V?sv=aYbd-o z>vd%J#wt%}yzEW;s+O$_Qxg60!xD!zT_=XY&B9HBWydZa*vS9Bqgdc=NTHDdv)x|h zBMUBd7U}o2pzmAWEcO3xWDOZ76WMmtra4HoT7JIS*fsbbqX@sce@elBM~m;WefQfB z4Q4u=*Uf}kXmAvdXZqfheso5wqBOGAGq!P=U`^JfA{)=xwqYfw!wy|Bx>Fi?$dK(owR!gc*+humoiYY>%ca(5LdgJDtw!yVsjJYpT!gLRU)*B+Jb>M$bqI zcn~>oyhW52OFdp)^BcmQ0SlldvgmtWQ-Roh73WtIp7>Q1Zo{Zwwo3*~DAC4)m#h&D z0^~UwR{MHmT!m-3=zBWs=BQowv{VXb2hr=Rrw01%oE#(1CJcFIt~7h2dSlE4i1h)5 z*DvqC zFaSu1me0n^`pnd&tFI^+*y%R*w)h@OZNgq;=bfy_m7H$hq&*Dnwce-b>{Ed z&TrORZ*_yk6jXfPv<6-w-hWnhi(|G{)c7sJpXiF!Iv7o*`yiAaWD8;Kjo?Zl!QZO9 zca^EQ2PnVb&`jk!b>TXr;C|zNeH;_$RW>}XZKG>f)@MIYEJ;Be1ly*NIePgpwVW8r z1Cfn!gAdQtnYxHyQLCSd*P2(pdE>0NB(wPp%`KuuShco+29L4TUX4v#ufve4PDBo zKm6o!a(j-DKDU}Ft7?ROp?2sIM{SiE1|9)l?Xl_nB363Gefq{GNw#wLUcc3B*?Ur# z1y-ne(9kv6-3}-+b%?+Fho9Pr_~R@^(aF8Q|Lu58J3?b)<+>bphdxO&<+2z_w;n>m zacYqz;{G0r{5C0`l@b3m{z&8E*uGOqmgPVG9bK5^oYSoL1FxXQcs-Bq)~8!u*i5vT z?P+fT*Yk?97R2piE$y3Eaj&{xasP_{Q>UfP`Xao9RfkR^aK18J<9&+B8oZ-HtFlS9 zR;S{oK9ArZb10ZqBUvMvIjoN9wG^((i?1*CeD_!H_c~hbzZn?d)}2#g!`HPZkrrp| zLe3Vggj^|}T|3%?N`2(b>*2yGUxK3&yDQ-v(Z}Y6J^yU}nDbV(>}#w#UZ)uYol;m{ zGIinHXV_(hvNxgD_sjD_vRn30VjHk0M?uqKs%%|lA`GqDWyAc$Thr=Ca*7;w7FbAM zY9KBK(@SB>j%~HAn2u|Xb|&aZPqSf<{Qz20c0^9C9|-kL}?G6}RC0{jNcfgOQ^(AGu5Grlfgss~G=XVD@m+=d?}VtNHOeGoOURA>F-Wu%wQ+SLVPQqE-kP9sysFgV&&8 zLKNNb=syUJC8N4ehH76fVV{ggEgycB@VgW3+MX}pBrQt0I*YB1 z&e#FFDDVF{|8_0*IgidK!M)K3Q;a}h{`r`W?($@1;%f;lN-P)qn9ew0Oi8)}gnkNNh> zd`)Ke{p-1wv$8eHs4W1kV3X!Ge8$wUvUW(TUvt!zd+DZp#MGqrVqW>A;4yosMoGOs z-!#WB9Yu6jGx(k-e!<{#XVL~rwYY4gTH~SobA9k5qFHniw^e>1{Lw&yq}-t&y)GW~ z8}&ezpNtYcSqSg%z#jI*up7Amkq>E{){*;clBV8|6Xrs`^2sMCw$wnSVB6o7c7N7pEXwrzwCjc0`@TojX-I0M&E8LZai-r z<1YUQW7Q?WbgDajUn=?W63V&X9&0SzYUPky4LEakjLkz=6ZDZ$L1OpBQb^I6tS9Xt|h#471BK93u88lrzC>)0r>(UwUIG))2lmoj`enB$X%ke>C4ueN=W@Ak-+OKk3^@V> zY4fB<={#I>0v=m-3n!}bcd5-glt%Qu+5(DvW8 z_}lG8_zcFn-z(j4Dbh=4nRacoTYfSjn-?q5R%i zK0NGSA*@^l0j?xKDrhsP_6wx=P1m~6jwAC`Ba;a1R#z#{uV#4si2FGvK(T*gw8)d% zHZ7QsFEc{8G(rHRgbOwz*Q+JUkehU~)Uz{aWt2sF+E?^s<-d!Aw_&k}e!3VIa+8Jp zSfZAc8DT$L5WXg0e{+VK>Vk@24X3fL%x8E+z^+zE|A_&0kCeXX|Fg`|4+P&UqM!Pp zXjKdsLmjGg3pQ{jaU?jUSHqXwb2i1SeWAex%iOzdHuIRBub>`#Y&&Q%pGzvn&zCvy z^j<}cfgzHyLAOeE*zwwQyvH|2A>QWNc?|iIEmuSJ!Pv zuI_R3?fYZMSAt(qU5{Upu8}FV(SPK%sDuJfT~}-0ui-97{{AthDes4wa)q57yK`-C zU%1_4Y$2TYOsQ-0nrpgk=dK%6iF8X=0*-^N~;FRA7%>b?%+!be7Wz4 zWC&w3^OXz_RSwanM*_u40%L-wSR+&;t9FRd;-^ZvYXeq9yiHe`C_Mp}`><}hplQ|c z;0K`s{bDoDxs5m_1c9r^Z?jy3iAt@D*vR8H0=JKiZx*Ed$deq?b)T#)#zu-emGWfv zhl%*+8uafL&yyP5+qSoSzZVM^@m$%*U-!J?S|EuZh@!7^Tb#>hKKwF}UstC8xTwmpA`)A9y>{cISRq3DBpeJoA%eu%p_k7gh1Y3?7Ps;(kY)4 z{h0d{r2%KUsiy(TA#jlRKrxXDubZlQ^weYT{5%f5N^H0KSy2C{2((Pw+m(33KzH`P zjAJ+ixtu?fBMdFw`{_tEa+OE=7cGZj=oBlIgNxZ+_z1IbZxr*D*w8w=;lS@MJtI+( z&s*MnLLBbblaAY(635Z10I%Re)njds<_tlLGH{{Su1rfC9D@KMfF z7Rl#6gpEn%UPy=e#6L>=hs)jO+>?Y(x|U~YwT`yUFz>3POeI#kGHD_pv!tL42dJRL z2+a-g2q;$4Lrc9Jxyht_uP?MsbGy9mt%RH5`~2Qd7PW7yC$({8kq*Rja{m{`@|^DT-NanjL))HvXldp$5%nCyt_-QvM0XCr_;t zHusCZ2*)coeJ%(V@u|X4EPCs3&mRL6A-2M_E+s=56 zM8c`m98-`MrA!EidaysQl*aJ#p@9?JbCauFKgWvb;g=5*zeKeYi;3K+J*K0`>PL0J zbBXo(YVxo(JaeA=zXlf^DPaxSy;8Y*(y_B*8JbHob2ElMn{xGUfw~J}ej#JIxScUUp|V*FWXFTi(&I)m@JV1l zbE}KOZ5hw0y?vzeR(axZla+bK!yxg_ z18+eeUmDc!HyH=DZSaGT(Q14rJxeuhs#9!}TEE@2RK2;;#(fy);g63_fXOc!UP_Ts z@ZP++$yATiCdd7xS6_eqU)O8i8gj%yZR;4ug8T?9^rRuhBWa+b;3uP_fW`(e7IkI-GuJ$fp%W&ng)?~)kz|iWqN^n@+$&~@VL&Jp@%fl5& z`JDy<$((J}l}rNViX2|*aC^=iX+%ZAE9?Adjr<2$FZqgin|a-Rw!DTIIz8Q)_e(J}EZ$(;?3>WHLwkx%MUgUH5z@AySi@w{Q9`gX(h(IKSOQspAyMlBL`&mcr z&W_-Ywu8>GRN-1YOylpIdUq&RdAJ=_PUYPE0_p{0B--T5oO9qOeTZpJv!D-+<5SP~^Efi3(8!yBSJ81j|6MW)WtM)j>Df71`dnvk$bMvH(MO94Y+u7Z} z+q7e{nVA+za6ldAXO&NE<*VHChgG{RFgdwsprx@noa(?n(AMjHbmFHo50@`m%?2g< z%eB4_8i&l8k70b{(?hPN-QGlQCrnhYt=RlAlbgk2E(yi#+gleM1VWas-$boGhyQu#C}Gc3Tj zH`n@nA_Yzo*&MFIQ=a!IcxmU6X03pk2TN~}$-I{%Th~cE?*4Lf#)!K+aj$h%TWs;@ z(p~S7E9FtxM&2~jO`PjtGTZ{bRum^EleCZ7_+>@`6^C3r6Q!JVkfqQ>p4+ zh|Nl@ZnmZ@9p3aA9WEkzhhy|Dlrqf@=Y-+hR}D#<@k8xa@R6Jp62Z_O^Hl*N@ANTx zrDoE)Ki+hN=(atgP7}`Pl+?Q;C-E%4dm+eDFe(WIUW3;PUM}BSj(~rgkAknk6H>s# zn({DthU~24B?N;8|L9T_UviEyC~s77Mud`aHBHk$x%PfcMa8&ptM>phoiwFMzmRP;y^O`NCGtCB~F<;d}!^7d?LNg z^o1tuvp|xpR}$&cn}&MJ@kq z2|5pL$LAK0*U;3<38$Tiyb@}>B)5O{%Q9_rYmX&gpN+D?3&@7flYwgu6*i+XxAKRl zy1ZI9{kPW##`Dfsry~m&wfgj#McRgPi;mYoNCbbI71b}nYZgJ7cNxLS2 zrIc^^GG$Z}Ut|59rn${zpXM&SKHW4fi6g>=&q;bY!_qZom%+?1>ZY82urIP*y*1q@ z&04*Oev5C@ql?X%fv%qfj_H{E3IyB5`rLH20CKa^KHGZdogRPONjX>gWrR*eOtdNN zwW=TepH>Yz8})}|?L&2*ic>L0>-!HXJ4D+y-SO9ZR6d|fF!0M;at+#ItJsqEWaIHB zKI#)biR(V;IOqW5q`q#6G?NYIa#pa=N>EPzS-Ok(WAxt&V7}gG0-j`mHcpp`8sl=H zoof0mG5Z5I$yNpgw5_>gJ*L8HM!m#0N<;KQuFD`q^@(l#y6{`la5jnCS+n6r#eBDu z)$;Rz{&%*$;Rqx!h35FZJ(8zU9pEm9s$%Osk#nnhtF-*DCYgyjF3vh<&C92@SpLJ^ zriOL1BcCQqJ89FLgy@>|=8ZazqwKFd^+jc045y4&FGr6M4s9Ku3Uf}@KYGeq<0>vF z(z`%MJ|3bmM77)$9-m7m+LWKe;O0Zvr!PK=<|6}5qT14$ZYZlB!$KZeM-9JYMP$icr$)(a1B9F!ygq)4Y&@)>k(WOc7sadA{I-pZs zBr$hiG0~RC5zN$hf?-DbLA&&r&(!o}D0TLgT)~Gt3Mawt+ zs{(-51PSE3^_j8-gTLbmlik0Df%&v8-V&^S*TagMd*wZ%(D>3x-FrATAZqQbP{-N-i*=TfjqA>7>^uhpai7gImJb|SMAO+TOVD`y%Mi36 z2|C{(6^;JdvZTQ^yneZlpub<*FaGuMm*ShQI|H^yoTaz+_B94!lGeB%pZ{O{`1MLv z4TqxWwMONd^2@ZZ5*b=KT{w`?Fj})Toa#UsXzDeepZQ#KsV1*QwEQ z1FZfE%6)J7N7JI>Gp1+Bb;dG#h|Z)qIi0fFgGz><`ru93qpt>t)hTDYO8P!XnxCE^ z#Si^Z^U)h8nKcpy-%4HFe&g0@@+|IhbV>QOZn|h_hTO6zT-F)?=Bh^SmViULI zUQopQ^6ja??ekVj<4WtNkCTl3TO^IP2mI(bD2RM8+`P`I6uKS=d+GGANeZ(emawyb z{WH>PU=;Of&a>{ro%eA)wPBO(+l+p#)^8REffIUwwjsA0L;{m@D78G3Y!^VcQs)U_ zahxhIlRKS*gI?#ASBb+5GXQIzf_z+Ln*HufL@vXUw+=QO7h(oM=A#7L)8wNtGd>G>WT~B|Vn8J9b8_0XO zlzUL;b@*@A2i|(yYpylx={!{Fr`Sd|HO0~Z9-0n{sBMTCLtv5U564EPf#ugj?53c- zH>Vml=mi4@J|im(FN?2xv`$-;C=7-4gLoC_t(TSzKddg#5H<^&UB&q^tL;&~Czj3G zc97FpH^SAHWbX-)n;dv8fHK>?F!wm_NHHJ$Ws>vkvIzAqU&;IR1F1CEZbBB|zn~TE zdns|Z_#-xmne!Om(n*)eA-?2Pmu;fbLf(m~N=c3w{-M(s9au8fs@VRw$l3ZZJPw?P zk+^2j;BO!uWD zUCH#u-Q8(g*#MW|GYjtJM_OiD7a+G3n|u5ZH5}1l{bs<3SIeWdc^7`;sUD{IwI-0s zqwlP*?x!c-+Kt;*@uc1K#M?U<>*i;odAXCJ6@RRlffc*H$QIkxx%yXFSI61fV1rNJ z0m4ka6=_vsE@wZnHLf?)GunDg+LH=?0AfXW* zBZbk{kdmcnp42wEc*)q8>#!oLDgB`%;@VqL0{X{$zPtEOl$~W|kqtRTT;qp5@jD%8Wj7dg(wZANK zaRPtojO~uM-M_21G}WQI)~WN$;>j9`^_lWwN13~AeI4zPj9pDN0TNy6Wqs_Xb%_~6 zR7|poXYNGK&*0VHFXPB9^HkMms>1!&cn$e5c)K*6_bPj|mR>CL2FV$O=Jsh)=7lyj zw;G-cU$|ofZ1JJ}wb~j(x){25Z)PUs(hD+J7JL@eII?}~pY;~tnP&937j5o!`T6tO zHqo4xL^$r#4SHi|9Ue5x%bfknJ%ik7t}?HP+xMN6;&JRY8re0m_5|w_N)4G7zXw4? zWiIV@^rMO)OQH8lqfNreMtcD>75nG5vLQARg_&>F)7dSNg+U^(pd(+H4pGVrLn*e% zclzIZhINLB;SWMXU!pg@gsH1NMq^v91+dRANDp5S!hT4gy=^g1_P;tI!wMB0sU_z0(%7&j2+-G- z*-nFHp};hDzgvseNB{b2g^^;vF+W$lfApM?i-!Y;cCl$dLbXtPP?kzS)NTUlh#>MacsBSicDEapIXK!QwUx@e8#`^o3PQ(r;0nz(` z4qe{Kt9+|`Lk9xM#%ItDz=?^w^*vTWbE9BT((}+;=~d-SW-!8BCS>|s`x#$nU*&>6 zUCqMJDBm9xXGD4VL=rR*>smqzA^^UA`NCrfJ-MNh17G$s<{yvGXv_J?EmGbFs;bNv+}7tnj4QMlmw)!P2wfvws!x{sOndB5 zWKtI@>G+wf@yl(56S&RV133mU{5blyE>ct7R$V=}o{SX1?^&Tf}g-)L(Z^mW18A4XL88iX~7tQuCd7bTnaP`R* z^8Ze-|64!Sy~g4%*Buu-q15ewa?6%FaJ$D^p;+`_IJ|x^Ho-sHOFIhF-cy3)eXHw3 z;zlK8Z9{DpTdLZkI+%;5dGchyn-L-J9k^-G+uN?-g7!~O$|=)lH6fcV zjfTu;SlwHBV8b`Um-Hc{$Eh&jpT3si7>5+o``i$6RX_Jg@6VoWz0+N5!KTqk+&j=J zO}^ls6i_FT=IhfKVlg&7Ae_K-Z=5E;cw&&O{9VvAFDI=-)}NKbQA1ASa`FL-lp)ZI zyV7L&CagFsp5ZE z>s={;Q$Y-QC@Wv|hpW0K2;i;5Iq|`aVs?cKb2|VnF@ufEp}*r&C6DVLH?rx4ynwya z52tXiQ-}x+S+mZo@l5ODV8~_1v;pdncZ@sQD=LveyLrgtYKgaYb&mazmyP^Ev0+4F z1eW55Ywr6gt1fT1<&L3w3HSE$$l3F`8mdWnb|R@FE5^DC)V)vB$E58k$G2s1?7lm) zZ}xBYlT~)G=*u1%&L2HYZPfG!*~(zst+LW`F}M%)e{M~Sly7Ed-M>V7)CEVswQW7i z^Eu@exH&)W`Tp9-F+vE7pHEFyWqL-`AcQTaC2ZHplwI zPiBDJn~d+wx=GsAeN07d$Jq}Me9kR^=;2bl{B?D@x9ZuUbVwY}klG||JXYpupa0LN z8GWsM?(uwANtI)gUZR5pJYHAW9`V;x|>AemGmyVqd~`I>fgC4d$nv$Cre znIRK1D7@71w1OKEC}+7AQD4N~#8^mkX{2JgRHs`tcNnwmNH5Yn(`#W!ubkH%*9p|kN z($n>Wh=lRUnpI44io6380Li_Hy;8Z&%kRMmkzh!84}>>p#RZFlG2`?PT;kr(Chl^9 zt+^^h{;#P_=nc<-?_~_M?-_Xx?_P*PDqZ=uzPl-5o3zs#0S`Xu?a@8PWX62XV$h~zZh*0biObe#SqPhA~D2r{qRGN>2Si|nFg8}Z@G zHn=^7!S9LNI{hnn*#Y)`z?;%a#lLccnS>^e8Zo6UpE{E89~CPYeMELp7E?N-Y(Dpn zaY#2=gd8u(#~?cjwnf2pB43esc_3Nz&2m-vmLBU9jKYa-{gByp zob$Mu-FbJuu(N6SD`25A=Nc6tFIvk|c#AdAn)iiXJuuS8dPnp(SP<=4V_Cq%cTr%z z>Xk%{bT)0(jA&fa?SQ+f!R2Cn!E z06PfBMm0T-#(Nz`(>9~)!e;yw2GcYFgLutj0PV^4T{3Mc2wums-9VXAfhoDMO_~l| z_~kYrJD8#CotMrh{9*u-#p`llN}&x|)rc+%TI zP;kCqMpSC^pO0qMdM8yj14@eP)&Gv;V4Kh5s|^RtJ%J%F2U;$tH2e{~VAPkMepv)LxJf8*^i5vJ5O zNLAr+X28nnSe^P?1|on5$4>FmJ|`&}S-wq#&1?jYE-#_d3YN zQeFC6V*YyjHbQqEKf>;vYAZ1)s5M8b=l3rJuzL&7-gbj+#6R#-bd0sS3s zCA`J(Ialup0!hqgG!*%j2{|cUH1?dPk4o61@gQ!LV*_WYzYu()rMzjc8h=qVbjH4B zem%{QEgVsl9h1XG9N-)b|Gcy;mCD&$1su%Jv7xj!Qz%)xu}o0<|5tBi^A~$7y?W(j z5>n4qog8`tOlyXYG9(e#me^V0dWWNhCpv7~FQ#x--3QZhQ8op72r{c;j;m2H(d{L6 z?og3DQJ6rlxw@00HLJJnYl5Z2ovaWtVt|vGLNXR0C{nQra=z!_@(rDLEE{@kT3$TV zFf*1XV>HdXYIqB6_Gd>z4S@DxGw{myq#h1^tY>YH{^bw5 zxIDkFX}3<(D)_oOunw+b%G8H3`{7lKY26OH`k~c_4{nWM)zA5`WM*D|TAy6^uk==n zojdvn!MKXIg__!#!!#HujSt(wBh%qmU7Ma2!g=mLBD{C!!I!U|Fk_;^x*p*<=4NGO z1)8C)xk}HLI?3CYmDYo`S|ZewSw=Y8O@%9j+tHP|S~W!=fcX4PFPa-o6qQI>K4q)S6l1RZa_aVB*YjI%?CjwbI zd9!up&UZ?ntEywowca9p-+4a*MF>qf*~{^`c~)r<0O8keMC?lil}>-lIw+MncWInC zpN~~q+fyoLs6%fg(m9XkNs}Jzg;kL(b-x~MXdw-{Iuxv!>x#)sx~(+dgQtOZ(s4#Nz8$_oW$O zx~5m=FLUvh^l8MT-Mrj<2IP>(2KMNJ+s5~HhN6+KJ3Q96*Dd;qa-x@wZu1K8YU=sJ z)T=R56fttzcJ^JUVOUP|iskz0O0)=Q$Td|ow-~szg@5_Pcy1*W34~chc&Ri%d`BG& zQ>C~l2iTfd_nwy83?k#eGDDMJ=M<_ji#C7P!WhJ{%8XW8uc$O-cCFUOtUMS$hsB&} znqK^q&vDRxDf6{>#r``}YF8n*4U;8Nbmn^|U5;?EVYtSt5K!>h6;~gRs!DUl{j2KS z#2K$GM{R{HQlMVWHb{tgaoy>%%6;+(a|y&r30QL{wF^_;DwY$-nHguU4ZI*3(P#96 z7GX&lrX!A*5>LYS`S`6Esb7m~WQkK>mq*NotlWS9;7)Jnb4TR|iWj^*paIA*!hR2P z(SOO>Ohn$vKncue;FGo2(GiJ!yvVB4XX#XWVvq>wgaKAjS98gcOhmkg^CfR0 zwi#hGBJ@3)y?xb(ZjoXA$u=3u)1Lg<9cLaw-GNZGx{$5TAqeez{1gq4>@_F=)Lernmo|T$gAv zuHSUNvzeSjIg}s{cz-{(pD6m_(aR-olGzW1>2VPEhECMW1feb|;>Wbqf+To!H}A9o zhyjCfA%wN}vD89tcQb0oCU;G&%jRC-Cs6TA@!_Lr)GmdU<>fTZFuiLt=)=aHm>5}Z zU&=PP3Kz}3=v3)!#@o1|QSMJ00wFj(7`@ufs!7ii;?0c%>-Um3(d(Yb0YPIrpWI0( z{Xib^!V`XDkOlQxvsxuqI#HLg6WqsCZ8P?=dCDj(+n69)fhNr;c)gct+?40rrCAMf zg`x-C+;|E+O!E@swbbNB&eH8>w4@mIzRTLK+0v24Gfeln^0_0(4TIxWxTf-l!oO-# z-jUFl3k45kfHmwlohEI__fgxel}V$H10$P!m^3p?uG5>)RHKV@r2O=Wv(NF*#l{pV zZ+P*HU?{q)>6_f?uPPi_pRWcKcN=M`ju|aujYSu^oN4@c;HtjXJE(NEk7lrRST&CJ zK(ssJ;vQC%X%6LLe+;c#tA7V)^P&CRWO?rRMN+NJo4iQQ%z)&$#_3+saMq#8xLbOg zqFtJ{@VN~!O`rRA{c)_d@dF+P7)Bs`F-JctW#{T7`MqN;OjE3lq&mDlxWj(!zB7y3 zzRFo*Z*`OeZ(yZ$m|rrC&DJ2oyw-Vk=%~i=erDxpe zc=R5wlhkj#j#BBxFpS}eCu*>hduP}X8=jeZEhlkkT<_$-DL^y|ke%vZE84HiPd44Q zEm}!QsGT$v|8fm|%Z+KDk9tIVv}(G&Nf;}?^2f|zc0?5$&*|RNSjJU@S;P?)+q<(Q zA$wDMCU7+1cohW7AMF`&cXAyX@vH1JFHpMCA-yQP)fg#gjQqjynXI70^WZIHC#Qs$ z&iP}u&L_Ntko~?fBcPR9wwEW>1eAEK=#Q;Z=U;(?xAq}qG?YGg z@cvtcZs7S za0z1%s{dZoW8P{(sMHbBCBk|sn+sbVgp~2VZa(b@a?~Urp$YO=sC`}{w;VCq9cWKU z$oemE)kS(xo`F2SI^Exo&Ev(xD%V|mO{*thYw5lKK=wbpy<=cqUD`j~ps`P5n{C_} zO=H_^+}OrRlQgz%+qR9ywr#(sGjrcF&oj^b@A>q8I{WP8tbMKDb*;;5ZEE$q>fAH> zwNT}BhAOMb**nZjDI6Zp^(&RsSCJ4~(Ief$K999)f1&qlXHv+W_r_~Iq$+AJ;IwN8 zOr8#FAq&ojKH0sqJ;r4x6K`}H7fT8htWQs*tEF2G7UTPS2A4jhoom@X>7>UWD9S zW2!>zno3XEqLYs(EU5atqPFJr4}S~LFNX3kj!c+NR2=$xinM>~&qye&S1y0=7-I{g z8Y*($LDNhBR{LHJd!sJnvN9;BFYPv(6TP#_^`_@nIE{And{pz0hBc;icVIbh2ssx? zOck%(a7Ej_Lr6LoShzdo%|cZ1uLZ!Znl=S(mc`wkb>DKK>iSX~_c1HS4l zVHDnN{)3gHFtEOu*t3eR@{XOe?F~W=HX$nWA8k9%i#JQFy@*lqUiSu}(xfTl z+n1Fd<-Nl3{bVU=W3^#Pkc)3yo-ZgMuMw5M8b6da1SdGtDl};^7=9 zMGt|YfnIIg$m~z+dv;#xMWkjzySvP0%#3`X> zHB7=Z{&-Hq)*4lCJtV983}>lh&?5!kFB zkK3dWvlcWcre(;TE*!@T7^qF%B@B#Qi$;*CERy_d;?N(%91;BIO2O*9G<-fEWGRX> zgrQyN+cV&=cGl%EwrkTsC-CGO5GrJ@{yRX*780|j$;`e zt5Eccqha#blNayfzP?J|*5gZoc-7|tNACMDE2p&!#Tprjc;=zvn3JR%O=a(5C~XwZ zI=#zjrp$Fw)PY~rjp9-MksDS_=-Jl44pOxhPIzH1@XRGo+TTdp!HmEb61_b`92^ z$fETb{^+Lwx(e#*c=gABuo9k(LyP(TW~G8UltT~dTROn)Ke(d^E|P3(6yIJN#)p{T z)d02TJ$mHZsY@8pcH3X*kY{^{KO8zfjbA)2+!VfT9Pu4F6^2c+_-cQR6(_ITc0XR{K%h|9{5r$oobubRxYdwcH=Twri&hu1saA&-m)UzBKMM5mKEXgB_ zg|zab0ck0S6GQ$AMgNt>fuiBkr8!;YPFht3u?g|irRzSmgVabG3)@97d_(?MJMOlP z74aWR<6qfQW^$pKl4`%gtL-*7Q%sdayE}h?GDr<8lX4ocN{kt=FW;JRUNY+Ookh&Y zUxctoDyk|YUEIQLxiCeHF&nA5ZQb!MQ81j$w5GQ3la{xd^WdnK=j9=jM1J@tWwG$Z zd8~)-$OJfKYpotX9jQ(M5H&z>9NjBdd3!0K>-1P}yR(}i0egsEU4$;|mH9?!60t?8 zjgHC8(WhCAR=4_KF@;cgdM3$SgSK%imc}v~cS-36i>07(@LB4jNJ;);82Q^#M%+k= zG211DeQj60^c5#z;Ls$e0Bo{o!*15O6((Z>3S52hJCzg`=Fi+20F2FDWg zym2Mxi%iCSG{svCPj13`|CoCmtFUBGs?mU)7H&T-y^CidNINcx(cI3`U+w48MJZWm zCG+22j&U!pM7qc*hv6RW9*x`}h?+ld)rwdlQ(v&=X&yND#b{mrQjhsITL-9o=|#); zX-R4V#OD1%W?oy~%d>?X{$)%^yW(mRUot|G(m2~)A{3lsNOjggEpj6}clk6;kM3f? zFj}M#IFxYRj3Q;4zCbpYH~19y>C9sS%X86jp>KZ4F~DR?|MBAeIUgB$`D<8Ui&B{# z(?G0j^9d&7Mt;#Q&qlyO{?@zLhtL3ZM{22zH_h}%!kGg;5yLj1+OIDh36BP4wbGJ9Y}IykPsaI5YLA|G z+fUh!Npg3Klu>-FO4v&hk1sV-OPKnaat~5nB#F1f_-vw%l60`xtO14eyGaHti1hQn zcSWi(&6Huzgb{TjxW8}`M6|0ju9f!CJuKB5;Tt_Di_P&LIz%DMoRaIb_>hYk>)~s^ zm}^aC9=UaZ?r0l+HY1a)0w`*0y@`8>OzG~JF$6tBNhJ83^+Vblnk$9e%M5mscLR@h zp}R|+A&rqe1nVATM4D1mbnsADIFQqhmXtqrHBNHxBJf~3Z{Ny#5+t!;AP*`uSqJiB zKAUTDvoLSRv;8yg^vBlMf4vjx?QNO+u@6=o_e)s9do&{8qj*MI4Kt!hq?M6sqM64> z)gd8p{|+#YhOJI&Dg?`Ds}g;!8@lKcyal*bu}(3k(Z21EF3wa9JJm;^5Z~+iqs+R0 zXI8~3;cB3C_r+y;kaZtAQ(-5QoVYtjwsl|j9I=^~?l+tHz52mR){PN|bof;mv=5F# z%Adt=$N-l$0c4&Ub+pIzvUkFy{R|PRPTPQBP=4m`v8C=Ck!~Brh{M|etDPA5Q=GR; z`-sC@UYhE665OZkz|5?2A~1#Y(O6y44vG#}z3FwH-{s^U@(Jq?4>r~O&}aqakn$1C z&IRV4IzrPdfV~$(SpPDOu->zlA3_oa5)VjO6>C+f=Pv?XJ(FT*(x*f~S}OFaGH# zuQRn&lIf6#LHtQ6*iGr9TZQPqsBJ&%Dle%ACPn_Uy#9|Odp23et4TJUvQZEu4hC4Z zD)XE_IZrM*7@CPFB^={#?i?i=R^LcBL%DuArvD0yfC|)!F2% z45EMFRWS~maQ4n_We=R;3)(y~Ov2r;=G_lE=HMr=-%{YfH^5Y_`W}361|C|Q{inu} z3XruGgaFysjvBT>-_k(_M9>C;=mjIqe_as&=^D}Bd-5&W><4O!4`>V)cJP~=R8#gK zcZd;9T+KiQ-QQ-|gzO&_Tad9QAfnCF!<@IS&<7;MO2M7z+K_Sh;@p?&uxtF9NVD&qTA6+@1t6-8EE(n+44~ts%)m zVieIP?F8@LMHD6pY*5k$2SmZt7z>t=XE&XpxYWOi<-e;9SuJpB*-E3bnb7c!-&r3b z0^sA+m~13rxvz=LfAf1j7_8Bx##!V-s`tMIfD9x6*ff{8`a9p!{@iTyA1^W((F!Ov zwAqAfMgX8+zmQDicm@J=lK6>G)*?Usoqtch9msso>v_?V$tjWv9#Pa3pyeh@3_NVP zLl>45`O{~D`qJUvA0Kbm)AHp5)^8+#V+eGW&fwfa7)`dd_|8MG9V7xC`h&kQKJ;;7 z_cuz#anKFF98Z@Q*lED*zWkmpVnoO33h00VsbtMqx&#LE{$hbpPqBC& zkd*&peK^4Swr@EpveEcc{t+k=fhiiN5L0F+OH5EBeqR`f{%z>K1HG&J&GaRc72w6l z@C<**Z5!v*+cDpavaOM&aJc@R&;m7Z(AzE?NLegwmA)m~`-J{y?Ij!Ha5cl6)Mc?S!6w4UOa*e8DDpY>)`roZ(AzXghQots67 zsoi(dP{A#8kWni6%9-I%95>(A3Yq-bqH8R*S+`DCjHUWoUL}?>e&Zrp*Vi2mOF=Jh&<^(q(T+|IpWk(mbTPj10gOhUNBJ(TM_c(kNs85 z;H->e)?)28>`h;hQdV}T=vN_}40$p4&Wu?D7s!E&q!||C56Y$*LqjWd!b>SlpMeBC zuI!808ttAQTEp_DkIfPia_0xG$0&Yih<`)9qm42{{5gfRDNE@4clp3-d>J@gh)Dia zw1QJNo%}9ln?FIqAxYGR{cNYRWk*nQtjz7$VNB#UIVxvY#Y)R%~*UG()C1^2ke%QrlDo(DK|e`{;v zFGYcY1fQ^DbTE51P~PlE3p#P8qp2YUK7P&ky!!MQ%_aV)Nr<2WdjS=!Ns&1SqUpZ) zlLF@<*;}xa;VphIS7hKKma+4<1-k@|^UrWWvwGvmZn(&FyS^ZDq+wXB77;kGS3u1Y zb3bG6p#**?ZsTsafHeA_+TkxQfPKOlV*0}3cYmA(@CO(FT_ya>9mGUX zx(~7Onu_ZWvHwHb{;>-F{VRVqDZh|sHm$r-z#nejpULF^bdf;}$RKGajwdkum!WGzKeFWyELb>yL(oKG z=>H#;^1pEjhY1X%(QOap9RGU=ghfCQ2&?3bp#1le^OXW5IbT2V4E?EM{zVl3oil%f zU>^nq!G2H-_Mc5P|K!7eSSTg~za?iNS7hOzWsZNF^Z!Bz2mdz&T9Hg&|8F|}FGBzS zTRbMSD1L8c2GEYDj|6VF$9`Mvh>Y+tiT}Oug~39CgRxkxB9y8VctcF9&sDN)Y~#j| zcsZF;w>>y=4GrD;+I4XKHTzBWA%}*66s*;ewz_B9{2vsgr}J)nf@qNi(~NGurn!Ro z34lcO7cO{{wdT$EV}9@;vNRveXwpn8PU|UofdDEtx#!jH=wzM)ZBAa^z?p0Y9ODG- zUx^S%=Tz8Hp8ufgTFMbJmWo|W_wes%kMA1fMPSckn<$FivyuWkf4Sqo&0MXfqY#`W zMtKi;p1NF&)YYS=iBJ<4oAmu{N5z{am&*yMIXT8qMbG^%H9zLen&CY5UTL9io^C?} zT&wBbQm=;uYK02Mr=luR^wTBs)z1E8)s~|?da~Eg9gm3o<=H%5OKmsXv~-Y2?C|C9YsBZ$j+!ofww0- z6jl1R16m%1l1a!~gH4{!Yz+Z!iS%wftnoq0EkAqaxB073D{Xn>lfVrCNz0 z>bc?Q6PdHxFpGQ1Ax#P=dp>a4wB+{dp$Y{`8D+y-z3g9w=Je8X{F@RN*)A#%i})XS zI0T2i+yV#aZp10WV+LB8YSlz9CmNK-#@qSVTi;txErE6h;q7L6nuumZqR0w)nwnzQ zoy{N6T(y5%^&df+TAitkWUJ7_T9MW<{!)O(m#w9d7^BQwJ%uBDN=^QklEDoQY|baD zaOA<0YvOWRp%Gt|hxEKdv7XPge!K=36vIn+2`Yib-+CQQr2C-AIw#jOx_?6F3D z9>Xdsqh!qsGj^?NR209u?4Vz1A|w^(9&$;XWvzA(xly}IFe6^W@bsSGYvw;l4|G$v zzkFy0`pB%?9|v@l#0zH9h@XEIvT1&9xAsq^5?8N$d+CO8ujy0h32MuEUR?rOwSQf| zXm7IlVqY6Z)d-QLVPpTTEBvtodjeVNw23h6-pR6gQsJ6j)whFB+nf3F!+OXxkkxEr zJ8Z3CNI&06h8;5%nNBsNgZ2sqrPul)M*;|dBDFpsTW@GXJ5^lgqeYnrgwXjgWbh*! z#o4Pcz8uU0OzyRb$*Tnl_*M#>J`>3zqZigq-oA^8ephM5wDrdQMw2gz1rxwj>Mlu; z;gvOjH1diG4oYH2+p$-OO+_#{#Lh4Uc4EH(*4Ggr(>w@(GIPxr`+Q@>`0FX3!GUk? z`!q|bnUqB5GZUjpegKy_yM`h;)<(A2Y=zLIJ#7M z6=uKd0^_o5pX9PMt4AfZ<}mNbHTi`jomFUhSGW}mB z>i_uKp%nId@`mF4Vu9&DO$`|HaC+yLEF{MP4W<-uc<7=ete*FrL@Q*|E*G=&cG-1s zXer0tJmg+!Bj{oobEC|_ZtHK$ufnS#99vLiGAjlK9Ic94WC|C|u6(Isa(cy%9iQVCcmkdz&Te zXy1Fdp#?O2Lw{dQ)olp=WuSmbor2ysB<9OQ<6Z;YJ_XwvY<}!9#Y9cw04Z%(Z^JlK zV%Lfbzf0jJ2V1|^#c7-#70HELhU9!i;5#7suwj&dmCQyv4PE^X>xM?^`T9QDd##yv zy=z_EAFd-6;1*(`~j)a_mhw zI!DP=lasgndQZ9aw7`oD6}7;#+0?JOC9Xq|fyi+|Q=Zu;U$=P(?$`QZ0yZZlHt5%WO{**f4E5}9 zas)nD&AKPegiJ=xyf$_5OzjuBJLR_Kl7(FZ&K4$1=N#VGTc(!_*I%jVOT9a%%X(ui zzRT7W%sd*vIF1b3r1JWnsnL41#iCIsNO5`^xKQ@DBj%!tf1Dx# z*mP(C7zXlR=gOEaHig()8^C*QtPS!ZdC*8^b5M-~VuCHJ>7)74XrK#acD%fzXfL-a z@*KJ;GamOxs{sCo*~mxsqNzp&AgI_Z7mt00qM%a!|JoxGfHc_g04$KKejd|H)u;Jn z!B=ZjUR({~O3;EOQqMYPF#}+cuKxrxQ1oz!~6I1^air04LShtqKI z_PFb-lW2iZwg_bd7i|E^Cj)x{AA(er%4mTBo=u9`GI&(&C{O$CgdZJVDvCJT;f50{ zAMD{@JATrls_ZCR7)4l)^)%%j}JE7{0lLpKsc#ka9QixgfSIbIjE<&)=+&?`I{B-zFT zM~#=??d63Y0O48ged!yT#Lb@-b$^uuVrbL4)((iaMwk10l&~)&%f6viM{8% z=;E;ZkV1IJroC*YyYv|{EgJov=}WKjW^R+u+; z#A3H2`;-v8s>W)S{o0zfns~AO8q(g=N5fXA)YZN{!$VSNhf+)%4=C?1P_-Y-O`y-0 zMX8P_BPVqLydaRGPTpn)9`;;Ux&86ZEXT|C(uzTn)`Z?JX97K23cdIgyIQ6*m`)Q0 z!GxVL$jpq2lIXBgS4!kWCZ#2p8Zfy6X`WsDYo+?28ShZN*|-=NDo$iBeE@e;zww~d zQm9iwPkc(^3hxus9rVtsg$ zXqLki#{p!0Ta$wtrISJL8o1^#WYl;>N^hBkb!R=$2;Qn8*j>+ z5zNb}r$60Prhz{X>a3?@AgKjvS^|i zFhqCIeR6ErOFmmg#B)PPksuq@cO|XRWlWLlCLd4l;#4D z{L~D-|8QKY5x9Bd#y+PBt9fq6Pf5E!d+K^Z1c0(nzMWb*MSW-KsTjE`cU)&Flu@Jj zVKPfJ?NwxbJCkIqvPoYC=w+vB$fMSp!>NR-*w7Z}Yg3j4LsgHO|1S6qpHsbq zL;5m58peL6nW|jL^4XpR+^Xdy4rFi9jLyS>p!3SLT;Q(wJM%v&@K|;Xnn3SSR@uIY zZsZluIh|Y^#0R1kX*!;^1IEsy!4mm5Qk=oT;r${l58i4A?E6Q%Ku&`RcY8WG!v0Yo zy7P-v%$iMf{Ym>asjT+t4D<#8%1R>FB){S7Ef+hoID0BWmczD+N)s2se%xJHAFDk> zO-bq(lJ-ju$tn4rM(J}CkYRSc6IgE*>Z%@58sc(VCE0PJ0hiBT7Q?pnY>m@ce<3Gu zQ`)_YaF=ex-S>n9H#6`7GMRq5ZFK`LRUh<4D2x^vB#XG}14}y1Oa+d!xd4c3q|4%4 z2&Pa$M%laiO7jimHwf}Vhs{o=hd}bGlNvsf-r-N;(=BJ?8wmJKD-ZDxQOUN9Ze?cL zcLDDaMH9a-G(5mHUiw4gU;@z+HM8?d>xdmd`)SL+-b*I^l{LzMf?1;eVj;bKbp{;0k zKsU6MkSoFjGk)z!7R?x1$*W>gk9oL1W`;Csr8BjM;MEHE=KdNxWoCHOUc!l~)K1kb zBfOsap5#oLy{JOzeI?B<^tD~=_*h^TKZYTfpdP&1OxawA7q2~f6DRPUhwHGodE$o* z09+Vg=T2BGyF@Z(G0IqJw&<9N@ttuBQhq2^$rwB00P1@$kw6&=B>oQvmIS`&225Yp zzsT(e%d@Y?bhAdqgNg$0NGOrwpLfN04b8mVD|%8DH)u|UE>37XHR>@8-J2+z<)+%} z=M^0DhaPS?3p3)a<#v>LipX3|V%!ky!KA)3bz;#wHy zIu}tTGc)-vxRsIMb{nAe-NUzX2VCM(Z?3+nCax3N)+kR-LqB@_7 zZ{ajf-N^MCq+f=G;biPc<<8jQR6U&5Ne5%{tEcLAkoV)F&MK$s<$^teK(>!P5e4Mo z=A@{UMO~sAaRz=lM3Tm*NV0K>3q%D9opnF#^jgOrb7p3zN~%r_qC`2>aEVf&nnQ2~ zM`<5Q>h2*W&QDHn**E;cP5k9O&Ku9P@`HkH70Gycf#6M#(lzLgmYkq8d`RoVHHuK1 z-Nkzt^X2Us^i)xz;v;x>Ri8f25WFUkOWb-MPDtM+Xzz zeyc2J_8$hr=YuN#Cl0-K3UZxkxjgdA}5fl&@Y@OE|@&@jxS;bhHMnV z;L_*Bsau%dt7>Q^R^uw03&Dh!7l5r82O(5gCVqrr`?e||gIY$rq2$scGNrs)B*QDY z9jkQG6ty}Td)mc96lAXDa!RvVA5`TU9y9*s#CtSLWlCvVO{nz#$(;d6_10?8BT;(QK|Spmr{sLME-N zY(pYUw(|Gs4H}1BoHk#aSg4}JkcXs?!ghtGy;LY{-D#q^$mquc6nF@d$+Xp!2$`6` z-XDrkD(w40v#L|5TMh|_N(;)iF}b`;Quzq65-D(|5#%B4mdIV%ojhOpAOT6>tV+Qo z$`i&AcB*(WVb$tNxX~wqW8B;Xr5ONV5;=z*^No9LE2@_s(B;%a9#0m0$;N_nu zH}7~vr9#+~KqLOH^4thTj@Oq&Dl_~p?)*RVySMP*RpLD7%fYL47pT~dn&yl6&6VlcP1!IB3VdRvqy_e4G>MFKH%nCvK+NuX|$w`6{*2 zprp6D$jDzj4@AxP&<@IU*F6s}@}*!AP+-xvM!u9e4RTn>gfm>2*!T{A1bb_t1S^vsY?%*Y|?m?9cWQR8H zc#tDxNo2vEuV5TX#Q=f82s2=V3Un!l2wsDRGpL6jW-p|+_D8HWca{LvZIeN{_j0MG zkmSF@D8mu1AHs1RjWNB(3M-QhW6r&Z8siu@T~I_youy#osRu5fg!2qkMM)1h%7Dp(~z(@EMHod16> zP0(L&$${l<0_&xB0@P5ShpS5n97pfgNEw`XRd#;vpZi175LdV`pKpP|xXWQJWs}aD zGI99-hIIC~FdqdZ{#!HvqU)K@%?g50$zd` z2tE8E#EfKJ{JRgSZhLK`%ZZY^Lyv_~0Kw!D2^A z>w#p-M|KuQV8*a(f+KL_W?0Ze*rOEoMr9Dm*tGL5(Oe(DHrwRZ7lD94q9W_xWWkZG&xZ z=$|?L?y%h4ir=dVH6l;}5_D6E&7i~(cATN9T?hR7(3ROC^ zA961J?IHZ(!n!D-@zeQwjqbhe*x4dcvG8c-#LV}Tzec<`&-$a(Jl?=-BUW2oH?9cni?(@RvmxQea{L~#**geI+VSLZCZVKZzWYW>z@#~Qx4(%vA$UFS+BB2N|4va#E?@s>FApKJKH z?Dk**ZS?u^cvS;{(wbkqu|hGX3Vv4jzg^Ovhv0!3EJKs6V8{z;ioAt3m`^ z-$%L5YLQ9dC1pJ2<5LPelg0|?^YT=8oi)B++I)+|x?jVdAp8-9#z;qwT_0TK)&MX5 zbDdcn`K^g!rrjPkZtazl&OX<7le=4fJ@ElTmG?2h*T^5@<%zbO^F>3$>C04sRpT$3 z&{A1u6aiMJ5NvYBi}%br?0VYitXE%!BDQV>AuYv)Jr#CfHCZa5(1xIEknqA{4Cu3O zs^Ev?EQO*)*@+-Dv{R-zgr9fxRa-5gzvuc4%K;5lnLJdfW&-G>b8f;)t_k9sHbdV+ zeQXnLIIbQL2NJQggr5pej^vzWF<=(#D&XF?tB1rKc}F#G(0xA=3kpkdIH$@X)1>U1 za4>OmqMq`whrZOIjW4!~@PxJ!pg0L^iZ*jN>F`lWk&l%p(De3cfn6zdl`EE@^$31X zKe*PF#)zDpW-Iv7YAr;aR%`ywlS4Yq!l#C{ZZU$>5&ZOR7&cJ;FAy^Btia$$+~yG^Wdua-6A`yO;NkBU8P(*_8BudiTG7oNqI}a1L8FCS!J81nr*}IO(r=QpSy>`r}m66tQn1sF4FB z38l3yUF1}v(h5z9tS}ia3u6KfOBL@a9!{1-=EWkgA1uXQ7@I<#Y5gr_e+KtRiXMEU z5V+yesQeZ$@sc%r?K1zF&oM-zmgp7>CE_U_L(wA*lG`7bZR0fVGktY@jdgjyQD>1p zof|TRdZ?A8&V5xb{`#c$Po5*TtOEHoo$E?k(RFhxQ%3n|<8{A>g~O!m@b1@nl8KFF zx)Oz&AwYu#zx|w_th%tuv#E5-UU|1W%E9A2ai2Q8{*gkZB2VSVGpM1~{9{TD(~}Ql z--DZp=>`QkZ!I%E4M^$z3txY8IRr-2jE#3XI$uYJdZg+n%MRfi?m|zS4&B>3nP!ox z63pEzKWeLuMV^zW#24C}T)I~Qn=bqNNxt-m%ci&0=C5K|!PEZr0ghzwmq$KQtrr7B zo_LKMNZ;6m*WPD;J;x@0bnYh;(c}1XSm(i6cRF8B&s~50V`tTVJ@sz;5C)jwwEBMP z%s)4!=CZpa2MbVYu_j)aKK4{;pv)Ij;;Z&DE~E5dx-OEOcveQ+zk9>A9uvds{#{wY zkI9(h9H*1P0x4~9G+@yAiaM6i$`;a+SHCl}v|MZYBNRfP>Pk_PixnG7_6n=$@~>R7 z(Ah#w%Ht2{J{UrZWeWoh4VGbzAdRk5kXh1s45`%#$IYwYL$SY*GM(S!_6FeQ2C z5I3x%%W;?Mp3Y{v@bl1;)Z*E{oIb0l$sg;UX;|K5-AicqQQ;?YtfbqTSY9hSMSGN0 zIgc>m6S|!WCi5r*l{DMY@aGSaLIQzh&(lf; z4Epj%nWm)bDtOdo*HNrzJb<&9vZ9I>r+2NFDp9N1BLQ=iuru_1(G5je$flb*t&UQU z=&xa~J*oi7Curu=$RM=cYd!N?1F;&&@DN6m8Q`GuH9pKGa`WEKaoI(D3O3ZR_Ex2&*8Tn#LB&`EnY66CAJ z_}?@z_6SJ82d67edhJ=X@*0i!vkLoKY4kH)1xAvy9cUqooGd$eQ+3sLLtF+tLS`}1 z%I(-9KEJ*#6fr)~N>n_g!m3_d UpDD!Le57~3G9YJT_Cuo(&df{&bicjL}6^@|MH%JK&iY zvfEv3=JSN!Aa|Qz4Upb_#@jQekS@U=;&I7(jVF50zg=ji0Wf^Fk$y~XJK+3)i#p7FTRKd|1w(*1=QSAac-2d?8b`C5u(&=v?}%Yx@%vB0 z2Z~^nCRrG;Xl|^82Z(h(PugsIxjG4p%-3U(nI*V5Wy zMAVmT(;JG1uCQunu#z!iBuD^W2fC89iuss8-UR*Ni41(3^sb`Z(~~%l#|Sla`@Xi| z`>aK2FGRLEdCh+8kT&C2dDle5;O*-Qu4c#}dNuW;GMDS4Y0?8zqmnt$JR8u$l&%`q zs1QA4UK+Rsat0AA$~8hPVlT@k)LyZddj|Hb%DR4$r|H^Nue$muy-kp_Hrv3#`d@@j zi(3xf2zD%ru-Qc!A#nX+&;GP-4M5ZY%A>f}0R-N}-uUGR180IE-&}h_Zm+lcjs^Ag zuu5XEbNp}0yevDOF)^niwW1=@CXj2)51$Zf%#>NqB+|+J2n+8ugP6Ui)LMt$5lomo(KkbUXrWJYJzA;HOc9Ib_SGb zZNg6_y3c+nyO}mimBrm-Dg{zS!CzOS(upOE8C9rOLy6n;ULh8&UtB-J4I65c&`4C? zIe#_^JA+YVwYy~iPZi+jbLEOX7Y?D*@;bFhSo(<3I)=zieY*pt$gWlJ>cdj<#VK_D zL=;;lc-O>E*aBp%zqgZwKJz-}gdz9j*ks>U0MPTthnx~nnCVRiOhUx$h^UFxb+Qm= zej;ydA6&^}E1TiXaHW2R!m%5y&w1RUoUorkT(ZcHjFLnXLsYW%a7U<>vS{#eHh5*n z6>E!UtNE4LrL@s2!Y{cKf+u8=?w#`v7ydnI@ki9cY$1<=vazoP>@M1^wA?$lVxsAI zK`hxFRd{7vdp3c#hZ1W8(yC#tw20J!#O_u_<Ga&t!46DW%$2W)!7_pkloz$(jO`ELFH!a?nH|g zx-u7qxHs~-`!nm*X3{e@mee`ttnz~CQ$ii?smJ=t)ZA6e$e{FHrxuJanSaiaePj_Q z9C)~iy){zAqv|iDKPYptb?kDAx|e>b!4u@6Em%`lXjig!Ffd5C6B#P6%km%DQPm^l zkPezw-|ET?r=2A8=x`2cU_?RKn@}phN)J*GFYXt{bT?;uuEq znsF^cyl(6+okL3HLrQ?@7#^YXsoW8|=}WJ>qO=|DO?aEVRnd7(jgR8UcgQ|PMc+vA12#u5^6gwq(7U<;wedYyuXw;!n!fG;c4Q` zCH!Kep3Iy75HL%Tg)^b8hquAj`GK#UyXRFXk-j(O<2j+&eSY%RSv+sb4deWy@#nSK zRQ}%lZ|Pr7NGTs})cqrZZi_>8ygT|F?y)|}habrt$wjGto!+@w57Ie42R}4j;oMol z4ZzE>5xzRWGClhiWvq`cotphshfsa3FEonIHo#`nR^ID-ZP%`)5bX`ENPvYPmK&W% zDT!8nuI2ooM@5@E6pJlt-(Q=CVXNT_c6JUz}WazeI!S5;L8GdX~s4^a9#X{pW0L+io-R=k2|9x zlv!(UzdD&8`0LD#7tS7oIR-$Cm>s(hUxut%kY632I<`vm%AfSZ`J)dX@uZ$%i98H# zGB6D9!9{j0j3P@3kCSdXu?Krzyd{T)6F$$MKR$N9QjoNeVzJp8?QA=Y1&~BDc@y9t z(uT;sP!O{!c^wSE54AUPjZh;)yii) z{lfA0Ii`t|y;&naW&4`@oU&!K?GQd~4r*3K)?St;>1J2jjDJ`NDskDWnUJ3Dm0YBn zu6SSW_gHHIPLR68FcBtXih2R4IlQGJWWLP4X*5?(aes68(6YfYSc!Fev7p*+;E&AM zifC23wvT`OJIMQy9;4Y>jpbKC! z^d%n?cdoqA?kG*2Xg-ViR#(znaoh+&Ze~6Rt5$WN@8lXc@rU9!s*Sc_eUL=^^#t_2 zO#;<5OmVl93Kg~s;m>}^znDzYEQ*DTe~Zw2qiFfo+pRn7hPEz3O+o5%B>{UAe~N-C1~zEy`A^ z8DyD1qapW;aSt@y$fposCHAS2IQTOCPJ!=27W?$)UxO{|NBv;?GOi(n^#-f_tjV6L zSVBDvPi64tpOVhzIo`GC35``3GuYYU4e4kFj~d-9-%uEh=>(*H%^^&ZxX6IXMp zl|omn>5pZ_*U)y6 z$5|>xCs*A#A;n2iqM}>g_h3oqt7&*`Q?Rn=mFWHSW`k_VE!jO@i0Js1^F5$e1|nr? zZfoa<@eIREwHfr3F|_X>M^tK3WHImqHJCll@O=u#>CkZhvXKsDCKmxCIGDt0q1#gzdqwn zGok44$0-iXI*Y|1rn8MNZXeIHYp?ta2e9xPWYQN~-xqtdhsVI?da)*0fLS!|Sq zch2%{xpU!GTfa+27c(ve%JU&`&ef!JI6fK;&4@kbd|UC{^%L5spOvX*okig||Itvi zyQ3n`QvJP6PKZzE>&x<ieBbpxf@%aO5rZ38~cXbSlg2^--9eF;? zoJFLR>XUA+J15nYX7!kTSthTjTdJhG%r2Cw3>mOV#%$uQ&c;B_EXB2htMSPYU8goD z38LoHv^GEc3Mc$a%1mdQ^6;Fv+g+$9DCJ|NKJH~yl_qg^ZAfmQJJ@ac;WX+FIOVp( zrw*^M|6DP3_M9OI^Q_V822hSMiHpapj@KK!)&m00asQXox-QJWZck1}-zwnKoYYXa zlZ@fKk7OAk=048%O5fcqo8(@aI`!D#_zfYc(Je4>O=J1$WTp?(hT9&qK^ylTXU5Ox z+qOUPRhwW8evGL_8J`kyJmkFJ^fX5GZn;oe*E-v;9DQv+VpkS|>%DBGv2Wrwk&_^I z(d*z?>{D=w(Jlpm=PuXwVF9{0VEl)C*)`$hQC;bh4->PxpbcXWIvj2K)egA}pngv8 zEI7F$8j|%{Q;hLF`M1+3!vV#FiI3<#fQzZ*8A!_ytxd2(tH#s3HihVMYw{s?NClGa zs9FpcO8Kg7vJhEEjpAFm$f495*Pb5Ku10NHK>CC`pFqMUyX+EGr%!}D5X_WNdD(*x zefp1pgZZnXl(InwpO`nM=X?8nM=SEAWNgGFTNemxZg%M4OD08ie|ck4EjlQ782PxF zd&`RfdS|HoR}a#l@9r*4Pn9R3?AyG}2;tJV#O5xvxSzBn*Myt(;h5T~`w7Y&)Tzyi zan+!NL5IgczF$haUrJnE1}x1vIOH`mj3nOMq9+9ewp7S!qg=;MoswS|ibqj|Upde* z8g80#C<3y*I-BIh6cpf3e8Uf0yFvoX4Qx97p7%a)#?ae&7jen~{C4pwYIE z&NsU&$x^fh94xk@(>gvfxKe47R7j|?>Q++&bX=)t^lzp<=1G==mbfmE8nBie=b1!< ztUG8I!y6#Goic;`mQLvD5jc9#v$Y zMnQbokP^_{B7b{OFI4YoZxtrCI#K^%KJWefpa5<(=bBVw8(ZJhmJjK0eU!&F$w?qX zX~O+cB+)Z^d$i%UR7%xkNOf8q-J(`MV2r_oXI7p}+9NjyusTROM^y?xNDl)gnqa)wQRxuRtL8EvR zuIm@@J*rcW2c_>xT5Cj(bjzr-Z^+)}C{D_=T`XB)gQ5zDM$0V(HZ0#-{nYz)3I49D zo-8|&Z@}j4Jk(f35|}Pp9ZGYry1}EbzE{S=JuivdYrAX7HS zEcg;*Wjs~$F|Ji&J*#T0e!3eMk~0$4x0ul>ok`JXT6MykiLFC3N{S!lP}y`QW0wxt zrD(T*&vpUe%~P3Pfn>Yrz;8u8BYQQB5J55gWN9`KHf>!#fw?;Rt_TfHF;&E5x}69P zY?y6nHA-Yz_gy2d-NXH?K6T_LqNDT(HX(nx5EnhKX|lL!O)3MBw00xXPo`3V&=PAh zP(50E+8XUYfE06?9xD)b!P>xc!?1@VdmWIN`fq^sEF@}e9PW0MSe(E^~3(gCH1i|#c0bGbo}mn2`E@6?%|OxZcIV2`#%1;-)?JDRYm!W0Kc;du_)b zi)bHLeAO5)XR}H`xqx3!thJzS;q~$NWUmmzjLnLqf}>;i%WjsXiq>CFD+@1AX2Zis zz|SnjQ(5e2d}xI|a=N*WFQj#I8>eHvK!?PSQuFK9N_0z?ZG$y}out^Q#bgr|UB`nd z6BoP=@Rrk3x=K5VqLJ65{HTocXPiO-oWQLjIoC@|bo40!whhGA`iN#*x-2fZXGaKK}7{p%skf4zbKo|n4+gEsEZ3ak zR-1ttuegps^b?KE6YHyIS+6xVfeEhH1!Th|OwzKuBWI}>n!bnTUYEGB0W`3|{ZZdY zd%F!OURWH~9Doyb&Fn|+-*Sh38a%ol;Ejf3WMe51G$9SPr@dK$_PqHg1ae<8m}1>w zBEeRy-M`Lhw=hwLUJ;fkNXz+Fo|pCFrJVOFkev(y2(7{&DkrSECsTR)E{;rtZh{~0 znoa8E&Hfbg7LBZzI<7D#q`%KT~lcenEbC{;G6>Ez2td8b9cN5Q8^91 z3?kboHfR)|h5O@w+w_;;U|e(dWPP+eg^_rJb=6wpO3tbs*;}e#tvhVH!hp;gpeQu? zeYO@&K^!YC95zwpjCa9NmbGwoObq6$$XDHrkc6Q3X$PKoAG%%)XN$x(>_?>Rd=ZDa z@HSjKFKmuCRd^?iq8oND!7lZ)g1hy!ImV3LitvyWpuKvN+_x@cDy|2vz&f?8zP7&% zV?Jj=pgzCfTUo=C7yi*=ryRG!QWKh@Fzyspy@@v$eEBD_(ygU2RGgh1XT8BlTJ&6N3 z%wO#*GG{%aga&@r8$%zS!gZ-TbECew>8#Q{_F`V{L0hf75zJ z=EO=;ApBY)PT9-w^QgMyn9-cT@{+ABH}ou4ktn2MU$%bbr()GRD54w`GSqnG5W~U< zeoI)&P`bG)ni|%NX1an7>JTO&uzfXT?x00)-Q4u}!86m5J^&Y**pXQU!f2^(W#7zOUnqf=q0 zc~frqklo%?o+Ggg?*OI6B^OxKC`4w~Q8DA;+!pi4&3US*nckooC?jS#`)r_i z6_p2j8XM9!dn!LX7#EVCW52_u5AvbYnZa+oFX>gMz&{kP{*k{(F*hu5s1c_A);gq% zE32wo#wKf=`ido=bs>S4%xYJJ(khMxl9}h>w`F5j1fQ6zN#7kr5wXsJ%UN^iZc7 zkegg`XFZD$``MVw3nIo`*Dv?3Ipn2boM*5=uB>xznzE+J1ac*sb$t7rmQo;tk}Gda zLG3hO;;SroR;wM-0XuVzvQUooO@7Q!blsZAhf+>?n>_+=RNfFM6s<*vM%B`^e`83Vlki(@;VUPrc?Tn4?;;%Gt#w~<{05G}4SNQvt*N3cNmx3oeK%(I z$dJ%m>GI5H7<-9mxV={=0u!;5)Wi~z;^^tQ1|ZNxHvfXWG8-3^aoDx`sCuHvv%gN zzYNRT_Rj#eSWIuX=QT`kRwl=WDD9hqRCFDSr6ByoP;0B7IpDc&t6EtbJV_ZA(82KS zHL1sx2}dkN#2HVnJlESVP{33KsJrG+LUmZ3lOQCSwQ8UsP?>zPJ8&(f9WR7mSmLy& z8AX#V^B@v_z~W`cYB-&N^Fk^Oy&_j$i%P!18HAkwlfjfYaM50ws8S8Op#G8$G4Wuu ze~e=rb1mb;6zAKADFZCBh70D2bvh~ecaW6s@Lu0+xvqASch}OZ!1G@7066y#Ba2GQ zrEtDcGOT=ST*BaRxP{MAjZ86Fa{le7fW~nd^lMZhhlaqac_d4xR>pgDKFLh%U+q9> zF)z;TA+AJ@(jPo{7Hw%kOo(479%UbQoLpwf=${ZFa5udVw6gbThg+`?-X=n=W4}z_ zlt0sf`{&bIb%hexk1r68wnqpk6Lowr#<#z)VHS5d&E!xx<8%HHUkGH85^^@3cf-qbUkQ{x{@ zJhR}pIiRmPyk~cfhg|)v3!LFeTC(N9SO$~Inu_D)`^#C>5X~_smn|4Mt;jZ8Be3YGpTfDro!;((7*NZeu<$Y|~XXUC{0^0a; zR5x19e2CLBvn2t7ef6~wgIi5nJnStymzK?tJj*Y0=+BA@_teZfkfBK?jD9sNee+ zV>0TWYCpZPsVqj>so$}QwG0r@>y;Rr&IMc-ZXAWSatJ# zDmtc|WxX?TP*M?rn!x6>CAH^)m(G6dnA1eg2oe-;w8>z3jVzX-mn4+myFLd8nixoS!2dDsD!*ROumM~$T8iCh(lvZ zU)jcHqh1@x6+Kq~=YnY7_eWXTt^pM#o7bF~O7|xYxVPjmH4{2{&`ON7#BXkVRX=aGObfh>uFf>-2y z$B1pspTFgJt6ulIFH2wG&r8uNX=80P;{|%DgQc4=Cls5!$tckJIE!9ltp9lQLw&v~ z&v!hXdW$!7gCOlaOAAV;Y0$aKslaIsvDboNGFF|M%GqrIwRikraBgdk>H zB}}zm_44%k)gpG<$4n_Ur1~Y`Q%HHCn^o;&vHW|$hGG69MW7mrS->Z%W2pm!LfPw7 zq_hpf`-GYf?9sW-_|@IA?4ls)Bgqj|mIj)KgS%=U0hVT-(SB=g2J23Ta-u|fYuBh> z0OPAnY{CHwbmR^+o7mQMr+Jk+Q}I#|5=F0QrOkxgT@85Ob@D4eBSoy>%IJq+;XlHN{qG3U9-YNiCW7%5 z>?GeQ6)lLlf9yHb`HPpHY}2OypzVTGgfbObQ;a%gt0~|6v$5_zZnju6?T~v7~3ZjE!Vz;B}8-qPWs!7V@F10-SDzl$C2XNa@>aWqY#Y zQWvdq!ks(sucqN3i}Y<5!0S~pJm*km^Ikc4=}chKjr(X}SMc_8R?cgS3LE(-N_dqk zr0N0yQtE6=Gx6+Om=D##+~k2U!x~qkT~&HQaG!?~QWplfy*=*J+5U#!;~1d;>#Lc_ zMgJkf^mo_6=8q*dEu}nQ z;9b>GVji)S0#`~#v~Cpk>(2;RO|ZCA)@k|z74|BRh$o&_&dpt>Zj>Ioy(j&FY$F1E+T-bonP%WEkz+RLD&w@=VyXp_YTYDsou(YAQVH=HJfxTXtz_scdtiKlQk1r}F8P^u+97E8VNz z_*W+Gii!37_$Jjo?g`sBJZsvRy4^*LZR~-9i3W~YkMjU=6Pyd&JRdkTC3xK1 z)a~Z61jms-z|~Uma;vyX%yyF8OLsuXrHgUkCxPD{+ucb-xE$8#Sfx+cUJF(acZfwAHCe3J!xQo=R2%t7#I= zPVp|@6%h|ak{5CvCL}p64b1DB^_t08PlC`rQbP4O;n0?Y!}V;sBExciofN##)-L^! z-$o7t-)Y(JZzflfixaER^F*k4Rcb7AN<$QU5`H|V6!aT+E(G5eioi_fhDiaw-cf0< zF@)?t^`FE-P#Vz}jrk&&Veh4s`O7hp&&$jk2^={>B{nj;OEm2{=wg5ZzdoQFet-ny zI=};iv6?|@zFd+fiLw1j`~FQP*|I<*RB4COuT=AwtVQ`>?RQ5TC8yCwX z`|nOFaooSee5y9iX?uK1gJKsxk(3GrlI7*v9X#gb*{M>1WseqIe_jdIy%!FpX@miE zQ(2y9gQ$vNBFr5m_$ zlVQJ21ms`f_#J_CJR)3uFN#2hn`xkVtw{?ZOLe!E10ROVnRdu8I4)CBGzUDb%zuE{ z4~QUfOgV+Wk_wUvXe6%Z1YG>7culw0%^eReh);XmY7T3Y$wi5Uo0iBd*A!4C2o-)A z8NKTMO-67Gv2!px8hi|z>7tL#dO(U-G5}Qq7Blzk38giuudB2u>h@-^dz9Nhd*wsY z#`?nUZ(>Q#PlHfo4@5-#;F^B%$`qC!)x(eYJ#YxxY@0kp|K>dOL>!x>U{1ec>rcie z8FFi^!MhLU>6{+LRRWF2im|)EI8vz6nMI_?HPrd+y2^U-%94V##P!J)r!WnQQ=juW zUn*a%k<&~cA487Nmd**k4oV`>WVqCJ&;Fjd_y2m25O8(I=jif#HAn3*v$m)=+H*<$ zA~i-IGOzLS1JB!*V#_bCyI52$3`!B?)65k9-_0{ZBWr*`+~voa49z3z_0*q&SV5bV z$-E?Ct*jMNMI$~_lrosL?EPM?67-re5^j4X$dxImXXoe<@JP_z;uBY%9*@)%$yAI3 z>jmm?ZrcbaYjxOO3>MCEjWRzl%)r*ZzmCh~mb@h*$c*UShHXKPG*9*%*U1>XNX5pA zZu3zBrUu}^>1f?HC^|(p?}-%{Oxw@BK`YMHlAA_CkQ4VOSQ8CCk0%4#=B9!3%nFZm zcb7+rGAGTZz?P|uab=`b4%3gS(r%&TSUNA25@9phCvg*lZftk6-)CtedFB{3?dGk> z$e}VdCsF+pnf*_bqt#d4`CU^6XYN021N!gqVujF_QfOk9=6_NM+Zt-|8k@aEJ zCxyUH1Ya|ruuld2!&x>ToBn(ufIkapj)IC{sxc$YicZ?x)VV#(F`DF^SN9X!Tcd%q zCPfGf>FdWm6}}p=vb{R(jSNlyp!7uNu=d&P$t%m{Mg?^h&hqR?#Yy+!yAz(ksDPt% z!%*bcRi0|=V)04|nHl|hBVoEkwykMU-$B`roSoqGHy)tkZzL+ZoAWkG&AI1Xa@G#C z+e*Xe(=~^u&iOghlkk{f^fA7FqRKZc#WvnSIW#K(%i;H1&HQ`-wvD@{oPsElVVHY8 zFa=$3oEHT*_y#hz;jwJwx{Iy=;dn4xf(uvNQayLSyDPLxo(<(-i?jgBN(2R@Ar-hS^V?3R}N>o)bHTox7bSehdeF5@?E^ixNpk3Er|F=n9RH7)y5v@ zP>0G!$`KK7#H06Ki8np$7b4kr+i5#?$+S3Iu943cvA{L*SQf z1b22tzQP_k2IxE7c-$m!w?kNK*+y%79E=W9PRJs;P|FY_MAAv=jc}ASD@!G^6q%pD z*#R$Hb8GUY33?A<_o!+2g&@QN4KV7UaYx?CDMt=zFV$SN9ON6JA>L=_?QBK`7KX!{P-1qk_%8#<(6!ANToN&lF}lb340 zWu(4;;YT{O#bG}O8G%f6=-~TRu%f*eHB8O}M0w+bkMwAh!trErh`(rBl_{=bjj@SL{qmSuBqJ}U~wf|IjMT{Du7u|K1Q?V zuKr6mi0wa;QhTna>U0RrCC)L+A*)Jn9X}F`PEBz2f5RD2wUkxBkG3nl+(xhjbsRFb z8O`)Jk~oE4uPP>d=O13uBQuqno5G zm_-97j%9B12MpFsTGoIVC&!+5h}nhU%rl%j*KELfCJ({X%>=~cZA|WF!Ju^#`itOu zSyDS9w4#lGLxl7LqyKE+p3TR{4>FsRZ0|0bDg938*S>!Kf-zAxOQg z8MKp#!eYfGRx^aTcNjc#AVBNmXIf0!d*3X(0grl7NK!-G3^H$`kueaq=o1?q?XvFV zqM@+93gY>4MzJ&oOrjvwujbFe?@e7zM==Q;QrbGq9dtx?b&`2VRX^A z;z73g)sAn(woyR(MgGM)hMj8PnXdJO+lwZHC5ki-NwcG(DPNV!rsW$N!?nr*HN)SX z_1G}G1V7(ESu$KSp_qr#uiVkaW+to0-ckd_5Ekc;oaJ`wOM$5dhM`pipFDGtWa_9- z)#+uHK34kP`18on4K(Bq-0l*7z9;ZGpZ{*W52q_cS>{*$IqfEIZa>R~d8D&I*DoQ; zu{&or)5SSgl|FZUETcx_y{a!+60_{vCdDYjc3}i;FZYf_xMTNu{K#yhh=BP0krXup zb%s~%Q$0@({Y4&D8KB1#7O6JT=tl}#j=u6%@qt@&! zig@PIlTJP9tk5&XH}$@ALxCV^SGkW&oj7#`YlFIUP_ ztj5@~lR<|f(+3=iN^Ll&J~4ZxTU1pW`Z89=`B9Nw5@p6>*iE>j&-t^g zl|z$gJ`a3J5<#5d`LKC6JFoyKJ?5El&R}=3!}Xx|a+sx~37-KVniK_XMplUat2@sn zmynct(igFw+iyYuF+0UEofGEg)*md0<6s{>r;x&&y{3o#%&()(T?R$xt)AsPd&6>e zbN9z3RI~2gNlNEqu_F{2^%Ora4cgLRtE*X6eFGhRg)VfO^Kbf()>~YaTAxVr76jrG zQ^37e^ORP%A9;t7qo2mG=qRs9EX?J!oYLd!PeHXoY61ysTGJVI+&C7X!C;*lsj3im14dgsag0q{Is%Cs*SBO^@qh`uv z9p*yj94&-W)v9`9l6naB)nzKT!Z!FvG^#_<_@B*+Lf+|-7XP?_D;RF(+EG~dS*7+G z!r}ll$CX;g8=mjo-YgD1N*$jJk{=^WR=#3kLGayOIDI|6}W4quio@-6?^2;|FpV4B)2_!Eaf01gu`f%%U?w4Ga#s*VQ zV>C3tte-^z*mpKk-URPbl_dNK0E%Vv*~!7Li=f&x55==ZjhC=4Hj~vJY zUnR~@!e+eue5huTGn(dk$0=zp5UU5hnAyR5ByJRLp0MdbZUt@mkdDNHMOcvdA-{%_ z9+)p5V;?r{fkf&&0EdNF@V6vBYhiSnfzHcGA2C9*u8J4OCEiqqZB}AE-`Uz$YUX9w zkCochSS0zM8X#6$zX-8_^%sqzN*-Anwb|{+SF^eG7a2;c$At>4HqtMiY8S^!su#Mj zJ;H{_&o^D#z5pR6FQMpWVriF**Qyg|<*2iW3L{0KHr46AW&|F(QEf%GL+qXtv5jZa zqfH{LtEYM(wfR_sze0{PYEzv7Cmj`JENul7XoQ2WFQ^Vz2b^2VT^RSkpC&ar*<-9; zgdu{8$j6Ma!?@hvz7TxJ@kA?)QQ8r4L)KZ0C40G*&qP z0{4wHTBb)#2Y$fk*GHrrS8#@;7y6Ti`tzp2$px0mXSJ{$d=Iz@#of9OQiZ$APTDy%CXkOi_IT{%&&zBNdQP^_9swR{O% zD9Zz>k`}ZE?PVa+YeE?o`Q%duJs$0VzWQk(XnC}nRDB!wC8FnN-6;6J~TwHdCuNFrn zn5%Z4@2GwL(Ebc#P&p^?=Bm6#6oaZo6z;+(Rw4j3QH3q41}7`)A4kg;VR$O4Zi)HV zO)T1_PuThMf%}D?+6Rk?PrT`K^TagbB_{7oB){DLpqa0NBY&GnZ2t5^F*54U{XsnB z275ge*8>o9#yCVvz?@@#`4YdyaEL})n&)gr1dEn0A&JYk+)poQ#iDgMzC6bqnmB2g zF1g?8-Uiu@($K>u%^E|<_uK3Zl}T~E18$v1^N`dK93raxOD66&u!6TQgj^w~lgIXx317oikBV!`EuP zM0E6~xlJt%gS9G;E)nO;!H1+dqTaCiGf$Uh6{zE$qH4q8{02-a1C(2|(4!4jA$Ny5 zv!}j|vlnfBWmz;ZyNQAx1asqgFopf?{w)B8FY~A$A0)A2OK0{#9cBDiY&1^ZK}nv) z(aJ*$S4v6oi&;n8yTI(jY6mN~@$OL~QgK>~yq(R=<_kUyzNjLT++MmobqhEEd=GjA z4mjHUgz?iSFH&?$2@vkcMguihHUplSG%sfUeTNFoTeG30?4LcRC&D`1#R@ zQ-qLbBG`AYIf_2iWqoGghh8neo=%FxE45J;LPy(upi@6VY*aVdXSuq_y%Mx3J)YFTn9t=}*8;cbmi%DMc!Cc~Jybp?!aocS znA{3^rG8*7+j|X2iU#=lfN0w;;?r)G97*R5y?c#oYcTpW{Npe&od@Q zDdiYT{1ihsFI|1L3JCnsSf)ZgV>nX){C<0C!DJ^@c}RMJ*cpX6HiG4Y9~@*&&Miwk zZI%{$;r#pu++Tg)TnjR`t z)XNhPeEfB?@ww6t?jrw%pE>pnRiv3{8T-BPcYQ|hi{*6}Qj7MYaQ1wHKPFFz8#30c_ZJ!~Ev> z_vlNnIq0Or`-tRE?KFw@Cr~iv$~thqIluUAgX|lES{z)n>dtuaKWE>9wBj`00-v+#$7pTn zVwTGSKNG{Ah>$o)f_|w;aVq?<)O zv$);Gxjox9sa(+#4oVL{`x0)S8|d-zQWBzXZ@>SZGw7!EbJ^@Km7~Ib+ zw}X}Kc`!!lM>{F=o|dpr+&8xPPE5Z?$0eH|aB?T)H`8&Y+5DiRq%H)$BKvGv7yfF{ z<-&aHIaQ*VtYlv#;`a&p0jVCP=WvQy^wBx<7bLzY4Ctsox2vFm^?qiO7>Ev=Oe?O5 z2LQ<=WpRH)y!1YkX;z;4^1>HLQo;ZH{%d~}2V956Pml4FT zo)U%paWMfGcVib@kBk3D9(D5lbb`w+5Pog(8QCEGq%i?~u;^hz`@T&4y{Q84rkSHF zE%o~O)!N8}8Ds~n>c?$$t)Y5d~Z-FuE~=rlZQ5}=E=Dumsdmt<>< z^?D!^4mecKk`Ef_sVQE!k!pM@-+C*g5GSl=S8tB>VyC~wnHBD`NNm{a7iR%CdAi&r@XAE#lwNwtu)rQnn(+Cph}AeDn4jn?`Q>P2>IXp`-xv_j@*|)B(w8^Rz87I$9szriE>Gb(uWln1=4V zBnfoN78=Y+1{qYX#0Gm`Vp)4rtcvf)PuFxozN~%|(&JetUAW=)vDEvduWgm5v>0>3 z3rMQZF5165>iz1O2f2U4&EGtN$WzxWps@d+Ngp#Er9U zxO0l?mq%wp$h-0jH5Kg^WF5ry6*nQY+KTQg(pmA-uX|>W$fpCBE?!S{pA2QV-~B8S z3MU`S+tfcG3)gheozz7XHj{d51?5v~uN^;+a;U(*w44tu?jUrM6EW-c_3w6&(lK~6 zHoNQKYEsn%IC7IbVw4!gq}5LliAd7hA&;Q&iSJ_VV%pCL6_ z`>)~?geeGMEjVbx4&KDrhFP^^t%@FUJCZL493}U~=nKquzAX4t&y3q3)C`VYw`rw5 z%*+Gud@*dmA`&j}?VYM+BB+NmmS%~vnR&2fB+LDLn8d7#LNa63_8l)>%~sIqkm!(X z-*bm4Mi!RE66pNVe;kG?!9#|#)4lRzBK|2C2Ib&((9L*0uN^}6r(yhRh1|-105c?6 zi>vu9XLt-F53f_^V1v9aNp6cRf~9e1I`xVl(B-HL*WGuRD3?fY0GzZ3Rv|?`3>?64n1bt@O^ax6jW%W>74Rk;0MTKzkM-79@|S#qEcZBK#D%& zKY;z{gX&KROVInF8x5UwL`^`4#ObV<>gy`)@Qf3Df-pVhjVL+Yv=r?>C&=YZ~U{CIuXm!Ms;Um zh1+pj6L;C^ry?3;Y_JvV3GB$LZa@oW_)ntmXk(w_-fOS@4913ery1X7k;e5Zs}{K7 zIYqNLoVXu%c&2D{x1S}M>Ojqr3ym}Uo>gK?%8`PFFCJ+4oaAOW?6O%9{{ry)KshZ1 z4}ZEbSPin^?MIUBhPOPG|9cj19o^9&AW0nuF0USXodsVFZmF%*KL!aWnDt( zYSBF>my|i$nPiw4w#jFv7fbfI?{G}*ktTe)Cf1!+uso-+$P^j$rG}{fG&m7txb|PrNlyDR_ zp?qNebH7uNwGfX_urQInfY6|tgk&{~ulaytnw8|%{4wfFRp?3uRCw(+aZ-OlL_|I2 zl@2{+iUWe~gQ4a^IGa6Zyc|--nP(U9y=N!!@Z3|2>iSYDw=Sw{I`P01>?Q|1rwR$q z3}b00oVFttC9ITPnpK9E8IC^Ij(Jciqm3C-p?DmO5PzYjN&mDi3Qp`C2;_0tPwEav z5WZ8SXKh=rj^VO&XkbSg!RRu$r!v! z0`oc&8R^3GSd-F~eTx_0@^!!8`lPnXi&SMVLrL5kC7GV})*mEDcbD&)R3&u~!D2q{ zX}aAq`L8sapJ*Xt`r{d%L~YxxR4|!vk2Hvwip$B;Vp|v(WlLED-CB^g08esV(_vg#fRP-k156sJ3IkPcf}(WZ|ND%czoV;g?B23`=Dn#E1^!iH=?5ynCnSuGqIJZOmyMe>pr(a+Q5dDPqy3t=NlG}~l=J;$^mKt-!xA~)1PW{yax{VgH z-tt43!Jp@^G)(5E>l>ZCaAT!%?yrZW)W`0jZqI*tWk1XK<3D^3OX4*DKlrDXc#IMe z!vY@GmoEu>mP3D^UsM}DZioM$^~(Ps!wNVci(^AS70HM(G{;;KS8$$ z_I_wclAL#@*MT(UTPo~#JA?>fupXg-Aw+J(u^j7UHvI9|+lv#T+4{_sq+S=6 zgW6fm`EZi2j1D4-Z+uuyFeob6dLbmVJ9#?asp5|D5@2GU(qg&uj_= z$K0RRgUY5fETHiM&I0@=SQK8G0m=AyxF9L|)dDenq<^%&{T*%%shxQuH(QVt)`#tFVT&UUw0Zwn)w_5x;vxfT=#2yaSQ*Q z)JXwvOlgOoOSo{>t)9-DGLjWyGrWW69vUe z^{!(dKZR!42*&?d!vACq{vTgfqT!#b;5)u!mowi*6F`hD>b~>O1r$D;x#xK3`V5i0 zPX>IT=+!6D5xo!T3(ezCMhT+PVN9R3Gw4>1m-a5By|-8%H^ zUiU7A7;jk#|M3A*h57nO7c-2+J9sA58U5>(U<=BX9?(r zk1PG6dd}^$er)uH^3{9(ni!4)GTNUHGN%-+*KF3lN{@x79Ai0m9EPK_S~%<&1KHg~ zS0q8iaw{xKxcHbJo{h4r*qgqJ_8-3X-;g{1U8Z|VQDm8^^|wkt-Vk?^48-4a5WvQ% zAMaWyE@~{x!RCs{mM0?Urs%&P&m=)1zb&>6+JD{E|KCk(UO74* zx2omRQ<4?E4=&C;MqVvwA4TMSaH68n!C%LnuL2T_H%8JOqHjx)Y8InSp8r}rcCkEV zg>SnG|2rA}7zc>Zvde3AM@F(QYj2$nQzaPv{j?}sJwa{xH2ScV(^nWRp4j*OfbmD( zJQ4PjF3t}*zCQ0n&r-ITR-;DO&ph9d@B&BzKiKWu#i0$%{-?G2H(K)FR}BISdTkZ$ zoqkzcR}Y0%Xk8gjItDrv8Mf0h#v6+F-Tpy~=b;^bSkFWq6FBbyPs5LOJu@=RSC!T> zb90yF3cY(VbUo;_cv3xYKDU2k5dMv>gi}M_`H<$=sBHjb*;2&ay!CELKLp#nxUF+` zZvQ1JhmRHoJN$W`p~y=OsVd?{)StzB$Y~IOD&GF|SDeOQaT>gQoc}v<2ddDXccHr- zP&N0~t9on95>LvxP^zKb6yqWF@0uO(1EZuOVO!rmkoF9x>pn%qdkc3E;;$S+=wV^l ze{0kK-Cp#hgLH5RVDw!V`V(g1@~jv@qPHB;u`|%5W@Gem%1$J(Uq*j4X^vO z{sM#S#(#yFL2FZr41RFFeSh;m==pzn#P{z@K*Lh^aBgGFKr&_e!HoSd=sqn_Sa&A- zyC29zEpM1DNV_jJOQ(>|DLZ5&3LXSd|C;X-itgy=lHQSY_J3iT{_p?%--U~&QcQQz?W?>`I2(m1!ClU|V(5Mt=VomN-fflRhqDZ0g+ArKqrv*S zG+5evYX8fn!Gx|dfC?>2!%b#Gzu$@V7g~E33j1p_FaoyCdEVxrwfn1?C-0R6S5H55 za(0VkNxV-e*%5qNI9Rd+c{1)F<%|DG*8>*FzAnIcpKwiit!NvA4Z3T7?w#``z5hBI z{=GPxIZ%^T#uZwwj5GTmc08OJvf}@zLW>jnot*x;KDMJ9kkIYR3FFwUsozIFzYlnq z0ZGP|&UF@%Udgk>H5dZ$UX~?_hH49L4n)5z&i~WcRmL^JcWvD0 zkeY;a2}pyKARQtt+!7L-$`AzyA`BRe4(ZWdiijXJ=?0N55v3bO$p%Oa279@m_sjj^ zectE!e>-2#x&GI6{o{Ae?%x^PxT03|4F=D@asAIi|C@+Gj#TwMpMMi|9!h{#*IKf+ z>wrSG(Gkvlx+KuuoPDObq~eH46&{~#yL#1vy1@QrHs<`K z<8Y0$0H4iKTswDNui&x3n2M;V%j92KRr!IJ_*eGhF$)HKc}B}s|DC%0y^lJc1h02Q zR#`s617GiG{F!kixBlF*K3GM73SWJ&Es)AwhI0k4uMbyoDg$x^hA-54C|o^W&(#Og z&+*C0UC4e`rkPqbm}sZkoS@iTpUix7$rx4Q&gh*;N)bVqx@bNx?VnNJQ~tHp#~k`0 z#_vlViWe}iZ}K}a?E0?vbR|e!oaX9NjX#22U5NM`6tg0nO}3F9Hfs@{Q@QcIl`S3<`l~d2*+=_KQ!MHn^1Y` z6k#_=d$uMNA2!>HB%s4kQGw-JHEFzT^J$K-bP2&kaQHg!>gOw1fD zYIQW5Z!0iN>Y1?jsp;VKWX_R^ ziMbyLpiN}p4i+>^OxFa7+!R>?b-qBcq?b*a1=ogoLTfKu6Q^QF?+CyCo@O>3jZ=kf4^E06vrzWde!s+~U2%dCW#SAt^DaOjCNd zl?8vX*NVwQk79BX)!Pu*L+T-l?1uP1#$OSTTdRFDZ!7WLUC0^PlpXsudoPmB*^-|6 zxLw0zGd*(NfJ*BdXIJx##)QXv9yaheITqV>8u`R~zRyCoP=jKZ)Yj)Rm9hS5*tx~{ z)^e}EZnz7byS%JPxP3clm?z0b{@iKyGf%kNQ+*3I`iPdH3RyO)kU|@LD_atUXO7x% z7ULeVE?}pYX;Y8XL`Ee-4->Z3(~Zz^x$ux9DvT6OihD?M{|Pf*Gf#5 zdW*sf`x^J`sTcIMmi-1AoOQOdP9Saa&)Tirtyf1ev&w}(gO_dbKMaxBdI2QwYgWscS%TA#@#687vpMPe~ z9iCC|))7@;bsRSMuG5kx?zLrF(={*O9@EjXLI<8=$Vi0&EGp?jLC02I{zM9Cjz#)_ z0QkKjL&M;g(ZOz@H|*|UMKn{cVjMy1Mz;vv_Lq6Zb` zHb@}N+|xU*VXcVF(R)^LR6qfpKGx3D7|*_CdGIO)D1svL@@i`J4YIR?fMwxO+M$V2 zfG3PLl%&J=ZI!qtE6?w+lLOf)OX@-XSVN7@$j8>c!H0xCooth$6)c#(lf59yavIti?;%rohPu-|UydnhYy3yO~7*ay`yf2LdxD zbA&f|xTA;+(h*V~CH+8Mjn#JlFH^R$uPDex(PBlK*7FX#1B>C!_Czm#&5n0|*f|KXi7ww9VW1lVGV{+G^aHpXEI+vj(J2tv-4AX7ZobDn<~kIYpI z$GU~1kYSZsOq<_GE&GUJF=g!de1;4KtN#yp|AM4@BLg_1$@it(q3iF{YLMA^*Y5Pr z-ZW=)NjM0nJH;h03wk{9P}J<9ppy;Kb@rO+04|1(=iAAE=-FQQ$>yqbAW|3M(&&328a;#7 zUiLYf)$qoe?Xni8BbAq1Smkyoj^WeO8(icdvmf=u%Teha#W1b*XK+IWd^6U3HxOj) zZkW;8=B7f1zh+W!qEkLntR%%BpbhNtC+CiW(b{&zq31Fd4iv#c2nX3YUCIv`VkcE; zMG9g!*r3JDU=r%Vhge^0E4?cP1?g^s1D0itONTP0UIClVmbRlF&4Nn+)I4 z#s*%p{yXW|X76P6fV*1e&24<3UQuW^C3I9i&6HEHY|>)@GN>+4B*G~ERZvx*$vpzr|3xyZHZE{#%V3>{F%D8Rnq zmnw8${eXkbhKHJvHc1{9_xR;>OjouhB@=jw6zL+RNm?$xEP>!UPRkC`Y?OvcGptTg zRh;WVafcIfiRf)1=^ir3eOw1fDst^?DGx?ub@LymYGYVSy3_p2d&FBQXw2fAW{V7fRAr+sm- zH6jg}mW1hSgO51{ZUFd1h(2<&%|KKn_h(VRp>qgH6{{wr)Ig^J)KWT1T^Y z!P1g{k(7DdhIk?8r!_Ec7*UszVwVn%+Q9HL@F+hhOz#BnXBcu&8G#vsAy7O%gG+|? z7;z#?bLlL}rlsRa3kHWg+wT=$>5Ts9U>w}UjD9HTAiEmw#eoJ@=yoWS-vNt$YnDB+ zE8A!^&;=-uX#A9kyLMB28CF~=2ikU#)V2>hxW!Vzsh+8l4EMz8C*ZNPK9iVLCi>iB3W?(ilai82n%3o2srS71gNUyOhuXLt9@8@rc3ok z5s+$3blh0~)Be%oe25aiV|y84ZwbEJ@c--I|I&~PV^q#3-Q(zDrMtzXbgebx*y2Tj zEN`K+HryX&u3DDsW(!|6C#|s z=v=LR$g(t6j%Oo`C7_xDXtpWViu9d&`3E!kx)WPqQkccYG2|yOsA6h(0Fe7dMHK_( z%vE4kLw}7_!)YHkW5l`Z+HV*ehn7QzZle7Po7Q0Cs~yN^6)ueRK0XgJPUXq_bad z>q=W5ds0HmK|62OYhAH#ZnL$m6@y%{YZr5hnilQ=jy@l!#nyz!=0)^BQZ!D4&2kVP zn2%bQJ?oY4#Qu%x_@^CV4bm8;SL8ie7UDYgf4!??*Z6h?mSeVc(?aAGyt3QDR-Hkn z4r)tP^QiUPR8YLwwJ*rBi@)xC76w3*g&(1f2)@>10*$FvQko3%MJ9)cqcRc9d0Z67LO+Pz9y z@8{#?xBJQNx7!)KXouJc$>*cfk#`c2{LUrl9V;at+ObXmdpEkK{E9rm9mE|R@JBmFef4$3XxT^i2x4u9A z)uf%IwcdQKw!m3x1!I}2N( z)^iMUb2NMSjVpE6pjA$@$33~7+1T7SH3s)zc@pPxy}pMGt&5OZa2<2uo`?QO>W^|z z=RzIrpiWPjhev0Qx?)cbZ7h^oG#+f{*L!s19W&m7xLtD126S^n^TwQ)jJzCgg zSN>hH1!VN#mv4{TNdu2ryOzQqeO8+eA0Bvpp(E@Vx;e?r5X(JT0aS4(Df(r!lDRAT zDwlxwWasTvKC}f0=0xQWygvUkKWlYuP!7xNfMho?aRqha4P!NQKHl51^&g&BBA-52EXK#OV`Hn=B7$jUa z*?fhap2ND1pR!0`h0Cqk4^qAN`H^!D@;A;QCUu-{yvBdaYlAc?|Mc`UaZ4`Ab$_LY z6&fbFU3=g&W$tau>h*E{-yJ{xS<3lz5;A{AO@YVtU7UAgzme4+G^wjnqw3&NY}6|e z?88Tf-0npmPts+B*cZlM3O6d;H`ZOvbquXXC>F`RD)2!thZJcEO4@Jem=X;S8EFR~ z$0y`EQ{>{Xgb4B=t%g5tx;my0w7RzI=kA%&(%p*Hzqn9e!6;?C(}x@$EODtuZ8nsN z+&0ye_TUWJUxiStM<5@@%JW-WD5VbJ&Uh{;LdTeQn^>1^H$=MHnOEe#GlCrB zBCwZ0OdoH!`MX41Nqwm`dVnN+``c{WF5!>0U)$y7c}~y{icZB-lYB!2T~+)?rT0sB zL<1N=MU8`H#e}88lsx9zSG{#gO!c)~N@-qD>amzV<6#^@4bk;dM_{^%ggfMFu^vK~ zZr%!nY>el~q;#)Vr~XI~{0Xw3PP(=h=Z)fv)|s>ow58&oF~1_0|9a%HsE{ZXD%OzBxbD}l28oTZ1X5D#B_65v zirw|PJ+%Kc%5{OMqUuTU2~tGdOPwHjJ_n7oKUUH+R3`mVH*C5%}b+{3b_U=*vz+Rh`I!Oi>A&}W&ki2!o@d&R4v4q>rYZY9bgGw6`#i1q^vFVpzl@zr%p2!MA z#PgX{uR1|PCccXx<)$=hMue(@0L^mKJT2G_PRQ}S%GO*JkeBiTnsBdUo}?yaLU)oMEJ7xOnh!K zrNc>s_mORT2GQ8w$bygfZf6dz!qrq~SfTf?{eWyx3?-sX?`-*T#~D zL3dq*+N6FfM<-CcsaYmngX?(Xgm2@)WYX8uTQv?;&V# zw0Cu-n>tG9y-`(B)GgS;*jVU;L2!#FK@nqPZCW+ouPEWaopfDwUi&&905Y9_y&SA& zX5)eF+G<0H!2ARgrWDe|-2x8AL@Rzx@&bck{)R*?oHzIj-6JeK9E{rdbz^Uh!2)@& zt(ALTX!yOH+Np)d1}woLBAJ`#R4yVOGN8O3x=$Ajj!>zZi%OGZ$evUK`*RQ&+Ne_A!>*hl3nd(rnCXnz1+#_$aL9PE^|Yx3++pqx&OYSBHc6g-foT1y zVMGAM*r?Piu`gF1EZ@<_MOG7&iSYQ3pQ(lB_*^C=sH4!F=ffXt>wYtRwhAsY+mG1` z)vnP_YE>h>8k z4riHLOU~n&XxydO>JTV>5+I;p3>_-_XbgmE-BMPu<3{-$z;yvGM-s#UZxYDfV@+I2 z5YSyj?iTk0Kz$2|Ky(^sO@O^M7;2m@;gL#<*_Y;@ z?p2Lob97xrcJCG4oPp%DUPX7uzcwC=pOm@z^n?Z(;U|{tNMtj@3&}~k`AVS2eA>#) z$Aa^wg|e}Yo`=B;9}mw3zZTL?0>hsuhS!)i`GxW&kOxx^dW|`2!@^CP+3Y<7*$z&7 zWlO(>ZWpz62T7MOW2cE3Q*o7W-wd{KgY84C^Rvb{@d0N2n_#|jXHHqp8g+EhCD)FC z-L3HlAkbEGT*169lEVZlTR^|*rZ!&C_5KJ zHuUB6&kREE#%}Y}kl%NGgLThWbuYs%eql^tUa6=!XXaf*Png17Enz2T%%^FffJJlz zrvbwRVY}_I%#8jsrd;5gYH+DE8!q$$Umpv=7m|o~ zw#{EkkUGMsxcxa5fdUTTL_IiAfy`*o+r9K!w`vLS+5m9G9u+09s2;Bxyp+J)uc+K$ zD8Yr_P}qa&Hz8Ueczfg>h^t}+FCdVD+`rd2`{C$Or9R z<{LUYoEen)XA;u5gwGkG)FdfrcjyXezxq38Bt0Z4F!0343m{jsF9+DSeYWwp-HecH zBNwGlKcOT_QE(*Tji!E(FiLcihAyfs5-nmYVpJhMg49l{kZ+=VPQ)DXxngyKedFU@vM_Iku{AU(N8%`e3eo!$WrMnV=E;));adG!n|d?MUItVEAsq}VbR*q z*dVjavrN7W%hQ$6W(LrBirjAI~xn8m7#5-WubLeA5&K-b75l+BPCBr?A03P9%~tV zU>9)?I)FM4nZx`^wq1$0au4e$5JP| zLBaagdZux$!E-sg0budot7hoM%9c?)fxZ7NE=(aHPRhJlq5W4)Ria(PIqMq!TDaE- z0m)92PI<3Mui&TUC)Hb=L(QWNwgeUjb}5cUqu*8+>%T{s=N*a-bGMwy)eD6SeF|v{ zVTag_-FIwu5OxSC#V{q4U6Riz34fH9hL{aKt?TrAucrI|35 zu%B>&Ti=C@+mnaE&C2EJ&<2=u;xqfmgyWpH2BO1w&U&qbtLCFsql2RWRb5riA2%g!C22({7ag9a9h#QlmV7hoCE>+D zMdHzj$nh(a&iQOguFyb?m-JbEawIQR$s}MC~1hq5Dyv=)C-|-phUpR|#u5co&b4 z<(6Nlcc`D0+iKYBy*4JOdbEzzl@=Xd+R5%Q@5I<9Aa7&aP@VT+cABSMjyKx-V$pYNVW!o{z3vyVy^x&l`O7FIz3? zspfgC#?0P~%n8Ae!ZFsY0m4P`@S4axC4c0c<^4T_3M;#AFqaZ$=!B5O-6) zd7W5XOzj)T4gZWM__*N~qva>F zH`_LoGDD{jpED}NHcMfF&zbY{p##^VAmjLZ7D?T^R^A$jd-9V@CBgj(z)m{ z`Zzs09+!SnwP;XgTW`(hICp*=>GpiLY>l#T%$LK9&s*Y>ckTq_^~+I{{3hiXNP;^XqN_(XFzQ@_QNFP$&j zo#A8ofd6vaE44oo5%9@GIt~KY#=?metoj~OI6B-M)+4@fL>g#-AyVWn0T1yGFAKE5 zsD=I74GT6U3kDZxoP3nV-=UE63Rt6rx z)R&mJbw*BZaQC^+9o%9pZT)%RbBOtiUXt@K_0H5y$w!>|DjP%{F(y_}ssQgGrR@v` zhW+W!FSxV{#RV7`c%G%2mW!6W9IvsxEu*1{y^$%Shphu>G#D7a2QTQ<*3`w2#KYFc z&Y9Okfb3r*ctPiXE;Esl{A-AdwE&rxyb_71y^|>k2O~QpGnpU)2?+_mlZhFxikQTI zkc0jbAhU3Bao}ZQa(8!UbZ29g6FUL{KpQyVQYOIuSrXV4mgtjuiO{Qn~Ozuo$;CI1_#_J5Ibax(vS%Kvuf zKPdT`{&4W$IQqA^{&f{3FF^!;rvH?^AcCU(aWY69A1%cc)j;16e{=)VoDArL`rqH6 zb8u?Q}06?_g2o8(5p+%7!ys~gSu*#5e5fbGLk$S?vJypcR_1l<9+?S zzBORkx!Y&Hd}7&JVBuZ|;5F|h2)KXFaoh^U$&+y4^L=7h$m5UP8IIp+KjWL|f02ct z5dP~!NdfBDw;BV5-Ao4f1hBt7JV=BMHy|lsNWn2k{_+UCA`>?3?igV+_-hhyj0@p_ zzAjiPq|blNk1)iZctD?@XQFx6|3V6zfncG&s0p|sP*MSZdyGYcg}z>q0eqzYnnbDx z5**=~h=c|1Zv_ofNeT{#W=}ltG3l?>lMnz4@!?KD*a+=^A!}+T5Y2cr|MjQ8)aajK zs8H0W-T?z7{|i|w>4Rv}aXk0`H~W+bPHFKTEK=m})g$$-14P5bbTyIww;Baa&X4x3 z1_+K3{P(7iAnb__G9dlkOs4;ZQvZJg3V{0mWvgvxxk?*;4ct=%S==2m~XGv~5|i?Qz%&46O(+bdfeovk_sVj5jW z=ogKrK_Q0K-z1DqqSTqw!v1bAeN(|Go$Y&Ligzz8HK4I?|7l?H={*1S_s~xR<@toa zoMRSVO~>&4aLSmw%Z6IP=hm!D)Ch(GjV>@N*Iq2QS5~Q7e@&~9mH%(Iofh1m`8Jul z3x>`C7b^wt)@5k^3BuweO4bkW{iA8=1(!?a>LJ@TNPj7_)C}Qbth;++?ue`s#m(Im zw^UrAXnl3~*^DMgs$Zp%KjiT>=V3b{OR&uW*}i*0pD~4!90=8-;S;9*lJGMKoWhkH!l7j1K=7VqJeu-X zkn^n#69fWlK(P64wLh?fRUw!1S8D$G354!*S9SH%#quD(Wr=C_^jG3i@&zqZEx3@y z!65nvx6wH3$^Hhn18EgN%V2f)ROml~u+BhmHIweIHjtV)XqobDb<^CjT##g(x}oU* z&L64a{UMwvHW8=A0P%`-WK~1|cPzHTgIHW$h%c`G2GWY=Z^VA1#J^cn_!9*v)WFbZ z$8O#Jqn68RbXlptiXc)$L9C5A6>I&H`4dGHx9QT;|DAL!Kuprz>=|y+(t(&vy&bDv z{W~Tv|LD`9fh(AmQMvu_`mGcpXCIvAWqzi{#X!XYdHC9nsi~bdpd(wXbq-pbY z^)wK-wBDB5EPoXyP&@zGXdijlDp3ABX?Xbr?_Y%^!b^WP8fQ+XEC)I0k+bw1H2%&d z%OrxHPbFl$sGRAKk=!rW@Bf`lr$Nt`&aV7J65?|}pP)VDANHvAAW9T+Y1fc~%JMz; zGfk6F+5TUm*FX!w5UJXW8@0x;%Z=8W16geNe>O!5V_;6sN1u9AI)z+b z?KV8=;}XSuiQHvZhjmZe#EcBB<42Z%ElmXP&ba@f1EGce>t4u-5J#j4&Mg2VZFM17nH( zpt?8gKa@+vPB;D#^1S*mJ5whT4AZikG#eEbwD)f=OTR*;aAktVTBQ73N!1L}H=tdF zHgcpT48){T*z^zq|CIt<0C9Is&^WCpf}QbC@cLE+GDRlK0=amo5MgnQJ5*x97y<9Q z?UAWMRx~HdMuMA0;q$>U??dPUT}^;3HV=r z@9@TCv31l!zQ^neD+M&)A7a=53B7OlLz_haO-#XjfNNhYgID95B?6_4gJxPn@mZV! zJnPuim0YX-TDxnZuxcex@L;Tdjn8>Y8KblcYQj%uF2B#uwG&Ybm_%`LyRfnOo2eUD zI?q`FlfuA3M4A%N@IOKP+w>osIby^^)Ww5S`(XH98u560OQ3914XpgIzzXG>2B+>NWfW_k^TXMCrY_Hj)Fo( z#zF~iO4O@_Ys*-Lu{Jt$n!%G9;)_vZH75sNle3KZz%UneITF_N`m`%MbBxGNqhrg-3OPpPo_%o!ER%)?|;U z3#6^cz|OuZmK9&akTKv3qqah+VSkvER0LD^=M>3b(8CG&)oIk1q*bIV4xYLYY=Gk_ z`;5lQRsY9x5On8f`Md>tq|P+oovnNqzutc$J#R-F0j!3&5}$=sJ4(6$b0NyR1=FSY z<^G9&N?U*2$3=Q+1~k7XE?&N01nT-bQg%H`L14r_n(}qW9nGPWB?6<}0urZheFh#j zgI8}{ccJP=ro`?p>|5ZRyDPQMXDkX0ar8T(rw2^OPU3JzJ>KvUYR#>cu4k0tctXjw zHdn`s-=zJv9@GK-aXK?K+Sg_lD?e;Q0`}2Xy$)wtOl&uTd!iQSRri?;D!Fs!Dm+6L z?edrsyP=P8Ih^2~)QxW2jiz2iwt8bN4rC~tDOKj+sIAuuC9l8FztYFbYiIx5V~vsK zEKU^pBtOHLQEFA%7?YY%Z7*}E$(S&wfpMVDo2N%hycECY9h@AYCKf)aS&fd7%@G8Y z3r{xnIea!vWfb;P5Ub+ft0dX^y+bb>PQf93dPy`n)$o~KF~I=Rt} zxzsJ;+aJhOi=Kp^dM*|mgEMSA|HD`!*S^D_^U1xS#ekA4K$P;%Z|q!Th%{<1A*#Ab zYeyS{<~Ux}b7Zjv-O|8Da-PY_pgdm8;3EdWGGzB!H6dpi9Ug0|zqa&tX6JIvphUUq zS(|nAMc9q=m*q5+d^RVtXOt>%(ZH`2?|7-o{t_72GvPo&as zOuzO4OVKy6*$H{IuuE5K6`Tg0Pz^RqMCk^;#ry!@LFum3ZETytki_T&tO=IljbPk` zY)rDTa|mXte^?H+0LYKYMxI48y(16D5%*shit2{qaR_%*KhuT^fASPddHf zVs_b7GZB;LfsXHH$Ao0G#^zA7%%2T?Wh6W8mN4uVOYnb~8YVT|a4C6TvG3kmv0WLc zquXe?_nVw#P+R0eEUX|;Nfo32^0u$Z{IbNZsEnagw7Je_FXDDWjOAEi%RTBwLOI+R8#aL73ah|OxmPE($5a%aFEBT#bXHc39F00Q^PcB1r$&#PQ&%>aJ4N*Dr=*Q815S0y!;h>OU2k1@xQoRuR2V5f$UhaL?)+%61NHBj z3%&Db5P7wUD|#mOvLP_P7Mf%%TT`Di6hCvzG=1`?U3M24JsA3+2lvw8FVtkef&PT8 zo~)C~Ts8{z@oha#-z{00t>TpHE zzP3TcT6%^HdRN5E+3y5Hv3LOkDp@&4x49+1?F-0{GMLSzr4|*X2%|#pi(1s9hyOsMJZzNojdHj_Tg2M$G33dDmtm60f%Q z*6I6jF#H2Y(&!=wRe;K|zwo`M1ANc?lcM3qb#WBUSFfjq2abD9m&4!S@)(%Nh!GX} zexHA|u&Y(wrYdzy!ie6Tt|4+z+u4oDXd!2nilkml1w_BajpC3fPhYj|*=q-GDcWA) zuflODRZLbfSz6ayKzdC58dP(FVN{23%B39HMe4sA5acOTV?&{;S{^Xe<}7Lu_hpm( zbk2n~PN8!S8?gwD>Do{L|J>GNraye>|HXLhrIx!oXW-@(729z2sxpv_^E6Dn9yX*i zQ;f+YGiUBOA*70x+E;T4Ri=I|eYBWSgL2G>4P+lmN*CFNwM$L5*{m5KT#@YKh~w3H zSUz-$qta(hR}ZXYysdt(A@0AW4*dp#gz_5uAvUV4%slgsAto>NIK!El_^nnK=b-fP zlq{FQRlMNMSL+_pEK|Y|;G3yDKba7RwA)G(Fd^H#^M01Abos{qcMtkWH*Jn8uIb}O znX07q=4b!2;W`$!nqMaz4<>HSyA=EeSeUK4yClBxF=x1r&0Lb{G z(&-z7SMuz?>fsQ!>xYYQxk@Gthcc$#D*JTM7xqnhFw&43*nT>)+W4R%H}KNgO5Q59YVt#NqgWE!C1T1 z>){lUHA3YdLtYn`Us-%^&%0}m{RMlwUPuO7ezY9FuLgiGxZThn)~$JWgU_``ducAc z?!-$J)nj0Y%^rm;H&!NFb(S1*6sa#N${d+$jag3;E(w`^y?v_0raLU6+Y=C1%Zlvyh;!NHo3F~5^E6WT4_P`-?Av(4he2G}Cf`b&^q9{QhgI1{2EQq2D%M0k9jy%f@VyI$U}1fBBo6rIJSLu2!}2=vh?H)?g0y5-^y59! zeO^xN3l(_TS7Lp_6@vIKdzkZBcTRxVijxDpoZ&_X%%^uvZBZZ66HHo11KY7r@6blQ z{^zao44J-6+i&sScco~D>t|yLp*2zOOXm6E^kgYLi=bCS>@+<|5&fvX0T4#WZE6)F zxnWpW&6T~u&I@5M-LkqpQ?SCPe=vz>HZpuHvZt&v!v|2%?7AS+DSQZtWWOuMXF^ zWb^dW=~FWOy6_>^vOal$B@kGR*n?fx-6GE@&!g_7Tgln}hTInz^S1SWV=rD8jEUA97% zUQ6yLt(MkRC=KM@GkqGp=lJFH+u1T)oaOwVL>lOOYcT;p{=FCZ-CPFI|B*v74N;3*C?qr!-z3D3ddb%_F%lr*+*#wQT!K2$~>%E?H@?i^ZGyL2`SK z6CO8MmwdVX^(Hr&C}vxv6reafSr%N&gKIn?OT5)Jp2HxD=ybO=&NO}55AZD2E9X2O zn3LGqC;VNjN-(f+p)~dqy!ditzL@ptl3=9b5+-)4;|yBrO%HN_?DW9&hjBkn=Ey5@ zpcA`I!0xZ~0^1#om!Ee^xfUXRtM~PePpi)Ol873V2QNmvcV%$bR-0dJ3r-4U4}MuJ z))4U@EMAooL zpVvZh@0ag-rk={Q*x&CGT#e83&PD`}!>ct^8*FAqu-P6|D=_Ms%*hOf?sk6J#urH} ze>MIWHs&}Z5DTP+SHuX6q#q%`S1yw)uUa0A2|UfEJHm2jP| zEGa3A;N2=37+8VP5nr0|eRh+V8ci$%U7dNc?N(a{{knn1jV$Q!8t-tq4BosjOMpGn zlea~zHaO)EX?LQ4~`Zx=vpHX=bgy*mRV{>EG_UOUq+Udc?fVE6&vP+0kX3Aj1@;p!qQDsJR%TTN>h4=bLHti0gnl5#EN0 z43W%kCC#mUlv|SI_>V+GL^@}=Gr@O0enGFmLChrQC&J4`=lk!e^8!5Kh#yVc<0YsZ z6y)VrUkkG`aMx1~zCYa_hoYv8<*6^m3-Xv(w}|`r#_ZS@)5mv2*kG5-68>!$kZ9WcQpmEQzdLR(b>99~HtGTIB=G_}Zx3az)7ylH;s zufS)6w}&|>rYb_}>r2$@U#N`$4lG@*z6su}qTC@9F7I@3G6Dxs9);t4nO-;I@~<2< zatxjVxO1ppRh*(!ct_e>SKK9A_J`X2rEdjv z>gJ5N$alVgqGo?FJ?n)kS+V^->vJV?-IFoZauV13-B^K-sjCCYd7lZ5uCT_w ze;1K=GZXrHszW+x7h3NN;obR7!hJMEvJ>q<~ zWX>0)lB_xlh3U-acFHZN_{?ttUo!uqfeHDG_k^BJYPP!;?)f+D(ymMx!*ZPAp6||O zlNF^P`b$1C;+xn0;}`wji<0RW(XQF=T3+#POedBrRJdY%CFYwo`Q6%AKAZ{WpJljQ zgy_#@*!s_S>N>(}&W}R1(ukTo>L^xf$bZOvjJsYHYaw5$wb}n%!3Jx@khsI*^`u7e z22hiGQ$ik_#R{wM*9c^F;INv&=%@P(Ma+;3H24^AnGIoNtcXqwlf4~`P3b?5KjC9# z+vBCrXLs%fWcw)k#QTNTyreU*6;LgihPQavY-%MW*HI#Ap%VUU5u5#CMgySwe0ld0 zs#VrH-Y{exLb^jFc8{_?Acb{*IQ61LQ1=7tk&erkM}q!EjBn~gvk)_qCOfR4pDT;L z^b8CWfqpPfUI&euCWFdA75-+0CSdecM(j7OcMqtP5k;%{_#?DX+i@n;Q94)i$iua) z0?{ValjstZ29YY-B7FGb&uD3jb;}p!4fLsaVdi&aF0hqF*r?VIvb3ItwB&iocG@F} zAzD?>KE#A8YGztE`20(QKDQN)!097Kn&=qxV@jg$D$qEx+vb;wr=2B0LZIyFjODy{ zOUe>oqn&M+hn?=><8*M?-I;Iin+ttLGn6Hx=?#Z;qWOtZL&~V8ezVr{t0t5DKu$bl z@Rr1rJkzkKe;0hE!b=2}GtMStr7pZ?>=0XXF0c&O=6;HWh7O=;I(-PA=~Ha4$NOc& z*)Q3hl*5xnAF5z~a&<%VmK|XuUVO1R3iwnnVjpbh%jh5nHFqf@GB*k8VAoB$+y_b{6M;+t7n_8(R_!2KcE6eDq(e0_DNBQ2!d@qQx zVlPyF&RT=r5a`#nZfP#L7Ea>&G}!fnN*XDALa(hzM@C;=nj3+;m+~jz*^2vDfPOij z9|udh@ADli`r4!Sb-IDmx77z?^k{!y>&JF%ZeYjtjc6$F<8hsTSJbO$3ct%uu zC@^oE76 z4j`zw^Nq-^CdA7k1meGMJ3j2r^-8%QD{)fM*4NlmsVRrNat+51(|(E()0R}q7yE{q zMc_IOYwH3opBv-$E8_GmKC=WL!8N7gMg*YBXUZ_-xro-_;-ttyv|~0Y9A!&_$#ay! z;U`UcMnXg*A4j@|_WNcOJtII72(sL%| zy`c;9+=;mB#O!8ZWvT91Va9L3b!9VtqxzzqplQTqMl~avp7w+C({Cl=A~v@+ZyW~; zznwmOw;^;toqrNseLFO81j+nrXD!sfm+ok*-83NwxK?q|>*ClHSZ@+A<05&S;fp0? zfg`8pN(bUrP$*{nhfw-N)A7^SDWGR}%VS!VvYd<^(}q=w^Xrr;Up-fnY&Aq8*p z2DvEfW1}-3%?g3D*Xn}@R$Kv-Z6p`eCh6+n)giU?9Qh1pzt9tt?+%$O#`D*O3A=}8 zydP!G24~M-`7SRyoonb)#LOrB47IrPRlS)H&b70m{c4x}MJnzDQi9I}q2?TirO{Nt z`CPb(CzJXxO`7dD;(WD*@bsgXn=C=EDolQ;*ESa*KDULVbRzRcUIiK*doDe>!J}1f zFv@gW7hJCT=`D9>D!4vb|H%t3%=n!PvUo(~CNmMlNC@AYf`?r%bZQ#@G$<{Wb-hid@7I5x6(w=?>vy=28AsJ0^zMKY1i-Ghue(Z2}pFKom>0vvXk z@OQ|lASL9D^|Ti3N49Oy_4h$Mt74-fkZSqSIY`he^&%--TP{Ru9oNN*X>6MZMi%-S zoRRN?oQG_h9OOx7Uf|t6RO)-h+~sp%iR8B%`+JEod0_ip12+0yDPnp9RH!nu!Sk63 zEq6$`$n#l^$8e-v;4VO9UJh_eVZZ4hgF%@9M@nrH02SiG!W;TEPQR9KlGIBiJW@%h2cg>lz z+DHs@e-b68+*CKc-s{Y?Qn_gx{H`NF{*V!x-aQ2c@lhw96muO;(FhF{awiN`xSdiZ zg5102y!ew=Djsf!vh=#gyN$N%W-3_%%-rE7Y5d znHG*qdFu&Q|Nh}F$q?D*wHSupdM*jpfn!Z>OH{p^wq+Zj_$6oy09$eD+dE1>R6MtA zb*QpnAJ^+!oxEp#yuF}HtmA5Ft2Ock=;>%h2FQ1GzY}RUySyM?WVF4)lFgPo=Rm-G zYDWE3F4Rw!k63qpT7$QUhCmn}c#ni-kF!m*lpl>`S&uj$E&xwGKB}GOYI$}UnCBZ- z0OT0Gc)YHmvt`KhmiIn?RH?aG`VKxW<4I|P^N{d`M;v3M+?K`y3j zO)BjS4r$ds$^685zh0f5UoxI3L`_}7)9rNK#23^G?~S(Og~NC}G=1(oV}Qv-Xeg78 zlppr2TFF*l$Hg#|QEU(@b?0k=0@J{fAN##Oj&H7Wjqh_}u$ApTV5SQ#o>0Tu7fX=l zNVma$;g?p|?m@o)P!q5Vk%6Wtjlzm)e1hGcD9dp#O`LSN(H#^1h;a-yY1Bi%L#YV* zX;`flRT35`+KJp&^8LW{WaX3Ry*jB|Cv4syh}jQOg9XaJ@{AYQ=k{MG4Xu(MY zo|`K4%8!B0gC1sHz6X(8*;1ZfG-`_rv{+vLYWMG5NRMVZ7;k1t)#}f$z>PcJu!*^$ z-rd)e^=CT?nRe&hb~`3P?OTMjVr_AMZ$1-(X+|*je;^qN4CpP8aX>Mw`bn%}))n>J z<3_n?cq-OjN;uUJ{c$!twWI&CF&i=+%k`qX|8X?l3{j%%o>fM;?)!c*Q$G;)7soHj zsGX{*RmEMOu<>f#u+y&*EVAqUzUf>|p+Yg5k}u%#UBvwSUy0oKz2vE5OpS!Y6FuH< z4K3`-$57w%B2V6~?v*}zFI@}j#cXUmx?K1ObtH3Q+1hR#F6Gk??TJn@cV7P5&$K9? zWP>^lkLs>1`uYFFdSpj+JzMCW_ncoT)XMV%p zpB_|bi@i)=t5K;w#q_mwp#&?3a~jQtEQkiDK#E^<2~v2#CO3wopS+#$K`|)YMSm0I zp)bAfxD`R_8lzMoT#9PlK4w0RS>b%Bo?{D&*I;uG1d~d)W?$%#VDS1nmEwnf-aM0^ zAJS?mV$BF&uhxg#NR6ghMveo$dVd0um)30eIAwslR?0TLBPr(tM{)H!R+iBu$Q&_y zjiN2FiLkQ$aofwOj$X3n3s$Ki7kw5BNx_SbW6YY?s^fwEGu3(CwLW#EwdCZ$8BG%_ z32JprMuaEN5sV(h5A_B9RCm6bo+c(s?y zcLEq@n)3U5nF+UtuF?wsBQH+EkbieZn_qOg)%rchddU%_E zl2_F<@wFEt=8IjJW!#aG_7dyj`@Ua?)V4ix+JIFeF+Vj#%-piyx3|?~;U_2PU)#wy zsL2C`{dvdWuPd7dQxKi>cFGTj?agZ~s;pu9{5B*tv^QYCcqw?+df%E47j0 zQMAgBqqw@TE>9uguB@*xR@9=*O2f#d6>$R0W{|akqI5g7{Vjkj!1QH<(X#Ds#j6|7 zxckfM9dU(K zeFl$??%T@xJzH`rYJ_F+uLj*g(TkTBPMqisxFnrz6*1Ki=DYX$6ouB5!K-y_VUW>bE(yiBW6P>mPKq_c!2d6;3p{lcsWe6w+Xq>K_@ zR77KfMjVt4bgf^1pFaq(?Q4x*NULZb7+)dS_x>hFc1(*Y43vR4>*qAtn>6@Gx6mf2 zZOs>0K~H)x;g0}d@|$w9nT^=O^#lrt>t8D&LkYaDUTZx}kjb{)Bef%<#kUZ00u>CTt8r8Z&kF{*;xMx?p|-6DDLL~qx5B&Rfof;`Dd9_+IYGTXvR%o~RE^bBXP6D$-T2fW~%`@Q6T zP4HM1a;IdJt{LVIn~N6+Sa64q=juRV;`a=uGBjwVij8OLHqY*)G<{tGl>=Vr8tD9R z=tg|B66pR^wI!v0d&tcRJ_ot zWemLYJvO=$R3u1r%%F*{EN`*JYrqGfwuj4Po-hh>`%Wg6eVi^}X}?P7NC*AS{*v-k z^WLqxhZYs#*uSwXvcd0i{_2)%V`Kw!h~-&G&_G^yy^*eKsSetT!K_3+QgDpHKbbNT zyWD>dYcSjV!-;_3&g=DnsJsJfUYg;&S*@U-o9$PXY)9RDDX7Ey7Ip3^j7T$2n%<7v zmD-#3`L@CJx7#|+YF}?5Q=Gdw&qf}?g=e;QIzKi&uIRT#>ha~3x`Dau-XB|D8`1`i zPK_S;ksXz>r!N*!C&0tdfv??#8{<>!kpii=DRMBKRNQ#8ck6bel9Vp7Y4Cbw3cx}K z;4}RObd7??%y{~9pq$bdA~ed|dnZwLWO-V;)-FjvJMDS7sh!|rjR>XQ(x+Ep+qwGt zI$5U62PBjmWKbH4X|C@lNM>L_#7T`yJCZ+|DRy z@_}e+v6(n78!h?5d$D`LM8H;< zemqm(I6b<4&OUT$pZF3zKr6aflY2TWbNe$F+Y290F@fFb5>}-SmwRIcVz}FSbn%-1 z?X=j$Bllr(QCY*ma1Q11NJw6|>1V~?HA2{i-EGa@uAy)D{z8MbJ6mrOk)l@yvz4af z8;1Ai#D!tXR9FVSVWb2W?Ak9zxI*WsyqYbS*|Db8?-XAe1(%Be9r{vRUnR>M0TlI8 zmGD{L4#S=BG*IhCkj!E?#qE75`T0$!&2T(1SDFb6mEY1%>A|!5S~~$|-|4}spSiuP z5faxeFe z?b!T2D?u(T>p1|q40RchR{U#Laj@XAxm`hNzLQdWI-%4?6h`OmpPkAqpe}7O`!gMJ|gC6u;j^fS{8mz=M+*hqf8 zN_U1j<0pH)gP65@bMGNv5WKXaYYY--k|CdnD?^rRLDAO|XMFAn9Axdy3lnTH6gtpX+lkTdj^Gz{tb{E6-XD4v zGFC8Wuzfh+lqh{@xCZOEI)2QEwmZK0>tb_L!KCY4(&anZ7yA4mXe!15#Ow#-PH2$C}_ICGf3>vFf+xRbWTHe?N#Gxw7muXt(Z_bJr z?xTp$GJaMbO@-PzrAX?Y!yh=+2_*Jvh4mG$<%!6Jj&_f zUpW}BUz1*Jj@(qZyk_GvoD-Vgz7|Nt{7Szi3hWOo^lC*odA^!S8&RP@k{D2WFY-I` zO<{NyW(@Ra@LW1kL-38yb5~z`ce*zF$m29HwG)Le+FGM3$!_(*Q;7GHn*#7+KhW4M z=w}qBiuq2!ZV`}@5o}6z+ zo*nKJ_ymyPU<%3tvvAV7LZB6etRH(i@3M$Ie4f;5f62iW6Wf-2jfQ*X0w6&hF{2o~ zIMouX^`>9@A}qDIFqZ6bZ{%}jejf?r2~->aN_Lo*AdlKNj z*}%!HJlorB0f`IpVddK`B?|!7uNLsOuAWvrSZCpi^dx!e*l1oaZ7uFkHZHDn#T*)L zIO{qBYk!PE3&yb^b;Yf!q(YImMRt*wMYHvjeiJsHqz!muzQAC4@22$^Ye^GLy6!cv zag2*u(uyzivV29*Y3wyQZ2s(Wy%k5Iws!23$@AUo(1Nu?*qSfyVY-*iJ)!`4;X2ES z!cWhwS`UJzIuApeQTY%XH2t?-pS86^eDnFQ$(pk)(pT}g?#`&NyHJekhrRU-3JRYq zlf^O|eVKc@_-geC{hHQKaYBZL6S9aA`(y@}ggRTiRD@-v9 z_NWiFEs(w+5t_iAi`2@o=1=utTXOjvl%kx^2nYy~&e!Fv`CFxR)+ z{Q^n$)&bY^(tS#8e7r~E;LCS7E$O6GdkC5Cr|meYDv9Sqxp0}<3xC-pzjke+%``U3 zyh>I_mjef{w8Cctlp10sAE_CBnM)kOAsTXrf+Plr(-AF1x0Sbk&k#PAh92`6e;#@6 zC1CSRi3EUj00g2TWV}KKH(gmFk#fG_NWkPVT~zQD48>vYsTyth=CitxN%tY5sOjqh zC90@8uItL>fX3BqlKC=M@A`M}S|P1|b6V+by^1DiA(uO~Sp6}61rGxD?LC1n15lgK zB=3ZYE(p>U7h6Aq+cP7}A2&329hSS>J5cm19!F_$Ac@u)O6dg>P@Un$hKZ^@hgt@w z*s(zm6jEhXVYJave20e+WWDez80Dx;^!X>(K&TQa7a)^QC~CD~fTVG<=n*bWitf9L zBN2%aJ_~k|9c|YWG)v1o_AE}mB#Q&VUvJ19v10i$hXy`!C3~&NU$=*Yi*Y`%F-Vu3 zi28o0J@!r~D8j(Gyq}N_{KY}T_O8z_xNf}|c&hM$F>1|RsH4?y5 zfBB-qb;ZHkBG*_$K51w8dcW?Iu4SXpS0bAm$vU4Y#tm&BUeZgKGR+x*8cmD^#Sx7Q zSn6VAX{Yh@h|iTC9)hsA| zL9II)0(B-YE1RWyRSYaf+G!TMzgvZ0bY#sgGr~La#W`7{U)lSZQ&u0Q6m5k_F(F zJO$>mva&iH?WCiAnLW}DzqbML)bwCGn9&wP!dHMV&;fDoVng`%B+eE|r@H^d0+16O zrLW}Q8zsKtm{KGofh@1rdPyM{&7xN6D%8wCkk9JpfeH80AK@P>6h}N&`Dj~k)ObnE zTyuJ|n`K%n)u`)w&-41S439At+TyeM%_;eWrme#X%Nk)pN$*5jcpTB=(IVU=Ct1vn z7KCanz~*rtr9>g>zA!^7+^qd>=9vuRSZLUcfXY74nIEdvp0$3rBzZiax4z!2zdSi8 zYwI1)zR5HzgjdAXo+}u;(w>&{x*x`24SRiccCp_>zLgcq=gNy@h&L%qq9T*z$At<@ z;XjkgoN1hU1z{wPmSpO%Qby8*yjG?8)TXcm(PaPy2Ial+Z8m@K{!!m}hKkEk-p6S` z(+T|Dcl!ioWO@QH4V&{(_bM+q0OMv@CKy5~iPQ&m&ukor%CveJJx>hz?tf8)=9hKf z88Wwg<1Eok9&o)YDsx1ABUp}91hymHWx>4HyZNBSMMR92Yr6)0-7}3&5EmIo};!pw}x*V2M0R0CWh29(PP~mZ;NShb#&;H zR=#Psg#N|TNu3ZK7r3Cvo2njvhen^g*n`0estnM5A269Fz@p~}DF_Vbu|czZM!CSv z4-*Jz@f?4}dLew3<{b1Af~|+>6lg$+vUd^<3G4A|Wg3OUw@H0xht3v;W#Rki#-FW) zxZF}FP8NBMX@EAMCO01M<3EZbE+Y0Z)RRomo-!@@jAz1k!#?i0T5Pe-gUG8WA}L!s zRMRr(xizW`A}b+j-v=R`6+P7)HiTIL zKGB&?7c?119LhZp{xHZF$?431V}Z!Q1o&>vk8JLGv19d*?M>E_7n$w^&u=4=0||NO zXc`i7qTBL(AhjQbj$9?(WRPzR8ls4L>fLYc;~yi<4uV* zrI*HCRL-)!_o{Pg$V?acM<5+N1xsCAYw6E}mQ|+TU5{6Ve|p`2cOATT54c+_RHm;s z#hf=TygJ6Dp)d}iQyB1&P{Rnl&a8|2fquEX9CF|)eyM%S>yrZvr>(m9=H6DcqZ)H* zJ)FmLUwNgp-C{seM%&rymWR+XIq-7dGq8T6Ez9O==hkiBNqGF=Y+;=-LzMIv;Vk_` z^xz-itQ3-KilceuAG_Ru#wQj^ex5T6k`ir2p$k`Hay4dY!@rhHT@=R6^TLp0gn${| zNpJBQhy^^v(ynv~;~sCJ@$!oq%0qFtnIczJ0&3(d@K=OaUj}8avW#iq zY+iU9>UIL@sLp;(fkF9K$$1b}=I9dOF&1zcyY1ozy(QwqKX&+=iNs2xd(}Xd$n)Qh zX?}~cdP-0Cg-%k@}`6*GZTglci`3WpOKI> z@O;^Bb6%GIcmVchmkC^pzMw>}bwn`qZaz1>zHe{nfcdXOib}o)xnhueU@_>Tx~pP3 z%})v?uuAQ4Xdcx_%U5p*l|bQ#S(*4v;pBEhldHeohl42`N~ghz5G2}Y$kbhOp=E0hnj)!E2~|EKn0yI{5hj}DK+)SuC~)E3r3TWW9rpO> z$&oRtm8D(v!}@>TfsmQo^Hj=(T*x5X=FR6gerdn#_w;C^XFOQ02U;R$F48Kx3kdKhqnkqST?qS0yw4Vg8KKv4C z@lEveG(_1~LHmW=?8LmD2xI24Nj`pG9*a=7v&2agUB-sQEN+SrnYmWD2=ANx;HDY3 zn(XS;jGU^wdkVhlXQrF79QV`+4RNB3zCjP74iYku{$%Isq=xCQ$G_XK41R=l7HH;k zA?_x4EQB2YvYfHghyzB_OaiJNLWcO=lnakQE1s51o;%yy>!Hl8-KLB}_ih)*5Fj*j z?6F3Ps=TNzIVP+eEQS9qhq6gLj?oyCI!qV+{2FcExd8#vv+E3vlA@$n;15r@4=J=1 zuborfnoMu`CY_SXk3BF>Z8Kl|0|YjW+i}D?aJu(wQJ@A~I47LPLOLjHfi23|?41pZ~(i)l_cwzW`>din7+s6r>cXFd!cq?ffB=o+QMEr&#zgAcM5}>CT z8b@4t&LmZ|B(1?@QVlKKo_s3YfV16`Y-yM3n7)bJ9{UcL6Rj^l8NvJ$&WsMbO?Qdr zEFRknV-WPkNZ02#zb8zGNJ6s+POjDUy-v1_kcb6dNQM(36PM|>2~htdvjv%0iTBat z>$}|16h=MY{Y0W7-8Paq2DevjZS|p47Se*6M*!~INEcVJbrok$U01$tKA$|}F^-^bi`r?1vt;QguQ?NB`; zPf7$eNqq1a9Bc^XVc8Gw;IUP2Uq`viK6;j;t#4$-gQocJ<>9iBzd+AHpql9XR(!Ld zFS=uFV135T`B+VH|C#zhL$c%Q?vxG#;SKD}%P=#&ieK?;`*F(fovZK_HWO4Uha7sx z9tpyJHkMM9H9)nnqY_Ql+o*?iq+iQeXh3C!l1_ng_gJ-p;&-E5|FtQ`a~Df>q)p?u z)Wq3WyhAGXLv78dg(@0l<+Uu2O~tjGm#rD?V>z}oT9V;6P926I<2i;PXZ@pcSMu4l z+b^0dFIUH?rPInOT!<-pqU7IOO3HLkq#rE2?OP7>lJ468AEBm7HC_t*YNet*1w9gN zka}{{j^vZcoQ(Mle3)T2pf%bI-={GPmQ2`hoPUYgL!Q*rV)}NkcSw5FLm+95?t3}2 zXpXfU0U^N`iTle0HUQShB=Qo1lm7gss~Rp5G&4aq_!4PymRiNaZRM8imG1OXH`aBN zF~5Y2J4{1Iwr?JT*eFg1DO(1w+AD`)8Aeeyy)Pj*lh?^jH;!R$PG64`P(^b`MV*Hu zwRQWZZ55|T2EHaG2A*}7Ek)>d<|wk>2#pulmZ@nNe36qbq)n zyH9Z-eS(*s8~Egoyn$=^+IaGur}=me**~r$Ode{a4`i0NL4z~=HLTTLHRY3&f?W2f z;`?_?)h z(B~(EZ&E*+Dem${s4t4N1%DQ5iKqmeVO>4MPccSYZ#s(v>LjpLqGI?)^HyyxdQ^HO z!wH%zdlv(Dpc|@~f7wtKf5L{KoyzLI+1-%Avwc+CgcFpFh13U<+#%iq&uOHJ|Cwea zZ?!pKv-YXCb zKzW!DFVG2y-^=1HzXGm5UuCxTn>2HyA|ag}RcjM)U*zGdW?2;wM1zJ`%DOMm$!}SA z4Hwk;`FUX<6*keVmzLr_gKO&v^-2szeGw)4xZn>^FgPh|(+a70M0qKE`pp(^QnUDl z97*@g=*-$UZnYg!LLhO34kn5giaWOWoT~5ApiCx#0msZ%Tt{RVTcQ}UQ#!B}kZF$l zYTe6s(#S*4^}1g##Wf&_XiTU05)&b(2sH>>drmd$m=E3GIpC}aNC4xW7c%WeGQnlp z9l-w_*URYH&}uRd-XGRIyKsD)+dai;bdp8mal~_3g|s!}X|DQOi^pUHfzJG(J4rL;5{PqPana*I29)dA+{^nY~Zn)W{`> zsz8SB*2$7No1M2}%~z(M1y0B}asP$4ZT^?0`deMRB(d!990!nhn)X7w7mHG95A{&Z zho}LVjb8&WY~T3QX1*d>7T(=AlIK_|U3)ErBU_jB1i-9SF1tJ;RkTmQ#g~x4Ol6#2 zv?$ufm7zCYAtSY`my8;G{1IbS|4@kaW`-|-IGIat{%a+Pm^q2HO8ZTONcd|FQ+h@+foi|d|enkeUpv93os?|HC@1|)~ zX`CZ0l3c02%6r++bY$h)_noaFPXUsK14N0gS(cx6+n{(Cy;W5rnuk(}vG1nPWccEn zkeA)hh3q!o6UA~ixB(isbgDHuCAXfjJj*X4wIrm zex{TvH<<4JFhglp9Y!f8b0ofH%A-f3AF2eKQW>@`LsfkSa#de^6kfk-tL9!Oa26Xa z+MM^lU;k(z(H|XzA<;B+Dzw~G9SH9B{OMJWQ#3I=@Ih#Zq>B}hF`cwR8xKlXTLf6$ zn&VZ-V}hw#exeYMi|yY`*B*@Z{sQBz0;dGV@C)x{k^P}!OO76r^lb^MFrJhe|u56nf;7W_$b zPId2K1@YGpDvlWIx)i>lraae?+mc_L26k(|Z{`KXLKAY;f?Z#?-ReH}PVGg6UcU&# z^W+Lxa&7uroWtDWV~o@Cb^N2$7ItdK!fO1-k?>*exu)Ud8A`)vYDXs9Rv`<5(j z#R=I6U>afixU5Ny`>R@(sT}UDFAyqEfXz4bn|HVLJdV=6&{Rmqs|C}|&COK^sV9rr z{U)M;k9Z8oT)pTrK1J8Y+t2*XiCii|pK9qfuOovN(KuW;)EuEdF`5Uki_9F#_Q;w{ zyuN`$!S5_^Ton=-dZyFAzRW3vcafqbvB3I=FS7PadzoUHZ~MHiEogyDL(CGJ4)wrD zwuen7AtLA?G;lN>7b}7i?y-Zp^d7E!{$+CAos= zp?23>TUw{$YZ7aZoL*WK(~jYZ_7x%|zTq;+IH7fAkj7j4-VZf1VQ z-|1yueP`<@QFx|XBV3Is?&VWORCC}gSb=#I*4<;H&MMf@ONU#mAKRKZn_-2A=*2*0 z8dn6iLQBn-!P;o~y&AXYtCf)oG5c$BOS9JMx67K}(CJXEWs^gc-OtBu0(UF<`ipP6 zqOeW~Y^7fxoH?8;PC6lvHnvF#G!zK(v+C&e)e!4kx!yyLEkopZ9!ozm?GyToG=cgis$A*%^5q zhb(#dw{aJgn;pzsW4*dk!7M7)T)Pj(*MaRYT_52a++fQTMOXmING2uOm>s}fcz7Tu zQ?eQ}SN{4*{J`THdUE?@DS#)Xiomw{BC-7E!*Pu7ZO9gAg%6djm+H|KnHp(pgYum8 z3m6b9IygJ#-$mWNO?c;=Z}`HA%)&N3amJG>rtNa%E6F5~Yxt{~-PhgZ4}Mq2kf)7< z>ok1O1L~&hYwJ;u7xe5Un1`ZU=&~EPy?RHdGQH%rnP~V&zadKrRY0Mqm~jMl`Ue3A zNnUN=l_;_n7%xDqF?jsm`4ZSYmq4> zCK!dQCV`!zU#Zt&ipCSsw*wTQX7&55iK7yJLiBBt(IPOha9B zo9!4cRQYdT;h>s)MK->pYtNnC(OaVQib#1g#_{s&10P1+{fT0C{5D>xXh8~!G8CGp z3sq1gwb9Y$qnTNLf@d4hM!9GPUZZazG4ZfNE^ zFg3hMv7-HE*~cvP7Adhoz~-~xN)E-j8H$l*CgP3jKH3a_6WS2R!H^IVsiON*xVv>> zXoIl%XsGuS~q#XR|kQHNC0!CXIx$Xd=97XayAxLw+#g40-LGMh zK26WykFnd&8#g&W->`GpDb;?T06-%)6v;jfP;N}F9PyCn(}1NeK_cQJoOM3l4(=$> zYDk{_GO}JXXPFGMVLm~UEr~3-o_EHg_x&`I+&ptMzGkfEBL}c7CB*a~Hns{CrjMU| ztGxDN{i3PI@=>;?q_HpSg0L|VZ<0MsHmiQ;qFR4h70~}_PjrU+oZLv`qh+K1?y|2< z+7P{l1-RSwgC_O8Pjk_{mFpW_?$?;FoUzSU6})qdEbcRMfcvZnRi(TE4U=(X%S?kI zl6l_F1MVf0_OlyJUYU+`{;hqR+Qbh=#>UY6%Eis5Q$K}eziSr`?z~`Dfy&37bZubE zsMVZ&oWB$YwUN;fyRM9ZYO-8h*ny2O9LGm#4$r>Jh^1(H)m7}1qu2u+g%#IQuzgjt z(oeCQG{$ZA$syhdh1Sm2;B$e&8EY4h(W!Xcpv%3qA#|@+~Y2#t+_fXuI>`m=L$@k?sX}@o3E9*P@rTdk(Ae0vdIJqcjr~3 z@=Yq1QXW*h^amlBY|rfXa^l~MGv0rdJdLDcdYIZio9J)>*A!<~H{ z{5=KyQj_Cg^u^o0D6P9VFOgSvW?4F25+Cxdv9XHLt94(l=d#iW%EJYlPYGkvRY!(5 zJy7X8yEJ zeeo;`OO#*P({X=bSg1~H{D5OO+NdELK1$B+5e9fQTOv$&L zV1_9b%|fo<$L86RY~^#0xXqFIm`yim-xb7cDTpT6%UN(5Z~WbDyXWIQ5f^-PQCbOI zip7Q4l$?p$d9BhPP=9wB8z_Th6Q2fW2EdrZM z(-%^Y@yz$>``Kh!o{E!MZD&2d%KRW{31?;9=$_DXW5LiMV7&q*`ayC=ZqS+8kf0M1 zFzBkDva&j*b-GL!6<6COll4Z6SQS`nb_()7gfaO!LHi@WY=cTW4#s?!>r5~7CFcYc{f26EIZZ;{v>=EU;$gZnMS zqy0NHdXbBbPxeI*nLIQ%@cg{&WQe(qjB1Ob3%jjw;(0~bTm=9Q0|R5MK*`~t$GUAf zARYCNA?}_yDq(KUX3I+n+dqu*f%eZN6t!S5sAPQ@#$FHs}KC_flRMKED4XuHRYKm5wx zgr`O2-e0K^Y;p!apbPfHs@J5XEKFs$I2NgxKsB-$`De`{lq)Z>o}s<=BW1auK)NmQ zS09d8i7;RBe5cg~CDN%Y%v=n^w8FlYN43Ep?mb zkg^}*rrJw2J>7I-9R&|IYOW22R9)B^S!j#)qb9(@VF%02l_~{OgTqd`W+sU&@SnL~ z7`0{k0cxi6*VYyDW6Z2%X=!sd>BXRUBJ|ycw9z6&*yi`c$!$Iw2(p#}>8PoOoo>zb zhdU~*uy%rKehNc%0SMzQqhw2SjLLj(U-8jxSuOf0GncjpWaKleqF%|S2bNZpe8BpY z&ik8G6?&lujT`D>sF!>}C6ST!8d50oX-Rbk<-$E4 zK1)Zw7LxDc@&opR5M>5+R&1Y&B8mB6_My(%xp8U7T%vgtGkT2L`*8hCRfky4l=-wm z=*dk1(?r3&3nbWIEin-{XAX)|)F;2>@>2U)(z{#fw{=Csgl1Z@uIYclIF`tufF@mj z8j*+IP=VGzDo9OncA}PrMNkU`9$i<+w#r;9H2-#ZXklPS+hIQLQsrG`t64%+3Pxym(hX+93H|g>)I|A0*gJ0b3Q9|Qw#!4f z{XsT(*TB`X#n&LF!>|~pk{)l*Z{H*akNr$(&vcHZFppC1hyAYJ}ucd4ebNWF>>{KXnU=&R7VZ{UQhm z0-sI$jqcDp9-PgYcjG~4%^&?s6LT2a=wB%4&+bqR))VB8_>aBFZxYZrg;%~!zb(h_ zxMF{9>UlzKRlCMZgiV10PC9RQX8*bM-&|KbMZNN}_mX*wJfW*%p~L*SKmX?11v>9Q zO4?VH-fB<}F2WzD>o4#@fA_2y6n|HcfH;lPn*zFEx?(nA68~KNzaQVz2+)L~2TrgU zBxK%y04jR~NPGVd5c_u}5Xhhf90b6y7_={;3n=xRF8a-%*7t8qM|hh-Lq$B_wHy~a z?LBq0(Ib)Pw}bD$8{lUe=x2&1r;W6S!l1%|O>{WyHwFB6-OLz#!inBuW~Emnfzn(& zoa6S#|7d2EqoJQEbk$ZbvZIEQK??J;Dw_Xjgmh5w0#EG5gyK&X5IOJo&T1z5%m#tQMD{F(c2S7YUJV(D;7cI8kNQC`zwza?OZ$DoSDdtpG> z{>bYNo_8;KXYS*}=?7a#f=hQR+DS^2N*=LaPWW2rxr+y8RyjROtq z^h7KrGWr9@`ac{S?O_%2zkd90e-T1_V#=4QC{_QVocluxVqMO^`Vaf_bX&&DCtCBN z4^;mR>hFJ%0tgU`-!q&3y#OBbfvO1Wj@Yi^{|Ev9zYHaRK<)q1jo&1PNyiiAt`6$W z{Qnp}RK73%ZkPS-a{O^y^%tn{(X`oOG5@;lZ23v2w@ zPWeAJ`9E#)XL|UX>%Y+^LSJ7WF6sssGNWX19#gg6?iclnb=d!*`&7a=>|)51#uTF`bN2L zeDw=UxD6mSg=z}Hx>hPvF7JL5X$IT+V^31V(5d^rtd%GH6c8(H+jeED?l6>YHtfCi z{|w`QXkKqls5j|JSR{`V_@^l$dk0^iebE+|>OZo#X98^1R-1G7REma|l7aT$4OXPH zm2%(9f1|IhGfL>$BLgZv6!Oq>zXmSuFLgPf*4|T19m@hvb(}vfhIb6ramP%AugDDk zX6kJ8XAip*j3;DOjXcsVPC?f zj_Zm6`mhBh5A#G?s=}Z*@H}4(y0=U}M0%A~URJe^^VhdU3LQN8`Hs`L_P^JyQ+c7F z_o(|`ANVPV7uq{T|8D~NkMC;%rx9Pq-yY_DLj1!0SI;BE^2y2IJc!NtbIGO;tkC`{ z6?dv@LFYghdJPyq{#V0Fi2li>#a1Qx2Mhi8(3qeT$OQiY-3a)}1HCL*d7vHh@tI8P*c``tIV*84J^9#O7LHA0e zeA=M>D0nI?Rao~dF8!|yyg>a#qg6WUbbsoRH`dc;L=Rm`50qt&sh~R=xX7sgZ6^Kq zMYaBuxoEq^dhp*veY#kM&LH^5DzxODP$AU(PTyzzw)I!X+q?Fu(9vSCYTPGsc}*Sv z!p4o=m>H6q5$kw|^Y=AH7(PY+c&EyXz6c5DIxwEL-2A&W^vKRUVwi=zJcgGz&09|^ zWp@z34Yln}bf8^Hj^|SPS3BQ?B~S2gNH}esWl| zxku)-M+{$Ke6Et&}B$U{8r}>@#Nw!k3;FL)tq& zq&HRUX4|PFtv?$UsU}08h9k|#2Q6h4`BbJXPu{R9|F>Crl79cyl4qbGo=`5h0**y@xNGxmo3;b764SbUnZn zgnV9Xb`rod<2;JMpEcD}A=k%{(Y3&c=3ov}IY)fTW0wIJ2U8T--utTaT+f8}e6fV5 zX+&~i@>SKaN^_4we)pe=D!i`m4Jo=yk=en4 z4Q+`5lY2Ey>I+{qr41mDOQDdJB~m(#vZ3yZvTNEUN6I`n#iatjo8DTm}3!>(R+o*5+nUBgf|AFoNoAvdpJfV$o3k4G8s_`NZ~}8!~Y)eZYk& zx~o352I-SVC>!~aw2?$GHS-a{)O0tdgL~q~U{cg?66hKHn^>VmXsBDDyz*OXE7Q!( z!PJS#LGL$Rt8Xcw+p5H;le-2Z_jyetLg$(vhQVh+1 z5n=R#lDUBEV&1Nr-5V_*lxl0z^~P7?jui;xD08ir`}Up2BP91 z^`bd_wrpEa7x|Oag-Wq(*oBmG-Bw%NwCgVNrK=m&8M@?z=@hZ&59% z1Cg1yGt08Ce4dYX@g|X2o+XREw5br4r{^q+OWxm+9_7o!;`3q~hTdVSY+@r+kdF^* zo?d^!MVqCH<-Bj6E>Fz0;J?5v!@Cs}M6v{NopK2j*f8G}#h~-JNn;*b)o;UsW zTFJjoRo|bWoBD9^)FXJ4`w{E?9)nwliBe*!JiGNXo`Mse1I4!F$2VKLgzcCesBjYB zs-0*@xZ!8NANel{>*M{{r3%jO8R7!3o!%k;8ndFkK*`%g*~;Bacq-|)pqlM> ze-A0&p7vF{sAH~pXOi*!9LG0>1RunD{Yw__qQt_$xObL1>pcuD@S0o4gUb;3l_SBc!I>q3(M(XG#zgmGw3XDt9#eG(T8aO9mbVS`0{7&g&Gr zfY4@Qh=nEgv`nxua!T!LESZ8s|_bAeJ5o($SEA*#@o5=vlU(vRw9?=@M1CaK@ z?yRqbQS%@LZzacLKJlT4zhTk?nreEjMBqL!f0J1|m~W8dnblco(9W_A-1zL3@&HMd z%K^YH#`wj1zH>^p8!7E*#6^W&46B-cOD|e#oqlU6vXWBoEr9?DuI~dqA{DJfo{XUo z;+w{$19_(&X=hKVxeq;luFwHSZT5^Mwv5T^S`X%ER#xvlhxLl1Ab?{}N)RRZkm>qJ z*-mg|4BS^^xTSVsguD`UFxe0ocvM5Y)fz*7Z{ze@Tk8>KuHurt*hT8dUbfLrmW8Qd z<`wFGn9rRKp8TkN)R}a(#6q>bPBkO#y|*R_ciP*ne$siFw1`dhj@o*Q#%fXJd30$P zL9_fT8y!`oc!fP#5@G@0wu^U2rZ$3xA32`?Ap>cG%O3-jexBv(4ON=IJ=83$%K;-0 zq1FFwHW4K@!RrzYZ=vp!`E^GUW$EPCV!feST|cL47Ayrrw3hKWmgX#h z|NV@z?!a)#Ez&Fs;Wny-6@MAez%c69e=&u6F->?oJ%DnU|ZL{&qET{4&k2DaI2$g8PbiO&$K=@{gG zg%lH^A5pOG(g!n?1qu68yeiOl6JB|%#&?WX`KgN(`C_W3B!}y~_dUAKeLO)i-Te2W zy7}+;6gwXio#j9wKblZ8-c%~7Sah~hjbfg;t)dWhbDL+8o>7jg`P~y24a#2!ULVxC z7@+d;wK~5U6f1sXSnZ-^SpuVz8s*#E)fB7nosB?5APMQ@-bB&&o!kRvd|B1;yDz^; zQiJ!tu44w74PCCb{xFO2d-;X3aM#F)Kp?@*O}{(gLvb*UzBsKWRkqZ+iE0mJla%{D z=0GrT5TyYXyVsV~PVB6w=YGwZYQ~CAwAXs+fIAJ?*GnE!$R_f@6zdW;`*NztD>3vgOb_ zk)B2p_!^W;x?}x9Ou+h+KAA!zT)cG{U^!ODnSeUHSaf_CZXM@x!(0*4}1bJESrOqeWnsV@>{oc?lx)2gAHH7&oB z9X0l=Pmesak8l{8fXk|M!>GiinyOhHs231HQhe3QuYJ2UKTB|hOx0T==jmrZFi)`@&nds?z?b{a{H!{ZAZ}io*$pR$mQoxJz>LcagPhzB=o&NV7(2{9T z8(*i3(WPwPkv!NjKfG7)U}WdGFW9$5o^GWx$SXYz&_PLg(ua&_8;3Vx!}^*-DHXq< zwonFY2oyH{NKwDQFKu<6dSmQA{uc`%QV0{i8dc%Hz0cG59dD(?{W>UF~;SqiT#SmKOHvifP(qdxf7>91cW;9}5>9 zEfZF;IggLO$36R9KHuK(pI87(LD?SDeY+4ic5<%rN3a;H3vJ7cadpO{X{#iLfQH8- z36@M*_-pr8csSJRuG4Xv%;TK=xdZw`xXVlfx0gqiuJ4XNcAwakXV#~Wj*nUOx#X4w z&73fUy2T}OZ=*mR2QULLEK@pf%`` zUS=cWLsBNTOn>(%0nFZM5_o7rq?47bYBPUL z+ts{`{!-&1`29{v`FMy+a6-^mCop%^)G{{fNX!nGV)RuNWh-pKnAfvFg zchQ#jzh9#`6tu>?ObsIy2r}Ejnav?=q}fF;5$4knT{SAKn)%kr9D#Lt-~V&n^8!D- z)03|DSzO|8*7pL2Hz(QQkjdfWEt2!QN)>9IDE|rYUgynrpP2L+W}DdIaBMXv#H9Xa z#~GJAD<5qW#1SnQ+I;t+ubDCZ^bMRWzS7)S#6@shd68o zVxx|(v}WGE|It*tF2$gMdCWR@3^Abyc%jt&rTxo~MXB|cpY~%d9$RS|d{vD&a(J_e z7q zL@_G`W9iOdi~1>V?F62Tn7>OiWyI;f-@$1>O&l`9A8_;L{V~m-F!MaeRoiA|Pv1pJ zJ#ZGt=hyTrsu6!LKOubszo87#$I}r+y?IwiIz>Q!IK+W78JOZXIT^l@t*yJ(Bz|uj zWge+_Qor_7jjY+KftEPYR9EjHjxwR`B!7qJ0-?h$OU@&+c1pO^J=l6#PZ}*AxIj^C z<`-)mg2E_&M;MHDlT|?6lk@{r@1f}+XESUHquTFCbJVNg{5hBCy${C5g2U)B=4A=s zM?ICUr#fz;3e5Y{p7@!AhR+h*a#IrAs$a)9`Rn=Zmiuu0Qqeb(qLT4cKQr(tnHL2Q zC5sAMcRh4^u7hoFFSchsT&t=vxBLuU!rf$h;P@s^aa}}WpCaF|y?}rU z;RkX3bK7h@T)fblR$sjZJ@2Ih2_$Jz(2k>v`jO){hrmszNzPz?GtuY=^|1z+@VgC` z5G-clN#^~qwN(Ff%qs<`(KyS#4(!(;N)F!ZdVARCog~~08y>4S!ToY=59=s?4-4T3 zTdGKg#mfL4M=zH9wX5RxGr|6oZGZQ5$}wq299<&~BUo=phdTJio`yAZ&6xcB`K90NoBn&h%9@qjfA+z(}VP=u|dRn zndwcaA<4}8IKLsuLFBEf<^z7(1L!%HtCoPfxX3|1GddaPuid~U3vrp4h<z6fe$dra#L{z%`+M1xDvj3nMN(y@>p4RBdvSiJ zJZB5I1I?F5v~urUjR$?UxKhIS@Mjj@qP6oD(RpZ9XzJ9%=(pQ8t*HnSxt6~6kSgPS z*&>I77{qMAbeLE4)5;eI=v zWS1BRha@In79=23Hm5J4}-9oW@$-BFt&R8UEUVcbg-%bp`7pS)D723RFZ{bex z$$)iQq8}}<|HcHQpH+`_O2yVCf5i-(MAn%~>26AUPku=|6a2cUk*bazBTfHVhKy}g zGM=PJe9Cx0+sxezPdELDCQqCOt$KetC{_|Rf=R*3-NAC)uAU{ zRlGJG1osQhotpjtR*Oarq~y<{m4R*1RFnO9SMcaPvoRrkucu-B@jfUAdB^O>c=drF z!@Y~LuO<_YuD_!{U`mF-#hiTN{b;kYj(r(z3)M$ld7L6chvRwu98{kYeVYsszV$h| z^U==nt<9|u$D%)!$#CVyp~X3WSGr$x|P|Dtmq=UG{th zQVZnxIPw_*=AAWzQ}+Aha_b1CT<)9uywk9s0yYC@t7TiRV|!J@hKqTF9PFnlG;0BK zoryc|40weBE~kF?&jfA`+?pXLB&$Dnet@I?C{ z_?9@e@n<%87Vhh{P}y2AvF@{`y5>L`&8t;Jc(SVMjZFc7%}iv+E}^Hy>}d2co4A~i z75$z%z@xJtKal=-AZ>rOfFH86o865%SYgLaeU@-F9Ci9Be_3+|?riluE|m@P<@%=U z9E#+AvbH^ZZD8z=_wD`GVL(-@E%`{lVj9G^!1Yl%z9o<=#~L>|AB|EEpkftfA3+?$ zcI3<6-r}B4bdFVb;T^)(+;l^ESn6;Ya7Md#^)9b4-ovv}Y0$}qpE|5b@bIDanbZRZ ze2WjO#1K)~hnqUN{Znhw7(L*c34t+yAI|uER8hoV1t!-04YSZiTo0bRbNwt4Kv1Uv zB*GdVbvEg~9wspU3$&;nV3tS7cA1RMmCLWJde|WlDCGuq!E!9yu1Ey#AZd{mvW-gH zde^ztpk5}(;G0L;wh4@VK~82lO|6Xpzd$2s3DFH^N_9-6S>zv96vwAd$EcxJ`K_!(M{B8Xx(6 zh)4XlW3(qoSgHx_QmqAN!~v+mJ1so~@Xmh?A`}WG8yoZoe63Ck{k$z$mcS*1i6|0S zSZ*??vt$*tp2Ky~*S)4U+d@GCFJG-~O(Vti84`btx>x^kTJuwEMhVhWe%(CF*EWwWSirp8MgMhf z?tK-0mYVhtbK{;m+w1$C<1Wb+B)E}|r9N=?-V7@HN%s!67LL}e=C<m8T@pF z+C!phwqRK-35n6XObIRZMMfBa_lO472X;dys__lR zSS8}$re6wcYByChwC(?Y?7ih%T+7ogOb7&bcemgWfGB{dp|$fd%x%W1Lyg&t~E5PS6g+huDa_kr0;j(&?46$%Kf#x)o-)w zq}(qvX$Ke*1IBN>iYGKEm8t93xz2v&-hE|<>MbR$f47MGS%aF9ININZyBK1_&)!qA z$vg0eiFzt3p>y+U?6pZ-{Oo88h|eQWX_4P>a~bgFi%XPO0@BY0aM+-Eh>OF3>!4Gy z1M0%w1>-(@6%JUwbQ;}ToAj; z>C|_<5$9e>w4wylQof{Isro*cYW8E>TZWq`M_mLY%p390gf|z-B)N!n;*XYGolQ``VW!#DmpA0^zO75Ll6{KIb+uTd!>a`;YA%VJh ziupqGAf-M!4403LIJfmO`-XfEA9LW0FE-KZSmHFJ&E-Z^LG|*vA0;dySxXCC?3#z< zaaV8b-d2-12}4~?Cqg4z_hju=sBq+Z3wG0npyETnzHk2d{9Ru4kI^Z?MDwGT#GIuO z6Opb>L3ASXXI`aik3=g^#{D`hK%#kuHn@qW$H1sgB3+G$#GIpdxA^w{&SaFkE;;Tc4uU^%wHVmOt!D;xDtrp?rKr2&$u;{3fILC~6=rx52y zhWI3)X8xVkR0)2IoO>|=&~#p3h2w;%#CJ5nYOz}q1hRrIs=O}fB_r+7gueGWS5iI@zZ=%a$rWgK2 zPx$7;pYqQ{*Dw{FhSEUVKmGJ~t#qz+7#u;oAJe_gi=>Tv1$f1`#*U6yQfVZW@8|0_ z>#CiDKR6SOgh-C;@)po>c zOL_Jjgd{W*c4~{kONEU)v(bK`NLBlI+rLj9`(q=0f3YW8bS}fsvTuCO>$p(g!AxOP zz#r2w=*VaVwDdSR^{8z&T)}PKfX@7ak)rr;BRfHzcv_6XHMyaf^!u#a|P zc|GItKJOAa5knCi6syZva#gJ(A`>zWcRqtfP*#%UFtg{-HTm<@L&2?<+_L#J(;i?~ z%9Q9d)9m*_QSrDn@iDLmliL0xdrE2arS|gx>g#O+riSt1=_cty z`)j=~59d;7;5mJ*4M;6$(3m3@=B&IY0(8^~(9aG4SkM@Pd`YzRa|yhvb(ziXw=%4d zus*2teAY~!S_oLdPh89q7MssL%M;-v(SBs3k64F7mhTDx5O<=RjJ642Q_VNHp9-2d z3uLYk^Pq0Ui}|k{!Jz5$fJEQxg7A%gy&{4MPC-FWr@obd(`Q9AXNO6J5Hg>cC3U!;gT_&ZVzjMUGS}Km zGm+D|Uxbg0-IlXwzU#(O!Qz}Zd;!n_diyf|dAr)ZP@9A0wWy0@WBi%PhqPBK-U}iI+){hC(QH+l)mK`@L7~o}1}-oT;3wP9C(W{P#)oJM zfiI0t0Kup--!_W(MYa0w+oZBNYY|`H9s)OACvS%KjnPG4kPy4f@^VQ45~-F8NGOh& zq?;;$a4zYFxh#9x(JShjSWZX02Cfem)@LpMz|jsfOqPWQKqc*nHAbg&l{4VVMhLp! z-?|^o^$zYD2q>>px$Hjd3<}6*H7$X^SO*HkOQlaeQ?TqjiH-2=hhZhuU=$LsTtn*3 z^4b;z-}^gS8SsB$RTl3M_SIQU6e{>!*QdQU6x;PVW%qfz@8avHrpI8z0Fs2c3%vh1inJe@%DVo$>4r1 zL|a}kmAUePC}z%4;E>Ici@3etd5RN1HZBrL+ z+J{WYNm2HCxggZS)IuDT;U>avyJ>zwV;Cwj~{1GkF8z%kL)+fy z3TFH8aw$VZin3xmgd>qF)?^2a4*7wZJ>)c%>&Xls3LX0Si~4CUmTGyAzW18FvhcO4 zZQbTa2aABdece%V>TT?l>f-p=x3aBhN)oldM-$ zEQ_JKR&hOba^IZE>0VHG^rkO%Trl82Sy$0o$5KOrk$Y%OWYR{OxVF|ABUk%`{baxF zWZE>FITONfNj$Bl6PYLR(6(AlnN>ieo4vgVwJlQT`cS}A*X3SSgLF@PBtMm&Y0Kz} zi{I#Fdo00-zo8DJq~!oq@rmr-PWXgu4;Dg1-V+EJ<8D^0!ix_yhASss;1LM}@tKZL z1;H~P<-KAmauf%=+v?7GgnmRKq}59x_<)m{lArx0CG4cRw7?Vzcpi_~$KG)VsWwWm z>m%zCW12s)yBGm76}FM%SzR8GxF7~$Cj^1aM%_9Hvc1^TM%yW^VvnKM=Efr$7_3~U z^Y@9ZkOW=Unr1Eto9`X^)4X8~m8cycm_Gb{ zAz#Ri_tWRDXq;QG%|x<&vj7BBQkkdyxaOmz`YFCsWHCc9?Yp!JO{u5AEk1|OTYO4g zU6Ef70jvXnx4F&0>T)4KawMj7HF1C@y^XG}cAaKcncddCp`}o#dScEa!AMiASC1tU zHxuo{v5eaucy{{Om--2!cr7O!bBTpzGPTW@p-!aCt}e1RdQ7FX?mo>4f;h`a7yTcqx7Wc2~ef1L&t zz^)D>18v@x*cGZv`s8xX?Z;bOZ%?_p{R0)6q?E6T1|I+RlTF&&)kL@d%fR~-pDC|) z?eK)gfauDn6r#0}>YD9ymsuf>)7_$lGqLf@FV;~n1Ah$z=Wy<=O6Y(+XFU8lT~TF0 z&9~9)l@!JM*xki#cP&})uPOIYPoy3GRkC4 zK6S(m)f0zj~NnYyCG5CWW zjs2gjngPtCZP}^@i|D9}<-@ z2b}571m{{Mw~|?~8JTn6elVVuFBZ5%Z57nH-Wh*SCEPf>CAKSB90-hwhznABLSC_u zr0C7x+dTFyTy)ZCOp@=2@1VQQDK+PLH9={kBh>IbezpY!$56LnE9^eNt*BG7f?f$S zU;P<2M$r{mo!Dv8iQGI=^eMZY&7&pvThBqly4zG??iu#frX3WrP) z8@WTO40DqCVHy8O+me2Wi6r(scJjG#Z_R%~K5oV`h8*ESWT^}TP*XYp?d8SN(q58_ z>rI|CG7xK*j8QJO`yhqB)y`*Sm!gUfO~-T`w{-9y1Qvz6AYxUV80EuzQ4r^hBT(7~ z#D&J|`lA_nepCfao@C92jfu9hrk+80#5=qZu@{b=n)^rEsK}^TCk^+sA&7L3qHNi* zrae^r?0veXDRV)FfGZ~hVzD;3YWrsKEzi|B*Y&0To+*sNgb4m{sJ?~NBgH1p{n`CD z{LRO8#&Btn=@x2W^qvt_Fwcd(D)!4z%M^buO73g#ud3*xWp!UWWw%l_lT%&_sa_LY}w&*ug7LyHVWOPW}Jl{earsrCpmOxnI1T zV3V%F;rPr?mkGism%s*OmiZJ3 zwQ6|+xZATs1+AdG-kXGWlC|-~L|U(xbkellTSimIy=%n|iHD~ven#fobJ7HoCMm7z zvR@bYV`kHU#lYkQPxX?G`x@#M4Vw9}iTQP>LBaBb)-16uvp%{PBHNcL{n!^eW*kPI z(0=9~vT>1#SDxI=EH%zm>8?sX&ypRD2rS8e+C&m1?L zp!ZcwJqR)W%I|y)hhH(lEI`fPOCK+SXW7z8oJ5Q2sBTMn12obO!zI0X^RnnDk&BP0 z(vy?<3j=f>l3;Qz;-QlOSN-X=V1|+7_4bXy;J}T|8eWP;XgMiba;nSv>xnq0<*fA# zn9bbb8oG+}U~0P`gL zpXdAHmrs}#aB0zKce-zh&dX}5cw4vS1!2TbEd^I|uVxS7HEPL2Evp`gdfet%J$5Rp za(!4F4UKSCgs<*zh{ZKeosr1A<#j)&E7&t`=kx|J!;le1v^`>6`w7#HNH0BbQTFS<6q}o# zx@o;Tb!@Gvj=ikS1&SL(Ss{0s4m6#a=^GbGz(NIQg#`2K9Uo$+abqg0O6vdv&dm6; z;F(IRdB^2waN699gq%QmLdTX9d^-W4GIws9esL!nDI#$|#k}!RF5IlQhLg&XaOPUV z0M|HCZ&wmh*P9jt)Er-r?vpQ*S2-}YB~FMI;V&?*M-0a*vu;2H??^G>$G-w`VUW{F zROALh)2_$+Psin{FiID&xk1g8Q=e(TKDdi{-tkxTG8F-T-;HzuIjH`Fm%(MVZw0w_ zSCAr#;kvDGyO0OmWdqh1dFJZdEvoV4d$skUvfBb$e?{<*Gp3UXGQf%=9ghd^T6-Uv za@?{Z=Xz*Q=G+Lg1n7-_*G)9tMPJgv)Ru3+U6YN;1IGA&?hcV`-ymm;5N2z zuHDa&A*7_l;O11W2D_Y5`@1F4yR>LKMN6q>UjswV@#Emg>bXdqev6V^`zo@9uwl)F z1^tB&?#0MX14QUfUrSe?x8saZ-q7XPKScG-t5*ug-Bp+#t+(WVqjD7N;+CwHaAA7C z<7PH{JklI!MleXM=`bHj;#Bd?KcT3o@Plc5vllTiU^PMIOCIpRBu%`9gB zKu5($1xk^*@}m2;&z~6J?HU$9q6F#U`Me19QJ}!6LIIRT*-|BvzjeD41$1mY)U@3l z_-~c523V*J3@k7m(rwb=+*L4dl~jLXD+#=uwcu9vW+je(`B_+a)|^+`pTY^pxX`qZ zwcEI#HCQ%FTNk~T%CZll`*u!c6-(syXt`OccnK514HudoI4$oDA}VwaSafK6DL2TF zCcLY|VVP~iSva6u-fK-+VYfxNcJY-8*+2SYy-_D+Q+y8LCAvv8Q&sy*k76>CZxy7! za$lJmS0WXoVmv$)PKjCB)Oy@#TKDCO-AG5`&30&`+1F|hw|fk5^^QRht;^ky>$$Vz=xw^< z7$DIlWN4;2JWwkc)k+Qz7<1N^x|fws0iF8&RMUG!W*1`U=!GK8Nv=h3I|s$6d;ul- z`gmC8zg4{wNx+j1omq~5=u`+Bf0b)G`#60vllpb`@%?XE+7C%AiP}fc(w1PLbx`=DG~RGvo2T|%o!6*ni8ZJTB#pzGPk6cve?%;I{q!wtM&F`X)No}5C1#3 zyw-fVU_%6m=Pz?5D~>>4+I|$V^YM@>!iwX3W8I*?P%0PL(D ztVt+%8JCL3z)shlTj_q>Auaj$t~Oqh-|d1`v{IV z8SP8R=g+DtR_KZEyJUDJ1wwi(KeyOp6|QGDE!lqstxg`cd|&XiyEd9gxIkECi@5 z4Y98{pisxgVj{;VjJnk;_74k4O(Yb%m6=%1?On=}yy}GMB?b2>k=I6xPtNzy<_~)@ zi_O=rnUB!i#= zKI6)(6iS4*b82@sEq9tWIKKB=_=U?`RNMC(ZdETgm}D1&Jm%l*Sn`iXHF(aHG~e;d z(gG1WrBNuka#8-2i>N>4qAPPW4F@!{olE&6dd2(k{d8)g$_N)WF$J?tT%s=SX?Z5Q z2QH-8_wO#xiq<*)RG_;&=_?CtcUGTTeQfcQ>?&5>JJA&PJt){-em7w4Qg2W@f9W`TcpdCt6IEwcAn7qrLsffC6mhZn)8m^XeOGkYf+9||Ua@q$~|G6JKIlluZO;pfa$8O~&jsGJ81LF0l9W&)N2 zO$GotR9YE&u?q%QuMp`@lX>*psB(-98BE)C9F7_ir>-j6@mm%0xXaaMlfCXCq=Q}c z$b4!CCLuBA0B>&}j|l(8GpqZWoRoGF5UGN(nGsQR%b*YVvw@3wTY(XOV=GRWxwm!v z^}?0in!e%4rt$VegHi7Y%aUkc?}!OXFSUGh2~BzJOhcbV$}li@hFUqz!tC^&J5?^1 zsqx;sJPx;_$o4RB^xS4rDP5^1cN2|^+@hJhlO@;4K~#WM)fEoU!o8SP7pa%Pp>GiW zMZGjCn3OKl3YtmK&4L9#E#0rzYPFwlwHPX4VAdivuVE@)695Bdxdpw_50y3D!;;+u zbc#-u|CE;lPE)KtKX!T4oRKhPyCKjvN)?(pGBDRv$-1^v5qm*DB@w;=x!gdp{x!Ae z1_OQ!-&Wo^Lw(!t9#Gpa9K#7)N}#V_Q?SoBc1&5AKHa?*x$ZR%&y&=sUF%Wm5o0!e zA{6-=p_EcXg}psf7j;p3Z{Rqb*jc{Ei?1Yzo!L6-!|3g8K?E3*?;T!UE>ur{Ws&QT z9$Ty(w!RCng8$xieSJ9fKYAmsVGcUQYhH<1bJWda(7}p7km*}-*W*rJ8Y{|Rx}V%e zExdg5{;QZ5v1M%PtAxK(V!T14pKJ{e$e^l}41>y^#;RWA0|wB$@LO+cH(;4MEyL)J zN;&<{)PRxBAh}Z+k}(}piZS9Pr%vXPm1Blo?|o-scUJ()QKy8@lDxO~(IJl4ouhyE z`gUHy`QGyf|I-*`^)?%(Grt1D9G)e_(1m&b@Xh;QJVGlR@6L2?z0my?f)3eJ@AH^m z><1~!_%P_h)Qx^KF%?`k_0r(ox!@j5+k}23tGv?pm2^@h-z2z%dEjV{y*@yPP#W7` z(M~8Y9Sx#cE$c$0&uv9qK$Q51vaVr0LQiCmE_A+C^|y!WAhRVqu%z&x@nupcTGyX2 z7Ry#*d)mrVJelc4_k#@G%AE$Z7&!9k@zW=?fCO8CE!OXfF4cyGLuLU)14AydDHYhJ zdX*QK>rWH`+Oo?&P&fX0lc^oUW>GWAnP+W5P>&%+G7RG++CDAwtAWshb~(!W2~mt+ znS>WS+4=z*RX$ir$1Bdpy4A=*e?au$8E{Blsj}&+x(Lis>Q7Zhf8wgZb#4oqHe$gn zj8&3Xl-R@Zt!9l_=B+q<-`YA`uIXSWMT%X{Tygx1H8!Fx>~cG=(|%$7uTVsc0gI8e zpT4r_h%2wQp_R)I%rt(g(ynOymR;Mw=8>p115ha^Dz;eG8b z0}R&Svs6SkJ&|lT?KJKdyy+uz$Pht5A8$*#!lbj0|B_D&Af4eb`f^j5=HlIS7B=&M|FS6}_JNFo-HB!BAw zgs~M%C8MSqCI8JZ>#>VRkVCuk*XH25bne-gdu4^Q=7Y~%3GfuOy2)1430(5yLA}2S%sa1it|kWY`+DW2d+$)j zU!w5=TDx+6wtHF?;xssrEG`n*R`p+P4jQX@l*-Hhn*PYG| z2d&OM49pY^!>^l`EKH3@#kKKOP!f8O9Pz8IweNhSm%*e}d5`cR)r2HZF@sbcI5f*- ze3+W&P6Cc|ceB~PKk=3?YCKfIlf0Q93^?4TfVn}8b)ul@kKPL}(fk&8eydF$nWwVb z^dq;BR;sjp9QG%fwH$NXr_POtz{}GC;4igU`CqDen}9l&g64ly+5Ibgxia_-E77f` zvJ=kri&m<8f~^*)P&614s0O-EMXEVEoN&1Tt8p{o8$bm(IQ?^R?r3NC-212VZeiEGA61eA{H7==a=v9@5C@TeneBjx*8r!&^`RCJbv`b z|C<;55YZ?`z3V5t*6rm#VD%b(x=i-MQsQzFwSxHL_u`_}!ZB#dk_qnj-ZX_S3zc{1MAa80XBL0x;;(k&+b1V(#GGA+cFe?8 z#QG;s=&^x5a80r@nvoJhPjd;BQymvo3{DNrgUfG=k&oP@R1*x4rbK>QgJKn=YGTil z_^$MjDOMmEQDsLS%xW1p#5L{3E6D=cS-3ZcymE{1<_D+~7S z(`P_ivV9-6$Syp2F|}kZ#4Y}jq9+E)>kF4z%?_W;C27mu3U3HY4AMuW{^xJ##afUs zlBT-*1HRn5%#RAz?TTG@!*f5L`_re??E0w+r~|T7i2u;zq9C|k$boI#in*5!Xc6+3 zghxqMysg=>**X${zs9akBo!xA)_-80V0KLdBC=7a4_Ly5=fUVZ<)M(Gmz+K$LT_}7 z3cE0tZy4Gywjk9KfDSBAI~iEql8vMAl-Z51*0y&v*TQSs_2=(<;h>RlJIeJUU5#J! z!SjGm{4=dQECD`R9ry9YhIz+NefvsKX14p98-_Yz5|F@YXmc#Jq}b?0Z9qmkT-syM z+eBjS-0EuuT*ZWizzNS}Ua%+3M1x{~ef(Mr4B9w4oYN`FuCHqrzeH*&JWhFDcXZ85 zGCd(hsF1x>AGYhgW8lRw?iW8U56cR7f$o}VYqTe`IJw>j+Kk4()t(>^*H4d>!5DN6 z?RqFl-)l6pl+Mi`gKPoz&tMnD+HdOp;|(f{S# z;4EA`h{R2X464Q@!jgBiih(q<&Sz>&>8&aWPbC*(c4bU78hniDCqk*K;ZLQF68*_m_)MF74iMTv;g4`CQCnwwrLnd z^KrGIw;O{yg_t!0H!B;X-e}f+)O;=Dy{pPhc)&&w6@;5G5Z8BH{wGu{4RVLe`m>9@ zlMJh>5|iTCgCtGldbOs&V=D|=#=o0+Yy-;t8Pv*r^Q+XvqIlFQukr?jXa;Co`2Z-t z`8mKFyktCZU_AHu-cOkeT}C^G#=3J1TLUBgmwYiDIktc9!rH1CiRTD^-k5$4c*iAM zgcT`@Wx+IZzTbVcjKeID!MG9~%718N!$EQ8tWXJD0_5zve#KJ5l{{%)LMX#|OuW5&755X4)*O&ML@+MusciPd1%RAaVI9<;)ka zVC8bK>}x+clL{q?f8!;L^7=G{)bj?Tu}b)(Y_8Z>@BFCUT1lmDC(#R9V|s?n8HiZs zjK8vlthHruLvZwZ((4TaTG!Q6ohB+Ts4_qr;5=U3A!eWJwq$yUQ4+&MvQWe5ep;Di zSFPH1tI;c@5HilOF2)(}R%sOQIf?(Kux4khIzg^SR2iyTm5eLNW3!Jq&bMzcIL*QT z)Iv^_q5eP|&_xzWSv?`TjA8%VvAKxB+NIZZ)@!?JuJ3XI9+9sT(nr5>biuf>Xq&&6 zdulako1XXvm6=_Be+}`T21KOs6)N7oc5E9IIF)P8E!4U`bG70MUWw=M`Xs&o)=NeYaE|8j&1gR3L@rmVpLD;)5HPja{*l)U-TAK5kEf( zv?09=JSt9PI6Hd!*kjs?{7|s7{aH?|s{b=qNkKJUVN~7}&eQt{L{9TP%K%y%dARng zK750x*d|)=XZ=O2l;~J+`B}o(pg||&w5e~ll)IC;P0nMx$rq*q8pE*Q^&@9&CAO|B zK@o8mXL=3~X@b2m9*LYT%HEotYK3zp3ho9Rur%7mU>-oDP}XGMm}_%n>l5-RIrmaX zJ!{RbE;@xUESh0E#wubmcQQz`=Jl4fuiraB&C_PAo6Feh#Jj+H=Rv3RgBt?6CtL0u z8^#wSukZ?_+xZ|sw{9EaS+2SFSo`Y&;^ciB1hP4$E=60uv|-TJO3o;zq6OMJ4stiN zGiGAaU!GdG6&(FJ6HWZh+))DXc7Yr#p% zw1u#T$xrrETkXJOfaa1@?o#0QjV)jBn&F7S)yUgHY2Tc>%8D{d?vz!RDn^y4)t75> zv>bz}D?1~v$k#{g6DU$WLm4Lc&T{QY_<)o#H^N}y5>wy6#ZSG+#O0Kt3pp-T-&e^N z3T`M(`nDYh?8|ZG+K`%=?psgAU#_W(-FmB_X@lJ)0 zT=67J>={ax?t=`Slr?XGkGeRj!gXUOeRj0YLIhvlW=vY|@VhMfF7kRm1)flgJzfFNhZHsoE|ouBoeid0BDThY%>B5I zv((V8XLu;OAm|vg z#*OH*kD&X-^m^*9pm6+2C!{WYN;hdxSO%kac<|+U(@nLhR;k@0wHiU13AjRmPK`-w zF_KG6!BPa>Yod*?L&#z?X^QB@YM1ttM{U%o+H-)3J~MHI@=<`0;ap^Y~DK57N zW~vqK3!+Td0)bb%A@$qscHCAcT<#;JfO6TeI2kk4Z6mF2|Gw2+vpGqw$bz8SOX@)l zbDV@=i3+z=`mYzLR|=_~qQp(3FMBesiX7f$1%ZkfGK@$qAE@fJOk4_Vb<~4$Y=(i?wY&1;D+GXaBcs%td`qgjjm4qx!G+%I3ZS5;C%E6TpyXJnU2Pm9pnyo}KSK zOGq17h>m^MP$Krl|9`$tmcnYN`dA&UV*5`0SGHPo%7VBgR}l60O6J&>%x4X&0QrXA zuIwE1Ql8ahCnoqjAwUk2q7%J|!Kl}+%mRo%G&13->jn)4W5#}tkTReBJm7J`5?A)X zqKfC(+)X8V>RD#J!O8o5X8AQKHV}EW`xLxNu7)kveML8eIXX13_TFW)y7k8&w(@w! zk_3*ZGya7o(_IV_ohxAyoJ#UC6>_x@U#;ZbMtvpgV^}W6A1Az(!MKx|3xS80gP#ao zQcv92!zN0X?pQcjMa>8xDb|wZmlrm@fS|-f#`c~R%ElM0lu0bivp6Tda1P}gE9h(; zbAy&`gws}Zr4shN)mKG4u9n%Gw)#I?EN!2kHrLi_$b3s6+w6EQ9f~Lgw{A-GqcAwc zu3pw_@FS?4j^nZNw;eG6_)KQy>_fW)AF)xpfPG$K=(Emv(y*sw*E~ZjetVZ00OVa> zUBG-M_f~A!wV`~(kQJj=n|$%uU7Vmp1j)O`{sU7`1qXAc5lM@2e+3rKWUSOmLK9Xz zpJqfRS(a=BqBKv}(S2uXiELs`dq3xiFp1obs4~&UZlJ(-vfMysAzBsAn$|hY>X8O~ zpTM(I%cTUsPyF=C&O#C)u7LmP z*nwX^FEvqHmBUYBN0}Ga*;w_sAn zb#CQmN*L0*?}w7oOO4A1gJuyUHBnNI2G4mc#_jevwAxYbhMGpi)KFK?Mu1EZ^kEWm zaU|z%N3LX}V*AkOi@YyS02~wfHkiF(yOwk6dj&*5WsgUK<;p3R#-LbvzUQy-~F^gqYk10kZp> zCjwN)_VNN?Gm?6liNwdCBe*eY-^lhE48V;t(?nfSK>Qc$tZkcdn93Gq?mw8B+b39d zlQ?DM=7GkUA>)kIG=AWJ1U&unKXllNbNGg;_XjqjXcXfg@_DcAkC6Q@E&zn3_!?l1 zm{A;`N>F^BFWY!(%n(e zzQ2SFiOgJC=GxqdPRAKtHu*>+5>{etp!_^|#jg_#kn7wR*6sGGTn%VkUvls}@1w$$ zr<}Wv`^3}g{?>@!Kznjfh`*Igs9^VIRFJ)Nh$+*ehdt73Xy`n6VCcMvXW>kM zio2(_bschI1Q~KJKTRvq0dP2WR(0u|Bh_rJ@fa>noUmQpsUMpO1lFF-*ZI9)&v?+r7%H%$%@61QJD@zI;DY_NZOH6d{=w^Q1dzlUB zc+e-1HrgD2U-mRtK72b``(3}KI4y`14Ux`5qiHmFg`4(dFvD$iOnFyKZrCx0w9>%#qv zYYx%9(S8pz=W{%?hcA)0G*d~N8&#wgevK>JNk$l_2IBqv*Rr13-XjZVeF5lI?A^YVDO9UhlkJ+2w_X z^GXkhn)jS)Dy(#>{Q)tVGf_Sdt>6c!clr%nf4T*>=71uiy;OLl#O#(*^ERWW-`S`) zvPgWL_+;n!#chm4U1Cy8h_o*wOw}w{Q+f3ATw6{7kw^b$?38%kQhY6ds&25G3D6% zHep97-o<#bL!i$)&;`}}I=P=m7TDV;=-ca&kAl@0$WP93?S`+fJshxuH63XSE+o4U zA>(6Hiq;Q<(sD}yK)Ks1ScIZp$RH9>`as;GiZWHMv*~&%JPBXtsQ|*10N9WKO?unK1sq{Zq7}wzH*o zYlvV_lB>4}wV+3X)RA?;d)Z>7kWlaa((sH+UMI@xPAl$reObLD`jP#PXu+a7_s8MW zxhcLH`%zdarVr=vY+gJ8x&5J`^~NI9uc|~#2T%fUHl&Or%!VZ=KhZl?H5{tFTSniA zGd4<)FQVbc3FndSC-;a!JvHb$rqPL-6u%&^wO5N?*ba7cuW6WAj#10l2l-Q}xjkGBvrHiPfdj1S!D487I(>>kVPt|>h&{05mS34Bi#W+`NySuP3E&@mXhxbedo$ZC9)HC09_wK}>(yO8P zO``0%*t8SjQ}`j4oRH6oy&uG^Vrqhb<25)1{dVTBP^91fvFT8`E?I_*vXee7Y}%8so0cd^gUlZnT|9|3<*?A>dD*qnsvqLPi=%XzE>9 zN4lH(Y^F9J%RKe9iK2FbcRmd9qib76z*&J*LH<^Y z)P*?lsV*KS_qmeD+NP@KzCRC&^fE1)W%DRE1$*&wbVM$O4W_~6YBz|J!^0|uxL3)u zQ(L!n^Jn58I|v3R?=9}_Z^8|*I(B@A>^Jx0vC$mye|anh;nD#Q;FB?rW%*r-tJ5YEbXcqH15-x3IX zpic|!7CV&t1jUJN)C#f4&CYLTALg@Oh#t|$1G-R}26ZBX9YGwHWtHw#mPM66>!q+< z)RrFzOR!Syw9gb|kK*O2jv8_r@K&nzncoG>Qxf*VY^Cn)`mgR<#-e%T1H9kECid+H z^{pntr!`TEXDuGrqdbhJUcLPgjQrM1g+xo5s=IPEb~>FLZ&G(AQAQW?G=Z}6&Y>sSmgHkZtgWj{>^o;pQ8Pb3M;-L3 zGpE)5dNhf-o1VnLdqymLGxg%KtfKs3-22ZASBmt9zj-GqTzHv2wTor<1oCP#B>!ey zt^Lh8xmad8@ON_uj5rmRStbx~<3a;hz!U*Ki~F?ry+7&rk2{jCo&#PBGdGSg8Iyle zfxfFw_g3_dqQv`*5tyZLfUJeD(tVX$5Hh7&GN$RAj3#B;HH@sUg&=d&sCQnPB^CTWyGjQ?41-bbyvT0-eVMdjS z!<_~9+y5|urZ-Z&9;E`T0PtD-_1Qk)f}K&p4z=AizbUfgezP%i&w6A2bAlC^U`0g> z*jKXu;gaALcSPMn|1f#w^_(&6~EblZ=%Xm;8mIcH=i; zFefP`Y()P;c>I?kmcxNPtN!(iuHt|FIk-{jH=S>laaugA(Sfl4*tY8b^q0#2@cUIp z!dC3Oy7nl`Uxw%IH)C*Y#P5WB|IK*(F9zyA7ufr--(1M0)`ZFb#rKr&@Owcw9;X+< zmSohQWSiW7Wh4JhSN!Jq_q5#161e@<57`M@!{9HQutoG2%HzK*sbGBAv*OY(KllGP z_{Vzr_wqk|usnpdZVNWE;(=P||IAA?>HC|LR@9?E`!BQb@&CaozB4%PUcyt0K}17*E4}lcEuT5A61yB(uSSzY_L(1bY1$;} zH`yPQZf~S2@HwMK`X$0grfAt^;_*eOn@F+cnwzCIog0o%FYBj4iFUe?UzukqD2^Gz?# zr+73wg;eY}aIn&UUuuMg;E}06{=RJ32A{rc7P|i~tJl=7L&|UeEd;8! z=4`C3hXfIUJsJF&I$tsXD&V#UcmP(UP>6H*-3GASaLT2}AN4R%{!cA`RQ3DvwG8%# zvPSYLCwk2!doZrxkeAPQuPu{(OY&g5ouWMbSAzhd13*2o~MEv9S4U= zPJHR3AC&Ac;rXQhQ^W5&=N!21&g0K1s5Jk6*{sI189QT;;@mT>-iVtbPj*rIASHr= zHDqel83gxlK{8M;$esKYk;q}9;z6bHj2Pl9(SHvIwsQ%rPT}QLz5lB7O|W{&h$e6r zx<+08LM!hj9qe_c@Itdr%MZAv+MMhsq96Voxqml<`qMjj1aRrBUJAi~Y7a(5J}@ei zjZYh1$W=Ex<2MYR(?R&%jqo?@e2T+}hc`PtjBzA^>jdoY82&Ruf7~^|b&KUa|F3!b zTls%}lC!<30d5QwSpR(<{@%pjjm18>BKh}H_)i`Gxcku!>kg(Pc}&E=SIK|+`j0zU zQ~%TJ|I6L~HuZl;^?%pu|A^HE3OQ77XK1+I^&~~^-X^jB!Xe^2_8aOD*yg}l8827p zOG`9g&7i~)RfAps4*~tp#z%#IJAFp$3-sf@L;72-|M?kA58HZ}o~0_$etdI- zdXW2&mx>?>rFglq4$BgI$UCQxc^mOY3HO`2{?}gV2XW)p>ZcC2eRSjZh z@c(5)b3wyC8B`jKfvH4pBbEWuS_POx9G#h^`v=A zwEx%%|3{^2#KKhIcdmLo1Z=sqA630pyXDEYivg*p)oU(ko1kRGF;AQ*n*7LJ;A%nI ztXj?uXBp>oBTL7vx$_0#ztr+SD^DeaP0}k8R_c!*lM%%37jy+Z^mcx5Cys&rMM0Ij zc5Vf79YXVhBC>G7WylA>HgpwIBG9Q|RAIbN}+_})ocu?N( z@zvnzzK1Lp*SEW24jo@1x4BzMKP+<}1pgn=|KHv|_U>umIf6zscici}43ZM^7dIxh zd7IxZJlCN}_)dsxq}28$M?X`g2_Nx3$a&Tg;W-~(#8IfqE5fq@gTat6>tGSyn9gfyY?M5y z$o%t{_TbLz=b}(EvKs@CGgC2ESI-f)oPkcS|H(9%O|L2`SxO=fpKIw<`$B?9HyUk)XXJPrq(Q6?98ex?C$)n7 zYNXo4&M_BMw4vYEzh}fv)wqdNBHY1YKud%9zN)MLtovxzpV{B|6pXKHF!EjE*{XL! zVOn6fKw%K26B5uGB1FkfrtdDas2ZF)$9xw+frORLboi*^=}_XQvE`A=|8m7YUKOmJ z0fBO7J;-0)OUh$AcJo~-+`;Shh#Cf^1LtG8cgJHdDDS{Ib7F|#q@uwUv!q)7D^L12 zRsXityAM?G)9AhLZW{ZOx)V0!y#W9RLx5vyUGxh>I*LM9G+x<|Pa3MnJ_)N-Sno}y zasJM${@bkOO;BYZtUf!S*>|&FOrz&KLBVfp|0~Nz=GXv}g2r46#ZNQw*FT?YxT+oz4Q3t>3_uE_^TAzs2Nf&K2s%sMv{ecgIcNv44oA9C?MY6_(yA2 zxk$OU;y2oqi&cy@+Jq=KDCwwKH1AK5QKuXWWt934Le&hVAQZbkEv}fR3q#XD(LP#; zK}&{PiXx-K>t9~|x5o6_OtqLP$jL8Cx%mGkGL<> z=FyB(6)h0*@tPIxe&zdOp+xP3$}?xm*eH4jRU3#<(^2$Zp?~AzA5J~@{It^aK1|5^ zE#rZ?ovcwv@TN)u7Kx)hw46Q>F|4h|;FuA=Fdl0g6SqA-FILD+x8B|RBFcmuz_+dO zg)i2%7Aj?)6=-KWU955tMDFFK#YH_#dm2i-J8!~p8b(X;$CCSn(YC++aq14+g+ENk zBlp!>`ec=wS7By`WUceqE;Rv+=@ETe$i}`+MUc0V7jx)OOG@C4*--Gfc@2&`;=M~& zjqAn9)vkEi2!7GB;2!ODLXVn;H@NCnT1! zjn@&q-1R22Ty@wnWBTMH@Wy)9AuY~wVo}6ggh%`cyuNNjrqt3k8{@SDf!DN+JAI9c zIM89DJ4VQ!ZWrj&)5_H9p(1B|LokP=6s3zBTyO8@pCi2dTFH4vl9eKD(=Y>`&fn6m zbG&i+Pibq1=mMtJN`aleFt93Q#@0HLaGccv;ib8&rV@F4JWqe%(*QNAgCaT=u)D~~ z!2BIj2mY#6BgR}RWz*fMeWgwFrdpe%9uFE&tq}?lU|C7D0X(^Dtl9?p?WWFpMGGds z-Bgx=O7#ynwGgohEulP~Jx<=oX$rj2T=msZG?%JG38$N>ERnf+^3^=^Ar&ErDUG5J)Kb--gUA8N2a6H{`2bo}lWcI)iSyem3l^{2jzxIqClFM>H6`x{6Hd!%S)miJANgjOFA@v8(-0ya@3Kv4j4P@#56| zWU*9KZIZTe#W(y_8D;5iC+O3_zx{FkOgHI&?2o5I#euTL&SFU=HgB=_or3J*QKURv z5aWk)PtSd&iYF3p2MUhMU3~e37Ps))R_2_=^|?_SYjWmb%58_7mX_(M=RTN`xF(-< z?NYN^i_uU+VIzuAp62G>5dPEi87ZISS7ZCQQ0+eqidOsoVo;JH#p!n~FjHm;7aaAb zn&u5As!m)df@{j`$e+vY>dW0B2`eam=4OU7u45{-mf%{p8;%Mu%_~}=#cNV%E@XD@CD({Yg{*k+HHk;Qg%b5n~y z+%~`WIdmEn68os{RAz=rPqg?ZB&Ojs7cN=mtS9yLx$!^I@pFp@K*4%LsSe#yV|6hN z7jCl@6sU*>lON5{{71a$@(^YWk`&SiQVJ4~Vv(-5il}k5K6Eju3t$|cZN=V|*2#C>#~ zo8Y(Y?1g1FU5#q$sjl9NJ^xm8Bw#$+Je1fPT%onBtf0GJ!ykjSo>JRtmDAn7qaQOA z7MPnef>%|ZlpP+vEtnnP)$P$;P8ecZ?v??h+7`O`nKlMQdwXaR#o3E@DX~(Nwd#+! zNGVjbX#{1vE{X(8Sf79FFJe!tuGsh}Z~B1;JFCcd^hj2`jES~kL#9DHX$+|zq=$EU3@`q=BEaoy`p3kr|bu3;+!_GsRx8Zfm2X>;X2P!^DpZpCi0Iuyg(c=1-leq`G*;E~%ss=7u+a zKrGpkE+aD;s`%)UT0AmZ9PaT+gGqE(#!8JgzV5hb)0wCWJw45{AAL?q*CJ-kSt> zez`T|cMOgz7Va4huWtt5p;rBRXXi}e3Gp`PU-(*>5JqGo<0^Xz%m^@((t!3Osxku;c+UW{7A{G8Hqf zu-=`m-u+2A_9E4JQZ)neyr5L0!Dr^@EGbDuHOg{y?=9VO<^k0nXVw}>`lM;p^W+6< z<25|k@r(U;m$Q^aBFI}=gk;FeO%|J|CA@zFDtek9jX(U1R?L<>Cl5LH{9mB!6K@t|fmI zEnPRU-x;CA-vR2=f7<_Nd8&&XcAH6#6GXeL*6oGmve-fRMmsTsVJ~Ow#_ccY&8j;8 zFEwTTJyqp7^bhHhdY`beY~^cLv^t;+DUY3&c1KlX#S>w|c*gU!8Svfx?OJZ?W}^Z{b*cITy*NQq0&B4pB-HY>|H z0512mrcPgHO1MjTyxujYO>l&Dv3b>xJrgDvr3yn2NX5~lserNznaR+PpPS#F5wM2SOS=a^=r8I22iOe3I zaFehObeus1+}uWqi=4b+7fo?8l9|>`vH{!$gA%9oc`YPnz#m{2saVA}WZVjGK3>Af zA!rqNF%0T7xPy(aNvU=!soS=u;h{uU>fA#oNQ_LSmxq`Tg zZBsOGE@TVD4Snh#@>e|7R>Zq2+*C`O9rD3sF|_8$al=FwgwR%Z1~j5OvQw4wXj2Sc zX?MqXX{2+S33UrtI=r}lAH`A)x2xBhiT0>#x;_`qg@8tc{FR~mJg;cAT_Jb7XM)wE z`2Z{hMq$SXOVLwqNxWkaz)f9%DV}7#^j)aD=WPPw+S)-&1Or!>6kmfb&rL+B^^ctj zYQkAQ@x*Juh##1jF0x-mM?LNtRPa4ZYAe}w)d4N``pk|=G^53+8iD6#7rGm%HiB)F z(4ZBo?xu6?2&07-#jz}sZg4WkOLWYWPgffSA~b>qdPh2NWUzV&rPuTX8uac0muIo7 z)px7c)C5%&Wa;{Tmtj3S%Ym&H*?&^R9U%9VZg$_g&RI4{2jK#($_)5ElKZ=|aWyFl z|D!{4*YN7I`^iGzdU(wRkyzwg6Wf7#c$IB=)3$ZE43B(~N>6j5#--UwwYtwC$a#^b(U7=pkLqNI|hdoL;wKqv(8a(K&*G6%v+t;+9mirKClgnlwjWr4-vY zWgaynnDd6EU|mQ*hZH{p&rg_5_n)l3iX&V#+^l^#$grY}S@*|^LG9<%1kB~C8`hrr z1oe;#cU?YJI@GP4=SpASWi~!O-#6N+=rh<2Sk|Q0*|ur|WpMhS4J zBb!3ObItIFQa%~rGI`xn%w0`L^n28(`lE~+8XSwr^$>)oDaN=&=S=-`iD0kj567q$ zn$E{QFOgC!-D%Cuc+}2VV)C?D<3Ch zTrtVmOh>uD>eCU&b`seQeQkh4BAG}{VlU8#gB^EmW!T7layZ7`YUP0Sbkwc}<@ds; z?UDzun#1JjbOj5NbtmJfn%Lnq?*>{C+;jn(sNe1*Anv>Iip~8*?;Red4L^U7tCe7n zp&JnsY=(1E*{r{p-o8LrHIXOahYoR1G0)#bz_h1y#7t&y=T?;;(%;MaarVXTCQ`6Ej#Fr^&B5TLUe^w- zUu%2t;^(4y{7h|RO^FJ2YF9P0JGnK8pX|4vGoquDP*ZckF%T4O=TN(yG<;lMW?fm7 z`N^R)(hsJPEophL&Y!%(E3D_un;`HOqGO819Hh1J#N+ev zPPQbS|4J=;6>b=g>9DwtzM`nFJ{A0`FdT)7<^sY+%F9izkrj)8{jt|!cZ`8aez4T@ zxa5tW#b_qCgt4(LL#RifpWx74o%8$er0qr~*$p<<6U%YgWk0dS;N^AtX%u@B7uuqH zt012b6Xos`cUnK#1?lU`r&tp{IrZ2ZH~{COJ$c#`m~e7* zwiaZmT)V~y|GHkW5{9bUvF6Q861J3|8B%ajP$&VFXDhm|eX%Pd->k#-bx zpP{9%62G6j6$MygQe$WQw9mIc=w|t`kW&Ni#HeW48ChDi5O(iz))<6Hl9Ud1wV{o> zBx(YfQ=osg{KWrA%BjIiN9u%C0Ti^-zT0G~qI*!-p>iYFVU>jqSir&-7C5yt`EX6) zS$ObmjP3pjO1jMa=CqVmVsZbD3$1u&N|Hc|MxACQ$oi?_k-7 z@9f4MbH&vO?z+_Q9U3=yFL}VeCW%`f&9LeI;%}@tM>w0u-u<&GC7xi8et9*pgcG%h zkhHI#b=DLgjjXqZl6AAi&)aI+IH z_>?DKN4)b%Tzi%0p5Yp^;-kot`7M~+F)1aP|E~%Uj-kDUXy5&AwQ)5!U=>dn2bs`uJHupI@oUYdor?rvEgcIHs1NMa)=m9B}ehybEef3c9;n zX0|*n7!$Q-omKa)CH!08<6IkSre-vJg@Hwt_(JIbNyHCnKIKSzt^DO+dTgF_jGtv! zDm@f9VM0{^#QT0c!6s>;H-&ZjoMmcB<8&6as}O*OJ)1X7i!}&n_{pdW#omgP0G=ef zm|oA0&^;iXx{ZAOg!++W{8t4?Co3_-fuQ5L^f?ImoM^WR*v+k7a(aSI&G*xu^`o9D zOS_PW|90uh$UV6R^d+Wl4QJ1e(7isL{GJLCq&R^NQuO44xD~&EI1qs~kyk%{LThzu z&~aD#K;Y-GK;5GZ1c_Q2xf|yG?WDCU(JdM9(Qu-(xQd$mvEKS2i`hFn#PxCAJjtnl zqa*!pT+*;>+QlC9v&r-#4j!r-15%``GQEjgMng?eym|K~1x|vxSA}6+tL9ZL>xnL= zS^W-=E~Ei35UYtRoF(f#R#G!%TnkLuRXH9nvo3V$&l|5IaxyWr zsn~T|XZYMTG2LXTt^^nI_E?~@zgEO8NSt%UtfiS4DS9+(@?rmU51s=rS8uv zS{S$Y;ojrBqXW=`A3^hC@-dN$)MO+qS1D|w20bapsmG3 zch>44qvde7_zQUettdIr^ymla#LaP}K)T)Hc_{JM_tv;jnfCW=k5axo?g)jTQpvv? zHC;xr`WN(#q zC>i)dqLnnDk>l!$1ZU{x*z{J1@a=o9J+7LoB-L$`zm4Yhyh!)UttrVW;#Lypdb4jx zMOZMb;43Z}wL$-~bv=ts9$?vkK`YgN01&;CHr9D@ zP5F@3g?Jsat|pZGls$Hm7|!WNma76G(eOPlPts%F^c-bpSIJt5v26U~DkyXg_;?O3 zRwc!ubVlVn-#oM+g7k*oO$=9+1#k;pr^+;q+?}izwFWEcRaQ+xFHj0#jK<2>IeX9# zu2j1hf#h;|@<|2#sVYN%auJ|~i5TZsdmPeq^YE+@nHk~$1~j5i?z>I^bMhBPlCar* zN!UQ3W+&J6^BnX<)rLowkHMu_CxdFe<@7zf4m+e#WgrUD=e9jF*4y0s^TC92X}xKS z8D*4#>gntMqp2UlDHS_@)w#Tvb5=J47b)R8y*%W#x+%Rs8tj=ZccC8P44{^NzD1WZ zq(i;j9_g?`$390Olj=#E(C6hX^}eZT2Jd}WN6o{J+kN({qlS%`M%0Q_M8yf3;h@>U zBXK3&T(t}rliSxfrl;2ND~B4V_25tBimmc7ce;L{3tg2~il;BgoLTr8jq?%+oJ|vj z2QRHxFc*Z;)m|^`KX(j{-0r6-5?((qbDYKdX50Lpr)}aO!=_BpM7aTAygufp{-D*U zOfxF1R+rLrRT9McH$2`Qxp{ysj7s&YsiTkkLN!rmgXXMT(Hx{!8$t~MwP4M5o80Ut z1H-xkytXaw`K#TmCiHi(q|DF_lpI$S2`xb<_|iJF#o1erj`!(~q^FW;pp{OWU=i>RXo?F+ zoJx{jo^6J!c1+E_IsVGK!4y=X7h!Q_7Ac3p97mbdNHaR^?L2Jsp>*m|L|1+CwHk<^eFaqI(&A$nfEt%^ ztplp89bDk9r59}Y4v4s+Te^c*zb`RdMYti-)kiB1QO?NGt{{(0JAiQ04*VCxaif${ zH6}R7++-kl<}6tkYVn*NpM5Ynrob6UhU~Tx@#@nKhmVjJ7l>WZ1s9){agZb{5vl1druQRc~J|M6r z(#KFb{1UQJzt(N;OkNvdUe{OLsGcq5i@V50#h50Cq^6r|A)xpP=MNuT5ZZLfZq;dL zjaLfYjRd|Ft$%Xi`6}*HlTOcw294ay#rOwB;r+R}o2;d{w=1HVnX8hNFrzo%C-v%Y zM_456URoLJ{~n}0Rs5@#-4CKB9dc_D|zeCq+(_x|JIOuR4{$T{*@bz>Ms0*^73adPKsDTbN{vmn%t+{d|^+(U^ zYp^3Zaf6c+J0E1oP@6N+?(-xmwhd>b@Hp7SYKIY3-gEF;6xhYyT$iM3W%z9X!#b&4 z8A{B?4!|nOwclGieRs!8c6NDemov?GXM+M>#F<_{`4S%c>pBr6dX6ApfE})fK723l zgXvmFCTn+My=htinAuyqD?aOI%PD8Zk7qacLVcgujN+hMv8Tf#d)9`XE@aWf7>S`P zENPgZv5>{r`HB#xgQ3JB1}Fb){dVb90I3)9cK=g5pB(9Nu~xpqUap5lYXzY*^8DVA z4zVkBy;Xar_4tQ_CrT-?*WpQD4bF^dlO6s11E)4%Ksu3hUuGKOj`YA^Qw5j?F9!HI z5JN;kReHpmY0J%XGX!5X3Qa{S%Gep|lF^$u&<2)jtT4lY5-%5et^SCYr_TkQp=GFgpr<6tjjkrz z9!*8Gb`4EP9Yvbsr0f*xnH8<$17bKqSdL_UocPp*+311U>Zf>`naXFiEpXoi7m{~= zP$75+#;uQcSGF;o@RZ~qr@gv(5)Rtg&IeVgq_^JK&TQ>+VVQsa>TG+UI(3+$jP^Vm z<;Q@a#+U;1gJsF#6EZBDHS=*Sb?jEBmT!bm265ddydNW`PEIbPM1DXe4e)Nkzymj9 z9yfnOi>s93v3Bgwfsm!37u)`y@oX2m55&A)>d#q}FPR8Y4n)5xbFq+D77eDq2)Ej1 zQ4H1|zfstp>oVY5%%Vp)R#y?RXjD62qc5O!D3!*!y-1fb>77!}0lyN58gg{``m438 ziyK-VsKZm5{>_E3+j?WBQOhbYu=d1tJ)bfW?1X-(Y;K1S&rlvyue}f`W+>rg@}l z&qCDCE>8xxKn2oqIbTT`Azvstben( z?i2$dtOy@#o>|%*UEHY}4}2Ed)t8-*+X3GP>(1oK<)J-AP}R{Uhu!$=0Gv-BlL&dbEk=pF-kWt)hP$84$TT-r&npXXS2gVAy@H4;?6WI9But@G0kJ(K@P0Vjz1y?=#`?Bj z(~Y7Ga}+b_8An+pBQHra6vyus%=tk zbYP$qN;amLv#4EqG0=tpz=F(8^l$I9GUIX^6X7bZ;;?@eXa`H`2GsYK1!% z(N{!^`_k4Sgbe=HqE*?F(+HVYB!@UoIw;)z#!1?43RY-h+g#>HlB3B8hUo4eWM0O7b~BB^`>U1zA?Z?Q6CI<<~X zvSuouenZ7x7}yIc*__s#d2W;3`2CgAIN#B@_mP#RJH$PUD@SW5tvh7u^8Qg{Q0lhqO!kl{NLfbM-jq(?TAjYlMP5`1G++`Lgk)Wn0!|hB z5PuIPHsUM!^}=_w1s&S*+F7%3A1RuN>fl0kZtg5~?hy{=f;i?ek_Mm8ll$pR3%6#)GJ{&QNG-t>X2|f+{UuE7lZ*Ow>opStO8B%@@~?ntuK}em7(!hS*a-VafGmoLn6(k=vv{GJ=ZW6d5>csEQ`{ zKr1^Xp5_)HuXm$57R;lKp5LQ9ktoMb+c}Td$Axb8dJezp&brK5fzL%=Ieby#3C_nD z-jikH8|~40+2jhd^CYj9{q(YEAbjMdliOmyMf*ad2+ZBADOa=X%2xB;`+k?Wlw9NY zTZ+<~c;3pZ%k?u4o@Qi2AoM%}TZ*Kq!D)vwSksZu&rU9r>rv^!}tP z8Za#T*8qO)h!Llh@pQLy$-Sq?Z|t0tUbC-jqifgI#!5fk!t4y-^2_7iD*+A%fmMr1 zOP=aVaxn-w3n>7v_xs~^VBCAEjdqvJOkH4z^Y=gl^Nu;M1HpR9^;H}6#X0IQ$P(LS zIQ9=$+%>AL(4 zQ|V4TeaQsDuj`_!GZEP_3?~5$;3QB7H@ZR}99YL!2#&x;I^``VM&YeBjAjDG&Vhw@WXK!b8cYCr9rS?M_WJ|RMn@$4QSy}QwT zir)>A;)I@}x^%~A(c*`ybm{f7_T3u4)S}r`Be-fgRl(x*fzDq$uXT1_A2+!bUfO`U z>EoIBw&;0{o{OoiCu;&>GXd?C4mv{atvoNd-r=4wm&o{7J#&C%`codhyZIO?wL}|h zw{F;`F7CD(!xJS1q4I?Cdbr`QGg)mk1*Y}LL@pdyK@~Jx=oT(*>XU51bh}Cmm(IGB z2RV|~N%B%@mlolEanH&Ob6GKi`n~;3G~)q1u!z2Ja-7LC#PcBoPR+ihQY)gazC6F4 zr=}(uJJ5B6)OtD6T|80#vl`)jfPI@bUedWm$yo$s=vC5riTz7x_h@B^%!bd~! zj*?Mh#^YNFkjMGZggC#MYZRu;1s4F0HL!y30%b4?npLViQftJoMa{w-@2P^?Kk_b@ zR;&&BK?Q8BXBX1>I5&P=NJ4S0fB`NJEcS-pT%+4ctIt}KR9^RKWF+N9oIvI8F1FUL zKzzwN($Dl1XfF`m!K-{G0s?%N*TFYm^>#u7~vz^U{ zURL^X&b~WF#&aiZ`Z^#Zlh3{31?KNj>4c5{2lVeQ&&GqYaGWp9>uL# z_U@jQ*|KR3r^AjdzH2P$IT_z)7tlyQcOzbk-YsET4UvjwfH>9mu09oAKvfu&6Oi(F zqC`C0ior{!eeAup^_An@NVR17RBa=4;(u;E{d=PFN>F^f9``LqnKOf~YJ|AlNx;hS zT?pM+;g%;>X*!MOt?~Saz;|g3k&Y% zQqVvs@_RldSzLj*dZDtt!%yr!@n(Ha`apV&*xzReE`Z^bWyxEzS8!>{elJM_T8Ho1 z#&V?R4O+4gk|v^5gp72t#U4@>Pm#Si@U)*sU>p4C=$7G` z2l%L5+Uo<-fjtZMCULaSy#MHY%!<7u`i_79s9XtjtgX@h0MV4xQ^R$9-<-5L3{jKN zEuz2%Hb_-{xpi~ON)zjieA1#@n&pe3A}m#5b~JKU>3QmlvntE^gc`@}HIGEl&e&cW za*m~cVU3GE;IKbsAZKo+8bZCQL(mztrS!{M&;>X2b3pjO+^ayQN~q>Lb=@Q*r(wrU z)c1?5Qc0mL576?P)H;LT*2AWX=c+$u!J%BYU~eyN6d(5*9tmKB>+ra{vuIR0F zsA*^P?rM&POBNzHTLYVFM<$)E^Er4=X-&fb@Gs=M#j72p$RaB-uhoYsla>q$iVgZJl1C{FP<&2&ycP6Cyj9oo3iucIlJn=XkM)Np z<#l6(k2|~4A`q7fHh(XO7b;IaWLwNfXd@L7AN8^MQ4@l~>>}vic;m`;3N4KyO0@_3 zysrlQv3m2_o?cMAi;niKbl_6=2f|3jA;ul=?W52ZpU#I24ZT%$^XId+$qwa{APQO^ z85|BvIyKnGoa}7|#20Vry7PvM$x(qJ=OYq~-ErKh8n**rO4*w1jChHD%7 z;0oZ7I^MMYk#A6gRo*NBh2CjTi>zQ`m%tdG_R8cG0BnqFQ<+ic`fo}%l7U`9p#2!- z7xFg`eLtF!jRh@=v*BEC%He$h5V!sN+5`pNsf`k8Op zpgEoduH)A{Ob6#BR#XM>ACnt=lJY(!aLncjMGP?PqLm>wqX_kl%m=ax-1 zF8)N0RYX#lOL^UY6L=|8ho(aU(}@n9eLpVZBu`#`nygPw&9z1=>qjn)bzsX)8nsFL zKg{d&tRs(Dc{#;?GessWsPc{Iao;%)&9Gd2&#=u_M^TE$zD2n4dZuhjje$v~8vBkP zzVlNRut^u-;_ci`CQi-H9;uEn6V6r-wRnCX&`l1F$`zf!OYAk6sRM$P4$b{Dfy-fJUWJxTPp{mhw2;Jx4 zOBX&rPs-LiP~>4=4d4t$2u?OB2}|iin;ocT>+tUwdl{k6Db3%&>PMC*~;ojId;U(WbjNYk=ZNJE`JHeSj41E&Ikg#9T_Riei{aCH{jCuiSxzi`c(*^g?y7 z=}PZwBilv48e~B{BPjErXQ)kk zFk@Uwydp_rQWP9qUbs6r-Hw|*sZ93U2`nTLZ$DQ3dqPRc?Tp6r!M&tT*46~u&S+|< zoX90U+(L+_YB?|E!5uSgLBz#WcSM}uSXly$eE7-rkfS~_dZ;(Sx= zA~$%pZhcj%Kd21s!f_t#qQR7b@+=x_e2Xj^u?76BRsvV@!&z@P)Riy?+z3WliP921A1sB03g>uLw`GW)2sS9mNUMzL8!$_sz-IM&L0`@j__-XSVGeaip^Mj@-Vi7B zBgO%hUhiGdSh3xDg%wTKb#k$B!}YhOHci!&zsHwqykG?Yr)S{! z7x@wE!>^%q?!pZr+W^CC(kg8k+m7jKOzP?sZL9Uuabj#s;C7e709((Ga!wuf4rvi1 zXiGFftu>ZUt&)71fiaxJU@`XR4DPJV21fUwv!rSKnab*SMvTT>C|WX3i2=nlvOq1g z*IbWW4QU4~9;mUhV0CieJtxc;M$E4lM9jb6f8*Plr-{7o%-bGZWj7)DM?w5bMKI*` zc~d9qCXVHj6jo4HYiHo9vO-}T{T}pXGp5oJBJ7WNh~5icHkw)#4!eFHYmKje+Le%7M=ac9G7SU$5(to! z2a;@sAB4D;HS6{FTCnDkYfLUEgH935^HP?O_qAtq4l@!r6Z83i0$DANfESD(6?LQR z%&$WT81p=D*b-lVoC{fx7~+M7?=EGB;wUB4lwB6Y=StCNrl$kPSdia?kze4H9?I0? z*?%(l5M@6c$kQUXq2v!~C&%k5rI>$lpJjjZN?Yg8njQ{`dG6+bCg>$&BY9hNB?(Vj z;L@Azq&8}LP*)P}>ZI`-8mW@|4VsW{$Tm86AZc`VBXY5}Gao5NdbV+J{Xxgl$E+$d z(zj*G#zwx}F^*Tv5HG>9gZA3&D6uPz*?d4PvvHE`G=5}BqB8g86>TL2FtHDq^HNs3 z20xDN72VCi^{U*$LHLScrD64W#pPwl$-8*oPbS8nlUdZ zi~LCS^}=#k3h9vTitM8C`Y-k%-V;?+3A0kHoX*3H^TE@H=;+$?ifid3@~ZiL3AASq zVtqv~0$PBx0naEr(|!x>oJ)GZD(Jpb7ySLmhUU~R$Njv5tRoGJEAs=fChZ8bfb6DB zi!yw$r@aoCMp1@8@>tcxz0@0j$@HcOFoW^JSbj8ns|7z2TX&w|bQwN2!uOcjj?RGH)cJ){sP>?S64XPgbp z9Rck7gU|X*wHt2=b%3EuZM*GzLZca_U@l%C?1LD2h1kKCoqHWz*j-F=XhsKb_lqpI z(>9H88yld0#yAdTxLJH=9sFcy#<-&^_`RZaq<%xx(Bz1n%PStAS!$|cJ^*up#N*Ah1z56+EHr6~31PKPt zH~5-D5FDE6V!$o6 zO-b)k#(2;Chmm%gu+gEo2l9Z(O>Z3~x zy%K|bEVsWiP`Dv@7+GX`+xV(`^4mKMCk;ETR{|BX@Q>)+Zar0!pha9zeBY$xBV?b! zsk{bni(l@xF(t$l4#^Ku7=$!9wV6ow@!9|q;b+R`_fM19Mm7^qJl)#3-}AX#tX49o ztovKn@s_CJK%Fgq3N)ReN5@N|)>D3D-yLQ3KM zdvo^*1J1{1mb^~Z9DFaOBXQ7rpXeT+>b}8Knd}a)Hltc{N17hAPAf!o`=H5I-x$x=iilQ1up4+Ja}y#0X`c zi?#ofc)PUvHwE$H&MyKyXp-w7(`G>ge+BocEO%T#Z*7{CD;e za&2r2q3Vl)!_<)*cnR6rlnzvjivzdDii~ucd>hpcC2VJ7?EevgCFbsqeDSH0$|?GCetBSP+R`(UAvyWh)>+%;T9q1kZZlz9 zVex~QQ$NjuOM9mxKAF?=E(EAyc&ix{GrO{FGY+C!JpSgq;mn!+@eqSL@eC>5(j)P^ zRiPqJ%_8<25v>;*Ym4vP6j1tz@9(&i6b9+@SzOgmQNmwAu|i*3fSV!_TZQF;8^BE# zFyG-aCU{ruD^}P#Bz=Rz^_(eohS+q!!RIoyIA;_DHc1%Zqf>cq_q-O%>?7CZgbaEVCJ5!x$F3+PZ^`Xx7x&4>n zd&?P$dHgT--aH)Yz5fF)C8ea56QNSFD{JZY-?RMlJlFZ7>*Bh)Fz?Ujy}jPA_v>S*{?hEe z`eE{XK;F`gvWuo|`^Sn~k6spf;L*C7(JHehyB}EfwQmDfeLqps*_2`MW7{R$$}ia7 zqlY>C^Gk@9^(iLLfEDF8z$O?VFR(OYrQ9nh>rq8$37dIY&tuS1=^^C;JKf>J#{I^) z@T)`T?59_5hM{0%jvVajW6Rv0)(XOr`HK5h{kb20gB zBg&#GN$R8gUL z!gSW78pQzENtB6|n{d1XrUI?6bl!weK6+2sE|e(8YKl5q8(F`;Sp|r<7$238SNW50 z!HMrjPuQ;O-MzBMU)bB5H`wC}{StuqFMIPfjMO|o((bubSzg!i4KP@n*9CgPh?&l!QZX!EW!p(e>$a2V9cJN5;j0Qc#iL*|;^8gst~> zv$lXD%)XzBFby}o|F0{;?1}r#bj2canwZtG)vgx-d4BJWI?Ks(8Vo^2? zB=YkUZ5;$Ykvbr-rE~s&r_JJe??c3drU-o|a z$NN6Z6HMcSx3`#A#Pa(94)2C#n7oztnp z#8s(6mxqj$sSG15#hfvv34qv(Uq$K;snZyxqI$JUJ@drP43~qGbm+7X{ll%9^g9~4sM8K0wQ34DiQuw z+hyE3a$-cMRvyVs9g-mihB!A@dF* zGcSmEuAqf@f&(!d$7WSBTo{$MHV;v}k?k_duNxDX2@cvEJx=sb zi%1k8I#@LsiN3|i^(XRHObk@n=yJh7W9z2H{FYIP8Wd8z zWnvpBn1}kBUKkb^B$IE=a_~eu;%3$ROIKI*?!3?aM)8(D?O4kaOxt0O_Y!4ogpwq~#_glPmP#%~_ZLKu3#KsI^3kAZS}#7{Fu)n|M} z6}7>4$seNbM%!781>|Y}ov86I3*7wh=d#2dx*I3Gmxng5sDzjwab!1+1?ce-s@H5s@> znm5B{b|s}Qqu9qS)3?h5BHB|dW!l#!yNeCG0YxBl#`k%bwyLBHFL^t^GNiiA2hc_$ zE^c||+6Ml&-vL@5owTh%3Aur zT0)ln@fA@}6wPBYnqP_Gukf#H^T0*8f75>+Q^1$CpH?DM zbjfU}TZ(B|{a+6Mm#;E*4)6It!hFBh0~Wyd|7H09^3@H&pT`_2ec~@w)Zd<;uK9ij z>Jgg7KR^C&?D>yz{)^M^+3FwT{9~M7q41xW^WSm;;3)qX=O5$zOuhd^%zq;0KN0hv z682B=@SmXYPf++LDEt!?{s{`ye;|v$af3g#4>wJi1J*w$i9cDeC?^}4*+Dk)0eE?W zLpt6y$wK&kkx`E+_~p5-B$&`qKuB_T$DwX;yg2WC;LJ&n{$QrN34-^TKgbgP=V_8# zj9U$t<3kz$GXmetJ#nEd{jp2~!`m{B%j(TXf?1WfABTQx767VYK`8V5oamGv0pt;IxO=R1iO0Ch#K9}x zf>XNP)Lwp?x@O!t;?BA!Ezc0QL%@r9w0~sk&;W5Ti6ROllqqe>x%V56XATJ!HPhj4 zND&7wrK^?aOH3u>tX18_Dq;@YI{G`qLFNnJ=}fRVS>jw*9{e)w$sL}jg%v&0<+KfK zmuSPXuy+ks+X-`AY3*!=pe^va)M3NJ`{|;ECmLez{SC18Y7Z2>?6rp|c7g~joYHqu z`w!SH8K5t9DcFn|jykL%FJWGp-q?zipABA*dS2==QH7j+S0NuJDkJiQT!qOc%Cg@s z^_iWW7-;ELFE#wgR)1myBRxz^Q6h{N%VyTYUF!>l!PnH621oh4xY#b}f*HBt3U^#< z9d$pxM(qYs?}ZtRX~do8&;a0Y=4vkSJ?S{XXZv7DhR>0Ax&9MR58gRkdnzffEhuQi zA-8?@#b>e3J4rrK#rTz)$#=)k-zhy){&=F^dmszsPgy4RsScl@v|Ly3P@QgVbyc==zn_4h3O;w*48`!Q#mpAYdH zcO;4J8ga-tUqS5dcq4JuKZbO0gV*oDgGffN z+wtYh%l=yArIkyYksPAb)ruOKa2?~^?TK=(~^(^dDt-6lek zwnHnFzpE<*_+XFCZtfnJE7g!NL2kG8KT{H?2T`W4tA~mD27b(r<4y{e!Eu;&PxwIi zE7DT!r3j~CNzcX0{{mj`eOurKOt?<3dKm9JZInHJg-3Q9d`=3g^{9@_wLr87C8hd| zU-wGQV1yDYaZiI6GYdizsq^IJFCf78Kfn@)Hvb4b9upr!T;mO}>8I+n@0c&#va+;L zrjaZMipd?BpDe`c?n1#QX>u?7KMCJ#b`O4dXd^-G0QJB&xzLMMT6R*HpPRw&^p@Ys z*x-T4k~`{F%SLw8wZNU36w4OX{s|mxZ#^OSkjOR^O^DGI+@|N zi=QoYM5|)3P<+X3?j54RnqA4sdhI(FR)i=|UWHdf2ozm#t&s{|Qfx+bjad$ND*3M^ z5cyANRO^@?e0|aC^oZL~R`POL%kf2DTc!lPD6W-=hMC-?3hu}wrpk}NYek6oaM2rL zk4_SSDeU>9Cq|;!M=%z>xGS@@QwCoDIjy@7&CYJ^Z#e z1lV7yYixWHypZ2h`S9~5VUmfbo%b|%+-J?ivC9G`^HWT1o$2()S{-gp7oOgvuwN+S zQ7*HjZz@Usc>wwIp4`0z%#dDz1xtjU9x2ijjZ>EPdp-UbozY+J9JLKN-0O{}HOVCF zU~Xe_?5OA5XmJ{Ne#f&f(b?b921#eP3=oKbSG_jhoooo}0#cWHsevB*sS!kheV5+&%f6Cu_HN)^qUw%1)7?#&sZ$6R*dthyhGJJ%R+la^K|2K+-P*T*lX1A% zgcoF16&|qiCFjWWY&-99UzGU8E0U?|(+U9`@r!r_$t)j5*38pdHcQ#c=u%hTX^ZdZ5&8C#!l=kpqzZMr5;Rhc(0_X!wnOL=TdY1^9re)OY|vJe=QQ`5dIV@?GotMd zd9dh4c@(SL#4T6~gMOWoWP%Ae@TJr5HgU6aDj^c=jC5{=1vS|!nm};Zw{9(zsm)4X zA;x(}Kh}K0Ialohf0s>(?R247{Vt}Mq9L6_M{D$9pSwa%@I|?X`m*A z`nK=Q>^Rfghc@!H)A+;A2Sl^+uEo)j#!Fi|EB=Zb#JaWoz9-tHs}o|C%di`B{C-=( zAM^qKTEF+}s^-t0ws|i!G2Pwe>%dt0uYrg^XJ0VwdHvqNRjp3TRU#h$lpdI?IbTt{ zv^h!Txf>RlT0BfP8fYesC->b2wC#~5G3lzS=S4S_uPJ$@{*2jyazbCZQZ7{8bZbPx z1*x%D#Bwb`dlk@83)(_m{(P&ag%4p71S)~BPCHJI94tVpd;K%*m}*4gas_l3)& z55q;uV;^yGN*9Q+zw^}|X7O|L=Ly=1aj71)H*xeEf zEYt0Bi_Cl*27}~{OsgJ=avUqr%T^nfb9Y#{wkReVs4*w<1Pp#adN@q&_r_j54|`YX zIH4b@M0i=;oZs>O%X-^A^lA7f5pc0rDbHzB0f-O~x6<~KXWA2j<6eR*t{*O{(S)Ys zsmq%tMA zGMioCYD1rr$M^@>y1IV1U!>eEPQp| zr~P7~r~XRD(5-po_86Y9by_D^t#nk-nQOv+eA|OuD zlP@S1kJQQu`~gW(^C+)$WeSND>$4U3o~A5sV{e;4dZ4gfzKN6Swiu951IAu! zf(^^%6|no)Eu33`tec?G9#yWSz7*6wyLMNkI`PYpv;ASAivN7NG5Fc9QdPyr?Q^f8 z8-dJuO;_^pS!pSysVC<=H(wTW=Bwb9xB3qPYBaC|XH|rrcQ-h>L_M|=$0(*qOUaXmjtq%^=7tDa* zY`P`OgJl|BhTh*Fkm*M>*84t+f#xlZN!@pF>-4qSjWK*YnP>dHO#V>*0Ss7H3*q;D z>Fr`3gb?ehXghT@99euX@O>TZFcAgYiW!%DRMtpuh35{3Z)d6$!(D4dCqiUBsd|gz zNsiZ?7s^iV75d5Hw_wf`x4LzxBewp&2K>5-g`c0yqR;5=hWn#AzXxBpuV+#f7jQGvL^nk&|*jG zikFf4sQA~5JZ?yHrM+rO{M)L(hurE8C4G46Ox?ncr`_g+FR|}94O}pd_Tp++z)+6f z0Q#7L-EB@<#l67IHD^Wjr4IzXr72#9RkR|4K?rLfIVGzTGLG4(lgppR<>F%sxqzn;Y^+DfGB#BtoxrDaQ?H^r zCN{^}D@ShV^fh3}coC5Hjm()8_V{)$g@d`TQs$KpHIlVL>uR6)vEk1<5(t>j@;>HG z_RzF|zv&w6E&};Ev;0SPc8zn^`7Tttbk;OzWun&W3&S)uncO;M;*c)n)=2Sr1hzhE zTH_+x5<2O+JVd5#3eDE?^^`+7w~49Og3RmHt6|`N-<6dSpchjK_ejfE?bCkp=-onu zA-qFU|JfYzw$tGWYO5l@FALAvWV?$8s2pXH(1K>6k(ChFdz&Ou5I$d^Y!S7%tdqZT zcT@90**MSgz{&lR1w6h3zN}Fwn3mBR48D_=B5kov;F`5aYg&rUxx80LT$OplNxJwJ zwaCN|g~W$Se1Q+<2&GAP4sm+R=LMeI+>*3l${KrFs1?VjbXm^yStKD#W$Old;iRud zg(1S(ZNQUQcG9;CY18Ic;jul4pLur+b)n=x^Ytp=q;=%iDOfE3|z>(>e+Q2M$dxr*lyoR(G%RzzjFWZ8n<~wAxgy zvR)>u1P8`tMufxSJ}aoFG&a`9CpqWg64w5vr^@_Ux1;*~>z~abkdd4+N7qCU`;(LV z6dac)emm=h*>@-185(-X8p6Z81aH3BG8;(g6Da zLTllR#7^)Tn~%Eb<@Mm^40lWj;h5 z>nDqEx-Y!G&K@6Ta|?G`arT4y05ZM`awSz%3wbEZcj?_3nRb`4rb3!JBLw8fBvK;_ zmMW{Zol+>uTp)iuvNDmpror=VU>^!>?2%lF`QDMACSVyz^A_!RgI|iCVvR&zB}no9 z=|FXquWNWMkb39Mtt1bdsce2JUexJuZCFVG-|6$uZhHfQMNyR@AxG!BqgSdYhULO< zAhxdCl~(I$r9=m%Y7f?nT107472b0vcQt0Xjl7hS>!yCT@XxVC#w1HGy0NVC1oQ`+ zjJ}NwD?S){?#1zCb}Hbxf^HbCmQ~y9e}X`N07TKod+a3HJ$6!r2izRzJeCEbwoj&I zhq5NH^`xi`>*02xy^Ki*OS9LihqxC+u+>SkT__fFht|r%^1exbMp2@@5~&@~P1riV z<}jS!Bu~q9w^8-Ca7{Dqf5s`puVWyIm-yvHvPy2i zvCq4!RG#)iu5A2?N(jsvr1G+?`I$g;7HjZA(Zya=t@BJf3%&ep)BHf3$${-LXDQ3L zLu^&-o`#6A?!b2lh_lk{?Au3Q8Uc};NnsDK7;_63%l)y=P4z#|ZQ5n61{V|;XId$B zs7dOr-@-*Eb=Tj09__YkU1Ce?U#K0tt{_fQNKH0GoP%J~(~@Eih!cl#&|^x346w{I z9_eckTSxb~;nf`Ot<)rVfDxZePMRT`Ia9 z6(N}I=DPrtbT3zei#6A%dP}dpx#{Tq-8f^v27A+GeWSlDB<(dx1iqhKG(T)^f><_o ztyZ%&0(PVFTWX)2>Y?Kc?DgjCx5;zpOa!8~(RtfGN$Gy%SX76>kc4YjQMc#LPX$}cDWkZRLs3iR_4dnzW;#vM7x((KCS<8}3IOoj{lgsiElr zeHiX`I6yJP(Xv%hDZBK5X&nA=LG?l%kyE)<1N3OpDaahR8@pg|cw87dxcKa!5JF7u!G`0y}VfTTG z@c_PX?TPDXX~^@5txeam-gk;Jm2D*$i8805_rch*x_&k;Wa9uMP! zz8oyQuW6JM8Vvrvb9A_6!0DRpWcQ+p;y~lGSz_pNLXz+4K;uf8iViVQIDNf5N~cJ!k!=k;W5t}-!GCk8bx6-*^vsj zhIgC5?~RK@$I!}4)_258g4Ad$Qv>9?>Kq(i*b{}uZb@G2WNY@o1pUDrY4!6#4+`%G z?X0(v8u6tospJdck&&4Q`+>|YP+Vl$V6}G<2^YqZVVMZ!e>^a)b32kg(j8JcvgCXW~Bm) zpH=F8e0D>|mdv*;>)@-6D!s{*(;v72Jigcku@BzNc%frn+f!jYw(H@Vvt#=Ylsr2#);iylA}YU9o2_oLMEuZU zFcS(tl#s%{VKblV6PsDXdQbVcZ;Hn%f@o`tH>dj>)MgYuxsNwnKcIL8-MPW%HTW_z zKV6V)5G?9#G!5IG$BENMlRf6Y$LI}-nfQF&PtC_wt*qq7G9E#_9fKM6ORwfZxRs8` z)5*0JTwiXhSO4aY;VO4-Ib?E&W<4Z$PIiggZ{~}JNtd|8f~^0S9oejO6?FdYwpL1& z6MH4U^CZyH2qgI;4FN1ZZ%{n2Z)aJSn4{xV$%d}UKRb) zi8oK&ZkW6z14#&RPHf8AZoh0; z>o84}v+PXW)i)kkD@XfC3LUOBnR zO5gCUTPR;`MP2#5_YPQT+tF!W+HXck8Pgk+M+`$vPWmPxlELRF|1(GW*WK&9)tpc( zsk)x@d9pME+kex&P1|B7)facPWQuosElHW%)9WjtAPq&|S5xQ!8|m?$C|FcOHRT6v zrK&RcXQd246F8(vK91=3FE%B<8@R1bO3!GY+x`B$d6u3mkp}`XeWMXc{-QFrRc#Y* zzwqXKac?^`EF!UXBRFtH0JA-VextaewU)J!bY+!=VtzniGl$_ANXO+H&Z}_Evx4Ng?BY<;pP2xYmgB#2NAPPcWLIvD_04YE8-kt)3M*4u~cb>=F1$na95+ruT~V zwLMo7Ce2Job*A|*bDQ1?e7VrwJI@jJSVpn`Wc~gYh9BXIqx`rPkj>h;gjH{@sx+lq zuU-m!7nNs6#7XK%eQ)x=-xt4xL7O|45~oNfLQAvf+lut(FRie+$|sk`>G2Y`YED+K zL3(SPh$FnLogWLCuv+LpMqM6KG^z?dLH1#EIEEK-Y5TDndN4$6tV_v-pr*-ewwms? zP1V9w(Kv6ao8O=nSMWy3pxf2z6%FLYx|*Au=kKB^sDkY!^(bm06^`@u6F>nGzcgC9nAJNqDP2|L zu;vUkRkX@+%;Mf65C(lAeQE1n!_MF=HQ)7trTI@`+|f3XN&~=eY5-l3|#AMv&`=WvRWQw|sFJxjC4`r*~BVOCx=Yu{su(j{h44OQi;{2hpDXs9TL(b^U0 zG_KR0-ZT8xahgY)`G? zlJu-Z6%m+ZH9U!|9Nl#)hN&lpIos=UKIHz7W4)lu{}T=t8{{s%OlhL^HY{=*Sr1K& z7~tu}X(@Ut`&pWLQ|R%_)!5Q2qiW=|qYWBG*hiz)s*j=w87ogX1J-D)IjU{ilYPy7 zXt{TnY9>5vzLu9I>ybAG7FdQdGV>sA?M?_=IQOf`4HDW*V#2LhrU(*>D^22nZjR=s zMUPcEQ)JFk6jxdNus81kFk%-I$npbT85+pK|mg5c=sE~ zh(orIEe_Sd3Rf6uhmSsGEOC}VC;*3<4LvwCVQ>4)oOoHJoWIHF*rfXZh$P#^PV_xC~!>S`4r0M;Otbo15pVI5zNaU zgNLcn*$jCcm;L)y%Tzji*LGB`CamzLR=kbgK+iDk4E>@+3$p;kGmE`Mf|eoY=jJM zqfeBqSWr{ibKtybTAf6C41h}&8V2R@aBMvqUYhA=GHN8L?7!w_@~)2n)q1XIe#Y+m z9@z4Ut%NsZ*jn|O`mD35z0pxy9JUTZ1l6A@C+}ZKrOgNQP|Ncy-qdd^98%N4- z=;RIvn{1cA^Zk;WJ4b;%CtpTGlA*h^P@55y1q%l^Cdb6~+T{Y{!XB20sJbKAre5Zok1BhUJI)NSR?=zT+RAu=Ip)lhHLt4lVdE`-8ts?ET+7aI*?T zg-6gag`?L3cZW-Q@xcC;weztCZh>Nmg6TH1tNi=sM7qcofLp1|A2Ogpmf$*;2!*^2 zp0kx?!b{>ghlafAOZ+1cGijC_-{rwOlYX1X{>#Z9uNpiymSC2j4|DxgW3^TAMcjV* zfPT%YPg5Nys?@Z~bgnPRXvuXGWygoEU1|GOC^4pXl?&qGnQK*U1C93=sAE;aa@*QK zCmK+gg-QvXX7!MW;EQ!e?p%2TEzrdrh5q(?6+Q-~l(&(MPhps+?+|Dct-Xd#0X4*0 zN}W&SV4z*aZWmfg0=E+NcU3b#;5B-3Y+dI2EBT#XSbp|GOH?=%Ew--wQNSdc4eF+= zupW3*OXaSkrcuiY>-OU^&>Ts}@ph^S!LdFDAr#4>WN0esY#Pg#BxVXTKzzyoKb4lT z_2g0-5~>j>gWbxW&aorf59H(aiD`Uwcy}{Wnb*LK`Dp*!v3OTr{tGiWpOMWQcH)dF zUS{sDY5sPVi+bEOO_S0)>9dr#*BFC$$fPFraz#Jv;cdyPs)7uNZcsImPf6OuwQ;t( ze@LRn+4DI1!Zr)Wf)oGotVnx&p^nBbzQxizmeP3&EvrR*cOCM6xndK%UG+8Yk7lSl za2D~XsVhE5nC?MAwFzVkfNC_w5{3M|h;FUh4UVL<?IL&wjDiPuP2BV>e+LBn{hDM!||Pv%vHNbN9QCqnNWYzr#?LLlWy|C^d{q2sX#{T zsD!NG-QUi}Z+#0F%XP0X3ie>(l#CvgNE1Cr7?KpOaJ~9yE2wAOkjKJd;8WO4dkZTX z@qrH=@vVEZp#CJ9Wt3mu;38znrBk(LcQC%qb`7~9S;A32K68q#vaGJ~ysu=)4Lhg{ z;Y{6Bo=PTJs~jO|P=atYd{rCVl5q=L$!Z++>IKn0aY=*A5Y_D`y&{m_G`RtSh&VQ^ zS5NN_)~9ew4yY(i-f{4$FRqFOl3gv}Dt2cdj!Kxl#RFR#5UtN+x|_t`UN zxUX`TtYDH>nruydL-}is1`Mz-?roDAdhaok1aEtwS-QJ3op$L{>I0>!ZO!%gYXsH^ zPI&!(ODSi{-n@3rf)0>;DiRl2sD2XpNyjM89Eq|^t-v|uUW8={lu~1kgbY3ob$tBJ**18nA0}{2S_V7hNWIpu7u6^f?0iQui_f5w+X%Gss z#0eDFl@J4J!K1d@CRFI0^a|hV^;HNj(E#tnyo{$jTFhcBH|a@PoPmlu1?X#1M9;oG z3J;yQ{$Q-q^<4GH4cy?IB|$n;7_#=bTtHI~(#h$~_J-kZ5`y z;fhqJu;#lRa|PfIYf+U~59mrmlvZWMJYjol!vE@aetyND_;W**y@=5;V`Yg2S-|bd zL4wN@&pGO%g6fC$*0_4kS1ZRkZnb|Ahjx#2k1pcqQ|lnrO!WyXNyc~*7a@GE@AcW6 zo6Jg{8|HQ2-h(Imiu*E}-7*1;xfSHyD`?gJrWSbux%_SXCZ9x4`wi`v={94w?2^p)Z0C-!r*xjKp}k$s9=rSV zQa9Emewll~f;DQIqhd4X91ZfiC9CbOQ*615k|`-0$)!9sE@MRc+`F)GltaMHiRDZ^mMMH)Q&yN_s%E z1%ay&-nZu(E z(|}xO%QK|*^Wu8;0vETPe+P5NG;a2? zdi;pFbJEi@#{3SjQ4d9RCsTvEtX>{E#3880k?7v%myG=;^EY-C{#9`p9WAiJ(zfAl zGh2K;s?Oe1e)D(J!NwYcCn$2ycQnK2G$S~qZV_MITVts*mpE%4$zf{h&yIS_Q6AJK zQhj(_+vMPNGT)PVPtn8UO}&HgBD$|BzVX&X^iU(nd)V70|FQ}mFlv?gk8At1Z2Pl7 zoIuas48-87&Kp{cXIx%r8~!0%f%Ph6lOXNPZcZ2Xlsq8Rb9^F`L!PD}tyeoz6@8K2x*EzFnx z@Zbhn&I_IKvHJeq#ZF~=TE4bDHa0)jE%Q~)hIi$n5A6(^v1`JoAXMj)5yyEUgjPybJJ<+J)F8}`G zb1*g;0ColumO31%gSRBFosmrKU$_BGwA&4Jy=~Ue-QHR%uE_Pe$E#X}03o6~XBY+I zWnNHa1_H=Q8Yyqj>^mUujZQ1-=zL0=#}s9LtQ1@he#g0xGBTG}F7TVK{>wLFdvPNh z!cY7d@uo+OKDe!>*qHT-=y!TzP)Ts?x-~kDu!vuAf%{ZkChNv39ZZPQz@L+P_PQpb zdtW?Y@O7j*jePYyf5N)@?AMUvS_qqR&F$^*_Gbr$B@?c? zQm>N-BAB~p8?^F#PTWu2CtgH*yJ+uOyo$m#>ANMR+R?UgEz+F+^py1Bb}|i-fZQ0* zzRU_2Pnaba%N}a<$D;2^UF`o0V6GJse`!t68623-7SVn z2J$kBJJEIPHz=bwlE||9csoJkcQ!`EDo0{+TWOvRK#lrq@a~NJr7n5RqU@_dpHz( zM~`Y`%-nF%&C@`3RVmycPrx8OmX5(a&_{HOxx1zLQyvA10ns47dQ}s5-v2u%r=y^TJC&N7RO_PhI8bA#bHB=BrJF}I@ ziAa*rR+e(W*B)`{<+1YvI@OlSJ}(Pwd5Kw#XyBVr#r{QH>7iAzx`hDQoibHhcu9>$ zRCncK9y~|=>U%H}+VP%JCQ+4HhT^@)9J78!J4iH*x5_k+#^X(Iw-O+u?NPJPAc3m= zL4VBvz##DW4-JIVdm0E4%n9Rzp3c8-xqIMhnQVbkUByy~%xMU&hnoz%fz0lOj!S8` zn?Q7rh056c8Up$$S11_+MBEzg1w~s2TA%%MrwyX#NFR6%(zc#^g<$gZ;r#D3}SZ~1Rnl_XVM zImHJphxBpNkrxaEgvGQ`~-^rm{XJSq4$AXkOrtPOTb%IqYm;-8=xyiZFz+bSTM^x#E3yd{cSLY*;)s zQxz*_QF(I@mwsH=JBVSfbit@3iclrJQjJ7XI=;(?J(wuy?f&Ftb04$jv-sJ=F3L4G zHf7*5@?sI^b;fWnE|w)3fY?J5vZc>u{2vTDM~|e-xR78!1qNl3cG3$ZmYxo79oXNb=8Zv%;Ubre>r2NRMH~gf$uqB zlj=;{sK!CY-1f@rRsPsQq?oNYkTsF)~=h;QX{zjPPYwR8(>)-Mt{pfa(TPOdZw)B!arM^B~ zTIV*}xAH~#Nk1q?W~+)Dz-Wa}^T5w1g6i2#$E{OAyqpVaA@mHTA6-`t04A}P@{)GP>7x(e}9#Pn7o-T<6OU7IUPAET%-fP z&|n|m2VY27`BfzOG!~Y8W~qNd@lW5j(rz%2?_3&EhE^~rXFnrKx538s1hiORIa>EA zZ@Sb0pzoF0>T_(3)**+){aexBc(xlZhrARU#=%#Ui zr);-Q^t`8dOgHw%O!$iXgHfQ7&)(wCt)Bih<-KJ~l*i8P=p_R9&59OGeW7034lS1g z4n9G8nuQWp!I8&C7joFLSeKrI@(9V1$UUgkC(=*{O^@=A_~1x+HA5Bh@qF|zN2HNrx9+F4gCJH>?fmr>x zKB)5O6O>QP%yN+(J-LoRw>k!a1V#Be;y+t!vwNnBQf!yU#6qg#)nx0{WQs<9`dNWx zs}HqT33s7D5eEk(p_ik9`KgoT|J?Jr%*cZ3<&}yI9YywWsfY2!=9CbZ@(#XSBMKQ~ zX|NWKGcB!cG#f4wgo4rPX>h6h!EHK^U7#YN8Ui$BX`oS;-Wd08<(&l^M=ae7Q5y_& zW65K>rP+3G2}if7caN@qlO3qs&FmhH23}gH_9?5>V<7^XU0NVy8-yMy~=-eP0ls+1a!vMtTtI}?~xRM7a zYt0>&So%l%lth5Fk5l#9a}029bCtEq;Q(eJmlGpTk6^sU8cOZ3$M+a*_`d#*>NZ9Z#%KZD*`mPciBKi8WAk=my)@KZh zDScr)f$_}DJ^)pC(5(bR^h`Uwa@|eBQPHi5?34U`A*X*RgyF^ZzB^rpidlIP`#&Bj z%y?W?Ff`Crc|MS8DW(I0bJw{Va$c`Om}9+wobTTCtuzSQ&4jJrs^>>6~^cu-(68?(B~)eD+skPv%Vay1pojF08^7r*68#Vz?v?!}Cxl0_-dAJ@ zk2aeNbh?SqLG7Q^nRX~uk+TUcJS*6BU9b4Ui$Yo$V`cWn1Tf4-tG46ZF^5g6m(d0H zHAO1UO?EgB9N@i#iWGD36-rSN2L^0?3p1)vLd0$S=?Hxxk|m*6Gy2 ztdamS8DkBCpXt$()WN#k?&ZuYsJD_<6KVZSgoz=HF88!drQ3p?{Z zvyXhb8Tcj8H+LJgutTMTGr{YuT`Q_#ekNf-hsboIk?0_cNsqDya8lUgtT1Ycj3%(b z<`~;7u*%{Ehj->#-LwkUmzYk}Ai{sN<24hyRQa{axN*tva$hD<@S);lQQ+CYV%5_) zU})?|i;zJRU3QIM0tsk#F9E&yE>$Hpv6-ztenoz*(EwU`3}#kfgseBz=-Hyor=wd! zcX`h~2%;pQe(Y7CQigoFZo#@IczHv5Qer^S{aCBL5mcQ8{Zz_)xF$H3DAv?%rbse4 zfcayQ=`j~vPfs#)PGTc1hLEpJzj!VEtWZ)d zhb~9eI=?*c@m)nf_x0-Mh`8z&naKdndP{deV*L8#_O^-10jhLcG4Oip!byO*eMk9G z7Ih`IRPoKK3UxA1_;W3{BMs7-hmZIPIls45y$Z+loCj*OMNgwtIqdVfY#3}I#E&O% zM`J;b&d4VZ@Q^Caft4^(Ge}i}GQN2&kLWSjat4@E93}hafEolpNl82oyMFpVx}_8R z(Z8UsM@+_ZF8QGJi^%PbnoIo`Zoivym-2+eYv{LTwv}u^&Ysg_*jDQ>?n~^JPtumF z=DD*Jg}tG~5?_6l(ad4QvBUThgx^`fH|J6%%Mdc&ZXA*i_TcM^qp75eFBf${G04p^ ziN~ow%MAFl{lSd)dfu4v^@t_Gx2>^J@+e)P8*16>hM1?Efx;VmOLTE57b>Mp9Xzey z;3HCGTdk-sC83CO*7?e--x7eZM1h?K3(}M}-*Cx*C!tiXqLmlq;muRnjj_#P9KcDM zX%tPh!wg0*K_}^b1UI|hMoNrg46<_joYXh1QmR4NE9I%JX*xwG+53|^I0_6F_3P`#o54!~>CU-@oPH{V1pQL8!Z4~gudWdDZY zEvZTD8AO9IXpN`{ZHKfpCD%Q%{X$Db8nC%gJ~MS1i|Kg;X192pR_Quw?lbPrWP)-< z7Mr28mFQbMi^k@{;BrIb4{2IH+ts3c9OQLR(eTjDD`ESM;w6B?1 zP>{9;!Yg$i`!-I-CpDGMBwxL%Sz_v=64;|!atP<1udvnsJVTf$C$=;`g^ONkKSh^xZ-R$% z>;g<3$MMQsa)^a{XLNF&IMc?^w^vuw6N3&MvM-;Z)yVawlU?L=Q~s9d82EiB07rivJrOe;Yy}QKo7xoxfZcj(d0Y$xG)W> z?lWiz6w&n{bVLxG69XP~_|g0gby3f4%PvQLT(l0P34KBay8@8QLMRf3wZ=^+3P_;x z)BTK~mi`uV%kN-3frBxG_K?jk33Pgb5)A?DG%Uau&Qku!AyxgUsgFNKV_jnm#;Q7? z{d`F-Rldug|Bv?GGpwntYZn#~P*Jdg6al44R}hdIuu!BaRXR$Ebft$D5ET)T4kA^m z^iHG(1nCgzJ)uJ&g_-~%$rs%FynDarbwA&)^XHt+53WU4uEm;TtvSY+_dV`0^SxuB z6iHAmPo;@bNB~9VNsqdEHNJ&D+=3!=T<55Mh_XEjJ$;|ko@vl6jd=>D zo0juRnU?gA1CNX&c3r>2$XIf=Dr^IK%?ahk@)2PW&spU;D9%hFUc_1 zSKZ>JXLVWznm!U&&jw0=gpDT?mC_K}j?ZDAK_F_P;R|3hnsQX)#p zmhbL;#@RngekiUpHDq99CVJq4_t#vLa%!8&3~ut*qCj+pD$|lYd1KUj5aK33IZAZJ zoQIOk&mCz9K3=)$(mPYpfvGoL`68+wLV&-cp$L%NZ5|~wliFu8m-TWLdB23l$NoaVPpL!GSR!fO8@47en~|` zn8m=yQ^`2}la@n@XC3uwdl6u0z!It-820f}#Z1lAa?G&rj1GX9c!t$K^a!@}{M>ta z*WU}jA(umu;qkGmD{Y%owDJcOX&Eg%rIuwKVUngSJ;UW}3aRovCv?LaZHxFNtGT{{ zY-06TI7{ij;5pPdkk#+`c#KMqKmo%_jVo2Oo#1?>W7+gR~ej2Gq95degKL2i#>>4c)RJ?CCvtqKo{yDL-276SS>)WUq zvLmd=*7?Jwe|mqA*j?DD#R3S~l8WzGyihgp?9ZGi8Mb?PVX=s%OYFVzjMJ8JfW-yW~JP0>VZrNv;banuABGWF?7FS$bMu5l))F8eoz?Nc-k;$=;d8=AWw_K0!mx$e;PM zQq}opqlr?e4aIA|OL3}tWMYTbI-Fd0?NsFiUl-CUnF5ax|JE z|5J-JbepB3%jP&UAz3D}6yqvNQJ+l0`aZ{EWQt2&ZfdbAjf65xRyjnA*7vFL<;oL# zcE5aPPHc)(baiZo*$uk)AJx}_Nei4GN;S&6bVBkY0h@6j>VO|Mr@u}qR4&-(a2y+| znQ(1Z8nCkdnLQT#U>it-S+O4is+BeoLt=7PmL_wx7+?GVeRVnbu(G%YC*JM3g0Gfk zolTbmD^H?{j3lPdP;d(}uO^WJt&`BosKAp4<@Df;&s&eSAT!I8Uo{+dTQ21cL(9}T zZ`Qka&UQMcjuPXIEH5@H_N7UP2@4Ha6Eo@i<8l0uc-r0dL=%_?NAIo)X&VN};}rJ| zoVyM}M@aLc%(7Q{DbfBq9jAv?{#F~YK3kvf8ld~&m%|A6>^t++_BRcNADug5L5+`= zT4!U7&IKPWD#*f?X$<|OZ_9c5I^(ii6xn+hrCMBI${A9O`qs)o$$^Vc>zWokcA{zw zD^UPTK4+DR_p}03va?@Ix*ku!Q&zFIpf&dW8E>J*P=mtkekspEg+^(e#`m^U!~42^ zS!0y?@3zKm=lE)7GL*cXJ}g5Z?9`fskYtGmQ?5t-XSyh*m}0UhlAWaEq+Qas@7jj> znr!)2DCZ&sF`7dn@=-MQNluoK64bW^1`sHUYvr!Ns}lzs!&|OUt?CZfp~jw(ndBYc z##Y=^9v)07cW9i5U(*YCs9B&Ny_O&3-8cL)BN%JOr;yu3#K;-PJFHMbh)!h67tre0 zySAVrV1jW^&aNrM#oRX<10?1#vR!g_L$e!e($_@%&q~#AH~x^Lh}JN4zowkNe{%KR zmAte8<4oT)9NM$m?1e?*JF_Q8r+!01{P~&H1+FsJ3*y4wG(R6{GEthb^IraGbpE#E zh-ejVQtkx>F+o1X-!nRGY{km@ghCR^8Z(T8p;7Fgese>A`!819f83jtU$`d)6$xgi z*->aZY6+m}Im(jP(@aHl^965@A^a)2{+e)q0HkTkmr^1@b5%vY;+gPoDzX29Rs`Q2 z0bz23M{qEg45e|+BdP$fE2VC3sS*Z=EPA@0(6^KuOl?DPF7M1-Ti>4D`ku+Ww3Rk? zpLSO=Hcg>UeN02_V{hb}|6mmgNn`g1p)8FR8a)bd&rWFuID9tqn>lM}55xE;q)gXT zqbAFOhfB;&3k(YR*2hW{k6vSGxUa_B2zHU4gaC(L$L&7pL`t`WFx({YH*DQsV>+kC zM~RIokE1Z{2R8d_>!tLS!9iw!Li(4=UK{`C5!9ak zqavxq@8d3o)D31o@xSUK*mc`1cfW7a1a_e{OT^&`PRfnl-9PjnRJq5SPt_@#XN>(`^CKbs_pSIe$Z z8ni#SxOc?X54sq2B1ojC7CmJYlC67>fQ_dJRj!xr$FTgTs|5w!*?#YHoKU4g31t~) zXe_`BS}blWFF@;P?+eZb)CXgDtPonqMM%$D zr3$74aZ=zv-?rNkJuhL5JW+BiLG@{~G7-Q}i#p{5tyAIR8hC zGjCF!0EP@!Uw_Q;|1;YKib`F#%gZ4Hd_U+~A9 z58SQPyTRST>vs0Cfaa%i4N`=_)6UMta5h}5dg;4V&V9-0M3SsTh(!U zO?Zq9J_V+LmtREehy0m;C7d3=kZ9N5lymm=vul6F!+$!8Go;w&KG^gaw_ylnYm|Tb z+JBw+_wxTC&;8dp{~G6yIrQ(e`VZ;!zsC93IRDQ_t8@^Rs*29l#33?!tQgojZ2DzS zgVXtr^D7li0jX-n#>Tjn21-oFo$`O1X1Wp+yD>(}*CYr8mV8t~9Y!^X-{#v=-Cpdk zPf(M=8PTN`{#S(lZ$Z2nsNJ0K?Y0CC;I4)3*1sdA$cJr|;{kT?{WyOX^Zc;3$p2$6 zStZ_odl{q)BF5KZ@)XAC#USd$EY+cr@x#O9iZ6DC2i130Y@E>)q7j^@!T=rOA9-Tu zU-Bi3o;90|LzW+!{H~V!&UBty_lkb!VX}kGK!eN)O@J1Dk|j1_Qqt|Z@iMOU-eA@2 zBzv61Bvc*a07&|Z%w&+M1V_}E1(s9=ZO=V6_AxR&5FcU0cg=B*WLv@(xfGNZ>e{^b zG`G0=E?@ddb$j#LZHyAs7$bcG@ZZMxUoq!JHAStX8dpPe^O>aLZdYoTdqrtL7K$UK z*En%4J~?}Vzfae+B|Wq85s>kA&svA-psOtn@OBv@GnjaBQ{p5l?@P&-kT3~VTSDa2 zVw-BMQ1#lJsJ&l?vLNWS+r5d6{99bAHd9}ums;MWQOQZgm8;oaQOF1;cEkn~3#34J zqxI|tHBhY9w;=ar8sl#@Lhg4*n5tdV${Qu5xagr{(VaTj1(wE04@nky4Cg*A{fH-n znyYp5X#lU-4VvGu%jcA4Coh%piuQdVI#vdl$D5d6LB$_LC=At&E-R?o-Xo^i=Lqa~ zC3e^%YDD*y?7HH5V{uT&=-LPGeLggORW5h#%J^hhWeovYoNoqYvIogZlyR>LZ#S|c1B#8-mY>W!F?}== zpjxOUI?>=xoy=oxi6^2zAU_bXwsxqV0}dJTxEtaDJvJ+KTlSHar_pud^|L4}e;Kw_ z7_EV@`Z8HexAc?RAV=h)(QkKco0Z_9tj*{9{&;rPU8;mBkNu_I3tM6D_0<+yMRbjF zf(aV2TP;6dPE4hrGRYIHR}LX01GHL*8g=X>h(ymE=it(YV|XZd@Z`BkDQiSD5icCw?;a-SI8wAI1cK?Fl^Mhe$ZV|^4<1yA#ZE|8P&N+N zC60(EeP&M_;!JnVj@q6N9B@dx&JlSw>?0&S0C0N-)9+2ai#2r!h zSrr#l`JM2byA1XrfG`ya$e+^A*UHfY(nxF55Cq?wBxOx4Qa&W)XbhW z$$&#Y3ZMH)IqMH^;Lx%tU?zYyPRs1dId4vtY5aC*#h~-!Ju+8>4BpCnaik;Jb|JVo zB(d80o-Bajq3AE`YXkxmD`{>tMDmrng19$#1t<>$YI%wAHw)C+&lmrkJ0slCJ8AAVL2xJePuTc*mz2UG|A0r|<$%?mlu*4~w>r2db>bu{U+<*ZQaddIk z^M~&aF^C6>SlVaOn1`0mQ)w2)JG{~4;X?p92c%n{ah+)Fgi7(h`DJ}={W8?cJ)(Dn zmtf7g=BcyhNshF@UsPQlt?mp#7N2Bi3Glm5nqA%ii8yLy79r0>0G7wp9N3Nl9n9c< z_niCFW5dWVU}?PWJzk5}vS0$NUoDe&;vEjS<|e6`WD$8tYj zM%NT#meAkh;~R6y<4&yKGR$Wg-JhYF?*0&C*96!-@yyuH0Xxk63AYCG`u59v@H5kQdA6?% z$m_yf-t?wR>o5gqOf5ysp?}nVg@sME@2vDpzFnzz9#4vU8o;6BSbG8XF##!Lu$5Xj zRfS&i@tLpXA$x-!zNNEFym)}p_SfZ$m)2KXN|6yK^A#sfNh2FgOp_;@xVg%(bxmZ` z{U?rXG<*Zp*~8reie1r5K#RgKrS{!Qve+LaC7jK%kX8k83r7mFjnn zxeN!oPQ>_-?TQp1H*2~=7=3r!l6@`P+XjG8UBX<2TVJI^*kLVhL^ThKU)rX2g%+fEe=N=E)Z4*0~~U2`PJ6~3h)HOrkngQsOiqb zgT}xE=}F64GRG#_uX&7YT7CB;bC~sSTmjXIlE)M_?YwJ|NYMGhO#uzeYSXNSJmHm* z8rHNU2lMuO!CVS5_Kl+i)z($9v+4^CsOB^YMIJd$muO;ASJwpdR}=owH2c`ej8AEp z(x!tceD{QpVCoXdFwuWw>}*BAO}XSYIfKD~Rbyk@-cMdO2=Bzs{>blxJc#th2XLZi zWn72lXZsoj0GB1nAiN649}?ZgGh)ivJx3QK#J-vlJR<8S_jpwB>@;Vb$<;Gaq+6s< z*b=5P4bls%@Y?{8c))vdhW(1NJygzz=1nDRMyN1dv)NE_nm;d4e?ccL@Tyk{p19Lx zOh@JU685q^$1*V<0p|>K7g~pOe!(m^2ic9v#dl?4u0x7GyC;FDY!8SYK)9_RoLDSJ1UZc8`{cSVf7ZM{SdD7ES?kaSIYy-Lxp0r35Yym4g$ z;R6+n6&{p_Y@xp6Z6^ZEud#$J3PmR0loIE{BgW2~%s%M-*sBz8794<| z09R<$a9-(pX^aj}M{pN9ypr|OspvY7^v^b?u(ed1{xLEhP;MO3`~En7=!bg+VJ@Nq zuTTl@x5-fb-0`$8OIDb1VX=_-9fg$wkaL~Bs-Lmjs3C0VCIxtW2_}9e-t__br(Z(W zUw7cVAQn#$mY=y+40{d6z8_wNa#x{!Nmp8E&v*PTz*0KBdr+Cq5B83W9TYbvNTkFyBFwMV>$PBfQ*Sl!`?tS{y6mi<^M=fM_nlB*gm*JTG zgst8Fw%s(j*o?;wTzcGtz8dbb<4Fd079wb64!sifnWd0YNp5_U)THVLy8i~aGd%oW z#et6Lpz>T@KNZqBh1t!mc}iCA@VjdHp8G;ve9!dhi=8q6E_x&H6Fg^p3-96@y!0_@ zC2g|`3p=pSIs3>%bg!0PeYMWiXBj0PoL9OqN!jjPq%^i@;eqoOhU977LL3M*pU5CS zA4Rsf7R9z8s=CY&-E43vVFLqQkhamcll@%VE+6C19h$zkxsaq9?^}GT(Qu7ls0>V^ zY1EmcK63$i7(6yVJ*A)IMjFjn!$6-$HRd-d?%0?s+v2iQv{IRw#>c!6nP}4e=Zed8 zS~_Rc2;H+Q*S+kNnAW-8eGe?i##bxmZ$n;+z)VDR?BqU})rurGL40lUJzD~{3GGwu zc7v*Nz$&d0ts3>lNGwT^kn~|vY*ANAQE1Tn!L5UHsVeE!#Hh!Hh;V1w=J}SzWAsV# z0zD)ry*k(?L(>NDP~yU%@eCIsmeU97zTk=s`cW-wb!)_~5ichv2LDaxMG6ia{OqWu z{tbs;8BbjdfmGHoHz94iEiO@ZCI2p~lW}eflk04;+Y;ZzE|GS>9VH$Xuwx2(xx$zF z6xsL?S7hkTf?_hKCA`MpRwyZQjlK$Sh;pq1MSSc`tC5n4IjvT^azHECmN+st(h4AB zu|4e(=3QDxl+($`WP1# z<82z8giKu}^;G&~jG64=MG*D}#{?!>>)YJKf-kr?iJ~Y18qPK+H*$ogCO=sQJ#5;0 z^GUwmOHcNZCH_gIQ;7icN`;GFhQ@mG)M-s*MwF>U$lYm2Byn|wuzA)THWL=n71#)A zKQkRQ8&mqJy$6Yq(6T7<0><&|y}6}lT5#LSr|ccoJ&Bu(2^p9#3?M7p2>%7zMlt4& z#du=9O`bO`?)ue~N(6h#g1?VG6MQ5gzZpe~#5hC)O1%=X=`jP|+TEClt7$7e5Vww{ zTlS4I5~edV4A$HIqP2eeTAMlF`P<=%q;$_tcuTKUGM{rH8eUUCRZhctuIEs{^KC!c z4KGr62(52?qX;FCn);r^b3KoG4LQpOLZhPUnGrm;iPqwWzNJ-)_6%Gn&9rO|zY2ew zS;%BD9Cak`WL@5}6^WI2shzfq7w8H<2zk+tTGed1&r}?J6<_=)Pax^r9Suwa5aecm zFh6aI&2hU5owVR)BQyeeFmtK&Go;0fGK6li>|OgI;Xp4dE3mHDdeBYlsGzA_5{95l z;Qwr?Nnu^fr3=Yh$v?K!2ZL`xY-roRVQYy8qG;8o+$q^M(GP0mA!j?l^`<1)q$}sd zS0R{>;fs8~ZyGf-jb@Oydns*vWMl2aZj_GD7=A55VuCtn-d1pe+>2!^9s6+bHFe~{ zv11~->i3oPS2tq^-N2EDbCDiBZ+=X9@4Z?5ko-fhu-a8Po?kaK=YmY38E$RvOK z864(juM1~mk3ys2@me026Dso!p7i?hL@2m5xq~uZBi9+~WJ^Ly(5tI%wp<%Mp6^I|VsvJa^{dl> z(o&d@VQs?DF7Z4<0X)FO;;)hz&-jE-J}vd}XwW)adWYWgv}BtXmKvkFyT+CMK-WR% z<0c=He!`VjG^q()x~pQ9P3X|jYh zOPq`B`J9Vp{c^{I4eK?=L=T%&9&^5cw#F`#?^AEl%Tw)V1YdRG12R^1t##-rPoTto zrrz~h@OM}^#_l&IZDg9N6^)4S=vJy4DR}DFxoX`1(wk9TQt(pKXr$9*3;Ym=a4+=8 z<*P15C2Z>ysf}%Z4^PexGVl~p>zr%7 zYAmF@2MnfDVB?=OQVR!~MySkeJyRV`V4lpAC*8AGh$?uJ`H;kwVjp)0xSf_&@deJ- zrP07i21jFx`8zgRyB1`>W=d{@K27XrxslgucGfO#o}j{Wc|A-ga@wU4%g_wdA`DFH zOmxU}!I|YnqkL!W3)nOgvT^WGv)#)e562xbLF`-&zgnlztR!352N<(mb3MhX$vgNJ zAt86%knRq_tkT6a#-#c#9bF1Ksus!aeCH;?63nI%_fwwVh%>cRrM>cYNZ>U~Qa&tv z*ZgscV%v^8Wa0|yHr?IYB`G?mFb}BI^}?9Qtv0Jf;i;ic0wvQ#HooTiDdQ7m9Ocgvt{aW;2P_`E!|y-{Uoptvwf6xtGPJf&Sy+pFWLq~<`Mj21}T%M!wu787eb@JHJL z;*z8Vn~My__|{bFz6^w!3KYr}Ekl!t6ONvN?$%9y^wkBltaAWyN6=AUr&f@|6 z8~fVJz#RdS)S4rIE%1dS+o&>qy~HMP6TqfYyL+Hqc$OzTe$OD=&vB7uYrYDzJ(B`o zF*UOOseBoZo6}3DjpSzTKdj{OErNATCol6FP5!*-FLaegti!d$Vc;uuju#Kz!yK_WHZ^8{s07gc zABxp}T>b+un1_!!%1XN%PP)m+Pjin1N4Fv+J_U=Kzcma|_dY=+$|qGz9x%U2wAN(ME*;Gn?BXUV4Q07%z6QF^Pt~G$BGZC^`ivg0xm1U}$x)Z}za!Lw* z78DAyt2Zr)g-HKIl6zw{4sVicX=o#=7?PCSFtY`IPp#j&HW!(LWvDILT;}jaU(upv zT+7MrMVd3Fqz@Po%WT!ohDRkv?GCgD{_KMaUzqKVuc)wi)(2gMd23i}%_(bDrvGFa zkS(k;2O3yL`+hvz`3mdFBGl9dn=u*pjw4!$EKZtAp0O=toF&Vr_37zJ_qQdp9cPD-Z3S1X~2R^&$fT41pvr7Z)$wssPxWGk5qoDL?gWS37XqV zCeWQF5ZwXC#7=4^rU?6PVr;+CaQ+_nR{Bbz?;m~su2@D>RyJtC4Me6@_jn-I!)!c1 zSoyXIYOlKW_2~9U5?(n38xxKzwbvX|c_c0O)o$6SnX@P2(2ZuUw_%H>pRx@QNu61B;GLc@lY^ewvmOTk3G>rQGp?g!oDG^QE6L~vkWTuvaX#Vcx~A*4D$vCe zKv{ZL+%p-}umaLK_T9c#dIqxLXE^M|ta}MNMY2s|gl2_Uf3LCM;7jQ$Ur=*$(0z7G zHAN%6las{F*FPMmX?|Gj0m8k;A*9{wgBITuvf4}q^w;kaMV_VJ>(Vbr& zey%Br1z4JKBT}SQ1%XT5T=fJIA5bZxNno7wh~!V&3)ME>X_38Q*^fTP&6sl(=$P?;y3@1S-+r4ii~4X23%EXm{nFS-Yu|?_!jd&=*{jh=yxb2I~+tVg+k{ zBPgx6xbuBMuC~x2M3HWa{C(y-Z^ubVX-FjBl3XfvT}}|V@RNTcrN0Jc&JVvyiN(rx zrSvmCPe$L=Nz;Z}<(>)jq=5?AO^5Ed#?(*h1!!iDj|h#a>&+BbtS%?pU{X#CxEpzP zZdx;Vbz9{BxN`eT;cyB#^BNaqex@g=7exOXY>-kxwsrDXr9@yF+m8+oD$C}QPr(5T zj8mZFFTyS)ffuE47o}g-jpKY0=weZ%Gk3Il|qV&pXm*=3iQI z^w`1yt0)cUX*NXdkPClP)1a%9nMOqqTFB(UmeQ0#wlaenQ8CvZl%KJ^+xXaZc4%ce zWq|68W1e(SOL97d{28ZkQo!}l`79UY&_0}YrZrH|X5;{?u`qeL!XsB>gCN{mve=Yf zD#oDg7)W<8_2jzNwUrYq96J;g>)H(+tltlE$vb%HJI(H<+{+ab)$iXxn!6TE&h8+f z%NDiP6Ae-E>K=s9wP76N^<*$9*XbLtq)(gKTYyh~ApY);#zd--S&`qOOXoU|wi=<+ zzQ#Fm{E3=zX_C8t@cUc^RZr-|_r%ryrJJe8%&v28M^3|elYg9C3#_3gkc_)6R{UGC z4_7|px$cx@&%N7*Pf+&xQvL}va9d3c(UqGqMys%$WK8j0|0K4N44I+1jKHU{eCuum z*NWLwiCvZ19HMX?cG*Gh5_zv@AoQ+`YAXou&Qmap%_RM#EN1{flo1}IAT+W6LJdbE zicZLVk_)LTZX6^u$7sIAMANo=BOofcWo?JtQzxTzR!FSqVdji9ZN;#=$P2sp)eE~_ zTZD)RN1C`Pqg%|`U-43MexwYu*pkB6jive^E{rI# zcH~^e_qU`JOJkZK4BdllZpjRQF=5A8jR`htj@wDncM?kd_hBN<+NJjWlb7wu`$57) zU5qS`BJqA}Ql(8(|EIIbLsvhC&oKqUD0A>G{ldPLgPI{?FouC)sh%z^4#Y@dC$8-R zIBxcbi-`sHjOE--Y$6{r3uc>*{S@<7v6-Nx!W7r;eh{)4TyL~Lf%w?zckkZTd^ok6 zloiguzp=~{c{s2QjmN{U#u!<${tP}oA#`dO%^n4>m(Ym*b4kdnF1!TYS$DS?-L>8N zA=VeOwchgs1XacO-Zof45m3&p`?M}slpk0I9Teeo3iE~l_5`72-9w`_xbK^Vj;0pV zKb9vL%HC#g{auzTEyqt^h9CP1A&X;{ezBx|JA^kyr`OpMuhwpet=R0%oR&MS4E?A9CU@j{p4hxh(!Jl$SiU^F;TN>2RSwm`(10*HMCh zI<*Rr-@{ot!^;V-)=UA5B=$k4c|E&qzgYu4kS;{w%}Q-rSWVZonQWqp4H}Ycdk6Hf zoVn`!aG&&gRZw$iw58X^O+8JC(pRr)j@};Ti42WB7j3b*>sh%=#jc7AKu%O&s+9RlggB@ zDy9b0O>}lw=1A0{d=~UnZ9AN6<$M<8TA0U~7bZ%h6iTlq%DLGw!@)_)h^Sfnf~WWQi-So6 z-XArl7$*l2VlG}Y9dB($B50~NZWyJjm{gkYQCxi1-TtI@UiTE%TFV#PQj;35vG1?r zuE`XzlW#~#@eoL=;iz5V5$M{f83x-N=$B+?xpHD<2<`_ymzjol{}kozTxO)H3%&ZdVXxTf%efo zFkfWPD}bXG7{%BNqE3xx-0jX+{ccC+U@j#ZjSdMbdbR#+bnJ=bHS^;N8)#_@{HOkY zi}a*av_kdsj<=3`3PKL`LS-AIiLpXiy6pP$bBr_L6v>WK{(3K*2TQ8sJ-^W;FPbVX z-AP&m%A}{uE3fF|_5;%c&FJ>o)fl!0f-v<^6Xq-aj6J|-Wvc0O@Wl?vx~038&wAc$ zE>xg!ql=nPU<4|bAKJT}^PF~DcZxvzezX!kQ+{#HO)T$VfaZ2N`Z19jz^cPC^TxE_ zx~~DYcwaLd5&`Oolg0IIz{GJ1gps<%!#OjJen)b(CZROUh6G1jq?BjLzT=i$FwUls z{4=NdMv!@@b5w-!`j5r+~HA;01@Gybl>6DlUjZFx~- zODxBU^wi7_(mCsx{0jJEjgt%+D~aBDI77BMT1-{BFK$E1V-DWDU z*T`Xa-LFyzE=)cfjy=9_x0X7x73MrB!X!=z9zzBN!FPg!UY-?}%mxO&rBk?S$+oG$ z$$B47AR2;}Vx-=arA58Hi6Qb=D(=1>NRXGP)**YuI)SY33fk&6`THgAycHHfGrHta z6I7H8u&E4_`ScEkbz99|<{+*a#uL5%Vun_h_vy6tfwbD+gsz`yViI?>?17q4e+Mc! zHzP{-)-jw>v+4z*59%OxxnD{}S2OYtb}|IcW~>(xaZ$#EW%puZ-$~`Q^P_dk?!Sa6xCE!7VW#!7 zMU(x_mr2pICeRAqk7#=aj;PFlciu}U$qJg5g*J3{WHvL!?G&>BkA8?x`F5fkW?D7Dt7Fi{s46h5UM7snJZT=v^0l zv76rxjG@|O|45;cOV31v>G#LVVO^s3k-%2>3!%UDEL<-h{OMZWPs1JMhZsFe$Lqx< z_!p{+5j-8F5*bIB5rrnVm_cwC>u^dwdWBoW_1lG~7qwL03pL59xqcDk)gGFS#xcpv zcZoQHe7V1_)0_DY@-p-_t6IHilNOTnw|^l~`V)Zh>#>TfE^BT|_TSc{u9%a82~(2h z3TUIT?2z&;;uM)u0kb>qh8<};b7M_)*Yx%axUjoIOZkAFSSJyHdI;0^lsH)uE;>~l zT+^?g(PvH~mWh%%E;)5NNKlwT4Rf~+d2H9mlz>`OL%?T~Fy%HVzV307nb_$j;IeSH zPlANAcWw6qLAbDZeZ`Z}yXPaFp_*-OZHL|uMfPZ-4y4-!)_8eS?14*-!T^^yw%j6r zTl8uP>=`+>xS|o@*?QrP_*4U}4z#dkXmRjoW(eTGVv1KI*3>S$;Jlo>KE`A!!G#;% zj6|j*HA#6AW8=8(EZIBF($DAS-#L*B?T|X=Kpc~K02hnZE~EdGDs|fQ0TDWR=i9is zDAb{=NYc*cD_a2I2R$m>2a@~FQZys=n<&08T>2|E&5?EeTkN*j>SFI*q%oC%klMYS!4K(xD~@&3V_ zTIZW~zSTnA1-B>T&xR>;99v_wUvXledoxY98jiQ&D@4C^A1dNna^GO|ODu>-oU)AFQX zR~fv`Th9pAqP-MuPIk_yIsLK`_wus3PnAL!Da`;K+xC6JP!oAVqCUsDT49pwAKYP- z-j}{PHHo=z+}rk_YaS3HbE$uXrN|RX{JM3=pMJsj_7$t4OUhp5z+{U#`V<-Qt#!L1 zTd4q1X5ceT?S?P-*0IGIcQ1C1n06WtvjEqfA5yiB$udE?zDun8xwLIPHkwoK?6J!W zq&@0a%(v4Iiu^~_7h+iVGyA`D${*4Pl;~9!%&`AK9cs{$ub%A{*WB11WC%t>fww_z%X=hvxCiaU~C}e<7gYk9xML z+MKBmFYd@WK+nYi$NdJNLhnaHPe33B>(X6=$)05~4A+qegkvCZ*~D2*2*vs2g7lL` z%a$9ae2!MpIB%qZc7@K$)qlv-EB>fMW8QBMOsJqwPW{}IfefRvw?rn{r+IE=qY&Tj z$_6Mm77gu0thI~o+XC<5#Jig&CZAG8-cMV;Q1^62d({HoGw28Mdzckm)C-@tvv}I_ zLT7C+W;1Cijhghxb@%}=PZ6AqYABU-R4I!F{&aGNogxJ+DR6=q*lb`F;%1?}Z8qX( z-4zWEznIVySGCvOw)%7qLVVyJ`PSwYgeU3Kb4g*z2iZRnZ)Pg>T^>C5&M(T{l)FXQ zU*N7XDO++d;0aJptdq6;i+V`NBa-}jjaQd9+&MP23n*OQC+9YwCo;J8fyE!c66-rd zI!qqaw@&CV$20_5+ZlSSO=lnqIo4w_yOPVQtp1WUQ#S!x&`I3=#KVOwXSeGlZQS+( zLX>N}D7R9L^Gb`?LalcC^~{j)8n8|xneocuyo`pF{D_ddrF}HI%lXz}dwccWw9Br6 zKk6ZNCAAh2P2*pvABa~*QNu>K>@1Dm+$LuTZNB`J94K34>Qodk&F*s{Wkpt|NC>Q- ztkvzl7DtOG4_4YhSGdVv`pXonfvF59H;Jnk)(c&wAsQR0(V%=#Lm?;*2rpmkJZ##8 zlzUvun^4Ugvb}mA%Un^>yQ#8BN#A#`VS>^cBhIFYaJgMFF^amgW0*J$k6K`#;mb6D zoZDm&K829wjfELsJy|n(HL;@ZtWv!CRHS#;i=RkY0;E15R&)tv3YYUNamAuBiIi1`yt|kCn!dEv zXlZ2#gg+!jS>lTxXo;_GSq>AD9}MMERE__*vPBJ&PHwV%J8^4Z>>CUsbb|lse>Bkmw*zpDit)O^C~@X>9&-S zWT&Y2n(i`oe#TS+v0+rc-I24vUrYrn@FPQdq-JC@r|Ug@Ijp6jsep-V#FbZuW?y6a z2`UE|a=_EEvg}Mx`KG$rlc_>_@44890+?NQRRmvD({~cGqBC@It7^eVJcH0P+ZC;<4N>7QbBN|JdiJtF7TlPEQk>+(t91$Ke-Im>iw=DfDr zMYSYaMt;$D3WFvij(^KymmuI=#oZA-Zfg!VqlVeq<_LvLNb+7R{}k8ZeEXcFY3jXK zMNcn#iE4M#jO{|7E0hSuZoPlcf)J`L5>1pB1s&gZ*|#3(CQuZ)1%G zCQ~J3M1f>`O+L|p>*@7@3I3UQm6Fn^{q2>mX*QwUtIc8dfw%HBhh#SW?VQ%1%O&?t z^Vc?+2@2U=w%~x6KR2JQIZqz&GR#L8&8l{2k)w0PhGd2ks~YQ_cMb*>yt_>MYPl#z+p1JWZ*gxw(Y;teT#%DOft(e z)iz7{84A@ET+z(Z0*UJ^E%8hl?VlZjGKS&uVd@oP6}b_hHRHHed)$CbDN8ja%dg#k zdgNws*IbOJu`~LnNhEwit(MY~@67UC`EdwnV@JllnsJ%#_fM)M?Fb+mJpzbmyZ+Lg zE7Bid=%C)D6>TE0K<5V;WeJB{Z#rDnHZMU7EM-tBLa^I*rvvs>R#gqO(;nVxJM?6(}g?XS3Y zzcqcLi%^=Q`K^5C_u@bQ_cWrZvDJtsqqhMDU(FEQc^sw~zr@79-SOYXXH|G)8Si$c z=6AoEPW*YQx%$TJb1SGJHKDTFjS~s3Ow=GCsvhbQ8yw4PhJUk(6{U{J(eMx9N9hEg z%8$PW|4{ISacN-cyM;TthK7cNnJ-@cJ~{YwB!5k+&C#1U{z>#4-S2Przo|vX;{Gga z*Xw)V{kJjww=ezeI+rw#l&9+dDo=lBtA8bOznx=$ygvUL=U?OeKd&GBn J+_if3{{g=h;{yNy diff --git a/doc/modules/cassandra/pages/development/images/eclipse_debug0.png b/doc/modules/cassandra/pages/development/images/eclipse_debug0.png deleted file mode 100644 index 79fc5fd5bc45b5157f18cbf00952d3f07ed2d3a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48174 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%0D-C{5Pdn%!W4M_~u&K>f3AG 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Ɓ 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 UlyYw3dH?_b07*qoM6N<$g3RKKHUIzs diff --git a/doc/modules/cassandra/pages/development/images/eclipse_debug2.png b/doc/modules/cassandra/pages/development/images/eclipse_debug2.png deleted file mode 100644 index df4eddbd7924aa35f5fffa710ec11cc850bfb7db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57032 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 Hv*3RLdxc;T diff --git a/doc/modules/cassandra/pages/development/images/eclipse_debug3.png b/doc/modules/cassandra/pages/development/images/eclipse_debug3.png deleted file mode 100644 index 23178142c184197a3cd2351c71ffe2ff19a167a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58677 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 B)T;mh diff --git a/doc/modules/cassandra/pages/development/index.adoc b/doc/modules/cassandra/pages/development/index.adoc deleted file mode 100644 index c5009538d602..000000000000 --- a/doc/modules/cassandra/pages/development/index.adoc +++ /dev/null @@ -1,13 +0,0 @@ -= Contributing to Cassandra - -* xref:development/gettingstarted.adoc[Getting started] -* xref:development/ide.adoc[IDE] -* xref:development/testing.adoc[Testing] -* xref:development/code_style.adoc[Code style] -* xref:development/how_to_commit.adoc[How to commit] -* xref:development/how_to_review.adoc[How to review] -* xref:development/patches.adoc[Patches] -* xref:development/ci.adoc[CI] -* xref:development/dependencies.adoc[Dependencies] -* xref:development/documentation.adoc[Documentation] -* xref:development/release_process.adoc[Release process] diff --git a/doc/modules/cassandra/pages/development/patches.adoc b/doc/modules/cassandra/pages/development/patches.adoc deleted file mode 100644 index 6bcdea14c0bc..000000000000 --- a/doc/modules/cassandra/pages/development/patches.adoc +++ /dev/null @@ -1,218 +0,0 @@ -= Contributing Code Changes - -== Choosing What to Work on - -Submitted patches can include bug fixes, changes to the Java code base, -improvements for tooling (both Java or Python), documentation, testing -or any other changes that requires changing the code base. Although the -process of contributing code is always the same, the amount of work and -time it takes to get a patch accepted also depends on the kind of issue -you're addressing. - -As a general rule of thumb::: - * Major new features and significant changes to the code based will - likely not going to be accepted without deeper discussion within the - http://cassandra.apache.org/community/[developer community] - * Bug fixes take higher priority compared to features - * The extend to which tests are required depend on how likely your - changes will effect the stability of Cassandra in production. Tooling - changes requires fewer tests than storage engine changes. - * Less complex patches will be faster to review: consider breaking up - an issue into individual tasks and contributions that can be reviewed - separately - -[TIP] -.Hint -==== -Not sure what to work? Just pick an issue marked as -https://issues.apache.org/jira/issues/?jql=project%20%3D%20CASSANDRA%20AND%20Complexity%20%3D%20%22Low%20Hanging%20Fruit%22%20and%20status%20!%3D%20resolved[Low -Hanging Fruit] Complexity in JIRA, which we use to flag issues that -could turn out to be good starter tasks for beginners. -==== - -== Before You Start Coding - -Although contributions are highly appreciated, we do not guarantee that -each contribution will become a part of Cassandra. Therefore it's -generally a good idea to first get some feedback on the things you plan -to work on, especially about any new features or major changes to the -code base. You can reach out to other developers on the mailing list or -`Slack`. - -You should also:: - * Avoid redundant work by searching for already reported issues in - https://issues.apache.org/jira/browse/CASSANDRA[JIRA] - * Create a new issue early in the process describing what you're - working on - not just after finishing your patch - * Link related JIRA issues with your own ticket to provide a better - context - * Update your ticket from time to time by giving feedback on your - progress and link a GitHub WIP branch with your current code - * Ping people who you actively like to ask for advice on JIRA by - https://confluence.atlassian.com/conf54/confluence-user-s-guide/sharing-content/using-mentions[mentioning - users] -There are also some fixed rules that you need to be aware::: - * Patches will only be applied to branches by following the release - model - * Code must be testable - * Code must follow the `code_style` convention - * Changes must not break compatibility between different Cassandra - versions - * Contributions must be covered by the Apache License - -=== Choosing the Right Branches to Work on - -There are currently multiple Cassandra versions maintained in individual -branches: - -[cols=",",options="header",] -|=== -|Version |Policy -|4.0 |Code freeze (see below) -|3.11 |Critical bug fixes only -|3.0 |Critical bug fixes only -|2.2 |Critical bug fixes only -|2.1 |Critical bug fixes only -|=== - -Corresponding branches in git are easy to recognize as they are named -`cassandra-` (e.g. `cassandra-3.0`). The `trunk` branch is an -exception, as it contains the most recent commits from all other -branches and is used for creating new branches for future tick-tock -releases. - -==== 4.0 Code Freeze - -Patches for new features are currently not accepted for 4.0 or any -earlier versions. Starting with the code freeze in September, all -efforts should focus on stabilizing the 4.0 branch before the first -official release. During that time, only the following patches will be -considered for acceptance: - -____ -* Bug fixes -* Measurable performance improvements -* Changes not distributed as part of the release such as: -* Testing related improvements and fixes -* Build and infrastructure related changes -* Documentation -____ - -==== Bug Fixes - -Creating patches for bug fixes is a bit more complicated as this will -depend on how many different versions of Cassandra are affected. In each -case, the order for merging such changes will be `cassandra-2.1` -> -`cassandra-2.2` -> `cassandra-3.0` -> `cassandra-3.x` -> `trunk`. But -don't worry, merging from 2.1 would be the worst case for bugs that -affect all currently supported versions, which isn't very common. As a -contributor, you're also not expected to provide a single patch for each -version. What you need to do however is: - -____ -* Be clear about which versions you could verify to be affected by the -bug -* For 2.x: ask if a bug qualifies to be fixed in this release line, as -this may be handled on case by case bases -* If possible, create a patch against the lowest version in the branches -listed above (e.g. if you found the bug in 3.9 you should try to fix it -already in 3.0) -* Test if the patch can be merged cleanly across branches in the -direction listed above -* Be clear which branches may need attention by the committer or even -create custom patches for those if you can -____ - -== Creating a Patch - -So you've finished coding and the great moment arrives: it's time to -submit your patch! - -____ -[arabic] -. Create a branch for your changes if you haven't done already. Many -contributors name their branches based on ticket number and Cassandra -version, e.g. `git checkout -b 12345-3.0` -. Verify that you follow Cassandra's `code_style` -. Make sure all tests (including yours) pass using ant as described in -`testing`. If you suspect a test failure is unrelated to your change, it -may be useful to check the test's status by searching the issue tracker -or looking at https://builds.apache.org/[CI] results for the relevant -upstream version. Note that the full test suites take many hours to -complete, so it is common to only run specific relevant tests locally -before uploading a patch. Once a patch has been uploaded, the reviewer -or committer can help setup CI jobs to run the full test suites. -. Consider going through the `how_to_review` for your code. This will -help you to understand how others will consider your change for -inclusion. -. Don’t make the committer squash commits for you in the root branch -either. Multiple commits are fine - and often preferable - during review -stage, especially for incremental review, but once +1d, do either: - -____ -[loweralpha] -. Attach a patch to JIRA with a single squashed commit in it (per -branch), or -. Squash the commits in-place in your branches into one -____ - -[arabic, start=6] -. Include a CHANGES.txt entry (put it at the top of the list), and -format the commit message appropriately in your patch as below. Please -note that only user-impacting items -https://lists.apache.org/thread.html/rde1128131a621e43b0a9c88778398c053a234da0f4c654b82dcbbe0e%40%3Cdev.cassandra.apache.org%3E[should] -be listed in CHANGES.txt. If you fix a test that does not affect users -and does not require changes in runtime code, then no CHANGES.txt entry -is necessary. -+ -[source,none] ----- - - -patch by ; reviewed by for CASSANDRA-##### ----- -. When you're happy with the result, create a patch: - -____ -[source,none] ----- -git add -git commit -m '' -git format-patch HEAD~1 -mv (e.g. 12345-trunk.txt, 12345-3.0.txt) ----- - -Alternatively, many contributors prefer to make their branch available -on GitHub. In this case, fork the Cassandra repository on GitHub and -push your branch: - -[source,none] ----- -git push --set-upstream origin 12345-3.0 ----- -____ - -[arabic, start=8] -. To make life easier for your reviewer/committer, you may want to make -sure your patch applies cleanly to later branches and create additional -patches/branches for later Cassandra versions to which your original -patch does not apply cleanly. That said, this is not critical, and you -will receive feedback on your patch regardless. -. Attach the newly generated patch to the ticket/add a link to your -branch and click "Submit Patch" at the top of the ticket. This will move -the ticket into "Patch Available" status, indicating that your -submission is ready for review. -. Wait for other developers or committers to review it and hopefully +1 -the ticket (see `how_to_review`). If your change does not receive a +1, -do not be discouraged. If possible, the reviewer will give suggestions -to improve your patch or explain why it is not suitable. -. If the reviewer has given feedback to improve the patch, make the -necessary changes and move the ticket into "Patch Available" once again. -____ - -Once the review process is complete, you will receive a +1. Wait for a -committer to commit it. Do not delete your branches immediately after -they’ve been committed - keep them on GitHub for a while. Alternatively, -attach a patch to JIRA for historical record. It’s not that uncommon for -a committer to mess up a merge. In case of that happening, access to the -original code is required, or else you’ll have to redo some of the work. diff --git a/doc/modules/cassandra/pages/development/release_process.adoc b/doc/modules/cassandra/pages/development/release_process.adoc deleted file mode 100644 index bcd77c7cbb42..000000000000 --- a/doc/modules/cassandra/pages/development/release_process.adoc +++ /dev/null @@ -1,245 +0,0 @@ -= Release Process - -The steps for Release Managers to create, vote and publish releases for -Apache Cassandra. - -While a committer can perform the initial steps of creating and calling -a vote on a proposed release, only a PMC member can complete the process -of publishing and announcing the release. - -== Prerequisites - -Background docs:: - * http://www.apache.org/legal/release-policy.html[ASF Release Policy] - * http://www.apache.org/dev/release-distribution[ASF Release - Distribution Policy] - * http://www.eu.apache.org/dev/release-publishing.html[ASF Release - Best Practices] - -A debian based linux OS is required to run the release steps from. -Debian-based distros provide the required RPM, dpkg and repository -management tools. - -=== Create and publish your GPG key - -To create a GPG key, follow the -http://www.apache.org/dev/openpgp.html[guidelines]. The key must be 4096 -bit RSA. Include your public key in: - -[source,none] ----- -https://dist.apache.org/repos/dist/release/cassandra/KEYS ----- - -Publish your GPG key in a PGP key server, such as -http://pgp.mit.edu/[MIT Keyserver]. - -=== Bintray account with access to Apache organisation - -Publishing a successfully voted upon release requires bintray access to -the Apache organisation. Please verify that you have a bintray account -and the Apache organisation is listed -https://bintray.com/profile/edit/organizations[here]. - -== Create Release Artifacts - -Any committer can perform the following steps to create and call a vote -on a proposed release. - -Check that there are no open urgent jira tickets currently being worked -on. Also check with the PMC that there's security vulnerabilities -currently being worked on in private.' Current project habit is to check -the timing for a new release on the dev mailing lists. - -=== Perform the Release - -Run the following commands to generate and upload release artifacts, to -the ASF nexus staging repository and dev distribution location: - -[source,none] ----- -cd ~/git -git clone https://github.com/apache/cassandra-builds.git -git clone https://github.com/apache/cassandra.git - -# Edit the variables at the top of the `prepare_release.sh` file -edit cassandra-builds/cassandra-release/prepare_release.sh - -# Ensure your 4096 RSA key is the default secret key -edit ~/.gnupg/gpg.conf # update the `default-key` line -edit ~/.rpmmacros # update the `%gpg_name ` line - -# Ensure DEBFULLNAME and DEBEMAIL is defined and exported, in the debian scripts configuration -edit ~/.devscripts - -# The prepare_release.sh is run from the actual cassandra git checkout, -# on the branch/commit that we wish to tag for the tentative release along with version number to tag. -cd cassandra -git switch cassandra- - -# The following cuts the release artifacts (including deb and rpm packages) and deploy to staging environments -../cassandra-builds/cassandra-release/prepare_release.sh -v ----- - -Follow the prompts. - -If building the deb or rpm packages fail, those steps can be repeated -individually using the [.title-ref]#-d# and [.title-ref]#-r# flags, -respectively. - -== Call for a Vote - -Fill out the following email template and send to the dev mailing list: - -[source,none] ----- -I propose the following artifacts for release as . - -sha1: - -Git: https://gitbox.apache.org/repos/asf?p=cassandra.git;a=shortlog;h=refs/tags/-tentative - -Artifacts: https://repository.apache.org/content/repositories/orgapachecassandra-/org/apache/cassandra/apache-cassandra// - -Staging repository: https://repository.apache.org/content/repositories/orgapachecassandra-/ - -The distribution packages are available here: https://dist.apache.org/repos/dist/dev/cassandra/${version}/ - -The vote will be open for 72 hours (longer if needed). - -[1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=-tentative -[2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=-tentative ----- - -== Post-vote operations - -Any PMC member can perform the following steps to formalize and publish -a successfully voted release. - -=== Publish Artifacts - -Run the following commands to publish the voted release artifacts: - -[source,none] ----- -cd ~/git -# edit the variables at the top of the `finish_release.sh` file -edit cassandra-builds/cassandra-release/finish_release.sh - -# After cloning cassandra-builds repo, `finish_release.sh` is run from the actual cassandra git checkout, -# on the tentative release tag that we wish to tag for the final release version number tag. -cd ~/git/cassandra/ -git checkout -tentative -../cassandra-builds/cassandra-release/finish_release.sh -v ----- - -If successful, take note of the email text output which can be used in -the next section "Send Release Announcement". The output will also list -the next steps that are required. - -=== Promote Nexus Repository - -* Login to https://repository.apache.org[Nexus repository] again. -* Click on "Staging" and then on the repository with id -"cassandra-staging". -* Find your closed staging repository, right click on it and choose -"Promote". -* Select the "Releases" repository and click "Promote". -* Next click on "Repositories", select the "Releases" repository and -validate that your artifacts exist as you expect them. - -Publish the Bintray Uploaded Distribution Packages --------------------------------------------------- - -Log into bintray and publish the uploaded artifacts. - -=== Update and Publish Website - -See https://svn.apache.org/repos/asf/cassandra/site/src/README[docs] for -building and publishing the website. - -Also update the CQL doc if appropriate. - -=== Release version in JIRA - -Release the JIRA version. - -* In JIRA go to the version that you want to release and release it. -* Create a new version, if it has not been done before. - -=== Update to Next Development Version - -Update the codebase to point to the next development version: - -[source,none] ----- -cd ~/git/cassandra/ -git checkout cassandra- -edit build.xml # update ` ` -edit debian/changelog # add entry for new version -edit CHANGES.txt # add entry for new version -git commit -m "Increment version to " build.xml debian/changelog CHANGES.txt - -# …and forward merge and push per normal procedure ----- - -=== Wait for Artifacts to Sync - -Wait for the artifacts to sync at -https://downloads.apache.org/cassandra/ - -=== Send Release Announcement - -Fill out the following email template and send to both user and dev -mailing lists: - -[source,none] ----- -The Cassandra team is pleased to announce the release of Apache Cassandra version . - -Apache Cassandra is a fully distributed database. It is the right choice -when you need scalability and high availability without compromising -performance. - - http://cassandra.apache.org/ - -Downloads of source and binary distributions are listed in our download -section: - - http://cassandra.apache.org/download/ - -This version is release[1] on the series. As always, -please pay attention to the release notes[2] and let us know[3] if you -were to encounter any problem. - -Enjoy! - -[1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb= -[2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb= -[3]: https://issues.apache.org/jira/browse/CASSANDRA ----- - -Update Slack Cassandra topic --------------------------- - -Update topic in `cassandra` `Slack room `:: - /topic cassandra.apache.org | Latest releases: 3.11.4, 3.0.18, 2.2.14, - 2.1.21 | ask, don't ask to ask - -=== Tweet from @Cassandra - -Tweet the new release, from the @Cassandra account - -=== Delete Old Releases - -As described in -http://www.apache.org/dev/release.html#when-to-archive[When to Archive]. - -An example of removing old releases: - -[source,none] ----- -svn co https://dist.apache.org/repos/dist/release/cassandra/ cassandra-dist -svn rm debian/pool/main/c/cassandra/* -svn st -# check and commit ----- diff --git a/doc/modules/cassandra/pages/development/testing.adoc b/doc/modules/cassandra/pages/development/testing.adoc deleted file mode 100644 index ace81cf833eb..000000000000 --- a/doc/modules/cassandra/pages/development/testing.adoc +++ /dev/null @@ -1,145 +0,0 @@ -= Testing - -Creating tests is one of the most important and also most difficult -parts of developing Cassandra. There are different ways to test your -code depending on what you're working on. - -== Unit Testing - -The most simple way to test code in Cassandra is probably by writing a -unit test. Cassandra uses JUnit as a testing framework and test cases -can be found in the `test/unit` directory. Ideally you’d be able to -create a unit test for your implementation that would exclusively cover -the class you created (the unit under test). Unfortunately this is not -always possible and Cassandra doesn’t have a very mock friendly code -base. Often you’ll find yourself in a situation where you have to make -use of an embedded Cassandra instance that you’ll be able to interact -with in your test. If you want to make use of CQL in your test, you can -simply extend CQLTester and use some of the convenient helper methods -such as in the following example. - -[source,java] ----- -@Test -public void testBatchAndList() throws Throwable -{ - createTable("CREATE TABLE %s (k int PRIMARY KEY, l list)"); - execute("BEGIN BATCH " + - "UPDATE %1$s SET l = l +[ 1 ] WHERE k = 0; " + - "UPDATE %1$s SET l = l + [ 2 ] WHERE k = 0; " + - "UPDATE %1$s SET l = l + [ 3 ] WHERE k = 0; " + - "APPLY BATCH"); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), - row(list(1, 2, 3))); -} ----- - -Unit tests can be run from the command line using the `ant test` -command, `ant test -Dtest.name=` to execute a test -suite or -`ant testsome -Dtest.name= -Dtest.methods=[,testmethod2]` -for individual tests. For example, to run all test methods in the -`org.apache.cassandra.cql3.SimpleQueryTest` class, you would run: - -[source,none] ----- -ant test -Dtest.name=SimpleQueryTest ----- - -To run only the `testStaticCompactTables()` test method from that class, -you would run: - -[source,none] ----- -ant testsome -Dtest.name=org.apache.cassandra.cql3.SimpleQueryTest -Dtest.methods=testStaticCompactTables ----- - -If you see an error like this: - -[source,none] ----- -Throws: cassandra-trunk/build.xml:1134: taskdef A class needed by class org.krummas.junit.JStackJUnitTask cannot be found: -org/apache/tools/ant/taskdefs/optional/junit/JUnitTask using the classloader -AntClassLoader[/.../cassandra-trunk/lib/jstackjunit-0.0.1.jar] ----- - -You will need to install the ant-optional package since it contains the -`JUnitTask` class. - -=== Long running tests - -Test that consume a significant amount of time during execution can be -found in the `test/long` directory and executed as a regular JUnit test -or standalone program. Except for the execution time, there’s nothing -really special about them. However, ant will execute tests under -`test/long` only when using the `ant long-test` target. - -== DTests - -One way of doing integration or system testing at larger scale is by -using https://github.com/apache/cassandra-dtest[dtest], which stands for -“Cassandra Distributed Tests”. The idea is to automatically setup -Cassandra clusters using various configurations and simulate certain use -cases you want to test. This is done using Python scripts and `ccmlib` -from the https://github.com/pcmanus/ccm[ccm] project. Dtests will setup -clusters using this library just as you do running ad-hoc `ccm` commands -on your local machine. Afterwards dtests will use the -http://datastax.github.io/python-driver/installation.html[Python driver] -to interact with the nodes, manipulate the file system, analyze logs or -mess with individual nodes. - -Using dtests helps us to prevent regression bugs by continually -executing tests on the https://builds.apache.org/[CI server] against new -patches. Committers will be able to set up build branches there and your -reviewer may use the CI environment to run tests for your patch. Read -more on the motivation behind continuous integration -http://www.datastax.com/dev/blog/cassandra-testing-improvements-for-developer-convenience-and-confidence[here]. - -The best way to learn how to write dtests is probably by reading the -introduction "http://www.datastax.com/dev/blog/how-to-write-a-dtest[How -to Write a Dtest]" and by looking at existing, recently updated tests in -the project. New tests must follow certain -https://github.com/apache/cassandra-dtest/blob/master/CONTRIBUTING.md[style -conventions] that are being checked before accepting contributions. In -contrast to Cassandra, dtest issues and pull-requests are managed on -github, therefor you should make sure to link any created dtests in your -Cassandra ticket and also refer to the ticket number in your dtest PR. - -Creating a good dtest can be tough, but it should not prevent you from -submitting patches! Please ask in the corresponding JIRA ticket how to -write a good dtest for the patch. In most cases a reviewer or committer -will able to support you, and in some cases they may offer to write a -dtest for you. - -== Performance Testing - -Performance tests for Cassandra are a special breed of tests that are -not part of the usual patch contribution process. In fact you can -contribute tons of patches to Cassandra without ever running performance -tests. They are important however when working on performance -improvements, as such improvements must be measurable. - -=== Cassandra Stress Tool - -See `cassandra_stress` - -=== cstar_perf - -Another tool available on github is -https://github.com/datastax/cstar_perf[cstar_perf] that can be used for -intensive performance testing in large clusters or locally. Please refer -to the project page on how to set it up and how to use it. - -=== CircleCI - -Cassandra ships with a default https://circleci.com[CircleCI] -configuration, to enable running tests on your branches, you need to go -the CircleCI website, click "Login" and log in with your github account. -Then you need to give CircleCI permission to watch your repositories. -Once you have done that, you can optionally configure CircleCI to run -tests in parallel - click "Projects", then your github account and then -click the settings for the project. If you leave the parallelism at 1 -for Cassandra, only `ant eclipse-warnings` and `ant test` will be run. -If you up the parallelism to 4, it also runs `ant long-test`, -`ant test-compression` and `ant stress-test` diff --git a/doc/modules/cassandra/pages/getting_started/installing.adoc b/doc/modules/cassandra/pages/getting_started/installing.adoc index 24e55468c50e..4d4ea06ba384 100644 --- a/doc/modules/cassandra/pages/getting_started/installing.adoc +++ b/doc/modules/cassandra/pages/getting_started/installing.adoc @@ -101,7 +101,7 @@ include::partial$java_version.adoc[] [arabic, start=2] . Download the binary tarball from one of the mirrors on the -http://cassandra.apache.org/download/[Apache Cassandra Download] site. +{cass_url}download/[Apache Cassandra Download] site. For example, to download Cassandra {40_version}: [source,shell] @@ -188,7 +188,7 @@ include::example$TEXT/tarball_install_dirs.txt[] <5>location of cassandra-stress tool For information on how to configure your installation, see -http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +{cass_url}doc/latest/getting_started/configuring.html[Configuring Cassandra]. [arabic, start=6] @@ -285,7 +285,7 @@ include::example$BASH/apt-get_cass.sh[] ---- NOTE: For information on how to configure your installation, see -http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +{cass_url}doc/latest/getting_started/configuring.html[Configuring Cassandra]. include::partial$tail_syslog.adoc[] @@ -340,5 +340,5 @@ include::partial$nodetool_and_cqlsh_nobin.adoc[] == Further installation info For help with installation issues, see the -http://cassandra.apache.org/doc/latest/troubleshooting/index.html[Troubleshooting] +{cass_url}doc/latest/troubleshooting/index.html[Troubleshooting] section. diff --git a/doc/modules/cassandra/partials/nodetool_and_cqlsh.adoc b/doc/modules/cassandra/partials/nodetool_and_cqlsh.adoc index 89892202a212..d1c4e73a2f3c 100644 --- a/doc/modules/cassandra/partials/nodetool_and_cqlsh.adoc +++ b/doc/modules/cassandra/partials/nodetool_and_cqlsh.adoc @@ -1,5 +1,5 @@ NOTE: For information on how to configure your installation, see -http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +{cass_url}doc/latest/getting_started/configuring.html[Configuring Cassandra]. [arabic, start=7] diff --git a/doc/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc b/doc/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc index daf5e53acc23..c17949c4bcea 100644 --- a/doc/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc +++ b/doc/modules/cassandra/partials/nodetool_and_cqlsh_nobin.adoc @@ -1,5 +1,5 @@ NOTE: For information on how to configure your installation, see -http://cassandra.apache.org/doc/latest/getting_started/configuring.html[Configuring +{cass_url}doc/latest/getting_started/configuring.html[Configuring Cassandra]. [arabic, start=7] From fb000932eff63a965b6910add9112c01beae28d1 Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Wed, 14 Jul 2021 10:08:21 -0700 Subject: [PATCH 110/115] change http://cassandra.apache.org to use antora variable {cass_url} --- doc/antora.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/antora.yml b/doc/antora.yml index 8f358ab3bbc0..0309e2a62dce 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -1,5 +1,8 @@ name: Cassandra version: '4.0' +asciidoc: + attributes: + cass_url: 'http://cassandra.apache.org/' nav: - modules/ROOT/nav.adoc - modules/cassandra/nav.adoc From 61f874ade6f2f08862baed38a185a5f3012597b2 Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Wed, 14 Jul 2021 10:33:41 -0700 Subject: [PATCH 111/115] change Website to _ --- doc/modules/ROOT/pages/index.adoc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/modules/ROOT/pages/index.adoc b/doc/modules/ROOT/pages/index.adoc index f9acf03e60ba..6a0c745a76d9 100644 --- a/doc/modules/ROOT/pages/index.adoc +++ b/doc/modules/ROOT/pages/index.adoc @@ -37,14 +37,14 @@ to do so by submitting your contribution like any other patch following | xref:cassandra:plugins/index.adoc[Plug-ins] | Third-party plug-ins -| xref:master@Website:ROOT:native_protocol.adoc[Native Protocols] | Native Cassandra protocol specifications +| xref:master@_:ROOT:native_protocol.adoc[Native Protocols] | Native Cassandra protocol specifications |=== == Meta information -* xref:master@Website:ROOT:bugs.adoc[Reporting bugs] -* xref:master@Website:ROOT:contactus.adoc[Contact us] -* xref:master@Website:ROOT:development/index.adoc[Contributing code] -* xref:master@Website:ROOT:docdev/index.adoc[Contributing to the docs] -* xref:master@Website:ROOT:community.adoc[Community] -* xref:master@Website:ROOT:download.adoc[Download] +* xref:master@_:ROOT:bugs.adoc[Reporting bugs] +* xref:master@_:ROOT:contactus.adoc[Contact us] +* xref:master@_:ROOT:development/index.adoc[Contributing code] +* xref:master@_:ROOT:docdev/index.adoc[Contributing to the docs] +* xref:master@_:ROOT:community.adoc[Community] +* xref:master@_:ROOT:download.adoc[Download] From 70ffa19030a331083d570d4f9e40ff12c889ec7d Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Fri, 16 Jul 2021 08:44:00 -0700 Subject: [PATCH 112/115] remove bold --- doc/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt b/doc/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt index 33fde516a852..b38b166d7436 100644 --- a/doc/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt +++ b/doc/modules/cassandra/examples/TEXT/NODETOOL/decommission.txt @@ -1,5 +1,5 @@ NAME - nodetool decommission - Decommission the *node I am connecting to* + nodetool decommission - Decommission the node I am connecting to SYNOPSIS nodetool [(-h | --host )] [(-p | --port )] From e7f80a7914349367524dfa0933f84d5c3c6d9d5a Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Mon, 26 Jul 2021 13:23:12 -0700 Subject: [PATCH 113/115] add display version for 4.0 --- doc/antora.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/antora.yml b/doc/antora.yml index 0309e2a62dce..771311bfd964 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -1,5 +1,6 @@ name: Cassandra version: '4.0' +display_version: '4.0' asciidoc: attributes: cass_url: 'http://cassandra.apache.org/' From 21613f584d288ee036e9d26fd4cc0cf895e3ac5c Mon Sep 17 00:00:00 2001 From: Lorina Poland Date: Mon, 9 Aug 2021 13:59:57 -0700 Subject: [PATCH 114/115] fix --- .rat-excludes | 33 + bin/cassandra.bat | 184 ++ bin/cassandra.in.bat | 74 + bin/cassandra.ps1 | 390 +++ bin/cqlsh.bat | 34 + bin/debug-cql.bat | 39 + bin/nodetool.bat | 38 + bin/source-conf.ps1 | 57 + bin/sstableloader.bat | 41 + bin/sstablescrub.bat | 41 + bin/sstableupgrade.bat | 41 + bin/sstableutil.bat | 41 + bin/sstableverify.bat | 48 + bin/stop-server.bat | 55 + bin/stop-server.ps1 | 193 ++ conf/cassandra-env.ps1 | 469 +++ doc/Dockerfile | 22 + doc/Makefile | 296 ++ doc/SASI.md | 798 ++++++ doc/convert_yaml_to_rst.py | 145 + doc/cql3/CQL.css | 103 + doc/cql3/CQL.textile | 2553 +++++++++++++++++ doc/docker-compose.yml | 11 + doc/gen-nodetool-docs.py | 82 + doc/make.bat | 281 ++ doc/native_protocol_v3.spec | 1040 +++++++ doc/native_protocol_v4.spec | 1191 ++++++++ doc/native_protocol_v5.spec | 1281 +++++++++ doc/source/_static/extra.css | 76 + ...l~b7c4271b16801acff77c020ebf2daf82b1592184 | 100 + doc/source/_theme/cassandra_theme/theme.conf | 3 + doc/source/_util/cql.py | 267 ++ .../architecture/Figure_1_guarantees.jpg | Bin 0 -> 17993 bytes doc/source/architecture/dynamo.rst | 537 ++++ doc/source/architecture/guarantees.rst | 76 + doc/source/architecture/images/ring.svg | 11 + doc/source/architecture/images/vnodes.svg | 11 + doc/source/architecture/index.rst | 29 + doc/source/architecture/overview.rst | 114 + doc/source/architecture/storage_engine.rst | 208 ++ doc/source/bugs.rst | 30 + doc/source/conf.py | 441 +++ doc/source/configuration/index.rst | 25 + doc/source/contactus.rst | 50 + doc/source/cql/appendices.rst | 330 +++ doc/source/cql/changes.rst | 211 ++ doc/source/cql/ddl.rst | 852 ++++++ doc/source/cql/definitions.rst | 234 ++ doc/source/cql/dml.rst | 522 ++++ doc/source/cql/functions.rst | 581 ++++ doc/source/cql/index.rst | 47 + doc/source/cql/indexes.rst | 83 + doc/source/cql/json.rst | 115 + doc/source/cql/mvs.rst | 179 ++ doc/source/cql/operators.rst | 74 + doc/source/cql/security.rst | 538 ++++ doc/source/cql/triggers.rst | 63 + doc/source/cql/types.rst | 559 ++++ .../data_modeling_conceptual.rst | 63 + .../data_modeling/data_modeling_logical.rst | 219 ++ .../data_modeling/data_modeling_physical.rst | 117 + .../data_modeling/data_modeling_queries.rst | 85 + .../data_modeling/data_modeling_rdbms.rst | 171 ++ .../data_modeling/data_modeling_refining.rst | 218 ++ .../data_modeling/data_modeling_schema.rst | 144 + .../data_modeling/data_modeling_tools.rst | 64 + .../images/Figure_1_data_model.jpg | Bin 0 -> 17469 bytes .../images/Figure_2_data_model.jpg | Bin 0 -> 20925 bytes .../images/data_modeling_chebotko_logical.png | Bin 0 -> 87366 bytes .../data_modeling_chebotko_physical.png | Bin 0 -> 4553809 bytes .../images/data_modeling_hotel_bucketing.png | Bin 0 -> 22009 bytes .../images/data_modeling_hotel_erd.png | Bin 0 -> 233309 bytes .../images/data_modeling_hotel_logical.png | Bin 0 -> 116998 bytes .../images/data_modeling_hotel_physical.png | Bin 0 -> 119795 bytes .../images/data_modeling_hotel_queries.png | Bin 0 -> 103940 bytes .../images/data_modeling_hotel_relational.png | Bin 0 -> 102656 bytes .../data_modeling_reservation_logical.png | Bin 0 -> 121750 bytes .../data_modeling_reservation_physical.png | Bin 0 -> 142416 bytes doc/source/data_modeling/index.rst | 36 + doc/source/data_modeling/intro.rst | 146 + doc/source/development/ci.rst | 79 + doc/source/development/code_style.rst | 94 + doc/source/development/dependencies.rst | 53 + doc/source/development/documentation.rst | 104 + doc/source/development/gettingstarted.rst | 60 + doc/source/development/how_to_commit.rst | 75 + doc/source/development/how_to_review.rst | 73 + doc/source/development/ide.rst | 185 ++ doc/source/development/images/docs_commit.png | Bin 0 -> 104667 bytes .../development/images/docs_create_branch.png | Bin 0 -> 181860 bytes .../development/images/docs_create_file.png | Bin 0 -> 209110 bytes doc/source/development/images/docs_editor.png | Bin 0 -> 106175 bytes doc/source/development/images/docs_fork.png | Bin 0 -> 76159 bytes doc/source/development/images/docs_pr.png | Bin 0 -> 156081 bytes .../development/images/docs_preview.png | Bin 0 -> 123826 bytes .../development/images/eclipse_debug0.png | Bin 0 -> 48174 bytes .../development/images/eclipse_debug1.png | Bin 0 -> 34446 bytes .../development/images/eclipse_debug2.png | Bin 0 -> 57032 bytes .../development/images/eclipse_debug3.png | Bin 0 -> 58677 bytes .../development/images/eclipse_debug4.png | Bin 0 -> 24793 bytes .../development/images/eclipse_debug5.png | Bin 0 -> 66632 bytes .../development/images/eclipse_debug6.png | Bin 0 -> 87568 bytes doc/source/development/index.rst | 33 + doc/source/development/patches.rst | 141 + ...t~b7c4271b16801acff77c020ebf2daf82b1592184 | 270 ++ doc/source/development/testing.rst | 98 + doc/source/faq/index.rst | 299 ++ doc/source/getting_started/configuring.rst | 67 + doc/source/getting_started/drivers.rst | 123 + doc/source/getting_started/index.rst | 34 + doc/source/getting_started/installing.rst | 324 +++ doc/source/getting_started/production.rst | 156 + doc/source/getting_started/querying.rst | 52 + doc/source/index.rst | 43 + doc/source/new/Figure_1.jpg | Bin 0 -> 27827 bytes doc/source/new/Figure_2.jpg | Bin 0 -> 36650 bytes doc/source/new/auditlogging.rst | 461 +++ doc/source/new/fqllogging.rst | 689 +++++ doc/source/new/index.rst | 32 + doc/source/new/java11.rst | 274 ++ doc/source/new/messaging.rst | 257 ++ doc/source/new/streaming.rst | 162 ++ doc/source/new/transientreplication.rst | 155 + doc/source/new/virtualtables.rst | 342 +++ doc/source/operating/Figure_1_backups.jpg | Bin 0 -> 38551 bytes doc/source/operating/Figure_1_read_repair.jpg | Bin 0 -> 36919 bytes doc/source/operating/Figure_2_read_repair.jpg | Bin 0 -> 45595 bytes doc/source/operating/Figure_3_read_repair.jpg | Bin 0 -> 43021 bytes doc/source/operating/Figure_4_read_repair.jpg | Bin 0 -> 43021 bytes doc/source/operating/Figure_5_read_repair.jpg | Bin 0 -> 42560 bytes doc/source/operating/Figure_6_read_repair.jpg | Bin 0 -> 57489 bytes doc/source/operating/audit_logging.rst | 236 ++ doc/source/operating/backups.rst | 660 +++++ doc/source/operating/bloom_filters.rst | 65 + doc/source/operating/bulk_loading.rst | 660 +++++ doc/source/operating/cdc.rst | 96 + doc/source/operating/compaction/index.rst | 301 ++ doc/source/operating/compaction/lcs.rst | 90 + doc/source/operating/compaction/stcs.rst | 58 + doc/source/operating/compaction/twcs.rst | 76 + doc/source/operating/compression.rst | 164 ++ doc/source/operating/error_codes.txt | 31 + doc/source/operating/hardware.rst | 85 + doc/source/operating/hints.rst | 279 ++ doc/source/operating/images/hints.svg | 9 + doc/source/operating/index.rst | 39 + doc/source/operating/metrics.rst | 793 +++++ doc/source/operating/read_repair.rst | 169 ++ doc/source/operating/repair.rst | 208 ++ doc/source/operating/security.rst | 441 +++ doc/source/operating/snitch.rst | 82 + doc/source/operating/topo_changes.rst | 129 + doc/source/plugins/index.rst | 35 + doc/source/tools/cassandra_stress.rst | 273 ++ doc/source/tools/cqlsh.rst | 458 +++ doc/source/tools/example-stress-graph.png | Bin 0 -> 359103 bytes doc/source/tools/index.rst | 28 + doc/source/tools/sstable/index.rst | 39 + ...t~b7c4271b16801acff77c020ebf2daf82b1592184 | 316 ++ .../tools/sstable/sstableexpiredblockers.rst | 48 + .../tools/sstable/sstablelevelreset.rst | 82 + doc/source/tools/sstable/sstableloader.rst | 273 ++ doc/source/tools/sstable/sstablemetadata.rst | 300 ++ .../tools/sstable/sstableofflinerelevel.rst | 95 + .../tools/sstable/sstablerepairedset.rst | 79 + doc/source/tools/sstable/sstablescrub.rst | 93 + doc/source/tools/sstable/sstablesplit.rst | 93 + doc/source/tools/sstable/sstableupgrade.rst | 137 + doc/source/tools/sstable/sstableutil.rst | 91 + doc/source/tools/sstable/sstableverify.rst | 91 + doc/source/tools/stress-example.yaml | 44 + doc/source/tools/stress-lwt-example.yaml | 70 + doc/source/troubleshooting/finding_nodes.rst | 149 + doc/source/troubleshooting/index.rst | 39 + doc/source/troubleshooting/reading_logs.rst | 267 ++ doc/source/troubleshooting/use_nodetool.rst | 245 ++ doc/source/troubleshooting/use_tools.rst | 542 ++++ .../db/AbstractClusteringPrefix.java | 77 + .../cassandra/db/BlacklistedDirectories.java | 157 + .../db/BlacklistedDirectoriesMBean.java | 32 + .../apache/cassandra/db/CompactTables.java | 146 + .../cassandra/db/HintedHandOffManager.java | 76 + .../db/HintedHandOffManagerMBean.java | 50 + .../apache/cassandra/db/TableCQLHelper.java | 430 +++ .../db/commitlog/SimpleCachedBufferPool.java | 127 + .../metrics/ClientRequestSizeMetrics.java | 36 + .../cassandra/net/BackPressureState.java | 51 + .../cassandra/net/BackPressureStrategy.java | 44 + .../cassandra/net/RateBasedBackPressure.java | 297 ++ .../net/RateBasedBackPressureState.java | 130 + .../messages/AsymmetricSyncRequest.java | 133 + .../cassandra/schema/MigrationTask.java | 111 + .../org/apache/cassandra/transport/Frame.java | 382 +++ .../transport/frame/FrameBodyTransformer.java | 57 + .../checksum/ChecksummingTransformer.java | 361 +++ .../compress/CompressingTransformer.java | 164 ++ .../transport/frame/compress/Compressor.java | 62 + .../frame/compress/LZ4Compressor.java | 70 + .../frame/compress/SnappyCompressor.java | 79 + 199 files changed, 33575 insertions(+) create mode 100644 .rat-excludes create mode 100644 bin/cassandra.bat create mode 100644 bin/cassandra.in.bat create mode 100644 bin/cassandra.ps1 create mode 100644 bin/cqlsh.bat create mode 100644 bin/debug-cql.bat create mode 100644 bin/nodetool.bat create mode 100644 bin/source-conf.ps1 create mode 100644 bin/sstableloader.bat create mode 100644 bin/sstablescrub.bat create mode 100644 bin/sstableupgrade.bat create mode 100644 bin/sstableutil.bat create mode 100644 bin/sstableverify.bat create mode 100644 bin/stop-server.bat create mode 100644 bin/stop-server.ps1 create mode 100644 conf/cassandra-env.ps1 create mode 100644 doc/Dockerfile create mode 100644 doc/Makefile create mode 100644 doc/SASI.md create mode 100644 doc/convert_yaml_to_rst.py create mode 100644 doc/cql3/CQL.css create mode 100644 doc/cql3/CQL.textile create mode 100644 doc/docker-compose.yml create mode 100644 doc/gen-nodetool-docs.py create mode 100644 doc/make.bat create mode 100644 doc/native_protocol_v3.spec create mode 100644 doc/native_protocol_v4.spec create mode 100644 doc/native_protocol_v5.spec create mode 100644 doc/source/_static/extra.css create mode 100644 doc/source/_templates/indexcontent.html~b7c4271b16801acff77c020ebf2daf82b1592184 create mode 100644 doc/source/_theme/cassandra_theme/theme.conf create mode 100644 doc/source/_util/cql.py create mode 100644 doc/source/architecture/Figure_1_guarantees.jpg create mode 100644 doc/source/architecture/dynamo.rst create mode 100644 doc/source/architecture/guarantees.rst create mode 100644 doc/source/architecture/images/ring.svg create mode 100644 doc/source/architecture/images/vnodes.svg create mode 100644 doc/source/architecture/index.rst create mode 100644 doc/source/architecture/overview.rst create mode 100644 doc/source/architecture/storage_engine.rst create mode 100644 doc/source/bugs.rst create mode 100644 doc/source/conf.py create mode 100644 doc/source/configuration/index.rst create mode 100644 doc/source/contactus.rst create mode 100644 doc/source/cql/appendices.rst create mode 100644 doc/source/cql/changes.rst create mode 100644 doc/source/cql/ddl.rst create mode 100644 doc/source/cql/definitions.rst create mode 100644 doc/source/cql/dml.rst create mode 100644 doc/source/cql/functions.rst create mode 100644 doc/source/cql/index.rst create mode 100644 doc/source/cql/indexes.rst create mode 100644 doc/source/cql/json.rst create mode 100644 doc/source/cql/mvs.rst create mode 100644 doc/source/cql/operators.rst create mode 100644 doc/source/cql/security.rst create mode 100644 doc/source/cql/triggers.rst create mode 100644 doc/source/cql/types.rst create mode 100644 doc/source/data_modeling/data_modeling_conceptual.rst create mode 100644 doc/source/data_modeling/data_modeling_logical.rst create mode 100644 doc/source/data_modeling/data_modeling_physical.rst create mode 100644 doc/source/data_modeling/data_modeling_queries.rst create mode 100644 doc/source/data_modeling/data_modeling_rdbms.rst create mode 100644 doc/source/data_modeling/data_modeling_refining.rst create mode 100644 doc/source/data_modeling/data_modeling_schema.rst create mode 100644 doc/source/data_modeling/data_modeling_tools.rst create mode 100644 doc/source/data_modeling/images/Figure_1_data_model.jpg create mode 100644 doc/source/data_modeling/images/Figure_2_data_model.jpg create mode 100755 doc/source/data_modeling/images/data_modeling_chebotko_logical.png create mode 100644 doc/source/data_modeling/images/data_modeling_chebotko_physical.png create mode 100644 doc/source/data_modeling/images/data_modeling_hotel_bucketing.png create mode 100755 doc/source/data_modeling/images/data_modeling_hotel_erd.png create mode 100755 doc/source/data_modeling/images/data_modeling_hotel_logical.png create mode 100644 doc/source/data_modeling/images/data_modeling_hotel_physical.png create mode 100755 doc/source/data_modeling/images/data_modeling_hotel_queries.png create mode 100755 doc/source/data_modeling/images/data_modeling_hotel_relational.png create mode 100755 doc/source/data_modeling/images/data_modeling_reservation_logical.png create mode 100755 doc/source/data_modeling/images/data_modeling_reservation_physical.png create mode 100644 doc/source/data_modeling/index.rst create mode 100644 doc/source/data_modeling/intro.rst create mode 100644 doc/source/development/ci.rst create mode 100644 doc/source/development/code_style.rst create mode 100644 doc/source/development/dependencies.rst create mode 100644 doc/source/development/documentation.rst create mode 100644 doc/source/development/gettingstarted.rst create mode 100644 doc/source/development/how_to_commit.rst create mode 100644 doc/source/development/how_to_review.rst create mode 100644 doc/source/development/ide.rst create mode 100644 doc/source/development/images/docs_commit.png create mode 100644 doc/source/development/images/docs_create_branch.png create mode 100644 doc/source/development/images/docs_create_file.png create mode 100644 doc/source/development/images/docs_editor.png create mode 100644 doc/source/development/images/docs_fork.png create mode 100644 doc/source/development/images/docs_pr.png create mode 100644 doc/source/development/images/docs_preview.png create mode 100644 doc/source/development/images/eclipse_debug0.png create mode 100644 doc/source/development/images/eclipse_debug1.png create mode 100644 doc/source/development/images/eclipse_debug2.png create mode 100644 doc/source/development/images/eclipse_debug3.png create mode 100644 doc/source/development/images/eclipse_debug4.png create mode 100644 doc/source/development/images/eclipse_debug5.png create mode 100644 doc/source/development/images/eclipse_debug6.png create mode 100644 doc/source/development/index.rst create mode 100644 doc/source/development/patches.rst create mode 100644 doc/source/development/release_process.rst~b7c4271b16801acff77c020ebf2daf82b1592184 create mode 100644 doc/source/development/testing.rst create mode 100644 doc/source/faq/index.rst create mode 100644 doc/source/getting_started/configuring.rst create mode 100644 doc/source/getting_started/drivers.rst create mode 100644 doc/source/getting_started/index.rst create mode 100644 doc/source/getting_started/installing.rst create mode 100644 doc/source/getting_started/production.rst create mode 100644 doc/source/getting_started/querying.rst create mode 100644 doc/source/index.rst create mode 100644 doc/source/new/Figure_1.jpg create mode 100644 doc/source/new/Figure_2.jpg create mode 100644 doc/source/new/auditlogging.rst create mode 100644 doc/source/new/fqllogging.rst create mode 100644 doc/source/new/index.rst create mode 100644 doc/source/new/java11.rst create mode 100644 doc/source/new/messaging.rst create mode 100644 doc/source/new/streaming.rst create mode 100644 doc/source/new/transientreplication.rst create mode 100644 doc/source/new/virtualtables.rst create mode 100644 doc/source/operating/Figure_1_backups.jpg create mode 100644 doc/source/operating/Figure_1_read_repair.jpg create mode 100644 doc/source/operating/Figure_2_read_repair.jpg create mode 100644 doc/source/operating/Figure_3_read_repair.jpg create mode 100644 doc/source/operating/Figure_4_read_repair.jpg create mode 100644 doc/source/operating/Figure_5_read_repair.jpg create mode 100644 doc/source/operating/Figure_6_read_repair.jpg create mode 100644 doc/source/operating/audit_logging.rst create mode 100644 doc/source/operating/backups.rst create mode 100644 doc/source/operating/bloom_filters.rst create mode 100644 doc/source/operating/bulk_loading.rst create mode 100644 doc/source/operating/cdc.rst create mode 100644 doc/source/operating/compaction/index.rst create mode 100644 doc/source/operating/compaction/lcs.rst create mode 100644 doc/source/operating/compaction/stcs.rst create mode 100644 doc/source/operating/compaction/twcs.rst create mode 100644 doc/source/operating/compression.rst create mode 100644 doc/source/operating/error_codes.txt create mode 100644 doc/source/operating/hardware.rst create mode 100644 doc/source/operating/hints.rst create mode 100644 doc/source/operating/images/hints.svg create mode 100644 doc/source/operating/index.rst create mode 100644 doc/source/operating/metrics.rst create mode 100644 doc/source/operating/read_repair.rst create mode 100644 doc/source/operating/repair.rst create mode 100644 doc/source/operating/security.rst create mode 100644 doc/source/operating/snitch.rst create mode 100644 doc/source/operating/topo_changes.rst create mode 100644 doc/source/plugins/index.rst create mode 100644 doc/source/tools/cassandra_stress.rst create mode 100644 doc/source/tools/cqlsh.rst create mode 100644 doc/source/tools/example-stress-graph.png create mode 100644 doc/source/tools/index.rst create mode 100644 doc/source/tools/sstable/index.rst create mode 100644 doc/source/tools/sstable/sstabledump.rst~b7c4271b16801acff77c020ebf2daf82b1592184 create mode 100644 doc/source/tools/sstable/sstableexpiredblockers.rst create mode 100644 doc/source/tools/sstable/sstablelevelreset.rst create mode 100644 doc/source/tools/sstable/sstableloader.rst create mode 100644 doc/source/tools/sstable/sstablemetadata.rst create mode 100644 doc/source/tools/sstable/sstableofflinerelevel.rst create mode 100644 doc/source/tools/sstable/sstablerepairedset.rst create mode 100644 doc/source/tools/sstable/sstablescrub.rst create mode 100644 doc/source/tools/sstable/sstablesplit.rst create mode 100644 doc/source/tools/sstable/sstableupgrade.rst create mode 100644 doc/source/tools/sstable/sstableutil.rst create mode 100644 doc/source/tools/sstable/sstableverify.rst create mode 100644 doc/source/tools/stress-example.yaml create mode 100644 doc/source/tools/stress-lwt-example.yaml create mode 100644 doc/source/troubleshooting/finding_nodes.rst create mode 100644 doc/source/troubleshooting/index.rst create mode 100644 doc/source/troubleshooting/reading_logs.rst create mode 100644 doc/source/troubleshooting/use_nodetool.rst create mode 100644 doc/source/troubleshooting/use_tools.rst create mode 100644 src/java/org/apache/cassandra/db/AbstractClusteringPrefix.java create mode 100644 src/java/org/apache/cassandra/db/BlacklistedDirectories.java create mode 100644 src/java/org/apache/cassandra/db/BlacklistedDirectoriesMBean.java create mode 100644 src/java/org/apache/cassandra/db/CompactTables.java create mode 100644 src/java/org/apache/cassandra/db/HintedHandOffManager.java create mode 100644 src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java create mode 100644 src/java/org/apache/cassandra/db/TableCQLHelper.java create mode 100644 src/java/org/apache/cassandra/db/commitlog/SimpleCachedBufferPool.java create mode 100644 src/java/org/apache/cassandra/metrics/ClientRequestSizeMetrics.java create mode 100644 src/java/org/apache/cassandra/net/BackPressureState.java create mode 100644 src/java/org/apache/cassandra/net/BackPressureStrategy.java create mode 100644 src/java/org/apache/cassandra/net/RateBasedBackPressure.java create mode 100644 src/java/org/apache/cassandra/net/RateBasedBackPressureState.java create mode 100644 src/java/org/apache/cassandra/repair/messages/AsymmetricSyncRequest.java create mode 100644 src/java/org/apache/cassandra/schema/MigrationTask.java create mode 100644 src/java/org/apache/cassandra/transport/Frame.java create mode 100644 src/java/org/apache/cassandra/transport/frame/FrameBodyTransformer.java create mode 100644 src/java/org/apache/cassandra/transport/frame/checksum/ChecksummingTransformer.java create mode 100644 src/java/org/apache/cassandra/transport/frame/compress/CompressingTransformer.java create mode 100644 src/java/org/apache/cassandra/transport/frame/compress/Compressor.java create mode 100644 src/java/org/apache/cassandra/transport/frame/compress/LZ4Compressor.java create mode 100644 src/java/org/apache/cassandra/transport/frame/compress/SnappyCompressor.java diff --git a/.rat-excludes b/.rat-excludes new file mode 100644 index 000000000000..6df36a5e6a5b --- /dev/null +++ b/.rat-excludes @@ -0,0 +1,33 @@ +**/*.avpr +debian/** +.classpath +.rat-excludes +**/.project +**/.pydevproject +CHANGES.txt +README.asc +.git/** +**/*.json +**/*.patch +interface/*/gen-*/** +src/gen-java/** +build/** +lib/licenses/*.txt +.settings/** +**/cassandra.yaml +**/cassandra-topology.yaml +**/metrics-reporter-config-sample.yaml +**/*.db +.externalToolBuilders/** +test/data/serialization/*/* +**/*.wpr +doc/** +build.properties.default +test/data/** +examples/triggers/build.xml +examples/triggers/conf/* +examples/hadoop_word_count/conf/log4j.properties +pylib/cqlshlib/test/** +src/resources/org/apache/cassandra/config/version.properties +conf/hotspot_compiler +**/*-example.yaml diff --git a/bin/cassandra.bat b/bin/cassandra.bat new file mode 100644 index 000000000000..fd9cc03c03e7 --- /dev/null +++ b/bin/cassandra.bat @@ -0,0 +1,184 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +set ARG=%1 +set INSTALL="INSTALL" +set UNINSTALL="UNINSTALL" + +pushd %~dp0.. +if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%CD% +popd + +if /i "%ARG%" == "LEGACY" goto runLegacy +REM ----------------------------------------------------------------------------- +REM See if we have access to run unsigned powershell scripts +for /F "delims=" %%i in ('powershell Get-ExecutionPolicy') do set PERMISSION=%%i +if "%PERMISSION%" == "Unrestricted" goto runPowerShell +goto runLegacy + +REM ----------------------------------------------------------------------------- +:runPowerShell +echo Detected powershell execution permissions. Running with enhanced startup scripts. +set errorlevel= +powershell /file "%CASSANDRA_HOME%\bin\cassandra.ps1" %* +exit /b %errorlevel% + +REM ----------------------------------------------------------------------------- +:runLegacy +echo WARNING! Powershell script execution unavailable. +echo Please use 'powershell Set-ExecutionPolicy Unrestricted' +echo on this user-account to run cassandra with fully featured +echo functionality on this platform. + +echo Starting with legacy startup options + +if NOT DEFINED CASSANDRA_MAIN set CASSANDRA_MAIN=org.apache.cassandra.service.CassandraDaemon +if NOT DEFINED JAVA_HOME goto :err + +REM ----------------------------------------------------------------------------- +REM JVM Opts we'll use in legacy run or installation +set JAVA_OPTS=-ea^ + -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.2"^ + -Xms2G^ + -Xmx2G^ + -XX:+HeapDumpOnOutOfMemoryError^ + -XX:+UseParNewGC^ + -XX:+UseConcMarkSweepGC^ + -XX:+CMSParallelRemarkEnabled^ + -XX:SurvivorRatio=8^ + -XX:MaxTenuringThreshold=1^ + -XX:CMSInitiatingOccupancyFraction=75^ + -XX:+UseCMSInitiatingOccupancyOnly^ + -Dlogback.configurationFile=logback.xml^ + -Djava.library.path="%CASSANDRA_HOME%\lib\sigar-bin"^ + -Dcassandra.jmx.local.port=7199 +REM **** JMX REMOTE ACCESS SETTINGS SEE: https://wiki.apache.org/cassandra/JmxSecurity *** +REM -Dcom.sun.management.jmxremote.port=7199^ +REM -Dcom.sun.management.jmxremote.ssl=false^ +REM -Dcom.sun.management.jmxremote.authenticate=true^ +REM -Dcom.sun.management.jmxremote.password.file=C:\jmxremote.password + +REM ***** CLASSPATH library setting ***** +REM Ensure that any user defined CLASSPATH variables are not used on startup +set CLASSPATH="%CASSANDRA_HOME%\conf" + +REM For each jar in the CASSANDRA_HOME lib directory call append to build the CLASSPATH variable. +for %%i in ("%CASSANDRA_HOME%\lib\*.jar") do call :append "%%i" +goto okClasspath + +:append +set CLASSPATH=%CLASSPATH%;%1 +goto :eof + +REM ----------------------------------------------------------------------------- +:okClasspath + +REM JSR223 - collect all JSR223 engines' jars +for /D %%P in ("%CASSANDRA_HOME%\lib\jsr223\*.*") do ( + for %%i in ("%%P\*.jar") do call :append "%%i" +) + +REM JSR223/JRuby - set ruby lib directory +if EXIST "%CASSANDRA_HOME%\lib\jsr223\jruby\ruby" ( + set JAVA_OPTS=%JAVA_OPTS% "-Djruby.lib=%CASSANDRA_HOME%\lib\jsr223\jruby" +) +REM JSR223/JRuby - set ruby JNI libraries root directory +if EXIST "%CASSANDRA_HOME%\lib\jsr223\jruby\jni" ( + set JAVA_OPTS=%JAVA_OPTS% "-Djffi.boot.library.path=%CASSANDRA_HOME%\lib\jsr223\jruby\jni" +) +REM JSR223/Jython - set python.home system property +if EXIST "%CASSANDRA_HOME%\lib\jsr223\jython\jython.jar" ( + set JAVA_OPTS=%JAVA_OPTS% "-Dpython.home=%CASSANDRA_HOME%\lib\jsr223\jython" +) +REM JSR223/Scala - necessary system property +if EXIST "%CASSANDRA_HOME%\lib\jsr223\scala\scala-compiler.jar" ( + set JAVA_OPTS=%JAVA_OPTS% "-Dscala.usejavacp=true" +) + +REM Include the build\classes\main directory so it works in development +set CASSANDRA_CLASSPATH=%CLASSPATH%;"%CASSANDRA_HOME%\build\classes\main" +set CASSANDRA_PARAMS=-Dcassandra -Dcassandra-foreground=yes +set CASSANDRA_PARAMS=%CASSANDRA_PARAMS% -Dcassandra.logdir="%CASSANDRA_HOME%\logs" +set CASSANDRA_PARAMS=%CASSANDRA_PARAMS% -Dcassandra.storagedir="%CASSANDRA_HOME%\data" + +if /i "%ARG%" == "INSTALL" goto doInstallOperation +if /i "%ARG%" == "UNINSTALL" goto doInstallOperation + +echo Starting Cassandra Server +"%JAVA_HOME%\bin\java" %JAVA_OPTS% %CASSANDRA_PARAMS% -cp %CASSANDRA_CLASSPATH% "%CASSANDRA_MAIN%" +goto finally + +REM ----------------------------------------------------------------------------- +:doInstallOperation +set SERVICE_JVM="cassandra" +rem location of Prunsrv +set PATH_PRUNSRV=%CASSANDRA_HOME%\bin\daemon\ +set PR_LOGPATH=%PATH_PRUNSRV% + +rem Allow prunsrv to be overridden +if "%PRUNSRV%" == "" set PRUNSRV=%PATH_PRUNSRV%prunsrv + +echo trying to delete service if it has been created already +"%PRUNSRV%" //DS//%SERVICE_JVM% +rem quit if we're just going to uninstall +if /i "%ARG%" == "UNINSTALL" goto finally + +echo Installing %SERVICE_JVM%. If you get registry warnings, re-run as an Administrator +"%PRUNSRV%" //IS//%SERVICE_JVM% + +echo Setting startup parameters for %SERVICE_JVM% +set cmd="%PRUNSRV%" //US//%SERVICE_JVM% ^ + --Jvm=auto --StdOutput auto --StdError auto ^ + --Classpath=%CASSANDRA_CLASSPATH% ^ + --StartMode=jvm --StartClass=%CASSANDRA_MAIN% --StartMethod=main ^ + --StopMode=jvm --StopClass=%CASSANDRA_MAIN% --StopMethod=stop + +REM convert ' -' into ';-' so we can tokenize on semicolon as we may have spaces in folder names +set tempOptions=%JAVA_OPTS: -=;-% +REM Append the JAVA_OPTS, each with independent ++JvmOptions as delimited list fails for some options +:optStrip +for /F "tokens=1* delims=;" %%a in ("%tempOptions%") do ( + set JVMOPTIONS=%JVMOPTIONS% ++JvmOptions=%%a + set tempOptions=%%b +) +if defined tempOptions goto :optStrip + +REM do the same for CASSANDRA_PARAMS +set tempOptions=%CASSANDRA_PARAMS: -=;-% + +:paramStrip +for /F "tokens=1* delims=;" %%a in ("%tempOptions%") do ( + set JVMOPTIONS=%JVMOPTIONS% ++JvmOptions=%%a + set tempOptions=%%b +) +if defined tempOptions goto :paramStrip + +%cmd% %JVMOPTIONS% + +echo Installation of %SERVICE_JVM% is complete +goto finally + +:err +echo JAVA_HOME environment variable must be set! +pause + +REM ----------------------------------------------------------------------------- +:finally + +ENDLOCAL diff --git a/bin/cassandra.in.bat b/bin/cassandra.in.bat new file mode 100644 index 000000000000..97ae83699b49 --- /dev/null +++ b/bin/cassandra.in.bat @@ -0,0 +1,74 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +pushd %~dp0.. +if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%CD% +popd + +if NOT DEFINED CASSANDRA_CONF set CASSANDRA_CONF="%CASSANDRA_HOME%\conf" + +REM the default location for commitlogs, sstables, and saved caches +REM if not set in cassandra.yaml +set cassandra_storagedir="%CASSANDRA_HOME%\data" + +REM JAVA_HOME can optionally be set here +REM set JAVA_HOME="" + +REM ***** CLASSPATH library setting ***** + +REM Ensure that any user defined CLASSPATH variables are not used on startup +set CLASSPATH=%CASSANDRA_CONF% + +REM For each jar in the CASSANDRA_HOME lib directory call append to build the CLASSPATH variable. +for %%i in ("%CASSANDRA_HOME%\lib\*.jar") do call :append "%%i" +goto :okClasspath + +:append +set CLASSPATH=%CLASSPATH%;%1 +goto :eof + +:okClasspath + +REM Include the build\classes\main directory so it works in development +set CASSANDRA_CLASSPATH=%CLASSPATH%;"%CASSANDRA_HOME%\build\classes\main";%CASSANDRA_CONF% + +REM Add the default storage location. Can be overridden in conf\cassandra.yaml +set CASSANDRA_PARAMS=%CASSANDRA_PARAMS% "-Dcassandra.storagedir=%CASSANDRA_HOME%\data" + +REM JSR223 - collect all JSR223 engines' jars +for /r %%P in ("%CASSANDRA_HOME%\lib\jsr223\*.jar") do ( + set CLASSPATH=%CLASSPATH%;%%~fP +) +REM JSR223/JRuby - set ruby lib directory +if EXIST "%CASSANDRA_HOME%\lib\jsr223\jruby\ruby" ( + set JAVA_OPTS=%JAVA_OPTS% "-Djruby.lib=%CASSANDRA_HOME%\lib\jsr223\jruby" +) +REM JSR223/JRuby - set ruby JNI libraries root directory +if EXIST "%CASSANDRA_HOME%\lib\jsr223\jruby\jni" ( + set JAVA_OPTS=%JAVA_OPTS% "-Djffi.boot.library.path=%CASSANDRA_HOME%\lib\jsr223\jruby\jni" +) +REM JSR223/Jython - set python.home system property +if EXIST "%$CASSANDRA_HOME%\lib\jsr223\jython\jython.jar" ( + set JAVA_OPTS=%JAVA_OPTS% "-Dpython.home=%CASSANDRA_HOME%\lib\jsr223\jython" +) +REM JSR223/Scala - necessary system property +if EXIST "$CASSANDRA_HOME\lib\jsr223\scala\scala-compiler.jar" ( + set JAVA_OPTS=%JAVA_OPTS% "-Dscala.usejavacp=true" +) + +REM Add the sigar-bin path to the java.library.path CASSANDRA-7838 +set JAVA_OPTS=%JAVA_OPTS% -Djava.library.path=%CASSANDRA_HOME%\lib\sigar-bin" diff --git a/bin/cassandra.ps1 b/bin/cassandra.ps1 new file mode 100644 index 000000000000..c96ec2faceb9 --- /dev/null +++ b/bin/cassandra.ps1 @@ -0,0 +1,390 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#----------------------------------------------------------------------------- +Function PrintUsage +{ + echo @" +usage: cassandra.ps1 [-f] [-h] [-q] [-a] [-p pidfile] [-H dumpfile] [-D arg] [-E errorfile] [-install | -uninstall] [-help] + -f Run cassandra in foreground + -install install cassandra as a service + -uninstall remove cassandra service + -p pidfile tracked by server and removed on close (defaults to pid.txt) + -H change JVM HeapDumpPath + -D items to append to JVM_OPTS + -E change JVM ErrorFile + -v Print cassandra version and exit + -s Show detailed jvm environment information during launch + -a Aggressive startup. Skip VerifyPorts check. For use in dev environments. + -q Quiet output. Does not print stdout/stderr to console (when run without -f) + -help print this message + + NOTE: installing cassandra as a service requires Commons Daemon Service Runner + available at http://commons.apache.org/proper/commons-daemon/" +"@ + exit +} + +#----------------------------------------------------------------------------- +Function Main +{ + ValidateArguments + + # support direct run of .ps1 file w/out batch file + if ($env:CASSANDRA_HOME -eq $null) + { + $scriptDir = Split-Path $script:MyInvocation.MyCommand.Path + $env:CASSANDRA_HOME = (Get-Item $scriptDir).parent.FullName + } + . "$env:CASSANDRA_HOME\bin\source-conf.ps1" + + $conf = Find-Conf + if ($s) + { + echo "Sourcing cassandra config file: $conf" + } + . $conf + + SetCassandraEnvironment + if ($v) + { + PrintVersion + exit + } + $pidfile = "$env:CASSANDRA_HOME\$pidfile" + + # Other command line params + if ($H) + { + $env:JVM_OPTS = $env:JVM_OPTS + " -XX:HeapDumpPath=$H" + } + if ($E) + { + $env:JVM_OPTS = $env:JVM_OPTS + " -XX:ErrorFile=$E" + } + if ($p) + { + $pidfile = "$p" + $env:CASSANDRA_PARAMS = $env:CASSANDRA_PARAMS + ' -Dcassandra-pidfile="' + "$pidfile" + '"' + } + + # Parse -D and -X JVM_OPTS + for ($i = 0; $i -lt $script:args.Length; ++$i) + { + if ($script:args[$i].StartsWith("-D") -Or $script:args[$i].StartsWith("-X")) + { + $env:JVM_OPTS = "$env:JVM_OPTS " + $script:args[$i] + } + } + + if ($install -or $uninstall) + { + HandleInstallation + } + else + { + VerifyPortsAreAvailable + RunCassandra($f) + } +} + +#----------------------------------------------------------------------------- +Function HandleInstallation +{ + $SERVICE_JVM = """cassandra""" + $PATH_PRUNSRV = "$env:CASSANDRA_HOME\bin\daemon" + $PR_LOGPATH = $serverPath + + if (-Not (Test-Path $PATH_PRUNSRV\prunsrv.exe)) + { + Write-Warning "Cannot find $PATH_PRUNSRV\prunsrv.exe. Please download package from https://downloads.apache.org/commons/daemon/binaries/windows/ to install as a service." + Break + } + + If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) + { + Write-Warning "Cannot perform installation without admin credentials. Please re-run as administrator." + Break + } + if (!$env:PRUNSRV) + { + $env:PRUNSRV="$PATH_PRUNSRV\prunsrv" + } + + $regPath = "HKLM:\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\" + + echo "Attempting to delete existing $SERVICE_JVM service..." + Start-Sleep -s 2 + $proc = Start-Process -FilePath "$env:PRUNSRV" -ArgumentList "//DS//$SERVICE_JVM" -PassThru -WindowStyle Hidden + + echo "Reverting to default TCP keepalive settings (2 hour timeout)" + Remove-ItemProperty -Path $regPath -Name KeepAliveTime -EA SilentlyContinue + + # Quit out if this is uninstall only + if ($uninstall) + { + return + } + + echo "Installing [$SERVICE_JVM]." + Start-Sleep -s 2 + $proc = Start-Process -FilePath "$env:PRUNSRV" -ArgumentList "//IS//$SERVICE_JVM" -PassThru -WindowStyle Hidden + + echo "Setting launch parameters for [$SERVICE_JVM]" + Start-Sleep -s 2 + + $args = @" +//US//$SERVICE_JVM + --Jvm=auto --StdOutput auto --StdError auto + --Classpath=$env:CLASSPATH + --StartMode=jvm --StartClass=$env:CASSANDRA_MAIN --StartMethod=main + --StopMode=jvm --StopClass=$env:CASSANDRA_MAIN --StopMethod=stop + --PidFile "$pidfile" +"@ + + # Include cassandra params + $prunArgs = "$env:CASSANDRA_PARAMS $env:JVM_OPTS" + + # Change to semicolon delim as we can't split on space due to potential spaces in directory names + $prunArgs = $prunArgs -replace " -", ";-" + + # JvmOptions w/multiple semicolon delimited items isn't working correctly. storagedir and logdir were + # both being ignored / failing to parse on startup. See CASSANDRA-8115 + $split_opts = $prunArgs.Split(";") + foreach ($arg in $split_opts) + { + $args += " ++JvmOptions=$arg" + } + + $args = $args -replace [Environment]::NewLine, "" + $proc = Start-Process -FilePath "$env:PRUNSRV" -ArgumentList $args -PassThru -WindowStyle Hidden + + echo "Setting KeepAliveTimer to 5 minutes for TCP keepalive" + Set-ItemProperty -Path $regPath -Name KeepAliveTime -Value 300000 + + echo "Installation of [$SERVICE_JVM] is complete" +} + +#----------------------------------------------------------------------------- +Function PrintVersion() +{ + Write-Host "Cassandra Version: " -NoNewLine + $pinfo = New-Object System.Diagnostics.ProcessStartInfo + $pinfo.FileName = "$env:JAVA_BIN" + $pinfo.UseShellExecute = $false + $pinfo.Arguments = "-Dlogback.configurationFile=logback-tools.xml -cp $env:CLASSPATH org.apache.cassandra.tools.GetVersion" + $p = New-Object System.Diagnostics.Process + $p.StartInfo = $pinfo + $p.Start() | Out-Null + $p.WaitForExit() +} + +#----------------------------------------------------------------------------- +Function RunCassandra([string]$foreground) +{ + $cmd = @" +$env:JAVA_BIN +"@ + $arg1 = $env:CASSANDRA_PARAMS + $arg2 = $env:JVM_OPTS + $arg3 = "-cp $env:CLASSPATH" + $arg4 = @" +"$env:CASSANDRA_MAIN" +"@ + + $proc = $null + + if ($s) + { + echo "Running cassandra with: [$cmd $arg1 $arg2 $arg3 $arg4]" + } + + if ($foreground) + { + $cygwin = $false + try + { + $uname = uname -o + if ($uname.CompareTo("Cygwin") -eq 0) + { + $cygwin = $true + } + } + catch + { + # Failed at uname call, not in cygwin + } + + if ($cygwin) + { + # if running on cygwin, we cannot capture ctrl+c signals as mintty traps them and then + # SIGKILLs processes, so we'll need to record our $pidfile file for future + # stop-server usage + if (!$p) + { + echo "Detected cygwin runtime environment. Adding -Dcassandra-pidfile=$pidfile to JVM params as control+c trapping on mintty is inconsistent" + $arg2 = $arg2 + " -Dcassandra-pidfile=$pidfile" + } + } + + $arg2 = $arg2 + " -Dcassandra-foreground=yes" + + $pinfo = New-Object System.Diagnostics.ProcessStartInfo + $pinfo.FileName = "$env:JAVA_BIN" + $pinfo.RedirectStandardInput = $true + $pinfo.UseShellExecute = $false + $pinfo.Arguments = $arg1,$arg2,$arg3,$arg4 + $p = New-Object System.Diagnostics.Process + $p.StartInfo = $pinfo + $p.Start() | Out-Null + echo $p.Id > $pidfile + $p.WaitForExit() + } + else + { + if ($q) + { + $proc = Start-Process -FilePath "$cmd" -ArgumentList $arg1,$arg2,$arg3,$arg4 -PassThru -WindowStyle Hidden + } + else + { + $proc = Start-Process -FilePath "$cmd" -ArgumentList $arg1,$arg2,$arg3,$arg4 -PassThru -NoNewWindow + } + + $exitCode = $? + + try + { + echo $proc.Id > $pidfile + } + catch + { + echo @" +WARNING! Failed to write pidfile to $pidfile. stop-server.bat and + startup protection will not be available. +"@ + echo $_.Exception.Message + exit 1 + } + + if (-Not $exitCode) + { + exit 1 + } + } +} + +#----------------------------------------------------------------------------- +Function VerifyPortsAreAvailable +{ + if ($a) + { + return + } + # Need to confirm 5 different ports are available or die if any are currently bound + # From cassandra.yaml: + # storage_port + # ssl_storage_port + # native_transport_port + # and from env: JMX_PORT which we cache in our environment during SetCassandraEnvironment for this check + $yamlRegex = "storage_port:|ssl_storage_port:|native_transport_port:" + $yaml = Get-Content "$env:CASSANDRA_CONF\cassandra.yaml" + $portRegex = ":$env:JMX_PORT |" + + foreach ($line in $yaml) + { + if ($line -match $yamlRegex) + { + $sa = $line.Split(":") + $portRegex = $portRegex + ":" + ($sa[1] -replace " ","") + " |" + } + } + $portRegex = $portRegex.Substring(0, $portRegex.Length - 2) + + $netstat = netstat -an + + foreach ($line in $netstat) + { + if ($line -match "TCP" -and $line -match $portRegex) + { + Write-Error "Found a port already in use. Aborting startup" + Write-Error $line + Exit + } + } +} + +#----------------------------------------------------------------------------- +Function ValidateArguments +{ + if ($install -and $uninstall) + { + echo "Cannot install and uninstall" + exit + } + if ($help) + { + PrintUsage + } +} + +#----------------------------------------------------------------------------- +Function CheckEmptyParam($param) +{ + if ([String]::IsNullOrEmpty($param)) + { + echo "Invalid parameter: empty value" + PrintUsage + } +} + +#----------------------------------------------------------------------------- +# Populate arguments +for ($i = 0; $i -lt $args.count; $i++) +{ + # Skip JVM args + if ($args[$i].StartsWith("-D") -Or $args[$i].StartsWith("-X")) + { + continue; + } + Switch($args[$i]) + { + "-install" { $install = $True } + "-uninstall" { $uninstall = $True } + "-help" { PrintUsage } + "-?" { PrintUsage } + "--help" { PrintUsage } + "-v" { $v = $True } + "-f" { $f = $True } + "-s" { $s = $True } + "-p" { $p = $args[++$i]; CheckEmptyParam($p) } + "-H" { $H = $args[++$i]; CheckEmptyParam($H) } + "-E" { $E = $args[++$i]; CheckEmptyParam($E) } + "-a" { $a = $True } + "-q" { $q = $True } + default + { + "Invalid argument: " + $args[$i]; + if (-Not $args[$i].startsWith("-")) + { + echo "Note: All options require -" + } + exit + } + } +} +$pidfile = "pid.txt" + +Main diff --git a/bin/cqlsh.bat b/bin/cqlsh.bat new file mode 100644 index 000000000000..a9bc4d17a066 --- /dev/null +++ b/bin/cqlsh.bat @@ -0,0 +1,34 @@ +@ECHO OFF +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off + +if "%OS%" == "Windows_NT" setlocal + +python -V >nul 2>&1 +if ERRORLEVEL 1 goto err + +python "%~dp0\cqlsh.py" %* +goto finally + +:err +echo Can't detect Python version! + +:finally + +ENDLOCAL + diff --git a/bin/debug-cql.bat b/bin/debug-cql.bat new file mode 100644 index 000000000000..b937a039ada5 --- /dev/null +++ b/bin/debug-cql.bat @@ -0,0 +1,39 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +pushd "%~dp0" +call cassandra.in.bat +if NOT DEFINED CASSANDRA_MAIN set CASSANDRA_MAIN=org.apache.cassandra.transport.Client +if NOT DEFINED JAVA_HOME goto :err + +REM ***** JAVA options ***** +set JAVA_OPTS=^ + -Dlogback.configurationFile=logback-tools.xml + +set TOOLS_PARAMS= +"%JAVA_HOME%\bin\java" %JAVA_OPTS% %CASSANDRA_PARAMS% -cp %CASSANDRA_CLASSPATH% "%CASSANDRA_MAIN%" %* +goto finally + +:err +echo JAVA_HOME environment variable must be set! +pause + +:finally + +ENDLOCAL diff --git a/bin/nodetool.bat b/bin/nodetool.bat new file mode 100644 index 000000000000..410a4af99fae --- /dev/null +++ b/bin/nodetool.bat @@ -0,0 +1,38 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +pushd "%~dp0" +call cassandra.in.bat + +if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%~dp0.. +if NOT DEFINED JAVA_HOME goto :err + +set CASSANDRA_PARAMS=%CASSANDRA_PARAMS% -Dcassandra.logdir="%CASSANDRA_HOME%\logs" +set CASSANDRA_PARAMS=%CASSANDRA_PARAMS% -Dcassandra.storagedir="%CASSANDRA_HOME%\data" + +"%JAVA_HOME%\bin\java" -cp %CASSANDRA_CLASSPATH% %CASSANDRA_PARAMS% -Dlogback.configurationFile=logback-tools.xml org.apache.cassandra.tools.NodeTool %* +goto finally + +:err +echo The JAVA_HOME environment variable must be set to run this program! +pause + +:finally +ENDLOCAL & set RC=%ERRORLEVEL% +exit /B %RC% diff --git a/bin/source-conf.ps1 b/bin/source-conf.ps1 new file mode 100644 index 000000000000..21d1383fbe35 --- /dev/null +++ b/bin/source-conf.ps1 @@ -0,0 +1,57 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +Function Find-Conf +{ + $file = ""; + # Order of preference on grabbing environment settings: + # 1: %CASSANDRA_INCLUDE% + # 2a: %USERPROFILE%/cassandra-env.ps1 (cmd-prompt) + # 2b: $HOME/cassandra-env.ps1 (cygwin) + # 3: %CASSANDRA_HOME%/conf/cassandra-env.ps1 + # 4: Relative to current working directory (../conf) + if (Test-Path Env:\CASSANDRA_INCLUDE) + { + $file = "$env:CASSANDRA_INCLUDE" + } + elseif (Test-Path "$env:USERPROFILE/cassandra-env.ps1") + { + $file = "$env:USERPROFILE/cassandra-env.ps1" + } + elseif (Test-Path "$env:HOME/cassandra-env.ps1") + { + $file = "$env:HOME/cassandra-env.ps1" + } + elseif (Test-Path Env:\CASSANDRA_HOME) + { + $file = "$env:CASSANDRA_HOME/conf/cassandra-env.ps1" + } + else + { + $file = [System.IO.Directory]::GetCurrentDirectory() + "/../conf/cassandra-env.ps1" + } + $file = $file -replace "\\", "/" + + if (Test-Path $file) + { + return $file + } + else + { + echo "Error with environment file resolution. Path: [$file] not found." + exit + } +} diff --git a/bin/sstableloader.bat b/bin/sstableloader.bat new file mode 100644 index 000000000000..6a9e03b3995d --- /dev/null +++ b/bin/sstableloader.bat @@ -0,0 +1,41 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +pushd "%~dp0" +call cassandra.in.bat + +if NOT DEFINED CASSANDRA_MAIN set CASSANDRA_MAIN=org.apache.cassandra.tools.BulkLoader +if NOT DEFINED JAVA_HOME goto :err + +REM ***** JAVA options ***** +set JAVA_OPTS=^ + -Dlogback.configurationFile=logback-tools.xml + +set TOOLS_PARAMS= + +"%JAVA_HOME%\bin\java" %JAVA_OPTS% %CASSANDRA_PARAMS% -cp %CASSANDRA_CLASSPATH% "%CASSANDRA_MAIN%" %* +goto finally + +:err +echo JAVA_HOME environment variable must be set! +pause + +:finally + +ENDLOCAL diff --git a/bin/sstablescrub.bat b/bin/sstablescrub.bat new file mode 100644 index 000000000000..88e1920b5585 --- /dev/null +++ b/bin/sstablescrub.bat @@ -0,0 +1,41 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +pushd "%~dp0" +call cassandra.in.bat + +if NOT DEFINED CASSANDRA_MAIN set CASSANDRA_MAIN=org.apache.cassandra.tools.StandaloneScrubber +if NOT DEFINED JAVA_HOME goto :err + +REM ***** JAVA options ***** +set JAVA_OPTS=^ + -Dlogback.configurationFile=logback-tools.xml + +set TOOLS_PARAMS= + +"%JAVA_HOME%\bin\java" %JAVA_OPTS% %CASSANDRA_PARAMS% -cp %CASSANDRA_CLASSPATH% "%CASSANDRA_MAIN%" %* +goto finally + +:err +echo JAVA_HOME environment variable must be set! +pause + +:finally + +ENDLOCAL diff --git a/bin/sstableupgrade.bat b/bin/sstableupgrade.bat new file mode 100644 index 000000000000..4943b1530fa1 --- /dev/null +++ b/bin/sstableupgrade.bat @@ -0,0 +1,41 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +pushd "%~dp0" +call cassandra.in.bat + +if NOT DEFINED CASSANDRA_MAIN set CASSANDRA_MAIN=org.apache.cassandra.tools.StandaloneUpgrader +if NOT DEFINED JAVA_HOME goto :err + +REM ***** JAVA options ***** +set JAVA_OPTS=^ + -Dlogback.configurationFile=logback-tools.xml + +set TOOLS_PARAMS= + +"%JAVA_HOME%\bin\java" %JAVA_OPTS% %CASSANDRA_PARAMS% -cp %CASSANDRA_CLASSPATH% "%CASSANDRA_MAIN%" %* +goto finally + +:err +echo JAVA_HOME environment variable must be set! +pause + +:finally + +ENDLOCAL diff --git a/bin/sstableutil.bat b/bin/sstableutil.bat new file mode 100644 index 000000000000..73fc38b65788 --- /dev/null +++ b/bin/sstableutil.bat @@ -0,0 +1,41 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +pushd "%~dp0" +call cassandra.in.bat + +if NOT DEFINED CASSANDRA_MAIN set CASSANDRA_MAIN=org.apache.cassandra.tools.StandaloneSSTableUtil +if NOT DEFINED JAVA_HOME goto :err + +REM ***** JAVA options ***** +set JAVA_OPTS=^ + -Dlogback.configurationFile=logback-tools.xml + +set TOOLS_PARAMS= + +"%JAVA_HOME%\bin\java" %JAVA_OPTS% %CASSANDRA_PARAMS% -cp %CASSANDRA_CLASSPATH% "%CASSANDRA_MAIN%" %* +goto finally + +:err +echo JAVA_HOME environment variable must be set! +pause + +:finally + +ENDLOCAL diff --git a/bin/sstableverify.bat b/bin/sstableverify.bat new file mode 100644 index 000000000000..658715434b76 --- /dev/null +++ b/bin/sstableverify.bat @@ -0,0 +1,48 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +pushd "%~dp0" +call cassandra.in.bat + +if NOT DEFINED CASSANDRA_MAIN set CASSANDRA_MAIN=org.apache.cassandra.tools.StandaloneVerifier +if NOT DEFINED JAVA_HOME goto :err + +REM ***** JAVA options ***** +set JAVA_OPTS=^ + -Dlogback.configurationFile=logback-tools.xml + +set TOOLS_PARAMS= + +"%JAVA_HOME%\bin\java" %JAVA_OPTS% %CASSANDRA_PARAMS% -cp %CASSANDRA_CLASSPATH% "%CASSANDRA_MAIN%" %* +goto finally + +:err +echo JAVA_HOME environment variable must be set! +set ERRORLEVEL=1 +pause + +:finally +ENDLOCAL & set RC=%ERRORLEVEL% +goto :exit_with_code + +:returncode +exit /B %RC% + +:exit_with_code +call :returncode %RC% diff --git a/bin/stop-server.bat b/bin/stop-server.bat new file mode 100644 index 000000000000..62aa79cf5674 --- /dev/null +++ b/bin/stop-server.bat @@ -0,0 +1,55 @@ +@REM +@REM Licensed to the Apache Software Foundation (ASF) under one or more +@REM contributor license agreements. See the NOTICE file distributed with +@REM this work for additional information regarding copyright ownership. +@REM The ASF licenses this file to You under the Apache License, Version 2.0 +@REM (the "License"); you may not use this file except in compliance with +@REM the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. + +@echo off +if "%OS%" == "Windows_NT" setlocal + +pushd %~dp0.. +if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%CD% +popd + +REM ----------------------------------------------------------------------------- +REM See if we have the capabilities of running the powershell scripts +for /F "delims=" %%i in ('powershell Get-ExecutionPolicy') do set PERMISSION=%%i +if "%PERMISSION%" == "Unrestricted" goto runPowerShell +goto runLegacy + +REM ----------------------------------------------------------------------------- +:runPowerShell +REM Need to generate a random title for this command-prompt to determine its pid. +REM We detach and re-attach the console in stop-server.ps1 to send ctrl+c to the +REM running cassandra process and need to re-attach here to print results. +set /A rand=%random% %% (100000 - 1 + 1) + 1 +TITLE %rand% +FOR /F "tokens=2 delims= " %%A IN ('TASKLIST /FI ^"WINDOWTITLE eq %rand%^" /NH') DO set PID=%%A + +REM Start with /B -> the control+c event we generate in stop-server.ps1 percolates +REM up and hits this external batch file if we call powershell directly. +start /WAIT /B powershell /file "%CASSANDRA_HOME%/bin/stop-server.ps1" -batchpid %PID% %* +goto finally + +REM ----------------------------------------------------------------------------- +:runLegacy +echo WARNING! Powershell script execution unavailable. +echo Please use 'powershell Set-ExecutionPolicy Unrestricted' +echo on this user-account to run cassandra with fully featured +echo functionality on this platform. + +echo Cannot stop server without powershell access. +goto finally + +:finally +ENDLOCAL diff --git a/bin/stop-server.ps1 b/bin/stop-server.ps1 new file mode 100644 index 000000000000..2b7f7909244f --- /dev/null +++ b/bin/stop-server.ps1 @@ -0,0 +1,193 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +param ( + [string]$p, + [string]$batchpid, + [switch]$f, + [switch]$silent, + [switch]$help +) + +#----------------------------------------------------------------------------- +Function ValidateArguments +{ + if (!$p) + { + PrintUsage + } + if ($help) + { + PrintUsage + } +} + +#----------------------------------------------------------------------------- +Function PrintUsage +{ + echo @" + +usage: stop-server.ps1 -p pidfile -f[-help] + -p pidfile tracked by server and removed on close. + -s Silent. Don't print success/failure data. + -f force kill. +"@ + exit +} + +#----------------------------------------------------------------------------- +Function KillProcess +{ + if (-Not (Test-Path $p)) + { + if (-Not ($silent)) + { + echo "Error - pidfile not found. Aborting." + } + exit + } + + $t = @" + using System; + using System.Diagnostics; + using System.IO; + using System.Runtime.InteropServices; + using System.Threading; + + namespace PowerStopper + { + public static class Stopper + { + delegate bool ConsoleCtrlDelegate(CtrlTypes CtrlType); + + [DllImport("kernel32.dll", SetLastError = true)] + static extern bool AttachConsole(uint dwProcessId); + + [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)] + static extern bool FreeConsole(); + + enum CtrlTypes : uint + { + CTRL_C_EVENT = 0, + CTRL_BREAK_EVENT, + CTRL_CLOSE_EVENT, + CTRL_LOGOFF_EVENT = 5, + CTRL_SHUTDOWN_EVENT + } + + [DllImport("kernel32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool GenerateConsoleCtrlEvent(CtrlTypes dwCtrlEvent, uint dwProcessGroupId); + + [DllImport("kernel32.dll")] + static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add); + + // Our output gets swallowed on ms-dos as we can't re-attach our console to the output of the cmd + // running the batch file. + public static void StopProgram(int pidToKill, int consolePid, bool silent) + { + Process proc = null; + try + { + proc = Process.GetProcessById(pidToKill); + } + catch (ArgumentException) + { + if (!silent) + System.Console.WriteLine("Process " + pidToKill + " not found. Aborting."); + return; + } + + if (!FreeConsole()) + { + if (!silent) + System.Console.WriteLine("Failed to FreeConsole to attach to running cassandra process. Aborting."); + return; + } + + if (AttachConsole((uint)pidToKill)) + { + //Disable Ctrl-C handling for our program + SetConsoleCtrlHandler(null, true); + GenerateConsoleCtrlEvent(CtrlTypes.CTRL_C_EVENT, 0); + + // Must wait here. If we don't and re-enable Ctrl-C + // handling below too fast, we might terminate ourselves. + bool exited = proc.WaitForExit(30000); + if(!exited) + proc.Kill(); + + FreeConsole(); + + // Re-attach to current console to write output + if (consolePid >= 0) + AttachConsole((uint)consolePid); + + // Re-enable Ctrl-C handling or any subsequently started + // programs will inherit the disabled state. + SetConsoleCtrlHandler(null, false); + + if (!silent) + { + if(exited) + System.Console.WriteLine("Successfully sent ctrl+c to process with id: " + pidToKill + "."); + else + System.Console.WriteLine("Process with id: " + pidToKill + " did not exit after 30 seconds, killed."); + } + } + else + { + if (!silent) + { + string errorMsg = new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error()).Message; + System.Console.WriteLine("Error attaching to pid: " + pidToKill + ": " + Marshal.GetLastWin32Error() + " - " + errorMsg); + } + } + } + } + } +"@ + # cygwin assumes environment variables are case sensitive which causes problems when + # the type dictionary references 'tmp' or 'temp' and throws a System.ArgumentException + $oldTmp = $env:TMP + $oldTemp = $env:Temp + $env:TMP='' + $env:TEMP='' + Add-Type -TypeDefinition $t + $env:TMP = $oldTmp + $env:TEMP = $oldTemp + + $pidToKill = Get-Content $p + # If run in cygwin, we don't get the TITLE / pid combo in stop-server.bat but also don't need + # to worry about reattaching console output as it gets stderr/stdout even after the C#/C++ + # FreeConsole calls. + if ($batchpid -eq "No") + { + $batchpid = -1 + } + + if ($f) + { + taskkill /f /pid $pidToKill + } + else + { + [PowerStopper.Stopper]::StopProgram($pidToKill, $batchpid, $silent) + } +} + +#----------------------------------------------------------------------------- +ValidateArguments +KillProcess diff --git a/conf/cassandra-env.ps1 b/conf/cassandra-env.ps1 new file mode 100644 index 000000000000..8ba8a5a472b6 --- /dev/null +++ b/conf/cassandra-env.ps1 @@ -0,0 +1,469 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# NOTE: All param tuning can be done in the SetCassandraEnvironment Function below + +#----------------------------------------------------------------------------- +Function SetCassandraHome() +{ + if (! $env:CASSANDRA_HOME) + { + $cwd = [System.IO.Directory]::GetCurrentDirectory() + $cwd = Split-Path $cwd -parent + $env:CASSANDRA_HOME = $cwd -replace "\\", "/" + } +} + +#----------------------------------------------------------------------------- +Function SetCassandraMain() +{ + if (! $env:CASSANDRA_MAIN) + { + $env:CASSANDRA_MAIN="org.apache.cassandra.service.CassandraDaemon" + } +} + +#----------------------------------------------------------------------------- +Function BuildClassPath +{ + $cp = """$env:CASSANDRA_HOME\conf""" + foreach ($file in Get-ChildItem "$env:CASSANDRA_HOME\lib\*.jar") + { + $file = $file -replace "\\", "/" + $cp = $cp + ";" + """$file""" + } + + # Add build/classes/main so it works in development + $cp = $cp + ";" + """$env:CASSANDRA_HOME\build\classes\main""" + $env:CLASSPATH=$cp +} + +#----------------------------------------------------------------------------- +Function CalculateHeapSizes +{ + # Check if swapping is enabled on the host and warn if so - reference CASSANDRA-7316 + + $osInfo = Get-WmiObject -class "Win32_computersystem" + $autoPage = $osInfo.AutomaticManagedPageFile + + if ($autoPage) + { + echo "*---------------------------------------------------------------------*" + echo "*---------------------------------------------------------------------*" + echo "" + echo " WARNING! Automatic page file configuration detected." + echo " It is recommended that you disable swap when running Cassandra" + echo " for performance and stability reasons." + echo "" + echo "*---------------------------------------------------------------------*" + echo "*---------------------------------------------------------------------*" + } + else + { + $pageFileInfo = Get-WmiObject -class "Win32_PageFileSetting" -EnableAllPrivileges + $pageFileCount = $PageFileInfo.Count + if ($pageFileInfo) + { + $files = @() + $sizes = @() + $hasSizes = $FALSE + + # PageFileCount isn't populated and obj comes back as single if there's only 1 + if ([string]::IsNullOrEmpty($PageFileCount)) + { + $PageFileCount = 1 + $files += $PageFileInfo.Name + if ($PageFileInfo.MaximumSize -ne 0) + { + $hasSizes = $TRUE + $sizes += $PageFileInfo.MaximumSize + } + } + else + { + for ($i = 0; $i -le $PageFileCount; $i++) + { + $files += $PageFileInfo[$i].Name + if ($PageFileInfo[$i].MaximumSize -ne 0) + { + $hasSizes = $TRUE + $sizes += $PageFileInfo[$i].MaximumSize + } + } + } + + echo "*---------------------------------------------------------------------*" + echo "*---------------------------------------------------------------------*" + echo "" + echo " WARNING! $PageFileCount swap file(s) detected" + for ($i = 0; $i -lt $PageFileCount; $i++) + { + $toPrint = " Name: " + $files[$i] + if ($hasSizes) + { + $toPrint = $toPrint + " Size: " + $sizes[$i] + $toPrint = $toPrint -replace [Environment]::NewLine, "" + } + echo $toPrint + } + echo " It is recommended that you disable swap when running Cassandra" + echo " for performance and stability reasons." + echo "" + echo "*---------------------------------------------------------------------*" + echo "*---------------------------------------------------------------------*" + } + } + + # Validate that we need to run this function and that our config is good + if ($env:MAX_HEAP_SIZE -and $env:HEAP_NEWSIZE) + { + return + } + + if ((($env:MAX_HEAP_SIZE -and !$env:HEAP_NEWSIZE) -or (!$env:MAX_HEAP_SIZE -and $env:HEAP_NEWSIZE)) -and ($using_cms -eq $true)) + { + echo "Please set or unset MAX_HEAP_SIZE and HEAP_NEWSIZE in pairs. Aborting startup." + exit 1 + } + + $memObject = Get-WMIObject -class win32_physicalmemory + if ($memObject -eq $null) + { + echo "WARNING! Could not determine system memory. Defaulting to 2G heap, 512M newgen. Manually override in conf\jvm.options for different heap values." + $env:MAX_HEAP_SIZE = "2048M" + $env:HEAP_NEWSIZE = "512M" + return + } + + $memory = ($memObject | Measure-Object Capacity -Sum).sum + $memoryMB = [Math]::Truncate($memory / (1024*1024)) + + $cpu = gwmi Win32_ComputerSystem | Select-Object NumberOfLogicalProcessors + $systemCores = $cpu.NumberOfLogicalProcessors + + # set max heap size based on the following + # max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB)) + # calculate 1/2 ram and cap to 1024MB + # calculate 1/4 ram and cap to 8192MB + # pick the max + $halfMem = [Math]::Truncate($memoryMB / 2) + $quarterMem = [Math]::Truncate($halfMem / 2) + + if ($halfMem -gt 1024) + { + $halfMem = 1024 + } + if ($quarterMem -gt 8192) + { + $quarterMem = 8192 + } + + $maxHeapMB = "" + if ($halfMem -gt $quarterMem) + { + $maxHeapMB = $halfMem + } + else + { + $maxHeapMB = $quarterMem + } + $env:MAX_HEAP_SIZE = [System.Convert]::ToString($maxHeapMB) + "M" + + # Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4 + $maxYGPerCore = 100 + $maxYGTotal = $maxYGPerCore * $systemCores + $desiredYG = [Math]::Truncate($maxHeapMB / 4) + + if ($desiredYG -gt $maxYGTotal) + { + $env:HEAP_NEWSIZE = [System.Convert]::ToString($maxYGTotal) + "M" + } + else + { + $env:HEAP_NEWSIZE = [System.Convert]::ToString($desiredYG) + "M" + } +} + +#----------------------------------------------------------------------------- +Function ParseJVMInfo +{ + # grab info about the JVM + $pinfo = New-Object System.Diagnostics.ProcessStartInfo + $pinfo.FileName = "$env:JAVA_BIN" + $pinfo.RedirectStandardError = $true + $pinfo.RedirectStandardOutput = $true + $pinfo.UseShellExecute = $false + $pinfo.Arguments = "-d64 -version" + $p = New-Object System.Diagnostics.Process + $p.StartInfo = $pinfo + $p.Start() | Out-Null + $p.WaitForExit() + $stderr = $p.StandardError.ReadToEnd() + + $env:JVM_ARCH = "64-bit" + + if ($stderr.Contains("Error")) + { + # 32-bit JVM. re-run w/out -d64 + echo "Failed 64-bit check. Re-running to get version from 32-bit" + $pinfo.Arguments = "-version" + $p = New-Object System.Diagnostics.Process + $p.StartInfo = $pinfo + $p.Start() | Out-Null + $p.WaitForExit() + $stderr = $p.StandardError.ReadToEnd() + $env:JVM_ARCH = "32-bit" + } + + $sa = $stderr.Split("""") + $env:JVM_VERSION = $sa[1] + + if ($stderr.Contains("OpenJDK")) + { + $env:JVM_VENDOR = "OpenJDK" + } + elseif ($stderr.Contains("Java(TM)")) + { + $env:JVM_VENDOR = "Oracle" + } + else + { + $JVM_VENDOR = "other" + } + + $pa = $sa[1].Split("_") + $subVersion = $pa[1] + # Deal with -b (build) versions + if ($subVersion -contains '-') + { + $patchAndBuild = $subVersion.Split("-") + $subVersion = $patchAndBuild[0] + } + $env:JVM_PATCH_VERSION = $subVersion +} + +#----------------------------------------------------------------------------- +Function SetCassandraEnvironment +{ + if (Test-Path Env:\JAVA_HOME) + { + $env:JAVA_BIN = "$env:JAVA_HOME\bin\java.exe" + } + elseif (Get-Command "java.exe") + { + $env:JAVA_BIN = "java.exe" + } + else + { + echo "ERROR! No JAVA_HOME set and could not find java.exe in the path." + exit + } + SetCassandraHome + $env:CASSANDRA_CONF = "$env:CASSANDRA_HOME\conf" + $env:CASSANDRA_PARAMS="-Dcassandra -Dlogback.configurationFile=logback.xml" + + $logdir = "$env:CASSANDRA_HOME\logs" + $storagedir = "$env:CASSANDRA_HOME\data" + $env:CASSANDRA_PARAMS = $env:CASSANDRA_PARAMS + " -Dcassandra.logdir=""$logdir"" -Dcassandra.storagedir=""$storagedir""" + + SetCassandraMain + BuildClassPath + + # Override these to set the amount of memory to allocate to the JVM at + # start-up. For production use you may wish to adjust this for your + # environment. MAX_HEAP_SIZE is the total amount of memory dedicated + # to the Java heap. HEAP_NEWSIZE refers to the size of the young + # generation. Both MAX_HEAP_SIZE and HEAP_NEWSIZE should be either set + # or not (if you set one, set the other). + # + # The main trade-off for the young generation is that the larger it + # is, the longer GC pause times will be. The shorter it is, the more + # expensive GC will be (usually). + # + # The example HEAP_NEWSIZE assumes a modern 8-core+ machine for decent + # times. If in doubt, and if you do not particularly want to tweak, go + # 100 MB per physical CPU core. + + #GC log path has to be defined here since it needs to find CASSANDRA_HOME + $env:JVM_OPTS="$env:JVM_OPTS -Xloggc:""$env:CASSANDRA_HOME/logs/gc.log""" + + # Read user-defined JVM options from jvm.options file + $content = Get-Content "$env:CASSANDRA_CONF\jvm.options" + for ($i = 0; $i -lt $content.Count; $i++) + { + $line = $content[$i] + if ($line.StartsWith("-")) + { + $env:JVM_OPTS = "$env:JVM_OPTS $line" + } + } + + $defined_xmn = $env:JVM_OPTS -like '*Xmn*' + $defined_xmx = $env:JVM_OPTS -like '*Xmx*' + $defined_xms = $env:JVM_OPTS -like '*Xms*' + $using_cms = $env:JVM_OPTS -like '*UseConcMarkSweepGC*' + + #$env:MAX_HEAP_SIZE="4096M" + #$env:HEAP_NEWSIZE="800M" + CalculateHeapSizes + + ParseJVMInfo + + # We only set -Xms and -Xmx if they were not defined on jvm.options file + # If defined, both Xmx and Xms should be defined together. + if (($defined_xmx -eq $false) -and ($defined_xms -eq $false)) + { + $env:JVM_OPTS="$env:JVM_OPTS -Xms$env:MAX_HEAP_SIZE" + $env:JVM_OPTS="$env:JVM_OPTS -Xmx$env:MAX_HEAP_SIZE" + } + elseif (($defined_xmx -eq $false) -or ($defined_xms -eq $false)) + { + echo "Please set or unset -Xmx and -Xms flags in pairs on jvm.options file." + exit + } + + # We only set -Xmn flag if it was not defined in jvm.options file + # and if the CMS GC is being used + # If defined, both Xmn and Xmx should be defined together. + if (($defined_xmn -eq $true) -and ($defined_xmx -eq $false)) + { + echo "Please set or unset -Xmx and -Xmn flags in pairs on jvm.options file." + exit + } + elseif (($defined_xmn -eq $false) -and ($using_cms -eq $true)) + { + $env:JVM_OPTS="$env:JVM_OPTS -Xmn$env:HEAP_NEWSIZE" + } + + if (($env:JVM_ARCH -eq "64-Bit") -and ($using_cms -eq $true)) + { + $env:JVM_OPTS="$env:JVM_OPTS -XX:+UseCondCardMark" + } + + # Add sigar env - see Cassandra-7838 + $env:JVM_OPTS = "$env:JVM_OPTS -Djava.library.path=""$env:CASSANDRA_HOME\lib\sigar-bin""" + + # Confirm we're on high performance power plan, warn if not + # Change to $true to suppress this warning + $suppressPowerWarning = $false + if (!$suppressPowerWarning) + { + $currentProfile = powercfg /GETACTIVESCHEME + if (!$currentProfile.Contains("High performance")) + { + echo "*---------------------------------------------------------------------*" + echo "*---------------------------------------------------------------------*" + echo "" + echo " WARNING! Detected a power profile other than High Performance." + echo " Performance of this node will suffer." + echo " Modify conf\cassandra.env.ps1 to suppress this warning." + echo "" + echo "*---------------------------------------------------------------------*" + echo "*---------------------------------------------------------------------*" + } + } + + # provides hints to the JIT compiler + $env:JVM_OPTS = "$env:JVM_OPTS -XX:CompileCommandFile=""$env:CASSANDRA_CONF\hotspot_compiler""" + + # add the jamm javaagent + $env:JVM_OPTS = "$env:JVM_OPTS -javaagent:""$env:CASSANDRA_HOME\lib\jamm-0.3.2.jar""" + + # set jvm HeapDumpPath with CASSANDRA_HEAPDUMP_DIR + if ($env:CASSANDRA_HEAPDUMP_DIR) + { + $unixTimestamp = [int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalSeconds + $env:JVM_OPTS="$env:JVM_OPTS -XX:HeapDumpPath=""$env:CASSANDRA_HEAPDUMP_DIR\cassandra-$unixTimestamp-pid$pid.hprof""" + } + + # stop the jvm on OutOfMemoryError as it can result in some data corruption + # uncomment the preferred option + # ExitOnOutOfMemoryError and CrashOnOutOfMemoryError require a JRE greater or equals to 1.7 update 101 or 1.8 update 92 + # $env:JVM_OPTS="$env:JVM_OPTS -XX:+ExitOnOutOfMemoryError" + # $env:JVM_OPTS="$env:JVM_OPTS -XX:+CrashOnOutOfMemoryError" + $env:JVM_OPTS="$env:JVM_OPTS -XX:OnOutOfMemoryError=""taskkill /F /PID %p""" + + # print an heap histogram on OutOfMemoryError + # $env:JVM_OPTS="$env:JVM_OPTS -Dcassandra.printHeapHistogramOnOutOfMemoryError=true" + + $env:JAVA_VERSION=11 + if ($env:JVM_VERSION.CompareTo("1.8.0") -eq -1 -or [convert]::ToInt32($env:JVM_PATCH_VERSION) -lt 151) + { + echo "Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer). Java $env:JVM_VERSION is not supported." + exit + } + + # Specifies the default port over which Cassandra will be available for + # JMX connections. + $JMX_PORT="7199" + + # store in env to check if it's avail in verification + $env:JMX_PORT=$JMX_PORT + + # Configure the following for JEMallocAllocator and if jemalloc is not available in the system + # library path. + # set LD_LIBRARY_PATH=/lib/ + # $env:JVM_OPTS="$env:JVM_OPTS -Djava.library.path=/lib/" + + # jmx: metrics and administration interface + # + # add this if you're having trouble connecting: + # $env:JVM_OPTS="$env:JVM_OPTS -Djava.rmi.server.hostname=" + # + # see + # https://blogs.oracle.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole + # for more on configuring JMX through firewalls, etc. (Short version: + # get it working with no firewall first.) + # + # Due to potential security exploits, Cassandra ships with JMX accessible + # *only* from localhost. To enable remote JMX connections, uncomment lines below + # with authentication and ssl enabled. See https://wiki.apache.org/cassandra/JmxSecurity + # + #$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT" + #$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT" + # + # JMX SSL options + #$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true" + #$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.ssl.need.client.auth=true" + #$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.protocols=" + #$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.cipher.suites=" + #$env:JVM_OPTS="$env:JVM_OPTS -Djavax.net.ssl.keyStore=C:/keystore" + #$env:JVM_OPTS="$env:JVM_OPTS -Djavax.net.ssl.keyStorePassword=" + #$env:JVM_OPTS="$env:JVM_OPTS -Djavax.net.ssl.trustStore=C:/truststore" + #$env:JVM_OPTS="$env:JVM_OPTS -Djavax.net.ssl.trustStorePassword=" + # + # JMX auth options + #$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true" + ## Basic file based authn & authz + #$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.password.file=C:/jmxremote.password" + #$env:JVM_OPTS="$env:JVM_OPTS -Dcom.sun.management.jmxremote.access.file=C:/jmxremote.access" + + ## Custom auth settings which can be used as alternatives to JMX's out of the box auth utilities. + ## JAAS login modules can be used for authentication by uncommenting these two properties. + ## Cassandra ships with a LoginModule implementation - org.apache.cassandra.auth.CassandraLoginModule - + ## which delegates to the IAuthenticator configured in cassandra.yaml + #$env:JVM_OPTS="$env:JVM_OPTS -Dcassandra.jmx.remote.login.config=CassandraLogin" + #$env:JVM_OPTS="$env:JVM_OPTS -Djava.security.auth.login.config=C:/cassandra-jaas.config" + + ## Cassandra also ships with a helper for delegating JMX authz calls to the configured IAuthorizer, + ## uncomment this to use it. Requires one of the two authentication options to be enabled + #$env:JVM_OPTS="$env:JVM_OPTS -Dcassandra.jmx.authorizer=org.apache.cassandra.auth.jmx.AuthorizationProxy" + + # Default JMX setup, bound to local loopback address only + $env:JVM_OPTS="$env:JVM_OPTS -Dcassandra.jmx.local.port=$JMX_PORT" + + $env:JVM_OPTS="$env:JVM_OPTS $env:JVM_EXTRA_OPTS" +} diff --git a/doc/Dockerfile b/doc/Dockerfile new file mode 100644 index 000000000000..8999464a0b85 --- /dev/null +++ b/doc/Dockerfile @@ -0,0 +1,22 @@ +# Dockerfile for building the Cassandra documentation. +# If wanting to regenerate the documentation from scratch, +# run `ant realclean` from the root directory of this project. + +FROM python:2.7 + +WORKDIR /usr/src/code + +RUN pip install --no-cache-dir sphinx sphinx_rtd_theme + +RUN apt-get update && apt-get install -y software-properties-common + +RUN wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add - \ + && add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ \ + && apt-get update \ + && apt-get install -y adoptopenjdk-8-hotspot ant + + +RUN apt-get clean + +CMD CASSANDRA_USE_JDK11=true ant gen-doc \ + && echo "The locally built documentation can be found here:\n\n build/html/index.html\n\n" diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 000000000000..17ef395090ec --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,296 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +YAML_DOC_INPUT=../conf/cassandra.yaml +YAML_DOC_OUTPUT=source/configuration/cassandra_config_file.rst + +MAKE_CASSANDRA_YAML = python convert_yaml_to_rst.py $(YAML_DOC_INPUT) $(YAML_DOC_OUTPUT) + +GENERATE_NODETOOL_DOCS = python gen-nodetool-docs.py + +WEB_SITE_PRESENCE_FILE='source/.build_for_website' + +.PHONY: help +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " website to make HTML files for the Cassandra website" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " epub3 to make an epub3" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + @echo " dummy to check syntax errors of document sources" + +.PHONY: clean +clean: + rm -rf $(BUILDDIR)/* + rm -f $(YAML_DOC_OUTPUT) + +.PHONY: html +html: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: website +website: clean + @touch $(WEB_SITE_PRESENCE_FILE) + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @rm $(WEB_SITE_PRESENCE_FILE) + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: dirhtml +dirhtml: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +.PHONY: singlehtml +singlehtml: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +.PHONY: pickle +pickle: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +.PHONY: json +json: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +.PHONY: htmlhelp +htmlhelp: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +.PHONY: qthelp +qthelp: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ApacheCassandraDocumentation.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ApacheCassandraDocumentation.qhc" + +.PHONY: applehelp +applehelp: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +.PHONY: devhelp +devhelp: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/ApacheCassandraDocumentation" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ApacheCassandraDocumentation" + @echo "# devhelp" + +.PHONY: epub +epub: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +.PHONY: epub3 +epub3: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 + @echo + @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." + +.PHONY: latex +latex: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +.PHONY: latexpdf +latexpdf: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: latexpdfja +latexpdfja: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: text +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +.PHONY: man +man: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +.PHONY: texinfo +texinfo: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +.PHONY: info +info: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +.PHONY: gettext +gettext: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +.PHONY: changes +changes: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +.PHONY: linkcheck +linkcheck: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +.PHONY: doctest +doctest: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +.PHONY: coverage +coverage: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml +xml: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +.PHONY: pseudoxml +pseudoxml: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." + +.PHONY: dummy +dummy: + $(MAKE_CASSANDRA_YAML) + $(GENERATE_NODETOOL_DOCS) + $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy + @echo + @echo "Build finished. Dummy builder generates no files." diff --git a/doc/SASI.md b/doc/SASI.md new file mode 100644 index 000000000000..30346abcd320 --- /dev/null +++ b/doc/SASI.md @@ -0,0 +1,798 @@ +# SASIIndex + +[`SASIIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/SASIIndex.java), +or "SASI" for short, is an implementation of Cassandra's +`Index` interface that can be used as an alternative to the +existing implementations. SASI's indexing and querying improves on +existing implementations by tailoring it specifically to Cassandra's +needs. SASI has superior performance in cases where queries would +previously require filtering. In achieving this performance, SASI aims +to be significantly less resource intensive than existing +implementations, in memory, disk, and CPU usage. In addition, SASI +supports prefix and contains queries on strings (similar to SQL's +`LIKE = "foo*"` or `LIKE = "*foo*"'`). + +The following goes on describe how to get up and running with SASI, +demonstrates usage with examples, and provides some details on its +implementation. + +## Using SASI + +The examples below walk through creating a table and indexes on its +columns, and performing queries on some inserted data. + +The examples below assume the `demo` keyspace has been created and is +in use. + +``` +cqlsh> CREATE KEYSPACE demo WITH replication = { + ... 'class': 'SimpleStrategy', + ... 'replication_factor': '1' + ... }; +cqlsh> USE demo; +``` + +All examples are performed on the `sasi` table: + +``` +cqlsh:demo> CREATE TABLE sasi (id uuid, first_name text, last_name text, + ... age int, height int, created_at bigint, primary key (id)); +``` + +#### Creating Indexes + +To create SASI indexes use CQLs `CREATE CUSTOM INDEX` statement: + +``` +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (first_name) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = { + ... 'analyzer_class': + ... 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer', + ... 'case_sensitive': 'false' + ... }; + +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (last_name) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = {'mode': 'CONTAINS'}; + +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (age) USING 'org.apache.cassandra.index.sasi.SASIIndex'; + +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (created_at) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = {'mode': 'SPARSE'}; +``` + +The indexes created have some options specified that customize their +behaviour and potentially performance. The index on `first_name` is +case-insensitive. The analyzers are discussed more in a subsequent +example. The `NonTokenizingAnalyzer` performs no analysis on the +text. Each index has a mode: `PREFIX`, `CONTAINS`, or `SPARSE`, the +first being the default. The `last_name` index is created with the +mode `CONTAINS` which matches terms on suffixes instead of prefix +only. Examples of this are available below and more detail can be +found in the section on +[OnDiskIndex](#ondiskindexbuilder).The +`created_at` column is created with its mode set to `SPARSE`, which is +meant to improve performance of querying large, dense number ranges +like timestamps for data inserted every millisecond. Details of the +`SPARSE` implementation can also be found in the section on the +[OnDiskIndex](#ondiskindexbuilder). The `age` +index is created with the default `PREFIX` mode and no +case-sensitivity or text analysis options are specified since the +field is numeric. + +After inserting the following data and performing a `nodetool flush`, +SASI performing index flushes to disk can be seen in Cassandra's logs +-- although the direct call to flush is not required (see +[IndexMemtable](#indexmemtable) for more details). + +``` +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (556ebd54-cbe5-4b75-9aae-bf2a31a24500, 'Pavel', 'Yaskevich', 27, 181, 1442959315018); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (5770382a-c56f-4f3f-b755-450e24d55217, 'Jordan', 'West', 26, 173, 1442959315019); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (96053844-45c3-4f15-b1b7-b02c441d3ee1, 'Mikhail', 'Stepura', 36, 173, 1442959315020); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (f5dfcabe-de96-4148-9b80-a1c41ed276b4, 'Michael', 'Kjellman', 26, 180, 1442959315021); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (2970da43-e070-41a8-8bcb-35df7a0e608a, 'Johnny', 'Zhang', 32, 175, 1442959315022); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (6b757016-631d-4fdb-ac62-40b127ccfbc7, 'Jason', 'Brown', 40, 182, 1442959315023); + +cqlsh:demo> INSERT INTO sasi (id, first_name, last_name, age, height, created_at) + ... VALUES (8f909e8a-008e-49dd-8d43-1b0df348ed44, 'Vijay', 'Parthasarathy', 34, 183, 1442959315024); + +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi; + + first_name | last_name | age | height | created_at +------------+---------------+-----+--------+--------------- + Michael | Kjellman | 26 | 180 | 1442959315021 + Mikhail | Stepura | 36 | 173 | 1442959315020 + Jason | Brown | 40 | 182 | 1442959315023 + Pavel | Yaskevich | 27 | 181 | 1442959315018 + Vijay | Parthasarathy | 34 | 183 | 1442959315024 + Jordan | West | 26 | 173 | 1442959315019 + Johnny | Zhang | 32 | 175 | 1442959315022 + +(7 rows) +``` + +#### Equality & Prefix Queries + +SASI supports all queries already supported by CQL, including LIKE statement +for PREFIX, CONTAINS and SUFFIX searches. + +``` +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name = 'Pavel'; + + first_name | last_name | age | height | created_at +-------------+-----------+-----+--------+--------------- + Pavel | Yaskevich | 27 | 181 | 1442959315018 + +(1 rows) +``` + +``` +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name = 'pavel'; + + first_name | last_name | age | height | created_at +-------------+-----------+-----+--------+--------------- + Pavel | Yaskevich | 27 | 181 | 1442959315018 + +(1 rows) +``` + +``` +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name LIKE 'M%'; + + first_name | last_name | age | height | created_at +------------+-----------+-----+--------+--------------- + Michael | Kjellman | 26 | 180 | 1442959315021 + Mikhail | Stepura | 36 | 173 | 1442959315020 + +(2 rows) +``` + +Of course, the case of the query does not matter for the `first_name` +column because of the options provided at index creation time. + +``` +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name LIKE 'm%'; + + first_name | last_name | age | height | created_at +------------+-----------+-----+--------+--------------- + Michael | Kjellman | 26 | 180 | 1442959315021 + Mikhail | Stepura | 36 | 173 | 1442959315020 + +(2 rows) +``` + +#### Compound Queries + +SASI supports queries with multiple predicates, however, due to the +nature of the default indexing implementation, CQL requires the user +to specify `ALLOW FILTERING` to opt-in to the potential performance +pitfalls of such a query. With SASI, while the requirement to include +`ALLOW FILTERING` remains, to reduce modifications to the grammar, the +performance pitfalls do not exist because filtering is not +performed. Details on how SASI joins data from multiple predicates is +available below in the +[Implementation Details](#implementation-details) +section. + +``` +cqlsh:demo> SELECT first_name, last_name, age, height, created_at FROM sasi + ... WHERE first_name LIKE 'M%' and age < 30 ALLOW FILTERING; + + first_name | last_name | age | height | created_at +------------+-----------+-----+--------+--------------- + Michael | Kjellman | 26 | 180 | 1442959315021 + +(1 rows) +``` + +#### Suffix Queries + +The next example demonstrates `CONTAINS` mode on the `last_name` +column. By using this mode, predicates can search for any strings +containing the search string as a sub-string. In this case the strings +containing "a" or "an". + +``` +cqlsh:demo> SELECT * FROM sasi WHERE last_name LIKE '%a%'; + + id | age | created_at | first_name | height | last_name +--------------------------------------+-----+---------------+------------+--------+--------------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | 1442959315021 | Michael | 180 | Kjellman + 96053844-45c3-4f15-b1b7-b02c441d3ee1 | 36 | 1442959315020 | Mikhail | 173 | Stepura + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | 1442959315018 | Pavel | 181 | Yaskevich + 8f909e8a-008e-49dd-8d43-1b0df348ed44 | 34 | 1442959315024 | Vijay | 183 | Parthasarathy + 2970da43-e070-41a8-8bcb-35df7a0e608a | 32 | 1442959315022 | Johnny | 175 | Zhang + +(5 rows) + +cqlsh:demo> SELECT * FROM sasi WHERE last_name LIKE '%an%'; + + id | age | created_at | first_name | height | last_name +--------------------------------------+-----+---------------+------------+--------+----------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | 1442959315021 | Michael | 180 | Kjellman + 2970da43-e070-41a8-8bcb-35df7a0e608a | 32 | 1442959315022 | Johnny | 175 | Zhang + +(2 rows) +``` + +#### Expressions on Non-Indexed Columns + +SASI also supports filtering on non-indexed columns like `height`. The +expression can only narrow down an existing query using `AND`. + +``` +cqlsh:demo> SELECT * FROM sasi WHERE last_name LIKE '%a%' AND height >= 175 ALLOW FILTERING; + + id | age | created_at | first_name | height | last_name +--------------------------------------+-----+---------------+------------+--------+--------------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | 1442959315021 | Michael | 180 | Kjellman + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | 1442959315018 | Pavel | 181 | Yaskevich + 8f909e8a-008e-49dd-8d43-1b0df348ed44 | 34 | 1442959315024 | Vijay | 183 | Parthasarathy + 2970da43-e070-41a8-8bcb-35df7a0e608a | 32 | 1442959315022 | Johnny | 175 | Zhang + +(4 rows) +``` + +#### Delimiter based Tokenization Analysis + +A simple text analysis provided is delimiter based tokenization. This provides an alternative to indexing collections, +as delimiter separated text can be indexed without the overhead of `CONTAINS` mode nor using `PREFIX` or `SUFFIX` queries. + +``` +cqlsh:demo> ALTER TABLE sasi ADD aliases text; +cqlsh:demo> CREATE CUSTOM INDEX on sasi (aliases) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = { + ... 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.DelimiterAnalyzer', + ... 'delimiter': ',', + ... 'mode': 'prefix', + ... 'analyzed': 'true'}; +cqlsh:demo> UPDATE sasi SET aliases = 'Mike,Mick,Mikey,Mickey' WHERE id = f5dfcabe-de96-4148-9b80-a1c41ed276b4; +cqlsh:demo> SELECT * FROM sasi WHERE aliases LIKE 'Mikey' ALLOW FILTERING; + + id | age | aliases | created_at | first_name | height | last_name +--------------------------------------+-----+------------------------+---------------+------------+--------+----------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | Mike,Mick,Mikey,Mickey | 1442959315021 | Michael | 180 | Kjellman +``` + +#### Text Analysis (Tokenization and Stemming) + +Lastly, to demonstrate text analysis an additional column is needed on +the table. Its definition, index, and statements to update rows are shown below. + +``` +cqlsh:demo> ALTER TABLE sasi ADD bio text; +cqlsh:demo> CREATE CUSTOM INDEX ON sasi (bio) USING 'org.apache.cassandra.index.sasi.SASIIndex' + ... WITH OPTIONS = { + ... 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', + ... 'tokenization_enable_stemming': 'true', + ... 'analyzed': 'true', + ... 'tokenization_normalize_lowercase': 'true', + ... 'tokenization_locale': 'en' + ... }; +cqlsh:demo> UPDATE sasi SET bio = 'Software Engineer, who likes distributed systems, doesnt like to argue.' WHERE id = 5770382a-c56f-4f3f-b755-450e24d55217; +cqlsh:demo> UPDATE sasi SET bio = 'Software Engineer, works on the freight distribution at nights and likes arguing' WHERE id = 556ebd54-cbe5-4b75-9aae-bf2a31a24500; +cqlsh:demo> SELECT * FROM sasi; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+--------------- + f5dfcabe-de96-4148-9b80-a1c41ed276b4 | 26 | null | 1442959315021 | Michael | 180 | Kjellman + 96053844-45c3-4f15-b1b7-b02c441d3ee1 | 36 | null | 1442959315020 | Mikhail | 173 | Stepura + 6b757016-631d-4fdb-ac62-40b127ccfbc7 | 40 | null | 1442959315023 | Jason | 182 | Brown + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + 8f909e8a-008e-49dd-8d43-1b0df348ed44 | 34 | null | 1442959315024 | Vijay | 183 | Parthasarathy + 5770382a-c56f-4f3f-b755-450e24d55217 | 26 | Software Engineer, who likes distributed systems, doesnt like to argue. | 1442959315019 | Jordan | 173 | West + 2970da43-e070-41a8-8bcb-35df7a0e608a | 32 | null | 1442959315022 | Johnny | 175 | Zhang + +(7 rows) +``` + +Index terms and query search strings are stemmed for the `bio` column +because it was configured to use the +[`StandardAnalyzer`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java) +and `analyzed` is set to `true`. The +`tokenization_normalize_lowercase` is similar to the `case_sensitive` +property but for the +[`StandardAnalyzer`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java). These +query demonstrates the stemming applied by [`StandardAnalyzer`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/analyzer/StandardAnalyzer.java). + +``` +cqlsh:demo> SELECT * FROM sasi WHERE bio LIKE 'distributing'; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+----------- + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + 5770382a-c56f-4f3f-b755-450e24d55217 | 26 | Software Engineer, who likes distributed systems, doesnt like to argue. | 1442959315019 | Jordan | 173 | West + +(2 rows) + +cqlsh:demo> SELECT * FROM sasi WHERE bio LIKE 'they argued'; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+----------- + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + 5770382a-c56f-4f3f-b755-450e24d55217 | 26 | Software Engineer, who likes distributed systems, doesnt like to argue. | 1442959315019 | Jordan | 173 | West + +(2 rows) + +cqlsh:demo> SELECT * FROM sasi WHERE bio LIKE 'working at the company'; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+----------- + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + +(1 rows) + +cqlsh:demo> SELECT * FROM sasi WHERE bio LIKE 'soft eng'; + + id | age | bio | created_at | first_name | height | last_name +--------------------------------------+-----+----------------------------------------------------------------------------------+---------------+------------+--------+----------- + 556ebd54-cbe5-4b75-9aae-bf2a31a24500 | 27 | Software Engineer, works on the freight distribution at nights and likes arguing | 1442959315018 | Pavel | 181 | Yaskevich + 5770382a-c56f-4f3f-b755-450e24d55217 | 26 | Software Engineer, who likes distributed systems, doesnt like to argue. | 1442959315019 | Jordan | 173 | West + +(2 rows) +``` + +## Implementation Details + +While SASI, at the surface, is simply an implementation of the +`Index` interface, at its core there are several data +structures and algorithms used to satisfy it. These are described +here. Additionally, the changes internal to Cassandra to support SASI's +integration are described. + +The `Index` interface divides responsibility of the +implementer into two parts: Indexing and Querying. Further, Cassandra +makes it possible to divide those responsibilities into the memory and +disk components. SASI takes advantage of Cassandra's write-once, +immutable, ordered data model to build indexes along with the flushing +of the memtable to disk -- this is the origin of the name "SSTable +Attached Secondary Index". + +The SASI index data structures are built in memory as the SSTable is +being written and they are flushed to disk before the writing of the +SSTable completes. The writing of each index file only requires +sequential writes to disk. In some cases, partial flushes are +performed, and later stitched back together, to reduce memory +usage. These data structures are optimized for this use case. + +Taking advantage of Cassandra's ordered data model, at query time, +candidate indexes are narrowed down for searching, minimizing the amount +of work done. Searching is then performed using an efficient method +that streams data off disk as needed. + +### Indexing + +Per SSTable, SASI writes an index file for each indexed column. The +data for these files is built in memory using the +[`OnDiskIndexBuilder`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndexBuilder.java). Once +flushed to disk, the data is read using the +[`OnDiskIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java) +class. These are composed of bytes representing indexed terms, +organized for efficient writing or searching respectively. The keys +and values they hold represent tokens and positions in an SSTable and +these are stored per-indexed term in +[`TokenTreeBuilder`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java)s +for writing, and +[`TokenTree`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java)s +for querying. These index files are memory mapped after being written +to disk, for quicker access. For indexing data in the memtable, SASI +uses its +[`IndexMemtable`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java) +class. + +#### OnDiskIndex(Builder) + +Each +[`OnDiskIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java) +is an instance of a modified +[Suffix Array](https://en.wikipedia.org/wiki/Suffix_array) data +structure. The +[`OnDiskIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java) +is comprised of page-size blocks of sorted terms and pointers to the +terms' associated data, as well as the data itself, stored also in one +or more page-sized blocks. The +[`OnDiskIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java) +is structured as a tree of arrays, where each level describes the +terms in the level below, the final level being the terms +themselves. The `PointerLevel`s and their `PointerBlock`s contain +terms and pointers to other blocks that *end* with those terms. The +`DataLevel`, the final level, and its `DataBlock`s contain terms and +point to the data itself, contained in [`TokenTree`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java)s. + +The terms written to the +[`OnDiskIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/OnDiskIndex.java) +vary depending on its "mode": either `PREFIX`, `CONTAINS`, or +`SPARSE`. In the `PREFIX` and `SPARSE` cases, terms' exact values are +written exactly once per `OnDiskIndex`. For example, when using a `PREFIX` index +with terms `Jason`, `Jordan`, `Pavel`, all three will be included in +the index. A `CONTAINS` index writes additional terms for each suffix of +each term recursively. Continuing with the example, a `CONTAINS` index +storing the previous terms would also store `ason`, `ordan`, `avel`, +`son`, `rdan`, `vel`, etc. This allows for queries on the suffix of +strings. The `SPARSE` mode differs from `PREFIX` in that for every 64 +blocks of terms a +[`TokenTree`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java) +is built merging all the +[`TokenTree`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java)s +for each term into a single one. This copy of the data is used for +efficient iteration of large ranges of e.g. timestamps. The index +"mode" is configurable per column at index creation time. + +#### TokenTree(Builder) + +The +[`TokenTree`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java) +is an implementation of the well-known +[B+-tree](https://en.wikipedia.org/wiki/B%2B_tree) that has been +modified to optimize for its use-case. In particular, it has been +optimized to associate tokens, longs, with a set of positions in an +SSTable, also longs. Allowing the set of long values accommodates +the possibility of a hash collision in the token, but the data +structure is optimized for the unlikely possibility of such a +collision. + +To optimize for its write-once environment the +[`TokenTreeBuilder`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTreeBuilder.java) +completely loads its interior nodes as the tree is built and it uses +the well-known algorithm optimized for bulk-loading the data +structure. + +[`TokenTree`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/TokenTree.java)s provide the means to iterate over tokens, and file +positions, that match a given term, and to skip forward in that +iteration, an operation used heavily at query time. + +#### IndexMemtable + +The +[`IndexMemtable`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java) +handles indexing the in-memory data held in the memtable. The +[`IndexMemtable`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/IndexMemtable.java) +in turn manages either a +[`TrieMemIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java) +or a +[`SkipListMemIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java) +per-column. The choice of which index type is used is data +dependent. The +[`TrieMemIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java) +is used for literal types. `AsciiType` and `UTF8Type` are literal +types by default but any column can be configured as a literal type +using the `is_literal` option at index creation time. For non-literal +types the +[`SkipListMemIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java) +is used. The +[`TrieMemIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java) +is an implementation that can efficiently support prefix queries on +character-like data. The +[`SkipListMemIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java), +conversely, is better suited for other Cassandra data types like +numbers. + +The +[`TrieMemIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java) +is built using either the `ConcurrentRadixTree` or +`ConcurrentSuffixTree` from the `com.goooglecode.concurrenttrees` +package. The choice between the two is made based on the indexing +mode, `PREFIX` or other modes, and `CONTAINS` mode, respectively. + +The +[`SkipListMemIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java) +is built on top of `java.util.concurrent.ConcurrentSkipListSet`. + +### Querying + +Responsible for converting the internal `IndexExpression` +representation into SASI's +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java) +and +[`Expression`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java) +trees, optimizing the trees to reduce the amount of work done, and +driving the query itself, the +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +is the work horse of SASI's querying implementation. To efficiently +perform union and intersection operations, SASI provides several +iterators similar to Cassandra's `MergeIterator`, but tailored +specifically for SASI's use while including more features. The +[`RangeUnionIterator`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeUnionIterator.java), +like its name suggests, performs set unions over sets of tokens/keys +matching the query, only reading as much data as it needs from each +set to satisfy the query. The +[`RangeIntersectionIterator`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java), +similar to its counterpart, performs set intersections over its data. + +#### QueryPlan + +The +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +instantiated per search query is at the core of SASI's querying +implementation. Its work can be divided in two stages: analysis and +execution. + +During the analysis phase, +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +converts from Cassandra's internal representation of +`IndexExpression`s, which has also been modified to support encoding +queries that contain ORs and groupings of expressions using +parentheses (see the +[Cassandra Internal Changes](#cassandra-internal-changes) +section below for more details). This process produces a tree of +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java)s, which in turn may contain [`Expression`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java)s, all of which +provide an alternative, more efficient, representation of the query. + +During execution, the +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +uses the `DecoratedKey`-generating iterator created from the +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java) tree. These keys are read from disk and a final check to +ensure they satisfy the query is made, once again using the +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java) tree. At the point the desired amount of matching data has +been found, or there is no more matching data, the result set is +returned to the coordinator through the existing internal components. + +The number of queries (total/failed/timed-out), and their latencies, +are maintined per-table/column family. + +SASI also supports concurrently iterating terms for the same index +across SSTables. The concurrency factor is controlled by the +`cassandra.search_concurrency_factor` system property. The default is +`1`. + +##### QueryController + +Each +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +references a +[`QueryController`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryController.java) +used throughout the execution phase. The +[`QueryController`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryController.java) +has two responsibilities: to manage and ensure the proper cleanup of +resources (indexes), and to strictly enforce the time bound per query, +specified by the user via the range slice timeout. All indexes are +accessed via the +[`QueryController`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryController.java) +so that they can be safely released by it later. The +[`QueryController`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryController.java)'s +`checkpoint` function is called in specific places in the execution +path to ensure the time-bound is enforced. + +##### QueryPlan Optimizations + +While in the analysis phase, the +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +performs several potential optimizations to the query. The goal of +these optimizations is to reduce the amount of work performed during +the execution phase. + +The simplest optimization performed is compacting multiple expressions +joined by logical intersections (`AND`) into a single [`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java) with +three or more [`Expression`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java)s. For example, the query `WHERE age < 100 AND +fname = 'p*' AND first_name != 'pa*' AND age > 21` would, +without modification, have the following tree: + + ┌───────┐ + ┌────────│ AND │──────┐ + │ └───────┘ │ + ▼ ▼ + ┌───────┐ ┌──────────┐ + ┌─────│ AND │─────┐ │age < 100 │ + │ └───────┘ │ └──────────┘ + ▼ ▼ + ┌──────────┐ ┌───────┐ + │ fname=p* │ ┌─│ AND │───┐ + └──────────┘ │ └───────┘ │ + ▼ ▼ + ┌──────────┐ ┌──────────┐ + │fname!=pa*│ │ age > 21 │ + └──────────┘ └──────────┘ + +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +will remove the redundant right branch whose root is the final `AND` +and has leaves `fname != pa*` and `age > 21`. These [`Expression`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java)s will +be compacted into the parent `AND`, a safe operation due to `AND` +being associative and commutative. The resulting tree looks like the +following: + + ┌───────┐ + ┌────────│ AND │──────┐ + │ └───────┘ │ + ▼ ▼ + ┌───────┐ ┌──────────┐ + ┌───────────│ AND │────────┐ │age < 100 │ + │ └───────┘ │ └──────────┘ + ▼ │ ▼ + ┌──────────┐ │ ┌──────────┐ + │ fname=p* │ ▼ │ age > 21 │ + └──────────┘ ┌──────────┐ └──────────┘ + │fname!=pa*│ + └──────────┘ + +When excluding results from the result set, using `!=`, the +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +determines the best method for handling it. For range queries, for +example, it may be optimal to divide the range into multiple parts +with a hole for the exclusion. For string queries, such as this one, +it is more optimal, however, to simply note which data to skip, or +exclude, while scanning the index. Following this optimization the +tree looks like this: + + ┌───────┐ + ┌────────│ AND │──────┐ + │ └───────┘ │ + ▼ ▼ + ┌───────┐ ┌──────────┐ + ┌───────│ AND │────────┐ │age < 100 │ + │ └───────┘ │ └──────────┘ + ▼ ▼ + ┌──────────────────┐ ┌──────────┐ + │ fname=p* │ │ age > 21 │ + │ exclusions=[pa*] │ └──────────┘ + └──────────────────┘ + +The last type of optimization applied, for this query, is to merge +range expressions across branches of the tree -- without modifying the +meaning of the query, of course. In this case, because the query +contains all `AND`s the `age` expressions can be collapsed. Along with +this optimization, the initial collapsing of unneeded `AND`s can also +be applied once more to result in this final tree using to execute the +query: + + ┌───────┐ + ┌──────│ AND │───────┐ + │ └───────┘ │ + ▼ ▼ + ┌──────────────────┐ ┌────────────────┐ + │ fname=p* │ │ 21 < age < 100 │ + │ exclusions=[pa*] │ └────────────────┘ + └──────────────────┘ + +#### Operations and Expressions + +As discussed, the +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +optimizes a tree represented by +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java)s +as interior nodes, and +[`Expression`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Expression.java)s +as leaves. The +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java) +class, more specifically, can have zero, one, or two +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java)s +as children and an unlimited number of expressions. The iterators used +to perform the queries, discussed below in the +"Range(Union|Intersection)Iterator" section, implement the necessary +logic to merge results transparently regardless of the +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java)s +children. + +Besides participating in the optimizations performed by the +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java), +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java) +is also responsible for taking a row that has been returned by the +query and performing a final validation that it in fact does match. This +`satisfiesBy` operation is performed recursively from the root of the +[`Operation`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java) +tree for a given query. These checks are performed directly on the +data in a given row. For more details on how `satisfiesBy` works, see +the documentation +[in the code](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/Operation.java#L87-L123). + +#### Range(Union|Intersection)Iterator + +The abstract `RangeIterator` class provides a unified interface over +the two main operations performed by SASI at various layers in the +execution path: set intersection and union. These operations are +performed in a iterated, or "streaming", fashion to prevent unneeded +reads of elements from either set. In both the intersection and union +cases the algorithms take advantage of the data being pre-sorted using +the same sort order, e.g. term or token order. + +The +[`RangeUnionIterator`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeUnionIterator.java) +performs the "Merge-Join" portion of the +[Sort-Merge-Join](https://en.wikipedia.org/wiki/Sort-merge_join) +algorithm, with the properties of an outer-join, or union. It is +implemented with several optimizations to improve its performance over +a large number of iterators -- sets to union. Specifically, the +iterator exploits the likely case of the data having many sub-groups +of overlapping ranges and the unlikely case that all ranges will +overlap each other. For more details see the +[javadoc](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeUnionIterator.java#L9-L21). + +The +[`RangeIntersectionIterator`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java) +itself is not a subclass of `RangeIterator`. It is a container for +several classes, one of which, `AbstractIntersectionIterator`, +sub-classes `RangeIterator`. SASI supports two methods of performing +the intersection operation, and the ability to be adaptive in choosing +between them based on some properties of the data. + +`BounceIntersectionIterator`, and the `BOUNCE` strategy, works like +the +[`RangeUnionIterator`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeUnionIterator.java) +in that it performs a "Merge-Join", however, its nature is similar to +a inner-join, where like values are merged by a data-specific merge +function (e.g. merging two tokens in a list to lookup in a SSTable +later). See the +[javadoc](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java#L88-L101) +for more details on its implementation. + +`LookupIntersectionIterator`, and the `LOOKUP` strategy, performs a +different operation, more similar to a lookup in an associative data +structure, or "hash lookup" in database terminology. Once again, +details on the implementation can be found in the +[javadoc](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/utils/RangeIntersectionIterator.java#L199-L208). + +The choice between the two iterators, or the `ADAPTIVE` strategy, is +based upon the ratio of data set sizes of the minimum and maximum +range of the sets being intersected. If the number of the elements in +minimum range divided by the number of elements is the maximum range +is less than or equal to `0.01`, then the `ADAPTIVE` strategy chooses +the `LookupIntersectionIterator`, otherwise the +`BounceIntersectionIterator` is chosen. + +### The SASIIndex Class + +The above components are glued together by the +[`SASIIndex`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/SASIIndex.java) +class which implements `Index`, and is instantiated +per-table containing SASI indexes. It manages all indexes for a table +via the +[`sasi.conf.DataTracker`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/conf/DataTracker.java) +and +[`sasi.conf.view.View`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/conf/view/View.java) +components, controls writing of all indexes for an SSTable via its +[`PerSSTableIndexWriter`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/disk/PerSSTableIndexWriter.java), and initiates searches with +`Searcher`. These classes glue the previously +mentioned indexing components together with Cassandra's SSTable +life-cycle ensuring indexes are not only written when Memtable's flush, +but also as SSTable's are compacted. For querying, the +`Searcher` does little but defer to +[`QueryPlan`](https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/plan/QueryPlan.java) +and update e.g. latency metrics exposed by SASI. + +### Cassandra Internal Changes + +To support the above changes and integrate them into Cassandra a few +minor internal changes were made to Cassandra itself. These are +described here. + +#### SSTable Write Life-cycle Notifications + +The `SSTableFlushObserver` is an observer pattern-like interface, +whose sub-classes can register to be notified about events in the +life-cycle of writing out a SSTable. Sub-classes can be notified when a +flush begins and ends, as well as when each next row is about to be +written, and each next column. SASI's `PerSSTableIndexWriter`, +discussed above, is the only current subclass. + +### Limitations and Caveats + +The following are items that can be addressed in future updates but are not +available in this repository or are not currently implemented. + +* The cluster must be configured to use a partitioner that produces + `LongToken`s, e.g. `Murmur3Partitioner`. Other existing partitioners which + don't produce LongToken e.g. `ByteOrderedPartitioner` and `RandomPartitioner` + will not work with SASI. +* Not Equals and OR support have been removed in this release while + changes are made to Cassandra itself to support them. + +### Contributors + +* [Pavel Yaskevich](https://github.com/xedin) +* [Jordan West](https://github.com/jrwest) +* [Michael Kjellman](https://github.com/mkjellman) +* [Jason Brown](https://github.com/jasobrown) +* [Mikhail Stepura](https://github.com/mishail) diff --git a/doc/convert_yaml_to_rst.py b/doc/convert_yaml_to_rst.py new file mode 100644 index 000000000000..4bdcf5bde233 --- /dev/null +++ b/doc/convert_yaml_to_rst.py @@ -0,0 +1,145 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +A script to convert cassandra.yaml into ReStructuredText for +the online documentation. + +Usage: + + convert_yaml_to_rest.py conf/cassandra.yaml docs/source/conf.rst +""" + +import sys +import re + +# Detects options, whether commented or uncommented. +# Group 1 will be non-empty if the option is commented out. +# Group 2 will contain the option name. +# Group 3 will contain the default value, if one exists. +option_re = re.compile(r"^(# ?)?([a-z0-9_]+): ?([^/].*)") + +# Detects normal comment lines. +commented_re = re.compile(r"^# ?(.*)") + +# A set of option names that have complex values (i.e. lists or dicts). +# This list is hardcoded because there did not seem to be another +# good way to reliably detect this case, especially considering +# that these can be commented out (making it useless to use a yaml parser). +COMPLEX_OPTIONS = ( + 'seed_provider', + 'data_file_directories', + 'commitlog_compression', + 'hints_compression', + 'server_encryption_options', + 'client_encryption_options', + 'transparent_data_encryption_options', + 'hinted_handoff_disabled_datacenters' +) + + +def convert(yaml_file, dest_file): + with open(yaml_file, 'r') as f: + # Trim off the boilerplate header + lines = f.readlines()[7:] + + with open(dest_file, 'w') as outfile: + outfile.write(".. _cassandra-yaml:\n") + outfile.write("\n") + outfile.write("Cassandra Configuration File\n") + outfile.write("============================\n") + + # since comments preceed an option, this holds all of the comment + # lines we've seen since the last option + comments_since_last_option = [] + line_iter = iter(lines) + while True: + try: + line = next(line_iter) + except StopIteration: + break + + match = option_re.match(line) + if match: + option_name = match.group(2) + is_commented = bool(match.group(1)) + + is_complex = option_name in COMPLEX_OPTIONS + complex_option = read_complex_option(line_iter) if is_complex else None + + write_section_header(option_name, outfile) + write_comments(comments_since_last_option, is_commented, outfile) + if is_complex: + write_complex_option(complex_option, outfile) + else: + maybe_write_default_value(match, outfile) + comments_since_last_option = [] + else: + comment_match = commented_re.match(line) + if comment_match: + comments_since_last_option.append(comment_match.group(1)) + elif line == "\n": + comments_since_last_option.append('') + + +def write_section_header(option_name, outfile): + outfile.write("\n") + outfile.write("``%s``\n" % (option_name,)) + outfile.write("-" * (len(option_name) + 4) + "\n") + + +def write_comments(comment_lines, is_commented, outfile): + if is_commented: + outfile.write("*This option is commented out by default.*\n") + + for comment in comment_lines: + if "SAFETY THRESHOLDS" not in comment_lines: + outfile.write(comment + "\n") + + +def maybe_write_default_value(option_match, outfile): + default_value = option_match.group(3) + if default_value and default_value != "\n": + outfile.write("\n*Default Value:* %s\n" % (default_value,)) + + +def read_complex_option(line_iter): + option_lines = [] + try: + while True: + line = next(line_iter) + if line == '\n': + return option_lines + else: + option_lines.append(line) + except StopIteration: + return option_lines + + +def write_complex_option(lines, outfile): + outfile.write("\n*Default Value (complex option)*::\n\n") + for line in lines: + outfile.write((" " * 4) + line) + + +if __name__ == '__main__': + if len(sys.argv) != 3: + print >> sys.stderr, "Usage: %s " % (sys.argv[0],) + sys.exit(1) + + yaml_file = sys.argv[1] + dest_file = sys.argv[2] + convert(yaml_file, dest_file) diff --git a/doc/cql3/CQL.css b/doc/cql3/CQL.css new file mode 100644 index 000000000000..601c01364007 --- /dev/null +++ b/doc/cql3/CQL.css @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* Default (and example) style sheet for CQL.html */ + +pre.sample { + padding: 1ex; + padding-left: 4ex; + border: 1px solid #ada; + background-color: #fafffa; +} + +pre.syntax { + padding: 1ex; + padding-left: 4ex; + border: 1px solid #aaf; + background-color: #fafaff; +} + +p.banner { + padding: 1ex; + padding-left: 4ex; + border-top: 1px solid #faa; + border-bottom: 1px solid #faa; + background-color: #fffafa; + color: #b33; + text-align: center; +} + +table { + margin-left: 4ex; + /* width: 80%; */ + border-collapse: collapse; + border: 2px solid #bbb; +} + +td, th { + padding: 2px 1ex; + border: 1px solid #bbb; +} + +th { + background-color: #f0f0f0; +} + +body { + background-color: white; + padding: 0 2ex; +} + +h1 { + text-align: center; + margin-bottom: 3ex; +} + +h2 { + text-align: center; + border-top: 1px solid #aaa; + border-bottom: 1px solid #aaa; + background-color: #eee; + margin-top: 5ex; +} + +h3 { + padding-top: 3ex; +} + +a { + color:#333; + font-size:90%; + text-decoration:none; + font-weight:bold; +} + +a:link {color:#333;} +a:visited {color:#111;} +a:hover { + color:#777; + text-decoration: underline; +} + +span#tableOfContents { + border: 1px solid #bbb; + background-color: #fafafa; + display: inline-block; + padding-right: 6ex; +} diff --git a/doc/cql3/CQL.textile b/doc/cql3/CQL.textile new file mode 100644 index 000000000000..fafca1436e68 --- /dev/null +++ b/doc/cql3/CQL.textile @@ -0,0 +1,2553 @@ + +h1. Cassandra Query Language (CQL) v3.4.3 + + + + + +{toc:maxLevel=3} + + + +h2. CQL Syntax + +h3. Preamble + +This document describes the Cassandra Query Language (CQL) version 3. CQL v3 is not backward compatible with CQL v2 and differs from it in numerous ways. Note that this document describes the last version of the languages. However, the "changes":#changes section provides the diff between the different versions of CQL v3. + +CQL v3 offers a model very close to SQL in the sense that data is put in _tables_ containing _rows_ of _columns_. For that reason, when used in this document, these terms (tables, rows and columns) have the same definition than they have in SQL. But please note that as such, they do *not* refer to the concept of rows and columns found in the internal implementation of Cassandra and in the thrift and CQL v2 API. + + +h3. Conventions + +To aid in specifying the CQL syntax, we will use the following conventions in this document: + +* Language rules will be given in a "BNF":http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form -like notation: + +bc(syntax). ::= TERMINAL + +* Nonterminal symbols will have @@. +* As additional shortcut notations to BNF, we'll use traditional regular expression's symbols (@?@, @+@ and @*@) to signify that a given symbol is optional and/or can be repeated. We'll also allow parentheses to group symbols and the @[]@ notation to represent any one of @@. +* The grammar is provided for documentation purposes and leave some minor details out. For instance, the last column definition in a @CREATE TABLE@ statement is optional but supported if present even though the provided grammar in this document suggest it is not supported. +* Sample code will be provided in a code block: + +bc(sample). SELECT sample_usage FROM cql; + +* References to keywords or pieces of CQL code in running text will be shown in a @fixed-width font@. + +h3(#identifiers). Identifiers and keywords + +p. The CQL language uses _identifiers_ (or _names_) to identify tables, columns and other objects. An identifier is a token matching the regular expression @[a-zA-Z]@@[a-zA-Z0-9_]@@*@. + +p. A number of such identifiers, like @SELECT@ or @WITH@, are _keywords_. They have a fixed meaning for the language and most are reserved. The list of those keywords can be found in "Appendix A":#appendixA. + +p. Identifiers and (unquoted) keywords are case insensitive. Thus @SELECT@ is the same than @select@ or @sElEcT@, and @myId@ is the same than @myid@ or @MYID@ for instance. A convention often used (in particular by the samples of this documentation) is to use upper case for keywords and lower case for other identifiers. + +p. There is a second kind of identifiers called _quoted identifiers_ defined by enclosing an arbitrary sequence of characters in double-quotes(@"@). Quoted identifiers are never keywords. Thus @"select"@ is not a reserved keyword and can be used to refer to a column, while @select@ would raise a parse error. Also, contrarily to unquoted identifiers and keywords, quoted identifiers are case sensitive (@"My Quoted Id"@ is _different_ from @"my quoted id"@). A fully lowercase quoted identifier that matches @[a-zA-Z]@@[a-zA-Z0-9_]@@*@ is equivalent to the unquoted identifier obtained by removing the double-quote (so @"myid"@ is equivalent to @myid@ and to @myId@ but different from @"myId"@). Inside a quoted identifier, the double-quote character can be repeated to escape it, so @"foo "" bar"@ is a valid identifier. + +p. *Warning*: _quoted identifiers_ allows to declare columns with arbitrary names, and those can sometime clash with specific names used by the server. For instance, when using conditional update, the server will respond with a result-set containing a special result named @"[applied]"@. If you've declared a column with such a name, this could potentially confuse some tools and should be avoided. In general, unquoted identifiers should be preferred but if you use quoted identifiers, it is strongly advised to avoid any name enclosed by squared brackets (like @"[applied]"@) and any name that looks like a function call (like @"f(x)"@). + +h3(#constants). Constants + +CQL defines the following kind of _constants_: strings, integers, floats, booleans, uuids and blobs: +* A string constant is an arbitrary sequence of characters characters enclosed by single-quote(@'@). One can include a single-quote in a string by repeating it, e.g. @'It''s raining today'@. Those are not to be confused with quoted identifiers that use double-quotes. +* An integer constant is defined by @'-'?[0-9]+@. +* A float constant is defined by @'-'?[0-9]+('.'[0-9]*)?([eE][+-]?[0-9+])?@. On top of that, @NaN@ and @Infinity@ are also float constants. +* A boolean constant is either @true@ or @false@ up to case-insensitivity (i.e. @True@ is a valid boolean constant). +* A "UUID":http://en.wikipedia.org/wiki/Universally_unique_identifier constant is defined by @hex{8}-hex{4}-hex{4}-hex{4}-hex{12}@ where @hex@ is an hexadecimal character, e.g. @[0-9a-fA-F]@ and @{4}@ is the number of such characters. +* A blob constant is an hexadecimal number defined by @0[xX](hex)+@ where @hex@ is an hexadecimal character, e.g. @[0-9a-fA-F]@. + +For how these constants are typed, see the "data types section":#types. + +h3. Comments + +A comment in CQL is a line beginning by either double dashes (@--@) or double slash (@//@). + +Multi-line comments are also supported through enclosure within @/*@ and @*/@ (but nesting is not supported). + +bc(sample). +-- This is a comment +// This is a comment too +/* This is + a multi-line comment */ + +h3(#statements). Statements + +CQL consists of statements. As in SQL, these statements can be divided in 3 categories: +* Data definition statements, that allow to set and change the way data is stored. +* Data manipulation statements, that allow to change data +* Queries, to look up data + +All statements end with a semicolon (@;@) but that semicolon can be omitted when dealing with a single statement. The supported statements are described in the following sections. When describing the grammar of said statements, we will reuse the non-terminal symbols defined below: + +bc(syntax).. + ::= any quoted or unquoted identifier, excluding reserved keywords + ::= ( '.')? + + ::= a string constant + ::= an integer constant + ::= a float constant + ::= | + ::= a uuid constant + ::= a boolean constant + ::= a blob constant + + ::= + | + | + | + | + ::= '?' + | ':' + ::= + | + | + | '(' ( (',' )*)? ')' + + ::= + | + | + ::= '{' ( ':' ( ',' ':' )* )? '}' + ::= '{' ( ( ',' )* )? '}' + ::= '[' ( ( ',' )* )? ']' + + ::= + + ::= (AND )* + ::= '=' ( | | ) +p. +Please note that not every possible productions of the grammar above will be valid in practice. Most notably, @@ and nested @@ are currently not allowed inside @@. + +p. A @@ can be either anonymous (a question mark (@?@)) or named (an identifier preceded by @:@). Both declare a bind variables for "prepared statements":#preparedStatement. The only difference between an anymous and a named variable is that a named one will be easier to refer to (how exactly depends on the client driver used). + +p. The @@ production is use by statement that create and alter keyspaces and tables. Each @@ is either a _simple_ one, in which case it just has a value, or a _map_ one, in which case it's value is a map grouping sub-options. The following will refer to one or the other as the _kind_ (_simple_ or _map_) of the property. + +p. A @@ will be used to identify a table. This is an identifier representing the table name that can be preceded by a keyspace name. The keyspace name, if provided, allow to identify a table in another keyspace than the currently active one (the currently active keyspace is set through the USE statement). + +p. For supported @@, see the section on "functions":#functions. + +p. Strings can be either enclosed with single quotes or two dollar characters. The second syntax has been introduced to allow strings that contain single quotes. Typical candidates for such strings are source code fragments for user-defined functions. + +__Sample:__ + +bc(sample).. + 'some string value' + + $$double-dollar string can contain single ' quotes$$ +p. + +h3(#preparedStatement). Prepared Statement + +CQL supports _prepared statements_. Prepared statement is an optimization that allows to parse a query only once but execute it multiple times with different concrete values. + +In a statement, each time a column value is expected (in the data manipulation and query statements), a @@ (see above) can be used instead. A statement with bind variables must then be _prepared_. Once it has been prepared, it can executed by providing concrete values for the bind variables. The exact procedure to prepare a statement and execute a prepared statement depends on the CQL driver used and is beyond the scope of this document. + +In addition to providing column values, bind markers may be used to provide values for @LIMIT@, @TIMESTAMP@, and @TTL@ clauses. If anonymous bind markers are used, the names for the query parameters will be @[limit]@, @[timestamp]@, and @[ttl]@, respectively. + + +h2(#dataDefinition). Data Definition + +h3(#createKeyspaceStmt). CREATE KEYSPACE + +__Syntax:__ + +bc(syntax).. + ::= CREATE KEYSPACE (IF NOT EXISTS)? WITH +p. +__Sample:__ + +bc(sample).. +CREATE KEYSPACE Excelsior + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; + +CREATE KEYSPACE Excalibur + WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 3} + AND durable_writes = false; +p. +The @CREATE KEYSPACE@ statement creates a new top-level _keyspace_. A keyspace is a namespace that defines a replication strategy and some options for a set of tables. Valid keyspaces names are identifiers composed exclusively of alphanumerical characters and whose length is lesser or equal to 32. Note that as identifiers, keyspace names are case insensitive: use a quoted identifier for case sensitive keyspace names. + +The supported @@ for @CREATE KEYSPACE@ are: + +|_. name |_. kind |_. mandatory |_. default |_. description| +|@replication@ | _map_ | yes | | The replication strategy and options to use for the keyspace. | +|@durable_writes@ | _simple_ | no | true | Whether to use the commit log for updates on this keyspace (disable this option at your own risk!). | + +The @replication@ @@ is mandatory. It must at least contains the @'class'@ sub-option which defines the replication strategy class to use. The rest of the sub-options depends on that replication strategy class. By default, Cassandra support the following @'class'@: +* @'SimpleStrategy'@: A simple strategy that defines a simple replication factor for the whole cluster. The only sub-options supported is @'replication_factor'@ to define that replication factor and is mandatory. +* @'NetworkTopologyStrategy'@: A replication strategy that allows to set the replication factor independently for each data-center. The rest of the sub-options are key-value pairs where each time the key is the name of a datacenter and the value the replication factor for that data-center. + +Attempting to create an already existing keyspace will return an error unless the @IF NOT EXISTS@ option is used. If it is used, the statement will be a no-op if the keyspace already exists. + +h3(#useStmt). USE + +__Syntax:__ + +bc(syntax). ::= USE + +__Sample:__ + +bc(sample). USE myApp; + +The @USE@ statement takes an existing keyspace name as argument and set it as the per-connection current working keyspace. All subsequent keyspace-specific actions will be performed in the context of the selected keyspace, unless "otherwise specified":#statements, until another USE statement is issued or the connection terminates. + +h3(#alterKeyspaceStmt). ALTER KEYSPACE + +__Syntax:__ + +bc(syntax).. + ::= ALTER KEYSPACE WITH +p. +__Sample:__ + +bc(sample).. +ALTER KEYSPACE Excelsior + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4}; + +p. +The @ALTER KEYSPACE@ statement alters the properties of an existing keyspace. The supported @@ are the same as for the "@CREATE KEYSPACE@":#createKeyspaceStmt statement. + + +h3(#dropKeyspaceStmt). DROP KEYSPACE + +__Syntax:__ + +bc(syntax). ::= DROP KEYSPACE ( IF EXISTS )? + +__Sample:__ + +bc(sample). DROP KEYSPACE myApp; + +A @DROP KEYSPACE@ statement results in the immediate, irreversible removal of an existing keyspace, including all column families in it, and all data contained in those column families. + +If the keyspace does not exists, the statement will return an error, unless @IF EXISTS@ is used in which case the operation is a no-op. + + +h3(#createTableStmt). CREATE TABLE + +__Syntax:__ + +bc(syntax).. + ::= CREATE ( TABLE | COLUMNFAMILY ) ( IF NOT EXISTS )? + '(' ( ',' )* ')' + ( WITH

    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 diff --git a/doc/modules/cassandra/pages/development/images/docs_editor.png b/doc/modules/cassandra/pages/development/images/docs_editor.png deleted file mode 100644 index 5b9997bcc4062b3619cba66eb74360b0b8845b8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106175 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

    where: + is a [string] representing either the keyspace that + already exists, or the keyspace in which the table that + already exists is. +
    is a [string] representing the name of the table that + already exists. If the query was attempting to create a + keyspace,
    will be present but will be the empty + string. + 0x2500 Unprepared: Can be thrown while a prepared statement tries to be + executed if the provide prepared statement ID is not known by + this host. The rest of the ERROR message body will be [short + bytes] representing the unknown ID. + +10. Changes from v2 + * stream id is now 2 bytes long (a [short] value), so the header is now 1 byte longer (9 bytes total). + * BATCH messages now have (like QUERY and EXECUTE) and a corresponding optional + parameters (see Section 4.1.7). + * User Defined Types and tuple types have to added to ResultSet metadata (see 4.2.5.2) and a + new section on the serialization format of UDT and tuple values has been added to the documentation + (Section 7). + * The serialization format for collection has changed (both the collection size and + the length of each argument is now 4 bytes long). See Section 6. + * QUERY, EXECUTE and BATCH messages can now optionally provide the default timestamp for the query. + As this feature is optionally enabled by clients, implementing it is at the discretion of the + client. + * QUERY and EXECUTE messages can now optionally provide the names for the values of the + query. As this feature is optionally enabled by clients, implementing it is at the discretion of the + client (Note that while the BATCH message has a flag for this, it actually doesn't work for BATCH, + see Section 4.1.7 for details). + * The format of "Schema_change" results (Section 4.2.5.5) and "SCHEMA_CHANGE" events (Section 4.2.6) + has been modified, and now includes changes related to user types. + diff --git a/doc/native_protocol_v4.spec b/doc/native_protocol_v4.spec new file mode 100644 index 000000000000..5670241655f8 --- /dev/null +++ b/doc/native_protocol_v4.spec @@ -0,0 +1,1191 @@ + + CQL BINARY PROTOCOL v4 + + +Table of Contents + + 1. Overview + 2. Frame header + 2.1. version + 2.2. flags + 2.3. stream + 2.4. opcode + 2.5. length + 3. Notations + 4. Messages + 4.1. Requests + 4.1.1. STARTUP + 4.1.2. AUTH_RESPONSE + 4.1.3. OPTIONS + 4.1.4. QUERY + 4.1.5. PREPARE + 4.1.6. EXECUTE + 4.1.7. BATCH + 4.1.8. REGISTER + 4.2. Responses + 4.2.1. ERROR + 4.2.2. READY + 4.2.3. AUTHENTICATE + 4.2.4. SUPPORTED + 4.2.5. RESULT + 4.2.5.1. Void + 4.2.5.2. Rows + 4.2.5.3. Set_keyspace + 4.2.5.4. Prepared + 4.2.5.5. Schema_change + 4.2.6. EVENT + 4.2.7. AUTH_CHALLENGE + 4.2.8. AUTH_SUCCESS + 5. Compression + 6. Data Type Serialization Formats + 7. User Defined Type Serialization + 8. Result paging + 9. Error codes + 10. Changes from v3 + + +1. Overview + + The CQL binary protocol is a frame based protocol. Frames are defined as: + + 0 8 16 24 32 40 + +---------+---------+---------+---------+---------+ + | version | flags | stream | opcode | + +---------+---------+---------+---------+---------+ + | length | + +---------+---------+---------+---------+ + | | + . ... body ... . + . . + . . + +---------------------------------------- + + The protocol is big-endian (network byte order). + + Each frame contains a fixed size header (9 bytes) followed by a variable size + body. The header is described in Section 2. The content of the body depends + on the header opcode value (the body can in particular be empty for some + opcode values). The list of allowed opcodes is defined in Section 2.4 and the + details of each corresponding message are described Section 4. + + The protocol distinguishes two types of frames: requests and responses. Requests + are those frames sent by the client to the server. Responses are those frames sent + by the server to the client. Note, however, that the protocol supports server pushes + (events) so a response does not necessarily come right after a client request. + + Note to client implementors: client libraries should always assume that the + body of a given frame may contain more data than what is described in this + document. It will however always be safe to ignore the remainder of the frame + body in such cases. The reason is that this may enable extending the protocol + with optional features without needing to change the protocol version. + + + +2. Frame header + +2.1. version + + The version is a single byte that indicates both the direction of the message + (request or response) and the version of the protocol in use. The most + significant bit of version is used to define the direction of the message: + 0 indicates a request, 1 indicates a response. This can be useful for protocol + analyzers to distinguish the nature of the packet from the direction in which + it is moving. The rest of that byte is the protocol version (4 for the protocol + defined in this document). In other words, for this version of the protocol, + version will be one of: + 0x04 Request frame for this protocol version + 0x84 Response frame for this protocol version + + Please note that while every message ships with the version, only one version + of messages is accepted on a given connection. In other words, the first message + exchanged (STARTUP) sets the version for the connection for the lifetime of this + connection. + + This document describes version 4 of the protocol. For the changes made since + version 3, see Section 10. + + +2.2. flags + + Flags applying to this frame. The flags have the following meaning (described + by the mask that allows selecting them): + 0x01: Compression flag. If set, the frame body is compressed. The actual + compression to use should have been set up beforehand through the + Startup message (which thus cannot be compressed; Section 4.1.1). + 0x02: Tracing flag. For a request frame, this indicates the client requires + tracing of the request. Note that only QUERY, PREPARE and EXECUTE queries + support tracing. Other requests will simply ignore the tracing flag if + set. If a request supports tracing and the tracing flag is set, the response + to this request will have the tracing flag set and contain tracing + information. + If a response frame has the tracing flag set, its body contains + a tracing ID. The tracing ID is a [uuid] and is the first thing in + the frame body. The rest of the body will then be the usual body + corresponding to the response opcode. + 0x04: Custom payload flag. For a request or response frame, this indicates + that a generic key-value custom payload for a custom QueryHandler + implementation is present in the frame. Such a custom payload is simply + ignored by the default QueryHandler implementation. + Currently, only QUERY, PREPARE, EXECUTE and BATCH requests support + payload. + Type of custom payload is [bytes map] (see below). + 0x08: Warning flag. The response contains warnings which were generated by the + server to go along with this response. + If a response frame has the warning flag set, its body will contain the + text of the warnings. The warnings are a [string list] and will be the + first value in the frame body if the tracing flag is not set, or directly + after the tracing ID if it is. + + The rest of flags is currently unused and ignored. + +2.3. stream + + A frame has a stream id (a [short] value). When sending request messages, this + stream id must be set by the client to a non-negative value (negative stream id + are reserved for streams initiated by the server; currently all EVENT messages + (section 4.2.6) have a streamId of -1). If a client sends a request message + with the stream id X, it is guaranteed that the stream id of the response to + that message will be X. + + This helps to enable the asynchronous nature of the protocol. If a client + sends multiple messages simultaneously (without waiting for responses), there + is no guarantee on the order of the responses. For instance, if the client + writes REQ_1, REQ_2, REQ_3 on the wire (in that order), the server might + respond to REQ_3 (or REQ_2) first. Assigning different stream ids to these 3 + requests allows the client to distinguish to which request a received answer + responds to. As there can only be 32768 different simultaneous streams, it is up + to the client to reuse stream id. + + Note that clients are free to use the protocol synchronously (i.e. wait for + the response to REQ_N before sending REQ_N+1). In that case, the stream id + can be safely set to 0. Clients should also feel free to use only a subset of + the 32768 maximum possible stream ids if it is simpler for its implementation. + +2.4. opcode + + An integer byte that distinguishes the actual message: + 0x00 ERROR + 0x01 STARTUP + 0x02 READY + 0x03 AUTHENTICATE + 0x05 OPTIONS + 0x06 SUPPORTED + 0x07 QUERY + 0x08 RESULT + 0x09 PREPARE + 0x0A EXECUTE + 0x0B REGISTER + 0x0C EVENT + 0x0D BATCH + 0x0E AUTH_CHALLENGE + 0x0F AUTH_RESPONSE + 0x10 AUTH_SUCCESS + + Messages are described in Section 4. + + (Note that there is no 0x04 message in this version of the protocol) + + +2.5. length + + A 4 byte integer representing the length of the body of the frame (note: + currently a frame is limited to 256MB in length). + + +3. Notations + + To describe the layout of the frame body for the messages in Section 4, we + define the following: + + [int] A 4 bytes integer + [long] A 8 bytes integer + [short] A 2 bytes unsigned integer + [string] A [short] n, followed by n bytes representing an UTF-8 + string. + [long string] An [int] n, followed by n bytes representing an UTF-8 string. + [uuid] A 16 bytes long uuid. + [string list] A [short] n, followed by n [string]. + [bytes] A [int] n, followed by n bytes if n >= 0. If n < 0, + no byte should follow and the value represented is `null`. + [value] A [int] n, followed by n bytes if n >= 0. + If n == -1 no byte should follow and the value represented is `null`. + If n == -2 no byte should follow and the value represented is + `not set` not resulting in any change to the existing value. + n < -2 is an invalid value and results in an error. + [short bytes] A [short] n, followed by n bytes if n >= 0. + + [option] A pair of where is a [short] representing + the option id and depends on that option (and can be + of size 0). The supported id (and the corresponding ) + will be described when this is used. + [option list] A [short] n, followed by n [option]. + [inet] An address (ip and port) to a node. It consists of one + [byte] n, that represents the address size, followed by n + [byte] representing the IP address (in practice n can only be + either 4 (IPv4) or 16 (IPv6)), following by one [int] + representing the port. + [consistency] A consistency level specification. This is a [short] + representing a consistency level with the following + correspondance: + 0x0000 ANY + 0x0001 ONE + 0x0002 TWO + 0x0003 THREE + 0x0004 QUORUM + 0x0005 ALL + 0x0006 LOCAL_QUORUM + 0x0007 EACH_QUORUM + 0x0008 SERIAL + 0x0009 LOCAL_SERIAL + 0x000A LOCAL_ONE + + [string map] A [short] n, followed by n pair where and + are [string]. + [string multimap] A [short] n, followed by n pair where is a + [string] and is a [string list]. + [bytes map] A [short] n, followed by n pair where is a + [string] and is a [bytes]. + + +4. Messages + +4.1. Requests + + Note that outside of their normal responses (described below), all requests + can get an ERROR message (Section 4.2.1) as response. + +4.1.1. STARTUP + + Initialize the connection. The server will respond by either a READY message + (in which case the connection is ready for queries) or an AUTHENTICATE message + (in which case credentials will need to be provided using AUTH_RESPONSE). + + This must be the first message of the connection, except for OPTIONS that can + be sent before to find out the options supported by the server. Once the + connection has been initialized, a client should not send any more STARTUP + messages. + + The body is a [string map] of options. Possible options are: + - "CQL_VERSION": the version of CQL to use. This option is mandatory and + currently the only version supported is "3.0.0". Note that this is + different from the protocol version. + - "COMPRESSION": the compression algorithm to use for frames (See section 5). + This is optional; if not specified no compression will be used. + - "NO_COMPACT": whether or not connection has to be established in compatibility + mode. This mode will make all Thrift and Compact Tables to be exposed as if + they were CQL Tables. This is optional; if not specified, the option will + not be used. + - "THROW_ON_OVERLOAD": In case of server overloaded with too many requests, by default the server puts + back pressure on the client connection. Instead, the server can send an OverloadedException error message back to + the client if this option is set to true. + + +4.1.2. AUTH_RESPONSE + + Answers a server authentication challenge. + + Authentication in the protocol is SASL based. The server sends authentication + challenges (a bytes token) to which the client answers with this message. Those + exchanges continue until the server accepts the authentication by sending a + AUTH_SUCCESS message after a client AUTH_RESPONSE. Note that the exchange + begins with the client sending an initial AUTH_RESPONSE in response to a + server AUTHENTICATE request. + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + The response to a AUTH_RESPONSE is either a follow-up AUTH_CHALLENGE message, + an AUTH_SUCCESS message or an ERROR message. + + +4.1.3. OPTIONS + + Asks the server to return which STARTUP options are supported. The body of an + OPTIONS message should be empty and the server will respond with a SUPPORTED + message. + + +4.1.4. QUERY + + Performs a CQL query. The body of the message must be: + + where is a [long string] representing the query and + must be + [[name_1]...[name_n]][][][][] + where: + - is the [consistency] level for the operation. + - is a [byte] whose bits define the options for this query and + in particular influence what the remainder of the message contains. + A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x01: Values. If set, a [short] followed by [value] + values are provided. Those values are used for bound variables in + the query. Optionally, if the 0x40 flag is present, each value + will be preceded by a [string] name, representing the name of + the marker the value must be bound to. + 0x02: Skip_metadata. If set, the Result Set returned as a response + to the query (if any) will have the NO_METADATA flag (see + Section 4.2.5.2). + 0x04: Page_size. If set, is an [int] + controlling the desired page size of the result (in CQL3 rows). + See the section on paging (Section 8) for more details. + 0x08: With_paging_state. If set, should be present. + is a [bytes] value that should have been returned + in a result set (Section 4.2.5.2). The query will be + executed but starting from a given paging state. This is also to + continue paging on a different node than the one where it + started (See Section 8 for more details). + 0x10: With serial consistency. If set, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consitency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else other than a + conditional update/insert. + 0x20: With default timestamp. If set, should be present. + is a [long] representing the default timestamp for the query + in microseconds (negative values are forbidden). This will + replace the server side assigned timestamp as default timestamp. + Note that a timestamp in the query itself will still override + this timestamp. This is entirely optional. + 0x40: With names for values. This only makes sense if the 0x01 flag is set and + is ignored otherwise. If present, the values from the 0x01 flag will + be preceded by a name (see above). Note that this is only useful for + QUERY requests where named bind markers are used; for EXECUTE statements, + since the names for the expected values was returned during preparation, + a client can always provide values in the right order without any names + and using this flag, while supported, is almost surely inefficient. + + Note that the consistency is ignored by some queries (USE, CREATE, ALTER, + TRUNCATE, ...). + + The server will respond to a QUERY message with a RESULT message, the content + of which depends on the query. + + +4.1.5. PREPARE + + Prepare a query for later execution (through EXECUTE). The body consists of + the CQL query to prepare as a [long string]. + + The server will respond with a RESULT message with a `prepared` kind (0x0004, + see Section 4.2.5). + + +4.1.6. EXECUTE + + Executes a prepared query. The body of the message must be: + + where is the prepared query ID. It's the [short bytes] returned as a + response to a PREPARE message. As for , it has the exact + same definition as in QUERY (see Section 4.1.4). + + The response from the server will be a RESULT message. + + +4.1.7. BATCH + + Allows executing a list of queries (prepared or not) as a batch (note that + only DML statements are accepted in a batch). The body of the message must + be: + ...[][] + where: + - is a [byte] indicating the type of batch to use: + - If == 0, the batch will be "logged". This is equivalent to a + normal CQL3 batch statement. + - If == 1, the batch will be "unlogged". + - If == 2, the batch will be a "counter" batch (and non-counter + statements will be rejected). + - is a [byte] whose bits define the options for this query and + in particular influence what the remainder of the message contains. It is similar + to the from QUERY and EXECUTE methods, except that the 4 rightmost + bits must always be 0 as their corresponding options do not make sense for + Batch. A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x10: With serial consistency. If set, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consistency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else other than a + conditional update/insert. + 0x20: With default timestamp. If set, should be present. + is a [long] representing the default timestamp for the query + in microseconds. This will replace the server side assigned + timestamp as default timestamp. Note that a timestamp in the query itself + will still override this timestamp. This is entirely optional. + 0x40: With names for values. If set, then all values for all must be + preceded by a [string] that have the same meaning as in QUERY + requests [IMPORTANT NOTE: this feature does not work and should not be + used. It is specified in a way that makes it impossible for the server + to implement. This will be fixed in a future version of the native + protocol. See https://issues.apache.org/jira/browse/CASSANDRA-10246 for + more details]. + - is a [short] indicating the number of following queries. + - ... are the queries to execute. A must be of the + form: + []...[] + where: + - is a [byte] indicating whether the following query is a prepared + one or not. value must be either 0 or 1. + - depends on the value of . If == 0, it should be + a [long string] query string (as in QUERY, the query string might contain + bind markers). Otherwise (that is, if == 1), it should be a + [short bytes] representing a prepared query ID. + - is a [short] indicating the number (possibly 0) of following values. + - is the optional name of the following . It must be present + if and only if the 0x40 flag is provided for the batch. + - is the [value] to use for bound variable i (of bound variable + if the 0x40 flag is used). + - is the [consistency] level for the operation. + - is only present if the 0x10 flag is set. In that case, + is the [consistency] level for the serial phase of + conditional updates. That consitency can only be either SERIAL or + LOCAL_SERIAL and if not present will defaults to SERIAL. This option will + be ignored for anything else other than a conditional update/insert. + + The server will respond with a RESULT message. + + +4.1.8. REGISTER + + Register this connection to receive some types of events. The body of the + message is a [string list] representing the event types to register for. See + section 4.2.6 for the list of valid event types. + + The response to a REGISTER message will be a READY message. + + Please note that if a client driver maintains multiple connections to a + Cassandra node and/or connections to multiple nodes, it is advised to + dedicate a handful of connections to receive events, but to *not* register + for events on all connections, as this would only result in receiving + multiple times the same event messages, wasting bandwidth. + + +4.2. Responses + + This section describes the content of the frame body for the different + responses. Please note that to make room for future evolution, clients should + support extra informations (that they should simply discard) to the one + described in this document at the end of the frame body. + +4.2.1. ERROR + + Indicates an error processing a request. The body of the message will be an + error code ([int]) followed by a [string] error message. Then, depending on + the exception, more content may follow. The error codes are defined in + Section 9, along with their additional content if any. + + +4.2.2. READY + + Indicates that the server is ready to process queries. This message will be + sent by the server either after a STARTUP message if no authentication is + required (if authentication is required, the server indicates readiness by + sending a AUTH_RESPONSE message). + + The body of a READY message is empty. + + +4.2.3. AUTHENTICATE + + Indicates that the server requires authentication, and which authentication + mechanism to use. + + The authentication is SASL based and thus consists of a number of server + challenges (AUTH_CHALLENGE, Section 4.2.7) followed by client responses + (AUTH_RESPONSE, Section 4.1.2). The initial exchange is however boostrapped + by an initial client response. The details of that exchange (including how + many challenge-response pairs are required) are specific to the authenticator + in use. The exchange ends when the server sends an AUTH_SUCCESS message or + an ERROR message. + + This message will be sent following a STARTUP message if authentication is + required and must be answered by a AUTH_RESPONSE message from the client. + + The body consists of a single [string] indicating the full class name of the + IAuthenticator in use. + + +4.2.4. SUPPORTED + + Indicates which startup options are supported by the server. This message + comes as a response to an OPTIONS message. + + The body of a SUPPORTED message is a [string multimap]. This multimap gives + for each of the supported STARTUP options, the list of supported values. + + +4.2.5. RESULT + + The result to a query (QUERY, PREPARE, EXECUTE or BATCH messages). + + The first element of the body of a RESULT message is an [int] representing the + `kind` of result. The rest of the body depends on the kind. The kind can be + one of: + 0x0001 Void: for results carrying no information. + 0x0002 Rows: for results to select queries, returning a set of rows. + 0x0003 Set_keyspace: the result to a `use` query. + 0x0004 Prepared: result to a PREPARE message. + 0x0005 Schema_change: the result to a schema altering query. + + The body for each kind (after the [int] kind) is defined below. + + +4.2.5.1. Void + + The rest of the body for a Void result is empty. It indicates that a query was + successful without providing more information. + + +4.2.5.2. Rows + + Indicates a set of rows. The rest of the body of a Rows result is: + + where: + - is composed of: + [][?...] + where: + - is an [int]. The bits of provides information on the + formatting of the remaining information. A flag is set if the bit + corresponding to its `mask` is set. Supported flags are, given their + mask: + 0x0001 Global_tables_spec: if set, only one table spec (keyspace + and table name) is provided as . If not + set, is not present. + 0x0002 Has_more_pages: indicates whether this is not the last + page of results and more should be retrieved. If set, the + will be present. The is a + [bytes] value that should be used in QUERY/EXECUTE to + continue paging and retrieve the remainder of the result for + this query (See Section 8 for more details). + 0x0004 No_metadata: if set, the is only composed of + these , the and optionally the + (depending on the Has_more_pages flag) but + no other information (so no nor ). + This will only ever be the case if this was requested + during the query (see QUERY and RESULT messages). + - is an [int] representing the number of columns selected + by the query that produced this result. It defines the number of + elements in and the number of elements for each row in . + - is present if the Global_tables_spec is set in + . It is composed of two [string] representing the + (unique) keyspace name and table name the columns belong to. + - specifies the columns returned in the query. There are + such column specifications that are composed of: + ()? + The initial and are two [string] and are only present + if the Global_tables_spec flag is not set. The is a + [string] and is an [option] that corresponds to the description + (what this description is depends a bit on the context: in results to + selects, this will be either the user chosen alias or the selection used + (often a colum name, but it can be a function call too). In results to + a PREPARE, this will be either the name of the corresponding bind variable + or the column name for the variable if it is "anonymous") and type of + the corresponding result. The option for is either a native + type (see below), in which case the option has no value, or a + 'custom' type, in which case the value is a [string] representing + the fully qualified class name of the type represented. Valid option + ids are: + 0x0000 Custom: the value is a [string], see above. + 0x0001 Ascii + 0x0002 Bigint + 0x0003 Blob + 0x0004 Boolean + 0x0005 Counter + 0x0006 Decimal + 0x0007 Double + 0x0008 Float + 0x0009 Int + 0x000B Timestamp + 0x000C Uuid + 0x000D Varchar + 0x000E Varint + 0x000F Timeuuid + 0x0010 Inet + 0x0011 Date + 0x0012 Time + 0x0013 Smallint + 0x0014 Tinyint + 0x0020 List: the value is an [option], representing the type + of the elements of the list. + 0x0021 Map: the value is two [option], representing the types of the + keys and values of the map + 0x0022 Set: the value is an [option], representing the type + of the elements of the set + 0x0030 UDT: the value is ... + where: + - is a [string] representing the keyspace name this + UDT is part of. + - is a [string] representing the UDT name. + - is a [short] representing the number of fields of + the UDT, and thus the number of pairs + following + - is a [string] representing the name of the + i_th field of the UDT. + - is an [option] representing the type of the + i_th field of the UDT. + 0x0031 Tuple: the value is ... where is a [short] + representing the number of values in the type, and + are [option] representing the type of the i_th component + of the tuple + + - is an [int] representing the number of rows present in this + result. Those rows are serialized in the part. + - is composed of ... where m is . + Each is composed of ... where n is + and where is a [bytes] representing the value + returned for the jth column of the ith row. In other words, + is composed of ( * ) [bytes]. + + +4.2.5.3. Set_keyspace + + The result to a `use` query. The body (after the kind [int]) is a single + [string] indicating the name of the keyspace that has been set. + + +4.2.5.4. Prepared + + The result to a PREPARE message. The body of a Prepared result is: + + where: + - is [short bytes] representing the prepared query ID. + - is composed of: + [...][?...] + where: + - is an [int]. The bits of provides information on the + formatting of the remaining information. A flag is set if the bit + corresponding to its `mask` is set. Supported masks and their flags + are: + 0x0001 Global_tables_spec: if set, only one table spec (keyspace + and table name) is provided as . If not + set, is not present. + - is an [int] representing the number of bind markers + in the prepared statement. It defines the number of + elements. + - is an [int] representing the number of + elements to follow. If this value is zero, at least one of the + partition key columns in the table that the statement acts on + did not have a corresponding bind marker (or the bind marker + was wrapped in a function call). + - is a short that represents the index of the bind marker + that corresponds to the partition key column in position i. + For example, a sequence of [2, 0, 1] indicates that the + table has three partition key columns; the full partition key + can be constructed by creating a composite of the values for + the bind markers at index 2, at index 0, and at index 1. + This allows implementations with token-aware routing to correctly + construct the partition key without needing to inspect table + metadata. + - is present if the Global_tables_spec is set in + . If present, it is composed of two [string]s. The first + [string] is the name of the keyspace that the statement acts on. + The second [string] is the name of the table that the columns + represented by the bind markers belong to. + - specifies the bind markers in the prepared statement. + There are such column specifications, each with the + following format: + ()? + The initial and are two [string] that are only + present if the Global_tables_spec flag is not set. The field + is a [string] that holds the name of the bind marker (if named), + or the name of the column, field, or expression that the bind marker + corresponds to (if the bind marker is "anonymous"). The + field is an [option] that represents the expected type of values for + the bind marker. See the Rows documentation (section 4.2.5.2) for + full details on the field. + + - is defined exactly the same as in the Rows + documentation (section 4.2.5.2). This describes the metadata for the + result set that will be returned when this prepared statement is executed. + Note that may be empty (have the No_metadata flag and + 0 columns, See section 4.2.5.2) and will be for any query that is not a + Select. In fact, there is never a guarantee that this will be non-empty, so + implementations should protect themselves accordingly. This result metadata + is an optimization that allows implementations to later execute the + prepared statement without requesting the metadata (see the Skip_metadata + flag in EXECUTE). Clients can safely discard this metadata if they do not + want to take advantage of that optimization. + + Note that the prepared query ID returned is global to the node on which the query + has been prepared. It can be used on any connection to that node + until the node is restarted (after which the query must be reprepared). + +4.2.5.5. Schema_change + + The result to a schema altering query (creation/update/drop of a + keyspace/table/index). The body (after the kind [int]) is the same + as the body for a "SCHEMA_CHANGE" event, so 3 strings: + + Please refer to section 4.2.6 below for the meaning of those fields. + + Note that a query to create or drop an index is considered to be a change + to the table the index is on. + + +4.2.6. EVENT + + An event pushed by the server. A client will only receive events for the + types it has REGISTERed to. The body of an EVENT message will start with a + [string] representing the event type. The rest of the message depends on the + event type. The valid event types are: + - "TOPOLOGY_CHANGE": events related to change in the cluster topology. + Currently, events are sent when new nodes are added to the cluster, and + when nodes are removed. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of change ("NEW_NODE" or "REMOVED_NODE") followed by the address of + the new/removed node. + - "STATUS_CHANGE": events related to change of node status. Currently, + up/down events are sent. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of status change ("UP" or "DOWN") followed by the address of the + concerned node. + - "SCHEMA_CHANGE": events related to schema change. After the event type, + the rest of the message will be where: + - is a [string] representing the type of changed involved. + It will be one of "CREATED", "UPDATED" or "DROPPED". + - is a [string] that can be one of "KEYSPACE", "TABLE", "TYPE", + "FUNCTION" or "AGGREGATE" and describes what has been modified + ("TYPE" stands for modifications related to user types, "FUNCTION" + for modifications related to user defined functions, "AGGREGATE" + for modifications related to user defined aggregates). + - depends on the preceding : + - If is "KEYSPACE", then will be a single [string] + representing the keyspace changed. + - If is "TABLE" or "TYPE", then + will be 2 [string]: the first one will be the keyspace + containing the affected object, and the second one will be the name + of said affected object (either the table, user type, function, or + aggregate name). + - If is "FUNCTION" or "AGGREGATE", multiple arguments follow: + - [string] keyspace containing the user defined function / aggregate + - [string] the function/aggregate name + - [string list] one string for each argument type (as CQL type) + + All EVENT messages have a streamId of -1 (Section 2.3). + + Please note that "NEW_NODE" and "UP" events are sent based on internal Gossip + communication and as such may be sent a short delay before the binary + protocol server on the newly up node is fully started. Clients are thus + advised to wait a short time before trying to connect to the node (1 second + should be enough), otherwise they may experience a connection refusal at + first. + +4.2.7. AUTH_CHALLENGE + + A server authentication challenge (see AUTH_RESPONSE (Section 4.1.2) for more + details). + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + Clients are expected to answer the server challenge with an AUTH_RESPONSE + message. + +4.2.8. AUTH_SUCCESS + + Indicates the success of the authentication phase. See Section 4.2.3 for more + details. + + The body of this message is a single [bytes] token holding final information + from the server that the client may require to finish the authentication + process. What that token contains and whether it can be null depends on the + actual authenticator used. + + +5. Compression + + Frame compression is supported by the protocol, but then only the frame body + is compressed (the frame header should never be compressed). + + Before being used, client and server must agree on a compression algorithm to + use, which is done in the STARTUP message. As a consequence, a STARTUP message + must never be compressed. However, once the STARTUP frame has been received + by the server, messages can be compressed (including the response to the STARTUP + request). Frames do not have to be compressed, however, even if compression has + been agreed upon (a server may only compress frames above a certain size at its + discretion). A frame body should be compressed if and only if the compressed + flag (see Section 2.2) is set. + + As of version 2 of the protocol, the following compressions are available: + - lz4 (https://code.google.com/p/lz4/). In that, note that the first four bytes + of the body will be the uncompressed length (followed by the compressed + bytes). + - snappy (https://code.google.com/p/snappy/). This compression might not be + available as it depends on a native lib (server-side) that might not be + avaivable on some installations. + + +6. Data Type Serialization Formats + + This sections describes the serialization formats for all CQL data types + supported by Cassandra through the native protocol. These serialization + formats should be used by client drivers to encode values for EXECUTE + messages. Cassandra will use these formats when returning values in + RESULT messages. + + All values are represented as [bytes] in EXECUTE and RESULT messages. + The [bytes] format includes an int prefix denoting the length of the value. + For that reason, the serialization formats described here will not include + a length component. + + For legacy compatibility reasons, note that most non-string types support + "empty" values (i.e. a value with zero length). An empty value is distinct + from NULL, which is encoded with a negative length. + + As with the rest of the native protocol, all encodings are big-endian. + +6.1. ascii + + A sequence of bytes in the ASCII range [0, 127]. Bytes with values outside of + this range will result in a validation error. + +6.2 bigint + + An eight-byte two's complement integer. + +6.3 blob + + Any sequence of bytes. + +6.4 boolean + + A single byte. A value of 0 denotes "false"; any other value denotes "true". + (However, it is recommended that a value of 1 be used to represent "true".) + +6.5 date + + An unsigned integer representing days with epoch centered at 2^31. + (unix epoch January 1st, 1970). + A few examples: + 0: -5877641-06-23 + 2^31: 1970-1-1 + 2^32: 5881580-07-11 + +6.6 decimal + + The decimal format represents an arbitrary-precision number. It contains an + [int] "scale" component followed by a varint encoding (see section 6.17) + of the unscaled value. The encoded value represents "E<-scale>". + In other words, " * 10 ^ (-1 * )". + +6.7 double + + An 8 byte floating point number in the IEEE 754 binary64 format. + +6.8 float + + A 4 byte floating point number in the IEEE 754 binary32 format. + +6.9 inet + + A 4 byte or 16 byte sequence denoting an IPv4 or IPv6 address, respectively. + +6.10 int + + A 4 byte two's complement integer. + +6.11 list + + A [int] n indicating the number of elements in the list, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.12 map + + A [int] n indicating the number of key/value pairs in the map, followed by + n entries. Each entry is composed of two [bytes] representing the key + and value. + +6.13 set + + A [int] n indicating the number of elements in the set, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.14 smallint + + A 2 byte two's complement integer. + +6.15 text + + A sequence of bytes conforming to the UTF-8 specifications. + +6.16 time + + An 8 byte two's complement long representing nanoseconds since midnight. + Valid values are in the range 0 to 86399999999999 + +6.17 timestamp + + An 8 byte two's complement integer representing a millisecond-precision + offset from the unix epoch (00:00:00, January 1st, 1970). Negative values + represent a negative offset from the epoch. + +6.18 timeuuid + + A 16 byte sequence representing a version 1 UUID as defined by RFC 4122. + +6.19 tinyint + + A 1 byte two's complement integer. + +6.20 tuple + + A sequence of [bytes] values representing the items in a tuple. The encoding + of each element depends on the data type for that position in the tuple. + Null values may be represented by using length -1 for the [bytes] + representation of an element. + +6.21 uuid + + A 16 byte sequence representing any valid UUID as defined by RFC 4122. + +6.22 varchar + + An alias of the "text" type. + +6.23 varint + + A variable-length two's complement encoding of a signed integer. + + The following examples may help implementors of this spec: + + Value | Encoding + ------|--------- + 0 | 0x00 + 1 | 0x01 + 127 | 0x7F + 128 | 0x0080 + 129 | 0x0081 + -1 | 0xFF + -128 | 0x80 + -129 | 0xFF7F + + Note that positive numbers must use a most-significant byte with a value + less than 0x80, because a most-significant bit of 1 indicates a negative + value. Implementors should pad positive values that have a MSB >= 0x80 + with a leading 0x00 byte. + + +7. User Defined Types + + This section describes the serialization format for User defined types (UDT), + as described in section 4.2.5.2. + + A UDT value is composed of successive [bytes] values, one for each field of the UDT + value (in the order defined by the type). A UDT value will generally have one value + for each field of the type it represents, but it is allowed to have less values than + the type has fields. + + +8. Result paging + + The protocol allows for paging the result of queries. For that, the QUERY and + EXECUTE messages have a value that indicate the desired + page size in CQL3 rows. + + If a positive value is provided for , the result set of the + RESULT message returned for the query will contain at most the + first rows of the query result. If that first page of results + contains the full result set for the query, the RESULT message (of kind `Rows`) + will have the Has_more_pages flag *not* set. However, if some results are not + part of the first response, the Has_more_pages flag will be set and the result + will contain a value. In that case, the value + should be used in a QUERY or EXECUTE message (that has the *same* query as + the original one or the behavior is undefined) to retrieve the next page of + results. + + Only CQL3 queries that return a result set (RESULT message with a Rows `kind`) + support paging. For other type of queries, the value is + ignored. + + Note to client implementors: + - While can be as low as 1, it will likely be detrimental + to performance to pick a value too low. A value below 100 is probably too + low for most use cases. + - Clients should not rely on the actual size of the result set returned to + decide if there are more results to fetch or not. Instead, they should always + check the Has_more_pages flag (unless they did not enable paging for the query + obviously). Clients should also not assert that no result will have more than + results. While the current implementation always respects + the exact value of , we reserve the right to return + slightly smaller or bigger pages in the future for performance reasons. + - The is specific to a protocol version and drivers should not + send a returned by a node using the protocol v3 to query a node + using the protocol v4 for instance. + + +9. Error codes + + Let us recall that an ERROR message is composed of [...] + (see 4.2.1 for details). The supported error codes, as well as any additional + information the message may contain after the are described below: + 0x0000 Server error: something unexpected happened. This indicates a + server-side bug. + 0x000A Protocol error: some client message triggered a protocol + violation (for instance a QUERY message is sent before a STARTUP + one has been sent) + 0x0100 Authentication error: authentication was required and failed. The + possible reason for failing depends on the authenticator in use, + which may or may not include more detail in the accompanying + error message. + 0x1000 Unavailable exception. The rest of the ERROR message body will be + + where: + is the [consistency] level of the query that triggered + the exception. + is an [int] representing the number of nodes that + should be alive to respect + is an [int] representing the number of replicas that + were known to be alive when the request had been + processed (since an unavailable exception has been + triggered, there will be < ) + 0x1001 Overloaded: the request cannot be processed because the + coordinator node is overloaded + 0x1002 Is_bootstrapping: the request was a read request but the + coordinator node is bootstrapping + 0x1003 Truncate_error: error during a truncation error. + 0x1100 Write_timeout: Timeout exception during a write request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + acknowledged the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is a [string] that describe the type of the write + that timed out. The value of that string can be one + of: + - "SIMPLE": the write was a non-batched + non-counter write. + - "BATCH": the write was a (logged) batch write. + If this type is received, it means the batch log + has been successfully written (otherwise a + "BATCH_LOG" type would have been sent instead). + - "UNLOGGED_BATCH": the write was an unlogged + batch. No batch log write has been attempted. + - "COUNTER": the write was a counter write + (batched or not). + - "BATCH_LOG": the timeout occurred during the + write to the batch log when a (logged) batch + write was requested. + - "CAS": the timeout occured during the Compare And Set write/update. + - "VIEW": the timeout occured when a write involves + VIEW update and failure to acqiure local view(MV) + lock for key within timeout + - "CDC": the timeout occured when cdc_total_space_in_mb is + exceeded when doing a write to data tracked by cdc. + 0x1200 Read_timeout: Timeout exception during a read request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + response is required to achieve . Please note that + it is possible to have >= if + is false. Also in the (unlikely) + case where is achieved but the coordinator node + times out while waiting for read-repair acknowledgement. + is a single byte. If its value is 0, it means + the replica that was asked for data has not + responded. Otherwise, the value is != 0. + 0x1300 Read_failure: A non-timeout exception during a read request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is an [int] representing the number of nodes that + experience a failure while executing the request. + is a single byte. If its value is 0, it means + the replica that was asked for data had not + responded. Otherwise, the value is != 0. + 0x1400 Function_failure: A (user defined) function failed during execution. + The rest of the ERROR message body will be + + where: + is the keyspace [string] of the failed function + is the name [string] of the failed function + [string list] one string for each argument type (as CQL type) of the failed function + 0x1500 Write_failure: A non-timeout exception during a write request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is an [int] representing the number of nodes that + experience a failure while executing the request. + is a [string] that describes the type of the write + that failed. The value of that string can be one + of: + - "SIMPLE": the write was a non-batched + non-counter write. + - "BATCH": the write was a (logged) batch write. + If this type is received, it means the batch log + has been successfully written (otherwise a + "BATCH_LOG" type would have been sent instead). + - "UNLOGGED_BATCH": the write was an unlogged + batch. No batch log write has been attempted. + - "COUNTER": the write was a counter write + (batched or not). + - "BATCH_LOG": the failure occured during the + write to the batch log when a (logged) batch + write was requested. + - "CAS": the failure occured during the Compare And Set write/update. + - "VIEW": the failure occured when a write involves + VIEW update and failure to acqiure local view(MV) + lock for key within timeout + - "CDC": the failure occured when cdc_total_space_in_mb is + exceeded when doing a write to data tracked by cdc. + + 0x2000 Syntax_error: The submitted query has a syntax error. + 0x2100 Unauthorized: The logged user doesn't have the right to perform + the query. + 0x2200 Invalid: The query is syntactically correct but invalid. + 0x2300 Config_error: The query is invalid because of some configuration issue + 0x2400 Already_exists: The query attempted to create a keyspace or a + table that was already existing. The rest of the ERROR message + body will be
    where: + is a [string] representing either the keyspace that + already exists, or the keyspace in which the table that + already exists is. +
    is a [string] representing the name of the table that + already exists. If the query was attempting to create a + keyspace,
    will be present but will be the empty + string. + 0x2500 Unprepared: Can be thrown while a prepared statement tries to be + executed if the provided prepared statement ID is not known by + this host. The rest of the ERROR message body will be [short + bytes] representing the unknown ID. + +10. Changes from v3 + + * Prepared responses (Section 4.2.5.4) now include partition-key bind indexes + * The format of "SCHEMA_CHANGE" events (Section 4.2.6) (and implicitly + "Schema_change" results (Section 4.2.5.5)) has been modified, and now includes + changes related to user defined functions and user defined aggregates. + * Read_failure error code was added. + * Function_failure error code was added. + * Add custom payload to frames for custom QueryHandler implementations (ignored by + Cassandra's standard QueryHandler) + * Add warnings to frames for responses for which the server generated a warning + during processing, which the client needs to address. + * Add the date and time data types + * Add the tinyint and smallint data types + * The returned in the v4 protocol is not compatible with the v3 + protocol. In other words, a returned by a node using protocol v4 + should not be used to query a node using protocol v3 (and vice-versa). + * Added THROW_ON_OVERLOAD startup option (Section 4.1.1). diff --git a/doc/native_protocol_v5.spec b/doc/native_protocol_v5.spec new file mode 100644 index 000000000000..d27945373323 --- /dev/null +++ b/doc/native_protocol_v5.spec @@ -0,0 +1,1281 @@ + + CQL BINARY PROTOCOL v5 + + +Table of Contents + + 1. Overview + 2. Frame header + 2.1. version + 2.2. flags + 2.3. stream + 2.4. opcode + 2.5. length + 3. Notations + 4. Messages + 4.1. Requests + 4.1.1. STARTUP + 4.1.2. AUTH_RESPONSE + 4.1.3. OPTIONS + 4.1.4. QUERY + 4.1.5. PREPARE + 4.1.6. EXECUTE + 4.1.7. BATCH + 4.1.8. REGISTER + 4.2. Responses + 4.2.1. ERROR + 4.2.2. READY + 4.2.3. AUTHENTICATE + 4.2.4. SUPPORTED + 4.2.5. RESULT + 4.2.5.1. Void + 4.2.5.2. Rows + 4.2.5.3. Set_keyspace + 4.2.5.4. Prepared + 4.2.5.5. Schema_change + 4.2.6. EVENT + 4.2.7. AUTH_CHALLENGE + 4.2.8. AUTH_SUCCESS + 5. Compression + 6. Data Type Serialization Formats + 7. User Defined Type Serialization + 8. Result paging + 9. Error codes + 10. Changes from v4 + + +1. Overview + + The CQL binary protocol is a frame based protocol. Frames are defined as: + + 0 8 16 24 32 40 + +---------+---------+---------+---------+---------+ + | version | flags | stream | opcode | + +---------+---------+---------+---------+---------+ + | length | + +---------+---------+---------+---------+ + | | + . ... body ... . + . . + . . + +---------------------------------------- + + The protocol is big-endian (network byte order). + + Each frame contains a fixed size header (9 bytes) followed by a variable size + body. The header is described in Section 2. The content of the body depends + on the header opcode value (the body can in particular be empty for some + opcode values). The list of allowed opcodes is defined in Section 2.4 and the + details of each corresponding message are described Section 4. + + The protocol distinguishes two types of frames: requests and responses. Requests + are those frames sent by the client to the server. Responses are those frames sent + by the server to the client. Note, however, that the protocol supports server pushes + (events) so a response does not necessarily come right after a client request. + + Note to client implementors: client libraries should always assume that the + body of a given frame may contain more data than what is described in this + document. It will however always be safe to ignore the remainder of the frame + body in such cases. The reason is that this may enable extending the protocol + with optional features without needing to change the protocol version. + + + +2. Frame header + +2.1. version + + The version is a single byte that indicates both the direction of the message + (request or response) and the version of the protocol in use. The most + significant bit of version is used to define the direction of the message: + 0 indicates a request, 1 indicates a response. This can be useful for protocol + analyzers to distinguish the nature of the packet from the direction in which + it is moving. The rest of that byte is the protocol version (5 for the protocol + defined in this document). In other words, for this version of the protocol, + version will be one of: + 0x05 Request frame for this protocol version + 0x85 Response frame for this protocol version + + Please note that while every message ships with the version, only one version + of messages is accepted on a given connection. In other words, the first message + exchanged (STARTUP) sets the version for the connection for the lifetime of this + connection. The single exception to this behavior is when a startup message + is sent with a version that is higher than the current server version. In this + case, the server will respond with its current version. + + This document describes version 5 of the protocol. For the changes made since + version 4, see Section 10. + + +2.2. flags + + Flags applying to this frame. The flags have the following meaning (described + by the mask that allows selecting them): + 0x01: Compression flag. If set, the frame body is compressed. The actual + compression to use should have been set up beforehand through the + Startup message (which thus cannot be compressed; Section 4.1.1). + 0x02: Tracing flag. For a request frame, this indicates the client requires + tracing of the request. Note that only QUERY, PREPARE and EXECUTE queries + support tracing. Other requests will simply ignore the tracing flag if + set. If a request supports tracing and the tracing flag is set, the response + to this request will have the tracing flag set and contain tracing + information. + If a response frame has the tracing flag set, its body contains + a tracing ID. The tracing ID is a [uuid] and is the first thing in + the frame body. The rest of the body will then be the usual body + corresponding to the response opcode. + 0x04: Custom payload flag. For a request or response frame, this indicates + that a generic key-value custom payload for a custom QueryHandler + implementation is present in the frame. Such a custom payload is simply + ignored by the default QueryHandler implementation. + Currently, only QUERY, PREPARE, EXECUTE and BATCH requests support + payload. + Type of custom payload is [bytes map] (see below). + 0x08: Warning flag. The response contains warnings which were generated by the + server to go along with this response. + If a response frame has the warning flag set, its body will contain the + text of the warnings. The warnings are a [string list] and will be the + first value in the frame body if the tracing flag is not set, or directly + after the tracing ID if it is. + 0x10: Use beta flag. Indicates that the client opts in to use protocol version + that is currently in beta. Server will respond with ERROR if protocol + version is marked as beta on server and client does not provide this flag. + + The rest of flags is currently unused and ignored. + +2.3. stream + + A frame has a stream id (a [short] value). When sending request messages, this + stream id must be set by the client to a non-negative value (negative stream id + are reserved for streams initiated by the server; currently all EVENT messages + (section 4.2.6) have a streamId of -1). If a client sends a request message + with the stream id X, it is guaranteed that the stream id of the response to + that message will be X. + + This helps to enable the asynchronous nature of the protocol. If a client + sends multiple messages simultaneously (without waiting for responses), there + is no guarantee on the order of the responses. For instance, if the client + writes REQ_1, REQ_2, REQ_3 on the wire (in that order), the server might + respond to REQ_3 (or REQ_2) first. Assigning different stream ids to these 3 + requests allows the client to distinguish to which request a received answer + responds to. As there can only be 32768 different simultaneous streams, it is up + to the client to reuse stream id. + + Note that clients are free to use the protocol synchronously (i.e. wait for + the response to REQ_N before sending REQ_N+1). In that case, the stream id + can be safely set to 0. Clients should also feel free to use only a subset of + the 32768 maximum possible stream ids if it is simpler for its implementation. + +2.4. opcode + + An integer byte that distinguishes the actual message: + 0x00 ERROR + 0x01 STARTUP + 0x02 READY + 0x03 AUTHENTICATE + 0x05 OPTIONS + 0x06 SUPPORTED + 0x07 QUERY + 0x08 RESULT + 0x09 PREPARE + 0x0A EXECUTE + 0x0B REGISTER + 0x0C EVENT + 0x0D BATCH + 0x0E AUTH_CHALLENGE + 0x0F AUTH_RESPONSE + 0x10 AUTH_SUCCESS + + Messages are described in Section 4. + + (Note that there is no 0x04 message in this version of the protocol) + + +2.5. length + + A 4 byte integer representing the length of the body of the frame (note: + currently a frame is limited to 256MB in length). + + +3. Notations + + To describe the layout of the frame body for the messages in Section 4, we + define the following: + + [int] A 4 bytes integer + [long] A 8 bytes integer + [byte] A 1 byte unsigned integer + [short] A 2 bytes unsigned integer + [string] A [short] n, followed by n bytes representing an UTF-8 + string. + [long string] An [int] n, followed by n bytes representing an UTF-8 string. + [uuid] A 16 bytes long uuid. + [string list] A [short] n, followed by n [string]. + [bytes] A [int] n, followed by n bytes if n >= 0. If n < 0, + no byte should follow and the value represented is `null`. + [value] A [int] n, followed by n bytes if n >= 0. + If n == -1 no byte should follow and the value represented is `null`. + If n == -2 no byte should follow and the value represented is + `not set` not resulting in any change to the existing value. + n < -2 is an invalid value and results in an error. + [short bytes] A [short] n, followed by n bytes if n >= 0. + + [unsigned vint] An unsigned variable length integer. A vint is encoded with the most significant byte (MSB) first. + The most significant byte will contains the information about how many extra bytes need to be read + as well as the most significant bits of the integer. + The number of extra bytes to read is encoded as 1 bits on the left side. + For example, if we need to read 2 more bytes the first byte will start with 110 + (e.g. 256 000 will be encoded on 3 bytes as [110]00011 11101000 00000000) + If the encoded integer is 8 bytes long the vint will be encoded on 9 bytes and the first + byte will be: 11111111 + + [vint] A signed variable length integer. This is encoded using zig-zag encoding and then sent + like an [unsigned vint]. Zig-zag encoding converts numbers as follows: + 0 = 0, -1 = 1, 1 = 2, -2 = 3, 2 = 4, -3 = 5, 3 = 6 and so forth. + The purpose is to send small negative values as small unsigned values, so that we save bytes on the wire. + To encode a value n use "(n >> 31) ^ (n << 1)" for 32 bit values, and "(n >> 63) ^ (n << 1)" + for 64 bit values where "^" is the xor operation, "<<" is the left shift operation and ">>" is + the arithemtic right shift operation (highest-order bit is replicated). + Decode with "(n >> 1) ^ -(n & 1)". + + [option] A pair of where is a [short] representing + the option id and depends on that option (and can be + of size 0). The supported id (and the corresponding ) + will be described when this is used. + [option list] A [short] n, followed by n [option]. + [inet] An address (ip and port) to a node. It consists of one + [byte] n, that represents the address size, followed by n + [byte] representing the IP address (in practice n can only be + either 4 (IPv4) or 16 (IPv6)), following by one [int] + representing the port. + [inetaddr] An IP address (without a port) to a node. It consists of one + [byte] n, that represents the address size, followed by n + [byte] representing the IP address. + [consistency] A consistency level specification. This is a [short] + representing a consistency level with the following + correspondance: + 0x0000 ANY + 0x0001 ONE + 0x0002 TWO + 0x0003 THREE + 0x0004 QUORUM + 0x0005 ALL + 0x0006 LOCAL_QUORUM + 0x0007 EACH_QUORUM + 0x0008 SERIAL + 0x0009 LOCAL_SERIAL + 0x000A LOCAL_ONE + + [string map] A [short] n, followed by n pair where and + are [string]. + [string multimap] A [short] n, followed by n pair where is a + [string] and is a [string list]. + [bytes map] A [short] n, followed by n pair where is a + [string] and is a [bytes]. + + +4. Messages + +4.1. Requests + + Note that outside of their normal responses (described below), all requests + can get an ERROR message (Section 4.2.1) as response. + +4.1.1. STARTUP + + Initialize the connection. The server will respond by either a READY message + (in which case the connection is ready for queries) or an AUTHENTICATE message + (in which case credentials will need to be provided using AUTH_RESPONSE). + + This must be the first message of the connection, except for OPTIONS that can + be sent before to find out the options supported by the server. Once the + connection has been initialized, a client should not send any more STARTUP + messages. + + The body is a [string map] of options. Possible options are: + - "CQL_VERSION": the version of CQL to use. This option is mandatory and + currently the only version supported is "3.0.0". Note that this is + different from the protocol version. + - "COMPRESSION": the compression algorithm to use for frames (See section 5). + This is optional; if not specified no compression will be used. + + +4.1.2. AUTH_RESPONSE + + Answers a server authentication challenge. + + Authentication in the protocol is SASL based. The server sends authentication + challenges (a bytes token) to which the client answers with this message. Those + exchanges continue until the server accepts the authentication by sending a + AUTH_SUCCESS message after a client AUTH_RESPONSE. Note that the exchange + begins with the client sending an initial AUTH_RESPONSE in response to a + server AUTHENTICATE request. + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + The response to a AUTH_RESPONSE is either a follow-up AUTH_CHALLENGE message, + an AUTH_SUCCESS message or an ERROR message. + + +4.1.3. OPTIONS + + Asks the server to return which STARTUP options are supported. The body of an + OPTIONS message should be empty and the server will respond with a SUPPORTED + message. + + +4.1.4. QUERY + + Performs a CQL query. The body of the message must be: + + where is a [long string] representing the query and + must be + [[name_1]...[name_n]][][][][][][] + where: + - is the [consistency] level for the operation. + - is a [int] whose bits define the options for this query and + in particular influence what the remainder of the message contains. + A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x0001: Values. If set, a [short] followed by [value] + values are provided. Those values are used for bound variables in + the query. Optionally, if the 0x40 flag is present, each value + will be preceded by a [string] name, representing the name of + the marker the value must be bound to. + 0x0002: Skip_metadata. If set, the Result Set returned as a response + to the query (if any) will have the NO_METADATA flag (see + Section 4.2.5.2). + 0x0004: Page_size. If set, is an [int] + controlling the desired page size of the result (in CQL3 rows). + See the section on paging (Section 8) for more details. + 0x0008: With_paging_state. If set, should be present. + is a [bytes] value that should have been returned + in a result set (Section 4.2.5.2). The query will be + executed but starting from a given paging state. This is also to + continue paging on a different node than the one where it + started (See Section 8 for more details). + 0x0010: With serial consistency. If set, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consitency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else other than a + conditional update/insert. + 0x0020: With default timestamp. If set, must be present. + is a [long] representing the default timestamp for the query + in microseconds (negative values are forbidden). This will + replace the server side assigned timestamp as default timestamp. + Note that a timestamp in the query itself will still override + this timestamp. This is entirely optional. + 0x0040: With names for values. This only makes sense if the 0x01 flag is set and + is ignored otherwise. If present, the values from the 0x01 flag will + be preceded by a name (see above). Note that this is only useful for + QUERY requests where named bind markers are used; for EXECUTE statements, + since the names for the expected values was returned during preparation, + a client can always provide values in the right order without any names + and using this flag, while supported, is almost surely inefficient. + 0x0080: With keyspace. If set, must be present. is a + [string] indicating the keyspace that the query should be executed in. + It supercedes the keyspace that the connection is bound to, if any. + 0x0100: With now in seconds. If set, must be present. + is an [int] representing the current time (now) for + the query. Affects TTL cell liveness in read queries and local deletion + time for tombstones and TTL cells in update requests. It's intended + for testing purposes and is optional. + + Note that the consistency is ignored by some queries (USE, CREATE, ALTER, + TRUNCATE, ...). + + The server will respond to a QUERY message with a RESULT message, the content + of which depends on the query. + + +4.1.5. PREPARE + + Prepare a query for later execution (through EXECUTE). The body of the message must be: + [] + where: + - is a [long string] representing the CQL query. + - is a [int] whose bits define the options for this statement and in particular + influence what the remainder of the message contains. + A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x01: With keyspace. If set, must be present. is a + [string] indicating the keyspace that the query should be executed in. + It supercedes the keyspace that the connection is bound to, if any. + + The server will respond with a RESULT message with a `prepared` kind (0x0004, + see Section 4.2.5). + + +4.1.6. EXECUTE + + Executes a prepared query. The body of the message must be: + + where + - is the prepared query ID. It's the [short bytes] returned as a + response to a PREPARE message. + - is the ID of the resultset metadata that was sent + along with response to PREPARE message. If a RESULT/Rows message reports + changed resultset metadata with the Metadata_changed flag, the reported new + resultset metadata must be used in subsequent executions. + - has the exact same definition as in QUERY (see Section 4.1.4). + + +4.1.7. BATCH + + Allows executing a list of queries (prepared or not) as a batch (note that + only DML statements are accepted in a batch). The body of the message must + be: + ...[][][][] + where: + - is a [byte] indicating the type of batch to use: + - If == 0, the batch will be "logged". This is equivalent to a + normal CQL3 batch statement. + - If == 1, the batch will be "unlogged". + - If == 2, the batch will be a "counter" batch (and non-counter + statements will be rejected). + - is a [int] whose bits define the options for this query and + in particular influence what the remainder of the message contains. It is similar + to the from QUERY and EXECUTE methods, except that the 4 rightmost + bits must always be 0 as their corresponding options do not make sense for + Batch. A flag is set if the bit corresponding to its `mask` is set. Supported + flags are, given their mask: + 0x0010: With serial consistency. If set, should be + present. is the [consistency] level for the + serial phase of conditional updates. That consistency can only be + either SERIAL or LOCAL_SERIAL and if not present, it defaults to + SERIAL. This option will be ignored for anything else other than a + conditional update/insert. + 0x0020: With default timestamp. If set, should be present. + is a [long] representing the default timestamp for the query + in microseconds. This will replace the server side assigned + timestamp as default timestamp. Note that a timestamp in the query itself + will still override this timestamp. This is entirely optional. + 0x0040: With names for values. If set, then all values for all must be + preceded by a [string] that have the same meaning as in QUERY + requests [IMPORTANT NOTE: this feature does not work and should not be + used. It is specified in a way that makes it impossible for the server + to implement. This will be fixed in a future version of the native + protocol. See https://issues.apache.org/jira/browse/CASSANDRA-10246 for + more details]. + 0x0080: With keyspace. If set, must be present. is a + [string] indicating the keyspace that the query should be executed in. + It supercedes the keyspace that the connection is bound to, if any. + 0x0100: With now in seconds. If set, must be present. + is an [int] representing the current time (now) for + the query. Affects TTL cell liveness in read queries and local deletion + time for tombstones and TTL cells in update requests. It's intended + for testing purposes and is optional. + - is a [short] indicating the number of following queries. + - ... are the queries to execute. A must be of the + form: + []...[] + where: + - is a [byte] indicating whether the following query is a prepared + one or not. value must be either 0 or 1. + - depends on the value of . If == 0, it should be + a [long string] query string (as in QUERY, the query string might contain + bind markers). Otherwise (that is, if == 1), it should be a + [short bytes] representing a prepared query ID. + - is a [short] indicating the number (possibly 0) of following values. + - is the optional name of the following . It must be present + if and only if the 0x40 flag is provided for the batch. + - is the [value] to use for bound variable i (of bound variable + if the 0x40 flag is used). + - is the [consistency] level for the operation. + - is only present if the 0x10 flag is set. In that case, + is the [consistency] level for the serial phase of + conditional updates. That consitency can only be either SERIAL or + LOCAL_SERIAL and if not present will defaults to SERIAL. This option will + be ignored for anything else other than a conditional update/insert. + + The server will respond with a RESULT message. + + +4.1.8. REGISTER + + Register this connection to receive some types of events. The body of the + message is a [string list] representing the event types to register for. See + section 4.2.6 for the list of valid event types. + + The response to a REGISTER message will be a READY message. + + Please note that if a client driver maintains multiple connections to a + Cassandra node and/or connections to multiple nodes, it is advised to + dedicate a handful of connections to receive events, but to *not* register + for events on all connections, as this would only result in receiving + multiple times the same event messages, wasting bandwidth. + + +4.2. Responses + + This section describes the content of the frame body for the different + responses. Please note that to make room for future evolution, clients should + support extra informations (that they should simply discard) to the one + described in this document at the end of the frame body. + +4.2.1. ERROR + + Indicates an error processing a request. The body of the message will be an + error code ([int]) followed by a [string] error message. Then, depending on + the exception, more content may follow. The error codes are defined in + Section 9, along with their additional content if any. + + +4.2.2. READY + + Indicates that the server is ready to process queries. This message will be + sent by the server either after a STARTUP message if no authentication is + required (if authentication is required, the server indicates readiness by + sending a AUTH_RESPONSE message). + + The body of a READY message is empty. + + +4.2.3. AUTHENTICATE + + Indicates that the server requires authentication, and which authentication + mechanism to use. + + The authentication is SASL based and thus consists of a number of server + challenges (AUTH_CHALLENGE, Section 4.2.7) followed by client responses + (AUTH_RESPONSE, Section 4.1.2). The initial exchange is however boostrapped + by an initial client response. The details of that exchange (including how + many challenge-response pairs are required) are specific to the authenticator + in use. The exchange ends when the server sends an AUTH_SUCCESS message or + an ERROR message. + + This message will be sent following a STARTUP message if authentication is + required and must be answered by a AUTH_RESPONSE message from the client. + + The body consists of a single [string] indicating the full class name of the + IAuthenticator in use. + + +4.2.4. SUPPORTED + + Indicates which startup options are supported by the server. This message + comes as a response to an OPTIONS message. + + The body of a SUPPORTED message is a [string multimap]. This multimap gives + for each of the supported STARTUP options, the list of supported values. It + also includes: + - "PROTOCOL_VERSIONS": the list of native protocol versions that are + supported, encoded as the version number followed by a slash and the + version description. For example: 3/v3, 4/v4, 5/v5-beta. If a version is + in beta, it will have the word "beta" in its description. + + +4.2.5. RESULT + + The result to a query (QUERY, PREPARE, EXECUTE or BATCH messages). + + The first element of the body of a RESULT message is an [int] representing the + `kind` of result. The rest of the body depends on the kind. The kind can be + one of: + 0x0001 Void: for results carrying no information. + 0x0002 Rows: for results to select queries, returning a set of rows. + 0x0003 Set_keyspace: the result to a `use` query. + 0x0004 Prepared: result to a PREPARE message. + 0x0005 Schema_change: the result to a schema altering query. + + The body for each kind (after the [int] kind) is defined below. + + +4.2.5.1. Void + + The rest of the body for a Void result is empty. It indicates that a query was + successful without providing more information. + + +4.2.5.2. Rows + + Indicates a set of rows. The rest of the body of a Rows result is: + + where: + - is composed of: + [][][?...] + where: + - is an [int]. The bits of provides information on the + formatting of the remaining information. A flag is set if the bit + corresponding to its `mask` is set. Supported flags are, given their + mask: + 0x0001 Global_tables_spec: if set, only one table spec (keyspace + and table name) is provided as . If not + set, is not present. + 0x0002 Has_more_pages: indicates whether this is not the last + page of results and more should be retrieved. If set, the + will be present. The is a + [bytes] value that should be used in QUERY/EXECUTE to + continue paging and retrieve the remainder of the result for + this query (See Section 8 for more details). + 0x0004 No_metadata: if set, the is only composed of + these , the and optionally the + (depending on the Has_more_pages flag) but + no other information (so no nor ). + This will only ever be the case if this was requested + during the query (see QUERY and RESULT messages). + 0x0008 Metadata_changed: if set, the No_metadata flag has to be unset + and has to be supplied. This flag is to be + used to avoid a roundtrip in case of metadata changes for queries + that requested metadata to be skipped. + - is an [int] representing the number of columns selected + by the query that produced this result. It defines the number of + elements in and the number of elements for each row in . + - is [short bytes] representing the new, changed resultset + metadata. The new metadata ID must also be used in subsequent executions of + the corresponding prepared statement, if any. + - is present if the Global_tables_spec is set in + . It is composed of two [string] representing the + (unique) keyspace name and table name the columns belong to. + - specifies the columns returned in the query. There are + such column specifications that are composed of: + ()? + The initial and are two [string] and are only present + if the Global_tables_spec flag is not set. The is a + [string] and is an [option] that corresponds to the description + (what this description is depends a bit on the context: in results to + selects, this will be either the user chosen alias or the selection used + (often a colum name, but it can be a function call too). In results to + a PREPARE, this will be either the name of the corresponding bind variable + or the column name for the variable if it is "anonymous") and type of + the corresponding result. The option for is either a native + type (see below), in which case the option has no value, or a + 'custom' type, in which case the value is a [string] representing + the fully qualified class name of the type represented. Valid option + ids are: + 0x0000 Custom: the value is a [string], see above. + 0x0001 Ascii + 0x0002 Bigint + 0x0003 Blob + 0x0004 Boolean + 0x0005 Counter + 0x0006 Decimal + 0x0007 Double + 0x0008 Float + 0x0009 Int + 0x000B Timestamp + 0x000C Uuid + 0x000D Varchar + 0x000E Varint + 0x000F Timeuuid + 0x0010 Inet + 0x0011 Date + 0x0012 Time + 0x0013 Smallint + 0x0014 Tinyint + 0x0015 Duration + 0x0020 List: the value is an [option], representing the type + of the elements of the list. + 0x0021 Map: the value is two [option], representing the types of the + keys and values of the map + 0x0022 Set: the value is an [option], representing the type + of the elements of the set + 0x0030 UDT: the value is ... + where: + - is a [string] representing the keyspace name this + UDT is part of. + - is a [string] representing the UDT name. + - is a [short] representing the number of fields of + the UDT, and thus the number of pairs + following + - is a [string] representing the name of the + i_th field of the UDT. + - is an [option] representing the type of the + i_th field of the UDT. + 0x0031 Tuple: the value is ... where is a [short] + representing the number of values in the type, and + are [option] representing the type of the i_th component + of the tuple + + - is an [int] representing the number of rows present in this + result. Those rows are serialized in the part. + - is composed of ... where m is . + Each is composed of ... where n is + and where is a [bytes] representing the value + returned for the jth column of the ith row. In other words, + is composed of ( * ) [bytes]. + + +4.2.5.3. Set_keyspace + + The result to a `use` query. The body (after the kind [int]) is a single + [string] indicating the name of the keyspace that has been set. + + +4.2.5.4. Prepared + + The result to a PREPARE message. The body of a Prepared result is: + + where: + - is [short bytes] representing the prepared query ID. + - is [short bytes] representing the resultset metadata ID. + - is composed of: + [...][?...] + where: + - is an [int]. The bits of provides information on the + formatting of the remaining information. A flag is set if the bit + corresponding to its `mask` is set. Supported masks and their flags + are: + 0x0001 Global_tables_spec: if set, only one table spec (keyspace + and table name) is provided as . If not + set, is not present. + - is an [int] representing the number of bind markers + in the prepared statement. It defines the number of + elements. + - is an [int] representing the number of + elements to follow. If this value is zero, at least one of the + partition key columns in the table that the statement acts on + did not have a corresponding bind marker (or the bind marker + was wrapped in a function call). + - is a short that represents the index of the bind marker + that corresponds to the partition key column in position i. + For example, a sequence of [2, 0, 1] indicates that the + table has three partition key columns; the full partition key + can be constructed by creating a composite of the values for + the bind markers at index 2, at index 0, and at index 1. + This allows implementations with token-aware routing to correctly + construct the partition key without needing to inspect table + metadata. + - is present if the Global_tables_spec is set in + . If present, it is composed of two [string]s. The first + [string] is the name of the keyspace that the statement acts on. + The second [string] is the name of the table that the columns + represented by the bind markers belong to. + - specifies the bind markers in the prepared statement. + There are such column specifications, each with the + following format: + ()? + The initial and are two [string] that are only + present if the Global_tables_spec flag is not set. The field + is a [string] that holds the name of the bind marker (if named), + or the name of the column, field, or expression that the bind marker + corresponds to (if the bind marker is "anonymous"). The + field is an [option] that represents the expected type of values for + the bind marker. See the Rows documentation (section 4.2.5.2) for + full details on the field. + + - is defined exactly the same as in the Rows + documentation (section 4.2.5.2). This describes the metadata for the + result set that will be returned when this prepared statement is executed. + Note that may be empty (have the No_metadata flag and + 0 columns, See section 4.2.5.2) and will be for any query that is not a + Select. In fact, there is never a guarantee that this will be non-empty, so + implementations should protect themselves accordingly. This result metadata + is an optimization that allows implementations to later execute the + prepared statement without requesting the metadata (see the Skip_metadata + flag in EXECUTE). Clients can safely discard this metadata if they do not + want to take advantage of that optimization. + + Note that the prepared query ID returned is global to the node on which the query + has been prepared. It can be used on any connection to that node + until the node is restarted (after which the query must be reprepared). + +4.2.5.5. Schema_change + + The result to a schema altering query (creation/update/drop of a + keyspace/table/index). The body (after the kind [int]) is the same + as the body for a "SCHEMA_CHANGE" event, so 3 strings: + + Please refer to section 4.2.6 below for the meaning of those fields. + + Note that a query to create or drop an index is considered to be a change + to the table the index is on. + + +4.2.6. EVENT + + An event pushed by the server. A client will only receive events for the + types it has REGISTERed to. The body of an EVENT message will start with a + [string] representing the event type. The rest of the message depends on the + event type. The valid event types are: + - "TOPOLOGY_CHANGE": events related to change in the cluster topology. + Currently, events are sent when new nodes are added to the cluster, and + when nodes are removed. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of change ("NEW_NODE" or "REMOVED_NODE") followed by the address of + the new/removed node. + - "STATUS_CHANGE": events related to change of node status. Currently, + up/down events are sent. The body of the message (after the event type) + consists of a [string] and an [inet], corresponding respectively to the + type of status change ("UP" or "DOWN") followed by the address of the + concerned node. + - "SCHEMA_CHANGE": events related to schema change. After the event type, + the rest of the message will be where: + - is a [string] representing the type of changed involved. + It will be one of "CREATED", "UPDATED" or "DROPPED". + - is a [string] that can be one of "KEYSPACE", "TABLE", "TYPE", + "FUNCTION" or "AGGREGATE" and describes what has been modified + ("TYPE" stands for modifications related to user types, "FUNCTION" + for modifications related to user defined functions, "AGGREGATE" + for modifications related to user defined aggregates). + - depends on the preceding : + - If is "KEYSPACE", then will be a single [string] + representing the keyspace changed. + - If is "TABLE" or "TYPE", then + will be 2 [string]: the first one will be the keyspace + containing the affected object, and the second one will be the name + of said affected object (either the table, user type, function, or + aggregate name). + - If is "FUNCTION" or "AGGREGATE", multiple arguments follow: + - [string] keyspace containing the user defined function / aggregate + - [string] the function/aggregate name + - [string list] one string for each argument type (as CQL type) + + All EVENT messages have a streamId of -1 (Section 2.3). + + Please note that "NEW_NODE" and "UP" events are sent based on internal Gossip + communication and as such may be sent a short delay before the binary + protocol server on the newly up node is fully started. Clients are thus + advised to wait a short time before trying to connect to the node (1 second + should be enough), otherwise they may experience a connection refusal at + first. + +4.2.7. AUTH_CHALLENGE + + A server authentication challenge (see AUTH_RESPONSE (Section 4.1.2) for more + details). + + The body of this message is a single [bytes] token. The details of what this + token contains (and when it can be null/empty, if ever) depends on the actual + authenticator used. + + Clients are expected to answer the server challenge with an AUTH_RESPONSE + message. + +4.2.8. AUTH_SUCCESS + + Indicates the success of the authentication phase. See Section 4.2.3 for more + details. + + The body of this message is a single [bytes] token holding final information + from the server that the client may require to finish the authentication + process. What that token contains and whether it can be null depends on the + actual authenticator used. + + +5. Compression + + Frame compression is supported by the protocol, but then only the frame body + is compressed (the frame header should never be compressed). + + Before being used, client and server must agree on a compression algorithm to + use, which is done in the STARTUP message. As a consequence, a STARTUP message + must never be compressed. However, once the STARTUP frame has been received + by the server, messages can be compressed (including the response to the STARTUP + request). Frames do not have to be compressed, however, even if compression has + been agreed upon (a server may only compress frames above a certain size at its + discretion). A frame body should be compressed if and only if the compressed + flag (see Section 2.2) is set. + + As of version 2 of the protocol, the following compressions are available: + - lz4 (https://code.google.com/p/lz4/). In that, note that the first four bytes + of the body will be the uncompressed length (followed by the compressed + bytes). + - snappy (https://code.google.com/p/snappy/). This compression might not be + available as it depends on a native lib (server-side) that might not be + avaivable on some installations. + + +6. Data Type Serialization Formats + + This sections describes the serialization formats for all CQL data types + supported by Cassandra through the native protocol. These serialization + formats should be used by client drivers to encode values for EXECUTE + messages. Cassandra will use these formats when returning values in + RESULT messages. + + All values are represented as [bytes] in EXECUTE and RESULT messages. + The [bytes] format includes an int prefix denoting the length of the value. + For that reason, the serialization formats described here will not include + a length component. + + For legacy compatibility reasons, note that most non-string types support + "empty" values (i.e. a value with zero length). An empty value is distinct + from NULL, which is encoded with a negative length. + + As with the rest of the native protocol, all encodings are big-endian. + +6.1. ascii + + A sequence of bytes in the ASCII range [0, 127]. Bytes with values outside of + this range will result in a validation error. + +6.2 bigint + + An eight-byte two's complement integer. + +6.3 blob + + Any sequence of bytes. + +6.4 boolean + + A single byte. A value of 0 denotes "false"; any other value denotes "true". + (However, it is recommended that a value of 1 be used to represent "true".) + +6.5 date + + An unsigned integer representing days with epoch centered at 2^31. + (unix epoch January 1st, 1970). + A few examples: + 0: -5877641-06-23 + 2^31: 1970-1-1 + 2^32: 5881580-07-11 + +6.6 decimal + + The decimal format represents an arbitrary-precision number. It contains an + [int] "scale" component followed by a varint encoding (see section 6.17) + of the unscaled value. The encoded value represents "E<-scale>". + In other words, " * 10 ^ (-1 * )". + +6.7 double + + An 8 byte floating point number in the IEEE 754 binary64 format. + +6.8 duration + + A duration is composed of 3 signed variable length integers ([vint]s). + The first [vint] represents a number of months, the second [vint] represents + a number of days, and the last [vint] represents a number of nanoseconds. + The number of months and days must be valid 32 bits integers whereas the + number of nanoseconds must be a valid 64 bits integer. + A duration can either be positive or negative. If a duration is positive + all the integers must be positive or zero. If a duration is + negative all the numbers must be negative or zero. + +6.9 float + + A 4 byte floating point number in the IEEE 754 binary32 format. + +6.10 inet + + A 4 byte or 16 byte sequence denoting an IPv4 or IPv6 address, respectively. + +6.11 int + + A 4 byte two's complement integer. + +6.12 list + + A [int] n indicating the number of elements in the list, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.13 map + + A [int] n indicating the number of key/value pairs in the map, followed by + n entries. Each entry is composed of two [bytes] representing the key + and value. + +6.14 set + + A [int] n indicating the number of elements in the set, followed by n + elements. Each element is [bytes] representing the serialized value. + +6.15 smallint + + A 2 byte two's complement integer. + +6.16 text + + A sequence of bytes conforming to the UTF-8 specifications. + +6.17 time + + An 8 byte two's complement long representing nanoseconds since midnight. + Valid values are in the range 0 to 86399999999999 + +6.18 timestamp + + An 8 byte two's complement integer representing a millisecond-precision + offset from the unix epoch (00:00:00, January 1st, 1970). Negative values + represent a negative offset from the epoch. + +6.19 timeuuid + + A 16 byte sequence representing a version 1 UUID as defined by RFC 4122. + +6.20 tinyint + + A 1 byte two's complement integer. + +6.21 tuple + + A sequence of [bytes] values representing the items in a tuple. The encoding + of each element depends on the data type for that position in the tuple. + Null values may be represented by using length -1 for the [bytes] + representation of an element. + +6.22 uuid + + A 16 byte sequence representing any valid UUID as defined by RFC 4122. + +6.23 varchar + + An alias of the "text" type. + +6.24 varint + + A variable-length two's complement encoding of a signed integer. + + The following examples may help implementors of this spec: + + Value | Encoding + ------|--------- + 0 | 0x00 + 1 | 0x01 + 127 | 0x7F + 128 | 0x0080 + 129 | 0x0081 + -1 | 0xFF + -128 | 0x80 + -129 | 0xFF7F + + Note that positive numbers must use a most-significant byte with a value + less than 0x80, because a most-significant bit of 1 indicates a negative + value. Implementors should pad positive values that have a MSB >= 0x80 + with a leading 0x00 byte. + + +7. User Defined Types + + This section describes the serialization format for User defined types (UDT), + as described in section 4.2.5.2. + + A UDT value is composed of successive [bytes] values, one for each field of the UDT + value (in the order defined by the type). A UDT value will generally have one value + for each field of the type it represents, but it is allowed to have less values than + the type has fields. + + +8. Result paging + + The protocol allows for paging the result of queries. For that, the QUERY and + EXECUTE messages have a value that indicate the desired + page size in CQL3 rows. + + If a positive value is provided for , the result set of the + RESULT message returned for the query will contain at most the + first rows of the query result. If that first page of results + contains the full result set for the query, the RESULT message (of kind `Rows`) + will have the Has_more_pages flag *not* set. However, if some results are not + part of the first response, the Has_more_pages flag will be set and the result + will contain a value. In that case, the value + should be used in a QUERY or EXECUTE message (that has the *same* query as + the original one or the behavior is undefined) to retrieve the next page of + results. + + Only CQL3 queries that return a result set (RESULT message with a Rows `kind`) + support paging. For other type of queries, the value is + ignored. + + Note to client implementors: + - While can be as low as 1, it will likely be detrimental + to performance to pick a value too low. A value below 100 is probably too + low for most use cases. + - Clients should not rely on the actual size of the result set returned to + decide if there are more results to fetch or not. Instead, they should always + check the Has_more_pages flag (unless they did not enable paging for the query + obviously). Clients should also not assert that no result will have more than + results. While the current implementation always respects + the exact value of , we reserve the right to return + slightly smaller or bigger pages in the future for performance reasons. + - The is specific to a protocol version and drivers should not + send a returned by a node using the protocol v3 to query a node + using the protocol v4 for instance. + + +9. Error codes + + Let us recall that an ERROR message is composed of [...] + (see 4.2.1 for details). The supported error codes, as well as any additional + information the message may contain after the are described below: + 0x0000 Server error: something unexpected happened. This indicates a + server-side bug. + 0x000A Protocol error: some client message triggered a protocol + violation (for instance a QUERY message is sent before a STARTUP + one has been sent) + 0x0100 Authentication error: authentication was required and failed. The + possible reason for failing depends on the authenticator in use, + which may or may not include more detail in the accompanying + error message. + 0x1000 Unavailable exception. The rest of the ERROR message body will be + + where: + is the [consistency] level of the query that triggered + the exception. + is an [int] representing the number of nodes that + should be alive to respect + is an [int] representing the number of replicas that + were known to be alive when the request had been + processed (since an unavailable exception has been + triggered, there will be < ) + 0x1001 Overloaded: the request cannot be processed because the + coordinator node is overloaded + 0x1002 Is_bootstrapping: the request was a read request but the + coordinator node is bootstrapping + 0x1003 Truncate_error: error during a truncation error. + 0x1100 Write_timeout: Timeout exception during a write request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + acknowledged the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is a [string] that describe the type of the write + that timed out. The value of that string can be one + of: + - "SIMPLE": the write was a non-batched + non-counter write. + - "BATCH": the write was a (logged) batch write. + If this type is received, it means the batch log + has been successfully written (otherwise a + "BATCH_LOG" type would have been sent instead). + - "UNLOGGED_BATCH": the write was an unlogged + batch. No batch log write has been attempted. + - "COUNTER": the write was a counter write + (batched or not). + - "BATCH_LOG": the timeout occurred during the + write to the batch log when a (logged) batch + write was requested. + - "CAS": the timeout occured during the Compare And Set write/update. + - "VIEW": the timeout occured when a write involves + VIEW update and failure to acqiure local view(MV) + lock for key within timeout + - "CDC": the timeout occured when cdc_total_space_in_mb is + exceeded when doing a write to data tracked by cdc. + is a [short] that describes the number of contentions occured during the CAS operation. + The field only presents when the is "CAS". + 0x1200 Read_timeout: Timeout exception during a read request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + response is required to achieve . Please note that + it is possible to have >= if + is false. Also in the (unlikely) + case where is achieved but the coordinator node + times out while waiting for read-repair acknowledgement. + is a single byte. If its value is 0, it means + the replica that was asked for data has not + responded. Otherwise, the value is != 0. + 0x1300 Read_failure: A non-timeout exception during a read request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is a map of endpoint to failure reason codes. This maps + the endpoints of the replica nodes that failed when + executing the request to a code representing the reason + for the failure. The map is encoded starting with an [int] n + followed by n pairs of where + is an [inetaddr] and is a [short]. + is a single byte. If its value is 0, it means + the replica that was asked for data had not + responded. Otherwise, the value is != 0. + 0x1400 Function_failure: A (user defined) function failed during execution. + The rest of the ERROR message body will be + + where: + is the keyspace [string] of the failed function + is the name [string] of the failed function + [string list] one string for each argument type (as CQL type) of the failed function + 0x1500 Write_failure: A non-timeout exception during a write request. The rest + of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + answered the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + is a map of endpoint to failure reason codes. This maps + the endpoints of the replica nodes that failed when + executing the request to a code representing the reason + for the failure. The map is encoded starting with an [int] n + followed by n pairs of where + is an [inetaddr] and is a [short]. + is a [string] that describes the type of the write + that failed. The value of that string can be one + of: + - "SIMPLE": the write was a non-batched + non-counter write. + - "BATCH": the write was a (logged) batch write. + If this type is received, it means the batch log + has been successfully written (otherwise a + "BATCH_LOG" type would have been sent instead). + - "UNLOGGED_BATCH": the write was an unlogged + batch. No batch log write has been attempted. + - "COUNTER": the write was a counter write + (batched or not). + - "BATCH_LOG": the failure occured during the + write to the batch log when a (logged) batch + write was requested. + - "CAS": the failure occured during the Compare And Set write/update. + - "VIEW": the failure occured when a write involves + VIEW update and failure to acqiure local view(MV) + lock for key within timeout + - "CDC": the failure occured when cdc_total_space_in_mb is + exceeded when doing a write to data tracked by cdc. + 0x1600 CDC_WRITE_FAILURE: // todo + 0x1700 CAS_WRITE_UNKNOWN: An exception occured due to contended Compare And Set write/update. + The CAS operation was only partially completed and the operation may or may not get completed by + the contending CAS write or SERIAL/LOCAL_SERIAL read. The rest of the ERROR message body will be + + where: + is the [consistency] level of the query having triggered + the exception. + is an [int] representing the number of nodes having + acknowledged the request. + is an [int] representing the number of replicas whose + acknowledgement is required to achieve . + + 0x2000 Syntax_error: The submitted query has a syntax error. + 0x2100 Unauthorized: The logged user doesn't have the right to perform + the query. + 0x2200 Invalid: The query is syntactically correct but invalid. + 0x2300 Config_error: The query is invalid because of some configuration issue + 0x2400 Already_exists: The query attempted to create a keyspace or a + table that was already existing. The rest of the ERROR message + body will be
    where: + is a [string] representing either the keyspace that + already exists, or the keyspace in which the table that + already exists is. +
    is a [string] representing the name of the table that + already exists. If the query was attempting to create a + keyspace,
    will be present but will be the empty + string. + 0x2500 Unprepared: Can be thrown while a prepared statement tries to be + executed if the provided prepared statement ID is not known by + this host. The rest of the ERROR message body will be [short + bytes] representing the unknown ID. + +10. Changes from v4 + + * Beta protocol flag for v5 native protocol is added (Section 2.2) + * in Read_failure and Write_failure error message bodies (Section 9) + has been replaced with . The maps node IP addresses to + a failure reason code which indicates why the request failed on that node. + * Enlarged flag's bitmaps for QUERY, EXECUTE and BATCH messages from [byte] to [int] + (Sections 4.1.4, 4.1.6 and 4.1.7). + * Add the duration data type + * Added keyspace field in QUERY, PREPARE, and BATCH messages (Sections 4.1.4, 4.1.5, and 4.1.7). + * Added now_in_seconds field in QUERY, EXECUTE, and BATCH messages (Sections 4.1.4, 4.1.6, and 4.1.7). + * Added [int] flags field in PREPARE message (Section 4.1.5). + * Removed NO_COMPACT startup option (Section 4.1.1.) diff --git a/doc/source/_static/extra.css b/doc/source/_static/extra.css new file mode 100644 index 000000000000..5e40dd7d2901 --- /dev/null +++ b/doc/source/_static/extra.css @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +div:not(.highlight) > pre { + background: #fff; + border: 1px solid #e1e4e5; + color: #404040; + margin: 1px 0 24px 0; + overflow-x: auto; + padding: 12px 12px; + font-size: 12px; +} + +a.reference.internal code.literal { + border: none; + font-size: 12px; + color: #2980B9; + padding: 0; + background: none; +} + +a.reference.internal:visited code.literal { + color: #9B59B6; + padding: 0; + background: none; +} + + +/* override table width restrictions */ +.wy-table-responsive table td, .wy-table-responsive table th { + white-space: normal; +} + +.wy-table-responsive { + margin-bottom: 24px; + max-width: 100%; + overflow: visible; +} + +table.contentstable { + margin: 0; +} + +td.rightcolumn { + padding-left: 30px; +} + +div#wipwarning { + font-size: 14px; + border: 1px solid #ecc; + color: #f66; + background: #ffe8e8; + padding: 10px 30px; + margin-bottom: 30px; +} +.content-container{ + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + width:100%; +} diff --git a/doc/source/_templates/indexcontent.html~b7c4271b16801acff77c020ebf2daf82b1592184 b/doc/source/_templates/indexcontent.html~b7c4271b16801acff77c020ebf2daf82b1592184 new file mode 100644 index 000000000000..71fd2d869dd3 --- /dev/null +++ b/doc/source/_templates/indexcontent.html~b7c4271b16801acff77c020ebf2daf82b1592184 @@ -0,0 +1,100 @@ +{% extends "layout.html" %} +{# Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. #} +{%- block htmltitle -%} +{{ html_title }} +{%- endblock -%} +{% block body %} +

    {{ docstitle|e }}

    +

    + {% trans %}Welcome! This is the documentation for Apache Cassandra {{ version }}.{% endtrans %} +

    +
    This documentation is a work-in-progress. + Contributions are welcome.
    + +

    Main documentation

    + +
    + +
    + Search the documentation: + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + +

    Meta informations

    + + + +{% endblock %} diff --git a/doc/source/_theme/cassandra_theme/theme.conf b/doc/source/_theme/cassandra_theme/theme.conf new file mode 100644 index 000000000000..42c0704b507d --- /dev/null +++ b/doc/source/_theme/cassandra_theme/theme.conf @@ -0,0 +1,3 @@ +[theme] +inherit = basic +stylesheet = none diff --git a/doc/source/_util/cql.py b/doc/source/_util/cql.py new file mode 100644 index 000000000000..b1c8cde2a172 --- /dev/null +++ b/doc/source/_util/cql.py @@ -0,0 +1,267 @@ +# -*- coding: utf-8 -*- +""" + CQL pygments lexer + ~~~~~~~~~~~~~~~~~~ + + Lexer for the Cassandra Query Language (CQL). + + This is heavily inspired from the pygments SQL lexer (and the Postgres one in particular) but adapted to CQL + keywords and specificities. + + TODO: This has been hacked quickly, but once it's more tested, we could submit it upstream. + In particular, we have alot of keywords whose meaning depends on the context and we could potentially improve + their handling. For instance, SET is a keyword, but also a type name (that's why currently we also consider + map and list as keywords, not types; we could disambiguate by looking if there is a '<' afterwards). Or things + like USERS, which can is used in some documentation example as a table name but is a keyword too (we could + only consider it a keyword if after LIST for instance). Similarly, type nanes are not reserved, so they and + are sometime used as column identifiers (also, timestamp is both a type and a keyword). I "think" we can + somewhat disambiguate through "states", but unclear how far it's worth going. + + We could also add the predefined functions? +""" + +import re + +from pygments.lexer import Lexer, RegexLexer, do_insertions, bygroups, words +from pygments.token import Punctuation, Whitespace, Error, \ + Text, Comment, Operator, Keyword, Name, String, Number, Generic, Literal +from pygments.lexers import get_lexer_by_name, ClassNotFound +from pygments.util import iteritems + +__all__ = [ 'CQLLexer' ] + +language_re = re.compile(r"\s+LANGUAGE\s+'?(\w+)'?", re.IGNORECASE) + +KEYWORDS = ( + 'SELECT', + 'FROM', + 'AS', + 'WHERE', + 'AND', + 'KEY', + 'KEYS', + 'ENTRIES', + 'FULL', + 'INSERT', + 'UPDATE', + 'WITH', + 'LIMIT', + 'PER', + 'PARTITION', + 'USING', + 'USE', + 'DISTINCT', + 'COUNT', + 'SET', + 'BEGIN', + 'UNLOGGED', + 'BATCH', + 'APPLY', + 'TRUNCATE', + 'DELETE', + 'IN', + 'CREATE', + 'KEYSPACE', + 'SCHEMA', + 'KEYSPACES', + 'COLUMNFAMILY', + 'TABLE', + 'MATERIALIZED', + 'VIEW', + 'INDEX', + 'CUSTOM', + 'ON', + 'TO', + 'DROP', + 'PRIMARY', + 'INTO', + 'VALUES', + 'TIMESTAMP', + 'TTL', + 'CAST', + 'ALTER', + 'RENAME', + 'ADD', + 'TYPE', + 'COMPACT', + 'STORAGE', + 'ORDER', + 'BY', + 'ASC', + 'DESC', + 'ALLOW', + 'FILTERING', + 'IF', + 'IS', + 'CONTAINS', + 'GRANT', + 'ALL', + 'PERMISSION', + 'PERMISSIONS', + 'OF', + 'REVOKE', + 'MODIFY', + 'AUTHORIZE', + 'DESCRIBE', + 'EXECUTE', + 'NORECURSIVE', + 'MBEAN', + 'MBEANS', + 'USER', + 'USERS', + 'ROLE', + 'ROLES', + 'SUPERUSER', + 'NOSUPERUSER', + 'PASSWORD', + 'LOGIN', + 'NOLOGIN', + 'OPTIONS', + 'CLUSTERING', + 'TOKEN', + 'WRITETIME', + 'NULL', + 'NOT', + 'EXISTS', + 'MAP', + 'LIST', + 'NAN', + 'INFINITY', + 'TUPLE', + 'TRIGGER', + 'STATIC', + 'FROZEN', + 'FUNCTION', + 'FUNCTIONS', + 'AGGREGATE', + 'SFUNC', + 'STYPE', + 'FINALFUNC', + 'INITCOND', + 'RETURNS', + 'CALLED', + 'INPUT', + 'LANGUAGE', + 'OR', + 'REPLACE', + 'JSON', + 'LIKE', +) + +DATATYPES = ( + 'ASCII', + 'BIGINT', + 'BLOB', + 'BOOLEAN', + 'COUNTER', + 'DATE', + 'DECIMAL', + 'DOUBLE', + 'EMPTY', + 'FLOAT', + 'INET', + 'INT', + 'SMALLINT', + 'TEXT', + 'TIME', + 'TIMESTAMP', + 'TIMEUUID', + 'TINYINT', + 'UUID', + 'VARCHAR', + 'VARINT', +) + +def language_callback(lexer, match): + """Parse the content of a $-string using a lexer + + The lexer is chosen looking for a nearby LANGUAGE or assumed as + java if no LANGUAGE has been found. + """ + l = None + m = language_re.match(lexer.text[max(0, match.start()-100):match.start()]) + if m is not None: + l = lexer._get_lexer(m.group(1)) + else: + l = lexer._get_lexer('java') + + # 1 = $, 2 = delimiter, 3 = $ + yield (match.start(1), String, match.group(1)) + yield (match.start(2), String.Delimiter, match.group(2)) + yield (match.start(3), String, match.group(3)) + # 4 = string contents + if l: + for x in l.get_tokens_unprocessed(match.group(4)): + yield x + else: + yield (match.start(4), String, match.group(4)) + # 5 = $, 6 = delimiter, 7 = $ + yield (match.start(5), String, match.group(5)) + yield (match.start(6), String.Delimiter, match.group(6)) + yield (match.start(7), String, match.group(7)) + + +class CQLLexer(RegexLexer): + """ + Lexer for the Cassandra Query Language. + """ + + name = 'Cassandra Query Language' + aliases = ['cql'] + filenames = ['*.cql'] + mimetypes = ['text/x-cql'] + + flags = re.IGNORECASE + tokens = { + 'root': [ + (r'\s+', Text), + (r'--.*\n?', Comment.Single), + (r'//.*\n?', Comment.Single), + (r'/\*', Comment.Multiline, 'multiline-comments'), + (r'(' + '|'.join(s.replace(" ", "\s+") + for s in DATATYPES) + + r')\b', Name.Builtin), + (words(KEYWORDS, suffix=r'\b'), Keyword), + (r'[+*/<>=~!@#%^&|`?-]+', Operator), + (r'\$\d+', Name.Variable), + + # Using Number instead of the more accurate Literal because the latter don't seem to e highlighted in most + # styles + (r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}', Number), # UUIDs + (r'0x[0-9a-fA-F]+', Number), # Blobs + + (r'([0-9]*\.[0-9]*|[0-9]+)(e[+-]?[0-9]+)?', Number.Float), + (r'[0-9]+', Number.Integer), + (r"((?:E|U&)?)(')", bygroups(String.Affix, String.Single), 'string'), + # quoted identifier + (r'((?:U&)?)(")', bygroups(String.Affix, String.Name), 'quoted-ident'), + (r'(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)', language_callback), + (r'[a-z_]\w*', Name), + (r'[;:()\[\]{},.]', Punctuation), + ], + 'multiline-comments': [ + (r'/\*', Comment.Multiline, 'multiline-comments'), + (r'\*/', Comment.Multiline, '#pop'), + (r'[^/*]+', Comment.Multiline), + (r'[/*]', Comment.Multiline) + ], + 'string': [ + (r"[^']+", String.Single), + (r"''", String.Single), + (r"'", String.Single, '#pop'), + ], + 'quoted-ident': [ + (r'[^"]+', String.Name), + (r'""', String.Name), + (r'"', String.Name, '#pop'), + ], + } + + def get_tokens_unprocessed(self, text, *args): + # Have a copy of the entire text to be used by `language_callback`. + self.text = text + for x in RegexLexer.get_tokens_unprocessed(self, text, *args): + yield x + + def _get_lexer(self, lang): + return get_lexer_by_name(lang, **self.options) diff --git a/doc/source/architecture/Figure_1_guarantees.jpg b/doc/source/architecture/Figure_1_guarantees.jpg new file mode 100644 index 0000000000000000000000000000000000000000..859342da5e6555ee08d15a14f439f29112fd4f55 GIT binary patch literal 17993 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 +distributed storage key-value system. Each node in the Dynamo system has three +main components: + +- Request coordination over a partitioned dataset +- Ring membership and failure detection +- A local persistence (storage) engine + +Cassandra primarily draws from the first two clustering components, +while using a storage engine based on a Log Structured Merge Tree +(`LSM `_). +In particular, Cassandra relies on Dynamo style: + +- Dataset partitioning using consistent hashing +- Multi-master replication using versioned data and tunable consistency +- Distributed cluster membership and failure detection via a gossip protocol +- Incremental scale-out on commodity hardware + +Cassandra was designed this way to meet large-scale (PiB+) business-critical +storage requirements. In particular, as applications demanded full global +replication of petabyte scale datasets along with always available low-latency +reads and writes, it became imperative to design a new kind of database model +as the relational database systems of the time struggled to meet the new +requirements of global scale applications. + +Dataset Partitioning: Consistent Hashing +---------------------------------------- + +Cassandra achieves horizontal scalability by +`partitioning `_ +all data stored in the system using a hash function. Each partition is replicated +to multiple physical nodes, often across failure domains such as racks and even +datacenters. As every replica can independently accept mutations to every key +that it owns, every key must be versioned. Unlike in the original Dynamo paper +where deterministic versions and vector clocks were used to reconcile concurrent +updates to a key, Cassandra uses a simpler last write wins model where every +mutation is timestamped (including deletes) and then the latest version of data +is the "winning" value. Formally speaking, Cassandra uses a Last-Write-Wins Element-Set +conflict-free replicated data type for each CQL row (a.k.a `LWW-Element-Set CRDT +`_) +to resolve conflicting mutations on replica sets. + + .. _consistent-hashing-token-ring: + +Consistent Hashing using a Token Ring +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Cassandra partitions data over storage nodes using a special form of hashing +called `consistent hashing `_. +In naive data hashing, you typically allocate keys to buckets by taking a hash +of the key modulo the number of buckets. For example, if you want to distribute +data to 100 nodes using naive hashing you might assign every node to a bucket +between 0 and 100, hash the input key modulo 100, and store the data on the +associated bucket. In this naive scheme, however, adding a single node might +invalidate almost all of the mappings. + +Cassandra instead maps every node to one or more tokens on a continuous hash +ring, and defines ownership by hashing a key onto the ring and then "walking" +the ring in one direction, similar to the `Chord +`_ +algorithm. The main difference of consistent hashing to naive data hashing is +that when the number of nodes (buckets) to hash into changes, consistent +hashing only has to move a small fraction of the keys. + +For example, if we have an eight node cluster with evenly spaced tokens, and +a replication factor (RF) of 3, then to find the owning nodes for a key we +first hash that key to generate a token (which is just the hash of the key), +and then we "walk" the ring in a clockwise fashion until we encounter three +distinct nodes, at which point we have found all the replicas of that key. +This example of an eight node cluster with `RF=3` can be visualized as follows: + +.. figure:: images/ring.svg + :scale: 75 % + :alt: Dynamo Ring + +You can see that in a Dynamo like system, ranges of keys, also known as **token +ranges**, map to the same physical set of nodes. In this example, all keys that +fall in the token range excluding token 1 and including token 2 (`range(t1, t2]`) +are stored on nodes 2, 3 and 4. + +Multiple Tokens per Physical Node (a.k.a. `vnodes`) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Simple single token consistent hashing works well if you have many physical +nodes to spread data over, but with evenly spaced tokens and a small number of +physical nodes, incremental scaling (adding just a few nodes of capacity) is +difficult because there are no token selections for new nodes that can leave +the ring balanced. Cassandra seeks to avoid token imbalance because uneven +token ranges lead to uneven request load. For example, in the previous example +there is no way to add a ninth token without causing imbalance; instead we +would have to insert ``8`` tokens in the midpoints of the existing ranges. + +The Dynamo paper advocates for the use of "virtual nodes" to solve this +imbalance problem. Virtual nodes solve the problem by assigning multiple +tokens in the token ring to each physical node. By allowing a single physical +node to take multiple positions in the ring, we can make small clusters look +larger and therefore even with a single physical node addition we can make it +look like we added many more nodes, effectively taking many smaller pieces of +data from more ring neighbors when we add even a single node. + +Cassandra introduces some nomenclature to handle these concepts: + +- **Token**: A single position on the `dynamo` style hash ring. +- **Endpoint**: A single physical IP and port on the network. +- **Host ID**: A unique identifier for a single "physical" node, usually + present at one `Endpoint` and containing one or more `Tokens`. +- **Virtual Node** (or **vnode**): A `Token` on the hash ring owned by the same + physical node, one with the same `Host ID`. + +The mapping of **Tokens** to **Endpoints** gives rise to the **Token Map** +where Cassandra keeps track of what ring positions map to which physical +endpoints. For example, in the following figure we can represent an eight node +cluster using only four physical nodes by assigning two tokens to every node: + +.. figure:: images/vnodes.svg + :scale: 75 % + :alt: Virtual Tokens Ring + + +Multiple tokens per physical node provide the following benefits: + +1. When a new node is added it accepts approximately equal amounts of data from + other nodes in the ring, resulting in equal distribution of data across the + cluster. +2. When a node is decommissioned, it loses data roughly equally to other members + of the ring, again keeping equal distribution of data across the cluster. +3. If a node becomes unavailable, query load (especially token aware query load), + is evenly distributed across many other nodes. + +Multiple tokens, however, can also have disadvantages: + +1. Every token introduces up to ``2 * (RF - 1)`` additional neighbors on the + token ring, which means that there are more combinations of node failures + where we lose availability for a portion of the token ring. The more tokens + you have, `the higher the probability of an outage + `_. +2. Cluster-wide maintenance operations are often slowed. For example, as the + number of tokens per node is increased, the number of discrete repair + operations the cluster must do also increases. +3. Performance of operations that span token ranges could be affected. + +Note that in Cassandra ``2.x``, the only token allocation algorithm available +was picking random tokens, which meant that to keep balance the default number +of tokens per node had to be quite high, at ``256``. This had the effect of +coupling many physical endpoints together, increasing the risk of +unavailability. That is why in ``3.x +`` the new deterministic token allocator +was added which intelligently picks tokens such that the ring is optimally +balanced while requiring a much lower number of tokens per physical node. + + +Multi-master Replication: Versioned Data and Tunable Consistency +---------------------------------------------------------------- + +Cassandra replicates every partition of data to many nodes across the cluster +to maintain high availability and durability. When a mutation occurs, the +coordinator hashes the partition key to determine the token range the data +belongs to and then replicates the mutation to the replicas of that data +according to the :ref:`Replication Strategy `. + +All replication strategies have the notion of a **replication factor** (``RF``), +which indicates to Cassandra how many copies of the partition should exist. +For example with a ``RF=3`` keyspace, the data will be written to three +distinct **replicas**. Replicas are always chosen such that they are distinct +physical nodes which is achieved by skipping virtual nodes if needed. +Replication strategies may also choose to skip nodes present in the same failure +domain such as racks or datacenters so that Cassandra clusters can tolerate +failures of whole racks and even datacenters of nodes. + +.. _replication-strategy: + +Replication Strategy +^^^^^^^^^^^^^^^^^^^^ + +Cassandra supports pluggable **replication strategies**, which determine which +physical nodes act as replicas for a given token range. Every keyspace of +data has its own replication strategy. All production deployments should use +the :ref:`network-topology-strategy` while the :ref:`simple-strategy` replication +strategy is useful only for testing clusters where you do not yet know the +datacenter layout of the cluster. + +.. _network-topology-strategy: + +``NetworkTopologyStrategy`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``NetworkTopologyStrategy`` allows a replication factor to be specified for each +datacenter in the cluster. Even if your cluster only uses a single datacenter, +``NetworkTopologyStrategy`` should be preferred over ``SimpleStrategy`` to make it +easier to add new physical or virtual datacenters to the cluster later. + +In addition to allowing the replication factor to be specified individually by +datacenter, ``NetworkTopologyStrategy`` also attempts to choose replicas within a +datacenter from different racks as specified by the :ref:`Snitch `. If +the number of racks is greater than or equal to the replication factor for the +datacenter, each replica is guaranteed to be chosen from a different rack. +Otherwise, each rack will hold at least one replica, but some racks may hold +more than one. Note that this rack-aware behavior has some potentially +`surprising implications +`_. For example, if +there are not an even number of nodes in each rack, the data load on the +smallest rack may be much higher. Similarly, if a single node is bootstrapped +into a brand new rack, it will be considered a replica for the entire ring. +For this reason, many operators choose to configure all nodes in a single +availability zone or similar failure domain as a single "rack". + +.. _simple-strategy: + +``SimpleStrategy`` +~~~~~~~~~~~~~~~~~~ + +``SimpleStrategy`` allows a single integer ``replication_factor`` to be defined. This determines the number of nodes that +should contain a copy of each row. For example, if ``replication_factor`` is 3, then three different nodes should store +a copy of each row. + +``SimpleStrategy`` treats all nodes identically, ignoring any configured datacenters or racks. To determine the replicas +for a token range, Cassandra iterates through the tokens in the ring, starting with the token range of interest. For +each token, it checks whether the owning node has been added to the set of replicas, and if it has not, it is added to +the set. This process continues until ``replication_factor`` distinct nodes have been added to the set of replicas. + +.. _transient-replication: + +Transient Replication +~~~~~~~~~~~~~~~~~~~~~ + +Transient replication is an experimental feature in Cassandra 4.0 not present +in the original Dynamo paper. It allows you to configure a subset of replicas +to only replicate data that hasn't been incrementally repaired. This allows you +to decouple data redundancy from availability. For instance, if you have a +keyspace replicated at rf 3, and alter it to rf 5 with 2 transient replicas, +you go from being able to tolerate one failed replica to being able to tolerate +two, without corresponding increase in storage usage. This is because 3 nodes +will replicate all the data for a given token range, and the other 2 will only +replicate data that hasn't been incrementally repaired. + +To use transient replication, you first need to enable it in +``cassandra.yaml``. Once enabled, both ``SimpleStrategy`` and +``NetworkTopologyStrategy`` can be configured to transiently replicate data. +You configure it by specifying replication factor as +``/` in the read path and +`Hinted handoff ` in the write path. + +These techniques are only best-effort, however, and to guarantee eventual +consistency Cassandra implements `anti-entropy repair ` where replicas +calculate hierarchical hash-trees over their datasets called `Merkle Trees +`_ that can then be compared across +replicas to identify mismatched data. Like the original Dynamo paper Cassandra +supports "full" repairs where replicas hash their entire dataset, create Merkle +trees, send them to each other and sync any ranges that don't match. + +Unlike the original Dynamo paper, Cassandra also implements sub-range repair +and incremental repair. Sub-range repair allows Cassandra to increase the +resolution of the hash trees (potentially down to the single partition level) +by creating a larger number of trees that span only a portion of the data +range. Incremental repair allows Cassandra to only repair the partitions that +have changed since the last repair. + +Tunable Consistency +^^^^^^^^^^^^^^^^^^^ + +Cassandra supports a per-operation tradeoff between consistency and +availability through **Consistency Levels**. Cassandra's consistency levels +are a version of Dynamo's ``R + W > N`` consistency mechanism where operators +could configure the number of nodes that must participate in reads (``R``) +and writes (``W``) to be larger than the replication factor (``N``). In +Cassandra, you instead choose from a menu of common consistency levels which +allow the operator to pick ``R`` and ``W`` behavior without knowing the +replication factor. Generally writes will be visible to subsequent reads when +the read consistency level contains enough nodes to guarantee a quorum intersection +with the write consistency level. + +The following consistency levels are available: + +``ONE`` + Only a single replica must respond. + +``TWO`` + Two replicas must respond. + +``THREE`` + Three replicas must respond. + +``QUORUM`` + A majority (n/2 + 1) of the replicas must respond. + +``ALL`` + All of the replicas must respond. + +``LOCAL_QUORUM`` + A majority of the replicas in the local datacenter (whichever datacenter the coordinator is in) must respond. + +``EACH_QUORUM`` + A majority of the replicas in each datacenter must respond. + +``LOCAL_ONE`` + Only a single replica must respond. In a multi-datacenter cluster, this also gaurantees that read requests are not + sent to replicas in a remote datacenter. + +``ANY`` + A single replica may respond, or the coordinator may store a hint. If a hint is stored, the coordinator will later + attempt to replay the hint and deliver the mutation to the replicas. This consistency level is only accepted for + write operations. + +Write operations **are always sent to all replicas**, regardless of consistency +level. The consistency level simply controls how many responses the coordinator +waits for before responding to the client. + +For read operations, the coordinator generally only issues read commands to +enough replicas to satisfy the consistency level. The one exception to this is +when speculative retry may issue a redundant read request to an extra replica +if the original replicas have not responded within a specified time window. + +Picking Consistency Levels +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is common to pick read and write consistency levels such that the replica +sets overlap, resulting in all acknowledged writes being visible to subsequent +reads. This is typically expressed in the same terms Dynamo does, in that ``W + +R > RF``, where ``W`` is the write consistency level, ``R`` is the read +consistency level, and ``RF`` is the replication factor. For example, if ``RF += 3``, a ``QUORUM`` request will require responses from at least ``2/3`` +replicas. If ``QUORUM`` is used for both writes and reads, at least one of the +replicas is guaranteed to participate in *both* the write and the read request, +which in turn guarantees that the quorums will overlap and the write will be +visible to the read. + +In a multi-datacenter environment, ``LOCAL_QUORUM`` can be used to provide a +weaker but still useful guarantee: reads are guaranteed to see the latest write +from within the same datacenter. This is often sufficient as clients homed to +a single datacenter will read their own writes. + +If this type of strong consistency isn't required, lower consistency levels +like ``LOCAL_ONE`` or ``ONE`` may be used to improve throughput, latency, and +availability. With replication spanning multiple datacenters, ``LOCAL_ONE`` is +typically less available than ``ONE`` but is faster as a rule. Indeed ``ONE`` +will succeed if a single replica is available in any datacenter. + +Distributed Cluster Membership and Failure Detection +---------------------------------------------------- + +The replication protocols and dataset partitioning rely on knowing which nodes +are alive and dead in the cluster so that write and read operations can be +optimally routed. In Cassandra liveness information is shared in a distributed +fashion through a failure detection mechanism based on a gossip protocol. + +.. _gossip: + +Gossip +^^^^^^ + +Gossip is how Cassandra propagates basic cluster bootstrapping information such +as endpoint membership and internode network protocol versions. In Cassandra's +gossip system, nodes exchange state information not only about themselves but +also about other nodes they know about. This information is versioned with a +vector clock of ``(generation, version)`` tuples, where the generation is a +monotonic timestamp and version is a logical clock the increments roughly every +second. These logical clocks allow Cassandra gossip to ignore old versions of +cluster state just by inspecting the logical clocks presented with gossip +messages. + +Every node in the Cassandra cluster runs the gossip task independently and +periodically. Every second, every node in the cluster: + +1. Updates the local node's heartbeat state (the version) and constructs the + node's local view of the cluster gossip endpoint state. +2. Picks a random other node in the cluster to exchange gossip endpoint state + with. +3. Probabilistically attempts to gossip with any unreachable nodes (if one exists) +4. Gossips with a seed node if that didn't happen in step 2. + +When an operator first bootstraps a Cassandra cluster they designate certain +nodes as "seed" nodes. Any node can be a seed node and the only difference +between seed and non-seed nodes is seed nodes are allowed to bootstrap into the +ring without seeing any other seed nodes. Furthermore, once a cluster is +bootstrapped, seed nodes become "hotspots" for gossip due to step 4 above. + +As non-seed nodes must be able to contact at least one seed node in order to +bootstrap into the cluster, it is common to include multiple seed nodes, often +one for each rack or datacenter. Seed nodes are often chosen using existing +off-the-shelf service discovery mechanisms. + +.. note:: + Nodes do not have to agree on the seed nodes, and indeed once a cluster is + bootstrapped, newly launched nodes can be configured to use any existing + nodes as "seeds". The only advantage to picking the same nodes as seeds + is it increases their usefullness as gossip hotspots. + +Currently, gossip also propagates token metadata and schema *version* +information. This information forms the control plane for scheduling data +movements and schema pulls. For example, if a node sees a mismatch in schema +version in gossip state, it will schedule a schema sync task with the other +nodes. As token information propagates via gossip it is also the control plane +for teaching nodes which endpoints own what data. + +Ring Membership and Failure Detection +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Gossip forms the basis of ring membership, but the **failure detector** +ultimately makes decisions about if nodes are ``UP`` or ``DOWN``. Every node in +Cassandra runs a variant of the `Phi Accrual Failure Detector +`_, +in which every node is constantly making an independent decision of if their +peer nodes are available or not. This decision is primarily based on received +heartbeat state. For example, if a node does not see an increasing heartbeat +from a node for a certain amount of time, the failure detector "convicts" that +node, at which point Cassandra will stop routing reads to it (writes will +typically be written to hints). If/when the node starts heartbeating again, +Cassandra will try to reach out and connect, and if it can open communication +channels it will mark that node as available. + +.. note:: + UP and DOWN state are local node decisions and are not propagated with + gossip. Heartbeat state is propagated with gossip, but nodes will not + consider each other as "UP" until they can successfully message each other + over an actual network channel. + +Cassandra will never remove a node from gossip state without explicit +instruction from an operator via a decommission operation or a new node +bootstrapping with a ``replace_address_first_boot`` option. This choice is +intentional to allow Cassandra nodes to temporarily fail without causing data +to needlessly re-balance. This also helps to prevent simultaneous range +movements, where multiple replicas of a token range are moving at the same +time, which can violate monotonic consistency and can even cause data loss. + +Incremental Scale-out on Commodity Hardware +-------------------------------------------- + +Cassandra scales-out to meet the requirements of growth in data size and +request rates. Scaling-out means adding additional nodes to the ring, and +every additional node brings linear improvements in compute and storage. In +contrast, scaling-up implies adding more capacity to the existing database +nodes. Cassandra is also capable of scale-up, and in certain environments it +may be preferable depending on the deployment. Cassandra gives operators the +flexibility to chose either scale-out or scale-up. + +One key aspect of Dynamo that Cassandra follows is to attempt to run on +commodity hardware, and many engineering choices are made under this +assumption. For example, Cassandra assumes nodes can fail at any time, +auto-tunes to make the best use of CPU and memory resources available and makes +heavy use of advanced compression and caching techniques to get the most +storage out of limited memory and storage capabilities. + +Simple Query Model +^^^^^^^^^^^^^^^^^^ + +Cassandra, like Dynamo, chooses not to provide cross-partition transactions +that are common in SQL Relational Database Management Systems (RDBMS). This +both gives the programmer a simpler read and write API, and allows Cassandra to +more easily scale horizontally since multi-partition transactions spanning +multiple nodes are notoriously difficult to implement and typically very +latent. + +Instead, Cassanda chooses to offer fast, consistent, latency at any scale for +single partition operations, allowing retrieval of entire partitions or only +subsets of partitions based on primary key filters. Furthermore, Cassandra does +support single partition compare and swap functionality via the lightweight +transaction CQL API. + +Simple Interface for Storing Records +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Cassandra, in a slight departure from Dynamo, chooses a storage interface that +is more sophisticated then "simple key value" stores but significantly less +complex than SQL relational data models. Cassandra presents a wide-column +store interface, where partitions of data contain multiple rows, each of which +contains a flexible set of individually typed columns. Every row is uniquely +identified by the partition key and one or more clustering keys, and every row +can have as many columns as needed. + +This allows users to flexibly add new columns to existing datasets as new +requirements surface. Schema changes involve only metadata changes and run +fully concurrently with live workloads. Therefore, users can safely add columns +to existing Cassandra databases while remaining confident that query +performance will not degrade. diff --git a/doc/source/architecture/guarantees.rst b/doc/source/architecture/guarantees.rst new file mode 100644 index 000000000000..3cff808ec3f9 --- /dev/null +++ b/doc/source/architecture/guarantees.rst @@ -0,0 +1,76 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. _guarantees: + +Guarantees +============== +Apache Cassandra is a highly scalable and reliable database. Cassandra is used in web based applications that serve large number of clients and the quantity of data processed is web-scale (Petabyte) large. Cassandra makes some guarantees about its scalability, availability and reliability. To fully understand the inherent limitations of a storage system in an environment in which a certain level of network partition failure is to be expected and taken into account when designing the system it is important to first briefly introduce the CAP theorem. + +What is CAP? +^^^^^^^^^^^^^ +According to the CAP theorem it is not possible for a distributed data store to provide more than two of the following guarantees simultaneously. + +- Consistency: Consistency implies that every read receives the most recent write or errors out +- Availability: Availability implies that every request receives a response. It is not guaranteed that the response contains the most recent write or data. +- Partition tolerance: Partition tolerance refers to the tolerance of a storage system to failure of a network partition. Even if some of the messages are dropped or delayed the system continues to operate. + +CAP theorem implies that when using a network partition, with the inherent risk of partition failure, one has to choose between consistency and availability and both cannot be guaranteed at the same time. CAP theorem is illustrated in Figure 1. + +.. figure:: Figure_1_guarantees.jpg + +Figure 1. CAP Theorem + +High availability is a priority in web based applications and to this objective Cassandra chooses Availability and Partition Tolerance from the CAP guarantees, compromising on data Consistency to some extent. + +Cassandra makes the following guarantees. + +- High Scalability +- High Availability +- Durability +- Eventual Consistency of writes to a single table +- Lightweight transactions with linearizable consistency +- Batched writes across multiple tables are guaranteed to succeed completely or not at all +- Secondary indexes are guaranteed to be consistent with their local replicas data + +High Scalability +^^^^^^^^^^^^^^^^^ +Cassandra is a highly scalable storage system in which nodes may be added/removed as needed. Using gossip-based protocol a unified and consistent membership list is kept at each node. + +High Availability +^^^^^^^^^^^^^^^^^^^ +Cassandra guarantees high availability of data by implementing a fault-tolerant storage system. Failure detection in a node is detected using a gossip-based protocol. + +Durability +^^^^^^^^^^^^ +Cassandra guarantees data durability by using replicas. Replicas are multiple copies of a data stored on different nodes in a cluster. In a multi-datacenter environment the replicas may be stored on different datacenters. If one replica is lost due to unrecoverable node/datacenter failure the data is not completely lost as replicas are still available. + +Eventual Consistency +^^^^^^^^^^^^^^^^^^^^^^ +Meeting the requirements of performance, reliability, scalability and high availability in production Cassandra is an eventually consistent storage system. Eventually consistent implies that all updates reach all replicas eventually. Divergent versions of the same data may exist temporarily but they are eventually reconciled to a consistent state. Eventual consistency is a tradeoff to achieve high availability and it involves some read and write latencies. + +Lightweight transactions with linearizable consistency +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Data must be read and written in a sequential order. Paxos consensus protocol is used to implement lightweight transactions. Paxos protocol implements lightweight transactions that are able to handle concurrent operations using linearizable consistency. Linearizable consistency is sequential consistency with real-time constraints and it ensures transaction isolation with compare and set (CAS) transaction. With CAS replica data is compared and data that is found to be out of date is set to the most consistent value. Reads with linearizable consistency allow reading the current state of the data, which may possibly be uncommitted, without making a new addition or update. + +Batched Writes +^^^^^^^^^^^^^^^ + +The guarantee for batched writes across multiple tables is that they will eventually succeed, or none will. Batch data is first written to batchlog system data, and when the batch data has been successfully stored in the cluster the batchlog data is removed. The batch is replicated to another node to ensure the full batch completes in the event the coordinator node fails. + +Secondary Indexes +^^^^^^^^^^^^^^^^^^ +A secondary index is an index on a column and is used to query a table that is normally not queryable. Secondary indexes when built are guaranteed to be consistent with their local replicas. diff --git a/doc/source/architecture/images/ring.svg b/doc/source/architecture/images/ring.svg new file mode 100644 index 000000000000..d0db8c579e3e --- /dev/null +++ b/doc/source/architecture/images/ring.svg @@ -0,0 +1,11 @@ + + + + + ... + diff --git a/doc/source/architecture/images/vnodes.svg b/doc/source/architecture/images/vnodes.svg new file mode 100644 index 000000000000..71b4fa2d8b90 --- /dev/null +++ b/doc/source/architecture/images/vnodes.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/doc/source/architecture/index.rst b/doc/source/architecture/index.rst new file mode 100644 index 000000000000..58eda137795e --- /dev/null +++ b/doc/source/architecture/index.rst @@ -0,0 +1,29 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Architecture +============ + +This section describes the general architecture of Apache Cassandra. + +.. toctree:: + :maxdepth: 2 + + overview + dynamo + storage_engine + guarantees + diff --git a/doc/source/architecture/overview.rst b/doc/source/architecture/overview.rst new file mode 100644 index 000000000000..e5fcbe3b51a5 --- /dev/null +++ b/doc/source/architecture/overview.rst @@ -0,0 +1,114 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. _overview: + +Overview +======== + +Apache Cassandra is an open source, distributed, NoSQL database. It presents +a partitioned wide column storage model with eventually consistent semantics. + +Apache Cassandra was initially designed at `Facebook +`_ +using a staged event-driven architecture (`SEDA +`_) to implement a combination of +Amazon’s `Dynamo +`_ +distributed storage and replication techniques combined with Google's `Bigtable +`_ +data and storage engine model. Dynamo and Bigtable were both developed to meet +emerging requirements for scalable, reliable and highly available storage +systems, but each had areas that could be improved. + +Cassandra was designed as a best in class combination of both systems to meet +emerging large scale, both in data footprint and query volume, storage +requirements. As applications began to require full global replication and +always available low-latency reads and writes, it became imperative to design a +new kind of database model as the relational database systems of the time +struggled to meet the new requirements of global scale applications. + +Systems like Cassandra are designed for these challenges and seek the +following design objectives: + +- Full multi-master database replication +- Global availability at low latency +- Scaling out on commodity hardware +- Linear throughput increase with each additional processor +- Online load balancing and cluster growth +- Partitioned key-oriented queries +- Flexible schema + +Features +-------- + +Cassandra provides the Cassandra Query Language (CQL), an SQL-like language, +to create and update database schema and access data. CQL allows users to +organize data within a cluster of Cassandra nodes using: + +- **Keyspace**: defines how a dataset is replicated, for example in which + datacenters and how many copies. Keyspaces contain tables. +- **Table**: defines the typed schema for a collection of partitions. Cassandra + tables have flexible addition of new columns to tables with zero downtime. + Tables contain partitions, which contain partitions, which contain columns. +- **Partition**: defines the mandatory part of the primary key all rows in + Cassandra must have. All performant queries supply the partition key in + the query. +- **Row**: contains a collection of columns identified by a unique primary key + made up of the partition key and optionally additional clustering keys. +- **Column**: A single datum with a type which belong to a row. + +CQL supports numerous advanced features over a partitioned dataset such as: + +- Single partition lightweight transactions with atomic compare and set + semantics. +- User-defined types, functions and aggregates +- Collection types including sets, maps, and lists. +- Local secondary indices +- (Experimental) materialized views + +Cassandra explicitly chooses not to implement operations that require cross +partition coordination as they are typically slow and hard to provide highly +available global semantics. For example Cassandra does not support: + +- Cross partition transactions +- Distributed joins +- Foreign keys or referential integrity. + +Operating +--------- + +Apache Cassandra configuration settings are configured in the ``cassandra.yaml`` +file that can be edited by hand or with the aid of configuration management tools. +Some settings can be manipulated live using an online interface, but others +require a restart of the database to take effect. + +Cassandra provides tools for managing a cluster. The ``nodetool`` command +interacts with Cassandra's live control interface, allowing runtime manipulation +of many settings from ``cassandra.yaml``. The ``auditlogviewer`` is used +to view the audit logs. The ``fqltool`` is used to view, replay and compare +full query logs. The ``auditlogviewer`` and ``fqltool`` are new tools in +Apache Cassandra 4.0. + +In addition, Cassandra supports out of the box atomic snapshot functionality, +which presents a point in time snapshot of Cassandra's data for easy +integration with many backup tools. Cassandra also supports incremental backups +where data can be backed up as it is written. + +Apache Cassandra 4.0 has added several new features including virtual tables. +transient replication, audit logging, full query logging, and support for Java +11. Two of these features are experimental: transient replication and Java 11 +support. diff --git a/doc/source/architecture/storage_engine.rst b/doc/source/architecture/storage_engine.rst new file mode 100644 index 000000000000..23b738de759f --- /dev/null +++ b/doc/source/architecture/storage_engine.rst @@ -0,0 +1,208 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Storage Engine +-------------- + +.. _commit-log: + +CommitLog +^^^^^^^^^ + +Commitlogs are an append only log of all mutations local to a Cassandra node. Any data written to Cassandra will first be written to a commit log before being written to a memtable. This provides durability in the case of unexpected shutdown. On startup, any mutations in the commit log will be applied to memtables. + +All mutations write optimized by storing in commitlog segments, reducing the number of seeks needed to write to disk. Commitlog Segments are limited by the "commitlog_segment_size_in_mb" option, once the size is reached, a new commitlog segment is created. Commitlog segments can be archived, deleted, or recycled once all its data has been flushed to SSTables. Commitlog segments are truncated when Cassandra has written data older than a certain point to the SSTables. Running "nodetool drain" before stopping Cassandra will write everything in the memtables to SSTables and remove the need to sync with the commitlogs on startup. + +- ``commitlog_segment_size_in_mb``: The default size is 32, which is almost always fine, but if you are archiving commitlog segments (see commitlog_archiving.properties), then you probably want a finer granularity of archiving; 8 or 16 MB is reasonable. Max mutation size is also configurable via max_mutation_size_in_kb setting in cassandra.yaml. The default is half the size commitlog_segment_size_in_mb * 1024. + +***NOTE: If max_mutation_size_in_kb is set explicitly then commitlog_segment_size_in_mb must be set to at least twice the size of max_mutation_size_in_kb / 1024*** + +*Default Value:* 32 + +Commitlogs are an append only log of all mutations local to a Cassandra node. Any data written to Cassandra will first be written to a commit log before being written to a memtable. This provides durability in the case of unexpected shutdown. On startup, any mutations in the commit log will be applied. + +- ``commitlog_sync``: may be either “periodic” or “batch.” + + - ``batch``: In batch mode, Cassandra won’t ack writes until the commit log has been fsynced to disk. It will wait "commitlog_sync_batch_window_in_ms" milliseconds between fsyncs. This window should be kept short because the writer threads will be unable to do extra work while waiting. You may need to increase concurrent_writes for the same reason. + + - ``commitlog_sync_batch_window_in_ms``: Time to wait between "batch" fsyncs + *Default Value:* 2 + + - ``periodic``: In periodic mode, writes are immediately ack'ed, and the CommitLog is simply synced every "commitlog_sync_period_in_ms" milliseconds. + + - ``commitlog_sync_period_in_ms``: Time to wait between "periodic" fsyncs + *Default Value:* 10000 + +*Default Value:* batch + +*** NOTE: In the event of an unexpected shutdown, Cassandra can lose up to the sync period or more if the sync is delayed. If using "batch" mode, it is recommended to store commitlogs in a separate, dedicated device.** + + +- ``commitlog_directory``: This option is commented out by default When running on magnetic HDD, this should be a separate spindle than the data directories. If not set, the default directory is $CASSANDRA_HOME/data/commitlog. + +*Default Value:* /var/lib/cassandra/commitlog + +- ``commitlog_compression``: Compression to apply to the commitlog. If omitted, the commit log will be written uncompressed. LZ4, Snappy, Deflate and Zstd compressors are supported. + +(Default Value: (complex option):: + + # - class_name: LZ4Compressor + # parameters: + # - + +- ``commitlog_total_space_in_mb``: Total space to use for commit logs on disk. + +If space gets above this value, Cassandra will flush every dirty CF in the oldest segment and remove it. So a small total commitlog space will tend to cause more flush activity on less-active columnfamilies. + +The default value is the smaller of 8192, and 1/4 of the total space of the commitlog volume. + +*Default Value:* 8192 + +.. _memtables: + +Memtables +^^^^^^^^^ + +Memtables are in-memory structures where Cassandra buffers writes. In general, there is one active memtable per table. +Eventually, memtables are flushed onto disk and become immutable `SSTables`_. This can be triggered in several +ways: + +- The memory usage of the memtables exceeds the configured threshold (see ``memtable_cleanup_threshold``) +- The :ref:`commit-log` approaches its maximum size, and forces memtable flushes in order to allow commitlog segments to + be freed + +Memtables may be stored entirely on-heap or partially off-heap, depending on ``memtable_allocation_type``. + +SSTables +^^^^^^^^ + +SSTables are the immutable data files that Cassandra uses for persisting data on disk. + +As SSTables are flushed to disk from :ref:`memtables` or are streamed from other nodes, Cassandra triggers compactions +which combine multiple SSTables into one. Once the new SSTable has been written, the old SSTables can be removed. + +Each SSTable is comprised of multiple components stored in separate files: + +``Data.db`` + The actual data, i.e. the contents of rows. + +``Index.db`` + An index from partition keys to positions in the ``Data.db`` file. For wide partitions, this may also include an + index to rows within a partition. + +``Summary.db`` + A sampling of (by default) every 128th entry in the ``Index.db`` file. + +``Filter.db`` + A Bloom Filter of the partition keys in the SSTable. + +``CompressionInfo.db`` + Metadata about the offsets and lengths of compression chunks in the ``Data.db`` file. + +``Statistics.db`` + Stores metadata about the SSTable, including information about timestamps, tombstones, clustering keys, compaction, + repair, compression, TTLs, and more. + +``Digest.crc32`` + A CRC-32 digest of the ``Data.db`` file. + +``TOC.txt`` + A plain text list of the component files for the SSTable. + +Within the ``Data.db`` file, rows are organized by partition. These partitions are sorted in token order (i.e. by a +hash of the partition key when the default partitioner, ``Murmur3Partition``, is used). Within a partition, rows are +stored in the order of their clustering keys. + +SSTables can be optionally compressed using block-based compression. + +SSTable Versions +^^^^^^^^^^^^^^^^ + +This section was created using the following +`gist `_ +which utilized this original +`source `_. + +The version numbers, to date are: + +Version 0 +~~~~~~~~~ + +* b (0.7.0): added version to sstable filenames +* c (0.7.0): bloom filter component computes hashes over raw key bytes instead of strings +* d (0.7.0): row size in data component becomes a long instead of int +* e (0.7.0): stores undecorated keys in data and index components +* f (0.7.0): switched bloom filter implementations in data component +* g (0.8): tracks flushed-at context in metadata component + +Version 1 +~~~~~~~~~ + +* h (1.0): tracks max client timestamp in metadata component +* hb (1.0.3): records compression ration in metadata component +* hc (1.0.4): records partitioner in metadata component +* hd (1.0.10): includes row tombstones in maxtimestamp +* he (1.1.3): includes ancestors generation in metadata component +* hf (1.1.6): marker that replay position corresponds to 1.1.5+ millis-based id (see CASSANDRA-4782) +* ia (1.2.0): + + * column indexes are promoted to the index file + * records estimated histogram of deletion times in tombstones + * bloom filter (keys and columns) upgraded to Murmur3 +* ib (1.2.1): tracks min client timestamp in metadata component +* ic (1.2.5): omits per-row bloom filter of column names + +Version 2 +~~~~~~~~~ + +* ja (2.0.0): + + * super columns are serialized as composites (note that there is no real format change, this is mostly a marker to know if we should expect super columns or not. We do need a major version bump however, because we should not allow streaming of super columns into this new format) + * tracks max local deletiontime in sstable metadata + * records bloom_filter_fp_chance in metadata component + * remove data size and column count from data file (CASSANDRA-4180) + * tracks max/min column values (according to comparator) +* jb (2.0.1): + + * switch from crc32 to adler32 for compression checksums + * checksum the compressed data +* ka (2.1.0): + + * new Statistics.db file format + * index summaries can be downsampled and the sampling level is persisted + * switch uncompressed checksums to adler32 + * tracks presense of legacy (local and remote) counter shards +* la (2.2.0): new file name format +* lb (2.2.7): commit log lower bound included + +Version 3 +~~~~~~~~~ + +* ma (3.0.0): + + * swap bf hash order + * store rows natively +* mb (3.0.7, 3.7): commit log lower bound included +* mc (3.0.8, 3.9): commit log intervals included + +Example Code +~~~~~~~~~~~~ + +The following example is useful for finding all sstables that do not match the "ib" SSTable version + +.. code-block:: bash + + find /var/lib/cassandra/data/ -type f | grep -v -- -ib- | grep -v "/snapshots" diff --git a/doc/source/bugs.rst b/doc/source/bugs.rst new file mode 100644 index 000000000000..32d676f9d3f4 --- /dev/null +++ b/doc/source/bugs.rst @@ -0,0 +1,30 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Reporting Bugs +============== + +If you encounter a problem with Cassandra, the first places to ask for help are the :ref:`user mailing list +` and the ``cassandra`` :ref:`Slack room `. + +If, after having asked for help, you suspect that you have found a bug in Cassandra, you should report it by opening a +ticket through the `Apache Cassandra JIRA `__. Please provide as much +details as you can on your problem, and don't forget to indicate which version of Cassandra you are running and on which +environment. + +Further details on how to contribute can be found at our :doc:`development/index` section. Please note that the source of +this documentation is part of the Cassandra git repository and hence contributions to the documentation should follow the +same path. diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100644 index 000000000000..7143b23b46c0 --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,441 @@ +# -*- coding: utf-8 -*- +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# Apache Cassandra Documentation documentation build configuration file +# +# This file is execfile()d with the current directory set to its containing +# dir. +import re, sys, os + +# Finds out the version (so we don't have to manually edit that file every +# time we change the version) +cassandra_build_file = '../../build.xml' +with open(cassandra_build_file) as f: + m = re.search("name=\"base\.version\" value=\"([^\"]+)\"", f.read()) + if not m or m.lastindex != 1: + raise RuntimeException("Problem finding version in build.xml file, this shouldn't happen.") + cassandra_version = m.group(1) + +def setup(sphinx): + sys.path.insert(0, os.path.abspath('./source/_util')) + from cql import CQLLexer + sphinx.add_lexer("cql", CQLLexer()) + +# Ugly way to find out if we're building for the website (the Makefile creates an empty file for us) +build_for_website = os.path.isfile('.build_for_website') + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.todo', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.extlinks', +] + +extlinks = { + 'jira': ( 'https://issues.apache.org/jira/browse/CASSANDRA-%s', 'CASSANDRA-') +} + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +source_suffix = ['.rst'] + +# The encoding of source files. +# +# source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'Apache Cassandra' +copyright = u'2016, The Apache Cassandra team' +author = u'The Apache Cassandra team' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +version = cassandra_version + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# +# today = '' +# +# Else, today_fmt is used as the format for a strftime call. +# +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +# modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +# keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + + +# -- Options for HTML output ---------------------------------------------- + +if build_for_website: + html_theme = 'cassandra_theme' + html_theme_path = ['./_theme'] +else: + html_theme = 'sphinx_rtd_theme' + +html_context = { 'extra_css_files': [ '_static/extra.css' ] } + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# The name for this set of Sphinx documents. +# " v documentation" by default. +# +html_title = u'Apache Cassandra Documentation v%s' % version + +# A shorter title for the navigation bar. Default is the same as html_title. +# +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# +# html_logo = None + +# The name of an image file (relative to this directory) to use as a favicon of +# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# +# html_extra_path = [] + +# If not None, a 'Last updated on:' timestamp is inserted at every page +# bottom, using the given strftime format. +# The empty string is equivalent to '%b %d, %Y'. +# +# html_last_updated_fmt = None + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# +html_additional_pages = { + 'index': 'indexcontent.html' +} + +# If false, no module index is generated. +# +# html_domain_indices = True + +# If false, no index is generated. +# +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +# +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +# +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' +# +# html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# 'ja' uses this config value. +# 'zh' user can custom change `jieba` dictionary path. +# +# html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +# +# html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'ApacheCassandraDocumentationdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'ApacheCassandra.tex', u'Apache Cassandra Documentation', + u'The Apache Cassandra team', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# +# latex_use_parts = False + +# If true, show page references after internal links. +# +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# +# latex_appendices = [] + +# If false, no module index is generated. +# +# latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'apachecassandra', u'Apache Cassandra Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +# +# man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'ApacheCassandra', u'Apache Cassandra Documentation', + author, 'ApacheCassandraDocumentation', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +# +# texinfo_appendices = [] + +# If false, no module index is generated. +# +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# +# texinfo_no_detailmenu = False + + +# -- Options for Epub output ---------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project +epub_author = author +epub_publisher = author +epub_copyright = copyright + +# The basename for the epub file. It defaults to the project name. +# epub_basename = project + +# The HTML theme for the epub output. Since the default themes are not +# optimized for small screen space, using the same theme for HTML and epub +# output is usually not wise. This defaults to 'epub', a theme designed to save +# visual space. +# +# epub_theme = 'epub' + +# The language of the text. It defaults to the language option +# or 'en' if the language is not set. +# +# epub_language = '' + +# The scheme of the identifier. Typical schemes are ISBN or URL. +# epub_scheme = '' + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A tuple containing the cover image and cover page html template filenames. +# +# epub_cover = () + +# A sequence of (type, uri, title) tuples for the guide element of content.opf. +# +# epub_guide = () + +# HTML files that should be inserted before the pages created by sphinx. +# The format is a list of tuples containing the path and title. +# +# epub_pre_files = [] + +# HTML files that should be inserted after the pages created by sphinx. +# The format is a list of tuples containing the path and title. +# +# epub_post_files = [] + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + +# The depth of the table of contents in toc.ncx. +# +# epub_tocdepth = 3 + +# Allow duplicate toc entries. +# +# epub_tocdup = True + +# Choose between 'default' and 'includehidden'. +# +# epub_tocscope = 'default' + +# Fix unsupported image types using the Pillow. +# +# epub_fix_images = False + +# Scale large images. +# +# epub_max_image_width = 0 + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# +# epub_show_urls = 'inline' + +# If false, no index is generated. +# +# epub_use_index = True diff --git a/doc/source/configuration/index.rst b/doc/source/configuration/index.rst new file mode 100644 index 000000000000..f774fdad67c4 --- /dev/null +++ b/doc/source/configuration/index.rst @@ -0,0 +1,25 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Configuring Cassandra +===================== + +This section describes how to configure Apache Cassandra. + +.. toctree:: + :maxdepth: 1 + + cassandra_config_file diff --git a/doc/source/contactus.rst b/doc/source/contactus.rst new file mode 100644 index 000000000000..3ed9004ddcfc --- /dev/null +++ b/doc/source/contactus.rst @@ -0,0 +1,50 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Contact us +========== + +You can get in touch with the Cassandra community either via the mailing lists or :ref:`Slack rooms `. + +.. _mailing-lists: + +Mailing lists +------------- + +The following mailing lists are available: + +- `Users `__ – General discussion list for users - `Subscribe + `__ +- `Developers `__ – Development related discussion - `Subscribe + `__ +- `Commits `__ – Commit notification source repository - + `Subscribe `__ +- `Client Libraries `__ – Discussion related to the + development of idiomatic client APIs - `Subscribe `__ + +Subscribe by sending an email to the email address in the Subscribe links above. Follow the instructions in the welcome +email to confirm your subscription. Make sure to keep the welcome email as it contains instructions on how to +unsubscribe. + +.. _slack: + +Slack +----- +To chat with developers or users in real-time, join our rooms on `ASF Slack `__: + +- ``cassandra`` - for user questions and general discussions. +- ``cassandra-dev`` - strictly for questions or discussions related to Cassandra development. + diff --git a/doc/source/cql/appendices.rst b/doc/source/cql/appendices.rst new file mode 100644 index 000000000000..480b78ea297f --- /dev/null +++ b/doc/source/cql/appendices.rst @@ -0,0 +1,330 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +Appendices +---------- + +.. _appendix-A: + +Appendix A: CQL Keywords +~~~~~~~~~~~~~~~~~~~~~~~~ + +CQL distinguishes between *reserved* and *non-reserved* keywords. +Reserved keywords cannot be used as identifier, they are truly reserved +for the language (but one can enclose a reserved keyword by +double-quotes to use it as an identifier). Non-reserved keywords however +only have a specific meaning in certain context but can used as +identifier otherwise. The only *raison d’être* of these non-reserved +keywords is convenience: some keyword are non-reserved when it was +always easy for the parser to decide whether they were used as keywords +or not. + ++--------------------+-------------+ +| Keyword | Reserved? | ++====================+=============+ +| ``ADD`` | yes | ++--------------------+-------------+ +| ``AGGREGATE`` | no | ++--------------------+-------------+ +| ``ALL`` | no | ++--------------------+-------------+ +| ``ALLOW`` | yes | ++--------------------+-------------+ +| ``ALTER`` | yes | ++--------------------+-------------+ +| ``AND`` | yes | ++--------------------+-------------+ +| ``APPLY`` | yes | ++--------------------+-------------+ +| ``AS`` | no | ++--------------------+-------------+ +| ``ASC`` | yes | ++--------------------+-------------+ +| ``ASCII`` | no | ++--------------------+-------------+ +| ``AUTHORIZE`` | yes | ++--------------------+-------------+ +| ``BATCH`` | yes | ++--------------------+-------------+ +| ``BEGIN`` | yes | ++--------------------+-------------+ +| ``BIGINT`` | no | ++--------------------+-------------+ +| ``BLOB`` | no | ++--------------------+-------------+ +| ``BOOLEAN`` | no | ++--------------------+-------------+ +| ``BY`` | yes | ++--------------------+-------------+ +| ``CALLED`` | no | ++--------------------+-------------+ +| ``CLUSTERING`` | no | ++--------------------+-------------+ +| ``COLUMNFAMILY`` | yes | ++--------------------+-------------+ +| ``COMPACT`` | no | ++--------------------+-------------+ +| ``CONTAINS`` | no | ++--------------------+-------------+ +| ``COUNT`` | no | ++--------------------+-------------+ +| ``COUNTER`` | no | ++--------------------+-------------+ +| ``CREATE`` | yes | ++--------------------+-------------+ +| ``CUSTOM`` | no | ++--------------------+-------------+ +| ``DATE`` | no | ++--------------------+-------------+ +| ``DECIMAL`` | no | ++--------------------+-------------+ +| ``DELETE`` | yes | ++--------------------+-------------+ +| ``DESC`` | yes | ++--------------------+-------------+ +| ``DESCRIBE`` | yes | ++--------------------+-------------+ +| ``DISTINCT`` | no | ++--------------------+-------------+ +| ``DOUBLE`` | no | ++--------------------+-------------+ +| ``DROP`` | yes | ++--------------------+-------------+ +| ``ENTRIES`` | yes | ++--------------------+-------------+ +| ``EXECUTE`` | yes | ++--------------------+-------------+ +| ``EXISTS`` | no | ++--------------------+-------------+ +| ``FILTERING`` | no | ++--------------------+-------------+ +| ``FINALFUNC`` | no | ++--------------------+-------------+ +| ``FLOAT`` | no | ++--------------------+-------------+ +| ``FROM`` | yes | ++--------------------+-------------+ +| ``FROZEN`` | no | ++--------------------+-------------+ +| ``FULL`` | yes | ++--------------------+-------------+ +| ``FUNCTION`` | no | ++--------------------+-------------+ +| ``FUNCTIONS`` | no | ++--------------------+-------------+ +| ``GRANT`` | yes | ++--------------------+-------------+ +| ``IF`` | yes | ++--------------------+-------------+ +| ``IN`` | yes | ++--------------------+-------------+ +| ``INDEX`` | yes | ++--------------------+-------------+ +| ``INET`` | no | ++--------------------+-------------+ +| ``INFINITY`` | yes | ++--------------------+-------------+ +| ``INITCOND`` | no | ++--------------------+-------------+ +| ``INPUT`` | no | ++--------------------+-------------+ +| ``INSERT`` | yes | ++--------------------+-------------+ +| ``INT`` | no | ++--------------------+-------------+ +| ``INTO`` | yes | ++--------------------+-------------+ +| ``JSON`` | no | ++--------------------+-------------+ +| ``KEY`` | no | ++--------------------+-------------+ +| ``KEYS`` | no | ++--------------------+-------------+ +| ``KEYSPACE`` | yes | ++--------------------+-------------+ +| ``KEYSPACES`` | no | ++--------------------+-------------+ +| ``LANGUAGE`` | no | ++--------------------+-------------+ +| ``LIMIT`` | yes | ++--------------------+-------------+ +| ``LIST`` | no | ++--------------------+-------------+ +| ``LOGIN`` | no | ++--------------------+-------------+ +| ``MAP`` | no | ++--------------------+-------------+ +| ``MODIFY`` | yes | ++--------------------+-------------+ +| ``NAN`` | yes | ++--------------------+-------------+ +| ``NOLOGIN`` | no | ++--------------------+-------------+ +| ``NORECURSIVE`` | yes | ++--------------------+-------------+ +| ``NOSUPERUSER`` | no | ++--------------------+-------------+ +| ``NOT`` | yes | ++--------------------+-------------+ +| ``NULL`` | yes | ++--------------------+-------------+ +| ``OF`` | yes | ++--------------------+-------------+ +| ``ON`` | yes | ++--------------------+-------------+ +| ``OPTIONS`` | no | ++--------------------+-------------+ +| ``OR`` | yes | ++--------------------+-------------+ +| ``ORDER`` | yes | ++--------------------+-------------+ +| ``PASSWORD`` | no | ++--------------------+-------------+ +| ``PERMISSION`` | no | ++--------------------+-------------+ +| ``PERMISSIONS`` | no | ++--------------------+-------------+ +| ``PRIMARY`` | yes | ++--------------------+-------------+ +| ``RENAME`` | yes | ++--------------------+-------------+ +| ``REPLACE`` | yes | ++--------------------+-------------+ +| ``RETURNS`` | no | ++--------------------+-------------+ +| ``REVOKE`` | yes | ++--------------------+-------------+ +| ``ROLE`` | no | ++--------------------+-------------+ +| ``ROLES`` | no | ++--------------------+-------------+ +| ``SCHEMA`` | yes | ++--------------------+-------------+ +| ``SELECT`` | yes | ++--------------------+-------------+ +| ``SET`` | yes | ++--------------------+-------------+ +| ``SFUNC`` | no | ++--------------------+-------------+ +| ``SMALLINT`` | no | ++--------------------+-------------+ +| ``STATIC`` | no | ++--------------------+-------------+ +| ``STORAGE`` | no | ++--------------------+-------------+ +| ``STYPE`` | no | ++--------------------+-------------+ +| ``SUPERUSER`` | no | ++--------------------+-------------+ +| ``TABLE`` | yes | ++--------------------+-------------+ +| ``TEXT`` | no | ++--------------------+-------------+ +| ``TIME`` | no | ++--------------------+-------------+ +| ``TIMESTAMP`` | no | ++--------------------+-------------+ +| ``TIMEUUID`` | no | ++--------------------+-------------+ +| ``TINYINT`` | no | ++--------------------+-------------+ +| ``TO`` | yes | ++--------------------+-------------+ +| ``TOKEN`` | yes | ++--------------------+-------------+ +| ``TRIGGER`` | no | ++--------------------+-------------+ +| ``TRUNCATE`` | yes | ++--------------------+-------------+ +| ``TTL`` | no | ++--------------------+-------------+ +| ``TUPLE`` | no | ++--------------------+-------------+ +| ``TYPE`` | no | ++--------------------+-------------+ +| ``UNLOGGED`` | yes | ++--------------------+-------------+ +| ``UPDATE`` | yes | ++--------------------+-------------+ +| ``USE`` | yes | ++--------------------+-------------+ +| ``USER`` | no | ++--------------------+-------------+ +| ``USERS`` | no | ++--------------------+-------------+ +| ``USING`` | yes | ++--------------------+-------------+ +| ``UUID`` | no | ++--------------------+-------------+ +| ``VALUES`` | no | ++--------------------+-------------+ +| ``VARCHAR`` | no | ++--------------------+-------------+ +| ``VARINT`` | no | ++--------------------+-------------+ +| ``WHERE`` | yes | ++--------------------+-------------+ +| ``WITH`` | yes | ++--------------------+-------------+ +| ``WRITETIME`` | no | ++--------------------+-------------+ + +Appendix B: CQL Reserved Types +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The following type names are not currently used by CQL, but are reserved +for potential future use. User-defined types may not use reserved type +names as their name. + ++-----------------+ +| type | ++=================+ +| ``bitstring`` | ++-----------------+ +| ``byte`` | ++-----------------+ +| ``complex`` | ++-----------------+ +| ``enum`` | ++-----------------+ +| ``interval`` | ++-----------------+ +| ``macaddr`` | ++-----------------+ + + +Appendix C: Dropping Compact Storage +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +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: + +- CQL-created Compact Tables that have no clustering columns, will expose an + additional clustering column ``column1`` with ``UTF8Type``. +- CQL-created Compact Tables that had no regular columns, will expose a + regular column ``value`` with ``BytesType``. +- For CQL-Created Compact Tables, all columns originally defined as + ``regular`` will be come ``static`` +- CQL-created Compact Tables that have clustering but have no regular + columns will have an empty value column (of ``EmptyType``) +- SuperColumn Tables (can only be created through Thrift) will expose + a compact value map with an empty name. +- Thrift-created Compact Tables will have types corresponding to their + Thrift definition. diff --git a/doc/source/cql/changes.rst b/doc/source/cql/changes.rst new file mode 100644 index 000000000000..6691f156a54b --- /dev/null +++ b/doc/source/cql/changes.rst @@ -0,0 +1,211 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +Changes +------- + +The following describes the changes in each version of CQL. + +3.4.5 +^^^^^ + +- Adds support for arithmetic operators (:jira:`11935`) +- Adds support for ``+`` and ``-`` operations on dates (:jira:`11936`) +- Adds ``currentTimestamp``, ``currentDate``, ``currentTime`` and ``currentTimeUUID`` functions (:jira:`13132`) + + +3.4.4 +^^^^^ + +- ``ALTER TABLE`` ``ALTER`` has been removed; a column's type may not be changed after creation (:jira:`12443`). +- ``ALTER TYPE`` ``ALTER`` has been removed; a field's type may not be changed after creation (:jira:`12443`). + +3.4.3 +^^^^^ + +- Adds a new ``duration `` :ref:`data types ` (:jira:`11873`). +- Support for ``GROUP BY`` (:jira:`10707`). +- Adds a ``DEFAULT UNSET`` option for ``INSERT JSON`` to ignore omitted columns (:jira:`11424`). +- Allows ``null`` as a legal value for TTL on insert and update. It will be treated as equivalent to inserting a 0 (:jira:`12216`). + +3.4.2 +^^^^^ + +- If a table has a non zero ``default_time_to_live``, then explicitly specifying a TTL of 0 in an ``INSERT`` or + ``UPDATE`` statement will result in the new writes not having any expiration (that is, an explicit TTL of 0 cancels + the ``default_time_to_live``). This wasn't the case before and the ``default_time_to_live`` was applied even though a + TTL had been explicitly set. +- ``ALTER TABLE`` ``ADD`` and ``DROP`` now allow multiple columns to be added/removed. +- New ``PER PARTITION LIMIT`` option for ``SELECT`` statements (see `CASSANDRA-7017 + `__. +- :ref:`User-defined functions ` can now instantiate ``UDTValue`` and ``TupleValue`` instances via the + new ``UDFContext`` interface (see `CASSANDRA-10818 `__. +- :ref:`User-defined types ` may now be stored in a non-frozen form, allowing individual fields to be updated and + deleted in ``UPDATE`` statements and ``DELETE`` statements, respectively. (`CASSANDRA-7423 + `__). + +3.4.1 +^^^^^ + +- Adds ``CAST`` functions. + +3.4.0 +^^^^^ + +- Support for :ref:`materialized views `. +- ``DELETE`` support for inequality expressions and ``IN`` restrictions on any primary key columns. +- ``UPDATE`` support for ``IN`` restrictions on any primary key columns. + +3.3.1 +^^^^^ + +- The syntax ``TRUNCATE TABLE X`` is now accepted as an alias for ``TRUNCATE X``. + +3.3.0 +^^^^^ + +- :ref:`User-defined functions and aggregates ` are now supported. +- Allows double-dollar enclosed strings literals as an alternative to single-quote enclosed strings. +- Introduces Roles to supersede user based authentication and access control +- New ``date``, ``time``, ``tinyint`` and ``smallint`` :ref:`data types ` have been added. +- :ref:`JSON support ` has been added +- Adds new time conversion functions and deprecate ``dateOf`` and ``unixTimestampOf``. + +3.2.0 +^^^^^ + +- :ref:`User-defined types ` supported. +- ``CREATE INDEX`` now supports indexing collection columns, including indexing the keys of map collections through the + ``keys()`` function +- Indexes on collections may be queried using the new ``CONTAINS`` and ``CONTAINS KEY`` operators +- :ref:`Tuple types ` were added to hold fixed-length sets of typed positional fields. +- ``DROP INDEX`` now supports optionally specifying a keyspace. + +3.1.7 +^^^^^ + +- ``SELECT`` statements now support selecting multiple rows in a single partition using an ``IN`` clause on combinations + of clustering columns. +- ``IF NOT EXISTS`` and ``IF EXISTS`` syntax is now supported by ``CREATE USER`` and ``DROP USER`` statements, + respectively. + +3.1.6 +^^^^^ + +- A new ``uuid()`` method has been added. +- Support for ``DELETE ... IF EXISTS`` syntax. + +3.1.5 +^^^^^ + +- It is now possible to group clustering columns in a relation, see :ref:`WHERE ` clauses. +- Added support for :ref:`static columns `. + +3.1.4 +^^^^^ + +- ``CREATE INDEX`` now allows specifying options when creating CUSTOM indexes. + +3.1.3 +^^^^^ + +- Millisecond precision formats have been added to the :ref:`timestamp ` parser. + +3.1.2 +^^^^^ + +- ``NaN`` and ``Infinity`` has been added as valid float constants. They are now reserved keywords. In the unlikely case + you we using them as a column identifier (or keyspace/table one), you will now need to double quote them. + +3.1.1 +^^^^^ + +- ``SELECT`` statement now allows listing the partition keys (using the ``DISTINCT`` modifier). See `CASSANDRA-4536 + `__. +- The syntax ``c IN ?`` is now supported in ``WHERE`` clauses. In that case, the value expected for the bind variable + will be a list of whatever type ``c`` is. +- It is now possible to use named bind variables (using ``:name`` instead of ``?``). + +3.1.0 +^^^^^ + +- ``ALTER TABLE`` ``DROP`` option added. +- ``SELECT`` statement now supports aliases in select clause. Aliases in WHERE and ORDER BY clauses are not supported. +- ``CREATE`` statements for ``KEYSPACE``, ``TABLE`` and ``INDEX`` now supports an ``IF NOT EXISTS`` condition. + Similarly, ``DROP`` statements support a ``IF EXISTS`` condition. +- ``INSERT`` statements optionally supports a ``IF NOT EXISTS`` condition and ``UPDATE`` supports ``IF`` conditions. + +3.0.5 +^^^^^ + +- ``SELECT``, ``UPDATE``, and ``DELETE`` statements now allow empty ``IN`` relations (see `CASSANDRA-5626 + `__. + +3.0.4 +^^^^^ + +- Updated the syntax for custom :ref:`secondary indexes `. +- Non-equal condition on the partition key are now never supported, even for ordering partitioner as this was not + correct (the order was **not** the one of the type of the partition key). Instead, the ``token`` method should always + be used for range queries on the partition key (see :ref:`WHERE clauses `). + +3.0.3 +^^^^^ + +- Support for custom :ref:`secondary indexes ` has been added. + +3.0.2 +^^^^^ + +- Type validation for the :ref:`constants ` has been fixed. For instance, the implementation used to allow + ``'2'`` as a valid value for an ``int`` column (interpreting it has the equivalent of ``2``), or ``42`` as a valid + ``blob`` value (in which case ``42`` was interpreted as an hexadecimal representation of the blob). This is no longer + the case, type validation of constants is now more strict. See the :ref:`data types ` section for details + on which constant is allowed for which type. +- The type validation fixed of the previous point has lead to the introduction of blobs constants to allow the input of + blobs. Do note that while the input of blobs as strings constant is still supported by this version (to allow smoother + transition to blob constant), it is now deprecated and will be removed by a future version. If you were using strings + as blobs, you should thus update your client code ASAP to switch blob constants. +- A number of functions to convert native types to blobs have also been introduced. Furthermore the token function is + now also allowed in select clauses. See the :ref:`section on functions ` for details. + +3.0.1 +^^^^^ + +- Date strings (and timestamps) are no longer accepted as valid ``timeuuid`` values. Doing so was a bug in the sense + that date string are not valid ``timeuuid``, and it was thus resulting in `confusing behaviors + `__. However, the following new methods have been added to help + working with ``timeuuid``: ``now``, ``minTimeuuid``, ``maxTimeuuid`` , + ``dateOf`` and ``unixTimestampOf``. +- Float constants now support the exponent notation. In other words, ``4.2E10`` is now a valid floating point value. + +Versioning +^^^^^^^^^^ + +Versioning of the CQL language adheres to the `Semantic Versioning `__ guidelines. Versions take the +form X.Y.Z where X, Y, and Z are integer values representing major, minor, and patch level respectively. There is no +correlation between Cassandra release versions and the CQL language version. + +========= ============================================================================================================= + version description +========= ============================================================================================================= + Major The major version *must* be bumped when backward incompatible changes are introduced. This should rarely + occur. + Minor Minor version increments occur when new, but backward compatible, functionality is introduced. + Patch The patch version is incremented when bugs are fixed. +========= ============================================================================================================= diff --git a/doc/source/cql/ddl.rst b/doc/source/cql/ddl.rst new file mode 100644 index 000000000000..88df05b4c75b --- /dev/null +++ b/doc/source/cql/ddl.rst @@ -0,0 +1,852 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _data-definition: + +Data Definition +--------------- + +CQL stores data in *tables*, whose schema defines the layout of said data in the table, and those tables are grouped in +*keyspaces*. A keyspace defines a number of options that applies to all the tables it contains, most prominently of +which is the :ref:`replication strategy ` used by the keyspace. It is generally encouraged to use +one keyspace by *application*, and thus many cluster may define only one keyspace. + +This section describes the statements used to create, modify, and remove those keyspace and tables. + +Common definitions +^^^^^^^^^^^^^^^^^^ + +The names of the keyspaces and tables are defined by the following grammar: + +.. productionlist:: + keyspace_name: `name` + table_name: [ `keyspace_name` '.' ] `name` + name: `unquoted_name` | `quoted_name` + unquoted_name: re('[a-zA-Z_0-9]{1, 48}') + quoted_name: '"' `unquoted_name` '"' + +Both keyspace and table name should be comprised of only alphanumeric characters, cannot be empty and are limited in +size to 48 characters (that limit exists mostly to avoid filenames (which may include the keyspace and table name) to go +over the limits of certain file systems). By default, keyspace and table names are case insensitive (``myTable`` is +equivalent to ``mytable``) but case sensitivity can be forced by using double-quotes (``"myTable"`` is different from +``mytable``). + +Further, a table is always part of a keyspace and a table name can be provided fully-qualified by the keyspace it is +part of. If is is not fully-qualified, the table is assumed to be in the *current* keyspace (see :ref:`USE statement +`). + +Further, the valid names for columns is simply defined as: + +.. productionlist:: + column_name: `identifier` + +We also define the notion of statement options for use in the following section: + +.. productionlist:: + options: `option` ( AND `option` )* + option: `identifier` '=' ( `identifier` | `constant` | `map_literal` ) + +.. _create-keyspace-statement: + +CREATE KEYSPACE +^^^^^^^^^^^^^^^ + +A keyspace is created using a ``CREATE KEYSPACE`` statement: + +.. productionlist:: + create_keyspace_statement: CREATE KEYSPACE [ IF NOT EXISTS ] `keyspace_name` WITH `options` + +For instance:: + + CREATE KEYSPACE excelsior + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3}; + + CREATE KEYSPACE excalibur + WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 3} + AND durable_writes = false; + +Attempting to create a keyspace that already exists will return an error unless the ``IF NOT EXISTS`` option is used. If +it is used, the statement will be a no-op if the keyspace already exists. + +The supported ``options`` are: + +=================== ========== =========== ========= =================================================================== +name kind mandatory default description +=================== ========== =========== ========= =================================================================== +``replication`` *map* yes The replication strategy and options to use for the keyspace (see + details below). +``durable_writes`` *simple* no true Whether to use the commit log for updates on this keyspace + (disable this option at your own risk!). +=================== ========== =========== ========= =================================================================== + +The ``replication`` property is mandatory and must at least contains the ``'class'`` sub-option which defines the +:ref:`replication strategy ` class to use. The rest of the sub-options depends on what replication +strategy is used. By default, Cassandra support the following ``'class'``: + +.. _replication-strategy: + +``SimpleStrategy`` +"""""""""""""""""" + +A simple strategy that defines a replication factor for data to be spread +across the entire cluster. This is generally not a wise choice for production +because it does not respect datacenter layouts and can lead to wildly varying +query latency. For a production ready strategy, see +``NetworkTopologyStrategy``. ``SimpleStrategy`` supports a single mandatory argument: + +========================= ====== ======= ============================================= +sub-option type since description +========================= ====== ======= ============================================= +``'replication_factor'`` int all The number of replicas to store per range +========================= ====== ======= ============================================= + +``NetworkTopologyStrategy`` +""""""""""""""""""""""""""" + +A production ready replication strategy that allows to set the replication +factor independently for each data-center. The rest of the sub-options are +key-value pairs where a key is a data-center name and its value is the +associated replication factor. Options: + +===================================== ====== ====== ============================================= +sub-option type since description +===================================== ====== ====== ============================================= +``''`` int all The number of replicas to store per range in + the provided datacenter. +``'replication_factor'`` int 4.0 The number of replicas to use as a default + per datacenter if not specifically provided. + Note that this always defers to existing + definitions or explicit datacenter settings. + For example, to have three replicas per + datacenter, supply this with a value of 3. +===================================== ====== ====== ============================================= + +Note that when ``ALTER`` ing keyspaces and supplying ``replication_factor``, +auto-expansion will only *add* new datacenters for safety, it will not alter +existing datacenters or remove any even if they are no longer in the cluster. +If you want to remove datacenters while still supplying ``replication_factor``, +explicitly zero out the datacenter you want to have zero replicas. + +An example of auto-expanding datacenters with two datacenters: ``DC1`` and ``DC2``:: + + CREATE KEYSPACE excalibur + WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3} + + DESCRIBE KEYSPACE excalibur + CREATE KEYSPACE excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3', 'DC2': '3'} AND durable_writes = true; + + +An example of auto-expanding and overriding a datacenter:: + + CREATE KEYSPACE excalibur + WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3, 'DC2': 2} + + DESCRIBE KEYSPACE excalibur + CREATE KEYSPACE excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3', 'DC2': '2'} AND durable_writes = true; + +An example that excludes a datacenter while using ``replication_factor``:: + + CREATE KEYSPACE excalibur + WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3, 'DC2': 0} ; + + DESCRIBE KEYSPACE excalibur + CREATE KEYSPACE excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3'} AND durable_writes = true; + +If transient replication has been enabled, transient replicas can be configured for both +``SimpleStrategy`` and ``NetworkTopologyStrategy`` by defining replication factors in the format ``'/'`` + +For instance, this keyspace will have 3 replicas in DC1, 1 of which is transient, and 5 replicas in DC2, 2 of which are transient:: + + CREATE KEYSPACE some_keysopace + WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : '3/1'', 'DC2' : '5/2'}; + +.. _use-statement: + +USE +^^^ + +The ``USE`` statement allows to change the *current* keyspace (for the *connection* on which it is executed). A number +of objects in CQL are bound to a keyspace (tables, user-defined types, functions, ...) and the current keyspace is the +default keyspace used when those objects are referred without a fully-qualified name (that is, without being prefixed a +keyspace name). A ``USE`` statement simply takes the keyspace to use as current as argument: + +.. productionlist:: + use_statement: USE `keyspace_name` + +.. _alter-keyspace-statement: + +ALTER KEYSPACE +^^^^^^^^^^^^^^ + +An ``ALTER KEYSPACE`` statement allows to modify the options of a keyspace: + +.. productionlist:: + alter_keyspace_statement: ALTER KEYSPACE `keyspace_name` WITH `options` + +For instance:: + + ALTER KEYSPACE Excelsior + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4}; + +The supported options are the same than for :ref:`creating a keyspace `. + +.. _drop-keyspace-statement: + +DROP KEYSPACE +^^^^^^^^^^^^^ + +Dropping a keyspace can be done using the ``DROP KEYSPACE`` statement: + +.. productionlist:: + drop_keyspace_statement: DROP KEYSPACE [ IF EXISTS ] `keyspace_name` + +For instance:: + + DROP KEYSPACE Excelsior; + +Dropping a keyspace results in the immediate, irreversible removal of that keyspace, including all the tables, UTD and +functions in it, and all the data contained in those tables. + +If the keyspace does not exists, the statement will return an error, unless ``IF EXISTS`` is used in which case the +operation is a no-op. + +.. _create-table-statement: + +CREATE TABLE +^^^^^^^^^^^^ + +Creating a new table uses the ``CREATE TABLE`` statement: + +.. productionlist:: + create_table_statement: CREATE TABLE [ IF NOT EXISTS ] `table_name` + : '(' + : `column_definition` + : ( ',' `column_definition` )* + : [ ',' PRIMARY KEY '(' `primary_key` ')' ] + : ')' [ WITH `table_options` ] + column_definition: `column_name` `cql_type` [ STATIC ] [ PRIMARY KEY] + primary_key: `partition_key` [ ',' `clustering_columns` ] + partition_key: `column_name` + : | '(' `column_name` ( ',' `column_name` )* ')' + clustering_columns: `column_name` ( ',' `column_name` )* + table_options: COMPACT STORAGE [ AND `table_options` ] + : | CLUSTERING ORDER BY '(' `clustering_order` ')' [ AND `table_options` ] + : | `options` + clustering_order: `column_name` (ASC | DESC) ( ',' `column_name` (ASC | DESC) )* + +For instance:: + + CREATE TABLE monkeySpecies ( + species text PRIMARY KEY, + common_name text, + population varint, + average_size int + ) WITH comment='Important biological records'; + + CREATE TABLE timeline ( + userid uuid, + posted_month int, + posted_time uuid, + body text, + posted_by text, + PRIMARY KEY (userid, posted_month, posted_time) + ) WITH compaction = { 'class' : 'LeveledCompactionStrategy' }; + + CREATE TABLE loads ( + machine inet, + cpu int, + mtime timeuuid, + load float, + PRIMARY KEY ((machine, cpu), mtime) + ) WITH CLUSTERING ORDER BY (mtime DESC); + +A CQL table has a name and is composed of a set of *rows*. Creating a table amounts to defining which :ref:`columns +` the rows will be composed, which of those columns compose the :ref:`primary key `, as +well as optional :ref:`options ` for the table. + +Attempting to create an already existing table will return an error unless the ``IF NOT EXISTS`` directive is used. If +it is used, the statement will be a no-op if the table already exists. + + +.. _column-definition: + +Column definitions +~~~~~~~~~~~~~~~~~~ + +Every rows in a CQL table has a set of predefined columns defined at the time of the table creation (or added later +using an :ref:`alter statement`). + +A :token:`column_definition` is primarily comprised of the name of the column defined and it's :ref:`type `, +which restrict which values are accepted for that column. Additionally, a column definition can have the following +modifiers: + +``STATIC`` + it declares the column as being a :ref:`static column `. + +``PRIMARY KEY`` + it declares the column as being the sole component of the :ref:`primary key ` of the table. + +.. _static-columns: + +Static columns +`````````````` +Some columns can be declared as ``STATIC`` in a table definition. A column that is static will be “shared” by all the +rows belonging to the same partition (having the same :ref:`partition key `). For instance:: + + CREATE TABLE t ( + pk int, + t int, + v text, + s text static, + PRIMARY KEY (pk, t) + ); + + INSERT INTO t (pk, t, v, s) VALUES (0, 0, 'val0', 'static0'); + INSERT INTO t (pk, t, v, s) VALUES (0, 1, 'val1', 'static1'); + + SELECT * FROM t; + pk | t | v | s + ----+---+--------+----------- + 0 | 0 | 'val0' | 'static1' + 0 | 1 | 'val1' | 'static1' + +As can be seen, the ``s`` value is the same (``static1``) for both of the row in the partition (the partition key in +that example being ``pk``, both rows are in that same partition): the 2nd insertion has overridden the value for ``s``. + +The use of static columns as the following restrictions: + +- tables with the ``COMPACT STORAGE`` option (see below) cannot use them. +- a table without clustering columns cannot have static columns (in a table without clustering columns, every partition + has only one row, and so every column is inherently static). +- only non ``PRIMARY KEY`` columns can be static. + +.. _primary-key: + +The Primary key +~~~~~~~~~~~~~~~ + +Within a table, a row is uniquely identified by its ``PRIMARY KEY``, and hence all table **must** define a PRIMARY KEY +(and only one). A ``PRIMARY KEY`` definition is composed of one or more of the columns defined in the table. +Syntactically, the primary key is defined the keywords ``PRIMARY KEY`` followed by comma-separated list of the column +names composing it within parenthesis, but if the primary key has only one column, one can alternatively follow that +column definition by the ``PRIMARY KEY`` keywords. The order of the columns in the primary key definition matter. + +A CQL primary key is composed of 2 parts: + +- the :ref:`partition key ` part. It is the first component of the primary key definition. It can be a + single column or, using additional parenthesis, can be multiple columns. A table always have at least a partition key, + the smallest possible table definition is:: + + CREATE TABLE t (k text PRIMARY KEY); + +- the :ref:`clustering columns `. Those are the columns after the first component of the primary key + definition, and the order of those columns define the *clustering order*. + +Some example of primary key definition are: + +- ``PRIMARY KEY (a)``: ``a`` is the partition key and there is no clustering columns. +- ``PRIMARY KEY (a, b, c)`` : ``a`` is the partition key and ``b`` and ``c`` are the clustering columns. +- ``PRIMARY KEY ((a, b), c)`` : ``a`` and ``b`` compose the partition key (this is often called a *composite* partition + key) and ``c`` is the clustering column. + + +.. _partition-key: + +The partition key +````````````````` + +Within a table, CQL defines the notion of a *partition*. A partition is simply the set of rows that share the same value +for their partition key. Note that if the partition key is composed of multiple columns, then rows belong to the same +partition only they have the same values for all those partition key column. So for instance, given the following table +definition and content:: + + CREATE TABLE t ( + a int, + b int, + c int, + d int, + PRIMARY KEY ((a, b), c, d) + ); + + SELECT * FROM t; + a | b | c | d + ---+---+---+--- + 0 | 0 | 0 | 0 // row 1 + 0 | 0 | 1 | 1 // row 2 + 0 | 1 | 2 | 2 // row 3 + 0 | 1 | 3 | 3 // row 4 + 1 | 1 | 4 | 4 // row 5 + +``row 1`` and ``row 2`` are in the same partition, ``row 3`` and ``row 4`` are also in the same partition (but a +different one) and ``row 5`` is in yet another partition. + +Note that a table always has a partition key, and that if the table has no :ref:`clustering columns +`, then every partition of that table is only comprised of a single row (since the primary key +uniquely identifies rows and the primary key is equal to the partition key if there is no clustering columns). + +The most important property of partition is that all the rows belonging to the same partition are guarantee to be stored +on the same set of replica nodes. In other words, the partition key of a table defines which of the rows will be +localized together in the Cluster, and it is thus important to choose your partition key wisely so that rows that needs +to be fetch together are in the same partition (so that querying those rows together require contacting a minimum of +nodes). + +Please note however that there is a flip-side to this guarantee: as all rows sharing a partition key are guaranteed to +be stored on the same set of replica node, a partition key that groups too much data can create a hotspot. + +Another useful property of a partition is that when writing data, all the updates belonging to a single partition are +done *atomically* and in *isolation*, which is not the case across partitions. + +The proper choice of the partition key and clustering columns for a table is probably one of the most important aspect +of data modeling in Cassandra, and it largely impact which queries can be performed, and how efficiently they are. + + +.. _clustering-columns: + +The clustering columns +`````````````````````` + +The clustering columns of a table defines the clustering order for the partition of that table. For a given +:ref:`partition `, all the rows are physically ordered inside Cassandra by that clustering order. For +instance, given:: + + CREATE TABLE t ( + a int, + b int, + c int, + PRIMARY KEY (a, b, c) + ); + + SELECT * FROM t; + a | b | c + ---+---+--- + 0 | 0 | 4 // row 1 + 0 | 1 | 9 // row 2 + 0 | 2 | 2 // row 3 + 0 | 3 | 3 // row 4 + +then the rows (which all belong to the same partition) are all stored internally in the order of the values of their +``b`` column (the order they are displayed above). So where the partition key of the table allows to group rows on the +same replica set, the clustering columns controls how those rows are stored on the replica. That sorting allows the +retrieval of a range of rows within a partition (for instance, in the example above, ``SELECT * FROM t WHERE a = 0 AND b +> 1 and b <= 3``) to be very efficient. + + +.. _create-table-options: + +Table options +~~~~~~~~~~~~~ + +A CQL table has a number of options that can be set at creation (and, for most of them, :ref:`altered +` later). These options are specified after the ``WITH`` keyword. + +Amongst those options, two important ones cannot be changed after creation and influence which queries can be done +against the table: the ``COMPACT STORAGE`` option and the ``CLUSTERING ORDER`` option. Those, as well as the other +options of a table are described in the following sections. + +.. _compact-tables: + +Compact tables +`````````````` + +.. warning:: Since Cassandra 3.0, compact tables have the exact same layout internally than non compact ones (for the + same schema obviously), and declaring a table compact **only** creates artificial limitations on the table definition + and usage. It only exists for historical reason and is preserved for backward compatibility And as ``COMPACT + STORAGE`` cannot, as of Cassandra |version|, be removed, it is strongly discouraged to create new table with the + ``COMPACT STORAGE`` option. + +A *compact* table is one defined with the ``COMPACT STORAGE`` option. This option is only maintained for backward +compatibility for definitions created before CQL version 3 and shouldn't be used for new tables. Declaring a +table with this option creates limitations for the table which are largely arbitrary (and exists for historical +reasons). Amongst those limitation: + +- a compact table cannot use collections nor static columns. +- if a compact table has at least one clustering column, then it must have *exactly* one column outside of the primary + key ones. This imply you cannot add or remove columns after creation in particular. +- a compact table is limited in the indexes it can create, and no materialized view can be created on it. + +.. _clustering-order: + +Reversing the clustering order +`````````````````````````````` + +The clustering order of a table is defined by the :ref:`clustering columns ` of that table. By +default, that ordering is based on natural order of those clustering order, but the ``CLUSTERING ORDER`` allows to +change that clustering order to use the *reverse* natural order for some (potentially all) of the columns. + +The ``CLUSTERING ORDER`` option takes the comma-separated list of the clustering column, each with a ``ASC`` (for +*ascendant*, e.g. the natural order) or ``DESC`` (for *descendant*, e.g. the reverse natural order). Note in particular +that the default (if the ``CLUSTERING ORDER`` option is not used) is strictly equivalent to using the option with all +clustering columns using the ``ASC`` modifier. + +Note that this option is basically a hint for the storage engine to change the order in which it stores the row but it +has 3 visible consequences: + +# it limits which ``ORDER BY`` clause are allowed for :ref:`selects ` on that table. You can only + order results by the clustering order or the reverse clustering order. Meaning that if a table has 2 clustering column + ``a`` and ``b`` and you defined ``WITH CLUSTERING ORDER (a DESC, b ASC)``, then in queries you will be allowed to use + ``ORDER BY (a DESC, b ASC)`` and (reverse clustering order) ``ORDER BY (a ASC, b DESC)`` but **not** ``ORDER BY (a + ASC, b ASC)`` (nor ``ORDER BY (a DESC, b DESC)``). +# it also change the default order of results when queried (if no ``ORDER BY`` is provided). Results are always returned + in clustering order (within a partition). +# it has a small performance impact on some queries as queries in reverse clustering order are slower than the one in + forward clustering order. In practice, this means that if you plan on querying mostly in the reverse natural order of + your columns (which is common with time series for instance where you often want data from the newest to the oldest), + it is an optimization to declare a descending clustering order. + +.. _create-table-general-options: + +Other table options +``````````````````` + +.. todo:: review (misses cdc if nothing else) and link to proper categories when appropriate (compaction for instance) + +A table supports the following options: + ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| option | kind | default | description | ++================================+==========+=============+===========================================================+ +| ``comment`` | *simple* | none | A free-form, human-readable comment. | +| ``speculative_retry`` | *simple* | 99PERCENTILE| :ref:`Speculative retry options | +| | | | `. | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``cdc`` | *boolean*| false | Create a Change Data Capture (CDC) log on the table. | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``additional_write_policy`` | *simple* | 99PERCENTILE| :ref:`Speculative retry options | +| | | | `. | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``gc_grace_seconds`` | *simple* | 864000 | Time to wait before garbage collecting tombstones | +| | | | (deletion markers). | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``bloom_filter_fp_chance`` | *simple* | 0.00075 | The target probability of false positive of the sstable | +| | | | bloom filters. Said bloom filters will be sized to provide| +| | | | the provided probability (thus lowering this value impact | +| | | | the size of bloom filters in-memory and on-disk) | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``default_time_to_live`` | *simple* | 0 | The default expiration time (“TTL”) in seconds for a | +| | | | table. | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``compaction`` | *map* | *see below* | :ref:`Compaction options `. | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``compression`` | *map* | *see below* | :ref:`Compression options `. | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``caching`` | *map* | *see below* | :ref:`Caching options `. | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``memtable_flush_period_in_ms``| *simple* | 0 | Time (in ms) before Cassandra flushes memtables to disk. | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ +| ``read_repair`` | *simple* | BLOCKING | Sets read repair behavior (see below) | ++--------------------------------+----------+-------------+-----------------------------------------------------------+ + +.. _speculative-retry-options: + +Speculative retry options +######################### + +By default, Cassandra read coordinators only query as many replicas as necessary to satisfy +consistency levels: one for consistency level ``ONE``, a quorum for ``QUORUM``, and so on. +``speculative_retry`` determines when coordinators may query additional replicas, which is useful +when replicas are slow or unresponsive. Speculative retries are used to reduce the latency. The speculative_retry option may be +used to configure rapid read protection with which a coordinator sends more requests than needed to satisfy the Consistency level. + +Pre-4.0 speculative Retry Policy takes a single string as a parameter, this can be ``NONE``, ``ALWAYS``, ``99PERCENTILE`` (PERCENTILE), ``50MS`` (CUSTOM). + +Examples of setting speculative retry are: + +:: + + ALTER TABLE users WITH speculative_retry = '10ms'; + + +Or, + +:: + + ALTER TABLE users WITH speculative_retry = '99PERCENTILE'; + +The problem with these settings is when a single host goes into an unavailable state this drags up the percentiles. This means if we +are set to use ``p99`` alone, we might not speculate when we intended to to because the value at the specified percentile has gone so high. +As a fix 4.0 adds support for hybrid ``MIN()``, ``MAX()`` speculative retry policies (`CASSANDRA-14293 +`_). This means if the normal ``p99`` for the +table is <50ms, we will still speculate at this value and not drag the tail latencies up... but if the ``p99th`` goes above what we know we +should never exceed we use that instead. + +In 4.0 the values (case-insensitive) discussed in the following table are supported: + +============================ ======================== ============================================================================= + Format Example Description +============================ ======================== ============================================================================= + ``XPERCENTILE`` 90.5PERCENTILE Coordinators record average per-table response times for all replicas. + If a replica takes longer than ``X`` percent of this table's average + response time, the coordinator queries an additional replica. + ``X`` must be between 0 and 100. + ``XP`` 90.5P Synonym for ``XPERCENTILE`` + ``Yms`` 25ms If a replica takes more than ``Y`` milliseconds to respond, + the coordinator queries an additional replica. + ``MIN(XPERCENTILE,YMS)`` MIN(99PERCENTILE,35MS) A hybrid policy that will use either the specified percentile or fixed + milliseconds depending on which value is lower at the time of calculation. + Parameters are ``XPERCENTILE``, ``XP``, or ``Yms``. + This is helpful to help protect against a single slow instance; in the + happy case the 99th percentile is normally lower than the specified + fixed value however, a slow host may skew the percentile very high + meaning the slower the cluster gets, the higher the value of the percentile, + and the higher the calculated time used to determine if we should + speculate or not. This allows us to set an upper limit that we want to + speculate at, but avoid skewing the tail latencies by speculating at the + lower value when the percentile is less than the specified fixed upper bound. + ``MAX(XPERCENTILE,YMS)`` MAX(90.5P,25ms) A hybrid policy that will use either the specified percentile or fixed + milliseconds depending on which value is higher at the time of calculation. + ``ALWAYS`` Coordinators always query all replicas. + ``NEVER`` Coordinators never query additional replicas. +============================ =================== ============================================================================= + +As of version 4.0 speculative retry allows more friendly params (`CASSANDRA-13876 +`_). The ``speculative_retry`` is more flexible with case. As an example a +value does not have to be ``NONE``, and the following are supported alternatives. + +:: + + alter table users WITH speculative_retry = 'none'; + alter table users WITH speculative_retry = 'None'; + +The text component is case insensitive and for ``nPERCENTILE`` version 4.0 allows ``nP``, for instance ``99p``. +In a hybrid value for speculative retry, one of the two values must be a fixed millisecond value and the other a percentile value. + +Some examples: + +:: + + min(99percentile,50ms) + max(99p,50MS) + MAX(99P,50ms) + MIN(99.9PERCENTILE,50ms) + max(90percentile,100MS) + MAX(100.0PERCENTILE,60ms) + +Two values of the same kind cannot be specified such as ``min(90percentile,99percentile)`` as it wouldn’t be a hybrid value. +This setting does not affect reads with consistency level ``ALL`` because they already query all replicas. + +Note that frequently reading from additional replicas can hurt cluster performance. +When in doubt, keep the default ``99PERCENTILE``. + + +``additional_write_policy`` specifies the threshold at which a cheap quorum write will be upgraded to include transient replicas. + +.. _cql-compaction-options: + +Compaction options +################## + +The ``compaction`` options must at least define the ``'class'`` sub-option, that defines the compaction strategy class +to use. The supported class are ``'SizeTieredCompactionStrategy'`` (:ref:`STCS `), +``'LeveledCompactionStrategy'`` (:ref:`LCS `) and ``'TimeWindowCompactionStrategy'`` (:ref:`TWCS `) (the +``'DateTieredCompactionStrategy'`` is also supported but is deprecated and ``'TimeWindowCompactionStrategy'`` should be +preferred instead). The default is ``'SizeTieredCompactionStrategy'``. Custom strategy can be provided by specifying the full class name as a :ref:`string constant +`. + +All default strategies support a number of :ref:`common options `, as well as options specific to +the strategy chosen (see the section corresponding to your strategy for details: :ref:`STCS `, :ref:`LCS +` and :ref:`TWCS `). + +.. _cql-compression-options: + +Compression options +################### + +The ``compression`` options define if and how the sstables of the table are compressed. Compression is configured on a per-table +basis as an optional argument to ``CREATE TABLE`` or ``ALTER TABLE``. The following sub-options are +available: + +========================= =============== ============================================================================= + Option Default Description +========================= =============== ============================================================================= + ``class`` LZ4Compressor The compression algorithm to use. Default compressor are: LZ4Compressor, + SnappyCompressor, DeflateCompressor and ZstdCompressor. Use ``'enabled' : false`` to disable + compression. Custom compressor can be provided by specifying the full class + name as a “string constant”:#constants. + + ``enabled`` true Enable/disable sstable compression. If the ``enabled`` option is set to ``false`` no other + options must be specified. + + ``chunk_length_in_kb`` 64 On disk SSTables are compressed by block (to allow random reads). This + defines the size (in KB) of said block. Bigger values may improve the + compression rate, but increases the minimum size of data to be read from disk + for a read. The default value is an optimal value for compressing tables. Chunk length must + be a power of 2 because so is assumed so when computing the chunk number from an uncompressed + file offset. Block size may be adjusted based on read/write access patterns such as: + + - How much data is typically requested at once + - Average size of rows in the table + + ``crc_check_chance`` 1.0 Determines how likely Cassandra is to verify the checksum on each compression chunk during + reads. + + ``compression_level`` 3 Compression level. It is only applicable for ``ZstdCompressor`` and accepts values between + ``-131072`` and ``22``. +========================= =============== ============================================================================= + + +For instance, to create a table with LZ4Compressor and a chunk_lenth_in_kb of 4KB:: + + CREATE TABLE simple ( + id int, + key text, + value text, + PRIMARY KEY (key, value) + ) with compression = {'class': 'LZ4Compressor', 'chunk_length_in_kb': 4}; + + +.. _cql-caching-options: + +Caching options +############### + +Caching optimizes the use of cache memory of a table. The cached data is weighed by size and access frequency. The ``caching`` +options allows to configure both the *key cache* and the *row cache* for the table. The following +sub-options are available: + +======================== ========= ==================================================================================== + Option Default Description +======================== ========= ==================================================================================== + ``keys`` ALL Whether to cache keys (“key cache”) for this table. Valid values are: ``ALL`` and + ``NONE``. + ``rows_per_partition`` NONE The amount of rows to cache per partition (“row cache”). If an integer ``n`` is + specified, the first ``n`` queried rows of a partition will be cached. Other + possible options are ``ALL``, to cache all rows of a queried partition, or ``NONE`` + to disable row caching. +======================== ========= ==================================================================================== + + +For instance, to create a table with both a key cache and 10 rows per partition:: + + CREATE TABLE simple ( + id int, + key text, + value text, + PRIMARY KEY (key, value) + ) WITH caching = {'keys': 'ALL', 'rows_per_partition': 10}; + + +Read Repair options +################### + +The ``read_repair`` options configures the read repair behavior to allow tuning for various performance and +consistency behaviors. Two consistency properties are affected by read repair behavior. + +- Monotonic Quorum Reads: Provided by ``BLOCKING``. Monotonic quorum reads prevents reads from appearing to go back + in time in some circumstances. When monotonic quorum reads are not provided and a write fails to reach a quorum of + replicas, it may be visible in one read, and then disappear in a subsequent read. +- Write Atomicity: Provided by ``NONE``. Write atomicity prevents reads from returning partially applied writes. + Cassandra attempts to provide partition level write atomicity, but since only the data covered by a SELECT statement + is repaired by a read repair, read repair can break write atomicity when data is read at a more granular level than it + is written. For example read repair can break write atomicity if you write multiple rows to a clustered partition in a + batch, but then select a single row by specifying the clustering column in a SELECT statement. + +The available read repair settings are: + +Blocking +```````` +The default setting. When ``read_repair`` is set to ``BLOCKING``, and a read repair is triggered, the read will block +on writes sent to other replicas until the CL is reached by the writes. Provides monotonic quorum reads, but not partition +level write atomicity + +None +```` + +When ``read_repair`` is set to ``NONE``, the coordinator will reconcile any differences between replicas, but will not +attempt to repair them. Provides partition level write atomicity, but not monotonic quorum reads. + + +Other considerations: +##################### + +- Adding new columns (see ``ALTER TABLE`` below) is a constant time operation. There is thus no need to try to + anticipate future usage when creating a table. + +.. _alter-table-statement: + +ALTER TABLE +^^^^^^^^^^^ + +Altering an existing table uses the ``ALTER TABLE`` statement: + +.. productionlist:: + alter_table_statement: ALTER TABLE `table_name` `alter_table_instruction` + alter_table_instruction: ADD `column_name` `cql_type` ( ',' `column_name` `cql_type` )* + : | DROP `column_name` ( `column_name` )* + : | WITH `options` + +For instance:: + + ALTER TABLE addamsFamily ADD gravesite varchar; + + ALTER TABLE addamsFamily + WITH comment = 'A most excellent and useful table'; + +The ``ALTER TABLE`` statement can: + +- Add new column(s) to the table (through the ``ADD`` instruction). Note that the primary key of a table cannot be + changed and thus newly added column will, by extension, never be part of the primary key. Also note that :ref:`compact + tables ` have restrictions regarding column addition. Note that this is constant (in the amount of + data the cluster contains) time operation. +- Remove column(s) from the table. This drops both the column and all its content, but note that while the column + becomes immediately unavailable, its content is only removed lazily during compaction. Please also see the warnings + below. Due to lazy removal, the altering itself is a constant (in the amount of data removed or contained in the + cluster) time operation. +- Change some of the table options (through the ``WITH`` instruction). The :ref:`supported options + ` are the same that when creating a table (outside of ``COMPACT STORAGE`` and ``CLUSTERING + ORDER`` that cannot be changed after creation). Note that setting any ``compaction`` sub-options has the effect of + erasing all previous ``compaction`` options, so you need to re-specify all the sub-options if you want to keep them. + The same note applies to the set of ``compression`` sub-options. + +.. warning:: Dropping a column assumes that the timestamps used for the value of this column are "real" timestamp in + microseconds. Using "real" timestamps in microseconds is the default is and is **strongly** recommended but as + Cassandra allows the client to provide any timestamp on any table it is theoretically possible to use another + convention. Please be aware that if you do so, dropping a column will not work correctly. + +.. warning:: Once a column is dropped, it is allowed to re-add a column with the same name than the dropped one + **unless** the type of the dropped column was a (non-frozen) column (due to an internal technical limitation). + + +.. _drop-table-statement: + +DROP TABLE +^^^^^^^^^^ + +Dropping a table uses the ``DROP TABLE`` statement: + +.. productionlist:: + drop_table_statement: DROP TABLE [ IF EXISTS ] `table_name` + +Dropping a table results in the immediate, irreversible removal of the table, including all data it contains. + +If the table does not exist, the statement will return an error, unless ``IF EXISTS`` is used in which case the +operation is a no-op. + +.. _truncate-statement: + +TRUNCATE +^^^^^^^^ + +A table can be truncated using the ``TRUNCATE`` statement: + +.. productionlist:: + truncate_statement: TRUNCATE [ TABLE ] `table_name` + +Note that ``TRUNCATE TABLE foo`` is allowed for consistency with other DDL statements but tables are the only object +that can be truncated currently and so the ``TABLE`` keyword can be omitted. + +Truncating a table permanently removes all existing data from the table, but without removing the table itself. diff --git a/doc/source/cql/definitions.rst b/doc/source/cql/definitions.rst new file mode 100644 index 000000000000..3df6f2099663 --- /dev/null +++ b/doc/source/cql/definitions.rst @@ -0,0 +1,234 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. _UUID: https://en.wikipedia.org/wiki/Universally_unique_identifier + +.. highlight:: cql + +Definitions +----------- + +.. _conventions: + +Conventions +^^^^^^^^^^^ + +To aid in specifying the CQL syntax, we will use the following conventions in this document: + +- Language rules will be given in an informal `BNF variant + `_ notation. In particular, we'll use square brakets + (``[ item ]``) for optional items, ``*`` and ``+`` for repeated items (where ``+`` imply at least one). +- The grammar will also use the following convention for convenience: non-terminal term will be lowercase (and link to + their definition) while terminal keywords will be provided "all caps". Note however that keywords are + :ref:`identifiers` and are thus case insensitive in practice. We will also define some early construction using + regexp, which we'll indicate with ``re()``. +- The grammar is provided for documentation purposes and leave some minor details out. For instance, the comma on the + last column definition in a ``CREATE TABLE`` statement is optional but supported if present even though the grammar in + this document suggests otherwise. Also, not everything accepted by the grammar is necessarily valid CQL. +- References to keywords or pieces of CQL code in running text will be shown in a ``fixed-width font``. + + +.. _identifiers: + +Identifiers and keywords +^^^^^^^^^^^^^^^^^^^^^^^^ + +The CQL language uses *identifiers* (or *names*) to identify tables, columns and other objects. An identifier is a token +matching the regular expression ``[a-zA-Z][a-zA-Z0-9_]*``. + +A number of such identifiers, like ``SELECT`` or ``WITH``, are *keywords*. They have a fixed meaning for the language +and most are reserved. The list of those keywords can be found in :ref:`appendix-A`. + +Identifiers and (unquoted) keywords are case insensitive. Thus ``SELECT`` is the same than ``select`` or ``sElEcT``, and +``myId`` is the same than ``myid`` or ``MYID``. A convention often used (in particular by the samples of this +documentation) is to use upper case for keywords and lower case for other identifiers. + +There is a second kind of identifiers called *quoted identifiers* defined by enclosing an arbitrary sequence of +characters (non empty) in double-quotes(``"``). Quoted identifiers are never keywords. Thus ``"select"`` is not a +reserved keyword and can be used to refer to a column (note that using this is particularly advised), while ``select`` +would raise a parsing error. Also, contrarily to unquoted identifiers and keywords, quoted identifiers are case +sensitive (``"My Quoted Id"`` is *different* from ``"my quoted id"``). A fully lowercase quoted identifier that matches +``[a-zA-Z][a-zA-Z0-9_]*`` is however *equivalent* to the unquoted identifier obtained by removing the double-quote (so +``"myid"`` is equivalent to ``myid`` and to ``myId`` but different from ``"myId"``). Inside a quoted identifier, the +double-quote character can be repeated to escape it, so ``"foo "" bar"`` is a valid identifier. + +.. note:: *quoted identifiers* allows to declare columns with arbitrary names, and those can sometime clash with + specific names used by the server. For instance, when using conditional update, the server will respond with a + result-set containing a special result named ``"[applied]"``. If you’ve declared a column with such a name, this + could potentially confuse some tools and should be avoided. In general, unquoted identifiers should be preferred but + if you use quoted identifiers, it is strongly advised to avoid any name enclosed by squared brackets (like + ``"[applied]"``) and any name that looks like a function call (like ``"f(x)"``). + +More formally, we have: + +.. productionlist:: + identifier: `unquoted_identifier` | `quoted_identifier` + unquoted_identifier: re('[a-zA-Z][a-zA-Z0-9_]*') + quoted_identifier: '"' (any character where " can appear if doubled)+ '"' + +.. _constants: + +Constants +^^^^^^^^^ + +CQL defines the following kind of *constants*: + +.. productionlist:: + constant: `string` | `integer` | `float` | `boolean` | `uuid` | `blob` | NULL + string: '\'' (any character where ' can appear if doubled)+ '\'' + : '$$' (any character other than '$$') '$$' + integer: re('-?[0-9]+') + float: re('-?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9+])?') | NAN | INFINITY + boolean: TRUE | FALSE + uuid: `hex`{8}-`hex`{4}-`hex`{4}-`hex`{4}-`hex`{12} + hex: re("[0-9a-fA-F]") + blob: '0' ('x' | 'X') `hex`+ + +In other words: + +- A string constant is an arbitrary sequence of characters enclosed by single-quote(``'``). A single-quote + can be included by repeating it, e.g. ``'It''s raining today'``. Those are not to be confused with quoted + :ref:`identifiers` that use double-quotes. Alternatively, a string can be defined by enclosing the arbitrary sequence + of characters by two dollar characters, in which case single-quote can be used without escaping (``$$It's raining + today$$``). That latter form is often used when defining :ref:`user-defined functions ` to avoid having to + escape single-quote characters in function body (as they are more likely to occur than ``$$``). +- Integer, float and boolean constant are defined as expected. Note however than float allows the special ``NaN`` and + ``Infinity`` constants. +- CQL supports UUID_ constants. +- Blobs content are provided in hexadecimal and prefixed by ``0x``. +- The special ``NULL`` constant denotes the absence of value. + +For how these constants are typed, see the :ref:`data-types` section. + +Terms +^^^^^ + +CQL has the notion of a *term*, which denotes the kind of values that CQL support. Terms are defined by: + +.. productionlist:: + term: `constant` | `literal` | `function_call` | `arithmetic_operation` | `type_hint` | `bind_marker` + literal: `collection_literal` | `udt_literal` | `tuple_literal` + function_call: `identifier` '(' [ `term` (',' `term`)* ] ')' + arithmetic_operation: '-' `term` | `term` ('+' | '-' | '*' | '/' | '%') `term` + type_hint: '(' `cql_type` `)` term + bind_marker: '?' | ':' `identifier` + +A term is thus one of: + +- A :ref:`constant `. +- A literal for either :ref:`a collection `, :ref:`a user-defined type ` or :ref:`a tuple ` + (see the linked sections for details). +- A function call: see :ref:`the section on functions ` for details on which :ref:`native function + ` exists and how to define your own :ref:`user-defined ones `. +- An arithmetic operation between terms. see :ref:`the section on arithmetic operations ` +- A *type hint*: see the :ref:`related section ` for details. +- A bind marker, which denotes a variable to be bound at execution time. See the section on :ref:`prepared-statements` + for details. A bind marker can be either anonymous (``?``) or named (``:some_name``). The latter form provides a more + convenient way to refer to the variable for binding it and should generally be preferred. + + +Comments +^^^^^^^^ + +A comment in CQL is a line beginning by either double dashes (``--``) or double slash (``//``). + +Multi-line comments are also supported through enclosure within ``/*`` and ``*/`` (but nesting is not supported). + +:: + + -- This is a comment + // This is a comment too + /* This is + a multi-line comment */ + +Statements +^^^^^^^^^^ + +CQL consists of statements that can be divided in the following categories: + +- :ref:`data-definition` statements, to define and change how the data is stored (keyspaces and tables). +- :ref:`data-manipulation` statements, for selecting, inserting and deleting data. +- :ref:`secondary-indexes` statements. +- :ref:`materialized-views` statements. +- :ref:`cql-roles` statements. +- :ref:`cql-permissions` statements. +- :ref:`User-Defined Functions ` statements. +- :ref:`udts` statements. +- :ref:`cql-triggers` statements. + +All the statements are listed below and are described in the rest of this documentation (see links above): + +.. productionlist:: + cql_statement: `statement` [ ';' ] + statement: `ddl_statement` + : | `dml_statement` + : | `secondary_index_statement` + : | `materialized_view_statement` + : | `role_or_permission_statement` + : | `udf_statement` + : | `udt_statement` + : | `trigger_statement` + ddl_statement: `use_statement` + : | `create_keyspace_statement` + : | `alter_keyspace_statement` + : | `drop_keyspace_statement` + : | `create_table_statement` + : | `alter_table_statement` + : | `drop_table_statement` + : | `truncate_statement` + dml_statement: `select_statement` + : | `insert_statement` + : | `update_statement` + : | `delete_statement` + : | `batch_statement` + secondary_index_statement: `create_index_statement` + : | `drop_index_statement` + materialized_view_statement: `create_materialized_view_statement` + : | `drop_materialized_view_statement` + role_or_permission_statement: `create_role_statement` + : | `alter_role_statement` + : | `drop_role_statement` + : | `grant_role_statement` + : | `revoke_role_statement` + : | `list_roles_statement` + : | `grant_permission_statement` + : | `revoke_permission_statement` + : | `list_permissions_statement` + : | `create_user_statement` + : | `alter_user_statement` + : | `drop_user_statement` + : | `list_users_statement` + udf_statement: `create_function_statement` + : | `drop_function_statement` + : | `create_aggregate_statement` + : | `drop_aggregate_statement` + udt_statement: `create_type_statement` + : | `alter_type_statement` + : | `drop_type_statement` + trigger_statement: `create_trigger_statement` + : | `drop_trigger_statement` + +.. _prepared-statements: + +Prepared Statements +^^^^^^^^^^^^^^^^^^^ + +CQL supports *prepared statements*. Prepared statements are an optimization that allows to parse a query only once but +execute it multiple times with different concrete values. + +Any statement that uses at least one bind marker (see :token:`bind_marker`) will need to be *prepared*. After which the statement +can be *executed* by provided concrete values for each of its marker. The exact details of how a statement is prepared +and then executed depends on the CQL driver used and you should refer to your driver documentation. diff --git a/doc/source/cql/dml.rst b/doc/source/cql/dml.rst new file mode 100644 index 000000000000..1308de57ee87 --- /dev/null +++ b/doc/source/cql/dml.rst @@ -0,0 +1,522 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _data-manipulation: + +Data Manipulation +----------------- + +This section describes the statements supported by CQL to insert, update, delete and query data. + +.. _select-statement: + +SELECT +^^^^^^ + +Querying data from data is done using a ``SELECT`` statement: + +.. productionlist:: + select_statement: SELECT [ JSON | DISTINCT ] ( `select_clause` | '*' ) + : FROM `table_name` + : [ WHERE `where_clause` ] + : [ GROUP BY `group_by_clause` ] + : [ ORDER BY `ordering_clause` ] + : [ PER PARTITION LIMIT (`integer` | `bind_marker`) ] + : [ LIMIT (`integer` | `bind_marker`) ] + : [ ALLOW FILTERING ] + select_clause: `selector` [ AS `identifier` ] ( ',' `selector` [ AS `identifier` ] ) + selector: `column_name` + : | `term` + : | CAST '(' `selector` AS `cql_type` ')' + : | `function_name` '(' [ `selector` ( ',' `selector` )* ] ')' + : | COUNT '(' '*' ')' + where_clause: `relation` ( AND `relation` )* + relation: `column_name` `operator` `term` + : '(' `column_name` ( ',' `column_name` )* ')' `operator` `tuple_literal` + : TOKEN '(' `column_name` ( ',' `column_name` )* ')' `operator` `term` + operator: '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEY + group_by_clause: `column_name` ( ',' `column_name` )* + ordering_clause: `column_name` [ ASC | DESC ] ( ',' `column_name` [ ASC | DESC ] )* + +For instance:: + + SELECT name, occupation FROM users WHERE userid IN (199, 200, 207); + SELECT JSON name, occupation FROM users WHERE userid = 199; + SELECT name AS user_name, occupation AS user_occupation FROM users; + + SELECT time, value + FROM events + WHERE event_type = 'myEvent' + AND time > '2011-02-03' + AND time <= '2012-01-01' + + SELECT COUNT (*) AS user_count FROM users; + +The ``SELECT`` statements reads one or more columns for one or more rows in a table. It returns a result-set of the rows +matching the request, where each row contains the values for the selection corresponding to the query. Additionally, +:ref:`functions ` including :ref:`aggregation ` ones can be applied to the result. + +A ``SELECT`` statement contains at least a :ref:`selection clause ` and the name of the table on which +the selection is on (note that CQL does **not** joins or sub-queries and thus a select statement only apply to a single +table). In most case, a select will also have a :ref:`where clause ` and it can optionally have additional +clauses to :ref:`order ` or :ref:`limit ` the results. Lastly, :ref:`queries that require +filtering ` can be allowed if the ``ALLOW FILTERING`` flag is provided. + +.. _selection-clause: + +Selection clause +~~~~~~~~~~~~~~~~ + +The :token:`select_clause` determines which columns needs to be queried and returned in the result-set, as well as any +transformation to apply to this result before returning. It consists of a comma-separated list of *selectors* or, +alternatively, of the wildcard character (``*``) to select all the columns defined in the table. + +Selectors +````````` + +A :token:`selector` can be one of: + +- A column name of the table selected, to retrieve the values for that column. +- A term, which is usually used nested inside other selectors like functions (if a term is selected directly, then the + corresponding column of the result-set will simply have the value of this term for every row returned). +- A casting, which allows to convert a nested selector to a (compatible) type. +- A function call, where the arguments are selector themselves. See the section on :ref:`functions ` for + more details. +- The special call ``COUNT(*)`` to the :ref:`COUNT function `, which counts all non-null results. + +Aliases +``````` + +Every *top-level* selector can also be aliased (using `AS`). If so, the name of the corresponding column in the result +set will be that of the alias. For instance:: + + // Without alias + SELECT intAsBlob(4) FROM t; + + // intAsBlob(4) + // -------------- + // 0x00000004 + + // With alias + SELECT intAsBlob(4) AS four FROM t; + + // four + // ------------ + // 0x00000004 + +.. note:: Currently, aliases aren't recognized anywhere else in the statement where they are used (not in the ``WHERE`` + clause, not in the ``ORDER BY`` clause, ...). You must use the orignal column name instead. + + +``WRITETIME`` and ``TTL`` function +``````````````````````````````````` + +Selection supports two special functions (that aren't allowed anywhere else): ``WRITETIME`` and ``TTL``. Both function +take only one argument and that argument *must* be a column name (so for instance ``TTL(3)`` is invalid). + +Those functions allow to retrieve meta-information that are stored internally for each column, namely: + +- the timestamp of the value of the column for ``WRITETIME``. +- the remaining time to live (in seconds) for the value of the column if it set to expire (and ``null`` otherwise). + +.. _where-clause: + +The ``WHERE`` clause +~~~~~~~~~~~~~~~~~~~~ + +The ``WHERE`` clause specifies which rows must be queried. It is composed of relations on the columns that are part of +the ``PRIMARY KEY`` and/or have a `secondary index <#createIndexStmt>`__ defined on them. + +Not all relations are allowed in a query. For instance, non-equal relations (where ``IN`` is considered as an equal +relation) on a partition key are not supported (but see the use of the ``TOKEN`` method below to do non-equal queries on +the partition key). Moreover, for a given partition key, the clustering columns induce an ordering of rows and relations +on them is restricted to the relations that allow to select a **contiguous** (for the ordering) set of rows. For +instance, given:: + + CREATE TABLE posts ( + userid text, + blog_title text, + posted_at timestamp, + entry_title text, + content text, + category int, + PRIMARY KEY (userid, blog_title, posted_at) + ) + +The following query is allowed:: + + SELECT entry_title, content FROM posts + WHERE userid = 'john doe' + AND blog_title='John''s Blog' + AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31' + +But the following one is not, as it does not select a contiguous set of rows (and we suppose no secondary indexes are +set):: + + // Needs a blog_title to be set to select ranges of posted_at + SELECT entry_title, content FROM posts + WHERE userid = 'john doe' + AND posted_at >= '2012-01-01' AND posted_at < '2012-01-31' + +When specifying relations, the ``TOKEN`` function can be used on the ``PARTITION KEY`` column to query. In that case, +rows will be selected based on the token of their ``PARTITION_KEY`` rather than on the value. Note that the token of a +key depends on the partitioner in use, and that in particular the RandomPartitioner won't yield a meaningful order. Also +note that ordering partitioners always order token values by bytes (so even if the partition key is of type int, +``token(-1) > token(0)`` in particular). Example:: + + SELECT * FROM posts + WHERE token(userid) > token('tom') AND token(userid) < token('bob') + +Moreover, the ``IN`` relation is only allowed on the last column of the partition key and on the last column of the full +primary key. + +It is also possible to “group” ``CLUSTERING COLUMNS`` together in a relation using the tuple notation. For instance:: + + SELECT * FROM posts + WHERE userid = 'john doe' + AND (blog_title, posted_at) > ('John''s Blog', '2012-01-01') + +will request all rows that sorts after the one having “John's Blog” as ``blog_tile`` and '2012-01-01' for ``posted_at`` +in the clustering order. In particular, rows having a ``post_at <= '2012-01-01'`` will be returned as long as their +``blog_title > 'John''s Blog'``, which would not be the case for:: + + SELECT * FROM posts + WHERE userid = 'john doe' + AND blog_title > 'John''s Blog' + AND posted_at > '2012-01-01' + +The tuple notation may also be used for ``IN`` clauses on clustering columns:: + + SELECT * FROM posts + WHERE userid = 'john doe' + AND (blog_title, posted_at) IN (('John''s Blog', '2012-01-01'), ('Extreme Chess', '2014-06-01')) + +The ``CONTAINS`` operator may only be used on collection columns (lists, sets, and maps). In the case of maps, +``CONTAINS`` applies to the map values. The ``CONTAINS KEY`` operator may only be used on map columns and applies to the +map keys. + +.. _group-by-clause: + +Grouping results +~~~~~~~~~~~~~~~~ + +The ``GROUP BY`` option allows to condense into a single row all selected rows that share the same values for a set +of columns. + +Using the ``GROUP BY`` option, it is only possible to group rows at the partition key level or at a clustering column +level. By consequence, the ``GROUP BY`` option only accept as arguments primary key column names in the primary key +order. If a primary key column is restricted by an equality restriction it is not required to be present in the +``GROUP BY`` clause. + +Aggregate functions will produce a separate value for each group. If no ``GROUP BY`` clause is specified, +aggregates functions will produce a single value for all the rows. + +If a column is selected without an aggregate function, in a statement with a ``GROUP BY``, the first value encounter +in each group will be returned. + +.. _ordering-clause: + +Ordering results +~~~~~~~~~~~~~~~~ + +The ``ORDER BY`` clause allows to select the order of the returned results. It takes as argument a list of column names +along with the order for the column (``ASC`` for ascendant and ``DESC`` for descendant, omitting the order being +equivalent to ``ASC``). Currently the possible orderings are limited by the :ref:`clustering order ` +defined on the table: + +- if the table has been defined without any specific ``CLUSTERING ORDER``, then then allowed orderings are the order + induced by the clustering columns and the reverse of that one. +- otherwise, the orderings allowed are the order of the ``CLUSTERING ORDER`` option and the reversed one. + +.. _limit-clause: + +Limiting results +~~~~~~~~~~~~~~~~ + +The ``LIMIT`` option to a ``SELECT`` statement limits the number of rows returned by a query, while the ``PER PARTITION +LIMIT`` option limits the number of rows returned for a given partition by the query. Note that both type of limit can +used in the same statement. + +.. _allow-filtering: + +Allowing filtering +~~~~~~~~~~~~~~~~~~ + +By default, CQL only allows select queries that don't involve “filtering” server side, i.e. queries where we know that +all (live) record read will be returned (maybe partly) in the result set. The reasoning is that those “non filtering” +queries have predictable performance in the sense that they will execute in a time that is proportional to the amount of +data **returned** by the query (which can be controlled through ``LIMIT``). + +The ``ALLOW FILTERING`` option allows to explicitly allow (some) queries that require filtering. Please note that a +query using ``ALLOW FILTERING`` may thus have unpredictable performance (for the definition above), i.e. even a query +that selects a handful of records **may** exhibit performance that depends on the total amount of data stored in the +cluster. + +For instance, considering the following table holding user profiles with their year of birth (with a secondary index on +it) and country of residence:: + + CREATE TABLE users ( + username text PRIMARY KEY, + firstname text, + lastname text, + birth_year int, + country text + ) + + CREATE INDEX ON users(birth_year); + +Then the following queries are valid:: + + SELECT * FROM users; + SELECT * FROM users WHERE birth_year = 1981; + +because in both case, Cassandra guarantees that these queries performance will be proportional to the amount of data +returned. In particular, if no users are born in 1981, then the second query performance will not depend of the number +of user profile stored in the database (not directly at least: due to secondary index implementation consideration, this +query may still depend on the number of node in the cluster, which indirectly depends on the amount of data stored. +Nevertheless, the number of nodes will always be multiple number of magnitude lower than the number of user profile +stored). Of course, both query may return very large result set in practice, but the amount of data returned can always +be controlled by adding a ``LIMIT``. + +However, the following query will be rejected:: + + SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR'; + +because Cassandra cannot guarantee that it won't have to scan large amount of data even if the result to those query is +small. Typically, it will scan all the index entries for users born in 1981 even if only a handful are actually from +France. However, if you “know what you are doing”, you can force the execution of this query by using ``ALLOW +FILTERING`` and so the following query is valid:: + + SELECT * FROM users WHERE birth_year = 1981 AND country = 'FR' ALLOW FILTERING; + +.. _insert-statement: + +INSERT +^^^^^^ + +Inserting data for a row is done using an ``INSERT`` statement: + +.. productionlist:: + insert_statement: INSERT INTO `table_name` ( `names_values` | `json_clause` ) + : [ IF NOT EXISTS ] + : [ USING `update_parameter` ( AND `update_parameter` )* ] + names_values: `names` VALUES `tuple_literal` + json_clause: JSON `string` [ DEFAULT ( NULL | UNSET ) ] + names: '(' `column_name` ( ',' `column_name` )* ')' + +For instance:: + + INSERT INTO NerdMovies (movie, director, main_actor, year) + VALUES ('Serenity', 'Joss Whedon', 'Nathan Fillion', 2005) + USING TTL 86400; + + INSERT INTO NerdMovies JSON '{"movie": "Serenity", + "director": "Joss Whedon", + "year": 2005}'; + +The ``INSERT`` statement writes one or more columns for a given row in a table. Note that since a row is identified by +its ``PRIMARY KEY``, at least the columns composing it must be specified. The list of columns to insert to must be +supplied when using the ``VALUES`` syntax. When using the ``JSON`` syntax, they are optional. See the +section on :ref:`JSON support ` for more detail. + +Note that unlike in SQL, ``INSERT`` does not check the prior existence of the row by default: the row is created if none +existed before, and updated otherwise. Furthermore, there is no mean to know which of creation or update happened. + +It is however possible to use the ``IF NOT EXISTS`` condition to only insert if the row does not exist prior to the +insertion. But please note that using ``IF NOT EXISTS`` will incur a non negligible performance cost (internally, Paxos +will be used) so this should be used sparingly. + +All updates for an ``INSERT`` are applied atomically and in isolation. + +Please refer to the :ref:`UPDATE ` section for informations on the :token:`update_parameter`. + +Also note that ``INSERT`` does not support counters, while ``UPDATE`` does. + +.. _update-statement: + +UPDATE +^^^^^^ + +Updating a row is done using an ``UPDATE`` statement: + +.. productionlist:: + update_statement: UPDATE `table_name` + : [ USING `update_parameter` ( AND `update_parameter` )* ] + : SET `assignment` ( ',' `assignment` )* + : WHERE `where_clause` + : [ IF ( EXISTS | `condition` ( AND `condition` )*) ] + update_parameter: ( TIMESTAMP | TTL ) ( `integer` | `bind_marker` ) + assignment: `simple_selection` '=' `term` + :| `column_name` '=' `column_name` ( '+' | '-' ) `term` + :| `column_name` '=' `list_literal` '+' `column_name` + simple_selection: `column_name` + :| `column_name` '[' `term` ']' + :| `column_name` '.' `field_name + condition: `simple_selection` `operator` `term` + +For instance:: + + UPDATE NerdMovies USING TTL 400 + SET director = 'Joss Whedon', + main_actor = 'Nathan Fillion', + year = 2005 + WHERE movie = 'Serenity'; + + UPDATE UserActions + SET total = total + 2 + WHERE user = B70DE1D0-9908-4AE3-BE34-5573E5B09F14 + AND action = 'click'; + +The ``UPDATE`` statement writes one or more columns for a given row in a table. The :token:`where_clause` is used to +select the row to update and must include all columns composing the ``PRIMARY KEY``. Non primary key columns are then +set using the ``SET`` keyword. + +Note that unlike in SQL, ``UPDATE`` does not check the prior existence of the row by default (except through ``IF``, see +below): the row is created if none existed before, and updated otherwise. Furthermore, there are no means to know +whether a creation or update occurred. + +It is however possible to use the conditions on some columns through ``IF``, in which case the row will not be updated +unless the conditions are met. But, please note that using ``IF`` conditions will incur a non-negligible performance +cost (internally, Paxos will be used) so this should be used sparingly. + +In an ``UPDATE`` statement, all updates within the same partition key are applied atomically and in isolation. + +Regarding the :token:`assignment`: + +- ``c = c + 3`` is used to increment/decrement counters. The column name after the '=' sign **must** be the same than + the one before the '=' sign. Note that increment/decrement is only allowed on counters, and are the *only* update + operations allowed on counters. See the section on :ref:`counters ` for details. +- ``id = id + `` and ``id[value1] = value2`` are for collections, see the :ref:`relevant section + ` for details. +- ``id.field = 3`` is for setting the value of a field on a non-frozen user-defined types. see the :ref:`relevant section + ` for details. + +.. _update-parameters: + +Update parameters +~~~~~~~~~~~~~~~~~ + +The ``UPDATE``, ``INSERT`` (and ``DELETE`` and ``BATCH`` for the ``TIMESTAMP``) statements support the following +parameters: + +- ``TIMESTAMP``: sets the timestamp for the operation. If not specified, the coordinator will use the current time (in + microseconds) at the start of statement execution as the timestamp. This is usually a suitable default. +- ``TTL``: specifies an optional Time To Live (in seconds) for the inserted values. If set, the inserted values are + automatically removed from the database after the specified time. Note that the TTL concerns the inserted values, not + the columns themselves. This means that any subsequent update of the column will also reset the TTL (to whatever TTL + is specified in that update). By default, values never expire. A TTL of 0 is equivalent to no TTL. If the table has a + default_time_to_live, a TTL of 0 will remove the TTL for the inserted or updated values. A TTL of ``null`` is equivalent + to inserting with a TTL of 0. + +.. _delete_statement: + +DELETE +^^^^^^ + +Deleting rows or parts of rows uses the ``DELETE`` statement: + +.. productionlist:: + delete_statement: DELETE [ `simple_selection` ( ',' `simple_selection` ) ] + : FROM `table_name` + : [ USING `update_parameter` ( AND `update_parameter` )* ] + : WHERE `where_clause` + : [ IF ( EXISTS | `condition` ( AND `condition` )*) ] + +For instance:: + + DELETE FROM NerdMovies USING TIMESTAMP 1240003134 + WHERE movie = 'Serenity'; + + DELETE phone FROM Users + WHERE userid IN (C73DE1D3-AF08-40F3-B124-3FF3E5109F22, B70DE1D0-9908-4AE3-BE34-5573E5B09F14); + +The ``DELETE`` statement deletes columns and rows. If column names are provided directly after the ``DELETE`` keyword, +only those columns are deleted from the row indicated by the ``WHERE`` clause. Otherwise, whole rows are removed. + +The ``WHERE`` clause specifies which rows are to be deleted. Multiple rows may be deleted with one statement by using an +``IN`` operator. A range of rows may be deleted using an inequality operator (such as ``>=``). + +``DELETE`` supports the ``TIMESTAMP`` option with the same semantics as in :ref:`updates `. + +In a ``DELETE`` statement, all deletions within the same partition key are applied atomically and in isolation. + +A ``DELETE`` operation can be conditional through the use of an ``IF`` clause, similar to ``UPDATE`` and ``INSERT`` +statements. However, as with ``INSERT`` and ``UPDATE`` statements, this will incur a non-negligible performance cost +(internally, Paxos will be used) and so should be used sparingly. + +.. _batch_statement: + +BATCH +^^^^^ + +Multiple ``INSERT``, ``UPDATE`` and ``DELETE`` can be executed in a single statement by grouping them through a +``BATCH`` statement: + +.. productionlist:: + batch_statement: BEGIN [ UNLOGGED | COUNTER ] BATCH + : [ USING `update_parameter` ( AND `update_parameter` )* ] + : `modification_statement` ( ';' `modification_statement` )* + : APPLY BATCH + modification_statement: `insert_statement` | `update_statement` | `delete_statement` + +For instance:: + + BEGIN BATCH + INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user'); + UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3'; + INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c'); + DELETE name FROM users WHERE userid = 'user1'; + APPLY BATCH; + +The ``BATCH`` statement group multiple modification statements (insertions/updates and deletions) into a single +statement. It serves several purposes: + +- It saves network round-trips between the client and the server (and sometimes between the server coordinator and the + replicas) when batching multiple updates. +- All updates in a ``BATCH`` belonging to a given partition key are performed in isolation. +- By default, all operations in the batch are performed as *logged*, to ensure all mutations eventually complete (or + none will). See the notes on :ref:`UNLOGGED batches ` for more details. + +Note that: + +- ``BATCH`` statements may only contain ``UPDATE``, ``INSERT`` and ``DELETE`` statements (not other batches for instance). +- Batches are *not* a full analogue for SQL transactions. +- If a timestamp is not specified for each operation, then all operations will be applied with the same timestamp + (either one generated automatically, or the timestamp provided at the batch level). Due to Cassandra's conflict + resolution procedure in the case of `timestamp ties `__, operations may + be applied in an order that is different from the order they are listed in the ``BATCH`` statement. To force a + particular operation ordering, you must specify per-operation timestamps. +- A LOGGED batch to a single partition will be converted to an UNLOGGED batch as an optimization. + +.. _unlogged-batches: + +``UNLOGGED`` batches +~~~~~~~~~~~~~~~~~~~~ + +By default, Cassandra uses a batch log to ensure all operations in a batch eventually complete or none will (note +however that operations are only isolated within a single partition). + +There is a performance penalty for batch atomicity when a batch spans multiple partitions. If you do not want to incur +this penalty, you can tell Cassandra to skip the batchlog with the ``UNLOGGED`` option. If the ``UNLOGGED`` option is +used, a failed batch might leave the patch only partly applied. + +``COUNTER`` batches +~~~~~~~~~~~~~~~~~~~ + +Use the ``COUNTER`` option for batched counter updates. Unlike other +updates in Cassandra, counter updates are not idempotent. diff --git a/doc/source/cql/functions.rst b/doc/source/cql/functions.rst new file mode 100644 index 000000000000..965125a79fc8 --- /dev/null +++ b/doc/source/cql/functions.rst @@ -0,0 +1,581 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _cql-functions: + +.. Need some intro for UDF and native functions in general and point those to it. +.. _udfs: +.. _native-functions: + +Functions +--------- + +CQL supports 2 main categories of functions: + +- the :ref:`scalar functions `, which simply take a number of values and produce an output with it. +- the :ref:`aggregate functions `, which are used to aggregate multiple rows results from a + ``SELECT`` statement. + +In both cases, CQL provides a number of native "hard-coded" functions as well as the ability to create new user-defined +functions. + +.. note:: By default, the use of user-defined functions is disabled by default for security concerns (even when + enabled, the execution of user-defined functions is sandboxed and a "rogue" function should not be allowed to do + evil, but no sandbox is perfect so using user-defined functions is opt-in). See the ``enable_user_defined_functions`` + in ``cassandra.yaml`` to enable them. + +A function is identifier by its name: + +.. productionlist:: + function_name: [ `keyspace_name` '.' ] `name` + +.. _scalar-functions: + +Scalar functions +^^^^^^^^^^^^^^^^ + +.. _scalar-native-functions: + +Native functions +~~~~~~~~~~~~~~~~ + +Cast +```` + +The ``cast`` function can be used to converts one native datatype to another. + +The following table describes the conversions supported by the ``cast`` function. Cassandra will silently ignore any +cast converting a datatype into its own datatype. + +=============== ======================================================================================================= + From To +=============== ======================================================================================================= + ``ascii`` ``text``, ``varchar`` + ``bigint`` ``tinyint``, ``smallint``, ``int``, ``float``, ``double``, ``decimal``, ``varint``, ``text``, + ``varchar`` + ``boolean`` ``text``, ``varchar`` + ``counter`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``double``, ``decimal``, ``varint``, + ``text``, ``varchar`` + ``date`` ``timestamp`` + ``decimal`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``double``, ``varint``, ``text``, + ``varchar`` + ``double`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``decimal``, ``varint``, ``text``, + ``varchar`` + ``float`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``double``, ``decimal``, ``varint``, ``text``, + ``varchar`` + ``inet`` ``text``, ``varchar`` + ``int`` ``tinyint``, ``smallint``, ``bigint``, ``float``, ``double``, ``decimal``, ``varint``, ``text``, + ``varchar`` + ``smallint`` ``tinyint``, ``int``, ``bigint``, ``float``, ``double``, ``decimal``, ``varint``, ``text``, + ``varchar`` + ``time`` ``text``, ``varchar`` + ``timestamp`` ``date``, ``text``, ``varchar`` + ``timeuuid`` ``timestamp``, ``date``, ``text``, ``varchar`` + ``tinyint`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``double``, ``decimal``, ``varint``, + ``text``, ``varchar`` + ``uuid`` ``text``, ``varchar`` + ``varint`` ``tinyint``, ``smallint``, ``int``, ``bigint``, ``float``, ``double``, ``decimal``, ``text``, + ``varchar`` +=============== ======================================================================================================= + +The conversions rely strictly on Java's semantics. For example, the double value 1 will be converted to the text value +'1.0'. For instance:: + + SELECT avg(cast(count as double)) FROM myTable + +Token +````` + +The ``token`` function allows to compute the token for a given partition key. The exact signature of the token function +depends on the table concerned and of the partitioner used by the cluster. + +The type of the arguments of the ``token`` depend on the type of the partition key columns. The return type depend on +the partitioner in use: + +- For Murmur3Partitioner, the return type is ``bigint``. +- For RandomPartitioner, the return type is ``varint``. +- For ByteOrderedPartitioner, the return type is ``blob``. + +For instance, in a cluster using the default Murmur3Partitioner, if a table is defined by:: + + CREATE TABLE users ( + userid text PRIMARY KEY, + username text, + ) + +then the ``token`` function will take a single argument of type ``text`` (in that case, the partition key is ``userid`` +(there is no clustering columns so the partition key is the same than the primary key)), and the return type will be +``bigint``. + +Uuid +```` +The ``uuid`` function takes no parameters and generates a random type 4 uuid suitable for use in ``INSERT`` or +``UPDATE`` statements. + +.. _timeuuid-functions: + +Timeuuid functions +`````````````````` + +``now`` +####### + +The ``now`` function takes no arguments and generates, on the coordinator node, a new unique timeuuid at the +time the function is invoked. Note that this method is useful for insertion but is largely non-sensical in +``WHERE`` clauses. For instance, a query of the form:: + + SELECT * FROM myTable WHERE t = now() + +will never return any result by design, since the value returned by ``now()`` is guaranteed to be unique. + +``currentTimeUUID`` is an alias of ``now``. + +``minTimeuuid`` and ``maxTimeuuid`` +################################### + +The ``minTimeuuid`` (resp. ``maxTimeuuid``) function takes a ``timestamp`` value ``t`` (which can be `either a timestamp +or a date string `) and return a *fake* ``timeuuid`` corresponding to the *smallest* (resp. *biggest*) +possible ``timeuuid`` having for timestamp ``t``. So for instance:: + + SELECT * FROM myTable + WHERE t > maxTimeuuid('2013-01-01 00:05+0000') + AND t < minTimeuuid('2013-02-02 10:00+0000') + +will select all rows where the ``timeuuid`` column ``t`` is strictly older than ``'2013-01-01 00:05+0000'`` but strictly +younger than ``'2013-02-02 10:00+0000'``. Please note that ``t >= maxTimeuuid('2013-01-01 00:05+0000')`` would still +*not* select a ``timeuuid`` generated exactly at '2013-01-01 00:05+0000' and is essentially equivalent to ``t > +maxTimeuuid('2013-01-01 00:05+0000')``. + +.. note:: We called the values generated by ``minTimeuuid`` and ``maxTimeuuid`` *fake* UUID because they do no respect + the Time-Based UUID generation process specified by the `RFC 4122 `__. In + particular, the value returned by these 2 methods will not be unique. This means you should only use those methods + for querying (as in the example above). Inserting the result of those methods is almost certainly *a bad idea*. + +Datetime functions +`````````````````` + +Retrieving the current date/time +################################ + +The following functions can be used to retrieve the date/time at the time where the function is invoked: + +===================== =============== + Function name Output type +===================== =============== + ``currentTimestamp`` ``timestamp`` + ``currentDate`` ``date`` + ``currentTime`` ``time`` + ``currentTimeUUID`` ``timeUUID`` +===================== =============== + +For example the last 2 days of data can be retrieved using:: + + SELECT * FROM myTable WHERE date >= currentDate() - 2d + +Time conversion functions +######################### + +A number of functions are provided to “convert” a ``timeuuid``, a ``timestamp`` or a ``date`` into another ``native`` +type. + +===================== =============== =================================================================== + Function name Input type Description +===================== =============== =================================================================== + ``toDate`` ``timeuuid`` Converts the ``timeuuid`` argument into a ``date`` type + ``toDate`` ``timestamp`` Converts the ``timestamp`` argument into a ``date`` type + ``toTimestamp`` ``timeuuid`` Converts the ``timeuuid`` argument into a ``timestamp`` type + ``toTimestamp`` ``date`` Converts the ``date`` argument into a ``timestamp`` type + ``toUnixTimestamp`` ``timeuuid`` Converts the ``timeuuid`` argument into a ``bigInt`` raw value + ``toUnixTimestamp`` ``timestamp`` Converts the ``timestamp`` argument into a ``bigInt`` raw value + ``toUnixTimestamp`` ``date`` Converts the ``date`` argument into a ``bigInt`` raw value + ``dateOf`` ``timeuuid`` Similar to ``toTimestamp(timeuuid)`` (DEPRECATED) + ``unixTimestampOf`` ``timeuuid`` Similar to ``toUnixTimestamp(timeuuid)`` (DEPRECATED) +===================== =============== =================================================================== + +Blob conversion functions +````````````````````````` +A number of functions are provided to “convert” the native types into binary data (``blob``). For every +```` ``type`` supported by CQL (a notable exceptions is ``blob``, for obvious reasons), the function +``typeAsBlob`` takes a argument of type ``type`` and return it as a ``blob``. Conversely, the function ``blobAsType`` +takes a 64-bit ``blob`` argument and convert it to a ``bigint`` value. And so for instance, ``bigintAsBlob(3)`` is +``0x0000000000000003`` and ``blobAsBigint(0x0000000000000003)`` is ``3``. + +.. _user-defined-scalar-functions: + +User-defined functions +~~~~~~~~~~~~~~~~~~~~~~ + +User-defined functions allow execution of user-provided code in Cassandra. By default, Cassandra supports defining +functions in *Java* and *JavaScript*. Support for other JSR 223 compliant scripting languages (such as Python, Ruby, and +Scala) can be added by adding a JAR to the classpath. + +UDFs are part of the Cassandra schema. As such, they are automatically propagated to all nodes in the cluster. + +UDFs can be *overloaded* - i.e. multiple UDFs with different argument types but the same function name. Example:: + + CREATE FUNCTION sample ( arg int ) ...; + CREATE FUNCTION sample ( arg text ) ...; + +User-defined functions are susceptible to all of the normal problems with the chosen programming language. Accordingly, +implementations should be safe against null pointer exceptions, illegal arguments, or any other potential source of +exceptions. An exception during function execution will result in the entire statement failing. + +It is valid to use *complex* types like collections, tuple types and user-defined types as argument and return types. +Tuple types and user-defined types are handled by the conversion functions of the DataStax Java Driver. Please see the +documentation of the Java Driver for details on handling tuple types and user-defined types. + +Arguments for functions can be literals or terms. Prepared statement placeholders can be used, too. + +Note that you can use the double-quoted string syntax to enclose the UDF source code. For example:: + + CREATE FUNCTION some_function ( arg int ) + RETURNS NULL ON NULL INPUT + RETURNS int + LANGUAGE java + AS $$ return arg; $$; + + SELECT some_function(column) FROM atable ...; + UPDATE atable SET col = some_function(?) ...; + + CREATE TYPE custom_type (txt text, i int); + CREATE FUNCTION fct_using_udt ( udtarg frozen ) + RETURNS NULL ON NULL INPUT + RETURNS text + LANGUAGE java + AS $$ return udtarg.getString("txt"); $$; + +User-defined functions can be used in ``SELECT``, ``INSERT`` and ``UPDATE`` statements. + +The implicitly available ``udfContext`` field (or binding for script UDFs) provides the necessary functionality to +create new UDT and tuple values:: + + CREATE TYPE custom_type (txt text, i int); + CREATE FUNCTION fct\_using\_udt ( somearg int ) + RETURNS NULL ON NULL INPUT + RETURNS custom_type + LANGUAGE java + AS $$ + UDTValue udt = udfContext.newReturnUDTValue(); + udt.setString("txt", "some string"); + udt.setInt("i", 42); + return udt; + $$; + +The definition of the ``UDFContext`` interface can be found in the Apache Cassandra source code for +``org.apache.cassandra.cql3.functions.UDFContext``. + +.. code-block:: java + + public interface UDFContext + { + UDTValue newArgUDTValue(String argName); + UDTValue newArgUDTValue(int argNum); + UDTValue newReturnUDTValue(); + UDTValue newUDTValue(String udtName); + TupleValue newArgTupleValue(String argName); + TupleValue newArgTupleValue(int argNum); + TupleValue newReturnTupleValue(); + TupleValue newTupleValue(String cqlDefinition); + } + +Java UDFs already have some imports for common interfaces and classes defined. These imports are: + +.. code-block:: java + + import java.nio.ByteBuffer; + import java.util.List; + import java.util.Map; + import java.util.Set; + import org.apache.cassandra.cql3.functions.UDFContext; + import com.datastax.driver.core.TypeCodec; + import com.datastax.driver.core.TupleValue; + import com.datastax.driver.core.UDTValue; + +Please note, that these convenience imports are not available for script UDFs. + +.. _create-function-statement: + +CREATE FUNCTION +``````````````` + +Creating a new user-defined function uses the ``CREATE FUNCTION`` statement: + +.. productionlist:: + create_function_statement: CREATE [ OR REPLACE ] FUNCTION [ IF NOT EXISTS] + : `function_name` '(' `arguments_declaration` ')' + : [ CALLED | RETURNS NULL ] ON NULL INPUT + : RETURNS `cql_type` + : LANGUAGE `identifier` + : AS `string` + arguments_declaration: `identifier` `cql_type` ( ',' `identifier` `cql_type` )* + +For instance:: + + CREATE OR REPLACE FUNCTION somefunction(somearg int, anotherarg text, complexarg frozen, listarg list) + RETURNS NULL ON NULL INPUT + RETURNS text + LANGUAGE java + AS $$ + // some Java code + $$; + + CREATE FUNCTION IF NOT EXISTS akeyspace.fname(someArg int) + CALLED ON NULL INPUT + RETURNS text + LANGUAGE java + AS $$ + // some Java code + $$; + +``CREATE FUNCTION`` with the optional ``OR REPLACE`` keywords either creates a function or replaces an existing one with +the same signature. A ``CREATE FUNCTION`` without ``OR REPLACE`` fails if a function with the same signature already +exists. + +If the optional ``IF NOT EXISTS`` keywords are used, the function will +only be created if another function with the same signature does not +exist. + +``OR REPLACE`` and ``IF NOT EXISTS`` cannot be used together. + +Behavior on invocation with ``null`` values must be defined for each +function. There are two options: + +#. ``RETURNS NULL ON NULL INPUT`` declares that the function will always + return ``null`` if any of the input arguments is ``null``. +#. ``CALLED ON NULL INPUT`` declares that the function will always be + executed. + +Function Signature +################## + +Signatures are used to distinguish individual functions. The signature consists of: + +#. The fully qualified function name - i.e *keyspace* plus *function-name* +#. The concatenated list of all argument types + +Note that keyspace names, function names and argument types are subject to the default naming conventions and +case-sensitivity rules. + +Functions belong to a keyspace. If no keyspace is specified in ````, the current keyspace is used (i.e. +the keyspace specified using the ``USE`` statement). It is not possible to create a user-defined function in one of the +system keyspaces. + +.. _drop-function-statement: + +DROP FUNCTION +````````````` + +Dropping a function uses the ``DROP FUNCTION`` statement: + +.. productionlist:: + drop_function_statement: DROP FUNCTION [ IF EXISTS ] `function_name` [ '(' `arguments_signature` ')' ] + arguments_signature: `cql_type` ( ',' `cql_type` )* + +For instance:: + + DROP FUNCTION myfunction; + DROP FUNCTION mykeyspace.afunction; + DROP FUNCTION afunction ( int ); + DROP FUNCTION afunction ( text ); + +You must specify the argument types (:token:`arguments_signature`) of the function to drop if there are multiple +functions with the same name but a different signature (overloaded functions). + +``DROP FUNCTION`` with the optional ``IF EXISTS`` keywords drops a function if it exists, but does not throw an error if +it doesn't + +.. _aggregate-functions: + +Aggregate functions +^^^^^^^^^^^^^^^^^^^ + +Aggregate functions work on a set of rows. They receive values for each row and returns one value for the whole set. + +If ``normal`` columns, ``scalar functions``, ``UDT`` fields, ``writetime`` or ``ttl`` are selected together with +aggregate functions, the values returned for them will be the ones of the first row matching the query. + +Native aggregates +~~~~~~~~~~~~~~~~~ + +.. _count-function: + +Count +````` + +The ``count`` function can be used to count the rows returned by a query. Example:: + + SELECT COUNT (*) FROM plays; + SELECT COUNT (1) FROM plays; + +It also can be used to count the non null value of a given column:: + + SELECT COUNT (scores) FROM plays; + +Max and Min +``````````` + +The ``max`` and ``min`` functions can be used to compute the maximum and the minimum value returned by a query for a +given column. For instance:: + + SELECT MIN (players), MAX (players) FROM plays WHERE game = 'quake'; + +Sum +``` + +The ``sum`` function can be used to sum up all the values returned by a query for a given column. For instance:: + + SELECT SUM (players) FROM plays; + +Avg +``` + +The ``avg`` function can be used to compute the average of all the values returned by a query for a given column. For +instance:: + + SELECT AVG (players) FROM plays; + +.. _user-defined-aggregates-functions: + +User-Defined Aggregates +~~~~~~~~~~~~~~~~~~~~~~~ + +User-defined aggregates allow the creation of custom aggregate functions. Common examples of aggregate functions are +*count*, *min*, and *max*. + +Each aggregate requires an *initial state* (``INITCOND``, which defaults to ``null``) of type ``STYPE``. The first +argument of the state function must have type ``STYPE``. The remaining arguments of the state function must match the +types of the user-defined aggregate arguments. The state function is called once for each row, and the value returned by +the state function becomes the new state. After all rows are processed, the optional ``FINALFUNC`` is executed with last +state value as its argument. + +``STYPE`` is mandatory in order to be able to distinguish possibly overloaded versions of the state and/or final +function (since the overload can appear after creation of the aggregate). + +User-defined aggregates can be used in ``SELECT`` statement. + +A complete working example for user-defined aggregates (assuming that a keyspace has been selected using the ``USE`` +statement):: + + CREATE OR REPLACE FUNCTION averageState(state tuple, val int) + CALLED ON NULL INPUT + RETURNS tuple + LANGUAGE java + AS $$ + if (val != null) { + state.setInt(0, state.getInt(0)+1); + state.setLong(1, state.getLong(1)+val.intValue()); + } + return state; + $$; + + CREATE OR REPLACE FUNCTION averageFinal (state tuple) + CALLED ON NULL INPUT + RETURNS double + LANGUAGE java + AS $$ + double r = 0; + if (state.getInt(0) == 0) return null; + r = state.getLong(1); + r /= state.getInt(0); + return Double.valueOf(r); + $$; + + CREATE OR REPLACE AGGREGATE average(int) + SFUNC averageState + STYPE tuple + FINALFUNC averageFinal + INITCOND (0, 0); + + CREATE TABLE atable ( + pk int PRIMARY KEY, + val int + ); + + INSERT INTO atable (pk, val) VALUES (1,1); + INSERT INTO atable (pk, val) VALUES (2,2); + INSERT INTO atable (pk, val) VALUES (3,3); + INSERT INTO atable (pk, val) VALUES (4,4); + + SELECT average(val) FROM atable; + +.. _create-aggregate-statement: + +CREATE AGGREGATE +```````````````` + +Creating (or replacing) a user-defined aggregate function uses the ``CREATE AGGREGATE`` statement: + +.. productionlist:: + create_aggregate_statement: CREATE [ OR REPLACE ] AGGREGATE [ IF NOT EXISTS ] + : `function_name` '(' `arguments_signature` ')' + : SFUNC `function_name` + : STYPE `cql_type` + : [ FINALFUNC `function_name` ] + : [ INITCOND `term` ] + +See above for a complete example. + +``CREATE AGGREGATE`` with the optional ``OR REPLACE`` keywords either creates an aggregate or replaces an existing one +with the same signature. A ``CREATE AGGREGATE`` without ``OR REPLACE`` fails if an aggregate with the same signature +already exists. + +``CREATE AGGREGATE`` with the optional ``IF NOT EXISTS`` keywords either creates an aggregate if it does not already +exist. + +``OR REPLACE`` and ``IF NOT EXISTS`` cannot be used together. + +``STYPE`` defines the type of the state value and must be specified. + +The optional ``INITCOND`` defines the initial state value for the aggregate. It defaults to ``null``. A non-\ ``null`` +``INITCOND`` must be specified for state functions that are declared with ``RETURNS NULL ON NULL INPUT``. + +``SFUNC`` references an existing function to be used as the state modifying function. The type of first argument of the +state function must match ``STYPE``. The remaining argument types of the state function must match the argument types of +the aggregate function. State is not updated for state functions declared with ``RETURNS NULL ON NULL INPUT`` and called +with ``null``. + +The optional ``FINALFUNC`` is called just before the aggregate result is returned. It must take only one argument with +type ``STYPE``. The return type of the ``FINALFUNC`` may be a different type. A final function declared with ``RETURNS +NULL ON NULL INPUT`` means that the aggregate's return value will be ``null``, if the last state is ``null``. + +If no ``FINALFUNC`` is defined, the overall return type of the aggregate function is ``STYPE``. If a ``FINALFUNC`` is +defined, it is the return type of that function. + +.. _drop-aggregate-statement: + +DROP AGGREGATE +`````````````` + +Dropping an user-defined aggregate function uses the ``DROP AGGREGATE`` statement: + +.. productionlist:: + drop_aggregate_statement: DROP AGGREGATE [ IF EXISTS ] `function_name` [ '(' `arguments_signature` ')' ] + +For instance:: + + DROP AGGREGATE myAggregate; + DROP AGGREGATE myKeyspace.anAggregate; + DROP AGGREGATE someAggregate ( int ); + DROP AGGREGATE someAggregate ( text ); + +The ``DROP AGGREGATE`` statement removes an aggregate created using ``CREATE AGGREGATE``. You must specify the argument +types of the aggregate to drop if there are multiple aggregates with the same name but a different signature (overloaded +aggregates). + +``DROP AGGREGATE`` with the optional ``IF EXISTS`` keywords drops an aggregate if it exists, and does nothing if a +function with the signature does not exist. diff --git a/doc/source/cql/index.rst b/doc/source/cql/index.rst new file mode 100644 index 000000000000..b4c21cf6c5e9 --- /dev/null +++ b/doc/source/cql/index.rst @@ -0,0 +1,47 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. _cql: + +The Cassandra Query Language (CQL) +================================== + +This document describes the Cassandra Query Language (CQL) [#]_. Note that this document describes the last version of +the languages. However, the `changes <#changes>`_ section provides the diff between the different versions of CQL. + +CQL offers a model close to SQL in the sense that data is put in *tables* containing *rows* of *columns*. For +that reason, when used in this document, these terms (tables, rows and columns) have the same definition than they have +in SQL. + +.. toctree:: + :maxdepth: 2 + + definitions + types + ddl + dml + indexes + mvs + security + functions + operators + json + triggers + appendices + changes + +.. [#] Technically, this document CQL version 3, which is not backward compatible with CQL version 1 and 2 (which have + been deprecated and remove) and differs from it in numerous ways. diff --git a/doc/source/cql/indexes.rst b/doc/source/cql/indexes.rst new file mode 100644 index 000000000000..81fe429d0463 --- /dev/null +++ b/doc/source/cql/indexes.rst @@ -0,0 +1,83 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _secondary-indexes: + +Secondary Indexes +----------------- + +CQL supports creating secondary indexes on tables, allowing queries on the table to use those indexes. A secondary index +is identified by a name defined by: + +.. productionlist:: + index_name: re('[a-zA-Z_0-9]+') + + + +.. _create-index-statement: + +CREATE INDEX +^^^^^^^^^^^^ + +Creating a secondary index on a table uses the ``CREATE INDEX`` statement: + +.. productionlist:: + create_index_statement: CREATE [ CUSTOM ] INDEX [ IF NOT EXISTS ] [ `index_name` ] + : ON `table_name` '(' `index_identifier` ')' + : [ USING `string` [ WITH OPTIONS = `map_literal` ] ] + index_identifier: `column_name` + :| ( KEYS | VALUES | ENTRIES | FULL ) '(' `column_name` ')' + +For instance:: + + CREATE INDEX userIndex ON NerdMovies (user); + CREATE INDEX ON Mutants (abilityId); + CREATE INDEX ON users (keys(favs)); + CREATE CUSTOM INDEX ON users (email) USING 'path.to.the.IndexClass'; + CREATE CUSTOM INDEX ON users (email) USING 'path.to.the.IndexClass' WITH OPTIONS = {'storage': '/mnt/ssd/indexes/'}; + +The ``CREATE INDEX`` statement is used to create a new (automatic) secondary index for a given (existing) column in a +given table. A name for the index itself can be specified before the ``ON`` keyword, if desired. If data already exists +for the column, it will be indexed asynchronously. After the index is created, new data for the column is indexed +automatically at insertion time. + +Attempting to create an already existing index will return an error unless the ``IF NOT EXISTS`` option is used. If it +is used, the statement will be a no-op if the index already exists. + +Indexes on Map Keys +~~~~~~~~~~~~~~~~~~~ + +When creating an index on a :ref:`maps `, you may index either the keys or the values. If the column identifier is +placed within the ``keys()`` function, the index will be on the map keys, allowing you to use ``CONTAINS KEY`` in +``WHERE`` clauses. Otherwise, the index will be on the map values. + +.. _drop-index-statement: + +DROP INDEX +^^^^^^^^^^ + +Dropping a secondary index uses the ``DROP INDEX`` statement: + +.. productionlist:: + drop_index_statement: DROP INDEX [ IF EXISTS ] `index_name` + +The ``DROP INDEX`` statement is used to drop an existing secondary index. The argument of the statement is the index +name, which may optionally specify the keyspace of the index. + +If the index does not exists, the statement will return an error, unless ``IF EXISTS`` is used in which case the +operation is a no-op. diff --git a/doc/source/cql/json.rst b/doc/source/cql/json.rst new file mode 100644 index 000000000000..539180aedda8 --- /dev/null +++ b/doc/source/cql/json.rst @@ -0,0 +1,115 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _cql-json: + +JSON Support +------------ + +Cassandra 2.2 introduces JSON support to :ref:`SELECT ` and :ref:`INSERT ` +statements. This support does not fundamentally alter the CQL API (for example, the schema is still enforced), it simply +provides a convenient way to work with JSON documents. + +SELECT JSON +^^^^^^^^^^^ + +With ``SELECT`` statements, the ``JSON`` keyword can be used to return each row as a single ``JSON`` encoded map. The +remainder of the ``SELECT`` statement behavior is the same. + +The result map keys are the same as the column names in a normal result set. For example, a statement like ``SELECT JSON +a, ttl(b) FROM ...`` would result in a map with keys ``"a"`` and ``"ttl(b)"``. However, this is one notable exception: +for symmetry with ``INSERT JSON`` behavior, case-sensitive column names with upper-case letters will be surrounded with +double quotes. For example, ``SELECT JSON myColumn FROM ...`` would result in a map key ``"\"myColumn\""`` (note the +escaped quotes). + +The map values will ``JSON``-encoded representations (as described below) of the result set values. + +INSERT JSON +^^^^^^^^^^^ + +With ``INSERT`` statements, the new ``JSON`` keyword can be used to enable inserting a ``JSON`` encoded map as a single +row. The format of the ``JSON`` map should generally match that returned by a ``SELECT JSON`` statement on the same +table. In particular, case-sensitive column names should be surrounded with double quotes. For example, to insert into a +table with two columns named "myKey" and "value", you would do the following:: + + INSERT INTO mytable JSON '{ "\"myKey\"": 0, "value": 0}' + +By default (or if ``DEFAULT NULL`` is explicitly used), a column omitted from the ``JSON`` map will be set to ``NULL``, +meaning that any pre-existing value for that column will be removed (resulting in a tombstone being created). +Alternatively, if the ``DEFAULT UNSET`` directive is used after the value, omitted column values will be left unset, +meaning that pre-existing values for those column will be preserved. + + +JSON Encoding of Cassandra Data Types +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Where possible, Cassandra will represent and accept data types in their native ``JSON`` representation. Cassandra will +also accept string representations matching the CQL literal format for all single-field types. For example, floats, +ints, UUIDs, and dates can be represented by CQL literal strings. However, compound types, such as collections, tuples, +and user-defined types must be represented by native ``JSON`` collections (maps and lists) or a JSON-encoded string +representation of the collection. + +The following table describes the encodings that Cassandra will accept in ``INSERT JSON`` values (and ``fromJson()`` +arguments) as well as the format Cassandra will use when returning data for ``SELECT JSON`` statements (and +``fromJson()``): + +=============== ======================== =============== ============================================================== + Type Formats accepted Return format Notes +=============== ======================== =============== ============================================================== + ``ascii`` string string Uses JSON's ``\u`` character escape + ``bigint`` integer, string integer String must be valid 64 bit integer + ``blob`` string string String should be 0x followed by an even number of hex digits + ``boolean`` boolean, string boolean String must be "true" or "false" + ``date`` string string Date in format ``YYYY-MM-DD``, timezone UTC + ``decimal`` integer, float, string float May exceed 32 or 64-bit IEEE-754 floating point precision in + client-side decoder + ``double`` integer, float, string float String must be valid integer or float + ``float`` integer, float, string float String must be valid integer or float + ``inet`` string string IPv4 or IPv6 address + ``int`` integer, string integer String must be valid 32 bit integer + ``list`` list, string list Uses JSON's native list representation + ``map`` map, string map Uses JSON's native map representation + ``smallint`` integer, string integer String must be valid 16 bit integer + ``set`` list, string list Uses JSON's native list representation + ``text`` string string Uses JSON's ``\u`` character escape + ``time`` string string Time of day in format ``HH-MM-SS[.fffffffff]`` + ``timestamp`` integer, string string A timestamp. Strings constant allows to input :ref:`timestamps + as dates `. Datestamps with format ``YYYY-MM-DD + HH:MM:SS.SSS`` are returned. + ``timeuuid`` string string Type 1 UUID. See :token:`constant` for the UUID format + ``tinyint`` integer, string integer String must be valid 8 bit integer + ``tuple`` list, string list Uses JSON's native list representation + ``UDT`` map, string map Uses JSON's native map representation with field names as keys + ``uuid`` string string See :token:`constant` for the UUID format + ``varchar`` string string Uses JSON's ``\u`` character escape + ``varint`` integer, string integer Variable length; may overflow 32 or 64 bit integers in + client-side decoder +=============== ======================== =============== ============================================================== + +The fromJson() Function +^^^^^^^^^^^^^^^^^^^^^^^ + +The ``fromJson()`` function may be used similarly to ``INSERT JSON``, but for a single column value. It may only be used +in the ``VALUES`` clause of an ``INSERT`` statement or as one of the column values in an ``UPDATE``, ``DELETE``, or +``SELECT`` statement. For example, it cannot be used in the selection clause of a ``SELECT`` statement. + +The toJson() Function +^^^^^^^^^^^^^^^^^^^^^ + +The ``toJson()`` function may be used similarly to ``SELECT JSON``, but for a single column value. It may only be used +in the selection clause of a ``SELECT`` statement. diff --git a/doc/source/cql/mvs.rst b/doc/source/cql/mvs.rst new file mode 100644 index 000000000000..200090a60b23 --- /dev/null +++ b/doc/source/cql/mvs.rst @@ -0,0 +1,179 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _materialized-views: + +Materialized Views +------------------ + +Materialized views names are defined by: + +.. productionlist:: + view_name: re('[a-zA-Z_0-9]+') + + +.. _create-materialized-view-statement: + +CREATE MATERIALIZED VIEW +^^^^^^^^^^^^^^^^^^^^^^^^ + +You can create a materialized view on a table using a ``CREATE MATERIALIZED VIEW`` statement: + +.. productionlist:: + create_materialized_view_statement: CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] `view_name` AS + : `select_statement` + : PRIMARY KEY '(' `primary_key` ')' + : WITH `table_options` + +For instance:: + + CREATE MATERIALIZED VIEW monkeySpecies_by_population AS + SELECT * FROM monkeySpecies + WHERE population IS NOT NULL AND species IS NOT NULL + PRIMARY KEY (population, species) + WITH comment='Allow query by population instead of species'; + +The ``CREATE MATERIALIZED VIEW`` statement creates a new materialized view. Each such view is a set of *rows* which +corresponds to rows which are present in the underlying, or base, table specified in the ``SELECT`` statement. A +materialized view cannot be directly updated, but updates to the base table will cause corresponding updates in the +view. + +Creating a materialized view has 3 main parts: + +- The :ref:`select statement ` that restrict the data included in the view. +- The :ref:`primary key ` definition for the view. +- The :ref:`options ` for the view. + +Attempting to create an already existing materialized view will return an error unless the ``IF NOT EXISTS`` option is +used. If it is used, the statement will be a no-op if the materialized view already exists. + +.. note:: By default, materialized views are built in a single thread. The initial build can be parallelized by + increasing the number of threads specified by the property ``concurrent_materialized_view_builders`` in + ``cassandra.yaml``. This property can also be manipulated at runtime through both JMX and the + ``setconcurrentviewbuilders`` and ``getconcurrentviewbuilders`` nodetool commands. + +.. _mv-select: + +MV select statement +``````````````````` + +The select statement of a materialized view creation defines which of the base table is included in the view. That +statement is limited in a number of ways: + +- the :ref:`selection ` is limited to those that only select columns of the base table. In other + words, you can't use any function (aggregate or not), casting, term, etc. Aliases are also not supported. You can + however use `*` as a shortcut of selecting all columns. Further, :ref:`static columns ` cannot be + included in a materialized view (which means ``SELECT *`` isn't allowed if the base table has static columns). +- the ``WHERE`` clause have the following restrictions: + + - it cannot include any :token:`bind_marker`. + - the columns that are not part of the *base table* primary key can only be restricted by an ``IS NOT NULL`` + restriction. No other restriction is allowed. + - as the columns that are part of the *view* primary key cannot be null, they must always be at least restricted by a + ``IS NOT NULL`` restriction (or any other restriction, but they must have one). + +- it cannot have neither an :ref:`ordering clause `, nor a :ref:`limit `, nor :ref:`ALLOW + FILTERING `. + +.. _mv-primary-key: + +MV primary key +`````````````` + +A view must have a primary key and that primary key must conform to the following restrictions: + +- it must contain all the primary key columns of the base table. This ensures that every row of the view correspond to + exactly one row of the base table. +- it can only contain a single column that is not a primary key column in the base table. + +So for instance, give the following base table definition:: + + CREATE TABLE t ( + k int, + c1 int, + c2 int, + v1 int, + v2 int, + PRIMARY KEY (k, c1, c2) + ) + +then the following view definitions are allowed:: + + CREATE MATERIALIZED VIEW mv1 AS + SELECT * FROM t WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL + PRIMARY KEY (c1, k, c2) + + CREATE MATERIALIZED VIEW mv1 AS + SELECT * FROM t WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL + PRIMARY KEY (v1, k, c1, c2) + +but the following ones are **not** allowed:: + + // Error: cannot include both v1 and v2 in the primary key as both are not in the base table primary key + CREATE MATERIALIZED VIEW mv1 AS + SELECT * FROM t WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL AND v1 IS NOT NULL + PRIMARY KEY (v1, v2, k, c1, c2) + + // Error: must include k in the primary as it's a base table primary key column + CREATE MATERIALIZED VIEW mv1 AS + SELECT * FROM t WHERE c1 IS NOT NULL AND c2 IS NOT NULL + PRIMARY KEY (c1, c2) + + +.. _mv-options: + +MV options +`````````` + +A materialized view is internally implemented by a table and as such, creating a MV allows the :ref:`same options than +creating a table `. + + +.. _alter-materialized-view-statement: + +ALTER MATERIALIZED VIEW +^^^^^^^^^^^^^^^^^^^^^^^ + +After creation, you can alter the options of a materialized view using the ``ALTER MATERIALIZED VIEW`` statement: + +.. productionlist:: + alter_materialized_view_statement: ALTER MATERIALIZED VIEW `view_name` WITH `table_options` + +The options that can be updated are the same than at creation time and thus the :ref:`same than for tables +`. + +.. _drop-materialized-view-statement: + +DROP MATERIALIZED VIEW +^^^^^^^^^^^^^^^^^^^^^^ + +Dropping a materialized view users the ``DROP MATERIALIZED VIEW`` statement: + +.. productionlist:: + drop_materialized_view_statement: DROP MATERIALIZED VIEW [ IF EXISTS ] `view_name`; + +If the materialized view does not exists, the statement will return an error, unless ``IF EXISTS`` is used in which case +the operation is a no-op. + +MV Limitations +``````````````` + +.. Note:: Removal of columns not selected in the Materialized View (via ``UPDATE base SET unselected_column = null`` or + ``DELETE unselected_column FROM base``) may shadow missed updates to other columns received by hints or repair. + For this reason, we advise against doing deletions on base columns not selected in views until this is + fixed on CASSANDRA-13826. diff --git a/doc/source/cql/operators.rst b/doc/source/cql/operators.rst new file mode 100644 index 000000000000..1faf0d045463 --- /dev/null +++ b/doc/source/cql/operators.rst @@ -0,0 +1,74 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _arithmetic_operators: + +Arithmetic Operators +-------------------- + +CQL supports the following operators: + +=============== ======================================================================================================= + Operator Description +=============== ======================================================================================================= + \- (unary) Negates operand + \+ Addition + \- Substraction + \* Multiplication + / Division + % Returns the remainder of a division +=============== ======================================================================================================= + +.. _number-arithmetic: + +Number Arithmetic +^^^^^^^^^^^^^^^^^ + +All arithmetic operations are supported on numeric types or counters. + +The return type of the operation will be based on the operand types: + +============= =========== ========== ========== ========== ========== ========== ========== ========== ========== + left/right tinyint smallint int bigint counter float double varint decimal +============= =========== ========== ========== ========== ========== ========== ========== ========== ========== + **tinyint** tinyint smallint int bigint bigint float double varint decimal + **smallint** smallint smallint int bigint bigint float double varint decimal + **int** int int int bigint bigint float double varint decimal + **bigint** bigint bigint bigint bigint bigint double double varint decimal + **counter** bigint bigint bigint bigint bigint double double varint decimal + **float** float float float double double float double decimal decimal + **double** double double double double double double double decimal decimal + **varint** varint varint varint decimal decimal decimal decimal decimal decimal + **decimal** decimal decimal decimal decimal decimal decimal decimal decimal decimal +============= =========== ========== ========== ========== ========== ========== ========== ========== ========== + +``*``, ``/`` and ``%`` operators have a higher precedence level than ``+`` and ``-`` operator. By consequence, +they will be evaluated before. If two operator in an expression have the same precedence level, they will be evaluated +left to right based on their position in the expression. + +.. _datetime--arithmetic: + +Datetime Arithmetic +^^^^^^^^^^^^^^^^^^^ + +A ``duration`` can be added (+) or substracted (-) from a ``timestamp`` or a ``date`` to create a new +``timestamp`` or ``date``. So for instance:: + + SELECT * FROM myTable WHERE t = '2017-01-01' - 2d + +will select all the records with a value of ``t`` which is in the last 2 days of 2016. diff --git a/doc/source/cql/security.rst b/doc/source/cql/security.rst new file mode 100644 index 000000000000..429a1ef0d67d --- /dev/null +++ b/doc/source/cql/security.rst @@ -0,0 +1,538 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _cql-security: + +Security +-------- + +.. _cql-roles: + +Database Roles +^^^^^^^^^^^^^^ + +CQL uses database roles to represent users and group of users. Syntactically, a role is defined by: + +.. productionlist:: + role_name: `identifier` | `string` + +.. _create-role-statement: + +CREATE ROLE +~~~~~~~~~~~ + +Creating a role uses the ``CREATE ROLE`` statement: + +.. productionlist:: + create_role_statement: CREATE ROLE [ IF NOT EXISTS ] `role_name` + : [ WITH `role_options` ] + role_options: `role_option` ( AND `role_option` )* + role_option: PASSWORD '=' `string` + :| LOGIN '=' `boolean` + :| SUPERUSER '=' `boolean` + :| OPTIONS '=' `map_literal` + :| ACCESS TO DATACENTERS `set_literal` + :| ACCESS TO ALL DATACENTERS + +For instance:: + + CREATE ROLE new_role; + CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; + CREATE ROLE bob WITH PASSWORD = 'password_b' AND LOGIN = true AND SUPERUSER = true; + CREATE ROLE carlos WITH OPTIONS = { 'custom_option1' : 'option1_value', 'custom_option2' : 99 }; + CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO DATACENTERS {'DC1', 'DC3'}; + CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND ACCESS TO ALL DATACENTERS; + +By default roles do not possess ``LOGIN`` privileges or ``SUPERUSER`` status. + +:ref:`Permissions ` on database resources are granted to roles; types of resources include keyspaces, +tables, functions and roles themselves. Roles may be granted to other roles to create hierarchical permissions +structures; in these hierarchies, permissions and ``SUPERUSER`` status are inherited, but the ``LOGIN`` privilege is +not. + +If a role has the ``LOGIN`` privilege, clients may identify as that role when connecting. For the duration of that +connection, the client will acquire any roles and privileges granted to that role. + +Only a client with with the ``CREATE`` permission on the database roles resource may issue ``CREATE ROLE`` requests (see +the :ref:`relevant section ` below), unless the client is a ``SUPERUSER``. Role management in Cassandra +is pluggable and custom implementations may support only a subset of the listed options. + +Role names should be quoted if they contain non-alphanumeric characters. + +.. _setting-credentials-for-internal-authentication: + +Setting credentials for internal authentication +``````````````````````````````````````````````` + +Use the ``WITH PASSWORD`` clause to set a password for internal authentication, enclosing the password in single +quotation marks. + +If internal authentication has not been set up or the role does not have ``LOGIN`` privileges, the ``WITH PASSWORD`` +clause is not necessary. + +Restricting connections to specific datacenters +``````````````````````````````````````````````` + +If a ``network_authorizer`` has been configured, you can restrict login roles to specific datacenters with the +``ACCESS TO DATACENTERS`` clause followed by a set literal of datacenters the user can access. Not specifiying +datacenters implicitly grants access to all datacenters. The clause ``ACCESS TO ALL DATACENTERS`` can be used for +explicitness, but there's no functional difference. + +Creating a role conditionally +````````````````````````````` + +Attempting to create an existing role results in an invalid query condition unless the ``IF NOT EXISTS`` option is used. +If the option is used and the role exists, the statement is a no-op:: + + CREATE ROLE other_role; + CREATE ROLE IF NOT EXISTS other_role; + + +.. _alter-role-statement: + +ALTER ROLE +~~~~~~~~~~ + +Altering a role options uses the ``ALTER ROLE`` statement: + +.. productionlist:: + alter_role_statement: ALTER ROLE `role_name` WITH `role_options` + +For instance:: + + ALTER ROLE bob WITH PASSWORD = 'PASSWORD_B' AND SUPERUSER = false; + +Restricting connections to specific datacenters +``````````````````````````````````````````````` + +If a ``network_authorizer`` has been configured, you can restrict login roles to specific datacenters with the +``ACCESS TO DATACENTERS`` clause followed by a set literal of datacenters the user can access. To remove any +data center restrictions, use the ``ACCESS TO ALL DATACENTERS`` clause. + +Conditions on executing ``ALTER ROLE`` statements: + +- A client must have ``SUPERUSER`` status to alter the ``SUPERUSER`` status of another role +- A client cannot alter the ``SUPERUSER`` status of any role it currently holds +- A client can only modify certain properties of the role with which it identified at login (e.g. ``PASSWORD``) +- To modify properties of a role, the client must be granted ``ALTER`` :ref:`permission ` on that role + +.. _drop-role-statement: + +DROP ROLE +~~~~~~~~~ + +Dropping a role uses the ``DROP ROLE`` statement: + +.. productionlist:: + drop_role_statement: DROP ROLE [ IF EXISTS ] `role_name` + +``DROP ROLE`` requires the client to have ``DROP`` :ref:`permission ` on the role in question. In +addition, client may not ``DROP`` the role with which it identified at login. Finally, only a client with ``SUPERUSER`` +status may ``DROP`` another ``SUPERUSER`` role. + +Attempting to drop a role which does not exist results in an invalid query condition unless the ``IF EXISTS`` option is +used. If the option is used and the role does not exist the statement is a no-op. + +.. note:: DROP ROLE intentionally does not terminate any open user sessions. Currently connected sessions will remain + connected and will retain the ability to perform any database actions which do not require :ref:`authorization`. + However, if authorization is enabled, :ref:`permissions` of the dropped role are also revoked, + subject to the :ref:`caching options` configured in :ref:`cassandra.yaml`. + Should a dropped role be subsequently recreated and have new :ref:`permissions` or + :ref:`roles` granted to it, any client sessions still connected will acquire the newly granted + permissions and roles. + +.. _grant-role-statement: + +GRANT ROLE +~~~~~~~~~~ + +Granting a role to another uses the ``GRANT ROLE`` statement: + +.. productionlist:: + grant_role_statement: GRANT `role_name` TO `role_name` + +For instance:: + + GRANT report_writer TO alice; + +This statement grants the ``report_writer`` role to ``alice``. Any permissions granted to ``report_writer`` are also +acquired by ``alice``. + +Roles are modelled as a directed acyclic graph, so circular grants are not permitted. The following examples result in +error conditions:: + + GRANT role_a TO role_b; + GRANT role_b TO role_a; + + GRANT role_a TO role_b; + GRANT role_b TO role_c; + GRANT role_c TO role_a; + +.. _revoke-role-statement: + +REVOKE ROLE +~~~~~~~~~~~ + +Revoking a role uses the ``REVOKE ROLE`` statement: + +.. productionlist:: + revoke_role_statement: REVOKE `role_name` FROM `role_name` + +For instance:: + + REVOKE report_writer FROM alice; + +This statement revokes the ``report_writer`` role from ``alice``. Any permissions that ``alice`` has acquired via the +``report_writer`` role are also revoked. + +.. _list-roles-statement: + +LIST ROLES +~~~~~~~~~~ + +All the known roles (in the system or granted to specific role) can be listed using the ``LIST ROLES`` statement: + +.. productionlist:: + list_roles_statement: LIST ROLES [ OF `role_name` ] [ NORECURSIVE ] + +For instance:: + + LIST ROLES; + +returns all known roles in the system, this requires ``DESCRIBE`` permission on the database roles resource. And:: + + LIST ROLES OF alice; + +enumerates all roles granted to ``alice``, including those transitively acquired. But:: + + LIST ROLES OF bob NORECURSIVE + +lists all roles directly granted to ``bob`` without including any of the transitively acquired ones. + +Users +^^^^^ + +Prior to the introduction of roles in Cassandra 2.2, authentication and authorization were based around the concept of a +``USER``. For backward compatibility, the legacy syntax has been preserved with ``USER`` centric statements becoming +synonyms for the ``ROLE`` based equivalents. In other words, creating/updating a user is just a different syntax for +creating/updating a role. + +.. _create-user-statement: + +CREATE USER +~~~~~~~~~~~ + +Creating a user uses the ``CREATE USER`` statement: + +.. productionlist:: + create_user_statement: CREATE USER [ IF NOT EXISTS ] `role_name` [ WITH PASSWORD `string` ] [ `user_option` ] + user_option: SUPERUSER | NOSUPERUSER + +For instance:: + + CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; + CREATE USER bob WITH PASSWORD 'password_b' NOSUPERUSER; + +``CREATE USER`` is equivalent to ``CREATE ROLE`` where the ``LOGIN`` option is ``true``. So, the following pairs of +statements are equivalent:: + + CREATE USER alice WITH PASSWORD 'password_a' SUPERUSER; + CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; + + CREATE USER IF NOT EXISTS alice WITH PASSWORD 'password_a' SUPERUSER; + CREATE ROLE IF NOT EXISTS alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = true; + + CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; + CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true AND SUPERUSER = false; + + CREATE USER alice WITH PASSWORD 'password_a' NOSUPERUSER; + CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; + + CREATE USER alice WITH PASSWORD 'password_a'; + CREATE ROLE alice WITH PASSWORD = 'password_a' AND LOGIN = true; + +.. _alter-user-statement: + +ALTER USER +~~~~~~~~~~ + +Altering the options of a user uses the ``ALTER USER`` statement: + +.. productionlist:: + alter_user_statement: ALTER USER `role_name` [ WITH PASSWORD `string` ] [ `user_option` ] + +For instance:: + + ALTER USER alice WITH PASSWORD 'PASSWORD_A'; + ALTER USER bob SUPERUSER; + +.. _drop-user-statement: + +DROP USER +~~~~~~~~~ + +Dropping a user uses the ``DROP USER`` statement: + +.. productionlist:: + drop_user_statement: DROP USER [ IF EXISTS ] `role_name` + +.. _list-users-statement: + +LIST USERS +~~~~~~~~~~ + +Existing users can be listed using the ``LIST USERS`` statement: + +.. productionlist:: + list_users_statement: LIST USERS + +Note that this statement is equivalent to:: + + LIST ROLES; + +but only roles with the ``LOGIN`` privilege are included in the output. + +Data Control +^^^^^^^^^^^^ + +.. _cql-permissions: + +Permissions +~~~~~~~~~~~ + +Permissions on resources are granted to roles; there are several different types of resources in Cassandra and each type +is modelled hierarchically: + +- The hierarchy of Data resources, Keyspaces and Tables has the structure ``ALL KEYSPACES`` -> ``KEYSPACE`` -> + ``TABLE``. +- Function resources have the structure ``ALL FUNCTIONS`` -> ``KEYSPACE`` -> ``FUNCTION`` +- Resources representing roles have the structure ``ALL ROLES`` -> ``ROLE`` +- Resources representing JMX ObjectNames, which map to sets of MBeans/MXBeans, have the structure ``ALL MBEANS`` -> + ``MBEAN`` + +Permissions can be granted at any level of these hierarchies and they flow downwards. So granting a permission on a +resource higher up the chain automatically grants that same permission on all resources lower down. For example, +granting ``SELECT`` on a ``KEYSPACE`` automatically grants it on all ``TABLES`` in that ``KEYSPACE``. Likewise, granting +a permission on ``ALL FUNCTIONS`` grants it on every defined function, regardless of which keyspace it is scoped in. It +is also possible to grant permissions on all functions scoped to a particular keyspace. + +Modifications to permissions are visible to existing client sessions; that is, connections need not be re-established +following permissions changes. + +The full set of available permissions is: + +- ``CREATE`` +- ``ALTER`` +- ``DROP`` +- ``SELECT`` +- ``MODIFY`` +- ``AUTHORIZE`` +- ``DESCRIBE`` +- ``EXECUTE`` + +Not all permissions are applicable to every type of resource. For instance, ``EXECUTE`` is only relevant in the context +of functions or mbeans; granting ``EXECUTE`` on a resource representing a table is nonsensical. Attempting to ``GRANT`` +a permission on resource to which it cannot be applied results in an error response. The following illustrates which +permissions can be granted on which types of resource, and which statements are enabled by that permission. + +=============== =============================== ======================================================================= + Permission Resource Operations +=============== =============================== ======================================================================= + ``CREATE`` ``ALL KEYSPACES`` ``CREATE KEYSPACE`` and ``CREATE TABLE`` in any keyspace + ``CREATE`` ``KEYSPACE`` ``CREATE TABLE`` in specified keyspace + ``CREATE`` ``ALL FUNCTIONS`` ``CREATE FUNCTION`` in any keyspace and ``CREATE AGGREGATE`` in any + keyspace + ``CREATE`` ``ALL FUNCTIONS IN KEYSPACE`` ``CREATE FUNCTION`` and ``CREATE AGGREGATE`` in specified keyspace + ``CREATE`` ``ALL ROLES`` ``CREATE ROLE`` + ``ALTER`` ``ALL KEYSPACES`` ``ALTER KEYSPACE`` and ``ALTER TABLE`` in any keyspace + ``ALTER`` ``KEYSPACE`` ``ALTER KEYSPACE`` and ``ALTER TABLE`` in specified keyspace + ``ALTER`` ``TABLE`` ``ALTER TABLE`` + ``ALTER`` ``ALL FUNCTIONS`` ``CREATE FUNCTION`` and ``CREATE AGGREGATE``: replacing any existing + ``ALTER`` ``ALL FUNCTIONS IN KEYSPACE`` ``CREATE FUNCTION`` and ``CREATE AGGREGATE``: replacing existing in + specified keyspace + ``ALTER`` ``FUNCTION`` ``CREATE FUNCTION`` and ``CREATE AGGREGATE``: replacing existing + ``ALTER`` ``ALL ROLES`` ``ALTER ROLE`` on any role + ``ALTER`` ``ROLE`` ``ALTER ROLE`` + ``DROP`` ``ALL KEYSPACES`` ``DROP KEYSPACE`` and ``DROP TABLE`` in any keyspace + ``DROP`` ``KEYSPACE`` ``DROP TABLE`` in specified keyspace + ``DROP`` ``TABLE`` ``DROP TABLE`` + ``DROP`` ``ALL FUNCTIONS`` ``DROP FUNCTION`` and ``DROP AGGREGATE`` in any keyspace + ``DROP`` ``ALL FUNCTIONS IN KEYSPACE`` ``DROP FUNCTION`` and ``DROP AGGREGATE`` in specified keyspace + ``DROP`` ``FUNCTION`` ``DROP FUNCTION`` + ``DROP`` ``ALL ROLES`` ``DROP ROLE`` on any role + ``DROP`` ``ROLE`` ``DROP ROLE`` + ``SELECT`` ``ALL KEYSPACES`` ``SELECT`` on any table + ``SELECT`` ``KEYSPACE`` ``SELECT`` on any table in specified keyspace + ``SELECT`` ``TABLE`` ``SELECT`` on specified table + ``SELECT`` ``ALL MBEANS`` Call getter methods on any mbean + ``SELECT`` ``MBEANS`` Call getter methods on any mbean matching a wildcard pattern + ``SELECT`` ``MBEAN`` Call getter methods on named mbean + ``MODIFY`` ``ALL KEYSPACES`` ``INSERT``, ``UPDATE``, ``DELETE`` and ``TRUNCATE`` on any table + ``MODIFY`` ``KEYSPACE`` ``INSERT``, ``UPDATE``, ``DELETE`` and ``TRUNCATE`` on any table in + specified keyspace + ``MODIFY`` ``TABLE`` ``INSERT``, ``UPDATE``, ``DELETE`` and ``TRUNCATE`` on specified table + ``MODIFY`` ``ALL MBEANS`` Call setter methods on any mbean + ``MODIFY`` ``MBEANS`` Call setter methods on any mbean matching a wildcard pattern + ``MODIFY`` ``MBEAN`` Call setter methods on named mbean + ``AUTHORIZE`` ``ALL KEYSPACES`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any table + ``AUTHORIZE`` ``KEYSPACE`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any table in + specified keyspace + ``AUTHORIZE`` ``TABLE`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on specified table + ``AUTHORIZE`` ``ALL FUNCTIONS`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any function + ``AUTHORIZE`` ``ALL FUNCTIONS IN KEYSPACE`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` in specified keyspace + ``AUTHORIZE`` ``FUNCTION`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on specified function + ``AUTHORIZE`` ``ALL MBEANS`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any mbean + ``AUTHORIZE`` ``MBEANS`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on any mbean matching + a wildcard pattern + ``AUTHORIZE`` ``MBEAN`` ``GRANT PERMISSION`` and ``REVOKE PERMISSION`` on named mbean + ``AUTHORIZE`` ``ALL ROLES`` ``GRANT ROLE`` and ``REVOKE ROLE`` on any role + ``AUTHORIZE`` ``ROLES`` ``GRANT ROLE`` and ``REVOKE ROLE`` on specified roles + ``DESCRIBE`` ``ALL ROLES`` ``LIST ROLES`` on all roles or only roles granted to another, + specified role + ``DESCRIBE`` ``ALL MBEANS`` Retrieve metadata about any mbean from the platform's MBeanServer + ``DESCRIBE`` ``MBEANS`` Retrieve metadata about any mbean matching a wildcard patter from the + platform's MBeanServer + ``DESCRIBE`` ``MBEAN`` Retrieve metadata about a named mbean from the platform's MBeanServer + ``EXECUTE`` ``ALL FUNCTIONS`` ``SELECT``, ``INSERT`` and ``UPDATE`` using any function, and use of + any function in ``CREATE AGGREGATE`` + ``EXECUTE`` ``ALL FUNCTIONS IN KEYSPACE`` ``SELECT``, ``INSERT`` and ``UPDATE`` using any function in specified + keyspace and use of any function in keyspace in ``CREATE AGGREGATE`` + ``EXECUTE`` ``FUNCTION`` ``SELECT``, ``INSERT`` and ``UPDATE`` using specified function and use + of the function in ``CREATE AGGREGATE`` + ``EXECUTE`` ``ALL MBEANS`` Execute operations on any mbean + ``EXECUTE`` ``MBEANS`` Execute operations on any mbean matching a wildcard pattern + ``EXECUTE`` ``MBEAN`` Execute operations on named mbean +=============== =============================== ======================================================================= + +.. _grant-permission-statement: + +GRANT PERMISSION +~~~~~~~~~~~~~~~~ + +Granting a permission uses the ``GRANT PERMISSION`` statement: + +.. productionlist:: + grant_permission_statement: GRANT `permissions` ON `resource` TO `role_name` + permissions: ALL [ PERMISSIONS ] | `permission` [ PERMISSION ] + permission: CREATE | ALTER | DROP | SELECT | MODIFY | AUTHORIZE | DESCRIBE | EXECUTE + resource: ALL KEYSPACES + :| KEYSPACE `keyspace_name` + :| [ TABLE ] `table_name` + :| ALL ROLES + :| ROLE `role_name` + :| ALL FUNCTIONS [ IN KEYSPACE `keyspace_name` ] + :| FUNCTION `function_name` '(' [ `cql_type` ( ',' `cql_type` )* ] ')' + :| ALL MBEANS + :| ( MBEAN | MBEANS ) `string` + +For instance:: + + GRANT SELECT ON ALL KEYSPACES TO data_reader; + +This gives any user with the role ``data_reader`` permission to execute ``SELECT`` statements on any table across all +keyspaces:: + + GRANT MODIFY ON KEYSPACE keyspace1 TO data_writer; + +This give any user with the role ``data_writer`` permission to perform ``UPDATE``, ``INSERT``, ``UPDATE``, ``DELETE`` +and ``TRUNCATE`` queries on all tables in the ``keyspace1`` keyspace:: + + GRANT DROP ON keyspace1.table1 TO schema_owner; + +This gives any user with the ``schema_owner`` role permissions to ``DROP`` ``keyspace1.table1``:: + + GRANT EXECUTE ON FUNCTION keyspace1.user_function( int ) TO report_writer; + +This grants any user with the ``report_writer`` role permission to execute ``SELECT``, ``INSERT`` and ``UPDATE`` queries +which use the function ``keyspace1.user_function( int )``:: + + GRANT DESCRIBE ON ALL ROLES TO role_admin; + +This grants any user with the ``role_admin`` role permission to view any and all roles in the system with a ``LIST +ROLES`` statement + +.. _grant-all: + +GRANT ALL +````````` + +When the ``GRANT ALL`` form is used, the appropriate set of permissions is determined automatically based on the target +resource. + +Automatic Granting +`````````````````` + +When a resource is created, via a ``CREATE KEYSPACE``, ``CREATE TABLE``, ``CREATE FUNCTION``, ``CREATE AGGREGATE`` or +``CREATE ROLE`` statement, the creator (the role the database user who issues the statement is identified as), is +automatically granted all applicable permissions on the new resource. + +.. _revoke-permission-statement: + +REVOKE PERMISSION +~~~~~~~~~~~~~~~~~ + +Revoking a permission from a role uses the ``REVOKE PERMISSION`` statement: + +.. productionlist:: + revoke_permission_statement: REVOKE `permissions` ON `resource` FROM `role_name` + +For instance:: + + REVOKE SELECT ON ALL KEYSPACES FROM data_reader; + REVOKE MODIFY ON KEYSPACE keyspace1 FROM data_writer; + REVOKE DROP ON keyspace1.table1 FROM schema_owner; + REVOKE EXECUTE ON FUNCTION keyspace1.user_function( int ) FROM report_writer; + REVOKE DESCRIBE ON ALL ROLES FROM role_admin; + +Because of their function in normal driver operations, certain tables cannot have their `SELECT` permissions +revoked. The following tables will be available to all authorized users regardless of their assigned role:: + +* `system_schema.keyspaces` +* `system_schema.columns` +* `system_schema.tables` +* `system.local` +* `system.peers` + +.. _list-permissions-statement: + +LIST PERMISSIONS +~~~~~~~~~~~~~~~~ + +Listing granted permissions uses the ``LIST PERMISSIONS`` statement: + +.. productionlist:: + list_permissions_statement: LIST `permissions` [ ON `resource` ] [ OF `role_name` [ NORECURSIVE ] ] + +For instance:: + + LIST ALL PERMISSIONS OF alice; + +Show all permissions granted to ``alice``, including those acquired transitively from any other roles:: + + LIST ALL PERMISSIONS ON keyspace1.table1 OF bob; + +Show all permissions on ``keyspace1.table1`` granted to ``bob``, including those acquired transitively from any other +roles. This also includes any permissions higher up the resource hierarchy which can be applied to ``keyspace1.table1``. +For example, should ``bob`` have ``ALTER`` permission on ``keyspace1``, that would be included in the results of this +query. Adding the ``NORECURSIVE`` switch restricts the results to only those permissions which were directly granted to +``bob`` or one of ``bob``'s roles:: + + LIST SELECT PERMISSIONS OF carlos; + +Show any permissions granted to ``carlos`` or any of ``carlos``'s roles, limited to ``SELECT`` permissions on any +resource. diff --git a/doc/source/cql/triggers.rst b/doc/source/cql/triggers.rst new file mode 100644 index 000000000000..db3f53e3869c --- /dev/null +++ b/doc/source/cql/triggers.rst @@ -0,0 +1,63 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _cql-triggers: + +Triggers +-------- + +Triggers are identified by a name defined by: + +.. productionlist:: + trigger_name: `identifier` + + +.. _create-trigger-statement: + +CREATE TRIGGER +^^^^^^^^^^^^^^ + +Creating a new trigger uses the ``CREATE TRIGGER`` statement: + +.. productionlist:: + create_trigger_statement: CREATE TRIGGER [ IF NOT EXISTS ] `trigger_name` + : ON `table_name` + : USING `string` + +For instance:: + + CREATE TRIGGER myTrigger ON myTable USING 'org.apache.cassandra.triggers.InvertedIndex'; + +The actual logic that makes up the trigger can be written in any Java (JVM) language and exists outside the database. +You place the trigger code in a ``lib/triggers`` subdirectory of the Cassandra installation directory, it loads during +cluster startup, and exists on every node that participates in a cluster. The trigger defined on a table fires before a +requested DML statement occurs, which ensures the atomicity of the transaction. + +.. _drop-trigger-statement: + +DROP TRIGGER +^^^^^^^^^^^^ + +Dropping a trigger uses the ``DROP TRIGGER`` statement: + +.. productionlist:: + drop_trigger_statement: DROP TRIGGER [ IF EXISTS ] `trigger_name` ON `table_name` + +For instance:: + + DROP TRIGGER myTrigger ON myTable; diff --git a/doc/source/cql/types.rst b/doc/source/cql/types.rst new file mode 100644 index 000000000000..509a7565e791 --- /dev/null +++ b/doc/source/cql/types.rst @@ -0,0 +1,559 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +.. _UUID: https://en.wikipedia.org/wiki/Universally_unique_identifier + +.. _data-types: + +Data Types +---------- + +CQL is a typed language and supports a rich set of data types, including :ref:`native types `, +:ref:`collection types `, :ref:`user-defined types `, :ref:`tuple types ` and :ref:`custom +types `: + +.. productionlist:: + cql_type: `native_type` | `collection_type` | `user_defined_type` | `tuple_type` | `custom_type` + + +.. _native-types: + +Native Types +^^^^^^^^^^^^ + +The native types supported by CQL are: + +.. productionlist:: + native_type: ASCII + : | BIGINT + : | BLOB + : | BOOLEAN + : | COUNTER + : | DATE + : | DECIMAL + : | DOUBLE + : | DURATION + : | FLOAT + : | INET + : | INT + : | SMALLINT + : | TEXT + : | TIME + : | TIMESTAMP + : | TIMEUUID + : | TINYINT + : | UUID + : | VARCHAR + : | VARINT + +The following table gives additional informations on the native data types, and on which kind of :ref:`constants +` each type supports: + +=============== ===================== ================================================================================== + type constants supported description +=============== ===================== ================================================================================== + ``ascii`` :token:`string` ASCII character string + ``bigint`` :token:`integer` 64-bit signed long + ``blob`` :token:`blob` Arbitrary bytes (no validation) + ``boolean`` :token:`boolean` Either ``true`` or ``false`` + ``counter`` :token:`integer` Counter column (64-bit signed value). See :ref:`counters` for details + ``date`` :token:`integer`, A date (with no corresponding time value). See :ref:`dates` below for details + :token:`string` + ``decimal`` :token:`integer`, Variable-precision decimal + :token:`float` + ``double`` :token:`integer` 64-bit IEEE-754 floating point + :token:`float` + ``duration`` :token:`duration`, A duration with nanosecond precision. See :ref:`durations` below for details + ``float`` :token:`integer`, 32-bit IEEE-754 floating point + :token:`float` + ``inet`` :token:`string` An IP address, either IPv4 (4 bytes long) or IPv6 (16 bytes long). Note that + there is no ``inet`` constant, IP address should be input as strings + ``int`` :token:`integer` 32-bit signed int + ``smallint`` :token:`integer` 16-bit signed int + ``text`` :token:`string` UTF8 encoded string + ``time`` :token:`integer`, A time (with no corresponding date value) with nanosecond precision. See + :token:`string` :ref:`times` below for details + ``timestamp`` :token:`integer`, A timestamp (date and time) with millisecond precision. See :ref:`timestamps` + :token:`string` below for details + ``timeuuid`` :token:`uuid` Version 1 UUID_, generally used as a “conflict-free” timestamp. Also see + :ref:`timeuuid-functions` + ``tinyint`` :token:`integer` 8-bit signed int + ``uuid`` :token:`uuid` A UUID_ (of any version) + ``varchar`` :token:`string` UTF8 encoded string + ``varint`` :token:`integer` Arbitrary-precision integer +=============== ===================== ================================================================================== + +.. _counters: + +Counters +~~~~~~~~ + +The ``counter`` type is used to define *counter columns*. A counter column is a column whose value is a 64-bit signed +integer and on which 2 operations are supported: incrementing and decrementing (see the :ref:`UPDATE statement +` for syntax). Note that the value of a counter cannot be set: a counter does not exist until first +incremented/decremented, and that first increment/decrement is made as if the prior value was 0. + +.. _counter-limitations: + +Counters have a number of important limitations: + +- They cannot be used for columns part of the ``PRIMARY KEY`` of a table. +- A table that contains a counter can only contain counters. In other words, either all the columns of a table outside + the ``PRIMARY KEY`` have the ``counter`` type, or none of them have it. +- Counters do not support :ref:`expiration `. +- The deletion of counters is supported, but is only guaranteed to work the first time you delete a counter. In other + words, you should not re-update a counter that you have deleted (if you do, proper behavior is not guaranteed). +- Counter updates are, by nature, not `idemptotent `__. An important + consequence is that if a counter update fails unexpectedly (timeout or loss of connection to the coordinator node), + the client has no way to know if the update has been applied or not. In particular, replaying the update may or may + not lead to an over count. + +.. _timestamps: + +Working with timestamps +^^^^^^^^^^^^^^^^^^^^^^^ + +Values of the ``timestamp`` type are encoded as 64-bit signed integers representing a number of milliseconds since the +standard base time known as `the epoch `__: January 1 1970 at 00:00:00 GMT. + +Timestamps can be input in CQL either using their value as an :token:`integer`, or using a :token:`string` that +represents an `ISO 8601 `__ date. For instance, all of the values below are +valid ``timestamp`` values for Mar 2, 2011, at 04:05:00 AM, GMT: + +- ``1299038700000`` +- ``'2011-02-03 04:05+0000'`` +- ``'2011-02-03 04:05:00+0000'`` +- ``'2011-02-03 04:05:00.000+0000'`` +- ``'2011-02-03T04:05+0000'`` +- ``'2011-02-03T04:05:00+0000'`` +- ``'2011-02-03T04:05:00.000+0000'`` + +The ``+0000`` above is an RFC 822 4-digit time zone specification; ``+0000`` refers to GMT. US Pacific Standard Time is +``-0800``. The time zone may be omitted if desired (``'2011-02-03 04:05:00'``), and if so, the date will be interpreted +as being in the time zone under which the coordinating Cassandra node is configured. There are however difficulties +inherent in relying on the time zone configuration being as expected, so it is recommended that the time zone always be +specified for timestamps when feasible. + +The time of day may also be omitted (``'2011-02-03'`` or ``'2011-02-03+0000'``), in which case the time of day will +default to 00:00:00 in the specified or default time zone. However, if only the date part is relevant, consider using +the :ref:`date ` type. + +.. _dates: + +Working with dates +^^^^^^^^^^^^^^^^^^ + +Values of the ``date`` type are encoded as 32-bit unsigned integers representing a number of days with “the epoch” at +the center of the range (2^31). Epoch is January 1st, 1970 + +As for :ref:`timestamp `, a date can be input either as an :token:`integer` or using a date +:token:`string`. In the later case, the format should be ``yyyy-mm-dd`` (so ``'2011-02-03'`` for instance). + +.. _times: + +Working with times +^^^^^^^^^^^^^^^^^^ + +Values of the ``time`` type are encoded as 64-bit signed integers representing the number of nanoseconds since midnight. + +As for :ref:`timestamp `, a time can be input either as an :token:`integer` or using a :token:`string` +representing the time. In the later case, the format should be ``hh:mm:ss[.fffffffff]`` (where the sub-second precision +is optional and if provided, can be less than the nanosecond). So for instance, the following are valid inputs for a +time: + +- ``'08:12:54'`` +- ``'08:12:54.123'`` +- ``'08:12:54.123456'`` +- ``'08:12:54.123456789'`` + +.. _durations: + +Working with durations +^^^^^^^^^^^^^^^^^^^^^^ + +Values of the ``duration`` type are encoded as 3 signed integer of variable lengths. The first integer represents the +number of months, the second the number of days and the third the number of nanoseconds. This is due to the fact that +the number of days in a month can change, and a day can have 23 or 25 hours depending on the daylight saving. +Internally, the number of months and days are decoded as 32 bits integers whereas the number of nanoseconds is decoded +as a 64 bits integer. + +A duration can be input as: + + #. ``(quantity unit)+`` like ``12h30m`` where the unit can be: + + * ``y``: years (12 months) + * ``mo``: months (1 month) + * ``w``: weeks (7 days) + * ``d``: days (1 day) + * ``h``: hours (3,600,000,000,000 nanoseconds) + * ``m``: minutes (60,000,000,000 nanoseconds) + * ``s``: seconds (1,000,000,000 nanoseconds) + * ``ms``: milliseconds (1,000,000 nanoseconds) + * ``us`` or ``µs`` : microseconds (1000 nanoseconds) + * ``ns``: nanoseconds (1 nanosecond) + #. ISO 8601 format: ``P[n]Y[n]M[n]DT[n]H[n]M[n]S or P[n]W`` + #. ISO 8601 alternative format: ``P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]`` + +For example:: + + INSERT INTO RiderResults (rider, race, result) VALUES ('Christopher Froome', 'Tour de France', 89h4m48s); + INSERT INTO RiderResults (rider, race, result) VALUES ('BARDET Romain', 'Tour de France', PT89H8M53S); + INSERT INTO RiderResults (rider, race, result) VALUES ('QUINTANA Nairo', 'Tour de France', P0000-00-00T89:09:09); + +.. _duration-limitation: + +Duration columns cannot be used in a table's ``PRIMARY KEY``. This limitation is due to the fact that +durations cannot be ordered. It is effectively not possible to know if ``1mo`` is greater than ``29d`` without a date +context. + +A ``1d`` duration is not equals to a ``24h`` one as the duration type has been created to be able to support daylight +saving. + +.. _collections: + +Collections +^^^^^^^^^^^ + +CQL supports 3 kind of collections: :ref:`maps`, :ref:`sets` and :ref:`lists`. The types of those collections is defined +by: + +.. productionlist:: + collection_type: MAP '<' `cql_type` ',' `cql_type` '>' + : | SET '<' `cql_type` '>' + : | LIST '<' `cql_type` '>' + +and their values can be inputd using collection literals: + +.. productionlist:: + collection_literal: `map_literal` | `set_literal` | `list_literal` + map_literal: '{' [ `term` ':' `term` (',' `term` : `term`)* ] '}' + set_literal: '{' [ `term` (',' `term`)* ] '}' + list_literal: '[' [ `term` (',' `term`)* ] ']' + +Note however that neither :token:`bind_marker` nor ``NULL`` are supported inside collection literals. + +Noteworthy characteristics +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Collections are meant for storing/denormalizing relatively small amount of data. They work well for things like “the +phone numbers of a given user”, “labels applied to an email”, etc. But when items are expected to grow unbounded (“all +messages sent by a user”, “events registered by a sensor”...), then collections are not appropriate and a specific table +(with clustering columns) should be used. Concretely, (non-frozen) collections have the following noteworthy +characteristics and limitations: + +- Individual collections are not indexed internally. Which means that even to access a single element of a collection, + the while collection has to be read (and reading one is not paged internally). +- While insertion operations on sets and maps never incur a read-before-write internally, some operations on lists do. + Further, some lists operations are not idempotent by nature (see the section on :ref:`lists ` below for + details), making their retry in case of timeout problematic. It is thus advised to prefer sets over lists when + possible. + +Please note that while some of those limitations may or may not be removed/improved upon in the future, it is a +anti-pattern to use a (single) collection to store large amounts of data. + +.. _maps: + +Maps +~~~~ + +A ``map`` is a (sorted) set of key-value pairs, where keys are unique and the map is sorted by its keys. You can define +and insert a map with:: + + CREATE TABLE users ( + id text PRIMARY KEY, + name text, + favs map // A map of text keys, and text values + ); + + INSERT INTO users (id, name, favs) + VALUES ('jsmith', 'John Smith', { 'fruit' : 'Apple', 'band' : 'Beatles' }); + + // Replace the existing map entirely. + UPDATE users SET favs = { 'fruit' : 'Banana' } WHERE id = 'jsmith'; + +Further, maps support: + +- Updating or inserting one or more elements:: + + UPDATE users SET favs['author'] = 'Ed Poe' WHERE id = 'jsmith'; + UPDATE users SET favs = favs + { 'movie' : 'Cassablanca', 'band' : 'ZZ Top' } WHERE id = 'jsmith'; + +- Removing one or more element (if an element doesn't exist, removing it is a no-op but no error is thrown):: + + DELETE favs['author'] FROM users WHERE id = 'jsmith'; + UPDATE users SET favs = favs - { 'movie', 'band'} WHERE id = 'jsmith'; + + Note that for removing multiple elements in a ``map``, you remove from it a ``set`` of keys. + +Lastly, TTLs are allowed for both ``INSERT`` and ``UPDATE``, but in both case the TTL set only apply to the newly +inserted/updated elements. In other words:: + + UPDATE users USING TTL 10 SET favs['color'] = 'green' WHERE id = 'jsmith'; + +will only apply the TTL to the ``{ 'color' : 'green' }`` record, the rest of the map remaining unaffected. + + +.. _sets: + +Sets +~~~~ + +A ``set`` is a (sorted) collection of unique values. You can define and insert a map with:: + + CREATE TABLE images ( + name text PRIMARY KEY, + owner text, + tags set // A set of text values + ); + + INSERT INTO images (name, owner, tags) + VALUES ('cat.jpg', 'jsmith', { 'pet', 'cute' }); + + // Replace the existing set entirely + UPDATE images SET tags = { 'kitten', 'cat', 'lol' } WHERE name = 'cat.jpg'; + +Further, sets support: + +- Adding one or multiple elements (as this is a set, inserting an already existing element is a no-op):: + + UPDATE images SET tags = tags + { 'gray', 'cuddly' } WHERE name = 'cat.jpg'; + +- Removing one or multiple elements (if an element doesn't exist, removing it is a no-op but no error is thrown):: + + UPDATE images SET tags = tags - { 'cat' } WHERE name = 'cat.jpg'; + +Lastly, as for :ref:`maps `, TTLs if used only apply to the newly inserted values. + +.. _lists: + +Lists +~~~~~ + +.. note:: As mentioned above and further discussed at the end of this section, lists have limitations and specific + performance considerations that you should take into account before using them. In general, if you can use a + :ref:`set ` instead of list, always prefer a set. + +A ``list`` is a (sorted) collection of non-unique values where elements are ordered by there position in the list. You +can define and insert a list with:: + + CREATE TABLE plays ( + id text PRIMARY KEY, + game text, + players int, + scores list // A list of integers + ) + + INSERT INTO plays (id, game, players, scores) + VALUES ('123-afde', 'quake', 3, [17, 4, 2]); + + // Replace the existing list entirely + UPDATE plays SET scores = [ 3, 9, 4] WHERE id = '123-afde'; + +Further, lists support: + +- Appending and prepending values to a list:: + + UPDATE plays SET players = 5, scores = scores + [ 14, 21 ] WHERE id = '123-afde'; + UPDATE plays SET players = 6, scores = [ 3 ] + scores WHERE id = '123-afde'; + +- Setting the value at a particular position in the list. This imply that the list has a pre-existing element for that + position or an error will be thrown that the list is too small:: + + UPDATE plays SET scores[1] = 7 WHERE id = '123-afde'; + +- Removing an element by its position in the list. This imply that the list has a pre-existing element for that position + or an error will be thrown that the list is too small. Further, as the operation removes an element from the list, the + list size will be diminished by 1, shifting the position of all the elements following the one deleted:: + + DELETE scores[1] FROM plays WHERE id = '123-afde'; + +- Deleting *all* the occurrences of particular values in the list (if a particular element doesn't occur at all in the + list, it is simply ignored and no error is thrown):: + + UPDATE plays SET scores = scores - [ 12, 21 ] WHERE id = '123-afde'; + +.. warning:: The append and prepend operations are not idempotent by nature. So in particular, if one of these operation + timeout, then retrying the operation is not safe and it may (or may not) lead to appending/prepending the value + twice. + +.. warning:: Setting and removing an element by position and removing occurences of particular values incur an internal + *read-before-write*. They will thus run more slowly and take more ressources than usual updates (with the exclusion + of conditional write that have their own cost). + +Lastly, as for :ref:`maps `, TTLs when used only apply to the newly inserted values. + +.. _udts: + +User-Defined Types +^^^^^^^^^^^^^^^^^^ + +CQL support the definition of user-defined types (UDT for short). Such a type can be created, modified and removed using +the :token:`create_type_statement`, :token:`alter_type_statement` and :token:`drop_type_statement` described below. But +once created, a UDT is simply referred to by its name: + +.. productionlist:: + user_defined_type: `udt_name` + udt_name: [ `keyspace_name` '.' ] `identifier` + + +Creating a UDT +~~~~~~~~~~~~~~ + +Creating a new user-defined type is done using a ``CREATE TYPE`` statement defined by: + +.. productionlist:: + create_type_statement: CREATE TYPE [ IF NOT EXISTS ] `udt_name` + : '(' `field_definition` ( ',' `field_definition` )* ')' + field_definition: `identifier` `cql_type` + +A UDT has a name (used to declared columns of that type) and is a set of named and typed fields. Fields name can be any +type, including collections or other UDT. For instance:: + + CREATE TYPE phone ( + country_code int, + number text, + ) + + CREATE TYPE address ( + street text, + city text, + zip text, + phones map + ) + + CREATE TABLE user ( + name text PRIMARY KEY, + addresses map> + ) + +Note that: + +- Attempting to create an already existing type will result in an error unless the ``IF NOT EXISTS`` option is used. If + it is used, the statement will be a no-op if the type already exists. +- A type is intrinsically bound to the keyspace in which it is created, and can only be used in that keyspace. At + creation, if the type name is prefixed by a keyspace name, it is created in that keyspace. Otherwise, it is created in + the current keyspace. +- As of Cassandra |version|, UDT have to be frozen in most cases, hence the ``frozen
    `` in the table definition + above. Please see the section on :ref:`frozen ` for more details. + +UDT literals +~~~~~~~~~~~~ + +Once a used-defined type has been created, value can be input using a UDT literal: + +.. productionlist:: + udt_literal: '{' `identifier` ':' `term` ( ',' `identifier` ':' `term` )* '}' + +In other words, a UDT literal is like a :ref:`map ` literal but its keys are the names of the fields of the type. +For instance, one could insert into the table define in the previous section using:: + + INSERT INTO user (name, addresses) + VALUES ('z3 Pr3z1den7', { + 'home' : { + street: '1600 Pennsylvania Ave NW', + city: 'Washington', + zip: '20500', + phones: { 'cell' : { country_code: 1, number: '202 456-1111' }, + 'landline' : { country_code: 1, number: '...' } } + }, + 'work' : { + street: '1600 Pennsylvania Ave NW', + city: 'Washington', + zip: '20500', + phones: { 'fax' : { country_code: 1, number: '...' } } + } + }) + +To be valid, a UDT literal should only include fields defined by the type it is a literal of, but it can omit some field +(in which case those will be ``null``). + +Altering a UDT +~~~~~~~~~~~~~~ + +An existing user-defined type can be modified using an ``ALTER TYPE`` statement: + +.. productionlist:: + alter_type_statement: ALTER TYPE `udt_name` `alter_type_modification` + alter_type_modification: ADD `field_definition` + : | RENAME `identifier` TO `identifier` ( `identifier` TO `identifier` )* + +You can: + +- add a new field to the type (``ALTER TYPE address ADD country text``). That new field will be ``null`` for any values + of the type created before the addition. +- rename the fields of the type (``ALTER TYPE address RENAME zip TO zipcode``). + +Dropping a UDT +~~~~~~~~~~~~~~ + +You can drop an existing user-defined type using a ``DROP TYPE`` statement: + +.. productionlist:: + drop_type_statement: DROP TYPE [ IF EXISTS ] `udt_name` + +Dropping a type results in the immediate, irreversible removal of that type. However, attempting to drop a type that is +still in use by another type, table or function will result in an error. + +If the type dropped does not exist, an error will be returned unless ``IF EXISTS`` is used, in which case the operation +is a no-op. + +.. _tuples: + +Tuples +^^^^^^ + +CQL also support tuples and tuple types (where the elements can be of different types). Functionally, tuples can be +though as anonymous UDT with anonymous fields. Tuple types and tuple literals are defined by: + +.. productionlist:: + tuple_type: TUPLE '<' `cql_type` ( ',' `cql_type` )* '>' + tuple_literal: '(' `term` ( ',' `term` )* ')' + +and can be used thusly:: + + CREATE TABLE durations ( + event text, + duration tuple, + ) + + INSERT INTO durations (event, duration) VALUES ('ev1', (3, 'hours')); + +Unlike other "composed" types (collections and UDT), a tuple is always :ref:`frozen ` (without the need of the +`frozen` keyword) and it is not possible to update only some elements of a tuple (without updating the whole tuple). +Also, a tuple literal should always have the same number of value than declared in the type it is a tuple of (some of +those values can be null but they need to be explicitly declared as so). + +.. _custom-types: + +Custom Types +^^^^^^^^^^^^ + +.. note:: Custom types exists mostly for backward compatiliby purposes and their usage is discouraged. Their usage is + complex, not user friendly and the other provided types, particularly :ref:`user-defined types `, should almost + always be enough. + +A custom type is defined by: + +.. productionlist:: + custom_type: `string` + +A custom type is a :token:`string` that contains the name of Java class that extends the server side ``AbstractType`` +class and that can be loaded by Cassandra (it should thus be in the ``CLASSPATH`` of every node running Cassandra). That +class will define what values are valid for the type and how the time sorts when used for a clustering column. For any +other purpose, a value of a custom type is the same than that of a ``blob``, and can in particular be input using the +:token:`blob` literal syntax. diff --git a/doc/source/data_modeling/data_modeling_conceptual.rst b/doc/source/data_modeling/data_modeling_conceptual.rst new file mode 100644 index 000000000000..8749b799ea31 --- /dev/null +++ b/doc/source/data_modeling/data_modeling_conceptual.rst @@ -0,0 +1,63 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. conceptual_data_modeling + +Conceptual Data Modeling +^^^^^^^^^^^^^^^^^^^^^^^^ + +First, let’s create a simple domain model that is easy to understand in +the relational world, and then see how you might map it from a relational +to a distributed hashtable model in Cassandra. + +Let's use an example that is complex enough +to show the various data structures and design patterns, but not +something that will bog you down with details. Also, a domain that’s +familiar to everyone will allow you to concentrate on how to work with +Cassandra, not on what the application domain is all about. + +For example, let's use a domain that is easily understood and that +everyone can relate to: making hotel reservations. + +The conceptual domain includes hotels, guests that stay in the hotels, a +collection of rooms for each hotel, the rates and availability of those +rooms, and a record of reservations booked for guests. Hotels typically +also maintain a collection of “points of interest,” which are parks, +museums, shopping galleries, monuments, or other places near the hotel +that guests might want to visit during their stay. Both hotels and +points of interest need to maintain geolocation data so that they can be +found on maps for mashups, and to calculate distances. + +The conceptual domain is depicted below using the entity–relationship +model popularized by Peter Chen. This simple diagram represents the +entities in the domain with rectangles, and attributes of those entities +with ovals. Attributes that represent unique identifiers for items are +underlined. Relationships between entities are represented as diamonds, +and the connectors between the relationship and each entity show the +multiplicity of the connection. + +.. image:: images/data_modeling_hotel_erd.png + +Obviously, in the real world, there would be many more considerations +and much more complexity. For example, hotel rates are notoriously +dynamic, and calculating them involves a wide array of factors. Here +you’re defining something complex enough to be interesting and touch on +the important points, but simple enough to maintain the focus on +learning Cassandra. + +*Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. +All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_logical.rst b/doc/source/data_modeling/data_modeling_logical.rst new file mode 100644 index 000000000000..27fa4beb74a5 --- /dev/null +++ b/doc/source/data_modeling/data_modeling_logical.rst @@ -0,0 +1,219 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Logical Data Modeling +===================== + +Now that you have defined your queries, you’re ready to begin designing +Cassandra tables. First, create a logical model containing a table +for each query, capturing entities and relationships from the conceptual +model. + +To name each table, you’ll identify the primary entity type for which you +are querying and use that to start the entity name. If you are querying +by attributes of other related entities, append those to the table +name, separated with ``_by_``. For example, ``hotels_by_poi``. + +Next, you identify the primary key for the table, adding partition key +columns based on the required query attributes, and clustering columns +in order to guarantee uniqueness and support desired sort ordering. + +The design of the primary key is extremely important, as it will +determine how much data will be stored in each partition and how that +data is organized on disk, which in turn will affect how quickly +Cassandra processes reads. + +Complete each table by adding any additional attributes identified by +the query. If any of these additional attributes are the same for every +instance of the partition key, mark the column as static. + +Now that was a pretty quick description of a fairly involved process, so +it will be worthwhile to work through a detailed example. First, +let’s introduce a notation that you can use to represent logical +models. + +Several individuals within the Cassandra community have proposed +notations for capturing data models in diagrammatic form. This document +uses a notation popularized by Artem Chebotko which provides a simple, +informative way to visualize the relationships between queries and +tables in your designs. This figure shows the Chebotko notation for a +logical data model. + +.. image:: images/data_modeling_chebotko_logical.png + +Each table is shown with its title and a list of columns. Primary key +columns are identified via symbols such as **K** for partition key +columns and **C**\ ↑ or **C**\ ↓ to represent clustering columns. Lines +are shown entering tables or between tables to indicate the queries that +each table is designed to support. + +Hotel Logical Data Model +------------------------ + +The figure below shows a Chebotko logical data model for the queries +involving hotels, points of interest, rooms, and amenities. One thing you'll +notice immediately is that the Cassandra design doesn’t include dedicated +tables for rooms or amenities, as you had in the relational design. This +is because the workflow didn’t identify any queries requiring this +direct access. + +.. image:: images/data_modeling_hotel_logical.png + +Let’s explore the details of each of these tables. + +The first query Q1 is to find hotels near a point of interest, so you’ll +call this table ``hotels_by_poi``. Searching by a named point of +interest is a clue that the point of interest should be a part +of the primary key. Let’s reference the point of interest by name, +because according to the workflow that is how users will start their +search. + +You’ll note that you certainly could have more than one hotel near a +given point of interest, so you’ll need another component in the primary +key in order to make sure you have a unique partition for each hotel. So +you add the hotel key as a clustering column. + +An important consideration in designing your table’s primary key is +making sure that it defines a unique data element. Otherwise you run the +risk of accidentally overwriting data. + +Now for the second query (Q2), you’ll need a table to get information +about a specific hotel. One approach would have been to put all of the +attributes of a hotel in the ``hotels_by_poi`` table, but you added +only those attributes that were required by the application workflow. + +From the workflow diagram, you know that the ``hotels_by_poi`` table is +used to display a list of hotels with basic information on each hotel, +and the application knows the unique identifiers of the hotels returned. +When the user selects a hotel to view details, you can then use Q2, which +is used to obtain details about the hotel. Because you already have the +``hotel_id`` from Q1, you use that as a reference to the hotel you’re +looking for. Therefore the second table is just called ``hotels``. + +Another option would have been to store a set of ``poi_names`` in the +hotels table. This is an equally valid approach. You’ll learn through +experience which approach is best for your application. + +Q3 is just a reverse of Q1—looking for points of interest near a hotel, +rather than hotels near a point of interest. This time, however, you need +to access the details of each point of interest, as represented by the +``pois_by_hotel`` table. As previously, you add the point of +interest name as a clustering key to guarantee uniqueness. + +At this point, let’s now consider how to support query Q4 to help the +user find available rooms at a selected hotel for the nights they are +interested in staying. Note that this query involves both a start date +and an end date. Because you’re querying over a range instead of a single +date, you know that you’ll need to use the date as a clustering key. +Use the ``hotel_id`` as a primary key to group room data for each hotel +on a single partition, which should help searches be super fast. Let’s +call this the ``available_rooms_by_hotel_date`` table. + +To support searching over a range, use :ref:`clustering columns +` to store +attributes that you need to access in a range query. Remember that the +order of the clustering columns is important. + +The design of the ``available_rooms_by_hotel_date`` table is an instance +of the **wide partition** pattern. This +pattern is sometimes called the **wide row** pattern when discussing +databases that support similar models, but wide partition is a more +accurate description from a Cassandra perspective. The essence of the +pattern is to group multiple related rows in a partition in order to +support fast access to multiple rows within the partition in a single +query. + +In order to round out the shopping portion of the data model, add the +``amenities_by_room`` table to support Q5. This will allow users to +view the amenities of one of the rooms that is available for the desired +stay dates. + +Reservation Logical Data Model +------------------------------ + +Now let's switch gears to look at the reservation queries. The figure +shows a logical data model for reservations. You’ll notice that these +tables represent a denormalized design; the same data appears in +multiple tables, with differing keys. + +.. image:: images/data_modeling_reservation_logical.png + +In order to satisfy Q6, the ``reservations_by_guest`` table can be used +to look up the reservation by guest name. You could envision query Q7 +being used on behalf of a guest on a self-serve website or a call center +agent trying to assist the guest. Because the guest name might not be +unique, you include the guest ID here as a clustering column as well. + +Q8 and Q9 in particular help to remind you to create queries +that support various stakeholders of the application, not just customers +but staff as well, and perhaps even the analytics team, suppliers, and so +on. + +The hotel staff might wish to see a record of upcoming reservations by +date in order to get insight into how the hotel is performing, such as +what dates the hotel is sold out or undersold. Q8 supports the retrieval +of reservations for a given hotel by date. + +Finally, you create a ``guests`` table. This provides a single +location that used to store guest information. In this case, you specify a +separate unique identifier for guest records, as it is not uncommon +for guests to have the same name. In many organizations, a customer +database such as the ``guests`` table would be part of a separate +customer management application, which is why other guest +access patterns were omitted from the example. + + +Patterns and Anti-Patterns +-------------------------- + +As with other types of software design, there are some well-known +patterns and anti-patterns for data modeling in Cassandra. You’ve already +used one of the most common patterns in this hotel model—the wide +partition pattern. + +The **time series** pattern is an extension of the wide partition +pattern. In this pattern, a series of measurements at specific time +intervals are stored in a wide partition, where the measurement time is +used as part of the partition key. This pattern is frequently used in +domains including business analysis, sensor data management, and +scientific experiments. + +The time series pattern is also useful for data other than measurements. +Consider the example of a banking application. You could store each +customer’s balance in a row, but that might lead to a lot of read and +write contention as various customers check their balance or make +transactions. You’d probably be tempted to wrap a transaction around +writes just to protect the balance from being updated in error. In +contrast, a time series–style design would store each transaction as a +timestamped row and leave the work of calculating the current balance to +the application. + +One design trap that many new users fall into is attempting to use +Cassandra as a queue. Each item in the queue is stored with a timestamp +in a wide partition. Items are appended to the end of the queue and read +from the front, being deleted after they are read. This is a design that +seems attractive, especially given its apparent similarity to the time +series pattern. The problem with this approach is that the deleted items +are now :ref:`tombstones ` that Cassandra must scan past +in order to read from the front of the queue. Over time, a growing number +of tombstones begins to degrade read performance. + +The queue anti-pattern serves as a reminder that any design that relies +on the deletion of data is potentially a poorly performing design. + +*Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. +All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_physical.rst b/doc/source/data_modeling/data_modeling_physical.rst new file mode 100644 index 000000000000..7584004967e0 --- /dev/null +++ b/doc/source/data_modeling/data_modeling_physical.rst @@ -0,0 +1,117 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Physical Data Modeling +====================== + +Once you have a logical data model defined, creating the physical model +is a relatively simple process. + +You walk through each of the logical model tables, assigning types to +each item. You can use any valid :ref:`CQL data type `, +including the basic types, collections, and user-defined types. You may +identify additional user-defined types that can be created to simplify +your design. + +After you’ve assigned data types, you analyze the model by performing +size calculations and testing out how the model works. You may make some +adjustments based on your findings. Once again let's cover the data +modeling process in more detail by working through an example. + +Before getting started, let’s look at a few additions to the Chebotko +notation for physical data models. To draw physical models, you need to +be able to add the typing information for each column. This figure +shows the addition of a type for each column in a sample table. + +.. image:: images/data_modeling_chebotko_physical.png + +The figure includes a designation of the keyspace containing each table +and visual cues for columns represented using collections and +user-defined types. Note the designation of static columns and +secondary index columns. There is no restriction on assigning these as +part of a logical model, but they are typically more of a physical data +modeling concern. + +Hotel Physical Data Model +------------------------- + +Now let’s get to work on the physical model. First, you need keyspaces +to contain the tables. To keep the design relatively simple, create a +``hotel`` keyspace to contain tables for hotel and availability +data, and a ``reservation`` keyspace to contain tables for reservation +and guest data. In a real system, you might divide the tables across even +more keyspaces in order to separate concerns. + +For the ``hotels`` table, use Cassandra’s ``text`` type to +represent the hotel’s ``id``. For the address, create an +``address`` user defined type. Use the ``text`` type to represent the +phone number, as there is considerable variance in the formatting of +numbers between countries. + +While it would make sense to use the ``uuid`` type for attributes such +as the ``hotel_id``, this document uses mostly ``text`` attributes as +identifiers, to keep the samples simple and readable. For example, a +common convention in the hospitality industry is to reference properties +by short codes like "AZ123" or "NY229". This example uses these values +for ``hotel_ids``, while acknowledging they are not necessarily globally +unique. + +You’ll find that it’s often helpful to use unique IDs to uniquely +reference elements, and to use these ``uuids`` as references in tables +representing other entities. This helps to minimize coupling between +different entity types. This may prove especially effective if you are +using a microservice architectural style for your application, in which +there are separate services responsible for each entity type. + +As you work to create physical representations of various tables in the +logical hotel data model, you use the same approach. The resulting design +is shown in this figure: + +.. image:: images/data_modeling_hotel_physical.png + +Note that the ``address`` type is also included in the design. It +is designated with an asterisk to denote that it is a user-defined type, +and has no primary key columns identified. This type is used in +the ``hotels`` and ``hotels_by_poi`` tables. + +User-defined types are frequently used to help reduce duplication of +non-primary key columns, as was done with the ``address`` +user-defined type. This can reduce complexity in the design. + +Remember that the scope of a UDT is the keyspace in which it is defined. +To use ``address`` in the ``reservation`` keyspace defined below +design, you’ll have to declare it again. This is just one of the many +trade-offs you have to make in data model design. + +Reservation Physical Data Model +------------------------------- + +Now, let’s examine reservation tables in the design. +Remember that the logical model contained three denormalized tables to +support queries for reservations by confirmation number, guest, and +hotel and date. For the first iteration of your physical data model +design, assume you're going to manage this denormalization +manually. Note that this design could be revised to use Cassandra’s +(experimental) materialized view feature. + +.. image:: images/data_modeling_reservation_physical.png + +Note that the ``address`` type is reproduced in this keyspace and +``guest_id`` is modeled as a ``uuid`` type in all of the tables. + +*Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. +All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_queries.rst b/doc/source/data_modeling/data_modeling_queries.rst new file mode 100644 index 000000000000..d0119944f402 --- /dev/null +++ b/doc/source/data_modeling/data_modeling_queries.rst @@ -0,0 +1,85 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Defining Application Queries +============================ + +Let’s try the query-first approach to start designing the data model for +a hotel application. The user interface design for the application is +often a great artifact to use to begin identifying queries. Let’s assume +that you’ve talked with the project stakeholders and your UX designers +have produced user interface designs or wireframes for the key use +cases. You’ll likely have a list of shopping queries like the following: + +- Q1. Find hotels near a given point of interest. + +- Q2. Find information about a given hotel, such as its name and + location. + +- Q3. Find points of interest near a given hotel. + +- Q4. Find an available room in a given date range. + +- Q5. Find the rate and amenities for a room. + +It is often helpful to be able to refer +to queries by a shorthand number rather that explaining them in full. +The queries listed here are numbered Q1, Q2, and so on, which is how they +are referenced in diagrams throughout the example. + +Now if the application is to be a success, you’ll certainly want +customers to be able to book reservations at hotels. This includes +steps such as selecting an available room and entering their guest +information. So clearly you will also need some queries that address the +reservation and guest entities from the conceptual data model. Even +here, however, you’ll want to think not only from the customer +perspective in terms of how the data is written, but also in terms of +how the data will be queried by downstream use cases. + +You natural tendency as might be to focus first on +designing the tables to store reservation and guest records, and only +then start thinking about the queries that would access them. You may +have felt a similar tension already when discussing the +shopping queries before, thinking “but where did the hotel and point of +interest data come from?” Don’t worry, you will see soon enough. +Here are some queries that describe how users will access +reservations: + +- Q6. Lookup a reservation by confirmation number. + +- Q7. Lookup a reservation by hotel, date, and guest name. + +- Q8. Lookup all reservations by guest name. + +- Q9. View guest details. + +All of the queries are shown in the context of the workflow of the +application in the figure below. Each box on the diagram represents a +step in the application workflow, with arrows indicating the flows +between steps and the associated query. If you’ve modeled the application +well, each step of the workflow accomplishes a task that “unlocks” +subsequent steps. For example, the “View hotels near POI” task helps +the application learn about several hotels, including their unique keys. +The key for a selected hotel may be used as part of Q2, in order to +obtain detailed description of the hotel. The act of booking a room +creates a reservation record that may be accessed by the guest and +hotel staff at a later time through various additional queries. + +.. image:: images/data_modeling_hotel_queries.png + +*Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. +All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_rdbms.rst b/doc/source/data_modeling/data_modeling_rdbms.rst new file mode 100644 index 000000000000..7d67d69fcc04 --- /dev/null +++ b/doc/source/data_modeling/data_modeling_rdbms.rst @@ -0,0 +1,171 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +RDBMS Design +============ + +When you set out to build a new data-driven application that will use a +relational database, you might start by modeling the domain as a set of +properly normalized tables and use foreign keys to reference related +data in other tables. + +The figure below shows how you might represent the data storage for your application +using a relational database model. The relational model includes a +couple of “join” tables in order to realize the many-to-many +relationships from the conceptual model of hotels-to-points of interest, +rooms-to-amenities, rooms-to-availability, and guests-to-rooms (via a +reservation). + +.. image:: images/data_modeling_hotel_relational.png + +.. design_differences_between_rdbms_and_cassandra + +Design Differences Between RDBMS and Cassandra +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Let’s take a minute to highlight some of the key differences in doing +ata modeling for Cassandra versus a relational database. + +No joins +~~~~~~~~ + +You cannot perform joins in Cassandra. If you have designed a data model +and find that you need something like a join, you’ll have to either do +the work on the client side, or create a denormalized second table that +represents the join results for you. This latter option is preferred in +Cassandra data modeling. Performing joins on the client should be a very +rare case; you really want to duplicate (denormalize) the data instead. + +No referential integrity +~~~~~~~~~~~~~~~~~~~~~~~~ + +Although Cassandra supports features such as lightweight transactions +and batches, Cassandra itself has no concept of referential integrity +across tables. In a relational database, you could specify foreign keys +in a table to reference the primary key of a record in another table. +But Cassandra does not enforce this. It is still a common design +requirement to store IDs related to other entities in your tables, but +operations such as cascading deletes are not available. + +Denormalization +~~~~~~~~~~~~~~~ + +In relational database design, you are often taught the importance of +normalization. This is not an advantage when working with Cassandra +because it performs best when the data model is denormalized. It is +often the case that companies end up denormalizing data in relational +databases as well. There are two common reasons for this. One is +performance. Companies simply can’t get the performance they need when +they have to do so many joins on years’ worth of data, so they +denormalize along the lines of known queries. This ends up working, but +goes against the grain of how relational databases are intended to be +designed, and ultimately makes one question whether using a relational +database is the best approach in these circumstances. + +A second reason that relational databases get denormalized on purpose is +a business document structure that requires retention. That is, you have +an enclosing table that refers to a lot of external tables whose data +could change over time, but you need to preserve the enclosing document +as a snapshot in history. The common example here is with invoices. You +already have customer and product tables, and you’d think that you could +just make an invoice that refers to those tables. But this should never +be done in practice. Customer or price information could change, and +then you would lose the integrity of the invoice document as it was on +the invoice date, which could violate audits, reports, or laws, and +cause other problems. + +In the relational world, denormalization violates Codd’s normal forms, +and you try to avoid it. But in Cassandra, denormalization is, well, +perfectly normal. It’s not required if your data model is simple. But +don’t be afraid of it. + +Historically, denormalization in Cassandra has required designing and +managing multiple tables using techniques described in this documentation. +Beginning with the 3.0 release, Cassandra provides a feature known +as :ref:`materialized views ` +which allows you to create multiple denormalized +views of data based on a base table design. Cassandra manages +materialized views on the server, including the work of keeping the +views in sync with the table. + +Query-first design +~~~~~~~~~~~~~~~~~~ + +Relational modeling, in simple terms, means that you start from the +conceptual domain and then represent the nouns in the domain in tables. +You then assign primary keys and foreign keys to model relationships. +When you have a many-to-many relationship, you create the join tables +that represent just those keys. The join tables don’t exist in the real +world, and are a necessary side effect of the way relational models +work. After you have all your tables laid out, you can start writing +queries that pull together disparate data using the relationships +defined by the keys. The queries in the relational world are very much +secondary. It is assumed that you can always get the data you want as +long as you have your tables modeled properly. Even if you have to use +several complex subqueries or join statements, this is usually true. + +By contrast, in Cassandra you don’t start with the data model; you start +with the query model. Instead of modeling the data first and then +writing queries, with Cassandra you model the queries and let the data +be organized around them. Think of the most common query paths your +application will use, and then create the tables that you need to +support them. + +Detractors have suggested that designing the queries first is overly +constraining on application design, not to mention database modeling. +But it is perfectly reasonable to expect that you should think hard +about the queries in your application, just as you would, presumably, +think hard about your relational domain. You may get it wrong, and then +you’ll have problems in either world. Or your query needs might change +over time, and then you’ll have to work to update your data set. But +this is no different from defining the wrong tables, or needing +additional tables, in an RDBMS. + +Designing for optimal storage +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In a relational database, it is frequently transparent to the user how +tables are stored on disk, and it is rare to hear of recommendations +about data modeling based on how the RDBMS might store tables on disk. +However, that is an important consideration in Cassandra. Because +Cassandra tables are each stored in separate files on disk, it’s +important to keep related columns defined together in the same table. + +A key goal that you will see as you begin creating data models in +Cassandra is to minimize the number of partitions that must be searched +in order to satisfy a given query. Because the partition is a unit of +storage that does not get divided across nodes, a query that searches a +single partition will typically yield the best performance. + +Sorting is a design decision +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In an RDBMS, you can easily change the order in which records are +returned to you by using ``ORDER BY`` in your query. The default sort +order is not configurable; by default, records are returned in the order +in which they are written. If you want to change the order, you just +modify your query, and you can sort by any list of columns. + +In Cassandra, however, sorting is treated differently; it is a design +decision. The sort order available on queries is fixed, and is +determined entirely by the selection of clustering columns you supply in +the ``CREATE TABLE`` command. The CQL ``SELECT`` statement does support +``ORDER BY`` semantics, but only in the order specified by the +clustering columns. + +*Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. +All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_refining.rst b/doc/source/data_modeling/data_modeling_refining.rst new file mode 100644 index 000000000000..13a276ed740a --- /dev/null +++ b/doc/source/data_modeling/data_modeling_refining.rst @@ -0,0 +1,218 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. role:: raw-latex(raw) + :format: latex +.. + +Evaluating and Refining Data Models +=================================== + +Once you’ve created a physical model, there are some steps you’ll want +to take to evaluate and refine table designs to help ensure optimal +performance. + +Calculating Partition Size +-------------------------- + +The first thing that you want to look for is whether your tables will have +partitions that will be overly large, or to put it another way, too +wide. Partition size is measured by the number of cells (values) that +are stored in the partition. Cassandra’s hard limit is 2 billion cells +per partition, but you’ll likely run into performance issues before +reaching that limit. + +In order to calculate the size of partitions, use the following +formula: + +.. math:: N_v = N_r (N_c - N_{pk} - N_s) + N_s + +The number of values (or cells) in the partition (N\ :sub:`v`) is equal to +the number of static columns (N\ :sub:`s`) plus the product of the number +of rows (N\ :sub:`r`) and the number of of values per row. The number of +values per row is defined as the number of columns (N\ :sub:`c`) minus the +number of primary key columns (N\ :sub:`pk`) and static columns +(N\ :sub:`s`). + +The number of columns tends to be relatively static, although it +is possible to alter tables at runtime. For this reason, a +primary driver of partition size is the number of rows in the partition. +This is a key factor that you must consider in determining whether a +partition has the potential to get too large. Two billion values sounds +like a lot, but in a sensor system where tens or hundreds of values are +measured every millisecond, the number of values starts to add up pretty +fast. + +Let’s take a look at one of the tables to analyze the partition size. +Because it has a wide partition design with one partition per hotel, +look at the ``available_rooms_by_hotel_date`` table. The table has +four columns total (N\ :sub:`c` = 4), including three primary key columns +(N\ :sub:`pk` = 3) and no static columns (N\ :sub:`s` = 0). Plugging these +values into the formula, the result is: + +.. math:: N_v = N_r (4 - 3 - 0) + 0 = 1N_r + +Therefore the number of values for this table is equal to the number of +rows. You still need to determine a number of rows. To do this, make +estimates based on the application design. The table is +storing a record for each room, in each of hotel, for every night. +Let's assume the system will be used to store two years of +inventory at a time, and there are 5,000 hotels in the system, with an +average of 100 rooms in each hotel. + +Since there is a partition for each hotel, the estimated number of rows +per partition is as follows: + +.. math:: N_r = 100 rooms/hotel \times 730 days = 73,000 rows + +This relatively small number of rows per partition is not going to get +you in too much trouble, but if you start storing more dates of inventory, +or don’t manage the size of the inventory well using TTL, you could start +having issues. You still might want to look at breaking up this large +partition, which you'll see how to do shortly. + +When performing sizing calculations, it is tempting to assume the +nominal or average case for variables such as the number of rows. +Consider calculating the worst case as well, as these sorts of +predictions have a way of coming true in successful systems. + +Calculating Size on Disk +------------------------ + +In addition to calculating the size of a partition, it is also an +excellent idea to estimate the amount of disk space that will be +required for each table you plan to store in the cluster. In order to +determine the size, use the following formula to determine the size +S\ :sub:`t` of a partition: + +.. math:: S_t = \displaystyle\sum_i sizeOf\big (c_{k_i}\big) + \displaystyle\sum_j sizeOf\big(c_{s_j}\big) + N_r\times \bigg(\displaystyle\sum_k sizeOf\big(c_{r_k}\big) + \displaystyle\sum_l sizeOf\big(c_{c_l}\big)\bigg) + + +.. math:: N_v\times sizeOf\big(t_{avg}\big) + +This is a bit more complex than the previous formula, but let's break it +down a bit at a time. Let’s take a look at the notation first: + +- In this formula, c\ :sub:`k` refers to partition key columns, + c\ :sub:`s` to static columns, c\ :sub:`r` to regular columns, and + c\ :sub:`c` to clustering columns. + +- The term t\ :sub:`avg` refers to the average number of bytes of + metadata stored per cell, such as timestamps. It is typical to use an + estimate of 8 bytes for this value. + +- You'll recognize the number of rows N\ :sub:`r` and number of values + N\ :sub:`v` from previous calculations. + +- The **sizeOf()** function refers to the size in bytes of the CQL data + type of each referenced column. + +The first term asks you to sum the size of the partition key columns. For +this example, the ``available_rooms_by_hotel_date`` table has a single +partition key column, the ``hotel_id``, which is of type +``text``. Assuming that hotel identifiers are simple 5-character codes, +you have a 5-byte value, so the sum of the partition key column sizes is +5 bytes. + +The second term asks you to sum the size of the static columns. This table +has no static columns, so the size is 0 bytes. + +The third term is the most involved, and for good reason—it is +calculating the size of the cells in the partition. Sum the size of +the clustering columns and regular columns. The two clustering columns +are the ``date``, which is 4 bytes, and the ``room_number``, +which is a 2-byte short integer, giving a sum of 6 bytes. +There is only a single regular column, the boolean ``is_available``, +which is 1 byte in size. Summing the regular column size +(1 byte) plus the clustering column size (6 bytes) gives a total of 7 +bytes. To finish up the term, multiply this value by the number of +rows (73,000), giving a result of 511,000 bytes (0.51 MB). + +The fourth term is simply counting the metadata that that Cassandra +stores for each cell. In the storage format used by Cassandra 3.0 and +later, the amount of metadata for a given cell varies based on the type +of data being stored, and whether or not custom timestamp or TTL values +are specified for individual cells. For this table, reuse the number +of values from the previous calculation (73,000) and multiply by 8, +which gives 0.58 MB. + +Adding these terms together, you get a final estimate: + +.. math:: Partition size = 16 bytes + 0 bytes + 0.51 MB + 0.58 MB = 1.1 MB + +This formula is an approximation of the actual size of a partition on +disk, but is accurate enough to be quite useful. Remembering that the +partition must be able to fit on a single node, it looks like the table +design will not put a lot of strain on disk storage. + +Cassandra’s storage engine was re-implemented for the 3.0 release, +including a new format for SSTable files. The previous format stored a +separate copy of the clustering columns as part of the record for each +cell. The newer format eliminates this duplication, which reduces the +size of stored data and simplifies the formula for computing that size. + +Keep in mind also that this estimate only counts a single replica of +data. You will need to multiply the value obtained here by the number of +partitions and the number of replicas specified by the keyspace’s +replication strategy in order to determine the total required total +capacity for each table. This will come in handy when you +plan your cluster. + +Breaking Up Large Partitions +---------------------------- + +As discussed previously, the goal is to design tables that can provide +the data you need with queries that touch a single partition, or failing +that, the minimum possible number of partitions. However, as shown in +the examples, it is quite possible to design wide +partition-style tables that approach Cassandra’s built-in limits. +Performing sizing analysis on tables may reveal partitions that are +potentially too large, either in number of values, size on disk, or +both. + +The technique for splitting a large partition is straightforward: add an +additional column to the partition key. In most cases, moving one of the +existing columns into the partition key will be sufficient. Another +option is to introduce an additional column to the table to act as a +sharding key, but this requires additional application logic. + +Continuing to examine the available rooms example, if you add the ``date`` +column to the partition key for the ``available_rooms_by_hotel_date`` +table, each partition would then represent the availability of rooms +at a specific hotel on a specific date. This will certainly yield +partitions that are significantly smaller, perhaps too small, as the +data for consecutive days will likely be on separate nodes. + +Another technique known as **bucketing** is often used to break the data +into moderate-size partitions. For example, you could bucketize the +``available_rooms_by_hotel_date`` table by adding a ``month`` column to +the partition key, perhaps represented as an integer. The comparision +with the original design is shown in the figure below. While the +``month`` column is partially duplicative of the ``date``, it provides +a nice way of grouping related data in a partition that will not get +too large. + +.. image:: images/data_modeling_hotel_bucketing.png + +If you really felt strongly about preserving a wide partition design, you +could instead add the ``room_id`` to the partition key, so that each +partition would represent the availability of the room across all +dates. Because there was no query identified that involves searching +availability of a specific room, the first or second design approach +is most suitable to the application needs. + +*Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. +All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_schema.rst b/doc/source/data_modeling/data_modeling_schema.rst new file mode 100644 index 000000000000..1876ec3faab1 --- /dev/null +++ b/doc/source/data_modeling/data_modeling_schema.rst @@ -0,0 +1,144 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: cql + +Defining Database Schema +======================== + +Once you have finished evaluating and refining the physical model, you’re +ready to implement the schema in CQL. Here is the schema for the +``hotel`` keyspace, using CQL’s comment feature to document the query +pattern supported by each table:: + + CREATE KEYSPACE hotel WITH replication = + {‘class’: ‘SimpleStrategy’, ‘replication_factor’ : 3}; + + CREATE TYPE hotel.address ( + street text, + city text, + state_or_province text, + postal_code text, + country text ); + + CREATE TABLE hotel.hotels_by_poi ( + poi_name text, + hotel_id text, + name text, + phone text, + address frozen
    , + PRIMARY KEY ((poi_name), hotel_id) ) + WITH comment = ‘Q1. Find hotels near given poi’ + AND CLUSTERING ORDER BY (hotel_id ASC) ; + + CREATE TABLE hotel.hotels ( + id text PRIMARY KEY, + name text, + phone text, + address frozen
    , + pois set ) + WITH comment = ‘Q2. Find information about a hotel’; + + CREATE TABLE hotel.pois_by_hotel ( + poi_name text, + hotel_id text, + description text, + PRIMARY KEY ((hotel_id), poi_name) ) + WITH comment = Q3. Find pois near a hotel’; + + CREATE TABLE hotel.available_rooms_by_hotel_date ( + hotel_id text, + date date, + room_number smallint, + is_available boolean, + PRIMARY KEY ((hotel_id), date, room_number) ) + WITH comment = ‘Q4. Find available rooms by hotel date’; + + CREATE TABLE hotel.amenities_by_room ( + hotel_id text, + room_number smallint, + amenity_name text, + description text, + PRIMARY KEY ((hotel_id, room_number), amenity_name) ) + WITH comment = ‘Q5. Find amenities for a room’; + + +Notice that the elements of the partition key are surrounded +with parentheses, even though the partition key consists +of the single column ``poi_name``. This is a best practice that makes +the selection of partition key more explicit to others reading your CQL. + +Similarly, here is the schema for the ``reservation`` keyspace:: + + CREATE KEYSPACE reservation WITH replication = {‘class’: + ‘SimpleStrategy’, ‘replication_factor’ : 3}; + + CREATE TYPE reservation.address ( + street text, + city text, + state_or_province text, + postal_code text, + country text ); + + CREATE TABLE reservation.reservations_by_confirmation ( + confirm_number text, + hotel_id text, + start_date date, + end_date date, + room_number smallint, + guest_id uuid, + PRIMARY KEY (confirm_number) ) + WITH comment = ‘Q6. Find reservations by confirmation number’; + + CREATE TABLE reservation.reservations_by_hotel_date ( + hotel_id text, + start_date date, + end_date date, + room_number smallint, + confirm_number text, + guest_id uuid, + PRIMARY KEY ((hotel_id, start_date), room_number) ) + WITH comment = ‘Q7. Find reservations by hotel and date’; + + CREATE TABLE reservation.reservations_by_guest ( + guest_last_name text, + hotel_id text, + start_date date, + end_date date, + room_number smallint, + confirm_number text, + guest_id uuid, + PRIMARY KEY ((guest_last_name), hotel_id) ) + WITH comment = ‘Q8. Find reservations by guest name’; + + CREATE TABLE reservation.guests ( + guest_id uuid PRIMARY KEY, + first_name text, + last_name text, + title text, + emails set, + phone_numbers list, + addresses map, + confirm_number text ) + WITH comment = ‘Q9. Find guest by ID’; + +You now have a complete Cassandra schema for storing data for a hotel +application. + +*Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. +All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/data_modeling_tools.rst b/doc/source/data_modeling/data_modeling_tools.rst new file mode 100644 index 000000000000..46fad33465ab --- /dev/null +++ b/doc/source/data_modeling/data_modeling_tools.rst @@ -0,0 +1,64 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Cassandra Data Modeling Tools +============================= + +There are several tools available to help you design and +manage your Cassandra schema and build queries. + +* `Hackolade `_ + is a data modeling tool that supports schema design for Cassandra and + many other NoSQL databases. Hackolade supports the unique concepts of + CQL such as partition keys and clustering columns, as well as data types + including collections and UDTs. It also provides the ability to create + Chebotko diagrams. + +* `Kashlev Data Modeler `_ is a Cassandra + data modeling tool that automates the data modeling methodology + described in this documentation, including identifying + access patterns, conceptual, logical, and physical data modeling, and + schema generation. It also includes model patterns that you can + optionally leverage as a starting point for your designs. + +* DataStax DevCenter is a tool for managing + schema, executing queries and viewing results. While the tool is no + longer actively supported, it is still popular with many developers and + is available as a `free download `_. + DevCenter features syntax highlighting for CQL commands, types, and name + literals. DevCenter provides command completion as you type out CQL + commands and interprets the commands you type, highlighting any errors + you make. The tool provides panes for managing multiple CQL scripts and + connections to multiple clusters. The connections are used to run CQL + commands against live clusters and view the results. The tool also has a + query trace feature that is useful for gaining insight into the + performance of your queries. + +* IDE Plugins - There are CQL plugins available for several Integrated + Development Environments (IDEs), such as IntelliJ IDEA and Apache + NetBeans. These plugins typically provide features such as schema + management and query execution. + +Some IDEs and tools that claim to support Cassandra do not actually support +CQL natively, but instead access Cassandra using a JDBC/ODBC driver and +interact with Cassandra as if it were a relational database with SQL +support. Wnen selecting tools for working with Cassandra you’ll want to +make sure they support CQL and reinforce Cassandra best practices for +data modeling as presented in this documentation. + +*Material adapted from Cassandra, The Definitive Guide. Published by +O'Reilly Media, Inc. Copyright © 2020 Jeff Carpenter, Eben Hewitt. +All rights reserved. Used with permission.* \ No newline at end of file diff --git a/doc/source/data_modeling/images/Figure_1_data_model.jpg b/doc/source/data_modeling/images/Figure_1_data_model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3b330e7a391146bcc8ce6098fa44f566f8a80bd GIT binary patch literal 17469 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 RXQ$wwV|B{^FWBhu{{>4UePRFr literal 0 HcmV?d00001 diff --git a/doc/source/data_modeling/images/Figure_2_data_model.jpg b/doc/source/data_modeling/images/Figure_2_data_model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7acdeac02abcd20125bc036339f2376e57ab615c GIT binary patch literal 20925 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 IjzE0=A06=;dH?_b literal 0 HcmV?d00001 diff --git a/doc/source/data_modeling/images/data_modeling_chebotko_logical.png b/doc/source/data_modeling/images/data_modeling_chebotko_logical.png new file mode 100755 index 0000000000000000000000000000000000000000..e54b5f2740af3a7300cd0cef3374d867e26496d5 GIT binary patch literal 87366 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 F-ymdW(UqJo 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 PROS2`z0-w1Sl#$Hyi!;a literal 0 HcmV?d00001 diff --git a/doc/source/data_modeling/images/data_modeling_chebotko_physical.png b/doc/source/data_modeling/images/data_modeling_chebotko_physical.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdaec552726990c77bc3985725e8d7f79a52532 GIT binary patch literal 4553809 zcmeF42b@*awf~1E9qbZNL`75(=~V;^cEuXYi<$s4C{e@!qREQ^HHoq2`J#D7G4Dl9 zqR|xV-x4GCu2HZAJEDlO08#|S`TvFu>+U({mUH{LcfRw%ai4wGUVH8DJ~MOI@9eYB z#Yc`iuw%Qf?P_XjIv#w`*rRJ|TK&AHre)tY%~do0^$z#ze{Ih?=)~zYH3N5Q_^;XX zi+}ZcP0fD8CLepkj1vw&Y~;kLQ}!5NJ9R?c9_LOuOV%|tqsE+j*7%91*UjiLq3+bl zXYRG*=MOxzV~@$Td+m7qki+{Qe%5|eU3*oZv_3>iLX;E>&W4D3H(NWcCg`VHvcxBq~V1Nx5~*uTeyuN_CXQ)$$+ z+DRji9(%xs?sT-*j;GC-an{Iw{mwb(oITDNw8zwGr}i5#V#J7k{Rj3NIIyoQ`cD7h znKQ40NCa0hPwMEb)27atI{mb%DX81&lKUWm&&iP+3G~=+zx6*CJ$5~O{KUy;HelJ!bGM;Uz~A9hYbQ_oVKAlv14j-S zFtY!^zWoPVOrB-Xhkkx*$Iloa$%}96`O%d=^3b{;o-=h??eu;=xP}u)PMcbL_Qbkr zqYs}vaoW`BQzy-M>B;RQ+ElMXiyU=eKs^$cYWur%v;nYEIVwemJJ?2aRht zo;YLj=tJrzP3p1V_-SY960Vyzs$av;y{Z$g8*JCtHuf^AU(zl|sdm!TX;a3}7(IE) z_*3ipopt7^>rFRQCj2%`^Wle&JowD%Gsd4evF_lpqgAoTuM(s8BjN9SlTn59nJrWXO<76NmI4TsLCS`U!8`Jmh-p)QM*|{Em=o_dB?D>O{G> zpOuky<3~)GFk#SyzQaZgRBr=@jp#dEzjynN7(Ai>r13)r*A5*%U}Hy~vrtDzOq;Af z5#!JBY#PQ=tImcF8dN)Y!q8!ThYuS+zVF}x1Bdq=F~0wZzQYC%8b3%QnJ{$lh>cw& zaTDt5pvluU$3G0rPs5}&o}LXqj&3&B|1v*o{IuzH4ZpVb+HvFWE&J{7tT(h-|Lbq$ z_=ydF21ZXGKeMiORKG@biJ+|AC}%J^Jekn|gqo-BxMEeEf{5Ecwx`TZVN}J#p%pGwY_!sH^QUY1-5&J;tAP))|v0j&Hak`prDE zcEg{0`$6h4V`>lg(_VMh^hp~>?71u9p!2?92h|QAK4D`2NquXFPngtq@X!GR`;H$m zcyQkVLkCS9Ftq>R5#z@X-Z(_>dJhhVbH*#Lk0}38>+t?dH%BTKQMSRocaQ2{5vDkrU`czaQ5Bl1cmqN&G%p|LMWO@XUigE8=%(EQgo(Z_8+()%b}Ed|*rZf!ci_ z4u8Vi@JV^B`*VIk!yn{^&vp8N$nb$qe}I%vj`aRYZTyHG^%rHJd7~e^4c_&kI{l~Y z@gpV<8&*54HvOk;7pmthSzlB0{h;l7N#Z8a+s04h9&T^)M%jm+k^4=I8-~2k4X4`c}bHNt>SNHSIrCX;h-AcWOgZ_cy{*xYkdqtCfBx>8_t?ciwy_ zKB^SFlo(UNT_+sUNrFX$61XBjN|=Bv!6HHlToE88Ou&_35upUG2#^vc;7YKFPy$y3 zNC^{gC0Il#fhz)}gbBD3EFzS^6#-Jh1Y8Lg5lY~S04ZStt^|t+C2&Q6lrRBTf<=T9 zxFSGGn1Cz6B0>pV5g;W@z?EPTp#-i7kP;@~O0bAf0#^h`2@`N7SVSm+D*~j13Ahq0 zB9y=t0aC&QTnQEtO5lnBDPaPx1d9kIa7BQWFacMBMT8Q#B0x%*fGfcwLJ3?EASFz| zm0%H}1g;2>5+>kEu!vAfi>qB?H;lS7wFSmG+UsJ)X8$o?`(*T(c+k;@*VO!I=bD=w!w1Rwwb2tWV=5P$##AOHafKmY;|C@}#f zi4p^+I|x7k0uX=z1Rwwb2tWV=5P$##8VDdsa2-GZ0uX=z1Rwwb2tWV=5P$##AW#MZ zE%WU2lTSWbym;|PAAR)Y`ma2_(HsI0fB*y_009V80fAPnTD5K4cJs|Q@7Aqbmo8nJ zH|Hi$70fC_fB*y_0D;02$VHM^w{G1(|M|}+o_KuTy!lI)E^X7Mb?41Hw`#q~Caqf) zK0rJ|00Izz00bZafl4Fr)!MJteZ6kk=gU`qv9e8@HobfI9y)aBh!G>CQ&ieeh!+A7 zfB*y_P(%XRy>VmZ%9Rg1@W7pS-nn+|+8(=XzunH;cHO>f`;P637$B}8009U<00Izz zK*bVRyJqc2?=M;O_6Kjj`p)W=tHQGpNtt-p!gdD^@u8 zg#ZK~009U<00LD_VA0!)9{Yb!wy0?_ZQ8V+J$qL5SQ#7yAOHafKp+Ew%#y@gZ@u;N zpZ~n$<{if#voFtRWWdR32tWV=5P$##AdrcGw&i-_zNcP$;q^(AChfD&KAFrp4*>{3 z00I!GS^^m)iTU&A|Kb|bTlpfJ{`0hjZ861mX2?7ETfB*y_009V83xQsH z?A)eZn?L;F5AE8u8#{JvwG4}KKmY;|fB*!tAdvDc+1fwiqKhul`Uv!hEO2590SG_< z0uX=z1R@jY-g7%W7&~XqoO$!+MQ(&41Rwwb2tc5E2qc#zv?=s2|Ld39KSIxIRL@u$ z2?QVj0SG_<0uYE9ft`BqIAG6yS6+GL^5x5878>C|00Izz00fFoAh{&*;DZmo^Ugbx z?b$z~=rceE5P$##AOHafG;IPy_8Hu+Q`_JD?srWa1EYrk1Rwx`rbr-(B(ZYk${TOG zap=B-dA~+eydoGg1Rwwb2o#7wv)SLwDv&GOGywv-4Yb#xqaJ_!@i*RhqX`U`AwmEG z5P$##5(JXy68GMFZ|gRj^d7WZ!io|EAOHafKmY;|fI!g*Y}sWCZFzaiEjJgf2OL8H z0uX=z1mZ{_C`ssT*>~T4cmGlSnl}%gievc11OW&@00Izz00gRnz<^Qx=FOYGXwjmo z7!8Af00bZa0SH7Q5Y!!Bc;SV$YuE0)d(TL%F@gXDAOHafKmY;|CkFIm) z&Mky9d_VvK5P$##DuX~!l6dmTCwJJjN6S_%D z`=JL2KmY;|fIut=G?FAf{`lk0n{|psTm%7utO?AnpOtkR8bAO75P$##;zyuE=MGDj zEQw!SL<9i{KmY;|C<=i_y2O`Xez{4T){300I!G5&|JfqIIh(85zTX00bZa0SG_<0+mLf)h4Z0u0)ckv}q$=2tWV=5XhB4 zBS|7xC$xhA1Rwwb2tWV=5GVkF=FOWGzzZ%Q009U<00I?407;@kCW~ApijgKmY;|fB*y_009U<00MC#fFu!@nIH}bKmY;|fB*y_009U<00IzzK$9ZS zvVfyqylC-v4m!mg{$u_FR;B;}2tWV=5P$##AOHafKmY;|fB*!10<4noX;6j$1Rwwb z2tWV=5P$##AOHafK%hhfkR(b3nr}Q|00Izz00bZa0SG_<0uX>e!3ZEp6bvPfAOHafKmY;|fB*y_009U< z00Iz*P5?4kL{KxBWvD&&H)T+~7y?3^nRE0pOYIxYU5AE2gLn?dK ztE0t>7T6>vCSyVUE_ii;AG4Z|IdDv>m;-SZ8)?S)pMUa&hwp#H zAZT*;K4477DJ}>)#irixy6tYez%*rJ4j3&ae%R_uSB0((SE-rZ`@qrP+V)$%O{#L- zXs3#kdI&%O0uX=z1Rwwb2tWV=KfyeJ}HCYvuX@BRSQ>@89 z=09L%SGew%b1aKic6ZsFivu~{7t2>%asDqYSM-}JZ=5#kEWbwS;%Ucy-)gS;)31{z z_?t2I&Kiu3==5@Ww!Wo4nhOdvBEI~zr!c#^hN7njbtBxxiXy9fk&u|uJl zb;Wr}8=8#@f~v+JvqBnZTaZJ|=K0evbgmpX|1$8q2mtp_<%~|C z&aOKrtKLQU{Am}O7-3;(W`A<|c>(3Z&bmU`X$RurutEvUuAfz*krOrqAW$FzFF!T! zllMNm@PZA0KMUj)HxPgT1Rwx`m=Y-6(;G_nOq39eNk6C!h!UziyLM($Q9`FA3j~sS zrSSfugrupu8ZLNcfxf%1fsJp6D_>3}O2}Ty!^U>O|114eFiG3$lt!V!2HUKc6vCBO zFsRlX1r0b?wO} zsVL!^Uoic`^pTXEwlSdq0SG_<0uX=z1Rwwb2tXkI1WG4KT?DjUegebqouGbF|B=a7EVE;N`$m zGGYIzsOF5WW9N?6i_Myt+g$t8`p4^UzWMr_brEXnwdlmzXaR?L5d2gT$|i2KEo=%9 zfB*y_009U<00Izz00iPmphS{{qy)?VmG5bZL;!~jEE{)8yEBmJ;OB%l|2DDhgA9C$ z;e})mG|0wRG5n<6x|59_o3K+V=s^&_Qx}Q<-FzxMm$>@UiR;vCtf9swy+gUK3RbC( z{JxYDrxG1>_ufAxCyLYc{`-4xkdwfZAGsm5zzS99x?N%u29umpi2{;c>^kuS$Qhll zE4dl*forb)iBot^anSQOHb)B8myM*V_<>nDCbTUc3J`z*1Rwwb2tWV=5P$##;!mJN zl7#=v#R(Hn@NZ2!M!wb%5G<4sn!OS~f7OHkAcoR)KVvuaX0Pnjl6F;EdaUHr{97xt zw3={1$*m={(k23%IcOKfa1#?g{8Ro~4-Fxywju$=0#;jft?n#H#qX!h&UtP~{lJP; z4u}HMgZz$Ct#-*7o$ovhN^T9KvlPidjjmX8q6u=+hSj)2Y-tDLrrIu6zNDuWKg$-L5d(iSh5_d}BMtZ|_+glvE(u$b zpzeI-C1dYV(D_b$^~dUc_^Q;~OYD>@1TM31gt4U^7zl?DfB*y_009U<00Izz00d%1 zpy-l>6ahb-4%`xVEPR#0e-^_?`IUjY=zcyKIHl&Mbg1n1BXB;ILz?q1mVaU8=!K-o zt=?E_9yIW9?rLWP1tscMX!8P#(0a*ONSfUG3o+y& z98W5@emr4`MEf#YL-m^!kr}u`K1c(u3VZ0Q59Yb6r^xtIW(H{r>Cpum`Wsu=DajC4 z_T>qyRKZ_LW9x3rAhxtELJAOo00bZa0SG_<0uX=z1Y$^_xRQiYeeKuihON{w)#C;W zUU|dNBu(}Gv@;+d$lg*)|1k~c&_n^>Os9JF>E&9@uAjBBYi%DH@V)U&%Kytv_*~#d zd$uXIbGRb(VhtOL419GZ9Dvp2!_}M=qu@(S=0EVZP^-_j5Js1+hurLAOFOsW&?+jfwF9%W#1fUiFU%NJ{(3nwsjv@@0Sr_4gi6Mbgk}B+>jc}-DtRZX3zizQx^k~0Rad=00Izz00bZa0SGi%0!5T0lsa0@uk9C7 zW&8e80yWup_x-b-3_TEFiM_u;q@T%$9~#i3BwBr-9$j}ToLzU07IUaR+W>rfU#c+Y zzJa3BOGx~M5B}M3Ip8GeDuY0){E-G6#^f+tbfpQqT4|St9=$*S0uX=z1Rwwb2tWV= zO_@LupWZM%LVVLKf5>)E!|-hRVu$}|zn}I8wtA2gX$RVH(^n8wsbw7!Ceo~K2=^YS zNwp(^Gn4<*j{CkJSfF|MFu*4bNoyNuV)YeW$N^nx##@!NOM{MHAOHafKmY;|fB*y_ z0D&e>poo%$a!7-#Z6)%_^UaS60TDqp+APAhq43|oY3mCDyGfWg)n7X2l0cF#z2NNH znT3kh`cgqav_8UW)Vo$>-2TL0|1tl8R8O^-aZw9lq($v62j{Uxm%~`%PdkS}(F6hz zfB*y_009U<00IzzKn?_o_~3>gjWT>Knn<%*kSa77D~9sG}Ms_PN7)v z$^z%XUq%t|Da&jA^y@3m|D`?pAp?0(&8*AM3mE5fD5b;KBP2#-q>)c|);4FP=ArC` za-qv%;8j37hf&i60uX=z1Rwwb2tWV=5P(2#1d6yyLIGWR-NhDGs)Z6AJ9jjjoD2R| z5$>@Fr%gDA{@HLBx@#@{?NoXN}mM7TzFWf?jFm!(%yT4Ol*fLFxzg2|W zPQsQ*sFi;ZZ*JR#~x}CBwa0G z$-B&ybVtd%&7l>P8@eYpRI}ifHyXab+VEXps`oQTSDEy?EPcg59&!lAfA5D4&8^;W zokkH!{P5(&kKcC5@NEKR>sR$TBMta0*I_>BN)vN6(Jl=!dVv50AOHafKmY;|fB*y_ z;0P2^l5ibpwS?{Gp!7KD`U6uF)Wl!nkkurOIdF`#SJJMI?EM?odlYYaW2vA2r&(u^ zO08J@{)ShJsylP#`$_*ONzx$wq}NZ;lN!6qf*?)fzhtNKL|2+PtA=)IaM23{AOHaf zKmY;|fB*y_00Bp!=#qrGIbp)_hCAs(312mM;i(tQIIDv1M7oB(e1u`bQpkqY8M5isr#z>%6Td4^F&vgP^*S^X>idC z1Rwwb2tWV=5P$##AOHbJpcImX5;n{8m0^Y#O8Bb5-1{EMZEkd@+Eyj_&s=2tpoG6= zp*akPlytR%=^(P#knQHV@5jIGZ*FZ(ht>Fnfx`#dp*G)4s)m?>D-;B2z-L(w^F&vg zn5%|%X>idC1Rwwb2tWV=5P$##AOHbJpcImXdh*{g5nd>v{UuGaP`(}3EF#X9sSoPH zHSu+dh)(Ru5hcSGRk&@^Am`ryuvzLE5G!}+lz6pBSj&)1<7*k#$_l=wqsl*Ce~X<; zRVWnFRQ^j=pC`J~#91}8OM{DEAOHafKmY;|fB*y_009U%0wt0pl%HFApLC&wuUY8L zkG45wV4l)1ZHKwBNEc|aP_`UU+n%e@aAZDl_U4K1Kb zgf$v#Xa%2-)Q~{eX66_CCOISZ9hRk>Kf2O{T^+Pb!-`%Y009U<00Izz00bZa0SGt( zC6Xl6nV;b+2@fa&I%|(PNEA5jxbG|L_HA^i%A{)(Y%YBjz*X9wmuBM%^8B5HPC0-2 zg}#WOyj}my(ht}w{ep~58c<+Yoc~KZs|3{~7*%R$erkQi`Tylq35`@`b7IZI1qGv9 z@m8;{6}$;I@^*IJIdXfBv6(LpbXYBb3J)sGDpDD z?O3s4UBmRi$%aG4=4%RJ3)fN7Aa%-rnW$^4n&+SVzAI~tQV@KfIxAOxO}IR5)(`YL z4;x)zQHJct9IzlT-u#h9!NS$r0+S$IrF4MH=3MMADKKLzq~CZ!X7;8Fl~b*g(5WV@aH04wopVXJi4+654cDtidAF8Us9$&Xi)CLVHIu22;w){Lz&r+UlTP8dmfI0SG_<0uX=z1Rwwb2tYstO1D%(o%yRJba?GA=LE8J zC3Tlxcd-@$=rt69XBw2ZtBL>Ez7E4*Uo21L^Mky%RRk>6i!>3f*zgx9NKMcSE;4rE zTq#ru1X}!IajN-Y$2NM#BG9QGzqn?*Uq5``!`4JKYT{HFZRV(W)FiAd_>?TKDdt3Jm64*Naz9r5P$## zAOHafKmY;|fB*y_0D<%bs!Ecu2O>0PB#HDB&shjS00Izz00bZa0SG_<0uX>ec?ndH zBq2S*c45%g1A3~zykzMe0uX=z1Rwwb2tWV=5P$##AOL|h1WLNSWtuqhJS8zg+dY~S z?HOrh3K0qHyL*B65MjHGh~zPY00bZa0SG_<0uX=z1R&5f2~@)>3GHV&qxKxPtEFa9 zk8HSiSTxNUWzdfEsc0uX=z1Rwwb2tWV=5P$##AW-Q9D*NdTy`A%l^Z(2A2u;ScSwCPaiQFzq z9=6Dh8?7J!0SG_<0uX=z1Rwwb2tXh=0+qc=;^yBb_O;ab>wZwH-7RwiK`RJA00Izz z00bZa0SG_<0uX=z1WHMuvL%TVCLC|Dq(|_`hS8t^0SG_<0uX=z1Rwwb2tWV=5QsT} z%6@P|ds*r+jTOtk(DNF_ULT>pc(ftrS2N*300Izz00bZa0SG_<0uX>e1rexhNkX8f z%{r@BpI+M4vVx!!Dg+<^0SG_<0uX=z1Rwwb2tWV=6)#Ef(oZg82tWV=5P$##AOHaf zKmY;|Xfgz5*Uzf5u~znm5>+-C3e(;3j3EF42tWV=5P$##AOHaf zKmY;|C=3B4iNbKi3j`nl0SG_<0uX=z1Rwwb2tWV=SrI^z$O;$65P$##AOHafKmY;| zfB*y_009UTh5(X8VL0Li0uX=z1Rwwb2tWV=5P$##AOL}^2p~yhg$rW{KmY;|fB*y_ z009U<00Izz00as{07;@S9Pt7H2tWV=5P$##AOHafKmY;|fIwCRkR-Cgg)sym009U< z00Izz00bZa0SG_<0)-)fBvBZSc!2-}AOL|v5SU#*s}OGR0Rad=00Izz00baVF$B;h zDrTw(6ao-{00bZa0SG_<0uX=z1RzjN1dt@EX*L-P1Rwwb2tWV=5P$##AOHafK%im> zAW2lrR1qiyAOHafKmY;|fB*y_009Ue z#SlP}sFz{}fB*y_009U<00Izz00bZql>m}NR8rVM00Izz z00bZa0SG_<0uX=z1RzjA0!R`Cgo!H%KmY;|fB*y_009U<00Izz00g2EK$3_`3Ofiu z00Izz00bZa0SG_<0uX=z1PVw1Nuq!-aRmVgKmY;|fB*y_009U<00IzzKvV)q5>ZKE z2LT8`00Izz00bZa0SG_<0uX>e0SO>U6c8q^AOHafKmY;|fB*y_009WZk-+TwS#b=D zm>|$V09}IX00Izz00bZa0SG_<0uX=z1Rwx`G7vzLC*ROCiNa8+2#0LQgKmY<&LLg3(M3o?A7!ZH} z1Rwwb2vh@s_RTvq8b*E1nwm9V*MHThk^=}p00Izz00isK+IN2@aSe!ya*XH1Rwwb2tXia1o%J_vk4&_2tWV=5U5rHtdgkKnPprMfB*y_ z009U<00Izz00bZafmjnjl8E*65F7*`009U<00Izz00bZa0SG{#S_xz=NzAUFRjn)- z7X%;x0SG_<0uX=z1Rwwb2tWV=r6mxn4JGvSCJ%6ycK+!N0uX=z1Rwx`Bn0?Ck^~A> z5P$##AOL}a6Nr-}fg(}x>BS)gAOHafKmY00bZa0SG_<0uX=z1Rwwb2tXi607)W9gkuOm00Izz00bZa0SG_<0uX=z1WG`F z?JY|HnJypz0SG_<0uZPu0&H(tQPV}RMIwQVFgE2tWV=5P$## zAOHafKmY;|fB*!_Kp;*_C2DH8F;Rv~fG#0WQ`5P1`@UQ6WF+Q&{MNEHEA22!A%721 zdcg()5P(2w2=IZVG@R)L0uX=z1RxMENrL%+00hcH;H2FTyl_mdbv^FZb02&EWjl;g z*nfv1*B&y{EGOM_$!)LCwL=OJfB*y_009U<00Izz00hDWVkSw{b6X-jN7O)|O#}ZEvC_Vx0B3b-S z=m7!{fB*y_009U<00IzzKq&|yNtA*zeLx_80wcHG{g?Zn`RZxE&)*duAOL}w5|~{- zE2fbV76c#w0SG_<0uU%3fjI4PsqLiLQL1=TjpvFbAVuOQdyOC3t@nlz6ywJv;4_CG z#{4~0>;w@w1Rzj_1OmU)s&Ir12?7v+00bZq3j!>ah{ZGz1O(C$7|>;xgdUN`j#ChT z00bZa0SG_<0uX=z1S*OEl0-#K7r{aR0uX=z1Rwwb2tWV=5P$##s)YcOM77K$4x4_ojS2JP|pUw-WUc^5x%Q<{!) zL!GMkgLWEfK!p0Sh4Zd{?$6e{TK#b3$%DG?(sQ$IUF9vWJb2^0d!JY|-)vG9$__kL zVAMkZ0uX=z1Rwwb2tXiak_5X+aY;g8BZ0aB<4zxZ^v0va|L-{d;>1Bs&A6M-dF=g{ zUCsZF`_U1*?B$Sq(F za=5QVO|l>7-M8N1f-$vw_ZXNktEq9}_1?0_nfLy(1ggY|efB?RMle*Bzr_6M#|C&Q*22yKlet54v*RK1j?yg^0O_2&K)~+(o9X4qj z)+6k!R*0-vyZXF`uC*E~|sF%$Y9>Wmeqh7ffrM!19QYxdl(uRRZu zwDl3aMqT&9?ct|haz_2}%FnH%;oW-gvc>i~{KLHaZ+_+PD)j5J^Qi-m&@?$40qL{l z4iY7_f<#ZZxHGh~KS$GT^|T!~N$-lp&us_(&%xB-&&uX%v!6oYmZSUl@PK&z-2D@Y=U( zV>$M*yX_r_Ka=CE&o5c=nYA%J!Uh`<1*8s~xcmO$!RCxw6J)(RJwjVU{O3d08V#Mb z=~j3y!t=eSH0FK$_PTG@{YT#eoSzZf_SKSzuxJt=;5J?g5P$##AOHafKmY;|2oQ+V zYd5sin|~01KvDw!4{lO}^_2^kF1h-dKZk#gZhhrJbD;a`hxQy9wlM=&P>Md|{;M8a z__F?;_m67>IeEiAn}IL_?RD7LKw5*D{9*nB%f4J;1{Xbc!=mLMyR+I{;@I8xu~S7U zSR5M*5(Vn+{Dm8=0ABIb%^S}&{J%jIXgn4j=8oETT~qVn7oVK__y6%}D1bLVTjX15 zF8=SI_gD-veq`Z4%|H{XO)BiH6=DQDM9+ex0D)K&upcuD5P$##AOHaf6pcWfB#EL8 z62}l|;sl;}f4*LAVGz1>*uu(53(Au(eB^)qM>DQ@?r+a8e%*|`K<OHS5Uy8tXgW7+AGt_t`KM7flxVw00bZa z0SG_<0uX4*1dt?}^6WGACPcu`lfxNo0EEA!!cINvJuINg@SS

    SQr;jP9`B{<`^ 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%0AtgZ&PFzPU?ZuxQdJ;xXlyw|PnP`?Lu(a{KOa&g` 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 B3sL|8 literal 0 HcmV?d00001 diff --git a/doc/source/data_modeling/images/data_modeling_hotel_erd.png b/doc/source/data_modeling/images/data_modeling_hotel_erd.png new file mode 100755 index 0000000000000000000000000000000000000000..e86fe68f34f91ab91768609610a1cbd39f090413 GIT binary patch literal 233309 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�&Lr0_1qQzmf^0{H3L?E(P*m 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∠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 literal 0 HcmV?d00001 diff --git a/doc/source/data_modeling/images/data_modeling_hotel_logical.png b/doc/source/data_modeling/images/data_modeling_hotel_logical.png new file mode 100755 index 0000000000000000000000000000000000000000..e920f12486d19196c6198f4bbee8e771e7c4efef GIT binary patch literal 116998 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

    -cK^AjHgWY3*Kp`M-#7j%-`8h# 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 tB`N#J zEaVQ#ibp9JvoQ`R^DC5-P%5gaIA`Os?~JjQqs~NpG_R4@bjp1C<;|(zbCPs-leYD5 zlh|4`h~iwn`|d}9oFE5R(zu+VEU95&>Cz}BI+HL{_lWs{p5T()K|dq6Q{x=DJPP+0 zE}Gdj^IqO{z+W)5pz*KO{A;7hA1Jo;aA@V|wkGAJ-Ano~6zsyB{tmkob6sG(cSOI< za6Yw87EwbxDrA}pb#U{pVl|8(6;Xw*$^Fr}7gT22$U^0nvM#+`lUUdU+4Pc897%JB zmdYkoWYx=kIqp<^J*4#dZ@5fhF8gDT?EN0c zyrz*Lt+v)rs)rN?S}nY_AkZsEd{{LzZ=b;iInB?msRoY1U>>8lJOh`8h&1;YGO=I# zJsrzP`9Rj~UOrDHEH!vKTVZWZB8G06-l=_Z!~*5eI(yeQLL|rA#m_{N>T2t69DSrD zRo&%zj>ctIPLZ^dep$YX#>Iln@T_TK^e~hsQfztC%&? zug{DImo{QdIJ%kP`)Hs{0;p9(MWEo_%7r>v;Y#n^UG zia8Od?YQ%eEs||g>M8d6;M zI&2A3og~X9t8`a_`Hrl?k30IcH3Y=zZGL{T3+@{qodclLncv{3qafMWM$9rm*jcqD zixseI$+}BpOhP~~(_;;Y&NHd(2c~F2ehFFOVoR09+^E-ddy!qN>O}g}a z{l10PV!g6a-GepuETQZ2I^RO_x*0{>_*Hb?&ka19p?3gHV$qXr6!R8dP#Mp@2Hk$; z)YILRIZb!zTV5%$3P`D}CYTn98tuOK>YGa`Lz`3cs@a4|TWN~CP_C*Fh**!wPN*RX z_=TqusJUDo<@FF@Ow*xg&B%uaGXmCC!>qbffmQPuHS6)4<|@x=hoEktx>z=+sJUglki2g1!9rXH>tXB zG47N~6pn(}?~bo#vby4BGgwvFIBsVt z*|qodQ;Bup=jjh{3Z%gN1wkYFpV>NP23sUncV$XKAN$Vr1Fvi?Z&rYhv;z43J7g!w z=b~d%7~eIF9hdjwY`3`I!r;a> z?DQn3s@8f4sPp)kA-^-2H(N*4e+1CSOLmK&82~Df{s9Fh%s};d&7JQ;r92t=*yT`> z21uDb9ldA&{|ys+)Mnpm@|IUZmuVdR!bHweyvcfjvop}&0{?HW-n!`nQFmQ5KY)nGdz!<32=}}9f72=Q z=nP;*^%IoaqqtrJz=!#eZ>0HulLaqBFg5pMqxoTaaTQ>?-+isWui;!V5CgzUVIcru z`vK_j0pi+=5++Lv zS2yut?n3P02{3z&iJm)uy<86l_vIa z_t9UHJZo3Rj^I{4H79NMnLo=P~3o*=Ge(wBZ0HsalDMEep(k2RZS(7?XUkyoi`+V_B z>k08A;{0(00~EkUnm@=8a~Y1Z;<7{g1n+qW-P6im3cQFruns!#-D8C3uUN!cXPwxnO)$%cIs$lW5(7>s~a)8zw?D5JGAN4R+sm8&(JPtQpWCc zk{XL9c1T zO?+O|KvVjW1T<%^z95E-uTcYH{}{?@{JfL0Qo^`?oqux1YvXXJJ-gIiXEih`(fi

      5P&uA&IvX7o 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 N5S0?ieysE6{{XP=D-i$y literal 0 HcmV?d00001 diff --git a/doc/source/data_modeling/images/data_modeling_reservation_logical.png b/doc/source/data_modeling/images/data_modeling_reservation_logical.png new file mode 100755 index 0000000000000000000000000000000000000000..0460633b68fa478dc8651ba1e97d1e8e3e4c4428 GIT binary patch literal 121750 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%0Dc-aDZQQ^Pd-TX3y5=2d8EEPd_a2_ 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%0AC-wRfR4(DQR|y8K5L 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 scripts written in Python. As outlined in :doc:`testing`, each kind of test suite addresses a different way how to test Cassandra. But in the end, all of them will be executed together on our CI platform at `builds.apache.org `_, running `Jenkins `_. + + + +Setting up your own Jenkins server +================================== + +Jenkins is an open source solution that can be installed on a large number of platforms. Setting up a custom Jenkins instance for Cassandra may be desirable for users who have hardware to spare, or organizations that want to run Cassandra tests for custom patches before contribution. + +Please refer to the Jenkins download and documentation pages for details on how to get Jenkins running, possibly also including slave build executor instances. The rest of the document will focus on how to setup Cassandra jobs in your Jenkins environment. + +Required plugins +---------------- + +The following plugins need to be installed additionally to the standard plugins (git, ant, ..). + +You can install any missing plugins through the install manager. + +Go to ``Manage Jenkins -> Manage Plugins -> Available`` and install the following plugins and respective dependencies: + +* Job DSL +* Javadoc Plugin +* description setter plugin +* Throttle Concurrent Builds Plug-in +* Test stability history +* Hudson Post build task + + +Configure Throttle Category +--------------------------- + +Builds that are not containerized (e.g. cqlshlib tests and in-jvm dtests) use local resources for Cassandra (ccm). To prevent these builds running concurrently the ``Cassandra`` throttle category needs to be created. + +This is done under ``Manage Jenkins -> System Configuration -> Throttle Concurrent Builds``. Enter "Cassandra" for the ``Category Name`` and "1" for ``Maximum Concurrent Builds Per Node``. + +Setup seed job +-------------- + +Config ``New Item`` + +* Name it ``Cassandra-Job-DSL`` +* Select ``Freestyle project`` + +Under ``Source Code Management`` select Git using the repository: ``https://github.com/apache/cassandra-builds`` + +Under ``Build``, confirm ``Add build step`` -> ``Process Job DSLs`` and enter at ``Look on Filesystem``: ``jenkins-dsl/cassandra_job_dsl_seed.groovy`` + +Generated jobs will be created based on the Groovy script's default settings. You may want to override settings by checking ``This project is parameterized`` and add ``String Parameter`` for on the variables that can be found in the top of the script. This will allow you to setup jobs for your own repository and branches (e.g. working branches). + +**When done, confirm "Save"** + +You should now find a new entry with the given name in your project list. However, building the project will still fail and abort with an error message `"Processing DSL script cassandra_job_dsl_seed.groovy ERROR: script not yet approved for use"`. Goto ``Manage Jenkins`` -> ``In-process Script Approval`` to fix this issue. Afterwards you should be able to run the script and have it generate numerous new jobs based on the found branches and configured templates. + +Jobs are triggered by either changes in Git or are scheduled to execute periodically, e.g. on daily basis. Jenkins will use any available executor with the label "cassandra", once the job is to be run. Please make sure to make any executors available by selecting ``Build Executor Status`` -> ``Configure`` -> Add "``cassandra``" as label and save. + +Executors need to have "JDK 1.8 (latest)" installed. This is done under ``Manage Jenkins -> Global Tool Configuration -> JDK Installations…``. Executors also need to have the virtualenv package installed on their system. + diff --git a/doc/source/development/code_style.rst b/doc/source/development/code_style.rst new file mode 100644 index 000000000000..5a486a4a38e3 --- /dev/null +++ b/doc/source/development/code_style.rst @@ -0,0 +1,94 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: none + +Code Style +========== + +General Code Conventions +------------------------ + + - The Cassandra project follows `Sun's Java coding conventions `_ with an important exception: ``{`` and ``}`` are always placed on a new line + +Exception handling +------------------ + + - Never ever write ``catch (...) {}`` or ``catch (...) { logger.error() }`` merely to satisfy Java's compile-time exception checking. Always propagate the exception up or throw ``RuntimeException`` (or, if it "can't happen," ``AssertionError``). This makes the exceptions visible to automated tests. + - Avoid propagating up checked exceptions that no caller handles. Rethrow as ``RuntimeException`` (or ``IOError``, if that is more applicable). + - Similarly, logger.warn() is often a cop-out: is this an error or not? If it is don't hide it behind a warn; if it isn't, no need for the warning. + - If you genuinely know an exception indicates an expected condition, it's okay to ignore it BUT this must be explicitly explained in a comment. + +Boilerplate +----------- + + - Avoid redundant ``@Override`` annotations when implementing abstract or interface methods. + - Do not implement equals or hashcode methods unless they are actually needed. + - Prefer public final fields to private fields with getters. (But prefer encapsulating behavior in "real" methods to either.) + - Prefer requiring initialization in the constructor to setters. + - Avoid redundant ``this`` references to member fields or methods. + - Do not extract interfaces (or abstract classes) unless you actually need multiple implementations of it. + - Always include braces for nested levels of conditionals and loops. Only avoid braces for single level. + +Multiline statements +-------------------- + + - Try to keep lines under 120 characters, but use good judgement -- it's better to exceed 120 by a little, than split a line that has no natural splitting points. + - When splitting inside a method call, use one line per parameter and align them, like this: + + :: + + SSTableWriter writer = new SSTableWriter(cfs.getTempSSTablePath(), + columnFamilies.size(), + StorageService.getPartitioner()); + + - When splitting a ternary, use one line per clause, carry the operator, and align like this: + + :: + + var = bar == null + ? doFoo() + : doBar(); + +Whitespace +---------- + + - Please make sure to use 4 spaces instead of the tab character for all your indentation. + - Many lines in many files have a bunch of trailing whitespace... Please either clean these up in a separate patch, or leave them alone, so that reviewers now and anyone reading code history later doesn't have to pay attention to whitespace diffs. + +Imports +------- + +Please observe the following order for your imports:: + + java + [blank line] + com.google.common + org.apache.commons + org.junit + org.slf4j + [blank line] + everything else alphabetically + +Format files for IDEs +--------------------- + + - IntelliJ: `intellij-codestyle.jar `_ + - IntelliJ 13: `gist for IntelliJ 13 `_ (this is a work in progress, still working on javadoc, ternary style, line continuations, etc) + - Eclipse (https://github.com/tjake/cassandra-style-eclipse) + + + diff --git a/doc/source/development/dependencies.rst b/doc/source/development/dependencies.rst new file mode 100644 index 000000000000..6dd1cc46bc8f --- /dev/null +++ b/doc/source/development/dependencies.rst @@ -0,0 +1,53 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Dependency Management +********************* + +Managing libraries for Cassandra is a bit less straight forward compared to other projects, as the build process is based on ant, maven and manually managed jars. Make sure to follow the steps below carefully and pay attention to any emerging issues in the :doc:`ci` and reported related issues on Jira/ML, in case of any project dependency changes. + +As Cassandra is an Apache product, all included libraries must follow Apache's `software license requirements `_. + +Required steps to add or update libraries +========================================= + +* Add or replace jar file in ``lib`` directory +* Add or update ``lib/license`` files +* Update dependencies in ``build.xml`` + + * Add to ``parent-pom`` with correct version + * Add to ``all-pom`` if simple Cassandra dependency (see below) + + +POM file types +============== + +* **parent-pom** - contains all dependencies with the respective version. All other poms will refer to the artifacts with specified versions listed here. +* **build-deps-pom(-sources)** + **coverage-deps-pom** - used by ``ant build`` compile target. Listed dependenices will be resolved and copied to ``build/lib/{jar,sources}`` by executing the ``maven-ant-tasks-retrieve-build`` target. This should contain libraries that are required for build tools (grammar, docs, instrumentation), but are not shipped as part of the Cassandra distribution. +* **test-deps-pom** - refered by ``maven-ant-tasks-retrieve-test`` to retrieve and save dependencies to ``build/test/lib``. Exclusively used during JUnit test execution. +* **all-pom** - pom for `cassandra-all.jar `_ that can be installed or deployed to public maven repos via ``ant publish`` + + +Troubleshooting and conflict resolution +======================================= + +Here are some useful commands that may help you out resolving conflicts. + +* ``ant realclean`` - gets rid of the build directory, including build artifacts. +* ``mvn dependency:tree -f build/apache-cassandra-*-SNAPSHOT.pom -Dverbose -Dincludes=org.slf4j`` - shows transitive dependency tree for artifacts, e.g. org.slf4j. In case the command above fails due to a missing parent pom file, try running ``ant mvn-install``. +* ``rm ~/.m2/repository/org/apache/cassandra/apache-cassandra/`` - removes cached local Cassandra maven artifacts + + diff --git a/doc/source/development/documentation.rst b/doc/source/development/documentation.rst new file mode 100644 index 000000000000..c623d54b9507 --- /dev/null +++ b/doc/source/development/documentation.rst @@ -0,0 +1,104 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + + +Working on Documentation +************************* + +How Cassandra is documented +=========================== + +The official Cassandra documentation lives in the project's git repository. We use a static site generator, `Sphinx `_, to create pages hosted at `cassandra.apache.org `_. You'll also find developer centric content about Cassandra internals in our retired `wiki `_ (not covered by this guide). + +Using a static site generator often requires to use a markup language instead of visual editors (which some people would call good news). Sphinx, the tool-set we use to generate our documentation, uses `reStructuredText `_ for that. Markup languages allow you to format text by making use of certain syntax elements. Your document structure will also have to follow specific conventions. Feel free to take a look at `existing documents <..>`_ to get a better idea how we use reStructuredText to write our documents. + +So how do you actually start making contributions? + +GitHub based work flow +====================== + +*Recommended for shorter documents and minor changes on existing content (e.g. fixing typos or updating descriptions)* + +Follow these steps to contribute using GitHub. It's assumed that you're logged in with an existing account. + +1. Fork the GitHub mirror of the `Cassandra repository `_ + +.. image:: images/docs_fork.png + +2. Create a new branch that you can use to make your edits. It's recommended to have a separate branch for each of your working projects. It will also make it easier to create a pull request later to when you decide you’re ready to contribute your work. + +.. image:: images/docs_create_branch.png + +3. Navigate to document sources ``doc/source`` to find the ``.rst`` file to edit. The URL of the document should correspond to the directory structure. New files can be created using the "Create new file" button: + +.. image:: images/docs_create_file.png + +4. At this point you should be able to edit the file using the GitHub web editor. Start by naming your file and add some content. Have a look at other existing ``.rst`` files to get a better idea what format elements to use. + +.. image:: images/docs_editor.png + +Make sure to preview added content before committing any changes. + +.. image:: images/docs_preview.png + +5. Commit your work when you're done. Make sure to add a short description of all your edits since the last time you committed before. + +.. image:: images/docs_commit.png + +6. Finally if you decide that you're done working on your branch, it's time to create a pull request! + +.. image:: images/docs_pr.png + +Afterwards the GitHub Cassandra mirror will list your pull request and you're done. Congratulations! Please give us some time to look at your suggested changes before we get back to you. + + +Jira based work flow +==================== + +*Recommended for major changes* + +Significant changes to the documentation are best managed through our Jira issue tracker. Please follow the same `contribution guides `_ as for regular code contributions. Creating high quality content takes a lot of effort. It’s therefor always a good idea to create a ticket before you start and explain what you’re planing to do. This will create the opportunity for other contributors and committers to comment on your ideas and work so far. Eventually your patch gets a formal review before it is committed. + +Working on documents locally using Sphinx +========================================= + +*Recommended for advanced editing* + +Using the GitHub web interface should allow you to use most common layout elements including images. More advanced formatting options and navigation elements depend on Sphinx to render correctly. Therefor it’s a good idea to setup Sphinx locally for any serious editing. Please follow the instructions in the Cassandra source directory at ``doc/README.md``. Setup is very easy (at least on OSX and Linux). + +Notes for committers +==================== + +Please feel free to get involved and merge pull requests created on the GitHub mirror if you're a committer. As this is a read-only repository, you won't be able to merge a PR directly on GitHub. You'll have to commit the changes against the Apache repository with a comment that will close the PR when the committ syncs with GitHub. + +You may use a git work flow like this:: + + git remote add github https://github.com/apache/cassandra.git + git fetch github pull//head: + git checkout + +Now either rebase or squash the commit, e.g. for squashing:: + + git reset --soft origin/trunk + git commit --author + +Make sure to add a proper commit message including a "Closes #" text to automatically close the PR. + +Publishing +---------- + +Details for building and publishing of the site at cassandra.apache.org can be found `here `_. + diff --git a/doc/source/development/gettingstarted.rst b/doc/source/development/gettingstarted.rst new file mode 100644 index 000000000000..c2f5ef36e82d --- /dev/null +++ b/doc/source/development/gettingstarted.rst @@ -0,0 +1,60 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: none +.. _gettingstarted: + +Getting Started +************************* + +Initial Contributions +======================== + +Writing a new feature is just one way to contribute to the Cassandra project. In fact, making sure that supporting tasks, such as QA, documentation and helping users, keep up with the development of new features is an ongoing challenge for the project (and most open source projects). So, before firing up your IDE to create that new feature, we'd suggest you consider some of the following activities as a way of introducing yourself to the project and getting to know how things work. + * Add to or update the documentation + * Answer questions on the user list + * Review and test a submitted patch + * Investigate and fix a reported bug + * Create unit tests and d-tests + +Updating documentation +======================== + +The Cassandra documentation is maintained in the Cassandra source repository along with the Cassandra code base. To submit changes to the documentation, follow the standard process for submitting a patch (:ref:`patches`). + +Answering questions on the user list +==================================== + +Subscribe to the user list, look out for some questions you know the answer to and reply with an answer. Simple as that! +See the `community `_ page for details on how to subscribe to the mailing list. + +Reviewing and testing a submitted patch +======================================= + +Reviewing patches is not the sole domain of committers, if others have reviewed a patch it can reduce the load on the committers allowing them to write more great features or review more patches. Follow the instructions in :ref:`_development_how_to_review` or create a build with the patch and test it with your own workload. Add a comment to the JIRA ticket to let others know what you have done and the results of your work. (For example, "I tested this performance enhacement on our application's standard production load test and found a 3% improvement.") + +Investigate and/or fix a reported bug +===================================== + +Often, the hardest work in fixing a bug is reproducing it. Even if you don't have the knowledge to produce a fix, figuring out a way to reliable reproduce an issues can be a massive contribution to getting a bug fixed. Document your method of reproduction in a JIRA comment or, better yet, produce an automated test that reproduces the issue and attach it to the ticket. If you go as far as producing a fix, follow the process for submitting a patch (:ref:`patches`). + +Create unit tests and Dtests +============================ + +Test coverage in Cassandra is improving but, as with most code bases, it could benefit from more automated test coverage. Before starting work in an area, consider reviewing and enhancing the existing test coverage. This will both improve your knowledge of the code before you start on an enhancement and reduce the chances of your change in introducing new issues. See :ref:`testing` and :ref:`patches` for more detail. + + + diff --git a/doc/source/development/how_to_commit.rst b/doc/source/development/how_to_commit.rst new file mode 100644 index 000000000000..dff39832d8c2 --- /dev/null +++ b/doc/source/development/how_to_commit.rst @@ -0,0 +1,75 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: none + +How-to Commit +============= + +If you are a committer, feel free to pick any process that works for you - so long as you are planning to commit the work yourself. + +Here is how committing and merging will usually look for merging and pushing for tickets that follow the convention (if patch-based): + +Hypothetical CASSANDRA-12345 ticket is a cassandra-3.0 based bug fix that requires different code for cassandra-3.3, and trunk. Contributor Jackie supplied a patch for the root branch (12345-3.0.patch), and patches for the remaining branches (12345-3.3.patch, 12345-trunk.patch). + +On cassandra-3.0: + #. ``git am -3 12345-3.0.patch`` (if we have a problem b/c of CHANGES.txt not merging anymore, we fix it ourselves, in place) + +On cassandra-3.3: + #. ``git merge cassandra-3.0 -s ours`` + #. ``git apply -3 12345-3.3.patch`` (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) + #. ``git commit -amend`` + +On trunk: + #. ``git merge cassandra-3.3 -s ours`` + #. ``git apply -3 12345-trunk.patch`` (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) + #. ``git commit -amend`` + +On any branch: + #. ``git push origin cassandra-3.0 cassandra-3.3 trunk -atomic`` + +Same scenario, but a branch-based contribution: + +On cassandra-3.0: + #. ``git cherry-pick `` (if we have a problem b/c of CHANGES.txt not merging anymore, we fix it ourselves, in place) + +On cassandra-3.3: + #. ``git merge cassandra-3.0 -s ours`` + #. ``git format-patch -1 `` + #. ``git apply -3 .patch`` (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) + #. ``git commit -amend`` + +On trunk: + #. ``git merge cassandra-3.3 -s ours`` + #. ``git format-patch -1 `` + #. ``git apply -3 .patch`` (likely to have an issue with CHANGES.txt here: fix it ourselves, then git add CHANGES.txt) + #. ``git commit -amend`` + +On any branch: + #. ``git push origin cassandra-3.0 cassandra-3.3 trunk -atomic`` + +.. tip:: + + Notes on git flags: + ``-3`` flag to am and apply will instruct git to perform a 3-way merge for you. If a conflict is detected, you can either resolve it manually or invoke git mergetool - for both am and apply. + + ``-atomic`` flag to git push does the obvious thing: pushes all or nothing. Without the flag, the command is equivalent to running git push once per each branch. This is nifty in case a race condition happens - you won’t push half the branches, blocking other committers’ progress while you are resolving the issue. + +.. tip:: + + The fastest way to get a patch from someone’s commit in a branch on GH - if you don’t have their repo in remotes - is to append .patch to the commit url, e.g. + curl -O https://github.com/apache/cassandra/commit/7374e9b5ab08c1f1e612bf72293ea14c959b0c3c.patch + diff --git a/doc/source/development/how_to_review.rst b/doc/source/development/how_to_review.rst new file mode 100644 index 000000000000..4778b6946788 --- /dev/null +++ b/doc/source/development/how_to_review.rst @@ -0,0 +1,73 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. _how_to_review: + +Review Checklist +**************** + +When reviewing tickets in Apache JIRA, the following items should be covered as part of the review process: + +**General** + + * Does it conform to the :doc:`code_style` guidelines? + * Is there any redundant or duplicate code? + * Is the code as modular as possible? + * Can any singletons be avoided? + * Can any of the code be replaced with library functions? + * Are units of measurement used in the code consistent, both internally and with the rest of the ecosystem? + +**Error-Handling** + + * Are all data inputs and outputs checked (for the correct type, length, format, and range) and encoded? + * Where third-party utilities are used, are returning errors being caught? + * Are invalid parameter values handled? + * Are any Throwable/Exceptions passed to the JVMStabilityInspector? + * Are errors well-documented? Does the error message tell the user how to proceed? + * Do exceptions propagate to the appropriate level in the code? + +**Documentation** + + * Do comments exist and describe the intent of the code (the "why", not the "how")? + * Are javadocs added where appropriate? + * Is any unusual behavior or edge-case handling described? + * Are data structures and units of measurement explained? + * Is there any incomplete code? If so, should it be removed or flagged with a suitable marker like ‘TODO’? + * Does the code self-document via clear naming, abstractions, and flow control? + * Have NEWS.txt, the cql3 docs, and the native protocol spec been updated if needed? + * Is the ticket tagged with "client-impacting" and "doc-impacting", where appropriate? + * Has lib/licences been updated for third-party libs? Are they Apache License compatible? + * Is the Component on the JIRA ticket set appropriately? + +**Testing** + + * Is the code testable? i.e. don’t add too many or hide dependencies, unable to initialize objects, test frameworks can use methods etc. + * Do tests exist and are they comprehensive? + * Do unit tests actually test that the code is performing the intended functionality? + * Could any test code use common functionality (e.g. ccm, dtest, or CqlTester methods) or abstract it there for reuse? + * If the code may be affected by multi-node clusters, are there dtests? + * If the code may take a long time to test properly, are there CVH tests? + * Is the test passing on CI for all affected branches (up to trunk, if applicable)? Are there any regressions? + * If patch affects read/write path, did we test for performance regressions w/multiple workloads? + * If adding a new feature, were tests added and performed confirming it meets the expected SLA/use-case requirements for the feature? + +**Logging** + + * Are logging statements logged at the correct level? + * Are there logs in the critical path that could affect performance? + * Is there any log that could be added to communicate status or troubleshoot potential problems in this feature? + * Can any unnecessary logging statement be removed? + diff --git a/doc/source/development/ide.rst b/doc/source/development/ide.rst new file mode 100644 index 000000000000..97c73ae6183b --- /dev/null +++ b/doc/source/development/ide.rst @@ -0,0 +1,185 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Building and IDE Integration +**************************** + +Building From Source +==================== + +Getting started with Cassandra and IntelliJ IDEA or Eclipse is simple, once you manage to build Cassandra from source using `Java 8 `_, `Git `_ and `Ant `_. + +The source code for Cassandra is shared through the central Apache Git repository and organized by different branches. You can access the code for the current development branch through git as follows:: + + git clone https://gitbox.apache.org/repos/asf/cassandra.git cassandra-trunk + +Other branches will point to different versions of Cassandra. Switching to a different branch requires checking out the branch by its name:: + + git checkout cassandra-3.0 + +You can get a list of available branches with ``git branch``. + +Finally build Cassandra using ant:: + + ant + +This may take a significant amount of time depending on whether artifacts have to be downloaded and the number of classes that need to be compiled. + +.. hint:: + + You can setup multiple working trees for different Cassandra versions from the same repository using `git-worktree `_. + +| + +Setting up Cassandra in IntelliJ IDEA +===================================== + +`IntelliJ IDEA `_ by JetBrains is one of the most popular IDEs for Cassandra and Java development in general. The Community Edition is provided as a free download with all features needed to get started developing Cassandra. + +Setup Cassandra as a Project (C* 2.1 and newer) +----------------------------------------------- + +Since 2.1.5, there is a new ant target: ``generate-idea-files``. Please see our `wiki `_ for instructions for older Cassandra versions. + +Please clone and build Cassandra as described above and execute the following steps: + +1. Once Cassandra is built, generate the IDEA files using ant: + +:: + + ant generate-idea-files + +2. Start IDEA + +3. Open the IDEA project from the checked out Cassandra directory using the menu item Open in IDEA's File menu + +The project generated by the ant task ``generate-idea-files`` contains nearly everything you need to debug Cassandra and execute unit tests. + + * Run/debug defaults for JUnit + * Run/debug configuration for Cassandra daemon + * License header for Java source files + * Cassandra code style + * Inspections + +| + +Opening Cassandra in Apache NetBeans +======================================= + +`Apache NetBeans `_ is the elder of the open sourced java IDEs, and can be used for Cassandra development. There is no project setup or generation required to open Cassandra in NetBeans. + +Open Cassandra as a Project (C* 4.0 and newer) +----------------------------------------------- + +Please clone and build Cassandra as described above and execute the following steps: + +1. Start Apache NetBeans + +2. Open the NetBeans project from the `ide/` folder of the checked out Cassandra directory using the menu item "Open Project…" in NetBeans' File menu + +The project opened supports building, running, debugging, and profiling Cassandra from within the IDE. These actions delegate to the ant `build.xml` script. + + * Build/Run/Debug Project is available via the Run/Debug menus, or the project context menu. + * Profile Project is available via the Profile menu. In the opened Profiler tab, click the green "Profile" button. + * Cassandra's code style is honored in `ide/nbproject/project.properties` + +The `JAVA8_HOME` system variable must be set in the environment that NetBeans starts in for the Run/Debug/Profile ant targets to execute. + +| + +Setting up Cassandra in Eclipse +=============================== + +Eclipse is a popular open source IDE that can be used for Cassandra development. Various Eclipse environments are available from the `download page `_. The following guide was created with "Eclipse IDE for Java Developers". + +These instructions were tested on Ubuntu 16.04 with Eclipse Neon (4.6) using Cassandra 2.1, 2.2 and 3.x. + +Project Settings +---------------- + +**It is important that you generate the Eclipse files with Ant before trying to set up the Eclipse project.** + + * Clone and build Cassandra as described above. + * Run ``ant generate-eclipse-files`` to create the Eclipse settings. + * Start Eclipse. + * Select ``File->Import->Existing Projects into Workspace->Select git directory``. + * Make sure "cassandra-trunk" is recognized and selected as a project (assuming you checked the code out into the folder cassandra-trunk as described above). + * Confirm "Finish" to have your project imported. + +You should now be able to find the project as part of the "Package Explorer" or "Project Explorer" without having Eclipse complain about any errors after building the project automatically. + +Unit Tests +---------- + +Unit tests can be run from Eclipse by simply right-clicking the class file or method and selecting ``Run As->JUnit Test``. Tests can be debugged this way as well by defining breakpoints (double-click line number) and selecting ``Debug As->JUnit Test``. + +Alternatively all unit tests can be run from the command line as described in :doc:`testing` + +Debugging Cassandra Using Eclipse +--------------------------------- + +There are two ways how to start and debug a local Cassandra instance with Eclipse. You can either start Cassandra just as you normally would by using the ``./bin/cassandra`` script and connect to the JVM through `remotely `_ from Eclipse or start Cassandra from Eclipse right away. + +Starting Cassandra From Command Line +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + * Set environment variable to define remote debugging options for the JVM: + ``export JVM_EXTRA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1414"`` + * Start Cassandra by executing the ``./bin/cassandra`` + +Afterwards you should be able to connect to the running Cassandra process through the following steps: + +From the menu, select ``Run->Debug Configurations..`` + +.. image:: images/eclipse_debug0.png + +Create new remote application + +.. image:: images/eclipse_debug1.png + +Configure connection settings by specifying a name and port 1414 + +.. image:: images/eclipse_debug2.png + +Afterwards confirm "Debug" to connect to the JVM and start debugging Cassandra! + +Starting Cassandra From Eclipse +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Cassandra can also be started directly from Eclipse if you don't want to use the command line. + +From the menu, select ``Run->Run Configurations..`` + +.. image:: images/eclipse_debug3.png + +Create new application + +.. image:: images/eclipse_debug4.png + +Specify name, project and main class ``org.apache.cassandra.service.CassandraDaemon`` + +.. image:: images/eclipse_debug5.png + +Configure additional JVM specific parameters that will start Cassandra with some of the settings created by the regular startup script. Change heap related values as needed. + +:: + + -Xms1024M -Xmx1024M -Xmn220M -Xss256k -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCondCardMark -javaagent:./lib/jamm-0.3.0.jar -Djava.net.preferIPv4Stack=true + +.. image:: images/eclipse_debug6.png + +Now just confirm "Debug" and you should see the output of Cassandra starting up in the Eclipse console and should be able to set breakpoints and start debugging! + diff --git a/doc/source/development/images/docs_commit.png b/doc/source/development/images/docs_commit.png new file mode 100644 index 0000000000000000000000000000000000000000..d90d96a88ba55b758f377519b25a956fbbe23bc2 GIT binary patch literal 104667 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 literal 0 HcmV?d00001 diff --git a/doc/source/development/images/docs_create_branch.png b/doc/source/development/images/docs_create_branch.png new file mode 100644 index 0000000000000000000000000000000000000000..a04cb54f34d6079728cfcb2eb4a4fca365b99648 GIT binary patch literal 181860 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 sz zXn4W8V-%?FR_bP)0q9J|u7>_7%RF!H$M; zo$$QaEvaE1j(>psKNI_$8;VzEY@0`!Bkq9O_``<8l)m8o%n={b*1%3?O{I>S?S=wD zl~KANu~16aXsNLKQDP)H{046~Lkx9L-qbyg!=-+n(MMcnt49D{Sy>1U#V?R3t}Aat z{A6-9skePDH8woiCp5HuhA^MPUK)>02kyx4n%u&>J50Ym zu^Ix7W|M_xmBeJ){#cp&&wC)nqumTHgz&HtyjziS>?;3dXZ4l_mP87*TwZLr-Y@0R zPO_+28sbKhsTJt04_Oa=->gL6#`bI_&YBCFbYPX}QVsc+W1|dhWP42E{d!I7`z=BT<|_X*<-DXfqhQ^Sx^r4ac|- zQa{?g3asD5nTM}5D(%ANYc5&49eh^vd_1O3)@4^-m66H~(FjrE`RT^iX2-3i!d}2h zX*xeL`%Ffe$)I|JQ{4aT3VKH2UrR1e-+lAF$KQM!=B{Sm*8mZrR@Lxm&-T9G1cPjh`u`qO(`ivV?$8{P}w(DF2G|Z7?wZKq?o` z*!uF~M&teOMeJFz7^S3WIg6g!B#A<`=iDtFT@yDcNQ5GYZ&>?w!Uy*HniS;UfLXY1bWcLc2@3zPG~v{KJF(BP`) z!7x#fu9A+j6qn1!FUV3CopKV@MCW~k{Gv(%xg6f(6+>?7F($#*LmaKOalT)Ltt4ay zWf*_bRifnzD)DiexV8Mc(kjdNaNTr2Rm*eUQ=YlaDJCAXySfMnaqZ!F@5eWOABB5{ zmWl~mCo~nW*NNSeGP!+R7i+N`MMm%I0em*l{!tBb;&@0S-tjxM_tIRRAX_2x;Ytgk zdbe><V(60oQ={)xioc=g$wfYe&y~-ohfIxyKp3C3ar3D|kJfXLt!om(@o+&4dwgabx zNmlo*5jrOX#n*olQGvGuNq1aIwtS7xurvs2W(tCqGqOE?a#Vj8ZR3 zuy=H%8k0TAC7QB*nJ{7Jw>nMuhW)flH-K@Tx--qLYUPpe2{~H2NnLL(x;OTrepAcS zfCt|TM>iHZ3jVLm>mmq)YYr+iqW;>#-W|r_Iwcsp3nb z#0_rrsvaHgVm_kVkf+KW#@*I8^6rt@?4>_TrWNvyw&yMgwmF;ER$SldxxbRV&A5`N zu5v}GdIN`vkq|;kmkl0MXTu$d*d&iG#ptRWwMaDk*qfz>VtAVG#R1EbD8|x5V7&Wt zoZ={7c`Tf8Dv4M9N2$soMB=T~{vH+298EBYD?{&ow1rmHij!o(zjt5nsj=B=TD z830Hoso_B(S^XZcb?u2Wl=#HE7UX1V|4L!wDRAd$bMuE9F~npS%;H6I8*NkH*}W@= zR4JDPzsCYVg}S0kp;j@o?OBsew&jqvUo=IQ!vUK?G1*pQca~{VZ>>Guty=+pY}BCh zN(Xl&!IPz<#mOK}{@FAh+*jX1?`@l?e=e<{^>-DoO@2`(y|odrX;d~J(8b8>(m-2b zPgGk@w9AqDqa6M=E#xDsjgH6L0~=zsY|wWWGi#Bw6uReULPv_}kKI3Ht4!bvfr^JY zaswE)W8;xS-Hq(jcU^zMD}9T0GfxT|hnAD&I{T?zwfx!LV5sR6Fo1ij8f~$_TE!(7 zdbY#g*Lvo?H$A)TvXK%!-B|4gCPECR@b$dObotDQR8)K5i)b2c5W_4@U_4#OT^oZg zZujL{CxB`qh0QSEV|sZ*^lXXlAa{03R(AZN>zPIr_v{fE*|1nypzjdCN{tv0ZY!B~ zJf8aVTV-Ou<@8mK38+-@&>a=;L$ox5eEOYTHGU&`(T~=0h z9$EXt_gz{T#H8E4Ql@8XOHIrq86#Y6uaL<-dvUkSMPb87gZOn^VLYH;sz;^6DeGV; zk;ijfG?aQkrA2u65$j8UNOFsx>476DH!4@el|KJ7Bhx>t)vs+GBwlNXUu5>Uqv^Y+|m5l6q}S2bXKcr&=Ut7ra$>HaKQz0@P0gO zOm)ct@aY#E?PG>e%?>Fb`os>Za>^9wIQ+?fxY?b0yP{y39bW3n7=_E9;#JXLmla*p_0^P3Y8+HR}SG>4^4mQsW89!XQ5>pdZ1-|Pcw;)+hCNDko z1{FtKYb^{JLi2;YD>xu;F?dBob(ND`yBga5-q{a_@CRzyD8{GzO7qGXW?`!I9_O|< zRxxAn-Rcm2^)t&;jWa*(Yi-M?5iv^V$oAG0+|2MBAvd6^qnYLqw!><7(1Nzs=yd@0 zwQ!xYTJF_H8#f|^nH3aVL{{_Q=6@;9f9=tOq7>F5BF6X|lh<2+ z**EthT&5WbJ8vO&NQy@sf?<3k(qE2jSX8!2dlq*{&++i6x&7(*hm#LUv`T&|TYTI7 zxct%3@%L!m+#`lER%iX{)R#WI-<}IdRD2pq@@bZk?0g!%16Jl6b)7lUWtx$Zdi0nW zGI74CJ1J?t!#j6y#`LW*_O%Yax6ii5Y9sacl!on)Cy=b_-FyIrv8meH#DDgy9_=fX zZAqfll0QhHexu-OyDnNVK{=w){AOSu>i%1XT!T+~8co}i%R zkM7c-kAu&J?<^zGTnfTjzKk@yW??{-3`MhVm|9uumA>htXy5~+Bwf~DtU-Bu^0^wj zl#^RmDwxOd_9{Avcjt$V%-BtwssN&*hoIDo3Z@&2xV2-Vc9PvJ%TTVIRi>WDF(`wE zHauN7Ub&00nQDXk&yq!)*dSR-Z+G6M z?7gE={90FNGidh>R_M&E^qXfwjIRSml4*wjIUc9!xX8rMn76vFV++>Vu`|P-U-Gb+ z{sudqL~wcI;Ng!0WdFvsX|!F|e)6%blC-cvt}L%7$&%)QnI9vhP|79`3oTKd-OU@& zCVhsqJZ&f(=_bd*MbWy;$*pVztOS-cZiEHK?1i;PHUJ(U9Igxp!h*A5NujuBrbL8g zw`Q)~@Y|Z@=gidH*LD<{Db@F^D|p)8X0iOZIQm+o*HBJ`4W$|UHL8^8IR3@c?UBKC zMuD9A1Wo5Q8xz(_EZZ;pNa``5uk|^zD6adk6OkwnA*FxrS!K;B4dj{oO`%OID7t3` zZB6xK*$=!(QEA{FK`MJehzzEns$Hu#MmY?XcYb)+4-LuV5RXoYHmZJRo9Lk(!|`pE zNQQY4SwgM4Lski_h3Ct!pP#E`fb{M^bLG*h>&=VIic|}X{#m8dvv8Tn$UeEhVu}>;SpyM>ut00!6*^Jyvtb)xINb1oiB+Cs98HBr&pxO zAX@`4wSidR8oD$+<koM>wR-2@Cf03HTHlh zk@E}Dc#cL_BNns!#1g2)R=l0=-@l?9|6=kCHd?p>h+Ms5{$!eOqJtD;)NO3CFUL_~ zb&Y&x=`(+987_W*ol;ea>*34}*lsEB+7l}WQKcMz;2r9X57*Ceik{DY0utVCjkg8ynAS#Sw2sbRt=+e1Eci5L<9J?%3yg8*IQ5g-A=l5W*% zLzp{r!{Q#stlXfgnG#_0D_xjE+50Pwv3YigZiRw=FDn}iK=8?}Fq$dOKqFnIZP03I zNEM6#liYh6-QaL@e_B~f*eYk#|F@P)y?1{9%Zi4mkzuJIQT|9{zs~B}r#yQ$kG{q8 zksoYLb=UM6R3QS!Tn-tFbN18te6PUoLJ82{vp*58VhtF+bxGdwT_&>URBx82x$2PO zCNX?r*!QEm(y+I+=WGML7x6L>eu-V{LSb5^Oe&ARYTT)qD$FsJ3D=$rdmEKHt;)8yFBJ?zQnk%U} z!^yI2!#B=16J@c`*3lxKbxF;%F>aB(J>Et!;H&pTVutd@9FO}MfKHN3aq+5B1nkf0 zjjRbCtU&6lCNmsO3Bm*g7VBx6(KIpB;cO0|#~PQ}~)Uy5& zx9`dXA+I$(ds9I#l@KU_*7IeEOaHtiihFS--DcQ z%k<@k4+W5i*GvdZ72cUuJ<$0zEHJ_J;zo;B*tb9`+d_*EL+Z-!jkE04m$Df}8A<>~ zu9Sg*QONPqQmbLtuEpe3XBz*9XGU|`iL!zR%y%LSN{!Et_)$}8yi_pt+ zk3Eu<4`F)5Ni!7jx33$x7d8Gtwz+C;MHbn0G&*+8p&q9wR*j4|GD3%BwXw(Sb9MpI za(AAE>d&STm9yPlFW;}6VqykP&gE8!Di@}@IiuIgi*lp0(5JHL!J=@dj{4hyEljj> zZC4ecy25sTijG}wv}!1|R_rG{PTxJNGjU;lc0bgmx|lDi(YD^<26p&+v3?0(I!tc-i9PtsX&YM zN;+``Nb|TwP2t*bUX8WQk_tC^R!?u`=N2^n=AzO!P)7kr<}BgIWiI~$B%#i+&dH7? z7}&=ClBbQ+h^GzbeoDAuFVb>(VEUExn&s;DiZ(4!JtR2q+TYBcspR2?o^1PPZsvkM zxUdJa_yru-@ve$!U{k3QS=aW&O^&+~mJIiHB?3AoI8$io*aY{_xlYgzAa&P1{dC7Z z5$L4NUI0`An~|8n`+L9PEngb5nFNidHmJ?PEw1F@JH0)REtljzWFv9scb1nNSAgc49gd_cFwhdsK|t!NjvU5c*5iElH~AO zv6<;BMICp@Gp)CEC6_Wuo0#ePSPc>wmI|tP)870n7)ovw z{wVNaWOiU~BDn(kX*1&VrFFuWCe7>CyA2W&nLN!$qxW7%GSm6xV9?|0iLMY6?KwU> zZyf<<3h0`r>`@d*q>Ip}X|?nw?&}|EuM9^=q(d-?7fK*KNJwP;FR#1m&1o~#26Yj*ZIj}X42CnNW4(U&eh9b{4%Gc6foPCH6 zQ@ok1Rs4xq1MSb<_1VK3ZVuqv!mqoAI;Ka^I*|wD#ll|Yy??rmv5DVG;T%?B8tnfTFmkZ`8tuGB}$4Nu1}HGTqs>jwqbLw%@U zx^BE?#)jU#Dq8^=R@CJ)&le_<}cvhRWH+?Flo~Jkb^U~ER&pQ678K@ zEl@7Cq310RO*Do5-8_@W761V`0gTU}@}oni2GE~#`(;V(6f4r-yGg!(@WURq>hbUR zZ+XTuI4+_ELU1N`5p%e>B=a!e6$!0NE-AI~<8@EZW^p+)zBCaa*>%|jju2f2>A$nK zr*veJe*o~pC;tWV^dlD8DL=o;iBs%})K_CBs@6J8aE_T}yQ;KnZ-O?BGx}Qm^jlOy z>6p*%RBg}ORrN!igFpgVe%F@+9kqtd2F<-b*b5^Q->I!n>30x==!u9Qjj@eb+hS_n z#u%fGznI}Im`iEE^wza27P79QNB=^K`!Tc2_1whLU+ke)&7by5+^;a6r-A}XzQuOQccn8=CW`KUK_lfjaXOQTP@)}O{c-b}D0v06o zrguP^%q|cR4CPIKn|)JQTH0g@wZKU2_Z3Ydcg65n?s|%`$Qo6@yL56Nv(_Ta_OG9J zwp`6MVj7H9zv%yF%~Un|f0kzDX?H(YRQ&!z&} zDN2O8p&Via&+!`cJfh=rx#%`dLxO0DQjKD}-}qD}r!?(af=lWPxGE0nZu>5W zMldje$1{Wi8oX_}`S|#q$zXf}bSCx}$y-36!-u`n65X8Qp52*p86%OB5Tj|fx2EW$ z$dMcR@8%kxpOQTzaWBkHt|o!BE{2#w-hJcZ?&1ya62ThJ-GzY0jXLRIe4KbHldq`=`*O>rUg8-UT z!bVw~|J-J2f8Ay|9jfAy3Pc4DShwj$spM@k#$*Tgtx%8K*B<4r>ZiZ%1SS z?$$1hF(*(X2nd+@gr8nC4H=LV52eEwg2xi;4VvT0O7ASTgKmarsY*goWyf=M22h2iAe#E!T$*BMZCK zh~(P@qPf+EVjiA6)wQ5#K5x~iHJRC^KqD>oFJq2X*j{~1ojSlnL58*{kvadHhOwD$ zVahelha<}l_XgWUzIYd$kyK~+{=gpPcr%*QD9Ds4i0xd87g0C>N-|~6QLT^aEn9bY zyC$2M=u5$)+B6~J!miDy?)3Q?$Q0?y+grk``J7CFsLAKm8(*4H(EK{}{8Ao7nI%ph zuDv;?18xCOS%Dq~>_G0f9yRpTSk))3gjofV+9z6p8kW-GpBnAxOw?bT%i0BQmjs_^ z!vKm}JaZmZOa={3H5zsibMy6_VfQQhD$8m~nt)Iuavl;HTkVbA6P!$Z@>mRXETC)1 zrZVx8k^L~*-yeX?_-a%A3(6C<7jCbm@IYen?1UeIuW#3{7AS|^0GZ+}Dude*I=#qA zQD~MOqGC!wiCg`Nt{{B++*TW!KzZ+b{C|Tz4Fb$iFScJ@+BkRmyHA?KcC*G8^1Z+v zfS)(peN!3>R%9q6t*}kGqdWAjDn#GwdUZ#cQIW=vsm-wD+!@0lEA-G-9Li)DK=%M? zU)X&=5vW#V9%7v6FTD(M`Gb*4maZ5CJ@F`Q$mxci8Hm{sC-O~@2C{7~y@>Jol;M6?o-{ay4)Y2-mUW*ne*{472La`Lx76-lMIyWOwQBQegX!U8tgYTo65{R%RVJ0s!#{g?bu0FS@4`3+lONBz@|g$6 zF)pOHKN@uAsAiV%CRNkWy4eLP?uz4NXlR9V?O-M-wktxiNj7(r6uorL6D zwt3qgt7rOEr6Z?zIsg?V^OVlrgF8eeo(0x$@zL2x^%Gr^Fu!}!woDp#P!TBQVzM6 z&EFaqV)X(a_jTpdAvW>Vi;oXjO?FfT#Mkk_b*(ncjxw?LUV@aHn|z+x zUO4P!j{fF-mD;$%v9@qOT)AHrTri8r-`}`X?7$Z1L(|R{W7t)^ro>M)c~9E^55rn= z3mb#I`;Neq^W&{kO_H5?ibWxLW?4FnpL+ADnpUF1A^ofx(6}-FXf^zE{^J>?g9CcM z=vy`vABKbWS`4sk*sJsHlbZ799PNYT;+-pssmwc<`4Wp<$5L!?aS^xn=Kyp#CEC{KrPG9eap`<$P;d!K$g0fQZ zL@?TcuvVMAMwCq<)R@5eIUi;CwP!BvGq{D%t^*}U9FyEwBihUWrA0_EkXTg+GsU-_ zxm`)-Pp9q!++ghh{Jp;%(wr-c<>I*HLv$&LIw{; zbBxu)pGhy22kF0N_2EtK#@oIu&l*zKI1{zoVYjt(NxQaqz1thwKWjcGK!zKLKnl#E ze95;PuSG_tyFeM-f-B8-5$9aSvp`Q%CR~(-52g50cQnl-b-N2X-XnQNVmRT@#!UMK?Ei==-QBz2|=Wx%KmNX1mcW&y?~CgYXm)qO(vQ zqV^Vn7=E*%?rsyi)(C1iK3bx9mh0-kRD$1_=b88=hR?3hVYWWPWh~98k$#&o-a1u! zwJVUe^`-gU-(|qmeObnQ+JyEz)V=J|F5~ASPA@^p1n0M4(rJ3k zCQBto)}ZlQaHt2hHCTP^q0oh=lA|{U1v#D7A2=%}n79GMhcSV)lKzwNCA9!LN zf1m7yZE7;D9H97N)mFp?PGuFwUh0@LwZ*cwjY5 zQ{-iFI#f5}%qT(xd(`2V84ZRf!8kwMYig6ZcgW_~|47%be_n3}$tXp3k}R7U`vx@J z`%{JqaHFSCdFfmjog$Bmk&@9vL6i7L6Z%=EUzD8rB?sFK1dMQvfn%_)BeWq5(3$y; zRg;Hr#^&wnI@5eKs1(^jfMN<3gH!gy`FirSlH~Wl!HX0g12&&34i7?an5-_ zW6N)gzT%=x9TO_O!)qk0@Qwz#R+?yEQomV#L7VSaTmPQ*Z=R@KbOoOxr~K$e7+aw**!^sQ+<3&V3`QptFN^K1z+_hcV77GS!!xWQGO za71=hCO6h$rzEkXADlqiH`-H{|6;Q+6_qvU_R?x$hmt3Z>QuT~7b7j9jaT7&E$F#u zbORq?bg444anVvlKCrJHbW2;bFC2C5yBQ!)GoN=D0pX^?-_cQS{zu5CX80p8%o`)< zr8SMxj#k8|aTQG~N$TUSuH>u-h8n|^p;0=mW~S0(U~zhp;`mKYO{?jjo)T#R1FtlF zL{mjZ7E9#jnrZ*m(zARfyrhCD|5$~fb(=FjQ-)da>s}fjh3dz@yr?AVb0eG#D})-# zq+5Uxt42te$eRzza%1Ury{-Yz_0AhPV}M=X5vkbaPbPSnM&qM|b+|8eXk==~E{r^1 z`rDDkjvRLWBJpY{E6v2(U*_U=_H&?)_NAxJ)mML;nYA4Bb~kP z(mdylB7WS>F|U|^rSgF>Q~bS;>s@&#qpb58&qxIuoM(^hJqjr$4sglkst~V}>UBwZ zg6gX^sEZlC_*R{oEwRA6pZoC3{t%LIg#<3(_b3oebpyqhIG!y}r zJV%@02~vi;Yy*msfaa3`FUO$cW~TxUSA|o{9fZ++>ciU!0V?kjKS%9o?uE}sF{O?w zIftOl@n6ZpO|tE_!0hJlt1MYqGmSLv{eXlUv!?u-sl5y&AR)?Gi@%{6ySW!D5FX)q z_qpmw&N12eX~xr7MOA&7VaWfp2mi*&LR8GDWp2snH{%*Ztvl_M0AhcfR_zoxmm2Uh zsEd&2XZ5}Q1%HJP-wn=N4ruI+giTcN4dIXD_4^5YR?vao{ zPNID`RzKe0ZgcXu8Rv3qLk@?R$!04!7<@P@g`bl}`bm2{y>MaTnc109p2^B6x9eB8 zwHntP_0}AI{@HO_o_fH}8n9stlW}xbMr8yW`9p0H8cv_+l2U)G&XBj?!h8mAlCFlh z9~qX(0hX-5cJfpeSwnkWbtSP&&BCuVm#os%qY#^nBO0v|+5cDqxL=cPCX-?;0m?A* znU2$byVnM-osIYHv~YI;?@QeRvv;<8enf_X~DJlr5giz@o$nfd6=(j+c;SMQL_W5W^V z70s~X&Sq_McZTnb%037YBJ;I-bGQj`-GajT5^r0Ep(D^q)%WV39sC&<5v57cdR?f( zw$8U_sa1|LPkB~0*gXz-T}!orp0(vpzEdoNzf}pZP3|Am*i?-TWdbpma8*(+;*+5dcF2!FT}-?=kWpcQ2YHib7wR)i(~Gz zQzJD4i$|xUQf9c4UM^q$9BR_*DG2n{Ph7X^XL59w-KGnyE5|#&fD83?M2s9JwA?y& zN(BKeOx~JLO>)mbayj1@pGiA;yFZbReYw4>xjXmWV8hoZoQh5F^a*cFUTHQtoKLvR|+M zb?nQu7B-?yGNavW^iao)_YXnENX1;Q4Jz@)HiDzVuRh-Q%?H*g%c7*Pi`$1{{F&LY zpcN!+RlkJcR7Tn-O00^GD*Cm~{l0pU`j@BwRy=;eeVHmhQ!%|!H)u1@`1u9<2N(N1 zPnTzXjkvQQS)s!>ob@3>~1E-MUy+f9a?)Pc@pR4ms*j>Ej&BJwCz6@35;90 zZDU(|;Tb7uSty-m>Y>c)DYj%tcB7`z=eVR7p)#^Nlo<+|(X)dzT?d7#m*4_c>r4e1 zwo0eiNk}@-tb@SuB+5S0xiR8sOi>!{i9|Hp5$c{3{p0(v3yly|kHI)D=sjsSYuC=Z z^<(yTa+0$MFT_ogh5F{8_#t!5CqMr_ufe3xFmuaRB8GUmb2f(oYe5hx)}~6UudqW= zLj>YoatEeBpO$`Qul(4~_QdxQF5B4F3Kp$zbUaqNO`t$kMRI#|bp--Y@U*;p5Dt?M z^JEodOaI)lX^momo4Vhkf1lEi(Z-L^2G#$Pp!y(tt@g2%J3AiUo;N$gc2$7$s zG<=2J4{b3mGd`A3%v9Y-FFmPuo^JM~o~$G3`9F-EWmH^G@~{&E!4h182X_eW7A!!J z;4nyVXM#Hu+$Csm3-0a^2ogNFdvMo*83x|T&v*B~d){;Ihd%dQ>D%2^)wjC(snu0E zO?ze6ilropA}yiqtiFQA`v5SlZxSnj=f=*-iS#LaV>Vo1C@OmgrK;b|YF?(vP1#K2 zV_tS5+u5=0OkI>c0aWcqMH!TiV&ezgQ-@Hp*-*={&DqkJxp-yJqvI7c6EMs{KBZJc zo)wfU$r*Zh)L-HQLU^>nxHCJigp8`IL%Ua2o!xe>Ej&4fFQ__6%n_vTmSAVrEHH5b zvbhpVy27$TWX%1Yyr^?i8-IZs9={6_Ys%v#T-)QN5$>tNt>pv_=%n}IUPTDIHK`Zz zeZ`eD&T@|(n$+f?fkbnzJ&4C|Gz{^1PL~>Qb#V8Pmd^ zlhMV3;@J^4pe!uDE`!7j$D+2^GdHbimg1*lC52u_Jp}5-*W)F>1VrBK2o`$PcjcSJ zZ|LDRvZ`;16XIdA**^Dk&_7Mg2HoDcM`+l6StwEyKl7h4o3Y{yI6wLmx{{R}I1-xi zDsRzdKO1WJi?IKturg^53xFAf(Do(mtdp=DKY_o>;;p~$=V#`2-V?fJomfDX=ffgGsURxMB z{g^4y3O?!dLAL&m;mZyMg}|YiSZYJmmvg0ok=1)>L}{LFNKKQ;4SVyAn4WG`Er)Jm z>^Zo9h*V$;UOXelFAHGl-)`)G5NXlU4D22pM%3A zPPX5{32$&vWU91s+s~9)jup|pT*{-XBH+Omlg!Khu(D$CtzmguR!Ah*PAp?ZoRhR3 zdQ4G(j7tPZ?71X2xZ49;%jw=m8CM{PZsB^7&8d_j$zY*s(jl1`fXbxR1W`gO5x;p$*k z!W1jwtt0yzVQgsPVpC)rN?q)|do!lRd{Av0Zi$S4to8XynCJN8yZtt|@Bviuf}^{40o*_bzkN#YiLoL9Ode}hCsr5J zihRVr2TnrA%R_+_wMP?UkE4u<5qT(Zii)u3~LAU}(~<*0p8 zL}*6o&U#|GMLLhQr%)z^j}6LnwDdnwXaC9;a(umZV;-4OJH92C9qkVE?%r&#PFI(} zR|ESKI9I?ZuFf|`~3S4_C z#tU}5PF(bAwupHT9`%`nO`@J%7~=A~5jSJI{MdkKJKGQjoI0v-{h>KYooB-hrGC-0 z49^x*d47e_`VC6GWPoo2yxz~!UP@y-Q#4w+<4&2c9D)Ap-^IVRli&GYq%fdQlG(uF1)NjBu3>)Gt}WPwTaOBFsl3m0j4jFN<>T2bzs^l+mH*%imc< ze$(^61zP?I zgB2V;hK_XzZS!%Fd)xTY=mE5`6-x;@ZEFMS(}y zZGVfH9}c`89f5wF0)N*2uPXjk@I!-hRp1hhHkqP>{pV$VKYpRCxfg@-|9;qCcl=pk z@cO;3KJ2Ebe`y&eZaAS4zr{o6f4$Ne-V(n&I?EyN{$6*=e*deZ&3mx^{_cM&*Wb#C z@xPHi6Ki*BXa2e@ISSsBL&2#;e}iNHV@M`&{a)8vwxNx`reg_w@RLJ;i0Zb#p7o!F z?@{b#Lyol(I?(fdBkT{13QAooU{ z{?I}o9Dwr&|G?URmUbcyd=5uCRo1vHYt8#j2K>*+b~SIZ3eyT3?Jvg>s>AKt~;0}B4C zfH(rB1iS~|a6du+9}mLv|Meih_p8Sx)-OD4^z~Mom`Z{|*8Ag|KcB709YPrC5nE9r zr2e)az0~mPx!=9`U&CSpF3g}5BQE4x1Y+dH{t<;%>LIKk$!(;CClCprfuM=OL>q)hjLr@Vad*+0h=#L4v(*WI6kVctUAsqoEo3!_C`FT4DCT z+YAn9gHx9435-1cKKCEe@fuEEgAOswmCBsF!1ddzG4z3@YOP(IaD8GYxNz%}AxgS% z6LxzfgkcJR^rd2J<;k`Z?>2qic1NU)_q) zqeZI+Q<^W$V)0Oyys*niOp7@KlCgiANbs5Ae%*p|{Y86_plJY&{z2J_?%QDFx?R~FHM zB+WdKyW&G!qFvF$?prLw6Sn-4G1f~1=I{LzN}&$rrFpPvY?+iql@8w9C9_6bEq@p$ z7a+$z;WOb-&LD^N?Yp+mZ@N|<;jD$=d|mbBerk=5>Y^9x_J%cb-t92=LM9Z(0{8rq z-fY7qRTfyjIlAw4#_I_CLa{W9zeR)BVZ(%`FhlJOp9NtqHy92451|`Of`2y_;h_e& zsX#)*n-4}D*vt}?XgTe+PU%gb)SYhysO;JJayF8qcZ2N3z`PCZCHdNFn1#tJ|2=q- zqc{jqr4^*tF7o7w!TnxMQnJ6#xWgjSY1vZNxQC~FGxnimdz&;cWz9sB0Iq^MZ2W=v z!8Crka1y&Aw|%7ae;rRWDrfN8vm^Wayv_LFEp|c7uh-Fz3pO)8WfoiiKHsK#l;c&P zA26e(d6gm?-Lzi0{h|D2Rgg;3aO0?m$}#KFgHVouy*2q>1sReTU$~>g>#hzxZndwk z|ELE7FCs;pIO;FSL%>Qw{O_GE9`wuHkfL12ENc>8Jk{Gf{>Tn;C5~Ye+V5bCiWh)Y z^vnqzc+!?HEsIs}zv#FT#T|q|=kK*P-1Kcc!oUMo^G$mx>XkQJdwn~bshe7}?ubw` zz~}~MC0R$AMs^Uq!Js&YAWF6~Nf%5g6d2w&5mMpUdRiDHqN0NcRk^8PgrxO-rosA! z`|ffuX83dB_2<;{?-{h;;4k1}DEf7$EfH#ci1%d6`ti!V;dPi{?PfZ(ga6%C{~NgXhSm>X(o$MDxW7y8RJgB_;( zo6M^p*Cp0PIwQ>~&5ny8I%WzXvv*yAJpHU}6N%#Y6R~}L2!Uyp<_TraRp^AA--jlH&YK7>}(ykx~ zJh93B4h&dgb=gW+PgXM`^?7Q?;!DP0FV}%Gq%1lbv+p`6ud= z0Y;icq~qAKb#B>3z;#xW39!JXO$1 zz!`2es_dBWVRkY~`q+_?>yT&-LM`sV#1ooECZNygjR-4bJN{GJ36S(Nga80u0Y_$XA9UDBX+Y%M1_ z=ebITDxT4B#HEwo=D5u!sCj5yXn1#;Gn4eAAd4$Tx{M4wBawPBCVVh))NZV!-tqE% zMx06y^yit7NN?D|U877xjgt?y5I`DhYw^Rh-IvS14 z22Ht*k}Id;8Q`7C>5?d~!Z)ZEf!Nt?Q7?Vt5r*BO(iI*gNe)(#1+E*-DA;li__^h( zke=P2ZwjNR^FBtoPE^F(@_U5x@xL7D%!n`NY8_QIHD%0lvx`jbGtRc29^8Fw1Za2~ zx|!LW!F{-vIx-6DA#=Lk!!=JX6$og1a{(*`fU0SaR&&>P@=`Oc1jl)N+H*qjX^e5G z#MS%vLVzsDqEyc!KV?|YhDL*6nZC%##$_F*p60H3qEH+sx~s3vqw3xkHUJ z%ZbWTpObcxZlRNl$153QeKdp1@^pBWT}# zF);}dx@V8rOCFmuYrP|iNH_K&9i$uU&%Ryt=+TA$OXoi$LVuFAs&Ha=hSot9J4UwD z-M5j&^8I=easIs-GR^^P%LV69+A_=CX%}|R3GjG`Zr9mObN6%qTz)4xpWb)Sauy~U zVRx5Eo9oj(2fWkA@az!Yd_w@N+wA3rP-T9|d}lS~Ngkm!JVzTsGrXmvviR>7X_f6NjYFLg3 z>d^THhFMB%SYFiTw_b1ov#R$!f_=1tHU- z=&_jO3Xi?S1!b2G-3RV8P2aj8G^$O8tzdO|X9KWj5=q!T4Et2r?WS>vf+`*PG1jBM z4nJ$TuNRHN+drmjK%?q;FXxy)86+^e==H+AY8lKU&?l{*HIvqIelh}yCv&IpvIf=c zUv?QRy^Cmt9wF-`l`0{8UU~>#mOeDNm)##^n@%M8Fr5VY;C(B!e6}T>j+>(;j9;W! z7Q_Y4_;QD9MuSebvG1`ARv@PRDsO-dH5(6XLY*yd$$xH~&pO*P>8Fi3)DZOTacHTl z&*Bil=6r~J5yvd`@!gf;(m(`~H^cGS6V#)^&x;&v3VPPFd}ZbNIak=bn?s?n@$y*@OxUAI z81gXk3S9Q3&oZ1Xj0AxIQeq~4stw})?V&9jNqP%L_F1)jk95A~@J<3grjHpB5Q-jO zRb@{I9%c09eTjEqH{i)_dPpzZQtUEdX>Jso90#ZKqW5Vk!W%|YoyL~fQ#LMDLYqu@ucxH zBEW2w3sevzgK`ngw{WS9^<|txYTwDlhgBYSCzJr8O3Nbqp#^jkokN_QSuo|q_Nb^u6`)g)K{;fWvGi~N+pbKHYK^dZ)+pJAUZgl-KKAAsC5H+{^!AuCrV&w&ejP2?LD;oEtjU{* z{dKIMnG=pKt#?BN)ErNW9A8;b>Xc^E8%rHU14YzHHp&IcCs z4mwi0%OkBUXzth77a|pd`E1LR0e4BCcVeoc?mk@7a94=OAU9H`j}E*wW^0j zpl)0b>uh7akh04D?;5o{z7d6r`!oWa-D>b+ zl!t1j8v_UtcUL6do-HNuf5$9zpc#Vz4bFnau&@DrxgAY19^tVYW{+c8TCgf9thpp# z-Q@srd~dMugf}=FU0XaK}%2cUbo3FWd>bV zX4>vx^D9<9F8E<>knH#cvvXTC(lrDpR+JP5dCc6<2*>bjpHK71u{#U^GaI!qMAED{ z*v6u?=OWB%IjAV;T$4objZN4@4i<>6?KV$ zj@0D>ki9B@QY5y>c`iU)1D8J;(Mx*{nOH>Qw+t8U!7=&k`Y-2@_do4_C^rY$GUO+Y zz0J{pK8wR<8BR{UsAXueyK|R+&Uzl(__YRBci61OkU==H5BS>q-00`{Z3uMuOQ&!~ zl3B~b^cV2^R7aaNBt%cBq`=Igt7|*^ixr8{uf};Q?&{XWl2!ek`ib&{LI0dNs=FZ= z4X5Zesvm?!`lzxwMr>j`Pzk+U04-H|*Qe#4S*lLdYd=sR@0K zesj5&)s*k>^QgU;PSI5pD;EFup30;%(g6&4sXe< zSF)qGe8hEl(q`5Qe(cwYcNHtjSMl}x38QZm7=RJ87nsJ>xa?zWJr0=+dvxdDb{Pb! z>SSko>Bc&n>$&^n1n5U^&XA`A;n^O^ri^loz;Z%9Mvvg&yazeG10 z4WAn;DZhJJf}rqOIS+;lJ1JA;%14zI9&^j5M!vVsJ3ojEWFLV{lz>m7CDz{JetZuq zK-Ee0Wd=Fim!cqT)S!qeg7<7?@B_k=W~DMzs+z-oC;M0t3bc zUk`z{;pvR(^KjH8sw$;EGoT@gKl<~?ro%>Y8>Ioe7VP-0pO%VVeEFaoRhKC72p+qD zetkw7qOz1cbk9r>-7|QfOW;yW3GiPXP0HI)g4qHK+<($E1TV_`HnJFNf^}oqDvE`> zb)9Jx+<)!qwWAS~zUq|Y0)lPPW806rM4 z#IUG0tpiK1V37DOwjGf`K+>NM#Bi>|P$r>a~R zygxb7=e9V#z5H5l;Kb|GmNHh<+51{4@}Y@o7H!d}B~L3tFtaVcxL+v1{rN4lGbT3h zYpfzGXLBOqv#1u{QK!}udr_GuS>WK|SafrejFp(2nh#9MI#4fSzb9Dy=>Ml0U46Ud0UE|+)wsU^Bw6jHoi&kj0Fl49FX&HEu!@W6kz3!??o6nvPpKYnM;QO&f z%e?gpZ1Kvg)KDeU(0hgmWqKOD|99s;LM(aWcRrjlCp@*SGh)R?2i9C^Hf++n6iDxE z2n5hg%sxZFIxN+$B5WLL{7^O`n*`Mrb{+im3q*ZN-%+~XU)x@Es zrcM2`>L>XwIM|8Pl__JUTG(CpwRODC(?JH9PtEnWf%JGW?`(0HP0) zfR-kW)5_0K{<08vo>!8F{CEfMObHG&L{IX$vfj~i=ncLi8WPZ7nq|ETDrS*!w-$$c zSbX{#rJcuC!PSYrIMPk9nTS@%)b-V_^}RALETvAV>48w5WW?*T(On{(dk8&26Nvmv zdU3Sf3@ORJ59Ho$pa|-FrV=-F`d4%|5rqJYr0Z>F%}-v{-*m=bUIkwzG>72hy7H0f zR6eGyw^7cB-z;V`99vFSMCO-Lk+N0Tcb9n5IWn@GB1Z&pD*C8sKut}}@8h$-luz$s zd5o64$(PrO9-S-8aWvPGQsYY2U`#G6CG{@iXGOw9bxNn|?$=Sd1b;>VC_QK1RYRQ>| zrP6pURA;(2HCsYa*fuvZr`i=!W@_j!tR{n56Rt%1kE0`h`iA9R;Nlc1^j}Z)oMkcnPcH{p9#p{CG{>)sdy(X(N)-?m4}&}5Bme70-c+mKePcW{v^4Bz(^T~c zZV^|bzQ-q2b*SHRN}V0lV35_ZStKUfZg7($OtA56wZBAoZ}AFn0Zf4>nLlzcY2_?(O5vC9qq#;E%|| z!7w>JRbZ1?+%b`ycNiR4kfm<|rP9#o*o~N7A9OA#AmuMPjUVl4`3T)cCY}qEcsfZ6 zi7KJ@kK|s>V1;H=;?k+gOBSXdD*5a?4_5UUeX?X2AGhwjPjv`cM)L7E54<1dUm^h?M7Q4xlT#H*8^^(##XLhBj&|H6rMPKn zFNDHsDb~Oz1xI)HE?n^zZ1C-yqMMC0KryqOMAh+Yjk+~1x9_D%?R#B@Zd*4JOD9*l zsv$|ECk(SU-`6cBucBk3qjM37Y{(>E6pA)#%X_&U=S+O3zMN^pPcYGs$(}NjEG87= zqrVZwx#=*OhK}xJwx6U-#NmY7foQJ|=*F58((D|HW`)CWmNQGeOT;9-%RNaSjyQF{ zo}`lrOoU8qz|$@f7oXz(X;pqRFV@d~>7LNh!=*871CN~_o<^!Np{tKgF)}iC&Y$ma zHBJuwOp(ACGh?Y8cym?$HR+?NQp3PSJB@!X318mzU3tEw(~dy8h}%cQ!(KLeuE`77 z8#*S=!o%2MrxKNpJ&u@27ZS!0`iM_=&lNg0>rUq8MH-z)U}!h3dbZwiLpGTvYEz^! zoknM*jB%aHGP9dNK|Li4F(>tY<3SG`e-UN|jV&C*vb|dVr0UT6S>g7@Ni$chXd0+3sox6F#SpI<)>7qJGy{i~Q-ygtusY6J35R*ePTduktL0Kk@Kbfw>>HDAw z+M9bRE;U;`X83~Z*VVlz_NqIE4~f8DHonbX1(`6T2iDd@QC;;u`$=WMSw*j6$3i;d zmdb){!N3w|!f}xtpXjEvq^URar+MDOS{~CLMd{VR15R2v?++zbR6cv|+DL=j>@ol2pRMEdq%-dcy~1 zfvHMkxck+UB21-rwUOdSv5wBOkoCwX^>Y%&D`{p7n9s}suWv=FWS_JgO=$1W)1~V6 zR#%w^-l&+pX}guUI3n2E*RAql*nBgHk}&Emqh%+e#5d*ydND)1245DEF?}~3n#FVe zGuCZxZ2mcj1sr9IV<4V6GR$}+91(QiyDq#?Qwl@Gpr=gRN1s#+oR=vC=Xt~^Ra}+J z-+;_LAl*+ApZ@ljh?zK&2Q#ZL@_qJjHu_LB+v<)b;?gfo-gU1%L&)v5Zb9Q4?3)0( zyp^V>>Zq5d8HeFM9d9ViDi}k*ecRK^ZL(dCchIsAdl+Z&^gX6p*d`chBh-_v&QRT} zZiU`#bK$0T!ZUU-qRaEij{67gC85~Tpi`K7>iduc(HQW2o_IRfD@CPW6;rqv?3NE=*HeUKc!nEcfMdwy z7qW0O75p$>V^g5J7EB)A+Az#2ON`rjsx1_yc@w;OU z;#O%w2+XaKth=kM{E?brk3Hkn>w_l?J0X#S#f|jB|2_BGrCId$XJ$ONQTBa@REQm1 z;(RB3(v?dM0I!*sHRmxB?k1q(6O)FIINhmS&KpgwBhn7Gm@C!mIa+Wp8uQ zl-6S?UY4Efl!~z3rNTrb>uz7vmL+N}Xvcc8@`{-MG0CWPhqt^Rc6F#WYy!AGb&BQ|KVf>!+c_iF!=|D*y=LXZQ9)T@qpq0 zNJIX4P}OSRYPP{TP{sJedYyD*a~wIzag*X@sU14Xoz$hArS+aq|FmnEl~dteJj4@Pd0XqcgDO8wV8UO|p6*nz z#_Z7vIi}I)oCXIRZ+Nj)8Aq0$yEyz{k%h<-QfrXUr=gQe?Y0{SFUz;UZe2Y5WQ1a% zut9=D#m3_aHc*6&X_>sOTQj{?f2bB1K(M^6&AG^6Hb`JCsI`B34|GgkN}J<>7~Yt zCn#=3#4nSTFXS@k#TUz2Rvxy)gPkP{A(;-8dv4^y(q#1BBn+jiHU)2vF4N_=#rJ05 zjy+HMu#se&cqE~txz-?-jd4CMrS?dAABg|~rE`xn`ER>|EWDn}t3zJ$U=^yI$3NRE z3An!dXI3afL|eDLdiL~9R`S|NfbQme`A)l!eQ+_Ug$f(Aa!Sdbhf;eQrM@3~ zJ@%FWOeSqFf=*Gm!j)-%P!!fFalnE0=2&5D*)89pCSj&cI3mdc0$^EFBpLA=;NFpq z5xjsMlPJJ^2zp;^m1d<@RVbx+!9;KmGeszTr&>RwJMGJAgcul@o!1Y}E{GSr2Zmp@ zy*ln1_*NWnlu@7?Ch{+9gj1vlTPa*Yo^D$i(7i1!XAJ$7lSfEtt6%yJoJgEc@80+Q ze7q8Lru)PN6REm={$R2ExVK-HZ^A@POWVIOX=(jc7$E{CrVZsO?|sFoH^VA^s)1Z> z|5d#YX2MfjPngbq!A5GMAoq7ce4=leZ0P!{&FR~g0$D6y<|%G`8^NqGJ4%zIOG~J~ zxt3_>6n1{Co3fBkQ&)T6`}ZzSmbHW?Zl{6kbCnwiCs;wKTNh;~uZj=3TA&sh4Jg1_ zvD*Ir_Nxq*2@x@x%v`GFqz~y58|D$rhYv>%B8UYqx0J{Mmg2}rLL zC(I&k6slQ1%jr{9EMIT9UHbSk+U?v8?rWS6D~}Z--#dtpDHRl*&>*JT-S5DcW`U#R z0D;=48Op|=DtNKSzmOSglmS6^E>6VVXKN8U!uU#iLP~*n_h03T61_6c){SDo2*t7l zIxG|^?+>0}41et8D+Z=VM%-K~ON`9aQ`G}74Eh6L2~oHs~{6de^C)sr~Q z#zP~YEVs9WmO0H+2Xc1f-BXEI4zZ!>gz^PxUl@F`KjS}JEG5?IKIm*dTs_PEsL}|E zvQyBiyFlyfz8`SI9IwM{Gn~zUjM?_ncLFyZ%Gq3o+E>~?P_RN`+~m?wCLc&AgLCUG zICegu>hE4Jt*Zy0cV{0L;sXLA=&{aFavM@8T8x{=ESN8B1gA`5&`rb6PwWL{Vme$@ zXlt*BPJq2eV#MyF8FpR1Os(ahL&B9_sfnuOS@N^JZ)H{k2|Y8X)@tZv30lZR@!PF( z`H9l3sK>pU%1cuTnQguETW8&o)Q7yQZij*A6>{qwm#85nD#zFP_JtOcdLO7a6%B>+ z7a~Pa)Oj9b9|H8I0-hRxkfxc1B5Qca=Qzf_u%ty$Jqz-Fn7~E4#@c=e%&GZ z$*NWZY6!jZN4T0grHRP%{f7L`8UfIhB`QO75)o9(D_}Vpl1Y-WFK1WltZrelQEa%X zzV9f3MZ$jc4t$)$J5ZVT-I|ANf10W-=8cO>6J;C@B_|_Pe|Le5oA2C{33u0 z@kDY8X^?3+l>ded&KXrCR_XF%(S_{ez!Q+@OT`zEeb<&!OSbXntBfUgkTu+2qDsB6 zm@IMAszR!>rg*orNRb2eVpISjV}C9;Kwk0W%GdjT($@{U9K#1rl)Pmx#b}HyK(2K4 z1v05O_!!W!dV|m-TCt~^Pad`M*sbV#xsu8uF#${4IxD>N*BxQOD|7Ms-(*$Z8Swfv9V)`}kk~&4 zRC%B(H*tx$3+lPx!uIz^)A_>D9BVDNa2njN-K|15rJu%FMm!^hFi~YfFv-M=GdtjD z~G@7rFi9)u9fSF;Jr-9K!zBt-vb7JhVq__p~7n?<1+NAl59)zS{P_0Kvy=g zru2>y5qC62b0Gs9(>z96XQ8w1{WOBv0pw6Lg z`$=vZ^8x#|&Y8f=vYJ3WY*#E!buKER%_5aMih4^}aVKX`em6xP=2_pkf;;tDGAR_E zjzpidh~nzpAN|_sG_lXht_t-U>p)}H=%3+5r?`|@&ZBq;A@V6ujc(GGB{rK$5`iGxQGxWg1O>~2@;BJ7Hq9vt)|Q% zVADTHA*5g7kDI7K=P)H=M|`sx^k^TTVCx7Z_EbQt-vMgpZ*2Hpq3L#XK}AHaM0xeb z2`m>0-+cfy+dT=n;46}{PxB7&%<7cbTRq?p8zYVC9E#jH;mlNo^5VQpS0ErZ3?I3?MOv85N8d#G(6YHA!UjM`JHJ5FeKlF?xMxDJRB5Xf(|6a#At$z* z7N6Z_?@iSTz1A%c1Gr;v)apDMS?eV@u@kUoWqDPuL%V!o`$^b*9#b>@s<3MmDE#S_?R(U3 zEmdXcg*hl^s>)T)+b#o}%I=9a+uL}?;y0jloi`LUUam%r6a`1Uhp*BTa;s7VZ83Sd@T?d)9&-^4SGH7Tk}mN2aKwb(1LzkCh2I#jTe3x~ z1i@{=r@HM{#nFM*1NN++IxASm+tRe{H$K@w2v<&4KL^|%_=&CPiO<$Y=l1a0m3_X# zX*58Dh}aNJEGdJlRmK42{4JZ~Aq@G9hMR=>%oRSY4P|%f&-n(4!P81C&K}WgDyrf^p#`E2I4yO)Y@M*Il2vS zhB;L0T##CUtGm|8M%68LNB}C(x^CzX7#!DmvZX&~X{G|BdsyP$A1Uny)Wfwd=VeH^=ck6Fu}uQ~gykeede^|i0$0i){!c;A5!&?7=pi%yq)PL`H&lT#JszntT&d>*^6;4Ep@fm zP;J6EZC6~mPic_w%Av)R{hS|d=gB9H(0kz5iRFp+_$2us%JguI{*!N% z`*6^RmQ8?c6&U-#Mov`0n;mv9j8&bEHE07WMAA zQTpw32}70lwcR_n6T^E6_VW}nl&=u4TahZm))y0^o4y7goF0Th*~*C#F={_Xe60XK_%fdc_P!cN=v1`@c2 zP9V&UeMnTwYuIuG5yFb$XF|%k3*_|@yu*Bu6ym)|L=%pr{t{!vBNl?jL1K|%QDKt- zL-Lil9#7Gwqtmm=q#@uk&H^3;0d?jck=H5&C1WsE7np32X$31Uyl{iBwIVagHWKq9 z*@Ik)E()+pM}>|QbCwySCIx&R2k7w)VMpJ?X`_66`EoE1B-Iyb9?E`*>Ke9HyaW6< zp4LKXH>Ky0MFrBcIzHbjwzSu+^D-JTRnF#zjst~&@=`~HBPVk@uZ_>h@`Z*@)|HHh z`+FJDTST@(_Jv0iG8jYS^@-m?qybDPnEFlEe7s6E2i`<#Ey>RrB}P+L5Zh>x#n8-1 zA;q{RcSMjI3=(a+#yLjNaM{*4|dcmT4XK zdF+Wc>h;8EncMac;p=E4JKin>LLL66uK->#r`levajo};gB9Nj-StA!x*+=5O zFiD<$yuA5QGz@=s#WljVT%W#n_ts*y(7#1E$J&)hg!^rC?<`U10XXasqCZrK;iBM< zjIB(IZUbxue}&bZZ)sVQU>4#|MIICLeBUMzd!J#Z!|iZLHESFOUrI%2&7!by5dfV2Tg>g0S;(ETOAq`S0opVR9pv+EDE#STEB)}c<$#|3>*o>l zS7rG|!_eyfWOvOU$ewHj${9*T$I?%(2YA>ard_-vtaCWYVgW;q?6a43G=Tw+#$-^M z1L#n9MMX00Nkk%57hjU`o;TLr#G{Rw^~Hn#qHZv7kdh_TwUi(6uK-4P!OtmJ{L~}Fq13|oSWC{y zGA}<`4Cae`%KW`Gd_2ejN@bbJ?t$nPavB+3Ueps0U-*1?F{^{Lu&wn}?SZNVmi9iI z6B3#E`bkEIiNlf2c6GAfGTQ+m2z`{`gO^qlzYXu2VC^o{gyE4lV#ia z1DZIY`rEZ?)%}Y?5!=UhU_7ko_v~BY5vOM0hFr)F(Y6gnVz~Q4fJsZ~=P9a7`?NSy zol!xWMy0S9C9Tiha1MKsu83VFD>jr5%u@Em+^g!R%|)Unt5GZqguDu!_tQfc=DFfT zz*M)GcnPX){nB6L_m+n~5JR^yX*TK?(g(*kol2dpA85S@cXK=lRd%Kg`fTmU@oLtj zc-I*nCNw&caaCxQ8SLU5sxIBi%j)9jf6x&eblzN$E90mwaW59(2%^FlLZ#0InyIw5 z1de(&+9N*&kKgy#vN&S{A2X!~zyop2fF5xoZ>o5FsuWpDLHA`RwG2z0-giUU!KI$liz9P78W#l`SK-tTcm7-7ObgGK!ZDNvWyyl~SgsZbuSGM6Yu4eYE z4o)$prR`N$*OQ_>WNP_xiNy-~w7dXFY7egZ(#Rt&((MBslhut7z^ZUlpoavlm^td zv4#v-xV9yE8Z+sQ?*2sz-&xvF<5(+ z=mUCx2))*|7rgq62IwLgs&$AFXDkDEd8HH1eaCPzI6;WIYdp^;yt~siKJwUK(_lzt zDa}t9jqmxXdF1(e(?}NuI94vNTDTJxB4zvc zX&p8|F4I|f1#C8=Eu*W?V-X+{xRI%^=lfOz>B~X>`qB5BqMNafAa~-?k?o8o`@PHI z#cI=fPY>wk7?3hY7q+brI|`>it5iydJZ&hW0A&~jC^G(}Tjl;YV8w&bxk=W`k{;TW z39A$nV@K$}F)Srlo(bcy{9cFzL-ph*&uLys%qbZ%IEjW1+!J{ zcHCUBWMxANr~5NB4&5TD?=l=#KA?h{cm>ubC+a%(Mn<{XM>qXMBSf9C;2Jo(wussy zzH{xeIM!{Cj1CmGN@MSWatsZ?3Z*+xJ7Zq|=hD6t-#Ap+#0C07Q*$bLzj#sy8^5Pi-(WG)qac!uXkY%az`49(nlKB@z)BYMpmko%xjl`AFarxE80jI! zA1o)cqFfaEk2W)OOs-%#AnL7-dT9w(*HHA6ux24UW=-@(h+F8#mdWzIDgjg9^ za|a4HV=QxJnYY2u5|?m9PST0F3oX@o}9_k7Wq>Y2Uu#+LLV9JE4O=M-TJyn4p2--w7 z@=Gukt{G_Ebb-7Rw36`N8E$%|=hu$08I4Tu6sHC9FjA5c;wzaNTLHJ} zh7`gDSprE&fI=iXn6emdm;)aH39q2n96~R*m&JBb$$XG(3;VG{f@O{O>fIc&gizJ= zv#h|)2z5GEf!uA7qHlYv+nxGAC)`(LK7s$ta_MLiq1j zM-d{B$#CEX2PM4$qj6rp(s=8hs^hhA1vFt2{BlLX z*+tfFXSmhtBqHssbi4d@>UPVwKJN(o(`IM#hN_?j`$$jBDTk2_+5~6{vsytpI@I%X zK`Z&=>!iF_C^aG-jY!$){)Qmg{+XI8tn%;@MW#?IpR*wL@jM?gxwqCsD+jST9NGg% z^Db8V{kBJv*7Ec1R^FD~4)w598^j+jGm`28*M=@K;8fnqkScZ;tN0iAN=X-;$0;z$ z=Z7VlLD+IDfwcha;jw;%;O+t!#^wqXY*zmk>a!gaNS~t}3@b4^`kJLoQ@%(*jMo;S z6eX=kV%F1V+r6^8N!q77of#>Qco19ckl{c{z199zkiu&{ti`cljg<5A3&p!Ekcdn?twgcgGGU(&_s>iXiF+19j>67N*7xf95ie88uTPP;S7$A z!-7yJc*q#y^Q;ntBZMg|cYY~jM z@U*N1K=;!XW)l#pv308y^Q2AZWkPRQ9U7`YS;!ez-`@qz7RP*_8V{B7{tH9=}ss~WQo$Zj2S{*~j>h^5+iurj; zyUkC`Lz{0K{x84hpygi0_=;5p8&Vt_ii$mCD4`_#S=^G#`e;Qguh~!~w7!AG%PR>! zsNZ^@takY;5^ry9LiCBk7W%u4<|!E6Qs&hsI>G8`GJf6KDz<@w8Dk<(#DVem-)72% z`sld5S4cF8duvl2UDGK>3&P0@-qkDn32U4*yRR~wmN-6{d3Qt8Sn3YZ#dq0XNL?uD zQx%6^;F2x)rEoFi^o$XWVnRIEpFnv@=X@H%Y$$U0Z6}k(Zg)&p4{_PA=fHyR6K%Y$(f0(XxlK8e0Q=PsX$u-ezG-4RT4K z-uA)ZP>#*qD+|b^b^kKKN`t(?&-X1NYE^8hca66svkffqHLjZ^XxyiFrjy#}yo_|& zs#rS{)vsTNmMe}ZkBnDodC#8i)RH&4B*J)&4tK7DH-kC?=H7K3ZIHW$araG$-Px;* zm<8&Ai4c!O44W|QG=;3-MuSXzG9yt2nsq!u^+7+yO_pF`W9BoD$RES1U+A3>5?`ca z*X=d9d0|(ixzgPOmb4x5Xv!P?_j5b;)P9J!m?@OEt)51UmXOwCJ?L;IU!DMO>j6Zj znZ~IW28K^WB5yJ4;JS3sqW&2>Dw0Kqhr)M&vboXEdtREx>nz#+=zHYO(R?CIY3pbq z2=Z7Vx*QTQDTMKSQRD|M+mRc1i>JDVH43*(lbd7G%$(WGg~6^;*;=zLa&;OC$K}}8 zu>CO@IGDnWj90f10Y6hAn4;#)sVra$)6#n-;G@fHeIoVtUH!pD(aGi%ilvq)AKzti z@dt6+|19eHOWeMQcpzN|CzBgCUV(kf#4E5-MPXsCwD4w~cQkEBeZnKn#;jNr3%1@d zK69njxk29GcA~Mo#&(B=RNMD&ucs++~%YM7pyZgv7AZ&&`YK;z0|tr>67D=ORwS^>|i@#cC9&lD%U;AG;S~J0NZDT7=hKh->k|k=IQzxqb8XJxyc_O}Nycw()Hg4Ei+1g5ap% zC)#f{n^dx9qZ2T(eqg`mVaebO=a|RI_{c=J!O(_cfC4#+`Bi^U0>(0d+cFf6PA~&(#@)1Q1P4+MVJP_Iag> zc=Dw_B}myaF(&p479WIH*k!}KuE zwaH4wij|Y6>Q%U7`TJ?VS+|IDf@>|P-p~E!SLkjFlE}4;{E8e>O5sqM@$UCVUn9i{ z1P(CYE#aJ<0ylW9oapA)lnQ++B{EtkZ`G%;YdTP3zKqbtb?gTTscP>}bHT0qv%$g00W*@fhFUPUh+wdfsOe1}_pDBU4SM0z=%BaC&U|G9U6 zh3qa8rTd$D-ksO+^p_6fzNtiCA(ph$7v*lgX(i4;Pm;RxQ?Mf8=ua$NiZ6MCq1@=3 zZu#HZUpJ6+Vf`a@79P8(3DNolGniL3@#ig*F{aHmNxQ%z{Ji&fv>`Jg;P>_PG7Bu? zXEQNYbk6qR1cI@sGQmkBXvkL5cy?r9ix-!@djza5H)Z4O&GW+|7)|_s z<{65M>jmA4hBZCmO(85U(A$jacym<0Z0o**9Dzm7%Qj}OMPkM$g&&I4NF)a<_$WPg z%Q#4y;+?i>S1WMRNOz-W6gI}qADp(F7GQ|gDU@~;Q1<|MV{^fWx=?7*pIUnanVc@_ zNoJdg$ig5rOGOxmsKNDj-|dkZ3N7E$T0X^kBi6h{uy9E8YyN28$sA(9lGa!_yS1l~J9jv!WJ!ju~F{06ow-wJ~%Db`g)$wtJ=mmP+CA4q`3~oU|+bd@jpvx0$#b?2f<( zdIi7NQ@!>{?gg*0$!!PwYH_s9TcWX)ca`K>Fh3^Q>8{2}m$Q9AwEg6)c?SDQDH)Ms`? zj05~su+AGaAv}N1fJMdUUa+bcsbcHdCa7PsGw8>S+oJbY3*!(0I_-QqJ#$3jhdIS0 zpGE_{_qu$BHs#ErEnhO`c3yi4U>x8oxCa{f3>91pnPuSWA^W>e#~t$zS#49HwY`;# zRq1#4CT9UJozcD9_IlK6c7~-tx<3x+9kU_(wrtX(bMtr7_ygu@DNng2P#U-4(@D8? z66!dZ&3r@FF(>AvV5k?m)r~fRe9fx1iTyE`2Qk|!JZG*qx=?M-jXG!k%&unQj!**^ zdPtDc_v%`p?1bg{_Fd`T;)$b>mPDU$)EXa$A*x|S;?v~z^rv@_-{ zkQ}#Xx2Hvx)~9`f;hp5`i#e&9JDb4v%GTaR4X)AyW_X~R3=+XK<+ONJWyhhY`ro@1 zMWLh85R`Khb$&19JIEuFWC)VH{k};J=}~Ia4pLhpEMSoXyo;oomb)p3N!*Bp>D{9? zd5x={b!$lj$M0d!Gh&MowOR9iWg(X^v0UiG3Q~;A#{rZwGhPsr4dlG0uyNMWXu;)d z`lK-nF4KCkV>10wzg&b@pgDH5pyKewi>weH*`@~M`jDs`JYg?+t4WhNx@Tr$RfXQ$ zq-Z{ocd>;A1iXXt6w&%JHY z3VP=qd5uC{i6fj=TyKb!_L*c-GNVp6$Ta-IT%oW$t2Nr4jC1$kCtJaV?|LHGnf$~e1jn&&v)eH zz%ESWaiidb61J6#3RZ$5H)sMrr+H(-e`TrWP!|Mln;ZnT9utT48Oh;oe(@ z`LgNM7Ux&YLLs5z(=HaIOM4s+EW4oB+Es;tH^BE(;r*lj#B|C#v`6?07h*e^IpA#I zfji{#txVqcQKQ)w3o@Hoja}LtK?87nXSA~&%dvpV)=a$i>yVrwVTd>xaq}^RVtN-8 zZ+BTb{i;J2M9u0$bkr_4b-o7R+qhY2yo*-D_#k@Gc)Hzo)f!yVmEZlTjbZPGF z0~K8e0e{OAY%}l>p?u^3l^o8q;VThjh-;kk`!&WE9EIy1*}e7&*(ex1(aa7nTDUA> zW~`UPl}sSd8GN>#kgOZwi<-W+}XpbU(*tg0wEi;0`}&PH5Ef)A=uA1PN_P5QPIoZ&J(hqvh@lI@6j$)Yaz^N#9(itMKw8 z$=-(AT0O~xz$;LgV6P}l6uB7=78{CYje0e!lade(8yr`r`Wka1pd zde&+t_wJ4YdzWfD+4q!^{%`;NqX^|^LpH+G{NTnhI-(k#Z782|xWtw6Gz?bF2mntxb(`Vw$`8raNflHS?z!)IEHmz^O zIKNhc(<;jomNcj%vJJD43_C6ZhQvPgHBS<`nz(hmUN%&0{0P_7xSn(5P#-o}TzG>7 z4eG{Us6iIwG=)n9_Ejtj<5j{RIp5dCj%$UgQcdPo=0RJIFAeEf+&z$N_;&f1Lv3e5 zAK!Vx<=3(6G1S)6S6aI^4Jc+I7e;1bme^bk&dz$!o@|lC1ZTX?TZJV|I3A_eS=PSf z;Hr)RUYZh54=@669b|o1F@050>s6IUE-0)^f0In#BTV`LranTjeg-dtn$63w-#Jsb#)LT7W z^)12zmnC98VR?b_$)vXA%z}RMF+vdIKGKt39u&O8gx68@-R|Sgt~d$euP9h2cTAv&A3to+>j2(|zvA zM%4u=Q@1!NzM5|;<@jI+;PRNb!w>$v?|F5+!9H+!u46zG+hsczY;HT|(&!JZ&QC7T z;lFrhM$fCivO-WNb^dYX=}A=rS6kypLT}Uab_qQd!?exJ_w)UvVY0o;`v(L7c* zlX#4~`o1A^Z9eAbWee@?W`S*md3T-+wU;)1t`qHg;~a?_5!o zs?PwUI<33j23Q|etkFRZSMw5$dSodkZRND2cMeBZ2RsQRl8mJ4wr|4j?Vfn@A~#gz zzccU=501vy%I1E))1#c6k*u7lFN6Ohn@YM3U!*EIpsZ;dHzU=v4avQK6S&Q74|jH8 z>Na!Gq%VW~urD-5mBiTp4nA3WONrm9F9CoEH+y-e z+iEcqkn&2=Prq|S4Y!I_b{Nm8W_-cl_$sZIHmFZamnGX1C*Qe_CqTO{;si&$ixI?V zqYS3vV^VQ-5K5GIo%`{XJ%z&A>`?lPjbX&T3v$Wgh^$ZYDavK>D0TyC@;=`+d3uer zWBL%di}l~WvK)O${joPuWnVNSE1gJ`K8m!^Qy#BKhDZO|*G~bhUVO^CCEOe(@X?}` zCSF;O6G#UObxm1~lc{rxEXH`kFyF_@$WUz>R~yXt5+q0|Q%CoefOT!mhHl=bQ8sP% z`|ghmrk9)LE-mTzg9kw-v0iW?SzDhR62`egwGl})=;b`nrIbF%d${6nmCT=Q3HaX4?KG=6pJMxRuHZfg z&9}>R&iX8unv14&a<3{c%8&( z#d}$WuG+CAzP#VGqe6}%U$uK8(bN~BO~Z+{4S17PP-4}b9JG}YXaOZlAE#XuYaEX$_9YZ!72Qj}-QE$juqIU_~9 z9)!UK$v}Y>OGOA|s|mTXxUM0a@?YM@KfUjZAJ{x!lgKmbXE|&s!;B9iqutxMCn-^y ziRwOuRwU$XK^&Hm9UIy_r?7i3e;{aTX1@42NWZ6Llk=h2;okH6 zd}%Y^4_X{G9)ho%wk)sOQvs^irtC@e-VQ#P<(`{*S8G;{nxKT)b6-DlSsNdPldi#k zGD-Z4j7%gShk?1E4S-cmFY0P@uiZ>=rQDBc>7Z|cQFIgF_=<3(dtECdfZwU8&Oh1h z%)N79p(!>A2n=Xw>hU}x<+b0H*in@iW`4kf51#$x`FrsGuS6dldFtC_xsBn`%IW0B zuiY@2T5EF*t(?u#T~)oAIDOH#T+VD!^*?(Dhk{6}^d}q48zRu;*>kHrmo|tL=17;! ziMgP!dYv7v=^%_HSUA&u(4N@MDbA-vo9qEBG$?;eL;Rbz#eN^>FGs4aF+_i8nn0<_ z&Uc;7qT7!gcVwXkD16Sa{BPj%H#-9CA?q0R0tL#B%K2ejFJV--dylv^kt}B&)Fx)- zN`YmMcgA=I<=<-1pBN(mTK-x&%NK_Khy*tKDDo1Z*}E<9XKkz1r+ zzN%)=mx8Np@TQG*@2&jM3D=;p!+~JX^ZzMOaPag9^e2p)BJ7e0_#>g74&&J-X{sf} zfQq#(pVO1>mTT4jd>cV&9n?KqLx*Gogc&RX!_@a2E|A4NY9#bAVL zb;esxZZ! zU{LJeJL%ugB@u8BV*QS58phQArx=>O{;OnFJlv5Bl%^Tr)WoYiFk$Q^(H~Q_s%BalS$Ju}G8(|9=yMgcMLUiiC$khJo z_8&t-5rM@yBLdpL8SnU+a_-Fb;*<1LfABC?vDy3Gv*78b33v=av=KX4?<8|^6Fg{FY0)>5T@-IBoh zzfypaP(G86c=Ep{2=?BR0mdVQy-OCnU!L4MnzN{H7z$+aM}cCo35tNcJ@-+eu<&T* z!lX^*AKMhgedDB8p7%1429iUgpdh#U4_0SB743 z0>!aeZEsf6X8EB4Sp2}dxoe4UfAqu>6V~YK!pdQl|1Eg_CA4sz*a z)MS0zB`xQ9riXKw z?GGMEfTNObTI}^!TTTQ_e-wBeC@s$Sukguo$rh z$1xx9$BO1*+Q&p0FLDo}6KW{EzO$>h!th%St{h;xaaj!({u|)8Q!<^~0XkL){o-gu zT*^fK{EQg|pJX(UAY<+dLy<*NVS)co>XPY;nt%(C4s3;dSfh676`8tE#_V+qq2P zrauy+%@vl#vY4KS1?1ary6LEoWZY=g&hQ%ZnMmVn(L1MLX3ZrM1{K1t$}>(KvENp; zf1U7f#_MZJW`X51vFI5XI?Nxb@mqo^1Hxo|@&*b#z9DF$9tr;`Y(;P|=_Bw9F8gij z{_g|K_&sb3n@3)&A0>8XnfhH7ZiiP}N}YRN>~D~6@NB=(EtPj8yLTd-HFyS&8;Xup zN*25x1a6_um8pip}*;`2$Y@gjXP&jcdE5bO#&q!%Bs?jUXt zOs2PWs}7}K-(10>X!X&R2I$nnx7q?&AUy=YG3aD3Li26UfyJK`sV}O12i$rH`Ekxo zR9mI=@ubgBU^GHa*?x1-HkYzH`fyCw!PXdJsS|ytmdZw|)j4XpqGZmi-fziw&>oy- zyAdDIHjKXTwC^|;6~E`4In~jd?Fb?)V(^=VABrhc;Mb_hC=g86S&a_kcOU!k_PItEiPKP5S{D?ts?V&j-j8onY?mG=YA4N6 zi#1x{TI3Uzo^Kye6wFYp$9-+RAGoj2THA0bw=xRN;BZPdnXyS?Ib*xFgU9gL1~jMY ztqOZXE|X}R6JzfilY=g$lkP-t0e6Wl+N0R6(roHSaR(Ja*XAR>Q6+g%0EhR!2NRL* zIHD|99{^Nshgv|EbWM=(x$n^=^&^~9Kvf6JUea~qApY(-1xtQ=O{%BXxP4twgu0EO zt=uZ8O9;OchMe!p83>$P2;IWyjei&g((Ps#aOru$Vo@K3p2ZnB#Pq*jEB$4=-ALzTV~CakoPF;zGi`}#CR~2p%tYZi-@a3g2C?X8o*u~gWMz8L&{KLo#dUi#b*(tcc3+d+ zATTqu`q+02Y}9;OOnS=&%X0ohjLi~Y{=lm+qM-j6#<(F&DyXLUF%4)_knwhDGj43y ze9W}ILXg@zsu!fIT$-(|fUJ2yC+JpkxiQY!{dX9rVU33E>3TrPT(Pxk1n@#8SNDOwgHpsbte1p7YAe zO2~O`1!%>k6l&Wc*!{z2DT#yixg;;L`M(T1?jKUxSBg6rhzf01DkC~=T&$~`Z;-qD zl~S*dJ5!DuF3)UCVO^3kAXtU@3_e?i(8bm-DqIZNY`q)~;H zq}clO^n=^&N|=FNtxu*$P+{@q=NGs5QGa?;S+XcFLTlWgMTq~~nr1!z)0$2*jm&2r zmRCT;s`X>`Q^1)q3rwtW9ECK>ZO!#EM2n9S%fm-J$=@~N_TAR&R%5^fiUiE*b#!q zE75#k@j`vdC0mp2ja#U2csZnxO}NOQAUT>{K_RoQC!JTUs6!t_rzwFuu|hUcaKgd1tW zY`vATSSccSs^KpFGf(}x@SR@xIWBc@$oWm`1;vXgUPzux8Mj!)`$zwF8~^1O`#brI zEQjJv+SJLLYq8iCPDZ!BtE2VA+0lefR(mb2uh!IXKpNBHS2>E+$xaR;*tj(}ky{r^ zat4cIFB8pKHPehbOCd0+SS(_lzIW5W(GxOG_LlrJ{c;?a-P$B{pzbQ zy{Fd|ht%~F1lioj6G$&}@))Nsa$!0AU6Zxb)Y`~r6JgCh|9)58-14{k_wO1EeIfbP zbz6-@N@QG6)fKm|XWKS}R_7n97q=vb3oUH6%!npyhqhg|E}597(GCXV zqUx}_uGz0uz5UcX!zEz$b#z{f3bFD}kFtOhSC|TZ@Qq=_!)1#lwuL=#%^~ICbLvue z1}11w8TscHC-Hj>d^JffSQKW2qshDMOKmKDG6KjSRSXXD%&#IOFTeA#p11J^%WVaL zj>{ImRhUbV>5RV{Y-D*dd{Cbg(57~HGQ@s5RD`I=f8!x^$oUxguT_wFP~Nz2@PD6K z|1V3u{SeL{j;|8)i0(%yEC42JQ|L^)PwuhHf{dC5Qi}S*PAiZIa$RkAC*pLs9a&6X zv}^wYoIYDVMYeOqJr>6p8wBtMSQ*1F+^w8*bqXnYQwWcyRO~&?C0cebV-rJ>tO8}k zT6-|Y_;4LD~clPYFyuQf5fmNz3{un!s!wnP?=8a;>nKC z72s3bg6FJKbY(lkrwy#|!Up-)oZFgv!r=#|X;Tco%-;Fo=^7w~&DUG*f%~P-Nf^Dy zQ<7kn$2V8WNX|CFp5qTnPs{$`>O(`~yRIi?Pbd1Dr+mx!W!-?SAoaYeTbN&Hi9;fK zNv|+QtLpfI4T*7{&C2JXW^3{4R%S=2=UqmB>n>QG6UL$hF@v4awo_(8%qpk`cbe~YciApOI1c_&7!gu{|TA$*g$&*}RavKJ+{BNu<+bAknUGSKmPNCEfPr$*9nwzAtFZm)5QKu^Zp@c zN@f*5;xl`~DmJLn~ANB8% z{~pPo5B3V!54-j*?dkWgsDF8}{yVV0^FG@nsYCy(|NpnurQKh{yxWZu8UJlM?S~$S zLxlx3C=~W`s#{+?^*@YDNdT-#`KtTaXx|sixg2+Fs{vI$ba`WtrqcZCs2KFR;^T>rG(|aDSEx}jN+c|F7@p#A%kO?-G<#Q@qex% zjOf(Q@PKgFcTFEJ8@9pZiGk+Ke>ET?PYDxQx>MX)l>b;vE|i-ONPy~sMnungvn$x* z_hL(=|6cMQAN=B+vS*Zh`K53H+X3 z3AOiwMJ0TAhXUdl7tf5OiKi`5{BvjOj&oVmu%AgYa_6ZSy~VKLPOoC078!5l7Zls@l!Rh57Fjv(hoUim!_P;poEp%kSKK(7ztYt`b##*eM1DYNVA3 zEBt{1ov_HuVR?|I!~4B-RIhgvP0-BmsC0;dRDS4>-$Y0}LJ*53F0Ow3&X* zw$p$TzD>Vm>qmqq_>9zQB7t#F-iXNNh6E6E`ouA-yrdMxHG10h;UzjeM~wIlxW2F! zDs+whY#0$d7`E~HC(H8i))|rp!f^tp9h6GPVl3Uq5z3o z0}t(zk6s)-#xq2C>xcUCVI-eB>fbIQa1;qPidup^_T(65gD)%dma~jP4EqNC_pu_x zR&JGD=^<;H-|WPvP(N95#9C=raSs|-YE6elY6QI1YiK7snD)BoWH)S@08<=kM;o?;Q^(FVO4DV+npDr_pTGq zWEDdGoB+6o*~og2Tl8W!D48g4H7kF6qgqd`j!fo+tC*ZHp9y)ip=vNW`MXc(n;i-& zijrEJru4OXJxw!SN3pXYI5a5D5OY`CyQ;-I3bhe-*H8lk+jp$Uzvp;Z36&v05cMdQ zjGx$P8Vx4{>H3qWq+nty5`CPGz@qdVTQO{1ZU z#Sq;m+MM}0ylt!@T4}{q$ozIEM>YLum1A~wT5ABCl$Q4H+dmtI6~%5LA$#Lnr&gU( ziPj0Wv^ikD*UmH>$t6aqY~7;e*4-nSnP6Z=zEwu~KDAp&U{b21SL@PNSd+XbUuZ$> zY7u%ZOdzprR{Z(e)?cmY<>?OLN3s@0hQ8h7QW?@OzTN;+rW5Y>qcwY$-hk+?v|xT2 z0iU1p^pk@rp+B9dK`&{5hn&sVpT~~-Ug$+0uPjy&zh8axdpkT#5k|Tn-m?KyV{u^K zcKz1J{YbPJZ(TvtIaa<5e^fM%`hLJ+hWfh@$#~V6(x5O(=4(ccj(&aHZ!`61Bv%A0 z#{fF}K@=#0KlS%g65D__>Up#g{o1dfS)e%1?i5)ISt(FSdq0Em_}Rn$`@JSQ2+sk* zMk=5Kdsy8Dg=Fqt6UXOdo{)u$cT-7WR)A#wnVI4*MZ&QZ33 zy&obCyjtPt<DrY`KTIewdHh_#_%JYEQ`Jl-ZAVQuF_~q^zAimjbRG((I zn=;Fjx3T5?D?+&d+Rc^|6m(1}^Q}np1%EzCzK_{)1?->ebP4Jf_()1vmkhxU38QDI z(IG1R+HZH=y!1kF>GhhH6fWfNH5&o>bf8c5-+||BlrH@OyGpk3$WjV&Qo65NG}jco zC#^qN$oGD%{_zxd@0xtT2SBdUPzs{ec9t9+6UWi|ii+n9qeMpe>CwF#0Hkxc@in#H zk(zqlc!<7$g;^IB!6AIUsX(=f*hWIy84_0DhASy7bFjF3dwMtVIn<1Gf3w>5+-`jv zkAY`TV&-n}&1Id^;8ze#n$1``rd+oOs9Em5G-O=Ph`ls^=DuUES;OwjGq4J@M^N89S-0bxIPCwffUZQP6 z2GW$eFtNNsw;_U+Qnhc;#sLIBFmDrb&ue^IOwNj2TKof!U&iRK&EWr7qGMhN?ckEK zKyZ`le5T=!aY#F84WncosB=9@JU!I?Dy_eZxj$!iN)h@g%v`lsLN&ENQ%G|B>JkVC=&n8*fJ7#wh)0PlIH*XFRnUPJm`#!{jIAD2^X1v=x<2 zBe7tM0^K|j>I-KU>h!?f=y6LC3U13H!hRa$aLo8 zHz^qfy{OwCKeC#9pRNd1ll@FdGxRxZzqv}*MaBchG;_xVvM8rVMvTqk#QfGA)Pxzz z!b{;eD98a0omi`wvqg=hBR3X2`M!|yDgWTWsp+bL26x5`G463{kAw)}?wsND=ZcH= zah4b>OB!*~UPbbtANKf0jde)2c&doNPwau|X)b5KsbtkTes^qha# zdzgU+OhQXB-T*Q@>F2Z_FRQUZ=oqV)P3O?T%l-E9gEQ8Liqnp_x}|1Y+B0Dj9i5=j zm-l+fbM8&(oz=HTYV$}x^?>rc)_cP-{F1OJz15*`{#X~y06TB6)s^-4ppsr!R1AEk z7x^d(xUcL~B`wak9D}j7rWJGjnaDMNIMh!4l4q{bF<8M^w*9pu(Pj_|6Ois|ey+nzpZdyQ1Ri2o?#X|#XiOkaKY`|Av%DIW{s zn)c*WK0R-Z76 zk!Ot7!=6eTyzfuzj1?j|B)vP}@h-VC1naVqIS+XQ^t24UL}`d|6RpbJlgSYy4Tsaf zjGEdT1Cs-H3FBXOicX0FHDRp7YGe{atn0JG(^1Ji?jIi4v@d4%wW=xw(n7WDtTnDg za&Vj!cWrx|_6w zdA>9gdW&Q078m7_ia=E*E?_D|?$0}>!8kVJVVO&C0O}YRc-01_6_oUr!O^H1><(z7 zn`h1u)YGgc%((^IIXXahdFMUlq{{|uKCQVaczh+ec=_9TgBfT)GXHi=^u9~70f*Bq zc1~Nbw&Qzbl~t0(qn8_kj;S1(w_hs9*qsLTCG+n65dlYJbS-Tf4P;Z#hqbc9`e-CT zg}gaIuM2@{&+(~ zYI-_UD9!0lT8BmTwWQo(*Bd-l_FXQSo3k&`wEkOn?k2l}Nr7uZ`;i{gRiH6Lc#T7m zuzTtrH?97GfHvl|&2okD3zBuq8xKtLv{)qYzVRE8-4$GT$*eArdTgr0wZ~3`ME9p$ zyg1Vc4vY$hxpq{Ufp_Qg1y#2EHZSjj9JZ{9KRY}w9y92|WH0K5taSK=s2zsS?pxHn!Pl^NsF(5JJ!xOTL(t6-}m`;wgc;J;60pZz36erov|yu~}Ua(e;`trA-vSv7ZFa0vmnP+Xnueq1UEM=>Xtsi+CS zv1g>Hy-WG@YGv+ibp=+}0v1MR2UywM@e;wY!8>G1_)bbTovXa-k-~eKQKPk|+27l4 zwxoxX=cAGNK&u0aqt*LP$u~BZ_D>yJt-t34kR6TyGX>dHzzQJ0{$n9fb-&tF^E{*>hYFLUD|Z+w3A%^er?V zxxsj^1U*^OtQJsZukD*`XsbHe(V)j}DuKWkyyzDf@1c2Znz9zup|{2>v%g?!vA>Xz zGm5g^Eq#^i1ThRV@EbfRh)1f^7s@(0EMx~J+iu%EM~I(*!~|1_&6lsyU9F&cr2)xP z&zm%R&{IO_5AvPvSPRdoT*k<8-N?4)eXC|tpr>4KQ`#hPeYW``$-{taOf7N8;MnSC zBs8GMrrd68cV2u=!c$1+rpiyD_6YkC)`5o2(T=XBh6EnW!_oj9q{H~ke4`|G3J>g+ zPZ1q4nbM4^MEDe7$@ww8`St7EkbVKsyN&N)ETi#9fxbiysrBbpy>1aw)pIs@o>Ah(JppBq@hXD*LF*RcT)G!K;!} zC0`J5mTX_Wtg|h^vgGxbl#z?{pbpaM*2hABcjA!n+-|c^v-*AVku`$N;aaOh$kEtN z_ScZd8~j6tdjiM9Ip{^WIrlu>$_I(=ppT6x;#o;afOLxxLKj5LEy;G9(+m-(lp2Yz zmI>e+poc=j}CG++n8-NkEQf33$Y}$6#z$@=>M?*G_V^H67QQ z6(Pf#hy66(xEtl{&RVaKn;D(Tl;61@zGl-`4e3a3mr~u%FxFMTiz_$BW>)K zN~C(fhu(+0OTP$dR0Kwhef(3VX2@>3b)4029 z2ofN8aDuxw?(PsYSg^*S8))RQ&$)Zwea?CBzVE&M)&2F7s<~=b)f{uovGN?q#8hoG zen!N-tbB4znFpaOQvPZ#fuygT?F!Vp#u1LvIPuB={ptaTdgK~i`SWREco(|wX?qs% zt)wa*2YKk1(JXQdwqtkN!htZFhZX%d!SQNFMpZ52_+}#R^u%n}1D(1Rc6)gf+uaGJqKdR*RlIx^U8KVh-JAZq%(7U&c zDDLT17`b2otfz{dK0*g?!3QSktzWmZ(^O3pJpy#A)gCU4fH*p;2XGsD8gbGqn(r%g zxKLdS0ZgSRF^6WQfOeuos!P2z zh$!?8ZN`va!5}oWz~e-2h7Zz=qs88aRN9S5Ks)OE4GRVjAe(_b00Ev4EJxuSfuxW4 zTc0fo&9)ZJMEj{#E9L-HftO6brn;U zPeqBym64R3krf4xO*ARenBpIFKTXk%*^lin^i-Bxb35iBiz~i~P|l9=T6bupMc?{t zH`$NStlrc65O7uZYS}9a!MOw;#e(sO7oS%zj4t_A=h12Q8eob7vf9?psVLG*diO9? ziFaM{MFPFX{)BjRO^qiPjSkjfa@ng{CTfH#OXfX$A=c#4eu^{#9RQhYgg9iuQg4yC zzV>7NFMRELwDpRI4>1dm%q4bK;_S0r@l0vq!nPf3-x5PQP?2~#56LLmQ5Jm*?EwN4 zHqDBxsg}RwFeW0Kr7|(Ap-y!#@}G4X+EfQi%GO`_z{ToYm`qE?O-Gogyy@G*ye`ewasLeT5@+;FJ2^aDZ0AllqH# zF>#|GuK~(}U-=P&27d7tjqs)!zvn4}LJFiNqmUin-pMk5E)8V}x=}oY#bg@e~p_ z1EqJmB?OvRK-+^g6<6GH?KdUx8lB?X<#)T5i3+>oVKG_Xq-QYpZEB@W9mhd4q9?;l)<*TAWwM0g@~@lXks0@Nj~}O3{By@6M0X$ zra8-%)`!rzl0Sy#M4HomT3N1Tp_qCIH@NvvU`{JEh-DdR=R3U|jbKuA5&4h&^a4Zn z2OBkfSD%6Q+LuyLQ$i`%UQxURoZQa%Yk)lhbhJRX_JO*T$e82)(J^dm!w`Q)dK-4K zKsWmm>t}OpHXXrrznmMY_I{q|^~lG$BYNyG8~xT2?}8=Xf^@4`Y6Ht% zTw!ZNWjsTo^j7NI@khBE0SaG|FX5tFE35X2thiNFn2JU#Vc0}72iD&BIYgE118IcF zOJ^gy_l7YgfYH=*UaB0jijQ`h>pipo)9%Izp(n&K#~dm`os%uSA_jNm&u+{NxvP&)Nl1Rx z9irr}lk+*mOB8C5!5Ol#>RRjb2S65zI391;?KY);?`j<+Tbk(Y&etJCyr4YF)}aGA zbl|Yxw(j?=akyJ9`sAzh+tkvMI2hya9vauWT8WZg@m>x&S6re+q(ml-jdQyJ;z@ad#G~QKx>m*z!7JY5w^0 zXGu=icbLact;**Tku{=dVPW_8hTWNSDrN$DWoYGX3B~In)|ER&RLyUiE2qP5F({Xx zk%(+HKUqqUp5srM4(G?J*{@3wnL`@DGW!ONqnxp$-*ubP$0$oUJ>7_3pRwG$)+;xb z#tXAl(K7f!g&B92r!(7~H9?4V{UIDb7AM&SbOAgX^v*@h)G%9}T z{Kx_pZ4wAA3X*tdrtVBsYvER|_L*Ne#ewy`4`H4}&J0Uc#sp13xq+cIV=I96B)CUP zPT`gr{tlkN#_i(w6nTshLc*}XjIz`#Z(`$t7{e4^f4J+X$6U?|%`c{g>{5XXy-!q& zBG1^J47efwnsHuiD9(I8wt>SkVO)sFS*wv{Q`H{^#FN#SVp+Pot%fg?eth@KKd>xv zH~9i@T$LW_o&l{oEs$S6!=np7uVaiQ`>Z>jCD=P*W{|+D57j4z8KH4x(!QuWD3iTz zDxQiS9d$|hn)W@(Kw3vY)wHjCchTtXsTNt$MGv@39oz51Z@I<(KD7c!-u%(mm$~#k zy)ovL_7934(K~+STd;%UWTQdL9#4)QQG$$wN+FnOX}OH zBoRXGS48oSYK)LK@`z3G1KnX{2Wy-PE+-Dj-&mqz=XQNqpMt&C){BIxGJNmxn&o8$ zX-=`|y^)xKN|4xkk{492UuHsLg9UkXY1D;$WMphfp~{uV%h!*Mf&4C~+#|GEU`hr{ zxv0hx^P-X1o|;K%DFe~zHAzm;Vvc~JoSzZ5`76|6+hnl~CY!)E4EJ(0!(=c@Hd;Gv!!`&W z6o5pWN-|bMKif8U<(G8SXSTu@;Q7EhRoc_pps7w&%S-9d0xtyUtfDBZDp|pZtGPnO zUK{1AKz3AhxpdeOX9);Y;QN_Cvz)9Z3f_V~yag#Hia-f+W-E-10y;<$=N{_8u_U}O zYP1Yy<(Z+%4xnJwObWl= z#MpV4W_E*lfPRR52gk0u)4&EBbd|KK81jha<|B#Aig?|ERgKY%5Axq*x9VB_Gd=f1 zHV=*%pN$s*D*G&ygW&sXbpo&*Pb#gTVd{w~sj&&RtxH4Ycm@!2!*=45J?Cz2;nl@W z`m(=zo__^3-QiHe0gYX8aoA1hoJ!ZdR^aY;LuHKkz0SX_O5p6PDQz)@8}b-9$&@Q0 zEThsptcy(+u2!wL#GLQ1$Ci|9tja|?hdqsGZWS+WZ+_pD6y`&Xd5`=&X1vsfR#cbH zFni(3>7NCSp$_bT)~uuq&?o<5EuoCf$+;BK2|_>nWFp(?)asy)pzO@jo0NMuyqBUk zjJ|9eTcXhVfCIGP90PIoXtmm&47-OU9PhGjVRLRiw0|2G_K=C&zwXejrfyX@PHUb&HXk{Q_Wnf9-%L#rVwhw+4k88zs*rcZo*Asr#J>eYVOM6-sTpR zz3pK6BwpjOG&w~ z$QNCOek|s)#`(m@g3O~ffsh+Zb;E8`=KLF3Yn1A&VLuZ#Ca6%V>zIUyoFhGBdbY^>tZA5_yfk zTLV6c&H%&1AZ_Z$+~ww|G1a)#}6@2(WIMB3!TYxPqp)oH69w6)bk$r$+Dcr zAIGO_^VnIDtku4H9$k(v*fe(H>P_TI_D(Nm~t4Ac+iid*Byfi{Is>XG$aVy6|K( zeF{p9xNC_D{FNQr5}4Ucrpt)`;!Pzl&h$hbwTJ*UhS*0eMKmYDwete^&QJ&R|8yr? zi9EQo&IUOgkR-=Dd0deCCC?|eH6`9jv*_N!-A#!H1zi7HJTy_Ed=m7ddt>DcIQ$fWKXud0_@*$4} zG|S9Xz!#zZl+!c>D1#6e1Txrh-lkSv?d(YWbo~&iU_=+JL#AAwb8`$ZX~xohFR)l$ zQ`Z8TVXaL~S}Vog%i@xBJ!3_q*Z#hw5t9VW{F2qSZU;YrTjcl(3Tob;=`cCsM&S${ zOgvZ~{QA{c->9FOKY+(;c&5W)481X9oR)reQbkpKbf1mc8*ulslnI+G5ZW7LM@+OY z3|0p$H#p+O7LHJ_vFO(~7n&}}LhXsWY#%sYe|wLGa>)>IDa0A5O@xv0?!3bskHF5e zQmMoI1=1Sw^&M}ytuK-b(6OZAtCB{z`&OG%Pp6w{wWELn_93j-p6okXKdLw9(`hH0 zTxt^#x^A$=mQ6UeJE_zhTjkej+c@LOwM=_Ku*2WQ3uQHU&^rEfF(XyRPbzD$Vm*^l zl!F+a?alW=b*xZXfjb@ROB=IS9xCh!Kg*+wCN&5Rwr*I79ysEQ>CcxZ7yB+U{%sW^ zMRx50+!#d;4YevN4loCU!g`f|84Y4WNLT`?*4 z@V4*1&EYw^Qx=q3d4NzAc)?K{Q`TtTg}$fX{`wB<5#gzZHNOR!V9^4 zM}FguknfMQWdBtH^t6X>OLDfyFwiwX0dJ|G@5(=J(@@k_N+mV$B(Zkcb}fNo6E@(9 zRG^tDW4+dbl@X3eRSFU^ODl5>4Oe^sJlo=d0N#d;HTWU^qsUVsz;cYLhgY0Ne@2V* zpM&0jj0c|?0|F&Ej@WVDqWLENe)jc;-4OkOp>Qm6&6t5b7~RO;8DhU@H4%(NClqSj zpyv8=wIeonqubLydV&!Dy&2WS7ml@UUQi~-5oVVRL#qWJf8k7+50+fi5iD$QOPQo# z7_Wxm%6@12>*_NaG~atqdK7ShKzRu84H%c%mv++A>n6~+k1uVY1EPE(b(uQ@EaQa{ zQ`~$58X0xDf3EV#73_%VKvGiSK^VK8F?WK*bMv*9)!2U6?V4EmlIc=^MS9oZt&b<{ z7j=?jFfq0rUpZaA@0DmUpt@u*z&sQ(-RcQ&Dc?YxaCD-0e~Z}A^8IzWRSAO!)d$Cuwtxz$q+XC>~{MsDsWxd(fEn6BF!km1G$nhZO`)@zZfWJ8H!^#v+1 zIpY2ScWH}b4(@glWMv6}nDrqU4f~i@f$vzT!6820E~VA82xwhDD3n`btwGHIsBSNy zB1k)gcE0cgKRog?vZK#xd@B3U2gl9^gFjJ4${zE&tx~vGGLz~(1Hr^cUTJV9JE7z8 zkw#5*;S3}h584wl`a%9`Lb)yz@Ojd^4PV+{Nzow}-NoB@yAM8io3}%6q5_rzZLIj% z;z#%tX_vPg<4aoV?fP+XvkEI<-yqs2kp7mX{g4#kz1jLsy_o@Ia4)RZKIa$KILM>C zzr|k_=w94k#GUFZyxpmueyK)p-ql9zJ{M8tAR5HbD3sfNif0Vg#tWw3r==QP z?90_Yj^P>>7V{@FCKvPQJO^9xe!f{mtaBNY4@6NE@$}|Ec3gcaCvE>)jNB1i-27U? z+L}ON#C(Iw0aZeC#o|IFy5i~a5b1K>Sf}#X#S85w)LygvSCR41$Dt#Tv1{@F?hSZ2 zhdwsc(2rf+Y*Ia;E!+p%ccsdmstRv-D1PAlq#_b;xzajL*i6KB!8{Bn?9$3)y{TH@ zq&@R+v0$jQ*OD-L@nzrTA%66tF10683uFBXm^JvY**s9-Sqi*FS|kyBP~qu)oT1d^ zX{z+S_@S~jl{{q@|6VfWv4`+ek5Tm|Jk2tDV1K9ydu_^<=Tuz6KiQ8kIHhdCs2%kt z-xX_eALtLvK}?tdVK&ceMRd#e_+F0ZmK`-LitB&?{7=I2@OKR$mrdNOak~(plhq3W zaz}&ADE$$z@Bv7Ts98Ki0_K&TA8@l&-W0p+tf>j~-{*f2yZ4<+R4oq?E~4yhdD5Y9 zm=y9;r$X>`Vde!f3SHE5XbSi=4d|6~JZ>V*8~zaw;)?v{Tf`|pU7_*u0<;W=cygd@ zT;1H2>~SmY@!=0zyaMI%M_4USaDoP6<~RL>TGmqsxNe>35!X#q%CP>3>+;iBK6#UN zn+)#wCmcP2T<;$i{+ZPE1Ew+LKWO}{U;5%1oc*JQj3hgV-+U+DYCx_i22o3C5mC#l z^|OqZf58#lyXQv4dp zw}yp00r4%Ptsjk;?~Fnr`&4NLr>wIEr{9Q{v@q^+>T~9P08-!5EuB0W8AC#D$0R@NCBJv^1N@Op>d1C2I(!tlGW6gVv921nm~xfQ z5U^{T%}f98gpT6*bvQtAa_H*js(Lad^uf=|*^|*z{Q8dJU)`*<3*q4@wS?*InNh;-*DA(^-m*Ze;*BoNIi}IgeI5tN zr8aUgR=lo-tY{}Zh zSXlc4jOJIzJ4{fGFXI!hP$58dX2VR*`nC-c)W#Y^4YpJXwz^D=8(LuuMQ3ID5D=+6 z9ce%vyWe`TzD|AGh*4?#x>9R?(Ef`G%w$<|cT$oV-$7j)^g1QXH6_ksI>t(8DlP~HBl0jtVv5?CtSjk%rApU-7{De z?|)F_nm|M8-TIbf@;rg%rd###K=izx_#y(S$7oV^ax)3{FV0sfEG#zY`3bv@8x1=1 z%r)}{6kIO{U47?Q#2=H0)8)D>6*s+~`yB^5f*SBjuP1hI63gw><8kOguu#c3*l+K3 zYg>s|0b>r^FmvR9Czk&e$rBy^reT#>P{FIy4j?I!UC6_eXDWsCxT)&1&u6M05$*Uh z?Bfqx0aI;V=67uO@9+az|yFabehRDY~$`bW|y6>f{X=mV(m|Ah1vgMgDsw!yOVkr zt1kkNw4iB$lB29@1H?mN!xkP~*G(P4Z&JZj(D?73MH7JdqK1xt$=<$j^WVV+cI}Oo zI;2@NoWSHd&OU}~;5%5)@dYT~!#4EJ23@sIRcZi}8xMjho3pwjPUusTQRd0t^{1hv}1>}xo>dFmnhreUP>tDgrX-959LWg zG;0f((vlU}_he`~!WB^`*u{EbX-SuvA=vosA|4Z9X8=s$sLY%-F2hFgIIy z{D`Ej7{M1-27fue(PNxxkoaXmiB=^YqUv}u#ik0B2Xa8^%vW5gX);lKF|e*F2`( zPr%>Y9F#qaRjJf=OZ%{Y)8|F8kHk}gr>w?(^T|E)>31a*&;NB#PFM(r^7&bbBQH8x z>FsZZfNTxh6!Qo6%$;g@9`deKZX>Fm01KTDVZ*-1F!v9#6V2?c`~Jt6zZ02oBR`vh z@?)0^(;`?vXjbkV1X_Ns1Xzqekb;rqYm6^Sf#E;{B>q5QJtMCFqIj0_2cs5F8UMlt zl?X)(7V6o@)GeAk{gzDK1&Gg%n-;@5y*T<4x?xS=uDp;LGFa>>waCjMlj-+d0{@ep zAJwVNNuDaz1#ThRP~D>G)^EVqY?ve}y2%H4fh0x03+8rFf0R^an{wCXghj(`yO2({ zwP&Y$#fLipIRp8lf&^vudH?O^_GD(r*Y%{n)r*xnh_l?nONX_4jL2-5;oQjIVMIH> zyjA;_mxguOOqUVUD^X-Z!SweqZFZm65njc zfUSR*n?<5Jt4Qb>FKQs=u;2|PpEetw$w-IRt~H#hVS7Km<b<6~gA4SxASpDIrh#chPAz@yo_)YhYtZILa z-NC5VT^8!&NFgp5`E^?$)uF~nm%V?Yp%#LKcba-`P*3T}a-@cODNCS|W)w~V^U4_f55s16!+Csgz&o^jbkys54z zeEPcX^Bj}*#Fi+|np*y`2HyY_=K7e<){Q2f14m>!;A~iPMxnQCcUi}nb&c5`Zm1t#6Vlg`}nf# zb+2k!LzK&!>K;XXYRAh_BzF()!x_Z!Dzn3I{PE!ljeQKtHPyG5Z&oT>Eol5?(U5YE zNyCoi@fq?_0-n>^OB8$LYDB>udNlw@2Gg>r)JyCur}{@E?eZiu*wOP}5MbUQ0@L{! z{_|&t(VB%f4^KZ!ltP4=E^E*4+}|@5ZFWo*q_1=pxJltH1d}C*gv-+Qkl{u$#5XJ1 zxE*W|0|hrk|FkZp9&> zo!MuE1Ckbhdtn^rZ$+5uC}_i^zf;VO#K)E|b#KH0mma3!JTFgmr6g}rjCqY=cyXMY zjO)M0Xi0Wa;ol~v*ds{u>udCdjEe}L#f&5>3E4V4im*JlKyG9lrl-x~f^E<_)VlCQ zGHD<`D?izwnpyaj;Kgq;O_yR8H@(_3qeAl^N6b1U@B|yrh^)keo%Rn)puR+esZr zxUv1u*zBK#rUp`2w)c~zI|x##+O=>lq&nfTPbHL?kyQMk=)8d~hHcFTWU&3+(J74V zl&b{e+hY405Q^V)Oin);EdtCs>7`d*W($m}uVwXOyD(uxv#!oa!uTbJt+!F5d1Sm# zABhJ8(B>QcdE>CP0Fq?G-}_(NgocHAtr3zU${rH#`rXj-&bl6cBq6v}dWU!rO3%{E z>gQ%~JJI*mG!ze{E_Fui0<`V`WJps!P4Xf;1~4NI9-gT|JUcG^2BoQ{^*;B4PKHIQ ze8eco9vPkQ{v)jTkH80kh7M&sgwiDOBC92U?|n4 z=%I+HS^jyk?7 z*Npwr&4t02d&47Z5o@lW?iWQ~skNZHT2V`KG0oJ!c9aQ$wxSh3F+XPM6ZO{b?`rjh z<{{&&_zPUj@FiW`=vi1f^4-ve`AVy$>_hzLTB$SPJ2^1n-us6bx6-om zl_hGe+(<*~dPg68?lAex8|aopjS7g3S^Cc`ar=^NyY#Dv3~3}fC=kcF(R(lO1*Vzh z3`ZfPGOIcZ_`{Mw$NtO$$GU!PPeXT@@w-*T{m?%V?jPbo0tfq#q^mqV0ps)XpL%jM z?gdWH zq^<6e9~>e#ON7ff>!> z${Fme?Fb z=Bov^UrO?V*}k6&G2WgX|Jvi6&uV`KX~aAA-fwi&T@$6KK-V>s_$^!^PRfy z#NNw;I9dTh#F%;RF+`@#dwa?^3c3--N{4nF6AE?zomtZXEfA z?RrF03&?Y7R$nxTWJM@E=grm$%l-|)Q;I&yYChj@CGTnT+_apW+RpUIyE&b2{VqFM zO;|sf9SChU+i?q7tQs_Q7&nY14#a#zr{dCdE!8`8Tj?eFYAt11gZ_g;|kM`Y|xrasv! zicxJ*1@px~PpR?vRGbFi+ibv$f4RUt-ChC~0TJ^ZDqSp))UK;9*M=gfF(5Fe9kxEA zxp#2CYv4>pU4k{#c{_0RCHgrhdjrN?;I_MF@2#;e^{xpvO6t>!JXIhKN)c6mY975i z{_geXoSR37kahcu{OaNYDGa@{rn|NT%8TT7h!GW{FYd|Xy*zJLVndfojFqiFn)a`zxk@+z`0-GEc7kQ zqf%qW^T5t?=yy)>QE%bbCsCN(npvay{$7A%9fsQ{p)9isqhIJzM23c(%qD6nlMu`&5&&3BDCF~KR)9~LH9$E5Rfk`%w?52z)8}x}XC`hL3+ixw} zco0IS?WU3ATGLn~UowhIa)-G9T>|w%+xq6L85S`tGq*b?{4taMQNt(%(q(W;}xZK9uM{X9wIcoO%LT*%0 zAa}+6JZMjHB3_{A9(^$VskZUxJ>wcMT)?^MTLu00Fz`uk0@xYoo_ch4_> zuW-)Is{XvZW9GfFYz9W+y#=U&v)abXmi~4o0`G9KgS^{-DOr|3Q0QwSJ#gWex7C;8 z?MQ?gG5wbK>-HtlF&|BN>-(Vv=FM7pK4fR^%C+J5Q~szf0`w5azTfPazo7M&F**pc z$sBHn-uT!)(v(ht0(2}8s^!?QlqMUZMrFedxVY=XmDdFC2;kel8G?!TkF9qyUgjQI z!!Vu2`Cyhs+0Qv@i*1U2%}y(?rgv=H2S-oe)5fL*TISzYh%5zTJ;d0DZORpZ0*R}y zqn8*$f1qXwN@puBX(9!L<197XN8}xOxWvY>8_}HMsHEu3iiLL{PlE>EAVhPQH)`cQ zxbZU$3sWkL6#385rF`BHG^`9O?AGc!lX|R@yd$I!`M4hRiE@E8ErkT|XX$9mM-;7; z9k;_*@0r<>kIj%W!ZxCQ&jO0s`j72`#Wz!z%z_H)09eQF_CC7)#uZ=9J6T@sA%9Rw z$r4V`aQSK=zx~lfjo>3+GwPU2ScZd+QHR*JEp5j8toJ&nV#iIUj%IQb8Xf~og8r!c zVJU_Ih+oB7v7BEWZH-R!;Tb}cV)x5FOO(0g>3J!JErM~zCAHlHbl1@K4~<&nAaJxB zG=;RinRi!}`%=zWJktlhjVYb0nGI25El>i@>H$`Mf5f6a+slux;O}4?d2Nb zTO3#CvtFz)Jl5VfpdpCoo^*_?S(g*B&h~2wn)L)xaDHm``#COk1rffge%F$v!xA4} zg&0(Ir}Uh$cQdfR#GL9mq}<~q?2I9}jYa+KTs7Z?1O*PrU6rTo^a$5)F}9ByE9Itc zY<#K?9WmWv+~0g`{;>)H&;q$qWWN+sfB$V)nO5goQaTrdb>ZauR1Jui48ro zXV{IBx!?aC*r-5ogI)JA0O?N=LU|>CSWnj;Lc;t0?;AO`nm1!*$&X%WFv?%AM^*5D zg)WG7xgIi@8P8Tju2E0{byh_VIxEt6!!$)9~&0q@342ZO%p z4|0XRuRYxq_jPJK!o%7`gF5_z=HRHbN)!*=0*nbYrjcPnmcsv3(S!(XBwWrGrJ zUKdnN`WyFe&%cThjxN|}evNAOn4`iB7$77lj62p$I`8SQ#OaSn?d*ifSs=*%*MR#E zAA0%cR=!)g1~a;Q7$t$S>g$_k;&Y8Z3Y_(V{9>a3I4PL_(5U$*CE?c*ofsTY*FxN=x~6ML%^4Bu(k1S= zfs*otWfNiFd6F*7ZI`aPiou++Sv-xJCT+K&XWnPI(E|?RSrUQD`a+t5Q6U*cEk8gqK6s@%0M~ zOY#~UwKZjr*~AV^(F6~o?H$cH1?|h7HIjq2*+O~6k>D~ z$Fr9gxwcT*#+oH&8~P?+cyoLs)!4tcrDYN2mbn{BeEM;J_81HQj3^QUmo-v{tfNKl31lC)2wa)A*lcu}D?2teBl{aY8DuuQ&h z421kuRq@}0>Td^`z-=Jcn4ATx_`~mfPxnjzALgO|JfDam_`XZ{Gtz%vX@R;s z1c+qx^6(d9EB~?p{hxk_-TcGKI{*Jxt`GNz z2PU@sKN?vWj%C^R*N4q+F9tgDzm5C`WUqg;@0S8jDInzW8A)$gtfKIaTo~r%BQLEYRV85( G^1lG2{5`?| literal 0 HcmV?d00001 diff --git a/doc/source/development/images/docs_create_file.png b/doc/source/development/images/docs_create_file.png new file mode 100644 index 0000000000000000000000000000000000000000..b51e370353250b39be08c1484a89b020e81ca074 GIT binary patch literal 209110 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%0Adn+wIs)h*VW%;w+n@4C4s!x``Sp}clA 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

      Qre}HwckW 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

      9Uu?Oq9t2VSgN)0`UZ#! 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 PeZWiSjDZ$G!#4Ea^tgK0 literal 0 HcmV?d00001 diff --git a/doc/source/development/images/docs_pr.png b/doc/source/development/images/docs_pr.png new file mode 100644 index 0000000000000000000000000000000000000000..211eb25ef1a625a773e26440026f1448a60a0bb4 GIT binary patch literal 156081 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ⅅKs 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 J+_if3{{g=h;{yNy literal 0 HcmV?d00001 diff --git a/doc/source/development/images/eclipse_debug0.png b/doc/source/development/images/eclipse_debug0.png new file mode 100644 index 0000000000000000000000000000000000000000..79fc5fd5bc45b5157f18cbf00952d3f07ed2d3a2 GIT binary patch literal 48174 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%0D-C{5Pdn%!W4M_~u&K>f3AG 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Ɓ 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 UlyYw3dH?_b07*qoM6N<$g3RKKHUIzs literal 0 HcmV?d00001 diff --git a/doc/source/development/images/eclipse_debug2.png b/doc/source/development/images/eclipse_debug2.png new file mode 100644 index 0000000000000000000000000000000000000000..df4eddbd7924aa35f5fffa710ec11cc850bfb7db GIT binary patch literal 57032 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 Hv*3RLdxc;T literal 0 HcmV?d00001 diff --git a/doc/source/development/images/eclipse_debug3.png b/doc/source/development/images/eclipse_debug3.png new file mode 100644 index 0000000000000000000000000000000000000000..23178142c184197a3cd2351c71ffe2ff19a167a4 GIT binary patch literal 58677 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 B)T;mh literal 0 HcmV?d00001 diff --git a/doc/source/development/index.rst b/doc/source/development/index.rst new file mode 100644 index 000000000000..ffa7134ddec0 --- /dev/null +++ b/doc/source/development/index.rst @@ -0,0 +1,33 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Contributing to Cassandra +************************* + +.. toctree:: + :maxdepth: 2 + + gettingstarted + ide + testing + patches + code_style + how_to_review + how_to_commit + documentation + ci + dependencies + release_process diff --git a/doc/source/development/patches.rst b/doc/source/development/patches.rst new file mode 100644 index 000000000000..92c05531e5a5 --- /dev/null +++ b/doc/source/development/patches.rst @@ -0,0 +1,141 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: none +.. _patches: + +Contributing Code Changes +************************* + +Choosing What to Work on +======================== + +Submitted patches can include bug fixes, changes to the Java code base, improvements for tooling (both Java or Python), documentation, testing or any other changes that requires changing the code base. Although the process of contributing code is always the same, the amount of work and time it takes to get a patch accepted also depends on the kind of issue you're addressing. + +As a general rule of thumb: + * Major new features and significant changes to the code based will likely not going to be accepted without deeper discussion within the `developer community `_ + * Bug fixes take higher priority compared to features + * The extend to which tests are required depend on how likely your changes will effect the stability of Cassandra in production. Tooling changes requires fewer tests than storage engine changes. + * Less complex patches will be faster to review: consider breaking up an issue into individual tasks and contributions that can be reviewed separately + +.. hint:: + + Not sure what to work? Just pick an issue marked as `Low Hanging Fruit `_ Complexity in JIRA, which we use to flag issues that could turn out to be good starter tasks for beginners. + +Before You Start Coding +======================= + +Although contributions are highly appreciated, we do not guarantee that each contribution will become a part of Cassandra. Therefore it's generally a good idea to first get some feedback on the things you plan to work on, especially about any new features or major changes to the code base. You can reach out to other developers on the mailing list or :ref:`Slack `. + +You should also + * Avoid redundant work by searching for already reported issues in `JIRA `_ + * Create a new issue early in the process describing what you're working on - not just after finishing your patch + * Link related JIRA issues with your own ticket to provide a better context + * Update your ticket from time to time by giving feedback on your progress and link a GitHub WIP branch with your current code + * Ping people who you actively like to ask for advice on JIRA by `mentioning users `_ + +There are also some fixed rules that you need to be aware: + * Patches will only be applied to branches by following the release model + * Code must be testable + * Code must follow the :doc:`code_style` convention + * Changes must not break compatibility between different Cassandra versions + * Contributions must be covered by the Apache License + +Choosing the Right Branches to Work on +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +There are currently multiple Cassandra versions maintained in individual branches: + +======= ====== +Version Policy +======= ====== +4.0 Code freeze (see below) +3.11 Critical bug fixes only +3.0 Critical bug fixes only +2.2 Critical bug fixes only +2.1 Critical bug fixes only +======= ====== + +Corresponding branches in git are easy to recognize as they are named ``cassandra-`` (e.g. ``cassandra-3.0``). The ``trunk`` branch is an exception, as it contains the most recent commits from all other branches and is used for creating new branches for future tick-tock releases. + +4.0 Code Freeze +""""""""""""""" + +Patches for new features are currently not accepted for 4.0 or any earlier versions. Starting with the code freeze in September, all efforts should focus on stabilizing the 4.0 branch before the first official release. During that time, only the following patches will be considered for acceptance: + + * Bug fixes + * Measurable performance improvements + * Changes not distributed as part of the release such as: + * Testing related improvements and fixes + * Build and infrastructure related changes + * Documentation + +Bug Fixes +""""""""" + +Creating patches for bug fixes is a bit more complicated as this will depend on how many different versions of Cassandra are affected. In each case, the order for merging such changes will be ``cassandra-2.1`` -> ``cassandra-2.2`` -> ``cassandra-3.0`` -> ``cassandra-3.x`` -> ``trunk``. But don't worry, merging from 2.1 would be the worst case for bugs that affect all currently supported versions, which isn't very common. As a contributor, you're also not expected to provide a single patch for each version. What you need to do however is: + + * Be clear about which versions you could verify to be affected by the bug + * For 2.x: ask if a bug qualifies to be fixed in this release line, as this may be handled on case by case bases + * If possible, create a patch against the lowest version in the branches listed above (e.g. if you found the bug in 3.9 you should try to fix it already in 3.0) + * Test if the patch can be merged cleanly across branches in the direction listed above + * Be clear which branches may need attention by the committer or even create custom patches for those if you can + +Creating a Patch +================ + +So you've finished coding and the great moment arrives: it's time to submit your patch! + + 1. Create a branch for your changes if you haven't done already. Many contributors name their branches based on ticket number and Cassandra version, e.g. ``git checkout -b 12345-3.0`` + 2. Verify that you follow Cassandra's :doc:`code_style` + 3. Make sure all tests (including yours) pass using ant as described in :doc:`testing`. If you suspect a test failure is unrelated to your change, it may be useful to check the test's status by searching the issue tracker or looking at `CI `_ results for the relevant upstream version. Note that the full test suites take many hours to complete, so it is common to only run specific relevant tests locally before uploading a patch. Once a patch has been uploaded, the reviewer or committer can help setup CI jobs to run the full test suites. + 4. Consider going through the :doc:`how_to_review` for your code. This will help you to understand how others will consider your change for inclusion. + 5. Don’t make the committer squash commits for you in the root branch either. Multiple commits are fine - and often preferable - during review stage, especially for incremental review, but once +1d, do either: + + a. Attach a patch to JIRA with a single squashed commit in it (per branch), or + b. Squash the commits in-place in your branches into one + + 6. Include a CHANGES.txt entry (put it at the top of the list), and format the commit message appropriately in your patch as below. Please note that only user-impacting items `should `_ be listed in CHANGES.txt. If you fix a test that does not affect users and does not require changes in runtime code, then no CHANGES.txt entry is necessary. + + :: + + + + patch by ; reviewed by for CASSANDRA-##### + + 7. When you're happy with the result, create a patch: + + :: + + git add + git commit -m '' + git format-patch HEAD~1 + mv (e.g. 12345-trunk.txt, 12345-3.0.txt) + + Alternatively, many contributors prefer to make their branch available on GitHub. In this case, fork the Cassandra repository on GitHub and push your branch: + + :: + + git push --set-upstream origin 12345-3.0 + + 8. To make life easier for your reviewer/committer, you may want to make sure your patch applies cleanly to later branches and create additional patches/branches for later Cassandra versions to which your original patch does not apply cleanly. That said, this is not critical, and you will receive feedback on your patch regardless. + 9. Attach the newly generated patch to the ticket/add a link to your branch and click "Submit Patch" at the top of the ticket. This will move the ticket into "Patch Available" status, indicating that your submission is ready for review. + 10. Wait for other developers or committers to review it and hopefully +1 the ticket (see :doc:`how_to_review`). If your change does not receive a +1, do not be discouraged. If possible, the reviewer will give suggestions to improve your patch or explain why it is not suitable. + 11. If the reviewer has given feedback to improve the patch, make the necessary changes and move the ticket into "Patch Available" once again. + +Once the review process is complete, you will receive a +1. Wait for a committer to commit it. Do not delete your branches immediately after they’ve been committed - keep them on GitHub for a while. Alternatively, attach a patch to JIRA for historical record. It’s not that uncommon for a committer to mess up a merge. In case of that happening, access to the original code is required, or else you’ll have to redo some of the work. + + diff --git a/doc/source/development/release_process.rst~b7c4271b16801acff77c020ebf2daf82b1592184 b/doc/source/development/release_process.rst~b7c4271b16801acff77c020ebf2daf82b1592184 new file mode 100644 index 000000000000..0086aafab8ea --- /dev/null +++ b/doc/source/development/release_process.rst~b7c4271b16801acff77c020ebf2daf82b1592184 @@ -0,0 +1,270 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: none +.. release_process: + +Release Process +*************** + +.. contents:: :depth: 3 + +|  +| + + + +The steps for Release Managers to create, vote and publish releases for Apache Cassandra. + +While a committer can perform the initial steps of creating and calling a vote on a proposed release, only a PMC member can complete the process of publishing and announcing the release. + + +Prerequisites +============= + +Background docs + * `ASF Release Policy `_ + * `ASF Release Distribution Policy `_ + * `ASF Release Best Practices `_ + + +A debian based linux OS is required to run the release steps from. Debian-based distros provide the required RPM, dpkg and repository management tools. + + +Create and publish your GPG key +------------------------------- + +To create a GPG key, follow the `guidelines `_. +The key must be 4096 bit RSA. +Include your public key in:: + + https://dist.apache.org/repos/dist/release/cassandra/KEYS + + +Publish your GPG key in a PGP key server, such as `MIT Keyserver `_. + +Artifactory account with access to Apache organisation +------------------------------------------------------ + +Publishing a successfully voted upon release requires Artifactory access using your Apache LDAP credentials. Please verify that you have logged into Artifactory `here `_. + + +Create Release Artifacts +======================== + +Any committer can perform the following steps to create and call a vote on a proposed release. + +Check that there are no open urgent jira tickets currently being worked on. Also check with the PMC that there's security vulnerabilities currently being worked on in private.' +Current project habit is to check the timing for a new release on the dev mailing lists. + +Perform the Release +------------------- + +Run the following commands to generate and upload release artifacts, to the ASF nexus staging repository and dev distribution location:: + + + cd ~/git + git clone https://github.com/apache/cassandra-builds.git + git clone https://github.com/apache/cassandra.git + + # Edit the variables at the top of the `prepare_release.sh` file + edit cassandra-builds/cassandra-release/prepare_release.sh + + # Ensure your 4096 RSA key is the default secret key + edit ~/.gnupg/gpg.conf # update the `default-key` line + edit ~/.rpmmacros # update the `%gpg_name ` line + + # Ensure DEBFULLNAME and DEBEMAIL is defined and exported, in the debian scripts configuration + edit ~/.devscripts + + # The prepare_release.sh is run from the actual cassandra git checkout, + # on the branch/commit that we wish to tag for the tentative release along with version number to tag. + cd cassandra + git switch cassandra- + + # The following cuts the release artifacts (including deb and rpm packages) and deploy to staging environments + ../cassandra-builds/cassandra-release/prepare_release.sh -v + +Follow the prompts. + +If building the deb or rpm packages fail, those steps can be repeated individually using the `-d` and `-r` flags, respectively. + +Call for a Vote +=============== + +Fill out the following email template and send to the dev mailing list:: + + I propose the following artifacts for release as . + + sha1: + + Git: https://gitbox.apache.org/repos/asf?p=cassandra.git;a=shortlog;h=refs/tags/-tentative + + Artifacts: https://repository.apache.org/content/repositories/orgapachecassandra-/org/apache/cassandra/apache-cassandra// + + Staging repository: https://repository.apache.org/content/repositories/orgapachecassandra-/ + + The distribution packages are available here: https://dist.apache.org/repos/dist/dev/cassandra/${version}/ + + The vote will be open for 72 hours (longer if needed). + + [1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=-tentative + [2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=-tentative + + +Post Failed Vote Operations +=========================== + +Delete Artifacts +----------------- + +Delete the staged artifacts + + svn rm -m "cassandra- vote failed, ref: " https://dist.apache.org/repos/dist/dev/cassandra/ + + +Drop Nexus Repository +------------------------ + +* Login to `Nexus repository `_ again. +* Click on "Staging Repositories". +* Find your closed staging repository, select it and then click "Drop". + + +Remove Git Tag +-------------- + +Remove the -tentative tag, locally and remote + + git tag -d 4.0.0-tentative + git push --delete origin 4.0.0-tentative + + +Post Successful Vote Operations +=============================== + +Any PMC member can perform the following steps to formalize and publish a successfully voted release. + +Publish Artifacts +----------------- + +Run the following commands to publish the voted release artifacts:: + + cd ~/git + # edit the variables at the top of the `finish_release.sh` file + edit cassandra-builds/cassandra-release/finish_release.sh + + # After cloning cassandra-builds repo, `finish_release.sh` is run from the actual cassandra git checkout, + # on the tentative release tag that we wish to tag for the final release version number tag. + cd ~/git/cassandra/ + git checkout -tentative + ../cassandra-builds/cassandra-release/finish_release.sh -v + +If successful, take note of the email text output which can be used in the next section "Send Release Announcement". +The output will also list the next steps that are required. + + +Release Nexus Repository +------------------------ + +* Login to `Nexus repository `_ again. +* Click on "Staging Repositories". +* Find your closed staging repository, right click on it and choose "Release". +* Next click on "Repositories", select the "Releases" repository and validate that your artifacts exist as you expect them. + + +Update and Publish Website +-------------------------- + +See `docs `_ for building and publishing the website. + +Also update the CQL doc if appropriate. + +Release version in JIRA +----------------------- + +Release the JIRA version. + +* In JIRA go to the version that you want to release and release it. +* Create a new version, if it has not been done before. + +Update to Next Development Version +---------------------------------- + +Update the codebase to point to the next development version:: + + cd ~/git/cassandra/ + git checkout cassandra- + edit build.xml # update ` ` + edit debian/changelog # add entry for new version + edit CHANGES.txt # add entry for new version, move up any entries that were added after the release was cut and staged + git commit -m "Increment version to " build.xml debian/changelog CHANGES.txt + + # …and forward merge and push per normal procedure + + +Wait for Artifacts to Sync +-------------------------- + +Wait for the artifacts to sync at https://downloads.apache.org/cassandra/ + +Send Release Announcement +------------------------- + +Fill out the following email template and send to both user and dev mailing lists:: + + The Cassandra team is pleased to announce the release of Apache Cassandra version . + + Apache Cassandra is a fully distributed database. It is the right choice + when you need scalability and high availability without compromising + performance. + + http://cassandra.apache.org/ + + Downloads of source and binary distributions are listed in our download + section: + + http://cassandra.apache.org/download/ + + This version is release[1] on the series. As always, + please pay attention to the release notes[2] and let us know[3] if you + were to encounter any problem. + + Enjoy! + + [1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb= + [2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb= + [3]: https://issues.apache.org/jira/browse/CASSANDRA + +Update Slack Cassandra topic +--------------------------- + +Update topic in ``cassandra`` :ref:`Slack room ` + /topic cassandra.apache.org | Latest releases: 3.11.4, 3.0.18, 2.2.14, 2.1.21 | ask, don't ask to ask + +Tweet from @Cassandra +--------------------- + +Tweet the new release, from the @Cassandra account + +Delete Old Releases +------------------- + +As described in `When to Archive `_. + +An example of removing old releases:: + + svn rm https://dist.apache.org/repos/dist/release/cassandra/ \ No newline at end of file diff --git a/doc/source/development/testing.rst b/doc/source/development/testing.rst new file mode 100644 index 000000000000..7f38fe590f50 --- /dev/null +++ b/doc/source/development/testing.rst @@ -0,0 +1,98 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: none +.. _testing: + +Testing +******* + +Creating tests is one of the most important and also most difficult parts of developing Cassandra. There are different ways to test your code depending on what you're working on. + + +Unit Testing +============ + +The most simple way to test code in Cassandra is probably by writing a unit test. Cassandra uses JUnit as a testing framework and test cases can be found in the ``test/unit`` directory. Ideally you’d be able to create a unit test for your implementation that would exclusively cover the class you created (the unit under test). Unfortunately this is not always possible and Cassandra doesn’t have a very mock friendly code base. Often you’ll find yourself in a situation where you have to make use of an embedded Cassandra instance that you’ll be able to interact with in your test. If you want to make use of CQL in your test, you can simply extend CQLTester and use some of the convenient helper methods such as in the following example. + +.. code-block:: java + + @Test + public void testBatchAndList() throws Throwable + { + createTable("CREATE TABLE %s (k int PRIMARY KEY, l list)"); + execute("BEGIN BATCH " + + "UPDATE %1$s SET l = l +[ 1 ] WHERE k = 0; " + + "UPDATE %1$s SET l = l + [ 2 ] WHERE k = 0; " + + "UPDATE %1$s SET l = l + [ 3 ] WHERE k = 0; " + + "APPLY BATCH"); + + assertRows(execute("SELECT l FROM %s WHERE k = 0"), + row(list(1, 2, 3))); + } + +Unit tests can be run from the command line using the ``ant test`` command, ``ant test -Dtest.name=`` to execute a test suite or ``ant testsome -Dtest.name= -Dtest.methods=[,testmethod2]`` for individual tests. For example, to run all test methods in the ``org.apache.cassandra.cql3.SimpleQueryTest`` class, you would run:: + + ant test -Dtest.name=SimpleQueryTest + +To run only the ``testStaticCompactTables()`` test method from that class, you would run:: + + ant testsome -Dtest.name=org.apache.cassandra.cql3.SimpleQueryTest -Dtest.methods=testStaticCompactTables + +If you see an error like this:: + + Throws: cassandra-trunk/build.xml:1134: taskdef A class needed by class org.krummas.junit.JStackJUnitTask cannot be found: + org/apache/tools/ant/taskdefs/optional/junit/JUnitTask using the classloader + AntClassLoader[/.../cassandra-trunk/lib/jstackjunit-0.0.1.jar] + +You will need to install the ant-optional package since it contains the ``JUnitTask`` class. + +Long running tests +------------------ + +Test that consume a significant amount of time during execution can be found in the ``test/long`` directory and executed as a regular JUnit test or standalone program. Except for the execution time, there’s nothing really special about them. However, ant will execute tests under ``test/long`` only when using the ``ant long-test`` target. + +DTests +====== + +One way of doing integration or system testing at larger scale is by using `dtest `_, which stands for “Cassandra Distributed Tests”. The idea is to automatically setup Cassandra clusters using various configurations and simulate certain use cases you want to test. This is done using Python scripts and ``ccmlib`` from the `ccm `_ project. Dtests will setup clusters using this library just as you do running ad-hoc ``ccm`` commands on your local machine. Afterwards dtests will use the `Python driver `_ to interact with the nodes, manipulate the file system, analyze logs or mess with individual nodes. + +Using dtests helps us to prevent regression bugs by continually executing tests on the `CI server `_ against new patches. Committers will be able to set up build branches there and your reviewer may use the CI environment to run tests for your patch. Read more on the motivation behind continuous integration `here `_. + +The best way to learn how to write dtests is probably by reading the introduction "`How to Write a Dtest `_" and by looking at existing, recently updated tests in the project. New tests must follow certain `style conventions `_ that are being checked before accepting contributions. In contrast to Cassandra, dtest issues and pull-requests are managed on github, therefor you should make sure to link any created dtests in your Cassandra ticket and also refer to the ticket number in your dtest PR. + +Creating a good dtest can be tough, but it should not prevent you from submitting patches! Please ask in the corresponding JIRA ticket how to write a good dtest for the patch. In most cases a reviewer or committer will able to support you, and in some cases they may offer to write a dtest for you. + +Performance Testing +=================== + +Performance tests for Cassandra are a special breed of tests that are not part of the usual patch contribution process. In fact you can contribute tons of patches to Cassandra without ever running performance tests. They are important however when working on performance improvements, as such improvements must be measurable. + +Cassandra Stress Tool +--------------------- + +See :ref:`cassandra_stress` + +cstar_perf +---------- + +Another tool available on github is `cstar_perf `_ that can be used for intensive performance testing in large clusters or locally. Please refer to the project page on how to set it up and how to use it. + +CircleCI +-------- +Cassandra ships with a default `CircleCI `_ configuration, to enable running tests on your branches, you need to go the CircleCI website, click "Login" and log in with your github account. Then you need to give CircleCI permission to watch your repositories. Once you have done that, you can optionally configure CircleCI to run tests in parallel - click "Projects", then your github account and then click the settings for the project. If you leave the parallelism at 1 for Cassandra, only ``ant eclipse-warnings`` and ``ant test`` will be run. If you up the parallelism to 4, it also runs ``ant long-test``, ``ant test-compression`` and ``ant stress-test`` + + diff --git a/doc/source/faq/index.rst b/doc/source/faq/index.rst new file mode 100644 index 000000000000..acb7538d68ab --- /dev/null +++ b/doc/source/faq/index.rst @@ -0,0 +1,299 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Frequently Asked Questions +========================== + +- :ref:`why-cant-list-all` +- :ref:`what-ports` +- :ref:`what-happens-on-joins` +- :ref:`asynch-deletes` +- :ref:`one-entry-ring` +- :ref:`can-large-blob` +- :ref:`nodetool-connection-refused` +- :ref:`to-batch-or-not-to-batch` +- :ref:`selinux` +- :ref:`how-to-unsubscribe` +- :ref:`cassandra-eats-all-my-memory` +- :ref:`what-are-seeds` +- :ref:`are-seeds-SPOF` +- :ref:`why-message-dropped` +- :ref:`oom-map-failed` +- :ref:`what-on-same-timestamp-update` +- :ref:`why-bootstrapping-stream-error` + +.. _why-cant-list-all: + +Why can't I set ``listen_address`` to listen on 0.0.0.0 (all my addresses)? +--------------------------------------------------------------------------- + +Cassandra is a gossip-based distributed system and ``listen_address`` is the address a node tells other nodes to reach +it at. Telling other nodes "contact me on any of my addresses" is a bad idea; if different nodes in the cluster pick +different addresses for you, Bad Things happen. + +If you don't want to manually specify an IP to ``listen_address`` for each node in your cluster (understandable!), leave +it blank and Cassandra will use ``InetAddress.getLocalHost()`` to pick an address. Then it's up to you or your ops team +to make things resolve correctly (``/etc/hosts/``, dns, etc). + +One exception to this process is JMX, which by default binds to 0.0.0.0 (Java bug 6425769). + +See :jira:`256` and :jira:`43` for more gory details. + +.. _what-ports: + +What ports does Cassandra use? +------------------------------ + +By default, Cassandra uses 7000 for cluster communication (7001 if SSL is enabled), 9042 for native protocol clients, +and 7199 for JMX. The internode communication and native protocol ports +are configurable in the :ref:`cassandra-yaml`. The JMX port is configurable in ``cassandra-env.sh`` (through JVM +options). All ports are TCP. + +.. _what-happens-on-joins: + +What happens to existing data in my cluster when I add new nodes? +----------------------------------------------------------------- + +When a new nodes joins a cluster, it will automatically contact the other nodes in the cluster and copy the right data +to itself. See :ref:`topology-changes`. + +.. _asynch-deletes: + +I delete data from Cassandra, but disk usage stays the same. What gives? +------------------------------------------------------------------------ + +Data you write to Cassandra gets persisted to SSTables. Since SSTables are immutable, the data can't actually be removed +when you perform a delete, instead, a marker (also called a "tombstone") is written to indicate the value's new status. +Never fear though, on the first compaction that occurs between the data and the tombstone, the data will be expunged +completely and the corresponding disk space recovered. See :ref:`compaction` for more detail. + +.. _one-entry-ring: + +Why does nodetool ring only show one entry, even though my nodes logged that they see each other joining the ring? +------------------------------------------------------------------------------------------------------------------ + +This happens when you have the same token assigned to each node. Don't do that. + +Most often this bites people who deploy by installing Cassandra on a VM (especially when using the Debian package, which +auto-starts Cassandra after installation, thus generating and saving a token), then cloning that VM to other nodes. + +The easiest fix is to wipe the data and commitlog directories, thus making sure that each node will generate a random +token on the next restart. + +.. _change-replication-factor: + +Can I change the replication factor (a a keyspace) on a live cluster? +--------------------------------------------------------------------- + +Yes, but it will require running a full repair (or cleanup) to change the replica count of existing data: + +- :ref:`Alter ` the replication factor for desired keyspace (using cqlsh for instance). +- If you're reducing the replication factor, run ``nodetool cleanup`` on the cluster to remove surplus replicated data. + Cleanup runs on a per-node basis. +- If you're increasing the replication factor, run ``nodetool repair -full`` to ensure data is replicated according to the new + configuration. Repair runs on a per-replica set basis. This is an intensive process that may result in adverse cluster + performance. It's highly recommended to do rolling repairs, as an attempt to repair the entire cluster at once will + most likely swamp it. Note that you will need to run a full repair (``-full``) to make sure that already repaired + sstables are not skipped. + +.. _can-large-blob: + +Can I Store (large) BLOBs in Cassandra? +--------------------------------------- + +Cassandra isn't optimized for large file or BLOB storage and a single ``blob`` value is always read and send to the +client entirely. As such, storing small blobs (less than single digit MB) should not be a problem, but it is advised to +manually split large blobs into smaller chunks. + +Please note in particular that by default, any value greater than 16MB will be rejected by Cassandra due the +``max_mutation_size_in_kb`` configuration of the :ref:`cassandra-yaml` file (which default to half of +``commitlog_segment_size_in_mb``, which itself default to 32MB). + +.. _nodetool-connection-refused: + +Nodetool says "Connection refused to host: 127.0.1.1" for any remote host. What gives? +-------------------------------------------------------------------------------------- + +Nodetool relies on JMX, which in turn relies on RMI, which in turn sets up its own listeners and connectors as needed on +each end of the exchange. Normally all of this happens behind the scenes transparently, but incorrect name resolution +for either the host connecting, or the one being connected to, can result in crossed wires and confusing exceptions. + +If you are not using DNS, then make sure that your ``/etc/hosts`` files are accurate on both ends. If that fails, try +setting the ``-Djava.rmi.server.hostname=`` JVM option near the bottom of ``cassandra-env.sh`` to an +interface that you can reach from the remote machine. + +.. _to-batch-or-not-to-batch: + +Will batching my operations speed up my bulk load? +-------------------------------------------------- + +No. Using batches to load data will generally just add "spikes" of latency. Use asynchronous INSERTs instead, or use +true :ref:`bulk-loading`. + +An exception is batching updates to a single partition, which can be a Good Thing (as long as the size of a single batch +stay reasonable). But never ever blindly batch everything! + +.. _selinux: + +On RHEL nodes are unable to join the ring +----------------------------------------- + +Check if `SELinux `__ is on; if it is, turn it off. + +.. _how-to-unsubscribe: + +How do I unsubscribe from the email list? +----------------------------------------- + +Send an email to ``user-unsubscribe@cassandra.apache.org``. + +.. _cassandra-eats-all-my-memory: + +Why does top report that Cassandra is using a lot more memory than the Java heap max? +------------------------------------------------------------------------------------- + +Cassandra uses `Memory Mapped Files `__ (mmap) internally. That is, we +use the operating system's virtual memory system to map a number of on-disk files into the Cassandra process' address +space. This will "use" virtual memory; i.e. address space, and will be reported by tools like top accordingly, but on 64 +bit systems virtual address space is effectively unlimited so you should not worry about that. + +What matters from the perspective of "memory use" in the sense as it is normally meant, is the amount of data allocated +on brk() or mmap'd /dev/zero, which represent real memory used. The key issue is that for a mmap'd file, there is never +a need to retain the data resident in physical memory. Thus, whatever you do keep resident in physical memory is +essentially just there as a cache, in the same way as normal I/O will cause the kernel page cache to retain data that +you read/write. + +The difference between normal I/O and mmap() is that in the mmap() case the memory is actually mapped to the process, +thus affecting the virtual size as reported by top. The main argument for using mmap() instead of standard I/O is the +fact that reading entails just touching memory - in the case of the memory being resident, you just read it - you don't +even take a page fault (so no overhead in entering the kernel and doing a semi-context switch). This is covered in more +detail `here `__. + +.. _what-are-seeds: + +What are seeds? +--------------- + +Seeds are used during startup to discover the cluster. + +If you configure your nodes to refer some node as seed, nodes in your ring tend to send Gossip message to seeds more +often (also see the :ref:`section on gossip `) than to non-seeds. In other words, seeds are worked as hubs of +Gossip network. With seeds, each node can detect status changes of other nodes quickly. + +Seeds are also referred by new nodes on bootstrap to learn other nodes in ring. When you add a new node to ring, you +need to specify at least one live seed to contact. Once a node join the ring, it learns about the other nodes, so it +doesn't need seed on subsequent boot. + +You can make a seed a node at any time. There is nothing special about seed nodes. If you list the node in seed list it +is a seed + +Seeds do not auto bootstrap (i.e. if a node has itself in its seed list it will not automatically transfer data to itself) +If you want a node to do that, bootstrap it first and then add it to seeds later. If you have no data (new install) you +do not have to worry about bootstrap at all. + +Recommended usage of seeds: + +- pick two (or more) nodes per data center as seed nodes. +- sync the seed list to all your nodes + +.. _are-seeds-SPOF: + +Does single seed mean single point of failure? +---------------------------------------------- + +The ring can operate or boot without a seed; however, you will not be able to add new nodes to the cluster. It is +recommended to configure multiple seeds in production system. + +.. _cant-call-jmx-method: + +Why can't I call jmx method X on jconsole? +------------------------------------------ + +Some of JMX operations use array argument and as jconsole doesn't support array argument, those operations can't be +called with jconsole (the buttons are inactive for them). You need to write a JMX client to call such operations or need +array-capable JMX monitoring tool. + +.. _why-message-dropped: + +Why do I see "... messages dropped ..." in the logs? +---------------------------------------------------- + +This is a symptom of load shedding -- Cassandra defending itself against more requests than it can handle. + +Internode messages which are received by a node, but do not get not to be processed within their proper timeout (see +``read_request_timeout``, ``write_request_timeout``, ... in the :ref:`cassandra-yaml`), are dropped rather than +processed (since the as the coordinator node will no longer be waiting for a response). + +For writes, this means that the mutation was not applied to all replicas it was sent to. The inconsistency will be +repaired by read repair, hints or a manual repair. The write operation may also have timeouted as a result. + +For reads, this means a read request may not have completed. + +Load shedding is part of the Cassandra architecture, if this is a persistent issue it is generally a sign of an +overloaded node or cluster. + +.. _oom-map-failed: + +Cassandra dies with ``java.lang.OutOfMemoryError: Map failed`` +-------------------------------------------------------------- + +If Cassandra is dying **specifically** with the "Map failed" message, it means the OS is denying java the ability to +lock more memory. In linux, this typically means memlock is limited. Check ``/proc//limits`` to verify +this and raise it (eg, via ulimit in bash). You may also need to increase ``vm.max_map_count.`` Note that the debian +package handles this for you automatically. + + +.. _what-on-same-timestamp-update: + +What happens if two updates are made with the same timestamp? +------------------------------------------------------------- + +Updates must be commutative, since they may arrive in different orders on different replicas. As long as Cassandra has a +deterministic way to pick the winner (in a timestamp tie), the one selected is as valid as any other, and the specifics +should be treated as an implementation detail. That said, in the case of a timestamp tie, Cassandra follows two rules: +first, deletes take precedence over inserts/updates. Second, if there are two updates, the one with the lexically larger +value is selected. + +.. _why-bootstrapping-stream-error: + +Why bootstrapping a new node fails with a "Stream failed" error? +---------------------------------------------------------------- + +Two main possibilities: + +#. the GC may be creating long pauses disrupting the streaming process +#. compactions happening in the background hold streaming long enough that the TCP connection fails + +In the first case, regular GC tuning advices apply. In the second case, you need to set TCP keepalive to a lower value +(default is very high on Linux). Try to just run the following:: + + $ sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5 + +To make those settings permanent, add them to your ``/etc/sysctl.conf`` file. + +Note: `GCE `__'s firewall will always interrupt TCP connections that are inactive for +more than 10 min. Running the above command is highly recommended in that environment. + + + + + + + + + + + diff --git a/doc/source/getting_started/configuring.rst b/doc/source/getting_started/configuring.rst new file mode 100644 index 000000000000..e71eeedbe4ea --- /dev/null +++ b/doc/source/getting_started/configuring.rst @@ -0,0 +1,67 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Configuring Cassandra +--------------------- + +For running Cassandra on a single node, the default configuration file present at ``./conf/cassandra.yaml`` is enough, +you shouldn't need to change any configuration. However, when you deploy a cluster of nodes, or use clients that +are not on the same host, then there are some parameters that must be changed. + +The Cassandra configuration files can be found in the ``conf`` directory of tarballs. For packages, the configuration +files will be located in ``/etc/cassandra``. + +Main runtime properties +^^^^^^^^^^^^^^^^^^^^^^^ + +Most of configuration in Cassandra is done via yaml properties that can be set in ``cassandra.yaml``. At a minimum you +should consider setting the following properties: + +- ``cluster_name``: the name of your cluster. +- ``seeds``: a comma separated list of the IP addresses of your cluster seeds. +- ``storage_port``: you don't necessarily need to change this but make sure that there are no firewalls blocking this + port. +- ``listen_address``: the IP address of your node, this is what allows other nodes to communicate with this node so it + is important that you change it. Alternatively, you can set ``listen_interface`` to tell Cassandra which interface to + use, and consecutively which address to use. Set only one, not both. +- ``native_transport_port``: as for storage\_port, make sure this port is not blocked by firewalls as clients will + communicate with Cassandra on this port. + +Changing the location of directories +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following yaml properties control the location of directories: + +- ``data_file_directories``: one or more directories where data files are located. +- ``commitlog_directory``: the directory where commitlog files are located. +- ``saved_caches_directory``: the directory where saved caches are located. +- ``hints_directory``: the directory where hints are located. + +For performance reasons, if you have multiple disks, consider putting commitlog and data files on different disks. + +Environment variables +^^^^^^^^^^^^^^^^^^^^^ + +JVM-level settings such as heap size can be set in ``cassandra-env.sh``. You can add any additional JVM command line +argument to the ``JVM_OPTS`` environment variable; when Cassandra starts these arguments will be passed to the JVM. + +Logging +^^^^^^^ + +The logger in use is logback. You can change logging properties by editing ``logback.xml``. By default it will log at +INFO level into a file called ``system.log`` and at debug level into a file called ``debug.log``. When running in the +foreground, it will also log at INFO level to the console. + diff --git a/doc/source/getting_started/drivers.rst b/doc/source/getting_started/drivers.rst new file mode 100644 index 000000000000..9a2c1567abec --- /dev/null +++ b/doc/source/getting_started/drivers.rst @@ -0,0 +1,123 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. _client-drivers: + +Client drivers +-------------- + +Here are known Cassandra client drivers organized by language. Before choosing a driver, you should verify the Cassandra +version and functionality supported by a specific driver. + +Java +^^^^ + +- `Achilles `__ +- `Astyanax `__ +- `Casser `__ +- `Datastax Java driver `__ +- `Kundera `__ +- `PlayORM `__ + +Python +^^^^^^ + +- `Datastax Python driver `__ + +Ruby +^^^^ + +- `Datastax Ruby driver `__ + +C# / .NET +^^^^^^^^^ + +- `Cassandra Sharp `__ +- `Datastax C# driver `__ +- `Fluent Cassandra `__ + +Nodejs +^^^^^^ + +- `Datastax Nodejs driver `__ +- `Node-Cassandra-CQL `__ + +PHP +^^^ + +- `CQL \| PHP `__ +- `Datastax PHP driver `__ +- `PHP-Cassandra `__ +- `PHP Library for Cassandra `__ + +C++ +^^^ + +- `Datastax C++ driver `__ +- `libQTCassandra `__ + +Scala +^^^^^ + +- `Datastax Spark connector `__ +- `Phantom `__ +- `Quill `__ + +Clojure +^^^^^^^ + +- `Alia `__ +- `Cassaforte `__ +- `Hayt `__ + +Erlang +^^^^^^ + +- `CQerl `__ +- `Erlcass `__ + +Go +^^ + +- `CQLc `__ +- `Gocassa `__ +- `GoCQL `__ + +Haskell +^^^^^^^ + +- `Cassy `__ + +Rust +^^^^ + +- `Rust CQL `__ + +Perl +^^^^ + +- `Cassandra::Client and DBD::Cassandra `__ + +Elixir +^^^^^^ + +- `Xandra `__ +- `CQEx `__ + +Dart +^^^^ + +- `dart_cassandra_cql `__ diff --git a/doc/source/getting_started/index.rst b/doc/source/getting_started/index.rst new file mode 100644 index 000000000000..a699aee97daf --- /dev/null +++ b/doc/source/getting_started/index.rst @@ -0,0 +1,34 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: none + +Getting Started +=============== + +This section covers how to get started using Apache Cassandra and should be the first thing to read if you are new to +Cassandra. + +.. toctree:: + :maxdepth: 2 + + installing + configuring + querying + drivers + production + + diff --git a/doc/source/getting_started/installing.rst b/doc/source/getting_started/installing.rst new file mode 100644 index 000000000000..f3a22f21a30d --- /dev/null +++ b/doc/source/getting_started/installing.rst @@ -0,0 +1,324 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +.. highlight:: none + +Installing Cassandra +-------------------- + +These are the instructions for deploying the supported releases of Apache Cassandra on Linux servers. + +Cassandra runs on a wide array of Linux distributions including (but not limited to): + +- Ubuntu, most notably LTS releases 16.04 to 18.04 +- CentOS & RedHat Enterprise Linux (RHEL) including 6.6 to 7.7 +- Amazon Linux AMIs including 2016.09 through to Linux 2 +- Debian versions 8 & 9 +- SUSE Enterprise Linux 12 + +This is not an exhaustive list of operating system platforms, nor is it prescriptive. However users will be +well-advised to conduct exhaustive tests of their own particularly for less-popular distributions of Linux. +Deploying on older versions is not recommended unless you have previous experience with the older distribution +in a production environment. + +Prerequisites +^^^^^^^^^^^^^ + +- Install the latest version of Java 8, either the `Oracle Java Standard Edition 8 + `__ or `OpenJDK 8 `__. To + verify that you have the correct version of java installed, type ``java -version``. +- **NOTE**: *Experimental* support for Java 11 was added in Cassandra 4.0 (`CASSANDRA-9608 `__). + Running Cassandra on Java 11 is *experimental*. Do so at your own risk. For more information, see + `NEWS.txt `__. +- For using cqlsh, the latest version of `Python 2.7 `__ or Python 3.6+. To verify that you have + the correct version of Python installed, type ``python --version``. + +Choosing an installation method +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For most users, installing the binary tarball is the simplest choice. The tarball unpacks all its contents +into a single location with binaries and configuration files located in their own subdirectories. The most +obvious attribute of the tarball installation is it does not require ``root`` permissions and can be +installed on any Linux distribution. + +Packaged installations require ``root`` permissions. Install the RPM build on CentOS and RHEL-based +distributions if you want to install Cassandra using YUM. Install the Debian build on Ubuntu and other +Debian-based distributions if you want to install Cassandra using APT. Note that both the YUM and APT +methods required ``root`` permissions and will install the binaries and configuration files as the +``cassandra`` OS user. + +Installing the binary tarball +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. Verify the version of Java installed. For example: + +:: + + $ java -version + openjdk version "1.8.0_222" + OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) + OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) + +2. Download the binary tarball from one of the mirrors on the `Apache Cassandra Download `__ + site. For example, to download 4.0: + +:: + + $ curl -OL http://apache.mirror.digitalpacific.com.au/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz + +NOTE: The mirrors only host the latest versions of each major supported release. To download an earlier +version of Cassandra, visit the `Apache Archives `__. + +3. OPTIONAL: Verify the integrity of the downloaded tarball using one of the methods `here `__. + For example, to verify the hash of the downloaded file using GPG: + +:: + + $ gpg --print-md SHA256 apache-cassandra-4.0.0-bin.tar.gz + apache-cassandra-4.0.0-bin.tar.gz: 28757DDE 589F7041 0F9A6A95 C39EE7E6 + CDE63440 E2B06B91 AE6B2006 14FA364D + +Compare the signature with the SHA256 file from the Downloads site: + +:: + + $ curl -L https://downloads.apache.org/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz.sha256 + 28757dde589f70410f9a6a95c39ee7e6cde63440e2b06b91ae6b200614fa364d + +4. Unpack the tarball: + +:: + + $ tar xzvf apache-cassandra-4.0.0-bin.tar.gz + +The files will be extracted to the ``apache-cassandra-4.0.0/`` directory. This is the tarball installation +location. + +5. Located in the tarball installation location are the directories for the scripts, binaries, utilities, configuration, data and log files: + +:: + + / + bin/ + conf/ + data/ + doc/ + interface/ + javadoc/ + lib/ + logs/ + pylib/ + tools/ + +For information on how to configure your installation, see +`Configuring Cassandra `__. + +6. Start Cassandra: + +:: + + $ cd apache-cassandra-4.0.0/ + $ bin/cassandra + +NOTE: This will run Cassandra as the authenticated Linux user. + +You can monitor the progress of the startup with: + +:: + + $ tail -f logs/system.log + +Cassandra is ready when you see an entry like this in the ``system.log``: + +:: + + INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... + +7. Check the status of Cassandra: + +:: + + $ bin/nodetool status + +The status column in the output should report UN which stands for "Up/Normal". + +Alternatively, connect to the database with: + +:: + + $ bin/cqlsh + +Installing the Debian packages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. Verify the version of Java installed. For example: + +:: + + $ java -version + openjdk version "1.8.0_222" + OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10) + OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) + +2. Add the Apache repository of Cassandra to the file ``cassandra.sources.list``. The latest major version + is 4.0 and the corresponding distribution name is ``40x`` (with an "x" as the suffix). + For older releases use ``311x`` for C* 3.11 series, ``30x`` for 3.0, ``22x`` for 2.2 and ``21x`` for 2.1. + For example, to add the repository for version 4.0 (``40x``): + +:: + + $ echo "deb http://www.apache.org/dist/cassandra/debian 40x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list + deb http://www.apache.org/dist/cassandra/debian 40x main + +3. Add the Apache Cassandra repository keys to the list of trusted keys on the server: + +:: + + $ curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add - + % Total % Received % Xferd Average Speed Time Time Time Current + Dload Upload Total Spent Left Speed + 100 266k 100 266k 0 0 320k 0 --:--:-- --:--:-- --:--:-- 320k + OK + +4. Update the package index from sources: + +:: + + $ sudo apt-get update + +5. Install Cassandra with APT: + +:: + + $ sudo apt-get install cassandra + + +NOTE: A new Linux user ``cassandra`` will get created as part of the installation. The Cassandra service +will also be run as this user. + +6. The Cassandra service gets started automatically after installation. Monitor the progress of + the startup with: + +:: + + $ tail -f /var/log/cassandra/system.log + +Cassandra is ready when you see an entry like this in the ``system.log``: + +:: + + INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... + +NOTE: For information on how to configure your installation, see +`Configuring Cassandra `__. + +7. Check the status of Cassandra: + +:: + + $ nodetool status + +The status column in the output should report ``UN`` which stands for "Up/Normal". + +Alternatively, connect to the database with: + +:: + + $ cqlsh + +Installing the RPM packages +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. Verify the version of Java installed. For example: + +:: + + $ java -version + openjdk version "1.8.0_222" + OpenJDK Runtime Environment (build 1.8.0_232-b09) + OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode) + +2. Add the Apache repository of Cassandra to the file ``/etc/yum.repos.d/cassandra.repo`` (as the ``root`` + user). The latest major version is 4.0 and the corresponding distribution name is ``40x`` (with an "x" as the suffix). + For older releases use ``311x`` for C* 3.11 series, ``30x`` for 3.0, ``22x`` for 2.2 and ``21x`` for 2.1. + For example, to add the repository for version 4.0 (``40x``): + +:: + + [cassandra] + name=Apache Cassandra + baseurl=https://downloads.apache.org/cassandra/redhat/40x/ + gpgcheck=1 + repo_gpgcheck=1 + gpgkey=https://downloads.apache.org/cassandra/KEYS + +3. Update the package index from sources: + +:: + + $ sudo yum update + +4. Install Cassandra with YUM: + +:: + + $ sudo yum install cassandra + + +NOTE: A new Linux user ``cassandra`` will get created as part of the installation. The Cassandra service +will also be run as this user. + +5. Start the Cassandra service: + +:: + + $ sudo service cassandra start + +6. Monitor the progress of the startup with: + +:: + + $ tail -f /var/log/cassandra/system.log + +Cassandra is ready when you see an entry like this in the ``system.log``: + +:: + + INFO [main] 2019-12-17 03:03:37,526 Server.java:156 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)... + +NOTE: For information on how to configure your installation, see +`Configuring Cassandra `__. + +7. Check the status of Cassandra: + +:: + + $ nodetool status + +The status column in the output should report ``UN`` which stands for "Up/Normal". + +Alternatively, connect to the database with: + +:: + + $ cqlsh + +Further installation info +^^^^^^^^^^^^^^^^^^^^^^^^^ + +For help with installation issues, see the `Troubleshooting `__ section. + + diff --git a/doc/source/getting_started/production.rst b/doc/source/getting_started/production.rst new file mode 100644 index 000000000000..fe0c4a591f27 --- /dev/null +++ b/doc/source/getting_started/production.rst @@ -0,0 +1,156 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Production Recommendations +---------------------------- + +The ``cassandra.yaml`` and ``jvm.options`` files have a number of notes and recommendations for production usage. This page +expands on some of the notes in these files with additional information. + +Tokens +^^^^^^^ + +Using more than 1 token (referred to as vnodes) allows for more flexible expansion and more streaming peers when +bootstrapping new nodes into the cluster. This can limit the negative impact of streaming (I/O and CPU overhead) +as well as allow for incremental cluster expansion. + +As a tradeoff, more tokens will lead to sharing data with more peers, which can result in decreased availability. To learn more about this we +recommend reading `this paper `_. + +The number of tokens can be changed using the following setting: + +``num_tokens: 16`` + + +Here are the most common token counts with a brief explanation of when and why you would use each one. + ++-------------+---------------------------------------------------------------------------------------------------+ +| Token Count | Description | ++=============+===================================================================================================+ +| 1 | Maximum availablility, maximum cluster size, fewest peers, | +| | but inflexible expansion. Must always | +| | double size of cluster to expand and remain balanced. | ++-------------+---------------------------------------------------------------------------------------------------+ +| 4 | A healthy mix of elasticity and availability. Recommended for clusters which will eventually | +| | reach over 30 nodes. Requires adding approximately 20% more nodes to remain balanced. | +| | Shrinking a cluster may result in cluster imbalance. | ++-------------+---------------------------------------------------------------------------------------------------+ +| 16 | Best for heavily elastic clusters which expand and shrink regularly, but may have issues | +| | availability with larger clusters. Not recommended for clusters over 50 nodes. | ++-------------+---------------------------------------------------------------------------------------------------+ + + +In addition to setting the token count, it's extremely important that ``allocate_tokens_for_local_replication_factor`` be +set as well, to ensure even token allocation. + +.. _read-ahead: + +Read Ahead +^^^^^^^^^^^ + +Read ahead is an operating system feature that attempts to keep as much data loaded in the page cache as possible. The +goal is to decrease latency by using additional throughput on reads where the latency penalty is high due to seek times +on spinning disks. By leveraging read ahead, the OS can pull additional data into memory without the cost of additional +seeks. This works well when available RAM is greater than the size of the hot dataset, but can be problematic when the +hot dataset is much larger than available RAM. The benefit of read ahead decreases as the size of your hot dataset gets +bigger in proportion to available memory. + +With small partitions (usually tables with no partition key, but not limited to this case) and solid state drives, read +ahead can increase disk usage without any of the latency benefits, and in some cases can result in up to +a 5x latency and throughput performance penalty. Read heavy, key/value tables with small (under 1KB) rows are especially +prone to this problem. + +We recommend the following read ahead settings: + ++----------------+-------------------------+ +| Hardware | Initial Recommendation | ++================+=========================+ +|Spinning Disks | 64KB | ++----------------+-------------------------+ +|SSD | 4KB | ++----------------+-------------------------+ + +Read ahead can be adjusted on Linux systems by using the `blockdev` tool. + +For example, we can set read ahead of ``/dev/sda1` to 4KB by doing the following:: + + blockdev --setra 8 /dev/sda1 + +**Note**: blockdev accepts the number of 512 byte sectors to read ahead. The argument of 8 above is equivilent to 4KB. + +Since each system is different, use the above recommendations as a starting point and tuning based on your SLA and +throughput requirements. To understand how read ahead impacts disk resource usage we recommend carefully reading through the +:ref:`troubleshooting ` portion of the documentation. + + +Compression +^^^^^^^^^^^^ + +Compressed data is stored by compressing fixed size byte buffers and writing the data to disk. The buffer size is +determined by the ``chunk_length_in_kb`` element in the compression map of the schema settings. + +The default setting is 16KB starting with Cassandra 4.0. + +Since the entire compressed buffer must be read off disk, using too high of a compression chunk length can lead to +significant overhead when reading small records. Combined with the default read ahead setting this can result in massive +read amplification for certain workloads. + +LZ4Compressor is the default and recommended compression algorithm. + +There is additional information on this topic on `The Last Pickle Blog `_. + +Compaction +^^^^^^^^^^^^ + +There are different :ref:`compaction ` strategies available for different workloads. +We recommend reading up on the different strategies to understand which is the best for your environment. Different tables +may (and frequently do) use different compaction strategies on the same cluster. + +Encryption +^^^^^^^^^^^ + +It is significantly easier to set up peer to peer encryption and client server encryption when setting up your production +cluster as opposed to setting it up once the cluster is already serving production traffic. If you are planning on using network encryption +eventually (in any form), we recommend setting it up now. Changing these configurations down the line is not impossible, +but mistakes can result in downtime or data loss. + +Ensure Keyspaces are Created with NetworkTopologyStrategy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Production clusters should never use SimpleStrategy. Production keyspaces should use the NetworkTopologyStrategy (NTS). + +For example:: + + create KEYSPACE mykeyspace WITH replication = + {'class': 'NetworkTopologyStrategy', 'datacenter1': 3}; + +NetworkTopologyStrategy allows Cassandra to take advantage of multiple racks and data centers. + +Configure Racks and Snitch +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Correctly configuring or changing racks after a cluster has been provisioned is an unsupported process**. Migrating from +a single rack to multiple racks is also unsupported and can result in data loss. + +Using ``GossipingPropertyFileSnitch`` is the most flexible solution for on premise or mixed cloud environments. ``Ec2Snitch`` +is reliable for AWS EC2 only environments. + + + + + + + diff --git a/doc/source/getting_started/querying.rst b/doc/source/getting_started/querying.rst new file mode 100644 index 000000000000..55b162bb43fc --- /dev/null +++ b/doc/source/getting_started/querying.rst @@ -0,0 +1,52 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Inserting and querying +---------------------- + +The API to Cassandra is :ref:`CQL `, the Cassandra Query Language. To use CQL, you will need to connect to the +cluster, which can be done: + +- either using cqlsh, +- or through a client driver for Cassandra. + +CQLSH +^^^^^ + +cqlsh is a command line shell for interacting with Cassandra through CQL. It is shipped with every Cassandra package, +and can be found in the bin/ directory alongside the cassandra executable. It connects to the single node specified on +the command line. For example:: + + $ bin/cqlsh localhost + Connected to Test Cluster at localhost:9042. + [cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4] + Use HELP for help. + cqlsh> SELECT cluster_name, listen_address FROM system.local; + + cluster_name | listen_address + --------------+---------------- + Test Cluster | 127.0.0.1 + + (1 rows) + cqlsh> + +See the :ref:`cqlsh section ` for full documentation. + +Client drivers +^^^^^^^^^^^^^^ + +A lot of client drivers are provided by the Community and a list of known drivers is provided in :ref:`the next section +`. You should refer to the documentation of each drivers for more information on how to use them. diff --git a/doc/source/index.rst b/doc/source/index.rst new file mode 100644 index 000000000000..302f8e7faa6e --- /dev/null +++ b/doc/source/index.rst @@ -0,0 +1,43 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Welcome to Apache Cassandra's documentation! +============================================ + +This is the official documentation for `Apache Cassandra `__ |version|. If you would like +to contribute to this documentation, you are welcome to do so by submitting your contribution like any other patch +following `these instructions `__. + +Contents: + +.. toctree:: + :maxdepth: 2 + + getting_started/index + new/index + architecture/index + cql/index + data_modeling/index + configuration/index + operating/index + tools/index + troubleshooting/index + development/index + faq/index + plugins/index + + bugs + contactus diff --git a/doc/source/new/Figure_1.jpg b/doc/source/new/Figure_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ccaec67b84e7e4ca1e587ecd63d390a5e5c1ac15 GIT binary patch literal 27827 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 literal 0 HcmV?d00001 diff --git a/doc/source/new/Figure_2.jpg b/doc/source/new/Figure_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..099e15fb893a80770298b468ccf30f186146a020 GIT binary patch literal 36650 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 S_g@Lo{*9-}UtI8mq5lD1{1+Yo literal 0 HcmV?d00001 diff --git a/doc/source/new/auditlogging.rst b/doc/source/new/auditlogging.rst new file mode 100644 index 000000000000..0842810823fe --- /dev/null +++ b/doc/source/new/auditlogging.rst @@ -0,0 +1,461 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Audit Logging +------------- + +Audit Logging is a new feature in Apache Cassandra 4.0 (`CASSANDRA-12151 +`_). All database activity is logged to a directory in the local filesystem and the audit log files are rolled periodically. All database operations are monitored and recorded. Audit logs are stored in local directory files instead of the database itself as it provides several benefits, some of which are: + +- No additional database capacity is needed to store audit logs +- No query tool is required while storing the audit logs in the database would require a query tool +- Latency of database operations is not affected; no performance impact +- It is easier to implement file based logging than database based logging + +What does Audit Logging Log? +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Audit logging logs: + +1. All authentication which includes successful and failed login attempts +2. All database command requests to CQL. Both failed and successful CQL is logged + +More specifically an audit log entry could be one of two types: + +a) CQL Audit Log Entry Type or +b) Common Audit Log Entry Type + +Each of these types comprises of several database operations. The CQL Audit Log Entry Type could be one of the following; the category of the CQL audit log entry type is listed in parentheses. + +1. SELECT(QUERY), +2. UPDATE(DML), +3. DELETE(DML), +4. TRUNCATE(DDL), +5. CREATE_KEYSPACE(DDL), +6. ALTER_KEYSPACE(DDL), +7. DROP_KEYSPACE(DDL), +8. CREATE_TABLE(DDL), +9. DROP_TABLE(DDL), +10. PREPARE_STATEMENT(PREPARE), +11. DROP_TRIGGER(DDL), +12. LIST_USERS(DCL), +13. CREATE_INDEX(DDL), +14. DROP_INDEX(DDL), +15. GRANT(DCL), +16. REVOKE(DCL), +17. CREATE_TYPE(DDL), +18. DROP_AGGREGATE(DDL), +19. ALTER_VIEW(DDL), +20. CREATE_VIEW(DDL), +21. DROP_ROLE(DCL), +22. CREATE_FUNCTION(DDL), +23. ALTER_TABLE(DDL), +24. BATCH(DML), +25. CREATE_AGGREGATE(DDL), +26. DROP_VIEW(DDL), +27. DROP_TYPE(DDL), +28. DROP_FUNCTION(DDL), +29. ALTER_ROLE(DCL), +30. CREATE_TRIGGER(DDL), +31. LIST_ROLES(DCL), +32. LIST_PERMISSIONS(DCL), +33. ALTER_TYPE(DDL), +34. CREATE_ROLE(DCL), +35. USE_KEYSPACE (OTHER). + +The Common Audit Log Entry Type could be one of the following; the category of the Common audit log entry type is listed in parentheses. + +1. REQUEST_FAILURE(ERROR), +2. LOGIN_ERROR(AUTH), +3. UNAUTHORIZED_ATTEMPT(AUTH), +4. LOGIN_SUCCESS (AUTH). + +What Audit Logging does not Log? +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Audit logging does not log: + +1. Configuration changes made in ``cassandra.yaml`` +2. Nodetool Commands + +Audit Logging is Flexible and Configurable +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Audit logging is flexible and configurable in ``cassandra.yaml`` as follows: + +- Keyspaces and tables to be monitored and audited may be specified. +- Users to be included/excluded may be specified. By default all users are audit logged. +- Categories of operations to audit or exclude may be specified. +- The frequency at which to roll the log files may be specified. Default frequency is hourly. + +Configuring Audit Logging +^^^^^^^^^^^^^^^^^^^^^^^^^ +Audit Logging is configured on each node separately. Audit Logging is configured in ``cassandra.yaml`` in the ``audit_logging_options`` setting. +The settings may be same/different on each node. + +Enabling Audit Logging +********************** +Audit logging is enabled by setting the ``enabled`` option to ``true`` in the ``audit_logging_options`` setting. + +:: + + audit_logging_options: + enabled: true + +Setting the Logger +****************** +The audit logger is set with the ``logger`` option. + +:: + + logger: + - class_name: BinAuditLogger + +Two types of audit loggers are supported: ``FileAuditLogger`` and ``BinAuditLogger``. +``BinAuditLogger`` is the default setting. The ``BinAuditLogger`` is an efficient way to log events to file in a binary format. + +``FileAuditLogger`` is synchronous, file-based audit logger; just uses the standard logging mechanism. ``FileAuditLogger`` logs events to ``audit/audit.log`` file using ``slf4j`` logger. + +The ``NoOpAuditLogger`` is a No-Op implementation of the audit logger to be used as a default audit logger when audit logging is disabled. + +It is possible to configure your custom logger implementation by injecting a map of property keys and their respective values. Default `IAuditLogger` +implementations shipped with Cassandra do not react on these properties but your custom logger might. They would be present as +a parameter of logger constructor (as `Map`). In ``cassandra.yaml`` file, you may configure it like this: + +:: + + logger: + - class_name: MyCustomAuditLogger + parameters: + - key1: value1 + key2: value2 + +When it comes to configuring these parameters, you can use respective ``enableAuditLog`` method in ``StorageServiceMBean``. +There are two methods of same name with different signatures. The first one does not accept a map where your parameters would be. This method +is used primarily e.g. from JConsole or similar tooling. JConsole can not accept a map to be sent over JMX so in order to be able to enable it +from there, even without any parameters, use this method. ``BinAuditLogger`` does not need any parameters to run with so invoking this method is fine. +The second one does accept a map with your custom parameters so you can pass them programmatically. ``enableauditlog`` command of ``nodetool`` uses +the first ``enableAuditLog`` method mentioned. Hence, currently, there is not a way how to pass parameters to your custom audit logger from ``nodetool``. + +Setting the Audit Logs Directory +******************************** +The audit logs directory is set with the ``audit_logs_dir`` option. A new directory is not created automatically and an existing directory must be set. Audit Logs directory can be configured using ``cassandra.logdir.audit`` system property or default is set to ``cassandra.logdir + /audit/``. A user created directory may be set. As an example, create a directory for the audit logs and set its permissions. + +:: + + sudo mkdir –p /cassandra/audit/logs/hourly + sudo chmod -R 777 /cassandra/audit/logs/hourly + +Set the directory for the audit logs directory using the ``audit_logs_dir`` option. + +:: + + audit_logs_dir: "/cassandra/audit/logs/hourly" + + +Setting Keyspaces to Audit +************************** +Set the keyspaces to include with the ``included_keyspaces`` option and the keyspaces to exclude with the ``excluded_keyspaces`` option. By default all keyspaces are included. By default, ``system``, ``system_schema`` and ``system_virtual_schema`` are excluded. + +:: + + # included_keyspaces: + # excluded_keyspaces: system, system_schema, system_virtual_schema + +Setting Categories to Audit +*************************** + +The categories of database operations to be included are specified with the ``included_categories`` option as a comma separated list. By default all supported categories are included. The categories of database operations to be excluded are specified with ``excluded_categories`` option as a comma separated list. By default no category is excluded. + +:: + + # included_categories: + # excluded_categories: + +The supported categories for audit log are: + +1. QUERY +2. DML +3. DDL +4. DCL +5. OTHER +6. AUTH +7. ERROR +8. PREPARE + +Setting Users to Audit +********************** + +Users to audit log are set with the ``included_users`` and ``excluded_users`` options. The ``included_users`` option specifies a comma separated list of users to include explicitly and by default all users are included. The ``excluded_users`` option specifies a comma separated list of users to exclude explicitly and by default no user is excluded. + +:: + + # included_users: + # excluded_users: + +Setting the Roll Frequency +*************************** +The ``roll_cycle`` option sets the frequency at which the audit log file is rolled. Supported values are ``MINUTELY``, ``HOURLY``, and ``DAILY``. Default value is ``HOURLY``, which implies that after every hour a new audit log file is created. + +:: + + roll_cycle: HOURLY + +An audit log file could get rolled for other reasons as well such as a log file reaches the configured size threshold. + +Setting Archiving Options +************************* + +The archiving options are for archiving the rolled audit logs. The ``archive`` command to use is set with the ``archive_command`` option and the ``max_archive_retries`` sets the maximum # of tries of failed archive commands. + +:: + + # archive_command: + # max_archive_retries: 10 + +Default archive command is ``"/path/to/script.sh %path"`` where ``%path`` is replaced with the file being rolled: + +Other Settings +*************** + +The other audit logs settings are as follows. + +:: + + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + +The ``block`` option specifies whether the audit logging should block if the logging falls behind or should drop log records. + +The ``max_queue_weight`` option sets the maximum weight of in memory queue for records waiting to be written to the file before blocking or dropping. + +The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest. + +Using Nodetool to Enable Audit Logging +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The ``nodetool enableauditlog`` command may be used to enable audit logs and it overrides the settings in ``cassandra.yaml``. The ``nodetool enableauditlog`` command syntax is as follows. + +:: + + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enableauditlog + [--excluded-categories ] + [--excluded-keyspaces ] + [--excluded-users ] + [--included-categories ] + [--included-keyspaces ] + [--included-users ] [--logger ] + +OPTIONS + --excluded-categories + Comma separated list of Audit Log Categories to be excluded for + audit log. If not set the value from cassandra.yaml will be used + + --excluded-keyspaces + Comma separated list of keyspaces to be excluded for audit log. If + not set the value from cassandra.yaml will be used + + --excluded-users + Comma separated list of users to be excluded for audit log. If not + set the value from cassandra.yaml will be used + + -h , --host + Node hostname or ip address + + --included-categories + Comma separated list of Audit Log Categories to be included for + audit log. If not set the value from cassandra.yaml will be used + + --included-keyspaces + Comma separated list of keyspaces to be included for audit log. If + not set the value from cassandra.yaml will be used + + --included-users + Comma separated list of users to be included for audit log. If not + set the value from cassandra.yaml will be used + + --logger + Logger name to be used for AuditLogging. Default BinAuditLogger. If + not set the value from cassandra.yaml will be used + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + + +The ``nodetool disableauditlog`` command disables audit log. The command syntax is as follows. + +:: + + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] disableauditlog + +OPTIONS + -h , --host + Node hostname or ip address + + -p , --port + Remote jmx agent port number + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + -u , --username + Remote jmx agent username + +Viewing the Audit Logs +^^^^^^^^^^^^^^^^^^^^^^ +An audit log event comprises of a keyspace that is being audited, the operation that is being logged, the scope and the user. An audit log entry comprises of the following attributes concatenated with a "|". + +:: + + type (AuditLogEntryType): Type of request + source (InetAddressAndPort): Source IP Address from which request originated + user (String): User name + timestamp (long ): Timestamp of the request + batch (UUID): Batch of request + keyspace (String): Keyspace on which request is made + scope (String): Scope of request such as Table/Function/Aggregate name + operation (String): Database operation such as CQL command + options (QueryOptions): CQL Query options + state (QueryState): State related to a given query + +Some of these attributes may not be applicable to a given request and not all of these options must be set. + +An Audit Logging Demo +^^^^^^^^^^^^^^^^^^^^^^ +To demonstrate audit logging enable and configure audit logs with following settings. + +:: + + audit_logging_options: + enabled: true + logger: + - class_name: BinAuditLogger + audit_logs_dir: "/cassandra/audit/logs/hourly" + # included_keyspaces: + # excluded_keyspaces: system, system_schema, system_virtual_schema + # included_categories: + # excluded_categories: + # included_users: + # excluded_users: + roll_cycle: HOURLY + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file being rolled: + # archive_command: + # max_archive_retries: 10 + +Create the audit log directory ``/cassandra/audit/logs/hourly`` and set its permissions as discussed earlier. Run some CQL commands such as create a keyspace, create a table and query a table. Any supported CQL commands may be run as discussed in section **What does Audit Logging Log?**. Change directory (with ``cd`` command) to the audit logs directory. + +:: + + cd /cassandra/audit/logs/hourly + +List the files/directories and some ``.cq4`` files should get listed. These are the audit logs files. + +:: + + [ec2-user@ip-10-0-2-238 hourly]$ ls -l + total 28 + -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-02.cq4 + -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 03:01 20190802-03.cq4 + -rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 03:01 directory-listing.cq4t + +The ``auditlogviewer`` tool is used to dump audit logs. Run the ``auditlogviewer`` tool. Audit log files directory path is a required argument. The output should be similar to the following output. + +:: + + [ec2-user@ip-10-0-2-238 hourly]$ auditlogviewer /cassandra/audit/logs/hourly + WARN 03:12:11,124 Using Pauser.sleepy() as not enough processors, have 2, needs 8+ + Type: AuditLog + LogMessage: + user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427328|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE AuditLogKeyspace; + Type: AuditLog + LogMessage: + user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711427329|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE "auditlogkeyspace" + Type: AuditLog + LogMessage: + user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564711446279|type :SELECT|category:QUERY|ks:auditlogkeyspace|scope:t|operation:SELECT * FROM t; + Type: AuditLog + LogMessage: + user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564713878834|type :DROP_TABLE|category:DDL|ks:auditlogkeyspace|scope:t|operation:DROP TABLE IF EXISTS + AuditLogKeyspace.t; + Type: AuditLog + LogMessage: + user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42382|timestamp:1564714618360|ty + pe:REQUEST_FAILURE|category:ERROR|operation:CREATE KEYSPACE AuditLogKeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};; Cannot add + existing keyspace "auditlogkeyspace" + Type: AuditLog + LogMessage: + user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714690968|type :DROP_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:DROP KEYSPACE AuditLogKeyspace; + Type: AuditLog + LogMessage: + user:anonymous|host:10.0.2.238:7000|source:/3.91.56.164|port:42406|timestamp:1564714708329|ty pe:CREATE_KEYSPACE|category:DDL|ks:auditlogkeyspace|operation:CREATE KEYSPACE + AuditLogKeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + Type: AuditLog + LogMessage: + user:anonymous|host:10.0.2.238:7000|source:/127.0.0.1|port:46264|timestamp:1564714870678|type :USE_KEYSPACE|category:OTHER|ks:auditlogkeyspace|operation:USE auditlogkeyspace; + [ec2-user@ip-10-0-2-238 hourly]$ + + +The ``auditlogviewer`` tool usage syntax is as follows. + +:: + + ./auditlogviewer + Audit log files directory path is a required argument. + usage: auditlogviewer [...] [options] + -- + View the audit log contents in human readable format + -- + Options are: + -f,--follow Upon reaching the end of the log continue indefinitely + waiting for more records + -h,--help display this help message + -r,--roll_cycle How often to roll the log file was rolled. May be + necessary for Chronicle to correctly parse file names. (MINUTELY, HOURLY, + DAILY). Default HOURLY. + +Diagnostic events for user audit logging +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Any native transport enabled client is able to subscribe to diagnostic events that are raised around authentication and CQL operations. These events can then be consumed and used by external tools to implement a Cassandra user auditing solution. + diff --git a/doc/source/new/fqllogging.rst b/doc/source/new/fqllogging.rst new file mode 100644 index 000000000000..881f39fa893d --- /dev/null +++ b/doc/source/new/fqllogging.rst @@ -0,0 +1,689 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Full Query Logging +------------------ + +Apache Cassandra 4.0 adds a new feature to support a means of logging all queries as they were invoked (`CASSANDRA-13983 +`_). For correctness testing it's useful to be able to capture production traffic so that it can be replayed against both the old and new versions of Cassandra while comparing the results. + +Cassandra 4.0 includes an implementation of a full query logging (FQL) that uses chronicle-queue to implement a rotating log of queries. Some of the features of FQL are: + +- Single thread asynchronously writes log entries to disk to reduce impact on query latency +- Heap memory usage bounded by a weighted queue with configurable maximum weight sitting in front of logging thread +- If the weighted queue is full producers can be blocked or samples can be dropped +- Disk utilization is bounded by deleting old log segments once a configurable size is reached +- The on disk serialization uses a flexible schema binary format (chronicle-wire) making it easy to skip unrecognized fields, add new ones, and omit old ones. +- Can be enabled and configured via JMX, disabled, and reset (delete on disk data), logging path is configurable via both JMX and YAML +- Introduce new ``fqltool`` in ``/bin`` that currently implements ``Dump`` which can dump in a readable format full query logs as well as follow active full query logs. FQL ``Replay`` and ``Compare`` are also available. + +Cassandra 4.0 has a binary full query log based on Chronicle Queue that can be controlled using ``nodetool enablefullquerylog``, ``disablefullquerylog``, and ``resetfullquerylog``. The log contains all queries invoked, approximate time they were invoked, any parameters necessary to bind wildcard values, and all query options. A readable version of the log can be dumped or tailed using the new ``bin/fqltool`` utility. The full query log is designed to be safe to use in production and limits utilization of heap memory and disk space with limits you can specify when enabling the log. + +Objective +^^^^^^^^^^ +Full Query Logging logs all requests to the CQL interface. The full query logs could be used for debugging, performance benchmarking, testing and auditing CQL queries. The audit logs also include CQL requests but full query logging is dedicated to CQL requests only with features such as FQL Replay and FQL Compare that are not available in audit logging. + +Full Query Logger +^^^^^^^^^^^^^^^^^^ +The Full Query Logger is a logger that logs entire query contents after the query finishes. FQL only logs the queries that successfully complete. The other queries (e.g. timed out, failed) are not to be logged. Queries are logged in one of two modes: single query or batch of queries. The log for an invocation of a batch of queries includes the following attributes: + +:: + + type - The type of the batch + queries - CQL text of the queries + values - Values to bind to as parameters for the queries + queryOptions - Options associated with the query invocation + queryState - Timestamp state associated with the query invocation + batchTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked + +The log for single CQL query includes the following attributes: + +:: + + query - CQL query text + queryOptions - Options associated with the query invocation + queryState - Timestamp state associated with the query invocation + queryTimeMillis - Approximate time in milliseconds since the epoch since the batch was invoked + +Full query logging is backed up by ``BinLog``. BinLog is a quick and dirty binary log. Its goal is good enough performance, predictable footprint, simplicity in terms of implementation and configuration and most importantly minimal impact on producers of log records. Performance safety is accomplished by feeding items to the binary log using a weighted queue and dropping records if the binary log falls sufficiently far behind. Simplicity and good enough performance is achieved by using a single log writing thread as well as Chronicle Queue to handle writing the log, making it available for readers, as well as log rolling. + +Weighted queue is a wrapper around any blocking queue that turns it into a blocking weighted queue. The queue will weigh each element being added and removed. Adding to the queue is blocked if adding would violate the weight bound. If an element weighs in at larger than the capacity of the queue then exactly one such element will be allowed into the queue at a time. If the weight of an object changes after it is added it could create issues. Checking weight should be cheap so memorize expensive to compute weights. If weight throws that can also result in leaked permits so it's always a good idea to memorize weight so it doesn't throw. In the interests of not writing unit tests for methods no one uses there is a lot of ``UnsupportedOperationException``. If you need them then add them and add proper unit tests to ``WeightedQueueTest``. "Good" tests. 100% coverage including exception paths and resource leaks. + + +The FQL tracks information about store files: + +- Store files as they are added and their storage impact. Delete them if over storage limit. +- The files in the chronicle queue that have already rolled +- The number of bytes in store files that have already rolled + +FQL logger sequence is as follows: + +1. Start the consumer thread that writes log records. Can only be done once. +2. Offer a record to the log. If the in memory queue is full the record will be dropped and offer will return false. +3. Put a record into the log. If the in memory queue is full the putting thread will be blocked until there is space or it is interrupted. +4. Clean up the buffers on thread exit, finalization will check again once this is no longer reachable ensuring there are no stragglers in the queue. +5. Stop the consumer thread that writes log records. Can be called multiple times. + +Next, we shall demonstrate full query logging with an example. + + +Configuring Full Query Logging +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Full Query Logger default options are configured on a per node basis in ``cassandra.yaml`` with following configuration property. + +:: + + full_query_logging_options: + +As an example setup create a three node Cassandra 4.0 cluster. The ``nodetool status`` command lists the nodes in the cluster. + +:: + + [ec2-user@ip-10-0-2-238 ~]$ nodetool status + Datacenter: us-east-1 + ===================== + Status=Up/Down + |/ State=Normal/Leaving/Joining/Moving + -- AddressLoad Tokens Owns (effective) Host ID Rack + UN 10.0.1.115 442.42 KiB 25632.6% b64cb32a-b32a-46b4-9eeb-e123fa8fc287 us-east-1b + UN 10.0.3.206 559.52 KiB 25631.9% 74863177-684b-45f4-99f7-d1006625dc9e us-east-1d + UN 10.0.2.238 587.87 KiB 25635.5% 4dcdadd2-41f9-4f34-9892-1f20868b27c7 us-east-1c + + +In subsequent sub-sections we shall discuss enabling and configuring full query logging. + +Setting the FQL Directory +************************* + +A dedicated directory path must be provided to write full query log data to when the full query log is enabled. The directory for FQL must exist, and have permissions set. The full query log will recursively delete the contents of this path at times. It is recommended not to place links in this directory to other sections of the filesystem. The ``full_query_log_dir`` property in ``cassandra.yaml`` is pre-configured. + +:: + + full_query_log_dir: /tmp/cassandrafullquerylog + +The ``log_dir`` option may be used to configure the FQL directory if the ``full_query_log_dir`` is not set. + +:: + + full_query_logging_options: + # log_dir: + +Create the FQL directory if it does not exist and set its permissions. + +:: + + sudo mkdir -p /tmp/cassandrafullquerylog + sudo chmod -R 777 /tmp/cassandrafullquerylog + +Setting the Roll Cycle +********************** + +The ``roll_cycle`` option sets how often to roll FQL log segments so they can potentially be reclaimed. Supported values are ``MINUTELY``, ``HOURLY`` and ``DAILY``. Default setting is ``HOURLY``. + +:: + + roll_cycle: HOURLY + +Setting Other Options +********************* + +The ``block`` option specifies whether the FQL should block if the FQL falls behind or should drop log records. Default value of ``block`` is ``true``. The ``max_queue_weight`` option sets the maximum weight of in memory queue for records waiting to be written to the file before blocking or dropping. The ``max_log_size`` option sets the maximum size of the rolled files to retain on disk before deleting the oldest file. The ``archive_command`` option sets the archive command to execute on rolled log files. The ``max_archive_retries`` option sets the max number of retries of failed archive commands. + +:: + + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file + being rolled: + # archive_command: + # max_archive_retries: 10 + +The ``max_queue_weight`` must be > 0. Similarly ``max_log_size`` must be > 0. An example full query logging options is as follows. + +:: + + full_query_log_dir: /tmp/cassandrafullquerylog + + # default options for full query logging - these can be overridden from command line when + executing + # nodetool enablefullquerylog + # nodetool enablefullquerylog + #full_query_logging_options: + # log_dir: + roll_cycle: HOURLY + # block: true + # max_queue_weight: 268435456 # 256 MiB + # max_log_size: 17179869184 # 16 GiB + ## archive command is "/path/to/script.sh %path" where %path is replaced with the file + being rolled: + # archive_command: + # max_archive_retries: 10 + +The ``full_query_log_dir`` setting is not within the ``full_query_logging_options`` but still is for full query logging. + +Enabling Full Query Logging +*************************** + +Full Query Logging is enabled on a per-node basis. . The ``nodetool enablefullquerylog`` command is used to enable full query logging. Defaults for the options are configured in ``cassandra.yaml`` and these can be overridden from command line. + +The syntax of the nodetool enablefullquerylog command is as follows: + +:: + + nodetool [(-h | --host )] [(-p | --port )] + [(-pp | --print-port)] [(-pw | --password )] + [(-pwf | --password-file )] + [(-u | --username )] enablefullquerylog + [--archive-command ] [--blocking] + [--max-archive-retries ] + [--max-log-size ] [--max-queue-weight ] + [--path ] [--roll-cycle ] + + OPTIONS + --archive-command + Command that will handle archiving rolled full query log files. + Format is "/path/to/script.sh %path" where %path will be replaced + with the file to archive + + --blocking + If the queue is full whether to block producers or drop samples. + + -h , --host + Node hostname or ip address + + --max-archive-retries + Max number of archive retries. + + --max-log-size + How many bytes of log data to store before dropping segments. Might + not be respected if a log file hasn't rolled so it can be deleted. + + --max-queue-weight + Maximum number of bytes of query data to queue to disk before + blocking or dropping samples. + + -p , --port + Remote jmx agent port number + + --path + Path to store the full query log at. Will have it's contents + recursively deleted. + + -pp, --print-port + Operate in 4.0 mode with hosts disambiguated by port number + + -pw , --password + Remote jmx agent password + + -pwf , --password-file + Path to the JMX password file + + --roll-cycle + How often to roll the log file (MINUTELY, HOURLY, DAILY). + + -u , --username + Remote jmx agent username + +Run the following command on each node in the cluster. + +:: + + nodetool enablefullquerylog --path /tmp/cassandrafullquerylog + +After the full query logging has been enabled run some CQL statements to generate full query logs. + +Running CQL Statements +^^^^^^^^^^^^^^^^^^^^^^^ + +Start CQL interface with ``cqlsh`` command. + +:: + + [ec2-user@ip-10-0-2-238 ~]$ cqlsh + Connected to Cassandra Cluster at 127.0.0.1:9042. + [cqlsh 5.0.1 | Cassandra 4.0-SNAPSHOT | CQL spec 3.4.5 | Native protocol v4] + Use HELP for help. + cqlsh> + +Run some CQL statements. Create a keyspace. Create a table and add some data. Query the table. + +:: + + cqlsh> CREATE KEYSPACE AuditLogKeyspace + ... WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + cqlsh> USE AuditLogKeyspace; + cqlsh:auditlogkeyspace> CREATE TABLE t ( + ...id int, + ...k int, + ...v text, + ...PRIMARY KEY (id) + ... ); + cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + cqlsh:auditlogkeyspace> INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); + cqlsh:auditlogkeyspace> SELECT * FROM t; + + id | k | v + ----+---+------ + 0 | 1 | val1 + + (1 rows) + cqlsh:auditlogkeyspace> + +Viewing the Full Query Logs +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The ``fqltool`` is used to view the full query logs. The ``fqltool`` has the following usage syntax. + +:: + + fqltool [] + + The most commonly used fqltool commands are: + compare Compare result files generated by fqltool replay + dump Dump the contents of a full query log + help Display help information + replay Replay full query logs + + See 'fqltool help ' for more information on a specific command. + +The ``fqltool dump`` command is used to dump (list) the contents of a full query log. Run the ``fqltool dump`` command after some CQL statements have been run. + +The full query logs get listed. Truncated output is as follows: + +:: + + [ec2-user@ip-10-0-2-238 cassandrafullquerylog]$ fqltool dump ./ + WARN [main] 2019-08-02 03:07:53,635 Slf4jExceptionHandler.java:42 - Using Pauser.sleepy() as not enough processors, have 2, needs 8+ + Type: single-query + Query start time: 1564708322030 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system.peers + Values: + + Type: single-query + Query start time: 1564708322054 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system.local WHERE key='local' + Values: + + Type: single-query + Query start time: 1564708322109 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.keyspaces + Values: + + Type: single-query + Query start time: 1564708322116 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.tables + Values: + + Type: single-query + Query start time: 1564708322139 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.columns + Values: + + Type: single-query + Query start time: 1564708322142 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.functions + Values: + + Type: single-query + Query start time: 1564708322141 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.aggregates + Values: + + Type: single-query + Query start time: 1564708322143 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.types + Values: + + Type: single-query + Query start time: 1564708322144 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.indexes + Values: + + Type: single-query + Query start time: 1564708322142 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.triggers + Values: + + Type: single-query + Query start time: 1564708322145 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708322 + Query: SELECT * FROM system_schema.views + Values: + + Type: single-query + Query start time: 1564708345408 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: CREATE KEYSPACE AuditLogKeyspace + WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; + Values: + + Type: single-query + Query start time: 1564708345675 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708345 + Query: SELECT peer, rpc_address, schema_version FROM system.peers + Values: + + Type: single-query + Query start time: 1564708345676 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708345 + Query: SELECT schema_version FROM system.local WHERE key='local' + Values: + + Type: single-query + Query start time: 1564708346323 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708346 + Query: SELECT * FROM system_schema.keyspaces WHERE keyspace_name = 'auditlogkeyspace' + Values: + + Type: single-query + Query start time: 1564708360873 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: USE AuditLogKeyspace; + Values: + + Type: single-query + Query start time: 1564708360874 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: USE "auditlogkeyspace" + Values: + + Type: single-query + Query start time: 1564708378837 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:-2147483648 + Query: CREATE TABLE t ( + id int, + k int, + v text, + PRIMARY KEY (id) + ); + Values: + + Type: single-query + Query start time: 1564708379247 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708379 + Query: SELECT * FROM system_schema.tables WHERE keyspace_name = 'auditlogkeyspace' AND table_name = 't' + Values: + + Type: single-query + Query start time: 1564708379255 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708379 + Query: SELECT * FROM system_schema.views WHERE keyspace_name = 'auditlogkeyspace' AND view_name = 't' + Values: + + Type: single-query + Query start time: 1564708397144 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708397 + Query: INSERT INTO t (id, k, v) VALUES (0, 0, 'val0'); + Values: + + Type: single-query + Query start time: 1564708397167 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708397 + Query: INSERT INTO t (id, k, v) VALUES (0, 1, 'val1'); + Values: + + Type: single-query + Query start time: 1564708434782 + Protocol version: 4 + Generated timestamp:-9223372036854775808 + Generated nowInSeconds:1564708434 + Query: SELECT * FROM t; + Values: + + [ec2-user@ip-10-0-2-238 cassandrafullquerylog]$ + + + +Full query logs are generated on each node. Enabling of full query logging on one node and the log files generated on the node are as follows: + +:: + + [root@localhost ~]# ssh -i cassandra.pem ec2-user@52.1.243.83 + Last login: Fri Aug 2 00:14:53 2019 from 75.155.255.51 + [ec2-user@ip-10-0-3-206 ~]$ sudo mkdir /tmp/cassandrafullquerylog + [ec2-user@ip-10-0-3-206 ~]$ sudo chmod -R 777 /tmp/cassandrafullquerylog + [ec2-user@ip-10-0-3-206 ~]$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog + [ec2-user@ip-10-0-3-206 ~]$ cd /tmp/cassandrafullquerylog + [ec2-user@ip-10-0-3-206 cassandrafullquerylog]$ ls -l + total 44 + -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 01:24 20190802-01.cq4 + -rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 01:23 directory-listing.cq4t + [ec2-user@ip-10-0-3-206 cassandrafullquerylog]$ + +Enabling of full query logging on another node and the log files generated on the node are as follows: + +:: + + [root@localhost ~]# ssh -i cassandra.pem ec2-user@3.86.103.229 + Last login: Fri Aug 2 00:13:04 2019 from 75.155.255.51 + [ec2-user@ip-10-0-1-115 ~]$ sudo mkdir /tmp/cassandrafullquerylog + [ec2-user@ip-10-0-1-115 ~]$ sudo chmod -R 777 /tmp/cassandrafullquerylog + [ec2-user@ip-10-0-1-115 ~]$ nodetool enablefullquerylog --path /tmp/cassandrafullquerylog + [ec2-user@ip-10-0-1-115 ~]$ cd /tmp/cassandrafullquerylog + [ec2-user@ip-10-0-1-115 cassandrafullquerylog]$ ls -l + total 44 + -rw-rw-r--. 1 ec2-user ec2-user 83886080 Aug 2 01:24 20190802-01.cq4 + -rw-rw-r--. 1 ec2-user ec2-user 65536 Aug 2 01:23 directory-listing.cq4t + [ec2-user@ip-10-0-1-115 cassandrafullquerylog]$ + +The ``nodetool resetfullquerylog`` resets the full query logger if it is enabled. Also deletes any generated files in the last used full query log path as well as the one configured in ``cassandra.yaml``. It stops the full query log and cleans files in the configured full query log directory from ``cassandra.yaml`` as well as JMX. + +Full Query Replay +^^^^^^^^^^^^^^^^^ +The ``fqltool`` provides the ``replay`` command (`CASSANDRA-14618 +`_) to replay the full query logs. The FQL replay could be run on a different machine or even a different cluster for testing, debugging and performance benchmarking. + +The main objectives of ``fqltool replay`` are: + +- To be able to compare different runs of production traffic against different versions/configurations of Cassandra. +- Take FQL logs from several machines and replay them in "order" by the timestamps recorded. +- Record the results from each run to be able to compare different runs (against different clusters/versions/etc). +- If fqltool replay is run against 2 or more clusters, the results could be compared. + +The FQL replay could also be used on the same node on which the full query log are generated to recreate a dropped database object. + + The syntax of ``fqltool replay`` is as follows: + +:: + + fqltool replay [--keyspace ] [--results ] + [--store-queries ] --target ... [--] + [...] + + OPTIONS + --keyspace + Only replay queries against this keyspace and queries without + keyspace set. + + --results + Where to store the results of the queries, this should be a + directory. Leave this option out to avoid storing results. + + --store-queries + Path to store the queries executed. Stores queries in the same order + as the result sets are in the result files. Requires --results + + --target + Hosts to replay the logs to, can be repeated to replay to more + hosts. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Paths containing the full query logs to replay. + +As an example of using ``fqltool replay``, drop a keyspace. + +:: + + cqlsh:auditlogkeyspace> DROP KEYSPACE AuditLogKeyspace; + +Subsequently run ``fqltool replay``. The directory to store results of queries and the directory to store the queries run are specified and these directories must be created and permissions set before running ``fqltool replay``. The ``--results`` and ``--store-queries`` directories are optional but if ``--store-queries`` is to be set the ``--results`` must also be set. + +:: + + [ec2-user@ip-10-0-2-238 cassandra]$ fqltool replay --keyspace AuditLogKeyspace --results + /cassandra/fql/logs/results/replay --store-queries /cassandra/fql/logs/queries/replay -- + target 3.91.56.164 -- /tmp/cassandrafullquerylog + +Describe the keyspaces after running ``fqltool replay`` and the keyspace that was dropped gets listed again. + +:: + + cqlsh:auditlogkeyspace> DESC KEYSPACES; + + system_schema system system_distributed system_virtual_schema + system_auth auditlogkeyspace system_traces system_views + + cqlsh:auditlogkeyspace> + +Full Query Compare +^^^^^^^^^^^^^^^^^^ +The ``fqltool compare`` command (`CASSANDRA-14619 +`_) is used to compare result files generated by ``fqltool replay``. The ``fqltool compare`` command that can take the recorded runs from ``fqltool replay`` and compares them, it should output any differences and potentially all queries against the mismatching partition up until the mismatch. + +The ``fqltool compare`` could be used for comparing result files generated by different versions of Cassandra or different Cassandra configurations as an example. The command usage is as follows: + +:: + + [ec2-user@ip-10-0-2-238 ~]$ fqltool help compare + NAME + fqltool compare - Compare result files generated by fqltool replay + + SYNOPSIS + fqltool compare --queries [--] [...] + + OPTIONS + --queries + Directory to read the queries from. It is produced by the fqltool + replay --store-queries option. + + -- + This option can be used to separate command-line options from the + list of argument, (useful when arguments might be mistaken for + command-line options + + [...] + Directories containing result files to compare. + +The ``fqltool compare`` stores each row as a separate chronicle document to be able to avoid reading up the entire result set in memory when comparing document formats: + +To mark the start of a new result set: + +:: + + ------------------- + version: int16 + type: column_definitions + column_count: int32; + column_definition: text, text + column_definition: text, text + .... + -------------------- + + +To mark a failed query set: + +:: + + --------------------- + version: int16 + type: query_failed + message: text + --------------------- + +To mark a row set: + +:: + + -------------------- + version: int16 + type: row + row_column_count: int32 + column: bytes + --------------------- + +To mark the end of a result set: + +:: + + ------------------- + version: int16 + type: end_resultset + ------------------- + + +Performance Overhead of FQL +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +In performance testing FQL appears to have little or no overhead in ``WRITE`` only workloads, and a minor overhead in ``MIXED`` workload. diff --git a/doc/source/new/index.rst b/doc/source/new/index.rst new file mode 100644 index 000000000000..5ef867ba134c --- /dev/null +++ b/doc/source/new/index.rst @@ -0,0 +1,32 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +New Features in Apache Cassandra 4.0 +==================================== + +This section covers the new features in Apache Cassandra 4.0. + +.. toctree:: + :maxdepth: 2 + + java11 + virtualtables + auditlogging + fqllogging + messaging + streaming + transientreplication + diff --git a/doc/source/new/java11.rst b/doc/source/new/java11.rst new file mode 100644 index 000000000000..df906d4095c3 --- /dev/null +++ b/doc/source/new/java11.rst @@ -0,0 +1,274 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Support for Java 11 +------------------- + +In the new Java release cadence a new Java version is made available every six months. The more frequent release cycle +is favored as it brings new Java features to the developers as and when they are developed without the wait that the +earlier 3 year release model incurred. Not every Java version is a Long Term Support (LTS) version. After Java 8 the +next LTS version is Java 11. Java 9, 10, 12 and 13 are all non-LTS versions. + +One of the objectives of the Apache Cassandra 4.0 version is to support the recent LTS Java versions 8 and 11 (`CASSANDRA-9608 +`_). Java 8 and +Java 11 may be used to build and run Apache Cassandra 4.0. + +**Note**: Support for JDK 11 in Apache Cassandra 4.0 is an experimental feature, and not recommended for production use. + +Support Matrix +^^^^^^^^^^^^^^ + +The support matrix for the Java versions for compiling and running Apache Cassandra 4.0 is detailed in Table 1. The +build version is along the vertical axis and the run version is along the horizontal axis. + +Table 1 : Support Matrix for Java + ++---------------+--------------+-----------------+ +| | Java 8 (Run) | Java 11 (Run) | ++---------------+--------------+-----------------+ +| Java 8 (Build)|Supported |Supported | ++---------------+--------------+-----------------+ +| Java 11(Build)| Not Supported|Supported | ++---------------+--------------+-----------------+ + +Essentially Apache 4.0 source code built with Java 11 cannot be run with Java 8. Next, we shall discuss using each of Java 8 and 11 to build and run Apache Cassandra 4.0. + +Using Java 8 to Build +^^^^^^^^^^^^^^^^^^^^^ + +To start with, install Java 8. As an example, for installing Java 8 on RedHat Linux the command is as follows: + +:: + +$ sudo yum install java-1.8.0-openjdk-devel + +Set ``JAVA_HOME`` and ``JRE_HOME`` environment variables in the shell bash script. First, open the bash script: + +:: + +$ sudo vi ~/.bashrc + +Set the environment variables including the ``PATH``. + +:: + + $ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk + $ export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre + $ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin + +Download and install Apache Cassandra 4.0 source code from the Git along with the dependencies. + +:: + + $ git clone https://github.com/apache/cassandra.git + +If Cassandra is already running stop Cassandra with the following command. + +:: + + [ec2-user@ip-172-30-3-146 bin]$ ./nodetool stopdaemon + +Build the source code from the ``cassandra`` directory, which has the ``build.xml`` build script. The Apache Ant uses the Java version set in the ``JAVA_HOME`` environment variable. + +:: + + $ cd ~/cassandra + $ ant + +Apache Cassandra 4.0 gets built with Java 8. Set the environment variable for ``CASSANDRA_HOME`` in the bash script. Also add the ``CASSANDRA_HOME/bin`` to the ``PATH`` variable. + +:: + + $ export CASSANDRA_HOME=~/cassandra + $ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CASSANDRA_HOME/bin + +To run Apache Cassandra 4.0 with either of Java 8 or Java 11 run the Cassandra application in the ``CASSANDRA_HOME/bin`` directory, which is in the ``PATH`` env variable. + +:: + + $ cassandra + +The Java version used to run Cassandra gets output as Cassandra is getting started. As an example if Java 11 is used, the run output should include similar to the following output snippet: + +:: + + INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:480 - Hostname: ip-172-30-3- + 146.ec2.internal:7000:7001 + INFO [main] 2019-07-31 21:18:16,862 CassandraDaemon.java:487 - JVM vendor/version: OpenJDK + 64-Bit Server VM/11.0.3 + INFO [main] 2019-07-31 21:18:16,863 CassandraDaemon.java:488 - Heap size: + 1004.000MiB/1004.000MiB + +The following output indicates a single node Cassandra 4.0 cluster has started. + +:: + + INFO [main] 2019-07-31 21:18:19,687 InboundConnectionInitiator.java:130 - Listening on + address: (127.0.0.1:7000), nic: lo, encryption: enabled (openssl) + ... + ... + INFO [main] 2019-07-31 21:18:19,850 StorageService.java:512 - Unable to gossip with any + peers but continuing anyway since node is in its own seed list + INFO [main] 2019-07-31 21:18:19,864 StorageService.java:695 - Loading persisted ring state + INFO [main] 2019-07-31 21:18:19,865 StorageService.java:814 - Starting up server gossip + INFO [main] 2019-07-31 21:18:20,088 BufferPool.java:216 - Global buffer pool is enabled, + when pool is exhausted (max is 251.000MiB) it will allocate on heap + INFO [main] 2019-07-31 21:18:20,110 StorageService.java:875 - This node will not auto + bootstrap because it is configured to be a seed node. + ... + ... + INFO [main] 2019-07-31 21:18:20,809 StorageService.java:1507 - JOINING: Finish joining ring + INFO [main] 2019-07-31 21:18:20,921 StorageService.java:2508 - Node 127.0.0.1:7000 state + jump to NORMAL + +Using Java 11 to Build +^^^^^^^^^^^^^^^^^^^^^^ +If Java 11 is used to build Apache Cassandra 4.0, first Java 11 must be installed and the environment variables set. As an example, to download and install Java 11 on RedHat Linux run the following command. + +:: + + $ yum install java-11-openjdk-devel + +Set the environment variables in the bash script for Java 11. The first command is to open the bash script. + +:: + + $ sudo vi ~/.bashrc + $ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk + $ export JRE_HOME=/usr/lib/jvm/java-11-openjdk/jre + $ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin + +To build source code with Java 11 one of the following two options must be used. + + 1. Include Apache Ant command-line option ``-Duse.jdk=11`` as follows: + :: + + $ ant -Duse.jdk=11 + + 2. Set environment variable ``CASSANDRA_USE_JDK11`` to ``true``: + :: + + $ export CASSANDRA_USE_JDK11=true + +As an example, set the environment variable ``CASSANDRA_USE_JDK11`` to ``true``. + +:: + + [ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true + [ec2-user@ip-172-30-3-146 cassandra]$ ant + Buildfile: /home/ec2-user/cassandra/build.xml + +Or, set the command-line option. + +:: + + [ec2-user@ip-172-30-3-146 cassandra]$ ant -Duse.jdk11=true + +The build output should include the following. + +:: + + _build_java: + [echo] Compiling for Java 11 + ... + ... + build: + + _main-jar: + [copy] Copying 1 file to /home/ec2-user/cassandra/build/classes/main/META-INF + [jar] Building jar: /home/ec2-user/cassandra/build/apache-cassandra-4.0-SNAPSHOT.jar + ... + ... + _build-test: + [javac] Compiling 739 source files to /home/ec2-user/cassandra/build/test/classes + [copy] Copying 25 files to /home/ec2-user/cassandra/build/test/classes + ... + ... + jar: + [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/stress/META-INF + [mkdir] Created dir: /home/ec2-user/cassandra/build/tools/lib + [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/stress.jar + [mkdir] Created dir: /home/ec2-user/cassandra/build/classes/fqltool/META-INF + [jar] Building jar: /home/ec2-user/cassandra/build/tools/lib/fqltool.jar + + BUILD SUCCESSFUL + Total time: 1 minute 3 seconds + [ec2-user@ip-172-30-3-146 cassandra]$ + +Common Issues +^^^^^^^^^^^^^^ +One of the two options mentioned must be used to compile with JDK 11 or the build fails and the following error message is output. + +:: + + [ec2-user@ip-172-30-3-146 cassandra]$ ant + Buildfile: /home/ec2-user/cassandra/build.xml + validate-build-conf: + + BUILD FAILED + /home/ec2-user/cassandra/build.xml:293: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true must + be set when building from java 11 + Total time: 1 second + [ec2-user@ip-172-30-3-146 cassandra]$ + +The Java 11 built Apache Cassandra 4.0 source code may be run with Java 11 only. If a Java 11 built code is run with Java 8 the following error message gets output. + +:: + + [root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com + Last login: Wed Jul 31 20:47:26 2019 from 75.155.255.51 + [ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME + /usr/lib/jvm/java-1.8.0-openjdk + [ec2-user@ip-172-30-3-146 ~]$ cassandra + ... + ... + Error: A JNI error has occurred, please check your installation and try again + Exception in thread "main" java.lang.UnsupportedClassVersionError: + org/apache/cassandra/service/CassandraDaemon has been compiled by a more recent version of + the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes + class file versions up to 52.0 + at java.lang.ClassLoader.defineClass1(Native Method) + at java.lang.ClassLoader.defineClass(ClassLoader.java:763) + at ... + ... + +The ``CASSANDRA_USE_JDK11`` variable or the command-line option ``-Duse.jdk11`` cannot be used to build with Java 8. To demonstrate set ``JAVA_HOME`` to version 8. + +:: + + [root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com + Last login: Wed Jul 31 21:41:50 2019 from 75.155.255.51 + [ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME + /usr/lib/jvm/java-1.8.0-openjdk + +Set the ``CASSANDRA_USE_JDK11=true`` or command-line option ``-Duse.jdk11=true``. Subsequently, run Apache Ant to start the build. The build fails with error message listed. + +:: + + [ec2-user@ip-172-30-3-146 ~]$ cd + cassandra + [ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true + [ec2-user@ip-172-30-3-146 cassandra]$ ant + Buildfile: /home/ec2-user/cassandra/build.xml + + validate-build-conf: + + BUILD FAILED + /home/ec2-user/cassandra/build.xml:285: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true cannot + be set when building from java 8 + + Total time: 0 seconds + diff --git a/doc/source/new/messaging.rst b/doc/source/new/messaging.rst new file mode 100644 index 000000000000..755c9d106e06 --- /dev/null +++ b/doc/source/new/messaging.rst @@ -0,0 +1,257 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Improved Internode Messaging +------------------------------ + + +Apache Cassandra 4.0 has added several new improvements to internode messaging. + +Optimized Internode Messaging Protocol +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The internode messaging protocol has been optimized (`CASSANDRA-14485 +`_). Previously the ``IPAddressAndPort`` of the sender was included with each message that was sent even though the ``IPAddressAndPort`` had already been sent once when the initial connection/session was established. In Cassandra 4.0 ``IPAddressAndPort`` has been removed from every separate message sent and only sent when connection/session is initiated. + +Another improvement is that at several instances (listed) a fixed 4-byte integer value has been replaced with ``vint`` as a ``vint`` is almost always less than 1 byte: + +- The ``paramSize`` (the number of parameters in the header) +- Each individual parameter value +- The ``payloadSize`` + + +NIO Messaging +^^^^^^^^^^^^^^^ +In Cassandra 4.0 peer-to-peer (internode) messaging has been switched to non-blocking I/O (NIO) via Netty (`CASSANDRA-8457 +`_). + +As serialization format, each message contains a header with several fixed fields, an optional key-value parameters section, and then the message payload itself. Note: the IP address in the header may be either IPv4 (4 bytes) or IPv6 (16 bytes). + + The diagram below shows the IPv4 address for brevity. + +:: + + 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 + 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | PROTOCOL MAGIC | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Message ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Timestamp | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Addr len | IP Address (IPv4) / + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + / | Verb / + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + / | Parameters size / + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + / | Parameter data / + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + / | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Payload size | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | / + / Payload / + / | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +An individual parameter has a String key and a byte array value. The key is serialized with its length, encoded as two bytes, followed by the UTF-8 byte encoding of the string. The body is serialized with its length, encoded as four bytes, followed by the bytes of the value. + +Resource limits on Queued Messages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +System stability is improved by enforcing strict resource limits (`CASSANDRA-15066 +`_) on the number of outbound messages that are queued, measured by the ``serializedSize`` of the message. There are three separate limits imposed simultaneously to ensure that progress is always made without any reasonable combination of failures impacting a node’s stability. + +1. Global, per-endpoint and per-connection limits are imposed on messages queued for delivery to other nodes and waiting to be processed on arrival from other nodes in the cluster. These limits are applied to the on-wire size of the message being sent or received. +2. The basic per-link limit is consumed in isolation before any endpoint or global limit is imposed. Each node-pair has three links: urgent, small and large. So any given node may have a maximum of ``N*3 * (internode_application_send_queue_capacity_in_bytes + internode_application_receive_queue_capacity_in_bytes)`` messages queued without any coordination between them although in practice, with token-aware routing, only RF*tokens nodes should need to communicate with significant bandwidth. +3. The per-endpoint limit is imposed on all messages exceeding the per-link limit, simultaneously with the global limit, on all links to or from a single node in the cluster. The global limit is imposed on all messages exceeding the per-link limit, simultaneously with the per-endpoint limit, on all links to or from any node in the cluster. The following configuration settings have been added to ``cassandra.yaml`` for resource limits on queued messages. + +:: + + internode_application_send_queue_capacity_in_bytes: 4194304 #4MiB + internode_application_send_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB + internode_application_send_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB + internode_application_receive_queue_capacity_in_bytes: 4194304 #4MiB + internode_application_receive_queue_reserve_endpoint_capacity_in_bytes: 134217728 #128MiB + internode_application_receive_queue_reserve_global_capacity_in_bytes: 536870912 #512MiB + +Virtual Tables for Messaging Metrics +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Metrics is improved by keeping metrics using virtual tables for inter-node inbound and outbound messaging (`CASSANDRA-15066 +`_). For inbound messaging a virtual table (``internode_inbound``) has been added to keep metrics for: + +- Bytes and count of messages that could not be serialized or flushed due to an error +- Bytes and count of messages scheduled +- Bytes and count of messages successfully processed +- Bytes and count of messages successfully received +- Nanos and count of messages throttled +- Bytes and count of messages expired +- Corrupt frames recovered and unrecovered + +A separate virtual table (``internode_outbound``) has been added for outbound inter-node messaging. The outbound virtual table keeps metrics for: + +- Bytes and count of messages pending +- Bytes and count of messages sent +- Bytes and count of messages expired +- Bytes and count of messages that could not be sent due to an error +- Bytes and count of messages overloaded +- Active Connection Count +- Connection Attempts +- Successful Connection Attempts + +Hint Messaging +^^^^^^^^^^^^^^ + +A specialized version of hint message that takes an already encoded in a ``ByteBuffer`` hint and sends it verbatim has been added. It is an optimization for when dispatching a hint file of the current messaging version to a node of the same messaging version, which is the most common case. It saves on extra ``ByteBuffer`` allocations one redundant hint deserialization-serialization cycle. + +Internode Application Timeout +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A configuration setting has been added to ``cassandra.yaml`` for the maximum continuous period a connection may be unwritable in application space. + +:: + +# internode_application_timeout_in_ms = 30000 + +Some other new features include logging of message size to trace message for tracing a query. + +Paxos prepare and propose stage for local requests optimized +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In pre-4.0 Paxos prepare and propose messages always go through entire ``MessagingService`` stack in Cassandra even if request is to be served locally, we can enhance and make local requests severed w/o involving ``MessagingService``. Similar things are done elsewhere in Cassandra which skips ``MessagingService`` stage for local requests. + +This is what it looks like in pre 4.0 if we have tracing on and run a light-weight transaction: + +:: + + Sending PAXOS_PREPARE message to /A.B.C.D [MessagingService-Outgoing-/A.B.C.D] | 2017-09-11 + 21:55:18.971000 | A.B.C.D | 15045 + … REQUEST_RESPONSE message received from /A.B.C.D [MessagingService-Incoming-/A.B.C.D] | + 2017-09-11 21:55:18.976000 | A.B.C.D | 20270 + … Processing response from /A.B.C.D [SharedPool-Worker-4] | 2017-09-11 21:55:18.976000 | + A.B.C.D | 20372 + +Same thing applies for Propose stage as well. + +In version 4.0 Paxos prepare and propose stage for local requests are optimized (`CASSANDRA-13862 +`_). + +Quality Assurance +^^^^^^^^^^^^^^^^^ + +Several other quality assurance improvements have been made in version 4.0 (`CASSANDRA-15066 +`_). + +Framing +******* +Version 4.0 introduces framing to all internode messages, i.e. the grouping of messages into a single logical payload with headers and trailers; these frames are guaranteed to either contain at most one message, that is split into its own unique sequence of frames (for large messages), or that a frame contains only complete messages. + +Corruption prevention +********************* +Previously, intra-datacenter internode messages would be unprotected from corruption by default, as only LZ4 provided any integrity checks. All messages to post 4.0 nodes are written to explicit frames, which may be: + +- LZ4 encoded +- CRC protected + +The Unprotected option is still available. + +Resilience +********** +For resilience, all frames are written with a separate CRC protected header, of 8 and 6 bytes respectively. If corruption occurs in this header, the connection must be reset, as before. If corruption occurs anywhere outside of the header, the corrupt frame will be skipped, leaving the connection intact and avoiding the loss of any messages unnecessarily. + +Previously, any issue at any point in the stream would result in the connection being reset, with the loss of any in-flight messages. + +Efficiency +********** +The overall memory usage, and number of byte shuffles, on both inbound and outbound messages is reduced. + +Outbound the Netty LZ4 encoder maintains a chunk size buffer (64KiB), that is filled before any compressed frame can be produced. Our frame encoders avoid this redundant copy, as well as freeing 192KiB per endpoint. + +Inbound, frame decoders guarantee only to copy the number of bytes necessary to parse a frame, and to never store more bytes than necessary. This improvement applies twice to LZ4 connections, improving both the message decode and the LZ4 frame decode. + +Inbound Path +************ +Version 4.0 introduces several improvements to the inbound path. + +An appropriate message handler is used based on whether large or small messages are expected on a particular connection as set in a flag. ``NonblockingBufferHandler``, running on event loop, is used for small messages, and ``BlockingBufferHandler``, running off event loop, for large messages. The single implementation of ``InboundMessageHandler`` handles messages of any size effectively by deriving size of the incoming message from the byte stream. In addition to deriving size of the message from the stream, incoming message expiration time is proactively read, before attempting to deserialize the entire message. If it’s expired at the time when a message is encountered the message is just skipped in the byte stream altogether. +And if a message fails to be deserialized while still on the receiving side - say, because of table id or column being unknown - bytes are skipped, without dropping the entire connection and losing all the buffered messages. An immediately reply back is sent to the coordinator node with the failure reason, rather than waiting for the coordinator callback to expire. This logic is extended to a corrupted frame; a corrupted frame is safely skipped over without dropping the connection. + +Inbound path imposes strict limits on memory utilization. Specifically, the memory occupied by all parsed, but unprocessed messages is bound - on per-connection, per-endpoint, and global basis. Once a connection exceeds its local unprocessed capacity and cannot borrow any permits from per-endpoint and global reserve, it simply stops processing further messages, providing natural backpressure - until sufficient capacity is regained. + +Outbound Connections +******************** + +Opening a connection +++++++++++++++++++++ +A consistent approach is adopted for all kinds of failure to connect, including: refused by endpoint, incompatible versions, or unexpected exceptions; + +- Retry forever, until either success or no messages waiting to deliver. +- Wait incrementally longer periods before reconnecting, up to a maximum of 1s. +- While failing to connect, no reserve queue limits are acquired. + +Closing a connection +++++++++++++++++++++ +- Correctly drains outbound messages that are waiting to be delivered (unless disconnected and fail to reconnect). +- Messages written to a closing connection are either delivered or rejected, with a new connection being opened if the old is irrevocably closed. +- Unused connections are pruned eventually. + +Reconnecting +++++++++++++ + +We sometimes need to reconnect a perfectly valid connection, e.g. if the preferred IP address changes. We ensure that the underlying connection has no in-progress operations before closing it and reconnecting. + +Message Failure +++++++++++++++++ +Propagates to callbacks instantly, better preventing overload by reclaiming committed memory. + +Expiry +~~~~~~~~ +- No longer experiences head-of-line blocking (e.g. undroppable message preventing all droppable messages from being expired). +- While overloaded, expiry is attempted eagerly on enqueuing threads. +- While disconnected we schedule regular pruning, to handle the case where messages are no longer being sent, but we have a large backlog to expire. + +Overload +~~~~~~~~~ +- Tracked by bytes queued, as opposed to number of messages. + +Serialization Errors +~~~~~~~~~~~~~~~~~~~~~ +- Do not result in the connection being invalidated; the message is simply completed with failure, and then erased from the frame. +- Includes detected mismatch between calculated serialization size to actual. + +Failures to flush to network, perhaps because the connection has been reset are not currently notified to callback handlers, as the necessary information has been discarded, though it would be possible to do so in future if we decide it is worth our while. + +QoS ++++++ +"Gossip" connection has been replaced with a general purpose "Urgent" connection, for any small messages impacting system stability. + +Metrics ++++++++ +We track, and expose via Virtual Table and JMX, the number of messages and bytes that: we could not serialize or flush due to an error, we dropped due to overload or timeout, are pending, and have successfully sent. + +Added a Message size limit +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Cassandra pre-4.0 doesn't protect the server from allocating huge buffers for the inter-node Message objects. Adding a message size limit would be good to deal with issues such as a malfunctioning cluster participant. Version 4.0 introduced max message size config param, akin to max mutation size - set to endpoint reserve capacity by default. + +Recover from unknown table when deserializing internode messages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +As discussed in (`CASSANDRA-9289 +`_) it would be nice to gracefully recover from seeing an unknown table in a message from another node. Pre-4.0, we close the connection and reconnect, which can cause other concurrent queries to fail. +Version 4.0 fixes the issue by wrapping message in-stream with +``TrackedDataInputPlus``, catching +``UnknownCFException``, and skipping the remaining bytes in this message. TCP won't be closed and it will remain connected for other messages. diff --git a/doc/source/new/streaming.rst b/doc/source/new/streaming.rst new file mode 100644 index 000000000000..1807eb4023e9 --- /dev/null +++ b/doc/source/new/streaming.rst @@ -0,0 +1,162 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Improved Streaming +--------------------- + +Apache Cassandra 4.0 has made several improvements to streaming. Streaming is the process used by nodes of a cluster to exchange data in the form of SSTables. Streaming of SSTables is performed for several operations, such as: + +- SSTable Repair +- Host Replacement +- Range movements +- Bootstrapping +- Rebuild +- Cluster expansion + +Streaming based on Netty +^^^^^^^^^^^^^^^^^^^^^^^^ + +Streaming in Cassandra 4.0 is based on Non-blocking Input/Output (NIO) with Netty (`CASSANDRA-12229 +`_). It replaces the single-threaded (or sequential), synchronous, blocking model of streaming messages and transfer of files. Netty supports non-blocking, asynchronous, multi-threaded streaming with which multiple connections are opened simultaneously. Non-blocking implies that threads are not blocked as they don’t wait for a response for a sent request. A response could be returned in a different thread. With asynchronous, connections and threads are decoupled and do not have a 1:1 relation. Several more connections than threads may be opened. + +Zero Copy Streaming +^^^^^^^^^^^^^^^^^^^^ + +Pre-4.0, during streaming Cassandra reifies the SSTables into objects. This creates unnecessary garbage and slows down the whole streaming process as some SSTables can be transferred as a whole file rather than individual partitions. Cassandra 4.0 has added support for streaming entire SSTables when possible (`CASSANDRA-14556 +`_) for faster Streaming using ZeroCopy APIs. If enabled, Cassandra will use ZeroCopy for eligible SSTables significantly speeding up transfers and increasing throughput. A zero-copy path avoids bringing data into user-space on both sending and receiving side. Any streaming related operations will notice corresponding improvement. Zero copy streaming is hardware bound; only limited by the hardware limitations (Network and Disk IO ). + +High Availability +***************** +In benchmark tests Zero Copy Streaming is 5x faster than partitions based streaming. Faster streaming provides the benefit of improved availability. A cluster’s recovery mainly depends on the streaming speed, Cassandra clusters with failed nodes will be able to recover much more quickly (5x faster). If a node fails, SSTables need to be streamed to a replacement node. During the replacement operation, the new Cassandra node streams SSTables from the neighboring nodes that hold copies of the data belonging to this new node’s token range. Depending on the amount of data stored, this process can require substantial network bandwidth, taking some time to complete. The longer these range movement operations take, the more the cluster availability is lost. Failure of multiple nodes would reduce high availability greatly. The faster the new node completes streaming its data, the faster it can serve traffic, increasing the availability of the cluster. + +Enabling Zero Copy Streaming +***************************** +Zero copy streaming is enabled by setting the following setting in ``cassandra.yaml``. + +:: + + stream_entire_sstables: true + +By default zero copy streaming is enabled. + +SSTables Eligible for Zero Copy Streaming +***************************************** +Zero copy streaming is used if all partitions within the SSTable need to be transmitted. This is common when using ``LeveledCompactionStrategy`` or when partitioning SSTables by token range has been enabled. All partition keys in the SSTables are iterated over to determine the eligibility for Zero Copy streaming. + +Benefits of Zero Copy Streaming +******************************** +When enabled, it permits Cassandra to zero-copy stream entire eligible SSTables between nodes, including every component. This speeds up the network transfer significantly subject to throttling specified by ``stream_throughput_outbound_megabits_per_sec``. + +Enabling this will reduce the GC pressure on sending and receiving node. While this feature tries to keep the disks balanced, it cannot guarantee it. This feature will be automatically disabled if internode encryption is enabled. Currently this can be used with Leveled Compaction. + +Configuring for Zero Copy Streaming +************************************ +Throttling would reduce the streaming speed. The ``stream_throughput_outbound_megabits_per_sec`` throttles all outbound streaming file transfers on a node to the given total throughput in Mbps. When unset, the default is 200 Mbps or 25 MB/s. + +:: + + stream_throughput_outbound_megabits_per_sec: 200 + +To run any Zero Copy streaming benchmark the ``stream_throughput_outbound_megabits_per_sec`` must be set to a really high value otherwise, throttling will be significant and the benchmark results will not be meaningful. + +The ``inter_dc_stream_throughput_outbound_megabits_per_sec`` throttles all streaming file transfer between the datacenters, this setting allows users to throttle inter dc stream throughput in addition to throttling all network stream traffic as configured with ``stream_throughput_outbound_megabits_per_sec``. When unset, the default is 200 Mbps or 25 MB/s. + +:: + + inter_dc_stream_throughput_outbound_megabits_per_sec: 200 + +SSTable Components Streamed with Zero Copy Streaming +***************************************************** +Zero Copy Streaming streams entire SSTables. SSTables are made up of multiple components in separate files. SSTable components streamed are listed in Table 1. + +Table 1. SSTable Components + ++------------------+---------------------------------------------------+ +|SSTable Component | Description | ++------------------+---------------------------------------------------+ +| Data.db |The base data for an SSTable: the remaining | +| |components can be regenerated based on the data | +| |component. | ++------------------+---------------------------------------------------+ +| Index.db |Index of the row keys with pointers to their | +| |positions in the data file. | ++------------------+---------------------------------------------------+ +| Filter.db |Serialized bloom filter for the row keys in the | +| |SSTable. | ++------------------+---------------------------------------------------+ +|CompressionInfo.db|File to hold information about uncompressed | +| |data length, chunk offsets etc. | ++------------------+---------------------------------------------------+ +| Statistics.db |Statistical metadata about the content of the | +| |SSTable. | ++------------------+---------------------------------------------------+ +| Digest.crc32 |Holds CRC32 checksum of the data file | +| |size_bytes. | ++------------------+---------------------------------------------------+ +| CRC.db |Holds the CRC32 for chunks in an uncompressed file.| ++------------------+---------------------------------------------------+ +| Summary.db |Holds SSTable Index Summary | +| |(sampling of Index component) | ++------------------+---------------------------------------------------+ +| TOC.txt |Table of contents, stores the list of all | +| |components for the SSTable. | ++------------------+---------------------------------------------------+ + +Custom component, used by e.g. custom compaction strategy may also be included. + +Repair Streaming Preview +^^^^^^^^^^^^^^^^^^^^^^^^ + +Repair with ``nodetool repair`` involves streaming of repaired SSTables and a repair preview has been added to provide an estimate of the amount of repair streaming that would need to be performed. Repair preview (`CASSANDRA-13257 +`_) is invoke with ``nodetool repair --preview`` using option: + +:: + +-prv, --preview + +It determines ranges and amount of data to be streamed, but doesn't actually perform repair. + +Parallelizing of Streaming of Keyspaces +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The streaming of the different keyspaces for bootstrap and rebuild has been parallelized in Cassandra 4.0 (`CASSANDRA-4663 +`_). + +Unique nodes for Streaming in Multi-DC deployment +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Range Streamer picks unique nodes to stream data from when number of replicas in each DC is three or more (`CASSANDRA-4650 +`_). What the optimization does is to even out the streaming load across the cluster. Without the optimization, some node can be picked up to stream more data than others. This patch allows to select dedicated node to stream only one range. + +This will increase the performance of bootstrapping a node and will also put less pressure on nodes serving the data. This does not affect if N < 3 in each DC as then it streams data from only 2 nodes. + +Stream Operation Types +^^^^^^^^^^^^^ + +It is important to know the type or purpose of a certain stream. Version 4.0 (`CASSANDRA-13064 +`_) adds an ``enum`` to distinguish between the different types of streams. Stream types are available both in a stream request and a stream task. The different stream types are: + +- Restore replica count +- Unbootstrap +- Relocation +- Bootstrap +- Rebuild +- Bulk Load +- Repair + +Disallow Decommission when number of Replicas will drop below configured RF +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`CASSANDRA-12510 +`_ guards against decommission that will drop # of replicas below configured replication factor (RF), and adds the ``--force`` option that allows decommission to continue if intentional; force decommission of this node even when it reduces the number of replicas to below configured RF. diff --git a/doc/source/new/transientreplication.rst b/doc/source/new/transientreplication.rst new file mode 100644 index 000000000000..aa39a110fdb1 --- /dev/null +++ b/doc/source/new/transientreplication.rst @@ -0,0 +1,155 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Transient Replication +--------------------- + +**Note**: + +Transient Replication (`CASSANDRA-14404 +`_) is an experimental feature designed for expert Apache Cassandra users who are able to validate every aspect of the database for their application and deployment. +That means being able to check that operations like reads, writes, decommission, remove, rebuild, repair, and replace all work with your queries, data, configuration, operational practices, and availability requirements. +Apache Cassandra 4.0 has the initial implementation of transient replication. Future releases of Cassandra will make this feature suitable for a wider audience. +It is anticipated that a future version will support monotonic reads with transient replication as well as LWT, logged batches, and counters. Being experimental, Transient replication is **not** recommended for production use. + +Objective +^^^^^^^^^ + +The objective of transient replication is to decouple storage requirements from data redundancy (or consensus group size) using incremental repair, in order to reduce storage overhead. +Certain nodes act as full replicas (storing all the data for a given token range), and some nodes act as transient replicas, storing only unrepaired data for the same token ranges. + +The optimization that is made possible with transient replication is called "Cheap quorums", which implies that data redundancy is increased without corresponding increase in storage usage. + +Transient replication is useful when sufficient full replicas are available to receive and store all the data. +Transient replication allows you to configure a subset of replicas to only replicate data that hasn't been incrementally repaired. +As an optimization, we can avoid writing data to a transient replica if we have successfully written data to the full replicas. + +After incremental repair, transient data stored on transient replicas can be discarded. + +Enabling Transient Replication +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Transient replication is not enabled by default. Transient replication must be enabled on each node in a cluster separately by setting the following configuration property in ``cassandra.yaml``. + +:: + + enable_transient_replication: true + +Transient replication may be configured with both ``SimpleStrategy`` and ``NetworkTopologyStrategy``. Transient replication is configured by setting replication factor as ``/``. + +As an example, create a keyspace with replication factor (RF) 3. + +:: + + CREATE KEYSPACE CassandraKeyspaceSimple WITH replication = {'class': 'SimpleStrategy', + 'replication_factor' : 3/1}; + + +As another example, ``some_keysopace keyspace`` will have 3 replicas in DC1, 1 of which is transient, and 5 replicas in DC2, 2 of which are transient: + +:: + + CREATE KEYSPACE some_keysopace WITH replication = {'class': 'NetworkTopologyStrategy', + 'DC1' : '3/1'', 'DC2' : '5/2'}; + +Transiently replicated keyspaces only support tables with ``read_repair`` set to ``NONE``. + +Important Restrictions: + +- RF cannot be altered while some endpoints are not in a normal state (no range movements). +- You can't add full replicas if there are any transient replicas. You must first remove all transient replicas, then change the # of full replicas, then add back the transient replicas. +- You can only safely increase number of transients one at a time with incremental repair run in between each time. + + +Additionally, transient replication cannot be used for: + +- Monotonic Reads +- Lightweight Transactions (LWTs) +- Logged Batches +- Counters +- Keyspaces using materialized views +- Secondary indexes (2i) + +Cheap Quorums +^^^^^^^^^^^^^ + +Cheap quorums are a set of optimizations on the write path to avoid writing to transient replicas unless sufficient full replicas are not available to satisfy the requested consistency level. +Hints are never written for transient replicas. Optimizations on the read path prefer reading from transient replicas. +When writing at quorum to a table configured to use transient replication the quorum will always prefer available full +replicas over transient replicas so that transient replicas don't have to process writes. Tail latency is reduced by +rapid write protection (similar to rapid read protection) when full replicas are slow or unavailable by sending writes +to transient replicas. Transient replicas can serve reads faster as they don't have to do anything beyond bloom filter +checks if they have no data. With vnodes and large cluster sizes they will not have a large quantity of data +even for failure of one or more full replicas where transient replicas start to serve a steady amount of write traffic +for some of their transiently replicated ranges. + +Speculative Write Option +^^^^^^^^^^^^^^^^^^^^^^^^ +The ``CREATE TABLE`` adds an option ``speculative_write_threshold`` for use with transient replicas. The option is of type ``simple`` with default value as ``99PERCENTILE``. When replicas are slow or unresponsive ``speculative_write_threshold`` specifies the threshold at which a cheap quorum write will be upgraded to include transient replicas. + + +Pending Ranges and Transient Replicas +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Pending ranges refers to the movement of token ranges between transient replicas. When a transient range is moved, there +will be a period of time where both transient replicas would need to receive any write intended for the logical +transient replica so that after the movement takes effect a read quorum is able to return a response. Nodes are *not* +temporarily transient replicas during expansion. They stream data like a full replica for the transient range before they +can serve reads. A pending state is incurred similar to how there is a pending state for full replicas. Transient replicas +also always receive writes when they are pending. Pending transient ranges are sent a bit more data and reading from +them is avoided. + + +Read Repair and Transient Replicas +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Read repair never attempts to repair a transient replica. Reads will always include at least one full replica. +They should also prefer transient replicas where possible. Range scans ensure the entire scanned range performs +replica selection that satisfies the requirement that every range scanned includes one full replica. During incremental +& validation repair handling, at transient replicas anti-compaction does not output any data for transient ranges as the +data will be dropped after repair, and transient replicas never have data streamed to them. + + +Transitioning between Full Replicas and Transient Replicas +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The additional state transitions that transient replication introduces requires streaming and ``nodetool cleanup`` to +behave differently. When data is streamed it is ensured that it is streamed from a full replica and not a transient replica. + +Transitioning from not replicated to transiently replicated means that a node must stay pending until the next incremental +repair completes at which point the data for that range is known to be available at full replicas. + +Transitioning from transiently replicated to fully replicated requires streaming from a full replica and is identical +to how data is streamed when transitioning from not replicated to replicated. The transition is managed so the transient +replica is not read from as a full replica until streaming completes. It can be used immediately for a write quorum. + +Transitioning from fully replicated to transiently replicated requires cleanup to remove repaired data from the transiently +replicated range to reclaim space. It can be used immediately for a write quorum. + +Transitioning from transiently replicated to not replicated requires cleanup to be run to remove the formerly transiently replicated data. + +When transient replication is in use ring changes are supported including add/remove node, change RF, add/remove DC. + + +Transient Replication supports EACH_QUORUM +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +(`CASSANDRA-14727 +`_) adds support for Transient Replication support for ``EACH_QUORUM``. Per (`CASSANDRA-14768 +`_), we ensure we write to at least a ``QUORUM`` of nodes in every DC, +regardless of how many responses we need to wait for and our requested consistency level. This is to minimally surprise +users with transient replication; with normal writes, we soft-ensure that we reach ``QUORUM`` in all DCs we are able to, +by writing to every node; even if we don't wait for ACK, we have in both cases sent sufficient messages. diff --git a/doc/source/new/virtualtables.rst b/doc/source/new/virtualtables.rst new file mode 100644 index 000000000000..1a39dc6786ef --- /dev/null +++ b/doc/source/new/virtualtables.rst @@ -0,0 +1,342 @@ +.. Licensed to the Apache Software Foundation (ASF) under one +.. or more contributor license agreements. See the NOTICE file +.. distributed with this work for additional information +.. regarding copyright ownership. The ASF licenses this file +.. to you under the Apache License, Version 2.0 (the +.. "License"); you may not use this file except in compliance +.. with the License. You may obtain a copy of the License at +.. +.. http://www.apache.org/licenses/LICENSE-2.0 +.. +.. Unless required by applicable law or agreed to in writing, software +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. See the License for the specific language governing permissions and +.. limitations under the License. + +Virtual Tables +-------------- + +Apache Cassandra 4.0 implements virtual tables (`CASSANDRA-7622 +`_). + +Definition +^^^^^^^^^^ + +A virtual table is a table that is backed by an API instead of data explicitly managed and stored as SSTables. Apache Cassandra 4.0 implements a virtual keyspace interface for virtual tables. Virtual tables are specific to each node. + +Objective +^^^^^^^^^ + +A virtual table could have several uses including: + +- Expose metrics through CQL +- Expose YAML configuration information + +How are Virtual Tables different from regular tables? +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Virtual tables and virtual keyspaces are quite different from regular tables and keyspaces respectively such as: + +- Virtual tables are read-only, but it is likely to change +- Virtual tables are not replicated +- Virtual tables are local only and non distributed +- Virtual tables have no associated SSTables +- Consistency level of the queries sent virtual tables are ignored +- Virtual tables are managed by Cassandra and a user cannot run DDL to create new virtual tables or DML to modify existing virtual tables +- Virtual tables are created in special keyspaces and not just any keyspace +- All existing virtual tables use ``LocalPartitioner``. Since a virtual table is not replicated the partitioner sorts in order of partition keys instead of by their hash. +- Making advanced queries with ``ALLOW FILTERING`` and aggregation functions may be used with virtual tables even though in normal tables we dont recommend it + +Virtual Keyspaces +^^^^^^^^^^^^^^^^^ + +Apache Cassandra 4.0 has added two new keyspaces for virtual tables: ``system_virtual_schema`` and ``system_views``. Run the following command to list the keyspaces: + +:: + + cqlsh> DESC KEYSPACES; + system_schema system system_distributed system_virtual_schema + system_auth system_traces system_views + +The ``system_virtual_schema keyspace`` contains schema information on virtual tables. The ``system_views`` keyspace contains the actual virtual tables. + +Virtual Table Limitations +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Virtual tables and virtual keyspaces have some limitations initially though some of these could change such as: + +- Cannot alter or drop virtual keyspaces or tables +- Cannot truncate virtual tables +- Expiring columns are not supported by virtual tables +- Conditional updates are not supported by virtual tables +- Cannot create tables in virtual keyspaces +- Cannot perform any operations against virtual keyspace +- Secondary indexes are not supported on virtual tables +- Cannot create functions in virtual keyspaces +- Cannot create types in virtual keyspaces +- Materialized views are not supported on virtual tables +- Virtual tables don't support ``DELETE`` statements +- Cannot ``CREATE TRIGGER`` against a virtual table +- Conditional ``BATCH`` statements cannot include mutations for virtual tables +- Cannot include a virtual table statement in a logged batch +- Mutations for virtual and regular tables cannot exist in the same batch +- Conditional ``BATCH`` statements cannot include mutations for virtual tables +- Cannot create aggregates in virtual keyspaces; but may run aggregate functions on select + +Listing and Describing Virtual Tables +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Virtual tables in a virtual keyspace may be listed with ``DESC TABLES``. The ``system_views`` virtual keyspace tables include the following: + +:: + + cqlsh> USE system_views; + cqlsh:system_views> DESC TABLES; + coordinator_scans clients tombstones_scanned internode_inbound + disk_usage sstable_tasks live_scanned caches + local_writes max_partition_size local_reads + coordinator_writes internode_outbound thread_pools + local_scans coordinator_reads settings + +Some of the salient virtual tables in ``system_views`` virtual keyspace are described in Table 1. + +Table 1 : Virtual Tables in system_views + ++------------------+---------------------------------------------------+ +|Virtual Table | Description | ++------------------+---------------------------------------------------+ +| clients |Lists information about all connected clients. | ++------------------+---------------------------------------------------+ +| disk_usage |Disk usage including disk_space, keyspace_name, | +| |and table_name by system keyspaces. | ++------------------+---------------------------------------------------+ +| local_writes |A table metric for local writes | +| |including count, keyspace_name, | +| |max, median, per_second, and | +| |table_name. | ++------------------+---------------------------------------------------+ +| caches |Displays the general cache information including | +| |cache name, capacity_bytes, entry_count, hit_count,| +| |hit_ratio double, recent_hit_rate_per_second, | +| |recent_request_rate_per_second, request_count, and | +| |size_bytes. | ++------------------+---------------------------------------------------+ +| local_reads |A table metric for local reads information. | ++------------------+---------------------------------------------------+ +| sstable_tasks |Lists currently running tasks such as compactions | +| |and upgrades on SSTables. | ++------------------+---------------------------------------------------+ +|internode_inbound |Lists information about the inbound | +| |internode messaging. | ++------------------+---------------------------------------------------+ +| thread_pools |Lists metrics for each thread pool. | ++------------------+---------------------------------------------------+ +| settings |Displays configuration settings in cassandra.yaml. | ++------------------+---------------------------------------------------+ +|max_partition_size|A table metric for maximum partition size. | ++------------------+---------------------------------------------------+ +|internode_outbound|Information about the outbound internode messaging.| +| | | ++------------------+---------------------------------------------------+ + +We shall discuss some of the virtual tables in more detail next. + +Clients Virtual Table +********************* + +The ``clients`` virtual table lists all active connections (connected clients) including their ip address, port, connection stage, driver name, driver version, hostname, protocol version, request count, ssl enabled, ssl protocol and user name: + +:: + + cqlsh:system_views> select * from system_views.clients; + address | port | connection_stage | driver_name | driver_version | hostname | protocol_version | request_count | ssl_cipher_suite | ssl_enabled | ssl_protocol | username + -----------+-------+------------------+-------------+----------------+-----------+------------------+---------------+------------------+-------------+--------------+----------- + 127.0.0.1 | 50628 | ready | null | null | localhost | 4 | 55 | null | False | null | anonymous + 127.0.0.1 | 50630 | ready | null | null | localhost | 4 | 70 | null | False | null | anonymous + + (2 rows) + +Some examples of how ``clients`` can be used are: + +- To find applications using old incompatible versions of drivers before upgrading and with ``nodetool enableoldprotocolversions`` and ``nodetool disableoldprotocolversions`` during upgrades. +- To identify clients sending too many requests. +- To find if SSL is enabled during the migration to and from ssl. + + +The virtual tables may be described with ``DESCRIBE`` statement. The DDL listed however cannot be run to create a virtual table. As an example describe the ``system_views.clients`` virtual table: + +:: + + cqlsh:system_views> DESC TABLE system_views.clients; + CREATE TABLE system_views.clients ( + address inet, + connection_stage text, + driver_name text, + driver_version text, + hostname text, + port int, + protocol_version int, + request_count bigint, + ssl_cipher_suite text, + ssl_enabled boolean, + ssl_protocol text, + username text, + PRIMARY KEY (address, port)) WITH CLUSTERING ORDER BY (port ASC) + AND compaction = {'class': 'None'} + AND compression = {}; + +Caches Virtual Table +******************** +The ``caches`` virtual table lists information about the caches. The four caches presently created are chunks, counters, keys and rows. A query on the ``caches`` virtual table returns the following details: + +:: + + cqlsh:system_views> SELECT * FROM system_views.caches; + name | capacity_bytes | entry_count | hit_count | hit_ratio | recent_hit_rate_per_second | recent_request_rate_per_second | request_count | size_bytes + ---------+----------------+-------------+-----------+-----------+----------------------------+--------------------------------+---------------+------------ + chunks | 229638144 | 29 | 166 | 0.83 | 5 | 6 | 200 | 475136 + counters | 26214400 | 0 | 0 | NaN | 0 | 0 | 0 | 0 + keys | 52428800 | 14 | 124 | 0.873239 | 4 | 4 | 142 | 1248 + rows | 0 | 0 | 0 | NaN | 0 | 0 | 0 | 0 + + (4 rows) + +Settings Virtual Table +********************** +The ``settings`` table is rather useful and lists all the current configuration settings from the ``cassandra.yaml``. The encryption options are overridden to hide the sensitive truststore information or passwords. The configuration settings however cannot be set using DML on the virtual table presently: +:: + + cqlsh:system_views> SELECT * FROM system_views.settings; + + name | value + -------------------------------------+-------------------- + allocate_tokens_for_keyspace | null + audit_logging_options_enabled | false + auto_snapshot | true + automatic_sstable_upgrade | false + cluster_name | Test Cluster + enable_transient_replication | false + hinted_handoff_enabled | true + hints_directory | /home/ec2-user/cassandra/data/hints + incremental_backups | false + initial_token | null + ... + ... + ... + rpc_address | localhost + ssl_storage_port | 7001 + start_native_transport | true + storage_port | 7000 + stream_entire_sstables | true + (224 rows) + + +The ``settings`` table can be really useful if yaml file has been changed since startup and dont know running configuration, or to find if they have been modified via jmx/nodetool or virtual tables. + + +Thread Pools Virtual Table +************************** + +The ``thread_pools`` table lists information about all thread pools. Thread pool information includes active tasks, active tasks limit, blocked tasks, blocked tasks all time, completed tasks, and pending tasks. A query on the ``thread_pools`` returns following details: + +:: + + cqlsh:system_views> select * from system_views.thread_pools; + + name | active_tasks | active_tasks_limit | blocked_tasks | blocked_tasks_all_time | completed_tasks | pending_tasks + ------------------------------+--------------+--------------------+---------------+------------------------+-----------------+--------------- + AntiEntropyStage | 0 | 1 | 0 | 0 | 0 | 0 + CacheCleanupExecutor | 0 | 1 | 0 | 0 | 0 | 0 + CompactionExecutor | 0 | 2 | 0 | 0 | 881 | 0 + CounterMutationStage | 0 | 32 | 0 | 0 | 0 | 0 + GossipStage | 0 | 1 | 0 | 0 | 0 | 0 + HintsDispatcher | 0 | 2 | 0 | 0 | 0 | 0 + InternalResponseStage | 0 | 2 | 0 | 0 | 0 | 0 + MemtableFlushWriter | 0 | 2 | 0 | 0 | 1 | 0 + MemtablePostFlush | 0 | 1 | 0 | 0 | 2 | 0 + MemtableReclaimMemory | 0 | 1 | 0 | 0 | 1 | 0 + MigrationStage | 0 | 1 | 0 | 0 | 0 | 0 + MiscStage | 0 | 1 | 0 | 0 | 0 | 0 + MutationStage | 0 | 32 | 0 | 0 | 0 | 0 + Native-Transport-Requests | 1 | 128 | 0 | 0 | 130 | 0 + PendingRangeCalculator | 0 | 1 | 0 | 0 | 1 | 0 + PerDiskMemtableFlushWriter_0 | 0 | 2 | 0 | 0 | 1 | 0 + ReadStage | 0 | 32 | 0 | 0 | 13 | 0 + Repair-Task | 0 | 2147483647 | 0 | 0 | 0 | 0 + RequestResponseStage | 0 | 2 | 0 | 0 | 0 | 0 + Sampler | 0 | 1 | 0 | 0 | 0 | 0 + SecondaryIndexManagement | 0 | 1 | 0 | 0 | 0 | 0 + ValidationExecutor | 0 | 2147483647 | 0 | 0 | 0 | 0 + ViewBuildExecutor | 0 | 1 | 0 | 0 | 0 | 0 + ViewMutationStage | 0 | 32 | 0 | 0 | 0 | 0 + +(24 rows) + +Internode Inbound Messaging Virtual Table +***************************************** + +The ``internode_inbound`` virtual table is for the internode inbound messaging. Initially no internode inbound messaging may get listed. In addition to the address, port, datacenter and rack information includes corrupt frames recovered, corrupt frames unrecovered, error bytes, error count, expired bytes, expired count, processed bytes, processed count, received bytes, received count, scheduled bytes, scheduled count, throttled count, throttled nanos, using bytes, using reserve bytes. A query on the ``internode_inbound`` returns following details: + +:: + + cqlsh:system_views> SELECT * FROM system_views.internode_inbound; + address | port | dc | rack | corrupt_frames_recovered | corrupt_frames_unrecovered | + error_bytes | error_count | expired_bytes | expired_count | processed_bytes | + processed_count | received_bytes | received_count | scheduled_bytes | scheduled_count | throttled_count | throttled_nanos | using_bytes | using_reserve_bytes + ---------+------+----+------+--------------------------+----------------------------+- + ---------- + (0 rows) + +SSTables Tasks Virtual Table +**************************** + +The ``sstable_tasks`` could be used to get information about running tasks. It lists following columns: + +:: + + cqlsh:system_views> SELECT * FROM sstable_tasks; + keyspace_name | table_name | task_id | kind | progress | total | unit + ---------------+------------+--------------------------------------+------------+----------+----------+------- + basic | wide2 | c3909740-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 60418761 | 70882110 | bytes + basic | wide2 | c7556770-cdf7-11e9-a8ed-0f03de2d9ae1 | compaction | 2995623 | 40314679 | bytes + + +As another example, to find how much time is remaining for SSTable tasks, use the following query: + +:: + + SELECT total - progress AS remaining + FROM system_views.sstable_tasks; + +Other Virtual Tables +******************** + +Some examples of using other virtual tables are as follows. + +Find tables with most disk usage: + +:: + + cqlsh> SELECT * FROM disk_usage WHERE mebibytes > 1 ALLOW FILTERING; + + keyspace_name | table_name | mebibytes + ---------------+------------+----------- + keyspace1 | standard1 | 288 + tlp_stress | keyvalue | 3211 + +Find queries on table/s with greatest read latency: + +:: + + cqlsh> SELECT * FROM local_read_latency WHERE per_second > 1 ALLOW FILTERING; + + keyspace_name | table_name | p50th_ms | p99th_ms | count | max_ms | per_second + ---------------+------------+----------+----------+----------+---------+------------ + tlp_stress | keyvalue | 0.043 | 0.152 | 49785158 | 186.563 | 11418.356 + + +The system_virtual_schema keyspace +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ``system_virtual_schema`` keyspace has three tables: ``keyspaces``, ``columns`` and ``tables`` for the virtual keyspace definitions, virtual table definitions, and virtual column definitions respectively. It is used by Cassandra internally and a user would not need to access it directly. diff --git a/doc/source/operating/Figure_1_backups.jpg b/doc/source/operating/Figure_1_backups.jpg new file mode 100644 index 0000000000000000000000000000000000000000..160013d76fe287ff97d965d8e2cdd8a5f683d63d GIT binary patch literal 38551 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 b|7qypuK&_lBB%clf^miYnX@ literal 0 HcmV?d00001 diff --git a/doc/source/operating/Figure_1_read_repair.jpg b/doc/source/operating/Figure_1_read_repair.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d771550a4f0f91a9cad392f4c7b77779e8b5b5b8 GIT binary patch literal 36919 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%0AXqO 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 literal 0 HcmV?d00001 diff --git a/doc/source/development/images/docs_editor.png b/doc/source/development/images/docs_editor.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9997bcc4062b3619cba66eb74360b0b8845b8f GIT binary patch literal 106175 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 %oasMSa} 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 z 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

    +e(`bcs|S<8GJD3s`6)&n;{Jg3f* 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