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

ASF GitHub Bot commented on DISPATCH-1878:
------------------------------------------

ChugR commented on a change in pull request #1129:
URL: https://github.com/apache/qpid-dispatch/pull/1129#discussion_r615051274



##########
File path: src/adaptors/tcp_adaptor.c
##########
@@ -288,18 +338,87 @@ static int handle_incoming_impl(qdr_tcp_connection_t 
*conn, bool close_pending)
         qd_message_set_q2_unblocked_handler(msg, qdr_tcp_q2_unblocked_handler, 
conn_sp);
 
         conn->instream = qdr_link_deliver(conn->incoming, msg, 0, false, 0, 0, 
0, 0);
-        qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, 
"[C%"PRIu64"][L%"PRIu64"] Initiating message with %i bytes", conn->conn_id, 
conn->incoming_id, count);
+        qd_log(log, QD_LOG_DEBUG,
+               "[C%"PRIu64"][L%"PRIu64"][D%"PRIu64"] Initiating ingress stream 
message with %u bytes",
+               conn->conn_id, conn->incoming_id, conn->instream->delivery_id, 
length);
+        conn->incoming_started = true;
+
+        // Handle deferment of write side close.
+        sys_mutex_lock(conn->activation_lock);
+        if (conn->read_eos_seen && !conn->raw_closed_write) {
+            // to-raw-conn EOS was seen before the from-raw-conn instream 
delivery existed.

Review comment:
       Because if the instream creation is too slow then close the raw 
connection becomes WRITE_CLOSED, then the server sends the response and closes 
it's connection, the raw connection becomes READ_CLOSED, and DISCONNECTED and 
everything is discarded.
   All this happens while waiting for the instream to come up and get credit.
   By deferring the write-close until the instream comes up then any server 
response has a place to go before the raw connection gets closed.
   On a single router test this condition would show up after maybe 500 or 3000 
successful tries. It was hard to track down, easy to fix.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Client app not getting a response through tcpListener
> -----------------------------------------------------
>
>                 Key: DISPATCH-1878
>                 URL: https://issues.apache.org/jira/browse/DISPATCH-1878
>             Project: Qpid Dispatch
>          Issue Type: Bug
>          Components: Protocol Adaptors
>    Affects Versions: 2.0.0
>            Reporter: Fernando Giorgetti
>            Assignee: Charles E. Rolke
>            Priority: Major
>         Attachments: D-1878 @e148c.svg, 
> DISPATCH-1878_fail-pn-raw-closed-before-ingress-stream-set-up.svg, 
> dispatch-1878-trace.html
>
>
> I have a tcp-echo server running locally through:
> podman run -d --rm --name tcpecho -p 9090:9090 quay.io/skupper/tcp-go-echo
> And I have a router configured with a tcpConnector to localhost at port 9090 
> and a tcpListener at port 9999.
> I am able to use nc (netcat) to send data to the tcp-echo directly (port 
> 9090) or through
> the router (port 9999), if I run "nc 127.0.0.1 9999" and the send the data.
> But if I run it as:  "echo abcd | nc 127.0.0.1 9999" I am not seeing a 
> response, but if 
> I use port 9090 (original port) instead of 9999 (router tcpListener), then I 
> get the
> response correctly.



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

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

Reply via email to