{"record":{"id":"de1e69392d108a39","repo":"pentaho/pentaho-kettle","slug":"metastore-folder-path-folder-is-not-available","errorCode":null,"errorMessage":"${METASTORE_FOLDER_PATH} folder is not available","messagePattern":"(.+?) folder is not available","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/metastore/PurRepositoryMetaStore.java","lineNumber":75,"sourceCode":"  protected static final String PROP_ELEMENT_TYPE_DESCRIPTION = \"element_type_description\"; //$NON-NLS-1$\n\n  protected static final String METASTORE_FOLDER_PATH = \"/etc/metastore\";\n\n  protected PurRepository repository;\n  protected IUnifiedRepository pur;\n\n  /**\n   * This is the folder where the namespaces folders are stored\n   */\n  protected RepositoryFile namespacesFolder;\n\n  public PurRepositoryMetaStore( PurRepository repository ) throws KettleException {\n    this.repository = repository;\n    this.pur = repository.getUnderlyingRepository();\n\n    namespacesFolder = pur.getFile( METASTORE_FOLDER_PATH );\n    if ( namespacesFolder == null ) {\n      throw new KettleException( METASTORE_FOLDER_PATH + \" folder is not available\" );\n    }\n  }\n\n  @Override\n  public String getName() {\n    return repository.getRepositoryMeta().getName();\n  }\n\n  @Override\n  public String getDescription() {\n    return repository.getRepositoryMeta().getDescription();\n  }\n\n  // The namespaces\n\n  @Override\n  public void createNamespace( String namespace ) throws MetaStoreException {\n    if ( namespaceExists( namespace ) ) {","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/metastore/PurRepositoryMetaStore.java#L57-L93","documentation":"Thrown from the PurRepositoryMetaStore constructor when pur.getFile(METASTORE_FOLDER_PATH) returns null, i.e. the repository does not contain (or the user cannot see) the '/etc/metastore' folder used to back the meta store. Without this folder the meta store cannot operate, so construction fails fast with a KettleException.","triggerScenarios":"Constructing PurRepositoryMetaStore against a PUR repository whose /etc/metastore folder is missing (never initialized on the server), was deleted, or is not visible to the connected user due to repository permissions.","commonSituations":"Fresh Pentaho server without metastore content initialized; user lacking read access to /etc; repository connected to the wrong server/tenant; server content migrated incompletely.","solutions":["Ensure /etc/metastore exists on the BA Server (re-run repository initialization or create the folder)","Check the connected user has permission to read /etc/metastore","Verify you're connected to the intended repository/tenant","Create the folder programmatically if your server version supports it"],"exampleFix":"// before\nIMetaStore metaStore = new PurRepositoryMetaStore( repository );\n// after\nif ( repository.getUnderlyingRepository().getFile( \"/etc/metastore\" ) != null ) {\n  IMetaStore metaStore = new PurRepositoryMetaStore( repository );\n} else {\n  logError( \"/etc/metastore missing on server\" );\n}","handlingStrategy":"validation","validationCode":"if ( repository.getUnderlyingRepository().getFile( \"/etc/metastore\" ) == null ) {\n  throw new KettleException( \"Run repository initialization: /etc/metastore is missing\" );\n}","typeGuard":null,"tryCatchPattern":"try { IMetaStore ms = new PurRepositoryMetaStore( repository ); } catch ( KettleException e ) { logError( \"Metastore folder unavailable on server\", e ); }","preventionTips":["Verify /etc/metastore exists after server install/migration","Ensure the connected user can read the /etc folder","Connect to the correct repository/tenant"],"tags":["kettle","pentaho","metastore","repository"],"backgroundTag":"directory-not-found","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"}