Nikita Sheremet created HUDI-3067:
-------------------------------------

             Summary: "Table already exists" error with multiple writers
                 Key: HUDI-3067
                 URL: https://issues.apache.org/jira/browse/HUDI-3067
             Project: Apache Hudi
          Issue Type: Bug
            Reporter: Nikita Sheremet


How reproduce:
 # Set up multiple writing [https://hudi.apache.org/docs/concurrency_control/] 
for dynamodb (do not forget to set _hoodie.write.lock.dynamodb.region_ and 
{_}hoodie.write.lock.dynamodb.billing_mode{_}). Do not create anty dynamodb 
table.
 # Run multiple writers to the table

(Tested on aws EMR, so multiple writers is EMR steps)

Expected result - all steps completed.

Actual result: some steps failed with exception 
{code:java}
Caused by: com.amazonaws.services.dynamodbv2.model.ResourceInUseException: 
Table already exists: truedata_detections (Service: AmazonDynamoDBv2; Status 
Code: 400; Error Code: ResourceInUseException; Request ID:; Proxy: null)
        at 
com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1819)
        at 
com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1403)
        at 
com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1372)
        at 
com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1145)
        at 
com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:802)
        at 
com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:770)
        at 
com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:744)
        at 
com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:704)
        at 
com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:686)
        at 
com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:550)
        at 
com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:530)
        at 
com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.doInvoke(AmazonDynamoDBClient.java:6214)
        at 
com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:6181)
        at 
com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.executeCreateTable(AmazonDynamoDBClient.java:1160)
        at 
com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.createTable(AmazonDynamoDBClient.java:1124)
        at 
org.apache.hudi.aws.transaction.lock.DynamoDBBasedLockProvider.createLockTableInDynamoDB(DynamoDBBasedLockProvider.java:188)
        at 
org.apache.hudi.aws.transaction.lock.DynamoDBBasedLockProvider.<init>(DynamoDBBasedLockProvider.java:99)
        at 
org.apache.hudi.aws.transaction.lock.DynamoDBBasedLockProvider.<init>(DynamoDBBasedLockProvider.java:77)
        ... 54 more
21/12/19 13:42:06 INFO Yar {code}
This happens because all steps tried to create table at the same time.

 

Suggested solution:

A catch statment for _Table already exists_ exception should be added into 
dynamodb table creation code. May be with delay and additional check that table 
is present.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to