Messaggio di errore AWS: è attualmente in corso un'operazione condizionale in conflitto con questa risorsa


181

Ricevo questo errore in modo intermittente.

Ho un programma che usa java aws sdk e carica su s3 oltre 10 decine di migliaia di piccoli file. Vedo questo errore a intermittenza.

Non è stato possibile trovare alcuna risposta utile dopo aver effettuato una rapida ricerca su Internet.

Si noti che il programma chiamante è a thread singolo. Sembra che il sottostante aws java sdk utilizzi i thread di lavoro.

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)

1
Stai cercando di inserire oggetti in S3 e di leggerli immediatamente?
Jamieb,

@jamieb, in realtà no, non in questo momento.
user1172468

1
Vorrei avere una risposta per te. Stai cercando di riscrivere gli stessi tasti in rapida successione? S3 è costruito su un modello "eventualmente coerente" in cui i PUT hanno bisogno di tempo per sistemarsi.
Jamieb,

@jamieb, grazie per aver speso cicli cerebrali, ma penso che la risposta fornita da Guy sia corretta. Penso che nel mio codice riprovo a creare un bucket - prevedendo di fallire con grazia - mi piace il 99,99% delle volte e talvolta genera questo errore. Ancora una volta apprezzo davvero che tu abbia dedicato del tempo ad aiutarmi. Cheer!
user1172468

Grazie per il follow-up. In bocca al lupo!
Jamieb,

Risposte:


464

Ho ricevuto lo stesso messaggio di errore, quando ho fatto quanto segue:

  1. creato un bucket - è andato per impostazione predefinita nella regione degli Stati Uniti (usato AWSCLI)

  2. realizzato, il bucket deve andare nella regione dell'UE ed eliminarlo (console AWS usata)

  3. (pochi minuti dopo) ha provato a creare il bucket, specificando la regione dell'UE

Al passaggio 3, la console AWS mi ha mostrato il messaggio di errore dal titolo della tua domanda.

Quindi immagino che il bucket negli Stati Uniti sia stato eliminato, ma ci sono probabilmente alcuni processi di sincronizzazione, che richiedono tempo. E spero che, aspettando qualche ora, troverò di nuovo il nome del bucket disponibile per la creazione - questa volta nella regione (UE) corretta.

FIX: - Modifica: circa un'ora dopo, il mio tentativo di creare il bucket (nella regione dell'UE) è riuscito.


4
Mi sono appena imbattuto nella stessa situazione. Ti posterò se posso creare il mio bucket entro circa un'ora.
AJB,

27
Posso confermare questo. Ci sono voluti circa 1,5 ore, e non c'è alcuna garanzia che qualcun altro non raccolga il nome del secchio nel frattempo, ma puoi riaverlo, sembra in un periodo di tempo ragionevole e con un po 'di fortuna.
AJB,

1
Sono d'accordo con @jan Per risolvere questo problema: crea un nuovo bucket con un nuovo nome, non utilizzare il nome del bucket eliminato durante la denominazione del nuovo bucket.
Dinesh Sunny,

5
Per me ci sono voluti meno di 70 minuti.
off1,

4
Amazon afferma che potrebbero essere necessari fino a 10
ore di

37

Per tutti gli altri che si imbattono in questa discussione da google, come primo risultato nella ricerca di questo messaggio di errore:

Se hai eliminato bucket, per ricrearlo in una nuova area, non attendere "manualmente" fino al completamento della sincronizzazione in background , metti invece un piccolo script bash da eseguire e riprova la creazione del bucket necessaria ogni 5 secondi circa.

Esempio:

#!/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!"

riproverà l'operazione "crea bucket" per te, ogni pochi secondi (dipende da 'sleep') e appena possibile - lo creerà per te, quindi nessuno può rubare il nome del bucket per errore :)

spero che sia d'aiuto :)


1
Grazie per questo! Nel mio caso, ho già avuto la regione definita nella configurazione AWS e l'esecuzione dello script come è provocato l'errore seguente: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128). La soluzione era rimuovere la --regionbandiera.
MagentoAaron,

23

La richiesta nel tuo esempio è creare un bucket. Se stai cercando di creare troppi secchi o di sostituirli, non è salutare.

Tieni presente che hai un limite di 100 bucket per un account (vedi qui ). EDIT: Ora questo limite è un "limite soft" e puoi aumentarlo se necessario.

Si noti inoltre che la creazione di un bucket richiede tempo e:

... non è opportuno fare in modo che bucket crei o elimini chiamate sul percorso del codice ad alta disponibilità dell'applicazione ...

È meglio creare i tuoi secchi una volta e poi, puoi mettere tutti gli oggetti che ti piacciono nei tuoi secchi esistenti (o anche uno solo).

Ad ogni modo, quando si lavora con un sistema che fallirà di tanto in tanto, si dovrebbe essere in grado di gestire gli errori e rallentare il processo quando si riceve tale errore. Consulta ulteriori dettagli in AWS Docs .


11

Questo errore si verifica in genere quando viene eliminato un bucket e viene creato un nuovo bucket con lo stesso nome del bucket precedente.

Credo che dovremmo aspettare un certo periodo di tempo prima di poter creare un nuovo bucket con lo stesso nome.


8

Semplice e diretto: modifica il nome del nuovo bucket o attendi 1 ora.


0

Questo messaggio viene visualizzato anche quando nell'account sono già presenti più di 100 bucket. Esiste un limite soft di 100 bucket.


-1

Cambia il nome del tuo bucket o attendi. Ho aspettato meno di 30 minuti per il mio. Non avevo bisogno di cambiare il nome e non potevo cambiarlo perché ero impostato su di esso - doveva corrispondere al mio nome di dominio già esistente per un sito Web statico che stavo cercando di ospitare. Comunque, in meno di 30 minuti è stato creato automaticamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.