memcache-client 1.4.0 → 1.5.0
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.tar.gz.sig +0 -0
- data/History.txt +7 -0
- data/lib/memcache.rb +64 -24
- data/test/test_mem_cache.rb +60 -16
- metadata +25 -3
- metadata.gz.sig +0 -0
    
        data.tar.gz.sig
    ADDED
    
    | Binary file | 
    
        data/History.txt
    CHANGED
    
    | @@ -1,3 +1,10 @@ | |
| 1 | 
            +
            = 1.5.0
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * Add MemCache#flush_all command.  Patch #13019 and bug #10503.  Patches
         | 
| 4 | 
            +
              submitted by Sebastian Delmont and Rick Olson.
         | 
| 5 | 
            +
            * Type-cast data returned by MemCache#stats.  Patch #10505 submitted by
         | 
| 6 | 
            +
              Sebastian Delmont.
         | 
| 7 | 
            +
             | 
| 1 8 | 
             
            = 1.4.0
         | 
| 2 9 |  | 
| 3 10 | 
             
            * Fix bug #10371, #set does not check response for server errors.
         | 
    
        data/lib/memcache.rb
    CHANGED
    
    | @@ -42,7 +42,7 @@ class MemCache | |
| 42 42 | 
             
              ##
         | 
| 43 43 | 
             
              # The version of MemCache you are using.
         | 
| 44 44 |  | 
| 45 | 
            -
              VERSION = '1. | 
| 45 | 
            +
              VERSION = '1.5.0'
         | 
| 46 46 |  | 
| 47 47 | 
             
              ##
         | 
| 48 48 | 
             
              # Default options for the cache object.
         | 
| @@ -365,6 +365,31 @@ class MemCache | |
| 365 365 | 
             
                @mutex.unlock if @multithread
         | 
| 366 366 | 
             
              end
         | 
| 367 367 |  | 
| 368 | 
            +
              ##
         | 
| 369 | 
            +
              # Flush the cache from all memcache servers.
         | 
| 370 | 
            +
             | 
| 371 | 
            +
              def flush_all
         | 
| 372 | 
            +
                raise MemCacheError, 'No active servers' unless active?
         | 
| 373 | 
            +
                raise MemCacheError, "Update of readonly cache" if @readonly
         | 
| 374 | 
            +
                begin
         | 
| 375 | 
            +
                  @mutex.lock if @multithread
         | 
| 376 | 
            +
                  @servers.each do |server|
         | 
| 377 | 
            +
                    begin
         | 
| 378 | 
            +
                      sock = server.socket
         | 
| 379 | 
            +
                      raise MemCacheError, "No connection to server" if sock.nil?
         | 
| 380 | 
            +
                      sock.write "flush_all\r\n"
         | 
| 381 | 
            +
                      result = sock.gets
         | 
| 382 | 
            +
                      raise MemCacheError, $2.strip if result =~ /^(SERVER_)?ERROR(.*)/
         | 
| 383 | 
            +
                    rescue SocketError, SystemCallError, IOError => err
         | 
| 384 | 
            +
                      server.close
         | 
| 385 | 
            +
                      raise MemCacheError, err.message
         | 
| 386 | 
            +
                    end
         | 
| 387 | 
            +
                  end
         | 
| 388 | 
            +
                ensure
         | 
| 389 | 
            +
                  @mutex.unlock if @multithread
         | 
| 390 | 
            +
                end
         | 
| 391 | 
            +
              end
         | 
| 392 | 
            +
             | 
| 368 393 | 
             
              ##
         | 
| 369 394 | 
             
              # Reset the connection to all memcache servers.  This should be called if
         | 
| 370 395 | 
             
              # there is a problem with a cache lookup that might have left the connection
         | 
| @@ -384,26 +409,26 @@ class MemCache | |
| 384 409 | 
             
              #
         | 
| 385 410 | 
             
              #   >> pp CACHE.stats
         | 
