Don't process multi xmax in FreezeMultiXactId() if it is already marked as invalid.

Поиск
Список
Период
Сортировка
От Anton A. Melnikov
Тема Don't process multi xmax in FreezeMultiXactId() if it is already marked as invalid.
Дата
Msg-id 21ece835-b671-4656-9f35-008b9f355034@postgrespro.ru
обсуждение исходный текст
Ответы Maybe don't process multi xmax in FreezeMultiXactId() if it is already marked as invalid?
Re: Don't process multi xmax in FreezeMultiXactId() if it is already marked as invalid.
Список pgsql-hackers
Hello!

The src/backend/access/heap/README.tuplock says about HEAP_XMAX_INVALID bit
that "Any tuple with this bit set does not have a valid value stored in XMAX."

Found that FreezeMultiXactId() tries to process such an invalid multi xmax
and may looks for an update xid in the pg_multixact for it.

Maybe not do this work in FreezeMultiXactId() and exit immediately if the
bit HEAP_XMAX_INVALID was already set?

For instance, like that:

master
@@ -6215,6 +6215,15 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask,
         /* We should only be called in Multis */
         Assert(t_infomask & HEAP_XMAX_IS_MULTI);
  
+       /* Xmax is already marked as invalid */
+       if (MultiXactIdIsValid(multi) &&
+               (t_infomask & HEAP_XMAX_INVALID))
+       {
+               *flags |= FRM_INVALIDATE_XMAX;
+               pagefrz->freeze_required = true;
+               return InvalidTransactionId;
+       }
+
         if (!MultiXactIdIsValid(multi) ||
                 HEAP_LOCKED_UPGRADED(t_infomask))


With the best regards,

-- 
Anton A. Melnikov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company



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

Предыдущее
От: "Winter Loo"
Дата:
Сообщение: may be a buffer overflow problem
Следующее
От: Bertrand Drouvot
Дата:
Сообщение: Re: Avoid orphaned objects dependencies, take 3