diff --git a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/GlueHiveMetastore.java b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/GlueHiveMetastore.java index febbddde2ef17..430f119b8fde0 100644 --- a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/GlueHiveMetastore.java +++ b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/GlueHiveMetastore.java @@ -175,7 +175,9 @@ public GlueHiveMetastore( private static AWSGlueAsync createAsyncGlueClient(GlueHiveMetastoreConfig config, RequestMetricCollector metricsCollector) { - ClientConfiguration clientConfig = new ClientConfiguration().withMaxConnections(config.getMaxGlueConnections()); + ClientConfiguration clientConfig = new ClientConfiguration() + .withMaxConnections(config.getMaxGlueConnections()) + .withMaxErrorRetry(config.getMaxGlueErrorRetries()); AWSGlueAsyncClientBuilder asyncGlueClientBuilder = AWSGlueAsyncClientBuilder.standard() .withMetricsCollector(metricsCollector) .withClientConfiguration(clientConfig); diff --git a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/GlueHiveMetastoreConfig.java b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/GlueHiveMetastoreConfig.java index 8c376f53a4c1f..d916b38cf9c61 100644 --- a/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/GlueHiveMetastoreConfig.java +++ b/presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue/GlueHiveMetastoreConfig.java @@ -25,6 +25,7 @@ public class GlueHiveMetastoreConfig { private Optional glueRegion = Optional.empty(); private boolean pinGlueClientToCurrentRegion; + private int maxGlueErrorRetries = 10; private int maxGlueConnections = 5; private Optional defaultWarehouseDir = Optional.empty(); private Optional catalogId = Optional.empty(); @@ -72,6 +73,19 @@ public GlueHiveMetastoreConfig setMaxGlueConnections(int maxGlueConnections) return this; } + @Min(0) + public int getMaxGlueErrorRetries() + { + return maxGlueErrorRetries; + } + + @Config("hive.metastore.glue.max-error-retries") + public GlueHiveMetastoreConfig setMaxGlueErrorRetries(int maxGlueErrorRetries) + { + this.maxGlueErrorRetries = maxGlueErrorRetries; + return this; + } + public Optional getDefaultWarehouseDir() { return defaultWarehouseDir; diff --git a/presto-hive-metastore/src/test/java/com/facebook/presto/hive/metastore/glue/TestGlueHiveMetastoreConfig.java b/presto-hive-metastore/src/test/java/com/facebook/presto/hive/metastore/glue/TestGlueHiveMetastoreConfig.java index ee522173fc184..4df21f776760e 100644 --- a/presto-hive-metastore/src/test/java/com/facebook/presto/hive/metastore/glue/TestGlueHiveMetastoreConfig.java +++ b/presto-hive-metastore/src/test/java/com/facebook/presto/hive/metastore/glue/TestGlueHiveMetastoreConfig.java @@ -31,6 +31,7 @@ public void testDefaults() .setGlueRegion(null) .setPinGlueClientToCurrentRegion(false) .setMaxGlueConnections(5) + .setMaxGlueErrorRetries(10) .setDefaultWarehouseDir(null) .setCatalogId(null) .setPartitionSegments(5) @@ -45,6 +46,7 @@ public void testExplicitPropertyMapping() .put("hive.metastore.glue.region", "us-east-1") .put("hive.metastore.glue.pin-client-to-current-region", "true") .put("hive.metastore.glue.max-connections", "10") + .put("hive.metastore.glue.max-error-retries", "20") .put("hive.metastore.glue.default-warehouse-dir", "/location") .put("hive.metastore.glue.catalogid", "0123456789") .put("hive.metastore.glue.partitions-segments", "10") @@ -56,6 +58,7 @@ public void testExplicitPropertyMapping() .setGlueRegion("us-east-1") .setPinGlueClientToCurrentRegion(true) .setMaxGlueConnections(10) + .setMaxGlueErrorRetries(20) .setDefaultWarehouseDir("/location") .setCatalogId("0123456789") .setPartitionSegments(10)