On Thu, Mar 16, 2017 at 11:11 AM, Amit Kapila <amit.kapil...@gmail.com> wrote: > On Wed, Mar 15, 2017 at 9:23 PM, Ashutosh Sharma <ashu.coe...@gmail.com> > wrote: >> >>> >>> Few other comments: >>> 1. >>> + if (ndeletable > 0) >>> + { >>> + /* No ereport(ERROR) until changes are logged */ >>> + START_CRIT_SECTION(); >>> + >>> + PageIndexMultiDelete(page, deletable, ndeletable); >>> + >>> + pageopaque = (HashPageOpaque) PageGetSpecialPointer(page); >>> + pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES; >>> >>> You clearing this flag while logging the action, but same is not taken >>> care during replay. Any reasons? >> >> That's because we conditionally WAL Log this flag status and when we >> do so, we take a it's FPI. >> > > Sure, but we are not clearing in conditionally. I am not sure, how > after recovery it will be cleared it gets set during normal operation. > Moreover, btree already clears similar flag during replay (refer > btree_xlog_delete).
You were right. In case datachecksum is enabled or wal_log_hint is set to true, 'LH_PAGE_HAS_DEAD_TUPLES' will get wal logged and therefore needs to be cleared on the standby as well. Attached is the patch that clears this flag on standby during replay. -- With Regards, Ashutosh Sharma EnterpriseDB:http://www.enterprisedb.com
0001-Reset-LH_PAGE_HAS_DEAD_TUPLES-flag-on-standby-when.patch
Description: application/download
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers