pinpoint-apm/pinpoint · error · ResponseStatusException
e.getMessage()
Error message
e.getMessage()
What it means
AdminController.removeApplicationName wraps adminService.removeApplicationName in a broad try/catch and rethrows any exception as an HTTP 500 ResponseStatusException whose reason is the original exception's message. It is a generic passthrough: any failure while deleting the application's metadata from HBase surfaces as this 500, so the real cause must be read from the server log ('error while removing applicationName').
Solutions
- Read the Pinpoint Web server log entry 'error while removing applicationName' to find the underlying exception and fix that root cause
- Verify HBase connectivity and health from the Pinpoint Web host (zookeeper quorum, hbase client config)
- Confirm the applicationName exists and is spelled correctly (service param + applicationName parameter)
- Retry the delete after HBase recovers if it was a transient connection/timeout error
Example fix
// before — diagnosis only DELETE /admin/removeApplicationName?applicationName=MyApp -> 500: <underlying message> // after — check server log, fix HBase connectivity, then retry DELETE /admin/removeApplicationName?applicationName=MyApp -> 200 OK
Defensive patterns
Strategy: try-catch
Validate before calling
if (!applicationName || applicationName.trim() === '') {
throw new Error('applicationName is required');
} Try / catch
try {
await adminApi.removeApplicationName(applicationName);
} catch (e) {
if (e.status === 500) {
// e.message is the passthrough cause; check server log 'error while removing applicationName'
logAndAlert(`removeApplicationName failed for ${applicationName}: ${e.message}`);
}
throw e;
} Prevention
- Treat the 500 message as a passthrough and always correlate with the server log
- Check HBase health before running bulk admin deletions
- Verify the application exists before attempting removal
- Retry only after confirming the failure was transient (connectivity/timeout)
When it happens
Trigger: DELETE/POST /admin/removeApplicationName failing for any reason inside adminService.removeApplicationName — HBase connection failures, table/put/delete errors, timeouts, or an exception thrown while scanning and deleting the application's rows.
Common situations: HBase region server down or throttling; application name never existed and the service throws; permission problems on the HBase tables; network interruption between Pinpoint Web and HBase; very large application data causing the delete to time out.
Related errors
- Already closed
- Cannot add an existing column family :
- Cannot create an existing table :
- Cannot modify a non-existent table :
- ColumnFamily name must not be empty
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/e643a19bfee84928.
Report an issue: GitHub.
Appendix: source
Thrown at web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/AdminController.java:78
public AdminController(AdminService adminService,
ApplicationFactory applicationFactory,
ServiceModelResolver serviceModelResolver) {
this.adminService = Objects.requireNonNull(adminService, "adminService");
this.applicationFactory = Objects.requireNonNull(applicationFactory, "applicationFactory");
this.serviceModelResolver = Objects.requireNonNull(serviceModelResolver, "serviceModelResolver");
}
@Deprecated
@RequestMapping(value = "/removeApplicationName")
public String removeApplicationName(@RequestParam("applicationName") @NotBlank String applicationName) {
logger.info("Removing application - applicationName: [{}]", applicationName);
try {
this.adminService.removeApplicationName(applicationName);
return "OK";
} catch (Exception e) {
logger.error("error while removing applicationName", e);
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage());
}
}
@DeleteMapping(value = "/applications")
public String removeApplication(@ServiceParam ServiceName serviceName,
@RequestParam("applicationName") @NotBlank String applicationName,
@RequestParam(value = "serviceTypeCode", required = false) Integer serviceTypeCode,
@RequestParam(value = "serviceTypeName", required = false) String serviceTypeName) {
Service service = serviceModelResolver.getService(serviceName.getName());
Application application = getApplication(service, applicationName, serviceTypeCode, serviceTypeName);
if (application.getServiceType().equals(ServiceType.UNDEFINED)) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Undefined service type");
}
logger.info("Removing application - application: {}", application);
try {
this.adminService.removeApplication(application.getService(), application.getApplicationName(), application.getServiceTypeCode());
return "OK";
} catch (Exception e) {View on GitHub (pinned to 744c3d3075)