Menu

#5 DaemonManager shutdown due to PreconditionRTException

0.9.3
closed
5
2006-04-25
2006-04-24
m4rc_ch
No

We are using daemon-manager-1.3-rc0 and got a weird
problem.

Sometimes we get a crash of the whole service, because
the AbstractDaemon throws a PreconditionRTException on
the following Check:
Reject.ifFalse(end >= start,
"End time must be greater or equals than
start time.");
The exception is thrown because the end time is before
the start time ... YES WE INVENTED TIME TRAVELS!!!!!!

To be reasonable .. this could happen when changing
the time on a server (time adjustment from a
timeserver or when changing from summer to winter
time). We encounter this problem surprisingly often
maybe the servers do have inacurate clocks.

Could you replace this Assert like condition and
simply replace a negative duration by 0 seconds. I
prefere a inacurate sleeptime than a service crash!

Here some Logs (copied from different logfiles!):

INFO | jvm 1 | 2006/04/07 23:24:24 | 2006-04-07
23:24:24,906 ERROR
[ch.elca.el4j.util.codingsupport.Reject] The
precondition {1} was not fulfilled.
INFO | jvm 1 | 2006/04/07 23:24:24 | 2006-04-07
23:24:24,921 INFO
[ch.elca.el4j.services.daemonmanager.impl.AbstractDaemo
n] Throwable was thrown while executing daemon.
INFO | jvm 1 | 2006/04/07 23:24:24 |
ch.elca.el4j.util.codingsupport.PreconditionRTException
: The precondition {1} was not fulfilled.
INFO | jvm 1 | 2006/04/07 23:24:24 | at
sun.reflect.NativeConstructorAccessorImpl.newInstance0
(Native Method)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
sun.reflect.NativeConstructorAccessorImpl.newInstance
(Unknown Source)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
sun.reflect.DelegatingConstructorAccessorImpl.newInstan
ce(Unknown Source)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
java.lang.reflect.Constructor.newInstance(Unknown
Source)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
ch.elca.el4j.util.codingsupport.Reject.getConditionExce
ption(Reject.java:218)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
ch.elca.el4j.util.codingsupport.Reject.checkCondition
(Reject.java:195)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
ch.elca.el4j.util.codingsupport.Reject.ifFalse
(Reject.java:126)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.calculateSleepTime(AbstractDaemon.java:737)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.sleepBetweenDaemonJobs(AbstractDaemon.java:704)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.doDaemonJob(AbstractDaemon.java:691)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.run(AbstractDaemon.java:574)
INFO | jvm 1 | 2006/04/07 23:24:24 | at
java.lang.Thread.run(Unknown Source)

INFO | jvm 1 | 2006/04/10 23:23:26 | 2006-04-10
23:23:26,781 ERROR
[ch.elca.el4j.util.codingsupport.Reject] The
precondition {1} was not fulfilled.
INFO | jvm 1 | 2006/04/10 23:23:26 | 2006-04-10
23:23:26,812 INFO
[ch.elca.el4j.services.daemonmanager.impl.AbstractDaemo
n] Throwable was thrown while executing daemon.
INFO | jvm 1 | 2006/04/10 23:23:26 |
ch.elca.el4j.util.codingsupport.PreconditionRTException
: The precondition {1} was not fulfilled.
INFO | jvm 1 | 2006/04/10 23:23:26 | at
sun.reflect.NativeConstructorAccessorImpl.newInstance0
(Native Method)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
sun.reflect.NativeConstructorAccessorImpl.newInstance
(Unknown Source)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
sun.reflect.DelegatingConstructorAccessorImpl.newInstan
ce(Unknown Source)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
java.lang.reflect.Constructor.newInstance(Unknown
Source)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.util.codingsupport.Reject.getConditionExce
ption(Reject.java:218)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.util.codingsupport.Reject.checkCondition
(Reject.java:195)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.util.codingsupport.Reject.ifFalse
(Reject.java:126)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.calculateSleepTime(AbstractDaemon.java:737)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.sleepBetweenDaemonJobs(AbstractDaemon.java:704)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.doDaemonJob(AbstractDaemon.java:691)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.run(AbstractDaemon.java:574)

INFO | jvm 1 | 2006/04/10 23:23:26 | 2006-04-10
23:23:26,828 ERROR
[ch.elca.el4j.util.codingsupport.Reject] The
precondition {1} was not fulfilled.
INFO | jvm 1 | 2006/04/10 23:23:26 | 2006-04-10
23:23:26,828 INFO
[ch.elca.el4j.services.daemonmanager.impl.AbstractDaemo
n] Throwable was thrown while executing daemon.
INFO | jvm 1 | 2006/04/10 23:23:26 |
ch.elca.el4j.util.codingsupport.PreconditionRTException
: The precondition {1} was not fulfilled.
INFO | jvm 1 | 2006/04/10 23:23:26 | at
sun.reflect.NativeConstructorAccessorImpl.newInstance0
(Native Method)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
sun.reflect.NativeConstructorAccessorImpl.newInstance
(Unknown Source)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
sun.reflect.DelegatingConstructorAccessorImpl.newInstan
ce(Unknown Source)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
java.lang.reflect.Constructor.newInstance(Unknown
Source)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.util.codingsupport.Reject.getConditionExce
ption(Reject.java:218)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.util.codingsupport.Reject.checkCondition
(Reject.java:195)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.util.codingsupport.Reject.ifFalse
(Reject.java:126)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.calculateSleepTime(AbstractDaemon.java:737)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.sleepBetweenDaemonJobs(AbstractDaemon.java:704)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.doDaemonJob(AbstractDaemon.java:691)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
ch.elca.el4j.services.daemonmanager.impl.AbstractDaemon
.run(AbstractDaemon.java:574)
INFO | jvm 1 | 2006/04/10 23:23:26 | at
java.lang.Thread.run(Unknown Source)

Discussion

  • Martin Zeltner

    Martin Zeltner - 2006-04-25

    Logged In: YES
    user_id=1103310

    Although this solution is not very proper I've adapted the
    abstract daemon that it allows negative duration times.

     
  • Martin Zeltner

    Martin Zeltner - 2006-04-25
    • status: open --> closed
     

Log in to post a comment.