Re: 0.6 Release/0.7 Planning

2013-10-24 Thread Bozo Dragojevic

On 23. 10. 13 13:10, Rafael Schloming wrote:

Hi Everyone,

There have been a bunch of good fixes and improvements on trunk since 0.5,
and we now have a dwindling number of JIRAs slated for 0.6, so it's
probably time to start thinking about another release. I believe right now
there are 7 outstanding 0.6 JIRAs. (Please give a shout if there are any
JIRAs you believe should be included in 0.6 that are not currently on the
list.)


I'd like to see PROTON-428 and PROTON-290 in 0.6

Bozzo


[jira] [Updated] (PROTON-428) proton-hawtdispatch drops data when more than 512 bytes are read from the socket

2013-10-24 Thread Rafael H. Schloming (JIRA)

 [ 
https://issues.apache.org/jira/browse/PROTON-428?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rafael H. Schloming updated PROTON-428:
---

Fix Version/s: 0.6

 proton-hawtdispatch drops data when more than 512 bytes are read from the 
 socket
 

 Key: PROTON-428
 URL: https://issues.apache.org/jira/browse/PROTON-428
 Project: Qpid Proton
  Issue Type: Bug
Reporter: Bozo Dragojevic
 Fix For: 0.6

 Attachments: 
 0001-PROTON-428-proton-hawtdispatch-drops-data-when-more-.patch


 hawtdispatch AmqpTransport calls protons Transport.input() just once and 
 assumes all data was consumed



--
This message was sent by Atlassian JIRA
(v6.1#6144)


Re: 0.6 Release/0.7 Planning

2013-10-24 Thread Rafael Schloming
They look pretty straightforward, I don't see why we can't get them into
0.6.

--Rafael


On Thu, Oct 24, 2013 at 7:26 AM, Bozo Dragojevic bo...@digiverse.si wrote:

 On 23. 10. 13 13:10, Rafael Schloming wrote:

 Hi Everyone,

 There have been a bunch of good fixes and improvements on trunk since 0.5,
 and we now have a dwindling number of JIRAs slated for 0.6, so it's
 probably time to start thinking about another release. I believe right now
 there are 7 outstanding 0.6 JIRAs. (Please give a shout if there are any
 JIRAs you believe should be included in 0.6 that are not currently on the
 list.)


 I'd like to see PROTON-428 and PROTON-290 in 0.6

 Bozzo



Re: 0.6 Release/0.7 Planning

2013-10-24 Thread Bozo Dragojevic

Thanks!

Bozzo

On 24. 10. 13 17:06, Rafael Schloming wrote:

They look pretty straightforward, I don't see why we can't get them into
0.6.

--Rafael


On Thu, Oct 24, 2013 at 7:26 AM, Bozo Dragojevicbo...@digiverse.si  wrote:


On 23. 10. 13 13:10, Rafael Schloming wrote:


Hi Everyone,

There have been a bunch of good fixes and improvements on trunk since 0.5,
and we now have a dwindling number of JIRAs slated for 0.6, so it's
probably time to start thinking about another release. I believe right now
there are 7 outstanding 0.6 JIRAs. (Please give a shout if there are any
JIRAs you believe should be included in 0.6 that are not currently on the
list.)


I'd like to see PROTON-428 and PROTON-290 in 0.6

Bozzo





messenger store and links

2013-10-24 Thread Bozo Dragojevic

Hi!

Chasing down a weird behavior...

looking at messengers pni_pump_out() and how it's used from 
pn_messenger_endpoints()


   link = pn_link_head(conn, PN_LOCAL_ACTIVE | PN_REMOTE_ACTIVE);
   while (link) {
 if (pn_link_is_sender(link)) {
   pni_pump_out(messenger, 
pn_terminus_get_address(pn_link_target(link)), link);



is it really fair to assume that target address is always expected to be 
non NULL?



I've added a bit of debug code to pn_messenger_endpoints() so it reads:

  link = pn_link_head(conn, PN_LOCAL_ACTIVE | PN_REMOTE_ACTIVE);
  while (link) {
if (pn_link_is_sender(link)) {
  static int addrnull, addrok;
  const char *address = pn_terminus_get_address(pn_link_target(link));
  if (!address) {
addrnull++;
  } else {
addrok++;
  }
  fprintf(stderr, links with null address: %d links with ok 
address %d\n,

  addrnull, addrok);
  pni_pump_out(messenger, address, link);


and I never see 'addrok' change from 0


when pni_pump_out is called with address==NULL:

int pni_pump_out(pn_messenger_t *messenger, const char *address, 
pn_link_t *sender)

{
  pni_entry_t *entry = pni_store_get(messenger-outgoing, address);
  if (!entry) return 0;

pni_store_get cheerfuly returns first message on the list


end effect is that random clients start receiving messages not directed 
at them.



For some inexplicable reason is mostly works out while there are just 
two clients
connected to the messenger and we're not pushing it really hard. Still 
trying to come

up with a simple test-case.

Can anyone shed some light how the addressing on the link level is 
supposed to work in mesenger?


Bozzo


[jira] [Commented] (PROTON-393) messenger needs a way to reset the error

2013-10-24 Thread ASF subversion and git services (JIRA)

[ 
https://issues.apache.org/jira/browse/PROTON-393?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13804395#comment-13804395
 ] 

ASF subversion and git services commented on PROTON-393:


Commit 1535439 from r...@apache.org in branch 'proton/trunk'
[ https://svn.apache.org/r1535439 ]

PROTON-393: applied (modified) patch from Bozo

 messenger needs a way to reset the error
 

 Key: PROTON-393
 URL: https://issues.apache.org/jira/browse/PROTON-393
 Project: Qpid Proton
  Issue Type: Bug
Reporter: Bozo Dragojevic
Assignee: Rafael H. Schloming
 Fix For: 0.5


 m = Messenger()
 m.recv(-1) # error no active sources
 m.subscribe(valid_address) # fails because messenger is in error state



--
This message was sent by Atlassian JIRA
(v6.1#6144)


[jira] [Resolved] (PROTON-290) Allow querying of unsent messages by tracker

2013-10-24 Thread Rafael H. Schloming (JIRA)

 [ 
https://issues.apache.org/jira/browse/PROTON-290?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rafael H. Schloming resolved PROTON-290.


Resolution: Fixed
  Assignee: Rafael H. Schloming

 Allow querying of unsent messages by tracker
 

 Key: PROTON-290
 URL: https://issues.apache.org/jira/browse/PROTON-290
 Project: Qpid Proton
  Issue Type: New Feature
Reporter: Bozo Dragojevic
Assignee: Rafael H. Schloming
 Fix For: 0.6

 Attachments: 
 0001-PROTON-393-check-if-delivery-is-still-buffered-by-pr.patch


 messenger.status(tracker) returns PENDING until the message is either
 accepted or rejected by the recipient.
 Allow distinguishing between buffered locally and transmitted messages.



--
This message was sent by Atlassian JIRA
(v6.1#6144)


proposed Python API doc changes -- will check in on All Hallow's Eve

2013-10-24 Thread Michael Goulish

  
  Dear Proton Proponents -- 


Here is my proposed text for Python Messenger API documentation.

If you'd like to comment, please do so within the next week.
I will incorporate feedback and check in the resulting
changes to the codebase at the stroke of midnight, on 
All Hallows Eve.  ( Samhain. )


I have given you the current text for each method and property,
and then my changes.  My changes are either proposed replacements
( NEW_TEXT ) or proposed additions ( ADD_TEXT ).

Mostly, this is highly similar to the C API text, but with
minor changes for Pythonification.


  -- Mick .




Class Comments
{
  CURRENT_TEXT
  {
The Messenger class defines a high level interface for
sending and receiving Messages. Every Messenger contains
a single logical queue of incoming messages and a single
logical queue of outgoing messages. These messages in these
queues may be destined for, or originate from, a variety of
addresses.
  }

  ADD_TEXT
  {
The messenger interface is single-threaded.  All methods
except one ( interrupt ) are intended to be used from within
the messenger thread.
  }
}




Sending  Receiving Messages
{
  CURRENT_TEXT
  {
The L{Messenger} class works in conjuction with the L{Message}
class. The L{Message} class is a mutable holder of message content.
The L{put} method will encode the content in a given L{Message}
object into the outgoing message queue leaving that L{Message}
object free to be modified or discarded without having any impact on
the content in the outgoing queue.

Similarly, the L{get} method will decode the content in the incoming
message queue into the supplied L{Message} object.
  }



  NEW_TEXT
  {
The Messenger class works in conjuction with the Message class. The
Message class is a mutable holder of message content.

The put method copies its message to the outgoing queue, and may
send queued messages if it can do so without blocking.  The send
method blocks until it has sent the requested number of messages,
or until a timeout interrupts the attempt.

Similarly, the recv() method receives messages into the incoming
queue, and may block until it has received the requested number of
messages, or until timeout is reached.  The get method pops the
eldest message off the incoming queue and copies it into the message
object that you supply.  It will not block.
  }


  NOTE
  {
I thought it would be better in this comment to only emphasize
the blocking and non-blocking differences between get/put and
recv/send.  Details about how the arg message is handled are moved
to the comments for specific methods.
  }

}




Method Details
{
  __init__
  {
CURRENT_TEXT
{
  Construct a new L{Messenger} with the given name. The name has
  global scope. If a NULL name is supplied, a L{uuid.UUID} based
  name will be chosen.
}

NEW_TEXT
{
  // no change
}
  }


  __del__
  {
CURRENT_TEXT
{
  // none
}

NEW_TEXT
{
  Destroy the messenger.  This will close all connections that
  are managed by the messenger.  Call the stop method before
  destroying the messenger.
}
  }


  start
  {
CURRENT_TEXT
{
  Transitions the L{Messenger} to an active state. A L{Messenger} is
  initially created in an inactive state. When inactive a
  L{Messenger} will not send or receive messages from its internal
  queues. A L{Messenger} must be started before calling L{send} or
  L{recv}.
}

NEW_TEXT
{
  Currently a no-op placeholder.
  For future compatibility, do not send or receive messages
  before starting the messenger.
}
  }


  stop
  {
CURRENT_TEXT
{
  Transitions the L{Messenger} to an inactive state. An inactive
  L{Messenger} will not send or receive messages from its internal
  queues. A L{Messenger} should be stopped before being discarded to
  ensure a clean shutdown handshake occurs on any internally managed
  connections.
}

NEW_TEXT
{
  // no change
}
  }


  subscribe
  {
CURRENT_TEXT
{
  Subscribes the L{Messenger} to messages originating from the
  specified source. The source is an address as specified in the
  L{Messenger} introduction with the following addition. If the
  domain portion of the address begins with the '~' 

[jira] [Commented] (PROTON-290) Allow querying of unsent messages by tracker

2013-10-24 Thread Bozo Dragojevic (JIRA)

[ 
https://issues.apache.org/jira/browse/PROTON-290?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13804488#comment-13804488
 ] 

Bozo Dragojevic commented on PROTON-290:


I think I just spotted a thinko in my logic. Buffered should return true if we 
do not have a delivery yet or if delivery is still buffered:

{code}
-return d  pn_delivery_buffered(d);
+return !d || pn_delivery_buffered(d);
{code}

 Allow querying of unsent messages by tracker
 

 Key: PROTON-290
 URL: https://issues.apache.org/jira/browse/PROTON-290
 Project: Qpid Proton
  Issue Type: New Feature
Reporter: Bozo Dragojevic
Assignee: Rafael H. Schloming
 Fix For: 0.6

 Attachments: 
 0001-PROTON-393-check-if-delivery-is-still-buffered-by-pr.patch


 messenger.status(tracker) returns PENDING until the message is either
 accepted or rejected by the recipient.
 Allow distinguishing between buffered locally and transmitted messages.



--
This message was sent by Atlassian JIRA
(v6.1#6144)


[jira] [Reopened] (PROTON-290) Allow querying of unsent messages by tracker

2013-10-24 Thread Bozo Dragojevic (JIRA)

 [ 
https://issues.apache.org/jira/browse/PROTON-290?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bozo Dragojevic reopened PROTON-290:



 Allow querying of unsent messages by tracker
 

 Key: PROTON-290
 URL: https://issues.apache.org/jira/browse/PROTON-290
 Project: Qpid Proton
  Issue Type: New Feature
Reporter: Bozo Dragojevic
Assignee: Rafael H. Schloming
 Fix For: 0.6

 Attachments: 
 0001-PROTON-393-check-if-delivery-is-still-buffered-by-pr.patch


 messenger.status(tracker) returns PENDING until the message is either
 accepted or rejected by the recipient.
 Allow distinguishing between buffered locally and transmitted messages.



--
This message was sent by Atlassian JIRA
(v6.1#6144)


Re: messenger store and links

2013-10-24 Thread Rafael Schloming
Can you post the exact addresses and routing configuration you're using and
which direction messages are flowing? I'd like to try to simulate this
using the example send/recv scripts.

My guess is that the issue may not be so much related to whether the
addresses are NULL or not but whether there are multiple receivers
competing for the same messages.

--Rafael


On Thu, Oct 24, 2013 at 11:52 AM, Bozo Dragojevic bo...@digiverse.siwrote:

 Hi!

 Chasing down a weird behavior...

 looking at messengers pni_pump_out() and how it's used from
 pn_messenger_endpoints()

link = pn_link_head(conn, PN_LOCAL_ACTIVE | PN_REMOTE_ACTIVE);
while (link) {
  if (pn_link_is_sender(link)) {
pni_pump_out(messenger, 
 pn_terminus_get_address(pn_**link_target(link)),
 link);


 is it really fair to assume that target address is always expected to be
 non NULL?


 I've added a bit of debug code to pn_messenger_endpoints() so it reads:

   link = pn_link_head(conn, PN_LOCAL_ACTIVE | PN_REMOTE_ACTIVE);
   while (link) {
 if (pn_link_is_sender(link)) {
   static int addrnull, addrok;
   const char *address = pn_terminus_get_address(pn_**
 link_target(link));
   if (!address) {
 addrnull++;
   } else {
 addrok++;
   }
   fprintf(stderr, links with null address: %d links with ok address
 %d\n,
   addrnull, addrok);
   pni_pump_out(messenger, address, link);


 and I never see 'addrok' change from 0


 when pni_pump_out is called with address==NULL:

 int pni_pump_out(pn_messenger_t *messenger, const char *address, pn_link_t
 *sender)
 {
   pni_entry_t *entry = pni_store_get(messenger-**outgoing, address);
   if (!entry) return 0;

 pni_store_get cheerfuly returns first message on the list


 end effect is that random clients start receiving messages not directed at
 them.


 For some inexplicable reason is mostly works out while there are just two
 clients
 connected to the messenger and we're not pushing it really hard. Still
 trying to come
 up with a simple test-case.

 Can anyone shed some light how the addressing on the link level is
 supposed to work in mesenger?

 Bozzo



Re: proposed Python API doc changes -- will check in on All Hallow's Eve

2013-10-24 Thread Rafael Schloming
Thanks for the update. I've put some specific comments in line, but overall
this should be a big improvement.

--Rafael

On Thu, Oct 24, 2013 at 1:33 PM, Michael Goulish mgoul...@redhat.comwrote:



   Dear Proton Proponents --


 Here is my proposed text for Python Messenger API documentation.

 If you'd like to comment, please do so within the next week.
 I will incorporate feedback and check in the resulting
 changes to the codebase at the stroke of midnight, on
 All Hallows Eve.  ( Samhain. )


 I have given you the current text for each method and property,
 and then my changes.  My changes are either proposed replacements
 ( NEW_TEXT ) or proposed additions ( ADD_TEXT ).

 Mostly, this is highly similar to the C API text, but with
 minor changes for Pythonification.


   -- Mick .




 Class Comments
 {
   CURRENT_TEXT
   {
 The Messenger class defines a high level interface for
 sending and receiving Messages. Every Messenger contains
 a single logical queue of incoming messages and a single
 logical queue of outgoing messages. These messages in these
 queues may be destined for, or originate from, a variety of
 addresses.
   }

   ADD_TEXT
   {
 The messenger interface is single-threaded.  All methods
 except one ( interrupt ) are intended to be used from within
 the messenger thread.
   }
 }




 Sending  Receiving Messages
 {
   CURRENT_TEXT
   {
 The L{Messenger} class works in conjuction with the L{Message}
 class. The L{Message} class is a mutable holder of message content.
 The L{put} method will encode the content in a given L{Message}
 object into the outgoing message queue leaving that L{Message}
 object free to be modified or discarded without having any impact
 on
 the content in the outgoing queue.

 Similarly, the L{get} method will decode the content in the
 incoming
 message queue into the supplied L{Message} object.
   }



   NEW_TEXT
   {
 The Messenger class works in conjuction with the Message class. The
 Message class is a mutable holder of message content.

 The put method copies its message to the outgoing queue, and may
 send queued messages if it can do so without blocking.  The send
 method blocks until it has sent the requested number of messages,
 or until a timeout interrupts the attempt.

 Similarly, the recv() method receives messages into the incoming
 queue, and may block until it has received the requested number of
 messages, or until timeout is reached.  The get method pops the
 eldest message off the incoming queue and copies it into the
 message
 object that you supply.  It will not block.
   }


The blocking behavior of recv is actually slightly different than what you
state. It will block until it recvs *up to* N messages.

It's also probably worth noting somewhere that the blocking flag turns off
blocking entirely for the whole API with the exception
Messenger.work()/pn_messenger_work(). With blocking turned off calls like
send/recv will do what work they can without blocking and then return. You
can then use interrogatives like checking the number if incoming/outgoing
messages to see what outstanding work still remains.




   NOTE
   {
 I thought it would be better in this comment to only emphasize
 the blocking and non-blocking differences between get/put and
 recv/send.  Details about how the arg message is handled are moved
 to the comments for specific methods.
   }

 }




 Method Details
 {
   __init__
   {
 CURRENT_TEXT
 {
   Construct a new L{Messenger} with the given name. The name has
   global scope. If a NULL name is supplied, a L{uuid.UUID} based
   name will be chosen.
 }

 NEW_TEXT
 {
   // no change
 }
   }


   __del__
   {
 CURRENT_TEXT
 {
   // none
 }

 NEW_TEXT
 {
   Destroy the messenger.  This will close all connections that
   are managed by the messenger.  Call the stop method before
   destroying the messenger.
 }
   }


   start
   {
 CURRENT_TEXT
 {
   Transitions the L{Messenger} to an active state. A L{Messenger}
 is
   initially created in an inactive state. When inactive a
   L{Messenger} will not send or receive messages from its internal
   queues. A L{Messenger} must be started before calling L{send} or
   L{recv}.
 }

 NEW_TEXT
 {
   Currently a no-op placeholder.
   For future compatibility, do not send or receive messages
  

Re: messenger store and links

2013-10-24 Thread Rafael Schloming
If this is with trunk I'm guessing you might be noticing a change in
reply-to behaviour from a recent fix:
https://issues.apache.org/jira/browse/PROTON-278

As you mention, previously an unset reply-to would get automatically filled
in with the messenger's name. This is no longer the case. That behaviour
was unintentional as there are times when you legitimately want the
reply-to to be left unset. The intended behaviour was to expand ~ at the
beginning of an address to the messenger's name. That is now how trunk
behaves, so if you set your reply-to's to ~ then your problem might go
away, although your question is still an interesting one as I believe if
you wished you could intentionally set up competing receivers using
explicit non-uuid addresses that collide.

--Rafael


On Thu, Oct 24, 2013 at 2:49 PM, Bozo Dragojevic bo...@digiverse.si wrote:

 All messengers are created with default constructor (uuid-based names).
 The 'broker' messenger does a pn_messenger_subscribe(amqp:/**/~
 0.0.0.0:8194)
 All messages are constructed with address amqp://127.0.0.1:8194 and leave
 reply_to unset (so it's set to amqp://$uuid)

 Broker does application-level routing of messages
   a publisher sends a special 'register' message
   replies are constructed using stored 'reply_to' address from incoming
 message
   forwarded messages are constructed using stored 'reply_to' address from
 incoming 'registration' messages

 Messenger routing facility is not used in any way.
 All Messengers are running in async mode (broker and client library share
 the same 'event loop code').
 We're using outgoing trackers, mostly for the 'buffered' check
 All incoming messages are accepted as soon as they are processed.
 All outgoing messages are settled as soon as they are not buffered anymore

 maybe it'd be possible to simulate the situation by commenting out the
 pni_pump_out() in pn_messenger_put(), that, or at least checking if sender
 link address really has anything to do with
 the address calculated in pn_messenger_put()

 Bozzo


 On 24. 10. 13 20:25, Rafael Schloming wrote:

 Can you post the exact addresses and routing configuration you're using
 and
 which direction messages are flowing? I'd like to try to simulate this
 using the example send/recv scripts.

 My guess is that the issue may not be so much related to whether the
 addresses are NULL or not but whether there are multiple receivers
 competing for the same messages.

 --Rafael


 On Thu, Oct 24, 2013 at 11:52 AM, Bozo Dragojevicbo...@digiverse.si**
 wrote:

  Hi!

 Chasing down a weird behavior...

 looking at messengers pni_pump_out() and how it's used from
 pn_messenger_endpoints()

 link = pn_link_head(conn, PN_LOCAL_ACTIVE | PN_REMOTE_ACTIVE);
 while (link) {
   if (pn_link_is_sender(link)) {
 pni_pump_out(messenger, pn_terminus_get_address(pn_
 link_target(link)),

 link);


 is it really fair to assume that target address is always expected to be
 non NULL?


 I've added a bit of debug code to pn_messenger_endpoints() so it reads:

link = pn_link_head(conn, PN_LOCAL_ACTIVE | PN_REMOTE_ACTIVE);
while (link) {
  if (pn_link_is_sender(link)) {
static int addrnull, addrok;
const char *address = pn_terminus_get_address(pn_**

 link_target(link));
if (!address) {
  addrnull++;
} else {
  addrok++;
}
fprintf(stderr, links with null address: %d links with ok address
 %d\n,
addrnull, addrok);
pni_pump_out(messenger, address, link);


 and I never see 'addrok' change from 0


 when pni_pump_out is called with address==NULL:

 int pni_pump_out(pn_messenger_t *messenger, const char *address,
 pn_link_t
 *sender)
 {
pni_entry_t *entry = pni_store_get(messenger-outgoing, address);

if (!entry) return 0;

 pni_store_get cheerfuly returns first message on the list


 end effect is that random clients start receiving messages not directed
 at
 them.


 For some inexplicable reason is mostly works out while there are just two
 clients
 connected to the messenger and we're not pushing it really hard. Still
 trying to come
 up with a simple test-case.

 Can anyone shed some light how the addressing on the link level is
 supposed to work in mesenger?

 Bozzo





Re: messenger store and links

2013-10-24 Thread Bozo Dragojevic

we don't have that commit yet. last merge from trunk was
PROTON-440: fix from hiram
git-svn-id: 
https://svn.apache.org/repos/asf/qpid/proton/trunk@1531508 
13f79535-47bb-0310-9956-ffa450edef68


maybe this trace of an unsuspecting client (recv) connecting to a broker 
in 'hosed' state can illustrate.


what happened before is this:
broker was started. a publisher and a slow subscriber are started, they 
publish approx 2000 messages.
when publisher is done it disconnects gracefully and the slow subscriber 
(living in a daemon thread) just dies.
Broker is left alone with approx 800 messages inside messenger's store. 
broker is unaware the messages exist, thinks all is well (until 
keepalive timeout kicks in).



$ PN_TRACE_FRM=1 ./recv amqp://127.0.0.1:8194 21 | head -200
Connected to 127.0.0.1:8194
- SASL
[0x7fd051814600:0] - @sasl-init(65) [mechanism=:ANONYMOUS, 
initial-response=b]

- SASL
[0x7fd051814600:0] - @sasl-mechanisms(64) 
[sasl-server-mechanisms=@PN_SYMBOL[:ANONYMOUS]]

[0x7fd051814600:0] - @sasl-outcome(68) [code=0]
- AMQP
[0x7fd05180e600:0] - @open(16) 
[container-id=8FC1DAF7-1783-41D7-A892-9CDC45BCAEA7]

- AMQP
[0x7fd05180e600:0] - @open(16) 
[container-id=CEF14E1A-4D53-44AE-A513-F82C489AEB63, hostname=127.0.0.1]
[0x7fd05180e600:0] - @begin(17) [next-outgoing-id=0, 
incoming-window=2147483647, outgoing-window=0]
[0x7fd05180e600:0] - @attach(18) [name=receiver-xxx, handle=0, 
role=true, snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) 
[durable=0, timeout=0, dynamic=false], target=@target(41) [durable=0, 
timeout=0, dynamic=false], initial-delivery-count=0]
[0x7fd05180e600:0] - @flow(19) [incoming-window=2147483647, 
next-outgoing-id=0, outgoing-window=0, handle=0, delivery-count=0, 
link-credit=1024, drain=false]
[0x7fd05180e600:0] - @begin(17) [remote-channel=0, next-outgoing-id=0, 
incoming-window=2147483647, outgoing-window=1]
[0x7fd05180e600:0] - @attach(18) [name=receiver-xxx, handle=0, 
role=false, snd-settle-mode=2, rcv-settle-mode=0, initial-delivery-count=0]
[0x7fd05180e600:0] - @transfer(20) [handle=0, delivery-id=0, 
delivery-tag=bw\x00\x00\x00\x00\x00\x00\x00, message-format=0, 
settled=true, more=false] (551) 
\x00Sp\xd0\x00\x00\x00\x0b\x00\x00\x00\x05BP\x04@BR\x00\x00Ss\xd0\x00\x00\x00z\x00\x00\x00\x0d@@\xa1+amqp://d80a10f2-5e82-4fa4-a3d1-03ff188bbffa@\xa1+amqp://8FC1DAF7-1783-41D7-A892-9CDC45BCAEA7@@@\x83\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xd0\x00\x00\x01\x8a\x00\x00\x00\x06q\x00\x00\x00\x04q\x00\x00\x00\x08`\x00\x01\xa1\x0d... 
(truncated)
[0x7fd05180e600:0] - @transfer(20) [handle=0, delivery-id=1, 
delivery-tag=bx\x00\x00\x00\x00\x00\x00\x00, message-format=0, 
settled=true, more=false] (551) 
\x00Sp\xd0\x00\x00\x00\x0b\x00\x00\x00\x05BP\x04@BR\x00\x00Ss\xd0\x00\x00\x00z\x00\x00\x00\x0d@@\xa1+amqp://d80a10f2-5e82-4fa4-a3d1-03ff188bbffa@\xa1+amqp://8FC1DAF7-1783-41D7-A892-9CDC45BCAEA7@@@\x83\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xd0\x00\x00\x01\x8a\x00\x00\x00\x06q\x00\x00\x00\x04q\x00\x00\x00\x08`\x00\x01\xa1\x0d... 
(truncated)
[0x7fd05180e600:0] - @transfer(20) [handle=0, delivery-id=2, 
delivery-tag=by\x00\x00\x00\x00\x00\x00\x00, message-format=0, 
settled=true, more=false] (551) 
\x00Sp\xd0\x00\x00\x00\x0b\x00\x00\x00\x05BP\x04@BR\x00\x00Ss\xd0\x00\x00\x00z\x00\x00\x00\x0d@@\xa1+amqp://d80a10f2-5e82-4fa4-a3d1-03ff188bbffa@\xa1+amqp://8FC1DAF7-1783-41D7-A892-9CDC45BCAEA7@@@\x83\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xd0\x00\x00\x01\x8a\x00\x00\x00\x06q\x00\x00\x00\x04q\x00\x00\x00\x08`\x00\x01\xa1\x0d... 
(truncated)

... lots more

Note the two addresses in the transfer frames.
The 'to' address is lowercase and distinct from either container-id in 
the open frames. This is the address of the already gone slow subscriber.
The 'reply_to' address is set and is from the broker, which is 
consistent with not having the change from PROTON-278


Below is the slice of the broker trace of the same thing. There is the 
extra printf from pn_messenger_endpoints before it calls pni_pump_out


Accepted from localhost:53480
- SASL
[0x7fbbc9846200:0] - @sasl-init(65) [mechanism=:ANONYMOUS, 
initial-response=b]
[0x7fbbc9846200:0] - @sasl-mechanisms(64) 
[sasl-server-mechanisms=@PN_SYMBOL[:ANONYMOUS]]

[0x7fbbc9846200:0] - @sasl-outcome(68) [code=0]
- SASL
- AMQP
[0x7fbbc9840c00:0] - @open(16) 
[container-id=8FC1DAF7-1783-41D7-A892-9CDC45BCAEA7]

- AMQP
[0x7fbbc9840c00:0] - @open(16) 
[container-id=CEF14E1A-4D53-44AE-A513-F82C489AEB63, hostname=127.0.0.1]
[0x7fbbc9840c00:0] - @begin(17) [next-outgoing-id=0, 
incoming-window=2147483647, outgoing-window=0]
[0x7fbbc9840c00:0] - @attach(18) [name=receiver-xxx, handle=0, 
role=true, snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) 
[durable=0, timeout=0, dynamic=false], target=@target(41) [durable=0, 
timeout=0, dynamic=false], initial-delivery-count=0]
[0x7fbbc9840c00:0] 

[jira] [Updated] (PROTON-290) Allow querying of unsent messages by tracker

2013-10-24 Thread Bozo Dragojevic (JIRA)

 [ 
https://issues.apache.org/jira/browse/PROTON-290?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bozo Dragojevic updated PROTON-290:
---

Attachment: 0001-PROTON-290-add-a-test-and-more-explicit-logic.patch

Here is a test for buffered() plus python binding update
and a fixed implementation

You'll need to remove all the prints I left in the patch.

reason is this: I find it odd that all 100 messages immediately get
a delivery! Is this really intended behavior?

if this is going to remain the case, either old or new logic had the same 
result



 Allow querying of unsent messages by tracker
 

 Key: PROTON-290
 URL: https://issues.apache.org/jira/browse/PROTON-290
 Project: Qpid Proton
  Issue Type: New Feature
Reporter: Bozo Dragojevic
Assignee: Rafael H. Schloming
 Fix For: 0.6

 Attachments: 
 0001-PROTON-290-add-a-test-and-more-explicit-logic.patch, 
 0001-PROTON-393-check-if-delivery-is-still-buffered-by-pr.patch


 messenger.status(tracker) returns PENDING until the message is either
 accepted or rejected by the recipient.
 Allow distinguishing between buffered locally and transmitted messages.



--
This message was sent by Atlassian JIRA
(v6.1#6144)