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

  1. Inspect the full Kettle stack trace and step log (stderr capture) for the suppressed root cause.
  2. Run the printed commandLine manually as the Pentaho user to reproduce the failure.
  3. Ensure the gpload binary is executable (chmod +x) and present via PATH/GPLOAD_HOME.
  4. 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

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


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 output

View on GitHub (pinned to f3058517a1)