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 1wAXIE-0004HJ-2d for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 18:06: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 1wAXID-0017zr-0U for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 18:06:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wAXIC-0017zj-2Y for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 18:06:21 +0000 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAXIB-000000002pX-2yC7 for pgsql-hackers@postgresql.org; Wed, 08 Apr 2026 18:06:21 +0000 Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-65c4152313fso98948a12.1 for ; Wed, 08 Apr 2026 11:06:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775671579; cv=none; d=google.com; s=arc-20240605; b=LkOjm8G1uPOUPnwQcTPIr92pwMW4sOBAogN/xtx4To9DzdwEDL/AzqxNjISg8mwi4a 1VlU6r+54M+J8eelA4yH7LaaG7xMiYX4qBzDJjRhNrgeE+BU2A9Wibz56h7EwaUnm17D m7ZAWycKYeSqv/BimDGBIxwJy4bdGcLz25Bk7+i4fcPgd0kA3j+qaPV52ejeLllY/Zyx bqQ6tpesVS80NUdAjV47WXoJwcmSoRKKLPT7jsosaWAPzAkXcrCQVEOlahIlGXqshVuU fYtf1eAO+2xoF0syX/8cLdr3cMPH7SezP5Q5olqXAHKJwwxBqWGoUIETNGfe0XxJ/a1g jwAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=4LEDjtqpqwBMd8c5i/q1BKqz3JG+YmcMPheOoQG8yWQ=; fh=2n/NrCCxCFH39ry9SLK8M+Wuq45HDC3iaBTJn28UnC0=; b=PfS78dIhbpXItkoa5u6LuQI71z/soaM9s/fsVE6v0EghDQhMXmq/uUGM3ZS18ityp7 s4aISeQ+QDrdHiB6hxfHWaUE9q4BuQMHFE2ijX/0l0U9QJTcmVeNxT+EN0mFBQiVRfz9 zB15se0jLSyctB6JGtvTU5Ta//KzNzoXikLCjC+U/C8EHuuJPMJJYYvqk/vt1pYRfVhd 2nnzkbeOXFxO96Itaprom1ig9FmVqO5aZNF06Vxa5/enGxgdRNh6sDDmrhBavYUO+IaQ vSZ/O7O31U56KCbbcBqjjHQJv8s34FXON4PV1P/lG6hBWukQJRgtVBC3GEeftuVs+HHD GNEw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775671579; x=1776276379; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4LEDjtqpqwBMd8c5i/q1BKqz3JG+YmcMPheOoQG8yWQ=; b=sPVPgCTFMl84IRw+AsPJ2VK52ww6A1mSHW1DQg9wihEWLIUQXsy9TLEzeTLg7P1XF7 vgiJaPoS7yYJAFUH53RAIxNigL1erJWQiYgYQlqvs/8xGmNbHHWKdvGzxdX02/2Ws+5C uHn7nd7fbwKBD8yRHFVCy8rwNWtYyLx07FpJpZrTOZXmebbFA8gunL8Yeu334tmvwKE7 cxJQOsw/o6a0z4In8sLHVbjniu4HP2sLmStBJrkLcTX36NhaYfAWWKL9Pqef32g8qQDu 9KY/pcftwgF0bh5JLJeUhaJaEacZ/Wd1lwbnpmVrb564mPYaJKHxshXr/qUMPELuGyQg SgYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775671579; x=1776276379; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=4LEDjtqpqwBMd8c5i/q1BKqz3JG+YmcMPheOoQG8yWQ=; b=ddGAGyVrWhJdlIs/E8Aq+781VxUvfh0Jg9uoCtiv6c0pPxK09dCdJTAIql1xx+//hc z0azmZR0IwTz5+C4bBTTo1OVFrxz8Ylr/wYRTaxq5aQLvyVxSm5SwEtVsYor7m5ceF+J rwCANetV2T+nKgpkrnP30iNEBrIzxPPrJMRlLwKg8v6C3KMlfZD42AtmXIGIBTcvU0v+ dykaHgeCwNxNCs28ZfhH9U1P54Jjxo7aIPmC7DSP79x0PRQJamKgaiaCmBrOperaGCce /Vi0UqUHCAjUFK7txwKofIrEBS0zBFyyypWDvd/X1zM80VmhBlOk3nZFB7jtyk6It+2F 0ffw== X-Forwarded-Encrypted: i=1; AJvYcCW/LQYPlR05IQKA5OegBLQWyUwed19sJUcCrOPzqkfnVn3tYtFls8VnzwltjOLwkrUyHwJOVu4jA/LUMwqq@postgresql.org X-Gm-Message-State: AOJu0YzVnFPYbejcFVpyBcLL+6nxxh2mefKpLjludA2wfrTMLF10UblC bgbzK4b7JlAY0KOA53dpZ6dqeQM14BaBK+W3NJHb2k5oWStXzlBhmu1LvHy91FuV90YJYstx9Pb C1cK6sPuQs+GMhGzbkvi2d5pLgd5BnxA= X-Gm-Gg: AeBDieupWUV1GNVt5dy0HsdN25JpVpgpvy8sv1gUDpeUY3uxBog9ZmDB7Lbm+Wl3kMp RvnjUzXqRNfwNZ2tdbDepQ2nGlf5AsENbUH9+UhGoQY38kfRUdoDR2j6EPrIdbQV411NJqzJdtq ERJRRjCuq5YLJ1wEGsjtFa54wVW3wBAmRmGcANLZrTMZQ/FZLiE8RfuE40snJRVBbW/2pZ+UG4Z ow9Llh/A7c94YXzmyxwjRC8fLAfWcVGX9BnOSayi6O1zEZGbVET7Vm2XhvgLjUAmKoI5MHqpElJ O7TLKrN+x2P/UiJL0Kdw7FX7xQXBpFluhZ8o+DZ/IpOlrvXUPTAX2AGspXegANnrEdqVQoiUrDJ 89nhPkcUg X-Received: by 2002:a05:6402:21c5:b0:66d:d05d:afe3 with SMTP id 4fb4d7f45d1cf-66e3f3c7d4emr8558883a12.10.1775671578464; Wed, 08 Apr 2026 11:06:18 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Melanie Plageman Date: Wed, 8 Apr 2026 14:06:04 -0400 X-Gm-Features: AQROBzBGKxJGER1QYuFrswP9U-l9iVBkR2RA4rdpHZBJOvEM6jaeXQf2xf8jHlE Message-ID: Subject: Re: Trying out read streams in pgvector (an extension) To: Thomas Munro Cc: Peter Geoghegan , Nazir Bilal Yavuz , "Jonathan S. Katz" , pgsql-hackers , Andres Freund Content-Type: multipart/mixed; boundary="000000000000ac50ad064ef6c18e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ac50ad064ef6c18e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Dec 9, 2025 at 4:42=E2=80=AFPM Melanie Plageman wrote: > > > 1. read_stream_resume() as before, but with a new explicit > > read_stream_pause(): if a block number callback would like to report a > > temporary lack of information, it should return > > read_stream_pause(stream), not InvalidBlockNumber. Then after > > read_stream_resume(stream) is called, the next > > read_stream_next_buffer() enters the lookahead loop again. While > > paused, if the consumer drains all the existing buffers in the stream > > and then one more, it will receive InvalidBuffer, but if the _resume() > > call is made sooner, the consumer won't ever know about the temporary > > lack of buffers in the stream. I ended up committing read_stream_resume() in 38229cb905165fe but without the tests because 1f6f200cab67e6, which added other read stream tests, was imminent. I'd like to add the read_stream_resume() test back now -- especially because we didn't end up adding another user of read_stream_resume() in this release. Attached 0001 is the test Thomas wrote ported over to be in the new 0004_read_stream.pl. It uses asserts instead of comparing output of the SQL function to expected output, so I included a potential alternative version of it in 0002 that uses that pattern. Note that 0002 is a diff from 0001, not an independent alternative patch. I think the test needs more work either way, but I wanted to get the ball rolling. - Melanie --000000000000ac50ad064ef6c18e Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-test-for-read_stream_resume.patch" Content-Disposition: attachment; filename="0001-Add-test-for-read_stream_resume.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnqczv1t0 RnJvbSAzNjY2OGNjMzlkZDhhNmUyNDllY2UzZWQ1MzIwMWNiM2VhMTcwNzNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBXZWQsIDggQXByIDIwMjYgMTM6NDA6MTYgLTA0MDAKU3ViamVjdDogW1BB VENIIDEvMl0gQWRkIHRlc3QgZm9yIHJlYWRfc3RyZWFtX3Jlc3VtZSgpCgotLS0KIC4uLi9tb2R1 bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRfc3RyZWFtLnBsICAgICB8IDIyICsrKysrKwogc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbCAgIHwgIDkgKysrCiBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMgICAgICAgICAgfCA3MSArKysrKysrKysrKysr KysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAg MSArCiA0IGZpbGVzIGNoYW5nZWQsIDEwMyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwNF9yZWFkX3N0cmVhbS5wbCBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9haW8vdC8wMDRfcmVhZF9zdHJlYW0ucGwKaW5kZXggMzIzMTFjMDdhYzAuLjI4 YWVkZDdkMTYzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDA0X3Jl YWRfc3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDRfcmVhZF9z dHJlYW0ucGwKQEAgLTExNSw2ICsxMTUsMjcgQEAgc3ViIHRlc3RfcmVwZWF0ZWRfYmxvY2tzCiB9 CiAKIAorc3ViIHRlc3RfcmVhZF9zdHJlYW1fcmVzdW1lCit7CisJbXkgJGlvX21ldGhvZCA9IHNo aWZ0OworCW15ICRub2RlID0gc2hpZnQ7CisKKwlteSAkcHNxbCA9ICRub2RlLT5iYWNrZ3JvdW5k X3BzcWwoJ3Bvc3RncmVzJywgb25fZXJyb3Jfc3RvcCA9PiAwKTsKKworCSRwc3FsLT5xdWVyeV9z YWZlKAorCQlxcSgKK0NSRUFURSBURU1QT1JBUlkgVEFCTEUgdG1wX3JlYWRfc3RyZWFtKGRhdGEg aW50IG5vdCBudWxsKTsKK0lOU0VSVCBJTlRPIHRtcF9yZWFkX3N0cmVhbSBTRUxFQ1QgZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDAwKTsKK1NFTEVDVCB0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZSgndG1w X3JlYWRfc3RyZWFtJywgMCk7CitEUk9QIFRBQkxFIHRtcF9yZWFkX3N0cmVhbTsKKykpOworCisJ b2soMSwgIiRpb19tZXRob2Q6IHJlYWRfc3RyZWFtX3Jlc3VtZSIpOworCisJJHBzcWwtPnF1aXQo KTsKK30KKworCiBzdWIgdGVzdF9pbmplY3RfZm9yZWlnbgogewogCW15ICRpb19tZXRob2QgPSBz aGlmdDsKQEAgLTI2OCw2ICsyODksNyBAQCBzdWIgdGVzdF9pb19tZXRob2QKIAkJJGlvX21ldGhv ZCwgIiRpb19tZXRob2Q6IGlvX21ldGhvZCBzZXQgY29ycmVjdGx5Iik7CiAKIAl0ZXN0X3JlcGVh dGVkX2Jsb2NrcygkaW9fbWV0aG9kLCAkbm9kZSk7CisJdGVzdF9yZWFkX3N0cmVhbV9yZXN1bWUo JGlvX21ldGhvZCwgJG5vZGUpOwogCiAgIFNLSVA6CiAJewpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdGVzdF9haW8tLTEuMC5zcWwKaW5kZXggNzYyYWMyOTUxMmYuLjQ4Y2FhZDI1YmRhIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwKQEAgLTEyOCwz ICsxMjgsMTIgQEAgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIENSRUFURSBGVU5D VElPTiBpbmpfaW9fcmVvcGVuX2RldGFjaCgpCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJ Q1QKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKKworCisvKgorICogUmVhZCBz dHJlYW0gcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfcmVhZF9z dHJlYW1fcmVzdW1lKHJlbCByZWdjbGFzcywgYmxvY2tubyBpbnQ0KQorUkVUVVJOUyBwZ19jYXRh bG9nLnZvaWQgU1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCmluZGV4IDM1ZWZiYTFhNWUzLi45ZDJkMzJhZDFhMiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYwpAQCAtOTE2LDYgKzkxNiw3NyBAQCBy ZWFkX3N0cmVhbV9mb3JfYmxvY2tzKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIAordHlwZWRlZiBz dHJ1Y3QKK3sKKwlCbG9ja051bWJlciBibGtubzsKKwlpbnQJCQljb3VudDsKK30gdGVzdF9yZWFk X3N0cmVhbV9yZXN1bWVfc3RhdGU7CisKK3N0YXRpYyBCbG9ja051bWJlcgordGVzdF9yZWFkX3N0 cmVhbV9yZXN1bWVfY2IoUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJICAgdm9pZCAqY2FsbGJh Y2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJICAgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCXRl c3RfcmVhZF9zdHJlYW1fcmVzdW1lX3N0YXRlICpzdGF0ZSA9IGNhbGxiYWNrX3ByaXZhdGVfZGF0 YTsKKworCS8qIFBlcmlvZGljIGVuZC1vZi1zdHJlYW0uICovCisJaWYgKCsrc3RhdGUtPmNvdW50 ICUgMyA9PSAwKQorCQlyZXR1cm4gcmVhZF9zdHJlYW1fcGF1c2Uoc3RyZWFtKTsKKworCXJldHVy biBzdGF0ZS0+Ymxrbm87Cit9CisKKy8qCisgKiBUZXN0IHJlYWRfc3RyZWFtX3Jlc3VtZSgpLCBh bGxvd2luZyBhIHN0cmVhbSB0byBlbmQgdGVtcG9yYXJpbHkgYW5kIHRoZW4KKyAqIGNvbnRpbnVl IHdoZXJlIGl0IGxlZnQgb2ZmLgorICovCitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfcmVhZF9z dHJlYW1fcmVzdW1lKTsKK0RhdHVtCit0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZShQR19GVU5DVElP Tl9BUkdTKQoreworCU9pZAkJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwlCbG9ja051bWJl ciBibGtubyA9IFBHX0dFVEFSR19VSU5UMzIoMSk7CisJUmVsYXRpb24JcmVsOworCUJ1ZmZlcgkJ YnVmOworCVJlYWRTdHJlYW0gKnN0cmVhbTsKKwl0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZV9zdGF0 ZSBzdGF0ZSA9IHsuYmxrbm8gPSBibGtub307CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKHJlbGlk LCBBY2Nlc3NTaGFyZUxvY2spOworCXN0cmVhbSA9IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9u KFJFQURfU1RSRUFNX0RFRkFVTFQsCisJCQkJCQkJCQkJTlVMTCwKKwkJCQkJCQkJCQlyZWwsCisJ CQkJCQkJCQkJTUFJTl9GT1JLTlVNLAorCQkJCQkJCQkJCXRlc3RfcmVhZF9zdHJlYW1fcmVzdW1l X2NiLAorCQkJCQkJCQkJCSZzdGF0ZSwKKwkJCQkJCQkJCQkwKTsKKworCWZvciAoaW50IGkgPSAw OyBpIDwgMzsgKytpKQorCXsKKwkJLyogU2FtZSBibG9jayB0d2ljZS4gKi8KKwkJYnVmID0gcmVh ZF9zdHJlYW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKTsKKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZikgPT0gYmxrbm8pOworCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJCWJ1ZiA9 IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJCUFzc2VydChCdWZmZXJH ZXRCbG9ja051bWJlcihidWYpID09IGJsa25vKTsKKwkJUmVsZWFzZUJ1ZmZlcihidWYpOworCisJ CS8qIEVuZC1vZi1zdHJlYW0uICovCisJCWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHN0 cmVhbSwgTlVMTCk7CisJCUFzc2VydChidWYgPT0gSW52YWxpZEJ1ZmZlcik7CisJCWJ1ZiA9IHJl YWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJCUFzc2VydChidWYgPT0gSW52 YWxpZEJ1ZmZlcik7CisKKwkJLyogUmVzdW1lLiAqLworCQlyZWFkX3N0cmVhbV9yZXN1bWUoc3Ry ZWFtKTsKKwl9CisKKwlyZWFkX3N0cmVhbV9lbmQoc3RyZWFtKTsKKwlyZWxhdGlvbl9jbG9zZShy ZWwsIE5vTG9jayk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisKIFBHX0ZVTkNUSU9OX0lO Rk9fVjEoaGFuZGxlX2dldCk7CiBEYXR1bQogaGFuZGxlX2dldChQR19GVU5DVElPTl9BUkdTKQpk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBlYTk1ZTc5ODRiYy4uNDIzNmFmZWZhMmQgMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MzI5LDYgKzQzMjksNyBAQCB0ZVNlY3Rpb24K IHRlbXBfdGFibGVzcGFjZXNfZXh0cmEKIHRlc3QxMjgKIHRlc3RfcmVfZmxhZ3MKK3Rlc3RfcmVh ZF9zdHJlYW1fcmVzdW1lX3N0YXRlCiB0ZXN0X3JlZ2V4X2N0eAogdGVzdF9zaG1fbXFfaGVhZGVy CiB0ZXN0X3NwZWMKLS0gCjIuNDMuMAoK --000000000000ac50ad064ef6c18e Content-Type: text/x-patch; charset="US-ASCII"; name="0002-alternative-approach-for-test-read_stream_resume.patch" Content-Disposition: attachment; filename="0002-alternative-approach-for-test-read_stream_resume.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnqczxld1 RnJvbSA4ZThiMGEzZDk2N2MxZTlhZTFiZTY0MjU3NjE2ZDNhMDJmNmY2NGI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBXZWQsIDggQXByIDIwMjYgMTM6NTU6MDUgLTA0MDAKU3ViamVjdDogW1BB VENIIDIvMl0gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggZm9yIHRlc3QgcmVhZF9zdHJlYW1fcmVzdW1l CgotLS0KIC4uLi9tb2R1bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRfc3RyZWFtLnBsICAgICB8IDIx ICsrKysrLS0tLQogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbCAg IHwgIDQgKy0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyAgICAgICAgICB8 IDQ1ICsrKysrKysrKysrKysrKy0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygr KSwgMjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fp by90LzAwNF9yZWFkX3N0cmVhbS5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDRf cmVhZF9zdHJlYW0ucGwKaW5kZXggMjhhZWRkN2QxNjMuLjY4ZDNiZTQ1MmUyIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRfc3RyZWFtLnBsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDRfcmVhZF9zdHJlYW0ucGwKQEAgLTEyMiwxNSAr MTIyLDE4IEBAIHN1YiB0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZQogCiAJbXkgJHBzcWwgPSAkbm9k ZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycsIG9uX2Vycm9yX3N0b3AgPT4gMCk7CiAKLQkk cHNxbC0+cXVlcnlfc2FmZSgKLQkJcXEoCi1DUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRtcF9yZWFk X3N0cmVhbShkYXRhIGludCBub3QgbnVsbCk7Ci1JTlNFUlQgSU5UTyB0bXBfcmVhZF9zdHJlYW0g U0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCk7Ci1TRUxFQ1QgdGVzdF9yZWFkX3N0cmVh bV9yZXN1bWUoJ3RtcF9yZWFkX3N0cmVhbScsIDApOwotRFJPUCBUQUJMRSB0bXBfcmVhZF9zdHJl YW07Ci0pKTsKLQotCW9rKDEsICIkaW9fbWV0aG9kOiByZWFkX3N0cmVhbV9yZXN1bWUiKTsKKwkj IFRoZSBjYWxsYmFjayByZXR1cm5zIGJsb2NrIDAgdHdpY2UgdGhlbiBwYXVzZXMuICBXZSByZXN1 bWUgMyB0aW1lcy4KKwkjIC0xIG1lYW5zIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKCkgcmV0dXJu ZWQgSW52YWxpZEJ1ZmZlciAocGF1c2VkKS4KKwlteSBAb25lX2N5Y2xlID0gKDAsIDAsIC0xKTsK KwlteSAkZXhwZWN0ZWQgPSAneycgLiBqb2luKCcsJywgQG9uZV9jeWNsZSwgQG9uZV9jeWNsZSwg QG9uZV9jeWNsZSkgLiAnfSc7CisKKwlteSAkcmVzdWx0ID0gJHBzcWwtPnF1ZXJ5X3NhZmUoCisJ CXFxKFNFTEVDVCBhcnJheV9hZ2coYmxvY2tudW0gT1JERVIgQlkgY2FsbF9pbmRleCkKKwkJICAg RlJPTSB0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZSgnbGFyZ2Vpc2gnLCAwKTspKTsKKwljaG9tcCgk cmVzdWx0KTsKKworCWlzKCRyZXN1bHQsICRleHBlY3RlZCwKKwkJIiRpb19tZXRob2Q6IHJlYWRf c3RyZWFtX3Jlc3VtZSIpOwogCiAJJHBzcWwtPnF1aXQoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCmluZGV4IDQ4Y2FhZDI1YmRhLi5kM2M5NDFkNTIy MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNx bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCkBAIC0x MzQsNiArMTM0LDYgQEAgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIC8qCiAgKiBS ZWFkIHN0cmVhbSByZWxhdGVkIGZ1bmN0aW9ucwogICovCi1DUkVBVEUgRlVOQ1RJT04gdGVzdF9y ZWFkX3N0cmVhbV9yZXN1bWUocmVsIHJlZ2NsYXNzLCBibG9ja25vIGludDQpCi1SRVRVUk5TIHBn X2NhdGFsb2cudm9pZCBTVFJJQ1QKK0NSRUFURSBGVU5DVElPTiB0ZXN0X3JlYWRfc3RyZWFtX3Jl c3VtZShyZWwgcmVnY2xhc3MsIGJsb2Nrbm8gaW50NCwgT1VUIGNhbGxfaW5kZXggaW50NCwgT1VU IGJsb2NrbnVtIGludDQpCitSRVRVUk5TIFNFVE9GIHJlY29yZCBTVFJJQ1QKIEFTICdNT0RVTEVf UEFUSE5BTUUnIExBTkdVQUdFIEM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf YWlvL3Rlc3RfYWlvLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKaW5k ZXggOWQyZDMyYWQxYTIuLmFiZGZhMWNiNDQ4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL3Rlc3RfYWlvLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0 X2Fpby5jCkBAIC05MzksNiArOTM5LDExIEBAIHRlc3RfcmVhZF9zdHJlYW1fcmVzdW1lX2NiKFJl YWRTdHJlYW0gKnN0cmVhbSwKIC8qCiAgKiBUZXN0IHJlYWRfc3RyZWFtX3Jlc3VtZSgpLCBhbGxv d2luZyBhIHN0cmVhbSB0byBlbmQgdGVtcG9yYXJpbHkgYW5kIHRoZW4KICAqIGNvbnRpbnVlIHdo ZXJlIGl0IGxlZnQgb2ZmLgorICoKKyAqIFJldHVybnMgYSByZXN1bHQgc2V0IG9mIChjYWxsX2lu ZGV4IGludDQsIGJsb2NrbnVtIGludDQpIHJvd3Mgc28gdGhhdCB0aGUKKyAqIGNhbGxlciBjYW4g dmFsaWRhdGUgdGhlIGV4YWN0IHNlcXVlbmNlLiAgQSBibG9ja251bSBvZiAtMSBpbmRpY2F0ZXMg dGhhdAorICogcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoKSByZXR1cm5lZCBJbnZhbGlkQnVmZmVy IChpLmUuIHRoZSBzdHJlYW0gd2FzCisgKiBwYXVzZWQpLgogICovCiBQR19GVU5DVElPTl9JTkZP X1YxKHRlc3RfcmVhZF9zdHJlYW1fcmVzdW1lKTsKIERhdHVtCkBAIC05NDYsMTAgKzk1MSwxNCBA QCB0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZShQR19GVU5DVElPTl9BUkdTKQogewogCU9pZAkJCXJl bGlkID0gUEdfR0VUQVJHX09JRCgwKTsKIAlCbG9ja051bWJlciBibGtubyA9IFBHX0dFVEFSR19V SU5UMzIoMSk7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNp bmZvLT5yZXN1bHRpbmZvOwogCVJlbGF0aW9uCXJlbDsKIAlCdWZmZXIJCWJ1ZjsKIAlSZWFkU3Ry ZWFtICpzdHJlYW07CiAJdGVzdF9yZWFkX3N0cmVhbV9yZXN1bWVfc3RhdGUgc3RhdGUgPSB7LmJs a25vID0gYmxrbm99OworCWludAkJCWNhbGxfaW5kZXggPSAwOworCisJSW5pdE1hdGVyaWFsaXpl ZFNSRihmY2luZm8sIDApOwogCiAJcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hh cmVMb2NrKTsKIAlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVB TV9ERUZBVUxULApAQCAtOTYyLDE5ICs5NzEsMzcgQEAgdGVzdF9yZWFkX3N0cmVhbV9yZXN1bWUo UEdfRlVOQ1RJT05fQVJHUykKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQogCXsKKwkJ RGF0dW0JCXZhbHVlc1syXSA9IHswfTsKKwkJYm9vbAkJbnVsbHNbMl0gPSB7MH07CisKIAkJLyog U2FtZSBibG9jayB0d2ljZS4gKi8KIAkJYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc3Ry ZWFtLCBOVUxMKTsKLQkJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZikgPT0gYmxrbm8p OwotCQlSZWxlYXNlQnVmZmVyKGJ1Zik7Ci0JCWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVy KHN0cmVhbSwgTlVMTCk7Ci0JCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWYpID09IGJs a25vKTsKLQkJUmVsZWFzZUJ1ZmZlcihidWYpOworCQl2YWx1ZXNbMF0gPSBJbnQzMkdldERhdHVt KGNhbGxfaW5kZXgrKyk7CisJCXZhbHVlc1sxXSA9IEJ1ZmZlcklzVmFsaWQoYnVmKSA/CisJCQlJ bnQzMkdldERhdHVtKChpbnQzMikgQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKSkgOgorCQkJSW50 MzJHZXREYXR1bSgtMSk7CisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0 LCByc2luZm8tPnNldERlc2MsIHZhbHVlcywgbnVsbHMpOworCQlpZiAoQnVmZmVySXNWYWxpZChi dWYpKQorCQkJUmVsZWFzZUJ1ZmZlcihidWYpOwogCi0JCS8qIEVuZC1vZi1zdHJlYW0uICovCiAJ CWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7Ci0JCUFzc2VydChi dWYgPT0gSW52YWxpZEJ1ZmZlcik7CisJCXZhbHVlc1swXSA9IEludDMyR2V0RGF0dW0oY2FsbF9p bmRleCsrKTsKKwkJdmFsdWVzWzFdID0gQnVmZmVySXNWYWxpZChidWYpID8KKwkJCUludDMyR2V0 RGF0dW0oKGludDMyKSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpKSA6CisJCQlJbnQzMkdldERh dHVtKC0xKTsKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5m by0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CisJCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCisJ CQlSZWxlYXNlQnVmZmVyKGJ1Zik7CisKKwkJLyogRW5kLW9mLXN0cmVhbSAocGF1c2VkKS4gKi8K IAkJYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKTsKLQkJQXNzZXJ0 KGJ1ZiA9PSBJbnZhbGlkQnVmZmVyKTsKKwkJdmFsdWVzWzBdID0gSW50MzJHZXREYXR1bShjYWxs X2luZGV4KyspOworCQl2YWx1ZXNbMV0gPSBCdWZmZXJJc1ZhbGlkKGJ1ZikgPworCQkJSW50MzJH ZXREYXR1bSgoaW50MzIpIEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZikpIDoKKwkJCUludDMyR2V0 RGF0dW0oLTEpOworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNp bmZvLT5zZXREZXNjLCB2YWx1ZXMsIG51bGxzKTsKKwkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmKSkK KwkJCVJlbGVhc2VCdWZmZXIoYnVmKTsKIAogCQkvKiBSZXN1bWUuICovCiAJCXJlYWRfc3RyZWFt X3Jlc3VtZShzdHJlYW0pOwpAQCAtOTgzLDcgKzEwMTAsNyBAQCB0ZXN0X3JlYWRfc3RyZWFtX3Jl c3VtZShQR19GVU5DVElPTl9BUkdTKQogCXJlYWRfc3RyZWFtX2VuZChzdHJlYW0pOwogCXJlbGF0 aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKIAotCVBHX1JFVFVSTl9WT0lEKCk7CisJcmV0dXJuIChE YXR1bSkgMDsKIH0KIAogCi0tIAoyLjQzLjAKCg== --000000000000ac50ad064ef6c18e--