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.94.2) (envelope-from ) id 1snOCZ-0039X9-4S for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Sep 2024 20:08:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1snOCY-000jos-PX for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Sep 2024 20:08:02 +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.94.2) (envelope-from ) id 1snOCY-000jok-8S for pgsql-hackers@lists.postgresql.org; Sun, 08 Sep 2024 20:08:02 +0000 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1snOCU-000BaN-V9 for pgsql-hackers@lists.postgresql.org; Sun, 08 Sep 2024 20:08:01 +0000 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-374c6eb1d44so65042f8f.1 for ; Sun, 08 Sep 2024 13:07:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1725826076; x=1726430876; darn=lists.postgresql.org; h=autocrypt:subject:from:to:content-language:user-agent:mime-version :date:message-id:sender:from:to:cc:subject:date:message-id:reply-to; bh=usZpdN+VgSM9k3+T32qZhSf5lwuaJ2QZw0yZtSAYkvc=; b=Nd7690bY9MfLyL2kcHxmo4+6oiWyBVp5+S8DLd5XsDCVU4feo7gFMtJg9DpIzo34FI bN+MoctP/ck68nHKr1XWybTNI/nMpJAaFOL1GIZQ9IKNXyCeA5nHDvvfQF5sGNO/EQ9m ObPM+6A3mTc6m4/fvXZhSIUQcL8OgQdRw8TAekED69+z9/IP2pSsc2846LRAe5lRTqV+ Ead4q/x/tj81RjOJxZkaJFNcXFZJp8j/tTE1LCWMN8ZsD6D/2fYuH3xK+/6ec8pifZHA GwYC8C77jCUtVHOmC4evwq97vmvCEJOOwd3qTsJLZlvxUFT2V0dEn7PB356jdXi9PMXk zyrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725826076; x=1726430876; h=autocrypt:subject:from:to:content-language:user-agent:mime-version :date:message-id:sender:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=usZpdN+VgSM9k3+T32qZhSf5lwuaJ2QZw0yZtSAYkvc=; b=FYSWoQzUueKHyNhhvx2SBfoPn0hz1Mv9a8/YJSYIVsMJT//IfvWBlD45hOo6ctVEje tD7a4MHtMDUlg56GKJZB/pEn/F5RF4Ak+VCYU+gElfRUt9OAZ3oe2lLQ+ykcDWtd+L30 FlifDZZfrLewStfs+CvJrIcK7cLW4tE+vmHXaBVbm+wI+zkKSOt8kdQ3zRD986b2+9qZ kTzVRxk8t7v18yyrVKq1mBagVevcoRVQ5BPzTakTUa/+UjPCgc6KqgiDQTAiCXiKCCDT zaOM9lCKMDDHnrWTt+H9a8vLKN4ruJddscex/JboJLFhqWP8uim2WyGji0RutAtD3tAF OJVQ== X-Gm-Message-State: AOJu0YwR5fPKwk1ZNm6U0AnKzeL/AUUS1S9sv/NVGirG7cVFf5Ye7LvF pSMJqHRVIcRzAMutNzNkJGurgMUNKr0mFJKx9CMYeW7zh+KbMPvsvadfQA== X-Google-Smtp-Source: AGHT+IGPwzu6TOy4P6Uuxg9avVlGnGZ/8aE+M6UETXL5R5Oa4vlDkkYHYstPvd+qoNXOF/nKkDSFbA== X-Received: by 2002:a5d:64e1:0:b0:374:d258:90d1 with SMTP id ffacd0b85a97d-378895c4cf4mr2972911f8f.2.1725826075378; Sun, 08 Sep 2024 13:07:55 -0700 (PDT) Received: from [192.168.178.27] (vdsl-178-19-234-133.net.encoline.de. [178.19.234.133]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a8d2583fc73sm242556866b.34.2024.09.08.13.07.54 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 08 Sep 2024 13:07:54 -0700 (PDT) Sender: Lars Kanis Content-Type: multipart/mixed; boundary="------------WFLuyeY2oW39c7xuYPGTzk0V" Message-ID: <2039ac58-d3e0-434b-ac1a-2a987f3b4cb1@greiz-reinsdorf.de> Date: Sun, 8 Sep 2024 22:07:53 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: pgsql-hackers@lists.postgresql.org From: Lars Kanis Subject: libpq: Process buffered SSL read bytes to support records >8kB on async API Autocrypt: addr=lars@greiz-reinsdorf.de; keydata= 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 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------WFLuyeY2oW39c7xuYPGTzk0V Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Dear hackers, I'm the maintainer of ruby-pg the ruby interface to the PostgreSQL database. This binding uses the asynchronous API of libpq by default to facilitate the ruby IO wait and scheduling mechanisms. This works well with the vanilla postgresql server, but it leads to starvation with other types of servers using the postgresql wire protocol 3. This is because the current functioning of the libpq async interface depends on a maximum size of SSL records of 8kB. The following servers were reported to starve with ruby-pg: * AWS RDS Aurora Serverless [1] * YugabyteDb [2] * CockroachDB [3] They block infinitely on certain message sizes sent from the backend to the libpq frontend. It is best described in [4]. A repro docker composition is provided by YugabyteDB at [2]. To fix this issue the attached patch calls pqReadData() repeatedly in PQconsumeInput() until there is no buffered SSL data left to be read. Another solution could be to process buffered SSL read bytes in PQisBusy() instead of PQconsumeInput() . The synchronous libpq API isn't affected, since it supports arbitrary SSL record sizes already. That's why I think that the asynchronous API should also support bigger SSL record sizes. Regards, Lars [1] https://github.com/ged/ruby-pg/issues/325 [2] https://github.com/ged/ruby-pg/issues/588 [3] https://github.com/ged/ruby-pg/issues/583 [4] https://github.com/ged/ruby-pg/issues/325#issuecomment-737561270 --------------WFLuyeY2oW39c7xuYPGTzk0V Content-Type: text/x-patch; charset=UTF-8; name="0001-libpq-Process-buffered-SSL-read-bytes-to-support-rec.patch" Content-Disposition: attachment; filename*0="0001-libpq-Process-buffered-SSL-read-bytes-to-support-rec.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhYjc5MzgyOWE0Y2U0NzNmMWNjMmJiYzBlMmE2ZjY3NTM1NTMyNTVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBMYXJzIEthbmlzIDxsYXJzQGdyZWl6LXJlaW5zZG9y Zi5kZT4KRGF0ZTogU3VuLCA4IFNlcCAyMDI0IDEzOjU5OjA1ICswMjAwClN1YmplY3Q6IFtQ QVRDSF0gbGlicHE6IFByb2Nlc3MgYnVmZmVyZWQgU1NMIHJlYWQgYnl0ZXMgdG8gc3VwcG9y dCByZWNvcmRzCiA+OGtCIG9uIGFzeW5jIEFQSQoKVGhlIGFzeW5jIEFQSSBvZiBsaWJwcSBk b2Vzbid0IHN1cHBvcnQgU1NMIHJlY29yZCBzaXplcyA+OGtCIHNvIGZhci4KVGhpcyBzaXpl IGlzbid0IGV4Y2VlZGVkIGJ5IHZhbmlsbGEgUG9zdGdyZVNRTCwgYnV0IGJ5IG90aGVyIHBy b2R1Y3RzIHVzaW5nCnRoZSBwb3N0Z3JlcyB3aXJlIHByb3RvY29sIDMuClBRY29uc3VtZUlu cHV0KCkgcmVhZHMgYWxsIGRhdGEgcmVhZGFibGUgZnJvbSB0aGUgc29ja2V0LCBzbyB0aGF0 IHRoZSByZWFkCmNvbmRpdGlvbiBpcyBjbGVhcmVkLgpCdXQgaXQgZG9lc24ndCBwcm9jZXNz IGFsbCB0aGUgZGF0YSB0aGF0IGlzIHBlbmRpbmcgb24gdGhlIFNTTCBsYXllci4KQWxzbyBh IHN1YnNlcXVlbnQgY2FsbCB0byBQUWlzQnVzeSgpIGRvZXNuJ3QgcHJvY2VzcyBpdCwgc28g dGhhdCB0aGUgY2xpZW50CmlzIHRyaWdnZXJlZCB0byB3YWl0IGZvciBtb3JlIHJlYWRhYmxl IGRhdGEgb24gdGhlIHNvY2tldC4KQnV0IHRoaXMgbmV2ZXIgYXJyaXZlcywgc28gdGhhdCB0 aGUgY29ubmVjdGlvbiBibG9ja3MgaW5maW5pdGVseS4KClRvIGZpeCB0aGlzIGlzc3VlIGNh bGwgcHFSZWFkRGF0YSgpIHJlcGVhdGVkbHkgdW50aWwgdGhlcmUgaXMgbm8gYnVmZmVyZWQK U1NMIGRhdGEgbGVmdCB0byBiZSByZWFkLgoKVGhlIHN5bmNocm9ub3VzIGxpYnBxIEFQSSBp c24ndCBhZmZlY3RlZCwgc2luY2UgaXQgc3VwcG9ydHMgYXJiaXRyYXJ5IFNTTApyZWNvcmQg c2l6ZXMgYWxyZWFkeS4KLS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1leGVjLmMgfCAx MyArKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQoKZGlm ZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWV4ZWMuYyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWV4ZWMuYwppbmRleCAwZDIyNGE4NTIuLjYzNzg5NGVlMSAxMDA2NDQK LS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWV4ZWMuYwpAQCAtMjAwNiw2ICsyMDA2LDE5IEBAIFBRY29uc3VtZUlu cHV0KFBHY29ubiAqY29ubikKIAlpZiAocHFSZWFkRGF0YShjb25uKSA8IDApCiAJCXJldHVy biAwOwogCisJI2lmZGVmIFVTRV9TU0wKKwkJLyoKKwkJICogRW5zdXJlIGFsbCBidWZmZXJl ZCByZWFkIGJ5dGVzIGluIHRoZSBTU0wgbGlicmFyeSBhcmUgcHJvY2Vzc2VkLAorCQkgKiB3 aGljaCBtaWdodCBiZSBub3QgdGhlIGNhc2UsIGlmIHRoZSBTU0wgcmVjb3JkIHNpemUgZXhj ZWVkcyA4ay4KKwkJICogT3RoZXJ3aXNlIHBhcnNlSW5wdXQgY2FuJ3QgcHJvY2VzcyB0aGUg ZGF0YS4KKwkJICovCisJCXdoaWxlIChjb25uLT5zc2xfaW5fdXNlICYmIHBndGxzX3JlYWRf cGVuZGluZyhjb25uKSkKKwkJeworCQkJaWYgKHBxUmVhZERhdGEoY29ubikgPCAwKQorCQkJ CXJldHVybiAwOworCQl9CisJI2VuZGlmCisKIAkvKiBQYXJzaW5nIG9mIHRoZSBkYXRhIHdh aXRzIHRpbGwgbGF0ZXIuICovCiAJcmV0dXJuIDE7CiB9Ci0tIAoyLjQzLjAKCg== --------------WFLuyeY2oW39c7xuYPGTzk0V--