Mensagem de erro da AWS: No momento, uma operação condicional conflitante está em andamento nesse recurso

181

Estou recebendo esse erro intermitentemente.

Eu tenho um programa que usa o java aws sdk e carrega ao longo dos 10s de milhares de arquivos pequenos para s3. Eu vejo esse erro intermitentemente.

Não foi possível encontrar nenhuma resposta útil depois de fazer uma pesquisa rápida na internet.

Observe que o programa de chamada é de thread único. O aws java sdk subjacente parece usar threads de trabalho.

Status Code: 409, AWS Service: Amazon S3, AWS Request ID: 75E16E8DE2193CA6, AWS Error Code: OperationAborted, AWS Error Message: A conflicting conditional operation is currently in progress against this resource. Please try again., S3 Extended Request ID: 0uquw2YEoFamLldm+c/p412Lzd8jHJGFBDz3h7wN+/4I0f6hnGLkPMe+5LZazKnZ
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:552)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:289)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:170)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:2648)
    at com.amazonaws.services.s3.AmazonS3Client.createBucket(AmazonS3Client.java:578)
    at com.amazonaws.services.s3.AmazonS3Client.createBucket(AmazonS3Client.java:503)
user1172468
fonte
1
Você está tentando colocar objetos no S3 e depois lê-los imediatamente?
21712 Jamieb #
@jamieb, na verdade não, não neste momento.
user1172468
1
Eu gostaria de ter uma resposta para você. Você está tentando reescrever as mesmas chaves em rápida sucessão? O S3 é construído em um modelo "eventualmente consistente", em que as PUTs precisam de tempo para se estabelecer.
21138 jamieb
@jamieb, obrigado por gastar ciclos cerebrais, mas a resposta fornecida por Guy está correta, eu acho. Eu acho que no meu código eu tentei criar um bucket - esperando falhar normalmente - ele gosta 99,99% do tempo e às vezes gera esse erro. Mais uma vez, realmente aprecio você ter tempo para me ajudar. Elogio!
user1172468
Obrigado pelo seguimento. Boa sorte!
jamieb

Respostas:

464

Recebi a mesma mensagem de erro quando fiz o seguinte:

  1. criou um bucket - foi por padrão para a região dos EUA (usado AWSCLI)

  2. realizado, o balde deve ir para a região da UE e excluído (console AWS usado)

  3. (alguns minutos depois) tentou criar o balde, especificando a região da UE

Na etapa 3, o console da AWS me mostrou a mensagem de erro do título da sua pergunta.

Então eu acho que o bucket nos EUA foi excluído, mas possivelmente existem alguns processos de sincronização que estão demorando. E espero que, aguardando algumas horas, encontrarei o nome do bloco novamente disponível para criação - desta vez na região apropriada (UE).

CORRECÇÃO: - Editar: Cerca de uma hora depois, minha tentativa de criar o bucket (na região da UE) foi bem-sucedida.

Jan Vlcinsky
fonte
4
Acabei de encontrar a mesma situação. Vou postar de volta se conseguir criar meu bucket dentro de uma hora ou mais.
AJB 17/05
27
Eu posso confirmar isso. Demorou cerca de uma hora e meia e não há garantia de que outra pessoa não consiga digitar o nome do balde nesse meio tempo, mas você pode recuperá-lo, dentro de um período razoável de tempo e com um pouco de sorte.
AJB 17/05
1
Concordo com o @jan Para resolver isso: Crie um novo bucket com novo nome. Não use o nome do bucket excluído ao nomear seu novo bucket.
Dinesh Sunny
5
Para mim, levou menos de 70 minutos.
offby1
4
Amazon diz que pode demorar até 10hrs forums.aws.amazon.com/thread.jspa?threadID=37532
TomDotTom
37

Para todos os outros que encontrarem este tópico no google, como primeiro resultado, procure esta mensagem de erro:

Se você excluiu o bucket, para recriar em uma nova região, não espere "manualmente" até que a sincronização em segundo plano seja concluída . Em vez disso, coloque um pequeno script bash para executar e tente novamente a criação do bucket necessário a cada 5 segundos.

Exemplo:

#!/bin/bash 
RESULT=2 
until [  $RESULT -eq 0 ]; do
    aws s3 mb s3://your.bucket.name --region us-west-2
    RESULT=$?
    sleep 5 
done 
echo "Bucket created!"

ele tentará novamente a operação "criar bucket" para você, a cada poucos segundos (depende de 'suspensão') e assim que for possível - criará para você, para que ninguém possa roubar o nome do seu bucket por engano :)

espero que ajude :)

Dmitry Shmakov
fonte
1
Obrigado por isso! Na minha exemplo, eu já tinha a região definida na configuração AWS e executar o script como é resultou no seguinte erro: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128). A solução foi remover a --regionbandeira.
MagentoAaron
23

A solicitação no seu exemplo é criar um bucket. Se você estiver tentando criar muitos buckets ou substituí-los, isso não é saudável.

Observe que você tem um limite de 100 intervalos para uma conta (veja aqui ). EDIT: Agora, esse limite é um "limite flexível" e você pode aumentá-lo, se necessário.

Observe também que a criação de um bucket leva tempo e:

... não é apropriado fazer o bucket criar ou excluir chamadas no caminho do código de alta disponibilidade do seu aplicativo ...

É melhor criar seus buckets uma vez e depois, você pode colocar quantos objetos desejar nos seus buckets existentes (ou mesmo em um único).

De qualquer forma, ao trabalhar com um sistema que provavelmente falhará de vez em quando, você poderá lidar com erros e retardar o processo ao receber esse erro. Veja mais detalhes no AWS Docs .

Cara
fonte
11

Esse erro geralmente ocorre quando um balde é excluído e um novo balde é criado com o mesmo nome que o balde antigo.

Acredito que precisaríamos esperar por um certo período de tempo até podermos criar um novo balde com o mesmo nome.

Srivignesh KN
fonte
8

Simples e direto: altere o novo nome do bloco ou aguarde 1 hora.

raphadko
fonte
0

Você também recebe essa mensagem quando já tem mais de 100 baldes na conta. Há um limite suave de 100 baldes.

John Mee
fonte
-1

Mude o nome do seu balde ou aguarde. Eu esperei menos de 30 minutos pelo meu. Eu não precisei alterar o nome e não poderia alterá-lo conforme definido - ele precisava corresponder ao meu nome de domínio já existente para um site estático que eu estava procurando hospedar. De qualquer forma, em menos de 30 minutos foi criado automaticamente.

vel12171
fonte