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 1ts7EN-00FSXb-8o for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Mar 2025 21:33:43 +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 1ts7EL-007QRg-Fq for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Mar 2025 21:33:41 +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.94.2) (envelope-from ) id 1ts7EL-007QRY-2e for pgsql-hackers@lists.postgresql.org; Tue, 11 Mar 2025 21:33:41 +0000 Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ts7EH-002JM5-1I for pgsql-hackers@lists.postgresql.org; Tue, 11 Mar 2025 21:33:40 +0000 Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-5e6f4b3ebe5so5195395a12.0 for ; Tue, 11 Mar 2025 14:33:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741728818; x=1742333618; darn=lists.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=qkKLSfIi93WMXuXbY7DzmEhVh3Mt5Bj4/Sb0MWQyk58=; b=Ykl/l0p1US2gpSrfWHfAnWe5kdYyGhSKLd90TF2i3F0W4z+ClUIsLoMe6RhM8ksDDT uOZI2H5iPTCfkZEJ/Ec27Wihy3eHvy1xgwbIuWg8AVWewm4KoR7mafOPtOg6LhH4wDlc F26rvwesI3rSrEWI0YEHDSf1/M3A4PkL8VSzbWAJ9fALcbVAouoQzyK4mtJrFlVSBZSl iMv/EiKE/qro+q93GklgqloJrwrQKLfDCeXbDr+oduvuLtpIC/0l1qpynH+BXs9H/an5 WTWoq+4FraGZrpj9F4Kh69vA2GyVjOa2p+UFEgM52Q41Tkbj8aOK4ShqrEIDFmDLXLmp hoNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741728818; x=1742333618; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=qkKLSfIi93WMXuXbY7DzmEhVh3Mt5Bj4/Sb0MWQyk58=; b=I2RCVuqYzVI23f9We7rq2RoiQW4umeXoA7nn0XOlr7e/zz4ovx+FPtG2VHL7xGo9H6 KbdRIm3bUhMOzxJ97m2OwOMX0n7+qNUIyxt1htO1CD5R6Vb4y2B4n4AskuisVKjSmAiG dnBxX4+vvlEfd+K5dJrxaFelRX0lMCNjkIr+2i13KS5SxwPSLqearP3A6J5q6F9dqxPO E5+BEInLjBpuKMzR1kPXbBwcvcxk8qlzzkfMT3OhJhfdDjEwm5V/S5D0BVyO2laVXgiA ZkspowYAZn/AG0baMJSGpWkN5XCLHfEgY6MzlVaX9Ti1CKCsOpQatuKnRv5Nk6/aU1CB amKg== X-Forwarded-Encrypted: i=1; AJvYcCUtl4RxV1yKx8YJmndIjUFHrBv3OlVm7jdF/SyTw7kF/1BIMnAyzu9DlAAabVMvhtBqTfz60z3h50aOPPiX@lists.postgresql.org X-Gm-Message-State: AOJu0YwVoVAsbqmuvsL2yTFOSg/b4Gvv4RCR02d9tSa4rTRYtMw4xKt7 xnN10HcBBGlHg0dydBo0Vvuv7o7Sg5TTvIYbLO6UUrZFM9NZCMxubpfDemc5i6Fq/WPlqh12x/O 9MrEEbjlpKciHchHtDr6ZZkXRrUk= X-Gm-Gg: ASbGncuPaVB09mhbb5SrKiNJUYR2kKixWrQHFRB/cXOx4Su3JWrRjacFiZm/Sk1uHiS NOV4YqnkGvio9ts/gir2I8iFaGP1fbhJrmh+tbWCqUlpziONOnttnkm6A2+fKtAD1k9Riv+QxYF 4dfU9p88ZCjShmZ9yTeFKAy7HX0w== X-Google-Smtp-Source: AGHT+IGQaDm6amRDKz8+zluyYmKbjojKK3yZAzy6JpEpEp7kMkI1EfsqB4Qh52BNw+Dfr0cJBUCHZSJU1G4mRAueORQ= X-Received: by 2002:a05:6402:3884:b0:5e6:14ac:30f with SMTP id 4fb4d7f45d1cf-5e614ac10ecmr16690025a12.2.1741728817544; Tue, 11 Mar 2025 14:33:37 -0700 (PDT) MIME-Version: 1.0 References: <202503101112.ozklxnrfw4dr@alvherre.pgsql> In-Reply-To: <202503101112.ozklxnrfw4dr@alvherre.pgsql> From: Alexander Korotkov Date: Tue, 11 Mar 2025 23:33:25 +0200 X-Gm-Features: AQ5f1JrLbLoJkHwU6PRNgQ4gS9Ioh2eEXICBjj3JIxYnT0bMX6FuFUADT6vZCd8 Message-ID: Subject: Re: pgsql: reindexdb: Add the index-level REINDEX with multiple jobs To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: Alexander Korotkov , pgsql-hackers@lists.postgresql.org, Maxim Orlov , Svetlana Derevyanko Content-Type: multipart/mixed; boundary="000000000000773c59063017d741" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000773c59063017d741 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 10, 2025 at 1:12=E2=80=AFPM =C3=81lvaro Herrera wrote: > On 2025-Mar-09, Alexander Korotkov wrote: > > > After second thought it's not so hard to fix. The attached patch does > > it by putting REINDEX commands related to the same table into a single > > SQL statement. Possibly, that could be better than revert given we > > need to handle compatibility. What do you think? > > Oh, this is an egg of Columbus solution, I like it. It seems to work as > intended on a quick test. Please add some commentary to run_reindex_comm= and. > > Maybe another, possibly better way to do this would be to use libpq > pipeline mode, sending all the commands for a table in one pipeline > instead of a single command. The advantage of this would be that > server-side log entries for each command would be separate, and they > wouldn't appear clumped together in pg_stat_activity and so on. > However, this would require more invasive changes, so it might be better > to leave that for a future project -- it's certainly a harder sell for > such a change to be backpatched. So I'm +1 on your current patch for 17 > and master. Thank you for your feedback! I also think that pipelining would be a better options, but it's too invasive for backpatching. I've written comments for gen_reindex_command() and run_reindex_command(). I'm going to push this patch to master and 17 if no objections. ------ Regards, Alexander Korotkov Supabase --000000000000773c59063017d741 Content-Type: application/octet-stream; name="v2-0001-reindexdb-Fix-the-index-level-REINDEX-with-multip.patch" Content-Disposition: attachment; filename="v2-0001-reindexdb-Fix-the-index-level-REINDEX-with-multip.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m850bigf0 RnJvbSA4YzMxODhlOTcxM2NmMDQwMWExNGY2NGZiNDUzODkyOTNiYmJiZDQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogVHVlLCAxMSBNYXIgMjAyNSAyMzozMToxNCArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjJdIHJlaW5kZXhkYjogRml4IHRoZSBpbmRleC1sZXZlbCBSRUlOREVYIHdpdGggbXVs dGlwbGUgam9icwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNo YXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKNDdmOTlhNDA3ZCBp bnRyb2R1Y2VkIGEgcGFyYWxsZWwgaW5kZXgtbGV2ZWwgUkVJTkRFWC4gIFRoZSBjb2RlIHdhcyB3 cml0dGVuCmFzc3VtaW5nIHRoYXQgcnVubmluZyBydW5fcmVpbmRleF9jb21tYW5kKCkgd2l0aCBh c3luYyA9PSB0cnVlIGNhbiBzY2hlZHVsZQphIG51bWJlciBvZiBxdWVyaWVzIGZvciBhIGNvbm5l Y3Rpb24uICBUaGF0J3Mgbm90IHRydWUsIGFuZCB0aGUgc2Vjb25kIHF1ZXJ5CnNlbnQgdXNpbmcg cnVuX3JlaW5kZXhfY29tbWFuZCgpIHdpbGwgd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhl IHByZXZpb3VzCm9uZS4KClRoaXMgY29tbWl0IGZpeGVzIHRoYXQgYnkgcHV0dGluZyBSRUlOREVY IGNvbW1hbmRzIGZvciB0aGUgc2FtZSB0YWJsZSBpbnRvIGEKc2luZ2xlIHF1ZXJ5LgoKUmVwb3J0 ZWQtYnk6IMOBbHZhcm8gSGVycmVyYSA8YWx2aGVycmVAYWx2aC5uby1pcC5vcmc+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vMjAyNTAzMDcxODIwLmoyNXpuM2xvNGh2biU0MGFsdmhl cnJlLnBnc3FsClJldmlld2VkLWJ5OiDDgWx2YXJvIEhlcnJlcmEgPGFsdmhlcnJlQGFsdmgubm8t aXAub3JnPgpCYWNrcGF0Y2gtdGhyb3VnaDogMTcKLS0tCiBzcmMvYmluL3NjcmlwdHMvcmVpbmRl eGRiLmMgfCAxMjYgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgNzQgaW5zZXJ0aW9ucygrKSwgNTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9zY3JpcHRzL3JlaW5kZXhkYi5jIGIvc3JjL2Jpbi9zY3JpcHRzL3JlaW5kZXhkYi5j CmluZGV4IGIwMGM4MTEyODY5Li4zNTVmMmE1MjM5MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9zY3Jp cHRzL3JlaW5kZXhkYi5jCisrKyBiL3NyYy9iaW4vc2NyaXB0cy9yZWluZGV4ZGIuYwpAQCAtNDks MTAgKzQ5LDEzIEBAIHN0YXRpYyB2b2lkIHJlaW5kZXhfYWxsX2RhdGFiYXNlcyhDb25uUGFyYW1z ICpjcGFyYW1zLAogCQkJCQkJCQkgIGJvb2wgc3lzY2F0YWxvZywgU2ltcGxlU3RyaW5nTGlzdCAq c2NoZW1hcywKIAkJCQkJCQkJICBTaW1wbGVTdHJpbmdMaXN0ICp0YWJsZXMsCiAJCQkJCQkJCSAg U2ltcGxlU3RyaW5nTGlzdCAqaW5kZXhlcyk7Ci1zdGF0aWMgdm9pZCBydW5fcmVpbmRleF9jb21t YW5kKFBHY29ubiAqY29ubiwgUmVpbmRleFR5cGUgdHlwZSwKK3N0YXRpYyB2b2lkIGdlbl9yZWlu ZGV4X2NvbW1hbmQoUEdjb25uICpjb25uLCBSZWluZGV4VHlwZSB0eXBlLAogCQkJCQkJCQljb25z dCBjaGFyICpuYW1lLCBib29sIGVjaG8sIGJvb2wgdmVyYm9zZSwKLQkJCQkJCQkJYm9vbCBjb25j dXJyZW50bHksIGJvb2wgYXN5bmMsCi0JCQkJCQkJCWNvbnN0IGNoYXIgKnRhYmxlc3BhY2UpOwor CQkJCQkJCQlib29sIGNvbmN1cnJlbnRseSwgY29uc3QgY2hhciAqdGFibGVzcGFjZSwKKwkJCQkJ CQkJUFFFeHBCdWZmZXJEYXRhICpzcWwpOworc3RhdGljIHZvaWQgcnVuX3JlaW5kZXhfY29tbWFu ZChQR2Nvbm4gKmNvbm4sIFJlaW5kZXhUeXBlIHR5cGUsCisJCQkJCQkJCWNvbnN0IGNoYXIgKm5h bWUsIGJvb2wgZWNobywgYm9vbCBhc3luYywKKwkJCQkJCQkJUFFFeHBCdWZmZXJEYXRhICpzcSk7 CiAKIHN0YXRpYyB2b2lkIGhlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogCkBAIC0yODQsNyAr Mjg3LDYgQEAgcmVpbmRleF9vbmVfZGF0YWJhc2UoQ29ublBhcmFtcyAqY3BhcmFtcywgUmVpbmRl eFR5cGUgdHlwZSwKIAlQYXJhbGxlbFNsb3RBcnJheSAqc2E7CiAJYm9vbAkJZmFpbGVkID0gZmFs c2U7CiAJaW50CQkJaXRlbXNfY291bnQgPSAwOwotCWNoYXIJICAgKnByZXZfaW5kZXhfdGFibGVf bmFtZSA9IE5VTEw7CiAJUGFyYWxsZWxTbG90ICpmcmVlX3Nsb3QgPSBOVUxMOwogCiAJY29ubiA9 IGNvbm5lY3REYXRhYmFzZShjcGFyYW1zLCBwcm9nbmFtZSwgZWNobywgZmFsc2UsIHRydWUpOwpA QCAtNDMwLDggKzQzMiw4IEBAIHJlaW5kZXhfb25lX2RhdGFiYXNlKENvbm5QYXJhbXMgKmNwYXJh bXMsIFJlaW5kZXhUeXBlIHR5cGUsCiAJY2VsbCA9IHByb2Nlc3NfbGlzdC0+aGVhZDsKIAlkbwog CXsKKwkJUFFFeHBCdWZmZXJEYXRhIHNxbDsKIAkJY29uc3QgY2hhciAqb2JqbmFtZSA9IGNlbGwt PnZhbDsKLQkJYm9vbAkJbmVlZF9uZXdfc2xvdCA9IHRydWU7CiAKIAkJaWYgKENhbmNlbFJlcXVl c3RlZCkKIAkJewpAQCAtNDM5LDM1ICs0NDEsNDUgQEAgcmVpbmRleF9vbmVfZGF0YWJhc2UoQ29u blBhcmFtcyAqY3BhcmFtcywgUmVpbmRleFR5cGUgdHlwZSwKIAkJCWdvdG8gZmluaXNoOwogCQl9 CiAKLQkJLyoKLQkJICogRm9yIHBhcmFsbGVsIGluZGV4LWxldmVsIFJFSU5ERVgsIHRoZSBpbmRp Y2VzIG9mIHRoZSBzYW1lIHRhYmxlIGFyZQotCQkgKiBvcmRlcmVkIHRvZ2V0aGVyIGFuZCB0aGV5 IGFyZSB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIHNhbWUgam9iLiAgU28sCi0JCSAqIHdlIGRvbid0 IHN3aXRjaCB0aGUgam9iIGFzIHNvb24gYXMgdGhlIGluZGV4IGJlbG9uZ3MgdG8gdGhlIHNhbWUK LQkJICogdGFibGUgYXMgdGhlIHByZXZpb3VzIG9uZS4KLQkJICovCi0JCWlmIChwYXJhbGxlbCAm JiBwcm9jZXNzX3R5cGUgPT0gUkVJTkRFWF9JTkRFWCkKKwkJZnJlZV9zbG90ID0gUGFyYWxsZWxT bG90c0dldElkbGUoc2EsIE5VTEwpOworCQlpZiAoIWZyZWVfc2xvdCkKIAkJewotCQkJaWYgKHBy ZXZfaW5kZXhfdGFibGVfbmFtZSAhPSBOVUxMICYmCi0JCQkJc3RyY21wKHByZXZfaW5kZXhfdGFi bGVfbmFtZSwgaW5kaWNlc190YWJsZXNfY2VsbC0+dmFsKSA9PSAwKQotCQkJCW5lZWRfbmV3X3Ns b3QgPSBmYWxzZTsKLQkJCXByZXZfaW5kZXhfdGFibGVfbmFtZSA9IGluZGljZXNfdGFibGVzX2Nl bGwtPnZhbDsKLQkJCWluZGljZXNfdGFibGVzX2NlbGwgPSBpbmRpY2VzX3RhYmxlc19jZWxsLT5u ZXh0OworCQkJZmFpbGVkID0gdHJ1ZTsKKwkJCWdvdG8gZmluaXNoOwogCQl9CiAKLQkJaWYgKG5l ZWRfbmV3X3Nsb3QpCisJCVBhcmFsbGVsU2xvdFNldEhhbmRsZXIoZnJlZV9zbG90LCBUYWJsZUNv bW1hbmRSZXN1bHRIYW5kbGVyLCBOVUxMKTsKKwkJaW5pdFBRRXhwQnVmZmVyKCZzcWwpOworCQlp ZiAocGFyYWxsZWwgJiYgcHJvY2Vzc190eXBlID09IFJFSU5ERVhfSU5ERVgpCiAJCXsKLQkJCWZy ZWVfc2xvdCA9IFBhcmFsbGVsU2xvdHNHZXRJZGxlKHNhLCBOVUxMKTsKLQkJCWlmICghZnJlZV9z bG90KQorCQkJLyoKKwkJCSAqIEZvciBwYXJhbGxlbCBpbmRleC1sZXZlbCBSRUlOREVYLCB0aGUg aW5kaWNlcyBvZiB0aGUgc2FtZSB0YWJsZQorCQkJICogYXJlIG9yZGVyZWQgdG9nZXRoZXIgYW5k IHRoZXkgYXJlIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgc2FtZQorCQkJICogam9iLiAgU28sIHdl IHB1dCBhbGwgdGhlIHJlbGV2YW50IFJFSU5ERVggY29tbWFuZHMgaW50byB0aGUKKwkJCSAqIHNh bWUgU1FMIHF1ZXJ5IHRvIGJlIHByb2Nlc3NlZCBieSB0aGlzIGpvYiBhdCBvbmNlLgorCQkJICov CisJCQlnZW5fcmVpbmRleF9jb21tYW5kKGZyZWVfc2xvdC0+Y29ubmVjdGlvbiwgcHJvY2Vzc190 eXBlLCBvYmpuYW1lLAorCQkJCQkJCQllY2hvLCB2ZXJib3NlLCBjb25jdXJyZW50bHksIHRhYmxl c3BhY2UsICZzcWwpOworCQkJd2hpbGUgKGluZGljZXNfdGFibGVzX2NlbGwtPm5leHQgJiYKKwkJ CQkgICBzdHJjbXAoaW5kaWNlc190YWJsZXNfY2VsbC0+dmFsLCBpbmRpY2VzX3RhYmxlc19jZWxs LT5uZXh0LT52YWwpID09IDApCiAJCQl7Ci0JCQkJZmFpbGVkID0gdHJ1ZTsKLQkJCQlnb3RvIGZp bmlzaDsKKwkJCQlpbmRpY2VzX3RhYmxlc19jZWxsID0gaW5kaWNlc190YWJsZXNfY2VsbC0+bmV4 dDsKKwkJCQljZWxsID0gY2VsbC0+bmV4dDsKKwkJCQlvYmpuYW1lID0gY2VsbC0+dmFsOworCQkJ CWFwcGVuZFBRRXhwQnVmZmVyQ2hhcigmc3FsLCAnXG4nKTsKKwkJCQlnZW5fcmVpbmRleF9jb21t YW5kKGZyZWVfc2xvdC0+Y29ubmVjdGlvbiwgcHJvY2Vzc190eXBlLCBvYmpuYW1lLAorCQkJCQkJ CQkJZWNobywgdmVyYm9zZSwgY29uY3VycmVudGx5LCB0YWJsZXNwYWNlLCAmc3FsKTsKIAkJCX0K LQotCQkJUGFyYWxsZWxTbG90U2V0SGFuZGxlcihmcmVlX3Nsb3QsIFRhYmxlQ29tbWFuZFJlc3Vs dEhhbmRsZXIsIE5VTEwpOworCQkJaW5kaWNlc190YWJsZXNfY2VsbCA9IGluZGljZXNfdGFibGVz X2NlbGwtPm5leHQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlnZW5fcmVpbmRleF9jb21tYW5kKGZy ZWVfc2xvdC0+Y29ubmVjdGlvbiwgcHJvY2Vzc190eXBlLCBvYmpuYW1lLAorCQkJCQkJCQllY2hv LCB2ZXJib3NlLCBjb25jdXJyZW50bHksIHRhYmxlc3BhY2UsICZzcWwpOwogCQl9Ci0KIAkJcnVu X3JlaW5kZXhfY29tbWFuZChmcmVlX3Nsb3QtPmNvbm5lY3Rpb24sIHByb2Nlc3NfdHlwZSwgb2Jq bmFtZSwKLQkJCQkJCQllY2hvLCB2ZXJib3NlLCBjb25jdXJyZW50bHksIHRydWUsIHRhYmxlc3Bh Y2UpOworCQkJCQkJCWVjaG8sIHRydWUsICZzcWwpOworCQl0ZXJtUFFFeHBCdWZmZXIoJnNxbCk7 CiAKIAkJY2VsbCA9IGNlbGwtPm5leHQ7CiAJfSB3aGlsZSAoY2VsbCAhPSBOVUxMKTsKQEAgLTQ5 NSw1NyArNTA3LDU3IEBAIGZpbmlzaDoKIAkJZXhpdCgxKTsKIH0KIAorLyoKKyAqIEFwcGVuZCBh IFNRTCBjb21tYW5kIHJlcXVpcmVkIHRvIHJlaW5kZXggYSBnaXZlbiBkYXRhYmFzZSBvYmplY3Qg dG8gdGhlCisgKiAnKnNxbCcgc3RyaW5nLgorICovCiBzdGF0aWMgdm9pZAotcnVuX3JlaW5kZXhf Y29tbWFuZChQR2Nvbm4gKmNvbm4sIFJlaW5kZXhUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUs Ci0JCQkJCWJvb2wgZWNobywgYm9vbCB2ZXJib3NlLCBib29sIGNvbmN1cnJlbnRseSwgYm9vbCBh c3luYywKLQkJCQkJY29uc3QgY2hhciAqdGFibGVzcGFjZSkKK2dlbl9yZWluZGV4X2NvbW1hbmQo UEdjb25uICpjb25uLCBSZWluZGV4VHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQli b29sIGVjaG8sIGJvb2wgdmVyYm9zZSwgYm9vbCBjb25jdXJyZW50bHksCisJCQkJCWNvbnN0IGNo YXIgKnRhYmxlc3BhY2UsIFBRRXhwQnVmZmVyRGF0YSAqc3FsKQogewogCWNvbnN0IGNoYXIgKnBh cmVuID0gIigiOwogCWNvbnN0IGNoYXIgKmNvbW1hID0gIiwgIjsKIAljb25zdCBjaGFyICpzZXAg PSBwYXJlbjsKLQlQUUV4cEJ1ZmZlckRhdGEgc3FsOwotCWJvb2wJCXN0YXR1czsKIAogCUFzc2Vy dChuYW1lKTsKIAogCS8qIGJ1aWxkIHRoZSBSRUlOREVYIHF1ZXJ5ICovCi0JaW5pdFBRRXhwQnVm ZmVyKCZzcWwpOwotCi0JYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNxbCwgIlJFSU5ERVggIik7CisJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoc3FsLCAiUkVJTkRFWCAiKTsKIAogCWlmICh2ZXJib3NlKQog CXsKLQkJYXBwZW5kUFFFeHBCdWZmZXIoJnNxbCwgIiVzVkVSQk9TRSIsIHNlcCk7CisJCWFwcGVu ZFBRRXhwQnVmZmVyKHNxbCwgIiVzVkVSQk9TRSIsIHNlcCk7CiAJCXNlcCA9IGNvbW1hOwogCX0K IAogCWlmICh0YWJsZXNwYWNlKQogCXsKLQkJYXBwZW5kUFFFeHBCdWZmZXIoJnNxbCwgIiVzVEFC TEVTUEFDRSAlcyIsIHNlcCwKKwkJYXBwZW5kUFFFeHBCdWZmZXIoc3FsLCAiJXNUQUJMRVNQQUNF ICVzIiwgc2VwLAogCQkJCQkJICBmbXRJZEVuYyh0YWJsZXNwYWNlLCBQUWNsaWVudEVuY29kaW5n KGNvbm4pKSk7CiAJCXNlcCA9IGNvbW1hOwogCX0KIAogCWlmIChzZXAgIT0gcGFyZW4pCi0JCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZzcWwsICIpICIpOworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihz cWwsICIpICIpOwogCiAJLyogb2JqZWN0IHR5cGUgKi8KIAlzd2l0Y2ggKHR5cGUpCiAJewogCQlj YXNlIFJFSU5ERVhfREFUQUJBU0U6Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmc3FsLCAiREFU QUJBU0UgIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihzcWwsICJEQVRBQkFTRSAiKTsKIAkJ CWJyZWFrOwogCQljYXNlIFJFSU5ERVhfSU5ERVg6Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm c3FsLCAiSU5ERVggIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihzcWwsICJJTkRFWCAiKTsK IAkJCWJyZWFrOwogCQljYXNlIFJFSU5ERVhfU0NIRU1BOgotCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJnNxbCwgIlNDSEVNQSAiKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwgIlNDSEVN QSAiKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFSU5ERVhfU1lTVEVNOgotCQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJnNxbCwgIlNZU1RFTSAiKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwg IlNZU1RFTSAiKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFSU5ERVhfVEFCTEU6Ci0JCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmc3FsLCAiVEFCTEUgIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihz cWwsICJUQUJMRSAiKTsKIAkJCWJyZWFrOwogCX0KIApAQCAtNTU1LDM3ICs1NjcsNDkgQEAgcnVu X3JlaW5kZXhfY29tbWFuZChQR2Nvbm4gKmNvbm4sIFJlaW5kZXhUeXBlIHR5cGUsIGNvbnN0IGNo YXIgKm5hbWUsCiAJICogb2JqZWN0IHR5cGUuCiAJICovCiAJaWYgKGNvbmN1cnJlbnRseSkKLQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNxbCwgIkNPTkNVUlJFTlRMWSAiKTsKKwkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoc3FsLCAiQ09OQ1VSUkVOVExZICIpOwogCiAJLyogb2JqZWN0IG5hbWUgKi8K IAlzd2l0Y2ggKHR5cGUpCiAJewogCQljYXNlIFJFSU5ERVhfREFUQUJBU0U6CiAJCWNhc2UgUkVJ TkRFWF9TWVNURU06Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmc3FsLAorCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoc3FsLAogCQkJCQkJCQkgZm10SWRFbmMobmFtZSwgUFFjbGllbnRFbmNvZGlu Zyhjb25uKSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVJTkRFWF9JTkRFWDoKIAkJY2FzZSBSRUlO REVYX1RBQkxFOgotCQkJYXBwZW5kUXVhbGlmaWVkUmVsYXRpb24oJnNxbCwgbmFtZSwgY29ubiwg ZWNobyk7CisJCQlhcHBlbmRRdWFsaWZpZWRSZWxhdGlvbihzcWwsIG5hbWUsIGNvbm4sIGVjaG8p OwogCQkJYnJlYWs7CiAJCWNhc2UgUkVJTkRFWF9TQ0hFTUE6Ci0JCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmc3FsLCBuYW1lKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwgbmFtZSk7CiAJ CQlicmVhazsKIAl9CiAKIAkvKiBmaW5pc2ggdGhlIHF1ZXJ5ICovCi0JYXBwZW5kUFFFeHBCdWZm ZXJDaGFyKCZzcWwsICc7Jyk7CisJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKHNxbCwgJzsnKTsKK30K KworLyoKKyAqIFJ1biBvbmUgb3IgbW9yZSByZWluZGV4IGNvbW1hbmRzIGFjY3VtdWxhdGVkIGlu IHRoZSAnKnNxbCcgc3RyaW5nIGFnYWluc3QKKyAqIGEgZ2l2ZW4gZGF0YWJhc2UgY29ubmVjdGlv bi4gIE5vdGUgdGhhdCB0aGUgJ2FzeW5jJyBwYXJhbWV0ZXIgc2tpcHMgdGhlCisgKiBQUWZpbmlz aCgpIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IHBpcGVsaW5pbmcuCisgKi8KK3N0YXRpYyB2b2lkCity dW5fcmVpbmRleF9jb21tYW5kKFBHY29ubiAqY29ubiwgUmVpbmRleFR5cGUgdHlwZSwgY29uc3Qg Y2hhciAqbmFtZSwKKwkJCQkJYm9vbCBlY2hvLCBib29sIGFzeW5jLCBQUUV4cEJ1ZmZlckRhdGEg KnNxbCkKK3sKKwlib29sCQlzdGF0dXM7CiAKIAlpZiAoYXN5bmMpCiAJewogCQlpZiAoZWNobykK LQkJCXByaW50ZigiJXNcbiIsIHNxbC5kYXRhKTsKKwkJCXByaW50ZigiJXNcbiIsIHNxbC0+ZGF0 YSk7CiAKLQkJc3RhdHVzID0gUFFzZW5kUXVlcnkoY29ubiwgc3FsLmRhdGEpID09IDE7CisJCXN0 YXR1cyA9IFBRc2VuZFF1ZXJ5KGNvbm4sIHNxbC0+ZGF0YSkgPT0gMTsKIAl9CiAJZWxzZQotCQlz dGF0dXMgPSBleGVjdXRlTWFpbnRlbmFuY2VDb21tYW5kKGNvbm4sIHNxbC5kYXRhLCBlY2hvKTsK KwkJc3RhdHVzID0gZXhlY3V0ZU1haW50ZW5hbmNlQ29tbWFuZChjb25uLCBzcWwtPmRhdGEsIGVj aG8pOwogCiAJaWYgKCFzdGF0dXMpCiAJewpAQCAtNjE4LDggKzY0Miw2IEBAIHJ1bl9yZWluZGV4 X2NvbW1hbmQoUEdjb25uICpjb25uLCBSZWluZGV4VHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1l LAogCQkJZXhpdCgxKTsKIAkJfQogCX0KLQotCXRlcm1QUUV4cEJ1ZmZlcigmc3FsKTsKIH0KIAog LyoKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --000000000000773c59063017d741--