{"record":{"id":"7610cbc9f00ff1f4","repo":"pentaho/pentaho-kettle","slug":"delaymeta-exception-unexpectederrorsavingstepinfo","errorCode":"DelayMeta.Exception.UnexpectedErrorSavingStepInfo","errorMessage":"DelayMeta.Exception.UnexpectedErrorSavingStepInfo","messagePattern":"DelayMeta\\.Exception\\.UnexpectedErrorSavingStepInfo","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/delay/DelayMeta.java","lineNumber":169,"sourceCode":"    try {\n      timeout = rep.getStepAttributeString( id_step, \"timeout\" );\n      scaletime = rep.getStepAttributeString( id_step, \"scaletime\" );\n      // set all unknown values to seconds\n      setScaleTimeCode( getScaleTimeCode() ); // compatibility reasons for transformations before 3.1.1, see PDI-1850,\n                                              // PDI-1532\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages\n        .getString( PKG, \"DelayMeta.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, \"timeout\", timeout );\n      rep.saveStepAttribute( id_transformation, id_step, \"scaletime\", scaletime );\n\n    } catch ( Exception e ) {\n      throw new KettleException(\n        BaseMessages.getString( PKG, \"DelayMeta.Exception.UnexpectedErrorSavingStepInfo\" ), 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  }\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    String error_message = \"\";\n\n    if ( Utils.isEmpty( timeout ) ) {\n      error_message = BaseMessages.getString( PKG, \"DelayMeta.CheckResult.TimeOutMissing\" );\n      cr = new CheckResult( CheckResultInterface.TYPE_RESULT_ERROR, error_message, stepMeta );","sourceCodeStart":151,"sourceCodeEnd":187,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/delay/DelayMeta.java#L151-L187","documentation":"DelayMeta.saveRep writes the Delay step's timeout and scaletime via rep.saveStepAttribute. Any repository exception is wrapped in a KettleException with 'DelayMeta.Exception.UnexpectedErrorSavingStepInfo'. It means the Delay step's metadata could not be persisted to the repository.","triggerScenarios":"saveRep while rep.saveStepAttribute throws: repository connection lost, write permission denied, DB constraint/storage failure, or value rejected by repository storage.","commonSituations":"Saving a transformation over an unstable VPN/database link; repository user with read-only rights; repository tablespace full; schema drift after PDI upgrade.","solutions":["Check repository connectivity, reconnect, and retry the save.","Read the wrapped cause exception for the exact repository/SQL failure.","Verify write permissions for the repository user.","Save the transformation as a local XML file to avoid losing changes, then re-save to the repository once fixed."],"exampleFix":"// before\ntransMeta.saveRep(rep, metaStore, transId, null);\n// after: verify save and fall back to local file\ntry {\n  transMeta.saveRep(rep, metaStore, transId, null);\n} catch (KettleException e) {\n  logError(\"Repo save failed: \" + e.getCause().getMessage(), e);\n  transMeta.setFilename(\"/backup/delay-transform.ktr\");\n  transMeta.saveXml();\n}","handlingStrategy":"try-catch","validationCode":"if (rep == null || !rep.isConnected()) { throw new KettleException(\"Repository not connected; cannot save Delay step\"); }","typeGuard":null,"tryCatchPattern":"try { delayMeta.saveRep(rep, metaStore, transId, stepId); } catch (KettleException e) { logError(\"Delay saveRep failed: \" + e.getCause().getMessage(), e); transMeta.setFilename(\"/backup/transform.ktr\"); transMeta.saveXml(); }","preventionTips":["Save to a stable network/VPN path or local first, then sync.","Use write-enabled repository credentials.","Monitor repository DB storage and connectivity.","Keep a periodic local XML export of critical transformations."],"tags":["kettle","repository","persistence","step-metadata"],"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"}