void AsyncDocumentConsumer::start() { size_t nSizeInMB = (size_t)GLOBAL_CONF().Build.memory; FX_LOG(INFO, "Allocate memory for building, total size: [%u] MB, segment count: [%u]", (uint32_t)nSizeInMB, (uint32_t)m_threadPool.capacity()); m_pAllocator.reset(new SyncSegregatedAllocator((size_t)(nSizeInMB * 1024 * 1024), m_threadPool.capacity() * MAX_CHUNK_COUNT_PER_SEGMENT)); m_pUpdateTask.reset(new OnDiskUpdateTask(m_pKeeper, m_docQueue, m_docUpdateQueue)); m_updateThread.start(*m_pUpdateTask); taskid_t taskId = 0, nextTaskId = INVALID_TASKID; for (size_t i = 0; i < m_threadPool.capacity(); i++) { IndexBarrelWriterPtr pIndexBarrelWriter = m_pKeeper->createBarrelWriter(); if (!pIndexBarrelWriter->init(m_pAllocator)) { FIRTEX_THROW_AND_LOG(RuntimeException, "Init index writer FAILED."); break; } if (i + 1 != m_threadPool.capacity()) { nextTaskId = taskId + 1; } TaskPtr pTask(new Task(taskId, nextTaskId, pIndexBarrelWriter, m_docQueue, *this)); m_threadPool.start(*pTask); m_tasks.push_back(pTask); } }
int Peer::AddTask() { boost::recursive_mutex::scoped_lock L(m_taskMutex); Log(CONSOLE, L"Creating New Task\n"); // get task config std::vector<std::string> paramList = this->ReadTaskConfig("Task-config.xml"); int taskId = GetRandomTaskId(); // create task TaskPtr pTask(new Task(taskId)); m_taskList[taskId] = pTask; pTask->AddTaskParams(paramList); pTask->Start(); return 0; }