| Summary: | Heartbeat stops working with Timer already cancelled | ||
|---|---|---|---|
| Product: | [Modeling] EMF | Reporter: | Erwin Betschart <erwin> |
| Component: | cdo.core | Assignee: | 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 | ||
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 Committed to HEAD Available in R20110608-1407 |
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