{"record":{"id":"b1b2ec2c16ce428f","repo":"apache/seatunnel","slug":"stripe-option-created-gte-must-be-less-than-cre","errorCode":null,"errorMessage":"Stripe option 'created_gte' must be less than 'created_lt'","messagePattern":"Stripe option 'created_gte' must be less than 'created_lt'","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java","lineNumber":68,"sourceCode":"            throw new IllegalArgumentException(\"Stripe option 'api_base_url' must not be blank\");\n        }\n\n        int pageSize = pluginConfig.get(StripeSourceOptions.PAGE_SIZE);\n        if (pageSize < 1 || pageSize > 100) {\n            throw new IllegalArgumentException(\n                    \"Stripe option 'page_size' must be between 1 and 100\");\n        }\n\n        Long createdGte = pluginConfig.getOptional(StripeSourceOptions.CREATED_GTE).orElse(null);\n        Long createdLt = pluginConfig.getOptional(StripeSourceOptions.CREATED_LT).orElse(null);\n        if (createdGte != null && createdGte < 0) {\n            throw new IllegalArgumentException(\"Stripe option 'created_gte' must not be negative\");\n        }\n        if (createdLt != null && createdLt < 0) {\n            throw new IllegalArgumentException(\"Stripe option 'created_lt' must not be negative\");\n        }\n        if (createdGte != null && createdLt != null && createdGte >= createdLt) {\n            throw new IllegalArgumentException(\n                    \"Stripe option 'created_gte' must be less than 'created_lt'\");\n        }\n\n        this.rateLimitMaxRetries = pluginConfig.get(StripeSourceOptions.RATE_LIMIT_MAX_RETRIES);\n        this.rateLimitBackoffMs = pluginConfig.get(StripeSourceOptions.RATE_LIMIT_BACKOFF_MS);\n        if (rateLimitMaxRetries < 0) {\n            throw new IllegalArgumentException(\n                    \"Stripe option 'rate_limit_max_retries' must not be negative\");\n        }\n        if (rateLimitBackoffMs < 0) {\n            throw new IllegalArgumentException(\n                    \"Stripe option 'rate_limit_backoff_ms' must not be negative\");\n        }\n\n        setUrl(trimTrailingSlash(apiBaseUrl.trim()) + PAYMENT_INTENTS_PATH);\n        setMethod(HttpRequestMethod.GET);\n\n        Map<String, String> requestHeaders = new LinkedHashMap<>();","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/config/StripeSourceParameter.java#L50-L86","documentation":"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.","triggerScenarios":"Calling buildWithConfig with CREATED_GTE >= CREATED_LT, including the equal case (created_gte == created_lt yields an empty range because created_lt is exclusive).","commonSituations":"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.","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>)."],"exampleFix":"// before\ncreated_gte = 1735689600\ncreated_lt = 1704067200\n// after\ncreated_gte = 1704067200\ncreated_lt = 1735689600","handlingStrategy":"validation","validationCode":"long gte = pluginConfig.getOptional(StripeSourceOptions.CREATED_GTE).orElse(Long.MIN_VALUE);\nlong lt = pluginConfig.getOptional(StripeSourceOptions.CREATED_LT).orElse(Long.MAX_VALUE);\nif (gte >= lt) {\n    throw new IllegalArgumentException(\"created_gte must be strictly less than created_lt\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    StripeSourceParameter p = StripeSourceParameter.buildWithConfig(pluginConfig);\n} catch (IllegalArgumentException e) {\n    throw new IllegalArgumentException(\"Invalid time window: \" + e.getMessage(), e);\n}","preventionTips":["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."],"tags":["config-validation","timestamp","conflicting-options"],"backgroundTag":"conflicting-config-options","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}