Content-Length: 273132 | pFad | http://github.com/postgrespro/pg_wait_sampling/pull/100/#top

51 Check collector has started in pg_wait_sampling_reset_profile. by valeriy-zainullin · Pull Request #100 · postgrespro/pg_wait_sampling · GitHub
Skip to content

Check collector has started in pg_wait_sampling_reset_profile. #100

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

valeriy-zainullin
Copy link

@valeriy-zainullin valeriy-zainullin commented Jun 19, 2025

The worker might have not started yet or it may never start, because its registration was cancelled due to worker limit.

This commit adds a check for NULL value of pgws_collector_hdr->latch. The previous usage in pg_wait_sampling.c has such a check, we should do the same here.

The worker might have not started yet or it may never start,
because its registration was cancelled due to worker limit.

This commit adds a check for NULL value of pgws_collector_hdr->latch.
The previous usage in pg_wait_sampling.c has such a check, we
should do the same here.
@valeriy-zainullin valeriy-zainullin changed the title Check worker has started in pg_wait_sampling_reset_profile. Check collector has started in pg_wait_sampling_reset_profile. Jun 19, 2025
@valeriy-zainullin
Copy link
Author

Воспроизведение. Можно запускать в любой директории, создается временный докер-контейнер.

#!/bin/bash

sudo docker run --rm -i ubuntu:24.04 bash <<"EOF"

set -xe

apt-get update
apt-get install -y \
  git build-essential pkg-config libicu-dev libipc-run-perl \
  flex bison libreadline-dev libz-dev gettext libperl-dev

git clone -b REL_17_5 --depth 1 https://github.com/postgres/postgres
cd postgres

git clone https://github.com/postgrespro/pg_wait_sampling contrib/pg_wait_sampling

mkdir contrib/pgws_reproduce

cat - > contrib/pgws_reproduce/Makefile <<"_EOF"
MODULE_big = pgws_reproduce
OBJS = main.o

EXTENSION = pgws_reproduce
REGRESS =

subdir = contrib/pgws_reproduce
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
_EOF

cat - > contrib/pgws_reproduce/pgws_reproduce.control <<"_EOF"
 pg_wait_sampling extension
comment = 'reproduce bug'
default_version = '1'
module_pathname = '$libdir/pgws_reproduce'
relocatable = true
_EOF

cat - > contrib/pgws_reproduce/main.c <<"_EOF"
#include "postgres.h"
#include "postmaster/bgworker.h"
#include "fmgr.h"
#include <sched.h> /* Only works on linux. */

PG_MODULE_MAGIC;

void pgws_reproduce_worker_main(Datum main_arg);
void _PG_init(void);

void pgws_reproduce_worker_main(Datum main_arg) {
  while (true) {
    sched_yield();
  }
}

void _PG_init(void) {
  /* Default limit of workers is 8. */
  for (int i = 0; i < 32; ++i) {
    BackgroundWorker worker;
    memset(&worker, 0, sizeof(worker));
    worker.bgw_restart_time = 1;
    worker.bgw_flags = BGWORKER_SHMEM_ACCESS;
    snprintf(worker.bgw_library_name, BGW_MAXLEN, "pgws_reproduce");
    snprintf(worker.bgw_function_name, BGW_MAXLEN, CppAsString(pgws_reproduce_worker_main));
    worker.bgw_main_arg = (Datum) 0;
    RegisterBackgroundWorker(&worker);
  }
}
_EOF

grep -v '$(recurse' contrib/Makefile > output.txt
mv output.txt contrib/Makefile
echo 'SUBDIRS += pg_wait_sampling pgws_reproduce' >> contrib/Makefile
echo -e '$(recurse)\n$(recurse_always)' >> contrib/Makefile

CFLAGS='-ggdb -O0 -g' ./configure -q \
  --enable-cassert --enable-tap-tests --enable-nls \
  --with-icu --with-perl --prefix=$(pwd)/install

make -s -j$(nproc) world-bin
make -s -j$(nproc) install-world-bin

useradd postgres
chown -R postgres .

cd install
su postgres -c 'bin/initdb -D data'
su postgres -c "echo \"shared_preload_libraries = 'pgws_reproduce, pg_wait_sampling'\" > data/postgresql.conf"

su postgres -c 'bin/pg_ctl -D data -l logfile start' || (cat logfile; exit 1)
cd ..

su postgres -c 'make -C contrib/pg_wait_sampling installcheck' || (grep '(PID ' install/logfile; exit 2)
cat install/logfile

EOF

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/postgrespro/pg_wait_sampling/pull/100/#top

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy