From 664a4cf6e654a07ee6e7dc660d64900e3e95774a Mon Sep 17 00:00:00 2001 From: Petr Malik Date: Tue, 28 Apr 2015 15:47:05 -0400 Subject: [PATCH] Configuration Groups for Cassandra Change-Id: I5f472f6676f0a9b80af43215d196cf5b9f579ac1 Blueprint: cassandra-configuration-groups --- doc/source/index.rst | 8 + .../cassandra-configuration-groups.rst | 249 ++++++++++++++++++ 2 files changed, 257 insertions(+) create mode 100644 specs/liberty/cassandra-configuration-groups.rst diff --git a/doc/source/index.rst b/doc/source/index.rst index 5cf2203..58e348c 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -20,6 +20,14 @@ Kilo approved specs: specs/kilo/* +Liberty approved specs: + +.. toctree:: + :glob: + :maxdepth: 1 + + specs/liberty/* + ====================== Repository Information ====================== diff --git a/specs/liberty/cassandra-configuration-groups.rst b/specs/liberty/cassandra-configuration-groups.rst new file mode 100644 index 0000000..47dea31 --- /dev/null +++ b/specs/liberty/cassandra-configuration-groups.rst @@ -0,0 +1,249 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + + Sections of this template were taken directly from the Nova spec + template at: + https://github.com/openstack/nova-specs/blob/master/specs/template.rst + +============================== +Cassandra Configuration Groups +============================== + +Launchpad blueprint: + +https://blueprints.launchpad.net/trove/+spec/cassandra-configuration-groups + +Problem Description +=================== + +The Cassandra datastore currently does not support configuration groups. + +Proposed Change +=============== + +The patch set will implement configuration groups for Cassandra 2.1. + +Configuration +------------- + +The configuration template will be updated to the default template for the +target platform. + + * templates/cassandra/config.template + +Database +-------- + +None + +Public API +---------- + +None + +Public API Security +------------------- + +None + +Internal API +------------ + +None + +Guest Agent +----------- + +Cassandra stores its configuration in 'cassandra.yaml' file +(commonly in '/etc/cassandra'). +The node (datastore service) has to be restarted for any changes to the +configuration file to take effect. All configuration changes will therefore be +requiring database restart and 'apply_overrides' will be implemented as no-op. + +Overrides will be implemented by replacing the current file with an +updated one. +The old file will be backed up in the same directory (as *\*.old*) and +restored on configuration reset. + +Most configuration properties will be available via configuration groups. +Some, however, do not make sense in the Trove context. + +These include: + + - irrelevant options (like automatic snapshots, since the Trove user cannot + retrieve them) + - guestagent specific (e.g. file paths, passwords) + - items that Trove needs to control (replication/clustering properties) + +See `Available Configuration Properties`_ for the full list of supported +options. + +The user should be able to specify configurations properties as standard Python +YAML objects - key-value pairs and dicts. + +Available Configuration Properties +---------------------------------- + +Properties not included in the lists are kept at their default values +and are not configurable via Trove. + +The properties configurable by the user via the Trove API: + + - cluster_name + - listen_address + - commit_failure_policy + - disk_failure_policy + - endpoint_snitch + - seed_provider + - compaction_throughput_mb_per_sec + - memtable_total_space_in_mb + - concurrent_reads + - concurrent_writes + - phi_convict_threshold + - commitlog_sync + - commitlog_segment_size_in_mb + - commitlog_total_space_in_mb + - compaction_preheat_key_cache + - concurrent_compactors + - in_memory_compaction_limit_in_mb + - preheat_kernel_page_cache + - sstable_preemptive_open_interval_in_mb + - memtable_allocation_type + - memtable_cleanup_threshold + - file_cache_size_in_mb + - memtable_flush_queue_size + - memtable_flush_writers + - memtable_heap_space_in_mb + - memtable_offheap_space_in_mb + - column_index_size_in_kb + - index_summary_capacity_in_mb + - index_summary_resize_interval_in_minutes + - reduce_cache_capacity_to + - reduce_cache_sizes_at + - stream_throughput_outbound_megabits_per_sec + - inter_dc_stream_throughput_outbound_megabits_per_sec + - trickle_fsync + - trickle_fsync_interval_in_kb + - auto_bootstrap + - batch_size_warn_threshold_in_kb + - broadcast_address + - initial_token + - initial_token + - num_tokens + - partitioner + - key_cache_keys_to_save + - key_cache_save_period + - key_cache_size_in_mb + - row_cache_keys_to_save + - row_cache_size_in_mb + - row_cache_save_period + - memory_allocator + - counter_cache_size_in_mb + - counter_cache_save_period + - counter_cache_keys_to_save + - counter_cache_keys_to_save + - tombstone_warn_threshold + - tombstone_failure_threshold + - range_request_timeout_in_ms + - read_request_timeout_in_ms + - counter_write_request_timeout_in_ms + - cas_contention_timeout_in_ms + - truncate_request_timeout_in_ms + - write_request_timeout_in_ms + - request_timeout_in_ms + - cross_node_timeout + - internode_send_buff_size_in_bytes + - internode_recv_buff_size_in_bytes + - internode_compression + - inter_dc_tcp_nodelay + - streaming_socket_timeout_in_ms + - native_transport_max_threads + - native_transport_max_frame_size_in_mb + - broadcast_rpc_address + - rpc_keepalive + - rpc_max_threads + - rpc_min_threads + - rpc_recv_buff_size_in_bytes + - rpc_send_buff_size_in_bytes + - rpc_server_type + - dynamic_snitch_badness_threshold + - dynamic_snitch_reset_interval_in_ms + - dynamic_snitch_update_interval_in_ms + - hinted_handoff_enabled + - hinted_handoff_throttle_in_kb + - max_hint_window_in_ms + - max_hints_delivery_threads + - batchlog_replay_throttle_in_kb + - request_scheduler + - request_scheduler_id + - request_scheduler_options + - thrift_framed_transport_size_in_mb + - thrift_max_message_length_in_mb + - permissions_validity_in_ms + - permissions_update_interval_in_ms + +Non-configurable properties with updated default values: + + - *authenticator*: **org.apache.cassandra.auth.PasswordAuthenticator** + - *authorizer*: **org.apache.cassandra.auth.CassandraAuthorizer** + - *snapshot_before_compaction*: **false** + - *auto_snapshot*: **false** + - *rpc_address*: **(controlled-by guestagent)** + - *broadcast_rpc_address*: **(controlled-by guestagent)** + - *listen_address*: **(controlled-by guestagent)** + - *seed_provider.parameters.seeds*: **(controlled-by guestagent)** + +Alternatives +------------ + +None + +Implementation +============== + +Assignee(s) +----------- + +Petr Malik + +Milestones +---------- + +Liberty + +Work Items +---------- + +1. Implement functionality to handle (read/write/update) YAML files. +2. Implement configuration-related manager API calls. + +Upgrade Implications +==================== + +None + +Dependencies +============ + +The patch set will be building on functionality implemented in blueprint: +cassandra-database-user-functions + +Testing +======= + +Unittests will be added to validate implemented functions and non-trivial +codepaths. + +Documentation Impact +==================== + +The datastore documentation should be updated to reflect the enabled features. + +References +========== + +.. [1] Documentation on Cassandra 2.1: http://docs.datastax.com/en/cassandra/2.1/cassandra/gettingStartedCassandraIntro.html +.. [2] Documentation on Cassandra 2.1 configuration properties: http://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configTOC.html