{"record":{"id":"4fa709f75f8c5cbd","repo":"pentaho/pentaho-kettle","slug":"unable-to-get-root-object-ids-for-extension-extension","errorCode":null,"errorMessage":"Unable to get root object ids for extension [ + extension + ]","messagePattern":"Unable to get root object ids for extension \\[ \\+ extension \\+ \\]","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/repository/filerep/KettleFileRepository.java","lineNumber":674,"sourceCode":"\n      String folderName = repositoryMeta.getBaseDirectory();\n      FileObject folder = KettleVFS.getInstance( DefaultBowl.getInstance() ).getFileObject( folderName );\n\n      for ( FileObject child : folder.getChildren() ) {\n        if ( child.getType().equals( FileType.FILE ) ) {\n          if ( !child.isHidden() || !repositoryMeta.isHidingHiddenFiles() ) {\n            String name = child.getName().getBaseName();\n\n            if ( name.endsWith( extension ) ) {\n              list.add( new StringObjectId( name ) );\n            }\n          }\n        }\n      }\n\n      return list.toArray( new ObjectId[list.size()] );\n    } catch ( Exception e ) {\n      throw new KettleException( \"Unable to get root object ids for extension [\" + extension + \"]\", e );\n    }\n  }\n\n  @Override\n  public ObjectId[] getSlaveIDs( boolean includeDeleted ) throws KettleException {\n    return getRootObjectIDs( EXT_SLAVE_SERVER );\n  }\n\n  public ObjectId[] getClusterSlaveIDs( ObjectId id_cluster_schema ) throws KettleException {\n    return new ObjectId[] {};\n  }\n\n  @Override\n  public String[] getSlaveNames( boolean includeDeleted ) throws KettleException {\n    return convertRootIDsToNames( getSlaveIDs( false ) );\n  }\n\n  @Override","sourceCodeStart":656,"sourceCodeEnd":692,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/repository/filerep/KettleFileRepository.java#L656-L692","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Confirm the repository base directory exists and is readable by the process","Fix filesystem/VFS permissions or remount the repository location","Check the chained cause for the concrete IOException and address it","Reinitialize the repository connection so the root path is re-resolved"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"File base = new File(repoBaseDirectory);\nif (!base.isDirectory() || !base.canRead()) throw new KettleException(\"Repository root missing or unreadable: \" + repoBaseDirectory);","typeGuard":null,"tryCatchPattern":"try {\n  ObjectId[] ids = repository.getSlaveIDs(false);\n} catch (KettleException e) {\n  logger.error(\"Root enumeration failed: \" + e.getCause(), e);\n  // retry after fixing repo root or return empty with warning\n}","preventionTips":["Ensure the repository base directory exists and is readable before connecting","Avoid moving the repository root while clients are connected","Monitor disk/mount health for network-hosted repository locations"],"tags":["file-repository","kettle","root-objects","io-exception"],"backgroundTag":"file-read-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}