Re: GIN logging GIN_SEGMENT_UNMODIFIED actions?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: GIN logging GIN_SEGMENT_UNMODIFIED actions?
Дата
Msg-id 3424.1472569846@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: GIN logging GIN_SEGMENT_UNMODIFIED actions?  (Fujii Masao <masao.fujii@gmail.com>)
Ответы Re: GIN logging GIN_SEGMENT_UNMODIFIED actions?  (Fujii Masao <masao.fujii@gmail.com>)
Список pgsql-hackers
Fujii Masao <masao.fujii@gmail.com> writes:
> 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.

Hmm, comparing gin_desc() to ginRedoInsert() makes me think there are more
problems there than that one.  Aren't the references to "payload" wrong
in all three branches of that "if" construct, not just the middle one?
I'm inclined to suspect we should restructure this more like
           {               ginxlogInsert *xlrec = (ginxlogInsert *) rec;
-               char       *payload = rec + sizeof(ginxlogInsert);
               appendStringInfo(buf, "isdata: %c isleaf: %c",                             (xlrec->flags &
GIN_INSERT_ISDATA)? 'T' : 'F',                            (xlrec->flags & GIN_INSERT_ISLEAF) ? 'T' : 'F');
if (!(xlrec->flags & GIN_INSERT_ISLEAF))               {
 
+                   char       *payload = rec + sizeof(ginxlogInsert);                   BlockNumber leftChildBlkno;
              BlockNumber rightChildBlkno;
 
                   leftChildBlkno = BlockIdGetBlockNumber((BlockId) payload);                   payload +=
sizeof(BlockIdData);                  rightChildBlkno = BlockIdGetBlockNumber((BlockId) payload);
payload+= sizeof(BlockNumber);                   appendStringInfo(buf, " children: %u/%u",
     leftChildBlkno, rightChildBlkno);               }
 
+               if (XLogRecHasBlockImage(record, 0))
+                   appendStringInfoString(buf, " (full page image)");
+               else
+               {
+                   char       *payload = XLogRecGetBlockData(record, 0, NULL);
+                   if (!(xlrec->flags & GIN_INSERT_ISDATA))                       appendStringInfo(buf, " isdelete:
%c",                      (((ginxlogInsertEntry *) payload)->isDelete) ? 'T' : 'F');                   ... etc etc ...
 


        regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Jesper Pedersen
Дата:
Сообщение: pageinspect: Hash index support
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: sequences and pg_upgrade