From 688c7a872a5eb114f8b86e88df15e6ccf04cd76c Mon Sep 17 00:00:00 2001 From: Holger Friedrich Date: Thu, 15 Dec 2022 08:28:15 +0100 Subject: [PATCH 1/2] [rrd4j] Error handling for broken rrd4j files Catch exceptions thrown by getDB(..) and print the name of the affected database file. This allows to identify a broken rrd4j file. Signed-off-by: Holger Friedrich --- .../rrd4j/internal/RRD4jPersistenceService.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java b/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java index d29170d508b76..4bcab810310db 100644 --- a/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java +++ b/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java @@ -152,7 +152,12 @@ public synchronized void store(final Item item, @Nullable final String alias) { } final String name = alias == null ? item.getName() : alias; - RrdDb db = getDB(name); + RrdDb db = null; + try { + db = getDB(name); + } catch (Exception e) { + logger.warn("Failed to open rrd4j database '{}' ({})", name, e.getClass().getName()); + } if (db == null) { return; } @@ -249,7 +254,12 @@ public void store(Item item) { public Iterable query(FilterCriteria filter) { String itemName = filter.getItemName(); - RrdDb db = getDB(itemName); + RrdDb db = null; + try { + db = getDB(itemName); + } catch (Exception e) { + logger.warn("Failed to open rrd4j database '{}' ({})", itemName, e.getClass().getName()); + } if (db == null) { logger.debug("Could not find item '{}' in rrd4j database", itemName); return List.of(); From 2a3f9582e6efe3510c0e87f7b008669658637ad2 Mon Sep 17 00:00:00 2001 From: Holger Friedrich Date: Thu, 15 Dec 2022 09:33:05 +0100 Subject: [PATCH 2/2] review comments Signed-off-by: Holger Friedrich --- .../persistence/rrd4j/internal/RRD4jPersistenceService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java b/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java index 4bcab810310db..147e675409470 100644 --- a/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java +++ b/bundles/org.openhab.persistence.rrd4j/src/main/java/org/openhab/persistence/rrd4j/internal/RRD4jPersistenceService.java @@ -259,6 +259,7 @@ public Iterable query(FilterCriteria filter) { db = getDB(itemName); } catch (Exception e) { logger.warn("Failed to open rrd4j database '{}' ({})", itemName, e.getClass().getName()); + return List.of(); } if (db == null) { logger.debug("Could not find item '{}' in rrd4j database", itemName);