DynamoDB - GlobalSecondaryIndex для конфликтов таблиц с @DynamoDBIndexHashKey - PullRequest
1 голос
/ 12 марта 2020

У меня есть таблица DynamoDB:

@DynamoDBTable(tableName = "my-table")
data class SomeJobEntity(
  @DynamoDBHashKey
  var jobId: String? = null,
  @DynamoDBIndexHashKey(globalSecondaryIndexName = "jobStatus_idx")
  var jobStatus: String? = null
)

Поле 'jobStatus' помечено @DynamoDBIndexHashKey, что полезно по нескольким причинам (например, при чтении кода вы понимаете, что это поле имеет индекс и вы можете запросить его безопасно).

В интеграционном тесте эта таблица создается с помощью:

val createTableRequest = mapper.generateCreateTableRequest(SomeJobEntity::class.java)
                .withTableName(tableName)
                .withAttributeDefinitions(
                        stringAttribute("jobStatus")
                )
                .withGlobalSecondaryIndexes(
                        createGlobalSecondaryIndex("jobStatus_idx", "jobStatus")
                )
                .withProvisionedThroughput(defaultProvisionedThroughput())

Как в таблице, так и в функции createGlobalSecondaryIndex() определяется выделенная пропускная способность:

ProvisionedThroughput().withReadCapacityUnits(1L).withWriteCapacityUnits(1L)

Однако определение этой аннотации и ручное создание вторичного индекса в интеграционном тесте вызывает проблемы при выполнении интеграционного теста: com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: Cannot have two attributes with the same name

Таким образом, одно решение, которое работает, это удалить аннотацию @DynamoDBIndexHashKey, и в интеграционном тесте создается только один вторичный индекс.

С другой стороны, если мы действительно хотим использовать эту аннотацию, а не создавать вторичный индекс в createTableRequest, затем он создаст индекс без предоставленной пропускной способности, и вы получите ошибку: com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: No provisioned throughput specified for the global secondary index

Итак, мой вопрос: как вы можете использовать аннотация @DynamoDBIndexHashKey, которая успешно создает вторичный индекс для интеграционного теста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...