pentaho/pentaho-kettle · error · KettleException

folder is not available

Error message

${METASTORE_FOLDER_PATH} folder is not available

What it means

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.

Solutions

  1. Ensure /etc/metastore exists on the BA Server (re-run repository initialization or create the folder)
  2. Check the connected user has permission to read /etc/metastore
  3. Verify you're connected to the intended repository/tenant
  4. Create the folder programmatically if your server version supports it

Example fix

// before
IMetaStore metaStore = new PurRepositoryMetaStore( repository );
// after
if ( repository.getUnderlyingRepository().getFile( "/etc/metastore" ) != null ) {
  IMetaStore metaStore = new PurRepositoryMetaStore( repository );
} else {
  logError( "/etc/metastore missing on server" );
}
Defensive patterns

Strategy: validation

Validate before calling

if ( repository.getUnderlyingRepository().getFile( "/etc/metastore" ) == null ) {
  throw new KettleException( "Run repository initialization: /etc/metastore is missing" );
}

Try / catch

try { IMetaStore ms = new PurRepositoryMetaStore( repository ); } catch ( KettleException e ) { logError( "Metastore folder unavailable on server", e ); }

Prevention

When it happens

Trigger: 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.

Common situations: Fresh Pentaho server without metastore content initialized; user lacking read access to /etc; repository connected to the wrong server/tenant; server content migrated incompletely.

Related errors


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

Appendix: source

Thrown at plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/metastore/PurRepositoryMetaStore.java:75

  protected static final String PROP_ELEMENT_TYPE_DESCRIPTION = "element_type_description"; //$NON-NLS-1$

  protected static final String METASTORE_FOLDER_PATH = "/etc/metastore";

  protected PurRepository repository;
  protected IUnifiedRepository pur;

  /**
   * This is the folder where the namespaces folders are stored
   */
  protected RepositoryFile namespacesFolder;

  public PurRepositoryMetaStore( PurRepository repository ) throws KettleException {
    this.repository = repository;
    this.pur = repository.getUnderlyingRepository();

    namespacesFolder = pur.getFile( METASTORE_FOLDER_PATH );
    if ( namespacesFolder == null ) {
      throw new KettleException( METASTORE_FOLDER_PATH + " folder is not available" );
    }
  }

  @Override
  public String getName() {
    return repository.getRepositoryMeta().getName();
  }

  @Override
  public String getDescription() {
    return repository.getRepositoryMeta().getDescription();
  }

  // The namespaces

  @Override
  public void createNamespace( String namespace ) throws MetaStoreException {
    if ( namespaceExists( namespace ) ) {

View on GitHub (pinned to f3058517a1)