in core/src/main/java/org/apache/stormcrawler/persistence/DefaultScheduler.java [103:150]
public Optional<Date> schedule(Status status, Metadata metadata) {
int minutesIncrement = 0;
Optional<Integer> customInterval = Optional.empty();
// try with a value set in the metadata
String customInMetadata = metadata.getFirstValue(DELAY_METADATA);
if (customInMetadata != null) {
customInterval = Optional.of(Integer.parseInt(customInMetadata));
}
// try with the rules from the configuration
if (!customInterval.isPresent()) {
customInterval = checkCustomInterval(metadata, status);
}
if (customInterval.isPresent()) {
minutesIncrement = customInterval.get();
} else {
switch (status) {
case FETCHED:
minutesIncrement = defaultfetchInterval;
break;
case FETCH_ERROR:
minutesIncrement = fetchErrorFetchInterval;
break;
case ERROR:
minutesIncrement = errorFetchInterval;
break;
case REDIRECTION:
minutesIncrement = defaultfetchInterval;
break;
default:
// leave it to now e.g. DISCOVERED
}
}
// a value of -1 means never fetch
// we return null
if (minutesIncrement == -1) {
return Optional.empty();
}
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.ROOT);
cal.add(Calendar.MINUTE, minutesIncrement);
return Optional.of(cal.getTime());
}