{"record":{"id":"2a248b2df4a5154e","repo":"apache/dolphinscheduler","slug":"invalid-compatible-mode-compatiblemode","errorCode":null,"errorMessage":"Invalid compatible mode: \" + compatibleMode","messagePattern":"Invalid compatible mode: \" \\+ compatibleMode","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oceanbase/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oceanbase/param/OceanBaseDataSourceProcessor.java","lineNumber":125,"sourceCode":"    public String getDatasourceDriver() {\n        return DataSourceConstants.COM_OCEANBASE_JDBC_DRIVER;\n    }\n\n    @Override\n    public String getValidationQuery() {\n        throw new UnsupportedOperationException(\"Can't get validation query without compatible mode\");\n    }\n\n    public String getValidationQuery(String compatibleMode) {\n        if (compatibleMode != null) {\n            switch (compatibleMode.trim().toLowerCase()) {\n                case \"mysql\":\n                    return DataSourceConstants.MYSQL_VALIDATION_QUERY;\n                case \"oracle\":\n                    return DataSourceConstants.ORACLE_VALIDATION_QUERY;\n            }\n        }\n        throw new UnsupportedOperationException(\"Invalid compatible mode: \" + compatibleMode);\n\n    }\n\n    @Override\n    public String getJdbcUrl(ConnectionParam connectionParam) {\n        OceanBaseConnectionParam obConnectionParam = (OceanBaseConnectionParam) connectionParam;\n        String jdbcUrl = obConnectionParam.getJdbcUrl();\n        if (MapUtils.isNotEmpty(obConnectionParam.getOther())) {\n            return String.format(\"%s?%s&%s\", jdbcUrl, transformOther(obConnectionParam.getOther()), APPEND_PARAMS);\n        }\n        return String.format(\"%s?%s\", jdbcUrl, APPEND_PARAMS);\n    }\n\n    private String transformOther(Map<String, String> paramMap) {\n        if (MapUtils.isEmpty(paramMap)) {\n            return null;\n        }\n        Map<String, String> otherMap = new HashMap<>();","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oceanbase/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oceanbase/param/OceanBaseDataSourceProcessor.java#L107-L143","documentation":"The mode-aware getValidationQuery(compatibleMode) recognizes only 'mysql' and 'oracle' (case-insensitive); any other/blank value falls through to an UnsupportedOperationException with the offending mode. It means the OceanBase datasource's compatibleMode parameter holds an unrecognized value.","triggerScenarios":"createConnectionParams -> getValidationQuery(compatibleMode) when compatibleMode is null, empty, misspelled (e.g. 'MySQL ', 'mariadb', 'ob'), or not one of mysql/oracle.","commonSituations":"Typo in compatibleMode config; leaving the mode unset in an automated datasource-creation request; tooling writing 'oracleMode'/'mysqlMode' instead of 'oracle'/'mysql'.","solutions":["Set compatibleMode to exactly 'mysql' or 'oracle' (case-insensitive, surrounding spaces tolerated) in the OceanBase datasource params","Check for null/empty mode in the datasource creation request or saved config","If a new mode is needed, extend the switch in OceanBaseDataSourceProcessor.getValidationQuery"],"exampleFix":"// before\n{\"type\":\"OCEANBASE\",\"compatibleMode\":\"ob\"}          // invalid\n// after\n{\"type\":\"OCEANBASE\",\"compatibleMode\":\"mysql\"}","handlingStrategy":"validation","validationCode":"String m = obParam.getCompatibleMode();\nif (m == null || !(m.trim().equalsIgnoreCase(\"mysql\") || m.trim().equalsIgnoreCase(\"oracle\"))) {\n  throw new IllegalArgumentException(\"compatibleMode must be 'mysql' or 'oracle', got: \" + m);\n}","typeGuard":"boolean isKnownMode(String m) {\n  return m != null && (\"mysql\".equalsIgnoreCase(m.trim()) || \"oracle\".equalsIgnoreCase(m.trim()));\n}","tryCatchPattern":"try {\n  vq = processor.getValidationQuery(mode);\n} catch (UnsupportedOperationException e) {\n  if (e.getMessage() != null && e.getMessage().startsWith(\"Invalid compatible mode\")) {\n    vq = processor.getValidationQuery(\"mysql\"); // safe default for OceanBase MySQL-mode tenants\n  } else throw e;\n}","preventionTips":["Validate compatibleMode against an allowlist before saving datasources","Normalize values with trim().toLowerCase() at ingestion time","Document accepted values in API/UI"],"tags":["oceanbase","validation-query","invalid-config-value","enum"],"backgroundTag":"invalid-enum-value","analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}