Restic: solicitud de función: agregar backend de almacenamiento backblaze b2

Creado en 9 may. 2016  ·  32Comentarios  ·  Fuente: restic/restic

backend

Comentario más útil

Agregué un PR con un backend B2 basado en la @kurin : # 978

Todos 32 comentarios

Gracias por la sugerencia.

Me gustaría conectar mi lib B2, que implementa abstracciones de nivel superior y corrección de errores: https://github.com/kurin/blazer

En particular, cambia automáticamente a la API de "archivo grande" de B2 cuando el archivo supera un cierto umbral, lo que permite cargas de> 5 GB.

Gracias por la pista. Parece que tienes algo de experiencia con backblaze, ¿tienen un servicio de prueba en el que podamos ejecutar nuestras pruebas de CI?

¿Cómo pruebas tu biblioteca? ¿Contra los sistemas de producción con credenciales válidas?

Cabe señalar que, si bien B2 es muy barato en términos de almacenamiento, no lo es per se en términos de recuperación y operaciones. Hacer copias de seguridad grandes y frecuentes con el patrón de acceso actual de restic (donde extrae los índices / árboles del repositorio) puede ser costoso.

Por supuesto, nada de eso importará una vez que haya un caché local para esos datos. En ese caso, B2 podría ser la opción más atractiva disponible para el almacenamiento remoto.

https://www.backblaze.com/b2/cloud-storage-pricing.html dice que 1GB de salida es gratis por 24 horas. ¿No debería ser suficiente para los datos del índice?

Backblaze no tiene una instancia de prueba. Estoy implementando uno yo mismo para probar mi biblioteca, ya que mis pruebas de integración tienen algunos límites que no pueden alcanzar razonablemente (por ejemplo, la autenticación de credenciales expira después de 24 horas). Probablemente consiga completar esa función en su mayoría en las próximas semanas.

También estaba interesado en esta función, y armé el PR # 694 para implementar el soporte de backend B2 usando el paquete blazer de

Un backend b2 potencial todavía necesita algo de trabajo y necesitamos encontrar una estrategia para probar. Creé una cuenta con Backblaze y envié una solicitud para una cuenta patrocinada que podemos usar para ejecutar las pruebas.

Para usar esta cuenta para acceder incluso al nivel gratuito de b2, necesitará un número de teléfono para activar la autenticación de dos factores, y (todavía) no estoy dispuesto a darles mi número de teléfono. ;)

Continuemos la discusión aquí.

fwiw, las pruebas de integración del blazer son del orden de varios cientos de MB por prueba (ya que necesito empujar> 100 MB a b2 para probar todas las cosas complejas) y realmente no noto mucho en mi factura. También puede establecer límites estrictos en las solicitudes, por tipo de RPC, para que las solicitudes posteriores fallen. El límite es diario.

Gracias por la información @kurin.

Para su información: Backblaze no patrocinará una cuenta de prueba gratuita. Tal vez experimente un poco con su nivel gratuito ...

¿Cómo se necesita la cuenta de prueba gratuita cuando 1 GB de descarga por día es gratis? (Lo siento, debo haberme perdido en los comentarios de arriba aquí)

Ya no creo que sea necesario. Actualmente estoy reelaborando las pruebas de CI de backend para que utilicen muchos menos datos que antes (al menos para los backends que se prueban con un servicio de terceros en vivo). Así que probablemente podamos usar el nivel gratuito. Necesito encontrar tiempo para investigar esto, está en mi lista (justo después del rápido backend).

Agregué un PR con un backend B2 basado en la @kurin : # 978

¿Alguien interesado en probarlo? ¡Me encantaría recibir comentarios!

Acabo de subir 14,738 GiB (51459 elementos) a B2. Esto tomó unos 90 minutos. Según la página "Informes" de Backblaze, esto provocó alrededor de 2700 b2_get_upload_url , 2700 b2_upload_file y 2700 b2_list_file_names llamadas a la API. ¿Existe la posibilidad de que la cantidad de b2_list_file_names llamadas a la API se pueda optimizar para reducir el costo?

Editar: La creación de una segunda instantánea del mismo directorio sin cambios tomó 22 minutos. Resultó en alrededor de 8500 b2_download_file_by_name llamadas y 8600 b2_list_file_names llamadas adicionales.

Edit2: Creé una tercera instantánea ahora usando --force . Tardó 4.5 minutos en completarse. Los contadores de uso de API de B2 solo se incrementaron de 10 a 50 recuentos para varias funciones.

Acabo de subir 2 repositorios diferentes en diferentes cubos. El cubo tiene 29,5 GB y el otro 47,5 MB. Las llamadas de subida en realidad parecen correctas. La gran cantidad de descargas es extraña porque nunca intenté restaurar. La lista de nombres de archivos de 6K es algo muy malo.

stats

Intenté crear una segunda instantánea del pequeño repositorio con solo un par de archivos de texto modificados y generó mucha actividad. Lo ejecuté de nuevo, esta vez con el registro de depuración y sin cambios en el repositorio ...

