From 91904ee50218def61e54362ef38aaf696d067a9a Mon Sep 17 00:00:00 2001 From: Jeff Tao Date: Fri, 14 Aug 2020 02:41:44 +0000 Subject: [PATCH] inotfiy events --- src/sync/src/syncMain.c | 6 +++--- src/sync/src/syncRetrieve.c | 23 ++++++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/sync/src/syncMain.c b/src/sync/src/syncMain.c index f2abded3b6..eaa073348a 100644 --- a/src/sync/src/syncMain.c +++ b/src/sync/src/syncMain.c @@ -32,7 +32,7 @@ // global configurable int tsMaxSyncNum = 2; int tsSyncTcpThreads = 2; -int tsMaxWatchFiles = 100; +int tsMaxWatchFiles = 500; int tsMaxFwdInfo = 200; int tsSyncTimer = 1; //int sDebugFlag = 135; @@ -516,7 +516,7 @@ static SSyncPeer *syncAddPeer(SSyncNode *pNode, const SNodeInfo *pInfo) int ret = strcmp(pPeer->fqdn, tsNodeFqdn); if (pPeer->nodeId == 0 || (ret > 0) || (ret == 0 && pPeer->port > tsSyncPort)) { sDebug("%s, start to check peer connection", pPeer->id); - taosTmrReset(syncCheckPeerConnection, 100, pPeer, syncTmrCtrl, &pPeer->timer); + taosTmrReset(syncCheckPeerConnection, 100 + (pNode->vgId*10)%100, pPeer, syncTmrCtrl, &pPeer->timer); } syncAddNodeRef(pNode); @@ -815,7 +815,7 @@ static void syncRecoverFromMaster(SSyncPeer *pPeer) taosTmrStopA(&pPeer->timer); if (tsSyncNum >= tsMaxSyncNum) { sInfo("%s, %d syncs are in process, try later", pPeer->id, tsSyncNum); - taosTmrReset(syncTryRecoverFromMaster, 500, pPeer, syncTmrCtrl, &pPeer->timer); + taosTmrReset(syncTryRecoverFromMaster, 500 + (pNode->vgId*10)%200, pPeer, syncTmrCtrl, &pPeer->timer); return; } diff --git a/src/sync/src/syncRetrieve.c b/src/sync/src/syncRetrieve.c index f881b680f5..1dd1cda343 100644 --- a/src/sync/src/syncRetrieve.c +++ b/src/sync/src/syncRetrieve.c @@ -57,13 +57,14 @@ static int syncAddIntoWatchList(SSyncPeer *pPeer, char *name) } } - *wd = inotify_add_watch(pPeer->notifyFd, name, IN_MODIFY); + *wd = inotify_add_watch(pPeer->notifyFd, name, IN_MODIFY | IN_DELETE); if (*wd == -1) { sError("%s, failed to add %s(%s)", pPeer->id, name, strerror(errno)); return -1; + } else { + sDebug("%s, monitor %s, wd:%d watchNum:%d", pPeer->id, name, *wd, pPeer->watchNum); } - pPeer->watchNum++; pPeer->watchNum = (pPeer->watchNum +1) % tsMaxWatchFiles; return 0; @@ -75,16 +76,24 @@ static int syncAreFilesModified(SSyncPeer *pPeer) char buf[2048]; int len = read(pPeer->notifyFd, buf, sizeof(buf)); - if (len <0 && errno != EAGAIN) { + if (len < 0 && errno != EAGAIN) { sError("%s, failed to read notify FD(%s)", pPeer->id, strerror(errno)); return -1; } int code = 0; - if (len >0) { - sDebug("%s, processed file is changed", pPeer->id); - pPeer->fileChanged = 1; - code = 1; + if (len > 0) { + const struct inotify_event *event; + char *ptr; + for (ptr = buf; ptr < buf + len; ptr += sizeof(struct inotify_event) + event->len) { + event = (const struct inotify_event *) ptr; + if ((event->mask & IN_MODIFY) || (event->mask & IN_DELETE)) { + sDebug("%s, processed file is changed", pPeer->id); + pPeer->fileChanged = 1; + code = 1; + break; + } + } } return code; -- GitLab