CRpsMmappedFile::CRpsMmappedFile(const string& filename) { try { m_MmappedFile.reset(new CMemoryFile(filename)); } catch (const CFileException& e) { NCBI_RETHROW(e, CBlastException, eRpsInit, "Cannot memory map RPS-BLAST database file: " + filename); } }
void CId2Reader::x_ConnectAtSlot(TConn conn) { if ( GetDebugLevel() >= eTraceOpen ) { CDebugPrinter s(conn, "CId2Reader"); s << "New connection to " << m_Connector.GetServiceName() << "..."; } CReaderServiceConnector::SConnInfo conn_info = m_Connector.Connect(); CConn_IOStream& stream = *conn_info.m_Stream; SetRandomFail(stream, conn); if ( stream.bad() ) { NCBI_THROW(CLoaderException, eConnectionFailed, "cannot open connection: "+x_ConnDescription(stream)); } if ( GetDebugLevel() >= eTraceOpen ) { CDebugPrinter s(conn, "CId2Reader"); s << "New connection: " << x_ConnDescription(stream); } try { x_InitConnection(stream, conn); } catch ( CException& exc ) { m_Connector.RememberIfBad(conn_info); NCBI_RETHROW(exc, CLoaderException, eConnectionFailed, "connection initialization failed: "+ x_ConnDescription(stream)); } SetRandomFail(stream, conn); if ( stream.bad() ) { NCBI_THROW(CLoaderException, eConnectionFailed, "connection initialization failed: "+ x_ConnDescription(stream)); } // successfully received reply, server is good, forget it conn_info.MarkAsGood(); STimeout tmout; m_Connector.SetTimeoutTo(&tmout); CONN_SetTimeout(stream.GetCONN(), eIO_ReadWrite, &tmout); tmout.sec = 0; tmout.usec = 1; // no wait on close CONN_SetTimeout(stream.GetCONN(), eIO_Close, &tmout); m_Connections[conn] = conn_info; }
void CBlastRPSInfo::x_Init(const string& rps_dbname, int flags) { m_RpsInfo = NULL; // Obtain the full path to the database string path; try { vector<string> dbpath; CSeqDB::FindVolumePaths(rps_dbname, CSeqDB::eProtein, dbpath); path = *dbpath.begin(); } catch (const CSeqDBException& e) { NCBI_RETHROW(e, CBlastException, eRpsInit, "Cannot retrieve path to RPS database"); } _ASSERT(!path.empty()); auto_ptr<BlastRPSInfo> rps_info; // Allocate the core data structure try { rps_info.reset(new BlastRPSInfo); } catch (const bad_alloc&) { NCBI_THROW(CBlastSystemException, eOutOfMemory, "RPSInfo allocation failed"); } // Assign the pointers to the core data structure m_RpsInfo = rps_info.release(); m_RpsInfo->lookup_header = NULL; m_RpsInfo->profile_header = NULL; m_RpsInfo->freq_header = NULL; m_RpsInfo->obsr_header = NULL; m_RpsInfo->freq_ratios_header = NULL; // Load the various files if (flags & fAuxInfoFile) { m_AuxFile.Reset(new CRpsAuxFile(path)); // Note that these const_casts are only needed because the data structure // doesn't take const pointers, but these won't be modified at all m_RpsInfo->aux_info = *const_cast<BlastRPSAuxInfo*>((*m_AuxFile)()); } if (flags & fLookupTableFile) { m_LutFile.Reset(new CRpsLookupTblFile(path)); // Note that these const_casts are only needed because the data structure // doesn't take const pointers, but these won't be modified at all m_RpsInfo->lookup_header = const_cast<BlastRPSLookupFileHeader*>((*m_LutFile)()); } if (flags & fPssmFile) { m_PssmFile.Reset(new CRpsPssmFile(path)); // Note that these const_casts are only needed because the data structure // doesn't take const pointers, but these won't be modified at all m_RpsInfo->profile_header = const_cast<BlastRPSProfileHeader*>((*m_PssmFile)()); } if (flags & fFrequenciesFile) { m_FreqsFile.Reset(new CRpsFreqsFile(path)); // Note that these const_casts are only needed because the data structure // doesn't take const pointers, but these won't be modified at all m_RpsInfo->freq_header = const_cast<BlastRPSProfileHeader*>((*m_FreqsFile)()); } if (flags & fObservationsFile) { m_ObsrFile.Reset(new CRpsObsrFile(path)); // Note that these const_casts are only needed because the data structure // doesn't take const pointers, but these won't be modified at all m_RpsInfo->obsr_header = const_cast<BlastRPSProfileHeader*>((*m_ObsrFile)()); } if (flags & fFreqRatiosFile) { try { // read frequency ratios data m_FreqRatiosFile.Reset(new CRpsFreqRatiosFile(path)); } catch (const CBlastException& e) { string msg = rps_dbname + " contains no frequency ratios needed for composition-based statistics.\n" \ "Please disable composition-based statistics when searching against " + rps_dbname + "."; NCBI_RETHROW(e, CBlastException, eRpsInit, msg); } m_RpsInfo->freq_ratios_header = const_cast<BlastRPSFreqRatiosHeader*>((*m_FreqRatiosFile)()); } }
void CId2Reader::x_InitConnection(CConn_IOStream& stream, TConn conn) { // prepare init request CID2_Request req; req.SetRequest().SetInit(); x_SetContextData(req); CID2_Request_Packet packet; packet.Set().push_back(Ref(&req)); // that's it for now // TODO: add params // send init request {{ if ( GetDebugLevel() >= eTraceConn ) { CDebugPrinter s(conn, "CId2Reader"); s << "Sending"; if ( GetDebugLevel() >= eTraceASN ) { s << ": " << MSerial_AsnText << packet; } else { s << " ID2-Request-Packet"; } s << "..."; } try { stream << MConnFormat << packet << flush; } catch ( CException& exc ) { NCBI_RETHROW(exc, CLoaderException, eConnectionFailed, "failed to send init request: "+ x_ConnDescription(stream)); } if ( GetDebugLevel() >= eTraceConn ) { CDebugPrinter s(conn, "CId2Reader"); s << "Sent ID2-Request-Packet."; } if ( !stream ) { NCBI_THROW(CLoaderException, eConnectionFailed, "failed to send init request: "+ x_ConnDescription(stream)); } }} // receive init reply CID2_Reply reply; {{ if ( GetDebugLevel() >= eTraceConn ) { CDebugPrinter s(conn, "CId2Reader"); s << "Receiving ID2-Reply..."; } stream >> MConnFormat >> reply; if ( GetDebugLevel() >= eTraceConn ) { CDebugPrinter s(conn, "CId2Reader"); s << "Received"; if ( GetDebugLevel() >= eTraceASN ) { s << ": " << MSerial_AsnText << reply; } else { s << " ID2-Reply."; } } if ( !stream ) { NCBI_THROW(CLoaderException, eLoaderFailed, "failed to receive init reply: "+ x_ConnDescription(stream)); } }} // check init reply if ( reply.IsSetDiscard() ) { NCBI_THROW(CLoaderException, eLoaderFailed, "bad init reply: 'discard' is set: "+ x_ConnDescription(stream)); } if ( reply.IsSetError() ) { NCBI_THROW(CLoaderException, eLoaderFailed, "bad init reply: 'error' is set: "+ x_ConnDescription(stream)); } if ( !reply.IsSetEnd_of_reply() ) { NCBI_THROW(CLoaderException, eLoaderFailed, "bad init reply: 'end-of-reply' is not set: "+ x_ConnDescription(stream)); } if ( reply.GetReply().Which() != CID2_Reply::TReply::e_Init ) { NCBI_THROW(CLoaderException, eLoaderFailed, "bad init reply: 'reply' is not 'init': "+ x_ConnDescription(stream)); } // that's it for now // TODO: process params }