pentaho/pentaho-kettle · error · KettleXMLException

JobEntryDeleteResultFilenames.CanNotSaveToRep

Error message

JobEntryDeleteResultFilenames.CanNotSaveToRep

What it means

Thrown when persisting a 'Delete Result Filenames' job entry's attributes to the repository fails. saveRep() catches KettleDatabaseException from rep.saveJobEntryAttribute() and wraps it in a KettleXMLException with the job id and DB message. The repository write failed, so the entry's metadata is not saved.

Solutions

  1. Read dbe.getMessage() in the thrown KettleXMLException for the SQL-level cause
  2. Verify DB connectivity and that r_jobentry_attribute exists with the correct schema
  3. Ensure the repository user has write grants on repository tables
  4. Retry the save; trim values that exceed column lengths

Example fix

// before
entry.saveRep(rep, metaStore, idJob); // fails without clear job id context
// after
try {
  entry.saveRep(rep, metaStore, idJob);
} catch (KettleXMLException e) {
  logError("Save to rep failed for job " + idJob + ": " + e.getMessage());
  throw e;
}
Defensive patterns

Strategy: try-catch

Validate before calling

// pre-check attribute lengths against typical column limits
if (foldername != null && foldername.length() > 255) {
  throw new IllegalArgumentException("foldername exceeds repository column size");
}

Try / catch

try {
  entry.saveRep(rep, metaStore, idJob);
} catch (KettleXMLException e) {
  // KettleDatabaseException message is embedded via dbe.getMessage()
  logError("Save failed for job " + idJob + ": " + e.getMessage());
  throw e;
}

Prevention

When it happens

Trigger: Calling saveRep() (directly or through JobMeta.save) when any of the four saveJobEntryAttribute calls fails: DB outage, locked table, missing schema, value overflow.

Common situations: Repository database down during save; repository tables missing after install; write permissions revoked; too-long foldername/wildcard values for column size; transaction deadlocks from concurrent saves.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/10d8e1792101116c. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/deleteresultfilenames/JobEntryDeleteResultFilenames.java:127

    try {
      foldername = rep.getJobEntryAttributeString( id_jobentry, "foldername" );
      specifywildcard = rep.getJobEntryAttributeBoolean( id_jobentry, "specify_wildcard" );
      wildcard = rep.getJobEntryAttributeString( id_jobentry, "wildcard" );
      wildcardexclude = rep.getJobEntryAttributeString( id_jobentry, "wildcardexclude" );
    } catch ( KettleException dbe ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "JobEntryDeleteResultFilenames.CanNotLoadFromRep", "" + id_jobentry, dbe.getMessage() ) );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "foldername", foldername );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "specify_wildcard", specifywildcard );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcard", wildcard );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "wildcardexclude", wildcardexclude );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "JobEntryDeleteResultFilenames.CanNotSaveToRep", "" + id_job, dbe.getMessage() ) );
    }
  }

  public void setSpecifyWildcard( boolean specifywildcard ) {
    this.specifywildcard = specifywildcard;
  }

  public boolean isSpecifyWildcard() {
    return specifywildcard;
  }

  public void setFoldername( String foldername ) {
    this.foldername = foldername;
  }

  public String getFoldername() {
    return foldername;

View on GitHub (pinned to f3058517a1)