Ejemplo n.º 1
0
bool DirectoryFileFetcher::fetchNext(RawDocumentPtr& pRawDoc)
{
   while (m_pDirIterator->hasNext())
    {
        const File& file = m_pDirIterator->next();
        if (!file.isFile())
        {
            continue;
        }

        if (m_pFileFilter)
        {
            const Path& filePath = m_pDirIterator->getPath();
            if (m_pFileFilter->isFiltered(filePath))
            {
                FX_DEBUG("File : [%s] filtered", filePath.toString().c_str());
                continue;
            }
        }
        FX_DEBUG("Fetching file : [%s].", file.getPath().c_str());
        pRawDoc->setPath(file.getPath());
        return true;
    }

   return false;
}
Ejemplo n.º 2
0
void IndexWriter::addDocument(const DocumentPtr& pDocument)
{
    FX_DEBUG("Add one document");
    pDocument->setAction(Document::AT_ADD);
    m_pDocConsumer->consume(pDocument);
    ++m_nOpCountSinceLastCommit;

    if (autoCommit())
    {
        // Perform commit automatically
        commit();
    }
}
Ejemplo n.º 3
0
void KeywordIndexMerger::endMerge()
{
    m_pDictWriter->finalize();

    FX_DEBUG("End merge: total terms: %llu, distinct terms: %llu",
             m_nTotalTerms, m_pDictWriter->size());

    m_pDictOutStream->close();
    m_pDocOutStream->close();

    m_pDictOutStream.reset();
    m_pDocOutStream.reset();
}
Ejemplo n.º 4
0
/* static */ 
void EvHttpSyncClient::handleResponse(struct evhttp_request* req, void* arg) 
{
    FX_DEBUG("handleResponse");
    EvHttpSyncClient* pThis = (EvHttpSyncClient*)arg;
    try
    {
        pThis->done(req);
    }
    catch(std::exception& e) 
    {
        FX_LOG(ERROR, "Response exception thrown: [%s]: ", e.what());
    }
    catch(const FirteXException& e) 
    {
        FX_LOG(ERROR, "Response exception thrown: [%s]: ", e.what().c_str());
    }
}
Ejemplo n.º 5
0
void EvHttpSyncClient::close()
{
    FX_DEBUG("Close client");
    if (m_pConn)
    {
        evhttp_connection_free(m_pConn);
        m_pConn = NULL;
    }

    if (m_evbase && m_bOwnEventBase) 
    {
        event_base_loopbreak(m_evbase);
        event_base_free(m_evbase);
    }
    m_evbase = NULL;

    m_lastState = ST_DISCONNECTED;
    m_pLastRequest = NULL;
}
Ejemplo n.º 6
0
void IndexWriter::commit()
{
    FX_DEBUG("Commit in-memory data");
    m_pDocConsumer->commit();
    m_nOpCountSinceLastCommit = 0;
}
Ejemplo n.º 7
0
offset_t DocPostingMerger::endMerge()
{
    FX_DEBUG("end merge doc posting");
    OutputStreamPtr nullStream;
    return commit(nullStream);
}
Ejemplo n.º 8
0
void IndexBarrelKeeper::sealBarrel(const IndexBarrelWriterPtr& pInMemBarrel)
{
    FX_DEBUG("Seal barrel");

    IndexBarrelWriterPtr pBarrelWriter = pInMemBarrel;
    InMemIndexMergerPtr pInMemBarrelMerger;
    pBarrelWriter->sealBarrel();

    {
        ScopedRWLock lock(m_lock, true);

        IndexBarrelPtr pLastBarrel;
        if (!m_commitMap.empty())
        {
            pLastBarrel = m_commitMap.rbegin()->second;
        }
    
        BarrelsInfoPtr pNewBarrelsInfo;
        if (pLastBarrel)
        {
            pNewBarrelsInfo.reset(pLastBarrel->getBarrelsInfo()->clone());
        }
        else 
        {
            pNewBarrelsInfo.reset(new BarrelsInfo);
        }

        /// Commit barrel to barrels info
        if (!pBarrelWriter->commitBarrelInfo(pNewBarrelsInfo))
        {
            FX_DEBUG("No barrel to commit");
            return ;
        }
        FX_DEBUG("Committed barrel info: commit: [%d], baseDocId: [%d]",
                 pNewBarrelsInfo->getLastBarrel().getCommitId(),
                 pNewBarrelsInfo->getLastBarrel().getBaseDocId());

        //TODO: implement real-time search
        IndexBarrelReaderPtr pReader;
        if (pLastBarrel)
        {
            pReader = pLastBarrel->getReader();
        }

        PrimaryKeyIndexPtr pPrimKey;
        if (m_pOnDiskPrimKeyIndex)
        {
            pPrimKey.reset(m_pOnDiskPrimKeyIndex->clone());
            if (pPrimKey)
            {
                const PrimaryKeyIndexPtr& pPkIndex = pBarrelWriter->getPrimaryKey();
                if (pPkIndex)
                {
                    pPrimKey->reopen(pNewBarrelsInfo, pPkIndex->getHashMap());
                }
            }
        }
        else
        {
            pPrimKey = createPrimaryKeyIndex();
            if (pPrimKey)
            {
                const PrimaryKeyIndexPtr& pPkIndex = pBarrelWriter->getPrimaryKey();
                FIRTEX_ASSERT2(pPkIndex);
                pPrimKey->open(m_pFileSys, pNewBarrelsInfo, pPkIndex->getHashMap());
            }
        }

        IndexBarrelPtr pBarrel(new IndexBarrel(pNewBarrelsInfo, pReader, m_pOnDiskDocFilter));
        pBarrel->setEncoding(m_sEncoding);
        
        bool bInserted = doInsertCommit(pNewBarrelsInfo->getCommitId(), pBarrel);
        (void)bInserted;
        FIRTEX_ASSERT2(bInserted);

        m_pOnDiskDocFilter.reset(m_pOnDiskDocFilter->clone());
        m_pOnDiskPrimKeyIndex = pPrimKey;

        if (!m_pInMemBarrelMerger)
        {
            m_pInMemBarrelMerger.reset(new InMemIndexMerger(this));
        }
        m_pInMemBarrelMerger->addToMerge(pNewBarrelsInfo->getLastBarrel(), 
                pBarrelWriter);
        if (m_pInMemBarrelMerger->getInMemBarrelCount() >= (size_t)GLOBAL_CONF().Build.buildThreadCount)
        {
            pInMemBarrelMerger = m_pInMemBarrelMerger;
            m_pInMemBarrelMerger.reset();
        }
    }
    
    if (pInMemBarrelMerger)
    {
        CommittablePtr pCommitObj = std::dynamic_pointer_cast<Committable>(pInMemBarrelMerger);
        m_pCommitScheduler->commit(pCommitObj);
    }
}