diff --git a/CHANGES.md b/CHANGES.md index 4fe77708f..e4e7eae60 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,12 +18,17 @@ ### 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 ## Version 4.0.6 (Not yet released) +### Merged from 1.0 + +* Fix logging fault reporter raising duplicate alarm - Issue #557 + ## Version 4.0.5 ### Merged from 1.0 @@ -83,6 +88,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 @@ -105,6 +111,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 @@ -229,6 +236,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 @@ -241,6 +249,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 @@ -280,6 +289,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 7c548c993..76275916c 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 @@ -37,8 +37,11 @@ public final Map getAlarms() @Override public final void raise(final FaultCode faultCode, final 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 aac974bc3..c07719a2a 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.getAlarms().size()).isEqualTo(1); + assertThat(loggingFaultReporter.getAlarms()).containsValue(RepairFaultReporter.FaultCode.REPAIR_WARNING); + + loggingFaultReporter.raise(RepairFaultReporter.FaultCode.REPAIR_ERROR, data); + assertThat(loggingFaultReporter.getAlarms().size()).isEqualTo(1); + assertThat(loggingFaultReporter.getAlarms()).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.getAlarms().size()).isEqualTo(1); + assertThat(loggingFaultReporter.getAlarms()).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.getAlarms().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); }