pentaho/pentaho-kettle · error · KettleException
Error while executing \'" + commandLine + "\'. Exit value =…
Error message
Error while executing \'" + commandLine + "\'. Exit value = " + gpLoadExitVal
What it means
If execute() throws a generic (non-Kettle) Exception while running or waiting on the gpload process, it is rethrown as a KettleException containing the literal command line and the captured exit value. The original exception message is deliberately discarded because it may contain the gpload password.
Solutions
- Inspect the full Kettle stack trace and step log (stderr capture) for the suppressed root cause.
- Run the printed commandLine manually as the Pentaho user to reproduce the failure.
- Ensure the gpload binary is executable (chmod +x) and present via PATH/GPLOAD_HOME.
- Decode the exit value in the message: 127 = command not found, 126 = not executable.
Example fix
// before /usr/local/bin/gpload // lacks execute permission // after chmod +x /usr/local/bin/gpload
Defensive patterns
Strategy: try-catch
Validate before calling
File bin = new File(gploadPath);
if (!bin.canExecute()) {
throw new IllegalStateException("gpload binary not executable: " + gploadPath);
} Try / catch
try {
execute();
} catch (KettleException ke) {
// message hides the original cause (may contain password); inspect full stack trace
logError("gpload command failed: " + ke.getMessage(), ke);
throw ke;
} Prevention
- chmod +x the gpload binary and verify PATH/GPLOAD_HOME for the service user
- Never assume the original exception text is safe to log (password masking)
- Reproduce failures by running the printed commandLine from a shell
When it happens
Trigger: Any RuntimeException/IOException during gpload execution (e.g., IOException spawning the process or stream errors) with gpLoadExitVal set; the raw message is replaced by this command-line/exit-value text.
Common situations: gpload binary absent or not executable (process spawn failure); environment issues on the executing host; interrupted waits.
Related errors
- Error while closing output
- exceptionMessage
- GPLoad.Exception.DirectoryDoesNotExist
- GPLoad.Exception.GPLoadCommandBuild
- GPLoad.Execption.FileDoesNotExist
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/07f82dbd4288684b.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoad.java:560
StreamLogger outputLogger = new StreamLogger( gploadProcess.getInputStream(), "OUTPUT" );
// kick them off
errorLogger.start();
outputLogger.start();
if ( wait ) {
// any error???
gpLoadExitVal = gploadProcess.waitFor();
logBasic( BaseMessages.getString( PKG, "GPLoad.Log.ExitValuePsqlPath", "" + gpLoadExitVal ) );
if ( gpLoadExitVal != -0 ) {
throw new KettleException( BaseMessages.getString( PKG, "GPLoad.Log.ExitValuePsqlPath", "" + gpLoadExitVal ) );
}
}
} catch ( KettleException ke ) {
throw ke;
} catch ( Exception ex ) {
// Don't throw the message upwards, the message contains the password.
throw new KettleException( "Error while executing \'" + commandLine + "\'. Exit value = " + gpLoadExitVal );
}
return true;
}
public boolean processRow( StepMetaInterface smi, StepDataInterface sdi ) throws KettleException {
meta = (GPLoadMeta) smi;
data = (GPLoadData) sdi;
try {
Object[] r = getRow(); // Get row from input rowset & set row busy!
// no more input to be expected...
if ( r == null ) {
setOutputDone();
if ( !preview ) {
if ( output != null ) {
// Close the outputView on GitHub (pinned to f3058517a1)