{"record":{"id":"dd32233c3b53cd70","repo":"pentaho/pentaho-kettle","slug":"flattenermeta-exception-unabletosavestepinfotorepository","errorCode":"FlattenerMeta.Exception.UnableToSaveStepInfoToRepository","errorMessage":"FlattenerMeta.Exception.UnableToSaveStepInfoToRepository","messagePattern":"FlattenerMeta\\.Exception\\.UnableToSaveStepInfoToRepository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/flattener/FlattenerMeta.java","lineNumber":188,"sourceCode":"\n      for ( int i = 0; i < nrvalues; i++ ) {\n        targetField[i] = rep.getStepAttributeString( id_step, i, \"target_field\" );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"FlattenerMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository\" ), 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, \"field_name\", fieldName );\n\n      for ( int i = 0; i < targetField.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"target_field\", targetField[i] );\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"FlattenerMeta.Exception.UnableToSaveStepInfoToRepository\" )\n        + id_step, 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\n    CheckResult cr;\n\n    if ( input.length > 0 ) {\n      cr =\n        new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(\n          PKG, \"FlattenerMeta.CheckResult.StepReceivingInfoFromOtherSteps\" ), stepMeta );\n      remarks.add( cr );\n    } else {\n      cr =","sourceCodeStart":170,"sourceCodeEnd":206,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/flattener/FlattenerMeta.java#L170-L206","documentation":"KettleException thrown by FlattenerMeta.saveRep() when saving the step's attributes (field_name, target_field rows) to a Pentaho repository fails. It wraps the underlying repository exception and appends the step id. It occurs only during 'save to repository' operations, not during transformation execution.","triggerScenarios":"Calling saveRep() on a Flattener step meta while the repository connection is broken, read-only, or the underlying rep.saveStepAttribute() calls throw (e.g. network drop to the database-backed repository, missing repository tables).","commonSituations":"Saving a transformation to a shared enterprise repository over an unreliable VPN; repository schema version mismatch; DB credentials expired mid-save; concurrent lock on the transformation record.","solutions":["Check the repository connection (test login, ping the repository database) and retry the save.","Inspect the wrapped cause ('Caused by') for the true repository/SQL error and fix it.","Save locally as a .ktr file to confirm the step metadata itself is valid, then fix the repository issue.","Verify the repository schema is up to date and the user has write permissions."],"exampleFix":"// before\ntransMeta.save(rep, \"my transform\", null, true);\n// after\nif (rep != null && rep.isConnected()) {\n  transMeta.save(rep, \"my transform\", null, true);\n} else {\n  transMeta.exportElements(null, new File(\"local-fallback.ktr\"));\n}","handlingStrategy":"try-catch","validationCode":"if (rep == null || !rep.isConnected()) { throw new IllegalStateException(\"Repository not connected\"); }","typeGuard":null,"tryCatchPattern":"try { transMeta.save(rep, name, null, true); } catch (KettleException e) { log.error(\"Repo save failed: \" + e.getCause(), e); transMeta.exportElements(null, new File(\"local.ktr\")); }","preventionTips":["Test repository connectivity before long edit sessions","Keep a local .ktr fallback save","Verify repository schema version after Kettle upgrades","Check user write permissions on the repository"],"tags":["repository","persistence","kettle"],"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"}