2012-12-16 2 views
98

Otrzymuję ten błąd sporadycznie.Komunikat o błędzie AWS: Aktualnie trwająca konfliktowa operacja warunkowa względem tego zasobu

Mam program, który używa java aws sdk i ładuje ponad 10 tysięcy małych plików do s3. Ten błąd widzę sporadycznie.

Nie można znaleźć żadnej przydatnej odpowiedzi po wykonaniu szybkiego wyszukiwania w Internecie.

Uwaga program wywołujący jest pojedynczy wątek. Bazowy aws java sdk wydaje się używać wątków roboczych.

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

Czy próbujesz umieścić obiekty w S3, a następnie natychmiast je odczytać? – jamieb

+0

@jamieb, właściwie nie, nie w tej chwili. – user1172468

+1

Chciałbym mieć dla ciebie odpowiedź. Czy próbujesz przepisać te same klucze w krótkim odstępie czasu? S3 jest zbudowany na "ostatecznie zgodnym" modelu, w którym PUT potrzebują czasu na rozstrzygnięcie. – jamieb

Odpowiedz

303

Mam ten sam komunikat o błędzie, gdy nie następuje:

  1. stworzony wiadro - poszło domyślnie regionie Stanów Zjednoczonych (stosowanego AWSCLI)

  2. sobie sprawę, wiadro pójdzie do obszar UE i usunięcie go (używana konsola AWS)

  3. (kilka minut później) próbował stworzyć wiadro, określając regionie UE

W kroku 3 konsola AWS wyświetliła komunikat o błędzie z tytułu pytania.

Sądzę więc, że wiadro w USA zostało usunięte, ale prawdopodobnie są pewne procesy synchronizacji, które wymagają czasu. Mam nadzieję, że czekając kilka godzin, będę mógł ponownie znaleźć nazwę wiadra do stworzenia - tym razem w odpowiednim (UE) regionie.

FIX: - Edycja: Około godziny później moja próba utworzenia kubełka (w regionie UE) powiodła się.

+1

Po prostu wpadłem na tę samą sytuację. Odpowiem, jeśli uda mi się utworzyć moje wiadro w ciągu następnej godziny. – AJB

+11

Mogę to potwierdzić. Trwało to około 1,5 godziny i nie ma gwarancji, że ktoś inny nie zbierze w międzyczasie nazwy kubełka, ale możesz ją odzyskać w rozsądnym czasie i przy odrobinie szczęścia. – AJB

+0

o tym samym problemie. –

15

Żądanie w twoim przykładzie to utworzenie wiadra. Jeśli próbujesz utworzyć zbyt wiele wiader lub wymienić wiadra, nie jest to zdrowe.

Należy pamiętać, że limit konta wynosi 100 (zobacz here). EDYCJA: teraz ten limit jest "miękkim limitem" i możesz go zwiększyć w razie potrzeby.

Należy również pamiętać, że tworzenie wiadrze wymaga czasu i:

... to nie jest właściwe, aby utworzyć lub usunąć wiadro połączeń na ścieżce kodu wysokiej dostępności aplikacji ...

Lepiej jest tworzyć wiaderka raz, a następnie można umieścić dowolną liczbę obiektów w istniejących kubłach (lub nawet jednym).

W każdym razie, podczas pracy z systemem, który od czasu do czasu będzie zawiedziony, powinieneś być w stanie poradzić sobie z błędami i spowolnić proces po otrzymaniu takiego błędu. Zobacz więcej szczegółów w AWS Docs.

12

Dla wszystkich innych, którzy natknąć tego wątku z Google, jak 1 wyniku w poszukiwaniu tego komunikatu o błędzie:

Jeśli usunięte łyżką, aby odtworzyć w nowym regionie, nie czekaj „ręcznie” dopóki ta synchronizacja w tle będzie kompletna, zamiast tego uruchom mały skrypt bash i spróbuj utworzyć potrzebne tworzenie wiadra co 5 sekund.

Przykład:

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

będzie ponowić operację „tworzyć wiadro” dla ciebie, co kilka sekund (w zależności od „uśpienia”) i tak szybko, jak to możliwe - stworzy to dla ciebie, więc nie ma można wykraść nazwy wiadro przez pomyłkę :)

nadzieję, że to pomaga :)

6

Ten błąd zazwyczaj występuje, gdy łyżki zostaje usunięty, a nowy wiadro jest tworzony w tej samej nazwie co starego wiadra.

Uważam, że musielibyśmy poczekać na pewien czas, zanim będziemy mogli utworzyć nowe wiadro o tej samej nazwie.