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); }
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); }
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; }