Skip to content

customEndpoint plugin defaults don't work #1513

@er1c

Description

@er1c

Describe the bug

We added the customEndpoint plugin and quickly ran into:

  1. It needs an IAM permission (rds:DescribeDBClusterEndpoints) that isn't documented:
software.amazon.awssdk.services.rds.model.RdsException: User: arn:aws:sts::....:assumed-role/....-service/.... is not authorized to perform: rds:DescribeDBClusterEndpoints on resource: arn:aws:rds:us-east-1:....:cluster-endpoint:svc-....-reader because no identity-based policy allows the rds:DescribeDBClusterEndpoints action (Service: Rds, Status Code: 403, Request ID: aedfbcfc-...) 
  1. After a few minutes it will start throwing other exceptions:
[ip-10-2-1-116.ec2.internal] [severe] s.a.j.p.c.CustomEndpointPlugin - Encountered an exception while monitoring custom endpoint 'svc-...-reader.cluster-custom-....us-east-1.rds.amazonaws.com'. 
[ip-10-2-1-116.ec2.internal] [error] s.a.j.p.c.CustomEndpointPlugin - Encountered an exception while monitoring custom endpoint 'svc-...-reader.cluster-custom-....us-east-1.rds.amazonaws.com'. 
software.amazon.awssdk.services.rds.model.RdsException: Rate exceeded (Service: Rds, Status Code: 400, Request ID: 3d0b5619-42bc-4039-9045-4d6bcdc32ae4) 

Expected Behavior

I would expect the default values would work, and not cause rate limiting problems.

What plugins are used? What other connection properties were set?

initialConnection,auroraConnectionTracker,failover2,efm2,customEndpoint

Current Behavior

[ip-10-2-1-116.ec2.internal] [severe] s.a.j.p.c.CustomEndpointPlugin - Encountered an exception while monitoring custom endpoint 'svc-...-reader.cluster-custom-....us-east-1.rds.amazonaws.com'. 
[ip-10-2-1-116.ec2.internal] [error] s.a.j.p.c.CustomEndpointPlugin - Encountered an exception while monitoring custom endpoint 'svc-...-reader.cluster-custom-....us-east-1.rds.amazonaws.com'. 
software.amazon.awssdk.services.rds.model.RdsException: Rate exceeded (Service: Rds, Status Code: 400, Request ID: 3d0b5619-42bc-4039-9045-4d6bcdc32ae4) 
	at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:125) 
	at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleResponse(CombinedResponseHandler.java:82) 
	at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:60) 
	at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:41) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:50) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:38) 
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:74) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:43) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:79) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:41) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:55) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:39) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage2.executeRequest(RetryableStage2.java:93) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage2.execute(RetryableStage2.java:56) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage2.execute(RetryableStage2.java:36) 
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206) 
	at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:53) 
	at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:35) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:82) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:62) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:43) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:50) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:32) 
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206) 
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:37) 
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:26) 
	at software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonSyncHttpClient.java:210) 
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(BaseSyncClientHandler.java:103) 
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:173) 
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:80) 
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:182) 
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:74) 
	at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45) 
	at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:53) 
	at software.amazon.awssdk.services.rds.DefaultRdsClient.describeDBClusterEndpoints(DefaultRdsClient.java:4810) 
	at software.amazon.awssdk.services.rds.RdsClient.describeDBClusterEndpoints(RdsClient.java:7166) 
	at software.amazon.jdbc.plugin.customendpoint.CustomEndpointMonitorImpl.run(CustomEndpointMonitorImpl.java:128) 
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) 
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 
	at java.base/java.lang.Thread.run(Thread.java:829) 
	Suppressed: software.amazon.awssdk.core.exception.SdkClientException: Request attempt 1 failure: Rate exceeded (Service: Rds, Status Code: 400, Request ID: 1468faf3-c24c-48f4-affe-78fae1967fed) 
	Suppressed: software.amazon.awssdk.core.exception.SdkClientException: Request attempt 2 failure: Rate exceeded (Service: Rds, Status Code: 400, Request ID: b4ff7e3d-ebe2-42b6-ae3c-1641f432bab2) 
	Suppressed: software.amazon.awssdk.core.exception.SdkClientException: Request attempt 3 failure: Rate exceeded (Service: Rds, Status Code: 400, Request ID: 1876ec26-6c16-4bba-9cc6-e34d762c83a4) 

Reproduction Steps

This was for about 20 ECS tasks with ~~ 40 connections per instance

Possible Solution

The interval rates might need to be updated?

Additional Information/Context

No response

The AWS Advanced JDBC Driver version used

2.5.2

JDK version used

17

Operating System and version

linux

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdocumentationImprovements or additions to documentation

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions