,
105 "wait_time_increment",
117m_CancelRequested(
false),
119m_QueueGuard(*loader.m_ThreadPool, *loader.m_Queue),
134m_CancelRequested.store(
true, memory_order_release);
139 returnm_CancelRequested.load(memory_order_acquire);
145m_QueueGuard.CancelAll();
146m_AddRequestSemaphore.Post();
147m_ReadResultsThread.join();
161 while( !IsCancelRequested() ) {
162 if(
auto result= m_QueueGuard.GetNextResult() ) {
166 LOG_POST(
Warning<<
"CPSGDataLoader: Failed to load CDDs info for "<< processor->m_CDDIds);
172m_AddRequestSemaphore.Wait();
180 if( IsCancelRequested() ) {
189 if( m_Loader.m_Caches->m_NoCDDCache.Find(blob_id) ) {
193 autocached = m_Loader.m_Caches->m_AnnotInfoCache.Find(make_pair(
kCDDAnnotName, ids));
198 for(
auto&
id: ids) {
202 autorequest = make_shared<CPSG_Request_NamedAnnotInfo>(std::move(bio_ids), annot_names);
210m_Loader.m_Caches.get()));
211m_QueueGuard.AddRequest(request, processor);
212m_AddRequestSemaphore.Post();
220 #define NCBI_PSGLOADER_NAME "psg_loader" 221 #define NCBI_PSGLOADER_SERVICE_NAME "service_name" 222 #define NCBI_PSGLOADER_NOSPLIT "no_split" 223 #define NCBI_PSGLOADER_WHOLE_TSE "whole_tse" 224 #define NCBI_PSGLOADER_WHOLE_TSE_BULK "whole_tse_bulk" 225 #define NCBI_PSGLOADER_ADD_WGS_MASTER "add_wgs_master" 268 template<
classTParamType>
271 value= NStr::StringToNumeric<TParamType>(
str);
289 template<
classTParamDescription>
293 typenameTParam::TValueType
value= TParam::GetDefault();
295TParam::GetState(0, &
source);
300s_ConvertParamValue<typename TParam::TValueType>(
value, node->GetValue().value);
311unique_ptr<CPSGDataLoader::TParamTree> app_params;
325 if(service_name.empty() && psg_params) {
328 if(service_name.empty()) {
329service_name = TPSG_ServiceName::GetDefault();
336 if(!
value.empty()) {
348 m_TSERequestMode= (s_GetParamValue<X_NCBI_PARAM_DECLNAME(PSG_LOADER, WHOLE_TSE)>(psg_params)?
351 m_TSERequestModeBulk= (s_GetParamValue<X_NCBI_PARAM_DECLNAME(PSG_LOADER, WHOLE_TSE_BULK)>(psg_params)?
359 if( !param.empty() ) {
365 "Bad value of parameter " 367 ": \""<<param<<
"\"");
378 if(!
value.empty()) {
379cache_lifespan = NStr::StringToNumeric<int>(
value);
386 if(!
value.empty()) {
387no_data_cache_lifespan = NStr::StringToNumeric<int>(
value);
394 if(!
value.empty()) {
395cache_max_size = NStr::StringToNumeric<size_t>(
value);
403s_GetParamValue<X_NCBI_PARAM_DECLNAME(PSG_LOADER, RETRY_COUNT)>(psg_params);
405s_GetParamValue<X_NCBI_PARAM_DECLNAME(PSG_LOADER, BULK_RETRY_COUNT)>(psg_params);
411 m_Caches= make_unique<CPSGCaches>(cache_lifespan, cache_max_size,
412no_data_cache_lifespan, cache_max_size);
426 if(TPSG_PrefetchCDD::GetDefault()) {
442 static size_ts_PSGLoaderInstanceCounter = 0;
443 size_tcurrent_instance_number = ++s_PSGLoaderInstanceCounter;
444 if( current_instance_number > 1 ) {
447args.
AddValue(
"client_id", new_client_id);
449 if(!args.
GetArgs().empty()) {
488 template<
classCall>
494 if( retry_count == 0 ) {
497 for(
int t= 1;
t< retry_count; ++
t) {
509 LOG_POST(
Warning<<
"CPSGDataLoader::"<<name<<
"() try "<<
t<<
" exception: "<<exc);
517 LOG_POST(
Warning<<
"CPSGDataLoader::"<<name<<
"() try "<<
t<<
" exception: "<<exc);
519 catch( exception& exc ) {
520 LOG_POST(
Warning<<
"CPSGDataLoader::"<<name<<
"() try "<<
t<<
" exception: "<<exc.
what());
523 LOG_POST(
Warning<<
"CPSGDataLoader::"<<name<<
"() try "<<
t<<
" exception");
527 LOG_POST(
Warning<<
"CPSGDataLoader: waiting "<<wait_sec<<
"s before retry");
538cref(idh), ref(ids)),
549 if(!seq_info)
return;
576 if( seq_info->gi !=
ZERO_GI) {
577ret.
gi= seq_info->gi;
603 if( seq_info->canonical.IsAccVer() ) {
604ret.
acc_ver= seq_info->canonical;
630 _TRACE(
"no seq_info for "<<idh);
632 else if( seq_info->tax_id <= 0 ) {
633 _TRACE(
"bad tax_id for "<<idh<<
" : "<<seq_info->tax_id);
690 out<<
"failed to load "<<formatter.
type<<
" in bulk request: first error "<<formatter.
processor;
708cref(ids), ref(loaded), ref(ret)),
"GetTaxId");
714 auto[ load_count1, failed_processor1 ] =
x_GetIpgTaxIds(ids, loaded, ret);
715 autofailed_processor = failed_processor1;
716 if( load_count1 != ids.size() ) {
717vector<shared_ptr<SPsgBioseqInfo>> infos;
718infos.resize(ret.size());
722 for(
size_t i= 0;
i< infos.size(); ++
i) {
723 if(loaded[
i] || !infos[
i].get()) {
726ret[
i] = infos[
i]->tax_id;
730 if( !failed_processor1 ) {
731failed_processor1 = failed_processor2;
734 if( failed_processor ) {
745 "GetSequenceLength");
778 if( seq_info->hash ) {
780ret.
hash= seq_info->hash;
806ret.
type= seq_info->molecule_type;
815data_source, cref(idh)),
816 "GetSequenceState");
836 if( !
info.first ) {
840 if(
info.second.first ) {
841 state|=
info.second.first->blob_state_flags;
861data_source, cref(idh), choice),
881 autobioseq_info =
m_Caches->m_BioseqInfoCache.Find(idh);
882 if( bioseq_info && bioseq_info->KnowsBlobId() ) {
884 if( !bioseq_info->HasBlobId() ) {
891 if(
m_Caches->m_NoBioseqInfoCache.Find(idh) ) {
900 autorequest = make_shared<CPSG_Request_Biodata>(std::move(bio_id));
926 "failed to get bioseq info for "<<idh<<
": "<<
933 if(
autotse_lock = processor->GetTSE_Lock() ) {
936 else if( !processor->HasBlob_id() ) {
940 else if( processor->GotForbidden() ) {
942 "blob state error for "+idh.
AsString(),
943processor->GetForbiddenBlobState());
950 if(
autobioseq_info =
m_Caches->m_BioseqInfoCache.Find(idh) ) {
975 autoseq_info =
m_Caches->m_BioseqInfoCache.Find(idh);
976 if( seq_info && seq_info->KnowsBlobId() ) {
984 autorequest = make_shared<CPSG_Request_Biodata>(std::move(bio_id));
996 _TRACE(
"Failed to get blob id for "<< idh);
998 "CPSGDataLoader::GetBlobId("<<idh<<
") failed: "<<
1005 _TRACE(
"Failed to get blob id for "<< idh);
1007 "CPSGDataLoader::GetBlobId() failed: "<<
1010seq_info = processor->GetBioseqInfoResult();
1012 if( !seq_info->HasBlobId() ) {
1016 returnseq_info->GetDLBlobId();
1035data_source, cref(blob_id)),
1046 _TRACE(
"GetBlobById("<<blob_id.
ToPsgId()<<
") should fail");
1052 if( load_lock && load_lock.
IsLoaded() ) {
1053 _TRACE(
"GetBlobById() already loaded "<< blob_id.
ToPsgId());
1069 autorequest = make_shared<CPSG_Request_Blob>(bid);
1082 "failed to get blob "<<blob_id.
ToPsgId()<<
": "<<
1088ret = processor->GetTSE_Lock();
1089 if( !ret && (processor->GotForbidden() || processor->GotUnauthorized()) ) {
1091 if( processor->GotUnauthorized() ) {
1097 state|= processor->GetBlobInfoState(blob_id.
ToPsgId());
1105 "CPSGDataLoader::GetBlobById("+blob_id.
ToPsgId()+
") failed");
1115data_source, ref(loaded), ref(tse_sets)),
1160 returnmake_optional<TResult>();
1166 returnmake_optional<TResult>({tse});
1172 returnmake_optional<TResult>({tse});
1189optional<CPSGDataLoader_Impl::CGetRequests::TResult>
1198 if( bioseq_info && bioseq_info->KnowsBlobId() ) {
1200 if( !bioseq_info->HasBlobId() ) {
1207 const string& blob_id = bioseq_info->GetPSGBlobId();
1210 if( load_lock && load_lock.
IsLoaded() ) {
1211 _TRACE(
"CreateGetRequests: already loaded "<< blob_id);
1212 return Ready(idh, load_lock);
1216 _TRACE(
"CreateGetRequests: forbidden "<< blob_id);
1222 LOG_POST(
Info<<
"PSG loader: Re-loading blob: "<< blob_id<<
" for "<<idh);
1224 autorequest = make_shared<CPSG_Request_Blob>(
CPSG_BlobId(blob_id));
1242 autorequest = make_shared<CPSG_Request_Biodata>(std::move(bio_id));
1265optional<CPSGDataLoader_Impl::CGetRequests::TResult>
1268 if(
result.GetIndex() == eRequestGet ) {
1271SaveFailure(processor);
1276 if(
autotse_lock = processor->GetTSE_Lock() ) {
1277 returnReady(idh, tse_lock);
1279 else if( !processor->HasBlob_id() ) {
1291 LOG_POST(
Info<<
"PSG loader: Re-loading blob: "<< processor->GetPSGBlobId()<<
" for "<<idh);
1294 autorequest = make_shared<CPSG_Request_Blob>(std::move(blob_id));
1295request->IncludeData(m_IncludeData);
1299m_Loader.m_Caches.get(),
1300m_Loader.m_AddWGSMasterDescr));
1301m_GetBlob2Reqs[processor2].push_back(idh);
1302AddRequest(request, processor2, eRequestGetBlob);
1308 TRequestsreqs = std::move(m_GetBlob2Reqs[processor]);
1309m_GetBlob2Reqs.erase(processor);
1311!processor->GetTSE_Lock() ) {
1312SaveFailure(processor);
1316 autotse_lock = processor->GetTSE_Lock();
1317 returnReady(std::move(reqs), tse_lock);
1325 if( !m_FirstFailedProcessor ) {
1326m_FirstFailedProcessor = processor;
1333 if( m_FailedCount ) {
1348 if( loaded.count(idh) ) {
1353tse_sets[idh] = std::move(*tse_set);
1361tse_sets[idh] = *tse_set;
1377data_source, id_sets, ref(loaded), ref(ret)),
1387chunks.push_back(
Ref(&chunk_info));
1406 _TRACE(
"Cannot make CDD entry because of wrong TSE state id="<<blob_id.ToString());
1412 _TRACE(
"Failed to open blob data stream for blob-id "<< blob_id.ToString());
1427 for(
auto&
id: annot_ids ) {
1441data_source, cref(chunks)),
1449 if(chunks.empty())
return;
1458 for(
auto& it : chunks) {
1477 autorequest = make_shared<CPSG_Request_NamedAnnotInfo>(bio_id,
names);
1480ids.push_back(cdd_ids.gi);
1481 if( cdd_ids.acc_ver ) {
1482ids.push_back(cdd_ids.acc_ver);
1490queue.
AddRequest(request, processor, eRequestCDD);
1493 autorequest = make_shared<CPSG_Request_Blob>(blob_id.
ToPsgId());
1501queue.
AddRequest(request, processor, eRequestDelayedTSE);
1514queue.
AddRequest(request, processor, eRequestChunk);
1517 size_tfailed_count = 0;
1521 _TRACE(
"CPSGDataLoader::LoadChunks(): failed to process request "<<
1524 if( !first_failed_processor ) {
1525first_failed_processor =
result.GetProcessor();
1534 _TRACE(
"CPSGDataLoader::LoadChunks(): failed to load chunk "<<
1539 if( failed_count ) {
1547pair<CRef<CTSE_Chunk_Info>,
string>
1550pair<CRef<CTSE_Chunk_Info>,
string> ret;
1552 unsignedmain_count = 0;
1553 unsignedzoom_count = 0;
1573vector<SAnnotTypeSelector>
types;
1581 for(
autofeat_type_info_iter : annot_info.
GetFeat() ) {
1583 intfeat_type = finfo.
GetType();
1584 if( feat_type == 0 ) {
1593 for(
autofeat_subtype : finfo.
GetSubtypes() ) {
1608 if(
names.size() == 1 ) {
1609ret.second = *
names.begin();
1613 " annots: "<<ret.second<<
" "<<main_count<<
"+"<<zoom_count);
1615 if( !
names.empty() ) {
1629data_source, cref(ids), sel, processed_nas),
1630 "GetAnnotRecordsNA");
1636 const string& name,
1642 autocached =
m_Caches->m_AnnotInfoCache.Find(make_pair(name, ids));
1644 if( !cached->infos.empty() ) {
1647 for(
auto&
info: cached->infos ) {
1650blob_id->SetTSEName(name);
1654load_lock->
SetName(cached->name);
1659locks.
insert(load_lock);
1664 if(
m_Caches->m_NoAnnotInfoCache.Find(make_pair(name, ids)) ) {
1679 if( !data_source || ids.empty() ) {
1688 stringsnp_name =
"SNP";
1691 for(
auto&
id: ids) {
1702 stringname = it->first;
1703 if(name ==
"SNP") {
1714annot_names.push_back(it->first);
1719 if( !annot_names.empty() ) {
1727 autorequest = make_shared<CPSG_Request_NamedAnnotInfo>(std::move(bio_ids), annot_names);
1728request->SetSNPScaleLimit(snp_scale_limit);
1734queue.
AddRequest(request, processor, eRequestNA);
1738 typedefvector<string> TRequests;
1741 if(
result.GetIndex() == eRequestNA ) {
1744 _TRACE(
"Failed to load annotations for "<<ids.front());
1746 "CPSGDataLoader::GetAnnotRecordsNA("<<ids.front()<<
") failed: "<<
1749 for(
auto&
r: processor->GetResults() ) {
1750 if(
r.m_TSE_Lock ) {
1752locks.
insert(
r.m_TSE_Lock);
1756 autorequest = make_shared<CPSG_Request_Blob>(std::move(blob_id));
1759dl_blob_id->SetTSEName(
r.m_NA);
1765getblob2reqs[processor2].push_back(
r.m_NA);
1766queue.
AddRequest(request, processor2, eRequestGetBlob);
1772TRequests reqs = std::move(getblob2reqs[processor]);
1773getblob2reqs.
erase(processor);
1775 _TRACE(
"Failed to load annotations for "<<ids.front());
1777 "CPSGDataLoader::GetAnnotRecordsNA("<<ids.front()<<
") failed: "<<
1780 for(
auto& name : reqs ) {
1783locks.
insert(processor->GetTSE_Lock());
1791locks.
insert(tse_lock);
1804 if(id_sets.empty())
return;
1805 _ASSERT(id_sets.size() == loaded.size());
1806 _ASSERT(id_sets.size() == ret.size());
1812vector<SCDDIds> cdd_ids(id_sets.size());
1813 for(
size_t i= 0;
i< id_sets.size(); ++
i) {
1814 if( loaded[
i] ) {
1818 const TIds& ids = id_sets[
i];
1819 if( ids.empty() ) {
1824 if( !cdd_ids[
i] ) {
1826loaded[
i] =
true;
1832loaded[
i] =
true;
1837 for(
auto&
id: ids) {
1840 for(
auto& bid : blob_ids) {
1855loaded[
i] =
true;
1872loaded[
i] =
true;
1879 for(
auto&
id: ids) {
1882 autorequest = make_shared<CPSG_Request_NamedAnnotInfo>(std::move(bio_ids), annot_names);
1892 size_tfailed_count = 0;
1895 size_t i=
result.GetIndex();
1896 _ASSERT(
i< cdd_ids.size() && cdd_ids[
i]);
1903 _TRACE(
"Failed to load CDDs for "<< cdd_ids[
i]);
1905 if( !first_failed_processor ) {
1906first_failed_processor =
result.GetProcessor();
1910ret[
i] = processor->m_TSE_Lock;
1911loaded[
i] =
true;
1913 if( failed_count ) {
1928cref(ids), ref(loaded), ref(ret)),
1936vector<shared_ptr<SPsgBioseqInfo>> infos;
1937infos.resize(ret.size());
1941 for(
size_t i= 0;
i< infos.size(); ++
i) {
1942 if(loaded[
i] || !infos[
i].get())
continue;
1944ret[
i].push_back(*it);
1946loaded[
i] =
true;
1949 if( failed_processor ) {
1959cref(ids), ref(loaded), ref(ret)),
1967vector<shared_ptr<SPsgBioseqInfo>> infos;
1968infos.resize(ret.size());
1972 for(
size_t i= 0;
i< infos.size(); ++
i) {
1973 if(loaded[
i] || !infos[
i].get())
continue;
1978loaded[
i] =
true;
1981 if( failed_processor ) {
1991cref(ids), ref(loaded), ref(ret)),
1999vector<shared_ptr<SPsgBioseqInfo>> infos;
2000infos.resize(ret.size());
2004 for(
size_t i= 0;
i< infos.size(); ++
i) {
2005 if(loaded[
i] || !infos[
i].get())
continue;
2006ret[
i] = infos[
i]->gi;
2007loaded[
i] =
true;
2010 if( failed_processor ) {
2020cref(ids), ref(loaded), ref(ret)),
2028vector<shared_ptr<SPsgBioseqInfo>> infos;
2029infos.resize(ret.size());
2033 for(
size_t i= 0;
i< infos.size(); ++
i) {
2034 if(loaded[
i] || !infos[
i].get())
continue;
2036 if(!ret[
i].
empty()) loaded[
i] =
true;
2039 if( failed_processor ) {
2049cref(ids), ref(loaded), ref(ret)),
2050 "GetSequenceLengths",
2057vector<shared_ptr<SPsgBioseqInfo>> infos;
2058infos.resize(ret.size());
2062 for(
size_t i= 0;
i< infos.size(); ++
i) {
2063 if(loaded[
i] || !infos[
i].get())
continue;
2064 autolength = infos[
i]->length;
2066loaded[
i] =
true;
2069 if( failed_processor ) {
2079cref(ids), ref(loaded), ref(ret)),
2080 "GetSequenceTypes",
2087vector<shared_ptr<SPsgBioseqInfo>> infos;
2088infos.resize(ret.size());
2092 for(
size_t i= 0;
i< infos.size(); ++
i) {
2093 if(loaded[
i] || !infos[
i].get())
continue;
2094ret[
i] = infos[
i]->molecule_type;
2095loaded[
i] =
true;
2098 if( failed_processor ) {
2111data_source, cref(ids), ref(loaded), ref(ret)),
2112 "GetSequenceStates",
2123infos.resize(ret.size());
2127 for(
size_t i= 0;
i< infos.size(); ++
i) {
2128 if( loaded[
i] || !infos[
i].
first) {
2132loaded[
i] =
true;
2135 if( failed_processor ) {
2145cref(ids), ref(loaded), ref(ret), ref(known)),
2146 "GetSequenceHashes",
2153vector<shared_ptr<SPsgBioseqInfo>> infos;
2154infos.resize(ret.size());
2158 for(
size_t i= 0;
i< infos.size(); ++
i) {
2159 if(loaded[
i] || !infos[
i].get())
continue;
2160ret[
i] = infos[
i]->hash;
2161known[
i] = infos[
i]->hash != 0;
2162loaded[
i] =
true;
2165 if( failed_processor ) {
2174 if( shared_ptr<SPsgBioseqInfo> ret =
m_Caches->m_BioseqInfoCache.Find(idh) ) {
2175 if( ret->tax_id <= 0 ) {
2176 _TRACE(
"bad tax_id for "<<idh<<
" : "<<ret->tax_id);
2180 if(
m_Caches->m_NoBioseqInfoCache.Find(idh) ) {
2188shared_ptr<CPSG_Request_Resolve> request = make_shared<CPSG_Request_Resolve>(std::move(bio_id));
2203 returnprocessor->m_BioseqInfoResult;
2214 if(!text_id)
return false;
2217 if((acc_info & kAccFlags) != kAccFlags) {
2220 if( !text_id->IsSetAccession() || !text_id->IsSetVersion() ) {
2241 boolis_wp_acc =
false;
2249shared_ptr<CPSG_Request_IpgResolve> request = make_shared<CPSG_Request_IpgResolve>(acc_ver);
2257 _TRACE(
"Failed to get IPG tax id for "<< idh);
2259 "Failed to get IPG tax id for "+acc_ver);
2263 returnprocessor->m_TaxId;
2267pair<size_t, CRef<CPSGL_Processor>>
2271 returnmake_pair(0,
null);
2276 size_tload_count = 0;
2278 for(
size_t i= 0;
i< ids.size(); ++
i) {
2282loaded[
i] =
true;
2288 boolis_wp_acc =
false;
2293shared_ptr<CPSG_Request_IpgResolve> request = make_shared<CPSG_Request_IpgResolve>(acc_ver);
2300 size_t i=
result.GetIndex();
2302 _TRACE(
"Failed to get IPG tax id for "<< ids[
i]);
2303 if( !failed_processor ) {
2304failed_processor =
result.GetProcessor();
2310 autotax_id = processor->m_TaxId;
2313loaded[
i] =
true;
2317 returnmake_pair(load_count, failed_processor);
2352 "failed to get bioseq/blob info for "<<idh);
2369shared_ptr<SPsgBioseqInfo> bioseq_info =
m_Caches->m_BioseqInfoCache.Find(idh);
2370shared_ptr<SPsgBlobInfo> blob_info;
2371 if( bioseq_info && bioseq_info->KnowsBlobId() ) {
2373ret.first = bioseq_info;
2374 if( !bioseq_info->HasBlobId() ) {
2378blob_info =
m_Caches->m_BlobInfoCache.Find(bioseq_info->GetPSGBlobId());
2381ret.second.first = blob_info;
2386ret.second.second =
m_Caches->m_NoBlobInfoCache.Find(bioseq_info->GetPSGBlobId());
2393shared_ptr<CPSG_Request_Blob> request = make_shared<CPSG_Request_Blob>(std::move(bid));
2401 else if(
m_Caches->m_NoBioseqInfoCache.Find(idh) ) {
2408 autoblob_request = make_shared<CPSG_Request_Biodata>(std::move(bio_id));
2412queue.
AddRequest(blob_request, blob_processor,
2435 _TRACE(
"Failed to get bioseq info for "<< processor->GetSeq_id());
2438ret.first = processor->m_BioseqInfoResult;
2440 _TRACE(
"No bioseq info for "<< processor->GetSeq_id());
2443ret.second.first = processor->m_BlobInfoResult;
2444ret.second.second = processor->m_BlobInfoStatus;
2445 if( ret.second.first ) {
2449 else if( ret.first->HasBlobId() &&
2451ret.second.second =
m_Caches->m_NoBlobInfoCache.Find(ret.first->GetPSGBlobId());
2458shared_ptr<CPSG_Request_Blob> request = make_shared<CPSG_Request_Blob>(std::move(bid));
2481 _TRACE(
"Failed to get blob info for "<< processor->GetSeq_id());
2484ret.second.first = processor->m_BlobInfoResult;
2485ret.second.second = processor->m_BlobInfoStatus;
2486 if( ret.second.first ) {
2491 _TRACE(
"No blob info for "<< processor->GetSeq_id());
2499 const string& blob_id)
2502 if( shared_ptr<SPsgBlobInfo> ret =
m_Caches->m_BlobInfoCache.Find(blob_id) ) {
2506 if( data_source ) {
2509 if( load_lock && load_lock.IsLoaded() ) {
2510 autoblob_info = make_shared<SPsgBlobInfo>(*load_lock);
2511 m_Caches->m_BlobInfoCache.Add(blob_id, blob_info);
2525shared_ptr<CPSG_Request_Blob> request = make_shared<CPSG_Request_Blob>(std::move(bid));
2542 _TRACE(
"Failed to load blob info for "<< blob_id);
2545 if( !processor->m_BlobInfo ) {
2546 _TRACE(
"No blob info for "<< blob_id);
2549 autoblob_info = make_shared<SPsgBlobInfo>(*processor->m_BlobInfo);
2550 m_Caches->m_BlobInfoCache.Add(blob_id, blob_info);
2558 autoseq_state =
info.first->GetBioseqStateFlags();
2559 autochain_state =
info.first->GetChainStateFlags();
2568pair<size_t, CRef<CPSGL_Processor>>
2573 size_tload_count = 0;
2578 for(
size_t i= 0;
i< ids.size(); ++
i) {
2580 if( loaded[
i] ) {
2586ret[
i] =
m_Caches->m_BioseqInfoCache.Find(ids[
i]);
2591 if(
m_Caches->m_NoBioseqInfoCache.Find(ids[
i]) ) {
2596shared_ptr<CPSG_Request_Resolve> request = make_shared<CPSG_Request_Resolve>(std::move(bio_id));
2604 size_t i=
result.GetIndex();
2610 _TRACE(
"Failed to load bioseq info for "<< ids[
i]);
2611 if( !failed_processor ) {
2612failed_processor = processor;
2616ret[
i] = processor->m_BioseqInfoResult;
2621 returnmake_pair(load_count, failed_processor);
2625pair<size_t, CRef<CPSGL_Processor>>
2631 size_tload_count = 0;
2633vector<bool> errors(ids.size());
2637 for(
size_t i= 0;
i< ids.size(); ++
i) {
2651 if( !failed_processor ) {
2652failed_processor =
result.GetProcessor();
2659 returnmake_pair(load_count, failed_processor);
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
const string & GetName(void) const
Blob state exceptions, used by GenBank loader.
CTSE_LoadLock GetTSE_LoadLock(const TBlobId &blob_id)
CTSE_LoadLock GetTSE_LoadLockIfLoaded(const TBlobId &blob_id)
CDataLoader * GetDataLoader(void) const
vector< TBlobId > TLoadedBlob_ids
void GetLoadedBlob_ids(const CSeq_id_Handle &idh, TLoadedTypes types, TLoadedBlob_ids &blob_ids) const
static TParamTree * GetParamsSubnode(TParamTree *params, const string &subnode_name)
static string GetParam(const TParamTree *params, const string ¶m_name)
bool GetPSGNoSplit(void) const
const string & GetPSGServiceName(void) const
bool IsSetEnableCDD(void) const
const TParamTree * GetParamTree(void) const
bool IsSetEnableSNP(void) const
const string & GetWebCookie(void) const
bool GetEnableWGS(void) const
bool HasHUPIncluded(void) const
bool GetEnableCDD(void) const
bool GetEnableSNP(void) const
bool IsSetEnableWGS(void) const
CID2S_Feat_type_Info â.
CID2S_Seq_annot_Info â.
double GetTime(int step) const
void Init(CConfig &conf, const string &driver_name, const SAllParams ¶ms)
Data loader exceptions, used by GenBank loader.
optional< TResult > CreateGetRequests(const CSeq_id_Handle &idh)
CPSGDataLoader_Impl & m_Loader
CGetRequests(CPSGDataLoader_Impl &loader, CDataSource *data_source, CPSG_Request_Biodata::EIncludeData include_data)
optional< TResult > ProcessResult(const CPSGL_ResultGuard &result)
vector< CSeq_id_Handle > TRequests
optional< TResult > NotReady()
CDataLoader::TTSE_LockSet TResult
void SaveFailure(const CRef< CPSGL_Processor > &processor)
CRef< CPSGL_Processor > m_FirstFailedProcessor
optional< TResult > Ready(const CSeq_id_Handle &request, const CTSE_Lock &tse)
const TRequests & GetReadyRequests() const
TRequests m_ReadyRequests
optional< TResult > Empty(const CSeq_id_Handle &request)
CPSG_Request_Biodata::EIncludeData m_IncludeData
CDataSource * m_DataSource
map< CRef< CPSGL_GetBlob_Processor >, TRequests > m_GetBlob2Reqs
optional< TResult > Ready(TRequests &&requests, const CTSE_Lock &tse)
void AddRequest(const CDataLoader::TIds &ids)
CPSG_PrefetchCDD_Task(CPSGDataLoader_Impl &loader)
CPSGDataLoader_Impl & m_Loader
CSemaphore m_AddRequestSemaphore
atomic< bool > m_CancelRequested
CPSGL_QueueGuard m_QueueGuard
thread m_ReadResultsThread
unique_ptr< CThreadPool > m_ThreadPool
CDataLoader::TSequenceStates TSequenceStates
pair< shared_ptr< SPsgBioseqInfo >, pair< shared_ptr< SPsgBlobInfo >, EPSG_Status > > TBioseqAndBlobInfo
void GetBulkIds(const TIds &ids, TLoaded &loaded, TBulkIds &ret)
void GetCDDAnnotsOnce(CDataSource *data_source, const TSeqIdSets &id_sets, TLoaded &loaded, TCDD_Locks &ret)
void GetBlobsOnce(CDataSource *data_source, TLoadedSeqIds &loaded, TTSE_LockSets &tse_sets)
shared_ptr< SPsgBlobInfo > x_GetBlobInfo(CDataSource *data_source, const string &blob_id)
void GetSequenceStatesOnce(CDataSource *data_source, const TIds &ids, TLoaded &loaded, TSequenceStates &ret)
CConstRef< CPsgBlobId > GetBlobIdOnce(const CSeq_id_Handle &idh)
void GetSequenceTypesOnce(const TIds &ids, TLoaded &loaded, TSequenceTypes &ret)
void GetAccVers(const TIds &ids, TLoaded &loaded, TIds &ret)
static void SetGetBlobByIdShouldFail(bool value)
CRef< CRequestContext > m_RequestContext
int x_MakeSequenceState(const TBioseqAndBlobInfo &info)
void GetTaxIdsOnce(const TIds &ids, TLoaded &loaded, TTaxIds &ret)
CDataLoader::TBulkIds TBulkIds
void GetIds(const CSeq_id_Handle &idh, TIds &ids)
CDataLoader::SGiFound GetGi(const CSeq_id_Handle &idh)
void DropTSE(const CPsgBlobId &blob_id)
void LoadChunk(CDataSource *data_source, CTSE_Chunk_Info &chunk_info)
bool x_ReadCDDChunk(CDataSource *data_source, CDataLoader::TChunk chunk, const CPSG_BlobInfo &blob_info, const CPSG_BlobData &blob_data)
CTSE_Lock GetBlobById(CDataSource *data_source, const CPsgBlobId &blob_id)
pair< size_t, CRef< CPSGL_Processor > > x_GetBulkBioseqInfo(const TIds &ids, const TLoaded &loaded, TBioseqInfos &ret)
void LoadChunks(CDataSource *data_source, const CDataLoader::TChunkSet &chunks)
int GetSequenceState(CDataSource *data_source, const CSeq_id_Handle &idh)
shared_ptr< SPsgBioseqInfo > x_GetBioseqInfo(const CSeq_id_Handle &idh)
void GetSequenceStates(CDataSource *data_source, const TIds &ids, TLoaded &loaded, TSequenceStates &ret)
void GetBulkIdsOnce(const TIds &ids, TLoaded &loaded, TBulkIds &ret)
CDataLoader::TSequenceHashes TSequenceHashes
CDataLoader::TTSE_LockSet GetRecordsOnce(CDataSource *data_source, const CSeq_id_Handle &idh, CDataLoader::EChoice choice)
CDataLoader::TSeqIdSets TSeqIdSets
TTaxId GetTaxId(const CSeq_id_Handle &idh)
void GetGisOnce(const TIds &ids, TLoaded &loaded, TGis &ret)
CDataLoader::TTSE_LockSet GetRecords(CDataSource *data_source, const CSeq_id_Handle &idh, CDataLoader::EChoice choice)
void GetSequenceHashes(const TIds &ids, TLoaded &loaded, TSequenceHashes &ret, THashKnown &known)
vector< shared_ptr< SPsgBioseqInfo > > TBioseqInfos
CDataLoader::TSequenceLengths TSequenceLengths
CDataLoader::STypeFound GetSequenceType(const CSeq_id_Handle &idh)
void GetGis(const TIds &ids, TLoaded &loaded, TGis &ret)
void GetSequenceHashesOnce(const TIds &ids, TLoaded &loaded, TSequenceHashes &ret, THashKnown &known)
CPSG_Request_Biodata::EIncludeData m_TSERequestMode
CPSG_Request_Biodata::EIncludeData m_TSERequestModeBulk
EProcessResult x_ProcessBioseqAndBlobInfoResult(CPSGL_QueueGuard &queue, const CSeq_id_Handle &idh, TBioseqAndBlobInfo &ret, const CPSGL_ResultGuard &result)
CRef< CPSG_PrefetchCDD_Task > m_CDDPrefetchTask
void GetLabels(const TIds &ids, TLoaded &loaded, TLabels &ret)
CDataLoader::SHashFound GetSequenceHashOnce(const CSeq_id_Handle &idh)
unique_ptr< CPSGCaches > m_Caches
void x_AdjustBlobState(TBioseqAndBlobInfo &info)
CTSE_Lock GetBlobByIdOnce(CDataSource *data_source, const CPsgBlobId &blob_id)
CDataLoader::STypeFound GetSequenceTypeOnce(const CSeq_id_Handle &idh)
vector< TBioseqAndBlobInfo > TBioseqAndBlobInfos
CConstRef< CPsgBlobId > GetBlobId(const CSeq_id_Handle &idh)
void GetSequenceTypes(const TIds &ids, TLoaded &loaded, TSequenceTypes &ret)
CRef< CPSGL_Queue > m_Queue
psgl::CPSGL_Queue CPSGL_Queue
CDataLoader::TLabels TLabels
CDataLoader::TSequenceTypes TSequenceTypes
int GetSequenceStateOnce(CDataSource *data_source, const CSeq_id_Handle &idh)
unsigned int m_RetryCount
TSeqPos GetSequenceLength(const CSeq_id_Handle &idh)
void GetSequenceLengths(const TIds &ids, TLoaded &loaded, TSequenceLengths &ret)
unsigned int m_BulkRetryCount
CDataLoader::TLoaded TLoaded
void GetLabelsOnce(const TIds &ids, TLoaded &loaded, TLabels &ret)
CDataLoader::SAccVerFound GetAccVerOnce(const CSeq_id_Handle &idh)
void LoadChunksOnce(CDataSource *data_source, const CDataLoader::TChunkSet &chunks)
bool x_CheckAnnotCache(const string &name, const TIds &ids, CDataSource *data_source, CDataLoader::TProcessedNAs *processed_nas, CDataLoader::TTSE_LockSet &locks)
CDataLoader::TTaxIds TTaxIds
~CPSGDataLoader_Impl(void) override
TTaxId GetTaxIdOnce(const CSeq_id_Handle &idh)
CDataLoader::SHashFound GetSequenceHash(const CSeq_id_Handle &idh)
void GetSequenceLengthsOnce(const TIds &ids, TLoaded &loaded, TSequenceLengths &ret)
CDataLoader::TTSE_LockSet GetAnnotRecordsNAOnce(CDataSource *data_source, const TIds &ids, const SAnnotSelector *sel, CDataLoader::TProcessedNAs *processed_nas)
std::invoke_result< Call >::type CallWithRetry(Call &&call, const char *name, int retry_count=0)
CDataLoader::THashKnown THashKnown
CIncreasingTime m_WaitTime
void GetBlobs(CDataSource *data_source, TTSE_LockSets &tse_sets)
TSeqPos GetSequenceLengthOnce(const CSeq_id_Handle &idh)
void GetCDDAnnots(CDataSource *data_source, const TSeqIdSets &id_sets, TLoaded &loaded, TCDD_Locks &ret)
static bool GetGetBlobByIdShouldFail()
CDataLoader::TTSE_LockSet GetAnnotRecordsNA(CDataSource *data_source, const TIds &ids, const SAnnotSelector *sel, CDataLoader::TProcessedNAs *processed_nas)
void GetIdsOnce(const CSeq_id_Handle &idh, TIds &ids)
CDataLoader::TCDD_Locks TCDD_Locks
EProcessResult x_CreateBioseqAndBlobInfoRequests(CPSGL_QueueGuard &queue, const CSeq_id_Handle &idh, TBioseqAndBlobInfo &ret, size_t id_index=0)
TTaxId x_GetIpgTaxId(const CSeq_id_Handle &idh)
void GetTaxIds(const TIds &ids, TLoaded &loaded, TTaxIds &ret)
pair< size_t, CRef< CPSGL_Processor > > x_GetIpgTaxIds(const TIds &ids, TLoaded &loaded, TTaxIds &ret)
void GetAccVersOnce(const TIds &ids, TLoaded &loaded, TIds &ret)
CDataLoader::SAccVerFound GetAccVer(const CSeq_id_Handle &idh)
TBioseqAndBlobInfo x_GetBioseqAndBlobInfo(CDataSource *data_source, const CSeq_id_Handle &idh)
pair< size_t, CRef< CPSGL_Processor > > x_GetBulkBioseqAndBlobInfo(CDataSource *data_source, const TIds &ids, const TLoaded &loaded, TBioseqAndBlobInfos &ret)
CPSGDataLoader_Impl(const CGBLoaderParams ¶ms)
CDataLoader::SGiFound GetGiOnce(const CSeq_id_Handle &idh)
static CSeq_id::ESNPScaleLimit GetSNP_Scale_Limit(void)
void SetLockedDelayedChunkInfo(const string &psg_blob_id, CTSE_Chunk_Info &locked_chunk_info)
vector< CSeq_id_Handle > TSeq_ids
SProcessorDescrPrinter Descr() const
const vector< string > & GetErrors() const
CRef< CPSGL_Queue > m_Queue
void AddRequest(const shared_ptr< CPSG_Request > &request, const CRef< CPSGL_Processor > &processor, size_t index=0)
CThreadPool & m_ThreadPool
CPSGL_ResultGuard GetNextResult()
void SetRequestContext(const CRef< CRequestContext > &context)
CPSG_EventLoop & GetPSG_Queue()
Bio-id (such as accession)
const string & GetId() const
Get ID.
const string & GetId() const
Get ID.
Blob data meta information.
Named Annotations (NAs) metainfo â reply to CPSG_Request_NamedAnnotInfo.
CPSG_BlobId GetBlobId() const
Coordinates of the blob that contains the NA data.
TId2AnnotInfoList GetId2AnnotInfoList() const
void SetUserArgs(SPSG_UserArgs user_args)
Set arbitrary URL arguments to add to every request.
void SetRequestFlags(CPSG_Request::TFlags request_flags)
Set request flags.
EIncludeData
Specify which info and data is needed.
@ eSmartTSE
If ID2 split is available, return split info blob only.
@ eWholeTSE
If ID2 split is available, return all split blobs.
@ eOrigTSE
Return all Cassandra data chunks of the blob itself.
vector< string > TAnnotNames
Names of the named annotations.
const string & GetId2Info() const
virtual string ToString(void) const override
Get string representation of blob id.
const string & ToPsgId() const
static void x_ParseLocation(TLocationSet &vec, const CID2S_Seq_loc &loc)
TBlobId GetBlobId(void) const
void SetLoaded(CObject *obj=0)
vector< TLocation > TLocationSet
TChunkId GetChunkId(void) const
void x_AddAnnotType(const CAnnotName &annot_name, const SAnnotTypeSelector &annot_type, const TLocationId &location_id)
bool IsLoaded(void) const
void SetName(const CAnnotName &name)
const TBlobId & GetBlobId(void) const
CTSE_Split_Info & GetSplitInfo(void)
bool x_NeedsDelayedMainChunk(void) const
void SetSeq_entry(CSeq_entry &entry, CTSE_SetObjectInfo *set_info=0)
bool IsLoaded(void) const
void AddChunk(CTSE_Chunk_Info &chunk_info)
Main class implementing functionality of pool of threads.
definition of a Culling tree
Template class for iteration on objects of class C (non-medifiable version)
static void LoadWGSMaster(CDataLoader *loader, CRef< CTSE_Chunk_Info > chunk)
iterator_bool insert(const value_type &val)
const_iterator begin() const
Include a standard set of the NCBI C++ Toolkit most basic headers.
std::ofstream out("events_result.xml")
main entry point for tests
bool Empty(const CNcbiOstrstream &src)
static const struct name_t names[]
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
static const char * str(char *buf, int n)
static const struct type types[]
#define NCBI_GBLOADER_PARAM_ID_GC_SIZE
#define NCBI_GBLOADER_PARAM_ID_EXPIRATION_TIMEOUT
#define NCBI_GBLOADER_PARAM_NO_ID_EXPIRATION_TIMEOUT
static CNcbiApplicationGuard InstanceGuard(void)
Singleton method.
const CNcbiRegistry & GetConfig(void) const
Get the application's cached configuration parameters (read-only).
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
SStrictId_Tax::TId TTaxId
Taxon id type.
const TSeqPos kInvalidSeqPos
Define special value for invalid sequence position.
string GetStringUID(TUID uid=0) const
Return string representation of UID.
CDiagContext & GetDiagContext(void)
Get diag context instance.
void SetProperty(const string &name, const string &value)
Add/change property.
#define LOG_POST(message)
This macro is deprecated and it's strongly recomended to move in all projects (except tests) to macro...
#define NCBI_RETHROW_FMT(prev_exception, exception_class, err_code, message)
The same as NCBI_RETHROW but with message processed as output to ostream.
TErrCode GetErrCode(void) const
Get error code.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
void Warning(CExceptionArgs_Base &args)
#define NCBI_THROW2(exception_class, err_code, message, extra)
Throw exception with extra parameter.
#define NCBI_THROW_FMT(exception_class, err_code, message)
The same as NCBI_THROW but with message processed as output to ostream.
virtual const char * what(void) const noexcept
Standard report (includes full backlog).
void Info(CExceptionArgs_Base &args)
#define MSerial_AsnText
I/O stream manipulators â.
static TParamTree * ConvertRegToTree(const IRegistry ®, NStr::ECase use_case=NStr::eNocase)
Reconstruct param tree from the application registry.
CConstRef< CSeq_id > GetSeqId(void) const
EAccessionInfo
For IdentifyAccession (below)
CSeq_id::EAccessionInfo IdentifyAccession(void) const
bool IsAccVer(void) const
static CSeq_id_Handle GetHandle(const CSeq_id &id)
Normal way of getting a handle, works for any seq-id.
string AsString(void) const
CSeq_id::E_Choice Which(void) const
string GetLabel(const CSeq_id &id)
const CTextseq_id * GetTextseq_Id(void) const
Return embedded CTextseq_id, if any.
@ eAcc_refseq_unique_prot
CConstBeginInfo ConstBegin(const C &obj)
Get starting point of non-modifiable object hierarchy.
string ToString(void) const
vector< CSeq_id_Handle > TIds
static void SetProcessedNA(const string &na, TProcessedNAs *processed_nas)
virtual string ToString(void) const =0
Get string representation of blob id.
EChoice
main blob is blob with sequence all other blobs are external and contain external annotations
vector< TChunk > TChunkSet
@ eOrphanAnnot
all external annotations if no Bioseq exists
bool IsIncludedAnyNamedAnnotAccession(void) const
check if any named annot accession is included in the search
TSNPScaleLimit GetSNPScaleLimit(void) const
bool ExtractZoomLevel(const string &full_name, string *acc_ptr, int *zoom_level_ptr)
Extract optional zoom level suffix from named annotation string.
const TNamedAnnotAccessions & GetNamedAnnotAccessions(void) const
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
EParamSource
Source of the value returned by CParam::GetDefault().
@ eParam_NoThread
Do not use per-thread values.
@ eSource_Config
The app. config file.
@ eSource_NotSet
Not fully initialized.
@ eSource_Default
Hardcoded default.
uint32_t Uint4
4-byte (32-bit) unsigned integer
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define BEGIN_SCOPE(ns)
Define a new scope.
static bool StringToBool(const CTempString str)
Convert string to bool.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)
Convert numeric value to string.
@ eNocase
Case insensitive compare.
@ eCompleted
executed successfully
const TTreeType * FindSubNode(const TKeyType &key) const
Non recursive linear scan of all subnodes, with key comparison.
void AddValue(const string &name, const string &value)
Add new value even if an argument with the same name already exists.
const TArgs & GetArgs(void) const
Get the const list of arguments.
const TDb & GetDb(void) const
Get the Db member data.
const TSubtypes & GetSubtypes(void) const
Get the Subtypes member data.
const TSeq_loc & GetSeq_loc(void) const
Get the Seq_loc member data.
bool IsSetGraph(void) const
Check if a value has been assigned to Graph data member.
bool IsSetAlign(void) const
Check if a value has been assigned to Align data member.
bool IsSetSubtypes(void) const
Check if a value has been assigned to Subtypes data member.
const TName & GetName(void) const
Get the Name member data.
const TFeat & GetFeat(void) const
Get the Feat member data.
bool IsSetFeat(void) const
Check if a value has been assigned to Feat data member.
TType GetType(void) const
Get the Type member data.
E_Choice
Choice variants.
const TGeneral & GetGeneral(void) const
Get the variant data.
@ e_General
for other databases
@ eMol_not_set
> cdna = rna
Pool of generic task-executing threads.
constexpr bool empty(list< Ts... >) noexcept
const GenericPointer< typename T::ValueType > T2 value
const CharType(& source)[N]
void SleepMilliSec(unsigned long ml_sec, EInterruptOnSignal onsignal=eRestartOnSignal)
Multi-threading â classes, functions, and features.
std::istream & in(std::istream &in_, double &x_)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
SCDDIds x_ParseLocalCDDEntryId(const CPsgBlobId &blob_id)
CTSE_Lock x_CreateLocalCDDEntry(CDataSource *data_source, const SCDDIds &ids)
const char kCDDAnnotName[]
SCDDIds x_GetCDDIds(const vector< CSeq_id_Handle > &ids)
bool x_IsLocalCDDEntryId(const CPsgBlobId &blob_id)
unsigned s_GetDebugLevel()
bool s_GetBlobByIdShouldFail
CObjectIStream * GetBlobDataStream(const CPSG_BlobInfo &blob_info, const CPSG_BlobData &blob_data)
const bool kCreateLocalCDDEntries
CPSG_BioId x_LocalCDDEntryIdToBioId(const SCDDIds &cdd_ids)
string x_MakeLocalCDDEntryId(const SCDDIds &cdd_ids)
void x_CreateEmptyLocalCDDEntry(CDataSource *data_source, CTSE_Chunk_Info *chunk)
bool x_IsEmptyCDD(const CTSE_Info &tse)
EPSG_Status
Retrieval result.
@ eSuccess
Successfully retrieved.
@ eForbidden
User is not authorized for the retrieval.
@ eError
An error was encountered while trying to send request or to read and to process the reply.
vector< CPSG_BioId > CPSG_BioIds
static const TPluginManagerParamTree * s_FindSubNode(const TPluginManagerParamTree *params, const string &name)
#define NCBI_PSGLOADER_SERVICE_NAME
typedef NCBI_PARAM_TYPE(PSG_LOADER, SERVICE_NAME) TPSG_ServiceName
static pair< CRef< CTSE_Chunk_Info >, string > s_CreateNAChunk(const CPSG_NamedAnnotInfo &psg_annot_info)
const int kDefaultNoDataCacheLifespanSeconds
static TParamDescription::TValueType s_GetParamValue(const TPluginManagerParamTree *config)
static auto FormatError(const CPSGL_Processor *processor)
#define DEFAULT_WAIT_TIME_MAX
NCBI_PARAM_DEF_EX(string, PSG_LOADER, SERVICE_NAME, "PSG2", eParam_NoThread, PSG_LOADER_SERVICE_NAME)
static bool s_IsIpgAccession(const CSeq_id_Handle &idh, string &acc_ver, bool &is_wp_acc)
static CIncreasingTime::SAllParams s_WaitTimeParams
const size_t kDefaultMaxCacheSize
@ kProcessorIndex_BlobInfo
#define NCBI_PSGLOADER_NAME
#define NCBI_PSGLOADER_NOSPLIT
NCBI_PARAM_DECL(string, PSG_LOADER, SERVICE_NAME)
static auto FormatBulkError(const char *type, const CPSGL_Processor *processor)
const unsigned int kDefaultRetryCount
#define DEFAULT_WAIT_TIME_MULTIPLIER
static ostream & operator<<(ostream &out, SErrorFormatter formatter)
#define DEFAULT_WAIT_TIME_INCREMENT
static bool CannotProcess(const CSeq_id_Handle &sih)
void s_ConvertParamValue< bool >(bool &value, const string &str)
static void s_ConvertParamValue(TParamType &value, const string &str)
#define NCBI_PSGLOADER_ADD_WGS_MASTER
const unsigned int kDefaultBulkRetryCount
const int kDefaultCacheLifespanSeconds
#define DEFAULT_WAIT_TIME
static bool GetSeqId(const T &d, set< string > &labels, const string name="", bool detect=false, bool found=false)
Better replacement of GetAccVer(), this method should be defined in data loaders, GetAccVer() is left...
Better replacement of GetGi(), this method should be defined in data loaders, GetGi() is left for com...
Better replacement of GetSequenceHash(), this method should be defined in data loaders,...
Better replacement of GetSequenceType(), this method should be defined in data loaders,...
SErrorFormatter processor
SBulkErrorFormatter(const char *type, const CPSGL_Processor *processor)
const CPSGL_Processor * processor
SErrorFormatter(const CPSGL_Processor *processor)
Arbitrary request URL arguments.
vector< CSeq_id_Handle > TIds
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4