{"record":{"id":"e87ff155f3314b35","repo":"pentaho/pentaho-kettle","slug":"unexpected-error-reading-step-information-from-the-e87ff1","errorCode":null,"errorMessage":"Unexpected error reading step information from the repository","messagePattern":"Unexpected error reading step information from the repository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/propertyoutput/PropertyOutputMeta.java","lineNumber":429,"sourceCode":"      keyfield = rep.getStepAttributeString( id_step, \"keyfield\" );\n      valuefield = rep.getStepAttributeString( id_step, \"valuefield\" );\n      comment = rep.getStepAttributeString( id_step, \"comment\" );\n\n      fileName = rep.getStepAttributeString( id_step, \"file_name\" );\n      extension = rep.getStepAttributeString( id_step, \"file_extention\" );\n      stepNrInFilename = rep.getStepAttributeBoolean( id_step, \"file_add_stepnr\" );\n      partNrInFilename = rep.getStepAttributeBoolean( id_step, \"file_add_partnr\" );\n      dateInFilename = rep.getStepAttributeBoolean( id_step, \"file_add_date\" );\n      timeInFilename = rep.getStepAttributeBoolean( id_step, \"file_add_time\" );\n\n      createparentfolder = rep.getStepAttributeBoolean( id_step, \"create_parent_folder\" );\n      addToResult = rep.getStepAttributeBoolean( id_step, \"addtoresult\" );\n      append = rep.getStepAttributeBoolean( id_step, \"append\" );\n      fileNameInField = rep.getStepAttributeBoolean( id_step, \"fileNameInField\" );\n      fileNameField = rep.getStepAttributeString( id_step, \"fileNameField\" );\n\n    } catch ( Exception e ) {\n      throw new KettleException( \"Unexpected error reading step information from the repository\", e );\n    }\n  }\n\n  @Override\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {\n    try {\n\n      rep.saveStepAttribute( id_transformation, id_step, \"keyfield\", keyfield );\n      rep.saveStepAttribute( id_transformation, id_step, \"valuefield\", valuefield );\n      rep.saveStepAttribute( id_transformation, id_step, \"comment\", comment );\n\n      rep.saveStepAttribute( id_transformation, id_step, \"file_name\", fileName );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_extention\", extension );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_add_stepnr\", stepNrInFilename );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_add_partnr\", partNrInFilename );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_add_date\", dateInFilename );\n      rep.saveStepAttribute( id_transformation, id_step, \"file_add_time\", timeInFilename );\n","sourceCodeStart":411,"sourceCodeEnd":447,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/propertyoutput/PropertyOutputMeta.java#L411-L447","documentation":"PropertyOutputMeta.readRep wraps any exception raised while loading this step's configuration attributes from the Kettle repository into a generic KettleException. It signals that the step metadata could not be deserialized from the repository (e.g. r_step_attribute rows are missing, corrupt, or the repository connection broke mid-read). The original cause is chained as the second argument.","triggerScenarios":"Calling TransMeta/StepMeta load code that invokes readRep() when the underlying Repository.getStepAttributeBoolean/getStepAttributeString calls throw — e.g. repository connection dropped, schema/version mismatch, or a null id_step for a partially persisted transformation.","commonSituations":"Opening a transformation stored in a database repository with stale JDBC connections; repository schema upgraded to a newer Pentaho version than the client; corrupted r_step_attribute rows; load balancer killing idle DB sessions.","solutions":["Check the chained cause (e.getCause()) to find the real repository failure","Reconnect to the repository and retry loading the transformation","Verify the repository schema matches the Pentaho/Kettle client version (run repository upgrade scripts if needed)","If a specific attribute is missing, re-save the step in Spoon to repopulate r_step_attribute"],"exampleFix":"// before\nPropertyOutputMeta meta = (PropertyOutputMeta) stepMeta.getStepMetaInterface();\nmeta.readRep(repository, metastore, stepId, databases);\n// after\ntry {\n  PropertyOutputMeta meta = (PropertyOutputMeta) stepMeta.getStepMetaInterface();\n  meta.readRep(repository, metastore, stepId, databases);\n} catch (KettleException e) {\n  logError(\"Repository read failed: \" + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));\n  repository.disconnect();\n  repository.connect(user, pass); // then retry\n}","handlingStrategy":"try-catch","validationCode":"if (stepId == null || repository == null || !repository.isConnected()) throw new KettleException(\"Repository not ready for readRep\");","typeGuard":null,"tryCatchPattern":"try { meta.readRep(rep, metaStore, idStep, databases); } catch (KettleException e) { Throwable root = e.getCause(); logError(\"Repository read failed: \" + (root != null ? root.getMessage() : e.getMessage())); throw e; }","preventionTips":["Always read the chained cause — the wrapper message is generic","Keep repository schema and Pentaho client versions in sync","Use connection pooling with keepalive for DB repositories","Re-save steps after upgrading Pentaho versions"],"tags":["kettle","repository","metadata","serialization"],"backgroundTag":"database-query-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"}