evdispatch 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +8 -0
- data/ext/revdispatch/libdispatch/src/ev_dispatch.cc +3 -2
- data/ext/revdispatch/libdispatch/src/ev_dispatch.h +2 -0
- data/ext/revdispatch/libdispatch/src/ev_http.cc +11 -3
- data/ext/revdispatch/libdispatch/src/ev_http.h +4 -0
- data/ext/revdispatch/server.rb +7 -2
- data/lib/evdispatch/version.rb +1 -1
- data/script/console +0 -0
- data/script/destroy +0 -0
- data/script/generate +0 -0
- data/script/txt2html +0 -0
- data/test/test_evdispatch.rb +11 -3
- data/test/test_helper.rb +5 -2
- data/website/index.html +1 -1
- metadata +3 -3
    
        data/History.txt
    CHANGED
    
    | @@ -1,3 +1,11 @@ | |
| 1 | 
            +
            == 0.4.1 2008-05-04
         | 
| 2 | 
            +
              * Avoid deleting request before it finishes enabling
         | 
| 3 | 
            +
              * Protect config.h with HAVE_CONFIG_H macro
         | 
| 4 | 
            +
              * Add a load test
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            == 0.4.0 2008-05-04
         | 
| 7 | 
            +
              * Improve build system to use libev embedding, instead of autoconf/autotools
         | 
| 8 | 
            +
             | 
| 1 9 | 
             
            == 0.3.1 2008-04-23
         | 
| 2 10 | 
             
              * Add support to set arbitrary HTTP headers
         | 
| 3 11 |  | 
| @@ -1,4 +1,6 @@ | |
| 1 | 
            +
            #ifdef HAVE_CONFIG_H
         | 
| 1 2 | 
             
            #include "config.h"
         | 
| 3 | 
            +
            #endif
         | 
| 2 4 | 
             
            #include <stdio.h>
         | 
| 3 5 | 
             
            #include "ev_dispatch.h"
         | 
| 4 6 | 
             
            #include "ev_http.h"
         | 
| @@ -239,8 +241,7 @@ void Dispatch::request_cb( struct ev_loop *loop, struct ev_async *w, int revents | |
| 239 241 | 
             
                  ++m_pending;
         | 
| 240 242 | 
             
                  if( !req->enable() ) { // XXX: if using DNS in requests expect this method to block while dns resolves
         | 
| 241 243 | 
             
                    --m_pending;
         | 
| 242 | 
            -
                     | 
| 243 | 
            -
                    // for some reason we couldn't enable the request cleanup the request and continue
         | 
| 244 | 
            +
                    // either request could not be enabled or the request finished
         | 
| 244 245 | 
             
                    delete req;
         | 
| 245 246 | 
             
                  }
         | 
| 246 247 | 
             
                }
         | 
| @@ -1,4 +1,6 @@ | |
| 1 | 
            +
            #ifdef HAVE_CONFIG_H
         | 
| 1 2 | 
             
            #include "config.h"
         | 
| 3 | 
            +
            #endif
         | 
| 2 4 | 
             
            #include "ev_http.h"
         | 
| 3 5 |  | 
| 4 6 | 
             
            namespace EVD {
         | 
| @@ -223,7 +225,9 @@ void HttpClient::check_handles() | |
| 223 225 | 
             
                  curl_easy_getinfo( easy, CURLINFO_PRIVATE, &req );
         | 
| 224 226 | 
             
                  //printf( "   req %s finished\n", req->url.c_str() );
         | 
| 225 227 | 
             
                  req->finish(rc);
         | 
| 226 | 
            -
             | 
| 228 | 
            +
             | 
| 229 | 
            +
                  if( !req->m_enabling ) 
         | 
| 230 | 
            +
                    delete req;
         | 
| 227 231 | 
             
                }
         | 
| 228 232 |  | 
| 229 233 | 
             
              } while( easy );
         | 
| @@ -301,7 +305,7 @@ HttpRequest::HttpRequest( Dispatch &dispatch, const std::string &url ) | |
| 301 305 | 
             
              : Request( 0, url ),
         | 
| 302 306 | 
             
                m_response(new HttpResponse(url)),
         | 
| 303 307 | 
             
                m_handle(curl_easy_init()),
         | 
| 304 | 
            -
                m_client(dispatch.getHttpClient())
         | 
