{"record":{"id":"4de9554c7c22d1fc","repo":"pentaho/pentaho-kettle","slug":"incorrect-value-nextvaluestring-retrieved-from-slave","errorCode":null,"errorMessage":"Incorrect value '<nextValueString>' retrieved from slave sequence '<slaveSequenceName>' on slave <slaveServer>","messagePattern":"Incorrect value '<nextValueString>' retrieved from slave sequence '<slaveSequenceName>' on slave <slaveServer>","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/cluster/SlaveServer.java","lineNumber":1359,"sourceCode":"        execService( NextSequenceValueServlet.CONTEXT_PATH + \"/\" + \"?\" + NextSequenceValueServlet.PARAM_NAME + \"=\"\n          + URLEncoder.encode( slaveSequenceName, \"UTF-8\" ) + \"&\" + NextSequenceValueServlet.PARAM_INCREMENT + \"=\"\n          + Long.toString( incrementValue ) );\n\n      Document doc = XMLHandler.loadXMLString( xml );\n      Node seqNode = XMLHandler.getSubNode( doc, NextSequenceValueServlet.XML_TAG );\n      String nextValueString = XMLHandler.getTagValue( seqNode, NextSequenceValueServlet.XML_TAG_VALUE );\n      String errorString = XMLHandler.getTagValue( seqNode, NextSequenceValueServlet.XML_TAG_ERROR );\n\n      if ( !Utils.isEmpty( errorString ) ) {\n        throw new KettleException( errorString );\n      }\n      if ( Utils.isEmpty( nextValueString ) ) {\n        throw new KettleException( \"No value retrieved from slave sequence '\" + slaveSequenceName + \"' on slave \"\n          + toString() );\n      }\n      long nextValue = Const.toLong( nextValueString, Long.MIN_VALUE );\n      if ( nextValue == Long.MIN_VALUE ) {\n        throw new KettleException( \"Incorrect value '\" + nextValueString + \"' retrieved from slave sequence '\"\n          + slaveSequenceName + \"' on slave \" + toString() );\n      }\n\n      return nextValue;\n    } catch ( Exception e ) {\n      throw new KettleException( \"There was a problem retrieving a next sequence value from slave sequence '\"\n        + slaveSequenceName + \"' on slave \" + toString(), e );\n    }\n  }\n\n  public SlaveServer getClient() {\n    lock.readLock().lock();\n    try {\n      String pHostName = getHostname();\n      String pPort = getPort();\n      String name = MessageFormat.format( \"Dynamic slave [{0}:{1}]\", pHostName, pPort );\n      SlaveServer client = new SlaveServer( name, pHostName, pPort, getUsername(), getPassword() );\n      client.setSslMode( isSslMode() );","sourceCodeStart":1341,"sourceCodeEnd":1377,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/cluster/SlaveServer.java#L1341-L1377","documentation":"Thrown by SlaveServer.getNextSequenceValue when the value returned by the slave cannot be parsed as a long: Const.toLong returns the Long.MIN_VALUE sentinel. The message echoes the unparsable value, sequence name, and slave. Distinct from 628 in that a value was returned but it is malformed.","triggerScenarios":"The NextSequenceValueServlet response contains a non-numeric or out-of-range value string for slaveSequenceName, so Const.toLong(nextValueString, Long.MIN_VALUE) hits the default sentinel.","commonSituations":"Master/slave protocol version mismatch causing a different XML tag to be read; corrupted response; value tag containing an error text instead of a number; integer overflow on very large sequence values.","solutions":["Check master and slave Pentaho/Kettle versions match (protocol compatibility)","Capture and inspect the raw servlet response to see what value was actually returned","Verify the sequence value on the slave has not overflowed long range","Retry the request; if intermittent, check network corruption/proxy rewriting of responses"],"exampleFix":"// before: parsing response blindly\nlong v = slaveServer.getNextSequenceValue(partitionId, seqName, sb);\n// after: validate response content before use\nString xml = slaveServer.execService(...);\nif (xml == null || !xml.contains(NextSequenceValueServlet.XML_TAG)) { throw new KettleException(\"Malformed sequence response from slave\"); }\nlong v = Long.parseLong(valueString); // with NumberFormatException handling","handlingStrategy":"validation","validationCode":"// Parse and validate the value yourself before trusting it\nString v = XMLHandler.getTagValue(seqNode, NextSequenceValueServlet.XML_TAG_VALUE);\nif (v == null || !v.matches(\"-?\\\\d+\")) { throw new KettleException(\"Malformed sequence value: \" + v); }\nlong nextValue = Long.parseLong(v);","typeGuard":"boolean isParsableLong(String s) { if (s == null || s.isEmpty()) return false; try { Long.parseLong(s.trim()); return true; } catch (NumberFormatException e) { return false; } }","tryCatchPattern":"try { long v = slaveServer.getNextSequenceValue(partitionId, seqName, sb); }\ncatch (KettleException e) { if (e.getMessage().startsWith(\"Incorrect value\")) { log.error(\"Protocol/version mismatch on sequence response\"); } throw e; }","preventionTips":["Align master and slave Kettle/Pentaho versions (same XML protocol)","Validate raw response XML when sequence calls fail intermittently","Watch for long overflow in sequence generators on slaves","Add integration tests exercising getNextSequenceValue against real slaves"],"tags":["slave-server","sequence","clustering","parse-error"],"backgroundTag":"unexpected-response-shape","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"}