You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2009/10/15 15:24:11 UTC
svn commit: r825492 - in /qpid/trunk/qpid/cpp/bindings/qmf: ruby/qmf.rb
tests/ruby_console.rb
Author: tross
Date: Thu Oct 15 13:24:10 2009
New Revision: 825492
URL: http://svn.apache.org/viewvc?rev=825492&view=rev
Log:
Added select for object queries (Ruby).
Added separate callback-thread to prevent deadlock when a user blocks on a callback.
Modified:
qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb
qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console.rb
Modified: qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb?rev=825492&r1=825491&r2=825492&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb (original)
+++ qpid/trunk/qpid/cpp/bindings/qmf/ruby/qmf.rb Thu Oct 15 13:24:10 2009
@@ -871,17 +871,22 @@
@cv = new_cond
@sync_count = nil
@sync_result = nil
+ @select = []
+ @cb_cond = new_cond
+ @cb_thread = Thread.new do
+ run_cb_thread
+ end
end
def add_connection(conn)
broker = Broker.new(self, conn)
- @broker_list << broker
+ synchronize { @broker_list << broker }
return broker
end
def del_connection(broker)
broker.shutdown
- @broker_list.delete(broker)
+ synchronize { @broker_list.delete(broker) }
end
def packages()
@@ -935,7 +940,7 @@
if broker
blist << broker
else
- blist = @broker_list
+ synchronize { blist = @broker_list }
end
agents = []
@@ -960,10 +965,16 @@
query = Query.new(kwargs) if query.class == Hash
+ @select = []
+ kwargs.each do |k,v|
+ @select << [k, v] if k.is_a?(String)
+ end
+
synchronize do
@sync_count = 1
@sync_result = []
- broker = @broker_list[0]
+ broker = nil
+ synchronize { broker = @broker_list[0] }
broker.send_query(query.impl, nil)
unless @cv.wait(timeout) { @sync_count == 0 }
raise "Timed out waiting for response"
@@ -985,10 +996,22 @@
return objs.length > 0 ? objs[0] : nil
end
+ # Check the object against select to check for a match
+ def select_match(object)
+ @select.each do |key, value|
+ object.properties.each do |prop, propval|
+ if key == prop.name && value != propval
+ return nil
+ end
+ end
+ end
+ return :true
+ end
+
def _get_result(list, context)
synchronize do
list.each do |item|
- @sync_result << item
+ @sync_result << item if select_match(item)
end
@sync_count -= 1
@cv.signal
@@ -1004,7 +1027,20 @@
def end_sync(sync)
end
- def do_console_events()
+ def run_cb_thread
+ while :true
+ synchronize { @cb_cond.wait(1) }
+ begin
+ count = do_console_events
+ end until count == 0
+ end
+ end
+
+ def start_console_events
+ synchronize { @cb_cond.signal }
+ end
+
+ def do_console_events
count = 0
valid = @impl.getEvent(@event)
while valid
@@ -1151,10 +1187,10 @@
def do_events()
begin
- ccnt = @console.do_console_events
+ @console.start_console_events
bcnt = do_broker_events
mcnt = do_broker_messages
- end until ccnt == 0 and bcnt == 0 and mcnt == 0
+ end until bcnt == 0 and mcnt == 0
end
def conn_event_connected()
Modified: qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console.rb
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console.rb?rev=825492&r1=825491&r2=825492&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console.rb (original)
+++ qpid/trunk/qpid/cpp/bindings/qmf/tests/ruby_console.rb Thu Oct 15 13:24:10 2009
@@ -143,6 +143,13 @@
end
puts "----"
+ elist = @qmfc.objects(:package => "org.apache.qpid.broker", :class => "exchange", 'durable' => true)
+ puts "---- Durable Exchanges ----"
+ elist.each do |e|
+ puts "Exchange: #{e.name}"
+ end
+ puts "----"
+
qlist = @qmfc.objects(Qmf::Query.new(:package => "org.apache.qpid.broker",
:class => "queue"))
puts "---- Queues ----"
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org