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
- 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
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
- Verify /etc/metastore exists after server install/migration
- Ensure the connected user can read the /etc folder
- Connect to the correct repository/tenant
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
- AbsSecurityProvider.ERROR_0002_UNABLE_TO_ACCESS_IS_ALLOWED
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AddSequenceMeta.Exception.UnableToSaveStepInfo
- Error loading job details
- File is currently locked by another user for editing
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)