Humans-of-Julia / HoJBot.jl

Yay, our own Discord bot!
MIT License
22 stars 11 forks source link

Unable to recover after DNSError: discordapp.com #122

Open tk3369 opened 2 years ago

tk3369 commented 2 years ago

After DNSError: discordapp.com, temporary failure (EAI_AGAIN), heartbeat stopped and not able to recover.

┌ Info: Reconnecting
│   time = 2022-01-08T22:44:16.287
│   conn = 36
│   resume = true
└   zombie = true
┌ Error: Getting gateway URL failed
│   time = 2022-01-08T22:45:14.578
│   exception =
│    DNSError: discordapp.com, temporary failure (EAI_AGAIN)
│    Stacktrace:
│      [1] getalladdrinfo(host::String)
│        @ Sockets /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Sockets/src/addrinfo.jl:113
│      [2] getalladdrinfo
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Sockets/src/addrinfo.jl:122 [inlined]
│      [3] getconnection(::Type{Sockets.TCPSocket}, host::SubString{String}, port::String; keepalive::Bool, connect_timeout::Int64, readtimeout::Int64, kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol, Symbol}, NamedTuple{(:require_ssl_verification, :iofunction, :reached_redirect_limit), Tuple{Bool, Nothing, Bool}}})
│        @ HTTP.ConnectionPool ~/.julia/packages/HTTP/4AvE2/src/ConnectionPool.jl:659
│      [4] #getconnection#29
│        @ ~/.julia/packages/HTTP/4AvE2/src/ConnectionPool.jl:728 [inlined]
│      [5] newconnection(pod::HTTP.ConnectionPool.Pod, T::Type, host::SubString{String}, port::SubString{String}, pipeline_limit::Int64, require_ssl_verification::Bool, idle_timeout::Int64; kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ HTTP.ConnectionPool ~/.julia/packages/HTTP/4AvE2/src/ConnectionPool.jl:626
│      [6] getconnection(::Type{HTTP.ConnectionPool.Transaction{MbedTLS.SSLContext}}, host::SubString{String}, port::SubString{String}; connection_limit::Int64, pipeline_limit::Int64, idle_timeout::Int64, reuse_limit::Int64, require_ssl_verification::Bool, kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ HTTP.ConnectionPool ~/.julia/packages/HTTP/4AvE2/src/ConnectionPool.jl:570
│      [7] request(::Type{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}, url::URIs.URI, req::HTTP.Messages.Request, body::Vector{UInt8}; proxy::Nothing, socket_type::Type, reuse_limit::Int64, kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ HTTP.ConnectionRequest ~/.julia/packages/HTTP/4AvE2/src/ConnectionRequest.jl:85
│      [8] request(::Type{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}, ::URIs.URI, ::Vararg{Any, N} where N; kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ HTTP.ExceptionRequest ~/.julia/packages/HTTP/4AvE2/src/ExceptionRequest.jl:19
│      [9] (::Base.var"#70#72"{Base.var"#70#71#73"{ExponentialBackOff, HTTP.RetryRequest.var"#2#3"{Bool, HTTP.Messages.Request}, typeof(HTTP.request)}})(::Type, ::Vararg{Any, N} where N; kwargs::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ Base ./error.jl:301
│     [10] #request#1
│        @ ~/.julia/packages/HTTP/4AvE2/src/RetryRequest.jl:44 [inlined]
│     [11] request(::Type{HTTP.MessageRequest.MessageLayer{HTTP.RetryRequest.RetryLayer{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}}}, method::String, url::URIs.URI, headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8}; http_version::VersionNumber, target::String, parent::Nothing, iofunction::Nothing, kw::Base.Iterators.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:reached_redirect_limit,), Tuple{Bool}}})
│        @ HTTP.MessageRequest ~/.julia/packages/HTTP/4AvE2/src/MessageRequest.jl:66
│     [12] request(::Type{HTTP.BasicAuthRequest.BasicAuthLayer{HTTP.MessageRequest.MessageLayer{HTTP.RetryRequest.RetryLayer{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}}}}, method::String, url::URIs.URI, headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8}; kw::Base.Iterators.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:reached_redirect_limit,), Tuple{Bool}}})
│        @ HTTP.BasicAuthRequest ~/.julia/packages/HTTP/4AvE2/src/BasicAuthRequest.jl:28
│     [13] request(::Type{HTTP.RedirectRequest.RedirectLayer{HTTP.BasicAuthRequest.BasicAuthLayer{HTTP.MessageRequest.MessageLayer{HTTP.RetryRequest.RetryLayer{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}}}}}, method::String, url::URIs.URI, headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8}; redirect_limit::Int64, forwardheaders::Bool, kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ HTTP.RedirectRequest ~/.julia/packages/HTTP/4AvE2/src/RedirectRequest.jl:28
│     [14] request(::Type{HTTP.RedirectRequest.RedirectLayer{HTTP.BasicAuthRequest.BasicAuthLayer{HTTP.MessageRequest.MessageLayer{HTTP.RetryRequest.RetryLayer{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}}}}}, method::String, url::URIs.URI, headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8})
│        @ HTTP.RedirectRequest ~/.julia/packages/HTTP/4AvE2/src/RedirectRequest.jl:21
│     [15] request(method::String, url::String, h::Vector{Pair{SubString{String}, SubString{String}}}, b::Vector{UInt8}; headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8}, query::Nothing, kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ HTTP ~/.julia/packages/HTTP/4AvE2/src/HTTP.jl:330
│     [16] request (repeats 2 times)
│        @ ~/.julia/packages/HTTP/4AvE2/src/HTTP.jl:330 [inlined]
│     [17] #get#17
│        @ ~/.julia/packages/HTTP/4AvE2/src/HTTP.jl:407 [inlined]
│     [18] get
│        @ ~/.julia/packages/HTTP/4AvE2/src/HTTP.jl:407 [inlined]
│     [19] open(c::Discord.Client; resume::Bool, delay::Second)
│        @ Discord ~/.julia/packages/Discord/AlPjh/src/gateway/gateway.jl:48
│     [20] reconnect(c::Discord.Client, ::Dict{Any, Any}; resume::Bool, zombie::Bool)
│        @ Discord ~/.julia/packages/Discord/AlPjh/src/gateway/gateway.jl:374
│     [21] heartbeat_loop(c::Discord.Client)
│        @ Discord ~/.julia/packages/Discord/AlPjh/src/gateway/gateway.jl:262
│     [22] (::Discord.var"#697#699"{Discord.Client})()
│        @ Discord ./task.jl:411
└ @ Discord ~/.julia/packages/Discord/AlPjh/src/gateway/gateway.jl:51
┌ Warning: Heartbeat loop exited unexpectedly
│   time = 2022-01-08T22:45:14.830
│   conn = 36
│   exception =
│    DNSError: discordapp.com, temporary failure (EAI_AGAIN)
│    Stacktrace:
│      [1] getalladdrinfo(host::String)
│        @ Sockets /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Sockets/src/addrinfo.jl:113
│      [2] getalladdrinfo
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Sockets/src/addrinfo.jl:122 [inlined]
│      [3] getconnection(::Type{Sockets.TCPSocket}, host::SubString{String}, port::String; keepalive::Bool, connect_timeout::Int64, readtimeout::Int64, kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol, Symbol}, NamedTuple{(:require_ssl_verification, :iofunction, :reached_redirect_limit), Tuple{Bool, Nothing, Bool}}})
│        @ HTTP.ConnectionPool ~/.julia/packages/HTTP/4AvE2/src/ConnectionPool.jl:659
│      [4] #getconnection#29
│        @ ~/.julia/packages/HTTP/4AvE2/src/ConnectionPool.jl:728 [inlined]
│      [5] newconnection(pod::HTTP.ConnectionPool.Pod, T::Type, host::SubString{String}, port::SubString{String}, pipeline_limit::Int64, require_ssl_verification::Bool, idle_timeout::Int64; kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ HTTP.ConnectionPool ~/.julia/packages/HTTP/4AvE2/src/ConnectionPool.jl:626
│      [6] getconnection(::Type{HTTP.ConnectionPool.Transaction{MbedTLS.SSLContext}}, host::SubString{String}, port::SubString{String}; connection_limit::Int64, pipeline_limit::Int64, idle_timeout::Int64, reuse_limit::Int64, require_ssl_verification::Bool, kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ HTTP.ConnectionPool ~/.julia/packages/HTTP/4AvE2/src/ConnectionPool.jl:570
│      [7] request(::Type{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}, url::URIs.URI, req::HTTP.Messages.Request, body::Vector{UInt8}; proxy::Nothing, socket_type::Type, reuse_limit::Int64, kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ HTTP.ConnectionRequest ~/.julia/packages/HTTP/4AvE2/src/ConnectionRequest.jl:85
│      [8] request(::Type{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}, ::URIs.URI, ::Vararg{Any, N} where N; kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ HTTP.ExceptionRequest ~/.julia/packages/HTTP/4AvE2/src/ExceptionRequest.jl:19
│      [9] (::Base.var"#70#72"{Base.var"#70#71#73"{ExponentialBackOff, HTTP.RetryRequest.var"#2#3"{Bool, HTTP.Messages.Request}, typeof(HTTP.request)}})(::Type, ::Vararg{Any, N} where N; kwargs::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, Tuple{Symbol, Symbol}, NamedTuple{(:iofunction, :reached_redirect_limit), Tuple{Nothing, Bool}}})
│        @ Base ./error.jl:301
│     [10] #request#1
│        @ ~/.julia/packages/HTTP/4AvE2/src/RetryRequest.jl:44 [inlined]
│     [11] request(::Type{HTTP.MessageRequest.MessageLayer{HTTP.RetryRequest.RetryLayer{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}}}, method::String, url::URIs.URI, headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8}; http_version::VersionNumber, target::String, parent::Nothing, iofunction::Nothing, kw::Base.Iterators.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:reached_redirect_limit,), Tuple{Bool}}})
│        @ HTTP.MessageRequest ~/.julia/packages/HTTP/4AvE2/src/MessageRequest.jl:66
│     [12] request(::Type{HTTP.BasicAuthRequest.BasicAuthLayer{HTTP.MessageRequest.MessageLayer{HTTP.RetryRequest.RetryLayer{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}}}}, method::String, url::URIs.URI, headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8}; kw::Base.Iterators.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:reached_redirect_limit,), Tuple{Bool}}})
│        @ HTTP.BasicAuthRequest ~/.julia/packages/HTTP/4AvE2/src/BasicAuthRequest.jl:28
│     [13] request(::Type{HTTP.RedirectRequest.RedirectLayer{HTTP.BasicAuthRequest.BasicAuthLayer{HTTP.MessageRequest.MessageLayer{HTTP.RetryRequest.RetryLayer{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}}}}}, method::String, url::URIs.URI, headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8}; redirect_limit::Int64, forwardheaders::Bool, kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ HTTP.RedirectRequest ~/.julia/packages/HTTP/4AvE2/src/RedirectRequest.jl:28
│     [14] request(::Type{HTTP.RedirectRequest.RedirectLayer{HTTP.BasicAuthRequest.BasicAuthLayer{HTTP.MessageRequest.MessageLayer{HTTP.RetryRequest.RetryLayer{HTTP.ExceptionRequest.ExceptionLayer{HTTP.ConnectionRequest.ConnectionPoolLayer{HTTP.StreamRequest.StreamLayer{Union{}}}}}}}}}, method::String, url::URIs.URI, headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8})
│        @ HTTP.RedirectRequest ~/.julia/packages/HTTP/4AvE2/src/RedirectRequest.jl:21
│     [15] request(method::String, url::String, h::Vector{Pair{SubString{String}, SubString{String}}}, b::Vector{UInt8}; headers::Vector{Pair{SubString{String}, SubString{String}}}, body::Vector{UInt8}, query::Nothing, kw::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
│        @ HTTP ~/.julia/packages/HTTP/4AvE2/src/HTTP.jl:330
│     [16] request (repeats 2 times)
│        @ ~/.julia/packages/HTTP/4AvE2/src/HTTP.jl:330 [inlined]
│     [17] #get#17
│        @ ~/.julia/packages/HTTP/4AvE2/src/HTTP.jl:407 [inlined]
│     [18] get
│        @ ~/.julia/packages/HTTP/4AvE2/src/HTTP.jl:407 [inlined]
│     [19] open(c::Discord.Client; resume::Bool, delay::Second)
│        @ Discord ~/.julia/packages/Discord/AlPjh/src/gateway/gateway.jl:48
│     [20] reconnect(c::Discord.Client, ::Dict{Any, Any}; resume::Bool, zombie::Bool)
│        @ Discord ~/.julia/packages/Discord/AlPjh/src/gateway/gateway.jl:374
│     [21] heartbeat_loop(c::Discord.Client)
│        @ Discord ~/.julia/packages/Discord/AlPjh/src/gateway/gateway.jl:262
│     [22] (::Discord.var"#697#699"{Discord.Client})()
│        @ Discord ./task.jl:411
└ @ Discord ~/.julia/packages/Discord/AlPjh/src/gateway/gateway.jl:270
tk3369 commented 2 years ago

Happened again. See https://gist.github.com/tk3369/08b2a7dd7150a6330513aaf4c320b930

xxxAnn commented 2 years ago

Discord's domain is discord.com, not discordapp.com. This might be the reason.