Ticket #2 (closed: fixed)

Opened 7 years ago

Last modified 6 years ago

#server_stats throws an exception on FreeBSD

Reported by: deveiant Owned by: deveiant
Priority: major Milestone: Performance Improvements
Component: Source Version: 0.0.2
Keywords: failing test freebsd server_stats Cc:

Description (last modified by deveiant) (diff)

When running the test suite on FreeBSD 5.4-RELEASE under Ruby 1.8.2 (2004-12-25) [i386-freebsd5.4], the following test fails:

$ ./test.rb    
0 patterns given on the command line
Required 6 files.
Loaded suite MemCache
Started
...........F.................F.
Finished in 1.301997 seconds.

  1) Failure:
test_50_server_stats(MemCache::StatsTestCase)
    [./tests/stats.tests.rb:77:in `test_50_server_stats'
     /usr/home/ged/source/ruby/MemCache/tests/mctestcase.rb:294:in `run']:
Exception raised:
Class: <TypeError>
Message: <"cannot convert nil into Float">
---Backtrace---
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:151:in `Float'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:151
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:149:in `call'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:696:in `parse_stats'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:688:in `collect'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:688:in `parse_stats'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:556:in `server_stats'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:555:in `send'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:1029:in `each'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:1029:in `send'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:555:in `server_stats'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:554:in `add_stat'
/usr/home/ged/source/ruby/MemCache/lib/memcache.rb:554:in `server_stats'
./tests/stats.tests.rb:78:in `test_50_server_stats'
./tests/stats.tests.rb:77:in `assert_nothing_raised'
./tests/stats.tests.rb:77:in `test_50_server_stats'
/usr/home/ged/source/ruby/MemCache/tests/mctestcase.rb:294:in `run'
---------------

[...]

31 tests, 398 assertions, 2 failures, 0 errors 

Change History

comment:1 Changed 7 years ago by deveiant

  • Status changed from new to assigned

This happens because the rusage_user and rusage_system values are different than what is documented in the memcached protocol docs:

[...] '32u:32u' means two 32-but unsigned integers separated by a colon.

Name              Type     Meaning
----------------------------------
[...]
rusage_user       32u:32u  Accumulated user time for this process
                           (seconds:microseconds)
rusage_system     32u:32u  Accumulated system time for this process
                           (seconds:microseconds)

The relevant debugging output for the failing test (via ./test.rb -d):

Parsing stats reply: "STAT pid 70338
STAT uptime 917
STAT time 1122782964
STAT version 1.1.12
STAT rusage_user 0.107011
STAT rusage_system 0.140451
STAT curr_items 6
STAT total_items 71
STAT bytes 274
STAT curr_connections 8
STAT total_connections 15
STAT connection_structures 21
STAT cmd_get 55
STAT cmd_set 73
STAT get_hits 0
STAT get_misses 55
STAT bytes_read 3825
STAT bytes_written 1099
STAT limit_maxbytes 67108864
END
"
Converting pid stat: "70338"
Using default converter
... converted to: 70338 (Fixnum)
Converting uptime stat: "917"
Using default converter
... converted to: 917 (Fixnum)
Converting time stat: "1122782964"
Using default converter
... converted to: 1122782964 (Bignum)
Converting version stat: "1.1.12"
Using version converter: #<Proc:0x0825cb54@.../lib/memcache.rb:148>
... converted to: "1.1.12" (String)
Converting rusage_user stat: "0.107011"
Using rusage_user converter: #<Proc:0x0825c7a8@/.../lib/memcache.rb:149>
Exception `TypeError' at /.../lib/memcache.rb:151 - 
    cannot convert nil into Float

comment:2 Changed 7 years ago by deveiant

  • Description modified (diff)

comment:3 Changed 7 years ago by deveiant

  • Component changed from Documentation to Source

comment:4 Changed 7 years ago by ged

  • Status changed from assigned to closed
  • Resolution set to fixed

(In [50]) - Handle incorrect return values for :rusage_system and :rusage_user on

FreeBSD. Fixes #2.

Note: See TracTickets for help on using tickets.