pentaho/pentaho-kettle · error · KettleException
No value retrieved from slave sequence
Error message
No value retrieved from slave sequence '<slaveSequenceName>' on slave <slaveServer>
What it means
Thrown by SlaveServer.getNextSequenceValue when the NextSequenceValueServlet responds without an error tag but also without a value: the nextValueString is empty. It means the slave acknowledged the request but returned no sequence value.
Solutions
- Ensure the sequence exists and is supported on the slave (check slave version/configuration)
- Inspect the raw response XML from the NextSequenceValueServlet to see why the value is empty
- Upgrade/align master and slave versions if the servlet protocol differs
- If sequences are unused, avoid calling getNextSequenceValue in clustered runs
Example fix
// before: assuming the sequence exists on the slave
long v = slaveServer.getNextSequenceValue(partitionId, "mySeq", sb);
// after: check sequence availability first
if (!slaveServer.getSlaves().isEmpty() && !sequenceExistsOnSlave(slaveServer, "mySeq")) { throw new KettleException("Sequence mySeq missing on slave"); }
long v = slaveServer.getNextSequenceValue(partitionId, "mySeq", sb); Defensive patterns
Strategy: try-catch
Validate before calling
// Ensure the sequence is configured on the slave before requesting a value
// (no direct API; verify slave version supports sequences and sequence was initialized)
if (!slaveServer.ping()) { throw new KettleException("Slave down: " + slaveServer.getName()); } Type guard
boolean hasValue(String xml) { return xml != null && xml.contains(NextSequenceValueServlet.XML_TAG_VALUE); } Try / catch
try { Long v = slaveServer.getNextSequenceValue(partitionId, seqName, sb); }
catch (KettleException e) { if (e.getMessage().startsWith("No value retrieved")) { initializeSequenceOnSlave(seqName); } throw e; } Prevention
- Initialize sequences on slaves before clustered runs
- Keep master/slave versions aligned
- Log raw servlet responses when debugging sequence issues
When it happens
Trigger: getNextSequenceValue is called for slaveSequenceName on this slave; the HTTP response XML contains no error but the NextSequenceValue value tag is empty.
Common situations: Sequence not initialized/created on the slave; slave servlet returned an empty value due to an internal edge case; protocol/serialization mismatch between master and slave versions.
Related errors
- Incorrect value ' ' retrieved from slave sequence ' ' on…
- There was a problem retrieving a next sequence value from…
- TransMeta.Log.UnableToReadSlaveServersFromRepository
- Unable to automatically configure slave sequences
- Unable to get next value for slave sequence '" + name + "'…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/8cb89085af8b3ac7.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/cluster/SlaveServer.java:1354
}
public long getNextSlaveSequenceValue( String slaveSequenceName, long incrementValue ) throws KettleException {
try {
String xml =
execService( NextSequenceValueServlet.CONTEXT_PATH + "/" + "?" + NextSequenceValueServlet.PARAM_NAME + "="
+ URLEncoder.encode( slaveSequenceName, "UTF-8" ) + "&" + NextSequenceValueServlet.PARAM_INCREMENT + "="
+ Long.toString( incrementValue ) );
Document doc = XMLHandler.loadXMLString( xml );
Node seqNode = XMLHandler.getSubNode( doc, NextSequenceValueServlet.XML_TAG );
String nextValueString = XMLHandler.getTagValue( seqNode, NextSequenceValueServlet.XML_TAG_VALUE );
String errorString = XMLHandler.getTagValue( seqNode, NextSequenceValueServlet.XML_TAG_ERROR );
if ( !Utils.isEmpty( errorString ) ) {
throw new KettleException( errorString );
}
if ( Utils.isEmpty( nextValueString ) ) {
throw new KettleException( "No value retrieved from slave sequence '" + slaveSequenceName + "' on slave "
+ toString() );
}
long nextValue = Const.toLong( nextValueString, Long.MIN_VALUE );
if ( nextValue == Long.MIN_VALUE ) {
throw new KettleException( "Incorrect value '" + nextValueString + "' retrieved from slave sequence '"
+ slaveSequenceName + "' on slave " + toString() );
}
return nextValue;
} catch ( Exception e ) {
throw new KettleException( "There was a problem retrieving a next sequence value from slave sequence '"
+ slaveSequenceName + "' on slave " + toString(), e );
}
}
public SlaveServer getClient() {
lock.readLock().lock();
try {View on GitHub (pinned to f3058517a1)