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");

}
Beispiel #2
0
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;
}
Beispiel #3
0
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");
}