{"record":{"id":"8bf500dc3d3d06eb","repo":"pentaho/pentaho-kettle","slug":"jobmeta-log-unabletoreadslaveserversfromrepository","errorCode":null,"errorMessage":"JobMeta.Log.UnableToReadSlaveServersFromRepository","messagePattern":"JobMeta\\.Log\\.UnableToReadSlaveServersFromRepository","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryJobDelegate.java","lineNumber":759,"sourceCode":"    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( jobMeta );\n\n        SlaveServer check = jobMeta.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            jobMeta.addOrReplaceSlaveServer( slaveServer );\n            if ( !overWriteShared ) {\n              slaveServer.setChanged( false );\n            }\n          }\n        }\n      }\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( BaseMessages\n        .getString( PKG, \"JobMeta.Log.UnableToReadSlaveServersFromRepository\" ), dbe );\n    }\n  }\n\n  public void readSharedObjects( JobMeta jobMeta ) throws KettleException {\n    readDatabases( jobMeta, true );\n    readSlaves( jobMeta, true );\n  }\n\n  public synchronized ObjectId getJobID( String name, ObjectId id_directory ) throws KettleException {\n    return repository.connectionDelegate.getIDWithValue(\n      quoteTable( KettleDatabaseRepository.TABLE_R_JOB ), quote( KettleDatabaseRepository.FIELD_JOB_ID_JOB ),\n      quote( KettleDatabaseRepository.FIELD_JOB_NAME ), name,\n      quote( KettleDatabaseRepository.FIELD_JOB_ID_DIRECTORY ), id_directory );\n  }\n\n  public synchronized int getNrJobs() throws KettleException {\n    int retval = 0;","sourceCodeStart":741,"sourceCodeEnd":777,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/repository/kdr/delegates/KettleDatabaseRepositoryJobDelegate.java#L741-L777","documentation":"readSlaves reads slave server definitions (R_SLAVE table) from the repository and adds them to the JobMeta. A KettleDatabaseException while querying those rows is wrapped in this KettleException meaning 'unable to read slave servers from the repository'.","triggerScenarios":"Called during readSharedObjects (job/transformation load) when the query over R_SLAVE fails: missing table, schema mismatch, dead metadata connection, or SQL error.","commonSituations":"Loading a job from a partially upgraded repository lacking R_SLAVE; cluster/slave configuration stored in an unreachable repository; connectivity failure while loading shared objects.","solutions":["Inspect the chained KettleDatabaseException cause for the underlying SQL/connection failure.","Run the repository upgrade/repair scripts so R_SLAVE and related tables exist and match your Kettle version.","Verify the repository metadata database is reachable; reconnect and reload.","If slaves are unused, load without shared objects or prune stale slave rows."],"exampleFix":"// before\nJobMeta job = (JobMeta) repository.loadJob(name, directory, monitor, null); // fails reading R_SLAVE\n// after\ntry {\n  JobMeta job = (JobMeta) repository.loadJob(name, directory, monitor, null);\n} catch (KettleException e) {\n  logError(\"Slave server read failed: \" + e.getCause(), e);\n  // upgrade repository schema / restore DB connection, then retry\n}","handlingStrategy":"try-catch","validationCode":"if (!repository.isConnected()) { repository.connect(user, password); }\n// verify R_SLAVE table exists (repository schema version check) before loading jobs","typeGuard":null,"tryCatchPattern":"try {\n  JobMeta job = (JobMeta) repository.loadJob(name, dir, monitor, null);\n} catch (KettleException e) {\n  logError(\"Could not read slave servers: \" + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()), e);\n  // upgrade repository schema or restore DB, then retry\n}","preventionTips":["Run repository creation/upgrade scripts fully so R_SLAVE exists.","Keep client Kettle version aligned with repository schema version.","Check repository DB health before loading clustered jobs.","Ignore/skip slave shared objects when clustering features are unused."],"tags":["database","repository","slave-servers","read-failure"],"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"}