pentaho/pentaho-kettle · error · KettleException
There was an error passing the exported job to the remote…
Error message
There was an error passing the exported job to the remote server:
What it means
When exporting a job (with resources) to a remote server, sendToSlaveServer() zips the job and calls slaveServer.sendExport(...) via RegisterPackageServlet. If the returned WebResult is not OK, the library throws a KettleException containing this message plus the server's message. It means the Carte server rejected the uploaded exported job package.
Solutions
- Read webResult.getMessage() in the exception text: it contains the Carte server's own error; fix that root cause first.
- Confirm the Carte server is running and the same (or compatible) Pentaho version as the client.
- Check Carte authentication credentials in the SlaveServer definition (username/password).
- Verify the remote server has writable temp space and correct karaf/plugins installed to load the job.
- Retry with executionConfiguration exporting fewer resources to isolate which part of the archive the server rejects.
Example fix
// before: stale Carte credentials
SlaveServer ss = new SlaveServer("carte", "host", "8080", "admin", "wrongpass");
// after: verify credentials and reachability first
SlaveServer ss = new SlaveServer("carte", "host", "8080", "cluster", "cluster");
if (!ss.ping()) throw new IllegalStateException("Carte unreachable before export"); Defensive patterns
Strategy: try-catch
Validate before calling
if (!slaveServer.ping()) {
throw new IllegalStateException("Carte server unreachable before export: " + slaveServer.getHostname());
} Try / catch
try {
return Job.sendToSlaveServer(jobMeta, execCfg, repo, metaStore);
} catch (KettleException e) {
log.error("Remote export rejected: {}", e.getMessage());
throw new RemoteExecutionException(e.getMessage(), e);
} Prevention
- Ping the slave server before dispatching exports.
- Keep client and Carte versions aligned.
- Verify Carte credentials in the SlaveServer metadata.
- Ensure the remote host has writable temp space and required plugins.
When it happens
Trigger: Calling sendToSlaveServer on a job with resource export enabled where slaveServer.sendExport returns a non-OK WebResult (server-side registration failed, servlet rejected the archive, authentication failed, or an HTTP-level error was converted to an error WebResult).
Common situations: Carte server version mismatch with client; wrong register package servlet URL/port; Carte not authorized to write its temp/repository location; archive name/base resource name issues after export.
Understand the failure class
Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.
Related errors
- There was an error posting the job on the remote server:
- There was an error starting the job on the remote server:
- Carte.Error.NoServerFound
- Carte.Error.NoShutdown
- A server socket allocation always has to accompanied by a…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/22a239bc8255a2e6.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/Job.java:1759
// First export the job... slaveServer.getVariable("MASTER_HOST")
//
try ( FileObject tempFile = KettleVFS.getInstance( DefaultBowl.getInstance() )
.createTempFile( "jobExport", ".zip", System.getProperty( "java.io.tmpdir" ), jobMeta ) ) {
// Use tempFile within this block
Bowl globalBowl = repository != null ? repository.getBowl() : DefaultBowl.getInstance();
TopLevelResource topLevelResource =
ResourceUtil.serializeResourceExportInterface( jobMeta.getBowl(), globalBowl, tempFile.getName().toString(),
jobMeta, jobMeta, repository, metaStore, executionConfiguration.getXML(),
CONFIGURATION_IN_EXPORT_FILENAME );
// Send the zip file over to the slave server...
String result =
slaveServer.sendExport( topLevelResource.getArchiveName(), RegisterPackageServlet.TYPE_JOB, topLevelResource
.getBaseResourceName() );
WebResult webResult = WebResult.fromXMLString( result );
if ( !webResult.getResult().equalsIgnoreCase( WebResult.STRING_OK ) ) {
throw new KettleException( "There was an error passing the exported job to the remote server: " + Const.CR
+ webResult.getMessage() );
}
carteObjectId = webResult.getId();
}
} else {
String xml = new JobConfiguration( jobMeta, executionConfiguration ).getXML();
String reply = slaveServer.sendXML( xml, RegisterJobServlet.CONTEXT_PATH + "/?xml=Y" );
WebResult webResult = WebResult.fromXMLString( reply );
if ( !webResult.getResult().equalsIgnoreCase( WebResult.STRING_OK ) ) {
throw new KettleException( "There was an error posting the job on the remote server: " + Const.CR + webResult
.getMessage() );
}
carteObjectId = webResult.getId();
}
// Start the job
//View on GitHub (pinned to f3058517a1)