1{
2    "params": {
3        "allow_del_with_meta_prune_user_data" : {
4            "default" : "false",
5            "descr": "Let del_with_meta prune user data provided from the user instead of failing",
6            "dynamic" : true,
7            "type" : "bool"
8        },
9        "alog_block_size": {
10            "default": "4096",
11            "descr": "Logging block size.",
12            "dynamic": false,
13            "type": "size_t",
14            "requires": {
15                "bucket_type": "persistent"
16            }
17        },
18        "alog_path": {
19            "default": "",
20            "descr": "Path to the access log.",
21            "dynamic": true,
22            "type": "std::string",
23            "requires": {
24                "bucket_type": "persistent"
25            }
26        },
27        "access_scanner_enabled": {
28            "default": "true",
29            "descr": "True if access scanner task is enabled",
30            "dynamic": true,
31            "type": "bool",
32            "requires": {
33                "bucket_type": "persistent"
34            }
35        },
36        "alog_sleep_time": {
37            "default": "1440",
38            "descr": "Number of minutes between each sweep for the access log",
39            "dynamic": true,
40            "type": "size_t",
41            "validator": {
42                "range": {
43                    "max": 4320,
44                    "min": 1
45                }
46            },
47            "requires": {
48                "bucket_type": "persistent"
49            }
50        },
51        "alog_task_time": {
52            "default": "2",
53            "descr": "Hour in GMT time when access scanner task is scheduled to run",
54            "dynamic": true,
55            "type": "size_t",
56            "validator": {
57                "range": {
58                    "max": 23,
59                    "min": 0
60                }
61            },
62            "requires": {
63                "bucket_type": "persistent"
64            }
65        },
66        "alog_resident_ratio_threshold": {
67            "default": "95",
68            "desr": "Resident ratio percentage above which we do not generate access log",
69            "dynamic": true,
70            "type": "size_t",
71            "validator": {
72                "range": {
73                    "max": 100,
74                    "min": 0
75                }
76            },
77            "requires": {
78                "bucket_type": "persistent"
79            }
80        },
81        "alog_max_stored_items": {
82            "default": "1024",
83            "desr": "The maximum number of items the Access Scanner will hold in memory before commiting them to disk",
84            "type": "size_t",
85            "dynamic": true,
86            "validator": {
87                "range": {
88                    "min": 1
89                }
90            },
91            "requires": {
92                "bucket_type": "persistent"
93            }
94        },
95        "backend": {
96            "default": "couchdb",
97            "desr": "The storage backend to use.",
98            "dynamic": false,
99            "type": "std::string",
100            "validator": {
101                "enum": [
102                    "couchdb",
103                    "magma",
104                    "rocksdb"
105                ]
106            }
107        },
108        "backfill_mem_threshold": {
109            "default": "96",
110            "desr": "Percentage of memory that backfill task is allowed to consume",
111            "dynamic": true,
112            "type": "size_t",
113            "validator": {
114                "range": {
115                    "max": 100,
116                    "min": 0
117                }
118            }
119        },
120        "bfilter_enabled": {
121            "default": "true",
122            "desr": "Enable or disable the bloom filter",
123            "dynamic": true,
124            "type": "bool"
125        },
126        "bfilter_key_count": {
127            "default": "10000",
128            "desr": "Bloomfilter: Estimated key count per vbucket",
129            "dynamic": true,
130            "type": "size_t",
131            "validator": {
132                "range": {
133                    "min": 1
134                }
135            }
136        },
137        "bfilter_fp_prob": {
138            "default": "0.01",
139            "desr": "Bloomfilter: Allowed probability for false positives",
140            "dynamic": true,
141            "type": "float"
142        },
143        "bfilter_residency_threshold": {
144            "default": "0.1",
145            "desr" : "If resident ratio (during full eviction) were found less than this threshold, compaction will include all items into bloomfilter",
146            "dynamic": true,
147            "type" : "float",
148            "validator": {
149                "range": {
150                    "max": 1.0,
151                    "min": 0.0
152                }
153            }
154        },
155        "bucket_type": {
156            "default": "persistent",
157            "descr": "Bucket type in the couchbase server",
158            "dynamic": false,
159            "type": "std::string",
160            "validator": {
161                "enum": [
162                         "ephemeral",
163                         "persistent"
164                        ]
165            }
166        },
167        "compaction_exp_mem_threshold": {
168            "default": "85",
169            "desr": "Memory usage threshold after which compaction will not queue expired items for deletion",
170            "dynamic": true,
171            "type": "size_t",
172            "validator": {
173                "range": {
174                    "max": 100,
175                    "min": 0
176                }
177            }
178        },
179        "chk_expel_enabled": {
180            "default" : "true",
181            "descr": "Enable the ability to expel (remove from memory) items from a checkpoint.  An item can be expelled if all cursors in the checkpoint have iterated past the item.",
182            "dynamic" : true,
183            "type": "bool"
184        },
185        "chk_max_items": {
186            "default": "10000",
187            "dynamic": true,
188            "type": "size_t"
189        },
190        "chk_period": {
191            "default": "5",
192            "dynamic": true,
193            "type": "size_t"
194        },
195        "chk_remover_stime": {
196            "default": "5",
197            "dynamic": false,
198            "type": "size_t"
199        },
200        "collections_enabled" : {
201            "default": "true",
202            "descr": "Enable the collections functionality, enabling the storage of collection metadata",
203            "dynamic": false,
204            "type": "bool"
205        },
206        "collections_max_size" : {
207            "default": "1000",
208            "descr": "The maximum number of collections allowed.",
209            "dynamic": false,
210            "type": "size_t"
211        },
212        "compression_mode": {
213            "default": "off",
214            "descr": "Determines which compression mode the bucket operates in",
215	    "dynamic": true,
216            "type": "std::string",
217            "validator": {
218                "enum": [
219                         "off",
220                         "passive",
221                         "active"
222                        ]
223            }
224        },
225        "compaction_write_queue_cap": {
226            "default": "10000",
227            "desr" : "Disk write queue threshold after which compaction tasks will be made to snooze, if there are already pending compaction tasks",
228	    "dynamic": true,
229            "type" : "size_t",
230            "validator": {
231                "range": {
232                    "min": 1
233                }
234            }
235        },
236        "conflict_resolution_type": {
237            "default": "seqno",
238            "dynamic": false,
239            "type": "std::string",
240            "validator": {
241                "enum": [
242                    "seqno",
243                    "lww"
244                ]
245            }
246        },
247        "couch_bucket": {
248            "default": "default",
249            "descr": "The name of this bucket",
250            "dynamic": false,
251            "type": "std::string"
252        },
253        "cursor_dropping_lower_mark": {
254            "default": "80",
255            "descr": "Percentage of memQuota, below which checkpoint cursor dropping will not continue",
256            "dynamic": true,
257            "type": "size_t",
258            "validator": {
259                "range": {
260                    "max": 100,
261                    "min": 0
262                }
263            }
264        },
265        "cursor_dropping_upper_mark": {
266            "default": "95",
267            "descr": "Percentage of memQuota, above which checkpoint cursor dropping will commence",
268            "dynamic": true,
269            "type": "size_t",
270            "validator": {
271                "range": {
272                    "max": 100,
273                    "min": 0
274                }
275            }
276        },
277        "cursor_dropping_checkpoint_mem_upper_mark": {
278            "default": "50",
279            "descr": "Percentage of memQuota used by checkpoints, above which checkpoint cursor dropping will commence",
280            "dynamic": true,
281            "type": "size_t",
282            "validator": {
283                "range": {
284                    "max": 100,
285                    "min": 0
286                }
287            }
288        },
289        "cursor_dropping_checkpoint_mem_lower_mark": {
290            "default": "30",
291            "descr": "Percentage of memQuota used by checkpoints we aim to get down to when dropping cursors",
292            "dynamic": true,
293            "type": "size_t",
294            "validator": {
295                "range": {
296                    "max": 100,
297                    "min": 0
298                }
299            }
300        },
301        "data_traffic_enabled": {
302            "default": "true",
303            "descr": "True if we want to enable data traffic after warmup is complete",
304            "dynamic": false,
305            "type": "bool"
306        },
307        "dbname": {
308            "default": "./test",
309            "descr": "Path to on-disk storage.",
310            "dynamic": false,
311            "type": "std::string"
312        },
313        "dcp_noop_mandatory_for_v5_features": {
314            "default": "true",
315            "descr": "Forces clients to enable noop for v5 features",
316	    "dynamic": true,
317            "type": "bool"
318        },
319
320        "defragmenter_enabled": {
321            "default": "true",
322            "descr": "True if defragmenter task is enabled",
323            "dynamic": true,
324            "type": "bool"
325        },
326        "defragmenter_interval": {
327            "default": "10.0",
328            "descr": "How often defragmenter task should be run (in seconds).",
329	    "dynamic": true,
330            "type": "float"
331        },
332        "defragmenter_age_threshold": {
333            "default": "10",
334            "descr": "How old (measured in number of DefragmenterVisitor passes) must a document be to be considered for defragmentation.",
335            "type": "size_t",
336            "dynamic" : true
337        },
338        "defragmenter_stored_value_age_threshold": {
339            "default": "10",
340            "descr": "How old (measured in number of DefragmenterVisitor passes) must a StoredValue be to be considered for defragmentation.",
341            "type": "size_t",
342            "dynamic" : true
343        },
344        "defragmenter_chunk_duration": {
345            "default": "20",
346            "descr": "Maximum time (in ms) defragmentation task will run for before being paused (and resumed at the next defragmenter_interval).",
347	    "dynamic": true,
348            "type": "size_t",
349            "validator": {
350                "range": {
351                    "min": 1
352                }
353            }
354        },
355        "durability_timeout_task_interval": {
356            "default": "25",
357            "descr": "Interval (in ms) between subsequent runs of the DurabilityTimeoutTask",
358            "dynamic": true,
359            "type": "size_t"
360        },
361        "ephemeral_full_policy": {
362            "default": "auto_delete",
363            "descr": "How should an Ephemeral bucket becoming full be handled?",
364            "dynamic": true,
365            "type": "std::string",
366            "validator": {
367                "enum": [
368                    "auto_delete",
369                    "fail_new_data"
370                ]
371            },
372            "requires": {
373                "bucket_type": "ephemeral"
374            }
375        },
376        "ephemeral_metadata_purge_age": {
377            "default": "60",
378            "descr": "Age in seconds after which Ephemeral metadata is purged entirely from memory. Purging disabled if set to -1.",
379            "dynamic": true,
380            "type": "ssize_t",
381            "requires": {
382                "bucket_type": "ephemeral"
383            }
384        },
385        "ephemeral_metadata_purge_interval": {
386            "default": "60",
387            "descr": "Time in seconds between automatic, periodic runs of the Ephemeral metadata purge task. Periodic purging disabled if set to 0.",
388            "dynamic": true,
389            "type": "size_t",
390            "requires": {
391                "bucket_type": "ephemeral"
392            }
393        },
394        "ephemeral_metadata_mark_stale_chunk_duration": {
395            "default": "20",
396            "descr": "Maximum time (in ms) ephemeral hash table cleaner task will run for before being paused (and resumed at the next ephemeral_metadata_purge_interval).",
397            "dynamic": true,
398            "type": "size_t",
399            "requires": {
400                "bucket_type": "ephemeral"
401            }
402        },
403        "ephemeral_metadata_purge_stale_chunk_duration": {
404            "default": "20",
405            "descr": "Maximum time (in ms) ephemeral stale metadata purge task will run for before being paused (and resumed at the next ephemeral_metadata_purge_interval).",
406            "dynamic": true,
407            "type": "size_t",
408            "requires": {
409                "bucket_type": "ephemeral"
410            }
411        },
412        "exp_pager_enabled": {
413            "default": "true",
414            "descr": "True if expiry pager task is enabled",
415            "dynamic": true,
416            "type": "bool"
417        },
418        "exp_pager_stime": {
419            "default": "3600",
420            "descr": "Number of seconds between expiry pager runs.",
421            "dynamic": true,
422            "type": "size_t"
423        },
424        "exp_pager_initial_run_time": {
425            "default": "-1",
426            "descr": "Hour in GMT time when expiry pager can be scheduled for initial run",
427            "dynamic": true,
428            "type": "ssize_t",
429            "validator": {
430                "range": {
431                    "max": 23,
432                    "min": -1
433                }
434            }
435        },
436        "failpartialwarmup": {
437            "default": "true",
438            "descr": "If true then do not allow traffic to be enabled to the bucket if warmup didn't complete successfully",
439            "dynamic": false,
440            "type": "bool"
441        },
442        "flusher_batch_split_trigger" : {
443            "default": "1000000",
444            "descr": "Number of items to flush which triggers splitting the batch into multiple chunks. Individual batches may be larger than this value, as we cannot split checkpoints across multiple commits.",
445            "dynamic": true,
446            "type": "size_t"
447        },
448        "getl_default_timeout": {
449            "default": "15",
450            "descr": "The default timeout for a getl lock in (s)",
451            "dynamic": true,
452            "type": "size_t"
453        },
454        "getl_max_timeout": {
455            "default": "30",
456            "descr": "The maximum timeout for a getl lock in (s)",
457            "dynamic": true,
458            "type": "size_t"
459        },
460        "hlc_drift_ahead_threshold_us": {
461            "default": "5000000",
462            "descr": "The μs threshold of drift at which we will increment a vbucket's ahead counter.",
463            "dynamic": true,
464            "type": "size_t"
465        },
466        "hlc_drift_behind_threshold_us": {
467            "default": "5000000",
468            "descr": "The μs threshold of drift at which we will increment a vbucket's behind counter.",
469            "dynamic": true,
470            "type": "size_t"
471        },
472        "ht_locks": {
473            "default": "47",
474            "dynamic": false,
475            "type": "size_t"
476        },
477        "ht_resize_interval": {
478            "default": "1",
479            "descr": "Interval in seconds to wait between HashtableResizerTask executions.",
480            "dynamic": true,
481            "type": "size_t"
482        },
483        "ht_size": {
484            "default": "47",
485            "descr": "Initial number of slots in HashTable objects.",
486            "dynamic": false,
487            "type": "size_t"
488        },
489        "item_compressor_interval": {
490            "default": "250",
491            "descr": "How often the item compressor task should run (in milliseconds)",
492            "dynamic": true,
493            "type": "size_t"
494        },
495        "item_compressor_chunk_duration": {
496            "default": "20",
497            "descr": "Maximum time (in ms) item compression task will run for before being paused (and resumed at the next item_compressor_interval).",
498            "dynamic": true,
499            "type": "size_t",
500            "validator": {
501                "range": {
502                    "min": 1
503                }
504            }
505        },
506        "item_eviction_policy": {
507            "default": "value_only",
508            "descr": "Item eviction policy on cache, which is used by the item pager",
509            "dynamic": false,
510            "type": "std::string",
511            "validator": {
512                "enum": [
513                    "value_only",
514                    "full_eviction"
515                ]
516            },
517            "requires": {
518                "bucket_type": "persistent"
519            }
520        },
521        "item_eviction_age_percentage": {
522            "default": "30",
523            "descr": "The age percentage used when determining the age threshold in the hifi_mfu eviction policy.",
524            "dynamic": true,
525            "type": "size_t",
526            "validator": {
527                "range": {
528                    "min": 0,
529                    "max": 100
530                }
531            }
532        },
533        "item_eviction_freq_counter_age_threshold": {
534            "default": "1",
535            "decr": "The threshold for determining at what execution frequency we consider age when selecting items for eviction.",
536            "dynamic": true,
537            "type": "size_t",
538            "validator": {
539                "range": {
540                    "min": 0,
541                    "max": 255
542                }
543            }
544        },
545        "item_freq_decayer_chunk_duration": {
546            "default": "20",
547            "descr": "Maximum time (in ms) itemFreqDecayer task will run for before being paused.",
548            "dynamic": true,
549            "type": "size_t",
550            "validator": {
551                "range": {
552                    "min": 1
553                }
554            }
555        },
556        "item_freq_decayer_percent": {
557            "default": "50",
558            "descr": "The percent that the frequency counter of a document is decayed when visited by item_freq_decayer.",
559            "dynamic": true,
560            "type": "size_t",
561            "validator": {
562                "range": {
563                    "min": 0,
564                    "max": 100
565                }
566            }
567        },
568        "item_num_based_new_chk": {
569            "default": "true",
570            "descr": "True if the number of items in the current checkpoint plays a role in a new checkpoint creation",
571            "dynamic": true,
572            "type": "bool"
573        },
574        "keep_closed_chks": {
575            "default": "false",
576            "descr": "True if we want to keep the closed checkpoints for each vbucket unless the memory usage is above high water mark",
577            "dynamic": true,
578            "type": "bool"
579        },
580        "connection_manager_interval": {
581            "default": "1",
582            "descr": "How often connection manager task should be run (in seconds).",
583            "type": "size_t",
584            "dynamic": true,
585            "validator": {
586                "range": {
587                    "min": 1
588                }
589            }
590        },
591        "max_checkpoints": {
592            "default": "2",
593            "dynamic": true,
594            "type": "size_t"
595        },
596        "max_failover_entries": {
597            "default": "25",
598            "descr": "maximum number of failover log entries",
599            "dynamic": false,
600            "type": "size_t"
601        },
602        "max_item_privileged_bytes": {
603            "default": "(1024 * 1024)",
604            "descr": "Maximum number of bytes allowed for 'privileged' (system) data for an item in addition to the max_item_size bytes",
605            "dynamic": true,
606            "type": "size_t"
607        },
608        "max_item_size": {
609            "default": "(20 * 1024 * 1024)",
610            "descr": "Maximum number of bytes allowed for an item",
611            "dynamic": true,
612            "type": "size_t"
613        },
614        "max_size": {
615            "default": "(100 * 1024 * 1024)",
616            "dynamic": true,
617            "type": "size_t",
618            "descr": "Memory quota (in bytes) for this bucket.",
619            "aliases":["cache_size"]
620        },
621        "max_ttl":{
622            "default": "0",
623            "descr": "A maximum TTL (in seconds) that will apply to all new documents, documents set with no TTL will be given this value. A value of 0 means this is disabled",
624            "dynamic": true,
625            "type": "size_t",
626            "validator": {
627                "range": {
628                    "min": 0,
629                    "max": 2147483647
630                }
631            }
632        },
633        "max_vbuckets": {
634            "default": "1024",
635            "descr": "Maximum number of vbuckets expected",
636            "dynamic": false,
637            "type": "size_t"
638        },
639        "max_threads": {
640            "default": "0",
641            "descr": "Maximum number of threads of any single class (0 = automatically select based on core count)",
642            "dynamic": false,
643            "type": "size_t"
644        },
645        "max_num_shards": {
646            "default": "0",
647            "descr": "Maximum mumber of shards (0 = auto-configure)",
648            "dynamic": false,
649            "type": "size_t"
650        },
651        "max_num_workers": {
652            "default": "4",
653            "descr": "Bucket Priority relative to other buckets",
654            "dynamic": false,
655            "type": "size_t",
656            "validator": {
657                "range": {
658                    "max": 8,
659                    "min": 1
660                }
661            }
662        },
663        "mem_used_merge_threshold_percent" : {
664            "default": "0.5",
665            "descr": "What percent of max_data size should we allow the estimated total memory to lag by (EPStats::getEstimatedTotalMemoryUsed)",
666            "dynamic": true,
667            "type": "float",
668            "validator": {
669                "range": {
670                    "max": 100.0,
671                    "min": 0.0
672                }
673            }
674        },
675        "num_reader_threads": {
676            "default": "0",
677            "descr": "Number of reader threads (0 = Default, -1 = Disk IO Optimized)",
678            "dynamic": true,
679            "type": "ssize_t",
680            "validator": {
681                "range": {
682                    "max": 512,
683                    "min": -1
684                }
685            }
686        },
687        "num_writer_threads": {
688            "default": "0",
689            "descr": "Number of writer threads (0 = Default, -1 = Disk IO Optimized)",
690            "dynamic": true,
691            "type": "ssize_t",
692            "validator": {
693                "range": {
694                    "max": 512,
695                    "min": -1
696                }
697            }
698        },
699        "num_auxio_threads": {
700            "default": "0",
701            "descr": "Throttle max number of aux io threads",
702            "dynamic": true,
703            "type": "size_t",
704            "validator": {
705                "range": {
706                    "max": 512,
707                    "min": 0
708                }
709            }
710        },
711        "num_nonio_threads": {
712            "default": "0",
713            "descr": "Throttle max number of non io threads",
714            "dynamic": true,
715            "type": "size_t",
716            "validator": {
717                "range": {
718                    "max": 512,
719                    "min": 0
720                }
721            }
722        },
723        "mem_high_wat": {
724            "default": "max",
725            "dynamic": true,
726            "type": "size_t"
727        },
728        "mem_low_wat": {
729            "default": "max",
730            "dynamic": true,
731            "type": "size_t"
732        },
733        "mutation_mem_threshold": {
734            "default": "93",
735            "desr": "Percentage of memory that can be used before mutations return tmpOOMs",
736            "dynamic": true,
737            "type": "size_t",
738            "validator" : {
739                "range" : {
740                    "max": 100,
741                    "min": 0
742                }
743            }
744        },
745        "pager_active_vb_pcnt": {
746            "default": "40",
747            "descr": "Active vbuckets paging percentage",
748            "dynamic": true,
749            "type": "size_t",
750            "validator": {
751                "range": {
752                    "max": 50,
753                    "min": 0
754                }
755            }
756        },
757        "pager_sleep_time_ms": {
758            "default": "5000",
759            "descr": "How long in milliseconds the ItemPager will sleep for when not being requested to run",
760            "dynamic": true,
761            "type": "size_t"
762        },
763        "replication_throttle_cap_pcnt": {
764            "default": "10",
765            "descr": "Percentage of total items in write queue at which we throttle replication input",
766            "dynamic": true,
767            "type": "size_t",
768            "validator": {
769                "range": {
770                    "max": 100,
771                    "min": 0
772                }
773            }
774        },
775        "replication_throttle_queue_cap": {
776            "default": "-1",
777            "descr": "Max size of a write queue to throttle incoming replication input.",
778            "dynamic": true,
779            "type": "ssize_t",
780            "validator": {
781                "range": {
782                    "max": 100000000,
783                    "min": -1
784                }
785            }
786        },
787        "replication_throttle_threshold": {
788            "default": "99",
789            "descr": "Percentage of max mem at which we begin NAKing replication input.",
790            "dynamic": true,
791            "type": "size_t",
792            "validator": {
793                "range": {
794                    "max": 100,
795                    "min": 0
796                }
797            }
798        },
799        "uuid": {
800            "default": "",
801            "descr": "The UUID for the bucket",
802            "dynamic" : false,
803            "type": "std::string"
804        },
805        "dcp_backfill_byte_limit": {
806            "default": "20972856",
807            "descr": "Max bytes a connection can backfill into memory",
808            "dynamic": false,
809            "type": "size_t"
810        },
811        "dcp_blacklist_fts_connection_logs": {
812            "default": "true",
813            "descr": "MB-28468: FTS creates streams for non-existing vBuckets which spams memcached logs. Blacklist FTS connections by setting level to critical until fixed.",
814            "dynamic": true,
815            "type": "bool"
816        },
817        "dcp_flow_control_policy": {
818            "default": "aggressive",
819            "descr": "Flow control policy used on consumer side buffer",
820            "dynamic": false,
821            "type": "std::string",
822            "validator": {
823                "enum": [
824                         "none",
825                         "static",
826                         "dynamic",
827                         "aggressive"
828                        ]
829            }
830        },
831        "dcp_conn_buffer_size": {
832            "default": "10485760",
833            "descr": "Size in bytes of an dcp consumer connection buffer",
834            "dynamic": true,
835            "type": "size_t"
836        },
837        "dcp_conn_buffer_size_max": {
838            "default": "52428800",
839            "descr": "Max size in bytes of an dcp consumer connection buffer",
840            "dynamic": true,
841            "type": "size_t"
842        },
843        "dcp_conn_buffer_size_perc": {
844            "default": "1",
845            "descr": "Percentage of memQuota for a dcp consumer connection buffer in dynamic flow ctl policy",
846            "type": "size_t",
847            "dynamic": true,
848            "validator": {
849                "range": {
850                    "max": 10,
851                    "min": 1
852                }
853            }
854        },
855        "dcp_conn_buffer_size_aggr_mem_threshold": {
856            "default": "10",
857            "descr": "Aggr mem usage by all dcp conns (as percentage of memQuota) after which only dcp_conn_buffer_size is allocated",
858            "type": "size_t",
859            "dynamic": true,
860            "validator": {
861                "range": {
862                    "max": 20,
863                    "min": 1
864                }
865            }
866        },
867        "dcp_conn_buffer_size_aggressive_perc": {
868            "default": "5",
869            "descr": "Percentage of memQuota for all dcp consumer connection buffers in aggressive flow ctl policy",
870            "type": "size_t",
871            "dynamic": true,
872            "validator": {
873                "range": {
874                    "max": 20,
875                    "min": 1
876                }
877            }
878        },
879        "dcp_enable_noop": {
880            "default": "true",
881            "descr": "Whether DCP Consumer connections should attempt to negotiate no-ops with the Producer",
882            "dynamic": true,
883            "type": "bool"
884        },
885        "dcp_min_compression_ratio": {
886            "default": "0.85",
887            "desr": "Compression ratio to be achieved above which producer will ship documents as is",
888            "dynamic": true,
889            "type": "float",
890            "validator": {
891                "range": {
892                    "min": 0.0
893                }
894            }
895        },
896        "dcp_idle_timeout": {
897            "default": "360",
898            "descr": "The maximum number of seconds between dcp messages before a connection is disconnected",
899            "dynamic": true,
900            "type": "size_t"
901        },
902        "dcp_noop_tx_interval": {
903            "default": "1",
904            "descr": "The time interval in seconds between noop messages being sent to the consumer",
905            "dynamic": true,
906            "type": "size_t",
907            "validator": {
908                "range": {
909                    "max" : 360,
910                    "min" : 1
911                }
912            }
913        },
914        "dcp_scan_byte_limit": {
915            "default": "4194304",
916            "descr": "Max bytes that can be read in a single disk scan",
917            "dynamic": false,
918            "type": "size_t"
919        },
920        "dcp_scan_item_limit": {
921            "default": "4096",
922            "descr": "Max items that can be read in a single disk scan",
923            "dynamic": false,
924            "type": "size_t"
925        },
926        "dcp_takeover_max_time": {
927            "default": "60",
928            "descr": "Max amount of time for takeover send (in seconds) after which front end ops would return ETMPFAIL",
929            "dynamic": true,
930            "type": "size_t"
931        },
932        "dcp_producer_snapshot_marker_yield_limit": {
933            "default": "10",
934            "descr": "The number of snapshots before ActiveStreamCheckpointProcessorTask::run yields.",
935            "dynamic": true,
936            "type": "size_t",
937            "validator": {
938                "range": {
939                    "max": 100000000,
940                    "min": 1
941                }
942            }
943        },
944        "dcp_consumer_process_buffered_messages_yield_limit" : {
945            "default": "10",
946            "descr": "The number of processBufferedMessages iterations before forcing the task to yield.",
947	        "dynamic": true,
948            "type": "size_t",
949            "validator": {
950                "range": {
951                    "max": 100000000,
952                    "min": 1
953                }
954            }
955        },
956        "dcp_consumer_process_buffered_messages_batch_size" : {
957            "default": "10",
958            "descr": "The maximum number of items stream->processBufferedMessages will consume.",
959            "dynamic": true,
960            "type": "size_t",
961            "validator": {
962                "range": {
963                    "max": 100000000,
964                    "min": 1
965                }
966            }
967        },
968        "fsync_after_every_n_bytes_written": {
969            "default": "16777216",
970            "descr": "Perform a file sync() operation after every N bytes written. Disabled if set to 0.",
971            "dynamic": true,
972            "type" : "size_t"
973        },
974        "min_compression_ratio": {
975            "default": "1.2",
976            "descr": "specifies a minimum compression ratio below which storing the document will be stored as uncompressed.",
977            "dynamic": true,
978            "type" : "float",
979            "validator": {
980                "range": {
981                    "min": 0.0
982                }
983            }
984        },
985        "magma_delete_memtable_writecache": {
986            "default": "8192",
987            "dynamic": false,
988            "descr": "Magma uses a lazy update model to maintain the sequence index. It maintains a list of deleted seq #s that were deleted from the key Index.",
989            "type": "size_t"
990        },
991        "magma_delete_frag_ratio": {
992            "default": "0.5",
993            "dynamic": false,
994            "descr": "Magma compaction always removes duplicate keys but not all sstables are visited during compaction.. This is the minimum fragmentation ratio threshold for when a compaction will be triggerred.",
995            "type": "float"
996        },
997        "magma_max_commit_points": {
998            "default": "5",
999            "dynamic": false,
1000            "descr": "Maximum # of commit points retained for rollback.",
1001            "type": "size_t"
1002        },
1003        "magma_commit_point_interval": {
1004            "default": "2",
1005            "dynamic": false,
1006            "descr": "frequency of commit point interval; in minutes.",
1007            "type": "size_t"
1008        },
1009        "magma_value_separation_size": {
1010            "default": "32",
1011            "dynamic": false,
1012            "descr": "Values smaller than this will not be separated from their keys.",
1013            "type": "size_t"
1014        },
1015        "magma_min_write_cache": {
1016            "default": "8388608",
1017            "dynamic": false,
1018            "descr": "Magma uses a common skiplist to buffer all items at the shard level called the write cache. The write cache contains items from all the kvstores that are part of the shard and when it is flushed, each kvstore will receive a few items each. A too small write cache can lead to very small sstables and high write amplification. A lower value can be used if the number of kvstores per shard is smaller.",
1019            "type": "size_t"
1020        },
1021        "magma_max_write_cache": {
1022            "default": "134217728",
1023            "dynamic": false,
1024            "descr": "Magma uses a common skiplist to buffer all items at the shard level called the write cache. The write cache contains items from all the kvstores that are part of the shard and when it is flushed, each kvstore will receive a few items each. A too large write cache can lead to high space amplification.",
1025            "type": "size_t"
1026        },
1027        "magma_mem_quota_ratio": {
1028            "default": "0.1",
1029            "descr": "Magma total memory ratio of the Bucket Quota across all shards.",
1030            "dynamic": false,
1031            "type": "float"
1032        },
1033        "magma_wal_buffer_size": {
1034            "default": "2097152",
1035            "dynamic": false,
1036            "descr": "The WAL buffer is used to stage items to the write ahead log along with control information like begin & end transaction. The WAL can support multiple buffers allowing for improved write performance when transaction batches are > magma_wal_buffer_size. This value should be increased if the size of item batches are > 2MB, whether its because the item sizes are > 2MB or the number of items in a batch > 2MB.",
1037            "type": "size_t"
1038        },
1039        "magma_wal_num_buffers": {
1040            "default": "1",
1041            "dynamic": false,
1042            "descr": "When batches of items are large in size, magma WAL can take advantage of double buffering to speed up persistence by flushing intermediate batches to disk. Atomicity is maintained through the use of begin/end transaction control records.",
1043            "type": "size_t"
1044        },
1045        "magma_num_flushers": {
1046            "default": "1",
1047            "dynamic": false,
1048            "descr": "Number of threads to write filled memtables to disk.",
1049            "type": "size_t"
1050        },
1051        "magma_num_compactors": {
1052            "default": "4",
1053            "dynamic": false,
1054            "descr": "Number of background compactor threads used by magma.",
1055            "type": "size_t"
1056        },
1057        "magma_commit_point_every_batch": {
1058            "default": "false",
1059            "dynamic": false,
1060            "descr": "Couchstore generates a potential commit point at the end of every batch of items. During normal operation, Magma commit points are take at every magma_commit_point_interval. Many of the tests require more frequent commit points so this configuration parameter makes sure every batch generates a commit point. Should be used for testing only!",
1061            "type": "bool"
1062        },
1063        "magma_enable_upsert": {
1064            "default": "false",
1065            "dynamic": false,
1066            "descr": "When true, the kv_engine will utilize Magma's upsert capabiltiy but accurate document counts for the data store or collections can not be maintained.",
1067            "type": "bool"
1068        },
1069        "magma_expiry_frag_threshold": {
1070            "default": "0.25",
1071            "dynamic": false,
1072            "descr": "All compactions perform expiry but not all sstables are visited by compaction. Magma maintains an expiry histogram across the kvstore to help determine which range of sstables need to have compaction run on them because there are a significant number of expired items. The frag threshold is the number of expired keys vs keys in the data store.",
1073            "type": "float"
1074        },
1075        "magma_tombstone_frag_threshold": {
1076            "default": "0.25",
1077            "dynamic": false,
1078            "descr": "All compactions perform tombstone removal but not all sstables are visited by compaction. Magma tracks tombstone counts and will perform compaction on the range of sstables which have a significant number of tombstones. The frag threshold is the number of tombstones vs keys in the data store.",
1079            "type": "float"
1080        },
1081        "retain_erroneous_tombstones": {
1082            "default": "true",
1083            "descr": "whether erroneous tombstones need to be retain during compaction. Erroneous tombstones are those that have invalid meta data in it. For example, a delete time of 0.",
1084	        "dynamic": true,
1085            "type": "bool"
1086        },
1087        "rocksdb_options": {
1088            "default": "bytes_per_sync=1048576,stats_dump_period_sec=600",
1089            "descr": "RocksDB Options, comma separated.",
1090            "dynamic": false,
1091            "type": "std::string"
1092        },
1093        "rocksdb_cf_options": {
1094            "default": "",
1095            "descr": "RocksDB Column Family Options, comma separated.",
1096            "dynamic": false,
1097            "type": "std::string"
1098        },
1099        "rocksdb_bbt_options": {
1100            "default": "block_size=16384,cache_index_and_filter_blocks=true,pin_l0_filter_and_index_blocks_in_cache=true,cache_index_and_filter_blocks_with_high_priority=true,index_type=kTwoLevelIndexSearch,partition_filters=true",
1101            "descr": "RocksDB Block Based Table Options, comma separated.",
1102            "dynamic": false,
1103            "type": "std::string"
1104        },
1105        "rocksdb_low_pri_background_threads": {
1106            "default": "0",
1107            "descr": "Number of RocksDB low priority background threads. 0 = auto-select.",
1108            "dynamic": false,
1109            "type": "size_t"
1110        },
1111        "rocksdb_high_pri_background_threads": {
1112            "default": "0",
1113            "descr": "Number of RocksDB high priority background threads. 0 = auto-select.",
1114            "dynamic": false,
1115            "type": "size_t"
1116        },
1117        "rocksdb_stats_level": {
1118            "default": "kExceptTimeForMutex",
1119            "descr": "RocksDB Statistics 'stats_level'. Possible values: {'', 'kAll', 'kExceptTimeForMutex', 'kExceptDetailedTimers'}. The empty value disables Statistics.",
1120            "dynamic": false,
1121            "type": "std::string"
1122        },
1123        "rocksdb_block_cache_ratio": {
1124            "default": "0.1",
1125            "descr": "RocksDB Block Cache ratio of the Bucket Quota. A value of 0.0 sets to the default.",
1126            "dynamic": false,
1127            "type": "float"
1128        },
1129        "rocksdb_block_cache_high_pri_pool_ratio": {
1130            "default": "0.9",
1131            "descr": "RocksDB ratio of the BlockCache quota reserved for index/filter blocks. A value of 0.0 disables the 'cache_index_and_filter_blocks_with_high_priority=true' option.",
1132            "dynamic": false,
1133            "type": "float"
1134        },
1135        "rocksdb_memtables_ratio": {
1136            "default": "0.1",
1137            "descr": "RocksDB total (i.e., all Column Families) Memtables ratio of the Bucket Quota). A value of 0.0 sets to the default.",
1138            "dynamic": false,
1139            "type": "float"
1140        },
1141        "rocksdb_default_cf_optimize_compaction": {
1142            "default": "none",
1143            "descr": "Enable Compaction Optimization for the 'default' ColumnFamily.",
1144            "dynamic": false,
1145            "type": "std::string",
1146            "validator": {
1147                "enum": [
1148                    "none",
1149                    "level",
1150                    "universal"
1151                ]
1152            }
1153        },
1154        "rocksdb_seqno_cf_optimize_compaction": {
1155            "default": "none",
1156            "descr": "Enable Compaction Optimization for the 'seqno' ColumnFamily.",
1157            "dynamic": false,
1158            "type": "std::string",
1159            "validator": {
1160                "enum": [
1161                    "none",
1162                    "level",
1163                    "universal"
1164                ]
1165            }
1166        },
1167        "rocksdb_write_rate_limit": {
1168            "default": "0",
1169            "descr": "RocksDB write rate limit (in Bytes/Sec). Use to control write rate of flush and compaction. A value of 0 sets to the default (no limit).",
1170            "dynamic": false,
1171            "type": "size_t"
1172        },
1173        "rocksdb_uc_max_size_amplification_percent": {
1174            "default": "200",
1175            "descr": "RocksDB Universal-Compaction 'max_size_amplification_percent' option. The default value is the RocksDB internal default (200).",
1176            "dynamic": false,
1177            "type": "size_t"
1178        },
1179        "scopes_max_size" : {
1180            "default": "100",
1181            "descr": "The maximum number of scopes allowed.",
1182            "dynamic": false,
1183            "type": "size_t"
1184        },
1185        "sync_writes_max_allowed_replicas" : {
1186            "default": "2",
1187            "descr": "The maximum number of supported replicas for SyncWrites. Attempts to issue SyncWrites against a topology with more replicas than this setting will fail with DurabilityImpossible.",
1188            "dynamic": false,
1189            "type": "size_t"
1190        },
1191        "time_synchronization": {
1192            "default": "disabled",
1193            "descr": "No longer supported. This config parameter has no effect.",
1194            "dynamic": false,
1195            "type": "std::string",
1196            "validator": {
1197                "enum": [
1198                    "disabled",
1199                    "enabled_without_drift",
1200                    "enabled_with_drift"
1201                ]
1202            }
1203        },
1204        "couchstore_tracing": {
1205            "default": "false",
1206            "dynamic": true,
1207            "descr": "Enable couchstore tracing",
1208            "type" : "bool"
1209        },
1210        "couchstore_write_validation": {
1211            "default": "false",
1212            "dynamic": true,
1213            "descr": "Validate couchstore writes ",
1214            "type" : "bool"
1215        },
1216        "couchstore_mprotect": {
1217            "default": "false",
1218            "dynamic": true,
1219            "descr": "Enable couchstore to mprotect the iobuffer",
1220            "type" : "bool"
1221        },
1222        "warmup": {
1223            "default": "true",
1224            "dynamic": false,
1225            "descr": "Is Warmup of existing data enabled",
1226            "type": "bool",
1227            "requires": {
1228                "bucket_type": "persistent"
1229            }
1230        },
1231        "warmup_batch_size": {
1232            "default": "10000",
1233            "descr": "The size of each batch loaded during warmup.",
1234            "dynamic": false,
1235            "type": "size_t",
1236            "validator": {
1237                "range": {
1238                    "max": 100000000,
1239                    "min": 1
1240                }
1241            }
1242        },
1243        "warmup_min_memory_threshold": {
1244            "default": "100",
1245            "descr": "Percentage of max mem warmed up before we enable traffic.",
1246            "dynamic": true,
1247            "type": "size_t",
1248            "validator": {
1249                "range": {
1250                    "max": 100,
1251                    "min": 0
1252                }
1253            }
1254        },
1255        "warmup_min_items_threshold": {
1256            "default": "100",
1257            "descr": "Percentage of total items warmed up before we enable traffic.",
1258            "dynamic": true,
1259            "type": "size_t",
1260            "validator": {
1261                "range": {
1262                    "max": 100,
1263                    "min": 0
1264                }
1265            }
1266        },
1267        "xattr_enabled": {
1268            "default": "true",
1269            "dynamic": true,
1270            "type": "bool"
1271        }
1272    }
1273}
1274