{"record":{"id":"c2ddfaa8bbb2f590","repo":"pentaho/pentaho-kettle","slug":"transmeta-log-unabletoreadslaveserversfromrepository","errorCode":null,"errorMessage":"TransMeta.Log.UnableToReadSlaveServersFromRepository","messagePattern":"TransMeta\\.Log\\.UnableToReadSlaveServersFromRepository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryTransDelegate.java","lineNumber":1050,"sourceCode":"  public void readSlaves( TransMeta transMeta, boolean overWriteShared ) throws KettleException {\n    try {\n      ObjectId[] dbids = repository.getSlaveIDs( false );\n      for ( int i = 0; i < dbids.length; i++ ) {\n        SlaveServer slaveServer = repository.loadSlaveServer( dbids[i], null ); // Load last version\n        slaveServer.shareVariablesWith( transMeta );\n        SlaveServer check = transMeta.findSlaveServer( slaveServer.getName() ); // Check if there already is one in the\n                                                                                // transformation\n        if ( check == null || overWriteShared ) {\n          if ( !Utils.isEmpty( slaveServer.getName() ) ) {\n            transMeta.addOrReplaceSlaveServer( slaveServer );\n            if ( !overWriteShared ) {\n              slaveServer.setChanged( false );\n            }\n          }\n        }\n      }\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"TransMeta.Log.UnableToReadSlaveServersFromRepository\" ), dbe );\n    }\n  }\n\n  public TransDependency loadTransDependency( ObjectId id_dependency, List<DatabaseMeta> databases ) throws KettleException {\n    TransDependency transDependency = new TransDependency();\n\n    try {\n      transDependency.setObjectId( id_dependency );\n\n      RowMetaAndData r = getTransDependency( id_dependency );\n\n      if ( r != null ) {\n        long id_connection = r.getInteger( \"ID_DATABASE\", 0 );\n        transDependency.setDatabase( DatabaseMeta.findDatabase( databases, new LongObjectId( id_connection ) ) );\n        transDependency.setTablename( r.getString( \"TABLE_NAME\", null ) );\n        transDependency.setFieldname( r.getString( \"FIELD_NAME\", null ) );\n      }","sourceCodeStart":1032,"sourceCodeEnd":1068,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryTransDelegate.java#L1032-L1068","documentation":"Thrown in the readSlaves() portion of KettleDatabaseRepositoryTransDelegate when reading slave servers associated with a transformation fails with a KettleDatabaseException. Slave servers are clustered execution nodes stored in R_SLAVE; failure to load them aborts shared-object loading for the transformation. The low-level database exception is chained for diagnosis.","triggerScenarios":"readTransSharedObjects -> readSlaves querying R_SLAVE fails: table absent, connection failure, SQL permission error, or a KettleDatabaseException while mapping rows to SlaveServer objects.","commonSituations":"Repository upgraded incompletely (R_SLAVE missing), DB account lacking SELECT on R_SLAVE, network interruption to the repository DB, or bad data in slave rows.","solutions":["Check the chained cause for the exact database error message","Verify R_SLAVE exists and matches the schema of your Pentaho/Kettle version","Grant the repository user SELECT on R_SLAVE","Test repository connectivity (Connect/Explore in Spoon) before loading transformations"],"exampleFix":"// before\nTransMeta tm = new TransMeta(rep, \"myTrans\", rep.getDirectoryTree().findDirectory(dir));\n// may wrap KettleDatabaseException\n\n// after\nif (!rep.connect().isConnected()) { /* fix connection first */ }\nTransMeta tm = new TransMeta(rep, \"myTrans\", rep.getDirectoryTree().findDirectory(dir));","handlingStrategy":"try-catch","validationCode":"// Java: ensure R_SLAVE is queryable before load\nDatabase db = new Database(loggingObject, repository.getDatabaseMeta());\ndb.connect();\nboolean ok = db.checkTableExists(\"R_SLAVE\");\ndb.disconnect();\nif (!ok) throw new IllegalStateException(\"R_SLAVE missing from repository\");","typeGuard":null,"tryCatchPattern":"try {\n  transMeta = rep.loadTransformation(...);\n} catch (KettleException e) {\n  log.error(\"Slave server read failed: \" + e.getCause(), e);\n  // proceed without clustering or abort, per business need\n}","preventionTips":["Verify clustering/slave configuration rows exist when a transformation references clusters","Keep repository DB accounts' grants in sync with all R_* tables","Test the repository connection in Spoon before opening cluster-heavy transformations","Check repository schema version consistency across environments"],"tags":["database","repository","kettle","slave-server","clustering"],"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"}