apache/seatunnel · error · RedisConnectorException

CONFIG_VALIDATION_FAILED

CONFIG_VALIDATION_FAILED

Error message

PluginName: %s, PluginType: %s, Message: %s

What it means

RedisSinkWriter.createSerializationSchema builds the row serialization schema from the configured format. The default branch throws RedisConnectorException (SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED) when the format value is not one the Redis sink supports (e.g. json, text). It wraps the unsupported value in a standard PluginName/PluginType message.

Source

Thrown at seatunnel-connectors-v2/connector-redis/src/main/java/org/apache/seatunnel/connectors/seatunnel/redis/sink/RedisSinkWriter.java:324

                "UnSupport redisDataType,only support string,list,hash,set,zset");
    }

    private SerializationSchema createSerializationSchema(
            RedisParameters redisParameters, SeaTunnelRowType rowType) {

        RedisBaseOptions.Format format = redisParameters.getFormat();

        switch (format) {
            case JSON:
                return new JsonSerializationSchema(rowType);
            case TEXT:
                String fieldDelimiter = redisParameters.getFieldDelimiter();
                return TextSerializationSchema.builder()
                        .seaTunnelRowType(rowType)
                        .delimiter(fieldDelimiter)
                        .build();
            default:
                throw new RedisConnectorException(
                        SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
                        String.format(
                                "PluginName: %s, PluginType: %s, Message: %s",
                                RedisBaseOptions.CONNECTOR_IDENTITY,
                                PluginType.SINK,
                                "Unsupported format: " + format));
        }
    }

    private String normalizePlaceholders(String input) {
        if (input == null) {
            return input;
        }

        Matcher legacyMatcher = LEGACY_PLACEHOLDER_PATTERN.matcher(input);
        if (legacyMatcher.find()) {
            // Convert legacy format {fieldName} to ${fieldName}
            return legacyMatcher.replaceAll("\\$\\{$1\\}");

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Change format in the sink config to a supported value (json or text)
  2. Match the exact lowercase spelling used by RedisBaseOptions/format enum
  3. If a new format is needed, add a case in createSerializationSchema returning an appropriate SerializationSchema

Example fix

// before
format = "csv"
// after
format = "json"
Defensive patterns

Strategy: validation

Validate before calling

if (!Set.of("json","text").contains(format)) throw new IllegalArgumentException("Unsupported format: " + format);

Try / catch

try { new RedisSinkWriter(...); } catch (RedisConnectorException e) { if (e.getSeaTunnelApiErrorCode() == CONFIG_VALIDATION_FAILED) { /* fix format config */ } throw e; }

Prevention

When it happens

Trigger: Sink config sets format to an unsupported/misspelled value; createSerializationSchema is invoked during RedisSinkWriter construction or applySchemaChange and hits the switch's default branch.

Common situations: format = "csv" or "jsonl" pasted from another connector's config; case mismatch like "JSON"; config copied from Kafka sink with a format Redis doesn't implement.

Understand the failure class

Background: Config validation failed: what "invalid value for {key}" and settings-rejection errors mean across 19 open-source libraries — this error's family across 19 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/474acb6b23eb5932. Report an issue: GitHub.