Hi Jonas, Thank you for the detailed error report. I haven't had a chance to troubleshoot your specific condition but I have done some housecleaning in HyperRecord and released a new gem (version 0.9.3).
Here's a brief explanation of the test failures you encountered. The HyperRecord test suite consists of a set of different test files. You were running test/thrift_client_test.rb which only tests the Thrift client libraries and doesn't actually exercise any of the features or tests specific to HyperRecord itself. Those tests (the ones specific to HyperRecord) live under the spec/ directory. I had gotten into the habit of only running the specs and didn't notice the failures under test until your message. As a result, I have just pushed version 0.9.3 which cleans up the failing tests. It also includes a small change to the Rake tasks to make it easier to run the full test suites. In the latest rev, do this to run the unit tests that exercise the Thrift client libraries: $ rake The test failure you saw before should now be gone in the latest version. To run the specs that exercise HyperRecord: $ rake spec There's a slightly more detailed explanation in the (new) file called HOW_TO_RUN_TESTS: http://github.com/tylerkovacs/hyper_record/blob/master/HOW_TO_RUN_TESTS I'm running Hypertable 0.9.3.0.1d45f8d with Rails 2.3.4 and HyperRecord 0.9.3. Under that setup, there is only 1 failure in the specs that I believe is a bug in Hypertable 0.9.3.0 that was scheduled to be fixed in Hypertable 0.9.3.1. > The second problem with the "You might have expected an instance of > Array." is a rails/ActiveRecord problem. Changing "config.time_zone = > 'UTC'" to "config.active_record.default_timezone = :utc" in my > environment.rb resolved this issue. My test Rails app sets the default timezone to :utc so I hadn't noticed that problem before. I'll look into it in more detail soon. I'm off to a holiday barbecue now and probably won't be able to look into it until tomorrow. > "Can't dup NilClass error" came from > ActiveRecord::Base.default_scoping. In base.rb it's default value is > set to [] but since it is defined as class_inheritable_accessor this > default value is invisible to ActiveRecord::HyperBase. I added a patch > for that in http://github.com/jonashuckestein/hyper_record . That > solution is only fighting the symptoms, though. Very interesting. I'll pull your patch in tomorrow as well. Thanks for taking the time to diagnose and fix the issue. Tyler On Fri, May 28, 2010 at 2:58 PM, Jonas Huckestein <[email protected]> wrote: > Note: This is in response to my post ""TypeError: Can't dup NilClass" > when using HyperRecord and Ruby" on the hypertable-user group. O > figured this is more of a evelopment issue. > > > Wow, actually these were two different beasts. > > "Can't dup NilClass error" came from > ActiveRecord::Base.default_scoping. In base.rb it's default value is > set to [] but since it is defined as class_inheritable_accessor this > default value is invisible to ActiveRecord::HyperBase. I added a patch > for that in http://github.com/jonashuckestein/hyper_record . That > solution is only fighting the symptoms, though. > > The second problem with the "You might have expected an instance of > Array." is a rails/ActiveRecord problem. Changing "config.time_zone = > 'UTC'" to "config.active_record.default_timezone = :utc" in my > environment.rb resolved this issue. > > I have no idea why all the hyper_record tests failed, though. They > still fail, even in Tyler's master branch at github. I set up a > minimal Ubuntu JeOS install with the hypertable 0.9.3.1 binary package > with only the hyper_record and thrift gems installed and they still > fail. Should I be worried? > > There has been some recent activity in Tyler's master branch of > hyper_record. Are the updates in some way required to work with > Hypertable 0.9.3.1? I tried building a hyper-record 0.9.3 gem from > source but it didn't quite work. I'll try again, but only if I really > need those updates to work with hypertable 0.9.3+. > > Cheers, Jonas > > > On May 27, 4:00 pm, Jonas Huckestein <[email protected]> > wrote: >> Hi Guys, >> >> Whenever I try to instantiate a ActiveRecord::HyperBase subclass I get >> the following error: >> >> >> Pages.new >> >> TypeError: can't dup NilClass >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> base.rb:2184:in `dup' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> base.rb:2184:in `scoped_methods' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> base.rb:2188:in `current_scoped_methods' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> base.rb:2171:in `scoped?' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> base.rb:2439:in `send' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> base.rb:2439:in `initialize' >> from /Library/Ruby/Gems/1.8/gems/hyper_record-0.2.8/lib/ >> hyper_record.rb:32:in `initialize' >> >> I set up HyperRecord according to the instructions >> athttp://code.google.com/p/hypertable/wiki/HyperRecord. I created a >> model called Page and a pages table. I inserted a page into the table >> using the hql console and when I run Page.all on the Rails console I >> get my object. When I try to set an attribute on the object or save >> it, I get this: >> >> >> page.save >> >> NoMethodError: You have a nil object when you didn't expect it! >> You might have expected an instance of Array. >> The error occurred while evaluating nil.include? >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> attribute_methods.rb:142:in `create_time_zone_conversion_attribute?' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> attribute_methods.rb:75:in `define_attribute_methods' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> attribute_methods.rb:71:in `each' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> attribute_methods.rb:71:in `define_attribute_methods' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> attribute_methods.rb:242:in `method_missing' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> base.rb:2453:in `send' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> base.rb:2453:in `id' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> transactions.rb:206:in `rollback_active_record_state!' >> from >> /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/ >> transactions.rb:196:in `save' >> from (irb):4 >> >> I didn't find any of those errors on the internet so I dug a little. >> The unit tests in /Library/Ruby/Gems/1.8/gems/hyper_record-0.2.8/ >> don't run either. I get 7 failures and 4 errors. For the sake of >> readability I have attached the errors t the end of this mail. >> >> I noticed how a recent HyperRecord changelog entry says that a >> currently unreleased version of HyperRecord will be compatible with >> Hypertable 0.9.3.. I installed the newest Mac OS X binary v. 0.9.3.1 >> of Hypertable and Thrift from source (with all default >> configuration). "ht version" gives me the following output: >> >> Hypertable 0.9.3.1 (v0.9.3.1) >> Hadoop: 0.20.2 >> BerkeleyDB: 4.8.26 >> Boost: 1_40 >> Thrift: Thrift version 0.2.0-exported >> Javac: 1.6.0_17 >> GCC/G++: 4.2.1 >> >> I even tried installing the hyper_record gem from the latest github >> sourcecode but the error remains. I'll try downgrading Hypertable now, >> but since that will take a bit and might not fix the problem I thought >> I'd ask here. >> >> Thanks in advance. You guys are great! >> >> Cheers, Jonas >> >> Here's the result of running the hyper_record unit tests: >> >> Loaded suite test/thrift_client_test >> Started >> .....FFFFF...............FEEFEE >> Finished in 50.520398 seconds. >> >> 1) Failure: >> test: get cell should return a single cell using hql_query. >> (ThriftClientTest) >> [test/thrift_client_test.rb:377:in `__bind_1274999516_737055' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:374:in `__bind_1274999516_737055' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: get cell should return a single cell using hql_query. ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run']: >> <"k1"> expected but was >> <nil>. >> >> 2) Failure: >> test: get cells should return a list of cells using get_cells. >> (ThriftClientTest) >> [test/thrift_client_test.rb:460:in `__bind_1274999518_371706' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:455:in `__bind_1274999518_371706' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: get cells should return a list of cells using get_cells. >> ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run']: >> <"k1"> expected but was >> <nil>. >> >> 3) Failure: >> test: get cells should return a list of cells using hql_query. >> (ThriftClientTest) >> [test/thrift_client_test.rb:440:in `__bind_1274999519_962690' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:437:in `__bind_1274999519_962690' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: get cells should return a list of cells using hql_query. >> ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run']: >> <"k1"> expected but was >> <nil>. >> >> 4) Failure: >> test: get row should return a single row using get_row. >> (ThriftClientTest) >> [test/thrift_client_test.rb:417:in `__bind_1274999521_615933' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:414:in `__bind_1274999521_615933' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: get row should return a single row using get_row. ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run']: >> <"k1"> expected but was >> <nil>. >> >> 5) Failure: >> test: get row should return a single row using hql_query. >> (ThriftClientTest) >> [test/thrift_client_test.rb:407:in `__bind_1274999523_262199' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:404:in `__bind_1274999523_262199' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: get row should return a single row using hql_query. ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run']: >> <"k1"> expected but was >> <nil>. >> >> 6) Failure: >> test: set cell should insert a cell using hql_query. >> (ThriftClientTest) >> [test/thrift_client_test.rb:215:in `__bind_1274999548_994540' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:209:in `__bind_1274999548_994540' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: set cell should insert a cell using hql_query. ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run']: >> <"k1"> expected but was >> <nil>. >> >> 7) Error: >> test: set cell should insert a cell using set_cell. >> (ThriftClientTest): >> Hypertable::ThriftGen::ClientException: virtual void >> Hypertable::ThriftBroker::ServerHandler::set_cell(Hypertable::ThriftGen::Mu >> tator, >> const Hypertable::ThriftGen::Cell&): Hypertable::Exception: Invalid >> row key - cannot be zero length - HYPERTABLE bad key >> at void Hypertable::Cell::sanity_check() const (/Users/doug/src/ >> hypertable/src/cc/Hypertable/Lib/Cell.h:45) >> ./lib/hypertable/gen-rb/client_service.rb:248:in `recv_set_cell' >> ./lib/hypertable/gen-rb/client_service.rb:239:in `set_cell' >> test/thrift_client_test.rb:228:in `__bind_1274999550_405564' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:222:in `__bind_1274999550_405564' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: set cell should insert a cell using set_cell. ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run' >> >> 8) Error: >> test: set cell should work with mutator flush_interval. >> (ThriftClientTest): >> Hypertable::ThriftGen::ClientException: virtual void >> Hypertable::ThriftBroker::ServerHandler::set_cell(Hypertable::ThriftGen::Mu >> tator, >> const Hypertable::ThriftGen::Cell&): Hypertable::Exception: Invalid >> row key - cannot be zero length - HYPERTABLE bad key >> at void Hypertable::Cell::sanity_check() const (/Users/doug/src/ >> hypertable/src/cc/Hypertable/Lib/Cell.h:45) >> ./lib/hypertable/gen-rb/client_service.rb:248:in `recv_set_cell' >> ./lib/hypertable/gen-rb/client_service.rb:239:in `set_cell' >> test/thrift_client_test.rb:246:in `__bind_1274999551_850760' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:240:in `__bind_1274999551_850760' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: set cell should work with mutator flush_interval. ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run' >> >> 9) Failure: >> test: set cells should insert cells using hql_query. >> (ThriftClientTest) >> [test/thrift_client_test.rb:279:in `__bind_1274999553_253257' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:271:in `__bind_1274999553_253257' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: set cells should insert cells using hql_query. ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run']: >> <"k1"> expected but was >> <nil>. >> >> 10) Error: >> test: set cells should insert cells using set_cells. >> (ThriftClientTest): >> Hypertable::ThriftGen::ClientException: virtual void >> Hypertable::ThriftBroker::ServerHandler::set_cells(Hypertable::ThriftGen::M >> utator, >> const Hypertable::ThriftBroker::ThriftCells&): Hypertable::Exception: >> Invalid row key - cannot be zero length - HYPERTABLE bad key >> at void Hypertable::Cell::sanity_check() const (/Users/doug/src/ >> hypertable/src/cc/Hypertable/Lib/Cell.h:45) >> ./lib/hypertable/gen-rb/client_service.rb:278:in `recv_set_cells' >> ./lib/hypertable/gen-rb/client_service.rb:269:in `set_cells' >> test/thrift_client_test.rb:311:in `__bind_1274999554_673892' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:294:in `__bind_1274999554_673892' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: set cells should insert cells using set_cells. ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run' >> >> 11) Error: >> test: with mutator should yield a mutator object and close after >> block. (ThriftClientTest): >> Hypertable::ThriftGen::ClientException: virtual void >> Hypertable::ThriftBroker::ServerHandler::set_cells(Hypertable::ThriftGen::M >> utator, >> const Hypertable::ThriftBroker::ThriftCells&): Hypertable::Exception: >> Invalid row key - cannot be zero length - HYPERTABLE bad key >> at void Hypertable::Cell::sanity_check() const (/Users/doug/src/ >> hypertable/src/cc/Hypertable/Lib/Cell.h:45) >> ./lib/hypertable/gen-rb/client_service.rb:278:in `recv_set_cells' >> ./lib/hypertable/gen-rb/client_service.rb:269:in `set_cells' >> test/thrift_client_test.rb:349:in `__bind_1274999556_161817' >> ./lib/hypertable/thrift_client.rb:42:in `with_mutator' >> test/thrift_client_test.rb:344:in `__bind_1274999556_161817' >> ./lib/hypertable/thrift_client.rb:89:in `with_thrift_client' >> test/thrift_client_test.rb:340:in `__bind_1274999556_161817' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `call' >> /Library/Ruby/Gems/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb: >> 362:in `test: with mutator should yield a mutator object and close >> after block. ' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `__send__' >> /Library/Ruby/Gems/1.8/gems/mocha-0.9.8/lib/mocha/integration/ >> test_unit/ruby_version_186_and_above.rb:19:in `run' >> >> 31 tests, 84 assertions, 7 failures, 4 errors > > -- > You received this message because you are subscribed to the Google Groups > "Hypertable Development" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/hypertable-dev?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Hypertable Development" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/hypertable-dev?hl=en.
