yahns Ruby server user/dev discussion
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [ANN] yahns 1.16.0 -_- sleepy app server for Ruby
@ 2018-08-06  1:32  4% Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2018-08-06  1:32 UTC (permalink / raw)
  To: ruby-talk, yahns-public

A Free Software, multi-threaded, non-blocking network
application server designed for low _idle_ power consumption.
It is primarily optimized for applications with occasional users
which see little or no traffic.  yahns currently hosts Rack/HTTP
applications, but may eventually support other application
types.  Unlike some existing servers, yahns is extremely
sensitive to fatal bugs in the applications it hosts.

* git clone https://yhbt.net/yahns.git
* https://yhbt.net/yahns/README
* https://yhbt.net/yahns/NEWS.atom.xml (supported by most "RSS" readers)
* we only accept plain-text email yahns-public@yhbt.net
* and archive all the mail we receive: https://yhbt.net/yahns-public/
* nntp://news.public-inbox.org/inbox.comp.lang.ruby.yahns

lrg nabgure ubeevoyl-anzrq freire :>

Changes:

    yahns 1.16.0

    This release fixes warnings for users combining Rack::Deflater
    with HTTPS support:
        https://yhbt.net/yahns-public/20180714005630.11812-1-e@80x24.org/

    yahns-rackup(1) users may not specify "-O listen=inherit"
    when spawning from systemd.  The "listen" directive may
    be omitted entirely from the yahns-config(5) files.

    A few other cleanups and nothing interesting, otherwise.

    20 yawn-worthy changes since v1.15.0 (2017-03-23):
          config: more descriptive variable name
          proxy_pass: comment explaining what rack.hijack calls
          USR2 upgrades may use Process.spawn for vfork
          avoid Thread#[] and Thread#[]= across threads
          gemspec: declare Ruby 2.0+ dependency, here
          test_bin: SO_KEEPALIVE value only needs to be true
          rackup_handler: remove unnecessary branch
          test_bin: use RbConfig.ruby for non-standard names
          allow omitting specifying socket name when inheriting listen socket
          server: fix incomplete comment about SSLContext#setup
          test_rack_env: additional test for Rack environment
          test: allow setting TAIL env to watch error logs
          fix some unused variables
          tests: thread-safety fixes
          test/server_helper: describe reason for termination
          test/test_ssl: set SSLContext#security_level=0
          doc: https:// URLs instead of git://
          http_client: clear backtrace on "wrong version number" in OpenSSL
          openssl_client: do not attempt writes after SystemCallError
          use IO#pread if available in Ruby 2.5

    *ZZZZZZ*

Please note the disclaimer:

  yahns is extremely sensitive to fatal bugs in the apps it hosts.  There
  is no (and never will be) any built-in "watchdog"-type feature to kill
  stuck processes/threads.  Each yahns process may be handling thousands
  of clients; unexpectedly killing the process will abort _all_ of those
  connections.  Lives may be lost!

  yahns hackers are not responsible for your application/library bugs.
  Use an application server which is tolerant of buggy applications
  if you cannot be bothered to fix all your fatal bugs.

^ permalink raw reply	[relevance 4%]

* [PATCH] USR2 upgrades may use Process.spawn for vfork
@ 2017-03-27 20:59  7% Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2017-03-27 20:59 UTC (permalink / raw)
  To: yahns-public

Remove false statements about close-on-exec being cleared in the
parent process (verified via strace) and refactor the code to
take full advantage of options for Process.spawn and Process.exec.

This avoids unnecessary CoW traffic for the common case where
before_exec is unset.
---
 lib/yahns/server.rb | 33 ++++++++++++++++-----------------
 1 file changed, 16 insertions(+), 17 deletions(-)

diff --git a/lib/yahns/server.rb b/lib/yahns/server.rb
index 861b919..43caae6 100644
--- a/lib/yahns/server.rb
+++ b/lib/yahns/server.rb
@@ -237,24 +237,23 @@ def reexec
       end
     end
 
-    # We cannot use Process.spawn here because of redirects + close-on-exec
-    # We must keep close_on_exec=true in the parent process and only set
-    # close_on_exec=false in the child.  There must be no opportunity
-    # for the user app to ever get a listen socket with close_on_exec=false
-    @reexec_pid = fork do
-      redirects = {}
-      @listeners.each do |sock|
-        sock.close_on_exec = false
-        redirects[sock.fileno] = sock
+    opt = {}
+    @listeners.each { |sock| opt[sock.fileno] = sock }
+    env = ENV.to_hash
+    env['YAHNS_FD'] = opt.keys.join(',')
+    opt[:close_others] = true
+    cmd = [ Yahns::START[0] ].concat(Yahns::START[:argv])
+    dir = @config.value(:working_directory) || Yahns::START[:cwd]
+    @logger.info "spawning #{cmd.inspect} (in #{dir})"
+    @reexec_pid = if @before_exec
+      fork do
+        Dir.chdir(dir)
+        @before_exec.call(cmd)
+        exec(env, *cmd, opt)
       end
-      ENV['YAHNS_FD'] = redirects.keys.join(',')
-      redirects[:close_others] = true
-      Dir.chdir(@config.value(:working_directory) || Yahns::START[:cwd])
-      cmd = [ Yahns::START[0] ].concat(Yahns::START[:argv])
-      @logger.info "executing #{cmd.inspect} (in #{Dir.pwd})"
-      @before_exec.call(cmd) if @before_exec
-      cmd << redirects
-      exec(*cmd)
+    else
+      opt[:chdir] = dir
+      spawn(env, *cmd, opt)
     end
   end
 
-- 
EW


^ permalink raw reply related	[relevance 7%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2017-03-27 20:59  7% [PATCH] USR2 upgrades may use Process.spawn for vfork Eric Wong
2018-08-06  1:32  4% [ANN] yahns 1.16.0 -_- sleepy app server for Ruby Eric Wong

Code repositories for project(s) associated with this public inbox

	https://yhbt.net/yahns.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).