public inbox for [email protected]
help / color / mirror / Atom feedFrom: Ivan Trofimov <[email protected]>
To: [email protected] <[email protected]>
Subject: libpq seems to misbehave in a pipelining corner case
Date: Wed, 24 May 2023 15:05:41 +0300
Message-ID: <[email protected]> (raw)
------==--bound.6072.xxsl4l6ndgil2oud.iva.yp-c.yandex.net
Content-Transfer-Encoding: base64
Content-Type: text/html; charset=utf-8
PGRpdj48ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiMxZTFlMWU7Y29sb3I6I2Q0ZDRkNDtm
b250LWZhbWlseTonZHJvaWQgc2FucyBtb25vJyAsICdtb25vc3BhY2UnICwgbW9ub3NwYWNlO2Zv
bnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxOXB4O3doaXRlLXNw
YWNlOnByZSI+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6I2Q0ZDRkNCI+QXMgZmFyIGFzIGkgdW5k
ZXJzdGFuZCwgdGhlcmUgaXMgYW4gaW52YXJpYW50IGluIGxpYnBxLCB0aGF0IGlmIFBRcGlwZWxp
bmVTeW5jIGNhbGwgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFu
IHN0eWxlPSJjb2xvcjojZDRkNGQ0Ij5QUXJlc3VsdFN0YXR1cyB3aWxsIGV2ZW50dWFsbHkgcmV0
dXJuIFBHUkVTX1BJUEVMSU5FX1NZTkMsIG9yIHRoZSBjb25uZWN0aW9uIHdpbGwgYmUgaW4gQ09O
TkVDVElPTl9CQUQgc3RhdGUuPC9zcGFuPjwvZGl2PsKgPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6
I2Q0ZDRkNCI+VGhpcyBpcyBoaWdobGlnaHRlZCBpbiBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgZG9j
czo8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IzY3OTZlNiI+MS48L3NwYW4+
PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPiAiUEdSRVNfUElQRUxJTkVfU1lOQ8KgaXMgcmVw
b3J0ZWQgZXhhY3RseSBvbmNlIGZvciBlYWNowqBQUXBpcGVsaW5lU3luY8KgYXQgdGhlIGNvcnJl
c3BvbmRpbmcgcG9pbnQgaW4gdGhlIHBpcGVsaW5lLiI8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBz
dHlsZT0iY29sb3I6IzY3OTZlNiI+Mi48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQi
PiAiRnJvbSB0aGUgY2xpZW50J3MgcGVyc3BlY3RpdmUsIGFmdGVywqBQUXJlc3VsdFN0YXR1c8Kg
cmV0dXJuc8KgUEdSRVNfRkFUQUxfRVJST1IsIHRoZSBwaXBlbGluZSBpcyBmbGFnZ2VkIGFzIGFi
b3J0ZWQuwqA8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6I2Q0ZDRkNCI+UFFy
ZXN1bHRTdGF0dXPCoHdpbGwgcmVwb3J0IGHCoFBHUkVTX1BJUEVMSU5FX0FCT1JURUTCoHJlc3Vs
dCBmb3IgZWFjaCByZW1haW5pbmcgcXVldWVkIG9wZXJhdGlvbiBpbiBhbiBhYm9ydGVkIHBpcGVs
aW5lLsKgPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPlRoZSBy
ZXN1bHQgZm9ywqBQUXBpcGVsaW5lU3luY8KgaXMgcmVwb3J0ZWQgYXPCoFBHUkVTX1BJUEVMSU5F
X1NZTkPCoHRvIHNpZ25hbCB0aGUgZW5kIG9mIHRoZSBhYm9ydGVkIHBpcGVsaW5lIGFuZMKgPC9z
cGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPnJlc3VtcHRpb24gb2Yg
bm9ybWFsIHJlc3VsdCBwcm9jZXNzaW5nLsKgVGhlIGNsaWVudMKgbXVzdMKgcHJvY2VzcyByZXN1
bHRzIHdpdGjCoFBRZ2V0UmVzdWx0wqBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkuIjwvc3Bhbj48L2Rp
dj7CoDxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPlNvIGkgZXhwZWN0IGEgY29kZSBs
aWtlIHRoaXM8L3NwYW4+PC9kaXY+wqA8ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjojZDRkNGQ0Ij5p
ZiAoIVBRcGlwZWxpbmVTeW5jKGNvbm4pKSBleGl0KDEpOzwvc3Bhbj48L2Rpdj7CoDxkaXY+PHNw
YW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPndoaWxlIChQUXN0YXR1cyhjb25uKSAhPSBDT05ORUNU
SU9OX0JBRCkgezwhLS0gLS0+PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiNk
NGQ0ZDQiPsKgIMKgcmVzID0gUFFnZXRSZXN1bHQoY29ubik7PC9zcGFuPjwvZGl2PjxkaXY+PHNw
YW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPsKgIMKgaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0g
UEdSRVNfUElQRUxJTkVfU1lOQykgezwhLS0gLS0+PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5
bGU9ImNvbG9yOiNkNGQ0ZDQiPsKgIMKgIMKgIMKgYnJlYWs7PC9zcGFuPjwvZGl2PjxkaXY+PHNw
YW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPsKgIMKgfTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0
eWxlPSJjb2xvcjojZDRkNGQ0Ij59PC9zcGFuPjwvZGl2PsKgPGRpdj48c3BhbiBzdHlsZT0iY29s
b3I6I2Q0ZDRkNCI+dG8gZXZlbnR1YWxseSBleGl0IHRoZSBsb29wLjwvc3Bhbj48L2Rpdj7CoDxk
aXY+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPkhvd2V2ZXIsIGlmIGluc3RlYWQgb2YgZXhw
ZWN0ZWQgIlJlYWR5VG9RdWVyeSIgcmVzcG9uc2Ugc2VydmVyIHNlbmRzIGFuIGVycm9yIGFuZCBj
bG9zZXMgdGhlIGNvbm5lY3Rpb24gKDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xv
cjojZDRkNGQ0Ij5zYXksIGJhY2tlbmQgdGVybWluYXRlZCBieSBhZG1pbmlzdHJhdG9yIG9yIHdp
dGggYSBwcm94eSBpbiBwbGFjZSBhbmQgdXBzdHJlYW0gUEcgc2VydmVyIGJlaW5nIGRlYWQpIHRo
aXMgbG9vcDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjojZDRkNGQ0Ij5nZXRz
IHN0dWNrIGluIGJ1c3ktbG9vcC48L3NwYW4+PC9kaXY+wqA8ZGl2PjxzcGFuIHN0eWxlPSJjb2xv
cjojZDRkNGQ0Ij5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdHJhbnNpdGlvbnMgaW4gcGlwZWxp
bmluZyBzdGF0ZS1tYWNoaW5lIGdvIGxpa2UgdGhpczo8L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBz
dHlsZT0iY29sb3I6IzY3OTZlNiI+MS48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQi
PiBJbml0aWFsIFBRZ2V0UmVzdWx0IGNhbGwgZ2V0cyBoZXJlIGh0dHBzOi8vZ2l0aHViLmNvbS9w
b3N0Z3Jlcy9wb3N0Z3Jlcy9ibG9iL2E4MTdlZGJmNmYzMDJjMzc2ZjVjMDAxMmQxOWEwNDc0YjZi
ZGVhODgvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jI0wyMDgxPC9zcGFuPjwvZGl2Pjxk
aXY+PHNwYW4gc3R5bGU9ImNvbG9yOiM2Nzk2ZTYiPjIuPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xv
cjojZDRkNGQ0Ij4gcGFyc2VJbnB1dCBnZXRzIGFuIGVycm9yIHRoZSBzZXJ2ZXIgc2VuZCBodHRw
czovL2dpdGh1Yi5jb20vcG9zdGdyZXMvcG9zdGdyZXMvYmxvYi9hODE3ZWRiZjZmMzAyYzM3NmY1
YzAwMTJkMTlhMDQ3NGI2YmRlYTg4L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXByb3RvY29sMy5j
I0wyMTbCoDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjojZDRkNGQ0Ij5hbmQg
c3dpdGNoZXMgdGhlIHN0YXRlIGludG8gUEdBU1lOQ19SRUFEWTwvc3Bhbj48L2Rpdj48ZGl2Pjxz
cGFuIHN0eWxlPSJjb2xvcjojNjc5NmU2Ij4zLjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2Q0
ZDRkNCI+IFBRZ2V0UmVzdWx0IGNvbnRpbnVlcyBhbmQgaGVyZSBodHRwczovL2dpdGh1Yi5jb20v
cG9zdGdyZXMvcG9zdGdyZXMvYmxvYi9hODE3ZWRiZjZmMzAyYzM3NmY1YzAwMTJkMTlhMDQ3NGI2
YmRlYTg4L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWV4ZWMuYyNMMjEyNjwvc3Bhbj48L2Rpdj48
ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjojZDRkNGQ0Ij5hZHZhbmNlcyB0aGUgcXVldWUsIHNvIHRo
ZSBTeW5jIGVudHJ5IGlzIGdvbmUsIGFuZCBzd2l0Y2hlcyBpbnRvIFBHQVNZTkNfUElQRUxJTkVf
SURMRSBsYXRlci48L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29sb3I6IzY3OTZlNiI+
NC48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPiBOZXh0IFBRZ2V0UmVzdWx0IGNh
bGwgZ2V0cyBoZXJlIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3N0Z3Jlcy9wb3N0Z3Jlcy9ibG9iL2E4
MTdlZGJmNmYzMDJjMzc2ZjVjMDAxMmQxOWEwNDc0YjZiZGVhODgvc3JjL2ludGVyZmFjZXMvbGli
cHEvZmUtZXhlYy5jI0xMMjExMEM0LUwyMTEwQzI2LDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0
eWxlPSJjb2xvcjojZDRkNGQ0Ij5hbmQgcHFQaXBlbGluZVByb2Nlc3NRdWV1ZSBzd2l0Y2hlcyBp
bnRvIFBHQVNZTkNfSURMRSBoZXJlIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3N0Z3Jlcy9wb3N0Z3Jl
cy9ibG9iL2E4MTdlZGJmNmYzMDJjMzc2ZjVjMDAxMmQxOWEwNDc0YjZiZGVhODgvc3JjL2ludGVy
ZmFjZXMvbGlicHEvZmUtZXhlYy5jI0wzMDg0PC9zcGFuPjwvZGl2PsKgPGRpdj48c3BhbiBzdHls
ZT0iY29sb3I6I2Q0ZDRkNCI+Tm93IHdlIGFyZSBzdHVjayBpbiB0aGUgcG9zaXRpb24gd2hlcmUg
bGlicHEgY29uc2lkZXJzIHRoZSBjb25uZWN0aW9uIGJlaW5nIGluIENPTk5FQ1RJT05fT0sgc3Rh
dGUgPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPihiZWNhdXNl
IG5vIHJlYWRzL3dyaXRlcyBvdmVyIGhhbGYtY2xvc2VkIHNvY2tldCBoYXZlIGJlZW4gaXNzdWVz
KSwgPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQiPmFzeW5jU3Rh
dHVzIGJlaW5nIFBHQVNZTkNfSURMRSwgcGlwZWxpbmUgYmVpbmcgaW4gUFFfUElQRUxJTkVfQUJP
UlRFRCBzdGF0ZSwgPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiNkNGQ0ZDQi
PmFuZCB0aGUgZXhwZWN0ZWQgUEdSRVNfUElQRUxJTkVfU1lOQyBuZXZlciBjYW1lIGFuZCBuZXZl
ciB3aWxsIChiZWNhdXNlIFBHQVNZTkNfSURMRSkuPC9zcGFuPjwvZGl2PsKgPGRpdj48c3BhbiBz
dHlsZT0iY29sb3I6I2Q0ZDRkNCI+V2hvIGlzIGF0IGZhdWx0IGhlcmUsIGlzIGl0IHBvc3RncmVz
LCBsaWJwcSBvciBtZSBtaXN1bmRlcnN0YW5kaW5nL21pc3VzaW5nIGxpYnBxPzwvc3Bhbj48L2Rp
dj48L2Rpdj48L2Rpdj4=
------==--bound.6072.xxsl4l6ndgil2oud.iva.yp-c.yandex.net
Content-Disposition: attachment;
filename="libpq_pipelining_busyloop.c"
Content-Transfer-Encoding: base64
Content-Type: text/x-c;
name="libpq_pipelining_busyloop.c"
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNpbmNsdWRlIDxsaWJwcS1m
ZS5oPgoKc3RhdGljIHZvaWQKZXhpdF9uaWNlbHkoUEdjb25uICpjb25uKQp7CiAgICBQUWZpbmlz
aChjb25uKTsKICAgIGV4aXQoMSk7Cn0KCmludAptYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
ewogICAgY29uc3QgY2hhciAqY29ubmluZm87CiAgICBQR2Nvbm4gICAgICpjb25uOwogICAgUEdy
ZXN1bHQgICAqcmVzOwogICAgaW50ICAgICAgICAgbkZpZWxkczsKICAgIGludCAgICAgICAgIGks
CiAgICAgICAgICAgICAgICBqOwoKICAgIC8qCiAgICAgKiBJZiB0aGUgdXNlciBzdXBwbGllcyBh
IHBhcmFtZXRlciBvbiB0aGUgY29tbWFuZCBsaW5lLCB1c2UgaXQgYXMgdGhlCiAgICAgKiBjb25u
aW5mbyBzdHJpbmc7IG90aGVyd2lzZSBkZWZhdWx0IHRvIHNldHRpbmcgZGJuYW1lPXBvc3RncmVz
IGFuZCB1c2luZwogICAgICogZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIGRlZmF1bHRzIGZvciBh
bGwgb3RoZXIgY29ubmVjdGlvbiBwYXJhbWV0ZXJzLgogICAgICovCiAgICBpZiAoYXJnYyA+IDEp
CiAgICAgICAgY29ubmluZm8gPSBhcmd2WzFdOwogICAgZWxzZQogICAgICAgIGNvbm5pbmZvID0g
ImRibmFtZSA9IHBvc3RncmVzIjsKCiAgICAvKiBNYWtlIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0
YWJhc2UgKi8KICAgIGNvbm4gPSBQUWNvbm5lY3RkYihjb25uaW5mbyk7CgogICAgLyogQ2hlY2sg
dG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUg
Ki8KICAgIGlmIChQUXN0YXR1cyhjb25uKSAhPSBDT05ORUNUSU9OX09LKQogICAgewogICAgICAg
IGZwcmludGYoc3RkZXJyLCAiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CiAgICAgICAgZXhp
dF9uaWNlbHkoY29ubik7CiAgICB9CgogICAgaWYgKCFQUWVudGVyUGlwZWxpbmVNb2RlKGNvbm4p
KQogICAgewogICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBQUWVycm9yTWVzc2FnZShjb25u
KSk7CglleGl0X25pY2VseShjb25uKTsKICAgIH0KCiAgICBwcmludGYoIklzc3VlIHBnX3Rlcm1p
bmF0ZV9iYWNrZW5kIGZvciB0aGUgY29ubmVjdGlvbiwgcHJlc3MgRW50ZXIgd2hlbiBkb25lLi4u
XG4iKTsKICAgIHNjYW5mKCIlKmMiKTsKCiAgICBpZiAoIVBRcGlwZWxpbmVTeW5jKGNvbm4pKQog
ICAgewogICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7
CglleGl0X25pY2VseShjb25uKTsKICAgIH0KCgogICAgaW50IGxvb3BfaXRlcmF0aW9uc19jb3Vu
dCA9IDA7CiAgICB3aGlsZSAoUFFzdGF0dXMoY29ubikgIT0gQ09OTkVDVElPTl9CQUQpIHsKCXJl
cyA9IFBRZ2V0UmVzdWx0KGNvbm4pOwoJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNf
UElQRUxJTkVfU1lOQykgewoJCVBRY2xlYXIocmVzKTsKCQlicmVhazsKCX0KCVBRY2xlYXIocmVz
KTsKCglpZigrK2xvb3BfaXRlcmF0aW9uc19jb3VudCA+IDEwMDApIHsKCQlwcmludGYoIlBRZ2V0
UmVzdWx0IGxvb3AgZ290IHN0dWNrIGluIGJ1c3ktbG9vcC5cbiIpOwoJCXByaW50ZigiUFFzdGF0
dXM6ICVpXG4iLCBQUXN0YXR1cyhjb25uKSk7CgkJcHJpbnRmKCJQUXBpcGVsaW5lU3RhdHVzOiAl
aVxuIiwgUFFwaXBlbGluZVN0YXR1cyhjb25uKSk7CgkJZXhpdF9uaWNlbHkoY29ubik7Cgl9CiAg
ICB9CgogICAgLyogY2xvc2UgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlIGFuZCBjbGVh
bnVwICovCiAgICBQUWZpbmlzaChjb25uKTsKCiAgICBwcmludGYoIkZpbmlzaGluZywgdW5leHBl
Y3RlZGx5XG4iKTsKCiAgICByZXR1cm4gMDsKfQo=
------==--bound.6072.xxsl4l6ndgil2oud.iva.yp-c.yandex.net--
Attachments:
[text/x-c] libpq_pipelining_busyloop.c (1.8K, ../[email protected]/2-libpq_pipelining_busyloop.c)
download | inline:
#include <stdio.h>
#include <stdlib.h>
#include <libpq-fe.h>
static void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
int
main(int argc, char **argv)
{
const char *conninfo;
PGconn *conn;
PGresult *res;
int nFields;
int i,
j;
/*
* If the user supplies a parameter on the command line, use it as the
* conninfo string; otherwise default to setting dbname=postgres and using
* environment variables or defaults for all other connection parameters.
*/
if (argc > 1)
conninfo = argv[1];
else
conninfo = "dbname = postgres";
/* Make a connection to the database */
conn = PQconnectdb(conninfo);
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
if (!PQenterPipelineMode(conn))
{
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
printf("Issue pg_terminate_backend for the connection, press Enter when done...\n");
scanf("%*c");
if (!PQpipelineSync(conn))
{
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
int loop_iterations_count = 0;
while (PQstatus(conn) != CONNECTION_BAD) {
res = PQgetResult(conn);
if (PQresultStatus(res) == PGRES_PIPELINE_SYNC) {
PQclear(res);
break;
}
PQclear(res);
if(++loop_iterations_count > 1000) {
printf("PQgetResult loop got stuck in busy-loop.\n");
printf("PQstatus: %i\n", PQstatus(conn));
printf("PQpipelineStatus: %i\n", PQpipelineStatus(conn));
exit_nicely(conn);
}
}
/* close the connection to the database and cleanup */
PQfinish(conn);
printf("Finishing, unexpectedly\n");
return 0;
}
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected]
Subject: Re: libpq seems to misbehave in a pipelining corner case
In-Reply-To: <[email protected]>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox