Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:sschapiro:openstack:upstream
clustermon
bz561413-09-Add-cache-to-ClusterMonitor-objects...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bz561413-09-Add-cache-to-ClusterMonitor-objects.patch of Package clustermon
From 65be5031d05a7367fc3e1b1388f8fbc66b1a2a11 Mon Sep 17 00:00:00 2001 From: Lon Hohberger <lhh@redhat.com> Date: Thu, 13 May 2010 13:16:33 -0400 Subject: [PATCH 09/16] modclusterd: Add cache to ClusterMonitor objects Signed-off-by: Lon Hohberger <lhh@redhat.com> --- .../cluster/clumon/src/common/ClusterMonitor.cpp | 49 ++++++++++++++++++- ricci/modules/cluster/clumon/src/daemon/Makefile | 2 +- .../cluster/clumon/src/include/ClusterMonitor.h | 9 ++++ .../modules/cluster/clumon/src/snmp-agent/Makefile | 2 +- 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/ricci/modules/cluster/clumon/src/common/ClusterMonitor.cpp b/ricci/modules/cluster/clumon/src/common/ClusterMonitor.cpp index 15779e4..eff8de2 100644 --- a/ricci/modules/cluster/clumon/src/common/ClusterMonitor.cpp +++ b/ricci/modules/cluster/clumon/src/common/ClusterMonitor.cpp @@ -26,19 +26,45 @@ #include <errno.h> #include <sys/poll.h> +#include <sys/types.h> +#include <sys/time.h> using namespace ClusterMonitoring; ClusterMonitor::ClusterMonitor(const String& socket_path) : _sock_path(socket_path) -{} +{ + last_update.tv_sec = 0; + last_update.tv_nsec = 0; + cache_lifetime = 0; +} ClusterMonitor::~ClusterMonitor() {} +unsigned int +ClusterMonitor::expire_cache(unsigned int age) +{ + unsigned int ret; + + ret = cache_lifetime; + cache_lifetime = age; + return ret; +} + counting_auto_ptr<Cluster> -ClusterMonitor::get_cluster() +ClusterMonitor::get_cluster(unsigned int age) { + struct timespec ts; + + clock_gettime(CLOCK_MONOTONIC, &ts); + if (age > 0 && last_update.tv_sec) { + if ((ts.tv_nsec - last_update.tv_nsec) < 0) + --(ts.tv_sec); + if ((ts.tv_sec - last_update.tv_sec) < age) + return cached_copy; + } + try { ClientSocket sock(_sock_path); @@ -81,8 +107,25 @@ ClusterMonitor::get_cluster() if (poll_data.revents & (POLLERR | POLLHUP | POLLNVAL)) throw String("get_cluster(): socket error"); } - return xml2cluster(xml); + + last_update.tv_sec = ts.tv_sec; + last_update.tv_nsec = ts.tv_nsec; + + cached_copy = xml2cluster(xml); + return cached_copy; } catch ( ... ) { return counting_auto_ptr<Cluster>(); } } + +counting_auto_ptr<Cluster> +ClusterMonitor::get_cluster() +{ + return get_cluster(cache_lifetime); +} + +counting_auto_ptr<Cluster> +ClusterMonitor::get_cache() +{ + return cached_copy; +} diff --git a/ricci/modules/cluster/clumon/src/daemon/Makefile b/ricci/modules/cluster/clumon/src/daemon/Makefile index 908c65f..08217c4 100644 --- a/ricci/modules/cluster/clumon/src/daemon/Makefile +++ b/ricci/modules/cluster/clumon/src/daemon/Makefile @@ -22,7 +22,7 @@ OBJECTS = main.o \ INCLUDE += -I../include CXXFLAGS += -DPARANOIA=$(PARANOID) -LDFLAGS += ../common/*.o +LDFLAGS += ../common/*.o -lrt ifeq ($(PARANOID), 1) LDFLAGS += ${top_srcdir}/common/paranoid/*.o diff --git a/ricci/modules/cluster/clumon/src/include/ClusterMonitor.h b/ricci/modules/cluster/clumon/src/include/ClusterMonitor.h index e011709..dc96a94 100644 --- a/ricci/modules/cluster/clumon/src/include/ClusterMonitor.h +++ b/ricci/modules/cluster/clumon/src/include/ClusterMonitor.h @@ -39,10 +39,19 @@ class ClusterMonitor ClusterMonitor(const String& socket_path=MONITORING_CLIENT_SOCKET); virtual ~ClusterMonitor(); + // Set cache expiration to age seconds. 0 means + // always refresh when we call get_cluster() + unsigned int expire_cache(unsigned int age); + counting_auto_ptr<Cluster> get_cluster(); + counting_auto_ptr<Cluster> get_cluster(unsigned int age); + counting_auto_ptr<Cluster> get_cache(); private: String _sock_path; + struct timespec last_update; + counting_auto_ptr<Cluster> cached_copy; + unsigned int cache_lifetime; ClusterMonitor(const ClusterMonitor&); ClusterMonitor& operator= (const ClusterMonitor&); diff --git a/ricci/modules/cluster/clumon/src/snmp-agent/Makefile b/ricci/modules/cluster/clumon/src/snmp-agent/Makefile index 483aa13..159a9d2 100644 --- a/ricci/modules/cluster/clumon/src/snmp-agent/Makefile +++ b/ricci/modules/cluster/clumon/src/snmp-agent/Makefile @@ -19,7 +19,7 @@ SNMP_LDLAGS = `net-snmp-config --libs` INCLUDE += -I ../include CFLAGS += -fPIC $(SNMP_CFLAGS) -DPARANOIA=$(PARANOID) CXXFLAGS += -fPIC $(SNMP_CFLAGS) -DPARANOIA=$(PARANOID) -LDFLAGS += -fPIC -shared $(SNMP_LDLAGS) +LDFLAGS += -fPIC -shared $(SNMP_LDLAGS) -lrt ifeq ($(PARANOID), 1) LDFLAGS += ${top_srcdir}/common/paranoid/*.o -- 1.6.2.5
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor