Skip to content

Commit 978dd71

Browse files
committed
instanciate namesapces from configurators
1 parent 8b377a6 commit 978dd71

File tree

4 files changed

+74
-427
lines changed

4 files changed

+74
-427
lines changed

libsql-server/src/namespace/configurator/mod.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@ use super::{NamespaceConfig, NamespaceName, NamespaceStore, ResetCb, ResolveName
88

99
mod replica;
1010
mod primary;
11+
mod schema;
1112

12-
type DynConfigurator = Box<dyn ConfigureNamespace + Send + Sync + 'static>;
13+
pub use replica::ReplicaConfigurator;
14+
pub use primary::PrimaryConfigurator;
15+
pub use schema::SchemaConfigurator;
16+
17+
type DynConfigurator = dyn ConfigureNamespace + Send + Sync + 'static;
1318

1419
#[derive(Default)]
1520
pub(crate) struct NamespaceConfigurators {
16-
replica_configurator: Option<DynConfigurator>,
17-
primary_configurator: Option<DynConfigurator>,
18-
schema_configurator: Option<DynConfigurator>,
21+
replica_configurator: Option<Box<DynConfigurator>>,
22+
primary_configurator: Option<Box<DynConfigurator>>,
23+
schema_configurator: Option<Box<DynConfigurator>>,
1924
}
2025

2126
impl NamespaceConfigurators {
@@ -39,6 +44,18 @@ impl NamespaceConfigurators {
3944
self.schema_configurator = Some(Box::new(c));
4045
self
4146
}
47+
48+
pub fn configure_schema(&self) -> crate::Result<&DynConfigurator> {
49+
self.schema_configurator.as_deref().ok_or_else(|| todo!())
50+
}
51+
52+
pub fn configure_primary(&self) -> crate::Result<&DynConfigurator> {
53+
self.primary_configurator.as_deref().ok_or_else(|| todo!())
54+
}
55+
56+
pub fn configure_replica(&self) -> crate::Result<&DynConfigurator> {
57+
self.replica_configurator.as_deref().ok_or_else(|| todo!())
58+
}
4259
}
4360

4461
pub trait ConfigureNamespace {

libsql-server/src/namespace/fork.rs

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@ use tokio::io::{AsyncSeekExt, AsyncWriteExt};
1212
use tokio::time::Duration;
1313
use tokio_stream::StreamExt;
1414

15-
use crate::namespace::ResolveNamespacePathFn;
1615
use crate::replication::primary::frame_stream::FrameStream;
1716
use crate::replication::{LogReadError, ReplicationLogger};
1817
use crate::{BLOCKING_RT, LIBSQL_PAGE_SIZE};
1918

20-
use super::broadcasters::BroadcasterHandle;
2119
use super::meta_store::MetaStoreHandle;
22-
use super::{Namespace, NamespaceConfig, NamespaceName, NamespaceStore, RestoreOption};
20+
use super::{NamespaceName, NamespaceStore, RestoreOption};
2321

2422
type Result<T> = crate::Result<T, ForkError>;
2523

@@ -54,24 +52,21 @@ async fn write_frame(frame: &FrameBorrowed, temp_file: &mut tokio::fs::File) ->
5452
Ok(())
5553
}
5654

57-
pub struct ForkTask<'a> {
55+
pub struct ForkTask {
5856
pub base_path: Arc<Path>,
5957
pub logger: Arc<ReplicationLogger>,
6058
pub to_namespace: NamespaceName,
6159
pub to_config: MetaStoreHandle,
6260
pub restore_to: Option<PointInTimeRestore>,
63-
pub ns_config: &'a NamespaceConfig,
64-
pub resolve_attach: ResolveNamespacePathFn,
6561
pub store: NamespaceStore,
66-
pub broadcaster: BroadcasterHandle,
6762
}
6863

6964
pub struct PointInTimeRestore {
7065
pub timestamp: NaiveDateTime,
7166
pub replicator_options: bottomless::replicator::Options,
7267
}
7368

74-
impl<'a> ForkTask<'a> {
69+
impl ForkTask {
7570
pub async fn fork(self) -> Result<super::Namespace> {
7671
let base_path = self.base_path.clone();
7772
let dest_namespace = self.to_namespace.clone();
@@ -105,18 +100,9 @@ impl<'a> ForkTask<'a> {
105100
let dest_path = self.base_path.join("dbs").join(self.to_namespace.as_str());
106101
tokio::fs::rename(temp_dir.path(), dest_path).await?;
107102

108-
Namespace::from_config(
109-
self.ns_config,
110-
self.to_config.clone(),
111-
RestoreOption::Latest,
112-
&self.to_namespace,
113-
Box::new(|_op| {}),
114-
self.resolve_attach.clone(),
115-
self.store.clone(),
116-
self.broadcaster,
117-
)
118-
.await
119-
.map_err(|e| ForkError::CreateNamespace(Box::new(e)))
103+
self.store.make_namespace(&self.to_namespace, self.to_config, RestoreOption::Latest)
104+
.await
105+
.map_err(|e| ForkError::CreateNamespace(Box::new(e)))
120106
}
121107

122108
/// Restores the database state from a local log file.

0 commit comments

Comments
 (0)