Controle de versão de objetos

O Cloud Storage oferece o recurso de controle de versão de objetos para recuperar objetos que são excluídos ou substituídos. Nesta página, descrevemos esse recurso e as opções disponíveis. Para saber como ativar e usar o controle de versão de objetos, consulte Como usar o controle de versão de objetos.

Ative o controle de versão de objetos para evitar que os dados do Cloud Storage sejam substituídos ou excluídos acidentalmente. Ativar o controle de versão de objetos aumenta os custos de armazenamento, que podem ser parcialmente reduzidos configurando o gerenciamento do ciclo de vida de objetos para excluir versões mais antigas.

Introdução

Você ativa o controle de versão de objeto para um intervalo. Depois disso, o Cloud Storage cria uma versão arquivada de um objeto toda vez que a versão ativa do objeto for substituída ou excluída. A versão arquivada mantém o nome do objeto, mas é identificada exclusivamente por um número de geração. Todos os objetos têm números de geração associados, mas esses números só são obrigatórios para identificar objetos arquivados.

Quando o controle de versão de objeto está ativado, é possível listar as versões arquivadas de um objeto, restaurar a versão ativa de um objeto para um estado anterior ou excluir permanentemente uma versão arquivada, conforme necessário. O controle de versão de um intervalo pode ser ativado ou desativado a qualquer momento. Se o controle de versão for desativado, as versões de objetos atuais não serão alteradas, mas o intervalo não acumulará mais novas versões de objetos arquivados.

Detalhes do controle de versão de objetos

O Cloud Storage usa duas propriedades que, juntas, identificam a versão de um objeto. Uma propriedade identifica a versão dos dados do objeto e a outra identifica a versão dos metadados. Essas propriedades estão sempre presentes em todas as versões do objeto, mesmo que o controle de versão de objetos não esteja ativado. Essas propriedades podem ser usadas como pré-condições para atualizações condicionais para impor a ordem das atualizações.

O Cloud Storage marca todos os objetos usando as seguintes propriedades:

Propriedade Descrição
generation Identifica a geração de conteúdo (dados) e atualiza quando o conteúdo de um objeto é substituído. Não há relação entre os números de geração de objetos não relacionados, mesmo que os objetos estejam no mesmo intervalo.
metageneration Identifica a geração de metadados e aumenta sempre que os metadados de uma determinada geração de conteúdo são atualizados. metageneration é redefinido para 1 a cada nova generation de um objeto. A propriedade metageneration não tem significado sem a propriedade generation e só pode ser usada com ela. Em outras palavras, não faz sentido comparar gerações de metadados de duas versões que tenham gerações de dados diferentes.

O controle de versão de objetos não pode ser ativado em um intervalo que tenha política de retenção.

Metadados de objetos arquivados

Objetos arquivados têm seus próprios metadados, que podem ser diferentes dos metadados de objetos ativos. Ainda mais importante: uma versão arquivada mantém suas ACLs e não tem necessariamente as mesmas permissões que a versão ativa do objeto.

Cada objeto, seja ativo ou com controle de versão, tem um conjunto de metadados. Somente o último número de metageração se refere aos metadados. Números de metageração mais antigos não podem ser usados ​​para acessar metadados que foram alterados desde então.

É possível atualizar os metadados de um objeto arquivado especificando a generation na solicitação. Para garantir uma semântica segura de leitura-modificação-gravação, use uma pré-condição de correspondência de metageração. Essa condição prévia faz com que a atualização falhe se os metadados que você está tentando atualizar foram alterados entre a hora em que você leu os metadados e a hora em que enviou a atualização.

Exemplo de controle de versão de objetos

Este exemplo mostra o que acontece com o arquivo cat.jpg em um intervalo com controle de versão de objeto ativado conforme o arquivo é substituído, atualizado e excluído.

Você faz o upload de uma nova imagem

Ao fazer o upload do cat.jpg para o Cloud Storage pela primeira vez, ele recebe um número de generation e um de metageneration. Neste exemplo, o número de geração é 1360887697105000. Como o objeto é novo, o número de metageneration é 1.

A imagem cat.jpg recebe números de generation e metageneration, mesmo que o controle de versão de objeto não esteja ativado. É possível visualizar esses números usando o comando ls -L no gsutil. Para ver instruções, consulte como visualizar metadados de objetos.

Você ativa o controle de versão de objeto

Nesse momento, você decide ativar o controle de versão de objetos para o intervalo. Isso não afeta os números de generation ou metageneration da imagem cat.jpg.

Você muda os metadados da imagem

Para atualizar os metadados da imagem cat.jpg, adicione metadados personalizados: color:black. Atualizar os metadados aumenta o valor metageneration da imagem cat.jpg, neste caso, de 1 para 2. No entanto, o objeto em si permanece inalterado, de modo que o Cloud Storage continua armazenando apenas uma versão da imagem cat.jpg e a versão continua tendo um número de generation de 1360887697105000.

Você faz o upload de uma nova versão da imagem

Você faz o upload de uma nova versão da imagem cat.jpg para seu intervalo do Cloud Storage. Quando faz isso, o controle de versão de objeto move o objeto cat.jpg existente para um estado arquivado. A versão arquivada mantém a mesma classe de armazenamento e metadados que tinha antes. A versão arquivada aparece apenas se você executar uma listagem com versão: ela não aparece nos comandos normais de listagem. A referência da versão arquivada passa a ser cat.jpg#1360887697105000.

