falcon icon indicating copy to clipboard operation
falcon copied to clipboard

Graceful application restart

Open ioquatix opened this issue 5 years ago • 0 comments

7.57s    error: Falcon::Middleware::Proxy [oid=0x2b28b1031560] [pid=324885] [2020-04-21 00:41:19 +0000]
              |   Errno::ECONNREFUSED: Connection refused - connect(2) for /srv/http/www.codeotaku.com/application.ipc
              |   → /usr/lib/ruby/2.6.0/socket.rb:1213 in `__connect_nonblock'
              |     /usr/lib/ruby/2.6.0/socket.rb:1213 in `connect_nonblock'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/generic.rb:216 in `async_send'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/socket.rb:52 in `connect'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/socket.rb:135 in `connect'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/address_endpoint.rb:51 in `connect'
              |     /usr/lib/ruby/gems/2.6.0/gems/falcon-0.36.3/lib/falcon/proxy_endpoint.rb:52 in `connect'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/client.rb:157 in `block in make_pool'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:181 in `create_resource'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:210 in `block in available_resource'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-1.24.2/lib/async/semaphore.rb:80 in `acquire'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:191 in `available_resource'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:166 in `wait_for_resource'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:76 in `acquire'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/client.rb:104 in `call'
              |     /usr/lib/ruby/gems/2.6.0/gems/falcon-0.36.3/lib/falcon/middleware/proxy.rb:135 in `call'
              |     /usr/lib/ruby/gems/2.6.0/gems/protocol-http-0.18.0/lib/protocol/http/middleware.rb:50 in `call'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/server.rb:64 in `block in accept'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/protocol/http1/server.rb:62 in `each'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/server.rb:53 in `accept'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/server.rb:32 in `block in accept_each'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/ssl_socket.rb:147 in `block in accept'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-1.24.2/lib/async/task.rb:258 in `block in make_fiber'
7.89s    error: Async::Task [oid=0x2b28b1055604] [pid=324885] [2020-04-21 00:41:20 +0000]
              |   Errno::ECONNRESET: Connection reset by peer
              |   → /usr/lib/ruby/2.6.0/openssl/buffering.rb:182 in `sysread_nonblock'
              |     /usr/lib/ruby/2.6.0/openssl/buffering.rb:182 in `read_nonblock'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/generic.rb:216 in `async_send'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/generic.rb:69 in `block in wrap_blocking_method'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/stream.rb:261 in `fill_read_buffer'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/stream.rb:83 in `read'
              |     /usr/lib/ruby/gems/2.6.0/gems/protocol-http2-0.14.0/lib/protocol/http2/framer.rb:73 in `read_connection_preface'
              |     /usr/lib/ruby/gems/2.6.0/gems/protocol-http2-0.14.0/lib/protocol/http2/server.rb:44 in `read_connection_preface'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/protocol/http2.rb:70 in `server'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/protocol/https.rb:76 in `server'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/server.rb:49 in `accept'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/server.rb:32 in `block in accept_each'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/ssl_socket.rb:147 in `block in accept'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-1.24.2/lib/async/task.rb:258 in `block in make_fiber'
9.06s    error: Falcon::Middleware::Proxy [oid=0x2b28b1031560] [pid=324885] [2020-04-21 00:41:21 +0000]
              |   Errno::ECONNREFUSED: Connection refused - connect(2) for /srv/http/www.codeotaku.com/application.ipc
              |   → /usr/lib/ruby/2.6.0/socket.rb:1213 in `__connect_nonblock'
              |     /usr/lib/ruby/2.6.0/socket.rb:1213 in `connect_nonblock'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/generic.rb:216 in `async_send'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/socket.rb:52 in `connect'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/socket.rb:135 in `connect'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-io-1.28.0/lib/async/io/address_endpoint.rb:51 in `connect'
              |     /usr/lib/ruby/gems/2.6.0/gems/falcon-0.36.3/lib/falcon/proxy_endpoint.rb:52 in `connect'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/client.rb:157 in `block in make_pool'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:181 in `create_resource'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:210 in `block in available_resource'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-1.24.2/lib/async/semaphore.rb:80 in `acquire'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:191 in `available_resource'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:166 in `wait_for_resource'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-pool-0.2.0/lib/async/pool/controller.rb:76 in `acquire'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/client.rb:104 in `call'
              |     /usr/lib/ruby/gems/2.6.0/gems/falcon-0.36.3/lib/falcon/middleware/proxy.rb:135 in `call'
              |     /usr/lib/ruby/gems/2.6.0/gems/protocol-http-0.18.0/lib/protocol/http/middleware.rb:50 in `call'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/server.rb:64 in `block in accept'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-http-0.51.6/lib/async/http/protocol/http2/server.rb:74 in `block in each'
              |     /usr/lib/ruby/gems/2.6.0/gems/async-1.24.2/lib/async/task.rb:258 in `block in make_fiber'

When restarting an application, it can be unavailable for a short time.

Here are some example errors.

There are a couple of options:

  • Adding a front-end cache to avoid this.
  • Presenting a "Please wait a moment" page to the user.
  • Waiting with a short timeout.

ioquatix avatar Apr 21 '20 02:04 ioquatix