std::placeholders;
65m_Errors.push_back(err);
74 size_terr_count = m_Errors.size();
75 string msg=
"\n"+ to_string(err_count) +
" error";
79 msg+=
" encountered while resolving ";
81 if(seq_id_to_resolve.size() == 1) {
82 msg+=
"the seq id:\n";
84 msg+=
"multiple seq ids:\n";
87 for(
size_tindex=0; index < err_count; ++index) {
91 msg+= m_Errors[index].m_ErrorMessage;
104 for(
const auto& item : m_Errors) {
105combined_code =
max(combined_code, item.m_ErrorCode);
107 returncombined_code;
116shared_ptr<CPSGS_Request> request,
117shared_ptr<CPSGS_Reply> reply,
122m_ContinueResolveCB(continue_resolve_cb),
123m_FinishedCB(finished_cb),
125m_StartProcessingCB(start_processing_cb),
126m_ResolveStage(eInit),
130m_StartProcessingCalled(
false)
141list<string> && secondary_id_list,
142 string&& primary_seq_id,
168 if(text_seq_id ==
nullptr)
181 boolneed_comma =
false;
185seq_ids += item.seq_id;
199 if(!seq_id.empty()) {
204 for(
const auto& item : annot_request.
m_SeqIds) {
210 m_Reply->SendTrace(
"The seq_ids to resolve list before sorting: "+
222 m_Reply->SendTrace(
"The seq_ids to resolve list after sorting: "+
261 "Not handled request type "+
282 "Not handled request type "+
289 booleffective_seq_id_resolve =
true;
309 if(effective_seq_id_resolve ==
false) {
312 if(app->Settings().m_SeqIdResolveAlways ==
true) {
314 m_Reply->SendTrace(
"The request seq_id_resolve flag " 315 "is set to 'no' however the configuration " 316 "parameter [CASSANDRA_PROCESSOR]/seq_id_resolve_always " 317 "overwrites it. The resolution will be done " 318 "without optimization.",
321effective_seq_id_resolve =
true;
325 returneffective_seq_id_resolve;
331 const string& primary_id,
332 int16_teffective_seq_id_type)
const 334 if(primary_id.empty()) {
428 "Not handled request type "+
429to_string(
static_cast<int>(
m_Request->GetRequestType())));
439 m_Reply->SendTrace(
"Accession adjustment is not required " 440 "(bioseq info is not provided)",
449 m_Reply->SendTrace(
"Accession adjustment is not required " 450 "(substitute option is 'never')",
465 m_Reply->SendTrace(
"Accession adjustment is not required " 466 "(It is PDB, PIR or PRF with version == 0 " 467 "and substitute option is 'default')",
479 m_Reply->SendTrace(
"Accession adjustment is not required " 480 "(substitute option is 'limited' and seq_id_type is not gi)",
595 boolwith_seq_id_type)
603unique_ptr<CCassBioseqInfoFetch> details;
610 if(with_seq_id_type) {
611 if(seq_id_type != -1)
615bioseq_info_request.
SetGI(gi);
620bioseq_keyspace.keyspace,
623details->SetLoader(fetch_task);
625 if(with_seq_id_type)
637 if(with_seq_id_type) {
646 if(with_seq_id_type)
648 "Cassandra request: "+
653 "Cassandra request for INSDC types: "+
658fetch_task->
Wait();
667unique_ptr<CCassSi2csiFetch> details;
672 if(effective_seq_id_type != -1)
678bioseq_keyspace.keyspace,
682details->SetLoader(fetch_task);
695 "Cassandra request: "+
699fetch_task->
Wait();
734 autorecord_count = records.size();
741 string msg= to_string(records.size()) +
" hit(s)";
742 for(
const auto& item : records) {
749 if(record_count > 1) {
751 if(index_to_pick < 0) {
754to_string(records.size()) +
" bioseq info records were " 755 "found however it was impossible to choose one of them. " 756 "So report as not found",
765 if(record_count != 1) {
767 if(record_count > 1) {
770app->GetCounters().Increment(
this,
775app->GetCounters().Increment(
this,
790 string msg=
"Data inconsistency. ";
791 if(record_count > 1) {
792 msg+=
"More than one BIOSEQ_INFO table record is found for " 795 msg+=
"A BIOSEQ_INFO table record is not found for " 825 if(records.size() == 1)
826prefix =
"Selected record:\n";
828prefix =
"Record selected in accordance to priorities (live & not HUP, dead & not HUP, HUP + largest gi/version):\n";
844 string msg=
"BIOSEQ_INFO Cassandra error: "+
866app->GetCounters().Increment(
this,
874vector<CBioseqInfoRecord>&& records)
883 string msg= to_string(records.size()) +
884 " hit(s); decision status: "+ to_string(
decision.status);
885 for(
const auto& item : records) {
900app->GetCounters().Increment(
this,
910app->GetCounters().Increment(
this,
914 string msg=
"Data inconsistency. A BIOSEQ_INFO table record " 915 "is not found for accession "+
939app->GetCounters().Increment(
this,
942 string msg=
"Data inconsistency. More than one BIOSEQ_INFO " 943 "table record is found for accession "+
969 string msg=
"Unexpected decision code when a secondary INSCD " 970 "request results processed while resolving seq id asynchronously";
991 EDiagSevseverity,
const string& message)
1025 autorecord_count = records.size();
1032 string msg= to_string(record_count) +
" hit(s)";
1033 for(
const auto& item : records) {
1036 if(record_count > 1)
1037 msg+=
"\nMore than one record => may be more tries";
1042 if(record_count != 1) {
1044 if(record_count > 1) {
1047app->GetCounters().Increment(
this,
1052app->GetCounters().Increment(
this,
1065app->GetCounters().Increment(
this,
1070bioseq_info.
SetVersion(records[0].GetVersion());
1072bioseq_info.
SetGI(records[0].GetGI());
1089 EDiagSevseverity,
const string& message)
1128 m_Reply->SendTrace(
"Could not resolve seq_id "+ current_seq_id +
1129 ". There are more seq_id to try, switching to the next one.",
1139 string msg=
"Could not resolve ";
1144 msg+=
"any of the seq_ids: ";
1145 boolis_first =
true;
1164 if(async_bioseq_resolution.IsValid()) {
1177app->GetCounters().Increment(
this,
1182 if(async_bioseq_resolution.m_Error.HasError()) {
1184async_bioseq_resolution.m_Error.m_ErrorCode);
function< void(SBioseqResolution &&async_bioseq_resolution)> TSeqIdResolutionFinishedCB
function< void(void)> TSeqIdResolutionStartProcessingCB
function< void(void)> TContinueResolveCB
function< void(CRequestStatus::ECode status, int code, EDiagSev severity, const string &message, EPSGS_LoggingFlag logging_flag)> TSeqIdResolutionErrorCB
ssize_t SelectBioseqInfoRecord(const vector< CBioseqInfoRecord > &records)
CBioseqInfoFetchRequest & SetVersion(CBioseqInfoRecord::TVersion value)
CBioseqInfoFetchRequest & SetGI(CBioseqInfoRecord::TGI value)
CBioseqInfoFetchRequest & SetSeqIdType(CBioseqInfoRecord::TSeqIdType value)
CBioseqInfoFetchRequest & SetAccession(CBioseqInfoRecord::TAccession const &value)
TSeqIdType GetSeqIdType() const
TVersion GetVersion() const
CBioseqInfoRecord & SetSeqIdType(TSeqIdType value)
CBioseqInfoRecord & SetGI(TGI value)
TAccession const & GetAccession() const
CBioseqInfoRecord & SetVersion(TVersion value)
CBioseqInfoRecord & SetAccession(const TAccession &value)
void SetDataReadyCB(shared_ptr< CCassDataCallbackReceiver > callback)
void SetConsumeCallback(TBioseqInfoConsumeCallback callback)
void SetErrorCB(TDataErrorCallback error_cb)
void SetReadFinished(void)
CCassBlobWaiter * GetLoader(void)
void SetDataReadyCB(shared_ptr< CCassDataCallbackReceiver > callback)
void SetConsumeCallback(TSI2CSIConsumeCallback callback)
@ ePSGS_BioseqInfoNotFound
@ ePSGS_BioseqInfoFoundMany
@ ePSGS_InputSeqIdNotResolved
@ ePSGS_BioseqInfoFoundOne
void Increment(IPSGS_Processor *processor, EPSGS_CounterType counter)
CRequestStatus::ECode GetCombinedErrorCode(void) const
bool HasErrors(void) const
void AppendError(const string &msg, CRequestStatus::ECode code)
string GetCombinedErrorMessage(const list< SPSGSeqId > &seq_id_to_resolve) const
string GetCouldNotResolveMessage(void) const
bool MoveToNextSeqId(void)
SPSGS_RequestBase::EPSGS_AccSubstitutioOption GetAccessionSubstitutionOption(void)
string x_GetSeqIdsToResolveList(void) const
psg_time_point_t m_BioseqInfoStart
void x_OnBioseqInfoWithoutSeqIdType(vector< CBioseqInfoRecord > &&records)
list< SPSGSeqId > m_SeqIdsToResolve
psg_time_point_t m_AsyncCassResolutionStart
void x_SignalStartProcessing(void)
int16_t x_GetRequestSeqIdType(void)
void x_OnSi2csiError(CRequestStatus::ECode status, int code, EDiagSev severity, const string &message)
TSeqIdResolutionErrorCB m_ErrorCB
psg_time_point_t m_Si2csiStart
int16_t m_EffectiveSeqIdType
CBioseqInfoRecord::TSeqIdType m_BioseqInfoRequestedSeqIdType
list< string > m_SecondaryIdList
void x_PreparePrimaryBioseqInfoQuery(const CBioseqInfoRecord::TAccession &seq_id, CBioseqInfoRecord::TVersion version, CBioseqInfoRecord::TSeqIdType seq_id_type, CBioseqInfoRecord::TGI gi, bool with_seq_id_type)
virtual ~CPSGS_AsyncResolveBase()
CBioseqInfoRecord::TGI m_BioseqInfoRequestedGI
bool GetSeqIdResolve(void)
SBioseqResolution m_BioseqResolution
SPSGS_ResolveRequest::TPSGS_BioseqIncludeData GetBioseqInfoFields(void)
void SetupSeqIdToResolve(void)
void x_OnBioseqInfoError(CRequestStatus::ECode status, int code, EDiagSev severity, const string &message)
bool CanSkipBioseqInfoRetrieval(const CBioseqInfoRecord &bioseq_info_record)
int16_t m_EffectiveVersion
CPSGSResolveErrors m_ResolveErrors
bool OptimizationPrecondition(const string &primary_id, int16_t effective_seq_id_type) const
list< SPSGSeqId >::const_iterator m_CurrentSeqIdToResolve
bool NonKeyBioseqInfoFieldsRequested(void)
void x_OnBioseqInfo(vector< CBioseqInfoRecord > &&records)
void x_PrepareSecondaryAsIsSi2csiQuery(void)
TContinueResolveCB m_ContinueResolveCB
bool m_StartProcessingCalled
CCassFetch * m_NoSeqIdTypeFetch
EPSGS_AccessionAdjustmentResult AdjustBioseqAccession(SBioseqResolution &bioseq_resolution)
string x_GetRequestSeqId(void)
CCassFetch * m_CurrentFetch
TSeqIdResolutionStartProcessingCB m_StartProcessingCB
CBioseqInfoRecord::TVersion m_BioseqInfoRequestedVersion
TSeqIdResolutionFinishedCB m_FinishedCB
int16_t GetEffectiveVersion(const CTextseq_id *text_seq_id)
EPSGS_ResolveStage m_ResolveStage
void x_OnSi2csiRecord(vector< CSI2CSIRecord > &&records)
void x_OnSeqIdAsyncResolutionFinished(SBioseqResolution &&async_bioseq_resolution)
CBioseqInfoRecord::TAccession m_BioseqInfoRequestedAccession
void x_PrepareSecondarySi2csiQuery(void)
void x_PrepareSi2csiQuery(const string &secondary_id, int16_t effective_seq_id_type)
list< unique_ptr< CCassFetch > > m_FetchDetails
bool IsTimeoutError(const string &msg) const
static string TypeToString(EPSGS_Type req_type)
@ ePSGS_AnnotationRequest
@ ePSGS_IPGResolveRequest
@ ePSGS_AccessionVersionHistoryRequest
@ ePSGS_BlobBySeqIdRequest
CPSGSCounters & GetCounters(void)
static CPubseqGatewayApp * GetInstance(void)
SSatInfoEntry GetBioseqKeyspace(void) const
CSi2CsiFetchRequest & SetSecSeqId(CSI2CSIRecord::TSecSeqId const &value)
CSi2CsiFetchRequest & SetSecSeqIdType(CSI2CSIRecord::TSecSeqIdType value)
virtual void Process(void)=0
Main processing function.
shared_ptr< CPSGS_Reply > m_Reply
shared_ptr< CPSGS_Request > m_Request
static DLIST_TYPE *DLIST_NAME() next(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
EDiagSev
Severity level for the posted diagnostics.
@ eDiag_Error
Error message.
@ e500_InternalServerError
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
static string & ToUpper(string &str)
Convert string to upper case â string& version.
TVersion GetVersion(void) const
Get the Version member data.
bool CanGetVersion(void) const
Check if it is safe to call GetVersion method.
@ e_Other
for historical reasons, 'other' = 'refseq'
@ e_Gpipe
Internal NCBI genome pipeline processing ID.
@ e_Tpe
Third Party Annot/Seq EMBL.
@ e_Tpd
Third Party Annot/Seq DDBJ.
@ e_Gi
GenInfo Integrated Database.
@ e_Tpg
Third Party Annot/Seq Genbank.
SINSDCDecision DecideINSDC(const vector< CBioseqInfoRecord > &records, CBioseqInfoRecord::TVersion version)
bool IsINSDCSeqIdType(CBioseqInfoRecord::TSeqIdType seq_id_type)
const string version
version string
Defines NCBI C++ diagnostic APIs, classes, and macros.
const CConstRef< CSeq_id > GetAccession(const CSeq_id_Handle &id_handle)
string StripTrailingVerticalBars(const string &seq_id)
void PSGSortSeqIds(list< SPSGSeqId > &seq_ids, IPSGS_Processor *processor)
string ToJsonString(const CBioseqInfoRecord &bioseq_info, SPSGS_ResolveRequest::TPSGS_BioseqIncludeData include_data_flags, const string &custom_blob_id)
#define PSG_WARNING(message)
@ ePSGS_BioseqInfoAccessionAdjustmentError
@ ePSGS_NoBioseqInfoForGiError
EPSGS_AccessionAdjustmentResult
string SanitizeInputValue(const string &input_val)
Defines CRequestStatus class for NCBI C++ diagnostic API.
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
EPSGS_AccessionAdjustmentResult AdjustAccession(shared_ptr< CPSGS_Request > request, shared_ptr< CPSGS_Reply > reply)
EPSGS_ResolutionResult m_ResolutionResult
CBioseqInfoRecord & GetBioseqInfo(void)
void SetBioseqInfo(const CBioseqInfoRecord &record)
vector< string > m_SeqIds
EPSGS_AccSubstitutioOption
@ ePSGS_LimitedAccSubstitution
@ ePSGS_DefaultAccSubstitution
@ ePSGS_NeverAccSubstitute
int TPSGS_BioseqIncludeData
CRequestStatus::ECode m_ErrorCode
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