<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div>
<div>Of course, I can.</div>

<div>
<div>      <primitive class="ocf" id="resD" provider="heartbeat" type="Dummy"><br/>
        <operations><br/>
          <op id="resD-start-0" interval="0" name="start" timeout="20"/><br/>
          <op id="resD-stop-0" interval="0" name="stop" timeout="20"/><br/>
          <op id="resD-monitor-1h" interval="1h" interval-origin="00:34" name="monitor" timeout="60"/><br/>
        </operations><br/>
        <meta_attributes id="resD-meta_attributes"><br/>
          <nvpair id="resD-meta_attributes-failure-timeout" name="failure-timeout" value="15m"/><br/>
          <nvpair id="resD-meta_attributes-migration-threshold" name="migration-threshold" value="3"/><br/>
        </meta_attributes><br/>
      </primitive></div>

<div> </div>

<div>Yes, the origin is in the future, but consider above monitor configuration.</div>

<div>The monitor operation shall run every hour at 34 minutes.</div>

<div>If i would specifiy a full date in the past then pengine has to run a number of while(rc<0) loops in unpack_operation.</div>

<div>One year after full date exactly 8760 and this for every call of unpack_operation.</div>

<div>Thats why i specified the first possible run time every day and then they are maximum of 23 while loop runs.</div>
</div>

<div>
<div> </div>

<div>If unpack_operation is called between 00:00 and 00:34 the described situation happens.</div>

<div>Origin is later than now.</div>

<div> </div>

<div>Applying this patch will help.</div>

<div>
<div>diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c<br/>
index 7dc2495..742de70 100644<br/>
--- a/lib/common/iso8601.c<br/>
+++ b/lib/common/iso8601.c<br/>
@@ -1137,7 +1137,7 @@ crm_time_add_days(crm_time_t * a_time, int extra)<br/>
         ydays = crm_time_leapyear(a_time->years) ? 366 : 365;<br/>
     }</div>

<div>-    while (a_time->days <= 0) {<br/>
+    while (a_time->days < 0) {<br/>
         a_time->years--;<br/>
         a_time->days += crm_time_leapyear(a_time->years) ? 366 : 365;<br/>
     }</div>

<div> </div>

<div>Rainer</div>
</div>

<div name="quote" style="margin:10px 5px 5px 10px; padding: 10px 0 10px 10px; border-left:2px solid #C3D9E5; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div style="margin:0 0 10px 0;"><b>Gesendet:</b> Mittwoch, 09. April 2014 um 08:57 Uhr<br/>
<b>Von:</b> "Andrew Beekhof" <andrew@beekhof.net><br/>
<b>An:</b> "The Pacemaker cluster resource manager" <pacemaker@oss.clusterlabs.org><br/>
<b>Betreff:</b> Re: [Pacemaker] Interval-origin in monitor operations does not work</div>

<div name="quoted-content"><br/>
On 1 Apr 2014, at 5:10 am, Rainer Brestan <rainer.brestan@gmx.net> wrote:<br/>
<br/>
> Using interval-origin in monitor operation definition does not work any more.<br/>
> Veryfied on Pacemaker 1.1.10, but we think it does not work since 1.1.8 until now.<br/>
><br/>
> Pengine calculates start delay in function unpack_operation and calls there crm_time_subtract.<br/>
><br/>
> The call to crm_time_subtract with<br/>
> origin=2014-03-31 19:20:00Z<br/>
> date_set->now=2014-03-31 17:31:04Z<br/>
> result in<br/>
> delay=-0001-12-31 01:48:56Z<br/>
> delay_s=31456136<br/>
> start_delay=31456136000<br/>
> which is almost a year in the future.<br/>
<br/>
To be fair, the origin was also in the future.<br/>
I don't think that was expected.<br/>
<br/>
Can you supply your cib so I can experiment?<br/>
<br/>
><br/>
> The function crm_time_subtract calculates this by the crm_time_add_* functions.<br/>
><br/>
> The buggy statement is in crm_time_add_days.<br/>
> If the calculated number of days is zero, it subtracts one year and add the number of days, in this case 365.<br/>
> But if a_time->days is zero, it must not do anything.<br/>
><br/>
> 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.<br/>
><br/>
> There are two solutions.<br/>
> One is the add handling on negative years to crm_time_get_seconds.<br/>
> The other is to exchange line 1140 in iso8601.c<br/>
> while (a_time->days <= 0) {<br/>
> by<br/>
> while (a_time->days < 0) {<br/>
><br/>
> Second solution is verified to bring the expected result, start-delay of little less than two hours.<br/>
> 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.<br/>
><br/>
> Rainer<br/>
><br/>
> _______________________________________________<br/>
> Pacemaker mailing list: Pacemaker@oss.clusterlabs.org<br/>
> <a href="http://oss.clusterlabs.org/mailman/listinfo/pacemaker" target="_blank">http://oss.clusterlabs.org/mailman/listinfo/pacemaker</a><br/>
><br/>
> Project Home: <a href="http://www.clusterlabs.org" target="_blank">http://www.clusterlabs.org</a><br/>
> Getting started: <a href="http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf" target="_blank">http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf</a><br/>
> Bugs: <a href="http://bugs.clusterlabs.org" target="_blank">http://bugs.clusterlabs.org</a><br/>
<br/>
_______________________________________________<br/>
Pacemaker mailing list: Pacemaker@oss.clusterlabs.org<br/>
<a href="http://oss.clusterlabs.org/mailman/listinfo/pacemaker" target="_blank">http://oss.clusterlabs.org/mailman/listinfo/pacemaker</a><br/>
<br/>
Project Home: <a href="http://www.clusterlabs.org" target="_blank">http://www.clusterlabs.org</a><br/>
Getting started: <a href="http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf" target="_blank">http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf</a><br/>
Bugs: <a href="http://bugs.clusterlabs.org" target="_blank">http://bugs.clusterlabs.org</a></div>
</div>
</div>
</div></div></body></html>