[Ovirt-devel] [Matahari] [PATCH matahari] Introduces explicit heartbeat events to the QMF transport.

Andrew Beekhof abeekhof at redhat.com
Fri May 28 09:31:19 UTC 2010


ack

On May 27, 2010, at 8:19 PM, Darryl L. Pierce wrote:

> Also changes the linking to include the two newer qpid libraries.
> 
> Signed-off-by: Darryl L. Pierce <dpierce at redhat.com>
> ---
> src/Makefile.am       |    4 +++-
> src/host.cpp          |   28 ++++++++++++++++++----------
> src/host.h            |    1 +
> src/hostlistener.h    |    2 +-
> src/qmf/hostagent.cpp |    7 +++++--
> src/qmf/hostagent.h   |    9 ++++++---
> src/schema.xml        |    7 +++++++
> 7 files changed, 41 insertions(+), 17 deletions(-)
> 
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 498ee72..eaad138 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -5,6 +5,8 @@ sbin_PROGRAMS = matahari
> first = qmf/com/redhat/matahari/Host.cpp
> 
> generated_file_list = \
> +	qmf/com/redhat/matahari/EventHeartbeat.cpp \
> +	qmf/com/redhat/matahari/EventHeartbeat.h \
> 	qmf/com/redhat/matahari/Host.h \
> 	qmf/com/redhat/matahari/NetworkDevice.cpp \
> 	qmf/com/redhat/matahari/NetworkDevice.h \
> @@ -44,6 +46,6 @@ CLEANFILES = $(generated_file_list) $(first)
> 
> matahari_CPPFLAGS = -fno-strict-aliasing
> matahari_LDFLAGS = -L/usr/local/lib
> -matahari_LDADD = -lqmf $(LIBVIRT_LIBS) $(PCRE_LIBS) $(UDEV_LIBS)
> +matahari_LDADD = -lqmf -lqpidclient -lqpidcommon $(LIBVIRT_LIBS) $(PCRE_LIBS) $(UDEV_LIBS)
> 
> dist_pkgdata_DATA = schema.xml
> diff --git a/src/host.cpp b/src/host.cpp
> index 29b84ec..63dbceb 100644
> --- a/src/host.cpp
> +++ b/src/host.cpp
> @@ -29,16 +29,18 @@
> 
> using namespace std;
> 
> +const string UNKNOWN("Unknow");
> +
> Host::Host()
> +  :_uuid(UNKNOWN)
> +  ,_hostname(UNKNOWN)
> +  ,_hypervisor(UNKNOWN)
> +  ,_architecture(UNKNOWN)
> +  ,_memory(0)
> +  ,_beeping(false)
> +  ,_heartbeat_sequence(0)
> {
>   struct utsname details;
> -  this->_uuid         = string("Unknown");
> -  this->_hostname     = string("Unknown");
> -  this->_hypervisor   = string("Unknown");
> -  this->_architecture = string("None");
> -  this->_memory       = 0;
> -  this->_beeping      = false;
> -
>   std::ifstream input("/var/lib/dbus/machine-id");
> 
>   if(input.is_open())
> @@ -99,13 +101,19 @@ Host::setup(ManagementAgent* agent, HostAgent* hostAgent)
> void
> Host::update()
> {
> +  this->_heartbeat_sequence++;
> +
>   _processors.update();
> 
> -  for(vector<NetworkDeviceAgent>::iterator iter = _networkdevices.begin();
> -      iter != _networkdevices.end();
> +  time_t __time;
> +  time(&__time);
> +
> +  for(set<HostListener*>::iterator iter = _listeners.begin();
> +      iter != _listeners.end();
>       iter++)
>     {
> -      iter->update();
> +      (*iter)->heartbeat((unsigned long)__time,
> +			 this->_heartbeat_sequence);
>     }
> }
> 
> diff --git a/src/host.h b/src/host.h
> index bcb8c12..b6885e8 100644
> --- a/src/host.h
> +++ b/src/host.h
> @@ -41,6 +41,7 @@ class Host
>   string          _architecture;
>   unsigned int    _memory;
>   bool            _beeping;
> +  unsigned int    _heartbeat_sequence;
> 
>   Processors                 _processors;
>   vector<NetworkDeviceAgent> _networkdevices;
> diff --git a/src/hostlistener.h b/src/hostlistener.h
> index 298e51d..de7352a 100644
> --- a/src/hostlistener.h
> +++ b/src/hostlistener.h
> @@ -27,7 +27,7 @@
> class HostListener
> {
>  public:
> -  virtual void heartbeat(unsigned long timestamp) = 0;
> +  virtual void heartbeat(unsigned long timestamp, unsigned int sequence) = 0;
> };
> 
> #endif
> diff --git a/src/qmf/hostagent.cpp b/src/qmf/hostagent.cpp
> index 9807f65..21e377b 100644
> --- a/src/qmf/hostagent.cpp
> +++ b/src/qmf/hostagent.cpp
> @@ -20,7 +20,7 @@
> #include "hostagent.h"
> #include <qpid/agent/ManagementAgent.h>
> 
> -namespace _qmf = qmf::com::redhat::matahari;
> +#include "qmf/com/redhat/matahari/EventHeartbeat.h"
> 
> HostAgent::HostAgent(Host& host)
>   :_host(host)
> @@ -35,6 +35,8 @@ HostAgent::~HostAgent()
> void
> HostAgent::setup(ManagementAgent* agent)
> {
> +  this->_agent = agent;
> +
>   _management_object = new _qmf::Host(agent, this);
>   agent->addObject(_management_object);
> 
> @@ -63,6 +65,7 @@ HostAgent::ManagementMethod(uint32_t method, Args& arguments, string& text)
> }
> 
> void
> -HostAgent::heartbeat(unsigned long timestamp)
> +HostAgent::heartbeat(unsigned long timestamp, unsigned int sequence)
> {
> +  this->_agent->raiseEvent(_qmf::EventHeartbeat(timestamp, sequence));
> }
> diff --git a/src/qmf/hostagent.h b/src/qmf/hostagent.h
> index 6d2f2a0..a31f844 100644
> --- a/src/qmf/hostagent.h
> +++ b/src/qmf/hostagent.h
> @@ -31,11 +31,14 @@
> using namespace qpid::management;
> using namespace std;
> 
> +namespace _qmf = qmf::com::redhat::matahari;
> +
> class HostAgent : public Manageable, public HostListener
> {
>  private:
> -  qmf::com::redhat::matahari::Host* _management_object;
> -  Host& _host;
> +  _qmf::Host*      _management_object;
> +  Host&            _host;
> +  ManagementAgent* _agent;
> 
>  public:
>   HostAgent(Host& host);
> @@ -45,7 +48,7 @@ class HostAgent : public Manageable, public HostListener
>   ManagementObject* GetManagementObject() const { return _management_object; }
>   status_t ManagementMethod(uint32_t method, Args& arguments, string& text);
> 
> -  virtual void heartbeat(unsigned long timestamp);
> +  virtual void heartbeat(unsigned long timestamp, unsigned int sequence);
> };
> 
> #endif
> diff --git a/src/schema.xml b/src/schema.xml
> index 206e39b..aac5425 100644
> --- a/src/schema.xml
> +++ b/src/schema.xml
> @@ -14,6 +14,13 @@
> 
>   </class>
> 
> +  <eventArguments>
> +    <arg name="timestamp" type="absTime" />
> +    <arg name="sequence"  type="uint32" />
> +  </eventArguments>
> +
> +  <event name="heartbeat" args="timestamp,sequence" />
> +
>   <!-- The processor for the node. -->
>   <class name="Processors">
>     <property name="host"   type="objId" access="RC" desc="The host machine." index="y" references="Host" parentRef="y" />
> -- 
> 1.7.0.1
> 
> _______________________________________________
> Matahari mailing list
> Matahari at lists.fedorahosted.org
> https://fedorahosted.org/mailman/listinfo/matahari





More information about the ovirt-devel mailing list