apache/incubator-seata · warning · NotSupportYetException

not support putConfig

Error message

not support putConfig

What it means

ApolloConfiguration implements Configuration but Apollo is a read-only config center from seata's perspective — publish operations are not implemented. putConfig therefore throws NotSupportYetException('not support putConfig') instead of silently pretending success. This is a deliberate capability declaration, not a bug.

Source

Thrown at config/seata-config-apollo/src/main/java/org/apache/seata/config/apollo/ApolloConfiguration.java:137

            }
        }
        return instance;
    }

    @Override
    public String getLatestConfig(String dataId, String defaultValue, long timeoutMills) {
        ConfigFuture configFuture =
                new ConfigFuture(dataId, defaultValue, ConfigFuture.ConfigOperation.GET, timeoutMills);
        configOperateExecutor.submit(() -> {
            String result = config.getProperty(dataId, defaultValue);
            configFuture.setResult(result);
        });
        return (String) configFuture.get();
    }

    @Override
    public boolean putConfig(String dataId, String content, long timeoutMills) {
        throw new NotSupportYetException("not support putConfig");
    }

    @Override
    public boolean putConfigIfAbsent(String dataId, String content, long timeoutMills) {
        throw new NotSupportYetException("not support atomic operation putConfigIfAbsent");
    }

    @Override
    public boolean removeConfig(String dataId, long timeoutMills) {
        throw new NotSupportYetException("not support removeConfig");
    }

    @Override
    public void addConfigListener(String dataId, ConfigurationChangeListener listener) {
        if (StringUtils.isBlank(dataId) || listener == null) {
            return;
        }
        LISTENER_SERVICE_MAP

View on GitHub (pinned to e01f97c6db)

Solutions

  1. Remove or disable the config-publish code path when using Apollo.
  2. Publish Apollo config through Apollo's own portal/OpenAPI instead of seata's Configuration API.
  3. Switch config.type to a writable backend (nacos, consul, etcd) if programmatic publish is a hard requirement.
  4. Catch NotSupportYetException and log a clear message if the write is optional.

Example fix

// before
configuration.putConfig("service.vgroupMapping.myTx", "default", 5000);

// after
try {
    configuration.putConfig("service.vgroupMapping.myTx", "default", 5000);
} catch (NotSupportYetException e) {
    LOGGER.warn("Config publish unsupported for {}; use the Apollo portal", configuration.getTypeName());
}
Defensive patterns

Strategy: try-catch

Validate before calling

"apollo".equals(configuration.getTypeName()) // skip publish when true

Try / catch

try {
    configuration.putConfig(dataId, content, timeoutMills);
} catch (NotSupportYetException e) {
    LOGGER.warn("config publish not supported by backend {}; use its native tooling", configuration.getTypeName());
}

Prevention

When it happens

Trigger: Calling Configuration instance putConfig(dataId, content, timeoutMills) when config.type=apollo; code that generically publishes config at runtime (e.g. tooling that works against Nacos/Consul configs) run against Apollo; ConfigurationFactory building an Apollo-backed configuration and some component attempting a write.

Common situations: Migrating seata config backend from Nacos (which supports publish) to Apollo without auditing write paths; scripts or admin tools that push config to all environments; seata-server startup tasks that attempt to write config in some flows.

Related errors


AI-assisted analysis of apache/incubator-seata@e01f97c6db (2026-08-14). Data as JSON: /api/errors/26eab0f96856bab4. Report an issue: GitHub.