Skip to main content

mz_storage_types/
dyncfgs.rs

1// Copyright Materialize, Inc. and contributors. All rights reserved.
2//
3// Use of this software is governed by the Business Source License
4// included in the LICENSE file.
5//
6// As of the Change Date specified in that file, in accordance with
7// the Business Source License, use of this software will be governed
8// by the Apache License, Version 2.0.
9
10//! Dyncfgs used by the storage layer. Despite their name, these can be used
11//! "statically" during rendering, or dynamically within timely operators.
12
13use mz_dyncfg::{Config, ConfigSet, ParameterScope};
14use std::time::Duration;
15
16/// When dataflows observe an invariant violation it is either due to a bug or due to the cluster
17/// being shut down. This configuration defines the amount of time to wait before panicking the
18/// process, which will register the invariant violation.
19pub const CLUSTER_SHUTDOWN_GRACE_PERIOD: Config<Duration> = Config::new(
20    "storage_cluster_shutdown_grace_period",
21    Duration::from_secs(10 * 60),
22    "When dataflows observe an invariant violation it is either due to a bug or due to \
23        the cluster being shut down. This configuration defines the amount of time to \
24        wait before panicking the process, which will register the invariant violation.",
25    ParameterScope::Replica,
26);
27
28// Flow control
29
30/// Whether rendering should use `mz_join_core` rather than DD's `JoinCore::join_core`.
31/// Configuration for basic hydration backpressure.
32pub const DELAY_SOURCES_PAST_REHYDRATION: Config<bool> = Config::new(
33    "storage_dataflow_delay_sources_past_rehydration",
34    // This was original `false`, but it is not enabled everywhere.
35    true,
36    "Whether or not to delay sources producing values in some scenarios \
37        (namely, upsert) till after rehydration is finished",
38    ParameterScope::Environment,
39);
40
41/// Whether storage dataflows should suspend execution while downstream operators are still
42/// processing data.
43pub const SUSPENDABLE_SOURCES: Config<bool> = Config::new(
44    "storage_dataflow_suspendable_sources",
45    true,
46    "Whether storage dataflows should suspend execution while downstream operators are still \
47        processing data.",
48    ParameterScope::Environment,
49);
50
51// Controller
52
53/// When enabled, force-downgrade the controller's since handle on the shard
54/// during shard finalization.
55pub const STORAGE_DOWNGRADE_SINCE_DURING_FINALIZATION: Config<bool> = Config::new(
56    "storage_downgrade_since_during_finalization",
57    // This was original `false`, but it is not enabled everywhere.
58    true,
59    "When enabled, force-downgrade the controller's since handle on the shard\
60    during shard finalization",
61    ParameterScope::Environment,
62);
63
64/// The interval of time to keep when truncating the replica metrics history.
65pub const REPLICA_METRICS_HISTORY_RETENTION_INTERVAL: Config<Duration> = Config::new(
66    "replica_metrics_history_retention_interval",
67    Duration::from_secs(60 * 60 * 24 * 30), // 30 days
68    "The interval of time to keep when truncating the replica metrics history.",
69    ParameterScope::Environment,
70);
71
72/// The interval of time to keep when truncating the wallclock lag history.
73pub const WALLCLOCK_LAG_HISTORY_RETENTION_INTERVAL: Config<Duration> = Config::new(
74    "wallclock_lag_history_retention_interval",
75    Duration::from_secs(60 * 60 * 24 * 30), // 30 days
76    "The interval of time to keep when truncating the wallclock lag history.",
77    ParameterScope::Environment,
78);
79
80/// The interval of time to keep when truncating the wallclock lag histogram.
81pub const WALLCLOCK_GLOBAL_LAG_HISTOGRAM_RETENTION_INTERVAL: Config<Duration> = Config::new(
82    "wallclock_global_lag_histogram_retention_interval",
83    Duration::from_secs(60 * 60 * 24 * 30), // 30 days
84    "The interval of time to keep when truncating the wallclock lag histogram.",
85    ParameterScope::Environment,
86);
87
88// Kafka
89
90/// Rules for enriching the `client.id` property of Kafka clients with
91/// additional data.
92///
93/// The configuration value must be a JSON array of objects containing keys
94/// named `pattern` and `payload`, both of type string. Rules are checked in the
95/// order they are defined. The rule's pattern must be a regular expression
96/// understood by the Rust `regex` crate. If the rule's pattern matches the
97/// address of any broker in the connection, then the payload is appended to the
98/// client ID. A rule's payload is always prefixed with `-`, to separate it from
99/// the preceding data in the client ID.
100pub const KAFKA_CLIENT_ID_ENRICHMENT_RULES: Config<fn() -> serde_json::Value> = Config::new(
101    "kafka_client_id_enrichment_rules",
102    || serde_json::json!([]),
103    "Rules for enriching the `client.id` property of Kafka clients with additional data.",
104    ParameterScope::Environment,
105);
106
107/// The maximum time we will wait before re-polling rdkafka to see if new partitions/data are
108/// available.
109pub const KAFKA_POLL_MAX_WAIT: Config<Duration> = Config::new(
110    "kafka_poll_max_wait",
111    Duration::from_secs(1),
112    "The maximum time we will wait before re-polling rdkafka to see if new partitions/data are \
113    available.",
114    ParameterScope::Replica,
115);
116
117/// Whether to check the low watermark for Kafka sources and error if the start offset/resume
118/// upper has been compacted away.
119/// Environment-scoped because it decides whether a definite error is emitted.
120/// Replicas of one cluster disagreeing would write different collection
121/// contents, so the value has to be coherent across them.
122pub const KAFKA_LOW_WATERMARK_CHECK: Config<bool> = Config::new(
123    "kafka_low_watermark_check",
124    true,
125    "Whether to check the low watermark for Kafka sources and error if the start \
126    offset/resume upper has been compacted away.",
127    ParameterScope::Environment,
128);
129
130pub const KAFKA_DEFAULT_AWS_PRIVATELINK_ENDPOINT_IDENTIFICATION_ALGORITHM: Config<&'static str> =
131    Config::new(
132        "kafka_default_aws_privatelink_endpoint_identification_algorithm",
133        // Default to no hostname verification, which is the default in versions of `librdkafka <1.9.2`.
134        "none",
135        "The value we set for the 'ssl.endpoint.identification.algorithm' option in the Kafka \
136    Connection config. default: 'none'",
137        ParameterScope::Environment,
138    );
139
140pub const KAFKA_BUFFERED_EVENT_RESIZE_THRESHOLD_ELEMENTS: Config<usize> = Config::new(
141    "kafka_buffered_event_resize_threshold_elements",
142    1000,
143    "In the Kafka sink operator we might need to buffer messages before emitting them. As a \
144        performance optimization we reuse the buffer allocations, but shrink it to retain at \
145        most this number of elements.",
146    ParameterScope::Replica,
147);
148
149/// Sets retry.backoff.ms in librdkafka for sources and sinks.
150/// See <https://docs.confluent.io/platform/current/clients/librdkafka/html/md_CONFIGURATION.html>
151pub const KAFKA_RETRY_BACKOFF: Config<Duration> = Config::new(
152    "kafka_retry_backoff",
153    Duration::from_millis(100),
154    "Sets retry.backoff.ms in librdkafka for sources and sinks.",
155    ParameterScope::Replica,
156);
157
158/// Sets retry.backoff.max.ms in librdkafka for sources and sinks.
159/// See <https://docs.confluent.io/platform/current/clients/librdkafka/html/md_CONFIGURATION.html>
160pub const KAFKA_RETRY_BACKOFF_MAX: Config<Duration> = Config::new(
161    "kafka_retry_backoff_max",
162    Duration::from_secs(1),
163    "Sets retry.backoff.max.ms in librdkafka for sources and sinks.",
164    ParameterScope::Replica,
165);
166
167/// Sets reconnect.backoff.ms in librdkafka for sources and sinks.
168/// See <https://docs.confluent.io/platform/current/clients/librdkafka/html/md_CONFIGURATION.html>
169pub const KAFKA_RECONNECT_BACKOFF: Config<Duration> = Config::new(
170    "kafka_reconnect_backoff",
171    Duration::from_millis(100),
172    "Sets reconnect.backoff.ms in librdkafka for sources and sinks.",
173    ParameterScope::Replica,
174);
175
176/// Sets reconnect.backoff.max.ms in librdkafka for sources and sinks.
177/// We default to 30s instead of 10s to avoid constant reconnection attempts in the event of
178/// auth changes or unavailability.
179/// See <https://docs.confluent.io/platform/current/clients/librdkafka/html/md_CONFIGURATION.html>
180pub const KAFKA_RECONNECT_BACKOFF_MAX: Config<Duration> = Config::new(
181    "kafka_reconnect_backoff_max",
182    Duration::from_secs(30),
183    "Sets reconnect.backoff.max.ms in librdkafka for sources and sinks.",
184    ParameterScope::Replica,
185);
186
187/// Sets message.max.bytes in librdkafka for Kafka sink producers.
188/// Maximum Kafka protocol request message size. Producer-side, this controls
189/// the maximum size of a single message (including framing) that the client
190/// will allow. Defaults to the librdkafka default of 1,000,000 bytes.
191/// See <https://docs.confluent.io/platform/current/clients/librdkafka/html/md_CONFIGURATION.html>
192pub const KAFKA_SINK_MESSAGE_MAX_BYTES: Config<usize> = Config::new(
193    "kafka_sink_message_max_bytes",
194    1_000_000,
195    "Sets message.max.bytes in librdkafka for Kafka sink producers.",
196    ParameterScope::Environment,
197);
198
199/// Sets batch.size in librdkafka for Kafka sink producers.
200/// Maximum size (in bytes) of all messages batched in one MessageSet, including
201/// protocol framing overhead. Defaults to the librdkafka default of 1,000,000
202/// bytes.
203/// See <https://docs.confluent.io/platform/current/clients/librdkafka/html/md_CONFIGURATION.html>
204pub const KAFKA_SINK_BATCH_SIZE: Config<usize> = Config::new(
205    "kafka_sink_batch_size",
206    1_000_000,
207    "Sets batch.size in librdkafka for Kafka sink producers.",
208    ParameterScope::Environment,
209);
210
211/// Sets batch.num.messages in librdkafka for Kafka sink producers.
212/// Maximum number of messages batched in one MessageSet. Defaults to the
213/// librdkafka default of 10,000 messages.
214/// See <https://docs.confluent.io/platform/current/clients/librdkafka/html/md_CONFIGURATION.html>
215pub const KAFKA_SINK_BATCH_NUM_MESSAGES: Config<usize> = Config::new(
216    "kafka_sink_batch_num_messages",
217    10_000,
218    "Sets batch.num.messages in librdkafka for Kafka sink producers.",
219    ParameterScope::Environment,
220);
221
222// MySQL
223
224/// Replication heartbeat interval requested from the MySQL server.
225pub const MYSQL_REPLICATION_HEARTBEAT_INTERVAL: Config<Duration> = Config::new(
226    "mysql_replication_heartbeat_interval",
227    Duration::from_secs(30),
228    "Replication heartbeat interval requested from the MySQL server.",
229    ParameterScope::Replica,
230);
231
232/// Whether to split snapshot reads of tables with a supported single-column
233/// primary key into per-worker PK ranges. When disabled, each table is read
234/// whole by a single worker.
235pub static MYSQL_SOURCE_SNAPSHOT_PARALLELISM: Config<bool> = Config::new(
236    "mysql_source_snapshot_parallelism",
237    true,
238    "Whether to split MySQL snapshot reads across workers by primary-key ranges.",
239    ParameterScope::Replica,
240);
241
242/// Smallest estimated row count the MySQL snapshot partitioner attempts to subdivide.
243pub static MYSQL_SOURCE_SNAPSHOT_PARTITION_MIN_ROWS: Config<usize> = Config::new(
244    "mysql_source_snapshot_partition_min_rows",
245    50_000,
246    "Minimum estimated rows the MySQL snapshot partitioner attempts to split.",
247    ParameterScope::Replica,
248);
249
250/// Cap on string primary key prefixes visited when attempting to partition a table for
251/// parallel snapshotting in MySQL. This limits runtime on high-cardinality prefixes,
252/// and will return correct but likely more skewed boundaries on budget exhaustion.
253pub static MYSQL_SOURCE_SNAPSHOT_PARTITION_PROBED_PREFIXES_PER_BILLION_ROWS: Config<usize> =
254    Config::new(
255        "mysql_source_snapshot_partition_probed_prefixes_per_billion_rows",
256        1_000,
257        "Cap on MySQL snapshot PK-prefix partitioning probed prefixes per table, per billion \
258     estimated rows; when exhausted, splitting stops early with coarser partition boundaries. \
259     The per-table budget is additionally hard-capped at 5000.",
260        ParameterScope::Replica,
261    );
262
263/// If the optimizer estimates the table has fewer rows than this, compute the exact row count
264/// with `COUNT(*)`. Otherwise, report the `information_schema` estimate directly.
265pub static MYSQL_SOURCE_SNAPSHOT_EXACT_COUNT_MAX_ROWS: Config<usize> = Config::new(
266    "mysql_source_snapshot_exact_count_max_rows",
267    1_000_000,
268    "Maximum estimated table size for which MySQL snapshots compute an exact COUNT(*) \
269     for the size gauge; larger tables report the information_schema estimate.",
270    ParameterScope::Replica,
271);
272
273// Postgres
274
275/// Interval to poll `confirmed_flush_lsn` to get a resumption lsn.
276pub const PG_FETCH_SLOT_RESUME_LSN_INTERVAL: Config<Duration> = Config::new(
277    "postgres_fetch_slot_resume_lsn_interval",
278    Duration::from_millis(500),
279    "Interval to poll `confirmed_flush_lsn` to get a resumption lsn.",
280    ParameterScope::Replica,
281);
282
283/// Interval to re-validate the schemas of ingested tables.
284pub const PG_SCHEMA_VALIDATION_INTERVAL: Config<Duration> = Config::new(
285    "pg_schema_validation_interval",
286    Duration::from_secs(15),
287    "Interval to re-validate the schemas of ingested tables.",
288    ParameterScope::Environment,
289);
290
291/// Controls behavior of PG Source when the upstream DB timeline changes. The default behavior
292/// is to emit a definite error forcing source recreation. In cases of HA, the upstream DB may
293/// provide guarantees of failover without loss of data (e.g. CloudSQL maintenance). Changing this
294/// flag puts the onus on the customer to recreate the source if the upstream DB changes timeline
295/// in a way that introduces data loss (e.g. manual failover, restore, etc.).
296/// Environment-scoped because it decides whether a definite error is emitted.
297/// Replicas of one cluster disagreeing would write different collection
298/// contents, so the value has to be coherent across them.
299pub static PG_SOURCE_VALIDATE_TIMELINE: Config<bool> = Config::new(
300    "pg_source_validate_timeline",
301    true,
302    "Whether to treat a timeline switch as a definite error",
303    ParameterScope::Environment,
304);
305
306/// Controls behavior of the SQL Server source when the upstream DB restore history changes. The
307/// default behavior is to emit a definite error, forcing source recreation.  In cases of Always
308/// On Availability Group (AOAG), the upstream DB may guarantee continuity without loss of data.
309/// Changing this flag puts the onus on the customer to recreate the source if the upstream DB
310/// changes in a way that introduces data loss.
311/// Environment-scoped because it decides whether a definite error is emitted.
312/// Replicas of one cluster disagreeing would write different collection
313/// contents, so the value has to be coherent across them.
314pub static SQL_SERVER_SOURCE_VALIDATE_RESTORE_HISTORY: Config<bool> = Config::new(
315    "sql_server_source_validate_restore_history",
316    true,
317    "Whether to treat a restore history change as a definite error",
318    ParameterScope::Environment,
319);
320
321// AWS
322
323/// The AWS SDK's connect timeout on the AssumeRole prefetcher's STS calls.
324/// Raise it if credential fetches time out on slow connections.
325///
326/// The default matches the SDK's own 3.1 second default, so behavior only
327/// changes when an operator raises it.
328///
329/// Read once when a connection is set up. Running sinks are unaffected by
330/// changes until their dataflow restarts.
331pub const AWS_PREFETCH_STS_CONNECT_TIMEOUT: Config<Duration> = Config::new(
332    "aws_prefetch_sts_connect_timeout",
333    Duration::from_millis(3100),
334    "Connect timeout for the AWS AssumeRole credentials prefetcher's STS calls.",
335    ParameterScope::Replica,
336);
337
338// Networking
339
340/// Whether or not to enforce that external connection addresses are global
341/// (not private or local) when resolving them.
342///
343/// Read on both `environmentd` (purification, `COPY` planning) and the replica.
344/// Deliberately environment-scoped even so: this is a security control, and a
345/// per-replica override would weaken it for part of the environment only.
346pub const ENFORCE_EXTERNAL_ADDRESSES: Config<bool> = Config::new(
347    "storage_enforce_external_addresses",
348    false,
349    "Whether or not to enforce that external connection addresses are global \
350          (not private or local) when resolving them",
351    ParameterScope::Environment,
352);
353
354// Upsert
355
356/// Whether or not to prevent buffering the entire _upstream_ snapshot in
357/// memory when processing it in memory. This is generally understood to reduce
358/// memory consumption.
359///
360/// When false, in general the memory utilization while processing the snapshot is:
361/// # of snapshot updates + (# of unique keys in snapshot * N), where N is some small
362/// integer number of buffers
363///
364/// When true, in general the memory utilization while processing the snapshot is:
365/// # of snapshot updates + (RocksDB buffers + # of keys in batch produced by upstream) * # of
366/// workers.
367///
368/// Without hydration flow control, which is not yet implemented, there are workloads that may
369/// cause the latter to use more memory, which is why we offer this configuration.
370pub const STORAGE_UPSERT_PREVENT_SNAPSHOT_BUFFERING: Config<bool> = Config::new(
371    "storage_upsert_prevent_snapshot_buffering",
372    true,
373    "Prevent snapshot buffering in upsert.",
374    ParameterScope::Replica,
375);
376
377/// Whether to enable the merge operator in upsert for the RocksDB backend.
378pub const STORAGE_ROCKSDB_USE_MERGE_OPERATOR: Config<bool> = Config::new(
379    "storage_rocksdb_use_merge_operator",
380    true,
381    "Use the native rocksdb merge operator where possible.",
382    ParameterScope::Environment,
383);
384
385/// If `storage_upsert_prevent_snapshot_buffering` is true, this prevents the upsert
386/// operator from buffering too many events from the upstream snapshot. In the absence
387/// of hydration flow control, this could prevent certain workloads from causing egregiously
388/// large writes to RocksDB.
389pub const STORAGE_UPSERT_MAX_SNAPSHOT_BATCH_BUFFERING: Config<Option<usize>> = Config::new(
390    "storage_upsert_max_snapshot_batch_buffering",
391    None,
392    "Limit snapshot buffering in upsert.",
393    ParameterScope::Replica,
394);
395
396/// Allow the upsert-v2 stash to spill out of RSS. Off by default; while off,
397/// the stash keeps everything resident.
398///
399/// The spill mechanism depends on the stash flavor
400/// ([`ENABLE_UPSERT_CHUNKED_STASH`]):
401///
402/// * Chunked: sets storage's leg of the process-wide chunk spill gate
403///   (`mz_timely_util::columnar::chunk`). The gate is the OR of a compute
404///   leg (`enable_column_paged_batcher_spill`) and this storage leg: chunks
405///   spill while either is set, so this flag cannot veto spilling that the
406///   compute flag has enabled. Spilled chunks draw on the one shared pool
407///   budget, and the gate is consulted at every chunk commit, so flips
408///   apply to running dataflows.
409/// * Paged: gates the storage-owned column pager the stash and feedback
410///   arrangement route their chains through, independently of compute's
411///   `enable_column_paged_batcher_spill`. Captured at operator
412///   construction, so flips apply to dataflows created after the change.
413///
414/// Enabling it also installs the process buffer pool (via compute's config
415/// handler, which reads this flag from the aggregate dyncfg set), so
416/// storage-only spilling needs no compute-side gate.
417pub const ENABLE_UPSERT_PAGED_SPILL: Config<bool> = Config::new(
418    "enable_upsert_paged_spill",
419    false,
420    "Allow the upsert-v2 stash to spill out of RSS, through the buffer pool (chunked stash \
421     flavor) or the column pager (paged stash flavor).",
422    ParameterScope::Replica,
423);
424
425/// Use the chunked stash flavor for the upsert-v2 operator: differential's
426/// chunk merge batcher for the source stash and a spine of chunk batches for
427/// the feedback arrangement, with a bulk-probe drain. When `false` (the
428/// default), the paged flavor is used: the paged columnar merge batcher and a
429/// `ValRowSpine`, with a cursor-based drain. See
430/// `mz_storage::upsert_continual_feedback_v2::UpsertStashFlavor` for the
431/// comparison.
432///
433/// Read at operator construction time; flips take effect on dataflows created
434/// after the change. Only meaningful when [`ENABLE_UPSERT_V2`] is `true`.
435/// Spilling in either flavor is gated by [`ENABLE_UPSERT_PAGED_SPILL`].
436pub const ENABLE_UPSERT_CHUNKED_STASH: Config<bool> = Config::new(
437    "enable_upsert_chunked_stash",
438    false,
439    "Use the chunk batcher and chunk spine for the upsert-v2 stash and feedback arrangement, \
440     instead of the paged columnar merge batcher and ValRowSpine. Only meaningful when \
441     enable_upsert_v2 is true.",
442    ParameterScope::Replica,
443);
444
445// RocksDB
446
447/// How many times to try to cleanup old RocksDB DB's on disk before giving up.
448pub const STORAGE_ROCKSDB_CLEANUP_TRIES: Config<usize> = Config::new(
449    "storage_rocksdb_cleanup_tries",
450    5,
451    "How many times to try to cleanup old RocksDB DB's on disk before giving up.",
452    ParameterScope::Replica,
453);
454
455/// Delay interval when reconnecting to a source / sink after halt.
456pub const STORAGE_SUSPEND_AND_RESTART_DELAY: Config<Duration> = Config::new(
457    "storage_suspend_and_restart_delay",
458    Duration::from_secs(5),
459    "Delay interval when reconnecting to a source / sink after halt.",
460    ParameterScope::Replica,
461);
462
463/// Whether to use the new continual feedback upsert operator.
464pub const STORAGE_USE_CONTINUAL_FEEDBACK_UPSERT: Config<bool> = Config::new(
465    "storage_use_continual_feedback_upsert",
466    true,
467    "Whether to use the new continual feedback upsert operator.",
468    ParameterScope::Environment,
469);
470
471/// Whether to use the v2 upsert operator.
472pub const ENABLE_UPSERT_V2: Config<bool> = Config::new(
473    "enable_upsert_v2",
474    false,
475    "Whether to use the v2 upsert operator.",
476    ParameterScope::Environment,
477);
478
479/// The interval at which the storage server performs maintenance tasks.
480pub const STORAGE_SERVER_MAINTENANCE_INTERVAL: Config<Duration> = Config::new(
481    "storage_server_maintenance_interval",
482    Duration::from_millis(10),
483    "The interval at which the storage server performs maintenance tasks. Zero enables maintenance on every iteration.",
484    ParameterScope::Replica,
485);
486
487/// If set, iteratively search the progress topic for a progress record with increasing lookback.
488pub const SINK_PROGRESS_SEARCH: Config<bool> = Config::new(
489    "storage_sink_progress_search",
490    true,
491    "If set, iteratively search the progress topic for a progress record with increasing lookback.",
492    ParameterScope::Environment,
493);
494
495/// Configure how to behave when trying to create an existing topic with specified configs.
496pub const SINK_ENSURE_TOPIC_CONFIG: Config<&'static str> = Config::new(
497    "storage_sink_ensure_topic_config",
498    "skip",
499    "If `skip`, don't check the config of existing topics; if `check`, fetch the config and \
500    warn if it does not match the expected configs; if `alter`, attempt to change the upstream to \
501    match the expected configs.",
502    ParameterScope::Environment,
503);
504
505/// Configure mz-ore overflowing type behavior.
506pub const ORE_OVERFLOWING_BEHAVIOR: Config<&'static str> = Config::new(
507    "ore_overflowing_behavior",
508    "soft_panic",
509    "Overflow behavior for Overflowing types. One of 'ignore', 'panic', 'soft_panic'.",
510    ParameterScope::Environment,
511);
512
513/// The time after which we delete per-replica statistics (for sources and
514/// sinks) after there have been no updates.
515///
516/// This time is opportunistic, statistics are not guaranteed to be deleted
517/// after the retention time runs out.
518pub const STATISTICS_RETENTION_DURATION: Config<Duration> = Config::new(
519    "storage_statistics_retention_duration",
520    Duration::from_secs(86_400), /* one day */
521    "The time after which we delete per replica statistics (for sources and sinks) after there have been no updates.",
522    ParameterScope::Environment,
523);
524
525/// Adds the full set of all storage `Config`s.
526pub fn all_dyncfgs(configs: ConfigSet) -> ConfigSet {
527    configs
528        .add(&AWS_PREFETCH_STS_CONNECT_TIMEOUT)
529        .add(&CLUSTER_SHUTDOWN_GRACE_PERIOD)
530        .add(&DELAY_SOURCES_PAST_REHYDRATION)
531        .add(&ENFORCE_EXTERNAL_ADDRESSES)
532        .add(&KAFKA_BUFFERED_EVENT_RESIZE_THRESHOLD_ELEMENTS)
533        .add(&KAFKA_CLIENT_ID_ENRICHMENT_RULES)
534        .add(&KAFKA_DEFAULT_AWS_PRIVATELINK_ENDPOINT_IDENTIFICATION_ALGORITHM)
535        .add(&KAFKA_LOW_WATERMARK_CHECK)
536        .add(&KAFKA_POLL_MAX_WAIT)
537        .add(&KAFKA_RETRY_BACKOFF)
538        .add(&KAFKA_RETRY_BACKOFF_MAX)
539        .add(&KAFKA_RECONNECT_BACKOFF)
540        .add(&KAFKA_RECONNECT_BACKOFF_MAX)
541        .add(&KAFKA_SINK_MESSAGE_MAX_BYTES)
542        .add(&KAFKA_SINK_BATCH_SIZE)
543        .add(&KAFKA_SINK_BATCH_NUM_MESSAGES)
544        .add(&MYSQL_REPLICATION_HEARTBEAT_INTERVAL)
545        .add(&MYSQL_SOURCE_SNAPSHOT_EXACT_COUNT_MAX_ROWS)
546        .add(&MYSQL_SOURCE_SNAPSHOT_PARALLELISM)
547        .add(&MYSQL_SOURCE_SNAPSHOT_PARTITION_MIN_ROWS)
548        .add(&MYSQL_SOURCE_SNAPSHOT_PARTITION_PROBED_PREFIXES_PER_BILLION_ROWS)
549        .add(&ORE_OVERFLOWING_BEHAVIOR)
550        .add(&PG_FETCH_SLOT_RESUME_LSN_INTERVAL)
551        .add(&PG_SCHEMA_VALIDATION_INTERVAL)
552        .add(&PG_SOURCE_VALIDATE_TIMELINE)
553        .add(&REPLICA_METRICS_HISTORY_RETENTION_INTERVAL)
554        .add(&SINK_ENSURE_TOPIC_CONFIG)
555        .add(&SINK_PROGRESS_SEARCH)
556        .add(&SQL_SERVER_SOURCE_VALIDATE_RESTORE_HISTORY)
557        .add(&STORAGE_DOWNGRADE_SINCE_DURING_FINALIZATION)
558        .add(&STORAGE_ROCKSDB_CLEANUP_TRIES)
559        .add(&STORAGE_ROCKSDB_USE_MERGE_OPERATOR)
560        .add(&STORAGE_SERVER_MAINTENANCE_INTERVAL)
561        .add(&STORAGE_SUSPEND_AND_RESTART_DELAY)
562        .add(&STORAGE_UPSERT_MAX_SNAPSHOT_BATCH_BUFFERING)
563        .add(&STORAGE_UPSERT_PREVENT_SNAPSHOT_BUFFERING)
564        .add(&STORAGE_USE_CONTINUAL_FEEDBACK_UPSERT)
565        .add(&ENABLE_UPSERT_V2)
566        .add(&SUSPENDABLE_SOURCES)
567        .add(&ENABLE_UPSERT_PAGED_SPILL)
568        .add(&ENABLE_UPSERT_CHUNKED_STASH)
569        .add(&WALLCLOCK_GLOBAL_LAG_HISTOGRAM_RETENTION_INTERVAL)
570        .add(&WALLCLOCK_LAG_HISTORY_RETENTION_INTERVAL)
571        .add(&crate::sources::sql_server::CDC_CLEANUP_CHANGE_TABLE)
572        .add(&crate::sources::sql_server::CDC_CLEANUP_CHANGE_TABLE_MAX_DELETES)
573        .add(&crate::sources::sql_server::MAX_LSN_WAIT)
574        .add(&crate::sources::sql_server::SNAPSHOT_PROGRESS_REPORT_INTERVAL)
575        .add(&STATISTICS_RETENTION_DURATION)
576}