pentaho/pentaho-kettle · error · KettleException

GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFro…

Error message

GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository

What it means

Thrown by GPBulkLoaderMeta.readRep when an unexpected exception occurs while loading the step's settings from the Kettle repository. The step metadata (stream names, field names, date masks) is read via repository attributes inside a try/catch; any repository I/O or parsing failure is wrapped in this generic KettleException. The original exception is chained as the cause.

Solutions

  1. Check the chained cause (getCause()) to find the actual repository error and fix that first
  2. Verify the repository connection is alive and the user has read permission on the step attribute tables
  3. Re-save the transformation from Spoon to rebuild the step attribute rows
  4. Reconnect/restart the repository and retry loading the transformation
Defensive patterns

Strategy: try-catch

Validate before calling

// before loading
if ( !rep.isConnected() ) throw new IllegalStateException( "Repository not connected" );

Type guard

boolean canRead = rep != null && rep.isConnected();

Try / catch

try { meta.readRep( rep, metaStore, id_step, databases ); } catch ( KettleException e ) { log.error( "Step info read failed; cause=" + e.getCause(), e ); }

Prevention

When it happens

Trigger: Calling readRep (during transformation load from repository) when the repository connection drops mid-read, the step attribute rows are corrupted/missing, or the underlying Repository implementation throws (e.g. database repository outage, permission denied on r_step_attribute rows).

Common situations: Shared DB repository temporarily unavailable; r_step_attribute rows deleted manually or corrupted after a failed migration; stale repository cache after a server restart; repository user lacking SELECT rights.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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

Appendix: source

Thrown at plugins/gp-bulk-loader/core/src/main/java/org/pentaho/di/trans/steps/gpbulkloader/GPBulkLoaderMeta.java:377

      controlFile = rep.getStepAttributeString( id_step, "control_file" );
      dataFile = rep.getStepAttributeString( id_step, "data_file" );
      logFile = rep.getStepAttributeString( id_step, "log_file" );

      eraseFiles = rep.getStepAttributeBoolean( id_step, "erase_files" );
      encoding = rep.getStepAttributeString( id_step, "encoding" );
      dbNameOverride = rep.getStepAttributeString( id_step, "dbname_override" );

      int nrvalues = rep.countNrStepAttributes( id_step, "stream_name" );

      allocate( nrvalues );

      for ( int i = 0; i < nrvalues; i++ ) {
        fieldTable[i] = rep.getStepAttributeString( id_step, i, "stream_name" );
        fieldStream[i] = rep.getStepAttributeString( id_step, i, "field_name" );
        dateMask[i] = rep.getStepAttributeString( id_step, i, "date_mask" );
      }
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "GPBulkLoaderMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository" ), e );
    }
  }

  @Override
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
    try {
      rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, "id_connection", databaseMeta );
      rep.saveStepAttribute( id_transformation, id_step, "errors", maxErrors );
      rep.saveStepAttribute( id_transformation, id_step, "schema", schemaName );
      rep.saveStepAttribute( id_transformation, id_step, "table", tableName );

      rep.saveStepAttribute( id_transformation, id_step, "load_method", loadMethod );
      rep.saveStepAttribute( id_transformation, id_step, "load_action", loadAction );
      rep.saveStepAttribute( id_transformation, id_step, "PsqlPath", PsqlPath );
      rep.saveStepAttribute( id_transformation, id_step, "control_file", controlFile );
      rep.saveStepAttribute( id_transformation, id_step, "data_file", dataFile );
      rep.saveStepAttribute( id_transformation, id_step, "log_file", logFile );

View on GitHub (pinned to f3058517a1)