pentaho/pentaho-kettle · error · KettleException

JobEntrySetVariables.Meta.UnableLoadRep

Error message

JobEntrySetVariables.Meta.UnableLoadRep

What it means

This KettleException is thrown in loadRep when reading the Set Variables entry's variable rows (variable_name, variable_value, variable_type) from the repository fails with a KettleException. The message includes the id_jobentry and the underlying error text, with the original exception chained as cause. It identifies a repository read failure for this entry's variable list.

Solutions

  1. Check the chained cause for the real DB error and restore repository connectivity
  2. Verify R_JOBENTRY_ATTRIBUTE rows for this id_jobentry; re-save the entry from Spoon to rewrite them
  3. If row counts mismatch, correct or delete the entry's attribute rows and re-enter variables in Spoon
  4. Repair the repository schema with Pentaho repair tools if corruption is widespread

Example fix

// before
entry.loadRep(rep, metaStore, idJobentry, databases, slaveServers);
// after
try {
  entry.loadRep(rep, metaStore, idJobentry, databases, slaveServers);
} catch (KettleException e) {
  logError("Cannot load Set Variables entry " + idJobentry + ": " + e.getMessage(), e);
  // inspect R_JOBENTRY_ATTRIBUTE rows, then re-save entry
}
Defensive patterns

Strategy: try-catch

Validate before calling

if (id_jobentry == null) throw new IllegalArgumentException("id_jobentry is null");
if (!rep.isConnected()) throw new IllegalStateException("Repository not connected");

Try / catch

try {
  entry.loadRep(rep, metaStore, idJobentry, databases, slaveServers);
} catch (KettleException e) {
  logError("Repository load failed for id " + id_jobentry + ": " + e.getMessage(), e);
  // verify attribute rows / re-save entry from Spoon
}

Prevention

When it happens

Trigger: Loading the entry from a repository when rep.getJobEntryAttributeString(id, a, ...) throws: DB unavailable, missing/corrupt attribute rows for the stored variable count (argnr), or invalid id_jobentry.

Common situations: Repository rows partially deleted after a failed save; argnr (nr of variables) stored larger than actual attribute rows; repository migration lost data; DB connectivity blips.

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/49a3163e07dd0248. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/setvariables/JobEntrySetVariables.java:191

    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      replaceVars = rep.getJobEntryAttributeBoolean( id_jobentry, "replacevars" );

      filename = rep.getJobEntryAttributeString( id_jobentry, "filename" );
      fileVariableType = getVariableType( rep.getJobEntryAttributeString( id_jobentry, "file_variable_type" ) );

      // How many variableName?
      int argnr = rep.countNrJobEntryAttributes( id_jobentry, "variable_name" );
      allocate( argnr );

      // Read them all...
      for ( int a = 0; a < argnr; a++ ) {
        variableName[a] = rep.getJobEntryAttributeString( id_jobentry, a, "variable_name" );
        variableValue[a] = rep.getJobEntryAttributeString( id_jobentry, a, "variable_value" );
        variableType[a] = getVariableType( rep.getJobEntryAttributeString( id_jobentry, a, "variable_type" ) );
      }
    } catch ( KettleException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobEntrySetVariables.Meta.UnableLoadRep", String
        .valueOf( id_jobentry ), dbe.getMessage() ), dbe );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "replacevars", replaceVars );

      rep.saveJobEntryAttribute( id_job, getObjectId(), "filename", filename );
      rep.saveJobEntryAttribute(
        id_job, getObjectId(), "file_variable_type", getVariableTypeCode( fileVariableType ) );

      // save the variableName...
      if ( variableName != null ) {
        for ( int i = 0; i < variableName.length; i++ ) {
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "variable_name", variableName[i] );
          rep.saveJobEntryAttribute( id_job, getObjectId(), i, "variable_value", variableValue[i] );
          rep.saveJobEntryAttribute(

View on GitHub (pinned to f3058517a1)