You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2009/10/28 16:42:52 UTC
svn commit: r830642 - in /qpid/branches/0.5.x-dev/qpid/cpp:
bindings/qmf/python/qmf.py bindings/qmf/ruby/qmf.rb
bindings/qmf/tests/ruby_console.rb bindings/qmf/tests/ruby_console_test.rb
include/qmf/engine/Console.h src/qmf/engine/BrokerProxyImpl.cpp
Author: ritchiem
Date: Wed Oct 28 15:42:51 2009
New Revision: 830642
URL: http://svn.apache.org/viewvc?rev=830642&view=rev
Log:
Removed references to broker and agent bank from API, replaced with the
more generic (and forward compatible) "key".
In the Ruby binding, ensured that ruby objects reference their own copies
of the wrapped c++ objects to protect from problems when the c++ objects are
deleted out from under the wrappers.
Added agent discriminator to the console::objects method.
Modified:
qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/python/qmf.py
qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/ruby/qmf.rb
qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console.rb
qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb
qpid/branches/0.5.x-dev/qpid/cpp/include/qmf/engine/Console.h
qpid/branches/0.5.x-dev/qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp
Modified: qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/python/qmf.py
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/python/qmf.py?rev=830642&r1=830641&r2=830642&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/python/qmf.py (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/python/qmf.py Wed Oct 28 15:42:51 2009
@@ -535,7 +535,7 @@
return self.impl.isDeleted()
- def index(self): pass
+ def key(self): pass
@@ -545,6 +545,7 @@
self.impl = impl
else:
self.impl = qmfengine.ObjectId()
+ self.agent_key = "%d.%d" % (self.impl.getBrokerBank(), self.impl.getAgentBank())
def object_num_high(self):
@@ -555,13 +556,8 @@
return self.impl.getObjectNumLo()
- def broker_bank(self):
- return self.impl.getBrokerBank()
-
-
- def agent_bank(self):
- return self.impl.getAgentBank()
-
+ def agent_key(self):
+ self.agent_key
def __eq__(self, other):
if not isinstance(other, self.__class__): return False
@@ -1076,13 +1072,18 @@
def objects(self, query, kwargs = {}):
timeout = 30
+ agent = None
temp_args = kwargs.copy()
if type(query) == type({}):
temp_args.update(query)
- if "timeout" in temp_args:
- timeout = temp_args["timeout"]
- temp_args.pop("timeout")
+ if "_timeout" in temp_args:
+ timeout = temp_args["_timeout"]
+ temp_args.pop("_timeout")
+
+ if "_agent" in temp_args:
+ agent = temp_args["_agent"]
+ temp_args.pop("_agent")
if type(query) == type({}):
query = Query(temp_args)
@@ -1097,7 +1098,7 @@
self._sync_count = 1
self._sync_result = []
broker = self._broker_list[0]
- broker.send_query(query.impl, None)
+ broker.send_query(query.impl, None, agent)
self._cv.wait(timeout)
if self._sync_count == 1:
raise Exception("Timed out: waiting for query response")
@@ -1193,38 +1194,40 @@
valid = self.impl.getEvent(self._event)
while valid:
count += 1
- if self._event.kind == qmfengine.ConsoleEvent.AGENT_ADDED:
- logging.debug("Console Event AGENT_ADDED received")
- if self._handler:
- self._handler.agent_added(AgentProxy(self._event.agent, None))
- elif self._event.kind == qmfengine.ConsoleEvent.AGENT_DELETED:
- logging.debug("Console Event AGENT_DELETED received")
- if self._handler:
- self._handler.agent_deleted(AgentProxy(self._event.agent, None))
- elif self._event.kind == qmfengine.ConsoleEvent.NEW_PACKAGE:
- logging.debug("Console Event NEW_PACKAGE received")
- if self._handler:
- self._handler.new_package(self._event.name)
- elif self._event.kind == qmfengine.ConsoleEvent.NEW_CLASS:
- logging.debug("Console Event NEW_CLASS received")
- if self._handler:
- self._handler.new_class(SchemaClassKey(self._event.classKey))
- elif self._event.kind == qmfengine.ConsoleEvent.OBJECT_UPDATE:
- logging.debug("Console Event OBJECT_UPDATE received")
- if self._handler:
- self._handler.object_update(ConsoleObject(None, {"impl":self._event.object}),
- self._event.hasProps, self._event.hasStats)
- elif self._event.kind == qmfengine.ConsoleEvent.EVENT_RECEIVED:
- logging.debug("Console Event EVENT_RECEIVED received")
- elif self._event.kind == qmfengine.ConsoleEvent.AGENT_HEARTBEAT:
- logging.debug("Console Event AGENT_HEARTBEAT received")
- if self._handler:
- self._handler.agent_heartbeat(AgentProxy(self._event.agent, None), self._event.timestamp)
- elif self._event.kind == qmfengine.ConsoleEvent.METHOD_RESPONSE:
- logging.debug("Console Event METHOD_RESPONSE received")
- else:
- logging.debug("Console thread received unknown event: '%s'" % str(self._event.kind))
-
+ try:
+ if self._event.kind == qmfengine.ConsoleEvent.AGENT_ADDED:
+ logging.debug("Console Event AGENT_ADDED received")
+ if self._handler:
+ self._handler.agent_added(AgentProxy(self._event.agent, None))
+ elif self._event.kind == qmfengine.ConsoleEvent.AGENT_DELETED:
+ logging.debug("Console Event AGENT_DELETED received")
+ if self._handler:
+ self._handler.agent_deleted(AgentProxy(self._event.agent, None))
+ elif self._event.kind == qmfengine.ConsoleEvent.NEW_PACKAGE:
+ logging.debug("Console Event NEW_PACKAGE received")
+ if self._handler:
+ self._handler.new_package(self._event.name)
+ elif self._event.kind == qmfengine.ConsoleEvent.NEW_CLASS:
+ logging.debug("Console Event NEW_CLASS received")
+ if self._handler:
+ self._handler.new_class(SchemaClassKey(self._event.classKey))
+ elif self._event.kind == qmfengine.ConsoleEvent.OBJECT_UPDATE:
+ logging.debug("Console Event OBJECT_UPDATE received")
+ if self._handler:
+ self._handler.object_update(ConsoleObject(None, {"impl":self._event.object}),
+ self._event.hasProps, self._event.hasStats)
+ elif self._event.kind == qmfengine.ConsoleEvent.EVENT_RECEIVED:
+ logging.debug("Console Event EVENT_RECEIVED received")
+ elif self._event.kind == qmfengine.ConsoleEvent.AGENT_HEARTBEAT:
+ logging.debug("Console Event AGENT_HEARTBEAT received")
+ if self._handler:
+ self._handler.agent_heartbeat(AgentProxy(self._event.agent, None), self._event.timestamp)
+ elif self._event.kind == qmfengine.ConsoleEvent.METHOD_RESPONSE:
+ logging.debug("Console Event METHOD_RESPONSE received")
+ else:
+ logging.debug("Console thread received unknown event: '%s'" % str(self._event.kind))
+ except e:
+ print "Exception caught in callback thread:", e
self.impl.popEvent()
valid = self.impl.getEvent(self._event)
return count
@@ -1236,19 +1239,15 @@
def __init__(self, impl, broker):
self.impl = impl
self.broker = broker
+ self.key = "%d.%d" % (self.impl.getBrokerBank(), self.impl.getAgentBank())
def label(self):
return self.impl.getLabel()
- def broker_bank(self):
- return self.impl.getBrokerBank()
-
-
- def agent_bank(self):
- return self.impl.getAgentBank()
-
+ def key(self):
+ return self.key
class Broker(ConnectionHandler):
@@ -1298,8 +1297,11 @@
self._cv.release()
- def send_query(self, query, ctx):
- self.impl.sendQuery(query, ctx)
+ def send_query(self, query, ctx, agent):
+ agent_impl = None
+ if agent:
+ agent_impl = agent.impl
+ self.impl.sendQuery(query, ctx, agent_impl)
self.conn.kick()
Modified: qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/ruby/qmf.rb
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/ruby/qmf.rb?rev=830642&r1=830641&r2=830642&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/ruby/qmf.rb (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/ruby/qmf.rb Wed Oct 28 15:42:51 2009
@@ -448,18 +448,19 @@
@impl.isDeleted
end
- def index()
+ def key()
end
end
class ObjectId
- attr_reader :impl
+ attr_reader :impl, :agent_key
def initialize(impl=nil)
if impl
@impl = impl
else
@impl = Qmfengine::ObjectId.new
end
+ @agent_key = "#{@impl.getBrokerBank}.#{@impl.getAgentBank}"
end
def object_num_high
@@ -470,14 +471,6 @@
@impl.getObjectNumLo
end
- def broker_bank
- @impl.getBrokerBank
- end
-
- def agent_bank
- @impl.getAgentBank
- end
-
def ==(other)
return (@impl.getObjectNumHi == other.impl.getObjectNumHi) &&
(@impl.getObjectNumLo == other.impl.getObjectNumLo)
@@ -748,7 +741,7 @@
class SchemaClassKey
attr_reader :impl
def initialize(i)
- @impl = i
+ @impl = Qmfengine::SchemaClassKey.new(i)
end
def package_name
@@ -956,6 +949,7 @@
def objects(query, kwargs = {})
timeout = 30
+ agent = nil
kwargs.merge!(query) if query.class == Hash
if kwargs.include?(:timeout)
@@ -963,6 +957,11 @@
kwargs.delete(:timeout)
end
+ if kwargs.include?(:agent)
+ agent = kwargs[:agent]
+ kwargs.delete(:agent)
+ end
+
query = Query.new(kwargs) if query.class == Hash
@select = []
@@ -975,7 +974,7 @@
@sync_result = []
broker = nil
synchronize { broker = @broker_list[0] }
- broker.send_query(query.impl, nil)
+ broker.send_query(query.impl, nil, agent)
unless @cv.wait(timeout) { @sync_count == 0 }
raise "Timed out waiting for response"
end
@@ -1045,21 +1044,25 @@
valid = @impl.getEvent(@event)
while valid
count += 1
- case @event.kind
- when Qmfengine::ConsoleEvent::AGENT_ADDED
- @handler.agent_added(AgentProxy.new(@event.agent, nil)) if @handler
- when Qmfengine::ConsoleEvent::AGENT_DELETED
- @handler.agent_deleted(AgentProxy.new(@event.agent, nil)) if @handler
- when Qmfengine::ConsoleEvent::NEW_PACKAGE
- @handler.new_package(@event.name) if @handler
- when Qmfengine::ConsoleEvent::NEW_CLASS
- @handler.new_class(SchemaClassKey.new(@event.classKey)) if @handler
- when Qmfengine::ConsoleEvent::OBJECT_UPDATE
- @handler.object_update(ConsoleObject.new(nil, :impl => @event.object), @event.hasProps, @event.hasStats) if @handler
- when Qmfengine::ConsoleEvent::EVENT_RECEIVED
- when Qmfengine::ConsoleEvent::AGENT_HEARTBEAT
- @handler.agent_heartbeat(AgentProxy.new(@event.agent, nil), @event.timestamp) if @handler
- when Qmfengine::ConsoleEvent::METHOD_RESPONSE
+ begin
+ case @event.kind
+ when Qmfengine::ConsoleEvent::AGENT_ADDED
+ @handler.agent_added(AgentProxy.new(@event.agent, nil)) if @handler
+ when Qmfengine::ConsoleEvent::AGENT_DELETED
+ @handler.agent_deleted(AgentProxy.new(@event.agent, nil)) if @handler
+ when Qmfengine::ConsoleEvent::NEW_PACKAGE
+ @handler.new_package(@event.name) if @handler
+ when Qmfengine::ConsoleEvent::NEW_CLASS
+ @handler.new_class(SchemaClassKey.new(@event.classKey)) if @handler
+ when Qmfengine::ConsoleEvent::OBJECT_UPDATE
+ @handler.object_update(ConsoleObject.new(nil, :impl => @event.object), @event.hasProps, @event.hasStats) if @handler
+ when Qmfengine::ConsoleEvent::EVENT_RECEIVED
+ when Qmfengine::ConsoleEvent::AGENT_HEARTBEAT
+ @handler.agent_heartbeat(AgentProxy.new(@event.agent, nil), @event.timestamp) if @handler
+ when Qmfengine::ConsoleEvent::METHOD_RESPONSE
+ end
+ rescue
+ puts "Exception caught in callback thread: #{$!}"
end
@impl.popEvent
valid = @impl.getEvent(@event)
@@ -1069,23 +1072,13 @@
end
class AgentProxy
- attr_reader :broker
+ attr_reader :impl, :broker, :label, :key
def initialize(impl, broker)
- @impl = impl
+ @impl = Qmfengine::AgentProxy.new(impl)
@broker = broker
- end
-
- def label
- @impl.getLabel
- end
-
- def broker_bank
- @impl.getBrokerBank
- end
-
- def agent_bank
- @impl.getAgentBank
+ @label = @impl.getLabel
+ @key = "#{@impl.getBrokerBank}.#{@impl.getAgentBank}"
end
end
@@ -1130,8 +1123,9 @@
end
end
- def send_query(query, ctx)
- @impl.sendQuery(query, ctx)
+ def send_query(query, ctx, agent)
+ agent_impl = agent.impl if agent
+ @impl.sendQuery(query, ctx, agent_impl)
@conn.kick
end
Modified: qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console.rb
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console.rb?rev=830642&r1=830641&r2=830642&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console.rb (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console.rb Wed Oct 28 15:42:51 2009
@@ -25,7 +25,7 @@
class App < Qmf::ConsoleHandler
def agent_added(agent)
- puts "AgentAdded: #{agent.label} broker=#{agent.broker_bank} agent=#{agent.agent_bank}"
+ puts "AgentAdded: label=#{agent.label} key=#{agent.key}"
end
def agent_deleted(agent)
@@ -42,8 +42,7 @@
def object_update(object, hasProps, hasStats)
puts "ObjectUpdate: #{object.object_class.class_name} props=#{hasProps} stats=#{hasStats}"
- puts " broker-bank=#{object.object_id.broker_bank}"
- puts " agent-bank=#{object.object_id.agent_bank}"
+ puts " agent-key=#{object.object_id.agent_key}"
puts " package=#{object.object_class.package_name}"
end
Modified: qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb?rev=830642&r1=830641&r2=830642&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb Wed Oct 28 15:42:51 2009
@@ -201,6 +201,19 @@
end
+ def test_D_get_with_agent
+ agents = @qmfc.agents
+ agents.each do |agent|
+ if agent.label == "qmfa"
+ parent = @qmfc.object(:class => "parent", :agent => agent)
+ assert(parent, "Number of parent objects")
+ return
+ end
+ end
+
+ fail("Didn't find a non-broker agent")
+ end
+
end
app = ConsoleTest.new
Modified: qpid/branches/0.5.x-dev/qpid/cpp/include/qmf/engine/Console.h
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/include/qmf/engine/Console.h?rev=830642&r1=830641&r2=830642&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/include/qmf/engine/Console.h (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/include/qmf/engine/Console.h Wed Oct 28 15:42:51 2009
@@ -134,6 +134,7 @@
*/
class AgentProxy {
public:
+ AgentProxy(const AgentProxy& from);
~AgentProxy();
const char* getLabel() const;
uint32_t getBrokerBank() const;
Modified: qpid/branches/0.5.x-dev/qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp?rev=830642&r1=830641&r2=830642&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp (original)
+++ qpid/branches/0.5.x-dev/qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp Wed Oct 28 15:42:51 2009
@@ -741,6 +741,7 @@
//==================================================================
AgentProxy::AgentProxy(AgentProxyImpl* i) : impl(i) {}
+AgentProxy::AgentProxy(const AgentProxy& from) : impl(new AgentProxyImpl(*(from.impl))) {}
AgentProxy::~AgentProxy() { delete impl; }
const char* AgentProxy::getLabel() const { return impl->getLabel().c_str(); }
uint32_t AgentProxy::getBrokerBank() const { return impl->getBrokerBank(); }
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org