67 m_SeqIdToChunksSorted(
false),
68 m_ContainsBioseqs(
false)
75 m_BlobVersion(blob_ver),
78 m_SeqIdToChunksSorted(
false),
79 m_ContainsBioseqs(
false)
88 it->second->x_DropAnnotObjects();
100 it->second->x_TSEAttach(tse, *lsnr);
127 vector<CSeq_id_Handle> ids;
131 chunk.second->GetBioseqsIds(ids);
144 vector<CSeq_id_Handle> ids;
148 chunk.second->GetBioseqsIds(ids);
220 delayed_chunk = iter->second;
222 if ( iter != begin ) {
228 if ( iter != begin ) {
245 delayed_chunk = iter->second;
249 if ( delayed_chunk ) {
250 delayed_chunk->
Load();
280 return *iter->second;
292 return *iter->second;
301 return *iter->second;
375 m_SeqIdToChunks.push_back(pair<CSeq_id_Handle, TChunkId>(
id, chunk_id));
386 if ( seq_ids.empty() && annot_ids.
empty() ) {
394 for (
auto&
id : seq_ids ) {
395 m_SeqIdToChunks.push_back(pair<CSeq_id_Handle, TChunkId>(
id, chunk_id));
397 for (
auto&
id : annot_ids ) {
398 m_SeqIdToChunks.push_back(pair<CSeq_id_Handle, TChunkId>(
id, chunk_id));
409 if ( it->first->ContainsBioseq(
id) ) {
443 CTSE_Split_Info::TSeqIdToChunks::const_iterator
453 pair<CSeq_id_Handle, TChunkId>(
id, -1));
463 vector<TChunkId> chunk_ids;
466 for ( TSeqIdToChunks::const_iterator iter =
x_FindChunk(
id);
468 chunk_ids.push_back(iter->second);
471 for (
auto& chunk_id : chunk_ids ) {
490 for ( TSeqIdToChunks::const_iterator iter =
x_FindChunk(
id);
505 it->second->GetBioseqsIds(ids);
517 for ( TSeqIdToChunks::const_iterator iter =
x_FindChunk(
id);
544 typedef vector< CRef<CTSE_Chunk_Info> > TChunkRefs;
545 typedef vector< AutoPtr<CInitGuard> > TInitGuards;
547 sort(sorted_ids.begin(), sorted_ids.end());
548 sorted_ids.erase(unique(sorted_ids.begin(), sorted_ids.end()),
551 const size_t limit_chunks_request = 15;
553 const size_t limit_chunks_request = 200;
555 size_t reserve_size =
min(sorted_ids.size(), limit_chunks_request);
557 chunks.reserve(reserve_size);
559 guards.reserve(reserve_size);
565 if ( !(*guard.
get()) ) {
568 chunks.push_back(chunk);
569 guards.push_back(guard);
570 if ( guards.size() >= limit_chunks_request ) {
577 if ( !guards.empty() ) {
589 vector<CRef<CTSE_Chunk_Info>> sorted_chunks;
590 sorted_chunks.reserve(src_chunks.size());
591 for (
auto& chunk : src_chunks ) {
592 _ASSERT(&chunk->GetSplitInfo().GetDataLoader() == loader);
595 sort(sorted_chunks.begin(), sorted_chunks.end(),
599 auto blob_id_a = a->GetBlobId();
600 auto blob_id_b = b->GetBlobId();
601 return ((blob_id_a < blob_id_b) ||
602 (!(blob_id_b < blob_id_a) && a->GetChunkId() < b->GetChunkId()));
604 sorted_chunks.erase(unique(sorted_chunks.begin(), sorted_chunks.end(),
608 return ((&a->GetSplitInfo() == &b->GetSplitInfo()) &&
609 (a->GetChunkId() == b->GetChunkId()));
611 sorted_chunks.end());
613 const size_t limit_chunks_request = 15;
615 const size_t limit_chunks_request = 200;
617 size_t reserve_size =
min(sorted_chunks.size(), limit_chunks_request);
619 chunks.reserve(reserve_size);
620 vector< AutoPtr<CInitGuard> > guards;
621 guards.reserve(reserve_size);
623 for (
auto& chunk : sorted_chunks ) {
625 if ( !guard.
get() || !*guard.
get() ) {
628 chunks.push_back(chunk);
629 guards.push_back(guard);
630 if ( guards.size() >= limit_chunks_request ) {
637 if ( !guards.empty() ) {
682 listener.
LoadAnnot(tse, place, add, chunk_id);
User-defined methods of the data storage class.
bool x_IsTrackingSplitSeq() const
CDataLoader * GetDataLoader(void) const
void x_UnindexSplitInfo(TSeq_id2SplitInfoSet &split_map, const CSeq_id_Handle &id, CTSE_Split_Info *split_info)
void x_IndexSplitInfo(TSeq_id2SplitInfoSet &split_map, const CSeq_id_Handle &id, CTSE_Split_Info *split_info)
Base class for all object manager exceptions.
@Seq_descr.hpp User-defined methods of the data storage class.
bool x_GetRecords(const CSeq_id_Handle &id, bool bioseq) const
void x_UpdateAnnotIndex(CTSE_Info &tse)
void x_SplitAttach(CTSE_Split_Info &split_info)
CInitMutex< CObject > m_LoadLock
TChunkId GetChunkId(void) const
bool NotLoaded(void) const
bool ContainsBioseq(const CSeq_id_Handle &id) const
bool IsLoaded(void) const
void AddUsedMemory(size_t size)
void SetBioseqUpdater(CRef< CBioseqUpdater > updater)
TSeqIdToChunks::const_iterator x_FindChunk(const CSeq_id_Handle &id) const
CTSE_Chunk_Info::TBioseq_setId TBioseq_setId
CTSE_Chunk_Info::TChunkId TChunkId
void x_LoadBioseqs(const TPlace &place, const list< CRef< CBioseq > > &bioseqs, int chunk_id)
CDataSource * m_DataLoader
TBlobId GetBlobId(void) const
CTSE_Chunk_Info & GetChunk(TChunkId chunk_id)
void x_AddAssemblyInfo(const TAssemblyInfo &info, TChunkId chunk_id)
void x_LoadChunks(const TChunkIds &chunk_ids) const
void x_TSEAttach(CTSE_Info &tse_info, CRef< ITSE_Assigner > &assigner)
CTSE_Chunk_Info::TAssembly TAssembly
void x_LoadDescr(const TPlace &place, const CSeq_descr &descr)
TBlobVersion m_BlobVersion
CInitMutexPool & GetMutexPool(void)
CInitMutexPool m_MutexPool
void x_AddSeq_data(const TLocationSet &location, CTSE_Chunk_Info &chunk)
void x_SetBioseqUpdater(CRef< CBioseqUpdater > updater)
void x_SetContainedId(const TBioseqId &id, TChunkId chunk_id, bool bioseq)
TBlobVersion GetBlobVersion(void) const
void AddChunk(CTSE_Chunk_Info &chunk_info)
CTSE_Chunk_Info & GetSkeletonChunk(void)
bool x_HasDelayedMainChunk(void) const
void x_AddUsedMemory(size_t size)
TSeqIdToChunks m_SeqIdToChunks
bool ContainsBioseq(const CSeq_id_Handle &id) const
void x_DSDetach(CDataSource &ds)
TSplitVersion m_SplitVersion
CTSE_Chunk_Info::TDescInfo TDescInfo
void SetSplitVersion(TSplitVersion version)
void x_TSEDetach(CTSE_Info &tse_info)
void x_LoadDelayedMainChunk(void) const
void GetBioseqsIds(TSeqIds &ids) const
CMutex m_SeqIdToChunksMutex
void LoadChunk(TChunkId id) const
TSplitVersion GetSplitVersion(void) const
void x_UpdateAnnotIndex(void)
atomic< bool > m_ContainsBioseqs
CTSE_Chunk_Info::TLocationSet TLocationSet
void x_AddBioseqPlace(TBioseq_setId place_id, TChunkId chunk_id)
void x_AddChunksForGetRecords(vector< CConstRef< CTSE_Chunk_Info >> &chunks, const CSeq_id_Handle &id) const
void x_LoadChunk(TChunkId chunk_id) const
void x_UpdateFeatIdIndex(CSeqFeatData::E_Choice type, EFeatIdType id_type)
CDataLoader & GetDataLoader(void) const
void x_DSAttach(CDataSource &ds)
void x_GetRecords(const CSeq_id_Handle &id, bool bioseq) const
bool ContainsBioseqs() const
vector< TChunkId > TChunkIds
void x_AddAnnotPlace(const TPlace &place, TChunkId chunk_id)
void x_LoadAssembly(const TBioseqId &seq_id, const TAssembly &assembly)
void x_LoadSequence(const TPlace &place, TSeqPos pos, const TSequence &sequence)
CTSE_Chunk_Info::TSequence TSequence
vector< CSeq_id_Handle > TSeqIds
bool x_CanAddBioseq(const TBioseqId &id) const
void x_LoadSeq_entry(CSeq_entry &entry, CTSE_SetObjectInfo *set_info=0)
CTSE_Chunk_Info::TPlace TPlace
void x_LoadAnnot(const TPlace &place, const CSeq_annot &annot, int chunk_id)
CRef< ITSE_Assigner > GetAssigner(const CTSE_Info &tse)
vector< pair< CSeq_id_Handle, TChunkId > > TSeqIdToChunks
bool x_NeedsDelayedMainChunk(void) const
bool m_SeqIdToChunksSorted
void x_AddDescInfo(const TDescInfo &info, TChunkId chunk_id)
void x_SetContainedSeqIds(const vector< TBioseqId > &seq_ids, const set< TBioseqId > &annot_ids, TChunkId chunk_id)
virtual void AddDescInfo(CTSE_Info &, const TDescInfo &info, TChunkId chunk_id)=0
virtual void LoadSeq_entry(CTSE_Info &, CSeq_entry &entry, CTSE_SetObjectInfo *set_info)=0
virtual void LoadAssembly(CTSE_Info &, const TBioseqId &seq_id, const TAssembly &assembly)=0
virtual void LoadDescr(CTSE_Info &, const TPlace &place, const CSeq_descr &descr)=0
virtual void AddAnnotPlace(CTSE_Info &, const TPlace &place, TChunkId chunk_id)=0
virtual void LoadSequence(CTSE_Info &, const TPlace &place, TSeqPos pos, const TSequence &sequence)=0
virtual void AddAssemblyInfo(CTSE_Info &, const TAssemblyInfo &info, TChunkId chunk_id)=0
virtual void AddSeq_data(CTSE_Info &, const TLocationSet &location, CTSE_Chunk_Info &chunk)=0
virtual void LoadAnnot(CTSE_Info &, const TPlace &place, CRef< CSeq_annot > annot, int chunk_id)=0
virtual void LoadChunkBioseqs(CTSE_Info &, const TPlace &place, const list< CRef< CBioseq > > &bioseqs, int chunk_id)=0
virtual void AddBioseqPlace(CTSE_Info &, TBioseq_setId place_id, TChunkId chunk_id)=0
container_type::const_iterator const_iterator
container_type::iterator iterator
const_iterator begin() const
const_iterator end() const
iterator_bool insert(const value_type &val)
container_type::value_type value_type
const_iterator find(const key_type &key) const
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
static const char location[]
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
element_type * get(void) const
Get pointer.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
static bool IsActive(void)
virtual void GetChunks(const TChunkSet &chunks)
vector< TChunk > TChunkSet
CConstRef< C > ConstRef(const C *object)
Template function for conversion of const object pointer to CConstRef.
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
void Reset(void)
Reset reference object.
#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 string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
constexpr auto sort(_Init &&init)
const string version
version string
const struct ncbi::grid::netcache::search::fields::SIZE size
Common macro to detect used sanitizers and suppress memory leaks if run under LeakSanitizer.
static const int kTSE_Place_id