You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2018/02/26 20:11:11 UTC
[1/2] qpid-proton git commit: PROTON-1776 [ruby] generate
on_sender/receiver_open/close events
Repository: qpid-proton
Updated Branches:
refs/heads/master 81ddadc44 -> 13fb06ed5
PROTON-1776 [ruby] generate on_sender/receiver_open/close events
Fixed messaging adapter and all tests/examples that used the incorrect on_link methods.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/13fb06ed
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/13fb06ed
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/13fb06ed
Branch: refs/heads/master
Commit: 13fb06ed5c64c0b5e0c99dda10f7ff7361c95a3f
Parents: 96c7240
Author: Alan Conway <ac...@redhat.com>
Authored: Mon Feb 26 15:01:37 2018 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Mon Feb 26 15:10:40 2018 -0500
----------------------------------------------------------------------
examples/ruby/broker.rb | 34 +++++++++---------
examples/ruby/client.rb | 4 +--
.../ruby/lib/handler/messaging_adapter.rb | 25 ++++++++++---
proton-c/bindings/ruby/tests/test_container.rb | 2 +-
proton-c/bindings/ruby/tests/test_delivery.rb | 3 +-
.../ruby/tests/test_messaging_adapter.rb | 38 +++++++++-----------
proton-c/bindings/ruby/tests/test_tools.rb | 10 +++++-
7 files changed, 68 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/examples/ruby/broker.rb
----------------------------------------------------------------------
diff --git a/examples/ruby/broker.rb b/examples/ruby/broker.rb
index 5d0793a..9a023ba 100644
--- a/examples/ruby/broker.rb
+++ b/examples/ruby/broker.rb
@@ -103,20 +103,22 @@ class Broker < Qpid::Proton::MessagingHandler
@queues[address]
end
- def on_link_open(link)
- if link.sender?
- if link.remote_source.dynamic?
- address = SecureRandom.uuid
- link.source.address = address
- q = MessageQueue.new(true)
- @queues[address] = q
- q.subscribe(link)
- elsif link.remote_source.address
- link.source.address = link.remote_source.address
- self.queue(link.source.address).subscribe(link)
- end
- elsif link.remote_target.address
- link.target.address = link.remote_target.address
+ def on_sender_open(sender)
+ if sender.remote_source.dynamic?
+ address = SecureRandom.uuid
+ sender.source.address = address
+ q = MessageQueue.new(true)
+ @queues[address] = q
+ q.subscribe(sender)
+ elsif sender.remote_source.address
+ sender.source.address = sender.remote_source.address
+ self.queue(sender.source.address).subscribe(sender)
+ end
+ end
+
+ def on_receiver_open(receiver)
+ if receiver.remote_target.address
+ receiver.target.address = receiver.remote_target.address
end
end
@@ -128,8 +130,8 @@ class Broker < Qpid::Proton::MessagingHandler
end
end
- def on_link_close(link)
- self.unsubscribe(link) if link.sender?
+ def on_sender_close(sender)
+ self.unsubscribe(sender)
end
def on_connection_close(connection)
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/examples/ruby/client.rb
----------------------------------------------------------------------
diff --git a/examples/ruby/client.rb b/examples/ruby/client.rb
index 1439169..d0aa0ca 100644
--- a/examples/ruby/client.rb
+++ b/examples/ruby/client.rb
@@ -45,8 +45,8 @@ class Client < Qpid::Proton::MessagingHandler
end
end
- def on_link_open(link)
- next_request if link.receiver?
+ def on_receiver_open(receiver)
+ next_request
end
def on_message(delivery, message)
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb b/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb
index acd08e9..e58314f 100644
--- a/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb
+++ b/proton-c/bindings/ruby/lib/handler/messaging_adapter.rb
@@ -38,7 +38,7 @@ module Qpid::Proton
def on_container_start(container) delegate(:on_container_start, container); end
def on_container_stop(container) delegate(:on_container_stop, container); end
- # Define repetative on_xxx_open/close methods for each endpoint type
+ # Define repetative on_xxx_open/close methods for session and connection
def self.open_close(endpoint)
Module.new do
define_method(:"on_#{endpoint}_remote_open") do |event|
@@ -61,7 +61,24 @@ module Qpid::Proton
end
# Generate and include open_close modules for each endpoint type
# Using modules so we can override to extend the behavior later in the handler.
- [:connection, :session, :link].each { |endpoint| include open_close(endpoint) }
+ [:connection, :session].each { |endpoint| include open_close(endpoint) }
+
+ # Link open/close is handled separately because links are split into
+ # sender and receiver on the messaging API
+ def on_link_remote_open(event)
+ delegate(event.link.sender? ? :on_sender_open : :on_receiver_open, event.link)
+ event.link.open if event.link.local_uninit?
+ add_credit(event)
+ rescue StopAutoResponse
+ end
+
+ def on_link_remote_close(event)
+ s = event.link.sender?
+ delegate_error(s ? :on_sender_error : :on_receiver_error, event.link) if event.link.condition
+ delegate(s ? :on_sender_close : :on_receiver_close, event.link)
+ event.link.close if event.link.local_active?
+ rescue StopAutoResponse
+ end
def on_transport_error(event)
delegate_error(:on_transport_error, event.context)
@@ -71,10 +88,8 @@ module Qpid::Proton
delegate(:on_transport_close, event.context) rescue StopAutoResponse
end
- # Add flow control for link opening events
+ # Add flow control for local link open
def on_link_local_open(event) add_credit(event); end
- def on_link_remote_open(event) super; add_credit(event); end
-
def on_delivery(event)
if event.link.receiver? # Incoming message
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/tests/test_container.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/test_container.rb b/proton-c/bindings/ruby/tests/test_container.rb
index 385549b..8df3755 100644
--- a/proton-c/bindings/ruby/tests/test_container.rb
+++ b/proton-c/bindings/ruby/tests/test_container.rb
@@ -51,7 +51,7 @@ class ContainerTest < MiniTest::Test
receive_handler = Class.new(MessagingHandler) do
attr_reader :message, :link
- def on_link_open(link)
+ def on_receiver_open(link)
@link = link
@link.open
@link.flow(1)
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/tests/test_delivery.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/test_delivery.rb b/proton-c/bindings/ruby/tests/test_delivery.rb
index ee64451..f061665 100644
--- a/proton-c/bindings/ruby/tests/test_delivery.rb
+++ b/proton-c/bindings/ruby/tests/test_delivery.rb
@@ -25,7 +25,8 @@ include Qpid::Proton
class TestDelivery < MiniTest::Test
class NoAutoHandler < MessagingHandler
- def on_link_open(l) l.open({:auto_settle=>false, :auto_accept=>false}); end
+ def on_sender_open(l) l.open({:auto_settle=>false, :auto_accept=>false}); end
+ def on_receiver_open(l) l.open({:auto_settle=>false, :auto_accept=>false}); end
end
class SendHandler < NoAutoHandler
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/tests/test_messaging_adapter.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/test_messaging_adapter.rb b/proton-c/bindings/ruby/tests/test_messaging_adapter.rb
index 6c683c0..942fc01 100644
--- a/proton-c/bindings/ruby/tests/test_messaging_adapter.rb
+++ b/proton-c/bindings/ruby/tests/test_messaging_adapter.rb
@@ -39,20 +39,16 @@ class RecordingHandler < Qpid::Proton::MessagingHandler
def respond_to?(name, all=false) super || respond_to_missing?(name); end # For ruby < 1.9.2
end
-# Extra methods for driver pairs of RecordingHandler
-class DriverPair
- def names() collect { |x| x.handler.names }; end
- def clear() each { |x| x.handler.clear; } end
-end
-
class NoAutoOpenClose < RecordingHandler
def initialize() super; @endpoints = []; end
def on_connection_open(x) @connection = x; super; raise StopAutoResponse; end
def on_session_open(x) @session = x; super; raise StopAutoResponse; end
- def on_link_open(x) @link = x; super; raise StopAutoResponse; end
+ def on_sender_open(x) @link = x; super; raise StopAutoResponse; end
+ def on_receiver_open(x) @link = x; super; raise StopAutoResponse; end
def on_connection_close(x) super; raise StopAutoResponse; end
def on_session_close(x) super; raise StopAutoResponse; end
- def on_link_close(x) super; raise StopAutoResponse; end
+ def on_sender_close(x) super; raise StopAutoResponse; end
+ def on_receiver_close(x) super; raise StopAutoResponse; end
attr_reader :connection, :session, :link
end
@@ -61,8 +57,8 @@ class TestMessagingHandler < MiniTest::Test
def test_auto_open_close
d = DriverPair.new(RecordingHandler.new, RecordingHandler.new)
d.client.connection.open; d.client.connection.open_sender; d.run
- assert_equal [:on_connection_open, :on_session_open, :on_link_open, :on_sendable], d.client.handler.names
- assert_equal [:on_connection_open, :on_session_open, :on_link_open], d.server.handler.names
+ assert_equal [:on_connection_open, :on_session_open, :on_sender_open, :on_sendable], d.client.handler.names
+ assert_equal [:on_connection_open, :on_session_open, :on_receiver_open], d.server.handler.names
d.clear
d.client.connection.close; d.run
assert_equal [:on_connection_close, :on_transport_close], d.server.handler.names
@@ -126,20 +122,19 @@ class TestMessagingHandler < MiniTest::Test
assert_equal "bad dog", d.server.handler.calls[0][1].condition.description
end
- def test_link_error
+ def test_sender_receiver_error
d = DriverPair.new(RecordingHandler.new, RecordingHandler.new)
d.client.connection.open
s = d.client.connection.open_sender; d.run
- assert_equal [:on_connection_open, :on_session_open, :on_link_open, :on_sendable], d.client.handler.names
- assert_equal [:on_connection_open, :on_session_open, :on_link_open], d.server.handler.names
+ assert_equal [:on_connection_open, :on_session_open, :on_sender_open, :on_sendable], d.client.handler.names
+ assert_equal [:on_connection_open, :on_session_open, :on_receiver_open], d.server.handler.names
d.clear
s.close "bad dog"; d.run
- assert_equal [:on_link_error, :on_link_close], d.client.handler.names
- assert_equal [:on_link_error, :on_link_close], d.server.handler.names
+ assert_equal [:on_sender_error, :on_sender_close], d.client.handler.names
+ assert_equal [:on_receiver_error, :on_receiver_close], d.server.handler.names
assert_equal "bad dog", d.server.handler.calls[0][1].condition.description
end
-
def test_options_off
linkopts = {:credit_window=>0, :auto_settle=>false, :auto_accept=>false}
d = DriverPair.new(NoAutoOpenClose.new, NoAutoOpenClose.new)
@@ -149,11 +144,11 @@ class TestMessagingHandler < MiniTest::Test
assert_equal [[:on_connection_open], [:on_connection_open]], d.names
d.clear
s = d.client.connection.open_sender(linkopts); d.run
- assert_equal [[], [:on_session_open, :on_link_open]], d.names
+ assert_equal [[], [:on_session_open, :on_receiver_open]], d.names
d.server.handler.session.open # Return session open
d.server.handler.link.open(linkopts) # Return link open
d.run
- assert_equal [[:on_session_open, :on_link_open], [:on_session_open, :on_link_open]], d.names
+ assert_equal [[:on_session_open, :on_sender_open], [:on_session_open, :on_receiver_open]], d.names
d.clear
d.server.handler.link.flow(1); d.run
assert_equal [[:on_sendable], []], d.names
@@ -163,7 +158,6 @@ class TestMessagingHandler < MiniTest::Test
assert_equal [[], [:on_message]], d.names
end
-
def test_message
handler_class = Class.new(MessagingHandler) do
def on_message(delivery, message) @message = message; end
@@ -203,12 +197,12 @@ class TestMessagingHandler < MiniTest::Test
d = DriverPair.new(handler_class.new, handler_class.new)
d.client.connection.open
r = d.client.connection.open_receiver; d.run
- assert_equal [:on_connection_open, :on_session_open, :on_link_open], d.client.handler.unhandled
- assert_equal [:on_connection_open, :on_session_open, :on_link_open, :on_sendable], d.server.handler.unhandled
+ assert_equal [:on_connection_open, :on_session_open, :on_receiver_open], d.client.handler.unhandled
+ assert_equal [:on_connection_open, :on_session_open, :on_sender_open, :on_sendable], d.server.handler.unhandled
r.close Condition.new("goof", "oops"); d.run
assert_equal [Condition.new("goof", "oops")], d.client.handler.error
- assert_equal [:on_connection_open, :on_session_open, :on_link_open, :on_sendable, :on_link_close], d.server.handler.unhandled
+ assert_equal [:on_connection_open, :on_session_open, :on_sender_open, :on_sendable, :on_sender_close], d.server.handler.unhandled
assert_equal [Condition.new("goof", "oops")], d.server.handler.error
end
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/13fb06ed/proton-c/bindings/ruby/tests/test_tools.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/test_tools.rb b/proton-c/bindings/ruby/tests/test_tools.rb
index 5907070..a8fe1de 100644
--- a/proton-c/bindings/ruby/tests/test_tools.rb
+++ b/proton-c/bindings/ruby/tests/test_tools.rb
@@ -82,7 +82,11 @@ class TestHandler < Qpid::Proton::MessagingHandler
endpoint_open(@sessions, s)
end
- def on_link_open(l)
+ def on_receiver_open(l)
+ endpoint_open(@links, l)
+ end
+
+ def on_sender_open(l)
endpoint_open(@links, l)
end
@@ -126,6 +130,10 @@ DriverPair = Struct.new(:client, :server) do
IO.select(can_read, can_write, [], 0)
end
+ def names() collect { |x| x.handler.names }; end
+
+ def clear() each { |x| x.handler.clear; } end
+
# Run till there is nothing else to do - not handle waiting for timed events
# but does pass +now+ to process and returns the min returned timed event time
def run(now=Time.now)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[2/2] qpid-proton git commit: NO-JIRA: [c] minor fix for sanitizer
warning
Posted by ac...@apache.org.
NO-JIRA: [c] minor fix for sanitizer warning
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/96c72404
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/96c72404
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/96c72404
Branch: refs/heads/master
Commit: 96c72404ae2dff977f58dfb54747ff8c20723843
Parents: 81ddadc
Author: Alan Conway <ac...@redhat.com>
Authored: Fri Feb 23 09:25:33 2018 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Mon Feb 26 15:10:40 2018 -0500
----------------------------------------------------------------------
proton-c/src/core/transport.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/96c72404/proton-c/src/core/transport.c
----------------------------------------------------------------------
diff --git a/proton-c/src/core/transport.c b/proton-c/src/core/transport.c
index 86d0c2a..c49ddd4 100644
--- a/proton-c/src/core/transport.c
+++ b/proton-c/src/core/transport.c
@@ -1349,7 +1349,7 @@ int pn_do_attach(pn_transport_t *transport, uint8_t frame_type, uint16_t channel
char strbuf[128]; // avoid malloc for most link names
char *strheap = (name.size >= sizeof(strbuf)) ? (char *) malloc(name.size + 1) : NULL;
char *strname = strheap ? strheap : strbuf;
- strncpy(strname, name.start, name.size);
+ if (name.size > 0) strncpy(strname, name.start, name.size);
strname[name.size] = '\0';
pn_session_t *ssn = pni_channel_state(transport, channel);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org