pentaho/pentaho-kettle · error · KettleException

Unable to save job entry of type 'Telnet' to the repository…

Error message

Unable to save job entry of type 'Telnet' to the repository for id_job=

What it means

Thrown by JobEntryTelnet.saveRep when writing the Telnet entry's attributes (hostname, port, timeout) to the repository fails with a KettleDatabaseException. It means the repository rejected the attribute write for this job entry. The underlying database exception is attached as the cause.

Solutions

  1. Verify the repository database is reachable and writable
  2. Check the wrapped KettleDatabaseException for the specific SQL failure
  3. Confirm attribute values (especially port/timeout) fit the repository column sizes
  4. Retry the save after resolving locks or permission issues
Defensive patterns

Strategy: try-catch

Validate before calling

if ( rep == null || !rep.isConnected() ) { throw new IllegalStateException( "Repository unavailable" ); }

Try / catch

try { entry.saveRep( rep, metaStore, id_job ); } catch ( KettleException e ) { log.error( "Failed saving Telnet entry for job " + id_job, e.getCause() ); throw e; }

Prevention

When it happens

Trigger: Calling saveRep for a Telnet job entry when the repository database is unavailable, the attribute table is locked/corrupt, or a constraint is violated while saving hostname/port/timeout values.

Common situations: Database repository connection dropped during save; oversized hostname/port values exceeding column widths; read-only database user; concurrent save conflicts in clustered setups.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/telnet/JobEntryTelnet.java:122

    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      hostname = rep.getJobEntryAttributeString( id_jobentry, "hostname" );
      port = rep.getJobEntryAttributeString( id_jobentry, "port" );
      timeout = rep.getJobEntryAttributeString( id_jobentry, "timeout" );
    } catch ( KettleException dbe ) {
      throw new KettleException(
        "Unable to load job entry of type 'Telnet' exists from the repository for id_jobentry=" + id_jobentry,
        dbe );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), "hostname", hostname );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "port", port );
      rep.saveJobEntryAttribute( id_job, getObjectId(), "timeout", timeout );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException( "Unable to save job entry of type 'Telnet' to the repository for id_job="
        + id_job, dbe );
    }
  }

  public String getPort() {
    return port;
  }

  public String getRealPort() {
    return environmentSubstitute( getPort() );
  }

  public void setPort( String port ) {
    this.port = port;
  }

  public void setHostname( String hostname ) {
    this.hostname = hostname;

View on GitHub (pinned to f3058517a1)