0002-Process-config-reload-in-AIO-workers-20250918.patch
application/x-patch
Filename: 0002-Process-config-reload-in-AIO-workers-20250918.patch
Type: application/x-patch
Part: 1
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0002
Subject: Process config reload in AIO workers
| File | + | − |
|---|---|---|
| src/backend/storage/aio/method_worker.c | 25 | 0 |
From d1ed934ccd02fca2c831e582b07a169e17d19f59 Mon Sep 17 00:00:00 2001
From: Dmitrii Dolgov <9erthalion6@gmail.com>
Date: Tue, 17 Jun 2025 15:14:33 +0200
Subject: [PATCH 02/16] Process config reload in AIO workers
Currenly AIO workers process interrupts only via CHECK_FOR_INTERRUPTS,
which does not include ConfigReloadPending. Thus we need to check for it
explicitly.
---
src/backend/storage/aio/method_worker.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/src/backend/storage/aio/method_worker.c b/src/backend/storage/aio/method_worker.c
index b5ac073a910..d1c6da89c4b 100644
--- a/src/backend/storage/aio/method_worker.c
+++ b/src/backend/storage/aio/method_worker.c
@@ -80,6 +80,7 @@ static void pgaio_worker_shmem_init(bool first_time);
static bool pgaio_worker_needs_synchronous_execution(PgAioHandle *ioh);
static int pgaio_worker_submit(uint16 num_staged_ios, PgAioHandle **staged_ios);
+static void pgaio_worker_process_interrupts(void);
const IoMethodOps pgaio_worker_ops = {
.shmem_size = pgaio_worker_shmem_size,
@@ -463,6 +464,8 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len)
int nwakeups = 0;
int worker;
+ pgaio_worker_process_interrupts();
+
/*
* Try to get a job to do.
*
@@ -592,3 +595,25 @@ pgaio_workers_enabled(void)
{
return io_method == IOMETHOD_WORKER;
}
+
+/*
+ * Process any new interrupts.
+ */
+static void
+pgaio_worker_process_interrupts(void)
+{
+ /*
+ * Reloading config can trigger further signals, complicating interrupts
+ * processing -- so let it run first.
+ *
+ * XXX: Is there any need in memory barrier after ProcessConfigFile?
+ */
+ if (ConfigReloadPending)
+ {
+ ConfigReloadPending = false;
+ ProcessConfigFile(PGC_SIGHUP);
+ }
+
+ if (ProcSignalBarrierPending)
+ ProcessProcSignalBarrier();
+}
--
2.34.1