Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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;
}