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

  1. Verify the config exists for (key, cluster) before deleting.
  2. Make deletion idempotent: treat 404 as success in cleanup tooling.
  3. 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

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


AI-assisted analysis of apolloconfig/apollo@d95fc18d11 (2026-08-14). Data as JSON: /api/errors/ec6d4fe3c2547994. Report an issue: GitHub.