pentaho/pentaho-kettle · error · KettleException
Unable to run clean-up on slave server '
Error message
Unable to run clean-up on slave server '
What it means
Thrown by Trans's slave cleanup helper (executed during clustered run cleanup): the call to SlaveServer.cleanupTransformation(name, carteObjectId) succeeded over HTTP but returned a WebResult that is not 'OK', meaning the slave refused or failed the cleanup for that transformation.
Solutions
- Read the appended webResult.getMessage() to see the slave's cleanup error and the slave's carte.log.
- Verify the transformation was actually prepared/started on that slave (matching name and carte object id).
- If the slave was restarted, the transformation is already gone; treat the cleanup miss as benign or restart Carte cleanly.
- Check the slave has write permissions to its temp/internal directories.
- Re-run the full clustered execution to get consistent ids across master and slaves.
Example fix
// before: blindly cleaning up a possibly-dead slave slaveServer.cleanupTransformation(transName, carteObjectId); // after: verify registration first SlaveServerTransStatus st = slaveServer.getTransStatus(transName, carteObjectId, 0); if (st != null) slaveServer.cleanupTransformation(transName, carteObjectId);
Defensive patterns
Strategy: try-catch
Validate before calling
// only clean up a transformation that still exists on the slave SlaveServerTransStatus st = slaveServer.getTransStatus(transName, carteObjectId, 0); boolean exists = st != null;
Try / catch
try {
trans.cleanup(); // conceptual guard around clustered cleanup path
} catch (KettleException e) {
if (e.getMessage().contains("Unable to run clean-up on slave server")) {
log.warn("Slave cleanup failed (id may be gone): " + e.getMessage());
// treat as non-fatal: transformation likely already removed
} else throw e;
} Prevention
- Check transformation registration on the slave before cleanup.
- Treat cleanup misses after a slave restart as benign.
- Ensure the slave's temp directories are writable.
- Re-run full executions to keep ids consistent across nodes.
When it happens
Trigger: During cleanup of a clustered transformation, a slave's cleanup servlet responds non-OK: the transformation name/id is not registered on the slave, or the slave's internal cleanup (removing logging entries, temp files,_kettle internal files) failed.
Common situations: Carte restarted on the slave so the transformation id no longer exists; cleanup invoked twice; permissions problems on the slave removing temp/transaction files; name mismatch because TransMeta was renamed after registration.
Related errors
- Unexpected error contacting slave server '
- An error occurred while preparing the execution of a slave…
- An error occurred while starting the execution of a slave…
- A server socket allocation always has to accompanied by a…
- A server socket allocation always has to accompanied by a…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/dda5c1a98ae71611.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/Trans.java:4219
return errors;
}
/**
* Cleanup the slave server as part of a clustered transformation.
*
* @param transSplitter the TransSplitter object
* @param slaveServer the slave server
* @param slaveTransMeta the slave transformation meta-data
* @throws KettleException if any errors occur during cleanup
*/
public static void cleanupSlaveServer( TransSplitter transSplitter, SlaveServer slaveServer,
TransMeta slaveTransMeta ) throws KettleException {
String transName = slaveTransMeta.getName();
try {
String carteObjectId = transSplitter.getCarteObjectMap().get( slaveTransMeta );
WebResult webResult = slaveServer.cleanupTransformation( transName, carteObjectId );
if ( !WebResult.STRING_OK.equals( webResult.getResult() ) ) {
throw new KettleException( "Unable to run clean-up on slave server '" + slaveServer + "' for transformation '"
+ transName + "' : " + webResult.getMessage() );
}
} catch ( Exception e ) {
throw new KettleException( "Unexpected error contacting slave server '" + slaveServer
+ "' to clear up transformation '" + transName + "'", e );
}
}
/**
* Gets the clustered transformation result.
*
* @param log the log channel interface
* @param transSplitter the TransSplitter object
* @param parentJob the parent job
* @return the clustered transformation result
*/
public static final Result getClusteredTransformationResult( LogChannelInterface log, TransSplitter transSplitter,
Job parentJob ) {View on GitHub (pinned to f3058517a1)