projects
/
platform
/
upstream
/
iotivity.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Observation without caching.
[platform/upstream/iotivity.git]
/
service
/
resource-encapsulation
/
src
/
resourceCache
/
src
/
ResourceCacheManager.cpp
diff --git
a/service/resource-encapsulation/src/resourceCache/src/ResourceCacheManager.cpp
b/service/resource-encapsulation/src/resourceCache/src/ResourceCacheManager.cpp
index
c57c7f0
..
812c52e
100644
(file)
--- a/
service/resource-encapsulation/src/resourceCache/src/ResourceCacheManager.cpp
+++ b/
service/resource-encapsulation/src/resourceCache/src/ResourceCacheManager.cpp
@@
-22,6
+22,10
@@
#include "RCSException.h"
#include "ocrandom.h"
#include "RCSException.h"
#include "ocrandom.h"
+#include "ScopeLogger.h"
+
+#define TAG PCF("RCSResourceCacheManager")
+
namespace OIC
{
namespace Service
namespace OIC
{
namespace Service
@@
-59,6
+63,8
@@
namespace OIC
PrimitiveResourcePtr pResource, CacheCB func, CACHE_METHOD cm,
REPORT_FREQUENCY rf, long reportTime)
{
PrimitiveResourcePtr pResource, CacheCB func, CACHE_METHOD cm,
REPORT_FREQUENCY rf, long reportTime)
{
+ SCOPE_LOG_F(DEBUG, TAG);
+
if (pResource == nullptr)
{
throw RCSInvalidParameterException {"[requestResourceCache] Primitive Resource is invaild"};
if (pResource == nullptr)
{
throw RCSInvalidParameterException {"[requestResourceCache] Primitive Resource is invaild"};
@@
-81,8
+87,7
@@
namespace OIC
}
auto newHandler = std::make_shared<ObserveCache>(pResource);
}
auto newHandler = std::make_shared<ObserveCache>(pResource);
- newHandler->startCache(std::move(func));
- m_observeCacheList.push_back(newHandler);
+ newHandler->startCache(std::move(func), (rf == REPORT_FREQUENCY::WHENEVER_NOTIFIED));
observeCacheIDmap.insert(std::make_pair(retID, newHandler));
return retID;
observeCacheIDmap.insert(std::make_pair(retID, newHandler));
return retID;
@@
-109,6
+114,8
@@
namespace OIC
newHandler->initializeDataCache(pResource);
s_cacheDataList->push_back(newHandler);
}
newHandler->initializeDataCache(pResource);
s_cacheDataList->push_back(newHandler);
}
+
+ std::lock_guard<std::mutex> lock(s_mutex);
retID = newHandler->addSubscriber(func, rf, reportTime);
cacheIDmap.insert(std::make_pair(retID, newHandler));
retID = newHandler->addSubscriber(func, rf, reportTime);
cacheIDmap.insert(std::make_pair(retID, newHandler));
@@
-118,6
+125,9
@@
namespace OIC
void ResourceCacheManager::cancelResourceCache(CacheID id)
{
void ResourceCacheManager::cancelResourceCache(CacheID id)
{
+ SCOPE_LOG_F(DEBUG, TAG);
+ std::lock_guard<std::mutex> lock(s_mutex);
+
auto observeIns = observeCacheIDmap.find(id);
auto dataCacheIns = cacheIDmap.find(id);
if ((dataCacheIns == cacheIDmap.end() && observeIns == observeCacheIDmap.end())
auto observeIns = observeCacheIDmap.find(id);
auto dataCacheIns = cacheIDmap.find(id);
if ((dataCacheIns == cacheIDmap.end() && observeIns == observeCacheIDmap.end())
@@
-128,9
+138,18
@@
namespace OIC
if (observeIns != observeCacheIDmap.end())
{
if (observeIns != observeCacheIDmap.end())
{
- (observeIns->second)->stopCache();
+ try
+ {
+ (observeIns->second)->stopCache();
+ }
+ catch (...)
+ {
+ (observeIns->second).reset();
+ observeCacheIDmap.erase(id);
+ throw;
+ }
(observeIns->second).reset();
(observeIns->second).reset();
- observeCacheIDmap.erase(
observeIns
);
+ observeCacheIDmap.erase(
id
);
return;
}
return;
}
@@
-142,7
+161,6
@@
namespace OIC
{
cacheIDmap.erase(id);
}
{
cacheIDmap.erase(id);
}
- std::lock_guard<std::mutex> lock(s_mutex);
if (foundCacheHandler->isEmptySubscriber())
{
s_cacheDataList->remove(foundCacheHandler);
if (foundCacheHandler->isEmptySubscriber())
{
s_cacheDataList->remove(foundCacheHandler);
@@
-152,21
+170,25
@@
namespace OIC
void ResourceCacheManager::updateResourceCache(CacheID updateId) const
{
void ResourceCacheManager::updateResourceCache(CacheID updateId) const
{
+ SCOPE_LOG_F(DEBUG, TAG);
+
if (updateId == 0)
{
if (updateId == 0)
{
- throw RCSInvalidParameterException {"[
getCachedData
] CacheID is NULL"};
+ throw RCSInvalidParameterException {"[
updateResourceCache
] CacheID is NULL"};
}
DataCachePtr foundCache = findDataCache(updateId);
if (foundCache == nullptr)
{
}
DataCachePtr foundCache = findDataCache(updateId);
if (foundCache == nullptr)
{
- throw RCSInvalidParameterException {"[
getCachedData
] CacheID is invaild"};
+ throw RCSInvalidParameterException {"[
updateResourceCache
] CacheID is invaild"};
}
foundCache->requestGet();
}
const RCSResourceAttributes ResourceCacheManager::getCachedData(CacheID id) const
{
}
foundCache->requestGet();
}
const RCSResourceAttributes ResourceCacheManager::getCachedData(CacheID id) const
{
+ SCOPE_LOG_F(DEBUG, TAG);
+
if (id == 0)
{
throw RCSInvalidParameterException {"[getCachedData] CacheID is NULL"};
if (id == 0)
{
throw RCSInvalidParameterException {"[getCachedData] CacheID is NULL"};
@@
-194,6
+216,8
@@
namespace OIC
CACHE_STATE ResourceCacheManager::getResourceCacheState(CacheID id) const
{
CACHE_STATE ResourceCacheManager::getResourceCacheState(CacheID id) const
{
+ SCOPE_LOG_F(DEBUG, TAG);
+
if (id == 0)
{
throw RCSInvalidParameterException {"[getResourceCacheState] CacheID is NULL"};
if (id == 0)
{
throw RCSInvalidParameterException {"[getResourceCacheState] CacheID is NULL"};
@@
-215,6
+239,8
@@
namespace OIC
bool ResourceCacheManager::isCachedData(CacheID id) const
{
bool ResourceCacheManager::isCachedData(CacheID id) const
{
+ SCOPE_LOG_F(DEBUG, TAG);
+
if (id == 0)
{
throw RCSInvalidParameterException {"[isCachedData] CacheID is NULL"};
if (id == 0)
{
throw RCSInvalidParameterException {"[isCachedData] CacheID is NULL"};
@@
-236,6
+262,8
@@
namespace OIC
void ResourceCacheManager::initializeResourceCacheManager()
{
void ResourceCacheManager::initializeResourceCacheManager()
{
+ SCOPE_LOG_F(DEBUG, TAG);
+
std::lock_guard<std::mutex> lock(s_mutex);
if (s_cacheDataList == nullptr)
{
std::lock_guard<std::mutex> lock(s_mutex);
if (s_cacheDataList == nullptr)
{
@@
-246,6
+274,8
@@
namespace OIC
DataCachePtr ResourceCacheManager::findDataCache(PrimitiveResourcePtr pResource) const
{
DataCachePtr ResourceCacheManager::findDataCache(PrimitiveResourcePtr pResource) const
{
+ SCOPE_LOG_F(DEBUG, TAG);
+
DataCachePtr retHandler = nullptr;
std::lock_guard<std::mutex> lock(s_mutex);
for (auto &i : * s_cacheDataList)
DataCachePtr retHandler = nullptr;
std::lock_guard<std::mutex> lock(s_mutex);
for (auto &i : * s_cacheDataList)
@@
-262,6
+292,8
@@
namespace OIC
DataCachePtr ResourceCacheManager::findDataCache(CacheID id) const
{
DataCachePtr ResourceCacheManager::findDataCache(CacheID id) const
{
+ SCOPE_LOG_F(DEBUG, TAG);
+
DataCachePtr retHandler = nullptr;
for (auto it : cacheIDmap)
{
DataCachePtr retHandler = nullptr;
for (auto it : cacheIDmap)
{