add a global variable holding the pid of the main daemon.
change the tracking of time() in the event loop to only check/warn when called from the main daemon
#include "../include/ctdb_private.h"
#include "lib/util/dlinklist.h"
+pid_t ctdbd_pid;
+
/*
allocate a packet for use in client<->daemon communication
*/
uint64_t srvid;
};
+/*
+ * pid of the ctdbd daemon
+ */
+extern pid_t ctdbd_pid;
+
/*
a tcp connection description
*/
#include "lib/events/events_internal.h"
#include <sys/epoll.h>
+extern pid_t ctdbd_pid;
+
struct epoll_event_context {
/* a pointer back to the generic event_context */
struct event_context *ev;
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)));
+ if (getpid() == ctdbd_pid) {
+ 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;
}
- t=new_t;
}
return 0;
#include "lib/events/events.h"
#include "lib/events/events_internal.h"
+extern pid_t ctdbd_pid;
+
struct select_event_context {
/* a pointer back to the generic event_context */
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)));
+ if (getpid() == ctdbd_pid) {
+ 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;
}
- t=new_t;
}
return select_ev->exit_code;
#include "lib/events/events.h"
#include "lib/events/events_internal.h"
+extern pid_t ctdbd_pid;
+
struct std_event_context {
/* a pointer back to the generic event_context */
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)));
+ if (getpid() == ctdbd_pid) {
+ 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;
}
- t=new_t;
}
return std_ev->exit_code;
DEBUG(DEBUG_NOTICE,("CTDB daemon shutting down\n"));
}
-
/* called when the "startup" event script has finished */
static void ctdb_start_transport(struct ctdb_context *ctdb)
{
}
block_signal(SIGPIPE);
+ ctdbd_pid = getpid();
+ DEBUG(DEBUG_ERR, ("Starting CTDBD as pid : %u\n", ctdbd_pid));
+
if (ctdb->do_setsched) {
/* try to set us up as realtime */
ctdb_set_scheduler(ctdb);
#include "../common/rb_tree.h"
#include "db_wrap.h"
-
#define ERR_TIMEOUT 20 /* timed out trying to reach node */
#define ERR_NONODE 21 /* node does not exist */
#define ERR_DISNODE 22 /* node is disconnected */