El directorio de origen tiene 866 archivos y 47 MB. Después de 4 instantáneas, este depósito / repositorio solo contiene 21 archivos. Solo debería haber necesitado llamar a b2_list_file_names una vez. Y todavía estoy aprendiendo sobre restic, pero no estoy seguro de por qué necesitaría descargar más que el índice. Se descargó de todos los archivos de datos en numerosas ocasiones.

Aquí hay un grep para X-Blazer-Method en el registro para la ejecución de la copia de seguridad donde no hubo cambios:

 Método X-Blazer: b2_authorize_account
 Método X-Blazer: b2_list_buckets
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_get_file_info
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_get_upload_url
 Método X-Blazer: b2_upload_file
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_get_upload_url
 Método X-Blazer: b2_upload_file
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_get_upload_url
 Método X-Blazer: b2_upload_file
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_download_file_by_name
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_get_upload_url
 Método X-Blazer: b2_upload_file
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_get_upload_url
 Método X-Blazer: b2_upload_file
 Método X-Blazer: b2_list_file_names
 Método X-Blazer: b2_delete_file_version

En blazer, descargar un objeto, ya sea en su totalidad o en parte, llamará a b2_list_file_names primero para completar un objeto interno con datos del lado del servidor, similar a stat. No lo recuerdo de repente, pero sospecho que esto es para obtener, entre otras cosas, el tamaño del objeto, para admitir lecturas de rango.

Exploraré si se puede eludir esta verificación.

He introducido un cambio en blazer que elimina la llamada a b2_list_file_names en cada (nuevo) archivo leído; actualice y vea si esto ayuda.

¡Oh, genial! Prepararé un PR :)

Ver # 997

Tuve la oportunidad de probar esto; parece más razonable en las descargas; para una restauración de ~ 250 MB obtengo:

$ grep X-Blazer-Method /tmp/restic-debug.log  | sort | uniq -c
      1 X-Blazer-Method: b2_authorize_account
      2 X-Blazer-Method: b2_delete_file_version
   8166 X-Blazer-Method: b2_download_file_by_name
      1 X-Blazer-Method: b2_get_file_info
      2 X-Blazer-Method: b2_get_upload_url
      1 X-Blazer-Method: b2_list_buckets
     10 X-Blazer-Method: b2_list_file_names
      2 X-Blazer-Method: b2_upload_file

de los cuales solo unos pocos son extraños:

$ grep '416 Requested' /tmp/restic-debug.log | wc -l
9

Parece que estas 8k lecturas provienen de ~ 60 archivos de datos. No conozco los aspectos internos de restic, pero apuesto a que cualquier mejora en el número de llamadas download_file_by_name tendrá que provenir de algún tipo de lógica de captación previa que pueda leer varios fragmentos a la vez.

Las cargas seguirán siendo 1: 1 con list_file_names y las llamadas de carga, porque restic llama a Attrs para cada objeto b2 antes de guardar para asegurarse de que no existe. No veo una forma de evitar esta verificación, pero puedo omitir esto y simplemente llamar a get_file_info, que es clase C en lugar de clase B y un 10% más caro.

Está bien, recuerdo por qué lo hice de esta manera. b2_get_file_info , la llamada que queremos hacer, requiere el (B2 interno) fileId , que no podemos derivar del nombre excepto haciendo otra llamada a la API. Los doctores dicen:

El ID del archivo, como lo devuelve b2_upload_file, b2_hide_file, b2_list_file_names o b2_list_file_versions.

Pensaré en eliminar la llamada Attrs para guardar un nuevo archivo en ciertos casos (por ejemplo, para archivos de datos), pero eso llevará algo de tiempo. El backend B2 se beneficiará automáticamente de él.

Obtuve una solución al descargar un solo byte: /

download_file_by_name es más barato que list_file_names.

Lo estoy probando ahora, pero debería funcionar.

$ grep X-Blazer-Method /tmp/restic-debug.log  | sort | uniq -c
      1 X-Blazer-Method: b2_authorize_account
      1 X-Blazer-Method: b2_delete_file_version
     73 X-Blazer-Method: b2_download_file_by_name
      1 X-Blazer-Method: b2_get_file_info
     63 X-Blazer-Method: b2_get_upload_url
      1 X-Blazer-Method: b2_list_buckets
      6 X-Blazer-Method: b2_list_file_names
     63 X-Blazer-Method: b2_upload_file

Hmhm, eso es feo. : ojos_cerrados_ lengua_atacada:

¿Existe tal vez una manera de cargar un archivo en B2 con O_EXCL , es decir, la llamada falla si el archivo ya existe?

No. Las cargas nuevas "ocultan" las cargas anteriores. Si subes "foo" a "x", y luego "barra" a "x", y luego lees "x", obtendrás "barra". Si luego borra "x" y lee "x", obtendrá "foo".

Hm, con el repositorio restic que funcionará bien. Solo necesitaría agregar un código especial para eliminar un archivo, de modo que elimine todas las versiones. Lo pensare.

¿Podemos mover esto a un nuevo número? Hablar de ello en las relaciones públicas se siente mal.

Seguro.

Entonces, la discusión se mueve al # 1000 (yay)

¿Fue útil esta página
0 / 5 - 0 calificaciones