diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2012-07-16 06:48:11 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2012-07-16 06:48:11 +0000 |
commit | 574ccee478b9da9457cdf0e476b8df6eb584b580 (patch) | |
tree | 5a8166f47057ed322294db7816e2732d1d18f7bc /sca-cpp/trunk/components/cache | |
parent | 419f903ff44a22debba43976baae1e86c1e5d871 (diff) |
Minor memory management, performance, and tracing improvements.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1361917 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp/trunk/components/cache')
-rw-r--r-- | sca-cpp/trunk/components/cache/datacache.cpp | 8 | ||||
-rw-r--r-- | sca-cpp/trunk/components/cache/memcache-test.cpp | 2 | ||||
-rw-r--r-- | sca-cpp/trunk/components/cache/memcache.cpp | 2 | ||||
-rw-r--r-- | sca-cpp/trunk/components/cache/memcache.hpp | 34 | ||||
-rw-r--r-- | sca-cpp/trunk/components/cache/memocache.cpp | 2 | ||||
-rw-r--r-- | sca-cpp/trunk/components/cache/partitioner.cpp | 10 |
6 files changed, 32 insertions, 26 deletions
diff --git a/sca-cpp/trunk/components/cache/datacache.cpp b/sca-cpp/trunk/components/cache/datacache.cpp index c26e6eb868..c259ec33c6 100644 --- a/sca-cpp/trunk/components/cache/datacache.cpp +++ b/sca-cpp/trunk/components/cache/datacache.cpp @@ -44,7 +44,7 @@ namespace datacache { /** * Get an item from the cache. */ -const failable<value> get(const value& key, const lambda<value(const list<value>&)> rcache1, const lambda<value(const list<value>&)> wcache1, const lambda<value(const list<value>&)> rcache2, unused const lambda<value(const list<value>&)> wcache2) { +const failable<value> get(const value& key, const lambda<value(const list<value>&)>& rcache1, const lambda<value(const list<value>&)>& wcache1, const lambda<value(const list<value>&)>& rcache2, unused const lambda<value(const list<value>&)>& wcache2) { // Lookup level1 cache const value val1 = rcache1(mklist<value>("get", key)); @@ -68,7 +68,7 @@ const failable<value> get(const value& key, const lambda<value(const list<value> /** * Post an item to the cache. */ -const failable<value> post(const value& key, const value& val, unused const lambda<value(const list<value>&)> rcache1, const lambda<value(const list<value>&)> wcache1, unused const lambda<value(const list<value>&)> rcache2, const lambda<value(const list<value>&)> wcache2) { +const failable<value> post(const value& key, const value& val, unused const lambda<value(const list<value>&)>& rcache1, const lambda<value(const list<value>&)>& wcache1, unused const lambda<value(const list<value>&)>& rcache2, const lambda<value(const list<value>&)>& wcache2) { const value id = append<value>(key, mklist(mkuuid())); // Update level1 cache @@ -83,7 +83,7 @@ const failable<value> post(const value& key, const value& val, unused const lamb /** * Put an item into the cache. */ -const failable<value> put(const value& key, const value& val, unused const lambda<value(const list<value>&)> rcache1, const lambda<value(const list<value>&)> wcache1, unused const lambda<value(const list<value>&)> rcache2, const lambda<value(const list<value>&)> wcache2) { +const failable<value> put(const value& key, const value& val, unused const lambda<value(const list<value>&)>& rcache1, const lambda<value(const list<value>&)>& wcache1, unused const lambda<value(const list<value>&)>& rcache2, const lambda<value(const list<value>&)>& wcache2) { // Update level1 cache wcache1(mklist<value>("put", key, val)); @@ -97,7 +97,7 @@ const failable<value> put(const value& key, const value& val, unused const lambd /** * Delete an item from the cache. */ -const failable<value> del(const value& key, unused const lambda<value(const list<value>&)> rcache1, const lambda<value(const list<value>&)> wcache1, unused const lambda<value(const list<value>&)> rcache2, const lambda<value(const list<value>&)> wcache2) { +const failable<value> del(const value& key, unused const lambda<value(const list<value>&)>& rcache1, const lambda<value(const list<value>&)>& wcache1, unused const lambda<value(const list<value>&)>& rcache2, const lambda<value(const list<value>&)>& wcache2) { // Delete from level1 cache wcache1(mklist<value>("delete", key)); diff --git a/sca-cpp/trunk/components/cache/memcache-test.cpp b/sca-cpp/trunk/components/cache/memcache-test.cpp index 49848dd2a7..85fc339f1a 100644 --- a/sca-cpp/trunk/components/cache/memcache-test.cpp +++ b/sca-cpp/trunk/components/cache/memcache-test.cpp @@ -52,6 +52,7 @@ struct getLoop { getLoop(const value& k, MemCached& ch) : k(k), ch(ch) { } const bool operator()() const { + gc_scoped_pool p; assert(get(k, ch) == value(string("CCC"))); return true; } @@ -71,6 +72,7 @@ bool testGetPerf() { } int main() { + tuscany::gc_scoped_pool p; tuscany::cout << "Testing..." << tuscany::endl; tuscany::memcache::testMemCached(); diff --git a/sca-cpp/trunk/components/cache/memcache.cpp b/sca-cpp/trunk/components/cache/memcache.cpp index af710696b3..738a6ddd5a 100644 --- a/sca-cpp/trunk/components/cache/memcache.cpp +++ b/sca-cpp/trunk/components/cache/memcache.cpp @@ -103,7 +103,7 @@ private: const list<string> servers(const list<value>& params) { if (isNil(params)) return list<string>(); - const value s = ((lambda<value(list<value>)>)car(params))(list<value>()); + const value s = ((lambda<value(const list<value>&)>)car(params))(list<value>()); return cons<string>(s, servers(cdr(params))); } diff --git a/sca-cpp/trunk/components/cache/memcache.hpp b/sca-cpp/trunk/components/cache/memcache.hpp index fe77c26671..f18405b2ec 100644 --- a/sca-cpp/trunk/components/cache/memcache.hpp +++ b/sca-cpp/trunk/components/cache/memcache.hpp @@ -49,38 +49,41 @@ namespace memcache { class MemCached { public: MemCached() : owner(false) { - debug("memcache::memcached"); } - MemCached(const string host, const int port) : owner(true) { + MemCached(const string host, const int port) : p(), owner(true) { debug(host, "memcache::memcached::host"); debug(port, "memcache::memcached::port"); - apr_pool_create(&pool, NULL); - apr_memcache_create(pool, 1, 0, &mc); + apr_memcache_create(pool(p), 1, 0, &mc); addServer(host, port); } - MemCached(const list<string>& servers) : owner(true) { + MemCached(const list<string>& servers) : p(), owner(true) { debug(servers, "memcache::memcached::servers"); - apr_pool_create(&pool, NULL); - apr_memcache_create(pool, (apr_uint16_t)length(servers), 0, &mc); + apr_memcache_create(pool(p), (apr_uint16_t)length(servers), 0, &mc); addServers(servers); } - MemCached(const MemCached& c) : owner(false), pool(c.pool), mc(c.mc) { + MemCached(const MemCached& c) : p(c.p), owner(false), mc(c.mc) { debug("memcache::memcached::copy"); } + const MemCached& operator=(const MemCached& c) { + debug("memcache::memcached::operator="); + if(this == &c) + return *this; + p = c.p; + owner = false; + mc = c.mc; + return *this; + } + ~MemCached() { - debug("memcache::~memcached"); - if (!owner) - return; - apr_pool_destroy(pool); } private: + gc_child_pool p; bool owner; - apr_pool_t* pool; apr_memcache_t* mc; friend const failable<bool> post(const value& key, const value& val, const MemCached& cache); @@ -93,7 +96,7 @@ private: */ const failable<bool> addServer(const string& host, const int port) { apr_memcache_server_t *server; - const apr_status_t sc = apr_memcache_server_create(pool, c_str(host), (apr_port_t)port, 1, 1, 1, 600, &server); + const apr_status_t sc = apr_memcache_server_create(pool(p), c_str(host), (apr_port_t)port, 1, 1, 1, 600, &server); if (sc != APR_SUCCESS) { ostringstream os; os << "Couldn't connect to memcached server: " << host << ":" << port; @@ -176,7 +179,8 @@ const failable<value> get(const value& key, const MemCached& cache) { const string ks(scheme::writeValue(key)); char *data; apr_size_t size; - const apr_status_t rc = apr_memcache_getp(cache.mc, cache.pool, nospaces(c_str(ks)), &data, &size, NULL); + gc_local_pool lp; + const apr_status_t rc = apr_memcache_getp(cache.mc, pool(lp), nospaces(c_str(ks)), &data, &size, NULL); if (rc != APR_SUCCESS) { ostringstream os; os << "Couldn't get memcached entry: " << key; diff --git a/sca-cpp/trunk/components/cache/memocache.cpp b/sca-cpp/trunk/components/cache/memocache.cpp index 054638e275..e7e52cdc59 100644 --- a/sca-cpp/trunk/components/cache/memocache.cpp +++ b/sca-cpp/trunk/components/cache/memocache.cpp @@ -42,7 +42,7 @@ namespace memocache { /** * Memoize the value of a function application in a cache. */ -const failable<value> memoize(const list<value>& params, const lambda<value(const list<value>&)> relay, const lambda<value(const list<value>&)> cache) { +const failable<value> memoize(const list<value>& params, const lambda<value(const list<value>&)>& relay, const lambda<value(const list<value>&)>& cache) { debug(params, "memocache::memoize::params"); // Lookup memoized value from cache diff --git a/sca-cpp/trunk/components/cache/partitioner.cpp b/sca-cpp/trunk/components/cache/partitioner.cpp index ea12699977..e3f04ba112 100644 --- a/sca-cpp/trunk/components/cache/partitioner.cpp +++ b/sca-cpp/trunk/components/cache/partitioner.cpp @@ -40,7 +40,7 @@ namespace partitioner { /** * Return the target partition for a key. */ -const failable<lambda<value(const list<value>&)> > partition(const value& key, const lambda<value(const list<value>&)> selector, const list<value>& partitions) { +const failable<lambda<value(const list<value>&)> > partition(const value& key, const lambda<value(const list<value>&)>& selector, const list<value>& partitions) { // Call the selector component to convert the given key to a partition number const value p = selector(mklist<value>("get", key, partitions)); @@ -55,7 +55,7 @@ const failable<lambda<value(const list<value>&)> > partition(const value& key, c /** * Get an item from a partition. */ -const failable<value> get(const value& key, const lambda<value(const list<value>&)> selector, const list<value>& partitions) { +const failable<value> get(const value& key, const lambda<value(const list<value>&)>& selector, const list<value>& partitions) { // Select partition const failable<lambda<value(const list<value>&)> > p = partition(key, selector, partitions); @@ -76,7 +76,7 @@ const failable<value> get(const value& key, const lambda<value(const list<value> /** * Post an item to a partition. */ -const failable<value> post(const value& key, const value& val, const lambda<value(const list<value>&)> selector, const list<value>& partitions) { +const failable<value> post(const value& key, const value& val, const lambda<value(const list<value>&)>& selector, const list<value>& partitions) { const value id = append<value>(key, mklist(mkuuid())); // Select partition @@ -93,7 +93,7 @@ const failable<value> post(const value& key, const value& val, const lambda<valu /** * Put an item into a partition. */ -const failable<value> put(const value& key, const value& val, const lambda<value(const list<value>&)> selector, const list<value>& partitions) { +const failable<value> put(const value& key, const value& val, const lambda<value(const list<value>&)>& selector, const list<value>& partitions) { // Select partition const failable<lambda<value(const list<value>&)> > p = partition(key, selector, partitions); @@ -109,7 +109,7 @@ const failable<value> put(const value& key, const value& val, const lambda<value /** * Delete an item from a partition. */ -const failable<value> del(const value& key, const lambda<value(const list<value>&)> selector, const list<value>& partitions) { +const failable<value> del(const value& key, const lambda<value(const list<value>&)>& selector, const list<value>& partitions) { // Select partition const failable<lambda<value(const list<value>&)> > p = partition(key, selector, partitions); |