1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
// Copyright Materialize, Inc. and contributors. All rights reserved.
//
// Use of this software is governed by the Business Source License
// included in the LICENSE file.
//
// As of the Change Date specified in that file, in accordance with
// the Business Source License, use of this software will be governed
// by the Apache License, Version 2.0.
//! Configuration parameter types.
use std::sync::Arc;
use mz_dyncfg::ConfigSet;
use crate::{connections::ConnectionContext, parameters::StorageParameters};
include!(concat!(env!("OUT_DIR"), "/mz_storage_types.parameters.rs"));
/// A struct representing the _entirety_ of configuration required for interacting with storage APIs.
///
/// Portions of this struct are mutable, but it remains _clone-able_ so it can be moved between
/// tasks.
///
/// Usable within clusterd and environmentd.
#[derive(Debug, Clone)]
pub struct StorageConfiguration {
/// Mutable, LD-controlled parameters related to upstream storage connections,
/// persist, and rendering of dataflows.
///
/// This type can be serialized and copied from environmentd to clusterd, and can
/// be merged into a `StorageConfiguration` with `StorageConfiguration::update`.
pub parameters: StorageParameters,
/// Immutable, CLI-configured parameters.
///
/// TODO(guswynn): `ConnectionContext` also contains some shared global state that should
/// eventually be moved up to this struct.
pub connection_context: ConnectionContext,
/// A clone-able `mz_dyncfg::ConfigSet` used to access dyncfg values.
config_set: Arc<ConfigSet>,
}
impl StorageConfiguration {
/// Instantiate a new `StorageConfiguration` with default parameters and the given context.
pub fn new(
connection_context: ConnectionContext,
config_set: ConfigSet,
) -> StorageConfiguration {
StorageConfiguration {
parameters: Default::default(),
connection_context,
config_set: Arc::new(config_set),
}
}
/// Get a reference to the shared `ConfigSet`.
pub fn config_set(&self) -> &Arc<ConfigSet> {
&self.config_set
}
pub fn update(&mut self, parameters: StorageParameters) {
// We serialize the dyncfg updates in StorageParameters, but store the config set
// top-level. Eventually, all of `StorageParameters` goes away.
parameters.dyncfg_updates.apply(&self.config_set);
self.parameters.update(parameters);
}
}