{"record":{"id":"e81fb205ec873375","repo":"pentaho/pentaho-kettle","slug":"dimensionlookupmeta-exception-e81fb2","errorCode":null,"errorMessage":"DimensionLookupMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository","messagePattern":"DimensionLookupMeta\\.Exception\\.UnexpectedErrorReadingStepInfoFromRepository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/dimensionlookup/DimensionLookupMeta.java","lineNumber":1018,"sourceCode":"      keyRename = rep.getStepAttributeString( id_step, \"return_rename\" );\n      autoIncrement = rep.getStepAttributeBoolean( id_step, \"use_autoinc\" );\n      versionField = rep.getStepAttributeString( id_step, \"version_field\" );\n      techKeyCreation = rep.getStepAttributeString( id_step, \"creation_method\" );\n      if ( update ) { // symmetry with readData above ...\n        sequenceName = rep.getStepAttributeString( id_step, \"sequence\" );\n      }\n      minYear = (int) rep.getStepAttributeInteger( id_step, \"min_year\" );\n      maxYear = (int) rep.getStepAttributeInteger( id_step, \"max_year\" );\n\n      cacheSize = (int) rep.getStepAttributeInteger( id_step, \"cache_size\" );\n      preloadingCache = rep.getStepAttributeBoolean( id_step, \"preload_cache\" );\n      useBatchUpdate = rep.getStepAttributeBoolean( id_step, \"useBatch\" );\n\n      usingStartDateAlternative = rep.getStepAttributeBoolean( id_step, \"use_start_date_alternative\" );\n      startDateAlternative = getStartDateAlternative( rep.getStepAttributeString( id_step, \"start_date_alternative\" ) );\n      startDateFieldName = rep.getStepAttributeString( id_step, \"start_date_field_name\" );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString( PKG,\n          \"DimensionLookupMeta.Exception.UnexpectedErrorReadingStepInfoFromRepository\" ), e );\n    }\n  }\n\n  @Override\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step )\n    throws KettleException {\n    try {\n      actualizeWithInjectedValues();\n      rep.saveStepAttribute( id_transformation, id_step, \"schema\", schemaName );\n      rep.saveStepAttribute( id_transformation, id_step, \"table\", tableName );\n      rep.saveDatabaseMetaStepAttribute( id_transformation, id_step, \"id_connection\", databaseMeta );\n      rep.saveStepAttribute( id_transformation, id_step, \"commit\", commitSize );\n      rep.saveStepAttribute( id_transformation, id_step, \"update\", update );\n\n      for ( int i = 0; i < keyStream.length; i++ ) {\n        rep.saveStepAttribute( id_transformation, id_step, i, \"lookup_key_name\", keyStream[i] );\n        rep.saveStepAttribute( id_transformation, id_step, i, \"lookup_key_field\", keyLookup[i] );","sourceCodeStart":1000,"sourceCodeEnd":1036,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/dimensionlookup/DimensionLookupMeta.java#L1000-L1036","documentation":"DimensionLookupMeta.readRep wraps any exception that occurs while reading this step's configuration attributes from the Kettle repository into a KettleException with this message key. It indicates the step definition stored in the repository could not be read (attribute lookup failed unexpectedly), with the original cause attached.","triggerScenarios":"Calling readRep(Repository, MetaStore, ObjectId id_step, ...) when a repository API call such as rep.getStepAttributeBoolean/String throws for the given id_step (corrupt or missing step record, repository connectivity failure mid-read).","commonSituations":"Corrupt repository rows after failed upgrades; a transformation XML/DB record missing expected step attributes; network or session loss to the repository server while loading a transformation.","solutions":["Inspect the wrapped cause (KettleException.getCause()) to identify the actual repository failure","Verify the step record exists and is intact in the repository; re-save the transformation","Check repository connectivity/credentials and retry loading the transformation","Recreate the Dimension Lookup step if its repository record is corrupted"],"exampleFix":"// before\nDimensionLookupMeta meta = new DimensionLookupMeta();\nmeta.readRep(rep, metaStore, idStep, null);\n// after\ntry {\n  DimensionLookupMeta meta = new DimensionLookupMeta();\n  meta.readRep(rep, metaStore, idStep, null);\n} catch (KettleException e) {\n  logError(\"Failed reading Dimension Lookup step \" + idStep + \" from repository: \" + e.getCause(), e);\n  throw e;\n}","handlingStrategy":"try-catch","validationCode":"// Verify repository and step accessibility before readRep\nif (!rep.isConnected()) throw new IllegalStateException(\"Repository not connected\");\nStepMeta step = transMeta.findStep(stepName);\nif (step == null) throw new IllegalArgumentException(\"Step not found: \" + stepName);","typeGuard":null,"tryCatchPattern":"try {\n  meta.readRep(rep, metaStore, idStep, null);\n} catch (KettleException e) {\n  logError(\"Repository read failed for step \" + idStep + \": \" + e.getCause(), e);\n  throw e;\n}","preventionTips":["Always log e.getCause() — the real repository failure is wrapped","Keep repository connections healthy (timeouts, reconnect settings)","Re-save steps from Spoon after PDI upgrades to refresh stored attributes","Back up repository records before migrations"],"tags":["kettle","repository","serialization"],"backgroundTag":"file-read-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"}