{"record":{"id":"92ce13b8128c490c","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-step-information-to-the-repository-92ce13","errorCode":null,"errorMessage":"Unable to save step information to the repository","messagePattern":"Unable to save step information to the repository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/uniquerowsbyhashset/UniqueRowsByHashSetMeta.java","lineNumber":214,"sourceCode":"      for ( int i = 0; i < nrfields; i++ ) {\n        compareFields[i] = rep.getStepAttributeString( id_step, i, \"field_name\" );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"UniqueRowsByHashSetMeta.Exception.UnexpectedErrorReadingStepInfo\" ), e );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {\n    try {\n      rep.saveStepAttribute( id_transformation, id_step, \"store_values\", storeValues );\n      rep.saveStepAttribute( id_transformation, id_step, \"reject_duplicate_row\", rejectDuplicateRow );\n      rep.saveStepAttribute( id_transformation, id_step, \"error_description\", errorDescription );\n      for ( int i = 0; i < compareFields.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"field_name\", compareFields[i] );\n      }\n    } catch ( KettleException e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"UniqueRowsByHashSetMeta.Exception.UnableToSaveStepInfo\" ), e );\n    }\n  }\n\n  public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,\n    RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,\n    Repository repository, IMetaStore metaStore ) {\n    CheckResult cr;\n\n    if ( input.length > 0 ) {\n      cr =\n        new CheckResult( CheckResultInterface.TYPE_RESULT_OK, BaseMessages.getString(\n          PKG, \"UniqueRowsByHashSetMeta.CheckResult.StepReceivingInfoFromOtherSteps\" ), stepMeta );\n      remarks.add( cr );\n    } else {\n      cr =\n        new CheckResult( CheckResultInterface.TYPE_RESULT_ERROR, BaseMessages.getString(\n          PKG, \"UniqueRowsByHashSetMeta.CheckResult.NoInputReceivedFromOtherSteps\" ), stepMeta );","sourceCodeStart":196,"sourceCodeEnd":232,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/uniquerowsbyhashset/UniqueRowsByHashSetMeta.java#L196-L232","documentation":"UniqueRowsByHashSetMeta.saveRep writes the step's settings (reject_duplicate_row, error_description and each compare field_name) to the repository. A KettleException from the repository is rethrown wrapped with this message, meaning the step configuration could not be persisted.","triggerScenarios":"saveRep (public) fails while saving attributes — repository write error, lost connection, or constraint violation while iterating compareFields.","commonSituations":"Repository database read-only or down; insufficient repository user permissions; large field lists hitting database limits.","solutions":["Inspect the cause exception and repository logs for the DB error","Confirm the repository user can write to the step attribute tables","Retry after restoring the repository connection","Save the transformation to file as a workaround"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Java: confirm write access before saving step attributes\nif ( !repository.isConnected() ) {\n  throw new IllegalStateException( \"Repository not connected before saveRep\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  meta.saveRep( repository, metaStore, idTransformation, idStep );\n} catch ( KettleException e ) {\n  logError( \"Repository save of UniqueRowsByHashSet step failed: \" + e.getCause(), e );\n  // reconnect and retry, or save to file\n}","preventionTips":["Ensure repository write permissions","Monitor repository DB availability","Maintain XML backups of transformations"],"tags":["kettle","repository","persistence","unique-rows-hashset"],"backgroundTag":"database-write-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}