apache/seatunnel · error · IllegalArgumentException
Stripe option 'created_gte' must be less than 'created_lt'
Error message
Stripe option 'created_gte' must be less than 'created_lt'
What it means
buildWithConfig enforces that when both created_gte and created_lt are set, the lower bound is strictly less than the exclusive upper bound. Otherwise the time window is empty or inverted and Stripe would return no data, so the connector throws this IllegalArgumentException instead.
Solutions
- Swap created_gte and created_lt if they were accidentally reversed.
- Ensure created_gte < created_lt strictly; if you meant a single period, set created_lt to the period end (exclusive).
- Remove one of the bounds if an unbounded range is acceptable.
- Verify the epoch values correspond to the intended start/end times (date -d @<epoch>).
Example fix
// before created_gte = 1735689600 created_lt = 1704067200 // after created_gte = 1704067200 created_lt = 1735689600
Defensive patterns
Strategy: validation
Validate before calling
long gte = pluginConfig.getOptional(StripeSourceOptions.CREATED_GTE).orElse(Long.MIN_VALUE);
long lt = pluginConfig.getOptional(StripeSourceOptions.CREATED_LT).orElse(Long.MAX_VALUE);
if (gte >= lt) {
throw new IllegalArgumentException("created_gte must be strictly less than created_lt");
} Try / catch
try {
StripeSourceParameter p = StripeSourceParameter.buildWithConfig(pluginConfig);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Invalid time window: " + e.getMessage(), e);
} Prevention
- Remember created_lt is exclusive — equal bounds yield an empty window.
- Derive both bounds from one start/end pair in code to avoid swaps.
- Print the resolved epoch values in job logs to spot inverted windows early.
When it happens
Trigger: Calling buildWithConfig with CREATED_GTE >= CREATED_LT, including the equal case (created_gte == created_lt yields an empty range because created_lt is exclusive).
Common situations: Copy-paste swapping the two values; user assumes both endpoints are inclusive so sets them equal for a single day; timezone/unit mismatch makes gte compute larger than lt.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- root-level 'schema' cannot be used with 'tables_configs'
- Stripe option 'created_gte' must not be negative
- Stripe option 'created_lt' must not be negative
- All candidate sink tables were skipped during job parsing.
- AmazonDocumentDB option 'uri' must include authentication…
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/b1b2ec2c16ce428f.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java:68
throw new IllegalArgumentException("Stripe option 'api_base_url' must not be blank");
}
int pageSize = pluginConfig.get(StripeSourceOptions.PAGE_SIZE);
if (pageSize < 1 || pageSize > 100) {
throw new IllegalArgumentException(
"Stripe option 'page_size' must be between 1 and 100");
}
Long createdGte = pluginConfig.getOptional(StripeSourceOptions.CREATED_GTE).orElse(null);
Long createdLt = pluginConfig.getOptional(StripeSourceOptions.CREATED_LT).orElse(null);
if (createdGte != null && createdGte < 0) {
throw new IllegalArgumentException("Stripe option 'created_gte' must not be negative");
}
if (createdLt != null && createdLt < 0) {
throw new IllegalArgumentException("Stripe option 'created_lt' must not be negative");
}
if (createdGte != null && createdLt != null && createdGte >= createdLt) {
throw new IllegalArgumentException(
"Stripe option 'created_gte' must be less than 'created_lt'");
}
this.rateLimitMaxRetries = pluginConfig.get(StripeSourceOptions.RATE_LIMIT_MAX_RETRIES);
this.rateLimitBackoffMs = pluginConfig.get(StripeSourceOptions.RATE_LIMIT_BACKOFF_MS);
if (rateLimitMaxRetries < 0) {
throw new IllegalArgumentException(
"Stripe option 'rate_limit_max_retries' must not be negative");
}
if (rateLimitBackoffMs < 0) {
throw new IllegalArgumentException(
"Stripe option 'rate_limit_backoff_ms' must not be negative");
}
setUrl(trimTrailingSlash(apiBaseUrl.trim()) + PAYMENT_INTENTS_PATH);
setMethod(HttpRequestMethod.GET);
Map<String, String> requestHeaders = new LinkedHashMap<>();View on GitHub (pinned to cf67b549a7)