slack-ruby / slack-ruby-client

A Ruby and command-line client for the Slack Web, Real Time Messaging and Event APIs.
MIT License
1.2k stars 215 forks source link

[ERROR] name=cloudwalk, domain=cloudwalk#run_callbacks: Broken pipe (Errno::EPIPE) #343

Open kumarsukhani opened 4 years ago

kumarsukhani commented 4 years ago

Many times I am getting Broken pipe error because of which the msg sent by the server is not received in Slack channel. How can I fix this issue?

Stack Trace:

 /opt/ruby/lib/ruby/2.5.0/openssl/buffering.rb:388:in `syswrite_nonblock' 
 /opt/ruby/lib/ruby/2.5.0/openssl/buffering.rb:388:in `write_nonblock' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/async-io-1.30.0/lib/async/io/generic.rb:216:in `async_send' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/async-io-1.30.0/lib/async/io/generic.rb:62:in `block in wrap_blocking_method' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/async-io-1.30.0/lib/async/io/generic.rb:156:in `write' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/async-websocket-0.8.0/lib/async/websocket/connection.rb:93:in `write' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver/hybi.rb:223:in `send_frame' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver/hybi.rb:186:in `frame' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver.rb:122:in `text' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/socket.rb:21:in `send_data' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/client.rb:213:in `send_json' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/api/message.rb:17:in `message' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/client.rb:62:in `say' 
 /workspace/slack-staging/bot.rb:67:in `block in toggle_heroku' 
 /workspace/slack-staging/bot.rb:55:in `each' 
 /workspace/slack-staging/bot.rb:55:in `with_index' 
 /workspace/slack-staging/bot.rb:55:in `toggle_heroku' 
 /workspace/slack-staging/commands/paas.rb:22:in `perform' 
 /workspace/slack-staging/commands/paas.rb:12:in `block in <class:PaaS>' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/commands/base.rb:102:in `call_command' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/commands/base.rb:67:in `block in invoke' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/commands/base.rb:42:in `each_pair' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/commands/base.rb:42:in `invoke' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/hooks/message.rb:12:in `block in call' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/hooks/message.rb:12:in `each' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/hooks/message.rb:12:in `detect' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/hooks/message.rb:12:in `call' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/hooks/set.rb:35:in `block (2 levels) in register_callback' 
 /opt/ruby/lib/ruby/2.5.0/set.rb:338:in `each_key' 
 /opt/ruby/lib/ruby/2.5.0/set.rb:338:in `each' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-bot-0.16.0/lib/slack-ruby-bot/hooks/set.rb:34:in `block in register_callback' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/client.rb:270:in `block in run_callbacks' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/client.rb:269:in `each' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/client.rb:269:in `run_callbacks' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/client.rb:247:in `dispatch' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/client.rb:93:in `block (2 levels) in run_loop' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver/event_emitter.rb:39:in `block in emit' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver/event_emitter.rb:38:in `each' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver/event_emitter.rb:38:in `emit' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver/hybi.rb:404:in `emit_message' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver/hybi.rb:387:in `emit_frame' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver/hybi.rb:118:in `parse' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/websocket-driver-0.7.3/lib/websocket/driver/client.rb:63:in `parse' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/async-websocket-0.8.0/lib/async/websocket/connection.rb:63:in `next_event' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/concurrency/async.rb:102:in `run_loop' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/concurrency/async.rb:78:in `connect!' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/client.rb:84:in `run_loop' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/slack-ruby-client-0.15.1/lib/slack/real_time/concurrency/async.rb:50:in `block (2 levels) in start_reactor' 
 /layers/google.ruby.bundle/gems/.bundle/gems/ruby/2.5.0/gems/async-1.26.2/lib/async/task.rb:258:in `block in make_fiber' 
 E, [2020-09-04T09:58:11.045696 #15] ERROR -- #<Async::Task:0x14dceab1a400 connected to #<Addrinfo: 18.229.250.79:443 TCP (cerberus-xxxx.lb.slack-msgs.com)> [fd=21] (running)>: SSL_write: bad length 
 W, [2020-09-04T09:58:11.045821 #15]  WARN -- id=T02RAEMPK, name=cloudwalk, domain=cloudwalk: is offline 
 D, [2020-09-04T09:58:11.045852 #15] DEBUG -- : id=T02RAEMPK, name=cloudwalk, domain=cloudwalk#restart_async 
 D, [2020-09-04T09:58:11.045923 #15] DEBUG -- id=T02RAEMPK, name=cloudwalk, domain=cloudwalk#run_loop: NilClass 
 I, [2020-09-04T09:58:11.046312 #15]  INFO -- request: POST https://slack.com/api/rtm.start 
 I, [2020-09-04T09:58:11.046368 #15]  INFO -- request: Accept: "application/json; charset=utf-8" 
 User-Agent: "Slack Ruby Client/0.15.1" 
 Content-Type: "application/x-www-form-urlencoded" 
 I, [2020-09-04T09:58:11.752609 #15]  INFO -- response: Status 200 
 I, [2020-09-04T09:58:11.752747 #15]  INFO -- response: date: "Fri, 04 Sep 2020 09:58:11 GMT" 
 server: "Apache" 
 x-slack-req-id: "c415261f8e009a957c068e07b49161ab" 
 x-oauth-scopes: "identify,bot:basic" 
 x-accepted-oauth-scopes: "rtm:stream,client" 
 access-control-expose-headers: "x-slack-req-id, retry-after" 
 x-slack-backend: "r" 
 x-content-type-options: "nosniff" 
 expires: "Mon, 26 Jul 1997 05:00:00 GMT" 
 cache-control: "private, no-cache, no-store, must-revalidate" 
 x-xss-protection: "0" 
 vary: "Accept-Encoding" 
 pragma: "no-cache" 
 access-control-allow-headers: "slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, x-b3-flags" 
 strict-transport-security: "max-age=31536000; includeSubDomains; preload" 
 referrer-policy: "no-referrer" 
 access-control-allow-origin: "*" 
 transfer-encoding: "chunked" 
 content-type: "application/json; charset=utf-8" 
 x-via: "haproxy-www-i59g,haproxy-edge-gru-4s5b" 
dblock commented 4 years ago

That's generally a broken RTM connection. You could start by replacing say with a chat_postMessage to see if that helps?

kumarsukhani commented 4 years ago

@dblock : Thanks. It worked :) Sorry I am using slack-ruby-bot project. Should I move this issue on that project?

dblock commented 4 years ago

ove

Sure. I don't think it's a bug though or not sure what we should do with it. The RTM connection is not 100% reliable, and just like with any connection, it's on the client to retry in case of failure or for us to build retry into the client.