Komunikat o błędzie AWS: Trwa obecnie konfliktowa operacja warunkowa wobec tego zasobu

181

Ten błąd pojawia się sporadycznie.

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

Po szybkim wyszukiwaniu w Internecie nie można znaleźć żadnej pomocnej odpowiedzi.

Uwaga: program wywołujący jest jednowątkowy. 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)
użytkownik1172468
źródło
1
Czy próbujesz umieścić obiekty w S3, a następnie natychmiast je przeczytać?
jamieb 16.12.12
@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 spójnym” modelu, w którym PUT potrzebują czasu na osiedlenie się.
jamieb 16.12.12
@jamieb, dzięki za spędzenie cykli mózgowych, ale odpowiedź udzielona przez Guy jest poprawna. Myślę, że w kodzie ponawiam próbę utworzenia segmentu - spodziewając się, że zakończy się niepowodzeniem - robi to przez 99,99% czasu i czasami generuje ten błąd. Ponownie doceniam to, że poświęcasz czas, aby mi pomóc. Dopingować!
user1172468,
Dzięki za kontynuację. Powodzenia!
jamieb,

Odpowiedzi:

464

Otrzymałem ten sam komunikat o błędzie, gdy wykonałem następujące czynności:

  1. utworzył segment - domyślnie przeszedł do regionu USA (używany AWSCLI)

  2. zrealizowano, wiadro trafi do regionu UE i go usunie (używana konsola AWS)

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

W kroku 3 konsola AWS pokazała mi komunikat o błędzie z tytułu pytania.

Sądzę więc, że wiadro w USA zostało usunięte, ale być może są pewne procesy synchronizacji, które wymagają czasu. I mam nadzieję, że po kilku godzinach znajdę ponownie nazwę wiadra dostępną do stworzenia - tym razem w odpowiednim regionie (UE).

POPRAWKA: - Edycja: Około godziny później moja próba utworzenia segmentu (w regionie UE) zakończyła się powodzeniem.

Jan Vlcinsky
źródło
4
Właśnie wpadłem na tę samą sytuację. Odeślemy, jeśli uda mi się utworzyć wiadro w ciągu najbliższej godziny.
AJB
27
Mogę to potwierdzić. Zajęło to około 1,5 godziny i nie ma gwarancji, że ktoś w międzyczasie nie zbierze nazwy wiadra, ale możesz ją odzyskać w rozsądnym czasie i przy odrobinie szczęścia.
AJB
1
Zgadzam się z @jan Aby rozwiązać ten problem: utwórz nowy segment z nową nazwą, nie używaj nazwy usuniętego segmentu podczas nazywania nowego segmentu.
Dinesh Sunny,
5
Dla mnie zajęło to mniej niż 70 minut.
offby1,
4
Amazon twierdzi, że może to zająć do 10 godzin forums.aws.amazon.com/thread.jspa?threadID=37532
TomDotTom
37

Dla wszystkich innych, którzy natkną się na ten wątek z Google, w pierwszej kolejności wyszukaj ten komunikat o błędzie:

Jeśli usunąłeś segment, aby odtworzyć w nowym regionie, nie czekaj „ręcznie”, aż synchronizacja w tle zostanie zakończona , zamiast tego umieść mały skrypt bash w celu uruchomienia i ponów próbę utworzenia potrzebnego segmentu co około 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 ponawiać operację „utwórz wiadro” co kilka sekund (zależnie od „uśpienia”) i jak najszybciej - stworzy ją dla ciebie, aby nikt nie mógł ukraść nazwy wiadra :)

mam nadzieję, że to pomoże :)

Dmitrij Szmakow
źródło
1
Dzięki za to! W moim przypadku, miałem już obszar zdefiniowany w konfiguracji AWS i uruchamiając skrypt jak to spowodowało błędu następujący: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128). Rozwiązaniem było usunięcie --regionflagi.
MagentoAaron,
23

Prośba w twoim przykładzie dotyczy utworzenia segmentu. Jeśli próbujesz utworzyć zbyt wiele wiader lub wymienić wiadra, nie jest to zdrowe.

Pamiętaj, że masz limit 100 wiader na konto (patrz tutaj ). EDYCJA: Teraz ten limit jest „miękkim limitem” i możesz go w razie potrzeby zwiększyć.

Pamiętaj również, że utworzenie wiadra wymaga czasu i:

... niewłaściwe jest, aby wiadro tworzyło lub usuwało połączenia na ścieżce kodu wysokiej dostępności aplikacji ...

Lepiej jest tworzyć wiadra raz, a potem można umieścić dowolną liczbę obiektów w istniejących wiadrach (lub nawet jednym).

W każdym razie, pracując z systemem, który od czasu do czasu musi zawieść, powinieneś być w stanie poradzić sobie z błędami i spowolnić proces po otrzymaniu takiego błędu. Zobacz więcej szczegółów w Dokumentach AWS .

Chłopak
źródło
11

Ten błąd zwykle występuje, gdy wiadro jest usuwane i tworzony jest nowy segment o tej samej nazwie co stary segment.

Uważam, że musielibyśmy poczekać pewien czas, aż będziemy mogli stworzyć nowy segment o tej samej nazwie.

Srivignesh KN
źródło
8

Prosty i bezpośredni: zmień nazwę nowego wiadra lub poczekaj 1 godzinę.

raphadko
źródło
0

Ten komunikat pojawia się również, gdy masz już ponad 100 wiader na koncie. Istnieje miękki limit 100 wiader.

John Mee
źródło
-1

Zmień nazwę wiadra lub poczekaj. Czekałem na moje mniej niż 30 minut. Nie musiałem zmieniać nazwy i nie mogłem jej zmienić tak, jak ją ustawiłem - musiałem pasować do mojej już istniejącej nazwy domeny dla statycznej witryny, którą chciałem hostować. W każdym razie w mniej niż 30 minut został utworzony automatycznie.

vel12171
źródło