Using interval-origin in monitor operation definition does not work any more.
Veryfied on Pacemaker 1.1.10, but we think it does not work since 1.1.8 until now.
 
Pengine calculates start delay in function unpack_operation and calls there crm_time_subtract.
 
The call to crm_time_subtract with
origin=2014-03-31 19:20:00Z
date_set->now=2014-03-31 17:31:04Z
result in
delay=-0001-12-31 01:48:56Z
delay_s=31456136
start_delay=31456136000
which is almost a year in the future.
 
The function crm_time_subtract calculates this by the crm_time_add_* functions.
 
The buggy statement is in crm_time_add_days.
If the calculated number of days is zero, it subtracts one year and add the number of days, in this case 365.
But if a_time->days is zero, it must not do anything.
 
The function crm_time_get_seconds, which is called by unpack_operation cannot handle negative years, so it ignores the year -1 but adds 365 days.
 
There are two solutions.
One is the add handling on negative years to crm_time_get_seconds.
The other is to exchange line 1140 in iso8601.c
while (a_time->days <= 0) {
by
while (a_time->days < 0) {
 
Second solution is verified to bring the expected result, start-delay of little less than two hours.
Handling of negative years in crm_time_get_seconds might not be a proper solution as the return value of the function is unsigned long long and what to report if the complete calculation gives a negative number of seconds.
 
Rainer
 
_______________________________________________
Pacemaker mailing list: Pacemaker@oss.clusterlabs.org
http://oss.clusterlabs.org/mailman/listinfo/pacemaker

Project Home: http://www.clusterlabs.org
Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
Bugs: http://bugs.clusterlabs.org

Reply via email to