pentaho/pentaho-kettle · error · KettleException

JobEntryDeleteFiles.UnableToLoadFromRepo

Error message

JobEntryDeleteFiles.UnableToLoadFromRepo

What it means

JobEntryDeleteFiles.loadRep throws this KettleException when the repository throws KettleException while reading the entry's per-row 'name' and 'filemask' attributes (numberOfArgs rows) for id_jobentry. The database error is chained and the id_jobentry is embedded in the localized message. It means the wildcard-delete entry's repository state is unreadable.

Solutions

  1. Inspect the chained KettleException for the database error
  2. Verify the nr-indexed rows (name/filemask) exist for the id_jobentry
  3. Re-save the Delete files entry in Spoon to rewrite its rows
  4. Check repository schema/version alignment and repair if needed

Example fix

// before
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
// after
try {
  entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
  logError("DeleteFiles load failed for id=" + idJobEntry + ": " + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
  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().contains("UnableToLoadFromRepo");
}

Try / catch

try {
  entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
  log.error("JobEntryDeleteFiles repo load failed for id=" + idJobEntry, e.getCause());
  if (e.getCause() instanceof KettleDatabaseException) {
    // verify nr-indexed name/filemask rows exist, re-save entry, retry
  }
  throw e;
}

Prevention

When it happens

Trigger: loadRep when getJobEntryAttributeString(id_jobentry, i, ...) throws — the nr-indexed attribute rows are missing, the row count stored disagrees with the rows present, or the repository connection fails.

Common situations: Repository restore lost per-row attribute rows; version mismatch changing row-count handling; corrupt repository table; DB connectivity drop mid-load.

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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/deletefiles/JobEntryDeleteFiles.java:172

      throw new KettleXMLException( BaseMessages.getString( PKG, "JobEntryDeleteFiles.UnableToLoadFromXml" ), xe );
    }
  }

  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      argFromPrevious = rep.getJobEntryAttributeBoolean( id_jobentry, "arg_from_previous" );
      includeSubfolders = rep.getJobEntryAttributeBoolean( id_jobentry, "include_subfolders" );

      int numberOfArgs = rep.countNrJobEntryAttributes( id_jobentry, "name" );
      allocate( numberOfArgs );

      for ( int i = 0; i < numberOfArgs; i++ ) {
        arguments[i] = rep.getJobEntryAttributeString( id_jobentry, i, "name" );
        filemasks[i] = rep.getJobEntryAttributeString( id_jobentry, i, "filemask" );
      }
    } catch ( KettleException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobEntryDeleteFiles.UnableToLoadFromRepo", String
        .valueOf( id_jobentry ) ), dbe );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "arg_from_previous", argFromPrevious );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "include_subfolders", includeSubfolders );

      // save the arguments...
      if ( arguments != null ) {
        for ( int i = 0; i < arguments.length; i++ ) {
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "name", arguments[i] );
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "filemask", filemasks[i] );
        }
      }
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobEntryDeleteFiles.UnableToSaveToRepo", String

View on GitHub (pinned to f3058517a1)