pentaho/pentaho-kettle · error · KettleException
JobEntryFTPS.SuccesConditionBroken
JobEntryFTPS.SuccesConditionBroken
Error message
JobEntryFTPS.SuccesConditionBroken
What it means
JobEntryFTPSGet throws this KettleException when the entry's success-condition logic has flagged too many errors (successConditionBroken) while iterating the file list. The entry tracks error count (NrErrors) against configured limits (e.g., 'success if no errors', 'success if error count less than N', or a percentage); once the limit is crossed, further file processing is aborted with this message. The text comes from the JobEntryFTPS.SuccesConditionBroken message key with the error count as a parameter.
Solutions
- Fix the underlying per-file failures logged as NrErrors (check remote file permissions, existence, and FTPS connectivity).
- Relax the success condition in the job entry settings (e.g., change from 'success if no errors' to a higher error limit) if partial success is acceptable.
- Add a filter/wildcard so the file list only contains files the job can actually process.
Example fix
// before: any single file error aborts the entry entry.setSuccessCondition( JobEntryFTPSGet.SUCCESS_IF_NO_ERRORS ); // after: tolerate up to N errors entry.setSuccessCondition( JobEntryFTPSGet.SUCCESS_IF_ERRORS_LESS ); entry.setNrErrorsLimit( "5" );
Defensive patterns
Strategy: validation
Validate before calling
// validate entry config before executing
if ( JobEntryFTPSGet.SUCCESS_IF_ERRORS_LESS.equals( entry.getSuccessCondition() )
&& ( entry.getNrErrorsLimit() == null || Integer.parseInt( entry.getNrErrorsLimit() ) <= 0 ) ) {
throw new IllegalArgumentException( "nr_errors_limit must be > 0 for SUCCESS_IF_ERRORS_LESS" );
} Try / catch
try {
jobEntry.execute( result, context );
} catch ( KettleException e ) {
if ( e.getMessage() != null && e.getMessage().contains( "SuccesConditionBroken" ) ) {
log.warn( "FTPS get aborted after error threshold; check per-file failures in logs" );
result.setResult( false );
} else { throw e; }
} Prevention
- Pre-filter the remote file list (wildcards/filters) so only processable files are fetched.
- Verify FTPS account read permissions on the target directory before running.
- Set the success condition and error limit explicitly rather than relying on defaults.
- Review per-file error logs after any threshold abort.
When it happens
Trigger: Executing JobEntryFTPSGet where individual file downloads fail (missing remote files, permission errors, connection drops), incrementing NrErrors past the configured success-condition threshold; the next loop iteration at the successConditionBroken check throws.
Common situations: Remote directories containing files the FTPS account cannot read; transient network drops mid-batch; misconfigured success_condition / nr_errors_limit in the job entry dialog so a single failure trips the limit.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- JobEntryFTPS.JobStopped
- JobFTPS.Error.CreationFolder
- JobFTPSPUT.Log.UnableToLoadFromXml
- JobFTPSPUT.UnableToLoadFromRepo
- A connection of type PALO is expected
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/dfc54b5c15aaf64f.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ftps/impl/src/main/java/org/pentaho/di/job/entries/ftpsget/JobEntryFTPSGet.java:846
return result;
}
private void downloadFiles( FTPSConnection connection, String folder, Pattern pattern, Result result )
throws KettleException {
List<FTPFile> fileList = connection.getFileList( folder );
if ( isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "JobEntryFTPS.FoundNFiles", fileList.size() ) );
}
for ( int i = 0; i < fileList.size(); i++ ) {
if ( parentJob.isStopped() ) {
throw new KettleException( BaseMessages.getString( PKG, "JobEntryFTPS.JobStopped" ) );
}
if ( successConditionBroken ) {
throw new KettleException( BaseMessages.getString( PKG, "JobEntryFTPS.SuccesConditionBroken", NrErrors ) );
}
FTPFile file = fileList.get( i );
if ( isDetailed() ) {
logDetailed( BaseMessages.getString(
PKG, "JobEntryFTPS.AnalysingFile", file.getPath(), file.getName(), file.getMode(), file
.getDate().toString(), file.getFileType() == 0 ? "File" : "Folder", String
.valueOf( file.getSize() ) ) );
}
if ( !file.isDirectory() && !file.isLink() ) {
// download file
boolean getIt = true;
if ( getIt ) {
try {
// See if the file matches the regular expression!
if ( pattern != null ) {
Matcher matcher = pattern.matcher( file.getName() );View on GitHub (pinned to f3058517a1)