dump indexes

This commit is contained in:
ad hoc 2022-05-19 14:59:59 +02:00
parent 414d0907ce
commit 56eb2907c9
No known key found for this signature in database
GPG Key ID: 4F00A782990CC643
3 changed files with 33 additions and 6 deletions

View File

@ -1,5 +1,6 @@
use std::fs::File; use std::fs::File;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::sync::Arc;
use anyhow::bail; use anyhow::bail;
use log::{info, trace}; use log::{info, trace};
@ -13,6 +14,9 @@ use tokio::fs::create_dir_all;
use crate::analytics; use crate::analytics;
use crate::compression::{from_tar_gz, to_tar_gz}; use crate::compression::{from_tar_gz, to_tar_gz};
use crate::dump::error::DumpError; use crate::dump::error::DumpError;
use crate::index_resolver::index_store::IndexStore;
use crate::index_resolver::meta_store::IndexMetaStore;
use crate::index_resolver::IndexResolver;
use crate::options::IndexerOpts; use crate::options::IndexerOpts;
use crate::update_file_store::UpdateFileStore; use crate::update_file_store::UpdateFileStore;
use error::Result; use error::Result;
@ -255,16 +259,21 @@ fn persist_dump(dst_path: impl AsRef<Path>, tmp_dst: TempDir) -> anyhow::Result<
Ok(()) Ok(())
} }
pub struct DumpJob { pub struct DumpJob<U, I> {
pub dump_path: PathBuf, pub dump_path: PathBuf,
pub db_path: PathBuf, pub db_path: PathBuf,
pub update_file_store: UpdateFileStore, pub update_file_store: UpdateFileStore,
pub uid: String, pub uid: String,
pub update_db_size: usize, pub update_db_size: usize,
pub index_db_size: usize, pub index_db_size: usize,
pub index_resolver: Arc<IndexResolver<U, I>>,
} }
impl DumpJob { impl<U, I> DumpJob<U, I>
where
U: IndexMetaStore,
I: IndexStore,
{
pub async fn run(self) -> Result<()> { pub async fn run(self) -> Result<()> {
trace!("Performing dump."); trace!("Performing dump.");
@ -281,8 +290,9 @@ impl DumpJob {
create_dir_all(&temp_dump_path.join("indexes")).await?; create_dir_all(&temp_dump_path.join("indexes")).await?;
// TODO: this is blocking!!
AuthController::dump(&self.db_path, &temp_dump_path)?; AuthController::dump(&self.db_path, &temp_dump_path)?;
// TODO: Dump indexes and updates self.index_resolver.dump(&self.dump_path).await?;
//TODO(marin): this is not right, the scheduler should dump itself, not do it here... //TODO(marin): this is not right, the scheduler should dump itself, not do it here...
// self.scheduler // self.scheduler

View File

@ -228,6 +228,7 @@ impl IndexControllerBuilder {
db_path.as_ref().clone(), db_path.as_ref().clone(),
index_size, index_size,
task_store_size, task_store_size,
index_resolver.clone(),
)); ));
let task_store = TaskStore::new(meta_env)?; let task_store = TaskStore::new(meta_env)?;

View File

@ -1,15 +1,20 @@
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::sync::Arc;
use log::{error, trace}; use log::{error, trace};
use time::{macros::format_description, OffsetDateTime}; use time::{macros::format_description, OffsetDateTime};
use crate::dump::DumpJob; use crate::dump::DumpJob;
use crate::index_resolver::index_store::IndexStore;
use crate::index_resolver::meta_store::IndexMetaStore;
use crate::index_resolver::IndexResolver;
use crate::tasks::batch::{Batch, BatchContent}; use crate::tasks::batch::{Batch, BatchContent};
use crate::tasks::BatchHandler; use crate::tasks::BatchHandler;
use crate::update_file_store::UpdateFileStore; use crate::update_file_store::UpdateFileStore;
pub struct DumpHandler { pub struct DumpHandler<U, I> {
update_file_store: UpdateFileStore, update_file_store: UpdateFileStore,
index_resolver: Arc<IndexResolver<U, I>>,
dump_path: PathBuf, dump_path: PathBuf,
db_path: PathBuf, db_path: PathBuf,
update_db_size: usize, update_db_size: usize,
@ -25,13 +30,18 @@ fn generate_uid() -> String {
.unwrap() .unwrap()
} }
impl DumpHandler { impl<U, I> DumpHandler<U, I>
where
U: IndexMetaStore + Send + Sync + 'static,
I: IndexStore + Send + Sync + 'static,
{
pub fn new( pub fn new(
update_file_store: UpdateFileStore, update_file_store: UpdateFileStore,
dump_path: impl AsRef<Path>, dump_path: impl AsRef<Path>,
db_path: impl AsRef<Path>, db_path: impl AsRef<Path>,
index_db_size: usize, index_db_size: usize,
update_db_size: usize, update_db_size: usize,
index_resolver: Arc<IndexResolver<U, I>>,
) -> Self { ) -> Self {
Self { Self {
update_file_store, update_file_store,
@ -39,6 +49,7 @@ impl DumpHandler {
db_path: db_path.as_ref().into(), db_path: db_path.as_ref().into(),
index_db_size, index_db_size,
update_db_size, update_db_size,
index_resolver,
} }
} }
@ -52,6 +63,7 @@ impl DumpHandler {
uid: uid.clone(), uid: uid.clone(),
update_db_size: self.update_db_size, update_db_size: self.update_db_size,
index_db_size: self.index_db_size, index_db_size: self.index_db_size,
index_resolver: self.index_resolver.clone(),
}; };
let task_result = tokio::task::spawn_local(task.run()).await; let task_result = tokio::task::spawn_local(task.run()).await;
@ -71,7 +83,11 @@ impl DumpHandler {
} }
#[async_trait::async_trait] #[async_trait::async_trait]
impl BatchHandler for DumpHandler { impl<U, I> BatchHandler for DumpHandler<U, I>
where
U: IndexMetaStore + Send + Sync + 'static,
I: IndexStore + Send + Sync + 'static,
{
fn accept(&self, batch: &Batch) -> bool { fn accept(&self, batch: &Batch) -> bool {
matches!(batch.content, BatchContent::Dump { .. }) matches!(batch.content, BatchContent::Dump { .. })
} }