On Tue, Aug 30, 2016 at 3:13 PM, Fujii Masao <masao.fu...@gmail.com> wrote:
> On Tue, Aug 30, 2016 at 3:39 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
>> Fujii Masao <masao.fu...@gmail.com> writes:
>>> ISTM that the cause of this issue is that gin_desc() uses XLogRecGetData() 
>>> to
>>> extract ginxlogVacuumDataLeafPage data from XLOG_GIN_VACUUM_DATA_LEAF_PAGE
>>> record. Since it's registered by XLogRegisterBufData() in
>>> ginVacuumPostingTreeLeaf(),
>>> XLogRecGetBlockData() should be used, instead. Patch attached. Thought?
>>
>> I think we probably have more issues than that.  See for example
>> https://www.postgresql.org/message-id/flat/20160826072658.15676.7628%40wrigleys.postgresql.org
>>
>> which clearly shows that the replay logic is seeing something wrong too:
>>
>> 2016-08-26 06:01:50 UTC FATAL:  unexpected GIN leaf action: 0
>> 2016-08-26 06:01:50 UTC CONTEXT:  xlog redo Insert item, node:
>> 1663/16387/33108 blkno: 6622 isdata: T isleaf: T 3 segments: 2 (add 0 items)
>> 0 unknown action 0 ???
>>
>> If it were just a matter of gin_desc() being wrong, we'd not have
>> gotten such a failure.  (Which is not to say that gin_desc() isn't
>> wrong; it may well be.)
>
> Yeah, I got the pg_xlogdump issue while I was trying to reproduce
> the above reported problem. Fixing pg_xlogdump would be helpful for
> the analysis of that problem.

Attached is the updated version of the patch.

I found that pg_xlogdump code for XLOG_GIN_INSERT record with
GIN_INSERT_ISLEAF flag has the same issue, i.e.,
"unknown action 0" error is thrown for that record.
The latest patch fixes this.

Regards,

-- 
Fujii Masao
*** a/src/backend/access/rmgrdesc/gindesc.c
--- b/src/backend/access/rmgrdesc/gindesc.c
***************
*** 110,116 **** gin_desc(StringInfo buf, XLogReaderState *record)
  				else if (xlrec->flags & GIN_INSERT_ISLEAF)
  				{
  					ginxlogRecompressDataLeaf *insertData =
! 					(ginxlogRecompressDataLeaf *) payload;
  
  					if (XLogRecHasBlockImage(record, 0))
  						appendStringInfoString(buf, " (full page image)");
--- 110,116 ----
  				else if (xlrec->flags & GIN_INSERT_ISLEAF)
  				{
  					ginxlogRecompressDataLeaf *insertData =
! 						(ginxlogRecompressDataLeaf *) XLogRecGetBlockData(record, 0, NULL);
  
  					if (XLogRecHasBlockImage(record, 0))
  						appendStringInfoString(buf, " (full page image)");
***************
*** 144,150 **** gin_desc(StringInfo buf, XLogReaderState *record)
  			break;
  		case XLOG_GIN_VACUUM_DATA_LEAF_PAGE:
  			{
! 				ginxlogVacuumDataLeafPage *xlrec = (ginxlogVacuumDataLeafPage *) rec;
  
  				if (XLogRecHasBlockImage(record, 0))
  					appendStringInfoString(buf, " (full page image)");
--- 144,151 ----
  			break;
  		case XLOG_GIN_VACUUM_DATA_LEAF_PAGE:
  			{
! 				ginxlogVacuumDataLeafPage *xlrec =
! 					(ginxlogVacuumDataLeafPage *) XLogRecGetBlockData(record, 0, NULL);
  
  				if (XLogRecHasBlockImage(record, 0))
  					appendStringInfoString(buf, " (full page image)");
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to