Thread

  1. [PATCH] numa: Catch "Operation not permitted" error

    Christoph Berg <myon@debian.org> — 2025-10-16T11:24:56Z

    On older (before 2.0.19) libnuma versions, the error thrown when the
    NUMA status cannot be inquired is different.
    ---
     .../expected/pg_buffercache_numa_2.out        | 21 +++++++++++++++++++
     src/test/regress/expected/numa_2.out          |  9 ++++++++
     2 files changed, 30 insertions(+)
     create mode 100644 contrib/pg_buffercache/expected/pg_buffercache_numa_2.out
     create mode 100644 src/test/regress/expected/numa_2.out
    
    diff --git a/contrib/pg_buffercache/expected/pg_buffercache_numa_2.out b/contrib/pg_buffercache/expected/pg_buffercache_numa_2.out
    new file mode 100644
    index 00000000000..b970dd2eaf9
    --- /dev/null
    +++ b/contrib/pg_buffercache/expected/pg_buffercache_numa_2.out
    @@ -0,0 +1,21 @@
    +SELECT NOT(pg_numa_available()) AS skip_test \gset
    +\if :skip_test
    +\quit
    +\endif
    +-- We expect at least one entry for each buffer
    +select count(*) >= (select setting::bigint
    +                    from pg_settings
    +                    where name = 'shared_buffers')
    +from pg_buffercache_numa;
    +ERROR:  failed NUMA pages inquiry: Operation not permitted
    +-- Check that the functions / views can't be accessed by default. To avoid
    +-- having to create a dedicated user, use the pg_database_owner pseudo-role.
    +SET ROLE pg_database_owner;
    +SELECT count(*) > 0 FROM pg_buffercache_numa;
    +ERROR:  permission denied for view pg_buffercache_numa
    +RESET role;
    +-- Check that pg_monitor is allowed to query view / function
    +SET ROLE pg_monitor;
    +SELECT count(*) > 0 FROM pg_buffercache_numa;
    +ERROR:  failed NUMA pages inquiry: Operation not permitted
    +RESET role;
    diff --git a/src/test/regress/expected/numa_2.out b/src/test/regress/expected/numa_2.out
    new file mode 100644
    index 00000000000..b4c19f01f59
    --- /dev/null
    +++ b/src/test/regress/expected/numa_2.out
    @@ -0,0 +1,9 @@
    +SELECT NOT(pg_numa_available()) AS skip_test \gset
    +\if :skip_test
    +SELECT COUNT(*) = 0 AS ok FROM pg_shmem_allocations_numa;
    +\quit
    +\endif
    +-- switch to superuser
    +\c -
    +SELECT COUNT(*) >= 0 AS ok FROM pg_shmem_allocations_numa;
    +ERROR:  failed NUMA pages inquiry status: Operation not permitted
    -- 
    2.51.0
    
    
    --dtTMMoFAaZ2xgutH--