Curl reports errors on Julia 1.10
Curl seems to be reporting errors with message "Error: curl_multi_socket_action: 8" when I tried the current master on Julia 1.10.0. I haven't delved too much, but this seems to be related to task/thread scheduling (reported from Downloads.jl, when it gets this curl api error in an async callback). It did not cause any test failures... but not sure if it could lead to something in other scenarios so reporting it here. I do not know whether this is because of something that gRPCClient is doing or something in Downloads.jl. It also did not show up when I tested with Julia 1.8 and 1.9. That one will be good to track down though to avoid surprises.
cc: @StefanKarpinski @aviks
Copying relevant parts of the test output here:
(@v1.10) pkg> add [email protected]
Installing known registries into `~/.julia`
Updating registry at `~/.julia/registries/General.toml`
Resolving package versions...
Installed JLLWrappers ─ v1.5.0
Installed Preferences ─ v1.4.1
Installed protoc_jll ── v3.21.12+1
Installed ProtoBuf ──── v0.11.5
...
(@v1.10) pkg> add gRPCClient
Resolving package versions...
Installed gRPCClient ─ v0.1.4
Updating `~/.julia/environments/v1.10/Project.toml`
...
(@v1.10) pkg> test ProtoBuf
...
Test Summary: | Pass Total Time
ProtoBuf Tests | 21014 21014 2m07.1s
Testing ProtoBuf tests passed
(@v1.10) pkg> test gRPCClient
Testing gRPCClient
Status `/tmp/jl_gfbDNC/Project.toml`
⌅ [3349acd9] ProtoBuf v0.11.5
[aaca4a50] gRPCClient v0.1.4
[f43a241f] Downloads v1.6.0
[b27032c2] LibCURL v0.6.4
[9a3f8284] Random
[6462fe0b] Sockets
[8dfed614] Test
Status `/tmp/jl_gfbDNC/Manifest.toml`
[692b3bcd] JLLWrappers v1.5.0
...
[3f19e933] p7zip_jll v17.4.0+2
Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading.
Precompiling project...
1 dependency successfully precompiled in 2 seconds. 6 already precompiled.
Testing Running tests...
[ Info: server endpoint: http://localhost:10000/
┌ Info: Generating gRPC client
│ proto = "/root/.julia/packages/gRPCClient/vWycW/test/RouteguideClients/route_guide.proto"
└ outdir = "/root/.julia/packages/gRPCClient/vWycW/test/RouteguideClients"
┌ Info: Detected
│ package = "routeguide"
│ services =
│ 1-element Vector{String}:
│ "RouteGuide"
└ includes = String[]
┌ Warning: protoc() is deprecated, use the non-do-block form
│ caller = ip:0x0
└ @ Core :-1
┌ Info: Generated
└ outdir = "/root/.julia/packages/gRPCClient/vWycW/test/RouteguideClients"
┌ Info: starting test server
└ serverbin = "/root/.julia/packages/gRPCClient/vWycW/test/routeguide_linux_amd64"
[ Info: testing blocking client
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
[ Info: testing async client
[ Info: stopped test server
[ Info: server endpoint: http://localhost:10000/
┌ Info: Generating gRPC client
│ proto = "/root/.julia/packages/gRPCClient/vWycW/test/error_test_server/grpcerrors/grpcerrors.proto"
└ outdir = "/root/.julia/packages/gRPCClient/vWycW/test/GrpcerrorsClients"
┌ Info: Detected
│ package = "grpcerrors"
│ services =
│ 1-element Vector{String}:
│ "GRPCErrors"
└ includes = String[]
┌ Info: Generated
└ outdir = "/root/.julia/packages/gRPCClient/vWycW/test/GrpcerrorsClients"
[ Info: testing connect timeouts
┌ Info: starting test server
└ serverbin = "/root/.julia/packages/gRPCClient/vWycW/test/grpcerrors_linux_amd64"
[ Info: testing grpcerrors...
[ Info: testing blocking client
┌ Error: curl_multi_socket_action: 8
└ @ Downloads.Curl /usr/local/julia/share/julia/stdlib/v1.10/Downloads/src/Curl/utils.jl:57
[ Info: stopped test server
Test Summary: | Pass Total Time
gRPCClient | 61 61 58.1s
Testing gRPCClient tests passed
Error code 8 seems to be CURLE_WEIRD_SERVER_REPLY. However, since this doesn't happen on Julia 1.8/1.9, I guess this is an issue on the client?
This error is usually related to interrupts like ctrl-C.
I don't know if this is related but I reliably get the curl_multi_socket_action: 8 error with gRPCClient on Julia 1.10 when trying to write to remote server. I am not very knowledgeable on this stuff, and have tried to force @sync on the write to no avail. Unfortunately I can't easily generate a minimum reproducible example because the write goes through custom protobuf. Julia crashed with a segmentation fault following a string of these errors, which I can't definitively ascribe to them.