{"record":{"id":"8161c3d58603af43","repo":"pentaho/pentaho-kettle","slug":"filterrowsmeta-exception-unabletosavestepinfotorepository","errorCode":"FilterRowsMeta.Exception.UnableToSaveStepInfoToRepository","errorMessage":"FilterRowsMeta.Exception.UnableToSaveStepInfoToRepository","messagePattern":"FilterRowsMeta\\.Exception\\.UnableToSaveStepInfoToRepository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/filterrows/FilterRowsMeta.java","lineNumber":227,"sourceCode":"  }\n\n  @Override\n  public void searchInfoAndTargetSteps( List<StepMeta> steps ) {\n    List<StreamInterface> targetStreams = getStepIOMeta().getTargetStreams();\n    for ( StreamInterface stream : targetStreams ) {\n      stream.setStepMeta( StepMeta.findStep( steps, (String) stream.getSubject() ) );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {\n    try {\n      if ( condition != null ) {\n        rep.saveConditionStepAttribute( id_transformation, id_step, \"id_condition\", condition );\n        rep.saveStepAttribute( id_transformation, id_step, \"send_true_to\", getTrueStepname() );\n        rep.saveStepAttribute( id_transformation, id_step, \"send_false_to\", getFalseStepname() );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"FilterRowsMeta.Exception.UnableToSaveStepInfoToRepository\" )\n        + id_step, e );\n    }\n  }\n\n  @Override\n  public void getFields( Bowl bowl, RowMetaInterface rowMeta, String origin, RowMetaInterface[] info, StepMeta nextStep,\n    VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {\n    // Clear the sortedDescending flag on fields used within the condition - otherwise the comparisons will be\n    // inverted!!\n    String[] conditionField = condition.getUsedFields();\n    for ( int i = 0; i < conditionField.length; i++ ) {\n      int idx = rowMeta.indexOfValue( conditionField[i] );\n      if ( idx >= 0 ) {\n        ValueMetaInterface valueMeta = rowMeta.getValueMeta( idx );\n        valueMeta.setSortedDescending( false );\n      }\n    }","sourceCodeStart":209,"sourceCodeEnd":245,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/filterrows/FilterRowsMeta.java#L209-L245","documentation":"FilterRowsMeta.saveRep wraps any exception raised while persisting the step's attributes (condition, send_true_to, send_false_to) to the repository in a KettleException with this message key, appending the id_step. It means the step definition could not be saved; the cause is chained.","triggerScenarios":"Calling saveRep on a FilterRowsMeta when saveConditionStepAttribute or saveStepAttribute throws — repository write failure, lost connection, constraint violation, or insufficient repository permissions during transformation save.","commonSituations":"Database repository disk full or connection dropped mid-save; missing INSERT privileges on repository tables; saving to a read-only repository; concurrent edits causing key conflicts.","solutions":["Check the chained cause for the underlying repository write error (connection, permissions, disk)","Verify the repository is writable and the user has INSERT/UPDATE rights on repository tables","Reconnect to the repository and re-save the transformation","If a condition cannot be serialized, clear/recreate the filter condition in the dialog and save again"],"exampleFix":"// before\nrep.saveConditionStepAttribute( id_transformation, id_step, \"id_condition\", null ); // NPE wrapped in saveRep\n// after\nif ( getCondition() != null ) {\n  rep.saveConditionStepAttribute( id_transformation, id_step, \"id_condition\", getCondition() );\n}","handlingStrategy":"try-catch","validationCode":"// before saving\nif ( !rep.isConnected() || rep.isReadOnly() ) { throw new IllegalStateException( \"Repository not writable\" ); }","typeGuard":null,"tryCatchPattern":"try {\n  transMeta.saveRep( rep, metaStore, \"my transformation\" );\n} catch ( KettleException e ) {\n  logError( \"Save failed for step \" + e.getMessage() + \": \" + e.getCause(), e );\n  // fall back to local .ktr export\n}","preventionTips":["Verify repository write permissions before bulk edits","Save a local .ktr copy as fallback","Monitor repository DB disk space and connectivity","Reconnect/re-authenticate after long editing sessions"],"tags":["pdi","kettle","repository","metadata-save"],"backgroundTag":"file-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"}