示例#1
0
ssize_t GCFS_ControlControl::write(const char* sBuffer, off_t uiOffset, size_t uiSize)
{
    GCFS_Task* pTask = getParentTask();

    if(!pTask)
        return 0;

    std::string value = GCFS_Utils::TrimStr(std::string(sBuffer, uiSize));

    GCFS_Utils::keyValueArray_t vValues;

    if(!GCFS_Utils::ParseConfigString((char*)value.c_str(), vValues))
        return false;

    // Check if commands/assignments exists
    for(GCFS_Utils::keyValueArray_t::iterator it = vValues.begin(); it != vValues.end(); it++)
    {
        if(it->second)
        {
            // It is assignment
            if(pTask->getConfigValue(it->first) == NULL)
                return false;
        }
        else
        {
            bool bFound = false;
            for (uint iIndex = 0; iIndex < m_vCommands.size(); iIndex ++)
                if (strcasecmp(m_vCommands[iIndex], it->first) == 0)
                {
                    bFound = true;
                    continue;
                }

            if(!bFound)
                return false;
        }
    }

    // Execute commands/assignments
    for(GCFS_Utils::keyValueArray_t::iterator it = vValues.begin(); it != vValues.end(); it++)
    {
        if(it->second)
        {
            // It is assignment
            if(pTask->getConfigValue(it->first)->write(it->second, 0, 0) <= 0)
                return false;
        }
        else
        {
            for (uint iIndex = 0; iIndex < m_vCommands.size(); iIndex ++)
                if (strcasecmp(m_vCommands[iIndex], it->first) == 0)
                    if(!executeCommand(pTask, iIndex))
                        return false;
        }
    }

    return max(0, uiSize - uiOffset);
}
示例#2
0
ssize_t GCFS_ControlStatus::read(std::string &sBuffer, off_t uiOffset, size_t uiSize)
{
    GCFS_Task* pTask = getParentTask();
    if(!pTask)
        return 0;

    GCFS_Service* pService = g_sConfig.GetService(pTask->m_pConfigDirectory->m_piService->get());
    int status = (int)pService->getTaskStatus(pTask);
    const std::string id = pService->getTaskId(pTask);

    char cbuff[32];
    snprintf(cbuff, ARRAYSIZE(cbuff), "%d\t%s", status, statuses[status]);

    sBuffer = cbuff;
    sBuffer += "\n"+id;

    sBuffer += "\n";
    return max(0, sBuffer.size() - uiOffset);
}
示例#3
0
void ReadShortReadsSubTask::run() {
    stateInfo.setProgress(0);
    GTIMER(cvar, tvar, "ReadSubTask");
    GenomeAlignerTask *parent = static_cast<GenomeAlignerTask*>(getParentTask());
    if (!alignContext.bestMode) {
        parent->pWriteTask->flush();
    }

    alignContext.cleanVectors();
    dataBunch = new DataBunch();

    if (isCanceled()) {
        readingFinishedWakeAll();
        return;
    }
    qint64 m = freeMemorySize;
    taskLog.details(QString("Memory size is %1").arg(m));
    bool alignReversed = settings.getCustomValue(GenomeAlignerTask::OPTION_ALIGN_REVERSED, true).toBool();
    int qualityThreshold = settings.getCustomValue(GenomeAlignerTask::OPTION_QUAL_THRESHOLD, 0).toInt();

    DNATranslation* transl = AppContext::getDNATranslationRegistry()->
        lookupTranslation(BaseDNATranslationIds::NUCL_DNA_DEFAULT_COMPLEMENT);

    alignContext.isReadingStarted = true;
    bunchSize = 0;
    int readNum = 0;
    while(!seqReader->isEnd()) {
        if (isCanceled()) {
            readingFinishedWakeAll();
            return;
        }
        SearchQuery *query = seqReader->read();
        if (NULL == query) {
            if (!seqReader->isEnd()) {
                setError("Short-reads object type must be a sequence, but not a multiple alignment");
                readingFinishedWakeAll();
                return;
            }
            break;
        }
        ++bunchSize;

        if (!checkDnaQuality(query, qualityThreshold)) {
            continue;
        }
        updateMinMaxReadLengths(alignContext, query->length());

        int W = 0, q = 0;
        int CMAX = alignContext.nMismatches;
        if (!add(CMAX, W, q, readNum, query, parent)) {
            delete query;
            continue;
        }
        m -= query->memoryHint();

        if (alignReversed) {
            SearchQuery *rQu = createRevComplQuery(query, transl);
            if (rQu) {
                add(CMAX, W, q, readNum, rQu, parent);
                m -= rQu->memoryHint();
            }
        }

        qint64 alignContextMemoryHint = dataBunch->memoryHint();
        if (m <= alignContextMemoryHint + prevMemoryHint) {
            break;
        }

        SAFE_POINT(NULL != dataBunch, "No dataBunch",);
        if (dataBunch->bitValuesV.size() > DROP_BUNCH_DATA_SIZE) {
            dropToAlignContext();
            readNum = 0;
            alignContext.readShortReadsWait.wakeOne();
        }
    }

    dropToAlignContext();
    readingFinishedWakeAll();
}
    }
}

#define GA_CHECK_BREAK(a) {if (!(a)) {algoLog.trace("Break because of ![" #a "]"); break;}}
#define GA_CHECK_CONTINUE(a) {if (!(a)) {algoLog.trace("Continue because of ![" #a "]"); continue;}}

ShortReadAlignerCPU::ShortReadAlignerCPU(int taskNo, GenomeAlignerIndex *i, AlignContext *s, GenomeAlignerWriteTask *w)
: Task("ShortReadAlignerCPU", TaskFlag_None), taskNo(taskNo), index(i), alignContext(s), writeTask(w)
{
}

void ShortReadAlignerCPU::run() {
    SAFE_POINT_EXT (NULL != alignContext, setError("Align context error"),);
    assert(!alignContext->openCL);

    GenomeAlignerFindTask *parent = static_cast<GenomeAlignerFindTask*>(getParentTask());
    SAFE_POINT_EXT(NULL != parent, setError("Aligner parent error"),);

    QVector<int> binarySearchResults;

    SAFE_POINT_EXT (NULL != index, setError("Aligner index error"),);
    for (int part = 0; part < index->getPartCount(); part++) {
        if (isCanceled()) {
            break;
        }
        stateInfo.setProgress(100*part/index->getPartCount());
        parent->requirePartForAligning(part);
        if (parent->hasError()) {
            break;
        }