| 308 | 
            +
                m_client(dispatch.getHttpClient()), m_enabling(false)
         | 
| 305 309 | 
             
            {
         | 
| 306 310 | 
             
              init_curl();
         | 
| 307 311 | 
             
            }
         | 
| @@ -318,6 +322,7 @@ HttpRequest::~HttpRequest() | |
| 318 322 |  | 
| 319 323 | 
             
            bool HttpRequest::enable()
         | 
| 320 324 | 
             
            {
         | 
| 325 | 
            +
              m_enabling = true; 
         | 
| 321 326 | 
             
              CURLMcode rc = curl_multi_add_handle( m_client->m_handle, m_handle );
         | 
| 322 327 |  | 
| 323 328 | 
             
              if( m_client ) {
         | 
| @@ -333,7 +338,9 @@ bool HttpRequest::enable() | |
| 333 338 | 
             
                printf("m_client went 0x0\n");
         | 
| 334 339 | 
             
              }
         | 
| 335 340 | 
             
              multi_error_report(rc);
         | 
| 336 | 
            -
             | 
| 341 | 
            +
             | 
| 342 | 
            +
              m_enabling = false; 
         | 
| 343 | 
            +
              return (rc == CURLM_OK || rc == CURLM_CALL_MULTI_PERFORM || !m_finished);
         | 
| 337 344 | 
             
            }
         | 
| 338 345 |  | 
| 339 346 | 
             
            void HttpRequest::finish(CURLcode rc)
         | 
| @@ -345,6 +352,7 @@ void HttpRequest::finish(CURLcode rc) | |
| 345 352 | 
             
              m_response->response_time = Timer::elapsed_time( &(this->start_time) ); 
         | 
| 346 353 | 
             
              m_response->finish( m_client, rc );
         | 
| 347 354 |  | 
| 355 | 
            +
              m_finished = true; 
         | 
| 348 356 | 
             
              //fprintf( stderr, "DONE: (%s/%s) => (%d), body(%d): '%s'\n", url.c_str(), url.c_str(), rc, (int)m_response, m_response->body.c_str() );
         | 
| 349 357 | 
             
            }
         | 
| 350 358 | 
             
            void HttpRequest::set_key( request_t key )
         | 
| @@ -1,7 +1,9 @@ | |
| 1 1 | 
             
            #ifndef EV_HTTP_H
         | 
| 2 2 | 
             
            #define EV_HTTP_H
         | 
| 3 3 |  | 
| 4 | 
            +
            #ifdef HAVE_CONFIG_H
         | 
| 4 5 | 
             
            #include "config.h"
         | 
| 6 | 
            +
            #endif
         | 
| 5 7 | 
             
            #include "ev_dispatch.h"
         | 
| 6 8 | 
             
            #include <curl/curl.h>
         | 
| 7 9 | 
             
            #include <set>
         | 
| @@ -69,6 +71,8 @@ namespace EVD { | |
| 69 71 | 
             
                CURL *m_handle;
         | 
| 70 72 | 
             
                HttpClient *m_client;
         | 
| 71 73 | 
             
                char m_error[CURL_ERROR_SIZE];
         | 
| 74 | 
            +
                bool m_enabling; // added to prevent this object from being deleted before enable method is finished
         | 
| 75 | 
            +
                bool m_finished; // toggled true when the request finishes before enabling is complete
         | 
| 72 76 | 
             
              private:
         | 
| 73 77 | 
             
                void init_curl();
         | 
| 74 78 | 
             
              };
         | 
    
        data/ext/revdispatch/server.rb
    CHANGED
    
    | @@ -61,5 +61,10 @@ class TestApp | |
| 61 61 | 
             
                [status, {'Content-Type' => 'text/json'}.merge(extras), body]
         | 
| 62 62 | 
             
              end
         | 
| 63 63 | 
             
            end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 64 | 
            +
            # ebb's much better at handling concurrent requests use it if it's installed
         | 
| 65 | 
            +
            begin
         | 
| 66 | 
            +
              require 'ebb'
         | 
| 67 | 
            +
              Ebb.start_server(TestApp.new, :port => TEST_PORT)
         | 
| 68 | 
            +
            rescue LoadError => e
         | 
| 69 | 
            +
              Rack::Handler::Mongrel.run(TestApp.new, :Port => TEST_PORT )
         | 
