Преглед на файлове

error recovery in redis online notification

If a redis cluster member fails over to the slave, we'll get an error from not specifying the key for the insert.  Recover from that instead of crashing the controller
Grant Limberg преди 5 години
родител
ревизия
0f17508cac
променени са 1 файла, в които са добавени 12 реда и са изтрити 8 реда
  1. 12 8
      controller/PostgreSQL.cpp

+ 12 - 8
controller/PostgreSQL.cpp

@@ -1540,15 +1540,19 @@ void PostgreSQL::onlineNotification_Redis()
 			std::lock_guard<std::mutex> l(_lastOnline_l);
 			lastOnline.swap(_lastOnline);
 		}
-		if (!lastOnline.empty()) {
-			if (_rc->clusterMode) {
-				auto tx = _cluster->redis(controllerId).transaction(true);
-				_doRedisUpdate(tx, controllerId, lastOnline);
-			} else {
-				auto tx = _redis->transaction(true);
-				_doRedisUpdate(tx, controllerId, lastOnline);
+		try {
+			if (!lastOnline.empty()) {
+				if (_rc->clusterMode) {
+					auto tx = _cluster->redis(controllerId).transaction(true);
+					_doRedisUpdate(tx, controllerId, lastOnline);
+				} else {
+					auto tx = _redis->transaction(true);
+					_doRedisUpdate(tx, controllerId, lastOnline);
+				}
 			}
-		}		
+		} catch (sw::redis::Error &e) {
+			fprintf(stderr, "Error in online notification thread (redis): %s\n", e.what());
+		}
 		std::this_thread::sleep_for(std::chrono::milliseconds(10));
 	}
 }