user_data->
m_DataCB= waiter.m_DataCB;
122(
void*)(user_data));
132 const string& message)
139user_data->
m_ErrorCB= waiter.m_ErrorCB;
146(
void*)(user_data));
164(
void*)(user_data));
172 if(it->m_Processor == processor) {
180optional<CMyNCBIOKCache::SUserInfoItem>
182 const string& cookie,
186optional<SUserInfoItem> ret;
189lock_guard<mutex> guard(
m_Lock);
191 autoit =
m_Cache.find(cookie);
215it->second.x_AddToWaitList(processor, data_cb, error_cb);
220 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
221 if(lru_it !=
m_LRU.begin()) {
222 m_LRU.erase(lru_it);
223 m_LRU.push_front(cookie);
226it->second.m_LastTouch = psg_clock_t::now();
237lock_guard<mutex> guard(
m_Lock);
239 autofind_it =
m_Cache.find(cookie);
240 if(find_it ==
m_Cache.end()) {
248 m_LRU.emplace_front(cookie);
253 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
254 if(lru_it !=
m_LRU.begin()) {
255 m_LRU.erase(lru_it);
256 m_LRU.push_front(cookie);
261find_it->second.x_OnSuccess(cookie, user_info);
269 const string& message)
271lock_guard<mutex> guard(
m_Lock);
273 autofind_it =
m_Cache.find(cookie);
274 if(find_it !=
m_Cache.end()) {
276find_it->second.x_OnError(cookie, status,
code, severity, message);
281 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
282 if(lru_it !=
m_LRU.end()) {
283 m_LRU.erase(lru_it);
290lock_guard<mutex> guard(
m_Lock);
292 autofind_it =
m_Cache.find(cookie);
293 if(find_it !=
m_Cache.end()) {
295find_it->second.x_OnNotFound(cookie);
300 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
301 if(lru_it !=
m_LRU.end()) {
302 m_LRU.erase(lru_it);
311lock_guard<mutex> guard(
m_Lock);
313 autofind_it =
m_Cache.find(cookie);
314 if(find_it !=
m_Cache.end()) {
318find_it->second.x_RemoveWaiter(processor);
326lock_guard<mutex> guard(
m_Lock);
328 autofind_it =
m_Cache.find(cookie);
329 if(find_it !=
m_Cache.end()) {
335 "The initiator of the myNCBI request for cookie "+
337 "So the myNCBI reply will not be delivered. " 338 "Please try again.");
351lock_guard<mutex> guard(
m_Lock);
360list<string> to_be_deleted;
362 for(
autoit =
m_LRU.rbegin(); it !=
m_LRU.rend(); ++it) {
363 autocache_it =
m_Cache.find(*it);
364 if(cache_it->second.m_WaitList.empty() &&
368to_be_deleted.push_back(*it);
369--need_to_delete_cnt;
370 if(need_to_delete_cnt == 0)
376 for(
const auto& cookie_to_delete: to_be_deleted) {
388lock_guard<mutex> guard(
m_Lock);
390 autoit =
m_Cache.find(cookie);
401 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
402 if(lru_it !=
m_LRU.begin())
403 m_LRU.erase(lru_it);
412 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
413 if(lru_it !=
m_LRU.begin()) {
414 m_LRU.erase(lru_it);
415 m_LRU.push_front(cookie);
426lock_guard<mutex> guard(
m_Lock);
428 autofind_it =
m_Cache.find(cookie);
429 if(find_it ==
m_Cache.end()) {
431 m_Cache[cookie] = psg_clock_t::now();
432 m_LRU.push_front(cookie);
437find_it->second = psg_clock_t::now();
439 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
440 if(lru_it !=
m_LRU.begin()) {
441 m_LRU.erase(lru_it);
442 m_LRU.push_front(cookie);
451lock_guard<mutex> guard(
m_Lock);
464optional<SMyNCBIErrorCacheItem>
467optional<SMyNCBIErrorCacheItem> ret;
471lock_guard<mutex> guard(
m_Lock);
473 autoit =
m_Cache.find(cookie);
484 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
485 if(lru_it !=
m_LRU.begin())
486 m_LRU.erase(lru_it);
495 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
496 if(lru_it !=
m_LRU.begin()) {
497 m_LRU.erase(lru_it);
498 m_LRU.push_front(cookie);
511 const string& message)
514lock_guard<mutex> guard(
m_Lock);
516 autofind_it =
m_Cache.find(cookie);
517 if(find_it ==
m_Cache.end()) {
520 m_LRU.push_front(cookie);
525find_it->second.m_LastTouch = psg_clock_t::now();
527 autolru_it = find(
m_LRU.begin(),
m_LRU.end(), cookie);
528 if(lru_it !=
m_LRU.begin()) {
529 m_LRU.erase(lru_it);
530 m_LRU.push_front(cookie);
539lock_guard<mutex> guard(
m_Lock);
optional< SMyNCBIErrorCacheItem > GetError(const string &cookie)
CPubseqGatewayApp * m_App
map< string, SMyNCBIErrorCacheItem > m_Cache
void AddError(const string &cookie, CRequestStatus::ECode status, int code, EDiagSev severity, const string &message)
bool IsNotFound(const string &cookie)
CPubseqGatewayApp * m_App
map< string, psg_time_point_t > m_Cache
void AddNotFound(const string &cookie)
void OnNotFound(const string &cookie)
void ClearWaitingProcessor(const string &cookie, IPSGS_Processor *processor)
void AddUserInfo(const string &cookie, const CPSG_MyNCBIRequest_WhoAmI::SUserInfo &user_info)
void OnError(const string &cookie, CRequestStatus::ECode status, int code, EDiagSev severity, const string &message)
void ClearInitiatedRequest(const string &cookie)
CPubseqGatewayApp * m_App
optional< SUserInfoItem > GetUserInfo(IPSGS_Processor *processor, const string &cookie, TMyNCBIDataCB data_cb, TMyNCBIErrorCB error_cb)
map< string, SMyNCBIOKCacheItem > m_Cache
@ ePSGS_MyNCBIOKCacheWaitHit
@ ePSGS_MyNCBIOKCacheMiss
@ ePSGS_MyNCBINotFoundCacheHit
@ ePSGS_MyNCBIErrorCacheMiss
@ ePSGS_MyNCBINotFoundCacheMiss
@ ePSGS_MyNCBIErrorCacheHit
CPSGSCounters & GetCounters(void)
Interface class (and self-factory) for request processor objects that can retrieve data from a given ...
EDiagSev
Severity level for the posted diagnostics.
@ eDiag_Error
Error message.
@ e503_ServiceUnavailable
void my_ncbi_success_cb(void *user_data)
void my_ncbi_not_found_cb(void *user_data)
void my_ncbi_error_cb(void *user_data)
function< void(const string &cookie, CPSG_MyNCBIRequest_WhoAmI::SUserInfo info)> TMyNCBIDataCB
function< void(const string &cookie, CRequestStatus::ECode status, int code, EDiagSev severity, const string &message)> TMyNCBIErrorCB
@ ePSGS_MyNCBIRequestInitiatorDestroyed
unsigned long GetTimespanToNowMs(const psg_time_point_t &t_point)
string SanitizeInputValue(const string &input_val)
CPSG_MyNCBIRequest_WhoAmI::SUserInfo m_UserInfo
SMyNCBIOKCacheItem::EPSGS_MyNCBIResolutionStatus m_Status
CRequestStatus::ECode m_Status
TMyNCBIErrorCB m_NotFoundCB
EPSGS_MyNCBIResolutionStatus m_Status
CPSG_MyNCBIRequest_WhoAmI::SUserInfo m_UserInfo
void x_OnNotFound(const string &cookie)
void x_OnError(const string &cookie, CRequestStatus::ECode status, int code, EDiagSev severity, const string &message)
void x_OnSuccess(const string &cookie, const CPSG_MyNCBIRequest_WhoAmI::SUserInfo &user_info)
psg_time_point_t m_LastTouch
void x_RemoveWaiter(IPSGS_Processor *processor)
list< SMyNCBIWaitListItem > m_WaitList
CPSG_MyNCBIRequest_WhoAmI::SUserInfo m_UserInfo
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