Jelajahi Sumber

Fix testing for true/false. Dont attempt to update member status on networks that we know dont exist

Grant Limberg 7 tahun lalu
induk
melakukan
7b608c6ca3
1 mengubah file dengan 20 tambahan dan 9 penghapusan
  1. 20 9
      controller/PostgreSQL.cpp

+ 20 - 9
controller/PostgreSQL.cpp

@@ -184,16 +184,19 @@ void PostgreSQL::initializeNetworks(PGconn *conn)
 		for (int i = 0; i < numRows; ++i) {
 			json empty;
 			json config;
+
+			fprintf(stderr, "Network Private? %s\n", PQgetvalue(res, i, 8));
+
 			config["id"] = PQgetvalue(res, i, 0);
 			config["nwid"] = PQgetvalue(res, i, 0);
 			config["creationTime"] = std::stoull(PQgetvalue(res, i, 1));
 			config["capabilities"] = json::parse(PQgetvalue(res, i, 2));
-			config["enableBroadcast"] = (strcmp(PQgetvalue(res, i, 3),"true")==0);
+			config["enableBroadcast"] = (strcmp(PQgetvalue(res, i, 3),"t")==0);
 			config["lastModified"] = std::stoull(PQgetvalue(res, i, 4));
 			config["mtu"] = std::stoi(PQgetvalue(res, i, 5));
 			config["multicastLimit"] = std::stoi(PQgetvalue(res, i, 6));
 			config["name"] = PQgetvalue(res, i, 7);
-			config["private"] = (strcmp(PQgetvalue(res, i, 8),"true")==0);
+			config["private"] = (strcmp(PQgetvalue(res, i, 8),"t")==0);
 			config["remoteTraceLevel"] = std::stoi(PQgetvalue(res, i, 9));
 			config["remoteTraceTarget"] = PQgetvalue(res, i, 10);
 			config["revision"] = std::stoull(PQgetvalue(res, i, 11));
@@ -331,8 +334,8 @@ void PostgreSQL::initializeMembers(PGconn *conn)
 			fprintf(stderr, "Creation Time %s\n", ctime.c_str());
 			config["id"] = memberId;
 			config["nwid"] = networkId;
-			config["activeBridge"] = (strcmp(PQgetvalue(res, i, 2), "true") == 0);
-			config["authorized"] = (strcmp(PQgetvalue(res, i, 3), "true") == 0);
+			config["activeBridge"] = (strcmp(PQgetvalue(res, i, 2), "t") == 0);
+			config["authorized"] = (strcmp(PQgetvalue(res, i, 3), "t") == 0);
 			config["capabilities"] = json::parse(PQgetvalue(res, i, 4));
 			config["creationTime"] = std::stoull(PQgetvalue(res, i, 5));
 			config["identity"] = PQgetvalue(res, i, 6);
@@ -345,7 +348,7 @@ void PostgreSQL::initializeMembers(PGconn *conn)
 			config["vMinor"] = std::stoi(PQgetvalue(res, i, 13));
 			config["vRev"] = std::stoi(PQgetvalue(res, i, 14));
 			config["vProto"] = std::stoi(PQgetvalue(res, i, 15));
-			config["noAutoAssignIps"] = (strcmp(PQgetvalue(res, i, 16), "true") == 0);
+			config["noAutoAssignIps"] = (strcmp(PQgetvalue(res, i, 16), "t") == 0);
 			config["revision"] = std::stoull(PQgetvalue(res, i, 17));
 			config["objtype"] = "member";
 			config["ipAssignments"] = json::array();
@@ -1011,12 +1014,20 @@ void PostgreSQL::onlineNotificationThread()
 		}
 
 		for (auto i=lastOnline.begin(); i != lastOnline.end(); ++i) {
-			lastOnlineCumulative[i->first] = i->second.first;
+			uint64_t nwid_i = i->first.first;
 			char nwidTmp[64];
 			char memTmp[64];
 			char ipTmp[64];
-			OSUtils::ztsnprintf(nwidTmp,sizeof(nwidTmp), "%.16llx", i->first.first);
+			OSUtils::ztsnprintf(nwidTmp,sizeof(nwidTmp), "%.16llx", nwid_i);
 			OSUtils::ztsnprintf(memTmp,sizeof(memTmp), "%.10llx", i->first.second);
+			auto found = _networks.find(nwid_i);
+			if (found == _networks.end()) {
+				fprintf(stderr, "Network %s not found.\n", nwidTmp);
+				continue;
+			}
+
+			lastOnlineCumulative[i->first] = i->second.first;
+			
 
 			std::string networkId(nwidTmp);
 			std::string memberId(memTmp);
@@ -1043,8 +1054,8 @@ void PostgreSQL::onlineNotificationThread()
 			if (PQresultStatus(res) != PGRES_COMMAND_OK) {
 				fprintf(stderr, "Error on Member Status upsert: %s\n", PQresultErrorMessage(res));
 				PQclear(res);
-				PQexec(conn, "ROLLBACK");
-				exit(1);
+				PQclear(PQexec(conn, "ROLLBACK"));
+				continue;
 			}
 
 			PQclear(res);