Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 324280

Summary: Heartbeat stops working with Timer already cancelled
Product: [Modeling] EMF Reporter: Erwin Betschart <erwin>
Component: cdo.coreAssignee: Eike Stepper <stepper>
Status: CLOSED FIXED QA Contact: Eike Stepper <stepper>
Severity: normal    
Priority: P3    
Version: 4.0   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard: offline-02

Description Erwin Betschart CLA 2010-09-02 04:59:53 EDT
Build Identifier: 4.0

As far as I know a TimerTask is cancelled if an exception occurs in the run() method. The heartBeatTimerTask in HeartBeatProtocol.Server is not protected agains RunTimeExceptions.

-> All clients are disconnected due to undistributed heartbeats.

Unfortunately I cannot provider the exception which caused the TimerTaks to be cancelled.

Exception:
!ENTRY org.eclipse.net4j 4 0 2010-08-31 10:59:54.249
!MESSAGE Timer already cancelled.
!STACK 0
java.lang.IllegalStateException: Timer already cancelled.
        at java.util.Timer.sched(Timer.java:354)
        at java.util.Timer.schedule(Timer.java:222)
        at org.eclipse.net4j.signal.heartbeat.HeartBeatProtocol$Server.scheduleHeartBeatTask(HeartBeatProtocol.java:251)
        at org.eclipse.net4j.signal.heartbeat.HeartBeatProtocol$Server.access$2(HeartBeatProtocol.java:226)
        at org.eclipse.net4j.signal.heartbeat.HeartBeatProtocol$Server$1.indicating(HeartBeatProtocol.java:204)
        at org.eclipse.net4j.signal.Indication.doExtendedInput(Indication.java:55)
        at org.eclipse.net4j.signal.Signal.doInput(Signal.java:315)
        at org.eclipse.net4j.signal.Indication.execute(Indication.java:49)
        at org.eclipse.net4j.signal.Signal.runSync(Signal.java:240)
        at org.eclipse.net4j.signal.Signal.run(Signal.java:146)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)


Reproducible: Didn't try
Comment 1 Eike Stepper CLA 2010-09-02 05:56:25 EDT
I've fixed this in the TimerTasks in the following files:

/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/AbstractMonitor.java
/org.eclipse.net4j/src/org/eclipse/net4j/signal/heartbeat/HeartBeatProtocol.java
/org.eclipse.net4j/src/org/eclipse/net4j/signal/IndicationWithMonitoring.java
/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java
/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/Timeouter.java
Comment 2 Eike Stepper CLA 2010-09-02 06:04:13 EDT
Committed to HEAD
Comment 3 Eike Stepper CLA 2011-06-23 03:41:51 EDT
Available in R20110608-1407