{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "http://cassandra/docs/mesosphere.com",
    "type": "object",
    "properties": {
        "service": {
            "id": "http://cassandra/docs/mesosphere.com/service",
            "type": "object",
            "description": "DC/OS service configuration properties",
            "properties": {
                "name": {
                    "id": "http://cassandra/docs/mesosphere.com/service/name",
                    "type": "string",
                    "description": "The name of the DSE Cassandra service instance.",
                    "default": "datastax"
                },
                "user": {
                    "id": "http://cassandra/docs/mesosphere.com/service/user",
                    "type": "string",
                    "description": "The user that the service will run as.",
                    "default": "root"
                },
                "principal": {
                    "description": "The principal for the service instance.",
                    "type": "string",
                    "default": "datastax-principal"
                },
                "secret_name": {
                    "description": "Name of the Secret Store credentials to use for DC/OS service authentication. This should be left empty unless service authentication is needed.",
                    "type": "string",
                    "default": ""
                },
                "cpus": {
                    "id": "http://cassandra/docs/mesosphere.com/service/cpus",
                    "type": "number",
                    "description": "The cpu shares used by the DSE Cassandra service scheduler.",
                    "default": 0.5
                },
                "mem": {
                    "id": "http://cassandra/docs/mesosphere.com/service/mem",
                    "type": "integer",
                    "description": "The memory used by the DSE Cassandra service scheduler in Mb.",
                    "default": 2048
                },
                "heap": {
                    "id": "http://cassandra/docs/mesosphere.com/service/heap",
                    "type": "integer",
                    "description": "The JVM heap used by the DSE Cassandra service scheduler in Mb.",
                    "default": 1024
                },
                "api_port": {
                    "id": "http://cassandra/docs/mesosphere.com/service/api_port",
                    "type": "integer",
                    "description": "The port that the DSE Cassandra service API will accept on.",
                    "default": 9000
                },
                "placement_strategy": {
                    "id": "http://cassandra/docs/mesosphere.com/service/placement_strategy",
                    "type": "string",
                    "description": "The placement strategy for Cassandra nodes. This should always be NODE.",
                    "default": "NODE"
                },
                "data_center": {
                    "id": "http://cassandra/docs/mesosphere.com/service/data_center",
                    "type": "string",
                    "description": "The data center that the Cassandra cluster managed by the service is deployed in.",
                    "default": "dc1"
                },
                "data_center_url": {
                    "id": "http://cassandra/docs/mesosphere.com/service/data_center_url",
                    "type": "string",
                    "description": "The URL of from which the the data center for the cluster managed by this service instance will server its data center information."
                },
                "external_data_center_urls": {
                    "id": "http://cassandra/docs/mesosphere.com/service/data_center_url",
                    "type": "string",
                    "description": "A comma separated list of the URLs from which this service instance retrieve data center info to form a cluster spanning multiple data centers."
                }
            },
            "additionalProperties": false,
            "required": [
                "name",
                "user",
                "cpus",
                "mem",
                "heap",
                "api_port",
                "placement_strategy"
            ]
        },
        "nodes": {
            "id": "http://cassandra/docs/mesosphere.com/node",
            "type": "object",
            "description": "Cassandra node configuration properties",
            "properties": {
                "count": {
                    "id": "http://cassandra/docs/mesosphere.com/node/count",
                    "type": "integer",
                    "description": "The number of Cassandra nodes in the cluster.",
                    "default": 3
                },
                "cpus": {
                    "id": "http://cassandra/docs/mesosphere.com/node/cpus",
                    "type": "number",
                    "description": "The number of cpu shares allocated to the Cassandra process.",
                    "default": 0.5
                },
                "mem": {
                    "id": "http://cassandra/docs/mesosphere.com/node/mem",
                    "type": "integer",
                    "description": "The amount of memory, in MB, allocated to the Cassandra process.",
                    "default": 4096
                },
                "disk": {
                    "id": "http://cassandra/docs/mesosphere.com/node/disk",
                    "type": "integer",
                    "description": "The amount of disk, in MB, allocated to the Cassandra process.",
                    "default": 10240
                },
                "disk_type": {
                    "id": "http://cassandra/docs/mesosphere.com/node/diskType",
                    "type": "string",
                    "description": "Disk type to be used for storing Cassandra data. See documentation. [ROOT, MOUNT]",
                    "default": "ROOT"
                },
                "heap": {
                    "id": "http://cassandra/docs/mesosphere.com/node/heap",
                    "type": "object",
                    "description": "The Cassandra process JVM heap configuration object.",
                    "properties": {
                        "size": {
                            "id": "http://cassandra/docs/mesosphere.com/node/heap/size",
                            "type": "integer",
                            "description": "The amount of JVM heap, in MB, allocated to the Cassandra process.",
                            "default": 2048
                        },
                        "new": {
                            "id": "http://cassandra/docs/mesosphere.com/node/heap/new",
                            "type": "integer",
                            "description": "The amount of JVM new generation heap, in MB, allocated to the Cassandra process.",
                            "default": 100
                        },
                        "gc": {
                            "id": "http://cassandra/docs/mesosphere.com/node/heap/gc",
                            "type": "string",
                            "enum": [
                                "G1",
                                "CMS"
                            ],
                            "description": "The Garbage collector for JVM (Either G1 or CMS).",
                            "default": "CMS"
                        }
                    },
                    "additionalProperties": false,
                    "required": [
                        "size",
                        "new",
                        "gc"
                    ]
                },
                "seeds": {
                    "id": "http://cassandra/docs/mesosphere.com/node/seeds",
                    "type": "integer",
                    "description": "The number of Cassandra seed nodes in the cluster",
                    "default": 2
                }
            },
            "additionalProperties": false,
            "required": [
                "cpus",
                "mem",
                "disk",
                "heap",
                "count",
                "seeds"
            ]
        },
        "cassandra": {
            "id": "http://cassandra/docs/mesosphere.com/cassandra",
            "description": "Cassandra service configuration properties",
            "type": "object",
            "properties": {
                "cluster_name": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/cluster_name",
                    "type": "string",
                    "description": "The name of the cluster managed by the Service",
                    "default": "cassandra"
                },
                "jmx_port": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/jmxPort",
                    "type": "integer",
                    "description": "The JMX port that will be used to interface with the Cassandra application.",
                    "default": 7199
                },
                "num_tokens": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/numTokens",
                    "type": "integer",
                    "description": "The number of tokens assigned to each node.",
                    "default": 256
                },
                "hinted_handoff_enabled": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/hintedHandoffEnabled",
                    "type": "boolean",
                    "description": "If true, hinted handoff is enabled for the cluster.",
                    "default": true
                },
                "max_hint_window_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/maxHintWindowInMs",
                    "type": "integer",
                    "description": "The maximum amount of time, in ms, that hints are generates hints for an unresponsive node.",
                    "default": 10800000
                },
                "hinted_handoff_throttle_in_kb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/hintedHandoffThrottleInKb",
                    "type": "integer",
                    "description": "The maximum throttle per delivery thread in kilobytes per second.",
                    "default": 1024
                },
                "max_hints_delivery_threads": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/maxHintsDeliveryThreads",
                    "type": "integer",
                    "description": "The maximum number of delivery threads for hinted handoff.",
                    "default": 2
                },
                "batchlog_replay_throttle_in_kb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/batchlogReplayThrottleInKb",
                    "type": "integer",
                    "description": "The total throttle for log replay in Kpbs.",
                    "default": 1024
                },
                "partitioner": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/partitioner",
                    "type": "string",
                    "description": "The partitioner used to distribute rows across the cluster. Murmur3Partitioner is the recommended setting. RandomPartitioner and ByteOrderedPartitioner are supported for legacy applications.",
                    "default": "org.apache.cassandra.dht.Murmur3Partitioner"
                },
                "key_cache_save_period": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/keyCacheSavePeriod",
                    "type": "integer",
                    "description": "The duration in seconds that keys are saved in cache. Saved caches greatly improve cold-start speeds and has relatively little effect on I/O.",
                    "default": 14400
                },
                "row_cache_size_in_mb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/rowCacheSizeInMb",
                    "type": "integer",
                    "description": "Maximum size of the row cache in memory. Row cache can save more time than key_cache_size_in_mb, but is space-intensive because it contains the entire row. Use the row cache only for hot rows or static rows. 0 disables the row cache.",
                    "default": 0
                },
                "row_cache_save_period": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/rowCacheSavePeriod",
                    "type": "integer",
                    "description": "Duration in seconds that rows are saved in cache. 0 disables caching.",
                    "default": 0
                },
                "commitlog_sync_period_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/commitlogSyncPeriodInMs",
                    "type": "integer",
                    "description": "The number of milliseconds between disk fsync calls.",
                    "default": 10000
                },
                "commitlog_segment_size_in_mb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/commitlogSegmentSizeInMb",
                    "type": "integer",
                    "description": "The size of each commit log segment in Mb.",
                    "default": 32
                },
                "concurrent_reads": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/concurrentReads",
                    "type": "integer",
                    "description": "For workloads with more data than can fit in memory, the bottleneck is reads fetching data from disk. Setting to (16 times the number of drives) allows operations to queue low enough in the stack so that the OS and drives can reorder them.",
                    "default": 16
                },
                "concurrent_writes": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/concurrentWrites",
                    "type": "integer",
                    "description": "Writes in Cassandra are rarely I/O bound, so the ideal number of concurrent writes depends on the number of CPU cores in your system. The recommended value is 8 times the number of cpu cores.",
                    "default": 32
                },
                "concurrent_counter_writes": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/concurrentCounterWrites",
                    "type": "integer",
                    "description": "Counter writes read the current values before incrementing and writing them back. The recommended value is (16 times the number of drives) .",
                    "default": 16
                },
                "memtable_allocation_type": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/memtableAllocationType",
                    "type": "string",
                    "description": "The type of allocations for the Cassandra memtable. heap_buffers keep all data on the JVM heap. offheap_buffers may reduce heap utilization for large string or binary values. offheap_objects may improve heap size for small integers or UUIDs as well. Both off heap options will increase read latency.",
                    "default": "heap_buffers"
                },
                "index_summary_resize_interval_in_minutes": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/indexSummaryResizeIntervalInMinutes",
                    "type": "integer",
                    "description": "How frequently index summaries should be re-sampled in minutes. This is done periodically to redistribute memory from the fixed-size pool to SSTables proportional their recent read rates.",
                    "default": 60
                },
                "storage_port": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/storagePort",
                    "type": "integer",
                    "description": "The port for inter-node communication.",
                    "default": 7000
                },
                "start_native_transport": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/startNativeTransport",
                    "type": "boolean",
                    "description": "If true CQL is enabled.",
                    "default": true
                },
                "native_transport_port": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/nativeTransportPort",
                    "type": "integer",
                    "description": "The port for CQL communication.",
                    "default": 9042
                },
                "start_rpc": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/startRpc",
                    "type": "boolean",
                    "description": "If true Thrift RPC is enable. This is deprecated by may be necessary for legacy applications.",
                    "default": false
                },
                "rpc_port": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/rpcPort",
                    "type": "integer",
                    "description": "The port for Thrift RPC communication.",
                    "default": 9160
                },
                "rpc_keepalive": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/rpcKeepalive",
                    "type": "boolean",
                    "description": "Enables or TCP keepalive for RPC connections.",
                    "default": true
                },
                "thrift_framed_transport_size_in_mb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/thriftFramedTransportSizeInMb",
                    "type": "integer",
                    "description": "Frame size (maximum field length) for Thrift.",
                    "default": 15
                },
                "tombstone_warn_threshold": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/tombstoneWarnThreshold",
                    "type": "integer",
                    "description": "The maximum number of tombstones a query can scan before warning.",
                    "default": 1000
                },
                "tombstone_failure_threshold": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/tombstoneFailureThreshold",
                    "type": "integer",
                    "description": "The maximum number of tombstones a query can scan before aborting.",
                    "default": 100000
                },
                "column_index_size_in_kb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/columnIndexSizeInKb",
                    "type": "integer",
                    "description": "The granularity of the index of rows within a partition. For huge rows, decrease this setting to improve seek time. If you use key cache, be careful not to make this setting too large because key cache will be overwhelmed.",
                    "default": 64
                },
                "batch_size_warn_threshold_in_kb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/batchSizeWarnThresholdInKb",
                    "type": "integer",
                    "description": "Warn the operator on a batch size exceeding this value in kilobytes. Caution should be taken on increasing the size of this threshold as it can lead to node instability.",
                    "default": 5
                },
                "batch_size_fail_threshold_in_kb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/batchSizeFailThresholdInKb",
                    "type": "integer",
                    "description": "Fail batch sizes exceeding this value in kilobytes. Caution should be taken on increasing the size of this threshold as it can lead to node instability.",
                    "default": 50
                },
                "compaction_throughput_mb_per_sec": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/compactionThroughputMbPerSec",
                    "type": "integer",
                    "description": "Throttles compaction to the specified total throughput across the node. Compaction frequency varies with direct proportion to write throughput and is necessary to limit the SSTable size. The recommended value is 16 to 32 times the rate of write throughput (in MB/second).",
                    "default": 16
                },
                "sstable_preemptive_open_interval_in_mb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/sstablePreemptiveOpenIntervalInMb",
                    "type": "integer",
                    "description": "When compacting, the replacement opens SSTables before they are completely written and uses in place of the prior SSTables for any range previously written. This setting helps to smoothly transfer reads between the SSTables by reducing page cache churn and keeps hot rows hot.",
                    "default": 50
                },
                "read_request_timeout_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/readRequestTimeoutInMs",
                    "type": "integer",
                    "description": "The time that the coordinator waits for read operations to complete in ms.",
                    "default": 5000
                },
                "range_request_timeout_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/rangeRequestTimeoutInMs",
                    "type": "integer",
                    "description": "The time that the coordinator waits for range scans complete in ms.",
                    "default": 10000
                },
                "write_request_timeout_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/writeRequestTimeoutInMs",
                    "type": "integer",
                    "description": "The time that the coordinator waits for write operations to complete in ms.",
                    "default": 2000
                },
                "counter_write_request_timeout_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/counterWriteRequestTimeoutInMs",
                    "type": "integer",
                    "description": "The time that the coordinator waits for counter write operations to complete in ms.",
                    "default": 5000
                },
                "cas_contention_timeout_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/casContentionTimeoutInMs",
                    "type": "integer",
                    "description": "The time for which the coordinator will retry CAS operations on the same row in ms.",
                    "default": 1000
                },
                "truncate_request_timeout_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/truncateRequestTimeoutInMs",
                    "type": "integer",
                    "description": "The time that the coordinator waits for truncate operations to complete in ms.",
                    "default": 60000
                },
                "request_timeout_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/requestTimeoutInMs",
                    "type": "integer",
                    "description": "The default timeout for all other requests in ms.",
                    "default": 10000
                },
                "dynamic_snitch_update_interval_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/dynamicSnitchUpdateIntervalInMs",
                    "type": "integer",
                    "description": "The time, in ms, the snitch will wait before updating node scores.",
                    "default": 100
                },
                "dynamic_snitch_reset_interval_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/dynamicSnitchResetIntervalInMs",
                    "type": "integer",
                    "description": "The time, in ms, the snitch will wait before resetting node scores allowing bad nodes to recover.",
                    "default": 600000
                },
                "dynamic_snitch_badness_threshold": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/dynamicSnitchBadnessThreshold",
                    "type": "number",
                    "description": "Sets the performance threshold for dynamically routing client requests away from a poorly performing node.",
                    "default": 0.1
                },
                "internode_compression": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/internodeCompression",
                    "type": "string",
                    "description": "Controls whether traffic between nodes is compressed. all compresses all traffic. none compresses no traffic. dc compresses between datacenters.",
                    "default": "all"
                },
                "max_hints_file_size_in_mb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/max_hints_file_size_in_mb",
                    "type": "integer",
                    "description": "The maximum size of the hints file in Mb.",
                    "default": 128
                },
                "hints_flush_period_in_ms": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/hints_flush_period_in_ms",
                    "type": "integer",
                    "description": "The time, in ms, for the period in which hints are flushed to disk.",
                    "default": 10000
                },
                "concurrent_materialized_view_writes": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/concurrent_materialized_view_writes",
                    "type": "integer",
                    "description": "The maximum number of concurrent writes to materialized views.",
                    "default": 32
                },
                "commitlog_total_space_in_mb": {
                    "id": "http://cassandra/docs/mesosphere.com/cassandra/commitlog_total_space_in_mb",
                    "type": "integer",
                    "description": "The total size of the commit log in Mb.",
                    "default": 8192
                }
            },
            "additionalProperties": false,
            "required": [
                "cluster_name",
                "jmx_port",
                "num_tokens",
                "max_hint_window_in_ms",
                "hinted_handoff_enabled",
                "hinted_handoff_throttle_in_kb",
                "max_hints_delivery_threads",
                "batchlog_replay_throttle_in_kb",
                "partitioner",
                "key_cache_save_period",
                "row_cache_size_in_mb",
                "row_cache_save_period",
                "commitlog_sync_period_in_ms",
                "commitlog_segment_size_in_mb",
                "concurrent_reads",
                "concurrent_writes",
                "concurrent_counter_writes",
                "memtable_allocation_type",
                "index_summary_resize_interval_in_minutes",
                "storage_port",
                "start_native_transport",
                "native_transport_port",
                "start_rpc",
                "rpc_port",
                "rpc_keepalive",
                "thrift_framed_transport_size_in_mb",
                "tombstone_warn_threshold",
                "tombstone_failure_threshold",
                "column_index_size_in_kb",
                "batch_size_warn_threshold_in_kb",
                "batch_size_fail_threshold_in_kb",
                "compaction_throughput_mb_per_sec",
                "sstable_preemptive_open_interval_in_mb",
                "read_request_timeout_in_ms",
                "range_request_timeout_in_ms",
                "write_request_timeout_in_ms",
                "counter_write_request_timeout_in_ms",
                "cas_contention_timeout_in_ms",
                "truncate_request_timeout_in_ms",
                "request_timeout_in_ms",
                "dynamic_snitch_update_interval_in_ms",
                "dynamic_snitch_reset_interval_in_ms",
                "dynamic_snitch_badness_threshold",
                "internode_compression",
                "max_hints_file_size_in_mb",
                "hints_flush_period_in_ms",
                "concurrent_materialized_view_writes",
                "commitlog_total_space_in_mb"
            ]
        },
        "dse": {
            "type": "object",
            "description": "DataStax specific configuration",
            "properties": {
                "use_dse_role_manager": {
                    "type": "boolean",
                    "description": "If true the DSE Role manager is used.",
                    "default": false
                },
                "transitional_mode": {
                    "type": "string",
                    "enum": [
                        "disabled",
                        "normal",
                        "strict"
                    ],
                    "description": "The transitional_mode option allows DSE authentication and authorization to operate in a transitional mode during setup of authorization in a cluster.",
                    "default": "disabled"
                },
                "authentication_options": {
                    "type": "object",
                    "description": "DataStax authentication options.",
                    "properties": {
                        "enabled": {
                            "type": "boolean",
                            "description": "If true the DSE Authentication manager is used.",
                            "default": false
                        },
                        "default_scheme": {
                            "type": "string",
                            "enum": [
                                "kerberos",
                                "internal"
                            ],
                            "description": "The default scheme for authentication. Note that internal will be enabled as an alternate.",
                            "default": "kerberos"
                        },
                        "scheme_permissions": {
                            "type": "boolean",
                            "description": "If true than scheme permissions must be granted on a per role basis.",
                            "default": true
                        },
                        "allow_digest_with_kerberos": {
                            "type": "boolean",
                            "description": "If true than message digest authentication is also allowed for Kerberos auth.",
                            "default": true
                        },
                        "plain_text_without_ssl": {
                            "type": "string",
                            "description": "The action taken when plain text auth request are sent over an unencrypted channel.",
                            "enum": [
                                "allow",
                                "warn",
                                "block"
                            ],
                            "default": "warn"
                        }
                    },
                    "required": [
                        "enabled",
                        "default_scheme",
                        "scheme_permissions",
                        "allow_digest_with_kerberos",
                        "plain_text_without_ssl"
                    ]
                },
                "authorization_options": {
                    "type": "object",
                    "description": "DataStax authorization options.",
                    "properties": {
                        "enabled": {
                            "type": "boolean",
                            "description": "If true DataStax authorization will be used.",
                            "default": false
                        }
                    },
                    "required": [
                        "enabled"
                    ]
                },
                "kerberos_options": {
                    "type": "object",
                    "description": "Kerberos configuration options. These will be ignored unless Kerberos is selected for authentication and DSE authentication is enabled.",
                    "properties": {
                        "keytab": {
                            "type": "string",
                            "description": "The name of the keytab file pointed to by the ketab_location property in the executor configuration object.",
                            "default": "dse.keytab"
                        },
                        "service_principal": {
                            "type": "string",
                            "description": "The Kerberos service principal for DSE natice connections.",
                            "default": "dse/_HOST@REALM"
                        },
                        "http_principal": {
                            "type": "string",
                            "description": "The Kerberos service principal for HTTP connections.",
                            "default": "HTTP/_HOST@REALM"
                        },
                        "qop": {
                            "type": "string",
                            "description": "The quality of protection for authentication. Note that auth-conf is currently not supported due to a lack of SSL support.",
                            "enum": [
                                "auth",
                                "auth-int"
                            ],
                            "default": "auth"
                        }
                    },
                    "required": [
                        "keytab",
                        "service_principal",
                        "http_principal",
                        "qop"
                    ]
                },
                "node_health_options": {
                    "type": "object",
                    "description": "Node health estimation options.",
                    "properties": {
                        "refresh_rate_ms": {
                            "type": "integer",
                            "description": "The refresh rate for node health estimation.",
                            "default": 60000
                        },
                        "uptime_ramp_up_period_seconds": {
                            "type": "integer",
                            "description": "The amount of continuous uptime required for the node to reach the maximum uptime score.",
                            "default": 86400
                        },
                        "dropped_mutation_window_minutes": {
                            "type": "integer",
                            "description": "The window in the past over which the rate of dropped mutations affects the node health score.",
                            "default": 30
                        }
                    },
                    "required": [
                        "refresh_rate_ms",
                        "uptime_ramp_up_period_seconds",
                        "dropped_mutation_window_minutes"
                    ]
                },
                "lease_metrics_options": {
                    "type": "object",
                    "description": "Lease subsystem metric options.",
                    "properties": {
                        "enabled": {
                            "type": "boolean",
                            "description": "If true lease metrics are enabled.",
                            "default": false
                        },
                        "ttl_seconds": {
                            "type": "integer",
                            "description": "The length of time the lease holder log persists.",
                            "default": 604800
                        }
                    },
                    "required": [
                        "enabled",
                        "ttl_seconds"
                    ]
                },
                "audit_logging_options": {
                    "type": "object",
                    "description": "Audit logging configuration options.",
                    "properties": {
                        "enabled": {
                            "type": "boolean",
                            "description": "If ture, audit logging is enabled",
                            "default": false
                        },
                        "logger": {
                            "type": "string",
                            "description": "The audit logger implementation class.",
                            "default": "SLF4JAuditWriter"
                        },
                        "retention_time": {
                            "type": "integer",
                            "description": "The retention time for audit logs. Note, 0 indicates forever.",
                            "default": 0
                        },
                        "cassandra_audit_writer_options": {
                            "type": "object",
                            "description": "Logger configuration object.",
                            "properties": {
                                "mode": {
                                    "type": "string",
                                    "description": "The mode of the logger. sync will block request for auditing.",
                                    "enum": [
                                        "sync",
                                        "async"
                                    ],
                                    "default": "sync"
                                },
                                "batch_size": {
                                    "type": "integer",
                                    "description": "The batch size for audit log writes. Only used in async.",
                                    "default": 50
                                },
                                "flush_time": {
                                    "type": "integer",
                                    "description": "The flush time for audit log writes. Only used in async.",
                                    "default": 500
                                },
                                "queue_size": {
                                    "type": "integer",
                                    "description": "The size of the queue feeding the asynchronous audit log writer threads.Only used in async.",
                                    "default": 10000
                                },
                                "write_consistency": {
                                    "type": "string",
                                    "description": " The consistency level used to write audit events",
                                    "default": "QUORUM"
                                }
                            },
                            "required": [
                                "mode",
                                "batch_size",
                                "flush_time",
                                "queue_size",
                                "write_consistency"
                            ]
                        }
                    },
                    "required": [
                        "enabled",
                        "logger",
                        "retention_time",
                        "cassandra_audit_writer_options"
                    ]
                },
                "internode_messaging_options": {
                    "type": "object",
                    "description": "DSE messaging options.",
                    "properties": {
                        "port": {
                            "type": "integer",
                            "description": "The port for internode communication.",
                            "default": 8609
                        }
                    },
                    "required": [
                        "port"
                    ]
                }
            },
            "required": [
                "use_dse_role_manager",
                "transitional_mode",
                "authentication_options",
                "authorization_options",
                "kerberos_options",
                "node_health_options",
                "lease_metrics_options",
                "audit_logging_options",
                "internode_messaging_options"
            ]
        },
        "executor": {
            "id": "http://cassandra/docs/mesosphere.com/executor",
            "type": "object",
            "description": "The Cassandra service executor configuration object.",
            "properties": {
                "cpus": {
                    "id": "http://cassandra/docs/mesosphere.com/executor/cpus",
                    "type": "number",
                    "description": "The cpu shares used by the Cassandra service executor.",
                    "default": 0.5
                },
                "mem": {
                    "id": "http://cassandra/docs/mesosphere.com/executor/mem",
                    "type": "integer",
                    "description": "The memory used by the Cassandra service executor in Mb.",
                    "default": 1024
                },
                "heap": {
                    "id": "http://cassandra/docs/mesosphere.com/executor/heap",
                    "type": "integer",
                    "description": "The JVM heap used by the Cassandra service executor in Mb.",
                    "default": 768
                },
                "disk": {
                    "id": "http://cassandra/docs/mesosphere.com/executor/heap",
                    "type": "integer",
                    "description": "The amount of disk used by the Cassandra service executor in Mb.",
                    "default": 1024
                },
                "api_port": {
                    "id": "http://cassandra/docs/mesosphere.com/executor/api_port",
                    "type": "integer",
                    "description": "The port that the Cassandra executor API will accept on.",
                    "default": 9001
                },
                "keytab_location": {
                    "id": "http://cassandra/docs/mesosphere.com/executor/keytab_location",
                    "type": "string",
                    "description": "URL pointing to the location of the keytab to use if the Kerberos is enabled."
                }
            },
            "additionalProperties": false,
            "required": [
                "cpus",
                "mem",
                "heap",
                "disk",
                "api_port"
            ]
        },
        "task": {
            "id": "http://cassandra/docs/mesosphere.com/task",
            "type": "object",
            "description": "The Cassandra service cluster task configuration object.",
            "properties": {
                "cpus": {
                    "id": "http://cassandra/docs/mesosphere.com/task/cpus",
                    "type": "number",
                    "description": "The cpu shares used by the Cassandra service cluster tasks.",
                    "default": 0.5
                },
                "mem": {
                    "id": "http://cassandra/docs/mesosphere.com/executor/mem",
                    "type": "integer",
                    "description": "The memory used by the Cassandra cluster tasks in Mb.",
                    "default": 256
                }
            },
            "additionalProperties": false,
            "required": [
                "cpus",
                "mem"
            ]
        }
    },
    "additionalProperties": false,
    "required": [
        "service",
        "nodes",
        "cassandra",
        "dse",
        "executor",
        "task"
    ]
}