Saltar al contenido principal

HashUploadPipeline

HashUploadPipeline es una clase abstracta diseñada para manejar subidas usando los adaptadores de almacenamiento basados en hash (HashStorageAdapter). Orquesta el proceso de escanear directorios, computar deltas con DeltaService, subir chunks nuevos, y limpiar los chunks obsoletos.

Esta pipeline es comúnmente usada cuando las subidas son a sistemas de almacenamiento donde los chunks se identifican por su hash.


Constructor

ParámetroTipoDescripción
storageArc<dyn HashStorageAdapter>Adaptador de almacenamiento basado en hash que se usará (se crea automáticamente con el cliente).
deltaArc<dyn DeltaService>DeltaService usado para generar índices y compararlos.
configArc<RacDeltaConfig>Configuración base del cliente.

Métodos

MétodoDevuelveDescripción
execute(directory, remote_index, options)Result<RDIndex, PipelineError>Realiza un proceso de subida completo para un directorio.
scan_directory(dir, ignore_patterns)Result<RDIndex, PipelineError>Escanea el directorio recursivamente y crea un RDIndex.
upload_missing_chunks(plan, base_dir, force, options)Result<(), PipelineError>Sube solo los chunks faltantes o actualizados definidos en el DeltaPlan.
upload_index(index)Result<(), PipelineError>Sube el archivo RDIndex al adaptador de almacenamiento.
delete_obsolete_chunks(plan, options)Result<(), PipelineError>Elimina chunks obsoletos del almacenamiento especificados en el delta plan.
update_progress(value, phase, speed, options)()Método opcional que llama a la callback de progreso en opciones.
change_state(state, options)()Método opcional que llama a la callback change_state en opciones.

UploadOptions

El objeto UploadOptions permite personalizar el comportamiento de una subida:

pub struct UploadOptions {
pub force: Option<bool>,
pub require_remote_index: Option<bool>,
pub ignore_patterns: Option<Vec<String>>,
pub on_progress: Option<Arc<dyn Fn(UploadPhase, f64, Option<f64>) + Send + Sync>>,
pub on_state_change: Option<Arc<dyn Fn(UploadState) + Send + Sync>>,
}
PropiedadTipoDescripción
forceOption<bool>Si es true, fuerza una subida completa incluso si existe un índice remoto. Si es false, solo los chunks nuevos y modificados se subirán.
require_remote_indexOption<bool>Si es true y no hay índice remoto, se aborta la subida. Si es false (por defecto), sube todo si no encuentra índice remoto.
ignore_patternsOption<Vec<String>>Archivos y directorios que deben ser ignorados al crear el rd-index.json.
on_progressOption<Arc<dyn Fn(UploadPhase, f64, Option<f64>) + Send + Sync>>Callback opcional para informar progreso.
on_state_changeOption<Arc<dyn Fn(UploadState) + Send + Sync>>Callback opcional para informar cambios de estado.
pub enum UploadState {
Uploading,
Comparing,
Cleaning,
Finalizing,
Scanning,
}

pub enum UploadPhase {
Upload,
Deleting,
}

PipelineError

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

pub enum PipelineError {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),

#[error("Delta error: {0}")]
Delta(String),

#[error("Storage error: {0}")]
Storage(String),

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

#[error("Invalid argument: {0}")]
InvalidArgument(String),

#[error("Operation aborted")]
Aborted,

#[error("Other error: {0}")]
Other(String),
}

Detalles de métodos

execute(directory, remote_index, options)

Realiza un proceso de subida completo para un directorio. Devuelve el RDIndex resultante tras el proceso.

Parámetros

NombreTipoDescripción
directory&PathDirectorio que será comparado y subido.
remote_indexOption<RDIndex>rd-index remoto opcional. Si no se proporciona ninguno, se intentará descargar del almacenamiento.
optionsOption<UploadOptions>Opciones para el proceso de subida. Mira UploadOptions arriba.

Devuelve

Result<RDIndex, PipelineError>


scan_directory(dir, ignore_patterns)

Escanea el directorio recursivamente y crea un RDIndex, ignorando los archivos que coincidan con los patrones proporcionados.

Parámetros

NombreTipoDescripción
dir&PathDirectorio a escanear.
ignorePatternsOption<Vec<String>>Patrones a ignorar opcionales, estos patrones se ignorarán al crear el RDIndex.

Devuelve

Result<RDIndex, PipelineError>


upload_missing_chunks(plan, base_dir, force, options)

Sube solo los chunks que faltan o han sido actualizados definidos en el DeltaPlan.

Parámetros

NombreTipoDescripción
plan&DeltaPlanEl plan delta indicando qué chunks faltan.
base_dir&PathEl directorio base que contiene los archivos locales.
forceboolSi es true, forzará la sobreescritura de chunks en el almacenamiento.
optionsOption<UploadOptions>Opciones para el proceso de subida. Mira UploadOptions arriba.

Devuelve

Result<(), PipelineError>


upload_index(index)

Sube el archivo RDIndex al almacenamiento.

Parámetros

NombreTipoDescripción
index&RDIndexEl objeto rd-index a subir.

Devuelve

Result<(), PipelineError>


delete_obsolete_chunks(plan, options)

Elimina los chunks obsoletos del almacenamiento especificados por el plan delta.

Parámetros

NombreTipoDescripción
plan&DeltaPlanEl plan delta que indica los chunks obsoletos.
optionsOption<UploadOptions>Opciones para el proceso de subida. Mira UploadOptions arriba.

Devuelve

Result<(), PipelineError>


update_progress(value, phase, speed, options)

Método que se usará internamente para llamar a la callback dada on_progress en opciones.

Parámetros

NombreTipoDescripción
valuef64Valor del progreso.
phaseUploadPhaseFase de subida actual (uploading o deleting).
speedOption<f64>Velocidad en bytes/s para el proceso de subida.
optionsOption<&UploadOptions>Opciones que debe incluir la callback on_progress.

Devuelve ()


change_state(state, options)

Método que se usará internamente para llamar a la callback dada on_state_change en opciones.

Parámetros

NombreTipoDescripción
stateUploadStateEstado actual del progreso.
optionsOption<&UploadOptions>Opciones que debe incluir la callback on_state_change.

Devuelve ()


Relacionado