Zenodo: Os arquivos compactados com Gzip são compactados duas vezes

Criado em 18 fev. 2019  ·  5Comentários  ·  Fonte: zenodo/zenodo

Veja como referência este conjunto de dados: https://zenodo.org/record/2539424

Parece que Zenodo está comprimindo arquivos gzipados duas vezes sem aviso prévio. Portanto, eles são "duplamente compactados" (!). Então, quando você baixá-los, eles devem ser nomeados:

eswiki.wikilink_graph.2006-03-01.csv.gz.gz

o super confuso é que o MD5 exibido se refere ao arquivo original (compactado uma vez):

eswiki.wikilink_graph.2006-03-01.csv.gz

md5:2036a75ed53acdcc81f53061057fe343

portanto, isso não corresponde ao arquivo depois de baixado, mas corresponde ao arquivo original (compactado apenas uma vez).

Então é isso que eu recebo (eu salvo o arquivo baixado como .gz.gz ):

$ md5sum eswiki.wikilink_graph.2006-03-01.csv.gz.gz
b32c3b896be22c32bb17b9fe887bda51  eswiki.wikilink_graph.2006-03-01.csv.gz.gz

$ gunzip eswiki.wikilink_graph.2006-03-01.csv.gz.gz

$ md5sum eswiki.wikilink_graph.2006-03-01.csv.gz
2036a75ed53acdcc81f53061057fe343  eswiki.wikilink_graph.2006-03-01.csv.gz

$ sha512sum eswiki.wikilink_graph.2006-03-01.csv.gz
56a48b0f82922fee20c07b0a2480bca1872c5e4aa8521a86e178dc00aea5dd2e4cda4ae05eb1b1950da7447dae70d47d8daa8d7a3c62d6989aaad09bd1fbcc71
 eswiki.wikilink_graph.2006-03-01.csv.gz

$ zcat eswiki.wikilink_graph.2006-03-01.csv.gz | head -n10
page_id_from    page_title_from page_id_to  page_title_to
10  Argentina   3037    10 de enero
10  Argentina   3326    12 de octubre
10  Argentina   6301    13 de abril
10  Argentina   7874    1492
10  Argentina   6302    14 de abril
10  Argentina   14485   1502
10  Argentina   14471   1516
10  Argentina   14450   1536
10  Argentina   14434   1553

Como você vê, o arquivo baixado não corresponde ao MD5 fornecido e se você descompactar o arquivo uma vez, o MD5 corresponde. Uma vez descompactado, ele também corresponde às somas SHA512 que estou fornecendo separadamente no mesmo conjunto de dados no arquivo eswiki.wikilink_graph.sha512sums.txt :

$ grep '2006-03-01' eswiki.wikilink_graph.sha512sums.txt
56a48b0f82922fee20c07b0a2480bca1872c5e4aa8521a86e178dc00aea5dd2e4cda4ae05eb1b1950da7447dae70d47d8daa8d7a3c62d6989aaad09bd1fbcc71
 eswiki.wikilink_graph.2006-03-01.csv.gz

É muito estranho porque Zenodo não está comprimindo os arquivos de texto (os arquivos README e hashsum) e não há nenhum aviso sobre esse comportamento.


EDIT: Caso você esteja se perguntando (já que todos que eu falei sobre esse problema perguntaram) tenho certeza de que os arquivos que enviei foram compactados apenas uma vez, eu os tenho no meu disco, eles ainda estão lá e são compactados uma vez .

Todos 5 comentários

Obrigado por relatar o problema.

Reproduzi o problema relacionado ao cabeçalho Accept-Encoding: gzip que o navegador está enviando.

$ curl -H "Accept-Encoding: gzip" -o eswiki.wikilink_graph.2006-03-01.csv.gz https://zenodo.org/record/2539424/files/eswiki.wikilink_graph.2006-03-01.csv.gz?download=1
$ md5sum eswiki.wikilink_graph.2006-03-01.csv.gz
b32c3b896be22c32bb17b9fe887bda51  eswiki.wikilink_graph.2006-03-01.csv.gz

vs.

$ curl -o eswiki.wikilink_graph.2006-03-01.csv.gz https://zenodo.org/record/2539424/files/eswiki.wikilink_graph.2006-03-01.csv.gz?download=1
$ md5sum eswiki.wikilink_graph.2006-03-01.csv.gz
2036a75ed53acdcc81f53061057fe343  eswiki.wikilink_graph.2006-03-01.csv.gz

Estou pesquisando mais sobre isso, mas está relacionado à nossa configuração NGINX ou de alguma forma o MIMEtype que está sendo entregue pelo nosso servidor de aplicativos.

Ok, então acho que descobri o que está acontecendo. É uma combinação de um bug de aplicativo e configuração incorreta.

O tipo MIME é adivinhado pelo servidor de aplicativos semelhante a este:

>>> import mimetypes
>>> mimetypes.guess_type('eswiki.wikilink_graph.2006-03-01.csv.gz')
('text/csv', 'gzip')

No entanto, está usando apenas a primeira parte text/csv (o bug). Como medida de segurança (porque aceitamos qualquer arquivo enviado pelo usuário), o tipo MIME é higienizado antes de ser enviado ao navegador fazendo com que text/csv seja convertido em text/plain . O NGINX então vê um conteúdo de cabeçalho text/plain , que é configurado para compactar antes de enviar ao cliente para economizar largura de banda (a configuração incorreta).

Excelente! Deixe-me saber se (e como) posso ajudar.

Infelizmente uma reconfiguração do NGINX não conseguiu resolver o problema, então vai demorar um pouco mais para corrigi-lo, pois também precisamos corrigir o bug no aplicativo. eu

Esta página foi útil?
0 / 5 - 0 avaliações