| 386 411 | 
             
              #   {"localhost:11211"=>
         | 
| 387 | 
            -
              #     {"bytes"=> | 
| 388 | 
            -
              #      "pid"=> | 
| 389 | 
            -
              #      "connection_structures"=> | 
| 390 | 
            -
              #      "time"=> | 
| 391 | 
            -
              #      "pointer_size"=> | 
| 392 | 
            -
              #      "limit_maxbytes"=> | 
| 393 | 
            -
              #      "cmd_get"=> | 
| 412 | 
            +
              #     {"bytes"=>4718,
         | 
| 413 | 
            +
              #      "pid"=>20188,
         | 
| 414 | 
            +
              #      "connection_structures"=>4,
         | 
| 415 | 
            +
              #      "time"=>1162278121,
         | 
| 416 | 
            +
              #      "pointer_size"=>32,
         | 
| 417 | 
            +
              #      "limit_maxbytes"=>67108864,
         | 
| 418 | 
            +
              #      "cmd_get"=>14532,
         | 
| 394 419 | 
             
              #      "version"=>"1.2.0",
         | 
| 395 | 
            -
              #      "bytes_written"=> | 
| 396 | 
            -
              #      "cmd_set"=> | 
| 397 | 
            -
              #      "get_misses"=> | 
| 398 | 
            -
              #      "total_connections"=> | 
| 399 | 
            -
              #      "curr_connections"=> | 
| 400 | 
            -
              #      "curr_items"=> | 
| 401 | 
            -
              #      "uptime"=> | 
| 402 | 
            -
              #      "get_hits"=> | 
| 403 | 
            -
              #      "total_items"=> | 
| 404 | 
            -
              #      "rusage_system"=> | 
| 405 | 
            -
              #      "rusage_user"=> | 
| 406 | 
            -
              #      "bytes_read"=> | 
| 420 | 
            +
              #      "bytes_written"=>432583,
         | 
| 421 | 
            +
              #      "cmd_set"=>32,
         | 
| 422 | 
            +
              #      "get_misses"=>0,
         | 
| 423 | 
            +
              #      "total_connections"=>19,
         | 
| 424 | 
            +
              #      "curr_connections"=>3,
         | 
| 425 | 
            +
              #      "curr_items"=>4,
         | 
| 426 | 
            +
              #      "uptime"=>1557,
         | 
| 427 | 
            +
              #      "get_hits"=>14532,
         | 
| 428 | 
            +
              #      "total_items"=>32,
         | 
| 429 | 
            +
              #      "rusage_system"=>0.313952,
         | 
| 430 | 
            +
              #      "rusage_user"=>0.119981,
         | 
| 431 | 
            +
              #      "bytes_read"=>190619}}
         | 
| 407 432 | 
             
              #   => nil
         | 
| 408 433 |  | 
| 409 434 | 
             
              def stats
         | 
| @@ -418,12 +443,27 @@ class MemCache | |
| 418 443 | 
             
                  begin
         | 
| 419 444 | 
             
                    sock.write "stats\r\n"
         | 
| 420 445 | 
             
                    stats = {}
         | 
| 421 | 
            -
                    while line = sock.gets
         | 
| 446 | 
            +
                    while line = sock.gets do
         | 
| 422 447 | 
             
                      break if line == "END\r\n"
         | 
