瀏覽代碼

Clean peers.d periodically and delete peers older than 30 days.

Adam Ierymenko 7 年之前
父節點
當前提交
2cc4dc5a6f
共有 3 個文件被更改,包括 11 次插入4 次删除
  1. 3 3
      osdep/OSUtils.cpp
  2. 1 1
      osdep/OSUtils.hpp
  3. 7 0
      service/OneService.cpp

+ 3 - 3
osdep/OSUtils.cpp

@@ -133,7 +133,7 @@ std::vector<std::string> 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;

+ 1 - 1
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

+ 7 - 0
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<const struct sockaddr_storage *>(&(*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);