{"record":{"id":"3d874ed31f0da556","repo":"apache/seatunnel","slug":"config-validation-failed-3d874e","errorCode":"CONFIG_VALIDATION_FAILED","errorMessage":"Continuous enumerator can only be used when discovery_mode=continuous.","messagePattern":"Continuous enumerator can only be used when discovery_mode=continuous\\.","errorType":"validation","errorClass":"FileConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/split/ContinuousMultipleTableFileSourceSplitEnumerator.java","lineNumber":1382,"sourceCode":"            return null;\n        }\n        try {\n            return metricsContext.counter(name);\n        } catch (Exception e) {\n            return null;\n        }\n    }\n\n    private static void incCounter(Counter counter) {\n        if (counter != null) {\n            counter.inc();\n        }\n    }\n\n    private static void validateContinuousDiscoveryConfig(List<BaseFileSourceConfig> configs) {\n        FileDiscoveryMode mode = resolveGlobalOption(configs, FileBaseSourceOptions.DISCOVERY_MODE);\n        if (mode != FileDiscoveryMode.CONTINUOUS) {\n            throw new FileConnectorException(\n                    SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,\n                    \"Continuous enumerator can only be used when discovery_mode=continuous.\");\n        }\n        for (BaseFileSourceConfig cfg : configs) {\n            ReadonlyConfig c = cfg.getBaseFileSourceConfig();\n            FileSyncMode syncMode = c.get(FileBaseSourceOptions.SYNC_MODE);\n            if (syncMode != FileSyncMode.UPDATE) {\n                throw new FileConnectorException(\n                        SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,\n                        \"discovery_mode=continuous currently requires sync_mode=update.\");\n            }\n            FileFormat fileFormat = c.get(FileBaseSourceOptions.FILE_FORMAT_TYPE);\n            if (fileFormat != FileFormat.BINARY) {\n                throw new FileConnectorException(\n                        SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,\n                        \"discovery_mode=continuous currently only supports file_format_type=binary.\");\n            }\n            Duration interval = c.get(FileBaseSourceOptions.SCAN_INTERVAL);","sourceCodeStart":1364,"sourceCodeEnd":1400,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/source/split/ContinuousMultipleTableFileSourceSplitEnumerator.java#L1364-L1400","documentation":"ContinuousMultipleTableFileSourceSplitEnumerator.validateContinuousDiscoveryConfig ensures the continuous split enumerator is only instantiated when discovery_mode=continuous. Any other discovery mode makes continuous enumeration semantics invalid, so CONFIG_VALIDATION_FAILED is thrown.","triggerScenarios":"The source creates a continuous enumerator (e.g. because a continuous-specific option like scan interval/incremental sync is enabled) while discovery_mode is interval/once.","commonSituations":"Enabling streaming/incremental file watching but forgetting discovery_mode = \"continuous\"; mixing options from examples targeting different modes.","solutions":["Set discovery_mode = \"continuous\" in the source config.","Disable continuous-specific options if periodic/batch discovery is actually desired.","Align config with a documented continuous file-source example."],"exampleFix":"// before\ndiscovery_mode = \"interval\"\nsync_mode = \"update\"\n// after\ndiscovery_mode = \"continuous\"\nsync_mode = \"update\"","handlingStrategy":"validation","validationCode":"if (!\"continuous\".equals(config.getString(\"discovery_mode\"))) {\n  throw new IllegalArgumentException(\"Continuous enumerator requires discovery_mode=continuous\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  enumerator = new ContinuousMultipleTableFileSourceSplitEnumerator(...);\n} catch (FileConnectorException e) {\n  if (e.getMessage().contains(\"Continuous enumerator can only be used\")) {\n    throw new ConfigException(\"Set discovery_mode=continuous\", e);\n  }\n  throw e;\n}","preventionTips":["Pair continuous-only options (scan interval, update sync) with discovery_mode=continuous.","Review streaming examples when migrating from batch configs.","Enable config pre-validation in job submission pipeline."],"tags":["file-connector","split-enumerator","discovery-mode","config-validation"],"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-14T11:17:12.474Z"}