Heres a link to the patch<http://hypertable.googlecode.com/issues/attachment?aid=-1524632965305428877&name=0001-Fixed-bug-in-ScanCells-interface-whereby-it-was-poss.patch&token=5b65660c8c6e68080abaad70bf6a0fa4> which is downloadable from the issue page<http://code.google.com/p/hypertable/issues/detail?id=593> .
-Sanjit On Mon, Mar 28, 2011 at 3:15 PM, Sanjit Jhala <[email protected]> wrote: > Theres a minor bug in that patch. I'm working on a more comprehensive patch > which augments the regression tests to test for this scenario. I'm running > the tests now, and should have it ready soon. > > -Sanjit > > > > On Mon, Mar 28, 2011 at 2:27 PM, Naveen Koorakula <[email protected] > > wrote: > >> 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.
