Thanks Sanjit. Will try out the patch and let you know how it goes. --Naveen founder & ceo, campfire labs. 415 425 5412. We're hiring! http://www.campfirelabs.com/jobs
On Mon, Mar 28, 2011 at 12:47 PM, Sanjit Jhala <[email protected]> wrote: > Thats definitely a problem. I've filed issue > 593<http://code.google.com/p/hypertable/issues/detail?id=593> and > attached the following patch which should fix this problem. Let me know if > it works for you. > > -Sanjit > > > On Mon, Mar 28, 2011 at 12:30 PM, Naveen Koorakula < > [email protected]> wrote: > >> Hi Sanjit, >> >> Working purely with the Future + Result apis doesn't help either. In this >> case, Future->get() gives a Result object back, which has an api for >> get_cells(Cells). Trying to use this causes the same assert to be triggered. >> >> --Naveen >> founder & ceo, campfire labs. 415 425 5412. We're hiring! >> http://www.campfirelabs.com/jobs >> >> >> On Mon, Mar 28, 2011 at 9:46 AM, Sanjit Jhala <[email protected]> wrote: >> >>> Hi Naveen, >>> >>> Take a look at the Future API (src/cc/Hypertable/Lib/Future.h) to see how >>> it implements the ResultCallback class. It does check for errors, end of >>> scan, whether the scan has been cancelled etc. In fact you might want to >>> directly use or derive from the Future API instead of implementing your own >>> callback from scratch. One caveat is that if you are going to destroy >>> asynchronous scanners before the scan finishes, you must call the cancel >>> method on the Future object to avoid a deadlock. An example can be found >>> in src/cc/Hypertable/Lib/tests/future_abrupt_end_test.cc . >>> >>> -Sanjit >>> >>> >>> On Sun, Mar 27, 2011 at 10:12 AM, Doug Judd <[email protected]> wrote: >>> >>>> Hi Naveen, >>>> >>>> Thanks for the report. We'll look into it on Monday. >>>> >>>> - Doug >>>> >>>> >>>> On Sat, Mar 26, 2011 at 9:02 PM, Naveen Koorakula < >>>> [email protected]> wrote: >>>> >>>>> Hi guys, >>>>> >>>>> Just deployed 0.9.5.0.pre with hypernode (our hypertable nodejs >>>>> binding), which uses the new C++ async scanner api. I'm seeing an error on >>>>> an async read. >>>>> >>>>> The error looks like: >>>>> /usr/local/include/boost/smart_ptr/intrusive_ptr.hpp:166: T* >>>>> boost::intrusive_ptr<T>::operator->() const [with T = >>>>> Hypertable::CellsBuilder]: Assertion `px != 0' failed. >>>>> >>>>> This traces back to a class I defined in the binding, that derives from >>>>> ResultCallback. >>>>> >>>>> class ScanCallback: public Hypertable::ResultCallback { >>>>> public: >>>>> ScanCallback() : m_cells(8) {} >>>>> virtual ~ScanCallback() {} >>>>> >>>>> void >>>>> scan_ok (TableScannerAsync *scanner, ScanCellsPtr &cells) { >>>>> ScopedLock lock(mutex); >>>>> Cells cc; >>>>> => cells->get(cc); >>>>> for (Hypertable::Cells::iterator ci = cc.begin(), >>>>> cend = cc.end(); ci != cend; ci++) { >>>>> m_cells.add(*ci); >>>>> } >>>>> } >>>>> ... >>>>> } >>>>> >>>>> The error is happening at the [ cells->get(cc) ] call marked in the >>>>> code fragment above. >>>>> >>>>> The backtrace looks like: >>>>> (gdb) bt >>>>> #0 0x00007ffff64e3ba5 in raise () from /lib/libc.so.6 >>>>> #1 0x00007ffff64e76b0 in abort () from /lib/libc.so.6 >>>>> #2 0x00007ffff64dca71 in __assert_fail () from /lib/libc.so.6 >>>>> #3 0x00007fffd1b6a3eb in >>>>> boost::intrusive_ptr<Hypertable::CellsBuilder>::operator-> (this=0xcaf608) >>>>> at /usr/local/include/boost/smart_ptr/intrusive_ptr.hpp:166 >>>>> #4 0x00007fffd1b630ca in Hypertable::ScanCells::get (this=0xcaf5a0, >>>>> cells=...) at /a/hypertable/current/include/Hypertable/Lib/ScanCells.h:50 >>>>> #5 0x00007fffd1b650ac in HyperConn::ScanCallback::scan_ok >>>>> (this=0xcede80, scanner=0xc2fb00, cells=...) at ../binding.cc:70 >>>>> #6 0x00007fffd186d6d8 in >>>>> Hypertable::TableScannerAsync::maybe_callback_ok (this=0xc2fb00, >>>>> scanner_id=<value optimized out>, next=<value optimized out>, >>>>> do_callback=255, cells=...) at /home/developer/s\ >>>>> rc/hypertable/src/cc/Hypertable/Lib/TableScannerAsync.cc:334 >>>>> #7 0x00007fffd1871b9a in Hypertable::TableScannerAsync::handle_result >>>>> (this=0xc2fb00, scanner_id=0, event=<value optimized out>, >>>>> is_create=<value >>>>> optimized out>) at /home/developer/src/hypertable/src/\ >>>>> cc/Hypertable/Lib/TableScannerAsync.cc:267 >>>>> #8 0x00007fffd18753b4 in Hypertable::TableScannerHandler::run >>>>> (this=0xcac410) at >>>>> /home/developer/src/hypertable/src/cc/Hypertable/Lib/TableScannerHandler.cc:40 >>>>> #9 0x00007fffd173bfab in operator() (this=0xc96890) at >>>>> /home/developer/src/hypertable/src/cc/AsyncComm/ApplicationQueue.h:154 >>>>> #10 >>>>> boost::detail::thread_data<Hypertable::ApplicationQueue::Worker>::run >>>>> (this=0xc96890) at /usr/local/include/boost/thread/detail/thread.hpp:56 >>>>> #11 0x00007fffcf33cb70 in thread_proxy () from >>>>> /a/hypertable/current/lib/libboost_thread.so.1.40.0 >>>>> #12 0x00007ffff683a971 in start_thread () from /lib/libpthread.so.0 >>>>> #13 0x00007ffff659692d in clone () from /lib/libc.so.6 >>>>> #14 0x0000000000000000 in ?? () >>>>> >>>>> >>>>> Tracing it back, it is happening in Hypertable/Lib/ScanCells.h:50 >>>>> >>>>> void ScanCells::get(Cells &cells) { m_cells->get(cells); } >>>>> >>>>> The value contained by the intrusive_ptr m_cells is null at this point. >>>>> >>>>> (gdb) >>>>> #4 0x00007fffd1b630ca in Hypertable::ScanCells::get (this=0xcaf5a0, >>>>> cells=...) at /a/hypertable/current/include/Hypertable/Lib/ScanCells.h:50 >>>>> (gdb) p m_cells >>>>> $1 = {px = 0x0} >>>>> >>>>> >>>>> ---- >>>>> >>>>> So my question is: what does >>>>> >>>>> ResultCallback::scan_ok(TableScannerAsync *scanner, ScanCellsPtr >>>>> &cells) >>>>> >>>>> indicate ? Are there any checks that need to be done before we can >>>>> attempt to read off the cells contained in the ScanCellsPtr &cells ? >>>>> Couldn't find anything obvious in code, hence asking.. >>>>> >>>>> TIA, >>>>> --Naveen >>>>> founder & ceo, campfire labs. 415 425 5412. We're hiring! >>>>> http://www.campfirelabs.com/jobs >>>>> >>>>> -- >>>>> 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. >>>> >>> >>> -- >>> 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.
