diff --git a/CHANGES.md b/CHANGES.md index b20b9e914..23d759a55 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ ### Merged from 1.0 +* Fix logging fault reporter raising duplicate alarm - Issue #557 * Fix priority calculation for local queue - Issue #546 * Skip unnecessary reads from repair history - Issue #548 * Fix repair job priority - Issue #515 @@ -128,6 +129,7 @@ ### Merged from 1.0 +* Fix logging fault reporter raising duplicate alarm - Issue #557 * Fix priority calculation for local queue - Issue #546 * Skip unnecessary reads from repair history - Issue #548 * Fix repair job priority - Issue #515 @@ -140,6 +142,7 @@ #### Merged from 1.0 +* Fix logging fault reporter raising duplicate alarm - Issue #557 * Fix priority calculation for local queue - Issue #546 * Skip unnecessary reads from repair history - Issue #548 * Fix repair job priority - Issue #515 @@ -179,6 +182,7 @@ ## Version 1.0.8 (Not yet released) +* Fix logging fault reporter raising duplicate alarm - Issue #557 * Fix priority calculation for local queue - Issue #546 * Skip unnecessary reads from repair history - Issue #548 * Fix repair job priority - Issue #515 diff --git a/fm.impl/src/main/java/com/ericsson/bss/cassandra/ecchronos/fm/impl/LoggingFaultReporter.java b/fm.impl/src/main/java/com/ericsson/bss/cassandra/ecchronos/fm/impl/LoggingFaultReporter.java index ffa0a838b..bff773341 100644 --- a/fm.impl/src/main/java/com/ericsson/bss/cassandra/ecchronos/fm/impl/LoggingFaultReporter.java +++ b/fm.impl/src/main/java/com/ericsson/bss/cassandra/ecchronos/fm/impl/LoggingFaultReporter.java @@ -32,8 +32,11 @@ public class LoggingFaultReporter implements RepairFaultReporter @Override public void raise(FaultCode faultCode, Map data) { - alarms.put(data.hashCode(), faultCode); - LOG.error("Raising alarm: {} - {}", faultCode, data); + FaultCode oldCode = alarms.put(data.hashCode(), faultCode); + if (oldCode == null || (oldCode == FaultCode.REPAIR_WARNING && faultCode == FaultCode.REPAIR_ERROR)) + { + LOG.error("Raising alarm: {} - {}", faultCode, data); + } } @Override diff --git a/fm.impl/src/test/java/com/ericsson/bss/cassandra/ecchronos/fm/impl/TestLoggingFaultReporter.java b/fm.impl/src/test/java/com/ericsson/bss/cassandra/ecchronos/fm/impl/TestLoggingFaultReporter.java index 0b374ca55..798a2fe82 100644 --- a/fm.impl/src/test/java/com/ericsson/bss/cassandra/ecchronos/fm/impl/TestLoggingFaultReporter.java +++ b/fm.impl/src/test/java/com/ericsson/bss/cassandra/ecchronos/fm/impl/TestLoggingFaultReporter.java @@ -26,6 +26,38 @@ public class TestLoggingFaultReporter { LoggingFaultReporter loggingFaultReporter = new LoggingFaultReporter(); + @Test + public void testAlarmIncreasingSeverity() + { + Map data = new HashMap<>(); + data.put(RepairFaultReporter.FAULT_KEYSPACE, "keyspace"); + data.put(RepairFaultReporter.FAULT_TABLE, "table"); + + loggingFaultReporter.raise(RepairFaultReporter.FaultCode.REPAIR_WARNING, data); + assertThat(loggingFaultReporter.alarms.size()).isEqualTo(1); + assertThat(loggingFaultReporter.alarms).containsValue(RepairFaultReporter.FaultCode.REPAIR_WARNING); + + loggingFaultReporter.raise(RepairFaultReporter.FaultCode.REPAIR_ERROR, data); + assertThat(loggingFaultReporter.alarms.size()).isEqualTo(1); + assertThat(loggingFaultReporter.alarms).containsValue(RepairFaultReporter.FaultCode.REPAIR_ERROR); + } + + @Test + public void testRaiseMultipleTimes() + { + Map data = new HashMap<>(); + data.put(RepairFaultReporter.FAULT_KEYSPACE, "keyspace"); + data.put(RepairFaultReporter.FAULT_TABLE, "table"); + + loggingFaultReporter.raise(RepairFaultReporter.FaultCode.REPAIR_WARNING, data); + loggingFaultReporter.raise(RepairFaultReporter.FaultCode.REPAIR_WARNING, data); + loggingFaultReporter.raise(RepairFaultReporter.FaultCode.REPAIR_WARNING, data); + loggingFaultReporter.raise(RepairFaultReporter.FaultCode.REPAIR_WARNING, data); + loggingFaultReporter.raise(RepairFaultReporter.FaultCode.REPAIR_WARNING, data); + assertThat(loggingFaultReporter.alarms.size()).isEqualTo(1); + assertThat(loggingFaultReporter.alarms).containsValue(RepairFaultReporter.FaultCode.REPAIR_WARNING); + } + @Test public void testCeaseAlarms() { @@ -59,6 +91,4 @@ public void testCeaseMultipleAlarms() loggingFaultReporter.cease(RepairFaultReporter.FaultCode.REPAIR_ERROR, data); assertThat(loggingFaultReporter.alarms.size()).isEqualTo(0); } - - } diff --git a/fm/src/main/java/com/ericsson/bss/cassandra/ecchronos/fm/RepairFaultReporter.java b/fm/src/main/java/com/ericsson/bss/cassandra/ecchronos/fm/RepairFaultReporter.java index e2d25a2be..85de02a0e 100644 --- a/fm/src/main/java/com/ericsson/bss/cassandra/ecchronos/fm/RepairFaultReporter.java +++ b/fm/src/main/java/com/ericsson/bss/cassandra/ecchronos/fm/RepairFaultReporter.java @@ -27,7 +27,19 @@ enum FaultCode REPAIR_ERROR } + /** + * This method might be called multiple times with the same parameters, + * implementations of this method should control whether the alarm should be raised. + * @param faultCode The fault code + * @param data The data containing keyspace and table + */ void raise(FaultCode faultCode, Map data); + /** + * This method might be called multiple times with the same parameters, + * implementations of this method should control whether the alarm should be cleared. + * @param faultCode The fault code + * @param data The data containing keyspace and table + */ void cease(FaultCode faultCode, Map data); }