mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-05-26 18:00:41 +00:00
chore: wrap standalone runtime with trait (#8083)
* chore: introduce standalone start service trait Signed-off-by: shuiyisong <xixing.sys@gmail.com> * chore: add region server to the trait Signed-off-by: shuiyisong <xixing.sys@gmail.com> * chore: add comments Signed-off-by: shuiyisong <xixing.sys@gmail.com> --------- Signed-off-by: shuiyisong <xixing.sys@gmail.com>
This commit is contained in:
@@ -163,6 +163,7 @@ pub struct DatanodeBuilder {
|
||||
kv_backend: KvBackendRef,
|
||||
cache_registry: Option<Arc<LayeredCacheRegistry>>,
|
||||
topic_stats_reporter: Option<Box<dyn TopicStatsReporter>>,
|
||||
open_regions_writable_override: Option<bool>,
|
||||
#[cfg(feature = "enterprise")]
|
||||
extension_range_provider_factory: Option<mito2::extension::BoxedExtensionRangeProviderFactory>,
|
||||
}
|
||||
@@ -176,6 +177,7 @@ impl DatanodeBuilder {
|
||||
meta_client: None,
|
||||
kv_backend,
|
||||
cache_registry: None,
|
||||
open_regions_writable_override: None,
|
||||
#[cfg(feature = "enterprise")]
|
||||
extension_range_provider_factory: None,
|
||||
topic_stats_reporter: None,
|
||||
@@ -205,6 +207,20 @@ impl DatanodeBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Overrides whether regions opened during datanode startup should become writable.
|
||||
///
|
||||
/// When unset, the builder uses its default writable policy for reopened regions
|
||||
/// (writable only when no metasrv client is configured).
|
||||
///
|
||||
/// Warning: setting this to `true` on a metasrv-controlled datanode (one built
|
||||
/// with `with_meta_client`) will promote regions to Leader before heartbeat and
|
||||
/// lease coordination begin, bypassing the metasrv safety contract and creating a
|
||||
/// potential split-brain window during startup.
|
||||
pub fn with_open_regions_writable_override(&mut self, writable: bool) -> &mut Self {
|
||||
self.open_regions_writable_override = Some(writable);
|
||||
self
|
||||
}
|
||||
|
||||
#[cfg(feature = "enterprise")]
|
||||
pub fn with_extension_range_provider(
|
||||
&mut self,
|
||||
@@ -274,10 +290,13 @@ impl DatanodeBuilder {
|
||||
|
||||
let region_open_requests =
|
||||
build_region_open_requests(node_id, self.kv_backend.clone()).await?;
|
||||
let open_with_writable = self
|
||||
.open_regions_writable_override
|
||||
.unwrap_or(!controlled_by_metasrv);
|
||||
let open_all_regions = open_all_regions(
|
||||
region_server.clone(),
|
||||
region_open_requests,
|
||||
!controlled_by_metasrv,
|
||||
open_with_writable,
|
||||
self.opts.init_regions_parallelism,
|
||||
// Ignore nonexistent regions in recovery mode.
|
||||
is_recovery_mode,
|
||||
|
||||
Reference in New Issue
Block a user