void BackupSysCtrlNodeControllerReconnect_(BackupSysCtrlNodeController* thiz, MySocket* socket) { printf("SysCtrlNode down.\n"); Close(socket); Create(socket); printf("Try to reconnect...\n"); while(!ConnectWithTimeout(socket, thiz->ip_, thiz->portToConnect_, 1)) { printf("Connect SysCtrlNode failed. Try reconnect...\n"); } printf("Connection established.\n"); }
bool RedisConn::RedisConnect() { bool bRet = false; if (NULL != mCtx) { redisFree(mCtx); mCtx = NULL; } mCtx = ConnectWithTimeout(); if (NULL==mCtx) { bRet = false; } else { bRet = auth(); mConnStatus = bRet; } return bRet; }
bool RedisConn::RedisReConnect() { if (NULL == mCtx) { return false; } bool bRet = false; redisContext *tmp_ctx = ConnectWithTimeout(); if (NULL == tmp_ctx) { bRet = false; } else { redisFree(mCtx); mCtx = tmp_ctx; bRet = auth(); } mConnStatus = bRet; return bRet; }
// only run once void BackupSysCtrlNodeSendingThreadMain(void* handlingHelperParameter) { SocketHandlerParameter* parameter; BackupSysCtrlNodeController* thiz; MySocket* sendingSocket; Packet packet; bool success; printf("a BackupSysCtrlNode sending thread start.\n"); parameter = ((SocketHandlerParameter*) handlingHelperParameter); thiz = (BackupSysCtrlNodeController*) parameter->connector; //sendingSocket = parameter->socket; // parameter->socket is NULL sendingSocket = TypedMalloc(MySocket); success = Create(sendingSocket); assert(success); success = success && Connect(sendingSocket, thiz->ip_, thiz->portToConnect_); if (!success) { while(!ConnectWithTimeout(sendingSocket, thiz->ip_, thiz->portToListen_, 1)) { } success = true; } parameter->socket = sendingSocket; printf("connection to other SysCtrlNode established.\n"); if (thiz->server_->isBackupServer_) { printf("sync sys ctrl node states...\n"); ReceiveAndRecoverSysCtrlNodeStates_(thiz, sendingSocket); printf("finish sync sys ctrl node states.\n"); SetEvent(thiz->waitingForInitializationData_); } while (thiz->isRunning_) { success = RecvPacket(sendingSocket, &packet); if (!success && thiz->isRunning_) { printf("another server closed.\n"); SysCtrlNodeSetToActiveServer(thiz->server_); BackupSysCtrlNodeControllerStartBackupSysCtrlNode_(thiz); BackupSysCtrlNodeControllerReconnect_(thiz, sendingSocket); continue; } if (!thiz->isRunning_) { break; } // actually, sending thread will never receive a message switch(packet.head.iStyle) { case PROTOCOL_SHUTDOWN_SYSTEM: { assert(false); } break; default: { printf("error: receive an illegal message in BackupSysCtrlNode sending thread.\n"); break; } } } thiz->sendingHandler_ = NULL; printf("BackupSysCtrlNode connector shutdown.\n"); }