pentaho/pentaho-kettle · error · KettleException

JobEntryDelay.UnableToLoadFromRepo.Label

Error message

JobEntryDelay.UnableToLoadFromRepo.Label

What it means

JobEntryDelay.loadRep throws this localized KettleException when the repository throws KettleDatabaseException while reading the delay entry's attributes (maximumTimeout, scaletime) for the given id_jobentry. The database error is chained as the cause. It means the delay job entry's repository metadata is unreadable.

Solutions

  1. Check the chained KettleDatabaseException for the true SQL error
  2. Confirm the attribute rows exist for the id_jobentry in the repository
  3. Re-save the Delay entry from Spoon to repopulate attributes
  4. Repair/upgrade the repository schema to match your Kettle version

Example fix

// before
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
// after
try {
  entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
  logError("Delay load failed (cause=" + e.getCause() + ") for id_jobentry=" + idJobEntry);
  throw e;
}
Defensive patterns

Strategy: try-catch

Validate before calling

// before loadRep
if (id_jobentry == null) throw new IllegalArgumentException("id_jobentry required");
if (!rep.isConnected()) throw new IllegalStateException("Repository not connected");

Type guard

boolean isRepoLoadFailure(KettleException e) {
  return e.getMessage() != null && e.getMessage().startsWith("JobEntryDelay.UnableToLoadFromRepo");
}

Try / catch

try {
  entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
  log.error("JobEntryDelay load failed (id_jobentry=" + idJobEntry + ")", e.getCause());
  if (e.getCause() instanceof KettleDatabaseException) {
    // verify repository connectivity and attribute rows, then retry
  }
  throw e;
}

Prevention

When it happens

Trigger: loadRep called against a repository whose getJobEntryAttributeString/getJobEntryAttributeInteger throws — missing attribute rows for id_jobentry, broken repository connection, or corrupt/inaccessible r_jobentry_attribute table.

Common situations: Repository migration/restoration lost attribute rows; DB connectivity issues; repository schema not upgraded after Pentaho version change.

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/89b6ef4ad8a8c7ee. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/delay/JobEntryDelay.java:100

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

  @Override
  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      maximumTimeout = rep.getJobEntryAttributeString( id_jobentry, "maximumTimeout" );
      scaleTime = (int) rep.getJobEntryAttributeInteger( id_jobentry, "scaletime" );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobEntryDelay.UnableToLoadFromRepo.Label" )
        + id_jobentry, dbe );
    }
  }

  //
  // Save the attributes of this job entry
  //
  @Override
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "maximumTimeout", maximumTimeout );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "scaletime", scaleTime );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException(
        BaseMessages.getString( PKG, "JobEntryDelay.UnableToSaveToRepo.Label" ) + id_job, dbe );
    }
  }

View on GitHub (pinned to f3058517a1)