{"record":{"id":"63bbaffec2b746fc","repo":"apache/seatunnel","slug":"gitlab-source-connector-not-support-unbounded-oper","errorCode":null,"errorMessage":"Gitlab source connector not support unbounded operation","messagePattern":"Gitlab source connector not support unbounded operation","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/GitlabSource.java","lineNumber":51,"sourceCode":"public class GitlabSource extends HttpSource {\n    private final GitlabSourceParameter gitlabSourceParameter = new GitlabSourceParameter();\n\n    public GitlabSource(ReadonlyConfig pluginConfig) {\n        super(pluginConfig);\n        this.gitlabSourceParameter.buildWithConfig(pluginConfig);\n    }\n\n    @Override\n    public String getPluginName() {\n        return \"Gitlab\";\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                \"Gitlab 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.gitlabSourceParameter,\n                readerContext,\n                this.deserializationSchema,\n                jsonField,\n                contentField);\n    }\n}\n","sourceCodeStart":33,"sourceCodeEnd":66,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-http/connector-http-gitlab/src/main/java/org/apache/seatunnel/connectors/seatunnel/gitlab/source/GitlabSource.java#L33-L66","documentation":"The Gitlab source connector only supports bounded (batch) reads. SeaTunnelSource.getBoundedness() reports the connector's execution mode to the engine; when the job is launched in STREAMING mode the connector has no incremental/polling logic, so it throws UnsupportedOperationException instead of returning a boundedness value. It returns BOUNDED only when the job mode is BATCH.","triggerScenarios":"Submitting a SeaTunnel job with mode = STREAMING (or omitting job.mode so the engine defaults to streaming) while the source is the Gitlab connector; the engine calls getBoundedness() during job initialization and immediately throws.","commonSituations":"Users copy a streaming config (e.g. written for Kafka/CDC connectors) and swap in Gitlab as the source; also happens in dev/test scripts that default env='run' with streaming job mode.","solutions":["Set job.mode = BATCH in the source job config (env block) before running.","Use a different connector that supports streaming (e.g. a polling HTTP source or CDC connector) if continuous ingestion from Gitlab is required.","Check the submitted config file's env section; remove any job.mode = streaming line."],"exampleFix":"// before\nenv {\n  job.mode = \"STREAMING\"\n}\nsource {\n  Gitlab { ... }\n}\n\n// after\nenv {\n  job.mode = \"BATCH\"\n}\nsource {\n  Gitlab { ... }\n}","handlingStrategy":"validation","validationCode":"// In your job config, before submission:\n// env { job.mode = \"BATCH\" }\nString jobMode = config.getString(\"job.mode\");\nif (!\"BATCH\".equalsIgnoreCase(jobMode)) {\n    throw new IllegalArgumentException(\"Gitlab source requires job.mode = BATCH, got: \" + jobMode);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always declare job.mode explicitly in the env block of every job config.","Keep separate config templates for batch vs streaming pipelines.","Remember HTTP-based sources (Gitlab/Jira/PostHog) are batch-only in SeaTunnel."],"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-14T11:17:12.474Z"}