Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Won't Do
-
1.2.5
-
None
Description
Running valgrind over PrimProc to validate my changes. VG is quite noisy but it's correct about all the things we are doing wrong.
This ticket is for fixing the list of columns involved in processing FE1's (pre-join functions & expressions) and FE2's (post-join functions & expressions). PrimProc copies the list of columns required to evaluate those, but that list is apparently not correct, because VG complains that the FE instances are processing uninit'd data. If the list is correct, then this wouldn't be uninit'd data. IIRC, the list comes from joblistfactory.
Found these errors running the queries in working_tpch/misc.
An example of one of the complaints.
{{==7705== Conditional jump or move depends on uninitialised value(s)
==7705== at 0xC22DA57: internal_ascii_loop (loop.c:298)
==7705== by 0xC22DA57: __gconv_transform_internal_ascii (skeleton.c:609)
==7705== by 0xC2C4EF4: wcsrtombs (wcsrtombs.c:110)
==7705== by 0xC24AB20: wcstombs (wcstombs.c:34)
==7705== by 0x6FF9CE8: wcstombs (stdlib.h:154)
==7705== by 0x6FF9CE8: idb_wcstombs (utils_utf8.h:165)
==7705== by 0x6FF9CE8: funcexp::Func_lcase::getStrVal[abi:cxx11](rowgroup::Row&, std::vector<boost::shared_ptr<execplan::ParseTree>, std::allocator<boost::shared_ptr<execplan::ParseTree> > >&, bool&, execplan::CalpontSystemCatalog::ColType&) (func_lcase.cpp:80)
==7705== by 0x6516038: execplan::FunctionColumn::getStrVal[abi:cxx11](rowgroup::Row&, bool&) (functioncolumn.h:210)
==7705== by 0x65258B2: execplan::PredicateOperator::getBoolVal(rowgroup::Row&, bool&, execplan::ReturnedColumn*, execplan::ReturnedColumn*) (predicateoperator.h:462)
==7705== by 0x6FBC63F: getBoolVal (parsetree.h:273)
==7705== by 0x6FBC63F: evaluate (funcexp.h:112)
==7705== by 0x6FBC63F: funcexp::FuncExpWrapper::evaluate(rowgroup::Row*) (funcexpwrapper.cpp:119)
==7705== by 0x175294: primitiveprocessor::BatchPrimitiveProcessor::execute() (batchprimitiveprocessor.cpp:1565)
==7705== by 0x176336: primitiveprocessor::BatchPrimitiveProcessor::operator()() (batchprimitiveprocessor.cpp:2217)
==7705== by 0x18905E: primitiveprocessor::BPPSeeder::operator()() (bppseeder.cpp:288)
==7705== by 0xB28D2CA: threadpool::PriorityThreadPool::threadFcn(threadpool::PriorityThreadPool::Priority) (prioritythreadpool.cpp:191)
==7705== by 0x9AF7BCC: ??? (in /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.65.1)}}
In my version of the code, batchprimitiveprocessor.cpp:1565 is if (fe1->evaluate(&fe1In)).
Other errors point to the call where the fe2 instances are evaluated.