Adam Ierymenko преди 6 години
родител
ревизия
f4f8fef82e
променени са 1 файла, в които са добавени 17 реда и са изтрити 13 реда
  1. 17 13
      controller/LFDB.cpp

+ 17 - 13
controller/LFDB.cpp

@@ -64,7 +64,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 
 		httplib::Client htcli(_lfNodeHost.c_str(),_lfNodePort,600);
 		int64_t timeRangeStart = 0;
-		while (_running) {
+		while (_running.load()) {
 			{
 				std::lock_guard<std::mutex> sl(_state_l);
 				for(auto ns=_state.begin();ns!=_state.end();++ns) {
@@ -178,7 +178,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 							<< "\"Name\":\"" << networksSelectorName << "\","
 							<< "\"Range\":[0,18446744073709551615]"
 						<< "}],"
-						<< "\"TimeRange\":[" << timeRangeStart << ",18446744073709551615],"
+						<< "\"TimeRange\":[" << timeRangeStart << ",9223372036854775807],"
 						<< "\"MaskingKey\":\"" << maskingKey << "\","
 						<< "\"Owners\":[\"" << _lfOwnerPublic << "\"]"
 					<< '}';
@@ -190,6 +190,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 							for(std::size_t ri=0;ri<results.size();++ri) {
 								nlohmann::json &rset = results[ri];
 								if ((rset.is_array())&&(rset.size() > 0)) {
+
 									nlohmann::json &result = rset[0];
 									if (result.is_object()) {
 										nlohmann::json &record = result["Record"];
@@ -206,7 +207,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 													_NetworkState &ns = _state[id];
 													if (!ns.dirty) {
 														nlohmann::json oldNetwork;
-														if (get(id,oldNetwork)) {
+														if ((timeRangeStart > 0)&&(get(id,oldNetwork))) {
 															const uint64_t revision = network["revision"];
 															const uint64_t prevRevision = oldNetwork["revision"];
 															if (prevRevision < revision) {
@@ -222,6 +223,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 											}
 										}
 									}
+
 								}
 							}
 						}
@@ -244,7 +246,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 							<< "\"Name\":\"" << membersSelectorName << "\","
 							<< "\"Range\":[0,18446744073709551615]"
 						<< "}],"
-						<< "\"TimeRange\":[" << timeRangeStart << ",18446744073709551615],"
+						<< "\"TimeRange\":[" << timeRangeStart << ",9223372036854775807],"
 						<< "\"MaskingKey\":\"" << maskingKey << "\","
 						<< "\"Owners\":[\"" << _lfOwnerPublic << "\"]"
 					<< '}';
@@ -256,6 +258,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 							for(std::size_t ri=0;ri<results.size();++ri) {
 								nlohmann::json &rset = results[ri];
 								if ((rset.is_array())&&(rset.size() > 0)) {
+
 									nlohmann::json &result = rset[0];
 									if (result.is_object()) {
 										nlohmann::json &record = result["Record"];
@@ -274,7 +277,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 													auto ns = _state.find(nwid);
 													if ((ns == _state.end())||(!ns->second.members[id].dirty)) {
 														nlohmann::json network,oldMember;
-														if (get(nwid,network,id,oldMember)) {
+														if ((timeRangeStart > 0)&&(get(nwid,network,id,oldMember))) {
 															const uint64_t revision = member["revision"];
 															const uint64_t prevRevision = oldMember["revision"];
 															if (prevRevision < revision)
@@ -289,6 +292,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 											}
 										}
 									}
+
 								}
 							}
 						}
@@ -301,12 +305,12 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 			}
 
 			timeRangeStart = time(nullptr) - 120; // start next query 2m before now to avoid losing updates
-			_ready = true;
+			_ready.store(true);
 
-			for(int k=0;k<20;++k) { // 2s delay between queries for remotely modified networks or members
-				if (!_running)
+			for(int k=0;k<4;++k) { // 2s delay between queries for remotely modified networks or members
+				if (!_running.load())
 					return;
-				std::this_thread::sleep_for(std::chrono::milliseconds(100));
+				std::this_thread::sleep_for(std::chrono::milliseconds(500));
 			}
 		}
 	});
@@ -314,21 +318,21 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 
 LFDB::~LFDB()
 {
-	_running = false;
+	_running.store(false);
 	_syncThread.join();
 }
 
 bool LFDB::waitForReady()
 {
-	while (!_ready) {
-		std::this_thread::sleep_for(std::chrono::milliseconds(100));
+	while (!_ready.load()) {
+		std::this_thread::sleep_for(std::chrono::milliseconds(500));
 	}
 	return true;
 }
 
 bool LFDB::isReady()
 {
-	return (_ready);
+	return (_ready.load());
 }
 
 void LFDB::save(nlohmann::json *orig,nlohmann::json &record)