| 70 | 
            +
            end
         | 
    
        data/lib/evdispatch/version.rb
    CHANGED
    
    
    
        data/script/console
    CHANGED
    
    | 
            File without changes
         | 
    
        data/script/destroy
    CHANGED
    
    | 
            File without changes
         | 
    
        data/script/generate
    CHANGED
    
    | 
            File without changes
         | 
    
        data/script/txt2html
    CHANGED
    
    | 
            File without changes
         | 
    
        data/test/test_evdispatch.rb
    CHANGED
    
    | @@ -9,8 +9,8 @@ class TestEvdispatch < Test::Unit::TestCase | |
| 9 9 | 
             
                count = 10000
         | 
| 10 10 |  | 
| 11 11 | 
             
                streams = []
         | 
| 12 | 
            -
                # create  | 
| 13 | 
            -
                 | 
| 12 | 
            +
                # create 10 streams
         | 
| 13 | 
            +
                10.times do|i|
         | 
| 14 14 | 
             
                  stream = d.request("http://127.0.0.1:4044/bytes/#{count}", :stream => true )
         | 
| 15 15 | 
             
                  streams << stream
         | 
| 16 16 | 
             
                end
         | 
| @@ -18,7 +18,15 @@ class TestEvdispatch < Test::Unit::TestCase | |
| 18 18 | 
             
                # TODO: we should expose the pipe so someone can select on ready responses
         | 
| 19 19 | 
             
                for stream in streams do
         | 
| 20 20 | 
             
                  res = stream.read
         | 
| 21 | 
            -
                   | 
| 21 | 
            +
                  timer = Time.now
         | 
| 22 | 
            +
                  diff = Time.now - timer
         | 
| 23 | 
            +
                  while res != 0 and diff < 4.0
         | 
| 24 | 
            +
                    res = stream.read
         | 
| 25 | 
            +
                    diff = Time.now - timer
         | 
| 26 | 
            +
                    #puts "diff: #{diff}"
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  next if diff >= 4.0
         | 
| 22 30 |  | 
| 23 31 | 
             
                  assert_equal( 0, res )
         | 
| 24 32 | 
             
                  assert_equal( "C"*count, stream.body )
         | 
    
        data/test/test_helper.rb
    CHANGED
    
    | @@ -1,3 +1,6 @@ | |
| 1 1 | 
             
            require 'test/unit'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..','ext','revdispatch'))
         | 
| 4 | 
            +
            $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..','lib'))
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            require 'evdispatch'
         | 
    
        data/website/index.html
    CHANGED
    
    | @@ -18,7 +18,7 @@ | |
| 18 18 | 
             
                <h1>evdispatch</h1>
         | 
| 19 19 | 
             
                <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/evdispatch"; return false'>
         | 
| 20 20 | 
             
                  <p>Get Version</p>
         | 
| 21 | 
            -
                  <a href="http://rubyforge.org/projects/evdispatch" class="numbers">0.4. | 
| 21 | 
            +
                  <a href="http://rubyforge.org/projects/evdispatch" class="numbers">0.4.1</a>
         | 
| 22 22 | 
             
                </div>
         | 
| 23 23 | 
             
                <h4 style="float:right;padding-right:10px;">→ ‘evdispatch’</h4>
         | 
| 24 24 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: evdispatch
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0.4. | 
| 4 | 
            +
              version: 0.4.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - Todd A. Fisher
         | 
| @@ -9,7 +9,7 @@ autorequire: | |
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 11 |  | 
| 12 | 
            -
            date: 2008-05- | 
| 12 | 
            +
            date: 2008-05-15 00:00:00 -04:00
         | 
| 13 13 | 
             
            default_executable: 
         | 
| 14 14 | 
             
            dependencies: []
         | 
| 15 15 |  | 
| @@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 109 109 | 
             
            requirements: []
         | 
| 110 110 |  | 
| 111 111 | 
             
            rubyforge_project: evdispatch
         | 
| 112 | 
            -
            rubygems_version: 1. | 
| 112 | 
            +
            rubygems_version: 1.0.1
         | 
| 113 113 | 
             
            signing_key: 
         | 
| 114 114 | 
             
            specification_version: 2
         | 
| 115 115 | 
             
            summary: Based on libev provides a background event loop for making simulataneous requests
         |