qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ken Giusti (Jira)" <j...@apache.org>
Subject [jira] [Commented] (PROTON-2189) proactor C client has abnormally long pauses during message send
Date Mon, 06 Apr 2020 13:24:00 GMT

    [ https://issues.apache.org/jira/browse/PROTON-2189?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17076338#comment-17076338
] 

Ken Giusti commented on PROTON-2189:
------------------------------------

Mick has designed a proactor client that can properly stream messages.  See his email to
the mailing list:

 

[http://qpid.2158936.n2.nabble.com/Re-jira-Created-PROTON-2189-proactor-C-client-has-abnormally-long-pauses-during-message-send-td7691016.html]

 

I've updated my proactor client as described and can confirm it now streams as I expected. 
Attached is the patch.

I'll leave it to the devs to decide if this is Not A Bug or a documentation/example gap.

[^0001-tweak-clogger-to-fix-streaming.patch]

 

> proactor C client has abnormally long pauses during message send
> ----------------------------------------------------------------
>
>                 Key: PROTON-2189
>                 URL: https://issues.apache.org/jira/browse/PROTON-2189
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: proton-c
>    Affects Versions: proton-c-0.30.0
>         Environment: To compile the clients install qpid-proton-c-devel and simply compile:
> gcc  -O2 -g -Wall -lqpid-proton -lm -o clogger clogger.c
> To reproduce my test, build qdrouterd and run it in the background.
> You need to have a consumer attached.  There is a test receiver client in the qdrouterd
build in <build-dir>/tests/test-receiver.  This receiver is designed to handle streaming
messages (by default sent to 'test-address')
> Run the consumer in the background then run each clogger (default params are fine).
> You should observe that clogger-reactor runs smoothly (use PN_TRACE_FRM=1 on qdrouterd
as well).
> You'll see clogger-reactor send the message header, then nothing for awhile, then send
the entire message. 
> Use "-D" for debug output to see how many bytes have been written to pn_link_send()
>            Reporter: Ken Giusti
>            Priority: Major
>         Attachments: 0001-tweak-clogger-to-fix-streaming.patch, clogger-proactor.c, clogger-reactor.c
>
>
> I have a proactor-based C test client that has the ability to slowly send extremely large
messages slowly.  This is done by sending 'chunks' of body data with pauses in between.
> This client was designed to test large streaming messages against qdrouterd.
> The behavior of this client is unexpected - I would expect the message data to appear
"on the wire" in bursts relatively quickly.  In reality the data is buffered - in some cases
over 1 GB is buffered - before it is written (as indicated by the lack @transfer frames dumped
by the client AND the qdrouterd).  In some cases it takes up to 30 seconds before the client's
data starts being written to the client.
> I've refactored the client to use reactor instead and the data flows as expected.  There
is minimal buffering and no abnormally long pauses.
> The clients are attached.
> It is quite likely the proactor client is incorrectly implemented, but I used the qdrouterd
I/O loop as the model and cannot see what may be wrong.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Mime
View raw message