pentaho/pentaho-kettle · error · KettleException

JobEntryAbort.UnableToLoadFromRepo.Label

Error message

JobEntryAbort.UnableToLoadFromRepo.Label

What it means

JobEntryAbort.loadRep wraps KettleDatabaseException from reading the 'message' attribute from the repository into a KettleException keyed 'JobEntryAbort.UnableToLoadFromRepo.Label' with the job entry id. It means loading the abort entry's abort message from the repository database failed.

Solutions

  1. Check repository DB connectivity and reconnect
  2. Verify repository schema version/repair
  3. Read the wrapped KettleDatabaseException cause for the SQL error
  4. Re-save the job entry to recreate its repository attributes
Defensive patterns

Strategy: try-catch

Validate before calling

if ( !rep.isConnected() ) {
  throw new ValidationException( "Repository not connected" );
}

Try / catch

try {
  jobMeta.loadFromRepository( rep, path, null );
} catch ( KettleException e ) {
  if ( e.getCause() instanceof KettleDatabaseException ) {
    logError( "Repository load failed for entry: " + e.getMessage(), e );
  }
}

Prevention

When it happens

Trigger: loadRep during repository job load when r_jobentry_attribute lookup for 'message' throws — repository DB unreachable, missing schema objects, or corrupt attribute row.

Common situations: Repository database down; schema drift after version upgrade; stale/invalid repository connection in Spoon.

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/4cb99bf3b17f1c2a. Report an issue: GitHub.

Appendix: source

Thrown at plugins/core/impl/src/main/java/org/pentaho/di/job/entries/abort/JobEntryAbort.java:94

    return retval.toString();
  }

  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,
    Repository rep, IMetaStore metaStore ) throws KettleXMLException {
    try {
      super.loadXML( entrynode, databases, slaveServers );
      messageAbort = XMLHandler.getTagValue( entrynode, "message" );
    } catch ( Exception e ) {
      throw new KettleXMLException( BaseMessages.getString( PKG, "JobEntryAbort.UnableToLoadFromXml.Label" ), e );
    }
  }

  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      messageAbort = rep.getJobEntryAttributeString( id_jobentry, "message" );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobEntryAbort.UnableToLoadFromRepo.Label", String
        .valueOf( id_jobentry ) ), dbe );
    }
  }

  // Save the attributes of this job entry
  //
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "message", messageAbort );

    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobEntryAbort.UnableToSaveToRepo.Label", String
        .valueOf( id_job ) ), dbe );
    }
  }

  public boolean evaluate( Result result ) {
    String Returnmessage = null;

View on GitHub (pinned to f3058517a1)