Problem uploading empty files with upload_object

Abierto
#1,562 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
aws, python
Área
cloud

Línea de trabajo

Los puntos de entrada indicados son upload_object y upload_object_via_stream; comienza reproduciendo el caso de un archivo vacío con el controlador S3 y comparando el comportamiento entre AWS S3, MinIO y NetApp StorageGRID. Como en el issue no se nombra ningún archivo fuente ni ninguna prueba, localiza primero la implementación de la carga y sus pruebas. Se considera terminado cuando upload_object gestiona archivos vacíos con metadatos sin producir encabezados Host duplicados ni romper la compatibilidad con los proveedores.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Summary

Using upload_object to upload an empty file returns response:
400 - Bad Request: too many Host headers

Detailed Information

Python 3.6.8
Libcloud: 3.3.1
OS: rhel 7.9

I use libcloud to upload objects to 3 providers - aws s3, minio & netapp storageGrid, I use the s3 driver for all of them. upload_object function works fine except when I try to upload an empty file (I sometimes need to store just meta-data with a specific object name for later use). When trying to upload an empty file I get the response:

status: 400
reason: 'Bad Request: too many Host headers'

If I add anything to the file's content it uploads successfully with the meta-data, so its not a problem with permissions/path in s3 or something like that. I also tried without the meta-data, but that didn't work either.
I tried using upload_object_via_stream and found the following code works:

with io.BytesIO() as iterator:
    driver.upload_object_via_stream(iterator=iterator,
                                    container=container,
                                    object_name=objName,
                                    extra=extra)

This code uploads a 0 bytes file successfully to aws s3 & minio, but not to netapp's storageGrid (so unfortunately I can't use it).
I think it's a limitation of storageGrid's multi-part upload and not some other storage restriction (we have existing empty objects on storageGrid, but those were uploaded using jclouds).

I think using upload_object will be the best solution for all 3 providers, but I don't understand why it's not uploading empty files and would appreciate help with this. Thanks!

Reproduce
  1. touch ~/test-empty.txt
  2. Use upload_object to upload test-empty.txt
Lenguaje dominante
Python
Estrellas
2.1k
Forks
935
Merge medio
5 d 3 h
PR fusionados (30 d)
15

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/libcloud

Todos los issues de apache/libcloud

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.