| 423 | 
            -
                      line =~ /^STAT ([\w]+) ([\ | 
| 424 | 
            -
             | 
| 448 | 
            +
                      if line =~ /^STAT ([\w]+) ([\w\.\:]+)/ then
         | 
| 449 | 
            +
                        name, value = $1, $2
         | 
| 450 | 
            +
                        stats[name] = case name
         | 
| 451 | 
            +
                                      when 'version'
         | 
| 452 | 
            +
                                        value
         | 
| 453 | 
            +
                                      when 'rusage_user', 'rusage_system' then
         | 
| 454 | 
            +
                                        seconds, microseconds = value.split(/:/, 2)
         | 
| 455 | 
            +
                                        microseconds ||= 0
         | 
| 456 | 
            +
                                        Float(seconds) + (Float(microseconds) / 1_000_000)
         | 
| 457 | 
            +
                                      else
         | 
| 458 | 
            +
                                        if value =~ /^\d+$/ then
         | 
| 459 | 
            +
                                          value.to_i
         | 
| 460 | 
            +
                                        else
         | 
| 461 | 
            +
                                          value
         | 
| 462 | 
            +
                                        end
         | 
| 463 | 
            +
                                      end
         | 
| 464 | 
            +
                      end
         | 
| 425 465 | 
             
                    end
         | 
| 426 | 
            -
                    server_stats["#{server.host}:#{server.port}"] = stats | 
| 466 | 
            +
                    server_stats["#{server.host}:#{server.port}"] = stats
         | 
| 427 467 | 
             
                  rescue SocketError, SystemCallError, IOError => err
         | 
| 428 468 | 
             
                    server.close
         | 
| 429 469 | 
             
                    raise MemCacheError, err.message
         | 
    
        data/test/test_mem_cache.rb
    CHANGED
    
    | @@ -507,19 +507,6 @@ class TestMemCache < Test::Unit::TestCase | |
| 507 507 | 
             
                assert_equal expected, server.socket.written.string
         | 
| 508 508 | 
             
              end
         | 
| 509 509 |  | 
| 510 | 
            -
              def test_set
         | 
| 511 | 
            -
                server = FakeServer.new
         | 
| 512 | 
            -
                server.socket.data.write "STORED\r\n"
         | 
| 513 | 
            -
                server.socket.data.rewind
         | 
| 514 | 
            -
                @cache.servers = []
         | 
| 515 | 
            -
                @cache.servers << server
         | 
| 516 | 
            -
             | 
| 517 | 
            -
                @cache.set 'key', 'value'
         | 
| 518 | 
            -
             | 
| 519 | 
            -
                expected = "set my_namespace:key 0 0 9\r\n\004\b\"\nvalue\r\n"
         | 
| 520 | 
            -
                assert_equal expected, server.socket.written.string
         | 
| 521 | 
            -
              end
         | 
| 522 | 
            -
             | 
| 523 510 | 
             
              def test_set_expiry
         | 
| 524 511 | 
             
                server = FakeServer.new
         | 
| 525 512 | 
             
                server.socket.data.write "STORED\r\n"
         | 
| @@ -632,9 +619,43 @@ class TestMemCache < Test::Unit::TestCase | |
| 632 619 | 
             
                assert_equal 'Update of readonly cache', e.message
         | 
| 633 620 | 
             
              end
         | 
| 634 621 |  | 
| 635 | 
            -
              def  | 
| 622 | 
            +
              def test_delete
         | 
| 623 | 
            +
                server = FakeServer.new
         | 
| 624 | 
            +
                @cache.servers = []
         | 
| 625 | 
            +
                @cache.servers << server
         | 
| 626 | 
            +
                
         | 
| 627 | 
            +
                @cache.delete 'key'
         | 
| 628 | 
            +
                
         | 
| 629 | 
            +
                expected = "delete my_namespace:key 0\r\n"
         | 
| 630 | 
            +
                assert_equal expected, server.socket.written.string
         | 
| 631 | 
            +
              end
         | 
| 632 | 
            +
             | 
| 633 | 
            +
              def test_delete_with_expiry
         | 
| 634 | 
            +
                server = FakeServer.new
         | 
| 635 | 
            +
                @cache.servers = []
         | 
| 636 | 
            +
                @cache.servers << server
         | 
| 637 | 
            +
                
         | 
| 638 | 
            +
                @cache.delete 'key', 300
         | 
| 639 | 
            +
                
         | 
| 640 | 
            +
                expected = "delete my_namespace:key 300\r\n"
         | 
| 641 | 
            +
                assert_equal expected, server.socket.written.string
         | 
| 642 | 
            +
              end
         | 
| 643 | 
            +
             | 
| 644 | 
            +
              def test_flush_all
         | 
| 645 | 
            +
                @cache.servers = []
         | 
| 646 | 
            +
                3.times { @cache.servers << FakeServer.new }
         | 
| 647 | 
            +
             | 
| 648 | 
            +
                @cache.flush_all
         | 
| 649 | 
            +
             | 
| 650 | 
            +
                expected = "flush_all\r\n"
         | 
| 651 | 
            +
                @cache.servers.each do |server|
         | 
| 652 | 
            +
                  assert_equal expected, server.socket.written.string
         | 
| 653 | 
            +
                end
         | 
| 654 | 
            +
              end
         | 
| 655 | 
            +
             | 
| 656 | 
            +
              def test_flush_all_failure
         | 
| 636 657 | 
             
                socket = FakeSocket.new
         | 
| 637 | 
            -
                socket.data.write " | 
| 658 | 
            +
                socket.data.write "ERROR\r\n"
         | 
| 638 659 | 
             
                socket.data.rewind
         | 
| 639 660 | 
             
                server = FakeServer.new socket
         | 
| 640 661 | 
             
                def server.host() "localhost"; end
         | 
| @@ -643,7 +664,30 @@ class TestMemCache < Test::Unit::TestCase | |
| 643 664 | 
             
                @cache.servers = []
         | 
| 644 665 | 
             
                @cache.servers << server
         | 
| 645 666 |  | 
| 646 | 
            -
                 | 
| 667 | 
            +
                assert_raise MemCache::MemCacheError do
         | 
| 668 | 
            +
                  @cache.flush_all
         | 
| 669 | 
            +
                end
         | 
| 670 | 
            +
             | 
| 671 | 
            +
                assert_equal "flush_all\r\n", socket.written.string
         | 
| 672 | 
            +
              end
         | 
| 673 | 
            +
             | 
| 674 | 
            +
              def test_stats
         | 
| 675 | 
            +
                socket = FakeSocket.new
         | 
| 676 | 
            +
                socket.data.write "STAT pid 20188\r\nSTAT total_items 32\r\nSTAT version 1.2.3\r\nSTAT rusage_user 1:300\r\nSTAT dummy ok\r\nEND\r\n"
         | 
| 677 | 
            +
                socket.data.rewind
         | 
| 678 | 
            +
                server = FakeServer.new socket
         | 
| 679 | 
            +
                def server.host() 'localhost'; end
         | 
| 680 | 
            +
                def server.port() 11211; end
         | 
| 681 | 
            +
             | 
| 682 | 
            +
                @cache.servers = []
         | 
| 683 | 
            +
                @cache.servers << server
         | 
| 684 | 
            +
             | 
| 685 | 
            +
                expected = {
         | 
| 686 | 
            +
                  'localhost:11211' => {
         | 
| 687 | 
            +
                    'pid' => 20188, 'total_items' => 32, 'version' => '1.2.3',
         | 
| 688 | 
            +
                    'rusage_user' => 1.0003, 'dummy' => 'ok'
         | 
| 689 | 
            +
                  }
         | 
| 690 | 
            +
                }
         | 
| 647 691 | 
             
                assert_equal expected, @cache.stats
         | 
| 648 692 |  | 
| 649 693 | 
             
                assert_equal "stats\r\n", socket.written.string
         | 
    
        metadata
    CHANGED
    
    | @@ -3,8 +3,8 @@ rubygems_version: 0.9.4.3 | |
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: memcache-client
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 1. | 
| 7 | 
            -
            date: 2007- | 
| 6 | 
            +
              version: 1.5.0
         | 
| 7 | 
            +
            date: 2007-08-13 00:00:00 -07:00
         | 
| 8 8 | 
             
            summary: A Ruby memcached client
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
            - lib
         | 
| @@ -31,6 +31,28 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 31 31 | 
             
            platform: ruby
         | 
| 32 32 | 
             
            signing_key: 
         | 
| 33 33 | 
             
            cert_chain: 
         | 
| 34 | 
            +
            - |
         | 
| 35 | 
            +
              -----BEGIN CERTIFICATE-----
         | 
| 36 | 
            +
              MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRAwDgYDVQQDDAdkcmJy
         | 
| 37 | 
            +
              YWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZFgNu
         | 
| 38 | 
            +
              ZXQwHhcNMDcwODE0MDAwMjIzWhcNMDgwODEzMDAwMjIzWjBBMRAwDgYDVQQDDAdk
         | 
| 39 | 
            +
              cmJyYWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZ
         | 
| 40 | 
            +
              FgNuZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVZUNKmnp8LrkM
         | 
| 41 | 
            +
              bQd5ZrcTV1R7woai4clBLUjH3DL47r+f6d5dz+gJUegZ3RKWdSvOfaRmXFkr2+nv
         | 
| 42 | 
            +
              vc6uzcxk9w1uN5Z3w+BCeKtsUR8EtUhH8b26HDNGDeuoTX1gEgm4DacBh1/Ib+SQ
         | 
| 43 | 
            +
              PxLVkFnWiCekGvL7jzecw6UwADn49Ag4NxIvpN0ttsYCQFMDuqzdISjurbb3dZ2z
         | 
| 44 | 
            +
              OsaDqdW29c3Jed816kVhOzRZ2EC4BExPtEN6xZCwab6f9tzJT+Atea7PRFLm/T7t
         | 
| 45 | 
            +
              QFBPGC2XjPUXJxTyz+8PEDDb2PXeZwPSDIysq1tzB55A3rE1a5pLvnBfek5KjC25
         | 
| 46 | 
            +
              0wuuKuxlAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
         | 
| 47 | 
            +
              BBStuxfp/gfzqL+3k7tFe8gVU9zpvDANBgkqhkiG9w0BAQUFAAOCAQEAvnmUelUN
         | 
| 48 | 
            +
              s9f/VasT9mZV4tIP3sKi0uqyq9i7vtDgCNFw0BAKNxa6ybO1CrBBnjDMa4hvhrW8
         | 
| 49 | 
            +
              qCLkx7BFHGV/eWR3pdwcLAS8cLuEib75nuG1lbG2yIvGSYTyQ/oxbmuUAZxpavK2
         | 
| 50 | 
            +
              101OludXvBC9hpA4Qz3UhJYBdtT8TuztiFGLzhCJusjUD7I6Y+TrrTPkBGceVVyY
         | 
| 51 | 
            +
              hx8aJk+44+jvzgsTi4MyrRo4lAGsQxFa1f1IBuEgqNPdML31yGO0QKof+IqPiVNo
         | 
| 52 | 
            +
              HsCQoSWkgfQE0DHTgx+hWkF2d10+54I4aM9tIROeGACQemcj0IRf3v7Au8I+6PWl
         | 
| 53 | 
            +
              3E1oHz01aNcUFA==
         | 
| 54 | 
            +
              -----END CERTIFICATE-----
         | 
| 55 | 
            +
             | 
| 34 56 | 
             
            post_install_message: 
         | 
| 35 57 | 
             
            authors: 
         | 
| 36 58 | 
             
            - Eric Hodel
         | 
| @@ -77,5 +99,5 @@ dependencies: | |
| 77 99 | 
             
                requirements: 
         | 
| 78 100 | 
             
                - - ">="
         | 
| 79 101 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 80 | 
            -
                    version: 1. | 
| 102 | 
            +
                    version: 1.3.0
         | 
| 81 103 | 
             
                version: 
         | 
    
        metadata.gz.sig
    ADDED
    
    | Binary file |