#aws-sdk-go
Вопрос:
Официант DynamoDB в AWS SDK v1 для Go работает не так, как ожидалось.
Я пытаюсь запустить интеграционные тесты в контейнерной среде, используя DynamoDB Local. Я не уверен, что это имеет к этому какое-то отношение…
Я начал с простого dynamodb.WaitUntilTableExists
, а затем вызвал doesTableExist
простую функцию, которую я написал, которая просто вызывается dynamodb.ListTables
под капотом.
Я заметил, что вызов WaitUntilTableExists
возвращается немедленно без ошибки. А затем doesTableExist
обнаруживает, что таблица не существует, поэтому ниже приводится эта ошибка: «ожидаемая таблица=%v должна существовать, но ее нет».
klog.Infof("waiting until table table=%s exists", tableName)
err = ddb.WaitUntilTableExists(amp;dynamodb.DescribeTableInput{TableName: aws.String(tableName)})
if err != nil {
return fmt.Errorf("gave up waiting for table=%s to be ready", tableName)
}
klog.Infof("finished waiting until table table=%s exists", tableName)
if exists := doesTableExist(ddb, tableName); !exists {
return fmt.Errorf("expected table=%v to exist but it does not", tableName)
}
Затем я попытался переключиться на dynamodb.WaitUntilTableExistsWithContext
. Но поведение такое же: он немедленно возвращается без ошибок, а затем doesTableExist
обнаруживает, что таблица не существует.
dynamodb.WaitUntilTableExistsWithContext(context.TODO(), amp;dynamodb.DescribeTableInput{TableName: aws.String(tableName)},
request.WithWaiterMaxAttempts(3), request.WithWaiterDelay(request.ConstantWaiterDelay(time.Second*1)), request.WithWaiterLogger(aws.NewDefaultLogger()))
Обратите внимание, что некоторые интеграционные тесты, которые выполняются подобным образом, работают нормально. Таким образом, таблица создается достаточно быстро, чтобы тест прошел успешно. Таким образом, кажется, что небольшой процент таблиц создается недостаточно быстро, и официант DynamoDB не работает, поэтому тест завершается неудачно, потому что таблица не существует.