Mercurial > hg > orthanc-stone
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) |