[rrd4j] Avoid IAE thrown if e.g. invalid start/end time given (#14238)

Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
This commit is contained in:
Christoph Weitkamp 2023-01-20 11:58:47 +01:00 committed by GitHub
parent 80094b5e9d
commit a78db1feb2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -280,7 +280,10 @@ public class RRD4jPersistenceService implements QueryablePersistenceService {
}
long start = 0L;
long end = filter.getEndDate() == null ? System.currentTimeMillis() / 1000
// set end to {@link Instant#MAX} instead of current timestamp to enable requesting future time ranges including
// boundary values via REST API
// see discussion in https://github.com/openhab/openhab-addons/pull/14238
long end = filter.getEndDate() == null ? Instant.MAX.getEpochSecond()
: filter.getEndDate().toInstant().getEpochSecond();
try {
@ -308,13 +311,21 @@ public class RRD4jPersistenceService implements QueryablePersistenceService {
start = end;
}
} else {
throw new UnsupportedOperationException("rrd4j does not allow querys without a begin date, "
+ "unless order is descending and a single value is requested");
throw new UnsupportedOperationException(
"rrd4j does not allow querys without a begin date, unless order is descending and a single value is requested");
}
} else {
start = filter.getBeginDate().toInstant().getEpochSecond();
}
// do not call method {@link RrdDb#createFetchRequest(ConsolFun, long, long, long)} if start > end to avoid
// an IAE to be thrown
if (start > end) {
logger.warn("Could not query rrd4j database for item '{}': start ({}) > end ({})", itemName, start,
end);
return List.of();
}
FetchRequest request = db.createFetchRequest(getConsolidationFunction(db), start, end, 1);
FetchData result = request.fetchData();