pentaho/pentaho-kettle · error · KettleException

TransMeta.Exception.UnableToLoadTransformationInfoFromReposi…

Error message

TransMeta.Exception.UnableToLoadTransformationInfoFromRepository

What it means

Thrown by loadRepTrans (invoked from loadTransformation to read transformation-level attributes such as log settings, size rowset, sleep times, and parameters) when a KettleDatabaseException occurs while reading those attributes. Wrapped as KettleException with the cause; the variables are still initialized in the finally block but attribute loading failed.

Solutions

  1. Inspect the wrapped KettleDatabaseException cause for the failing attribute query.
  2. Verify the R_TRANS_ATTRIBUTE table exists and the DB user can SELECT from it.
  3. Reload the transformation with a freshly found ObjectId (re-run findByObjectId) in case the id is stale.
  4. Restore repository connectivity and retry.

Example fix

// before
repository.loadTransformation(transMeta, directory, monitor, true, false);
// after
try {
  repository.loadTransformation(transMeta, directory, monitor, true, false);
} catch (KettleException e) {
  log.logError("Attribute load failed: " + e.getCause(), e);
  throw e;
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (!repository.isConnected()) { repository.connect(user, password); }
// ensure attribute table is readable
repository.connectionDelegate.closeAttributeLookupPreparedStatements();

Try / catch

try { repository.loadTransformation(transMeta, dir, monitor, true, false); } catch (KettleException e) { if (e.getCause() instanceof KettleDatabaseException) { /* attribute read failed — reconnect and retry */ } throw e; }

Prevention

When it happens

Trigger: KettleDatabaseException from getTransAttributeString/Boolean/Integer lookups (e.g. TRANS_ATTRIBUTE_ID, SLEEP_TIME attributes) or loadRepParameters, typically because the attribute lookup queries hit a DB error or the object id is stale.

Common situations: Repository connection lost mid-load; R_TRANS_ATTRIBUTE table missing/inaccessible after partial repository creation; stale ObjectId pointing at rows deleted by another session.

Understand the failure class

Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryTransDelegate.java:802

          getTransAttributeString(
            transMeta.getObjectId(), 0, KettleDatabaseRepository.TRANS_ATTRIBUTE_STEP_PERFORMANCE_LOG_TABLE ) );
        transMeta.getTransLogTable().setLogSizeLimit(
          getTransAttributeString(
            transMeta.getObjectId(), 0, KettleDatabaseRepository.TRANS_ATTRIBUTE_LOG_SIZE_LIMIT ) );
        transMeta.getTransLogTable().setLogInterval(
          getTransAttributeString(
            transMeta.getObjectId(), 0, KettleDatabaseRepository.TRANS_ATTRIBUTE_LOG_INTERVAL ) );
        transMeta.setTransformationType( TransformationType.getTransformationTypeByCode( getTransAttributeString(
          transMeta.getObjectId(), 0, KettleDatabaseRepository.TRANS_ATTRIBUTE_TRANSFORMATION_TYPE ) ) );
        transMeta.setSleepTimeEmpty( (int) getTransAttributeInteger(
          transMeta.getObjectId(), 0, KettleDatabaseRepository.TRANS_ATTRIBUTE_SLEEP_TIME_EMPTY ) );
        transMeta.setSleepTimeFull( (int) getTransAttributeInteger(
          transMeta.getObjectId(), 0, KettleDatabaseRepository.TRANS_ATTRIBUTE_SLEEP_TIME_FULL ) );

        loadRepParameters( transMeta );
      }
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "TransMeta.Exception.UnableToLoadTransformationInfoFromRepository" ), dbe );
    } finally {
      transMeta.initializeVariablesFrom( null );
      transMeta.setInternalKettleVariables();
    }
  }

  /**
   * Load the parameters of this transformation from the repository. The current ones already loaded will be erased.
   *
   * @throws KettleException
   *           Upon any error.
   */
  private void loadRepParameters( TransMeta transMeta ) throws KettleException {
    transMeta.eraseParameters();

    int count = countTransParameter( transMeta.getObjectId() );
    for ( int idx = 0; idx < count; idx++ ) {

View on GitHub (pinned to f3058517a1)