Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l24Ub-0005Aj-Du for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Jan 2021 03:49:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1l24U2-0007nu-60 for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Jan 2021 03:48:38 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l24U1-0007nn-SS for pgsql-hackers@lists.postgresql.org; Wed, 20 Jan 2021 03:48:37 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l24Tx-0004nf-6t for pgsql-hackers@postgresql.org; Wed, 20 Jan 2021 03:48:36 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id B11DA62824; Wed, 20 Jan 2021 12:48:27 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_e80dc6e39c184dd6ed6d5c4660d9305b" Date: Wed, 20 Jan 2021 12:48:27 +0900 From: Masahiro Ikeda To: Andres Freund Cc: Fujii Masao , pgsql-hackers Subject: Re: Add statistics to pg_stat_wal view for wal related parameter tuning In-Reply-To: References: <11e81f0b7d90dd69077d3d964a9a4da9@oss.nttdata.com> <79620b5c-ecf1-3d4f-80b5-7e311b7a0662@oss.nttdata.com> <89de5056627ebdd144967959bd789bd6@oss.nttdata.com> <58ccc451-8429-ce44-f0b7-773c8dfedf45@oss.nttdata.com> <7eb4ebd487b53200bde98ba2f0a7e789@oss.nttdata.com> <451365b7-9e22-211e-428f-fc90ebc715bc@oss.nttdata.com> <20201221211650.k7b53tcnadrciqjo@alap3.anarazel.de> <20201222003935.47aoxfmokltlrlf2@alap3.anarazel.de> Message-ID: X-Sender: ikedamsh@oss.nttdata.com User-Agent: Roundcube Webmail/1.1.9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_e80dc6e39c184dd6ed6d5c4660d9305b Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2020-12-22 11:16, Masahiro Ikeda wrote: > Thanks for your comments. > > On 2020-12-22 09:39, Andres Freund wrote: >> Hi, >> >> On 2020-12-21 13:16:50 -0800, Andres Freund wrote: >>> On 2020-12-02 13:52:43 +0900, Fujii Masao wrote: >>> > Pushed. Thanks! >>> >>> Why are wal_records/fpi long, instead of uint64? >>> long wal_records; /* # of WAL records produced */ >>> long wal_fpi; /* # of WAL full page images produced */ >>> uint64 wal_bytes; /* size of WAL records produced */ >>> >>> long is only 4 byte e.g. on windows, and it is entirely possible to >>> wrap >>> a 4 byte record counter. It's also somewhat weird that wal_bytes is >>> unsigned, but the others are signed? >>> >>> This is made doubly weird because on the SQL level you chose to make >>> wal_records, wal_fpi bigint. And wal_bytes numeric? > > I'm sorry I don't know the reason. > > The following thread is related to the patch and the type of wal_bytes > is changed from long to uint64 because XLogRecPtr is uint64. > https://www.postgresql.org/message-id/flat/20200402144438.GF64485%40nol#1f0127c98df430104c63426fdc285c20 > > I assumed that the reason why the type of wal_records/fpi is long > is BufferUsage have the members (i.e, shared_blks_hit) of the same > types. > > So, I think it's better if to change the type of wal_records/fpi from > long to uint64, > to change the types of BufferUsage's members too. I've done a little more research so I'll share the results. IUCC, theoretically this leads to caliculate the statistics less, but actually, it's not happened. The above "wal_records", "wal_fpi" are accumulation values and when WalUsageAccumDiff() is called, we can know how many wals are generated for specific executions, for example, planning/executing a query, processing a utility command, and vacuuming one relation. The following variable has accumulated "wal_records" and "wal_fpi" per process. ``` typedef struct WalUsage { long wal_records; /* # of WAL records produced */ long wal_fpi; /* # of WAL full page images produced */ uint64 wal_bytes; /* size of WAL records produced */ } WalUsage; WalUsage pgWalUsage; ``` Although this may be overflow, it doesn't affect to caliculate the difference of wal usage between some execution points. If to generate over 2 billion wal records per executions, 4 bytes is not enough and collected statistics will be lost, but I think it's not happened. In addition, "wal_records" and "wal_fpi" values sent by processes are accumulated in the statistic collector and their types are PgStat_Counter(int64). ``` typedef struct PgStat_WalStats { PgStat_Counter wal_records; PgStat_Counter wal_fpi; uint64 wal_bytes; PgStat_Counter wal_buffers_full; TimestampTz stat_reset_timestamp; } PgStat_WalStats; ``` >> Some more things: >> - There's both PgStat_MsgWal WalStats; and static PgStat_WalStats >> walStats; >> that seems *WAY* too confusing. And the former imo shouldn't be >> global. > > Sorry for the confusing name. > I referenced the following variable name. > > static PgStat_MsgSLRU SLRUStats[SLRU_NUM_ELEMENTS]; > static PgStat_SLRUStats slruStats[SLRU_NUM_ELEMENTS]; > > How about to change from "PgStat_MsgWal WalStats" > to "PgStat_MsgWal MsgWalStats"? > > Is it better to change the following name too? > "PgStat_MsgBgWriter BgWriterStats;" > "static PgStat_MsgSLRU SLRUStats[SLRU_NUM_ELEMENTS];" > > Since PgStat_MsgWal is called in xlog.c and pgstat.c, > I thought it's should be global. I made an attached patch to rename the above variable names. What do you think? Regards, -- Masahiro Ikeda NTT DATA CORPORATION --=_e80dc6e39c184dd6ed6d5c4660d9305b Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-Refactor-variable-names-of-global-statistics-message.patch Content-Disposition: attachment; filename=0001-Refactor-variable-names-of-global-statistics-message.patch; size=9668 RnJvbSA4YmRlOTQ4ZTVlOTFkYmZiY2Y3OWIwOTFhZjUxZjAyMmFhMzIxOTFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlybyBJa2VkYSA8aWtlZGFtc2hAb3NzLm50dGRhdGEu Y29tPgpEYXRlOiBXZWQsIDIwIEphbiAyMDIxIDEyOjEzOjI0ICswOTAwClN1YmplY3Q6IFtQQVRD SF0gUmVmYWN0b3IgdmFyaWFibGUgbmFtZXMgb2YgZ2xvYmFsIHN0YXRpc3RpY3MgbWVzc2FnZXMK ClJlZmFjdG9yIHRoZSB2YXJpYWJsZSBuYW1lcyBvZiBnbG9iYWwgc3RhdGlzdGljcyBtZXNzYWdl cwpmb3IgYmd3cml0ZXIsIHdhbCwgYW5kIFNMUlUgYmVjYXVzZSB0aGUgbmFtZXMgYXJlIHRvbyBj b25mdXNpbmcuCgpOb3csIHRoZWlyIG5hbWVzIGFyZSBCZ1dyaXRlclN0YXRzLCBXYWxTdGF0cywg YW5kIFNMUlVTdGF0cy4gQnV0LAp0aGVyZSBhcmUgYWxpa2UgbmFtZXMgdGhhdCBhcmUgZGVmaW5l ZCBpbiB0aGUgc3RhdGlzdGljIGNvbGxlY3Rvci4KVGhlaXIgbmFtZXMgYXJlIHdhbFN0YXRzIGFu ZCBzbHJ1U3RhdHMuIFNpbmNlIHRoaXMgaXMgY29uZnVzaW5nLAp0aGlzIHBhdGNoIHJlbmFtZXMg dmFyaWFibGUgbmFtZXMgb2YgbWVzc2FnZXMgdG8gbWFrZSBpdCBlYXN5IHRvCnVuZGVyc3RhbmQg dGhhdCB0aGV5IGFyZSBtZXNzYWdlcy4KCkF1dGhvcjogTWFzYWhpcm8gSWtlZGEKUmV2aWV3ZWQt Ynk6IEFuZHJlcyBGcmV1bmQKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8yMDIwMTIy MjAwMzkzNS40N2FveGZtb2tsdGxybGYyQGFsYXAzLmFuYXJhemVsLmRlCi0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICB8ICA2ICsrLS0KIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvY2hlY2twb2ludGVyLmMgfCAgOCArKystLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cGdzdGF0LmMgICAgICAgfCA0MCArKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgfCAgOCArKystLS0KIHNyYy9pbmNsdWRlL3Bn c3RhdC5oICAgICAgICAgICAgICAgICAgfCAgNCArLS0KIDUgZmlsZXMgY2hhbmdlZCwgMzMgaW5z ZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmlu ZGV4IDQ3MGUxMTNiMzMuLmE2NGFkMzRmMjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMK QEAgLTIyMDksNyArMjIwOSw3IEBAIEFkdmFuY2VYTEluc2VydEJ1ZmZlcihYTG9nUmVjUHRyIHVw dG8sIGJvb2wgb3Bwb3J0dW5pc3RpYykKIAkJCQkJV3JpdGVScXN0LkZsdXNoID0gMDsKIAkJCQkJ WExvZ1dyaXRlKFdyaXRlUnFzdCwgZmFsc2UpOwogCQkJCQlMV0xvY2tSZWxlYXNlKFdBTFdyaXRl TG9jayk7Ci0JCQkJCVdhbFN0YXRzLm1fd2FsX2J1ZmZlcnNfZnVsbCsrOworCQkJCQlNc2dXYWxT dGF0cy5tX3dhbF9idWZmZXJzX2Z1bGwrKzsKIAkJCQkJVFJBQ0VfUE9TVEdSRVNRTF9XQUxfQlVG RkVSX1dSSVRFX0RJUlRZX0RPTkUoKTsKIAkJCQl9CiAJCQkJLyogUmUtYWNxdWlyZSBXQUxCdWZN YXBwaW5nTG9jayBhbmQgcmV0cnkgKi8KQEAgLTg2NTgsOCArODY1OCw4IEBAIExvZ0NoZWNrcG9p bnRFbmQoYm9vbCByZXN0YXJ0cG9pbnQpCiAJCQkJCQkJCQkJCQkgQ2hlY2twb2ludFN0YXRzLmNr cHRfc3luY19lbmRfdCk7CiAKIAkvKiBBY2N1bXVsYXRlIGNoZWNrcG9pbnQgdGltaW5nIHN1bW1h cnkgZGF0YSwgaW4gbWlsbGlzZWNvbmRzLiAqLwotCUJnV3JpdGVyU3RhdHMubV9jaGVja3BvaW50 X3dyaXRlX3RpbWUgKz0gd3JpdGVfbXNlY3M7Ci0JQmdXcml0ZXJTdGF0cy5tX2NoZWNrcG9pbnRf c3luY190aW1lICs9IHN5bmNfbXNlY3M7CisJTXNnQmdXcml0ZXJTdGF0cy5tX2NoZWNrcG9pbnRf d3JpdGVfdGltZSArPSB3cml0ZV9tc2VjczsKKwlNc2dCZ1dyaXRlclN0YXRzLm1fY2hlY2twb2lu dF9zeW5jX3RpbWUgKz0gc3luY19tc2VjczsKIAogCS8qCiAJICogQWxsIG9mIHRoZSBwdWJsaXNo ZWQgdGltaW5nIHN0YXRpc3RpY3MgYXJlIGFjY291bnRlZCBmb3IuICBPbmx5CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9jaGVja3BvaW50ZXIuYwppbmRleCA1NGE4MThiZjYxLi45NzM1ZTRlMTYzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKQEAgLTM2MCw3ICszNjAsNyBAQCBDaGVj a3BvaW50ZXJNYWluKHZvaWQpCiAJCWlmICgoKHZvbGF0aWxlIENoZWNrcG9pbnRlclNobWVtU3Ry dWN0ICopIENoZWNrcG9pbnRlclNobWVtKS0+Y2twdF9mbGFncykKIAkJewogCQkJZG9fY2hlY2tw b2ludCA9IHRydWU7Ci0JCQlCZ1dyaXRlclN0YXRzLm1fcmVxdWVzdGVkX2NoZWNrcG9pbnRzKys7 CisJCQlNc2dCZ1dyaXRlclN0YXRzLm1fcmVxdWVzdGVkX2NoZWNrcG9pbnRzKys7CiAJCX0KIAog CQkvKgpAQCAtMzc0LDcgKzM3NCw3IEBAIENoZWNrcG9pbnRlck1haW4odm9pZCkKIAkJaWYgKGVs YXBzZWRfc2VjcyA+PSBDaGVja1BvaW50VGltZW91dCkKIAkJewogCQkJaWYgKCFkb19jaGVja3Bv aW50KQotCQkJCUJnV3JpdGVyU3RhdHMubV90aW1lZF9jaGVja3BvaW50cysrOworCQkJCU1zZ0Jn V3JpdGVyU3RhdHMubV90aW1lZF9jaGVja3BvaW50cysrOwogCQkJZG9fY2hlY2twb2ludCA9IHRy dWU7CiAJCQlmbGFncyB8PSBDSEVDS1BPSU5UX0NBVVNFX1RJTUU7CiAJCX0KQEAgLTEyNTcsOCAr MTI1Nyw4IEBAIEFic29yYlN5bmNSZXF1ZXN0cyh2b2lkKQogCUxXTG9ja0FjcXVpcmUoQ2hlY2tw b2ludGVyQ29tbUxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKIAkvKiBUcmFuc2ZlciBzdGF0cyBjb3Vu dHMgaW50byBwZW5kaW5nIHBnc3RhdHMgbWVzc2FnZSAqLwotCUJnV3JpdGVyU3RhdHMubV9idWZf d3JpdHRlbl9iYWNrZW5kICs9IENoZWNrcG9pbnRlclNobWVtLT5udW1fYmFja2VuZF93cml0ZXM7 Ci0JQmdXcml0ZXJTdGF0cy5tX2J1Zl9mc3luY19iYWNrZW5kICs9IENoZWNrcG9pbnRlclNobWVt LT5udW1fYmFja2VuZF9mc3luYzsKKwlNc2dCZ1dyaXRlclN0YXRzLm1fYnVmX3dyaXR0ZW5fYmFj a2VuZCArPSBDaGVja3BvaW50ZXJTaG1lbS0+bnVtX2JhY2tlbmRfd3JpdGVzOworCU1zZ0JnV3Jp dGVyU3RhdHMubV9idWZfZnN5bmNfYmFja2VuZCArPSBDaGVja3BvaW50ZXJTaG1lbS0+bnVtX2Jh Y2tlbmRfZnN5bmM7CiAKIAlDaGVja3BvaW50ZXJTaG1lbS0+bnVtX2JhY2tlbmRfd3JpdGVzID0g MDsKIAlDaGVja3BvaW50ZXJTaG1lbS0+bnVtX2JhY2tlbmRfZnN5bmMgPSAwOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ3N0YXQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvcGdzdGF0LmMKaW5kZXggZjc1YjUyNzE5ZC4uMzQ1NTY5MjBjYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wZ3N0YXQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L3Bnc3RhdC5jCkBAIC0xNDEsOCArMTQxLDggQEAgY2hhcgkgICAqcGdzdGF0X3N0YXRfdG1wbmFt ZSA9IE5VTEw7CiAgKiBTdG9yZWQgZGlyZWN0bHkgaW4gYSBzdGF0cyBtZXNzYWdlIHN0cnVjdHVy ZSBzbyB0aGV5IGNhbiBiZSBzZW50CiAgKiB3aXRob3V0IG5lZWRpbmcgdG8gY29weSB0aGluZ3Mg YXJvdW5kLiAgV2UgYXNzdW1lIHRoZXNlIGluaXQgdG8gemVyb2VzLgogICovCi1QZ1N0YXRfTXNn QmdXcml0ZXIgQmdXcml0ZXJTdGF0czsKLVBnU3RhdF9Nc2dXYWwgV2FsU3RhdHM7CitQZ1N0YXRf TXNnQmdXcml0ZXIgTXNnQmdXcml0ZXJTdGF0czsKK1BnU3RhdF9Nc2dXYWwgTXNnV2FsU3RhdHM7 CiAKIC8qCiAgKiBXQUwgdXNhZ2UgY291bnRlcnMgc2F2ZWQgZnJvbSBwZ1dBTFVzYWdlIGF0IHRo ZSBwcmV2aW91cyBjYWxsIHRvCkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIg KmNvbnN0IHNscnVfbmFtZXNbXSA9IHsKICAqIHRvIGNvcHkgdGhpbmdzIGFyb3VuZC4gIFdlIGFz c3VtZSB0aGlzIHZhcmlhYmxlIGluaXRzIHRvIHplcm9lcy4gIEVudHJpZXMKICAqIGFyZSBvbmUt dG8tb25lIHdpdGggc2xydV9uYW1lc1tdLgogICovCi1zdGF0aWMgUGdTdGF0X01zZ1NMUlUgU0xS VVN0YXRzW1NMUlVfTlVNX0VMRU1FTlRTXTsKK3N0YXRpYyBQZ1N0YXRfTXNnU0xSVSBNc2dTTFJV U3RhdHNbU0xSVV9OVU1fRUxFTUVOVFNdOwogCiAvKiAtLS0tLS0tLS0tCiAgKiBMb2NhbCBkYXRh CkBAIC00NjUxLDE5ICs0NjUxLDE5IEBAIHBnc3RhdF9zZW5kX2Jnd3JpdGVyKHZvaWQpCiAJICog dGhpcyBjYXNlLCBhdm9pZCBzZW5kaW5nIGEgY29tcGxldGVseSBlbXB0eSBtZXNzYWdlIHRvIHRo ZSBzdGF0cwogCSAqIGNvbGxlY3Rvci4KIAkgKi8KLQlpZiAobWVtY21wKCZCZ1dyaXRlclN0YXRz LCAmYWxsX3plcm9lcywgc2l6ZW9mKFBnU3RhdF9Nc2dCZ1dyaXRlcikpID09IDApCisJaWYgKG1l bWNtcCgmTXNnQmdXcml0ZXJTdGF0cywgJmFsbF96ZXJvZXMsIHNpemVvZihQZ1N0YXRfTXNnQmdX cml0ZXIpKSA9PSAwKQogCQlyZXR1cm47CiAKIAkvKgogCSAqIFByZXBhcmUgYW5kIHNlbmQgdGhl IG1lc3NhZ2UKIAkgKi8KLQlwZ3N0YXRfc2V0aGVhZGVyKCZCZ1dyaXRlclN0YXRzLm1faGRyLCBQ R1NUQVRfTVRZUEVfQkdXUklURVIpOwotCXBnc3RhdF9zZW5kKCZCZ1dyaXRlclN0YXRzLCBzaXpl b2YoQmdXcml0ZXJTdGF0cykpOworCXBnc3RhdF9zZXRoZWFkZXIoJk1zZ0JnV3JpdGVyU3RhdHMu bV9oZHIsIFBHU1RBVF9NVFlQRV9CR1dSSVRFUik7CisJcGdzdGF0X3NlbmQoJk1zZ0JnV3JpdGVy U3RhdHMsIHNpemVvZihNc2dCZ1dyaXRlclN0YXRzKSk7CiAKIAkvKgogCSAqIENsZWFyIG91dCB0 aGUgc3RhdGlzdGljcyBidWZmZXIsIHNvIGl0IGNhbiBiZSByZS11c2VkLgogCSAqLwotCU1lbVNl dCgmQmdXcml0ZXJTdGF0cywgMCwgc2l6ZW9mKEJnV3JpdGVyU3RhdHMpKTsKKwlNZW1TZXQoJk1z Z0JnV3JpdGVyU3RhdHMsIDAsIHNpemVvZihNc2dCZ1dyaXRlclN0YXRzKSk7CiB9CiAKIC8qIC0t LS0tLS0tLS0KQEAgLTQ2ODgsMjMgKzQ2ODgsMjMgQEAgcGdzdGF0X3NlbmRfd2FsKHZvaWQpCiAJ TWVtU2V0KCZ3YWx1c2FnZSwgMCwgc2l6ZW9mKFdhbFVzYWdlKSk7CiAJV2FsVXNhZ2VBY2N1bURp ZmYoJndhbHVzYWdlLCAmcGdXYWxVc2FnZSwgJnByZXZXYWxVc2FnZSk7CiAKLQlXYWxTdGF0cy5t X3dhbF9yZWNvcmRzID0gd2FsdXNhZ2Uud2FsX3JlY29yZHM7Ci0JV2FsU3RhdHMubV93YWxfZnBp ID0gd2FsdXNhZ2Uud2FsX2ZwaTsKLQlXYWxTdGF0cy5tX3dhbF9ieXRlcyA9IHdhbHVzYWdlLndh bF9ieXRlczsKKwlNc2dXYWxTdGF0cy5tX3dhbF9yZWNvcmRzID0gd2FsdXNhZ2Uud2FsX3JlY29y ZHM7CisJTXNnV2FsU3RhdHMubV93YWxfZnBpID0gd2FsdXNhZ2Uud2FsX2ZwaTsKKwlNc2dXYWxT dGF0cy5tX3dhbF9ieXRlcyA9IHdhbHVzYWdlLndhbF9ieXRlczsKIAogCS8qCiAJICogVGhpcyBm dW5jdGlvbiBjYW4gYmUgY2FsbGVkIGV2ZW4gaWYgbm90aGluZyBhdCBhbGwgaGFzIGhhcHBlbmVk LiBJbgogCSAqIHRoaXMgY2FzZSwgYXZvaWQgc2VuZGluZyBhIGNvbXBsZXRlbHkgZW1wdHkgbWVz c2FnZSB0byB0aGUgc3RhdHMKIAkgKiBjb2xsZWN0b3IuCiAJICovCi0JaWYgKG1lbWNtcCgmV2Fs U3RhdHMsICZhbGxfemVyb2VzLCBzaXplb2YoUGdTdGF0X01zZ1dhbCkpID09IDApCisJaWYgKG1l bWNtcCgmTXNnV2FsU3RhdHMsICZhbGxfemVyb2VzLCBzaXplb2YoUGdTdGF0X01zZ1dhbCkpID09 IDApCiAJCXJldHVybjsKIAogCS8qCiAJICogUHJlcGFyZSBhbmQgc2VuZCB0aGUgbWVzc2FnZQog CSAqLwotCXBnc3RhdF9zZXRoZWFkZXIoJldhbFN0YXRzLm1faGRyLCBQR1NUQVRfTVRZUEVfV0FM KTsKLQlwZ3N0YXRfc2VuZCgmV2FsU3RhdHMsIHNpemVvZihXYWxTdGF0cykpOworCXBnc3RhdF9z ZXRoZWFkZXIoJk1zZ1dhbFN0YXRzLm1faGRyLCBQR1NUQVRfTVRZUEVfV0FMKTsKKwlwZ3N0YXRf c2VuZCgmTXNnV2FsU3RhdHMsIHNpemVvZihNc2dXYWxTdGF0cykpOwogCiAJLyoKIAkgKiBTYXZl IHRoZSBjdXJyZW50IGNvdW50ZXJzIGZvciB0aGUgc3Vic2VxdWVudCBjYWxjdWxhdGlvbiBvZiBX QUwgdXNhZ2UuCkBAIC00NzE0LDcgKzQ3MTQsNyBAQCBwZ3N0YXRfc2VuZF93YWwodm9pZCkKIAkv KgogCSAqIENsZWFyIG91dCB0aGUgc3RhdGlzdGljcyBidWZmZXIsIHNvIGl0IGNhbiBiZSByZS11 c2VkLgogCSAqLwotCU1lbVNldCgmV2FsU3RhdHMsIDAsIHNpemVvZihXYWxTdGF0cykpOworCU1l bVNldCgmTXNnV2FsU3RhdHMsIDAsIHNpemVvZihNc2dXYWxTdGF0cykpOwogfQogCiAvKiAtLS0t LS0tLS0tCkBAIC00NzM2LDIyICs0NzM2LDIyIEBAIHBnc3RhdF9zZW5kX3NscnUodm9pZCkKIAkJ ICogdGhpcyBjYXNlLCBhdm9pZCBzZW5kaW5nIGEgY29tcGxldGVseSBlbXB0eSBtZXNzYWdlIHRv IHRoZSBzdGF0cwogCQkgKiBjb2xsZWN0b3IuCiAJCSAqLwotCQlpZiAobWVtY21wKCZTTFJVU3Rh dHNbaV0sICZhbGxfemVyb2VzLCBzaXplb2YoUGdTdGF0X01zZ1NMUlUpKSA9PSAwKQorCQlpZiAo bWVtY21wKCZNc2dTTFJVU3RhdHNbaV0sICZhbGxfemVyb2VzLCBzaXplb2YoUGdTdGF0X01zZ1NM UlUpKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJLyogc2V0IHRoZSBTTFJVIHR5cGUgYmVmb3Jl IGVhY2ggc2VuZCAqLwotCQlTTFJVU3RhdHNbaV0ubV9pbmRleCA9IGk7CisJCU1zZ1NMUlVTdGF0 c1tpXS5tX2luZGV4ID0gaTsKIAogCQkvKgogCQkgKiBQcmVwYXJlIGFuZCBzZW5kIHRoZSBtZXNz YWdlCiAJCSAqLwotCQlwZ3N0YXRfc2V0aGVhZGVyKCZTTFJVU3RhdHNbaV0ubV9oZHIsIFBHU1RB VF9NVFlQRV9TTFJVKTsKLQkJcGdzdGF0X3NlbmQoJlNMUlVTdGF0c1tpXSwgc2l6ZW9mKFBnU3Rh dF9Nc2dTTFJVKSk7CisJCXBnc3RhdF9zZXRoZWFkZXIoJk1zZ1NMUlVTdGF0c1tpXS5tX2hkciwg UEdTVEFUX01UWVBFX1NMUlUpOworCQlwZ3N0YXRfc2VuZCgmTXNnU0xSVVN0YXRzW2ldLCBzaXpl b2YoUGdTdGF0X01zZ1NMUlUpKTsKIAogCQkvKgogCQkgKiBDbGVhciBvdXQgdGhlIHN0YXRpc3Rp Y3MgYnVmZmVyLCBzbyBpdCBjYW4gYmUgcmUtdXNlZC4KIAkJICovCi0JCU1lbVNldCgmU0xSVVN0 YXRzW2ldLCAwLCBzaXplb2YoUGdTdGF0X01zZ1NMUlUpKTsKKwkJTWVtU2V0KCZNc2dTTFJVU3Rh dHNbaV0sIDAsIHNpemVvZihQZ1N0YXRfTXNnU0xSVSkpOwogCX0KIH0KIApAQCAtNzM2MSw3ICs3 MzYxLDcgQEAgc2xydV9lbnRyeShpbnQgc2xydV9pZHgpCiAKIAlBc3NlcnQoKHNscnVfaWR4ID49 IDApICYmIChzbHJ1X2lkeCA8IFNMUlVfTlVNX0VMRU1FTlRTKSk7CiAKLQlyZXR1cm4gJlNMUlVT dGF0c1tzbHJ1X2lkeF07CisJcmV0dXJuICZNc2dTTFJVU3RhdHNbc2xydV9pZHhdOwogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCA1NjFjMjEyMDkyLi5jN2EyODA3 OGViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMjA1OSw3ICsyMDU5LDcg QEAgQnVmZmVyU3luYyhpbnQgZmxhZ3MpCiAJCQlpZiAoU3luY09uZUJ1ZmZlcihidWZfaWQsIGZh bHNlLCAmd2JfY29udGV4dCkgJiBCVUZfV1JJVFRFTikKIAkJCXsKIAkJCQlUUkFDRV9QT1NUR1JF U1FMX0JVRkZFUl9TWU5DX1dSSVRURU4oYnVmX2lkKTsKLQkJCQlCZ1dyaXRlclN0YXRzLm1fYnVm X3dyaXR0ZW5fY2hlY2twb2ludHMrKzsKKwkJCQlNc2dCZ1dyaXRlclN0YXRzLm1fYnVmX3dyaXR0 ZW5fY2hlY2twb2ludHMrKzsKIAkJCQludW1fd3JpdHRlbisrOwogCQkJfQogCQl9CkBAIC0yMTY5 LDcgKzIxNjksNyBAQCBCZ0J1ZmZlclN5bmMoV3JpdGViYWNrQ29udGV4dCAqd2JfY29udGV4dCkK IAlzdHJhdGVneV9idWZfaWQgPSBTdHJhdGVneVN5bmNTdGFydCgmc3RyYXRlZ3lfcGFzc2VzLCAm cmVjZW50X2FsbG9jKTsKIAogCS8qIFJlcG9ydCBidWZmZXIgYWxsb2MgY291bnRzIHRvIHBnc3Rh dCAqLwotCUJnV3JpdGVyU3RhdHMubV9idWZfYWxsb2MgKz0gcmVjZW50X2FsbG9jOworCU1zZ0Jn V3JpdGVyU3RhdHMubV9idWZfYWxsb2MgKz0gcmVjZW50X2FsbG9jOwogCiAJLyoKIAkgKiBJZiB3 ZSdyZSBub3QgcnVubmluZyB0aGUgTFJVIHNjYW4sIGp1c3Qgc3RvcCBhZnRlciBkb2luZyB0aGUg c3RhdHMKQEAgLTIzNTksNyArMjM1OSw3IEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0 ICp3Yl9jb250ZXh0KQogCQkJcmV1c2FibGVfYnVmZmVycysrOwogCQkJaWYgKCsrbnVtX3dyaXR0 ZW4gPj0gYmd3cml0ZXJfbHJ1X21heHBhZ2VzKQogCQkJewotCQkJCUJnV3JpdGVyU3RhdHMubV9t YXh3cml0dGVuX2NsZWFuKys7CisJCQkJTXNnQmdXcml0ZXJTdGF0cy5tX21heHdyaXR0ZW5fY2xl YW4rKzsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMjM2Nyw3ICsyMzY3LDcgQEAgQmdCdWZm ZXJTeW5jKFdyaXRlYmFja0NvbnRleHQgKndiX2NvbnRleHQpCiAJCQlyZXVzYWJsZV9idWZmZXJz Kys7CiAJfQogCi0JQmdXcml0ZXJTdGF0cy5tX2J1Zl93cml0dGVuX2NsZWFuICs9IG51bV93cml0 dGVuOworCU1zZ0JnV3JpdGVyU3RhdHMubV9idWZfd3JpdHRlbl9jbGVhbiArPSBudW1fd3JpdHRl bjsKIAogI2lmZGVmIEJHV19ERUJVRwogCWVsb2coREVCVUcxLCAiYmd3cml0ZXI6IHJlY2VudF9h bGxvYz0ldSBzbW9vdGhlZD0lLjJmIGRlbHRhPSVsZCBhaGVhZD0lZCBkZW5zaXR5PSUuMmYgcmV1 c2FibGVfZXN0PSVkIHVwY29taW5nX2VzdD0lZCBzY2FubmVkPSVkIHdyb3RlPSVkIHJldXNhYmxl PSVkIiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oIGIvc3JjL2luY2x1ZGUvcGdz dGF0LmgKaW5kZXggNzI0MDY4Y2Y4Ny4uZjY1ZGZjODU2OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcGdzdGF0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGdzdGF0LmgKQEAgLTEzNzUsMTIgKzEzNzUs MTIgQEAgZXh0ZXJuIGNoYXIgKnBnc3RhdF9zdGF0X2ZpbGVuYW1lOwogLyoKICAqIEJnV3JpdGVy IHN0YXRpc3RpY3MgY291bnRlcnMgYXJlIHVwZGF0ZWQgZGlyZWN0bHkgYnkgYmd3cml0ZXIgYW5k IGJ1Zm1ncgogICovCi1leHRlcm4gUGdTdGF0X01zZ0JnV3JpdGVyIEJnV3JpdGVyU3RhdHM7Citl eHRlcm4gUGdTdGF0X01zZ0JnV3JpdGVyIE1zZ0JnV3JpdGVyU3RhdHM7CiAKIC8qCiAgKiBXQUwg c3RhdGlzdGljcyBjb3VudGVyIGlzIHVwZGF0ZWQgYnkgYmFja2VuZHMgYW5kIGJhY2tncm91bmQg cHJvY2Vzc2VzCiAgKi8KLWV4dGVybiBQZ1N0YXRfTXNnV2FsIFdhbFN0YXRzOworZXh0ZXJuIFBn U3RhdF9Nc2dXYWwgTXNnV2FsU3RhdHM7CiAKIC8qCiAgKiBVcGRhdGVkIGJ5IHBnc3RhdF9jb3Vu dF9idWZmZXJfKl90aW1lIG1hY3JvcwotLSAKMi4yNS4xCgo= --=_e80dc6e39c184dd6ed6d5c4660d9305b--