thrift_client 0.8.3 → 0.8.4
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/lib/thrift_client/abstract_thrift_client.rb +19 -5
- data/test/thrift_client_test.rb +5 -0
- metadata +22 -8
| @@ -92,14 +92,20 @@ class AbstractThriftClient | |
| 92 92 | 
             
              # Force the client to connect to the server. Not necessary to be
         | 
| 93 93 | 
             
              # called as the connection will be made on the first RPC method
         | 
| 94 94 | 
             
              # call.
         | 
| 95 | 
            -
              def connect!
         | 
| 95 | 
            +
              def connect!(method = nil)
         | 
| 96 | 
            +
                start_time ||= Time.now
         | 
| 96 97 | 
             
                @current_server = next_live_server
         | 
| 97 98 | 
             
                @client = @current_server.client
         | 
| 98 99 | 
             
                @last_client = @client
         | 
| 99 100 | 
             
                do_callbacks(:post_connect, self)
         | 
| 100 101 | 
             
              rescue IOError, Thrift::TransportException
         | 
| 101 102 | 
             
                disconnect!(true)
         | 
| 102 | 
            -
                 | 
| 103 | 
            +
                timeout = timeout(method)
         | 
| 104 | 
            +
                if timeout && Time.now - start_time > timeout
         | 
| 105 | 
            +
                  no_servers_available!
         | 
| 106 | 
            +
                else
         | 
| 107 | 
            +
                  retry
         | 
| 108 | 
            +
                end
         | 
| 103 109 | 
             
              end
         | 
| 104 110 |  | 
| 105 111 | 
             
              def disconnect!(error = false)
         | 
| @@ -132,7 +138,7 @@ class AbstractThriftClient | |
| 132 138 | 
             
                    return @server_list[cur]
         | 
| 133 139 | 
             
                  end
         | 
| 134 140 | 
             
                end
         | 
| 135 | 
            -
                 | 
| 141 | 
            +
                no_servers_available!
         | 
| 136 142 | 
             
              end
         | 
| 137 143 |  | 
| 138 144 | 
             
              def ensure_socket_alignment
         | 
| @@ -150,9 +156,9 @@ class AbstractThriftClient | |
| 150 156 |  | 
| 151 157 | 
             
              def handled_proxy(method_name, *args)
         | 
| 152 158 | 
             
                begin
         | 
| 153 | 
            -
                  connect! unless @client
         | 
| 159 | 
            +
                  connect!(method_name.to_sym) unless @client
         | 
| 154 160 | 
             
                  if has_timeouts?
         | 
| 155 | 
            -
                    @client.timeout =  | 
| 161 | 
            +
                    @client.timeout = timeout(method_name.to_sym)
         | 
| 156 162 | 
             
                  end
         | 
| 157 163 | 
             
                  @request_count += 1
         | 
| 158 164 | 
             
                  do_callbacks(:before_method, method_name)
         | 
| @@ -196,6 +202,10 @@ class AbstractThriftClient | |
| 196 202 | 
             
                @has_timeouts ||= @options[:timeout_overrides].any? && transport_can_timeout?
         | 
| 197 203 | 
             
              end
         | 
| 198 204 |  | 
| 205 | 
            +
              def timeout(method = nil)
         | 
| 206 | 
            +
                @options[:timeout_overrides][method] || @options[:timeout]
         | 
| 207 | 
            +
              end
         | 
| 208 | 
            +
             | 
| 199 209 | 
             
              def transport_can_timeout?
         | 
| 200 210 | 
             
                if (@options[:transport_wrapper] || @options[:transport]).method_defined?(:timeout=)
         | 
| 201 211 | 
             
                  true
         | 
| @@ -204,4 +214,8 @@ class AbstractThriftClient | |
| 204 214 | 
             
                  false
         | 
| 205 215 | 
             
                end
         | 
| 206 216 | 
             
              end
         | 
| 217 | 
            +
             | 
| 218 | 
            +
              def no_servers_available!
         | 
| 219 | 
            +
                raise ThriftClient::NoServersAvailable, "No live servers in #{@server_list.inspect}."
         | 
| 220 | 
            +
              end
         | 
| 207 221 | 
             
            end
         | 
    
        data/test/thrift_client_test.rb
    CHANGED
    
    | @@ -230,6 +230,11 @@ class ThriftClientTest < Test::Unit::TestCase | |
