Define reconciliação conservadora e exclusão para objetos de armazenamento não pertencentes e objetos ausentes usando intenções de upload duráveis, períodos de carência, quarentena, lotes limitados e resultados auditáveis.
Status do pacote: contexto de referência pronto para revisão humana. O contrato e os cenários de teste estão completos, mas não há garantia de que uma implementação adotante os tenha aprovado.
Decisão
Classificar órfãos com base em evidências tanto do banco de dados quanto do armazenamento; nunca excluir com base em uma única busca negativa. Colocar objetos não pertencentes elegíveis em quarentena durante um período de carência, reavaliar a propriedade e então excluir pela chave imutável exata.
Escopo
- Ciclo de vida da intenção de upload, inventário de armazenamento, reconciliação de propriedade, classificação, quarentena, restauração, exclusão, limites de taxa e auditoria.
- Objetos sem proprietários comprometidos e registros de propriedade cujos objetos estão ausentes.
- Interfaces de execução em modo dry-run e protegida.
Fora deste bloco
- Exclusão solicitada pelo usuário de arquivos válidos.
- Exclusão recursiva em todo o bucket ou desduplicação física entre projetos.
Contrato
- A limpeza une inventário de armazenamento, registros de propriedade, intenções de upload ativas, retenções legais/de retenção e idade do objeto.
- Uma intenção multipart ou de upload recente ou ativa protege o objeto mesmo quando a propriedade não foi comprometida.
- Candidatos entram primeiro em quarentena com motivo, instantâneo de evidência, versão do classificador e tempo
delete_after. - A exclusão reavalia todas as proteções e endereça uma chave exata mais versão ou geração observada.
- Registros de objetos ausentes são reportados e reparados por um caminho separado; seus proprietários no banco de dados não são excluídos silenciosamente.
- Dry-run e execução usam o mesmo classificador e produzem resumos de contagem e bytes por locatário sem expor nomes.
Orientações para implementação
- Inventário com listagens paginadas e checkpoints duráveis; não dependa de manter o bucket inteiro na memória.
- Use uma identidade de trabalho e registros idempotentes de candidatos/exclusão.
- Limite objetos e bytes por execução e isole o raio de impacto por locatário ou prefixo.
- Forneça uma ação protegida de restauração durante a quarentena enquanto bytes permanecerem disponíveis.
Tratamento de falhas e salvaguardas
- Se as fontes de inventário ou propriedade estiverem desatualizadas, pare a execução destrutiva e mantenha os candidatos.
- Se um objeto mudar após a classificação, pré-condições de versão impedem a exclusão.
- Se a exclusão retornar status incerto, verifique o objeto exato antes de tentar novamente.
Verificação e operações
- Meça classificados, em quarentena, restaurados, excluídos, pulados, com propriedade ausente, idade, bytes e frescor da fonte.
- Alerta sobre mudanças na taxa de candidatos, volume grande de um único locatário e qualquer correspondência de objeto protegido.
- Amostre periodicamente candidatos em dry-run manualmente e exercite a restauração da quarentena.
Os exemplos com aparência executável neste pacote são fixtures e contratos de aceitação. Execute
python tools/validate.py a partir da raiz da coleção para verificar a estrutura e metadados do pacote; então
implemente e execute os cenários no repositório alvo.
Suposições para adoção
- Nomes e valores numéricos em
example.yamlsão um perfil de adoção, não padrões universais. - A equipe adotante deve mapear atores, classes de dados, vocabulário de erros e propriedade para seu sistema.
Referências
- Nenhuma fonte normativa externa é necessária; este pacote define uma decisão do projeto.