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_MAPView on GitHub (pinned to e01f97c6db)
Solutions
- Remove or disable the config-publish code path when using Apollo.
- Publish Apollo config through Apollo's own portal/OpenAPI instead of seata's Configuration API.
- Switch config.type to a writable backend (nacos, consul, etcd) if programmatic publish is a hard requirement.
- 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
- Feature-flag config writes by backend type before calling publish APIs
- Manage Apollo config exclusively through its portal/OpenAPI
- When porting between config centers, audit every Configuration write call site
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
- not support atomic operation putConfigIfAbsent
- not support removeConfig
- Apollo configuration initialized failed,please check the val
- not support method:%s
- ERR_CONFIG
AI-assisted analysis of apache/incubator-seata@e01f97c6db (2026-08-14).
Data as JSON: /api/errors/26eab0f96856bab4.
Report an issue: GitHub.