Exemplo n.º 1
0
/* The following function writes the current log entry
 * to an established MySQL session.
 * Initially added 2004-10-28 mmeckelein
 */
rsRetVal writeMySQL(wrkrInstanceData_t *pWrkrData, uchar *psz)
{
	DEFiRet;

	/* see if we are ready to proceed */
	if(pWrkrData->hmysql == NULL) {
		CHKiRet(initMySQL(pWrkrData, 0));
		
	}

	/* try insert */
	if(mysql_query(pWrkrData->hmysql, (char*)psz)) {
		/* error occured, try to re-init connection and retry */
		closeMySQL(pWrkrData); /* close the current handle */
		CHKiRet(initMySQL(pWrkrData, 0)); /* try to re-open */
		if(mysql_query(pWrkrData->hmysql, (char*)psz)) { /* re-try insert */
			/* we failed, giving up for now */
			reportDBError(pWrkrData, 0);
			closeMySQL(pWrkrData); /* free ressources */
			ABORT_FINALIZE(RS_RET_SUSPENDED);
		}
	}

finalize_it:
	if(iRet == RS_RET_OK) {
		pWrkrData->uLastMySQLErrno = 0; /* reset error for error supression */
	}

	RETiRet;
}
Exemplo n.º 2
0
bool MyCacheWorker::init()
{
	if (!connect())
		return false;

    if (!initRedis())
    	return false;

    if (!initMySQL())
    	return false;

    return true;
}
Exemplo n.º 3
0
void Store::_executorWorkerThreadFunc(unsigned short threadNo)
{
    try
    {
        initMySQL(&_mysql.get()[threadNo], threadNo);
        
        zmq::socket_t taskReceiverSocket(*_serverTransport->getContext(), ZMQ_PULL);
        taskReceiverSocket.bind(TransportUtils::getSinkName(_EXECUTOR_SINK_NAME, threadNo).c_str());
        
        zmq::socket_t taskSenderSocket(*_serverTransport->getContext(), ZMQ_PUSH);
        taskSenderSocket.connect(TransportUtils::getSinkName(ServerTransport::SERVER_SINK_NAME, threadNo%_noDefinerThread).c_str());

        const int TASK_RECEIVER_SOCKET_INDEX = 0;
        const int TOTAL_POLL_ITEMS = 1;
        const int POLL_WAIT_MS = _storePollWait;
        
        FILE_LOG(logINFO)<<"Initialized executor worker # "<<threadNo;

        addExecutorInitializationCount();
        
        zmq::pollitem_t items[] = {
            {taskReceiverSocket, 0, ZMQ_POLLIN, 0},
        };
        
        while(true)
        {
            if(_stopFlag)
                break;
            
//            zmq::poll(items, TOTAL_POLL_ITEMS, POLL_WAIT_MS);
            
            std::this_thread::sleep_for(chrono::milliseconds(10));
            
//            if (items[TASK_RECEIVER_SOCKET_INDEX].revents & ZMQ_POLLIN)
            {
                auto messages = TransportUtils::receiveQueuedMessages(taskReceiverSocket, _MAX_TRANSACTIONS);
                if(messages.size() > 0)
                {
//                FILE_LOG(logINFO)<<"Received: ";
                    _executeMessages(messages, taskSenderSocket, threadNo);
                }
            }
        }
    }
    catch(exception& ex)
    {
        FILE_LOG(logERROR)<<"EXCEPTION IN EXECUTOR WORKER # "<<threadNo<<": "<<ex.what();
    }
}
Exemplo n.º 4
0
		}
	}

finalize_it:
	if(iRet == RS_RET_OK) {
		pWrkrData->uLastMySQLErrno = 0; /* reset error for error supression */
	}

	RETiRet;
}


BEGINtryResume
CODESTARTtryResume
	if(pWrkrData->hmysql == NULL) {
		iRet = initMySQL(pWrkrData, 1);
	}
ENDtryResume

BEGINbeginTransaction
CODESTARTbeginTransaction
	CHKiRet(writeMySQL(pWrkrData, (uchar*)"START TRANSACTION"));
finalize_it:
ENDbeginTransaction

BEGINdoAction
CODESTARTdoAction
	dbgprintf("\n");
	CHKiRet(writeMySQL(pWrkrData, ppString[0]));
	iRet = RS_RET_DEFER_COMMIT;
finalize_it: