apolloconfig/apollo · error · NotFoundException
server config not found for key:%s, cluster:%s
Error message
server config not found for key:%s, cluster:%s
What it means
Thrown as NotFoundException (HTTP 404) by ServerConfigService.deleteConfig when no ServerConfig row matches the given (key, cluster). Server configs are stored per key+cluster; deleting a nonexistent combination yields 404.
Source
Thrown at apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ServerConfigService.java:73
if (Objects.isNull(storedConfig)) {// create
serverConfig.setId(0L);// 为空,设置ID 为0,jpa执行新增操作
return serverConfigRepository.save(serverConfig);
}
// update
storedConfig.setComment(serverConfig.getComment());
storedConfig.setDataChangeLastModifiedBy(serverConfig.getDataChangeLastModifiedBy());
storedConfig.setValue(serverConfig.getValue());
return serverConfigRepository.save(storedConfig);
}
@Transactional
public void deleteConfig(String key, String cluster, String operator) {
ServerConfig storedConfig = serverConfigRepository.findTopByKeyAndCluster(key, cluster);
if (Objects.isNull(storedConfig)) {
throw new NotFoundException("server config not found for key:%s, cluster:%s", key, cluster);
}
storedConfig.setDeleted(true);
storedConfig.setDataChangeLastModifiedBy(operator);
serverConfigRepository.save(storedConfig);
}
}
View on GitHub (pinned to d95fc18d11)
Solutions
- Verify the config exists for (key, cluster) before deleting.
- Make deletion idempotent: treat 404 as success in cleanup tooling.
- Check the exact key spelling and cluster name against the ServerConfig table.
Example fix
// before
serverConfigService.deleteConfig(key, cluster, operator); // 404 if missing
// after
ServerConfig cfg = serverConfigRepository.findTopByKeyAndCluster(key, cluster);
if (cfg != null) {
serverConfigService.deleteConfig(key, cluster, operator);
} Defensive patterns
Strategy: validation
Validate before calling
ServerConfig cfg = serverConfigRepository.findTopByKeyAndCluster(key, cluster);
if (cfg != null) {
serverConfigService.deleteConfig(key, cluster, operator);
} Try / catch
try {
serverConfigService.deleteConfig(key, cluster, operator);
} catch (NotFoundException e) {
if (e.getMessage().contains("server config not found")) {
// already absent — treat as success for idempotent cleanup
} else throw e;
} Prevention
- Make server-config deletion idempotent.
- Treat 404 as success in cleanup scripts.
When it happens
Trigger: Calling deleteConfig(key, cluster, operator) for a server config key that was never created, was already soft-deleted, or whose cluster name is wrong.
Common situations: Deleting a server config that was already deleted (deleted=true rows are excluded from findTopByKeyAndCluster); typo in key/cluster; cleanup scripts targeting stale keys.
Related errors
- item not exist. ID:%s
- server config not found for key:%s
- Parent namespace not found
- Namespace's branch not exist. AppId = %s, ClusterName = %s,
- AccessKeys count limit exceeded
AI-assisted analysis of apolloconfig/apollo@d95fc18d11 (2026-08-14).
Data as JSON: /api/errors/ec6d4fe3c2547994.
Report an issue: GitHub.