Enquanto isso, a versão da imagem cat.jpg que acabou de ser enviada se torna a versão ativa do objeto. Esse nova imagem cat.jpg recebe seu próprio número de generation, que neste exemplo é 1360887759327000. Ela também recebe seus próprios metadados e um número de metageneration de 1, o que significa que ele não contém os metadados color:black, a não ser que você especifique. Quando você for acessar ou modificar a imagem cat.jpg,, é esta versão que será usada. Outra opção é consultar essa versão da imagem cat.jpg usando seu número de generation. Por exemplo, quando usar a ferramenta gsutil, você se referirá a ela como cat.jpg#1360887759327000.

Você exclui a versão ativa da imagem

Você agora exclui a imagem cat.jpg. Quando fizer isso, a versão que teve o número de geração 1360887759327000 será arquivada. Agora, o intervalo contém duas versões arquivadas da imagem cat.jpg e nenhuma versão ativa. Você ainda pode consultar qualquer versão arquivada usando o número de generation. No entanto, se você tentar acessar cat.jpg sem um número de generation, ocorrerá uma falha.

Da mesma forma, uma listagem normal de objetos do intervalo não mostrará cat.jpg como um dos objetos do intervalo. Para saber como listar versões arquivadas de objetos, consulte Como listar versões arquivadas de objetos.

Você desativa o controle de versão de objetos

Você desativa o controle de versão de objetos, o que interrompe o arquivamento futuro de objetos. As versões arquivadas existentes de objetos permanecem no Cloud Storage. Mesmo que o controle de versão de objetos esteja desativado, as versões cat.jpg#1360887697105000 e cat.jpg#1360887759327000 permanecem armazenadas no intervalo até que sejam excluídas manualmente ou usando o Gerenciamento do ciclo de vida de objetos.

Você restaura uma das versões arquivadas

Mesmo com o controle de versão de objetos desativado, é possível restaurar uma das versões arquivadas existentes fazendo uma cópia dela. Para isso, basta nomear a cópia como cat.jpg. Depois disso, seu intervalo terá três versões da imagem cat.jpg: as duas versões arquivadas e a versão ativa que foi feita com base em uma cópia.

Dicas

Nesta seção, discutimos dicas para ajudar a trabalhar com o controle de versão de objetos com mais eficiência.

Use o gsutil

  • A ferramenta gsutil tem suporte abrangente para trabalhar com objetos com versão, o que facilita muitas tarefas que envolvem o controle de versão de objetos. Por exemplo, você pode trabalhar com versões arquivadas de objetos acrescentando # e o número de generation ao nome do objeto. Para mais informações sobre como usar o gsutil com controle de versão de objeto, consulte Controle de versão de objetos e controle de simultaneidade.

Evite ETags

  • Em vez de ETags, considere usar os números de generation e metageneration para realizar atualizações condicionais. Juntos, os números de generation e de metageneration rastreiam todas as atualizações de objetos, incluindo alterações de metadados. Esse método é mais seguro que o uso de ETags.

Entenda o comportamento de exclusão e restauração de arquivos

  • É possível copiar uma versão de objeto arquivada para a versão atual ao vivo. Consulte Como copiar versões de objetos arquivados para ver um guia passo a passo sobre como copiar objetos arquivados.

    Quando isso é feito com o controle de versão de objeto ativado, se já houver uma versão ativa do objeto no intervalo, o Cloud Storage a substituirá e criará uma nova versão arquivada do objeto substituído. Nesse caso, o intervalo conterá o objeto substituído (agora arquivado) e duas cópias do objeto que foi arquivadas anteriormente (uma cópia ativa e uma cópia arquivada), todos com custos de armazenamento. Para evitar cobranças desnecessárias, exclua a versão arquivada que você usou para fazer a cópia ativa atual.

  • Se você enviar uma solicitação de exclusão sem especificar uma geração, o Cloud Storage arquivará o objeto ativo atual e fará com que ele apareça como ausente nas próximas solicitações que não levam em consideração a versão.

  • Caso você envie uma solicitação de exclusão com uma generation que corresponda ao objeto ativo no momento, o Cloud Storage excluirá o objeto sem arquivar uma cópia.

  • Quando você exclui um objeto arquivado, o Cloud Storage exclui essa versão do objeto permanentemente.

Use pré-condições de correspondência de geração quando for alterar versões ativas de objetos

  • Quando você usa números de geração, a solicitação funciona se houver um objeto com esse nome e número de geração, independentemente de estar ativo ou arquivado. Se não houver nenhum objeto assim, o Cloud Storage retornará 404 Not Found.

  • Quando você usa pré-condições de correspondência de geração, a solicitação funciona somente se a versão ativa do objeto solicitado tiver o número de geração especificado. Se não houver nenhum objeto assim ou se ele estiver arquivado, o Cloud Storage retornará 412 Precondition Failed.

  • Evite usar uma pré-condição de correspondência de geração com um número de geração no nome do objeto. Se você usar os dois e os números corresponderem, o uso da pré-condição será redundante. Se os números não corresponderem, a solicitação sempre falhará.

  • Se você fizer várias solicitações simultâneas de mutação com uma pré-condição de correspondência de geração, a consistência forte do Cloud Storage permitirá que apenas uma dessas solicitações funcione. Esse recurso é útil caso seus objetos sejam atualizados com base em várias fontes e você precise garantir que os usuários não substituam os objetos acidentalmente.

  • Se você definir uma pré-condição de correspondência de geração como 0 ao fazer o upload de um objeto, o Cloud Storage executará a solicitação especificada somente se não houver uma versão ativa do objeto. Por exemplo, se você executar uma solicitação PUT com a API XML para criar um novo objeto com o cabeçalho x-goog-if-generation-match:0, a solicitação funcionará se o objeto não existir ou se houver apenas versões arquivadas desse objeto. Se houver uma versão ativa desse objeto, o Cloud Storage cancelará a atualização com um código de status 412 Precondition Failed.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.