Как повторить попытку DynamoDBMapper.FailedBatch? - PullRequest
0 голосов
/ 22 марта 2020

Я хочу повторить неудачные элементы, когда dynamicodbmapper.save/writeitem возвращает некоторые необработанные элементы. Ниже приведен мой фрагмент кода, который я пробовал до сих пор.

    List<UserDetails> userDetails = buildUserDeatails();
    //List<DynamoDBMapper.FailedBatch> failedBatches = mapper.batchSave(userDetails);
    List<DynamoDBMapper.FailedBatch> failedBatches = mapper.batchWrite(userDetails,new ArrayList<UserDetails>());
    System.out.println("Failed batches" + failedBatches.size());
    for (FailedBatch failedBatch : failedBatches) {
        System.out.println("Failed batches process start*********");
        Map<String, List<WriteRequest>> batchUnprocessedItems = failedBatch.getUnprocessedItems();
        System.out.println("Failed batches process size from mapper*********" + batchUnprocessedItems.size());
        do {
            if (batchUnprocessedItems.size() == 0) {
                System.out.println("All items processed.");
            } else {
                System.out.println("Gathering unprocessed items...and retrying using batchWrite");
                BatchWriteItemOutcome outcome = dynamoDB.batchWriteItemUnprocessed(batchUnprocessedItems);
                System.out.println("After Retry...and retrying using batchWrite "
                        + outcome.getUnprocessedItems().size());
                batchUnprocessedItems = outcome.getUnprocessedItems();
                System.out.println("Rerty done***********");
            }
        } while (batchUnprocessedItems.size() > 0);
    }
    System.out.println("end process");
}

Чтобы протестировать приведенный выше фрагмент кода, я сопоставил неверное имя таблицы в классе userPojo (которого нет в динамоDB )

Когда лог повторных попыток c выполняется, он выбрасывает com.amazon aws .services.dynamodbv2.model.ResourceNotFoundException: запрошенный ресурс не найден ( Сервис: AmazonDynamoDBv2; Код состояния: 400; Код ошибки: ResourceNotFoundException; Идентификатор запроса: xxxxxxxx) "

Согласно документации, если что-то не удалось, его следует вернуть в BatchWriteItemOutcome объект, но в моем случае это ошибка выдачи.

Я использую ниже зависимость Maven

  <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-dynamodb</artifactId>
            <version>1.11.748</version>
        </dependency> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...