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 1trOaE-003EnS-MX for pgsql-hackers@arkaria.postgresql.org; Sun, 09 Mar 2025 21:53:18 +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 1trOaC-00EYKA-HL for pgsql-hackers@arkaria.postgresql.org; Sun, 09 Mar 2025 21:53:16 +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 1trOaC-00EYK1-5g for pgsql-hackers@lists.postgresql.org; Sun, 09 Mar 2025 21:53:16 +0000 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1trOa8-001uhQ-1b for pgsql-hackers@lists.postgresql.org; Sun, 09 Mar 2025 21:53:15 +0000 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-ac202264f9cso664736666b.0 for ; Sun, 09 Mar 2025 14:53:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741557193; x=1742161993; 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=7aa8ZA546Jq3/eNQjwHvu8eAkO1Z15G6e6KdIRknVZ4=; b=gAbiXdaBPaPf1fVl1zA22hHVXiA2d1pvw2YMeRolGvXNii30x6sY4NG7JrWoOQ2ZyM GSSsCQPb+QSW89fUBLj2etsCmDJWlmY+NgxplUtF2F7keVuh5shwY8oJyChbNputML94 nTrwlXlk36OntWs4J2n9Lfw+w6/LQn+nBSRwuWvr8N7XQaAOTau81MHuDqSur5xoZ9kB LMcDl+Swl2+goslQepo8jA6nsPfcBzpMyi7TBmRelPgl9frG6JMSZV+Q/j+3LqaNsT/P bWI6HHPvsgauKt9aRI3nWTDTLLFoywTe0007dStOrOnm3EdiAH+tJI8MnVOmCMRx+LUy J4BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741557193; x=1742161993; 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=7aa8ZA546Jq3/eNQjwHvu8eAkO1Z15G6e6KdIRknVZ4=; b=lybHfe80rF0Mc05VIbn707LIbJ87/GRJ8ioEsL8PXQt/RaC92kbrDr5BJXslLTGvu9 NPm5LGpyxbsoIfGV6mWszWNhIpUNuVW7E9cysa/8OkpL/WnZHU5+uMWhrq7kWZeoz2FJ y0OYRncdR863Bh4tNsmRQL3K9bi7eDCxABF68wHQdBK5wlklfrqGCpsuO9HFmPssBjj5 Rmdf9hUIGR9/wwZb4ML8fqvJpAvMYSlONbtj6RHjKgX/DIGK+q3LRARw1sDuGDgWl+Oh 6XFppkAHakFCuyE7u1Lj8IP1U9WWdIwrvMNDfLCLqCbMsZt31lAykZ236wXrN4n6Tkep Z1pg== X-Forwarded-Encrypted: i=1; AJvYcCW1shT5HzV6PPEibyVKkUzv6waaBd9U/Sq15U58zFYWs2N0PVIHkWh165zAaca/ra02Y80De1biVTvt5Aov@lists.postgresql.org X-Gm-Message-State: AOJu0Yw7Yagdx9GkDCfh8RsYp0j922wHg6bwQNaqFJKRXTJmv3C1QBKy WcO7bwwXwP+iSzh2bk3svYkaBJHms/fXTFyokX+XZpDQpu/dpOA9In3L2dG36yf6An1ZR9wPY/r KaG7UYMHs/OCBsknIciM/bBEM/b0= X-Gm-Gg: ASbGncuwYsGeTbtGJgug0csFMNzChIIq0fZD/IOWRxGs2S2xIfUTtVpAhMsf9ef4IqH 77aml8GWvk6qnysmop5rnw+VPDC0npHWXQzvYcJjEilos0PE6BzPQzquZlXwyrUYYGWl87DTS1l 3CfP9T4oYNlPBoIzuZ+majzmXZZP2y720sV6in6iUUypZmAhC9O5cPhjcZK5a5 X-Google-Smtp-Source: AGHT+IEyWdS1V3F5H/rzqLx2ZEEu08C9ECVCYhKIwaL11z1yExfCayJybPZ5hmQYFRr1W1w5PnHIraI5eG9OhI3qlkk= X-Received: by 2002:a17:907:970e:b0:ac1:e07b:63ca with SMTP id a640c23a62f3a-ac252a9d0b7mr1039221266b.22.1741557192419; Sun, 09 Mar 2025 14:53:12 -0700 (PDT) MIME-Version: 1.0 References: <202503071820.j25zn3lo4hvn@alvherre.pgsql> In-Reply-To: From: Alexander Korotkov Date: Sun, 9 Mar 2025 23:53:00 +0200 X-Gm-Features: AQ5f1JpJVR4oOHvGkGsWMPxZtsKxoDVmMRiythIZFr9HT8ffjeMwsYyWFfDvcEU 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="000000000000cfa3f8062fefe170" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cfa3f8062fefe170 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Mar 9, 2025 at 4:53=E2=80=AFAM Alexander Korotkov wrote: > On Sat, Mar 8, 2025 at 12:49=E2=80=AFPM Alexander Korotkov wrote: > > On Fri, Mar 7, 2025 at 8:20=E2=80=AFPM =C3=81lvaro Herrera wrote: > > > > > > On 2024-Mar-25, Alexander Korotkov wrote: > > > > > > > reindexdb: Add the index-level REINDEX with multiple jobs > > > > > > > > Straight-forward index-level REINDEX is not supported with multiple= jobs as > > > > we cannot control the concurrent processing of multiple indexes dep= ending on > > > > the same relation. Instead, we dedicate the whole table to certain= reindex > > > > job. Thus, if indexes in the lists belong to different tables, tha= t gives us > > > > a fair level of parallelism. > > > > > > I tested this, because of a refactoring suggestion [1] and I find tha= t > > > it's rather completely broken. > > > > The code was written with assumption that running > > run_reindex_command() with async =3D=3D true can schedule a number of > > queries for a connection. But actually that's not true and everything > > is broken. > > The draft patch for revert is attached. Could you, please, check. 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? ------ Regards, Alexander Korotkov Supabase --000000000000cfa3f8062fefe170 Content-Type: application/octet-stream; name="v1-0001-reindexdb-Fix-the-index-level-REINDEX-with-multip.patch" Content-Disposition: attachment; filename="v1-0001-reindexdb-Fix-the-index-level-REINDEX-with-multip.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8263y6k0 RnJvbSBjY2IzZWQ3ZTMxMTVlYmNlYjA5MTYzMzQ0ZTI5MzljZmZiMTE1MTM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogU3VuLCA5IE1hciAyMDI1IDIzOjQ3OjIxICswMjAwClN1YmplY3Q6IFtQ QVRDSCB2MV0gcmVpbmRleGRiOiBGaXggdGhlIGluZGV4LWxldmVsIFJFSU5ERVggd2l0aCBtdWx0 aXBsZSBqb2JzCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hh cnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Cgo0N2Y5OWE0MDdkIGlu dHJvZHVjZWQgYSBwYXJhbGxlbCBpbmRleC1sZXZlbCBSRUlOREVYLiAgVGhlIGNvZGUgd2FzIHdy aXR0ZW4KYXNzdW1pbmcgdGhhdCBydW5uaW5nIHJ1bl9yZWluZGV4X2NvbW1hbmQoKSB3aXRoIGFz eW5jID09IHRydWUgY2FuIHNjaGVkdWxlCmEgbnVtYmVyIG9mIHF1ZXJpZXMgZm9yIGEgY29ubmVj dGlvbi4gIFRoYXQncyBub3QgdHJ1ZSwgYW5kIHRoZSBzZWNvbmQgcXVlcnkKc2VudCB1c2luZyBy dW5fcmVpbmRleF9jb21tYW5kKCkgd2lsbCB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUg cHJldmlvdXMKb25lLgoKVGhpcyBjb21taXQgZml4ZXMgdGhhdCBieSBwdXR0aW5nIFJFSU5ERVgg Y29tbWFuZHMgZm9yIHRoZSBzYW1lIHRhYmxlIGludG8gYQpzaW5nbGUgcXVlcnkuCgpSZXBvcnRl ZC1ieTogw4FsdmFybyBIZXJyZXJhIDxhbHZoZXJyZUBhbHZoLm5vLWlwLm9yZz4KRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8yMDI1MDMwNzE4MjAuajI1em4zbG80aHZuJTQwYWx2aGVy cmUucGdzcWwKLS0tCiBzcmMvYmluL3NjcmlwdHMvcmVpbmRleGRiLmMgfCAxMTcgKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNjUgaW5zZXJ0aW9u cygrKSwgNTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3JpcHRzL3JlaW5k ZXhkYi5jIGIvc3JjL2Jpbi9zY3JpcHRzL3JlaW5kZXhkYi5jCmluZGV4IGIwMGM4MTEyODY5Li5k Mjc3OGViNTczNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9zY3JpcHRzL3JlaW5kZXhkYi5jCisrKyBi L3NyYy9iaW4vc2NyaXB0cy9yZWluZGV4ZGIuYwpAQCAtNDksMTAgKzQ5LDEzIEBAIHN0YXRpYyB2 b2lkIHJlaW5kZXhfYWxsX2RhdGFiYXNlcyhDb25uUGFyYW1zICpjcGFyYW1zLAogCQkJCQkJCQkg IGJvb2wgc3lzY2F0YWxvZywgU2ltcGxlU3RyaW5nTGlzdCAqc2NoZW1hcywKIAkJCQkJCQkJICBT aW1wbGVTdHJpbmdMaXN0ICp0YWJsZXMsCiAJCQkJCQkJCSAgU2ltcGxlU3RyaW5nTGlzdCAqaW5k ZXhlcyk7Ci1zdGF0aWMgdm9pZCBydW5fcmVpbmRleF9jb21tYW5kKFBHY29ubiAqY29ubiwgUmVp bmRleFR5cGUgdHlwZSwKK3N0YXRpYyB2b2lkIGdlbl9yZWluZGV4X2NvbW1hbmQoUEdjb25uICpj b25uLCBSZWluZGV4VHlwZSB0eXBlLAogCQkJCQkJCQljb25zdCBjaGFyICpuYW1lLCBib29sIGVj aG8sIGJvb2wgdmVyYm9zZSwKLQkJCQkJCQkJYm9vbCBjb25jdXJyZW50bHksIGJvb2wgYXN5bmMs Ci0JCQkJCQkJCWNvbnN0IGNoYXIgKnRhYmxlc3BhY2UpOworCQkJCQkJCQlib29sIGNvbmN1cnJl bnRseSwgY29uc3QgY2hhciAqdGFibGVzcGFjZSwKKwkJCQkJCQkJUFFFeHBCdWZmZXJEYXRhICpz cWwpOworc3RhdGljIHZvaWQgcnVuX3JlaW5kZXhfY29tbWFuZChQR2Nvbm4gKmNvbm4sIFJlaW5k ZXhUeXBlIHR5cGUsCisJCQkJCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgZWNobywgYm9vbCBh c3luYywKKwkJCQkJCQkJUFFFeHBCdWZmZXJEYXRhICpzcSk7CiAKIHN0YXRpYyB2b2lkIGhlbHAo Y29uc3QgY2hhciAqcHJvZ25hbWUpOwogCkBAIC0yODQsNyArMjg3LDYgQEAgcmVpbmRleF9vbmVf ZGF0YWJhc2UoQ29ublBhcmFtcyAqY3BhcmFtcywgUmVpbmRleFR5cGUgdHlwZSwKIAlQYXJhbGxl bFNsb3RBcnJheSAqc2E7CiAJYm9vbAkJZmFpbGVkID0gZmFsc2U7CiAJaW50CQkJaXRlbXNfY291 bnQgPSAwOwotCWNoYXIJICAgKnByZXZfaW5kZXhfdGFibGVfbmFtZSA9IE5VTEw7CiAJUGFyYWxs ZWxTbG90ICpmcmVlX3Nsb3QgPSBOVUxMOwogCiAJY29ubiA9IGNvbm5lY3REYXRhYmFzZShjcGFy YW1zLCBwcm9nbmFtZSwgZWNobywgZmFsc2UsIHRydWUpOwpAQCAtNDMwLDggKzQzMiw4IEBAIHJl aW5kZXhfb25lX2RhdGFiYXNlKENvbm5QYXJhbXMgKmNwYXJhbXMsIFJlaW5kZXhUeXBlIHR5cGUs CiAJY2VsbCA9IHByb2Nlc3NfbGlzdC0+aGVhZDsKIAlkbwogCXsKKwkJUFFFeHBCdWZmZXJEYXRh IHNxbDsKIAkJY29uc3QgY2hhciAqb2JqbmFtZSA9IGNlbGwtPnZhbDsKLQkJYm9vbAkJbmVlZF9u ZXdfc2xvdCA9IHRydWU7CiAKIAkJaWYgKENhbmNlbFJlcXVlc3RlZCkKIAkJewpAQCAtNDM5LDM1 ICs0NDEsNDUgQEAgcmVpbmRleF9vbmVfZGF0YWJhc2UoQ29ublBhcmFtcyAqY3BhcmFtcywgUmVp bmRleFR5cGUgdHlwZSwKIAkJCWdvdG8gZmluaXNoOwogCQl9CiAKLQkJLyoKLQkJICogRm9yIHBh cmFsbGVsIGluZGV4LWxldmVsIFJFSU5ERVgsIHRoZSBpbmRpY2VzIG9mIHRoZSBzYW1lIHRhYmxl IGFyZQotCQkgKiBvcmRlcmVkIHRvZ2V0aGVyIGFuZCB0aGV5IGFyZSB0byBiZSBwcm9jZXNzZWQg YnkgdGhlIHNhbWUgam9iLiAgU28sCi0JCSAqIHdlIGRvbid0IHN3aXRjaCB0aGUgam9iIGFzIHNv b24gYXMgdGhlIGluZGV4IGJlbG9uZ3MgdG8gdGhlIHNhbWUKLQkJICogdGFibGUgYXMgdGhlIHBy ZXZpb3VzIG9uZS4KLQkJICovCi0JCWlmIChwYXJhbGxlbCAmJiBwcm9jZXNzX3R5cGUgPT0gUkVJ TkRFWF9JTkRFWCkKKwkJZnJlZV9zbG90ID0gUGFyYWxsZWxTbG90c0dldElkbGUoc2EsIE5VTEwp OworCQlpZiAoIWZyZWVfc2xvdCkKIAkJewotCQkJaWYgKHByZXZfaW5kZXhfdGFibGVfbmFtZSAh PSBOVUxMICYmCi0JCQkJc3RyY21wKHByZXZfaW5kZXhfdGFibGVfbmFtZSwgaW5kaWNlc190YWJs ZXNfY2VsbC0+dmFsKSA9PSAwKQotCQkJCW5lZWRfbmV3X3Nsb3QgPSBmYWxzZTsKLQkJCXByZXZf aW5kZXhfdGFibGVfbmFtZSA9IGluZGljZXNfdGFibGVzX2NlbGwtPnZhbDsKLQkJCWluZGljZXNf dGFibGVzX2NlbGwgPSBpbmRpY2VzX3RhYmxlc19jZWxsLT5uZXh0OworCQkJZmFpbGVkID0gdHJ1 ZTsKKwkJCWdvdG8gZmluaXNoOwogCQl9CiAKLQkJaWYgKG5lZWRfbmV3X3Nsb3QpCisJCVBhcmFs bGVsU2xvdFNldEhhbmRsZXIoZnJlZV9zbG90LCBUYWJsZUNvbW1hbmRSZXN1bHRIYW5kbGVyLCBO VUxMKTsKKwkJaW5pdFBRRXhwQnVmZmVyKCZzcWwpOworCQlpZiAocGFyYWxsZWwgJiYgcHJvY2Vz c190eXBlID09IFJFSU5ERVhfSU5ERVgpCiAJCXsKLQkJCWZyZWVfc2xvdCA9IFBhcmFsbGVsU2xv dHNHZXRJZGxlKHNhLCBOVUxMKTsKLQkJCWlmICghZnJlZV9zbG90KQorCQkJLyoKKwkJCSAqIEZv ciBwYXJhbGxlbCBpbmRleC1sZXZlbCBSRUlOREVYLCB0aGUgaW5kaWNlcyBvZiB0aGUgc2FtZSB0 YWJsZQorCQkJICogYXJlIG9yZGVyZWQgdG9nZXRoZXIgYW5kIHRoZXkgYXJlIHRvIGJlIHByb2Nl c3NlZCBieSB0aGUgc2FtZQorCQkJICogam9iLiAgU28sIHdlIHB1dCBhbGwgdGhlIHJlbGV2YW50 IFJFSU5ERVggY29tbWFuZHMgaW50byB0aGUKKwkJCSAqIHNhbWUgU1FMIHF1ZXJ5IHRvIGJlIHBy b2Nlc3NlZCBieSB0aGlzIGpvYiBhdCBvbmNlLgorCQkJICovCisJCQlnZW5fcmVpbmRleF9jb21t YW5kKGZyZWVfc2xvdC0+Y29ubmVjdGlvbiwgcHJvY2Vzc190eXBlLCBvYmpuYW1lLAorCQkJCQkJ CQllY2hvLCB2ZXJib3NlLCBjb25jdXJyZW50bHksIHRhYmxlc3BhY2UsICZzcWwpOworCQkJd2hp bGUgKGluZGljZXNfdGFibGVzX2NlbGwtPm5leHQgJiYKKwkJCQkgICBzdHJjbXAoaW5kaWNlc190 YWJsZXNfY2VsbC0+dmFsLCBpbmRpY2VzX3RhYmxlc19jZWxsLT5uZXh0LT52YWwpID09IDApCiAJ CQl7Ci0JCQkJZmFpbGVkID0gdHJ1ZTsKLQkJCQlnb3RvIGZpbmlzaDsKKwkJCQlpbmRpY2VzX3Rh Ymxlc19jZWxsID0gaW5kaWNlc190YWJsZXNfY2VsbC0+bmV4dDsKKwkJCQljZWxsID0gY2VsbC0+ bmV4dDsKKwkJCQlvYmpuYW1lID0gY2VsbC0+dmFsOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hh cigmc3FsLCAnXG4nKTsKKwkJCQlnZW5fcmVpbmRleF9jb21tYW5kKGZyZWVfc2xvdC0+Y29ubmVj dGlvbiwgcHJvY2Vzc190eXBlLCBvYmpuYW1lLAorCQkJCQkJCQkJZWNobywgdmVyYm9zZSwgY29u Y3VycmVudGx5LCB0YWJsZXNwYWNlLCAmc3FsKTsKIAkJCX0KLQotCQkJUGFyYWxsZWxTbG90U2V0 SGFuZGxlcihmcmVlX3Nsb3QsIFRhYmxlQ29tbWFuZFJlc3VsdEhhbmRsZXIsIE5VTEwpOworCQkJ aW5kaWNlc190YWJsZXNfY2VsbCA9IGluZGljZXNfdGFibGVzX2NlbGwtPm5leHQ7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQlnZW5fcmVpbmRleF9jb21tYW5kKGZyZWVfc2xvdC0+Y29ubmVjdGlvbiwg cHJvY2Vzc190eXBlLCBvYmpuYW1lLAorCQkJCQkJCQllY2hvLCB2ZXJib3NlLCBjb25jdXJyZW50 bHksIHRhYmxlc3BhY2UsICZzcWwpOwogCQl9Ci0KIAkJcnVuX3JlaW5kZXhfY29tbWFuZChmcmVl X3Nsb3QtPmNvbm5lY3Rpb24sIHByb2Nlc3NfdHlwZSwgb2JqbmFtZSwKLQkJCQkJCQllY2hvLCB2 ZXJib3NlLCBjb25jdXJyZW50bHksIHRydWUsIHRhYmxlc3BhY2UpOworCQkJCQkJCWVjaG8sIHRy dWUsICZzcWwpOworCQl0ZXJtUFFFeHBCdWZmZXIoJnNxbCk7CiAKIAkJY2VsbCA9IGNlbGwtPm5l eHQ7CiAJfSB3aGlsZSAoY2VsbCAhPSBOVUxMKTsKQEAgLTQ5Niw1NiArNTA4LDUyIEBAIGZpbmlz aDoKIH0KIAogc3RhdGljIHZvaWQKLXJ1bl9yZWluZGV4X2NvbW1hbmQoUEdjb25uICpjb25uLCBS ZWluZGV4VHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCQlib29sIGVjaG8sIGJvb2wg dmVyYm9zZSwgYm9vbCBjb25jdXJyZW50bHksIGJvb2wgYXN5bmMsCi0JCQkJCWNvbnN0IGNoYXIg KnRhYmxlc3BhY2UpCitnZW5fcmVpbmRleF9jb21tYW5kKFBHY29ubiAqY29ubiwgUmVpbmRleFR5 cGUgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJYm9vbCBlY2hvLCBib29sIHZlcmJvc2Us IGJvb2wgY29uY3VycmVudGx5LAorCQkJCQljb25zdCBjaGFyICp0YWJsZXNwYWNlLCBQUUV4cEJ1 ZmZlckRhdGEgKnNxbCkKIHsKIAljb25zdCBjaGFyICpwYXJlbiA9ICIoIjsKIAljb25zdCBjaGFy ICpjb21tYSA9ICIsICI7CiAJY29uc3QgY2hhciAqc2VwID0gcGFyZW47Ci0JUFFFeHBCdWZmZXJE YXRhIHNxbDsKLQlib29sCQlzdGF0dXM7CiAKIAlBc3NlcnQobmFtZSk7CiAKIAkvKiBidWlsZCB0 aGUgUkVJTkRFWCBxdWVyeSAqLwotCWluaXRQUUV4cEJ1ZmZlcigmc3FsKTsKLQotCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZzcWwsICJSRUlOREVYICIpOworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNx bCwgIlJFSU5ERVggIik7CiAKIAlpZiAodmVyYm9zZSkKIAl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVy KCZzcWwsICIlc1ZFUkJPU0UiLCBzZXApOworCQlhcHBlbmRQUUV4cEJ1ZmZlcihzcWwsICIlc1ZF UkJPU0UiLCBzZXApOwogCQlzZXAgPSBjb21tYTsKIAl9CiAKIAlpZiAodGFibGVzcGFjZSkKIAl7 Ci0JCWFwcGVuZFBRRXhwQnVmZmVyKCZzcWwsICIlc1RBQkxFU1BBQ0UgJXMiLCBzZXAsCisJCWFw cGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzVEFCTEVTUEFDRSAlcyIsIHNlcCwKIAkJCQkJCSAgZm10 SWRFbmModGFibGVzcGFjZSwgUFFjbGllbnRFbmNvZGluZyhjb25uKSkpOwogCQlzZXAgPSBjb21t YTsKIAl9CiAKIAlpZiAoc2VwICE9IHBhcmVuKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmc3Fs LCAiKSAiKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoc3FsLCAiKSAiKTsKIAogCS8qIG9iamVj dCB0eXBlICovCiAJc3dpdGNoICh0eXBlKQogCXsKIAkJY2FzZSBSRUlOREVYX0RBVEFCQVNFOgot CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNxbCwgIkRBVEFCQVNFICIpOworCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoc3FsLCAiREFUQUJBU0UgIik7CiAJCQlicmVhazsKIAkJY2FzZSBSRUlOREVY X0lOREVYOgotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNxbCwgIklOREVYICIpOworCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoc3FsLCAiSU5ERVggIik7CiAJCQlicmVhazsKIAkJY2FzZSBSRUlO REVYX1NDSEVNQToKLQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZzcWwsICJTQ0hFTUEgIik7CisJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihzcWwsICJTQ0hFTUEgIik7CiAJCQlicmVhazsKIAkJY2Fz ZSBSRUlOREVYX1NZU1RFTToKLQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZzcWwsICJTWVNURU0g Iik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihzcWwsICJTWVNURU0gIik7CiAJCQlicmVhazsK IAkJY2FzZSBSRUlOREVYX1RBQkxFOgotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNxbCwgIlRB QkxFICIpOworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoc3FsLCAiVEFCTEUgIik7CiAJCQlicmVh azsKIAl9CiAKQEAgLTU1NSwzNyArNTYzLDQ0IEBAIHJ1bl9yZWluZGV4X2NvbW1hbmQoUEdjb25u ICpjb25uLCBSZWluZGV4VHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAogCSAqIG9iamVjdCB0 eXBlLgogCSAqLwogCWlmIChjb25jdXJyZW50bHkpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZz cWwsICJDT05DVVJSRU5UTFkgIik7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwgIkNPTkNV UlJFTlRMWSAiKTsKIAogCS8qIG9iamVjdCBuYW1lICovCiAJc3dpdGNoICh0eXBlKQogCXsKIAkJ Y2FzZSBSRUlOREVYX0RBVEFCQVNFOgogCQljYXNlIFJFSU5ERVhfU1lTVEVNOgotCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJnNxbCwKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwKIAkJCQkJ CQkJIGZtdElkRW5jKG5hbWUsIFBRY2xpZW50RW5jb2RpbmcoY29ubikpKTsKIAkJCWJyZWFrOwog CQljYXNlIFJFSU5ERVhfSU5ERVg6CiAJCWNhc2UgUkVJTkRFWF9UQUJMRToKLQkJCWFwcGVuZFF1 YWxpZmllZFJlbGF0aW9uKCZzcWwsIG5hbWUsIGNvbm4sIGVjaG8pOworCQkJYXBwZW5kUXVhbGlm aWVkUmVsYXRpb24oc3FsLCBuYW1lLCBjb25uLCBlY2hvKTsKIAkJCWJyZWFrOwogCQljYXNlIFJF SU5ERVhfU0NIRU1BOgotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnNxbCwgbmFtZSk7CisJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihzcWwsIG5hbWUpOwogCQkJYnJlYWs7CiAJfQogCiAJLyogZmlu aXNoIHRoZSBxdWVyeSAqLwotCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcigmc3FsLCAnOycpOworCWFw cGVuZFBRRXhwQnVmZmVyQ2hhcihzcWwsICc7Jyk7Cit9CisKK3N0YXRpYyB2b2lkCitydW5fcmVp bmRleF9jb21tYW5kKFBHY29ubiAqY29ubiwgUmVpbmRleFR5cGUgdHlwZSwgY29uc3QgY2hhciAq bmFtZSwKKwkJCQkJYm9vbCBlY2hvLCBib29sIGFzeW5jLCBQUUV4cEJ1ZmZlckRhdGEgKnNxbCkK K3sKKwlib29sCQlzdGF0dXM7CiAKIAlpZiAoYXN5bmMpCiAJewogCQlpZiAoZWNobykKLQkJCXBy aW50ZigiJXNcbiIsIHNxbC5kYXRhKTsKKwkJCXByaW50ZigiJXNcbiIsIHNxbC0+ZGF0YSk7CiAK LQkJc3RhdHVzID0gUFFzZW5kUXVlcnkoY29ubiwgc3FsLmRhdGEpID09IDE7CisJCXN0YXR1cyA9 IFBRc2VuZFF1ZXJ5KGNvbm4sIHNxbC0+ZGF0YSkgPT0gMTsKIAl9CiAJZWxzZQotCQlzdGF0dXMg PSBleGVjdXRlTWFpbnRlbmFuY2VDb21tYW5kKGNvbm4sIHNxbC5kYXRhLCBlY2hvKTsKKwkJc3Rh dHVzID0gZXhlY3V0ZU1haW50ZW5hbmNlQ29tbWFuZChjb25uLCBzcWwtPmRhdGEsIGVjaG8pOwog CiAJaWYgKCFzdGF0dXMpCiAJewpAQCAtNjE4LDggKzYzMyw2IEBAIHJ1bl9yZWluZGV4X2NvbW1h bmQoUEdjb25uICpjb25uLCBSZWluZGV4VHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAogCQkJ ZXhpdCgxKTsKIAkJfQogCX0KLQotCXRlcm1QUUV4cEJ1ZmZlcigmc3FsKTsKIH0KIAogLyoKLS0g CjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --000000000000cfa3f8062fefe170--