Saltar al contenido principal

DeltaService

DeltaService proporciona métodos para generar objetos RDIndex de directorios o streams, compara dos índices, y genera un DeltaPlan describiendo qué chunks necesitan subirse, descargarse, o eliminarse.

Internamente, usa HasherService para hashear archivos y streams.

pub trait DeltaService: Send + Sync {
...
}

Métodos

MétodoDevuelveDescripción
create_index_from_directory(root_path, chunk_size, concurrency, ignore_patterns)Result<RDIndex, DeltaError>Escanea un directorio, divide los archivos en chunks, los hashea, y devuelve un RDIndex.
create_file_entry_from_stream(stream, path)Result<FileEntry, DeltaError>Crea un FileEntry desde un stream de chunk asíncrono.
compare(source, target)Result<DeltaPlan, DeltaError>Compara dos rd-index y devuelve un plan delta describiendo los chunks faltantes y obsoletos.
merge_plans(base, updates)Result<DeltaPlan, DeltaError>Fusiona dos DeltaPlan.
compare_for_upload(local_index, remote_index)Result<DeltaPlan, DeltaError>Prepara un plan delta para cambios de subida.
compare_for_download(local_index, remote_index)Result<DeltaPlan, DeltaError>Prepara un plan delta para cambios de descarga.

DeltaError

Enum de errores personalizado para los resultados de DeltaService. (Usa thiserror)

pub enum DeltaError {
#[error("IO error: {0}")]
Io(#[from] std::io::Error),

#[error("Hashing failed: {0}")]
HashError(#[from] HasherError),

#[error("System time error: {0}")]
SystemTimeError(#[from] SystemTimeError),

#[error("Index creation failed: {0}")]
IndexError(String),

#[error("Delta comparison failed")]
CompareError,
}

Detalles de métodos

create_index_from_directory(root_path, chunk_size, concurrency, ignore_patterns)

Genera un RDIndex de un directorio. Divide los archivos en chunks y los hashea.

Parámetros:

NombreTipoDescripción
root_path&PathDirectorio a escanear recursivamente.
chunk_sizeu64Tamaño del chunk en bytes (se recomienda 1MB).
concurrencyOption<usize>Número máximo opcional de operaciones paralelas.
ignore_patternsOption<Vec<String>>Patrones glob opcionales a ignorar.

Devuelve: Result<RDIndex, DeltaError>

Nota: Usa HasherService.hashStream internamente.


create_file_entry_from_stream(stream, path)

Crea un FileEntry a partir de un stream de chunks válido (de un archivo).

Parámetros:

ParámetroTipoDescripción
stream&mut (dyn AsyncChunkStream + Send)Stream de chunks asíncrono de entrada.
path&strRuta relativa del archivo.
#[async_trait]
pub trait AsyncChunkStream: Send + Sync {
async fn next_chunk(&mut self) -> Option<Vec<u8>>;
async fn reset(&mut self) {}
async fn close(&mut self) {}
}

Devuelve: Result<FileEntry, DeltaError>

Nota: Hashea los chunks usando HasherService para generar un FileEntry compatible.


compare(source, target)

Compara dos rd-index para generar un DeltaPlan.

Parámetros:

ParámetroTipoDescripción
source&RDIndexÍndice fuente.
targetOption<&RDIndex>Índice objetivo (puede ser None).

Devuelve: Result<DeltaPlan, DeltaError>


merge_plans(base, updates)

Fusiona dos planes en uno.

Parámetros:

ParámetroTipoDescripción
base&DeltaPlanPlan delta base a fusionar.
updates&DeltaPlanPlan delta de actualizaciones a fusionar.

Devuelve: Result<DeltaPlan, DeltaError>


compare_for_upload(local_index, remote_index)

Wrapper para generar un delta plan listo para subir archivos.

Parámetros:

ParámetroTipoDescripción
local_index&RDIndexrd-index local.
remote_indexOption<&RDIndex>rd-index remoto.

Devuelve: Result<DeltaPlan, DeltaError>


compare_for_download(local_index, remote_index)

Wrapper para generar un delta plan listo para descargar archivos.

Parámetros:

ParámetroTipoDescripción
local_indexOption<&RDIndex>rd-index local.
remote_index&RDIndexrd-index remoto.

Devuelve: Result<DeltaPlan, DeltaError>


Relacionado