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

Jens Geyer resolved THRIFT-6375.
--------------------------------
    Fix Version/s: 0.26.0
         Assignee: Jens Geyer
       Resolution: Fixed

> netstd tutorial client runs all -mc clients over one shared transport and 
> protocol
> ----------------------------------------------------------------------------------
>
>                 Key: THRIFT-6375
>                 URL: https://issues.apache.org/jira/browse/THRIFT-6375
>             Project: Thrift
>          Issue Type: Bug
>          Components: netstd - Library, Tutorial
>    Affects Versions: 0.24.0
>            Reporter: Jens Geyer
>            Assignee: Jens Geyer
>            Priority: Minor
>             Fix For: 0.26.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> With {{\-mc:<n>}} the netstd tutorial client is meant to run _n_ clients 
> against the server; the tutorial README's sample is {{Client \-tr:tcp 
> \-pr:binary \-mc:10}}. With more than one client, none of them completes its 
> calls. {{RunAsync()}} 
> ([Client/Program.cs:125-140|https://github.com/apache/thrift/blob/bcdf956895aeac5411ce3029ab8b33901b7c7a36/tutorial/netstd/Client/Program.cs#L125-L140])
>  creates one transport and one protocol and hands that same protocol to every 
> {{RunClientAsync()}} task. All clients then write to, read from and finally 
> close the one transport at the same time, through one shared protocol 
> instance.
> ||Client||Runs||Result||
> |{{\-tr:tcp \-mc:1}}|1|all calls complete|
> |{{\-tr:tcp \-mc:2}}|1|both clients fail: "Cannot read, Remote side has 
> closed"|
> |{{\-tr:tcp \-mc:5}}|3|no client completes. One run hung until it was killed 
> after 60 s. The others failed with "Cannot read, Remote side has closed", or 
> with "MaxMessageSize reached" and {{IOException}}s from cancelled reads.|
> |{{\-tr:tcp \-mc:10}}|2|all 10 clients fail: "Cannot read, Remote side has 
> closed"|
> |{{\-tr:http \-mc:5}}|3|no client completes: four fail with "Sent 0 request 
> content bytes, but Content-Length promised 17." and one with "The operation 
> was canceled."|
> The server ran with the same {{\-tr}} value. For HTTP it needed the one-line 
> fix from THRIFT-6374, because the tutorial's HTTP server does not start as it 
> is. Apart from the hung run, the client exits with 0 every time, because 
> {{RunClientAsync()}} logs the exception and returns.
> Checked on master (bcdf956) with the .NET 10.0.401 SDK, server and client in 
> one container, binary protocol. The tutorial code is the same on master, 
> release/0.25.0 and release/0.24.0.
> Commit 0d12832d ("misc. netstd improvements", 2021) replaced the per-client 
> arrays of transports and protocols with this single pair. Creating a 
> transport and a protocol for each client inside the loop again fixes it: with 
> that change every client completes, with {{\-tr:tcp \-mc:10}} (2 runs) as 
> well as with {{\-tr:http}} at {{\-mc:5}} and {{\-mc:10}}.
> _Drafted with AI assistance (Claude Opus 5.5)._



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to