From: <sc...@hy...> - 2009-12-22 01:11:47
|
Author: scottmf Date: 2009-12-21 17:11:31 -0800 (Mon, 21 Dec 2009) New Revision: 14111 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=14111 Modified: branches/HQ_4_2_0_PATCH/src/org/hyperic/hq/events/server/session/MultiConditionEvaluator.java branches/HQ_4_2_0_PATCH/unittest/src/org/hyperic/hq/events/server/session/MultiConditionEvaluatorTest.java Log: [HHQ-3613] removing from a collection while it is being iterated throws ConcurrentModificationException. Need to remove from the iterator itself Modified: branches/HQ_4_2_0_PATCH/src/org/hyperic/hq/events/server/session/MultiConditionEvaluator.java =================================================================== --- branches/HQ_4_2_0_PATCH/src/org/hyperic/hq/events/server/session/MultiConditionEvaluator.java 2009-12-21 09:15:58 UTC (rev 14110) +++ branches/HQ_4_2_0_PATCH/src/org/hyperic/hq/events/server/session/MultiConditionEvaluator.java 2009-12-22 01:11:31 UTC (rev 14111) @@ -114,7 +114,7 @@ // than System.currentTimeMillis Map.Entry entry = (Map.Entry) iter.next(); if (isExpired((AbstractEvent) entry.getValue())) { - events.remove(entry.getKey()); + iter.remove(); } } } Modified: branches/HQ_4_2_0_PATCH/unittest/src/org/hyperic/hq/events/server/session/MultiConditionEvaluatorTest.java =================================================================== --- branches/HQ_4_2_0_PATCH/unittest/src/org/hyperic/hq/events/server/session/MultiConditionEvaluatorTest.java 2009-12-21 09:15:58 UTC (rev 14110) +++ branches/HQ_4_2_0_PATCH/unittest/src/org/hyperic/hq/events/server/session/MultiConditionEvaluatorTest.java 2009-12-22 01:11:31 UTC (rev 14111) @@ -30,6 +30,7 @@ public void setUp() throws Exception { super.setUp(); +Thread.sleep(5000); this.executionStrategy = EasyMock.createMock(ExecutionStrategy.class); } @@ -297,13 +298,20 @@ mockEvent2.setTimestamp(System.currentTimeMillis() - (12 * 60 * 1000)); TriggerFiredEvent triggerFired2 = new TriggerFiredEvent(trigger1Id, mockEvent2); + MockEvent mockEvent3 = new MockEvent(4l, 5); + // trigger fired event occurred 12 minutes ago and is already expired + mockEvent2.setTimestamp(System.currentTimeMillis() - (12 * 60 * 1000)); + TriggerFiredEvent triggerFired3 = new TriggerFiredEvent(trigger1Id, mockEvent3); + EasyMock.replay(executionStrategy); evaluator.triggerFired(triggerFired); + // this setTimestamp() is signifying that time has passed since the last + // trigger fired + mockEvent.setTimestamp(System.currentTimeMillis() - (12 * 60 * 1000)); evaluator.triggerFired(triggerFired2); EasyMock.verify(executionStrategy); Map expectedEvents = new LinkedHashMap(); - expectedEvents.put(trigger2Id, triggerFired); assertEquals(expectedEvents, events); } |