pentaho/pentaho-kettle · error · RuntimeException

Unable to verify creation of element

Error message

Unable to verify creation of element '${element.name}' in folder: ${elementTypeFolder.path}

What it means

Thrown by PurRepositoryMetaStore.createElement() as a plain RuntimeException when, after pur.createFile(...) reports success, pur.getFileById(createdFile.getId()) cannot find the new element file — i.e. creation could not be verified. It signals an inconsistent or unsupported repository response.

Solutions

  1. Check the cause/state via server logs for the createFile operation
  2. Verify the user has read permissions on the parent element-type folder
  3. Retry creation; check whether the file exists despite the exception
  4. Check server clustering/replication health
  5. Check PDI/Pentaho server version compatibility

Example fix

// before
metaStore.createElement( ns, elementType, element );
// after
try {
  metaStore.createElement( ns, elementType, element );
} catch ( RuntimeException e ) {
  if ( metaStore.getElementByName( ns, elementType, element.getName() ) == null ) {
    throw e; // genuinely not created — retry or report
  }
  logBasic( "Element created despite verification warning" );
}
Defensive patterns

Strategy: fallback

Validate before calling

IMetaStoreElementType type = metaStore.getElementTypeByName( ns, element.getElementTypeId() );
if ( type == null ) { throw new IllegalStateException( "Element type folder unavailable" ); }

Try / catch

try { metaStore.createElement( ns, type, element ); } catch ( RuntimeException e ) { if ( metaStore.getElementByName( ns, type, element.getName() ) == null ) { throw e; } logBasic( "Created despite verification failure" ); }

Prevention

When it happens

Trigger: Server accepts createFile but the file is immediately invisible: eventual-consistency/replication lag, permission filtering hides the new file, or a server bug/failed write returns a non-persisted id.

Common situations: Clustered BA Server with replication lag; user lacking read permission on the newly created file; server-side storage errors masked by a successful response.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


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

Appendix: source

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

  public void createElement( String namespace, IMetaStoreElementType elementType, IMetaStoreElement element )
    throws MetaStoreException {
    RepositoryFile elementTypeFolder = validateElementTypeRepositoryFolder( namespace, elementType );

    RepositoryFile elementFile =
        new RepositoryFile.Builder( PurRepository.checkAndSanitize( element.getName() ) ).title( element.getName() )
            .versioned( false ).build();

    DataNode elementDataNode = new DataNode( PurRepository.checkAndSanitize( element.getName() ) );
    elementToDataNode( element, elementDataNode );

    RepositoryFile createdFile =
        pur.createFile( elementTypeFolder.getId(), elementFile, new NodeRepositoryFileData( elementDataNode ), null );
    element.setId( createdFile.getId().toString() );

    // Verify existence.
    if ( pur.getFileById( createdFile.getId() ) == null ) {
      throw new RuntimeException( "Unable to verify creation of element '" + element.getName() + "' in folder: "
          + elementTypeFolder.getPath() );
    }
  }

  protected void elementToDataNode( IMetaStoreElement element, DataNode elementDataNode ) {
    elementDataNode.setProperty( PROP_NAME, element.getName() );
    DataNode childrenNode = elementDataNode.addNode( PROP_ELEMENT_CHILDREN );
    if ( Utils.isEmpty( element.getId() ) ) {
      element.setId( element.getName() );
    }
    attributeToDataNode( element, childrenNode );
  }

  protected void dataNodeToElement( DataNode dataNode, IMetaStoreElement element ) throws MetaStoreException {
    DataProperty nameProperty = dataNode.getProperty( PROP_NAME );
    if ( nameProperty != null ) {
      element.setName( nameProperty.getString() );
    }

View on GitHub (pinned to f3058517a1)