Received: from localhost (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id EDB54633C39 for ; Wed, 15 Apr 2009 05:02:13 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 67873-03 for ; Wed, 15 Apr 2009 05:02:06 -0300 (ADT) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-qy0-f115.google.com (mail-qy0-f115.google.com [209.85.221.115]) by mail.postgresql.org (Postfix) with ESMTP id 80E78632B5B for ; Wed, 15 Apr 2009 05:02:01 -0300 (ADT) Received: by qyk13 with SMTP id 13so5234550qyk.15 for ; Wed, 15 Apr 2009 01:02:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=/rSS1IiRJxtXoU7moj81cpgclxD/vjERUsvqQZ0QqFA=; b=QC1xAh/5Jh1bjZWw4ddLyPssIezPXbv8hZlnuWsMOnOGWau/1yd2cY1UNoKlQqACWM 3C3AYYh/QCkT4dWXM3RD3hwFHM3K81LmLrmkYaA3z7Ezrr4GVCALKR6Qmk/ZSGJ5nmAd YxAUKMl+q4l40r8KAKeUf2feaYk5MJ0Q2gWQg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=fptYZOL1WOAurITlSA0MI1NtmqRV5dHU2DN0nZmOkfjVUF4yrvEuRpGP/oCPOMEYlu 0q81j0K2fgjGNa3ezgBZ4BQ2txFPyqrw77J39UDgQiJ4V/SCiCjpMLOHOZL2jUMCiMlh fWzIM3RIf5a2LgmqMcxR52X3LsHZ8Zz65PWTs= MIME-Version: 1.0 Received: by 10.220.97.137 with SMTP id l9mr7834063vcn.98.1239782520422; Wed, 15 Apr 2009 01:02:00 -0700 (PDT) In-Reply-To: <3f0b79eb0904132241p18084914g792cb8e5ab3eebb3@mail.gmail.com> References: <3f0b79eb0903242329j12865d55s348f5c873a956e71@mail.gmail.com> <3f0b79eb0903311901h70520cc8u9c0f1d8f4193923b@mail.gmail.com> <3f0b79eb0904022042g35b8e3cah9432ff764e721a3@mail.gmail.com> <1d4e0c10904071456m735e3f67q123b87243d2f6f2a@mail.gmail.com> <3f0b79eb0904071817u5c32254ei61f7e68e54669d9e@mail.gmail.com> <49DDEE72.6030803@enterprisedb.com> <3f0b79eb0904092047w355e0b3ar527a9285b161ef91@mail.gmail.com> <1239381103.16396.30.camel@ebony.2ndQuadrant> <3f0b79eb0904122252t1f4c5860v919d199f399ccf72@mail.gmail.com> <3f0b79eb0904132241p18084914g792cb8e5ab3eebb3@mail.gmail.com> Date: Wed, 15 Apr 2009 17:02:00 +0900 Message-ID: <3f0b79eb0904150101pb1c59a3ubb422867e8e6a944@mail.gmail.com> Subject: Re: New trigger option of pg_standby From: Fujii Masao To: Simon Riggs Cc: Heikki Linnakangas , Guillaume Smet , Tom Lane , Peter Eisentraut , Kevin Grittner , pgsql-hackers Content-Type: multipart/mixed; boundary=0016e6464ec0ba837f0467935cdb X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.132 tagged_above=0 required=5 tests=AWL=0.132 X-Spam-Level: X-Archive-Number: 200904/831 X-Sequence-Number: 136934 --0016e6464ec0ba837f0467935cdb Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hi, On Tue, Apr 14, 2009 at 2:41 PM, Fujii Masao wrote: > I'd like to propose another simple idea; pg_standby deletes the > trigger file *whenever* the nextWALfile is a timeline history file. > A timeline history file is restored at the end of recovery, so it's > guaranteed that the trigger file is deleted whether nextWALfile > exists or not. > > A timeline history file is restored also at the beginning of > recovery, so the accidentally remaining trigger file is deleted > in early warm-standby as a side-effect of this idea. Here is the revised patch as above. If you notice something, please feel free to comment. Regards, -- Fujii Masao NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center --0016e6464ec0ba837f0467935cdb Content-Type: application/octet-stream; name="pgstandby_change_trigger_0415.patch" Content-Disposition: attachment; filename="pgstandby_change_trigger_0415.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ftjqg0de0 SW5kZXg6IGNvbnRyaWIvcGdfc3RhbmRieS9wZ19zdGFuZGJ5LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvY29udHJpYi9wZ19zdGFuZGJ5L3BnX3N0YW5kYnku Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC1jIC1yMS4yMSBwZ19zdGFuZGJ5LmMK KioqIGNvbnRyaWIvcGdfc3RhbmRieS9wZ19zdGFuZGJ5LmMJMjYgTWFyIDIwMDkgMjI6Mjk6MTMg LTAwMDAJMS4yMQotLS0gY29udHJpYi9wZ19zdGFuZGJ5L3BnX3N0YW5kYnkuYwkxNSBBcHIgMjAw OSAwNzo1MTo1NiAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDUyLDU4ICoqKioKICBpbnQJCQlr ZWVwZmlsZXMgPSAwOwkJLyogbnVtYmVyIG9mIFdBTCBmaWxlcyB0byBrZWVwLCAwIGtlZXAgYWxs ICovCiAgaW50CQkJbWF4cmV0cmllcyA9IDM7CQkvKiBudW1iZXIgb2YgcmV0cmllcyBvbiByZXN0 b3JlIGNvbW1hbmQgKi8KICBib29sCQlkZWJ1ZyA9IGZhbHNlOwkJLyogYXJlIHdlIGRlYnVnZ2lu Zz8gKi8KLSBib29sCQl0cmlnZ2VyZWQgPSBmYWxzZTsJLyogaGF2ZSB3ZSBiZWVuIHRyaWdnZXJl ZD8gKi8KICBib29sCQluZWVkX2NsZWFudXAgPSBmYWxzZTsJCS8qIGRvIHdlIG5lZWQgdG8gcmVt b3ZlIGZpbGVzIGZyb20KICAJCQkJCQkJCQkJICogYXJjaGl2ZT8gKi8KICAKLS0tIDUyLDU3IC0t LS0KKioqKioqKioqKioqKioqCioqKiA2OSw3NCAqKioqCi0tLSA2OCw5OSAtLS0tCiAgY2hhcgkJ ZXhjbHVzaXZlQ2xlYW51cEZpbGVOYW1lW01BWFBHUEFUSF07CQkvKiB0aGUgZmlsZSB3ZSBuZWVk IHRvCiAgCQkJCQkJCQkJCQkJCQkgKiBnZXQgZnJvbSBhcmNoaXZlICovCiAgCisgLyoKKyAgKiBU d28gdHlwZXMgb2YgZmFpbG92ZXIgYXJlIHN1cHBvcnRlZCAoc21hcnQgYW5kIGZhc3QgZmFpbG92 ZXIpLgorICAqCisgICogVGhlIGNvbnRlbnQgb2YgdGhlIHRyaWdnZXIgZmlsZSBkZXRlcm1pbmVz IHRoZSB0eXBlIG9mIGZhaWxvdmVyLgorICAqIElmIHRoZSB0cmlnZ2VyIGZpbGUgY29udGFpbmlu ZyAic21hcnQiIGV4aXN0cywgc21hcnQgZmFpbG92ZXIgaXMgY2hvc2VuOworICAqIHBnX3N0YW5k YnkgYWN0cyBhcyBjcCBvciBsbiBjb21tYW5kIGl0c2VsZiwgYW5kIHJlY292ZXJ5IHdhaXRzIHRv CisgICogZmluaXNoIHVudGlsIGFsbCB0aGUgYXZhaWxhYmxlIFdBTCBmaWxlcyBhcmUgYXBwbGll ZC4gSXQncworICAqIGd1YXJhbnRlZWQgdGhhdCBubyAiYXZhaWxhYmxlIiBjb21taXQgdHJhbnNh Y3Rpb25zIGFyZSBsb3N0LiBCdXQKKyAgKiBpdCBtaWdodCB0YWtlIHNvbWUgdGltZXMgYmVmb3Jl IGZpbmlzaGluZyByZWNvdmVyeS4KKyAgKgorICAqIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgZXhp c3RlbmNlIG9mIHRoZSB0cmlnZ2VyIGZpbGUgd2l0aCAiZmFzdCIKKyAgKiBjYXVzZXMgcmVjb3Zl cnkgdG8gZW5kIGltbWVkaWF0ZWx5IGV2ZW4gaWYgdGhlIGF2YWlsYWJsZSBXQUwgZmlsZXMKKyAg KiByZW1haW4uIFNvLCBzb21lIHRyYW5zYWN0aW9ucyBtaWdodCBiZSBsb3N0LgorICAqCisgICog QW4gZW1wdHkgdHJpZ2dlciBmaWxlIHBlcmZvcm1zIHNtYXJ0IGZhaWxvdmVyLgorICAqCisgICog RmFzdCBmYWlsb3ZlciBpcyB0cmlnZ2VyZWQgYnkgdGhlIHNpZ25hbCAoU0lHVVNSMSBvciBTSUdJ TlQpLgorICAqCisgICogQSB0aW1lb3V0IGNhdXNlcyBzbWFydCBmYWlsb3Zlci4KKyAgKi8KKyAj ZGVmaW5lIE5vRmFpbG92ZXIJCTAKKyAjZGVmaW5lIFNtYXJ0RmFpbG92ZXIJMQorICNkZWZpbmUg RmFzdEZhaWxvdmVyCTIKKyAKKyBzdGF0aWMgaW50IEZhaWxvdmVyID0gTm9GYWlsb3ZlcjsKKyAK ICAjZGVmaW5lIFJFU1RPUkVfQ09NTUFORF9DT1BZIDAKICAjZGVmaW5lIFJFU1RPUkVfQ09NTUFO RF9MSU5LIDEKICBpbnQJCQlyZXN0b3JlQ29tbWFuZFR5cGU7CioqKioqKioqKioqKioqKgoqKiog MTA4LDExNCAqKioqCiAgICoKICAgKglBcyBhbiBleGFtcGxlLCBhbmQgcHJvYmFibHkgdGhlIGNv bW1vbiBjYXNlLCB3ZSB1c2UgZWl0aGVyCiAgICoJY3AvbG4gY29tbWFuZHMgb24gKm5peCwgb3Ig Y29weS9tb3ZlIGNvbW1hbmQgb24gV2luZG93cy4KLSAgKgogICAqLwogIHN0YXRpYyB2b2lkCiAg Q3VzdG9taXphYmxlSW5pdGlhbGl6ZSh2b2lkKQotLS0gMTMzLDEzOCAtLS0tCioqKioqKioqKioq KioqKgoqKiogMzU3LDM2MyAqKioqCiAgc3RhdGljIGJvb2wKICBDaGVja0ZvckV4dGVybmFsVHJp Z2dlcih2b2lkKQogIHsKISAJaW50CQkJcmM7CiAgCiAgCS8qCiAgCSAqIExvb2sgZm9yIGEgdHJp Z2dlciBmaWxlLCBpZiB0aGF0IG9wdGlvbiBoYXMgYmVlbiBzZWxlY3RlZAotLS0gMzgxLDM4OCAt LS0tCiAgc3RhdGljIGJvb2wKICBDaGVja0ZvckV4dGVybmFsVHJpZ2dlcih2b2lkKQogIHsKISAJ Y2hhcglidWZbMzJdOwohIAlGSUxFICAgKmZkOwogIAogIAkvKgogIAkgKiBMb29rIGZvciBhIHRy aWdnZXIgZmlsZSwgaWYgdGhhdCBvcHRpb24gaGFzIGJlZW4gc2VsZWN0ZWQKKioqKioqKioqKioq KioqCioqKiAzNjUsMzc0ICoqKioKICAJICogV2UgdXNlIHN0YXQoKSBoZXJlIGJlY2F1c2UgdHJp Z2dlclBhdGggaXMgYWx3YXlzIGEgZmlsZSByYXRoZXIgdGhhbgogIAkgKiBwb3RlbnRpYWxseSBi ZWluZyBpbiBhbiBhcmNoaXZlCiAgCSAqLwohIAlpZiAodHJpZ2dlclBhdGggJiYgc3RhdCh0cmln Z2VyUGF0aCwgJnN0YXRfYnVmKSA9PSAwKQogIAl7CiEgCQlmcHJpbnRmKHN0ZGVyciwgInRyaWdn ZXIgZmlsZSBmb3VuZFxuIik7CiAgCQlmZmx1c2goc3RkZXJyKTsKICAKICAJCS8qCiAgCQkgKiBJ ZiB0cmlnZ2VyIGZpbGUgZm91bmQsIHdlICptdXN0KiBkZWxldGUgaXQuIEhlcmUncyB3aHk6IFdo ZW4KLS0tIDM5MCw0MzkgLS0tLQogIAkgKiBXZSB1c2Ugc3RhdCgpIGhlcmUgYmVjYXVzZSB0cmln Z2VyUGF0aCBpcyBhbHdheXMgYSBmaWxlIHJhdGhlciB0aGFuCiAgCSAqIHBvdGVudGlhbGx5IGJl aW5nIGluIGFuIGFyY2hpdmUKICAJICovCiEgCWlmICghdHJpZ2dlclBhdGggfHwgc3RhdCh0cmln Z2VyUGF0aCwgJnN0YXRfYnVmKSAhPSAwKQohIAkJcmV0dXJuIGZhbHNlOwohIAohIAkvKgohIAkg KiBBbiBlbXB0eSB0cmlnZ2VyIGZpbGUgcGVyZm9ybXMgc21hcnQgZmFpbG92ZXIKISAJICovCiEg CWlmIChzdGF0X2J1Zi5zdF9zaXplID09IDApCiAgCXsKISAJCUZhaWxvdmVyID0gU21hcnRGYWls b3ZlcjsKISAJCWZwcmludGYoc3RkZXJyLCAidHJpZ2dlciBmaWxlIGZvdW5kOiBzbWFydCBmYWls b3ZlclxuIik7CiAgCQlmZmx1c2goc3RkZXJyKTsKKyAJCXJldHVybiB0cnVlOworIAl9CisgCisg CWlmICgoZmQgPSBmb3Blbih0cmlnZ2VyUGF0aCwgInIiKSkgPT0gTlVMTCkKKyAJeworIAkJZnBy aW50ZihzdGRlcnIsICJXQVJOSU5HOiBjb3VsZCBub3Qgb3BlbiBcIiVzXCI6ICVzXG4iLAorIAkJ CQl0cmlnZ2VyUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCWZmbHVzaChzdGRlcnIpOworIAkJ cmV0dXJuIGZhbHNlOworIAl9CisgCQorIAlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZmQp ID09IE5VTEwpCisgCXsKKyAJCWZwcmludGYoc3RkZXJyLCAiV0FSTklORzogY291bGQgbm90IHJl YWQgXCIlc1wiOiAlc1xuIiwKKyAJCQkJdHJpZ2dlclBhdGgsIHN0cmVycm9yKGVycm5vKSk7Cisg CQlmZmx1c2goc3RkZXJyKTsKKyAJCWZjbG9zZShmZCk7CisgCQlyZXR1cm4gZmFsc2U7CisgCX0K KyAJCisgCWZjbG9zZShmZCk7CisgCQorIAlpZiAoc3RybmNtcChidWYsICJzbWFydCIsIDUpID09 IDApCisgCXsKKyAJCUZhaWxvdmVyID0gU21hcnRGYWlsb3ZlcjsKKyAJCWZwcmludGYoc3RkZXJy LCAidHJpZ2dlciBmaWxlIGZvdW5kOiBzbWFydCBmYWlsb3ZlclxuIik7CisgCQlmZmx1c2goc3Rk ZXJyKTsKKyAJCXJldHVybiB0cnVlOworIAl9CisgCQorIAlpZiAoc3RybmNtcChidWYsICJmYXN0 IiwgNCkgPT0gMCkKKyAJeworIAkJaW50CXJjOwogIAogIAkJLyoKICAJCSAqIElmIHRyaWdnZXIg ZmlsZSBmb3VuZCwgd2UgKm11c3QqIGRlbGV0ZSBpdC4gSGVyZSdzIHdoeTogV2hlbgoqKioqKioq KioqKioqKioKKioqIDM3OSwzOTEgKioqKgogIAkJcmMgPSB1bmxpbmsodHJpZ2dlclBhdGgpOwog IAkJaWYgKHJjICE9IDApCiAgCQl7CiEgCQkJZnByaW50ZihzdGRlcnIsICJcbiBFUlJPUjogY291 bGQgbm90IHJlbW92ZSBcIiVzXCI6ICVzIiwgdHJpZ2dlclBhdGgsIHN0cmVycm9yKGVycm5vKSk7 CiAgCQkJZmZsdXNoKHN0ZGVycik7CiAgCQkJZXhpdChyYyk7CiAgCQl9CiAgCQlyZXR1cm4gdHJ1 ZTsKICAJfQohIAogIAlyZXR1cm4gZmFsc2U7CiAgfQogIAotLS0gNDQ0LDQ2NCAtLS0tCiAgCQly YyA9IHVubGluayh0cmlnZ2VyUGF0aCk7CiAgCQlpZiAocmMgIT0gMCkKICAJCXsKISAJCQlmcHJp bnRmKHN0ZGVyciwgIlxuIEVSUk9SOiBjb3VsZCBub3QgcmVtb3ZlIFwiJXNcIjogJXMiLAohIAkJ CQkJdHJpZ2dlclBhdGgsIHN0cmVycm9yKGVycm5vKSk7CiAgCQkJZmZsdXNoKHN0ZGVycik7CiAg CQkJZXhpdChyYyk7CiAgCQl9CisgCisgCQlGYWlsb3ZlciA9IEZhc3RGYWlsb3ZlcjsKKyAJCWZw cmludGYoc3RkZXJyLCAidHJpZ2dlciBmaWxlIGZvdW5kOiBmYXN0IGZhaWxvdmVyXG4iKTsKKyAJ CWZmbHVzaChzdGRlcnIpOwogIAkJcmV0dXJuIHRydWU7CiAgCX0KISAJCiEgCWZwcmludGYoc3Rk ZXJyLCAiV0FSTklORzogaW52YWxpZCBjb250ZW50IGluIFwiJXNcIlxuIiwKISAJCQl0cmlnZ2Vy UGF0aCk7CiEgCWZmbHVzaChzdGRlcnIpOwogIAlyZXR1cm4gZmFsc2U7CiAgfQogIAoqKioqKioq KioqKioqKioKKioqIDU1Miw1NTkgKioqKgogIAkJCQlicmVhazsKICAJCQljYXNlICd0JzoJCQkv KiBUcmlnZ2VyIGZpbGUgKi8KICAJCQkJdHJpZ2dlclBhdGggPSBvcHRhcmc7Ci0gCQkJCWlmIChD aGVja0ZvckV4dGVybmFsVHJpZ2dlcigpKQotIAkJCQkJZXhpdCgxKTsJLyogTm9ybWFsIGV4aXQs IHdpdGggbm9uLXplcm8gKi8KICAJCQkJYnJlYWs7CiAgCQkJY2FzZSAndyc6CQkJLyogTWF4IHdh aXQgdGltZSAqLwogIAkJCQltYXh3YWl0dGltZSA9IGF0b2kob3B0YXJnKTsKLS0tIDYyNSw2MzAg LS0tLQoqKioqKioqKioqKioqKioKKioqIDY1OSw2NjQgKioqKgotLS0gNzMwLDc1NSAtLS0tCiAg CQlzdHJjbXAobmV4dFdBTEZpbGVOYW1lICsgc3RybGVuKG5leHRXQUxGaWxlTmFtZSkgLSBzdHJs ZW4oIi5oaXN0b3J5IiksCiAgCQkJICAgIi5oaXN0b3J5IikgPT0gMCkKICAJeworIAkJLyoKKyAJ CSAqIERlbGV0ZSB0aGUgdHJpZ2dlciBmaWxlIHdoZW5ldmVyIGEgaGlzdG9yeSBmaWxlIGlzIHJl cXVlc3RlZAorIAkJICogKGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiByZWNvdmVyeSkuIFdo aWNoIHByZXZlbnRzIHRoZQorIAkJICogYWNjaWRlbnRhbGx5IHJlbWFpbmluZyB0cmlnZ2VyIGZp bGUgZnJvbSBoYXJtaW5nIHRoZSB3YXJtLXN0YW5kYnksCisgCQkgKiBhbmQgYW4gdW5uZWNlc3Nh cnkgdHJpZ2dlciBmaWxlIGZyb20gcmVtYWluaW5nIGFmdGVyIHJlY292ZXJ5LgorIAkJICovCisg CQlpZiAodHJpZ2dlclBhdGggJiYgc3RhdCh0cmlnZ2VyUGF0aCwgJnN0YXRfYnVmKSA9PSAwKQor IAkJeworIAkJCWludAlyYzsKKyAJCQkKKyAJCQlyYyA9IHVubGluayh0cmlnZ2VyUGF0aCk7Cisg CQkJaWYgKHJjICE9IDApCisgCQkJeworIAkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuIEVSUk9SOiBj b3VsZCBub3QgcmVtb3ZlIFwiJXNcIjogJXMiLAorIAkJCQkJCXRyaWdnZXJQYXRoLCBzdHJlcnJv cihlcnJubykpOworIAkJCQlmZmx1c2goc3RkZXJyKTsKKyAJCQkJZXhpdChyYyk7CisgCQkJfQor IAkJfQorIAogIAkJbmV4dFdBTEZpbGVUeXBlID0gWExPR19ISVNUT1JZOwogIAkJaWYgKFJlc3Rv cmVXQUxGaWxlRm9yUmVjb3ZlcnkoKSkKICAJCQlleGl0KDApOwoqKioqKioqKioqKioqKioKKioq IDY3Niw2OTcgKioqKgogIAkvKgogIAkgKiBNYWluIHdhaXQgbG9vcAogIAkgKi8KISAJd2hpbGUg KCFDdXN0b21pemFibGVOZXh0V0FMRmlsZVJlYWR5KCkgJiYgIXRyaWdnZXJlZCkKICAJewogIAkJ aWYgKHNsZWVwdGltZSA8PSA2MCkKICAJCQlwZ191c2xlZXAoc2xlZXB0aW1lICogMTAwMDAwMEwp OwogIAogIAkJaWYgKHNpZ25hbGVkKQogIAkJewohIAkJCXRyaWdnZXJlZCA9IHRydWU7CiAgCQkJ aWYgKGRlYnVnKQogIAkJCXsKISAJCQkJZnByaW50ZihzdGRlcnIsICJcbnNpZ25hbGVkIHRvIGV4 aXRcbiIpOwogIAkJCQlmZmx1c2goc3RkZXJyKTsKICAJCQl9CiAgCQl9CiAgCQllbHNlCiAgCQl7 CiAgCiAgCQkJaWYgKGRlYnVnKQogIAkJCXsKLS0tIDc2Nyw4MDEgLS0tLQogIAkvKgogIAkgKiBN YWluIHdhaXQgbG9vcAogIAkgKi8KISAJd2hpbGUgKCFDaGVja0ZvckV4dGVybmFsVHJpZ2dlcigp ICYmICFDdXN0b21pemFibGVOZXh0V0FMRmlsZVJlYWR5KCkpCiAgCXsKICAJCWlmIChzbGVlcHRp bWUgPD0gNjApCiAgCQkJcGdfdXNsZWVwKHNsZWVwdGltZSAqIDEwMDAwMDBMKTsKICAKICAJCWlm IChzaWduYWxlZCkKICAJCXsKISAJCQlGYWlsb3ZlciA9IEZhc3RGYWlsb3ZlcjsKICAJCQlpZiAo ZGVidWcpCiAgCQkJewohIAkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuc2lnbmFsZWQgdG8gZXhpdDog ZmFzdCBmYWlsb3ZlclxuIik7CiAgCQkJCWZmbHVzaChzdGRlcnIpOwogIAkJCX0KKyAJCQlicmVh azsKICAJCX0KICAJCWVsc2UKICAJCXsKKyAJCQl3YWl0dGltZSArPSBzbGVlcHRpbWU7CisgCQkJ aWYgKHdhaXR0aW1lID49IG1heHdhaXR0aW1lICYmIG1heHdhaXR0aW1lID4gMCkKKyAJCQl7Cisg CQkJCUZhaWxvdmVyID0gRmFzdEZhaWxvdmVyOworIAkJCQlpZiAoZGVidWcpCisgCQkJCXsKKyAJ CQkJCWZwcmludGYoc3RkZXJyLCAiXG5UaW1lZCBvdXQgYWZ0ZXIgJWQgc2Vjb25kczogZmFzdCBm YWlsb3ZlclxuIiwKKyAJCQkJCQkJd2FpdHRpbWUpOworIAkJCQkJZmZsdXNoKHN0ZGVycik7Cisg CQkJCX0KKyAJCQkJYnJlYWs7CisgCQkJfQogIAogIAkJCWlmIChkZWJ1ZykKICAJCQl7CioqKioq KioqKioqKioqKgoqKiogNzAwLDcyMiAqKioqCiAgCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiBDaGVj a2luZyBmb3IgdHJpZ2dlciBmaWxlLi4uIik7CiAgCQkJCWZmbHVzaChzdGRlcnIpOwogIAkJCX0K LSAKLSAJCQl3YWl0dGltZSArPSBzbGVlcHRpbWU7Ci0gCi0gCQkJaWYgKCF0cmlnZ2VyZWQgJiYg KENoZWNrRm9yRXh0ZXJuYWxUcmlnZ2VyKCkgfHwgKHdhaXR0aW1lID49IG1heHdhaXR0aW1lICYm IG1heHdhaXR0aW1lID4gMCkpKQotIAkJCXsKLSAJCQkJdHJpZ2dlcmVkID0gdHJ1ZTsKLSAJCQkJ aWYgKGRlYnVnICYmIHdhaXR0aW1lID49IG1heHdhaXR0aW1lICYmIG1heHdhaXR0aW1lID4gMCkK LSAJCQkJCWZwcmludGYoc3RkZXJyLCAiXG5UaW1lZCBvdXQgYWZ0ZXIgJWQgc2Vjb25kc1xuIiwg d2FpdHRpbWUpOwotIAkJCX0KICAJCX0KICAJfQogIAogIAkvKgogIAkgKiBBY3Rpb24gb24gZXhp dAogIAkgKi8KISAJaWYgKHRyaWdnZXJlZCkKISAJCWV4aXQoMSk7CQkJCS8qIE5vcm1hbCBleGl0 LCB3aXRoIG5vbi16ZXJvICovCiAgCiAgCS8qCiAgCSAqIE9uY2Ugd2UgaGF2ZSByZXN0b3JlZCB0 aGlzIGZpbGUgc3VjY2Vzc2Z1bGx5IHdlIGNhbiByZW1vdmUgc29tZSBwcmlvcgotLS0gODA0LDgx NyAtLS0tCiAgCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiBDaGVja2luZyBmb3IgdHJpZ2dlciBmaWxl Li4uIik7CiAgCQkJCWZmbHVzaChzdGRlcnIpOwogIAkJCX0KICAJCX0KICAJfQogIAogIAkvKgog IAkgKiBBY3Rpb24gb24gZXhpdAogIAkgKi8KISAJaWYgKEZhaWxvdmVyID09IEZhc3RGYWlsb3Zl cikKISAJCWV4aXQoMSk7CiAgCiAgCS8qCiAgCSAqIE9uY2Ugd2UgaGF2ZSByZXN0b3JlZCB0aGlz IGZpbGUgc3VjY2Vzc2Z1bGx5IHdlIGNhbiByZW1vdmUgc29tZSBwcmlvcgpJbmRleDogZG9jL3Ny Yy9zZ21sL3Bnc3RhbmRieS5zZ21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNy b290L3Bnc3FsL2RvYy9zcmMvc2dtbC9wZ3N0YW5kYnkuc2dtbCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMi43CmRpZmYgLWMgLXIyLjcgcGdzdGFuZGJ5LnNnbWwKKioqIGRvYy9zcmMvc2dtbC9wZ3N0 YW5kYnkuc2dtbAkyNyBGZWIgMjAwOSAwOTozMDoyMSAtMDAwMAkyLjcKLS0tIGRvYy9zcmMvc2dt bC9wZ3N0YW5kYnkuc2dtbAkxNSBBcHIgMjAwOSAwNzo1MTo1NiAtMDAwMAoqKioqKioqKioqKioq KioKKioqIDkyLDk3ICoqKioKLS0tIDkyLDEzMiAtLS0tCiAgICAgaXMgc3BlY2lmaWVkLAogICAg IHRoZSA8cmVwbGFjZWFibGU+YXJjaGl2ZWxvY2F0aW9uPC8+IGRpcmVjdG9yeSBtdXN0IGJlIHdy aXRhYmxlIHRvby4KICAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIFRoZXJlIGFyZSB0d28gd2F5 cyB0byBmYWlsIG92ZXIgYSA8cXVvdGU+d2FybSBzdGFuZGJ5PC8+IGRhdGFiYXNlIHNlcnZlci4K KyAgICBZb3UgY29udHJvbCB0aGUgdHlwZSBvZiBmYWlsb3ZlciBieSBjcmVhdGluZyBkaWZmZXJl bnQgdHJpZ2dlciBmaWxlcworICAgIChpZiA8bGl0ZXJhbD4tdDwvPiBoYXMgYmVlbiBzcGVjaWZp ZWQpLgorIAorICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8 dGVybT5TbWFydCBGYWlsb3ZlcjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgSWYgdGhlIHRyaWdnZXIgZmlsZSBjb250YWluaW5nIDxsaXRlcmFsPnNtYXJ0 PC8+IGV4aXN0cywKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBnX3N0YW5kYnk8L2FwcGxpY2F0aW9u PiBhY3RzIGFzCisgICAgICAgIDxsaXRlcmFsPmNwPC8+IG9yIDxsaXRlcmFsPmxuPC8+IGNvbW1h bmQgaXRzZWxmLAorICAgICAgICBhbmQgcmVjb3Zlcnkgd2FpdHMgdG8gZmluaXNoIHVudGlsIGFs bCB0aGUgYXZhaWxhYmxlCisgICAgICAgIFdBTCBmaWxlcyBhcmUgYXBwbGllZC4gSXQncyBndWFy YW50ZWVkIHRoYXQgbm8KKyAgICAgICAgPGVtcGhhc2lzPmF2YWlsYWJsZTwvPiB0cmFuc2FjdGlv bnMgYXJlIGxvc3QuCisgICAgICAgIEJ1dCBpdCBtaWdodCB0YWtlIHNvbWUgdGltZXMgYmVmb3Jl IGZpbmlzaGluZyBmYWlsb3Zlci4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAg ICAgIEFuIGVtcHR5IHRyaWdnZXIgZmlsZSBhbHNvIHNtYXJ0bHkgcGVyZm9ybXMgZmFpbG92ZXIu CisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+ CisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT5GYXN0IEZhaWxvdmVyPC90ZXJtPgor ICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZXhpc3RlbmNlIG9m IHRoZSB0cmlnZ2VyIGZpbGUgY29udGFpbmluZyA8bGl0ZXJhbD5mYXN0PC8+CisgICAgICAgIGNh dXNlcyByZWNvdmVyeSB0byBlbmQgaW1tZWRpYXRlbHkgZXZlbiBpZiB0aGUgYXZhaWxhYmxlCisg ICAgICAgIFdBTCBmaWxlcyByZW1haW4uIFNvLCBzb21lIHRyYW5zYWN0aW9ucyBtaWdodCBiZSBs b3N0LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVu dHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICAgPC9wYXJhPgogIAogICAgPHRhYmxlPgogICAg IDx0aXRsZT48YXBwbGljYXRpb24+cGdfc3RhbmRieTwvPiBvcHRpb25zPC90aXRsZT4KKioqKioq KioqKioqKioqCioqKiAxNzcsMTg4ICoqKioKICAgICAgICA8ZW50cnk+PGxpdGVyYWw+LXQ8Lz4g PHJlcGxhY2VhYmxlPnRyaWdnZXJmaWxlPC8+PC9lbnRyeT4KICAgICAgICA8ZW50cnk+bm9uZTwv ZW50cnk+CiAgICAgICAgPGVudHJ5PgohICAgICAgICBTcGVjaWZ5IGEgdHJpZ2dlciBmaWxlIHdo b3NlIHByZXNlbmNlIHNob3VsZCBjYXVzZSByZWNvdmVyeSB0byBlbmQKISAgICAgICAgd2hldGhl ciBvciBub3QgdGhlIG5leHQgV0FMIGZpbGUgaXMgYXZhaWxhYmxlLgogICAgICAgICBJdCBpcyBy ZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYSBzdHJ1Y3R1cmVkIGZpbGVuYW1lIHRvCiAgICAgICAg IGF2b2lkIGNvbmZ1c2lvbiBhcyB0byB3aGljaCBzZXJ2ZXIgaXMgYmVpbmcgdHJpZ2dlcmVkCiAg ICAgICAgIHdoZW4gbXVsdGlwbGUgc2VydmVycyBleGlzdCBvbiB0aGUgc2FtZSBzeXN0ZW07IGZv ciBleGFtcGxlCiAgICAgICAgIDxmaWxlbmFtZT4vdG1wL3Bnc3FsLnRyaWdnZXIuNTQzMjwvPi4K ICAgICAgICA8L2VudHJ5PgogICAgICAgPC9yb3c+CiAgICAgICA8cm93PgotLS0gMjEyLDIyNCAt LS0tCiAgICAgICAgPGVudHJ5PjxsaXRlcmFsPi10PC8+IDxyZXBsYWNlYWJsZT50cmlnZ2VyZmls ZTwvPjwvZW50cnk+CiAgICAgICAgPGVudHJ5Pm5vbmU8L2VudHJ5PgogICAgICAgIDxlbnRyeT4K ISAgICAgICAgU3BlY2lmeSBhIHRyaWdnZXIgZmlsZSB3aG9zZSBwcmVzZW5jZSBzaG91bGQgcGVy Zm9ybSBmYWlsb3Zlci4KICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIGEg c3RydWN0dXJlZCBmaWxlbmFtZSB0bwogICAgICAgICBhdm9pZCBjb25mdXNpb24gYXMgdG8gd2hp Y2ggc2VydmVyIGlzIGJlaW5nIHRyaWdnZXJlZAogICAgICAgICB3aGVuIG11bHRpcGxlIHNlcnZl cnMgZXhpc3Qgb24gdGhlIHNhbWUgc3lzdGVtOyBmb3IgZXhhbXBsZQogICAgICAgICA8ZmlsZW5h bWU+L3RtcC9wZ3NxbC50cmlnZ2VyLjU0MzI8Lz4uCisgICAgICAgIE5vdGUgdGhhdCBhIHRyaWdn ZXIgZmlsZSBpcyBkZWxldGVkIGF0IHRoZSBlbmQgb2YgcmVjb3ZlcnkKKyAgICAgICAgcmVnYXJk bGVzcyBvZiBmYWlsb3ZlciB0eXBlLgogICAgICAgIDwvZW50cnk+CiAgICAgICA8L3Jvdz4KICAg ICAgIDxyb3c+CioqKioqKioqKioqKioqKgoqKiogMTkwLDE5NiAqKioqCiAgICAgICAgPGVudHJ5 PjA8L2VudHJ5PgogICAgICAgIDxlbnRyeT4KICAgICAgICAgU2V0IHRoZSBtYXhpbXVtIG51bWJl ciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBuZXh0IFdBTCBmaWxlLAohICAgICAgICBhZnRl ciB3aGljaCByZWNvdmVyeSB3aWxsIGVuZCBhbmQgdGhlIHN0YW5kYnkgd2lsbCBjb21lIHVwLgog ICAgICAgICBBIHNldHRpbmcgb2YgemVybyAodGhlIGRlZmF1bHQpIG1lYW5zIHdhaXQgZm9yZXZl ci4KICAgICAgICAgVGhlIGRlZmF1bHQgc2V0dGluZyBpcyBub3QgbmVjZXNzYXJpbHkgcmVjb21t ZW5kZWQ7CiAgICAgICAgIGNvbnN1bHQgPHhyZWYgbGlua2VuZD0id2FybS1zdGFuZGJ5Ij4gZm9y IGRpc2N1c3Npb24uCi0tLSAyMjYsMjMzIC0tLS0KICAgICAgICA8ZW50cnk+MDwvZW50cnk+CiAg ICAgICAgPGVudHJ5PgogICAgICAgICBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMg dG8gd2FpdCBmb3IgdGhlIG5leHQgV0FMIGZpbGUsCiEgICAgICAgIGFmdGVyIHdoaWNoIHJlY292 ZXJ5IHdpbGwgZW5kIGFuZCB0aGUgc3RhbmRieSB3aWxsIGNvbWUgdXAKISAgICAgICAgKEZhc3Qg RmFpbG92ZXIpLgogICAgICAgICBBIHNldHRpbmcgb2YgemVybyAodGhlIGRlZmF1bHQpIG1lYW5z IHdhaXQgZm9yZXZlci4KICAgICAgICAgVGhlIGRlZmF1bHQgc2V0dGluZyBpcyBub3QgbmVjZXNz YXJpbHkgcmVjb21tZW5kZWQ7CiAgICAgICAgIGNvbnN1bHQgPHhyZWYgbGlua2VuZD0id2FybS1z dGFuZGJ5Ij4gZm9yIGRpc2N1c3Npb24uCioqKioqKioqKioqKioqKgoqKiogMjM2LDI0MiAqKioq CiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KICAgICAgIHN0b3Agd2FpdGluZyBvbmx5IHdo ZW4gYSB0cmlnZ2VyIGZpbGUgY2FsbGVkCiEgICAgICA8ZmlsZW5hbWU+L3RtcC9wZ3NxbC50cmln Z2VyLjU0NDI8Lz4gYXBwZWFycwogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgICA8 bGlzdGl0ZW0+Ci0tLSAyNzMsMjgwIC0tLS0KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgog ICAgICAgc3RvcCB3YWl0aW5nIG9ubHkgd2hlbiBhIHRyaWdnZXIgZmlsZSBjYWxsZWQKISAgICAg IDxmaWxlbmFtZT4vdG1wL3Bnc3FsLnRyaWdnZXIuNTQ0MjwvPiBhcHBlYXJzLAohICAgICAgYW5k IHBlcmZvcm0gZmFpbG92ZXIgYWNjb3JkaW5nIHRvIGl0cyBjb250ZW50CiAgICAgIDwvcGFyYT4K ICAgICA8L2xpc3RpdGVtPgogICAgIDxsaXN0aXRlbT4KKioqKioqKioqKioqKioqCioqKiAyNzcs MjgzICoqKioKICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgogICAgICAgc3RvcCB3YWl0aW5n IG9ubHkgd2hlbiBhIHRyaWdnZXIgZmlsZSBjYWxsZWQKISAgICAgIDxmaWxlbmFtZT5DOlxwZ3Nx bC50cmlnZ2VyLjU0NDI8Lz4gYXBwZWFycwogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4K ICAgICA8bGlzdGl0ZW0+Ci0tLSAzMTUsMzIyIC0tLS0KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxw YXJhPgogICAgICAgc3RvcCB3YWl0aW5nIG9ubHkgd2hlbiBhIHRyaWdnZXIgZmlsZSBjYWxsZWQK ISAgICAgIDxmaWxlbmFtZT5DOlxwZ3NxbC50cmlnZ2VyLjU0NDI8Lz4gYXBwZWFycywKISAgICAg IGFuZCBwZXJmb3JtIGZhaWxvdmVyIGFjY29yZGluZyB0byBpdHMgY29udGVudAogICAgICA8L3Bh cmE+CiAgICAgPC9saXN0aXRlbT4KICAgICA8bGlzdGl0ZW0+Cg== --0016e6464ec0ba837f0467935cdb--