pentaho/pentaho-kettle · error · KettleException

Unable to get root object ids for extension [ + extension +…

Error message

Unable to get root object ids for extension [ + extension + ]

What it means

getRootObjectIDs(extension) in KettleFileRepository scans the repository root for files with the given extension and wraps any exception into this KettleException with the message 'Unable to get root object ids for extension [...]'. It indicates the repository could not enumerate root-level objects (directory read, VFS resolution, or file filtering failed); the underlying exception is the cause.

Solutions

  1. Confirm the repository base directory exists and is readable by the process
  2. Fix filesystem/VFS permissions or remount the repository location
  3. Check the chained cause for the concrete IOException and address it
  4. Reinitialize the repository connection so the root path is re-resolved
Defensive patterns

Strategy: try-catch

Validate before calling

File base = new File(repoBaseDirectory);
if (!base.isDirectory() || !base.canRead()) throw new KettleException("Repository root missing or unreadable: " + repoBaseDirectory);

Try / catch

try {
  ObjectId[] ids = repository.getSlaveIDs(false);
} catch (KettleException e) {
  logger.error("Root enumeration failed: " + e.getCause(), e);
  // retry after fixing repo root or return empty with warning
}

Prevention

When it happens

Trigger: Calling getRootObjectIDs / getSlaveIDs / any get*IDs wrapper when the repository root directory is unreadable, does not exist, or a VFS/IO error occurs while iterating root files for the given extension.

Common situations: Repository base directory missing or moved after configuration; permission errors on the repo root; network-mounted repository location temporarily unavailable; corrupted directory entries preventing enumeration.

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/4fa709f75f8c5cbd. Report an issue: GitHub.

Appendix: source

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

      String folderName = repositoryMeta.getBaseDirectory();
      FileObject folder = KettleVFS.getInstance( DefaultBowl.getInstance() ).getFileObject( folderName );

      for ( FileObject child : folder.getChildren() ) {
        if ( child.getType().equals( FileType.FILE ) ) {
          if ( !child.isHidden() || !repositoryMeta.isHidingHiddenFiles() ) {
            String name = child.getName().getBaseName();

            if ( name.endsWith( extension ) ) {
              list.add( new StringObjectId( name ) );
            }
          }
        }
      }

      return list.toArray( new ObjectId[list.size()] );
    } catch ( Exception e ) {
      throw new KettleException( "Unable to get root object ids for extension [" + extension + "]", e );
    }
  }

  @Override
  public ObjectId[] getSlaveIDs( boolean includeDeleted ) throws KettleException {
    return getRootObjectIDs( EXT_SLAVE_SERVER );
  }

  public ObjectId[] getClusterSlaveIDs( ObjectId id_cluster_schema ) throws KettleException {
    return new ObjectId[] {};
  }

  @Override
  public String[] getSlaveNames( boolean includeDeleted ) throws KettleException {
    return convertRootIDsToNames( getSlaveIDs( false ) );
  }

  @Override

View on GitHub (pinned to f3058517a1)