Assertion failure while streaming toasted data

Поиск
Список
Период
Сортировка
От Pavan Deolasee
Тема Assertion failure while streaming toasted data
Дата
Msg-id CABOikdN-_858zojYN-2tNcHiVTw-nhxPwoQS4quExeweQfG1Ug@mail.gmail.com
обсуждение исходный текст
Ответы Re: Assertion failure while streaming toasted data  (Dilip Kumar <dilipbalaut@gmail.com>)
Re: Assertion failure while streaming toasted data  (Michael Paquier <michael@paquier.xyz>)
Список pgsql-hackers
Hi,

While working on an output plugin that uses streaming protocol, I hit an assertion failure. Further investigations revealed a possible bug in core Postgres. This must be new to PG14 since streaming support is new to this release. I extended the test_decoding regression test to demonstrate the failure. PFA

```
2021-05-25 11:32:19.493 IST client backend[68321] pg_regress/stream STATEMENT:  SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '
1', 'stream-changes', '1');
TRAP: FailedAssertion("txn->size == 0", File: "reorderbuffer.c", Line: 3476, PID: 68321)
```

From my preliminary analysis, it looks like we fail to adjust the memory accounting after streaming toasted tuples. More concretely, after `ReorderBufferProcessPartialChange()` processes the in-progress transaction,  `ReorderBufferTruncateTXN()` truncates the accumulated changed in the transaction, but fails to adjust the buffer size for toast chunks. Maybe we are missing a call to `ReorderBufferToastReset()` somewhere? 

From what I see, the assertion only triggers when data is inserted via COPY (multi-insert). 

Let me know if anything else is needed to reproduce this.

Thanks,
Pavan

--
Pavan Deolasee 

Вложения

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

Предыдущее
От: "houzj.fnst@fujitsu.com"
Дата:
Сообщение: RE: Parallel Inserts in CREATE TABLE AS
Следующее
От: Guillaume Lelarge
Дата:
Сообщение: Re: Issue on catalogs.sgml