comparison Framework/Deprecated/Toolbox/BaseWebService.cpp @ 875:200b4e0dddfc am-dev

BaseWebService: disable cache + correct handling of cache
author Alain Mazy <alain@mazy.be>
date Wed, 03 Jul 2019 10:12:09 +0200
parents 733c6db3e5a3
children 861c080ef47b
comparison
equal deleted inserted replaced
874:debb70fa10b5 875:200b4e0dddfc
26 26
27 #include <Core/OrthancException.h> 27 #include <Core/OrthancException.h>
28 28
29 #include <boost/shared_ptr.hpp> 29 #include <boost/shared_ptr.hpp>
30 #include <algorithm> 30 #include <algorithm>
31 #include <Core/Logging.h>
31 32
32 namespace Deprecated 33 namespace Deprecated
33 { 34 {
34 35
35 36
88 Orthanc::IDynamicObject* payload /* takes ownership */, 89 Orthanc::IDynamicObject* payload /* takes ownership */,
89 OrthancStone::MessageHandler<IWebService::HttpRequestSuccessMessage>* successCallback, 90 OrthancStone::MessageHandler<IWebService::HttpRequestSuccessMessage>* successCallback,
90 OrthancStone::MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback, 91 OrthancStone::MessageHandler<IWebService::HttpRequestErrorMessage>* failureCallback,
91 unsigned int timeoutInSeconds) 92 unsigned int timeoutInSeconds)
92 { 93 {
93 if (cache_.find(uri) == cache_.end()) 94 if (!cacheEnabled_ || cache_.find(uri) == cache_.end())
94 { 95 {
95 GetAsyncInternal(uri, headers, 96 GetAsyncInternal(uri, headers,
96 new BaseWebService::BaseWebServicePayload(successCallback, failureCallback, payload), // ownership is transfered 97 new BaseWebService::BaseWebServicePayload(successCallback, failureCallback, payload), // ownership is transfered
97 new OrthancStone::Callable<BaseWebService, IWebService::HttpRequestSuccessMessage> 98 new OrthancStone::Callable<BaseWebService, IWebService::HttpRequestSuccessMessage>
98 (*this, &BaseWebService::CacheAndNotifyHttpSuccess), 99 (*this, &BaseWebService::CacheAndNotifyHttpSuccess),
131 } 132 }
132 } 133 }
133 134
134 void BaseWebService::CacheAndNotifyHttpSuccess(const IWebService::HttpRequestSuccessMessage& message) 135 void BaseWebService::CacheAndNotifyHttpSuccess(const IWebService::HttpRequestSuccessMessage& message)
135 { 136 {
136 while (cacheCurrentSize_ + message.GetAnswerSize() > cacheMaxSize_ && orderedCacheKeys_.size() > 0) 137 if (cacheEnabled_)
137 { 138 {
138 const std::string& oldestUri = orderedCacheKeys_.back(); 139 while (cacheCurrentSize_ + message.GetAnswerSize() > cacheMaxSize_ && orderedCacheKeys_.size() > 0)
139 HttpCache::iterator it = cache_.find(oldestUri);
140 if (it != cache_.end())
141 { 140 {
142 cacheCurrentSize_ -= it->second->GetAnswerSize(); 141 VLOG(1) << "BaseWebService: clearing cache: " << cacheCurrentSize_ << "/" << cacheMaxSize_ << "(" << message.GetAnswerSize() << ")";
143 cache_.erase(it); 142 const std::string& oldestUri = orderedCacheKeys_.back();
143 HttpCache::iterator it = cache_.find(oldestUri);
144 if (it != cache_.end())
145 {
146 cacheCurrentSize_ -= it->second->GetAnswerSize();
147 cache_.erase(it);
148 }
149 orderedCacheKeys_.pop_back();
150
144 } 151 }
145 orderedCacheKeys_.pop_back();
146 152
153 boost::shared_ptr<CachedHttpRequestSuccessMessage> cachedMessage(new CachedHttpRequestSuccessMessage(message));
154 cache_[message.GetUri()] = cachedMessage;
155 orderedCacheKeys_.push_front(message.GetUri());
156 cacheCurrentSize_ += message.GetAnswerSize();
147 } 157 }
148
149 cache_[message.GetUri()] = boost::shared_ptr<CachedHttpRequestSuccessMessage>(new CachedHttpRequestSuccessMessage(message));
150 orderedCacheKeys_.push_front(message.GetUri());
151 cacheCurrentSize_ += message.GetAnswerSize();
152 158
153 NotifyHttpSuccess(message); 159 NotifyHttpSuccess(message);
154 } 160 }
155 161
156 void BaseWebService::NotifyHttpError(const IWebService::HttpRequestErrorMessage& message) 162 void BaseWebService::NotifyHttpError(const IWebService::HttpRequestErrorMessage& message)