From 7814e0fb0a9a10d46f0784536aa66615e3cbc127 Mon Sep 17 00:00:00 2001 From: dockes Date: Tue, 7 Nov 2006 16:51:45 +0000 Subject: [PATCH] traces --- src/index/rclmon.h | 6 +++++- src/index/rclmonprc.cpp | 22 +++++++++++----------- src/index/rclmonrcv.cpp | 39 ++++++++++++++++++++------------------- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/index/rclmon.h b/src/index/rclmon.h index 2698ddba..b9de4dbb 100644 --- a/src/index/rclmon.h +++ b/src/index/rclmon.h @@ -2,7 +2,7 @@ #define _RCLMON_H_INCLUDED_ #include "autoconfig.h" #ifdef RCL_MONITOR -/* @(#$Id: rclmon.h,v 1.6 2006-10-25 10:52:02 dockes Exp $ (C) 2006 J.F.Dockes */ +/* @(#$Id: rclmon.h,v 1.7 2006-11-07 16:51:45 dockes Exp $ (C) 2006 J.F.Dockes */ /** * Definitions for the real-time monitoring recoll. * We're interested in file modifications, deletions and renaming. @@ -79,5 +79,9 @@ extern void *rclMonRcvRun(void *); * directory. We write our pid in there */ #define RCL_MONITOR_PIDFILENAME "rclmonpid" +// Specific debug macro for monitor synchronization events +#define MONDEB LOGDEB2 + + #endif // RCL_MONITOR #endif /* _RCLMON_H_INCLUDED_ */ diff --git a/src/index/rclmonprc.cpp b/src/index/rclmonprc.cpp index 98a40b3b..ba31f119 100644 --- a/src/index/rclmonprc.cpp +++ b/src/index/rclmonprc.cpp @@ -2,7 +2,7 @@ #ifdef RCL_MONITOR #ifndef lint -static char rcsid[] = "@(#$Id: rclmonprc.cpp,v 1.6 2006-10-25 10:52:02 dockes Exp $ (C) 2006 J.F.Dockes"; +static char rcsid[] = "@(#$Id: rclmonprc.cpp,v 1.7 2006-11-07 16:51:45 dockes Exp $ (C) 2006 J.F.Dockes"; #endif /* * This program is free software; you can redistribute it and/or modify @@ -92,9 +92,9 @@ RclMonEvent RclMonEventQueue::pop() */ bool RclMonEventQueue::wait(int seconds, bool *top) { - LOGDEB(("RclMonEventQueue::wait\n")); + MONDEB(("RclMonEventQueue::wait\n")); if (!empty()) { - LOGDEB(("RclMonEventQueue:: imm return\n")); + MONDEB(("RclMonEventQueue:: imm return\n")); return true; } @@ -109,7 +109,7 @@ bool RclMonEventQueue::wait(int seconds, bool *top) pthread_cond_timedwait(&m_data->m_cond, &m_data->m_mutex, &to))) { if (err == ETIMEDOUT) { *top = true; - LOGDEB(("RclMonEventQueue:: timeout\n")); + MONDEB(("RclMonEventQueue:: timeout\n")); return true; } LOGERR(("RclMonEventQueue::wait:pthread_cond_timedwait failed" @@ -123,23 +123,23 @@ bool RclMonEventQueue::wait(int seconds, bool *top) return false; } } - LOGDEB(("RclMonEventQueue:: normal return\n")); + MONDEB(("RclMonEventQueue:: normal return\n")); return true; } bool RclMonEventQueue::lock() { - LOGDEB(("RclMonEventQueue:: lock\n")); + MONDEB(("RclMonEventQueue:: lock\n")); if (pthread_mutex_lock(&m_data->m_mutex)) { LOGERR(("RclMonEventQueue::lock: pthread_mutex_lock failed\n")); return false; } - LOGDEB(("RclMonEventQueue:: lock return\n")); + MONDEB(("RclMonEventQueue:: lock return\n")); return true; } bool RclMonEventQueue::unlock() { - LOGDEB(("RclMonEventQueue:: unlock\n")); + MONDEB(("RclMonEventQueue:: unlock\n")); if (pthread_mutex_unlock(&m_data->m_mutex)) { LOGERR(("RclMonEventQueue::lock: pthread_mutex_unlock failed\n")); return false; @@ -168,7 +168,7 @@ bool RclMonEventQueue::ok() void RclMonEventQueue::setTerminate() { - LOGDEB(("RclMonEventQueue:: setTerminate\n")); + MONDEB(("RclMonEventQueue:: setTerminate\n")); lock(); m_data->m_ok = false; pthread_cond_broadcast(&m_data->m_cond); @@ -177,7 +177,7 @@ void RclMonEventQueue::setTerminate() bool RclMonEventQueue::pushEvent(const RclMonEvent &ev) { - LOGDEB(("RclMonEventQueue::pushEvent for %s\n", ev.m_path.c_str())); + MONDEB(("RclMonEventQueue::pushEvent for %s\n", ev.m_path.c_str())); lock(); // It seems that a newer event is always correct to override any // older. TBVerified ? @@ -318,7 +318,7 @@ bool startMonitor(RclConfig *conf, bool nofork) } if (timedout) { - LOGDEB(("Monitor: queue wait timed out\n")); + MONDEB(("Monitor: queue wait timed out\n")); // Timed out. there must not be much activity around here. // If anything was modified, process the end-of-indexing // tasks: stemming and spelling database creations. diff --git a/src/index/rclmonrcv.cpp b/src/index/rclmonrcv.cpp index 4f4dfece..8575f374 100644 --- a/src/index/rclmonrcv.cpp +++ b/src/index/rclmonrcv.cpp @@ -1,7 +1,7 @@ #include "autoconfig.h" #ifdef RCL_MONITOR #ifndef lint -static char rcsid[] = "@(#$Id: rclmonrcv.cpp,v 1.7 2006-10-25 10:52:02 dockes Exp $ (C) 2006 J.F.Dockes"; +static char rcsid[] = "@(#$Id: rclmonrcv.cpp,v 1.8 2006-11-07 16:51:45 dockes Exp $ (C) 2006 J.F.Dockes"; #endif /* * This program is free software; you can redistribute it and/or modify @@ -78,7 +78,7 @@ public: if (ev.m_etyp != RclMonEvent::RCLEVT_NONE) m_queue->pushEvent(ev); } else { - LOGDEB(("rclMonRcvRun: no event pending\n")); + MONDEB(("rclMonRcvRun: no event pending\n")); break; } } @@ -138,7 +138,7 @@ void *rclMonRcvRun(void *q) } // Forever wait for monitoring events and add them to queue: - LOGDEB2(("rclMonRcvRun: waiting for events. q->ok() %d\n", queue->ok())); + MONDEB(("rclMonRcvRun: waiting for events. q->ok() %d\n", queue->ok())); while (queue->ok() && mon->ok()) { RclMonEvent ev; // Note: I could find no way to get the select @@ -233,7 +233,7 @@ bool RclFAM::addWatch(const string& path, bool isdir) { if (!ok()) return false; - LOGDEB(("RclFAM::addWatch: adding %s\n", path.c_str())); + MONDEB(("RclFAM::addWatch: adding %s\n", path.c_str())); FAMRequest req; if (isdir) { if (FAMMonitorDirectory(&m_conn, path.c_str(), &req, 0) != 0) { @@ -256,14 +256,14 @@ bool RclFAM::getEvent(RclMonEvent& ev, int secs) { if (!ok()) return false; - LOGDEB2(("RclFAM::getEvent:\n")); + MONDEB(("RclFAM::getEvent:\n")); fd_set readfds; int fam_fd = FAMCONNECTION_GETFD(&m_conn); FD_ZERO(&readfds); FD_SET(fam_fd, &readfds); - LOGDEB(("RclFAM::getEvent: select\n")); + MONDEB(("RclFAM::getEvent: select\n")); struct timeval timeout; if (secs >= 0) { memset(&timeout, 0, sizeof(timeout)); @@ -276,23 +276,23 @@ bool RclFAM::getEvent(RclMonEvent& ev, int secs) return false; } else if (ret == 0) { // timeout - LOGDEB(("RclFAM::getEvent: select timeout\n")); + MONDEB(("RclFAM::getEvent: select timeout\n")); return false; } - LOGDEB(("RclFAM::getEvent: select return\n")); + MONDEB(("RclFAM::getEvent: select return\n")); if (!FD_ISSET(fam_fd, &readfds)) return false; - LOGDEB(("RclFAM::getEvent: call FAMNextEvent\n")); + MONDEB(("RclFAM::getEvent: call FAMNextEvent\n")); FAMEvent fe; if (FAMNextEvent(&m_conn, &fe) < 0) { LOGERR(("RclFAM::getEvent: FAMNextEvent failed, errno %d\n", errno)); close(); return false; } - LOGDEB(("RclFAM::getEvent: FAMNextEvent returned\n")); + MONDEB(("RclFAM::getEvent: FAMNextEvent returned\n")); map::const_iterator it; if ((fe.filename[0] != '/') && @@ -301,7 +301,7 @@ bool RclFAM::getEvent(RclMonEvent& ev, int secs) } else { ev.m_path = fe.filename; } - LOGDEB(("RclFAM::getEvent: %-12s %s\n", + MONDEB(("RclFAM::getEvent: %-12s %s\n", event_name(fe.code), ev.m_path.c_str())); switch (fe.code) { @@ -322,7 +322,7 @@ bool RclFAM::getEvent(RclMonEvent& ev, int secs) break; case FAMMoved: /* Never generated it seems */ - LOGDEB(("RclFAM::getEvent: got move event !\n")); + LOGINFO(("RclFAM::getEvent: got move event !\n")); ev.m_etyp = RclMonEvent::RCLEVT_MODIFY; break; @@ -333,7 +333,8 @@ bool RclFAM::getEvent(RclMonEvent& ev, int secs) default: // Have to return something, this is different from an empty queue, // esp if we are trying to empty it... - LOGDEB(("RclFAM::getEvent: got move event !\n")); + if (fe.code != FAMEndExist) + LOGDEB(("RclFAM::getEvent: got other event %d!\n", fe.code)); ev.m_etyp = RclMonEvent::RCLEVT_NONE; break; } @@ -423,7 +424,7 @@ bool RclIntf::addWatch(const string& path, bool) { if (!ok()) return false; - LOGDEB(("RclIntf::addWatch: adding %s\n", path.c_str())); + MONDEB(("RclIntf::addWatch: adding %s\n", path.c_str())); // CLOSE_WRITE is covered through MODIFY. CREATE is needed for mkdirs uint32_t mask = IN_MODIFY | IN_CREATE | IN_MOVED_FROM | IN_MOVED_TO @@ -448,7 +449,7 @@ bool RclIntf::getEvent(RclMonEvent& ev, int secs) if (!ok()) return false; ev.m_etyp = RclMonEvent::RCLEVT_NONE; - LOGDEB2(("RclIntf::getEvent:\n")); + MONDEB(("RclIntf::getEvent:\n")); if (m_evp == 0) { fd_set readfds; @@ -460,17 +461,17 @@ bool RclIntf::getEvent(RclMonEvent& ev, int secs) timeout.tv_sec = secs; } int ret; - LOGDEB2(("RclIntf::getEvent: select\n")); + MONDEB(("RclIntf::getEvent: select\n")); if ((ret=select(m_fd + 1, &readfds, 0, 0, secs >= 0 ? &timeout : 0)) < 0) { LOGERR(("RclIntf::getEvent: select failed, errno %d\n", errno)); close(); return false; } else if (ret == 0) { - LOGDEB2(("RclIntf::getEvent: select timeout\n")); + MONDEB(("RclIntf::getEvent: select timeout\n")); // timeout return false; } - LOGDEB(("RclIntf::getEvent: select returned\n")); + MONDEB(("RclIntf::getEvent: select returned\n")); if (!FD_ISSET(m_fd, &readfds)) return false; @@ -503,7 +504,7 @@ bool RclIntf::getEvent(RclMonEvent& ev, int secs) ev.m_path = path_cat(ev.m_path, evp->name); } - LOGDEB(("RclIntf::getEvent: %-12s %s\n", + MONDEB(("RclIntf::getEvent: %-12s %s\n", event_name(evp->mask), ev.m_path.c_str())); if (evp->mask & (IN_MODIFY | IN_MOVED_TO)) {