Ir al contenido

Storage

El almacenamiento de objetos tiene dos mitades:

  • Los bytes viven en el backend de blobs del Cloud: un directorio local, o un bucket S3 sobre HTTPS (el despliegue en AWS), o un almacén compatible con S3 como MinIO.
  • El catálogo — bucket, clave, tamaño, etag, tipo de contenido, estado — es metadato del Cloud en el almacén de control.

El etag es lo que reporte el backend (SHA-256 de los bytes en el backend de sistema de archivos, el ETag del almacén en S3). El Cloud no calcula ningún digest propio sobre los bytes.

Native no es la autoridad de los blobs. Ningún byte, nombre o digest de objeto entra en el directorio Native de un proyecto, en su WAL ni en sus pruebas; nada del storage está verificado por Native; un snapshot del proyecto no incluye sus objetos, y restaurar el proyecto no los toca.

Los buckets son espacios de nombres del catálogo dentro de un proyecto (3–63 caracteres: minúsculas, dígitos, guiones), no buckets S3 tuyos. Las claves tienen hasta 1024 bytes y pueden contener /. Los objetos están acotados por CLOUDD_STORAGE_MAX_BYTES del daemon (32 MiB por defecto).

Una subida es una ruta del Cloud con tu credencial: POST …/storage/uploads reserva una fila del catálogo (state: pending) y devuelve una upload_url; haz PUT de los bytes ahí y la fila pasa a stored. Las descargas son simétricas (POST …/storage/downloads y luego GET). No se emiten URL prefirmadas del almacén de blobs; el backend nunca se expone.

Tanto la sesión del propietario como una clave de proyecto viva pueden subir, descargar, listar y borrar objetos; solo la sesión puede crear buckets. En esta versión no hay borrado de buckets, subida multiparte o en streaming, limpieza de subidas pendientes ni paginación.