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.

Reply via email to