pentaho/pentaho-kettle · error · KettleException

JobEntryMailValidator.Meta.UnableToLoadFromRep

Error message

JobEntryMailValidator.Meta.UnableToLoadFromRep

What it means

JobEntryMailValidator.loadRep() throws this KettleException when reading the job entry's persisted attributes (smtpCheck, timeout, defaultSMTP, emailSender, emailAddress) from the Kettle repository fails with a KettleDatabaseException. The message key is concatenated with the job entry id to identify the failing record. It wraps the underlying database exception, so getCause() holds the real reason.

Solutions

  1. Check the wrapped KettleDatabaseException (getCause()) for the real database error and fix connectivity/permissions to the repository database.
  2. Verify the repository schema is up to date (run repository upgrade tools).
  3. Re-save the job entry from Spoon so attributes are rewritten cleanly.
  4. If the row is irrecoverably corrupt, delete and recreate the job entry in the repository.

Example fix

// before
} catch ( KettleDatabaseException dbe ) {
  throw new KettleException( ... + id_jobentry, dbe );
}
// after
} catch ( KettleDatabaseException dbe ) {
  logError( BaseMessages.getString( PKG, "JobEntryMailValidator.Meta.UnableToLoadFromRep" ) + id_jobentry, dbe );
  throw new KettleException( ... + id_jobentry + " cause=" + dbe.getMessage(), dbe );
}
Defensive patterns

Strategy: try-catch

Validate before calling

// Before loadRep: verify repository connectivity
if ( repository == null || !repository.isConnected() ) {
  throw new KettleException( "Repository not connected; cannot load JobEntryMailValidator " + id_jobentry );
}

Try / catch

try {
  jobEntry.loadRep( rep, id_jobentry, databases, metaStore );
} catch ( KettleException e ) {
  // inspect e.getCause() (KettleDatabaseException) for the DB-level reason
  logError( "Failed to load mail validator job entry " + id_jobentry, e );
  throw e;
}

Prevention

When it happens

Trigger: Calling loadRep() on a job entry whose repository row is corrupted, whose attributes column contains values incompatible with the expected types, or when the underlying repository database connection fails mid-read.

Common situations: Repository database is down or network-partitioned; the kettle repository schema is from an older/newer version missing attribute columns; the job entry row was manually edited or corrupted; permission problems on the repository tables.

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

Appendix: source

Thrown at plugins/mail-validator/impl/src/main/java/org/pentaho/di/job/entries/mailvalidator/JobEntryMailValidator.java:183

      emailSender = XMLHandler.getTagValue( entrynode, "emailSender" );
      emailAddress = XMLHandler.getTagValue( entrynode, "emailAddress" );

    } catch ( Exception e ) {
      throw new KettleXMLException(
        BaseMessages.getString( PKG, "JobEntryMailValidator.Meta.UnableToLoadFromXML" ), e );
    }
  }

  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      smtpCheck = rep.getJobEntryAttributeBoolean( id_jobentry, "smtpCheck" );
      timeout = rep.getJobEntryAttributeString( id_jobentry, "timeout" );
      defaultSMTP = rep.getJobEntryAttributeString( id_jobentry, "defaultSMTP" );
      emailSender = rep.getJobEntryAttributeString( id_jobentry, "emailSender" );
      emailAddress = rep.getJobEntryAttributeString( id_jobentry, "emailAddress" );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobEntryMailValidator.Meta.UnableToLoadFromRep" )
        + 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(), "smtpCheck", smtpCheck );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "timeout", timeout );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "defaultSMTP", defaultSMTP );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "emailSender", emailSender );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "emailAddress", emailAddress );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( BaseMessages.getString( PKG, "JobEntryMailValidator.Meta.UnableToSaveToRep" )
        + id_job, dbe );
    }
  }

View on GitHub (pinned to f3058517a1)