Ver código fonte

More Central work.

Adam Ierymenko 7 anos atrás
pai
commit
c12b68a6b2

+ 1 - 1
controller/DB.hpp

@@ -84,7 +84,7 @@ public:
 
 	virtual void eraseMember(const uint64_t networkId,const uint64_t memberId) = 0;
 
-	virtual void nodeIsOnline(const uint64_t memberId) = 0;
+	virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId) = 0;
 
 protected:
 	struct _Network

+ 1 - 1
controller/EmbeddedNetworkController.cpp

@@ -1175,7 +1175,7 @@ void EmbeddedNetworkController::_request(
 		ms.lastRequestTime = now;
 	}
 
-	_db->nodeIsOnline(identity.address().toInt());
+	_db->nodeIsOnline(nwid,identity.address().toInt());
 
 	Utils::hex(nwid,nwids);
 	_db->get(nwid,network,identity.address().toInt(),member,ns);

+ 1 - 1
controller/FileDB.cpp

@@ -126,7 +126,7 @@ void FileDB::eraseMember(const uint64_t networkId,const uint64_t memberId)
 {
 }
 
-void FileDB::nodeIsOnline(const uint64_t memberId)
+void FileDB::nodeIsOnline(const uint64_t networkId,const uint64_t memberId)
 {
 	// Nothing to do here right now in the filesystem store mode since we can just get this from the peer list
 }

+ 1 - 1
controller/FileDB.hpp

@@ -38,7 +38,7 @@ public:
 
 	virtual void eraseMember(const uint64_t networkId,const uint64_t memberId);
 
-	virtual void nodeIsOnline(const uint64_t memberId);
+	virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId);
 
 protected:
 	std::string _networksPath;

+ 7 - 7
controller/RethinkDB.cpp

@@ -227,18 +227,18 @@ RethinkDB::RethinkDB(EmbeddedNetworkController *const nc,const Address &myAddres
 						R::Array batch;
 						R::Object tmpobj;
 						for(auto i=_lastOnline.begin();i!=_lastOnline.end();++i) {
-							char nodeId[16];
-							Utils::hex10(i->first,nodeId);
-							tmpobj["id"] = nodeId;
+							char tmp[64];
+							OSUtils::ztsnprintf(tmp,sizeof(tmp),"%.16llx-%.10llx",i->first.first,i->first.second);
+							tmpobj["id"] = tmp;
 							tmpobj["ts"] = i->second;
 							batch.emplace_back(tmpobj);
 							if (batch.size() >= 256) {
-								R::db(this->_db).table("NodeLastOnline").insert(R::args(batch),R::optargs("conflict","update")).run(*rdb);
+								R::db(this->_db).table("MemberLastRequest",R::optargs("read_mode","outdated")).insert(R::args(batch),R::optargs("conflict","update")).run(*rdb);
 								batch.clear();
 							}
 						}
 						if (batch.size() > 0)
-							R::db(this->_db).table("NodeLastOnline").insert(R::args(batch),R::optargs("conflict","update")).run(*rdb);
+							R::db(this->_db).table("MemberLastRequest",R::optargs("read_mode","outdated")).insert(R::args(batch),R::optargs("conflict","update")).run(*rdb);
 						_lastOnline.clear();
 					}
 				} catch (std::exception &e) {
@@ -357,10 +357,10 @@ void RethinkDB::eraseMember(const uint64_t networkId,const uint64_t memberId)
 	_commitQueue.post(tmp);
 }
 
-void RethinkDB::nodeIsOnline(const uint64_t memberId)
+void RethinkDB::nodeIsOnline(const uint64_t networkId,const uint64_t memberId)
 {
 	std::lock_guard<std::mutex> l(_lastOnline_l);
-	_lastOnline[memberId] = OSUtils::now();
+	_lastOnline[std::pair<uint64_t,uint64_t>(networkId,memberId)] = OSUtils::now();
 }
 
 } // namespace ZeroTier

+ 2 - 2
controller/RethinkDB.hpp

@@ -42,7 +42,7 @@ public:
 
 	virtual void eraseMember(const uint64_t networkId,const uint64_t memberId);
 
-	virtual void nodeIsOnline(const uint64_t memberId);
+	virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId);
 
 protected:
 	std::string _host;
@@ -58,7 +58,7 @@ protected:
 	BlockingQueue< nlohmann::json * > _commitQueue;
 	std::thread _commitThread[ZT_CONTROLLER_RETHINKDB_COMMIT_THREADS];
 
-	std::unordered_map< uint64_t,int64_t > _lastOnline;
+	std::unordered_map< std::pair<uint64_t,uint64_t>,int64_t > _lastOnline;
 	mutable std::mutex _lastOnline_l;
 	std::thread _onlineNotificationThread;