Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cFpqf-0003Da-RJ for pgsql-hackers@arkaria.postgresql.org; Sat, 10 Dec 2016 22:10:30 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1cFpqf-0001se-Cd for pgsql-hackers@arkaria.postgresql.org; Sat, 10 Dec 2016 22:10:29 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1cFpqd-0001qG-0z for pgsql-hackers@postgresql.org; Sat, 10 Dec 2016 22:10:27 +0000 Received: from mail-wm0-x232.google.com ([2a00:1450:400c:c09::232]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1cFpqZ-00065Z-KY for pgsql-hackers@postgresql.org; Sat, 10 Dec 2016 22:10:25 +0000 Received: by mail-wm0-x232.google.com with SMTP id g23so16329457wme.1 for ; Sat, 10 Dec 2016 14:10:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=to:cc:from:subject:message-id:date:user-agent:mime-version; bh=30RVCvNtZJdWebdN6xw+KjejuI1qscgyV/QiMfgfnyY=; b=lSSiGgX4hWC9o1qxuCKeTzVnxj+ua5ShMHwhpnNS1ppssgrqlThgNd+FOFAxINqi8l n8nqS8g271l327gsN0mPNfDuFKi1UI5cBwD47fMFRC3YNWycqLxEsfZFdAU3dqfisoKw MBQ0FRXRDbjL66LV5PwxuQQRcXRsfzYz50TgKNK/jjlfq6yWFgnMAE9MQ4uxsh59FvzU GwcKAK56lEiX8+xPOjEhb6bVwlinfaFugUBYVx8HEABV/58Zx4I5sN4rb5A0efbB+NTI isr+sClNcn3/wOsKVEfF/qgqTvsR5zKP5dZ6qeo0LOCcgNnKNJ1GqmIz8LktJlNXtq8y oQPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:cc:from:subject:message-id:date:user-agent :mime-version; bh=30RVCvNtZJdWebdN6xw+KjejuI1qscgyV/QiMfgfnyY=; b=e1grg1Prge5XIeuqHb2cCYB7dtAuOjseMVpHAJnDI//SOuxVH8WFtWG/nQjG2heAF5 VLJDz8rEbWm+ryU9F+rCULXfrhgz9AAhLC/DbPt8CpzlrXg6dBmGG1mmbkZ+nUKrfW9R SB3TF/t5/ERo9XR3T7N4qWj9YGBJmu0qTKrTECuQ7N6iruwYBleuCHP48GeBwdxwRLYQ +BjIHbrk5952f/5rnRo872syP2gplj5ipAV31HUPHd7Vpn0KKRzpDkeRRJUnsgXdR9IO P7KZkxj5/mUpRZ2FXYIhO4HwmHQoO9M1/R7BWoiWkwzCniwekd3Tnd6VmZhkQeCusEkT dupw== X-Gm-Message-State: AKaTC022QWeGGV8iA0nGRcNR15t/+CV5txI2urXe0PkOoD7qauenLo98hxWnT+JKnTVHIORu X-Received: by 10.28.30.207 with SMTP id e198mr3808075wme.74.1481407821453; Sat, 10 Dec 2016 14:10:21 -0800 (PST) Received: from [192.168.0.105] (150.123.broadband11.iol.cz. [90.178.123.150]) by smtp.gmail.com with ESMTPSA id u81sm27630876wmu.10.2016.12.10.14.10.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 10 Dec 2016 14:10:20 -0800 (PST) To: PostgreSQL-development Cc: Andres Freund From: Petr Jelinek Subject: snapbuild woes Message-ID: Date: Sat, 10 Dec 2016 23:10:19 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------833A35782BDC5FABE66EBF52" X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------833A35782BDC5FABE66EBF52 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hi, I recently found couple of issues with the way initial logical decoding snapshot is made. First one is outright bug, which has to do with how we track running transactions. What snapbuild basically does while doing initial snapshot is read the xl_running_xacts record, store the list of running txes and then wait until they all finish. The problem with this is that xl_running_xacts does not ensure that it only logs transactions that are actually still running (to avoid locking PGPROC) so there might be xids in xl_running_xacts that already committed before it was logged. This in turn means that the snapbuild will never make snapshot if the situation occurs. The reason why this didn't bite us much yet is that the snapbuild will consider all transactions finished if the empty xl_running_xacts comes which usually happens after a while (but might not on a consistently busy server). The fix I came up with this is to extend the mechanism to also consider all transactions finished when xl_running_xacts which has xmin bigger then that previous xmax comes. This seems to work pretty well on busy servers. This fix is attached as 0001-Mark-snapshot-consistent-when-all-running-txes-have.patch. I believe it should be backpatched all the way to 9.4. The other issue is performance problem again on busy servers with initial snapshot. We track transactions for catalog modifications so that we can do proper catalog time travel for decoding of changes. But for transactions that were running while we started trying to get initial consistent snapshot, there is no good way to tell if they did catalog changes or not so we consider them all as catalog changing. We make separate historical snapshot for every such transaction. This by itself is fine, the problem is that current implementation also considers all the transactions that started after we started watching for changes but before we reached consistent state to also do catalog changes even though there we actually do know if they did any catalog change or not. In practice it means we make snapshots that are not really necessary and if there was long running transaction for which the snapshot builder has to wait for then we can create thousands of unused snapshots which affects performance in bad ways (I've seen the initial snapshot taking hour because of this). The attached 0002-Skip-unnecessary-snapshot-builds.patch changes this behavior so that we don't make snapshots for transactions that we seen wholly and know that they didn't make catalog changes even if we didn't reach consistency yet. -- Petr Jelinek http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services --------------833A35782BDC5FABE66EBF52 Content-Type: application/x-patch; name="0001-Mark-snapshot-consistent-when-all-running-txes-have.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-Mark-snapshot-consistent-when-all-running-txes-have.pat"; filename*1="ch" RnJvbSA2N2U5MDJlZWYzM2RhOWUyNDFjMDc5ZWFlZDlhYjEyYTg4NjE2Mjk2 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEplbGluZWsg PHBqbW9kb3NAcGptb2Rvcy5uZXQ+CkRhdGU6IFNhdCwgMTAgRGVjIDIwMTYg MjE6NTY6NDQgKzAxMDAKU3ViamVjdDogW1BBVENIIDEvMl0gTWFyayBzbmFw c2hvdCBjb25zaXN0ZW50IHdoZW4gYWxsIHJ1bm5pbmcgdHhlcyBoYXZlCiBm aW5pc2hlZC4KCi0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9zbmFwYnVpbGQuYyB8IDI5ICsrKysrKysrKysrKysrKysrKysrKy0tLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgOCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3NuYXBidWlsZC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9zbmFwYnVpbGQuYwppbmRleCA4YjU5ZmM1Li41ODM2ZDUy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3NuYXBidWlsZC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvc25hcGJ1aWxkLmMKQEAgLTEyMTMsOSArMTIxMywxMSBAQCBTbmFw QnVpbGRGaW5kU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVj UHRyIGxzbiwgeGxfcnVubmluZ194YWN0cyAqcnVubgogCSAqIEJ1aWxkIGNh dGFsb2cgZGVjb2Rpbmcgc25hcHNob3QgaW5jcmVtZW50YWxseSB1c2luZyBp bmZvcm1hdGlvbiBhYm91dAogCSAqIHRoZSBjdXJyZW50bHkgcnVubmluZyB0 cmFuc2FjdGlvbnMuIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZG8gdGhh dDoKIAkgKgotCSAqIGEpIFRoZXJlIHdlcmUgbm8gcnVubmluZyB0cmFuc2Fj dGlvbnMgd2hlbiB0aGUgeGxfcnVubmluZ194YWN0cyByZWNvcmQKLQkgKgkg IHdhcyBpbnNlcnRlZCwganVtcCB0byBDT05TSVNURU5UIGltbWVkaWF0ZWx5 LiBXZSBtaWdodCBmaW5kIHN1Y2ggYQotCSAqCSAgc3RhdGUgd2Ugd2VyZSB3 YWl0aW5nIGZvciBiKSBhbmQgYykuCisJICogYSkgRWl0aGVyIHRoZXJlIHdl cmUgbm8gcnVubmluZyB0cmFuc2FjdGlvbnMgd2hlbiB0aGUgeGxfcnVubmlu Z194YWN0cworCSAqICAgIHJlY29yZCB3YXMgaW5zZXJ0ZWQgKHdlIG1pZ2h0 IGZpbmQgdGhpcyB3aGlsZSB3YWl0aW5nIGZvciBiKSBvciBjKSkKKwkgKiAg ICBvciB0aGUgcnVubmluZyB0cmFuc2FjdGlvbnMgd2UndmUgYmVlbiB0cmFj a2luZyBoYXZlIGFsbCBmaW5pc2hlZAorCSAqICAgIGJ5IHRoZSB0aW1lIHRo ZSB4bF9ydW5uaW5nX3hhY3RzIHdhcyBpbnNlcnRlZC4gV2UgY2FuIGp1bXAg dG8KKwkgKiAgICBDT05TSVNURU5UIGltbWVkaWF0ZWx5LgogCSAqCiAJICog YikgV2FpdCBmb3IgYWxsIHRvcGxldmVsIHRyYW5zYWN0aW9ucyB0aGF0IHdl cmUgcnVubmluZyB0byBlbmQuIFdlCiAJICoJICBzaW1wbHkgdHJhY2sgdGhl IG51bWJlciBvZiBpbi1wcm9ncmVzcyB0b3BsZXZlbCB0cmFuc2FjdGlvbnMg YW5kCkBAIC0xMjUxLDEzICsxMjUzLDE4IEBAIFNuYXBCdWlsZEZpbmRTbmFw c2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCB4bF9y dW5uaW5nX3hhY3RzICpydW5uCiAJfQogCiAJLyoKLQkgKiBhKSBObyB0cmFu c2FjdGlvbiB3ZXJlIHJ1bm5pbmcsIHdlIGNhbiBqdW1wIHRvIGNvbnNpc3Rl bnQuCisJICogYSkgRWl0aGVyIG5vIHRyYW5zYWN0aW9uIHdlcmUgcnVubmlu ZyBvciB3ZSd2ZSBiZWVuIHRyYWNraW5nIHJ1bm5pbmcKKwkgKiAgICB0cmFu c2FjdGlvbnMgYW5kIHRoZSBuZXcgc25hcHNob3QgaGFzIHRoZW0gYWxsIGZp bmlzaGVkLCB3ZSBjYW4KKwkgKiAgICBqdW1wIHRvIGNvbnNpc3RlbnQuCiAJ ICoKLQkgKiBOQjogV2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHN0YXJ0ZWQgdG8g aW5jcmVtZW50YWxseSBhc3NlbWJsZSBhIHNuYXBzaG90LAotCSAqIHNvIHdl IG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBkZWFsIHdpdGggdGhhdC4KKwkgKiBO QjogU2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHN0YXJ0ZWQgdG8gaW5j cmVtZW50YWxseSBhc3NlbWJsZSBhCisJICogc25hcHNob3QsIHdlIG5lZWQg dG8gYmUgY2FyZWZ1bCB0byBkZWFsIHdpdGggdGhhdC4KIAkgKi8KLQlpZiAo cnVubmluZy0+eGNudCA9PSAwKQorCWlmIChydW5uaW5nLT54Y250ID09IDAg fHwKKwkJKGJ1aWxkZXItPnJ1bm5pbmcueGNudCA+IDAgJiYKKwkJIHJ1bm5p bmctPm9sZGVzdFJ1bm5pbmdYaWQgPiBidWlsZGVyLT5ydW5uaW5nLnhtYXgp KQogCXsKKwogCQlpZiAoYnVpbGRlci0+c3RhcnRfZGVjb2RpbmdfYXQgPT0g SW52YWxpZFhMb2dSZWNQdHIgfHwKIAkJCWJ1aWxkZXItPnN0YXJ0X2RlY29k aW5nX2F0IDw9IGxzbikKIAkJCS8qIGNhbiBkZWNvZGUgZXZlcnl0aGluZyBh ZnRlciB0aGlzICovCkBAIC0xMjc4LDEwICsxMjg1LDE2IEBAIFNuYXBCdWls ZEZpbmRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIg bHNuLCB4bF9ydW5uaW5nX3hhY3RzICpydW5uCiAKIAkJYnVpbGRlci0+c3Rh dGUgPSBTTkFQQlVJTERfQ09OU0lTVEVOVDsKIAorCQkvKgorCQkgKiBHaXZl IGRpZmZlcmVudCBsb2cgZGV0YWlsIGJhc2VkIG9uIGFjdHVhbCBzdGF0ZSBm b3IgZWFzaWVyCisJCSAqIGRlYnVnZ2luZy4KKwkJICovCiAJCWVyZXBvcnQo TE9HLAogCQkJCShlcnJtc2coImxvZ2ljYWwgZGVjb2RpbmcgZm91bmQgY29u c2lzdGVudCBwb2ludCBhdCAlWC8lWCIsCiAJCQkJCQkodWludDMyKSAobHNu ID4+IDMyKSwgKHVpbnQzMikgbHNuKSwKLQkJCQkgZXJyZGV0YWlsKCJUaGVy ZSBhcmUgbm8gcnVubmluZyB0cmFuc2FjdGlvbnMuIikpKTsKKwkJCQkgZXJy ZGV0YWlsKHJ1bm5pbmctPnhjbnQgPT0gMCA/CisJCQkJCQkgICAiVGhlcmUg YXJlIG5vIHJ1bm5pbmcgdHJhbnNhY3Rpb25zLiIgOgorCQkJCQkJICAgIkFs bCBydW5uaW5nIHRyYW5zYWN0aW9ucyBoYXZlIGZpbmlzaGVkLiIpKSk7CiAK IAkJcmV0dXJuIGZhbHNlOwogCX0KLS0gCjIuNy40Cgo= --------------833A35782BDC5FABE66EBF52 Content-Type: application/x-patch; name="0002-Skip-unnecessary-snapshot-builds.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-Skip-unnecessary-snapshot-builds.patch" RnJvbSAzMWVhOGYyNTVlNTMxYzkzMjdmN2E1ZDU1YzVjMGM3NTZiMzc3Mzlj IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRyIEplbGluZWsg PHBqbW9kb3NAcGptb2Rvcy5uZXQ+CkRhdGU6IFNhdCwgMTAgRGVjIDIwMTYg MjI6MjI6MTMgKzAxMDAKU3ViamVjdDogW1BBVENIIDIvMl0gU2tpcCB1bm5l Y2Vzc2FyeSBzbmFwc2hvdCBidWlsZHMKCi0tLQogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyB8IDM4ICsrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjggaW5zZXJ0 aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKaW5kZXgg NTgzNmQ1Mi4uM2NmNDgyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCkBAIC05NTUsNiAr OTU1LDcgQEAgU25hcEJ1aWxkQ29tbWl0VHhuKFNuYXBCdWlsZCAqYnVpbGRl ciwgWExvZ1JlY1B0ciBsc24sIFRyYW5zYWN0aW9uSWQgeGlkLAogCWJvb2wJ CWZvcmNlZF90aW1ldHJhdmVsID0gZmFsc2U7CiAJYm9vbAkJc3ViX25lZWRz X3RpbWV0cmF2ZWwgPSBmYWxzZTsKIAlib29sCQl0b3BfbmVlZHNfdGltZXRy YXZlbCA9IGZhbHNlOworCWJvb2wJCWJ1aWxkX3NuYXBzaG90ID0gdHJ1ZTsK IAogCVRyYW5zYWN0aW9uSWQgeG1heCA9IHhpZDsKIApAQCAtOTc2LDEwICs5 NzcsMTkgQEAgU25hcEJ1aWxkQ29tbWl0VHhuKFNuYXBCdWlsZCAqYnVpbGRl ciwgWExvZ1JlY1B0ciBsc24sIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkvKgog CQkgKiBXZSBjb3VsZCBhdm9pZCB0cmVhdGluZyAhU25hcEJ1aWxkVHhuSXNS dW5uaW5nIHRyYW5zYWN0aW9ucyBhcwogCQkgKiB0aW1ldHJhdmVsIG9uZXMs IGJ1dCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZXhwb3J0IGEgc25hcHNob3Qg d2hlbgotCQkgKiB3ZSByZWFjaGVkIGNvbnNpc3RlbmN5LgorCQkgKiB3ZSBy ZWFjaGVkIGNvbnNpc3RlbmN5IHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBv ZiB0aGVtLgogCQkgKi8KIAkJZm9yY2VkX3RpbWV0cmF2ZWwgPSB0cnVlOwog CQllbG9nKERFQlVHMSwgImZvcmNlZCB0byBhc3N1bWUgY2F0YWxvZyBjaGFu Z2VzIGZvciB4aWQgJXUgYmVjYXVzZSBpdCB3YXMgcnVubmluZyB0b28gZWFy bHkiLCB4aWQpOworCisJCS8qCisJCSAqIEl0IGlzIGhvd2V2ZXIgZGVzaXJh YmxlIHRvIHNraXAgYnVpbGRpbmcgbmV3IHNuYXBzaG90IGZvcgorCQkgKiAh U25hcEJ1aWxkVHhuSXNSdW5uaW5nIHRyYW5zYWN0aW9ucyBhcyBvdGhlcndp c2Ugd2UgbWlnaHQgZW5kIHVwCisJCSAqIGJ1aWxkaW5nIHRob3VzYW5kcyBv ZiB1bnVzZWQgc25hcHNob3RzIG9uIGJ1c3kgc2VydmVycyB3aGljaCBjYW4K KwkJICogYmUgdmVyeSBleHBlbnNpdmUuCisJCSAqLworCQlpZiAoIVNuYXBC dWlsZFR4bklzUnVubmluZyhidWlsZGVyLCB4aWQpKQorCQkJYnVpbGRfc25h cHNob3QgPSBmYWxzZTsKIAl9CiAKIAlmb3IgKG54YWN0ID0gMDsgbnhhY3Qg PCBuc3VieGFjdHM7IG54YWN0KyspCkBAIC0xMDY5LDE1ICsxMDc5LDI1IEBA IFNuYXBCdWlsZENvbW1pdFR4bihTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dS ZWNQdHIgbHNuLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJaWYgKGJ1aWxkZXIt PnN0YXRlIDwgU05BUEJVSUxEX0ZVTExfU05BUFNIT1QpCiAJCQlyZXR1cm47 CiAKKwkJLyogTWFrZSBzdXJlIHdlIGFsd2F5cyBidWlsZCBzbmFwc2hvdCBp ZiB0aGVyZSBpcyBubyBleGlzdGluZyBvbmUuICovCisJCWJ1aWxkX3NuYXBz aG90ID0gYnVpbGRfc25hcHNob3QgfHwgIWJ1aWxkZXItPnNuYXBzaG90Owor CiAJCS8qCi0JCSAqIERlY3JlYXNlIHRoZSBzbmFwc2hvdCBidWlsZGVyJ3Mg cmVmY291bnQgb2YgdGhlIG9sZCBzbmFwc2hvdCwgbm90ZQotCQkgKiB0aGF0 IGl0IHN0aWxsIHdpbGwgYmUgdXNlZCBpZiBpdCBoYXMgYmVlbiBoYW5kZWQg b3V0IHRvIHRoZQotCQkgKiByZW9yZGVyYnVmZmVyIGVhcmxpZXIuCisJCSAq IERlY3JlYXNlIHRoZSBzbmFwc2hvdCBidWlsZGVyJ3MgcmVmY291bnQgb2Yg dGhlIG9sZCBzbmFwc2hvdCBpZiB3ZQorCQkgKiBwbGFuIHRvIGJ1aWxkIG5l dyBvbmUsIG5vdGUgdGhhdCBpdCBzdGlsbCB3aWxsIGJlIHVzZWQgaWYgaXQg aGFzCisJCSAqIGJlZW4gaGFuZGVkIG91dCB0byB0aGUgcmVvcmRlcmJ1ZmZl ciBlYXJsaWVyLgogCQkgKi8KLQkJaWYgKGJ1aWxkZXItPnNuYXBzaG90KQor CQlpZiAoYnVpbGRlci0+c25hcHNob3QgJiYgYnVpbGRfc25hcHNob3QpCiAJ CQlTbmFwQnVpbGRTbmFwRGVjUmVmY291bnQoYnVpbGRlci0+c25hcHNob3Qp OwogCi0JCWJ1aWxkZXItPnNuYXBzaG90ID0gU25hcEJ1aWxkQnVpbGRTbmFw c2hvdChidWlsZGVyLCB4aWQpOworCQkvKiBCdWlsZCBuZXcgc25hcHNob3Qg dW5sZXNzIGFza2VkIG5vdCB0by4gKi8KKwkJaWYgKGJ1aWxkX3NuYXBzaG90 KQorCQl7CisJCQlidWlsZGVyLT5zbmFwc2hvdCA9IFNuYXBCdWlsZEJ1aWxk U25hcHNob3QoYnVpbGRlciwgeGlkKTsKKworCQkJLyogcmVmY291bnQgb2Yg dGhlIHNuYXBzaG90IGJ1aWxkZXIgZm9yIHRoZSBuZXcgc25hcHNob3QgKi8K KwkJCVNuYXBCdWlsZFNuYXBJbmNSZWZjb3VudChidWlsZGVyLT5zbmFwc2hv dCk7CisJCX0KIAogCQkvKiB3ZSBtaWdodCBuZWVkIHRvIGV4ZWN1dGUgaW52 YWxpZGF0aW9ucywgYWRkIHNuYXBzaG90ICovCiAJCWlmICghUmVvcmRlckJ1 ZmZlclhpZEhhc0Jhc2VTbmFwc2hvdChidWlsZGVyLT5yZW9yZGVyLCB4aWQp KQpAQCAtMTA4NywxMSArMTEwNyw5IEBAIFNuYXBCdWlsZENvbW1pdFR4bihT bmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCBUcmFuc2FjdGlv bklkIHhpZCwKIAkJCQkJCQkJCQkgYnVpbGRlci0+c25hcHNob3QpOwogCQl9 CiAKLQkJLyogcmVmY291bnQgb2YgdGhlIHNuYXBzaG90IGJ1aWxkZXIgZm9y IHRoZSBuZXcgc25hcHNob3QgKi8KLQkJU25hcEJ1aWxkU25hcEluY1JlZmNv dW50KGJ1aWxkZXItPnNuYXBzaG90KTsKLQogCQkvKiBhZGQgYSBuZXcgU25h cHNob3QgdG8gYWxsIGN1cnJlbnRseSBydW5uaW5nIHRyYW5zYWN0aW9ucyAq LwotCQlTbmFwQnVpbGREaXN0cmlidXRlTmV3Q2F0YWxvZ1NuYXBzaG90KGJ1 aWxkZXIsIGxzbik7CisJCWlmIChidWlsZF9zbmFwc2hvdCkKKwkJCVNuYXBC dWlsZERpc3RyaWJ1dGVOZXdDYXRhbG9nU25hcHNob3QoYnVpbGRlciwgbHNu KTsKIAl9CiAJZWxzZQogCXsKLS0gCjIuNy40Cgo= --------------833A35782BDC5FABE66EBF52 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------833A35782BDC5FABE66EBF52--