diff --git a/bundles/org.openhab.persistence.dynamodb/NOTICE b/bundles/org.openhab.persistence.dynamodb/NOTICE index 38d625e34923..906014443522 100644 --- a/bundles/org.openhab.persistence.dynamodb/NOTICE +++ b/bundles/org.openhab.persistence.dynamodb/NOTICE @@ -11,3 +11,34 @@ https://www.eclipse.org/legal/epl-2.0/. == Source Code https://github.com/openhab/openhab-addons + +== Third-party Content + +com.typesafe.netty: netty-reactive-streams-http +* License: Apache 2.0 License +* Project: https://github.com/playframework/netty-reactive-streams +* Source: https://github.com/playframework/netty-reactive-streams + +com.typesafe.netty: netty-reactive-streams +* License: Apache 2.0 License +* Project: https://github.com/playframework/netty-reactive-streams +* Source: https://github.com/playframework/netty-reactive-streams + +org.reactivestreams: reactive-streams +* License: Public Domain (CC0) +* Project: http://www.reactive-streams.org/ +* Source: https://github.com/reactive-streams/reactive-streams-jvm/tree/v1.0.3 + +software.amazon.awssdk: annotations, auth, aws-core, aws-json-protocol, + dynamodb-enhanced, dynamodb, http-client-spi, + json-utils, metrics-spi, netty-nio-client, profiles, + protocol-core, regions, sdk-core, + third-party-jackson-core, utils +* License: Apache 2.0 License +* Project: https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html +* Source: https://github.com/aws/aws-sdk-java-v2/ + +software.amazon.eventstream: eventstream +* License: Apache 2.0 License +* Project: https://github.com/awslabs/aws-eventstream-java/ +* Source: https://github.com/awslabs/aws-eventstream-java/ diff --git a/bundles/org.openhab.persistence.dynamodb/README.md b/bundles/org.openhab.persistence.dynamodb/README.md index 02856546bd76..6d66a8fa592e 100644 --- a/bundles/org.openhab.persistence.dynamodb/README.md +++ b/bundles/org.openhab.persistence.dynamodb/README.md @@ -95,7 +95,7 @@ Modify the policy accordingly if needed. 4. Click _Next: Tags_ 5. Click _Next: Review_ - 6. Enter `openhab-dynamodb-policy` as the _Name_ol-prefix --> + 6. Enter `openhab-dynamodb-policy` as the _Name_ 7. Click _Create policy_ to finish policy creation @@ -224,10 +224,10 @@ Similar caveat applies for DynamoDB Time to Live (TTL) setting `expireDays`. ### Updating Amazon SDK -1. Clean `lib/*` -2. Update SDK version in `scripts/fetch_sdk_pom.xml`. You can use the [maven online repository browser](https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-dynamodb) to find the latest version available online. -3. `scripts/fetch_sdk.sh` -4. Copy printed dependencies to `pom.xml` +1. Update SDK version and `netty-nio-client` version in `scripts/fetch_sdk_pom.xml`. You can use the [maven online repository browser](https://mvnrepository.com/artifact/software.amazon.awssdk/dynamodb-enhanced) to find the latest version available online. +2. `scripts/fetch_sdk.sh` +3. Copy printed dependencies to `pom.xml`. If necessary, adjust feature.xml, bnd.importpackage and dep.noembedding as well (probably rarely needed but [it happens](https://aws.amazon.com/blogs/developer/the-aws-sdk-for-java-2-17-removes-its-external-dependency-on-jackson/)). +4. Check & update `NOTICE` file with all the updated, new and removed dependencies. After these changes, it's good practice to run integration tests (against live AWS DynamoDB) in `org.openhab.persistence.dynamodb.test` bundle. See README.md in the test bundle for more information how to execute the tests. diff --git a/bundles/org.openhab.persistence.dynamodb/pom.xml b/bundles/org.openhab.persistence.dynamodb/pom.xml index d4ec80081834..33d700ed4a6c 100644 --- a/bundles/org.openhab.persistence.dynamodb/pom.xml +++ b/bundles/org.openhab.persistence.dynamodb/pom.xml @@ -19,10 +19,10 @@ --> !com.amazonaws.*,!com.sun.org.apache.xpath.*,!kotlin,!org.apache.log.*,!org.bouncycastle.*,!org.joda.convert.*,!scala.util.*,!software.amazon.*,!org.reactivestreams,!com.typesafe.netty - netty-common,netty-transport,netty-transport-native-epoll,netty-transport-native-unix-common,netty-buffer,netty-resolver,netty-codec,netty-codec-http,netty-codec-http2,netty-handler,jackson-core,jackson-annotations,jackson-dataformat-cbor,jackson-databind - - 1.7.21 + netty. Let's ensure by listing relevant packages with dep.noembedding --> + netty-common,netty-transport,netty-transport-native-epoll,netty-transport-native-unix-common,netty-buffer,netty-resolver,netty-codec,netty-codec-http,netty-codec-http2,netty-handler + + 1.7.32 @@ -61,7 +61,7 @@ @@ -73,21 +73,6 @@ ${slf4j.version} provided - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - io.netty netty-buffer @@ -213,87 +198,97 @@ com.typesafe.netty netty-reactive-streams-http - 2.0.4 + 2.0.5 com.typesafe.netty netty-reactive-streams - 2.0.4 + 2.0.5 org.reactivestreams reactive-streams - 1.0.2 + 1.0.3 software.amazon.awssdk annotations - 2.15.56 + 2.17.102 software.amazon.awssdk auth - 2.15.56 + 2.17.102 software.amazon.awssdk aws-core - 2.15.56 + 2.17.102 software.amazon.awssdk aws-json-protocol - 2.15.56 + 2.17.102 software.amazon.awssdk dynamodb-enhanced - 2.15.56 + 2.17.102 software.amazon.awssdk dynamodb - 2.15.56 + 2.17.102 software.amazon.awssdk http-client-spi - 2.15.56 + 2.17.102 + + + software.amazon.awssdk + json-utils + 2.17.102 software.amazon.awssdk metrics-spi - 2.15.77 + 2.17.102 software.amazon.awssdk netty-nio-client - 2.15.77 + 2.17.102 software.amazon.awssdk profiles - 2.15.56 + 2.17.102 software.amazon.awssdk protocol-core - 2.15.56 + 2.17.102 software.amazon.awssdk regions - 2.15.56 + 2.17.102 software.amazon.awssdk sdk-core - 2.15.56 + 2.17.102 + + + software.amazon.awssdk + third-party-jackson-core + 2.17.102 software.amazon.awssdk utils - 2.15.56 + 2.17.102 software.amazon.eventstream diff --git a/bundles/org.openhab.persistence.dynamodb/scripts/fetch_sdk_pom.xml b/bundles/org.openhab.persistence.dynamodb/scripts/fetch_sdk_pom.xml index 360e3ced45d8..7176e27f2630 100644 --- a/bundles/org.openhab.persistence.dynamodb/scripts/fetch_sdk_pom.xml +++ b/bundles/org.openhab.persistence.dynamodb/scripts/fetch_sdk_pom.xml @@ -10,31 +10,19 @@ software.amazon.awssdk dynamodb-enhanced - 2.15.56 + 2.17.102 org.slf4j slf4j-api - - com.fasterxml.jackson.core - jackson-annotations - - - com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core - jackson-databind - software.amazon.awssdk netty-nio-client - 2.15.77 + 2.17.102 diff --git a/bundles/org.openhab.persistence.dynamodb/src/main/feature/feature.xml b/bundles/org.openhab.persistence.dynamodb/src/main/feature/feature.xml index fa2febc07adf..1ca7b8364cc1 100644 --- a/bundles/org.openhab.persistence.dynamodb/src/main/feature/feature.xml +++ b/bundles/org.openhab.persistence.dynamodb/src/main/feature/feature.xml @@ -4,7 +4,6 @@ openhab-runtime-base - openhab.tp-jackson openhab.tp-netty mvn:org.openhab.addons.bundles/org.openhab.persistence.dynamodb/${project.version} mvn:org.openhab.addons.features.karaf/org.openhab.addons.features.karaf.openhab-addons-external/${project.version}/cfg/dynamodb diff --git a/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfig.java b/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfig.java index f2adcceafc5b..14051175b6a8 100644 --- a/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfig.java +++ b/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfig.java @@ -49,14 +49,13 @@ public class DynamoDBConfig { public static final String DEFAULT_TABLE_NAME = "openhab"; public static final long DEFAULT_READ_CAPACITY_UNITS = 1; public static final long DEFAULT_WRITE_CAPACITY_UNITS = 1; - public static final RetryMode DEFAULT_RETRY_MODE = RetryMode.STANDARD; private static final Logger LOGGER = LoggerFactory.getLogger(DynamoDBConfig.class); private long readCapacityUnits; private long writeCapacityUnits; private Region region; private AwsCredentials credentials; - private RetryPolicy retryPolicy; + private Optional retryPolicy; private ExpectedTableSchema tableRevision; private String table; private String tablePrefixLegacy; @@ -81,7 +80,7 @@ public class DynamoDBConfig { } region = Region.of(regionName); - RetryMode retryMode = RetryMode.STANDARD; + Optional retryMode = Optional.empty(); AwsCredentials credentials; String accessKey = (String) config.get("accessKey"); String secretKey = (String) config.get("secretKey"); @@ -110,11 +109,12 @@ public class DynamoDBConfig { return Optional.of(value); } } - LOGGER.warn("Unknown retry_mode '{}' in profile. Ignoring and using default {} retry mode.", - retry_mode, DEFAULT_RETRY_MODE); + LOGGER.warn( + "Unknown retry_mode '{}' in profile. Ignoring and using SDK default retry mode.", + retry_mode); return Optional.empty(); - }).orElse(DEFAULT_RETRY_MODE); + }); LOGGER.debug("Retry mode {}", retryMode); } @@ -169,18 +169,19 @@ public class DynamoDBConfig { switch (tableRevision) { case NEW: LOGGER.debug("Using new DynamoDB table schema"); - return DynamoDBConfig.newSchema(region, credentials, AwsRetryPolicy.forRetryMode(retryMode), table, - readCapacityUnits, writeCapacityUnits, expireDays); + return DynamoDBConfig.newSchema(region, credentials, retryMode.map(AwsRetryPolicy::forRetryMode), + table, readCapacityUnits, writeCapacityUnits, expireDays); case LEGACY: LOGGER.warn( "Using legacy DynamoDB table schema. It is recommended to transition to new schema by defining 'table' parameter and not configuring 'tablePrefix'"); - return DynamoDBConfig.legacySchema(region, credentials, AwsRetryPolicy.forRetryMode(retryMode), + return DynamoDBConfig.legacySchema(region, credentials, retryMode.map(AwsRetryPolicy::forRetryMode), tablePrefixLegacy, readCapacityUnits, writeCapacityUnits); case MAYBE_LEGACY: LOGGER.debug( "Unclear whether we should use new legacy DynamoDB table schema. It is recommended to explicitly define new 'table' parameter. The correct table schema will be detected at runtime."); - return DynamoDBConfig.maybeLegacySchema(region, credentials, AwsRetryPolicy.forRetryMode(retryMode), - table, tablePrefixLegacy, readCapacityUnits, writeCapacityUnits, expireDays); + return DynamoDBConfig.maybeLegacySchema(region, credentials, + retryMode.map(AwsRetryPolicy::forRetryMode), table, tablePrefixLegacy, readCapacityUnits, + writeCapacityUnits, expireDays); default: throw new IllegalStateException("Unhandled enum. Bug"); } @@ -190,26 +191,28 @@ public class DynamoDBConfig { } } - private static DynamoDBConfig newSchema(Region region, AwsCredentials credentials, RetryPolicy retryPolicy, - String table, long readCapacityUnits, long writeCapacityUnits, @Nullable Integer expireDays) { + private static DynamoDBConfig newSchema(Region region, AwsCredentials credentials, + Optional retryPolicy, String table, long readCapacityUnits, long writeCapacityUnits, + @Nullable Integer expireDays) { return new DynamoDBConfig(region, credentials, retryPolicy, table, "", ExpectedTableSchema.NEW, readCapacityUnits, writeCapacityUnits, expireDays); } - private static DynamoDBConfig legacySchema(Region region, AwsCredentials credentials, RetryPolicy retryPolicy, - String tablePrefixLegacy, long readCapacityUnits, long writeCapacityUnits) { + private static DynamoDBConfig legacySchema(Region region, AwsCredentials credentials, + Optional retryPolicy, String tablePrefixLegacy, long readCapacityUnits, + long writeCapacityUnits) { return new DynamoDBConfig(region, credentials, retryPolicy, "", tablePrefixLegacy, ExpectedTableSchema.LEGACY, readCapacityUnits, writeCapacityUnits, null); } - private static DynamoDBConfig maybeLegacySchema(Region region, AwsCredentials credentials, RetryPolicy retryPolicy, - String table, String tablePrefixLegacy, long readCapacityUnits, long writeCapacityUnits, - @Nullable Integer expireDays) { + private static DynamoDBConfig maybeLegacySchema(Region region, AwsCredentials credentials, + Optional retryPolicy, String table, String tablePrefixLegacy, long readCapacityUnits, + long writeCapacityUnits, @Nullable Integer expireDays) { return new DynamoDBConfig(region, credentials, retryPolicy, table, tablePrefixLegacy, ExpectedTableSchema.MAYBE_LEGACY, readCapacityUnits, writeCapacityUnits, expireDays); } - private DynamoDBConfig(Region region, AwsCredentials credentials, RetryPolicy retryPolicy, String table, + private DynamoDBConfig(Region region, AwsCredentials credentials, Optional retryPolicy, String table, String tablePrefixLegacy, ExpectedTableSchema tableRevision, long readCapacityUnits, long writeCapacityUnits, @Nullable Integer expireDays) { this.region = region; @@ -251,7 +254,7 @@ public long getWriteCapacityUnits() { return writeCapacityUnits; } - public RetryPolicy getRetryPolicy() { + public Optional getRetryPolicy() { return retryPolicy; } diff --git a/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBPersistenceService.java b/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBPersistenceService.java index d1d90c792da1..220fdaf55676 100644 --- a/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBPersistenceService.java +++ b/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBPersistenceService.java @@ -63,6 +63,7 @@ import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.core.async.SdkPublisher; import software.amazon.awssdk.core.client.config.ClientAsyncConfiguration; import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; @@ -125,7 +126,7 @@ void overrideConfig(ClientOverrideConfiguration.Builder config) { DynamoDBConfig localDbConfig = dbConfig; config.apiCallAttemptTimeout(TIMEOUT_API_CALL_ATTEMPT).apiCallTimeout(TIMEOUT_API_CALL); if (localDbConfig != null) { - config.retryPolicy(localDbConfig.getRetryPolicy()); + localDbConfig.getRetryPolicy().ifPresent(config::retryPolicy); } } @@ -220,6 +221,7 @@ private boolean ensureClient() { return true; } DynamoDbAsyncClientBuilder lowlevelClientBuilder = DynamoDbAsyncClient.builder() + .defaultsMode(DefaultsMode.STANDARD) .credentialsProvider(StaticCredentialsProvider.create(localDbConfig.getCredentials())) .httpClient(NettyNioAsyncHttpClient.builder().maxConcurrency(MAX_CONCURRENCY).build()) .asyncConfiguration( diff --git a/bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/BaseIntegrationTest.java b/bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/BaseIntegrationTest.java index f619813af3ec..520135cc5978 100644 --- a/bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/BaseIntegrationTest.java +++ b/bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/BaseIntegrationTest.java @@ -22,6 +22,7 @@ import java.util.Hashtable; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.stream.Stream; @@ -428,25 +429,10 @@ protected static void clearData() { lowLevelClient.deleteTable(req -> req.tableName(table)).get(); final WaiterResponse waiterResponse; - try { - waiterResponse = lowLevelClient.waiter().waitUntilTableNotExists(req -> req.tableName(table)).get(); - } catch (ExecutionException e) { - // the waiting might fail with SdkClientException: An exception was thrown and did not match any - // waiter acceptors - // (the exception being CompletionException of ResourceNotFound) - - // We check if table has been removed, and continue if it has - try { - lowLevelClient.describeTable(req -> req.tableName(table)).get(); - } catch (ExecutionException e2) { - if (e2.getCause() instanceof ResourceNotFoundException) { - // Table does not exist, this table does not need cleaning, continue to next table - continue; - } - } - throw e; - } - assertTrue(waiterResponse.matched().exception().isEmpty()); + waiterResponse = lowLevelClient.waiter().waitUntilTableNotExists(req -> req.tableName(table)).get(); + Optional waiterException = waiterResponse.matched().exception() + .filter(e -> !(e instanceof ResourceNotFoundException)); + assertTrue(waiterException.isEmpty(), waiterException::toString); } catch (ExecutionException | InterruptedException e) { fail("Error cleaning up test (deleting table)", e); } diff --git a/bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfigTest.java b/bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfigTest.java index 930211c4425d..bc1cda88e188 100644 --- a/bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfigTest.java +++ b/bundles/org.openhab.persistence.dynamodb/src/test/java/org/openhab/persistence/dynamodb/internal/DynamoDBConfigTest.java @@ -22,12 +22,14 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import software.amazon.awssdk.core.retry.RetryMode; +import software.amazon.awssdk.core.retry.RetryPolicy; import software.amazon.awssdk.regions.Region; /** @@ -77,7 +79,7 @@ public void testRegionWithAccessKeys() throws Exception { assertEquals("openhab-", fromConfig.getTablePrefixLegacy()); assertEquals(1, fromConfig.getReadCapacityUnits()); assertEquals(1, fromConfig.getWriteCapacityUnits()); - assertEquals(RetryMode.STANDARD, fromConfig.getRetryPolicy().retryMode()); + assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode)); assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision()); } @@ -97,7 +99,7 @@ public void testRegionWithProfilesConfigFile() throws Exception { assertEquals("openhab-", fromConfig.getTablePrefixLegacy()); assertEquals(1, fromConfig.getReadCapacityUnits()); assertEquals(1, fromConfig.getWriteCapacityUnits()); - assertEquals(RetryMode.STANDARD, fromConfig.getRetryPolicy().retryMode()); + assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode)); assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision()); } @@ -117,7 +119,7 @@ public void testProfilesConfigFileRetryMode() throws Exception { assertEquals("openhab-", fromConfig.getTablePrefixLegacy()); assertEquals(1, fromConfig.getReadCapacityUnits()); assertEquals(1, fromConfig.getWriteCapacityUnits()); - assertEquals(RetryMode.LEGACY, fromConfig.getRetryPolicy().retryMode()); + assertEquals(Optional.of(RetryMode.LEGACY), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode)); assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision()); } @@ -161,7 +163,7 @@ public void testRegionWithAccessKeysWithLegacyPrefix() throws Exception { assertEquals("foobie-", fromConfig.getTablePrefixLegacy()); assertEquals(1, fromConfig.getReadCapacityUnits()); assertEquals(1, fromConfig.getWriteCapacityUnits()); - assertEquals(RetryMode.STANDARD, fromConfig.getRetryPolicy().retryMode()); + assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode)); assertEquals(ExpectedTableSchema.LEGACY, fromConfig.getTableRevision()); assertNull(fromConfig.getExpireDays()); // not supported with legacy } @@ -177,7 +179,7 @@ public void testRegionWithAccessKeysWithTable() throws Exception { assertEquals("mytable", fromConfig.getTable()); assertEquals(1, fromConfig.getReadCapacityUnits()); assertEquals(1, fromConfig.getWriteCapacityUnits()); - assertEquals(RetryMode.STANDARD, fromConfig.getRetryPolicy().retryMode()); + assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode)); assertEquals(ExpectedTableSchema.NEW, fromConfig.getTableRevision()); assertEquals(105, fromConfig.getExpireDays()); } @@ -193,7 +195,7 @@ public void testRegionWithAccessKeysWithoutPrefixWithReadCapacityUnits() throws assertEquals("openhab-", fromConfig.getTablePrefixLegacy()); assertEquals(5, fromConfig.getReadCapacityUnits()); assertEquals(1, fromConfig.getWriteCapacityUnits()); - assertEquals(RetryMode.STANDARD, fromConfig.getRetryPolicy().retryMode()); + assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode)); assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision()); assertEquals(105, fromConfig.getExpireDays()); } @@ -209,7 +211,7 @@ public void testRegionWithAccessKeysWithoutPrefixWithWriteCapacityUnits() throws assertEquals("openhab-", fromConfig.getTablePrefixLegacy()); assertEquals(1, fromConfig.getReadCapacityUnits()); assertEquals(5, fromConfig.getWriteCapacityUnits()); - assertEquals(RetryMode.STANDARD, fromConfig.getRetryPolicy().retryMode()); + assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode)); assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision()); assertNull(fromConfig.getExpireDays()); // default is null } @@ -225,7 +227,7 @@ public void testRegionWithAccessKeysWithoutPrefixWithReadWriteCapacityUnits() th assertEquals("openhab-", fromConfig.getTablePrefixLegacy()); assertEquals(3, fromConfig.getReadCapacityUnits()); assertEquals(5, fromConfig.getWriteCapacityUnits()); - assertEquals(RetryMode.STANDARD, fromConfig.getRetryPolicy().retryMode()); + assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode)); assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision()); } @@ -241,7 +243,7 @@ public void testRegionWithAccessKeysWithPrefixWithReadWriteCapacityUnitsWithBuff assertEquals("openhab-", fromConfig.getTablePrefixLegacy()); assertEquals(3, fromConfig.getReadCapacityUnits()); assertEquals(5, fromConfig.getWriteCapacityUnits()); - assertEquals(RetryMode.STANDARD, fromConfig.getRetryPolicy().retryMode()); + assertEquals(Optional.empty(), fromConfig.getRetryPolicy().map(RetryPolicy::retryMode)); assertEquals(ExpectedTableSchema.MAYBE_LEGACY, fromConfig.getTableRevision()); } }