Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 324280 - Heartbeat stops working with Timer already cancelled
Summary: Heartbeat stops working with Timer already cancelled
Status: CLOSED FIXED
Alias: None
Product: EMF
Classification: Modeling
Component: cdo.core (show other bugs)
Version: 4.0   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Eike Stepper CLA
QA Contact: Eike Stepper CLA
URL:
Whiteboard: offline-02
Keywords:
Depends on:
Blocks:
 
Reported: 2010-09-02 04:59 EDT by Erwin Betschart CLA
Modified: 2011-06-23 03:41 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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