apache/dolphinscheduler · error · UnsupportedOperationException
Invalid compatible mode: " + compatibleMode
Error message
Invalid compatible mode: " + compatibleMode
What it means
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.
Source
Thrown at dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oceanbase/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oceanbase/param/OceanBaseDataSourceProcessor.java:125
public String getDatasourceDriver() {
return DataSourceConstants.COM_OCEANBASE_JDBC_DRIVER;
}
@Override
public String getValidationQuery() {
throw new UnsupportedOperationException("Can't get validation query without compatible mode");
}
public String getValidationQuery(String compatibleMode) {
if (compatibleMode != null) {
switch (compatibleMode.trim().toLowerCase()) {
case "mysql":
return DataSourceConstants.MYSQL_VALIDATION_QUERY;
case "oracle":
return DataSourceConstants.ORACLE_VALIDATION_QUERY;
}
}
throw new UnsupportedOperationException("Invalid compatible mode: " + compatibleMode);
}
@Override
public String getJdbcUrl(ConnectionParam connectionParam) {
OceanBaseConnectionParam obConnectionParam = (OceanBaseConnectionParam) connectionParam;
String jdbcUrl = obConnectionParam.getJdbcUrl();
if (MapUtils.isNotEmpty(obConnectionParam.getOther())) {
return String.format("%s?%s&%s", jdbcUrl, transformOther(obConnectionParam.getOther()), APPEND_PARAMS);
}
return String.format("%s?%s", jdbcUrl, APPEND_PARAMS);
}
private String transformOther(Map<String, String> paramMap) {
if (MapUtils.isEmpty(paramMap)) {
return null;
}
Map<String, String> otherMap = new HashMap<>();View on GitHub (pinned to 02eac45a1b)
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
Example fix
// before
{"type":"OCEANBASE","compatibleMode":"ob"} // invalid
// after
{"type":"OCEANBASE","compatibleMode":"mysql"} Defensive patterns
Strategy: validation
Validate before calling
String m = obParam.getCompatibleMode();
if (m == null || !(m.trim().equalsIgnoreCase("mysql") || m.trim().equalsIgnoreCase("oracle"))) {
throw new IllegalArgumentException("compatibleMode must be 'mysql' or 'oracle', got: " + m);
} Type guard
boolean isKnownMode(String m) {
return m != null && ("mysql".equalsIgnoreCase(m.trim()) || "oracle".equalsIgnoreCase(m.trim()));
} Try / catch
try {
vq = processor.getValidationQuery(mode);
} catch (UnsupportedOperationException e) {
if (e.getMessage() != null && e.getMessage().startsWith("Invalid compatible mode")) {
vq = processor.getValidationQuery("mysql"); // safe default for OceanBase MySQL-mode tenants
} else throw e;
} Prevention
- Validate compatibleMode against an allowlist before saving datasources
- Normalize values with trim().toLowerCase() at ingestion time
- Document accepted values in API/UI
When it happens
Trigger: createConnectionParams -> getValidationQuery(compatibleMode) when compatibleMode is null, empty, misspelled (e.g. 'MySQL ', 'mariadb', 'ob'), or not one of mysql/oracle.
Common situations: Typo in compatibleMode config; leaving the mode unset in an automated datasource-creation request; tooling writing 'oracleMode'/'mysqlMode' instead of 'oracle'/'mysql'.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- Can't get validation query without compatible mode
- requestType is not a valid value
- contentType is not a valid value
- http request method %s not supported
- The execType: {execType} is invalid
AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06).
Data as JSON: /api/errors/2a248b2df4a5154e.
Report an issue: GitHub.