pentaho/pentaho-kettle · error · KettleException
LDAPOutputMeta.Exception.ErrorSavingToRepository
LDAPOutputMeta.Exception.ErrorSavingToRepository
Error message
LDAPOutputMeta.Exception.ErrorSavingToRepository
What it means
LDAPOutputMeta.saveRep wraps persistence of the step settings in try/catch and rethrows as KettleException with Exception.ErrorSavingToRepository (including the step id). Any rep.saveStepAttribute failure while saving the transformation raises this.
Solutions
- Test and restore the repository DB connection, then retry the save
- Check the repository user's privileges on the R_* repository tables
- Check DB disk space and table size limits for long attribute values
- Save locally as .ktr as a workaround and re-publish later
Example fix
// before: save without checking connection state
rep.saveStepAttribute(id_transformation, id_step, "useCertificate", useCertificate);
// after: reconnect and retry
if (!rep.isConnected()) { rep.connect(); }
rep.saveStepAttribute(id_transformation, id_step, "useCertificate", useCertificate); Defensive patterns
Strategy: try-catch
Validate before calling
// Check write access before saving
if (!rep.isConnected() || rep.isReadOnly()) {
throw new KettleException("Repository not writable");
} Try / catch
try {
transMeta.saveRep(rep, metaStore, transMeta.getObjectId());
} catch (KettleException e) {
logError("Repository save failed for step " + e.getMessage(), e);
// save to local .ktr as fallback
} Prevention
- Grant the repository user full rights on R_* tables
- Monitor repository DB disk space
- Save locally first, then export to repository
When it happens
Trigger: Saving a transformation containing LDAP Output to a repository when the database write fails: connection lost, insufficient privileges, read-only repository, or constraint/size violation on an attribute value.
Common situations: Repository DB out of space or locked; user lacks INSERT/UPDATE rights on repository tables; network drop between Spoon and repository DB during save; saving to a deprecated repository type.
Related errors
- ElasticSearchBulkMeta.Exception.ErrorReadingRepository
- ElasticSearchBulkMeta.Exception.ErrorSavingToRepository
- FileExistsMeta.Exception.UnableToSaveStepInfo
- FileExistsMeta.Exception.UnexpectedErrorReadingStepInfo
- GetPreviousRowFieldMeta.Exception.UnexpectedErrorInReadingSt…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/9310dd217cbc68d5.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ldap/impl/src/main/java/org/pentaho/di/trans/steps/ldapoutput/LDAPOutputMeta.java:858
rep.saveStepAttribute( id_transformation, id_step, "oldDnFieldName", oldDnFieldName );
rep.saveStepAttribute( id_transformation, id_step, "newDnFieldName", newDnFieldName );
rep.saveStepAttribute( id_transformation, id_step, "deleteRDN", deleteRDN );
for ( int i = 0; i < updateLookup.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "field_name", updateLookup[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "field_attribut", updateStream[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "value_update", update[i].booleanValue() );
}
rep.saveStepAttribute( id_transformation, id_step, "protocol", protocol );
rep.saveStepAttribute( id_transformation, id_step, "trustStorePath", trustStorePath );
rep.saveStepAttribute( id_transformation, id_step, "trustStorePassword", Encr
.encryptPasswordIfNotUsingVariables( trustStorePassword ) );
rep.saveStepAttribute( id_transformation, id_step, "trustAllCertificates", trustAllCertificates );
rep.saveStepAttribute( id_transformation, id_step, "useCertificate", useCertificate );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "LDAPOutputMeta.Exception.ErrorSavingToRepository", "" + id_step ), e );
}
}
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
CheckResult cr;
// See if we get input...
if ( input.length > 0 ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
PKG, "LDAPOutputMeta.CheckResult.NoInputExpected" ), stepMeta );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(View on GitHub (pinned to f3058517a1)