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.

Reply via email to