com.amazonaws.AmazonClientException: Unable to execute HTTP request: Connection reset
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:324)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:164)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:985)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.batchWriteItem(AmazonDynamoDBClient.java:365)
.
.
.
次のコードサンプルを実行しようとしたときに、上記の例外がキャッチされました。
BatchWriteItemResult result;
BatchWriteItemRequest batchWriteItemRequest = new BatchWriteItemRequest();
do {
System.out.println("Making the request.");
batchWriteItemRequest.withRequestItems(requestItems);
result = client.batchWriteItem(batchWriteItemRequest);
// Print consumed capacity units
for(Map.Entry<String, BatchWriteResponse> entry : result.getResponses().entrySet()) {
String tableName = entry.getKey();
Double consumedCapacityUnits = entry.getValue().getConsumedCapacityUnits();
System.out.println("Consumed capacity units for table " + tableName + ": " + consumedCapacityUnits);
}
// Check for unprocessed keys which could happen if you exceed provisioned throughput
System.out.println("Unprocessed Put and Delete requests: \n" + result.getUnprocessedItems());
requestItems = result.getUnprocessedItems();
} while (result.getUnprocessedItems().size() > 0);
8つの書き込みユニットが構成された1つのテーブルがセットアップされています。
私のBatchWriteItemRequest
中には9つありPutRequestItems
ます。
whileループで初めて、9つのPutRequestItemのうち8つが処理されました。したがって、残りの1つの要求を処理しようとして、ループが再び開始されました。
ただし、コードは
result = client.batchWriteItem(batchWriteItemRequest);
約149秒間ハングします。その後、上記の例外がスローされます。
これを回避する唯一の方法は、より高い書き込みプロビジョニングユニットを設定することだったようです。ただし、while-doループは、プロビジョニングされた書き込みユニットを超えた場合を処理する方法ではありませんか?