patch the event loop so we read the current time every iteration.
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Mon, 26 Oct 2009 02:20:35 +0000 (13:20 +1100)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Mon, 26 Oct 2009 02:20:35 +0000 (13:20 +1100)
log an error if the clock jumps backwards
also log an error if the clock jumps >5 seconds forward (we assume here we will get at least one event every 5 seconds)

(This used to be ctdb commit 11193e1e192bee6f579bdf1303153571a82711d7)

ctdb/lib/events/events_epoll.c
ctdb/lib/events/events_select.c
ctdb/lib/events/events_standard.c

index d10eb79ea78813ce0b43a721a948d7f2d309c818..b7172a7b9a483f4a369f6315d521e8a0397ba856 100644 (file)
@@ -21,6 +21,7 @@
 */
 
 #include "includes.h"
+#include "system/time.h"
 #include "system/filesys.h"
 #include "system/network.h"
 #include "lib/util/dlinklist.h"
@@ -457,12 +458,25 @@ static int epoll_event_loop_once(struct event_context *ev)
 */
 static int epoll_event_loop_wait(struct event_context *ev)
 {
+       static time_t t=0;
+       time_t new_t;
        struct epoll_event_context *epoll_ev = talloc_get_type(ev->additional_data,
                                                           struct epoll_event_context);
        while (epoll_ev->num_fd_events) {
                if (epoll_event_loop_once(ev) != 0) {
                        break;
                }
+               new_t=time(NULL);
+               if (t != 0) {
+                       if (t > new_t) {
+                               DEBUG(0,("ERROR Time skipped backward by %d seconds\n", (int)(t-new_t)));
+                       }
+                       /* We assume here that we get at least one event every 5 seconds */
+                       if (new_t > (t+5)) {
+                               DEBUG(0,("ERROR Time jumped forward by %d seconds\n", (int)(new_t-t)));
+                       }
+               }
+               t=new_t;
        }
 
        return 0;
index 3f9eeb5617cdef24bd68bfb23ed54c255ca78040..c908b1227d2ce655d40d372ba2e28e988693d574 100644 (file)
@@ -24,6 +24,7 @@
 */
 
 #include "includes.h"
+#include "system/time.h"
 #include "system/filesys.h"
 #include "system/select.h"
 #include "lib/util/dlinklist.h"
@@ -270,6 +271,8 @@ static int select_event_loop_once(struct event_context *ev)
 */
 static int select_event_loop_wait(struct event_context *ev)
 {
+       static time_t t=0;
+       time_t new_t;
        struct select_event_context *select_ev = talloc_get_type(ev->additional_data,
                                                           struct select_event_context);
        select_ev->exit_code = 0;
@@ -278,6 +281,17 @@ static int select_event_loop_wait(struct event_context *ev)
                if (select_event_loop_once(ev) != 0) {
                        break;
                }
+               new_t=time(NULL);
+               if (t != 0) {
+                       if (t > new_t) {
+                               DEBUG(0,("ERROR Time skipped backward by %d seconds\n", (int)(t-new_t)));
+                       }
+                       /* We assume here that we get at least one event every 5 seconds */
+                       if (new_t > (t+5)) {
+                               DEBUG(0,("ERROR Time jumped forward by %d seconds\n", (int)(new_t-t)));
+                       }
+               }
+               t=new_t;
        }
 
        return select_ev->exit_code;
index 5e529d66ab483bb0f2d1984a22b7ce9690958f3c..35516ea14c0379ff19715d493acaf82711c4a4c9 100644 (file)
@@ -28,6 +28,7 @@
 */
 
 #include "includes.h"
+#include "system/time.h"
 #include "system/filesys.h"
 #include "system/network.h"
 #include "system/select.h" /* needed for HAVE_EVENTS_EPOLL */
@@ -571,6 +572,8 @@ static int std_event_loop_once(struct event_context *ev)
 */
 static int std_event_loop_wait(struct event_context *ev)
 {
+       static time_t t=0;
+       time_t new_t;
        struct std_event_context *std_ev = talloc_get_type(ev->additional_data,
                                                           struct std_event_context);
        std_ev->exit_code = 0;
@@ -579,6 +582,17 @@ static int std_event_loop_wait(struct event_context *ev)
                if (std_event_loop_once(ev) != 0) {
                        break;
                }
+               new_t=time(NULL);
+               if (t != 0) {
+                       if (t > new_t) {
+                               DEBUG(0,("ERROR Time skipped backward by %d seconds\n", (int)(t-new_t)));
+                       }
+                       /* We assume here that we get at least one event every 5 seconds */
+                       if (new_t > (t+5)) {
+                               DEBUG(0,("ERROR Time jumped forward by %d seconds\n", (int)(new_t-t)));
+                       }
+               }
+               t=new_t;
        }
 
        return std_ev->exit_code;