From 2cc4dc5a6fb815f97614c71429d5c4674576ebef Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 25 Oct 2017 16:08:14 -0700 Subject: [PATCH] Clean peers.d periodically and delete peers older than 30 days. --- osdep/OSUtils.cpp | 6 +++--- osdep/OSUtils.hpp | 2 +- service/OneService.cpp | 7 +++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/osdep/OSUtils.cpp b/osdep/OSUtils.cpp index 303492854..0257458ad 100644 --- a/osdep/OSUtils.cpp +++ b/osdep/OSUtils.cpp @@ -133,7 +133,7 @@ std::vector OSUtils::listDirectory(const char *path,bool includeDir return r; } -long OSUtils::cleanDirectory(const char *path,const uint64_t olderThan) +long OSUtils::cleanDirectory(const char *path,const int64_t olderThan) { long cleaned = 0; @@ -150,7 +150,7 @@ long OSUtils::cleanDirectory(const char *path,const uint64_t olderThan) date.LowPart = ffd.ftLastWriteTime.dwLowDateTime; if (date.QuadPart > 0) { date.QuadPart -= adjust.QuadPart; - if ((uint64_t)((date.QuadPart / 10000000) * 1000) < olderThan) { + if ((int64_t)((date.QuadPart / 10000000) * 1000) < olderThan) { ztsnprintf(tmp, sizeof(tmp), "%s\\%s", path, ffd.cFileName); if (DeleteFileA(tmp)) ++cleaned; @@ -176,7 +176,7 @@ long OSUtils::cleanDirectory(const char *path,const uint64_t olderThan) if ((strcmp(dptr->d_name,"."))&&(strcmp(dptr->d_name,".."))&&(dptr->d_type == DT_REG)) { ztsnprintf(tmp,sizeof(tmp),"%s/%s",path,dptr->d_name); if (stat(tmp,&st) == 0) { - uint64_t mt = (uint64_t)(st.st_mtime); + int64_t mt = (int64_t)(st.st_mtime); if ((mt > 0)&&((mt * 1000) < olderThan)) { if (unlink(tmp) == 0) ++cleaned; diff --git a/osdep/OSUtils.hpp b/osdep/OSUtils.hpp index 8f66f850c..45770b7fa 100644 --- a/osdep/OSUtils.hpp +++ b/osdep/OSUtils.hpp @@ -142,7 +142,7 @@ public: * @param olderThan Last modified older than timestamp (ms since epoch) * @return Number of cleaned files or negative on fatal error */ - static long cleanDirectory(const char *path,const uint64_t olderThan); + static long cleanDirectory(const char *path,const int64_t olderThan); /** * Delete a directory and all its files and subdirectories recursively diff --git a/service/OneService.cpp b/service/OneService.cpp index 743f5a9a5..e962fb5bb 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -762,6 +762,7 @@ public: int64_t lastTapMulticastGroupCheck = 0; int64_t lastBindRefresh = 0; int64_t lastUpdateCheck = clockShouldBe; + int64_t lastCleanedPeersDb = 0; int64_t lastLocalInterfaceAddressCheck = (clockShouldBe - ZT_LOCAL_INTERFACE_CHECK_INTERVAL) + 15000; // do this in 15s to give portmapper time to configure and other things time to settle for(;;) { _run_m.lock(); @@ -856,6 +857,12 @@ public: _node->addLocalInterfaceAddress(reinterpret_cast(&(*i))); } + // Clean peers.d periodically + if ((now - lastCleanedPeersDb) >= 3600000) { + lastCleanedPeersDb = now; + OSUtils::cleanDirectory((_homePath + ZT_PATH_SEPARATOR_S "peers.d").c_str(),now - 2592000000LL); // delete older than 30 days + } + const unsigned long delay = (dl > now) ? (unsigned long)(dl - now) : 100; clockShouldBe = now + (uint64_t)delay; _phy.poll(delay);