| 230 230 | 
             
                assert_raises(ThriftClient::NoServersAvailable) { client.greeting("someone") }
         | 
| 231 231 | 
             
              end
         | 
| 232 232 |  | 
| 233 | 
            +
              def test_connect_retry_period
         | 
| 234 | 
            +
                client = ThriftClient.new(Greeter::Client, @servers[0], @options.merge(:server_retry_period => 0))
         | 
| 235 | 
            +
                assert_raises(ThriftClient::NoServersAvailable) { client.connect! }
         | 
| 236 | 
            +
              end
         | 
| 237 | 
            +
             | 
| 233 238 | 
             
              def test_client_with_retry_period_drops_servers
         | 
| 234 239 | 
             
                client = ThriftClient.new(Greeter::Client, @servers[0,2], @options.merge(:server_retry_period => 1, :retries => 2))
         | 
| 235 240 | 
             
                assert_raises(ThriftClient::NoServersAvailable) { client.greeting("someone") }
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: thrift_client
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 55
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 8 | 
             
              - 8
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0.8. | 
| 9 | 
            +
              - 4
         | 
| 10 | 
            +
              version: 0.8.4
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Evan Weaver
         | 
| @@ -17,7 +17,7 @@ autorequire: | |
| 17 17 | 
             
            bindir: bin
         | 
| 18 18 | 
             
            cert_chain: []
         | 
| 19 19 |  | 
| 20 | 
            -
            date:  | 
| 20 | 
            +
            date: 2013-02-26 00:00:00 Z
         | 
| 21 21 | 
             
            dependencies: 
         | 
| 22 22 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 23 23 | 
             
              name: thrift
         | 
| @@ -36,14 +36,28 @@ dependencies: | |
| 36 36 | 
             
              type: :runtime
         | 
| 37 37 | 
             
              version_requirements: *id001
         | 
| 38 38 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 39 | 
            -
              name:  | 
| 39 | 
            +
              name: rake
         | 
| 40 40 | 
             
              prerelease: false
         | 
| 41 41 | 
             
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 42 | 
            +
                none: false
         | 
| 43 | 
            +
                requirements: 
         | 
| 44 | 
            +
                - - ">="
         | 
| 45 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 46 | 
            +
                    hash: 3
         | 
| 47 | 
            +
                    segments: 
         | 
| 48 | 
            +
                    - 0
         | 
| 49 | 
            +
                    version: "0"
         | 
| 50 | 
            +
              type: :development
         | 
| 51 | 
            +
              version_requirements: *id002
         | 
| 52 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 53 | 
            +
              name: mongrel
         | 
| 54 | 
            +
              prerelease: false
         | 
| 55 | 
            +
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 42 56 | 
             
                none: false
         | 
| 43 57 | 
             
                requirements: 
         | 
| 44 58 | 
             
                - - "="
         | 
| 45 59 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 46 | 
            -
                    hash:  | 
| 60 | 
            +
                    hash: 2328195415
         | 
| 47 61 | 
             
                    segments: 
         | 
| 48 62 | 
             
                    - 1
         | 
| 49 63 | 
             
                    - 2
         | 
| @@ -52,7 +66,7 @@ dependencies: | |
| 52 66 | 
             
                    - 2
         | 
| 53 67 | 
             
                    version: 1.2.0.pre2
         | 
| 54 68 | 
             
              type: :development
         | 
| 55 | 
            -
              version_requirements: * | 
| 69 | 
            +
              version_requirements: *id003
         | 
| 56 70 | 
             
            description: 
         | 
| 57 71 | 
             
            email: 
         | 
| 58 72 | 
             
            executables: []
         | 
| @@ -109,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 109 123 | 
             
            requirements: []
         | 
| 110 124 |  | 
| 111 125 | 
             
            rubyforge_project: 
         | 
| 112 | 
            -
            rubygems_version: 1.8. | 
| 126 | 
            +
            rubygems_version: 1.8.15
         | 
| 113 127 | 
             
            signing_key: 
         | 
| 114 128 | 
             
            specification_version: 3
         | 
| 115 129 | 
             
            summary: A Thrift client wrapper that encapsulates some common failover behavior.
         |