/* 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; }
bool MyCacheWorker::init() { if (!connect()) return false; if (!initRedis()) return false; if (!initMySQL()) return false; return true; }
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(); } }
} } 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: