pentaho/pentaho-kettle · error · KettleException

Unable to get list of jobs in folder with id : +…

Error message

Unable to get list of jobs in folder with id : + id_directory

What it means

KettleFileRepository.getJobObjects() wraps any failure while listing job files in a repository directory in this KettleException. The file repository stores jobs as .kjb files on disk; the message includes the directory ObjectId whose listing failed. The original cause (IO error, VFS failure, invalid directory id) is attached as the cause.

Solutions

  1. Check the cause stack trace (getCause()) to see the underlying VFS/IO error
  2. Verify the base directory configured for the file repository exists and is readable
  3. Reload the repository directory tree and re-resolve the directory ObjectId instead of using a cached id
  4. Check filesystem permissions on the repository folder

Example fix

// before
List<RepositoryElementMetaInterface> jobs = repo.getJobObjects(staleDirId);
// after
RepositoryDirectoryInterface dir = repo.loadRepositoryDirectoryTree().findDirectory("/production");
if (dir != null) {
  List<RepositoryElementMetaInterface> jobs = repo.getJobObjects(dir.getObjectId());
}
Defensive patterns

Strategy: try-catch

Validate before calling

RepositoryDirectoryInterface dir = repo.loadRepositoryDirectoryTree().findDirectory("/production");
if (dir == null) throw new IllegalStateException("Directory does not exist; cannot list jobs");

Try / catch

try {
  List<RepositoryElementMetaInterface> jobs = repo.getJobObjects(dirId);
} catch (KettleException e) {
  log.error("Job listing failed for dir " + dirId, e); // inspect e.getCause()
}

Prevention

When it happens

Trigger: Calling getJobObjects(ObjectId id_directory) when the directory id does not resolve to a valid path on disk, the base directory is unreadable, or KettleVFS cannot list the folder's contents.

Common situations: Repository base directory moved, renamed, or deleted while the repository is open; incorrect base_directory configured in the repository connection settings; permissions changed on the folder; stale directory ObjectId passed after the tree changed.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/repository/filerep/KettleFileRepository.java:1076

          if ( !child.isHidden() || !repositoryMeta.isHidingHiddenFiles() ) {
            String name = child.getName().getBaseName();

            if ( name.endsWith( EXT_JOB ) ) {

              String jobName = name.substring( 0, name.length() - 4 );

              ObjectId id = new StringObjectId( calcObjectId( directory, jobName, EXT_JOB ) );
              Date date = new Date( child.getContent().getLastModifiedTime() );
              list.add( new RepositoryObject(
                id, jobName, directory, "-", date, RepositoryObjectType.JOB, "", false ) );
            }
          }
        }
      }

      return list;
    } catch ( Exception e ) {
      throw new KettleException( "Unable to get list of jobs in folder with id : " + id_directory, e );
    }
  }

  public int getNrSubDirectories( ObjectId id_directory ) throws KettleException {

    return 0;
  }

  @Override
  public SlaveServer loadSlaveServer( ObjectId id_slave_server, String versionName ) throws KettleException {
    try {
      return new SlaveServer( loadNodeFromXML( id_slave_server, SlaveServer.XML_TAG ) );
    } catch ( Exception e ) {
      throw new KettleException( "Unable to load slave server from the file repository", e );
    }
  }

  @Override

View on GitHub (pinned to f3058517a1)