pentaho/pentaho-kettle · error · KettleException
StreamLookupMeta.Exception.UnableToSaveStepInfoToRepository
Error message
StreamLookupMeta.Exception.UnableToSaveStepInfoToRepository
What it means
StreamLookupMeta throws this KettleException in saveRep() when persisting the step's settings to the repository fails unexpectedly. The message has the step's ObjectId appended. It wraps the underlying exception, so the real cause (write failure, constraint violation, connection loss) is in the cause chain.
Solutions
- Check the wrapped cause for the true repository write error
- Reconnect to the repository and retry the save
- Verify id_transformation and id_step still exist in the repository
- Save the transformation to XML/file as a workaround, then re-import
Example fix
// before throw new KettleException(BaseMessages.getString(PKG, "StreamLookupMeta.Exception.UnableToSaveStepInfoToRepository") + id_step, e); // after // ensure repository connection is open and transaction committed: repository.connect(login, password); // then retry saveRep
Defensive patterns
Strategy: try-catch
Validate before calling
// before save
if (!repository.isConnected()) repository.connect(user, pass);
if (idTransformation == null || idStep == null) throw new IllegalArgumentException("ids required");
// null-check field arrays
if (meta.getValue() == null || meta.getValueName() == null) meta.setDefault(); Type guard
boolean canSave(StepMetaInterface meta) {
return meta != null && meta instanceof StreamLookupMeta
&& ((StreamLookupMeta) meta).getKeyField() != null;
} Try / catch
try {
meta.saveRep(repository, metaStore, idTransformation, idStep);
} catch (KettleException e) {
logError("Save failed for step " + idStep + ": " + e.getCause(), e);
// fallback: export to XML
meta.saveXML(); // or save the whole trans to file
} Prevention
- Confirm repository connectivity before batch saves
- Avoid modifying/deleting transformations concurrently while saving
- Save to XML as backup before large repository operations
- Keep field names within repository column length limits
When it happens
Trigger: Calling saveRep() when any rep.saveStepAttribute(...) call throws — repository write failure, disconnected session, invalid id_transformation/id_step, or null field arrays causing unexpected exceptions.
Common situations: Repository database down or read-only during save; transformation partially deleted while saving; very long field names exceeding repository column limits.
Related errors
- StringCutMeta.Exception.UnableToSaveStepInfo
- AccessInputMeta.Exception.ErrorSavingToRepository
- CloneRowMeta.Exception.UnexpectedErrorReadingStepInfo
- ColumnExistsMeta.Exception.UnableToSaveStepInfo
- ColumnExistsMeta.Exception.UnexpectedErrorReadingStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/9afece3297cc0ad2.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/streamlookup/StreamLookupMeta.java:336
rep.saveStepAttribute( id_transformation, id_step, "input_sorted", isInputSorted() );
rep.saveStepAttribute( id_transformation, id_step, "preserve_memory", isMemoryPreservationActive() );
rep.saveStepAttribute( id_transformation, id_step, "sorted_list", isUsingSortedList() );
rep.saveStepAttribute( id_transformation, id_step, "integer_pair", isUsingIntegerPair() );
for ( int i = 0; i < getKeystream().length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "lookup_key_name", getKeystream()[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "lookup_key_field", getKeylookup()[i] );
}
for ( int i = 0; i < getValue().length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "return_value_name", getValue()[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "return_value_rename", getValueName()[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "return_value_default", getValueDefault()[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "return_value_type",
ValueMetaFactory.getValueMetaName( getValueDefaultType()[i] ) );
}
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString(
PKG, "StreamLookupMeta.Exception.UnableToSaveStepInfoToRepository" )
+ id_step, e );
}
}
@Override
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;
if ( prev != null && prev.size() > 0 ) {
cr =
new CheckResult( CheckResultInterface.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "StreamLookupMeta.CheckResult.StepReceivingFields", prev.size() + "" ), stepMeta );
remarks.add( cr );
String error_message = "";View on GitHub (pinned to f3058517a1)