pentaho/pentaho-kettle · error · KettleDatabaseException
JdbcDriverResolver: failed to download '" + driverId +…
Error message
JdbcDriverResolver: failed to download '" + driverId + ".jar" + "' from '" + downloadUrl + "': " + e.getMessage()
What it means
The catch-all in downloadFromService(): any non-KettleDatabaseException failure during the download — DNS failure, connect timeout, SSL error, local disk write error, interruption — is wrapped into this KettleDatabaseException containing the driver name, download URL, and e.getMessage(). The partially written temp file is deleted first.
Solutions
- Read the cause (getCause()) — the wrapped exception identifies network vs disk failure
- Test connectivity to downloadUrl with curl from the same host
- Check disk space and write permissions on the driver cache/save directory
- Import required TLS certificates or configure proxy settings (http.proxyHost etc.)
Example fix
// before // request without proxy in a proxied corporate network → UnknownHostException/connect timeout System.setProperty( "https.proxyHost", "" ); // after System.setProperty( "https.proxyHost", "proxy.corp.example.com" ); System.setProperty( "https.proxyPort", "8080" );
Defensive patterns
Strategy: retry
Validate before calling
InetAddress addr = InetAddress.getByName( host ); // fails fast on DNS problems File cacheDir = new File( saveDir ); if ( !cacheDir.canWrite() ) throw new IllegalStateException( "driver cache dir not writable: " + cacheDir );
Try / catch
try { path = JdbcDriverResolver.resolve( driverId ); } catch ( KettleDatabaseException e ) { Throwable c = e.getCause(); if ( c instanceof IOException ) { /* network/disk — retry or surface clearly */ } throw e; } Prevention
- Configure proxy/TLS settings for outbound HTTPS
- Monitor disk space on the driver cache volume
- Use stable, writable directories for driver caching
- Pre-download drivers during image build
When it happens
Trigger: Network unreachable or DNS failure for the service host; connection/read timeout mid-transfer; SSL handshake failure; IOException writing the temp file to the local cache directory (disk full, permissions).
Common situations: Corporate proxy blocking the outbound request; VPN not connected; disk full or read-only driver cache directory; TLS certificates not trusted by the JVM truststore.
Related errors
- Failed to download file:
- Failed to fetch driver metadata for
- Failed to fetch driver metadata for
- JdbcDriverResolver: download of '" + driverId + ".jar" + "'…
- The function call getShortFilename throw an error : +…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/cbaabbe04fe6db69.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/org/pentaho/di/core/database/JdbcDriverResolver.java:318
} finally {
conn.disconnect();
}
// Move temp file to final location; fall back to non-atomic copy if needed.
moveWithAtomicFallback( tempPath, savePath );
log.logBasic( "JdbcDriverResolver: download complete → " + savePath );
DynamicDriverCache.getInstance().evictByJar( savePath.toAbsolutePath().toString() );
return savePath.toAbsolutePath().toString();
} catch ( KettleDatabaseException e ) {
deleteSilently( tempPath );
throw e;
} catch ( Exception e ) {
deleteSilently( tempPath );
throw new KettleDatabaseException(
"JdbcDriverResolver: failed to download '" + driverId + ".jar" + "' from '"
+ downloadUrl + "': " + e.getMessage(), e );
}
} finally {
lock.unlock();
DOWNLOAD_LOCKS.remove( driverId + ".jar", lock );
}
}
/**
* Moves {@code source} to {@code target}, attempting an atomic move first and falling back to a
* non-atomic replace if the filesystem does not support atomic moves.
*/
private static void moveWithAtomicFallback( Path source, Path target ) throws java.io.IOException {
try {
Files.move( source, target, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING );
} catch ( java.nio.file.AtomicMoveNotSupportedException e ) {
Files.move( source, target, StandardCopyOption.REPLACE_EXISTING );View on GitHub (pinned to f3058517a1)