{"record":{"id":"9e3f41e11ddc2ac8","repo":"apache/seatunnel","slug":"jira-source-connector-not-support-unbounded-operat","errorCode":null,"errorMessage":"Jira source connector not support unbounded operation","messagePattern":"Jira source connector not support unbounded operation","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/JiraSource.java","lineNumber":59,"sourceCode":"        // get accessToken by basic auth\n        String accessToken =\n                getTokenByBasicAuth(\n                        pluginConfig.get(JiraSourceOptions.EMAIL),\n                        pluginConfig.get(JiraSourceOptions.API_TOKEN));\n        jiraSourceParameter.buildWithConfig(pluginConfig, accessToken);\n    }\n\n    @Override\n    public String getPluginName() {\n        return \"Jira\";\n    }\n\n    @Override\n    public Boundedness getBoundedness() {\n        if (JobMode.BATCH.equals(jobContext.getJobMode())) {\n            return Boundedness.BOUNDED;\n        }\n        throw new UnsupportedOperationException(\n                \"Jira source connector not support unbounded operation\");\n    }\n\n    @Override\n    public AbstractSingleSplitReader<SeaTunnelRow> createReader(\n            SingleSplitReaderContext readerContext) throws Exception {\n        return new HttpSourceReader(\n                this.jiraSourceParameter,\n                readerContext,\n                this.deserializationSchema,\n                jsonField,\n                contentField);\n    }\n}\n","sourceCodeStart":41,"sourceCodeEnd":74,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-http/connector-http-jira/src/main/java/org/apache/seatunnel/connectors/seatunnel/jira/source/JiraSource.java#L41-L74","documentation":"The Jira source connector only supports bounded (batch) execution. getBoundedness() returns BOUNDED for BATCH jobs but throws UnsupportedOperationException for any other mode, because the connector implements no unbounded/streaming read path.","triggerScenarios":"Running a SeaTunnel job in STREAMING mode (job.mode = STREAMING) with Jira as the source; the engine calls getBoundedness() at job startup and the connector throws.","commonSituations":"Reusing a streaming pipeline config for periodic Jira issue export; misconfigured env block where job.mode defaults to streaming.","solutions":["Set job.mode = BATCH in the env block of the job config.","If streaming ingestion from Jira is needed, use a connector with streaming support or schedule repeated batch jobs.","Verify the config file actually targets BATCH before submission."],"exampleFix":"// before\nenv {\n  job.mode = \"STREAMING\"\n}\n\n// after\nenv {\n  job.mode = \"BATCH\"\n}","handlingStrategy":"validation","validationCode":"String jobMode = config.getString(\"job.mode\");\nif (!\"BATCH\".equalsIgnoreCase(jobMode)) {\n    throw new IllegalArgumentException(\"Jira source requires job.mode = BATCH, got: \" + jobMode);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set job.mode = BATCH when using the Jira source.","For continuous Jira ingestion, schedule repeated batch jobs via cron/airflow.","Validate job configs in CI before deploying."],"tags":["seatunnel","connector","batch-mode","streaming-unsupported"],"backgroundTag":"unsupported-operation","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}