Saltar al contenido principal

UrlUploadPipeline

UrlUploadPipeline es una clase abstracta diseñada para manejar subidas usando adaptadores de almacenamiento basados en URL (UrlStorageAdapter). A diferencia de HashUploadPipeline, esta pipeline da por hecho que el plan delta (el cual indica qué subir o borrar) es calculado externamente y proporcionado a la pipeline.

Esta pipeline se usa comúnmente para sistemas de almacenamiento remoto donde cada chunk tiene una URL dedicada para subir, eliminar o descargar.


Constructor

ParámetroTipoDescripción
storageArc<dyn UrlStorageAdapter>Adaptador de almacenamiento basado en urls que se usará (se crea automáticamente con el cliente).
configArc<RacDeltaConfig>Configuración base del cliente.

Métodos

MétodoDevuelveDescripción
execute(local_index, urls, options)Result<RDIndex, PipelineError>Realiza un proceso de subida completo para las urls dadas.
upload_missing_chunks(upload_urls, options)Result<(), PipelineError>Sube los chunks definidos en upload_urls.
upload_index(index, upload_url)Result<(), PipelineError>Sube el rd-index.json a la url dada.
delete_obsolete_chunks(delete_urls, options)Result<(), PipelineError>Elimina chunks obsoletos del almacenamiento usando las urls especificadas.
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 UrlUploadPipeline. (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(local_index, urls, options)

Realiza el proceso de subida completo usando las URLs proporcionadas para los chunks y el índice.

Parámetros

NombreTipoDescripción
local_indexRDIndexEl rd-index necesario para sincronizar, necesario ya que el usuario debería haber comparado ya ambos.
urls.upload_urlsHashMap<String, ChunkUrlInfo>Las urls identificadas por hash para subir chunks. Mira ChunkUrlInfo abajo.
urls.delete_urlsOption<Vec<String>>Las urls para eliminar los chunks remotos obsoletos.
urls.index_urlStringLa url para subir el nuevo rd-index.json.
optionsOption<UploadOptions>Opciones para el proceso de subida. Mira UploadOptions arriba.
pub struct ChunkUrlInfo {
pub url: String,
pub offset: u64,
pub size: u64,
pub file_path: String,
}

Mira ChunkUrlInfo

Devuelve

Result<RDIndex, PipelineError>


upload_missing_chunks(upload_urls, options)

Sube todos los chunks faltantes con sus URLs respectivas. Los Chunks se leen desde disco en base a las rutas especificadas en ChunkUrlInfo.

Parámetros

NombreTipoDescripción
upload_urlsHashMap<String, ChunkUrlInfo>Las urls identificadas por hash para subir los chunks. Mira ChunkUrlInfo.
optionsOption<UploadOptions>Opciones para el proceso de subida. Mira UploadOptions arriba.

Devuelve

Result<(), PipelineError>


upload_index(index, upload_url)

Sube el archivo RDIndex a la URL especificada.

Parámetros

NombreTipoDescripción
index&RDIndexEl objeto índice a subir.
upload_url&strUrl para subir el índice.

Devuelve

Result<(), PipelineError>


delete_obsolete_chunks(delete_urls, options)

Elimina chunks obsoletos del almacenamiento remoto usando las URLs. Incluye lógica de reintentos y seguimiento de progreso.

Parámetros

NombreTipoDescripción
delete_urlsVec<String>La lista de urls para eliminar chunks.
optionsOption<UploadOptions>Opciones para el proceso de subida. Mira UploadOptions arriba.

Devuelve

Promise<void>

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