We use Valgrind --together with the suppression file provided in Postgres 
repo-- to test Citus extension against memory errors.
We replace /bin/postgres executable with a simple bash script that executes the 
original postgres executable under Valgrind and then we run our usual 
regression tests.
However, it is quite hard to understand which query caused a memory error in 
the stack traces that has been dumped into valgrind logfile.

For this reason, we propose the attached patch to allow Valgrind to report the 
query string that caused a memory error right after the relevant stack trace.
I belive this would not only be useful for Citus but also for Postgres and 
other extensions in their valgrind-testing process.

An example piece of valgrind test output for a memory error found in Citus is 
as follows:

==67222== VALGRINDERROR-BEGIN
==67222== Invalid write of size 8
==67222==    at 0x7A6F040: dlist_delete 
(home/pguser/postgres-installation/include/postgresql/server/lib/ilist.h:360)
==67222==    by 0x7A6F040: ResetRemoteTransaction 
(home/pguser/citus/src/backend/distributed/transaction/remote_transaction.c:872)
==67222==    by 0x79CF606: AfterXactHostConnectionHandling 
(home/pguser/citus/src/backend/distributed/connection/connection_management.c:1468)
==67222==    by 0x79CF65E: AfterXactConnectionHandling 
(home/pguser/citus/src/backend/distributed/connection/connection_management.c:175)
==67222==    by 0x7A6FEDA: CoordinatedTransactionCallback 
(home/pguser/citus/src/backend/distributed/transaction/transaction_management.c:309)
==67222==    by 0x544F30: CallXactCallbacks 
(home/pguser/postgres-source/postgresql-15.1/src/backend/access/transam/xact.c:3661)
==67222==    by 0x548E12: CommitTransaction 
(home/pguser/postgres-source/postgresql-15.1/src/backend/access/transam/xact.c:2298)
==67222==    by 0x549BBC: CommitTransactionCommand 
(home/pguser/postgres-source/postgresql-15.1/src/backend/access/transam/xact.c:3048)
==67222==    by 0x832C30: finish_xact_command 
(home/pguser/postgres-source/postgresql-15.1/src/backend/tcop/postgres.c:2750)
==67222==    by 0x8352AF: exec_simple_query 
(home/pguser/postgres-source/postgresql-15.1/src/backend/tcop/postgres.c:1279)
==67222==    by 0x837312: PostgresMain 
(home/pguser/postgres-source/postgresql-15.1/src/backend/tcop/postgres.c:4595)
==67222==    by 0x79F7B5: BackendRun 
(home/pguser/postgres-source/postgresql-15.1/src/backend/postmaster/postmaster.c:4504)
==67222==    by 0x7A24E6: BackendStartup 
(home/pguser/postgres-source/postgresql-15.1/src/backend/postmaster/postmaster.c:4232)
==67222==  Address 0x7486378 is 3,512 bytes inside a recently re-allocated 
block of size 8,192 alloc'd
==67222==    at 0x484486F: malloc 
(builddir/build/BUILD/valgrind-3.19.0/coregrind/m_replacemalloc/vg_replace_malloc.c:381)
==67222==    by 0x98B6EB: AllocSetContextCreateInternal 
(home/pguser/postgres-source/postgresql-15.1/src/backend/utils/mmgr/aset.c:469)
==67222==    by 0x79CEABA: InitializeConnectionManagement 
(home/pguser/citus/src/backend/distributed/connection/connection_management.c:107)
==67222==    by 0x799FE9F: _PG_init 
(home/pguser/citus/src/backend/distributed/shared_library_init.c:464)
==67222==    by 0x96AE6B: internal_load_library 
(home/pguser/postgres-source/postgresql-15.1/src/backend/utils/fmgr/dfmgr.c:289)
==67222==    by 0x96B09A: load_file 
(home/pguser/postgres-source/postgresql-15.1/src/backend/utils/fmgr/dfmgr.c:156)
==67222==    by 0x973122: load_libraries 
(home/pguser/postgres-source/postgresql-15.1/src/backend/utils/init/miscinit.c:1668)
==67222==    by 0x974680: process_shared_preload_libraries 
(home/pguser/postgres-source/postgresql-15.1/src/backend/utils/init/miscinit.c:1686)
==67222==    by 0x7A336A: PostmasterMain 
(home/pguser/postgres-source/postgresql-15.1/src/backend/postmaster/postmaster.c:1026)
==67222==    by 0x6F303C: main 
(home/pguser/postgres-source/postgresql-15.1/src/backend/main/main.c:202)
==67222==
==67222== VALGRINDERROR-END
**67222** The query for which valgrind reported a memory error was: REFRESH 
MATERIALIZED VIEW other_schema.mat_view;

Attachment: v1-0001-Report-the-query-string-that-caused-a-mem-error.patch
Description: v1-0001-Report-the-query-string-that-caused-a-mem-error.patch

Reply via email to