On Wed, Jan 21, 2015 at 12:47 PM, Amit Langote < langote_amit...@lab.ntt.co.jp> wrote: > > On 20-01-2015 PM 11:29, Amit Kapila wrote: > > Note - I have yet to handle the new node types introduced at some > > of the places and need to verify prepared queries and some other > > things, however I think it will be good if I can get some feedback > > at current stage. > > > > I got an assertion failure: > > In src/backend/executor/execTuples.c: ExecStoreTuple() > > /* passing shouldFree=true for a tuple on a disk page is not sane */ > Assert(BufferIsValid(buffer) ? (!shouldFree) : true); >
Good Catch! The reason is that while master backend is scanning from a heap page, if it finds another tuple/tuples's from shared memory message queue it will process those tuples first and in such a scenario, the scan descriptor will still have reference to buffer which it is using from scanning from heap. Your proposed fix will work. > After fixing this, the assertion failure seems to be gone though I > observed the blocked (CPU maxed out) state as reported elsewhere by Thom > Brown. > Does it happen only when parallel_seqscan_degree > max_worker_processes? Thanks for checking the patch. With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com