You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by "david-streamlio (via GitHub)" <gi...@apache.org> on 2026/07/09 22:13:38 UTC

[I] [Bug] DynamoDB source cannot use a custom endpoint: region and endpoint are both set, which AWS SDK v1 forbids [pulsar-connectors]

david-streamlio opened a new issue, #78:
URL: https://github.com/apache/pulsar-connectors/issues/78

   ## Description
   
   The DynamoDB source's `awsEndpoint` / `dynamoEndpoint` / `cloudwatchEndpoint` settings are unusable. Any configuration that sets an endpoint fails at client construction with:
   
   ```
   java.lang.IllegalStateException: Only one of Region or EndpointConfiguration may be set.
   ```
   
   ## Root cause
   
   All three client builders in `DynamoDBSourceConfig` set **both** an endpoint configuration and a region:
   
   ```java
   if (!this.getAwsEndpoint().isEmpty()) {
       builder.setEndpointConfiguration(
               new AwsClientBuilder.EndpointConfiguration(this.getAwsEndpoint(), this.getAwsRegion()));
   }
   if (!this.getAwsRegion().isEmpty()) {   // <-- not an else
       builder.setRegion(this.getAwsRegion());
   }
   ```
   
   AWS SDK v1's `AwsClientBuilder` rejects that combination — the `EndpointConfiguration` already carries the signing region.
   
   And `awsRegion` is **mandatory**: `DynamoDBSource.open()` enforces it.
   
   ```java
   // Even if the endpoint is set, it seems to require a region to go with it
   checkArgument(isNotBlank(dynamodbSourceConfig.getAwsRegion()), "The aws-region must be set");
   ```
   
   So whenever an endpoint is supplied, both branches run and `build()` throws. The endpoint path can never have worked. It went unnoticed because production usage against real AWS leaves the endpoint empty, and the module had no integration test (#50).
   
   The comment quoted above suggests a previous encounter with this, resolved by making the region mandatory rather than by making the two mutually exclusive.
   
   ## Second, related defect
   
   `buildDynamoDBClient` and `buildCloudwatchClient` **gate on `awsEndpoint`** but construct the `EndpointConfiguration` from `dynamoEndpoint` / `cloudwatchEndpoint`:
   
   ```java
   if (!this.getAwsEndpoint().isEmpty()) {                       // gate: awsEndpoint
       builder.setEndpointConfiguration(
               new AwsClientBuilder.EndpointConfiguration(this.getDynamoEndpoint(), ...));  // value: dynamoEndpoint
   }
   ```
   
   Setting `awsEndpoint` alone therefore builds an endpoint configuration from an **empty string**. Each builder should gate on the endpoint field it actually uses.
   
   ## Fix
   
   Make region and endpoint mutually exclusive (`else if`), and gate each builder on its own endpoint field. Proposed in #77, which also adds the LocalStack integration test that exposes this — the test cannot run against LocalStack without the fix.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@pulsar.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [I] [Bug] DynamoDB source cannot use a custom endpoint: region and endpoint are both set, which AWS SDK v1 forbids [pulsar-connectors]

Posted by "david-streamlio (via GitHub)" <gi...@apache.org>.
david-streamlio closed issue #78: [Bug] DynamoDB source cannot use a custom endpoint: region and endpoint are both set, which AWS SDK v1 forbids
URL: https://github.com/apache/pulsar-connectors/issues/78


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@pulsar.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org