[ruby-cvs:70106] nagachika:r63012 (ruby_2_4): merge revision(s) 60584, 62954, 62955, 62956, 62957, 62958, 62959, 63008:

nagachika at ruby-lang.org nagachika at ruby-lang.org
Wed Mar 28 22:54:58 JST 2018


nagachika	2018-03-28 22:54:58 +0900 (Wed, 28 Mar 2018)

  New Revision: 63012

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=63012

  Log:
    merge revision(s) 60584,62954,62955,62956,62957,62958,62959,63008:
    
    webrick: support Proc objects as body responses
    
    * lib/webrick/httpresponse.rb (send_body): call send_body_proc
      (send_body_proc): new method
      (class ChunkedWrapper): new class
    
    * test/webrick/test_httpresponse.rb (test_send_body_proc): new test
      (test_send_body_proc_chunked): ditto
      [Feature #855]
    
    webrick/httpresponse: IO.copy_stream for regular files
    
    Remove the redundant _send_file method since its functionality
    is unnecessary with IO.copy_stream.  IO.copy_stream also allows
    the use of sendfile under some OSes to speed up copies to
    non-TLS sockets.
    
    Testing with "curl >/dev/null" and "ruby -run -e httpd" to
    read a 1G file over Linux loopback reveals a reduction from
    around ~0.770 to ~0.490 seconds on the client side.
    
    * lib/webrick/httpresponse.rb (send_body_io): use IO.copy_stream
      (_send_file): remove
      [Feature #14237]
    
    webrick: use IO.copy_stream for single range response
    
    This is also compatible with range responses generated
    by Rack::File (tested with rack 2.0.3).
    
    * lib/webrick/httpresponse.rb (send_body_io): use Content-Range
    * lib/webrick/httpservlet/filehandler.rb (make_partial_content):
      use File object for the single range case
    * test/webrick/test_filehandler.rb (get_res_body): use send_body
      to test result
    
    test/webrick/test_filehandler.rb: stricter multipart range test
    
    We need to ensure we generate compatibile output in
    the face of future changes
    
    * test/webrick/test_filehandler.rb (test_make_partial_content):
      check response body
    
    webrick: quiet warning for multi-part ranges
    
    Content-Length is ignored by WEBrick::HTTPResponse even if we
    calculate it, so instead we chunk responses to HTTP/1.1 clients
    and terminate HTTP/1.0 connections.
    
    * lib/webrick/httpservlet/filehandler.rb (make_partial_content):
      quiet warning
    
    webrick/httpresponse: make ChunkedWrapper copy_stream-compatible
    
    The .write method needs to return the number of bytes written
    to avoid confusing IO.copy_stream.
    
    * lib/webrick/httpresponse.rb (ChunkedWrapper#write): return bytes written
      (ChunkedWrapper#<<): return self
    
    webrick: use IO.copy_stream for multipart response
    
    Use the new Proc response body feature to generate a multipart
    range response dynamically.  We use a flat array to minimize
    object overhead as much as possible; as many ranges may fit
    into an HTTP request header.
    
    * lib/webrick/httpservlet/filehandler.rb (multipart_body): new method
      (make_partial_content): use multipart_body
    
    get rid of test error/failure on Windows introduced at r62955
    
    * lib/webrick/httpresponse.rb (send_body_io): use seek if NotImplementedError
      is raised in IO.copy_stream with offset.
    
    * lib/webrick/httpservlet/filehandler.rb (multipart_body): ditto.

  Modified directories:
    branches/ruby_2_4/
  Modified files:
    branches/ruby_2_4/lib/webrick/httpresponse.rb
    branches/ruby_2_4/lib/webrick/httpservlet/filehandler.rb
    branches/ruby_2_4/test/webrick/test_filehandler.rb
    branches/ruby_2_4/test/webrick/test_httpresponse.rb
    branches/ruby_2_4/version.h


More information about the ruby-cvs mailing list