Fundo
Eu tenho um diretório cheio de .gz
arquivos que foram produzidos por mongodump
um mongod executando o MongoDB 3.4.x, que estou escrevendo em uma instância diferente executando o MongoDB 3.4.2 usando mongorestore ... --numInsertionWorkersPerCollection 8 --drop --nsFrom ... --nsTo ...
. Todos, exceto um, estão sendo carregados corretamente. Todos eles levam entre 1 e 3 horas para carregar os dados e, em seguida, mais 2 a 4 horas para reconstruir os índices. O arquivo problemático trava antes da etapa abaixo e costumo matar o processo externamente após cerca de um dia. Reproduzi o cenário 4 ou 5 vezes.
finished restoring database.collection (N documents)
Durante esse tempo, o mongorestore
processo ainda está visível no shell, mas não possui uma entrada correspondente em db.currentOp()
, e o tamanho do banco de dados não está aumentando.
Esses erros foram retornados logo antes da linha de log "restaurando índices para coleção database.collection from metadata":
2017-03-13T09:30:04.218-0400 demux namespaceHeader: {database collection true 726142452659775357}
2017-03-13T09:30:04.218-0400 demux checksum for namespace database.collection is correct (726142452659775357), 54599167880 bytes
2017-03-13T09:30:04.218-0400 demux finishing (err:corruption found in archive; I/O error reading length or terminator ( gzip: invalid header ))
Eu encontrei alguns relatórios de travamento do mongorestore ( por exemplo ) e alguma documentação de problemas com /
s em namespaces em versões mais antigas ( por exemplo ), mas não encontrei uma descrição da minha situação.
Pergunta
Agora me encontro com alguma indicação de que um arquivo que carreguei pode estar corrompido ou pelo menos ter um cabeçalho corrompido. A emissão de consultas realistas para a coleção em questão e seus índices retorna resultados que parecem razoáveis. Como posso detectar ou descartar definitivamente "corrupção" desse tipo? O que realmente significa "corrupto" neste contexto? Posso esperar encontrá-lo no banco de dados ou apenas no arquivo zip?
Atualização : por sugestão de @mustaccio, executei gzip -t
o arquivo problemático e ele relatou "lixo à direita". Isso é suficiente para fixar o problema relatado pelo MongoDB em uma entrada incorreta e parar de procurar por corrupção no banco de dados?