pentaho/pentaho-kettle · error · KettleException

GPLoad.Execption.FileDoesNotExist

Error message

GPLoad.Execption.FileDoesNotExist

What it means

When checkExistenceOfFile is true, getPath() resolves the path through KettleVFS and throws this KettleException (message key GPLoad.Execption.FileDoesNotExist) if the file does not exist on the filesystem. The message includes the resolved path.

Solutions

  1. Install the Greenplum gpload client (and psql) on the machine running the transformation, or correct the path to it.
  2. Verify the path exists and is accessible from the account running Pentaho.
  3. If running clustered, ensure the utility is present on every node or disable clustering for this step.

Example fix

// before
String gploadPath = "/opt/gpload/bin/gpload"; // binary not installed
// after
String gploadPath = "/usr/local/greenplum-db/bin/gpload"; // installed client path
Defensive patterns

Strategy: validation

Validate before calling

File f = new File("/usr/local/greenplum-db/bin/gpload");
if (!f.exists() || !f.canExecute()) {
  throw new IllegalStateException("gpload client missing or not executable at " + f);
}

Try / catch

try {
  execute();
} catch (KettleException ke) {
  if (ke.getMessage().contains("FileDoesNotExist")) {
    logError("gpload binary not found: install Greenplum client tools", ke);
  }
  throw ke;
}

Prevention

When it happens

Trigger: createCommandLine calls getPath for the gpload executable with checkExistenceOfFile=true and fileObject.exists() returns false.

Common situations: gpload client utility not installed on the Pentaho server host; typo in the path; clustered execution where the binary exists on only one node; file deleted between configuration and execution.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/fb004bef86e02e30. Report an issue: GitHub.

Appendix: source

Thrown at plugins/gpload/core/src/main/java/org/pentaho/di/trans/steps/gpload/GPLoad.java:462

    throws KettleException {

    // Make sure the path is not empty
    if ( Utils.isEmpty( pathToFile ) ) {
      throw new KettleException( exceptionMessage );
    }

    // make sure the variable substitution is not empty
    pathToFile = environmentSubstitute( pathToFile ).trim();
    if ( Utils.isEmpty( pathToFile ) ) {
      throw new KettleException( exceptionMessage );
    }

    FileObject fileObject = KettleVFS.getInstance( getTransMeta().getBowl() ).getFileObject( pathToFile, getTransMeta() );
    try {
      // we either check the existence of the file
      if ( checkExistenceOfFile ) {
        if ( !fileObject.exists() ) {
          throw new KettleException( BaseMessages.getString( PKG, "GPLoad.Execption.FileDoesNotExist", pathToFile ) );
        }
      } else { // if the file does not have to exist, the parent, or source folder, does.
        FileObject parentFolder = fileObject.getParent();
        if ( parentFolder.exists() ) {
          return KettleVFS.getFilename( fileObject );
        } else {
          throw new KettleException( BaseMessages.getString( PKG, "GPLoad.Exception.DirectoryDoesNotExist",
              parentFolder.getURL().getPath() ) );
        }

      }

      // if Windows is the OS
      if ( Const.getOS().startsWith( "Windows" ) ) {
        return addQuotes( pathToFile );
      } else {
        return KettleVFS.getFilename( fileObject );
      }

View on GitHub (pinned to f3058517a1)