Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZ22k-001wwC-25 for pgpool-hackers@arkaria.postgresql.org; Fri, 26 Dec 2025 07:15:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vZ22j-008mn5-1R for pgpool-hackers@arkaria.postgresql.org; Fri, 26 Dec 2025 07:15:22 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZ22i-008mmx-37 for pgpool-hackers@lists.postgresql.org; Fri, 26 Dec 2025 07:15:22 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZ22g-002flH-0Z for pgpool-hackers@lists.postgresql.org; Fri, 26 Dec 2025 07:15:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:Cc:To:Message-Id:Date:Sender :Reply-To:Content-ID:Content-Description; bh=0abRKHKqr89rh3ebV/Xod9joT+sv3gASEHTcve0LKcQ=; b=57qX/W/NlMzueukYsDLOhhK6aq 09saSQFozbNDwzX7icJ0G7oyR5cllRMFETuWpuzLjIJj9VNr3RycJih1cj6Pvsy8dpIOAisrmrUte dh2DHTlIErqv+oL9nbOdSxse4ULbYff8zeWkgJnUHtafO78AOV/hRL9YAK8oNseI16A9tKUwR81ig Qa6BaPuDGmX3axgVgWRYSEaczwawTAN2IIVasGPaXRDlUFTPHpcWUj/1WtOizkTY+LCpGdfwFIQSd VJ3G4562ZXUspaZpTmhTA9wOTWrNS4KI7gzlERvgDmNmifJd05X+fwCwnnWJn74+rYkH8r0LEHAD/ J+g/e2Pg==; Received: from [2409:11:4120:300:a00a:b419:51f1:fc19] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vZ22c-0062SY-0i; Fri, 26 Dec 2025 07:15:16 +0000 Date: Fri, 26 Dec 2025 16:15:05 +0900 (JST) Message-Id: <20251226.161505.2055782082697641759.ishii@postgresql.org> To: nadav@tailorbrands.com Cc: pgpool-hackers@lists.postgresql.org Subject: Re: Proposal: recent access based routing for primary-replica setups From: Tatsuo Ishii In-Reply-To: References: <20251223.174625.653233061559427537.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 29.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Fri_Dec_26_16_15_05_2025_247)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:a00a:b419:51f1:fc19 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Fri_Dec_26_16_15_05_2025_247)-- Content-Type: Text/Plain; charset=utf-8 Content-Transfer-Encoding: base64 SGkgTmFkYXYsDQoNCkkgdGhpbmsgSSBmb3VuZCBhIGNhdXNlIG9mIHRoZSBwcm9ibGVtLiBPbiBM aW51eCwgaWYgU0lHQ0hMRCBpcw0KaWdub3JlZCAoc2V0IHRvIFNJR19JR04pLCB3YWl0cGlkKCkg Y2Fubm90IGdldCBwcm9wZXIgY2hpbGQgc3RhdHVzLg0KQmVjYXVzZSB0aGUga2VybmVsIHJlbGNh aW1zIHRoZSByZXNvdXJjZSBmb3IgdGhlIGNoaWxkIHByb2Nlc3MgdG8gbm90DQptYWtlIHRoZSBj aGlsZCBwcm9jZXNzIGEgem9tYmllLiBBbmQgdGhpcyBtYWtlcyB3YWl0cGlkKCkgdG8gZmFpbCB3 aXRoDQpFQ0hMRC4gU2luY2UgdGhlIHJldHVybiBvZiB3YWl0cGlkKCkgaXMgbm90IGNoZWNrZWQs IEkgZGlkIG5vdCBub3RpY2UNCnRoZSB3YWl0cGlkKCkgZmFpbHVyZSAoSSByZWNvbW1lbmQgdG8g Y2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZg0Kd2FpdHBpZCgpKS4NCg0KCS8qIHNldCB1cCBzaWdu YWwgaGFuZGxlcnMgKi8NCglzaWduYWwoU0lHQUxSTSwgU0lHX0RGTCk7DQoJc2lnbmFsKFNJR1RF Uk0sIG15X3NpZ25hbF9oYW5kbGVyKTsNCglzaWduYWwoU0lHSU5ULCBteV9zaWduYWxfaGFuZGxl cik7DQoJc2lnbmFsKFNJR0hVUCwgcmVsb2FkX2NvbmZpZ19oYW5kbGVyKTsNCglzaWduYWwoU0lH UVVJVCwgbXlfc2lnbmFsX2hhbmRsZXIpOw0KCXNpZ25hbChTSUdDSExELCBTSUdfSUdOKTsJPC0t LSBTSUdDSExEIGlzIGlnbm9yZWQNCglzaWduYWwoU0lHVVNSMSwgbXlfc2lnbmFsX2hhbmRsZXIp Ow0KCXNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsNCglzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7 DQoNClRvIGZpeCB0aGlzLCBlaXRoZXIgY2hhbmdlIHRoZSBsaW5lIGFib3ZlIHRvOg0KDQoJc2ln bmFsKFNJR0NITEQsIFNJR19ERkwpOw0Kb3INCglzaWduYWwoU0lHQ0hMRCwgbXlfc2lnbmFsX2hh bmRsZXIpOw0KCWFuZCBtb2RpZnkgbXlfc2lnbmFsX2hhbmRsZXIuDQoNCkkgcmVjb21tZW5kIHRo ZSBsYXR0ZXIsIGJlY2F1c2UgaXQgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBkZWZhdWx0DQpiZWhh dmlvciBvZiBTSUdDSExELCB3aGljaCBtaWdodCBiZSBkaWZmZXJlbnQgcGVyIHBsYXRmb3JtLg0K QXR0YWNoZWQgaXMgdGhlIHBhdGNoIHRvIGRvIHRoaXMuIChhbmQgcnVuIHBnaW5kZW50KS4NCkkg YWxzbyBub3RpY2UgdGhhdCBzb21ldGhpbmcgbGlrZToNCg0KCQkvKiBDb3VudCB0b2tlbnMgaW4g b3V0cHV0IGZvciB2YWxpZGF0aW9uICovDQoJCWNoYXIgKmxpbmVfY29weSA9IHBzdHJkdXAobGlu ZSk7DQoJCWNoYXIgKnRlbXBfdG9rZW4gPSBzdHJ0b2sobGluZV9jb3B5LCAiIFx0XG4iKTsNCg0K WW91IHNob3VsZCBkZWNsYXJlIGxpbmVfY29weSBhbmQgdGVtcF90b2tlbiBpbiB0aGUgYmVnZ2lu ZyBvZiB0aGUgY29kZQ0KYmxvY2sgKG9yIGluIHRoZSBvdXRlciBibG9jaykuICBUaGUgZm9yd2Fy ZCBkZWNsYXJhdGlvbiBpcyByZWNvbW1lbmRlZA0KY29kaW5nIHN0eWxlIGluIFBncG9vbC1JSSAo YW5kIFBvc3RncmVTUUwpLiBTYW1lIHRoaW5nIGNhbiBiZSBzYWlkIHRvDQpzb21lIG90aGVyIHZh cmlhYmxlcy4NCg0KQmVzdCByZWdhcmRzLA0KLS0NClRhdHN1byBJc2hpaQ0KU1JBIE9TUyBLLksu DQpFbmdsaXNoOiBodHRwOi8vd3d3LnNyYW9zcy5jby5qcC9pbmRleF9lbi8NCkphcGFuZXNlOmh0 dHA6Ly93d3cuc3Jhb3NzLmNvLmpwDQoNCg0KPiBIaSBUYXRzdW8sDQo+IA0KPiBUaGFuayB5b3Ug Zm9yIHRoZSBub3RlLg0KPiANCj4gSSd2ZSByZW1vdmVkIHRoZSBkb2NrZXIgc3R1ZmYuIHN0YXJ0 ZWQgd29ya2luZyBpbiBhbiB1YnVudHUgMjQgVk0gdG8gbWF0Y2gNCj4gdGhlIHNldHVwLiBob3Bl ZnVsbHkgdGhlIHJlc3VsdHMgd2lsbCBiZSBiZXR0ZXIsIGhhZCBzbyBtYW55IGlzc3Vlcw0KPiBj b21waWxpbmcgYW5kIHRlc3RpbmcgYmVmb3JlIHRoYXQgc3R1ZmYgd2Fzbid0IHByb3Blcmx5IGZv cm11bGF0ZWQuDQo+IA0KPiBBdHRhY2hpbmcgdGhlIGxhdGVzdCBwYXRjaC4NCj4gDQo+IHRoaXMg aXMgd2hhdCBpJ20gc2VlaW5nOg0KPiBhZGF2QGxpbWEtZGV2Oi9zcmMvcGdwb29sMi9zcmMvdGVz dC9yZWdyZXNzaW9uJCBQR0hPU1Q9L3RtcCAuL3JlZ3Jlc3Muc2ggLXANCj4gL3Vzci9iaW4gMDQx LmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5DQo+IGNyZWF0aW5nIHBncG9vbC1JSSB0ZW1wb3Jh cnkgaW5zdGFsbGF0aW9uIC4uLg0KPiBtb3ZpbmcgcGdwb29sX3NldHVwIHRvIHRlbXBvcmFyeSBp bnN0YWxsYXRpb24gcGF0aCAuLi4NCj4gbW92aW5nIHdhdGNoZG9nX3NldHVwIHRvIHRlbXBvcmFy eSBpbnN0YWxsYXRpb24gcGF0aCAuLi4NCj4gdXNpbmcgcGdwb29sLUlJIGF0IC9zcmMvcGdwb29s Mi9zcmMvdGVzdC9yZWdyZXNzaW9uL3RlbXAvaW5zdGFsbGVkDQo+ICoqKioqKioqKioqKioqKioq KioqKioqKioNCj4gUkVHUkVTU0lPTiBNT0RFICAgICAgICAgIDogaW5zdGFsbA0KPiBQZ3Bvb2wt SUkgdmVyc2lvbiAgICAgICAgOiBwZ3Bvb2wtSUkgdmVyc2lvbiA0LjhkZXZlbCAobWl0c3VrYWtl Ym9zaGkpDQo+IFBncG9vbC1JSSBpbnN0YWxsIHBhdGggICA6IC9zcmMvcGdwb29sMi9zcmMvdGVz dC9yZWdyZXNzaW9uL3RlbXAvaW5zdGFsbGVkDQo+IFBvc3RncmVTUUwgYmluICAgICAgICAgICA6 IC91c3IvbGliL3Bvc3RncmVzcWwvMTYvYmluDQo+IFBvc3RncmVTUUwgTWFqb3IgdmVyc2lvbiA6 IDE2DQo+IHBnYmVuY2ggICAgICAgICAgICAgICAgICA6IC91c3IvbGliL3Bvc3RncmVzcWwvMTYv YmluL3BnYmVuY2gNCj4gUG9zdGdyZVNRTCBqZGJjICAgICAgICAgIDoNCj4gL3Vzci9sb2NhbC9w Z3NxbC9zaGFyZS9wb3N0Z3Jlc3FsLTkuMi0xMDAzLmpkYmM0Lmphcg0KPiAqKioqKioqKioqKioq KioqKioqKioqKioqDQo+IHRlc3RpbmcgMDQxLmV4dGVybmFsX3JlcGxpY2F0aW9uX2RlbGF5Li4u b2suDQo+IG91dCBvZiAxIG9rOjEgZmFpbGVkOjAgdGltZW91dDowDQo+IA0KPiANCj4gDQo+IE9u IFR1ZSwgRGVjIDIzLCAyMDI1IGF0IDEwOjQ24oCvQU0gVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0 Z3Jlc3FsLm9yZz4gd3JvdGU6DQo+IA0KPj4gPiBIaSBUYXRzdW8sDQo+PiA+DQo+PiA+IEkna20g cnVubmluZyBpbnRvIGlzc3VlcyB0ZXN0aW5nIHRoaXMgYW5kIGhhdmUgY3JlYXRlZCBhIGZ1bGwg ZG9ja2VyDQo+PiA+IGNvbXBvc2Ugc2V0dXAgLSBjYW4geW91IHBsZWFzZSBwb2ludCBtZSB0byB1 cCB0byBkYXRlIGd1aWRlcyBvbiB0aGUgYmVzdA0KPj4gPiB3YXkgdG8gcnVuIHRoZSB0ZXN0cyBz byBpIGtub3cgd2UncmUgZG9pbmcgaXQgdGhlIHNhbWUgd2F5Pw0KPj4gPg0KPj4gPiBUaGFuayB5 b3UgZm9yIGFsbCB5b3VyIGhlbHAhDQo+Pg0KPj4gSSBoYXZlIHJ1biB0aGUgcmVncmVzc2lvbiB0 ZXN0IG9uIHRoZSBQZ3Bvb2wtSUkgbWFzdGVyIGJyYW5jaCBvbiBteQ0KPj4gVWJ1bnR1IDI0IGJv eC4NCj4+DQo+PiBjZCBwZ3Bvb2wyL3NyYy90ZXN0L3JlZ3Jlc3Npb24NCj4+IC4vcmVncmVzcy5z aCAwNDENCj4+DQo+PiBUaGlzIHRpbWUgSSBub3RpY2VkOg0KPj4NCj4+IC0gVGhlIHBhdGNoIGRv ZXMgbm90IG5hbWVkIHdpdGggdmVyc2lvbiBudW1iZXINCj4+IC0gVGhlIHBhdGNoIGNyZWF0ZXMg LmRvY2tlcmlnbm9yZSBhbmQgZG9ja2VyLyBkaXJlY3RvcnkuDQo+Pg0KPj4gQXJlIHRoZXkgaW50 ZW5kZWQ/IEkgYW0gYXNraW5nIGJlY2F1c2UgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gdGhlDQo+ PiBwcmV2aW91cyB2ZXJzaW9uLg0KPj4NCj4+ID4gT24gVHVlLCBEZWMgMjMsIDIwMjUgYXQgMjox M+KAr0FNIFRhdHN1byBJc2hpaSA8aXNoaWlAcG9zdGdyZXNxbC5vcmc+DQo+PiB3cm90ZToNCj4+ ID4NCj4+ID4+ID4gSSB0aGluayBldmVyeXRoaW5nIGlzIHBhc3Npbmcgbm93LiBuZXcgdmVyc2lv biBhdHRhY2hlZC4NCj4+ID4+DQo+PiA+PiBVbmZvcnR1bmF0ZWx5IFRlc3QxIGRpZCBub3QgcGFz cy4NCj4+ID4+DQo+PiA+PiA9PT0gVGVzdDE6IEJhc2ljIGV4dGVybmFsIGNvbW1hbmQgd2l0aCBp bnRlZ2VyIG1pbGxpc2Vjb25kIHZhbHVlcyA9PT0NCj4+ID4+IHdhaXRpbmcgZm9yIHNlcnZlciB0 byBzdGFydC4uLi4xNDM4NjAwIDIwMjUtMTItMjMgMDk6MDk6NDguMzM3IEpTVCBMT0c6DQo+PiA+ PiByZWRpcmVjdGluZyBsb2cgb3V0cHV0IHRvIGxvZ2dpbmcgY29sbGVjdG9yIHByb2Nlc3MNCj4+ ID4+IDE0Mzg2MDAgMjAyNS0xMi0yMyAwOTowOTo0OC4zMzcgSlNUIEhJTlQ6ICBGdXR1cmUgbG9n IG91dHB1dCB3aWxsIGFwcGVhcg0KPj4gPj4gaW4gZGlyZWN0b3J5ICJsb2ciLg0KPj4gPj4gIGRv bmUNCj4+ID4+IHNlcnZlciBzdGFydGVkDQo+PiA+PiB3YWl0aW5nIGZvciBzZXJ2ZXIgdG8gc3Rh cnQuLi4uMTQzODYxNyAyMDI1LTEyLTIzIDA5OjA5OjQ4LjQ0MyBKU1QgTE9HOg0KPj4gPj4gcmVk aXJlY3RpbmcgbG9nIG91dHB1dCB0byBsb2dnaW5nIGNvbGxlY3RvciBwcm9jZXNzDQo+PiA+PiAx NDM4NjE3IDIwMjUtMTItMjMgMDk6MDk6NDguNDQzIEpTVCBISU5UOiAgRnV0dXJlIGxvZyBvdXRw dXQgd2lsbCBhcHBlYXINCj4+ID4+IGluIGRpcmVjdG9yeSAibG9nIi4NCj4+ID4+ICBkb25lDQo+ PiA+PiBzZXJ2ZXIgc3RhcnRlZA0KPj4gPj4gd2FpdGluZyBmb3Igc2VydmVyIHRvIHN0YXJ0Li4u LjE0Mzg2MzQgMjAyNS0xMi0yMyAwOTowOTo0OC41NjEgSlNUIExPRzoNCj4+ID4+IHJlZGlyZWN0 aW5nIGxvZyBvdXRwdXQgdG8gbG9nZ2luZyBjb2xsZWN0b3IgcHJvY2Vzcw0KPj4gPj4gMTQzODYz NCAyMDI1LTEyLTIzIDA5OjA5OjQ4LjU2MSBKU1QgSElOVDogIEZ1dHVyZSBsb2cgb3V0cHV0IHdp bGwgYXBwZWFyDQo+PiA+PiBpbiBkaXJlY3RvcnkgImxvZyIuDQo+PiA+PiAgZG9uZQ0KPj4gPj4g c2VydmVyIHN0YXJ0ZWQNCj4+ID4+IENSRUFURSBUQUJMRQ0KPj4gPj4gV2FpdGluZyBmb3Igc3Jf Y2hlY2sgdG8gcnVuLi4uDQo+PiA+PiBDb21tYW5kIGV4ZWN1dGVkIGFmdGVyIDEgc2Vjb25kcw0K Pj4gPj4gIG5vZGVfaWQgfCBob3N0bmFtZSAgfCBwb3J0ICB8IHN0YXR1cyB8IHBnX3N0YXR1cyB8 IGxiX3dlaWdodCB8ICByb2xlDQo+PiAgfA0KPj4gPj4gcGdfcm9sZSB8IHNlbGVjdF9jbnQgfCBs b2FkX2JhbGFuY2Vfbm9kZSB8IHJlcGxpY2F0aW9uX2RlbGF5IHwNCj4+ID4+IHJlcGxpY2F0aW9u X3N0YXRlIHwgcmVwbGljYXRpb25fc3luY19zdGF0ZSB8IGxhc3Rfc3RhdHVzX2NoYW5nZQ0KPj4g Pj4NCj4+ID4+DQo+PiAtLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+PiA+PiAgMCAg ICAgICB8IGxvY2FsaG9zdCB8IDExMDAyIHwgdXAgICAgIHwgdXAgICAgICAgIHwgMC4zMzMzMzMg IHwgcHJpbWFyeQ0KPj4gfA0KPj4gPj4gcHJpbWFyeSB8IDAgICAgICAgICAgfCB0cnVlICAgICAg ICAgICAgICB8IDAgICAgICAgICAgICAgICAgIHwNCj4+ID4+ICAgICAgfCAgICAgICAgICAgICAg ICAgICAgICAgIHwgMjAyNS0xMi0yMyAwOTowOTo0OQ0KPj4gPj4gIDEgICAgICAgfCBsb2NhbGhv c3QgfCAxMTAwMyB8IHVwICAgICB8IHVwICAgICAgICB8IDAuMzMzMzMzICB8IHN0YW5kYnkNCj4+ IHwNCj4+ID4+IHN0YW5kYnkgfCAwICAgICAgICAgIHwgZmFsc2UgICAgICAgICAgICAgfCAwICAg ICAgICAgICAgICAgICB8DQo+PiA+PiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8IDIw MjUtMTItMjMgMDk6MDk6NDkNCj4+ID4+ICAyICAgICAgIHwgbG9jYWxob3N0IHwgMTEwMDQgfCB1 cCAgICAgfCB1cCAgICAgICAgfCAwLjMzMzMzMyAgfCBzdGFuZGJ5DQo+PiB8DQo+PiA+PiBzdGFu ZGJ5IHwgMCAgICAgICAgICB8IGZhbHNlICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICAgICAg fA0KPj4gPj4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAyMDI1LTEyLTIzIDA5OjA5 OjQ5DQo+PiA+PiAoMyByb3dzKQ0KPj4gPj4NCj4+ID4+IGZhaWw6IGV4dGVybmFsIGNvbW1hbmQg ZGVsYXkgbG9nZ2luZyBub3QgZm91bmQNCj4+ID4+DQo+PiA+PiA+IE9uIE1vbiwgTm92IDI0LCAy MDI1IGF0IDk6NDHigK9BTSBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPg0KPj4g Pj4gd3JvdGU6DQo+PiA+PiA+DQo+PiA+PiA+PiBUaGFuayB5b3UgZm9yIHVwZGF0aW5nIHRoZSBw YXRjaCEgVGhpcyB0aW1lIHRoZSBwYXRjaCBhcHBsaWVzIHdpdGhvdXQNCj4+ID4+ID4+IGFueSBp c3N1ZSBhbmQgY29tcGlsZXMgZmluZS4gVW5mb3J0dW5hdGVseSByZWdyZXNzaW9uIHRlc3QgZmFp bGVkLg0KPj4gPj4gPj4NCj4+ID4+ID4+IHRlc3RpbmcgMDQxLmV4dGVybmFsX3JlcGxpY2F0aW9u X2RlbGF5Li4uZmFpbGVkLg0KPj4gPj4gPj4NCj4+ID4+ID4+IEZyb20gdGhlIHJlZ3Jlc3Npb24g bG9nLCBpdCBzZWVtcyBUZXN0NyBmYWlsZWQuDQo+PiA+PiA+Pg0KPj4gPj4gPj4NCj4+ID4+DQo+ PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+ID4+ID4+ID09PSBUZXN0NzogQ29tbWFuZCB0aW1l b3V0IGhhbmRsaW5nID09PQ0KPj4gPj4gPj4gd2FpdGluZyBmb3Igc2VydmVyIHRvIHN0YXJ0Li4u LjQxMTE4MSAyMDI1LTExLTI0IDE2OjMxOjA1LjI0NCBKU1QNCj4+IExPRzoNCj4+ID4+ID4+IHJl ZGlyZWN0aW5nIGxvZyBvdXRwdXQgdG8gbG9nZ2luZyBjb2xsZWN0b3IgcHJvY2Vzcw0KPj4gPj4g Pj4gNDExMTgxIDIwMjUtMTEtMjQgMTY6MzE6MDUuMjQ0IEpTVCBISU5UOiAgRnV0dXJlIGxvZyBv dXRwdXQgd2lsbA0KPj4gYXBwZWFyDQo+PiA+PiBpbg0KPj4gPj4gPj4gZGlyZWN0b3J5ICJsb2ci Lg0KPj4gPj4gPj4gIGRvbmUNCj4+ID4+ID4+IHNlcnZlciBzdGFydGVkDQo+PiA+PiA+PiB3YWl0 aW5nIGZvciBzZXJ2ZXIgdG8gc3RhcnQuLi4uNDExMTk2IDIwMjUtMTEtMjQgMTY6MzE6MDUuMzUy IEpTVA0KPj4gTE9HOg0KPj4gPj4gPj4gcmVkaXJlY3RpbmcgbG9nIG91dHB1dCB0byBsb2dnaW5n IGNvbGxlY3RvciBwcm9jZXNzDQo+PiA+PiA+PiA0MTExOTYgMjAyNS0xMS0yNCAxNjozMTowNS4z NTIgSlNUIEhJTlQ6ICBGdXR1cmUgbG9nIG91dHB1dCB3aWxsDQo+PiBhcHBlYXINCj4+ID4+IGlu DQo+PiA+PiA+PiBkaXJlY3RvcnkgImxvZyIuDQo+PiA+PiA+PiAgZG9uZQ0KPj4gPj4gPj4gc2Vy dmVyIHN0YXJ0ZWQNCj4+ID4+ID4+IHdhaXRpbmcgZm9yIHNlcnZlciB0byBzdGFydC4uLi40MTEy MTMgMjAyNS0xMS0yNCAxNjozMTowNS40NjEgSlNUDQo+PiBMT0c6DQo+PiA+PiA+PiByZWRpcmVj dGluZyBsb2cgb3V0cHV0IHRvIGxvZ2dpbmcgY29sbGVjdG9yIHByb2Nlc3MNCj4+ID4+ID4+IDQx MTIxMyAyMDI1LTExLTI0IDE2OjMxOjA1LjQ2MSBKU1QgSElOVDogIEZ1dHVyZSBsb2cgb3V0cHV0 IHdpbGwNCj4+IGFwcGVhcg0KPj4gPj4gaW4NCj4+ID4+ID4+IGRpcmVjdG9yeSAibG9nIi4NCj4+ ID4+ID4+ICBkb25lDQo+PiA+PiA+PiBzZXJ2ZXIgc3RhcnRlZA0KPj4gPj4gPj4gV2FpdGluZyBm b3IgY29tbWFuZCB0aW1lb3V0Li4uDQo+PiA+PiA+PiBmYWlsOiBjb21tYW5kIHRpbWVvdXQgbm90 IGRldGVjdGVkDQo+PiA+PiA+Pg0KPj4gPj4gPj4NCj4+ID4+DQo+PiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4+ID4+ID4+DQo+PiA+PiA+PiBBdHRhY2hlZCBpcyB0aGUgcGdwb29sLmxvZy4gSWYg eW91IG5lZWQgbW9yZSBpbmZvLCBwbGVhc2UgbGV0IG1lDQo+PiBrbm93Lg0KPj4gPj4gPj4NCj4+ ID4+ID4+IEJlc3QgcmVnYXJkcywNCj4+ID4+ID4+IC0tDQo+PiA+PiA+PiBUYXRzdW8gSXNoaWkN Cj4+ID4+ID4+IFNSQSBPU1MgSy5LLg0KPj4gPj4gPj4gRW5nbGlzaDogaHR0cDovL3d3dy5zcmFv c3MuY28uanAvaW5kZXhfZW4vDQo+PiA+PiA+PiBKYXBhbmVzZTpodHRwOi8vd3d3LnNyYW9zcy5j by5qcA0KPj4gPj4gPj4NCj4+ID4+ID4+DQo+PiA+PiA+PiA+IEhpIFRhdHN1bywNCj4+ID4+ID4+ ID4NCj4+ID4+ID4+ID4gU29ycnkgYWdhaW4sIHRoaXMgd2FzIGR1ZSB0byB0aGUgc2VwYXJhdGlv biBvZiAyIHBhdGNoZXMgYW5kIGkgb25seQ0KPj4gPj4gc2VudA0KPj4gPj4gPj4gPiB0aGUgb25l Lg0KPj4gPj4gPj4gPg0KPj4gPj4gPj4gPiBJJ3ZlIG1lcmdlZCBpdCBpbnRvIDEgY29tbWl0IGFu ZCAxIHBhdGNoIGFuZCByZWJhc2VkIG92ZXIgbWFzdGVyIHRvDQo+PiA+PiBhdm9pZA0KPj4gPj4g Pj4gPiB0aGVzZSBpc3N1ZXMgbW92aW5nIGZvcndhcmQuDQo+PiA+PiA+PiA+DQo+PiA+PiA+PiA+ IFBGQSBsYXRlc3QgdmVyc2lvbg0KPj4gPj4gPj4gPg0KPj4gPj4gPj4gPiBPbiBUaHUsIE5vdiAy MCwgMjAyNSBhdCAxOjA54oCvQU0gVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0Z3Jlc3FsLm9yZw0K Pj4gPg0KPj4gPj4gPj4gd3JvdGU6DQo+PiA+PiA+PiA+DQo+PiA+PiA+PiA+PiBIaSBOYWRhdiwN Cj4+ID4+ID4+ID4+DQo+PiA+PiA+PiA+PiBUaGFuayB5b3UgZm9yIG5ldyBwYXRjaC4NCj4+ID4+ ID4+ID4+IFVuZm9ydHVuYXRlbHkgdGhlIHBhdGNoIGRpZCBub3QgYXBwbHkgdG8gY3VycmVudCBt YXN0ZXIuDQo+PiA+PiA+PiA+Pg0KPj4gPj4gPj4gPj4gJCBnaXQgYXBwbHkNCj4+ID4+ID4+ID4+ IH4vMDAwMS1GaXgtbXVsdGlwbGUtaXNzdWVzLWluLWV4dGVybmFsLXJlcGxpY2F0aW9uLWRlbGF5 LWZlLnBhdGNoDQo+PiA+PiA+PiA+PiBlcnJvcjogcGF0Y2ggZmFpbGVkOg0KPj4gPj4gc3JjL3N0 cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jOjY5NA0KPj4gPj4gPj4gPj4g ZXJyb3I6IHNyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYzogcGF0 Y2ggZG9lcw0KPj4gbm90DQo+PiA+PiA+PiBhcHBseQ0KPj4gPj4gPj4gPj4NCj4+ID4+ID4+ID4+ IE1heWJlIHRoZSBwYXRjaCBpcyBvbiB0b3Agb2YgeW91ciBwcmV2aW91cyBwYXRjaD8NCj4+ID4+ ID4+ID4+DQo+PiA+PiA+PiA+PiBBbHNvIEkgc3VnZ2VzdCB0byB1c2UgIi12IiBvcHRpb24gb2Yg ImdpdCBmb3JtYXQtcGF0Y2giIHRvIGFkZCB0aGUNCj4+ID4+ID4+ID4+IHBhdGNoIHZlcnNpb24g bnVtYmVyIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBrbm93IHdoaWNoIHBhdGNoIGlzIHRoZQ0KPj4g Pj4gPj4gPj4gbGF0ZXN0Lg0KPj4gPj4gPj4gPj4NCj4+ID4+ID4+ID4+IEJlc3QgcmVnYXJkcywN Cj4+ID4+ID4+ID4+IC0tDQo+PiA+PiA+PiA+PiBUYXRzdW8gSXNoaWkNCj4+ID4+ID4+ID4+IFNS QSBPU1MgSy5LLg0KPj4gPj4gPj4gPj4gRW5nbGlzaDogaHR0cDovL3d3dy5zcmFvc3MuY28uanAv aW5kZXhfZW4vDQo+PiA+PiA+PiA+PiBKYXBhbmVzZTpodHRwOi8vd3d3LnNyYW9zcy5jby5qcA0K Pj4gPj4gPj4gPj4NCj4+ID4+ID4+ID4+ID4gSGkgVGF0c3VvLA0KPj4gPj4gPj4gPj4gPg0KPj4g Pj4gPj4gPj4gPiBQbGVhc2Ugc2VlIGF0dGFjaGVkIGFuIHVwZGF0ZWQgdmVyc2lvbi4NCj4+ID4+ ID4+ID4+ID4NCj4+ID4+ID4+ID4+ID4gdGhhbmsgeW91DQo+PiA+PiA+PiA+PiA+DQo+PiA+PiA+ PiA+PiA+IE9uIEZyaSwgTm92IDcsIDIwMjUgYXQgMjowN+KAr0FNIFRhdHN1byBJc2hpaSA8DQo+ PiBpc2hpaUBwb3N0Z3Jlc3FsLm9yZz4NCj4+ID4+ID4+ID4+IHdyb3RlOg0KPj4gPj4gPj4gPj4g Pg0KPj4gPj4gPj4gPj4gPj4gPiBTb3JyeSBmb3IgdGhhdCAtIHRoYW5rcyBmb3IgdGhlIHBhdGNo Lg0KPj4gPj4gPj4gPj4gPj4gPg0KPj4gPj4gPj4gPj4gPj4gPiBQbGVhc2UgZmluZCBhdHRhY2hl ZCBhIG5ldyB2ZXJzaW9uDQo+PiA+PiA+PiA+PiA+Pg0KPj4gPj4gPj4gPj4gPj4gVGhhbmtzIGZv ciB0aGUgbmV3IHZlcnNpb24uIFVuZm9ydHVuYXRlbHkgdGhpcyB0aW1lIHJlZ3Jlc3Npb24NCj4+ ID4+IHRlc3QNCj4+ID4+ID4+ID4+ID4+IGZhaWxzIGF0Og0KPj4gPj4gPj4gPj4gPj4NCj4+ID4+ ID4+ID4+ID4+ID4gV2FpdGluZyBmb3IgY29tbWFuZCB0aW1lb3V0Li4uDQo+PiA+PiA+PiA+PiA+ PiA+IGZhaWw6IGNvbW1hbmQgdGltZW91dCBub3QgZGV0ZWN0ZWQNCj4+ID4+ID4+ID4+ID4+DQo+ PiA+PiA+PiA+PiA+PiBBdHRhY2hlZCBpcyB0aGUgcGdwb29sLmxvZy4NCj4+ID4+ID4+ID4+ID4+ DQo+PiA+PiA+PiA+PiA+PiBCZXN0IHJlZ2FyZHMsDQo+PiA+PiA+PiA+PiA+PiAtLQ0KPj4gPj4g Pj4gPj4gPj4gVGF0c3VvIElzaGlpDQo+PiA+PiA+PiA+PiA+PiBTUkEgT1NTIEsuSy4NCj4+ID4+ ID4+ID4+ID4+IEVuZ2xpc2g6IGh0dHA6Ly93d3cuc3Jhb3NzLmNvLmpwL2luZGV4X2VuLw0KPj4g Pj4gPj4gPj4gPj4gSmFwYW5lc2U6aHR0cDovL3d3dy5zcmFvc3MuY28uanANCj4+ID4+ID4+ID4+ ID4+DQo+PiA+PiA+PiA+PiA+PiA+IE9uIE1vbiwgTm92IDMsIDIwMjUgYXQgOTowNeKAr0FNIFRh dHN1byBJc2hpaSA8DQo+PiA+PiBpc2hpaUBwb3N0Z3Jlc3FsLm9yZz4NCj4+ID4+ID4+ID4+ID4+ IHdyb3RlOg0KPj4gPj4gPj4gPj4gPj4gPg0KPj4gPj4gPj4gPj4gPj4gPj4gPiB0aGFua3MgYW5k IHNvcnJ5IGZvciB0aGUgaXNzdWVzLCBwbGVhc2UgZmluZCBhdHRhY2hlZA0KPj4gdXBkYXRlZA0K Pj4gPj4gPj4gPj4gdmVyc2lvbi4NCj4+ID4+ID4+ID4+ID4+ID4+DQo+PiA+PiA+PiA+PiA+PiA+ PiBObyBwcm9ibGVtLg0KPj4gPj4gPj4gPj4gPj4gPj4NCj4+ID4+ID4+ID4+ID4+ID4+IFRoaXMg dGltZSB0aGUgcGF0Y2ggYXBwbGllcyBmaW5lLCBubyBjb21waWxlciB3YXJuaW5ncy4NCj4+ID4+ IEhvd2V2ZXIsDQo+PiA+PiA+PiA+PiA+PiA+PiByZWdyZXNzaW9uIHRlc3QgZGlkIG5vdCBwYXNz ZWQgaGVyZSAob24gVWJ1bnR1IDI0IExUUyBpZg0KPj4gdGhpcw0KPj4gPj4gPj4gPj4gPj4gPj4g bWF0dGVycykuICBTbyBJIGxvb2tlZCBpbnRvDQo+PiA+PiA+PiA+PiA+PiA+Pg0KPj4gPj4gc3Jj L3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDEuZXh0ZXJuYWxfcmVwbGljYXRpb25fZGVsYXkvdGVz dC5zaCBhDQo+PiA+PiA+PiA+PiA+PiA+PiBsaXR0bGUgYml0IGFuZCBhcHBseSBhdHRhY2hlZCBw YXRjaCAodGVzdC5zaC5wYXRjaCkuIEl0DQo+PiBtb3ZlZA0KPj4gPj4gPj4gZm9yd2FyZA0KPj4g Pj4gPj4gPj4gPj4gPj4gcGFydGlhbGx5IGJ1dCBmYWlsZWQgYXQ6DQo+PiA+PiA+PiA+PiA+PiA+ Pg0KPj4gPj4gPj4gPj4gPj4gPj4gZmFpbDogY29tbWFuZCBleGVjdXRpb24gZmFpbHVyZSBub3Qg ZGV0ZWN0ZWQNCj4+ID4+ID4+ID4+ID4+ID4+DQo+PiA+PiA+PiA+PiA+PiA+PiBQbGVhc2UgZmlu ZCBhdHRhY2hlZA0KPj4gPj4gPj4gPj4gPj4gPj4NCj4+ID4+ID4+ID4+ID4+DQo+PiA+PiA+PiA+ Pg0KPj4gPj4gPj4NCj4+ID4+DQo+PiBzcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0MS5leHRl cm5hbF9yZXBsaWNhdGlvbl9kZWxheS90ZXN0ZGlyL3BncG9vbC5sb2cNCj4+ID4+ID4+ID4+ID4+ ID4+IGFuZCBzcmMvdGVzdC9yZWdyZXNzaW9uL2xvZy8wNDEuZXh0ZXJuYWxfcmVwbGljYXRpb25f ZGVsYXkuDQo+PiA+PiA+PiA+PiA+PiA+Pg0KPj4gPj4gPj4gPj4gPj4gPj4gQmVzdCByZWdhcmRz LA0KPj4gPj4gPj4gPj4gPj4gPj4gLS0NCj4+ID4+ID4+ID4+ID4+ID4+IFRhdHN1byBJc2hpaQ0K Pj4gPj4gPj4gPj4gPj4gPj4gU1JBIE9TUyBLLksuDQo+PiA+PiA+PiA+PiA+PiA+PiBFbmdsaXNo OiBodHRwOi8vd3d3LnNyYW9zcy5jby5qcC9pbmRleF9lbi8NCj4+ID4+ID4+ID4+ID4+ID4+IEph cGFuZXNlOmh0dHA6Ly93d3cuc3Jhb3NzLmNvLmpwDQo+PiA+PiA+PiA+PiA+PiA+Pg0KPj4gPj4g Pj4gPj4gPj4gPg0KPj4gPj4gPj4gPj4gPj4gPg0KPj4gPj4gPj4gPj4gPj4gPiAtLQ0KPj4gPj4g Pj4gPj4gPj4gPiBOYWRhdiBTaGF0eg0KPj4gPj4gPj4gPj4gPj4gPiBUYWlsb3IgQnJhbmRzIHwg Q1RPDQo+PiA+PiA+PiA+PiA+Pg0KPj4gPj4gPj4gPj4gPg0KPj4gPj4gPj4gPj4gPg0KPj4gPj4g Pj4gPj4gPiAtLQ0KPj4gPj4gPj4gPj4gPiBOYWRhdiBTaGF0eg0KPj4gPj4gPj4gPj4gPiBUYWls b3IgQnJhbmRzIHwgQ1RPDQo+PiA+PiA+PiA+Pg0KPj4gPj4gPj4gPg0KPj4gPj4gPj4gPg0KPj4g Pj4gPj4gPiAtLQ0KPj4gPj4gPj4gPiBOYWRhdiBTaGF0eg0KPj4gPj4gPj4gPiBUYWlsb3IgQnJh bmRzIHwgQ1RPDQo+PiA+PiA+Pg0KPj4gPj4gPg0KPj4gPj4gPg0KPj4gPj4gPiAtLQ0KPj4gPj4g PiBOYWRhdiBTaGF0eg0KPj4gPj4gPiBUYWlsb3IgQnJhbmRzIHwgQ1RPDQo+PiA+Pg0KPj4gPg0K Pj4gPg0KPj4gPiAtLQ0KPj4gPiBOYWRhdiBTaGF0eg0KPj4gPiBUYWlsb3IgQnJhbmRzIHwgQ1RP DQo+Pg0KPiANCj4gDQo+IC0tIA0KPiBOYWRhdiBTaGF0eg0KPiBUYWlsb3IgQnJhbmRzIHwgQ1RP DQo= ----Next_Part(Fri_Dec_26_16_15_05_2025_247)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="extenal_delay_cmd.patch" diff --git a/src/streaming_replication/pool_worker_child.c b/src/streaming_replication/pool_worker_child.c index 457d0fab0..c509ba5bc 100644 --- a/src/streaming_replication/pool_worker_child.c +++ b/src/streaming_replication/pool_worker_child.c @@ -132,7 +132,7 @@ do_worker_child(void *params) signal(SIGINT, my_signal_handler); signal(SIGHUP, reload_config_handler); signal(SIGQUIT, my_signal_handler); - signal(SIGCHLD, SIG_IGN); + signal(SIGCHLD, my_signal_handler); signal(SIGUSR1, my_signal_handler); signal(SIGUSR2, SIG_IGN); signal(SIGPIPE, SIG_IGN); @@ -262,16 +262,20 @@ do_worker_child(void *params) POOL_NODE_STATUS *node_status; int i; - /* Do replication time lag checking */ - /* Use external command if replication_delay_source_cmd is configured */ - if (pool_config->replication_delay_source_cmd && - strlen(pool_config->replication_delay_source_cmd) > 0) - check_replication_time_lag_with_cmd(); - else - check_replication_time_lag(); + /* Do replication time lag checking */ - /* Check node status */ - node_status = verify_backend_node_status(slots); + /* + * Use external command if replication_delay_source_cmd is + * configured + */ + if (pool_config->replication_delay_source_cmd && + strlen(pool_config->replication_delay_source_cmd) > 0) + check_replication_time_lag_with_cmd(); + else + check_replication_time_lag(); + + /* Check node status */ + node_status = verify_backend_node_status(slots); for (i = 0; i < NUM_BACKENDS; i++) @@ -668,7 +672,7 @@ check_replication_time_lag(void) } #define MAX_CMD_OUTPUT 4096 -#define MAX_REASONABLE_DELAY_MS 3600000.0 /* 1 hour in milliseconds */ +#define MAX_REASONABLE_DELAY_MS 3600000.0 /* 1 hour in milliseconds */ /* * Check replication time lag using external command @@ -680,23 +684,23 @@ check_replication_time_lag(void) static void check_replication_time_lag_with_cmd(void) { - char *command = NULL; - char *line; - char *token; - char *saveptr; - double delay_ms; - uint64 delay; - int token_count = 0; - BackendInfo *bkinfo; + char *command = NULL; + char *line; + char *token; + char *saveptr; + double delay_ms; + uint64 delay; + int token_count = 0; + BackendInfo *bkinfo; ErrorContextCallback callback; - int pipefd[2] = {-1, -1}; - pid_t pid = -1; - int ret; - struct timeval timeout; - fd_set readfds; - ssize_t bytes_read; - int status; - int num_replicas; + int pipefd[2] = {-1, -1}; + pid_t pid = -1; + int ret; + struct timeval timeout; + fd_set readfds; + ssize_t bytes_read; + int status; + int num_replicas; if (NUM_BACKENDS <= 1) { @@ -717,7 +721,7 @@ check_replication_time_lag_with_cmd(void) } /* Capture primary node ID to avoid race conditions during execution */ - int primary_node_id = REAL_PRIMARY_NODE_ID; + int primary_node_id = REAL_PRIMARY_NODE_ID; if (!pool_config->replication_delay_source_cmd || strlen(pool_config->replication_delay_source_cmd) == 0) @@ -746,16 +750,21 @@ check_replication_time_lag_with_cmd(void) PG_TRY(); { const char *base_command = pool_config->replication_delay_source_cmd; - size_t total_len = strlen(base_command) + 1; /* +1 for NUL */ + size_t total_len = strlen(base_command) + 1; /* +1 for NUL */ /* Build command with replica-only arguments (omit primary) */ - /* Calculate total command length including space-separated replica identifiers */ + + /* + * Calculate total command length including space-separated replica + * identifiers + */ for (int i = 0; i < NUM_BACKENDS; i++) { if (i == primary_node_id) - continue; /* Skip primary node */ + continue; /* Skip primary node */ + + char *ident = build_instance_identifier_for_node(i); - char *ident = build_instance_identifier_for_node(i); total_len += 1 /* space */ + strlen(ident); pfree(ident); } @@ -764,13 +773,14 @@ check_replication_time_lag_with_cmd(void) strlcpy(command, base_command, total_len); /* Append replica identifiers */ - size_t current_len = strlen(command); + size_t current_len = strlen(command); + for (int i = 0; i < NUM_BACKENDS; i++) { if (i == primary_node_id) - continue; /* Skip primary node */ + continue; /* Skip primary node */ - char *ident = build_instance_identifier_for_node(i); + char *ident = build_instance_identifier_for_node(i); /* Append space and identifier */ snprintf(command + current_len, total_len - current_len, " %s", ident); @@ -800,16 +810,16 @@ check_replication_time_lag_with_cmd(void) if (pid == 0) { /* Child process */ - close(pipefd[0]); /* Close read end */ + close(pipefd[0]); /* Close read end */ if (dup2(pipefd[1], STDOUT_FILENO) == -1) { fprintf(stderr, "dup2 failed: %s\n", strerror(errno)); exit(1); } - close(pipefd[1]); /* Close write end (duplicated to stdout) */ + close(pipefd[1]); /* Close write end (duplicated to stdout) */ /* Execute command using shell */ - execl("/bin/sh", "sh", "-c", command, (char *)NULL); + execl("/bin/sh", "sh", "-c", command, (char *) NULL); /* If execl fails */ fprintf(stderr, "execl failed: %s\n", strerror(errno)); @@ -817,7 +827,7 @@ check_replication_time_lag_with_cmd(void) } /* Parent process */ - close(pipefd[1]); /* Close write end */ + close(pipefd[1]); /* Close write end */ pipefd[1] = -1; /* Set up timeout for select */ @@ -832,7 +842,8 @@ check_replication_time_lag_with_cmd(void) if (ret == -1) { - int save_errno = errno; + int save_errno = errno; + kill(pid, SIGKILL); waitpid(pid, NULL, 0); pid = -1; @@ -913,11 +924,12 @@ check_replication_time_lag_with_cmd(void) bkinfo->standby_delay_by_time = true; /* Count expected replicas */ - num_replicas = NUM_BACKENDS - 1; /* Total nodes minus primary */ + num_replicas = NUM_BACKENDS - 1; /* Total nodes minus primary */ /* Count tokens in output for validation */ - char *line_copy = pstrdup(line); - char *temp_token = strtok(line_copy, " \t\n"); + char *line_copy = pstrdup(line); + char *temp_token = strtok(line_copy, " \t\n"); + while (temp_token != NULL) { token_count++; @@ -953,7 +965,7 @@ check_replication_time_lag_with_cmd(void) for (int i = 0; i < NUM_BACKENDS && token != NULL; i++) { if (i == primary_node_id) - continue; /* Skip primary - it's not in the output */ + continue; /* Skip primary - it's not in the output */ if (!VALID_BACKEND(i)) { @@ -962,7 +974,8 @@ check_replication_time_lag_with_cmd(void) continue; } - char *endptr; + char *endptr; + delay_ms = strtod(token, &endptr); /* Validate the conversion */ @@ -1002,13 +1015,18 @@ check_replication_time_lag_with_cmd(void) delay_ms, i))); } - /* Convert delay from milliseconds to microseconds for internal storage */ - delay = (uint64)(delay_ms * 1000); + /* + * Convert delay from milliseconds to microseconds for internal + * storage + */ + delay = (uint64) (delay_ms * 1000); bkinfo->standby_delay = delay; bkinfo->standby_delay_by_time = true; /* Log delay if necessary */ - uint64 delay_threshold_by_time = pool_config->delay_threshold_by_time * 1000; /* threshold is in milliseconds, convert to microseconds */ + uint64 delay_threshold_by_time = pool_config->delay_threshold_by_time * 1000; /* threshold is in + * milliseconds, convert + * to microseconds */ if ((pool_config->log_standby_delay == LSD_ALWAYS && delay_ms > 0) || (pool_config->log_standby_delay == LSD_OVER_THRESHOLD && @@ -1026,12 +1044,15 @@ check_replication_time_lag_with_cmd(void) PG_CATCH(); { /* Cleanup in case of error */ - if (pid > 0) { + if (pid > 0) + { kill(pid, SIGKILL); waitpid(pid, NULL, 0); } - if (pipefd[0] != -1) close(pipefd[0]); - if (pipefd[1] != -1) close(pipefd[1]); + if (pipefd[0] != -1) + close(pipefd[0]); + if (pipefd[1] != -1) + close(pipefd[1]); if (line) pfree(line); @@ -1137,6 +1158,9 @@ static RETSIGTYPE my_signal_handler(int sig) restart_request = 1; break; + case SIGCHLD: + break; + default: exit(1); break; ----Next_Part(Fri_Dec_26_16_15_05_2025_247)-- Content-Type: Multipart/Mixed; boundary="--BOUNDARY1(Fri_Dec_26_16_15_05_2025_707)--" Content-Transfer-Encoding: 7bit ----Next_Part(Fri_Dec_26_16_15_05_2025_247)----