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.96) (envelope-from ) id 1wT7c1-000Kfz-1w for pgsql-hackers@arkaria.postgresql.org; Sat, 30 May 2026 00:31:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wT7bx-004su9-36 for pgsql-hackers@arkaria.postgresql.org; Sat, 30 May 2026 00:31:34 +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.96) (envelope-from ) id 1wT7bx-004stz-1l for pgsql-hackers@lists.postgresql.org; Sat, 30 May 2026 00:31:34 +0000 Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wT7bv-00000000EIC-2pRg for pgsql-hackers@lists.postgresql.org; Sat, 30 May 2026 00:31:33 +0000 Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-5aa4b50e054so4254012e87.1 for ; Fri, 29 May 2026 17:31:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780101085; cv=none; d=google.com; s=arc-20240605; b=V41xNe50tJEvqo8C2ue3eq96ezwpZhM7/I8USR0zf0LoY5Jf24RQDJLs1p/s5LBa7G A6x2EBKjq+FSUmM9Vr1VfqRkrvHQZTfsiFqrhx78p/a0zMttsFiwkKeFMHw4ont1cuP5 ZggvsCGD8ancOXjxTgklahVL0sdbcwakLaFfSOFFQofF6tMN/8bPk1un6/lnItmHJJKW 414baYIisZqwgzuioV8MEOeybwfIWkPdYx5J8hM5RLCcNbr24bEDZvoLmlUxVbZQHIFj k+mgUqUKOQLElmNCBgZktchJi1cAQ1442tJ+0uBt8OaC0t1AcyW6t6rVq8pTlz3hydi+ Bkug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=mibAYwT5TakWU2Qi/hnNWKW7wg9oAeo9jgCJxsD0eEw=; fh=GZ3+StiqRATmch5UEE4SNiutJP3MuIN7BtDRFCfjFKs=; b=dUzxO4UbPpjO9rlgWetroHq1aqp5JfoYlC+11cdmJtsDzHTIoM/zpK0MUAS9T4kEj/ PbpOFtFkD6Xn8+BSb7jiKx7fmAwyOCiZ4djHgV99zkL2C4zp/LHE968lcDwSqixz68la yLz5w0qfOfko/WsCynuaDEs0bUn57ZUbN402JoZgll3NhPTki+WVOk0cwUsWZjklik8O 7VfkPFDZuDUmSgi2WB3V54bG2Uu9iLAScw68BIQy0gMc8dZVENRZIq8ELk8vJntl/VtL FpkhRJpqClrbeoXFncA1YYp+rEvafPuQzZG8d8ydKUrTapTepshK+1ehT60Fi7lSIAkU XFSQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780101085; x=1780705885; 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=mibAYwT5TakWU2Qi/hnNWKW7wg9oAeo9jgCJxsD0eEw=; b=hGDtDGArkL5CN8V+jbdJ5hrNZ0vwB1iVRxeJKyUsktdcfceyHibFoblvMi1SJvyzOR dW1POPCvBIlWkS8F9HQzDvBbck/ocIgsATZjk0sz22SCvdz+QJjwnRRZBuNgT0gT3QkP UOrdMyd0GXDKxulkdIB6uAX06uSfg1gjhp+AoFpbr15ErO1g4VjGVaAxKHS/W9FTDd1x oibjQPZ29pHwsXDbh/Pji19NkOyjBAbTqcrsSubRykN3e71V8ciYPYkj+p+7lR6nMqdl j3dxAiPIr14bOiF9jSxdtPXNoRk0jaq7c52frkgkfQeML6lLOmMj+tSWc9rYKHd2uZ70 jrZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780101085; x=1780705885; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=mibAYwT5TakWU2Qi/hnNWKW7wg9oAeo9jgCJxsD0eEw=; b=XuCbsMMc4yVFhNNSRG43cEp9W8fsXWrCy3ZLGljremR2SD8aFx78UPNsinbrXUVzYL E8Q5HnQ6iUOXqJ3A8nZzbtyW9dZJC6HwnnH+2cZ+Ej7jw2nPlqqn6EX25Mk2GB0Lte/g UI/rWPGFefv1zBX8oVDzFHSOrh36DEF1fwll8A9tk/ljLdJ+zkegUtLIayEzpu8f/Kgi uXiUVFKb1+1jITl77fQDTtkGEF4Grq7ZXj7zLn5tmRe7CIv5ObU0ohGCZxwhcdA/7fXk qQ1fxTc5xJtXAi9Ca/5s7KCtrqPa3AN7uwsIjykhb8gJl7O4sMTtsULgd20UmEndWinU Qp2g== X-Forwarded-Encrypted: i=1; AFNElJ/0LBh/hlZacbvuz0GlWiIoTWGOVIoSOYujLF9yHHFfOZYd4YYYu1Tz9xz/tr3Q1Cw5hebGvxSqct92VnrM@lists.postgresql.org X-Gm-Message-State: AOJu0Yx9KDREfGlOt6FVGwZErqlt0KVNwsvtpI3dyazl0CP9tWEbQ2jS GOX44tu3uK1vt6t2Jw1P6Rw/5tGiVsVqbKDJikBC2n16WX3D1wU6YO5pKfz/4zMLXtqNZafkpov dEcVp6dNvs8yE06QXg78hAkWD2oSWSjU= X-Gm-Gg: Acq92OE3vFAr5uz3CTTLYixV3MrlANUsUxo7lSwgMCclUz1gSEQEETRy9FA0ZL8E43I VMJTj3NI7rAPps8PitASRKGBknfY3c4EleBtTJK7A5AP76qJTN7bFKyzJkjfoXtSbRMIaSCCtAf jWK2cqkuTVYM+yF/AObFxrwWV8eaiT+A7MDgBEyDQ/IOKEWornZFqJOBrfo+nD8yVruz7ffvB3y 6Igvf+fO1/JoanlG82bBeEgSAhZnXti0EKeb+vMYTs3sW8aGsHMMmX32wAnJlGq+suY7Khh8RqF evj9zDE2k4xhxw8znUA= X-Received: by 2002:a05:6512:6181:b0:5aa:6395:f9c5 with SMTP id 2adb3069b0e04-5aa6395fa46mr7487e87.27.1780101085097; Fri, 29 May 2026 17:31:25 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Dilip Kumar Date: Sat, 30 May 2026 06:01:05 +0530 X-Gm-Features: AVHnY4IcIEoUeIXhzPT5bPY_UQIcLWsDwYB2856Y8pb3hcaiKiVqknHyGTkO3k8 Message-ID: Subject: Re: Proposal: Conflict log history table for Logical Replication To: Amit Kapila Cc: Nisha Moond , vignesh C , Peter Smith , shveta malik , Masahiko Sawada , Bharath Rupireddy , PostgreSQL Hackers , shveta malik Content-Type: multipart/mixed; boundary="000000000000d7883a0652fe14cb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d7883a0652fe14cb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, May 30, 2026 at 3:36=E2=80=AFAM Dilip Kumar = wrote: > > On Sat, May 30, 2026 at 3:24=E2=80=AFAM Dilip Kumar wrote: > > > > On Fri, May 29, 2026 at 5:11=E2=80=AFAM Amit Kapila wrote: > > > > > > On Thu, May 21, 2026 at 9:51=E2=80=AFPM Nisha Moond wrote: > > > > > > > > On Wed, May 20, 2026 at 3:05=E2=80=AFPM vignesh C wrote: > > > > > > > > > > Rest of the comments were fixed. > > > > > The attached v37 version patch has the changes for the same. Also > > > > > Peter's comments on the documentation patch from [1] and Shveta's > > > > > comments from [2] are addressed in the attached patch. > > > > > > > > > > > > > Here are few comments based on v37 testing: > > > > > > > > 1) Should we consider using TOAST tables for tuple-data columns lik= e > > > > remote_tuple and local_conflicts (the JSON columns)? > > > > This may be a corner case, but if the tuple data becomes too large = to > > > > fit into an 8KB heap tuple, then the apply worker keeps failing whi= le > > > > inserting into the CLT with errors like: > > > > > > > > ERROR: row is too big: size 19496, maximum size 8160 > > > > LOG: background worker "logical replication apply worker" (PID > > > > 41226) exited with exit code 1 > > > > > > > > > > In the docs, it is mentioned: "column_value is the column value. The > > > large column values are truncated to 64 bytes." [1], so I wonder, if > > > we follow this why we need toast entries? Did you tried any case wher= e > > > you are getting above ERROR? > > > > But in this case we are talking about the JSON column of the CLT which > > might contain a full local tuple or even multiple local tuples if a > > remote tuple conflicts with multiple local rows. So, IMHO, we need a > > toast table. Nisha, have you already tested the scenario? If yes, can > > you share your test case? > > After putting more thought, I think instead of executing a three-step > process i.e. inserting the pg_subscription tuple, creating the table > with its dependency, and then going back to update the tuple with the > new relation ID, it is much cleaner to do it linearly, i.e. we should > create the conflict log table first to get its OID, insert the > subscription tuple pre-populated with that ID, and then record the > dependency. This achieves the exact same state in a single direct > sequence without the redundant catalog update within the same command. > I agree with that code we would have to keep the record dependency > code in CreateSubscription and AlterSubscription functions, but after > putting more thought I think in thoese function we are already > recording subscription dependencies with other object so wouldn't it > be more natural to add this depednecy as well at the same place? > > Anyway I am ready to change that if we have strong opinion against > this approach. > > Here is the updated patch and changes are > 1. 0003 and 0004 are merged on 0001 > 2. Merged Amit's v41_amit_1.patch.txt to 0002 > 3. Fix the dependency order issue (i.e. create dependency after > inserting subscription tuple) and merged in 0002 > > Open Items: > 1. Need to create toast table for CLT after testing with larger JSON row > 2. Fixed review comments of Shveta on 0004 and 0005 > 3. Rebase Vignesh's patch of > "v41-0007-Preserve-conflict-log-destination-and-subscripti" I think we > can do that once we have concensus on whether to create conflict log > table first or insert the subscription row first as based on this > change we would have to rebase this patch again. > 4. Once we rebase > "v41-0007-Preserve-conflict-log-destination-and-subscripti" after > dependency order consensus I would rebase doc patch and \dRs+ change > patch of Vignesh. Here is a topup patch so create conflict log table after inserting subscription tuple and then update the tuple with clt relid.. Main changes will look like this[1] [1] /* * If logging to a table is required, physically create it now. We create * the conflict log table here. Also update the pg_subscription row * after creating the conflict log table with its reloid. */ if (CONFLICTS_LOGGED_TO_TABLE(opts.conflictlogdest)) { bool replaces[Natts_pg_subscription]; Oid logrelid =3D create_conflict_log_table(subid, stmt->subname, owner); /* Form a new tuple. */ memset(values, 0, sizeof(values)); memset(nulls, false, sizeof(nulls)); memset(replaces, false, sizeof(replaces)); values[Anum_pg_subscription_subconflictlogrelid - 1] =3D ObjectIdGetDatum(logrelid); replaces[Anum_pg_subscription_subconflictlogrelid - 1] =3D true; /* Make subscription tuple visible before updating it. */ CommandCounterIncrement(); tup =3D heap_modify_tuple(tup, RelationGetDescr(rel), values, nulls, replaces); CatalogTupleUpdate(rel, &tup->t_self, tup); } --=20 Regards, Dilip Kumar Google --000000000000d7883a0652fe14cb Content-Type: text/plain; charset="US-ASCII"; name="v42-topup-Create-conflict-log-table-after-inserting-subscr.patch.txt" Content-Disposition: attachment; filename="v42-topup-Create-conflict-log-table-after-inserting-subscr.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mprm7lq50 RnJvbSBhOGUxMzI5YmI1ODQzNmI0NGQ0ZjBkYWFkYzUyNDBkYWViZDM5YmFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaWxpcCBLdW1hciA8ZGlsaXBrdW1hcmJAZ29vZ2xlLmNvbT4K RGF0ZTogU2F0LCAzMCBNYXkgMjAyNiAwNTozMzoyMSArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjQy XSBDcmVhdGUgY29uZmxpY3QgbG9nIHRhYmxlIGFmdGVyIGluc2VydGluZyBzdWJzY3JpcHRpb24K IHJvdwoKLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgICAgfCA3 MyArKysrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2NvbmZsaWN0LmMgfCAxNyArKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCsp LCA0MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJz Y3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMK aW5kZXggODhmMjJiYmIyODYuLjY3MzExYTY1ZTI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vi c2NyaXB0aW9uY21kcy5jCkBAIC02NTEsNyArNjUxLDYgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAl1aW50MzIJ CXN1cHBvcnRlZF9vcHRzOwogCVN1Yk9wdHMJCW9wdHMgPSB7MH07CiAJQWNsUmVzdWx0CWFjbHJl c3VsdDsKLQlPaWQJCQlsb2dyZWxpZCA9IEludmFsaWRPaWQ7CiAKIAkvKgogCSAqIFBhcnNlIGFu ZCBjaGVjayBvcHRpb25zLgpAQCAtODQ0LDIyICs4NDMsNDUgQEAgQ3JlYXRlU3Vic2NyaXB0aW9u KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAl2YWx1 ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3ViY29uZmxpY3Rsb2dkZXN0IC0gMV0gPQogCQlDU3Ry aW5nR2V0VGV4dERhdHVtKENvbmZsaWN0TG9nRGVzdE5hbWVzW29wdHMuY29uZmxpY3Rsb2dkZXN0 XSk7CiAKKwl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3ViY29uZmxpY3Rsb2dyZWxpZCAt IDFdID0KKwkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oSW52YWxpZE9pZCk7CisKKwl0dXAgPSBo ZWFwX2Zvcm1fdHVwbGUoUmVsYXRpb25HZXREZXNjcihyZWwpLCB2YWx1ZXMsIG51bGxzKTsKKwor CS8qIEluc2VydCB0dXBsZSBpbnRvIGNhdGFsb2cuICovCisJQ2F0YWxvZ1R1cGxlSW5zZXJ0KHJl bCwgdHVwKTsKKwkvL2hlYXBfZnJlZXR1cGxlKHR1cCk7CisKIAkvKgogCSAqIElmIGxvZ2dpbmcg dG8gYSB0YWJsZSBpcyByZXF1aXJlZCwgcGh5c2ljYWxseSBjcmVhdGUgaXQgbm93LiBXZSBjcmVh dGUKLQkgKiB0aGUgY29uZmxpY3QgbG9nIHRhYmxlIGhlcmUgc28gaXRzIHJlbGF0aW9uIE9JRCBj YW4gYmUgc3RvcmVkIHdoZW4KLQkgKiBpbnNlcnRpbmcgdGhlIHBnX3N1YnNjcmlwdGlvbiB0dXBs ZSBiZWxvdy4KKwkgKiB0aGUgY29uZmxpY3QgbG9nIHRhYmxlIGhlcmUuICBBbHNvIHVwZGF0ZSB0 aGUgcGdfc3Vic2NyaXB0aW9uIHJvdworCSAqIGFmdGVyIGNyZWF0aW5nIHRoZSBjb25mbGljdCBs b2cgdGFibGUgd2l0aCBpdHMgcmVsb2lkLgogCSAqLwogCWlmIChDT05GTElDVFNfTE9HR0VEX1RP X1RBQkxFKG9wdHMuY29uZmxpY3Rsb2dkZXN0KSkKLQkJbG9ncmVsaWQgPSBjcmVhdGVfY29uZmxp Y3RfbG9nX3RhYmxlKHN1YmlkLCBzdG10LT5zdWJuYW1lLCBvd25lcik7CisJeworCQlib29sCQly ZXBsYWNlc1tOYXR0c19wZ19zdWJzY3JpcHRpb25dOworCQlPaWQJCQlsb2dyZWxpZCA9CisJCQkJ Y3JlYXRlX2NvbmZsaWN0X2xvZ190YWJsZShzdWJpZCwgc3RtdC0+c3VibmFtZSwgb3duZXIpOwog Ci0JLyogU3RvcmUgdGFibGUgT0lEIGluIHRoZSBjYXRhbG9nLiAqLwotCXZhbHVlc1tBbnVtX3Bn X3N1YnNjcmlwdGlvbl9zdWJjb25mbGljdGxvZ3JlbGlkIC0gMV0gPQotCQkJCQkJT2JqZWN0SWRH ZXREYXR1bShsb2dyZWxpZCk7CisJCS8qIEZvcm0gYSBuZXcgdHVwbGUuICovCisJCW1lbXNldCh2 YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKKwkJbWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9m KG51bGxzKSk7CisJCW1lbXNldChyZXBsYWNlcywgZmFsc2UsIHNpemVvZihyZXBsYWNlcykpOwog Ci0JdHVwID0gaGVhcF9mb3JtX3R1cGxlKFJlbGF0aW9uR2V0RGVzY3IocmVsKSwgdmFsdWVzLCBu dWxscyk7CisJCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJjb25mbGljdGxvZ3JlbGlk IC0gMV0gPQorCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShsb2dyZWxpZCk7CisJCXJlcGxhY2Vz W0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YmNvbmZsaWN0bG9ncmVsaWQgLSAxXSA9CisJCQkJCQkJ CQl0cnVlOworCisJCS8qIE1ha2Ugc3Vic2NyaXB0aW9uIHR1cGxlIHZpc2libGUgYmVmb3JlIHVw ZGF0aW5nIGl0LiAqLworCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJCXR1cCA9IGhl YXBfbW9kaWZ5X3R1cGxlKHR1cCwgUmVsYXRpb25HZXREZXNjcihyZWwpLCB2YWx1ZXMsIG51bGxz LAorCQkJCQkJCQlyZXBsYWNlcyk7CisKKwkJQ2F0YWxvZ1R1cGxlVXBkYXRlKHJlbCwgJnR1cC0+ dF9zZWxmLCB0dXApOworCX0KIAotCS8qIEluc2VydCB0dXBsZSBpbnRvIGNhdGFsb2cuICovCi0J Q2F0YWxvZ1R1cGxlSW5zZXJ0KHJlbCwgdHVwKTsKIAloZWFwX2ZyZWV0dXBsZSh0dXApOwogCiAJ cmVjb3JkRGVwZW5kZW5jeU9uT3duZXIoU3Vic2NyaXB0aW9uUmVsYXRpb25JZCwgc3ViaWQsIG93 bmVyKTsKQEAgLTg3NiwyNSArODk4LDYgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAkJcmVjb3JkRGVwZW5kZW5j eU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX05PUk1BTCk7CiAJfQogCi0JLyoK LQkgKiBJZiBjb25mbGljdHMgYXJlIGxvZ3MgdG8gdGFibGUgZXN0YWJsaXNoIGFuIGludGVybmFs IGRlcGVuZGVuY3kKLQkgKiBiZXR3ZWVuIHRoZSBjb25mbGljdCBsb2cgdGFibGUgYW5kIHRoZSBz dWJzY3JpcHRpb24uCi0JICoKLQkgKiBXZSB1c2UgREVQRU5ERU5DWV9JTlRFUk5BTCB0byBzaWdu aWZ5IHRoYXQgdGhlIHRhYmxlJ3MgbGlmZWN5Y2xlIGlzCi0JICogc3RyaWN0bHkgdGllZCB0byB0 aGUgc3Vic2NyaXB0aW9uLCBzaW1pbGFyIHRvIGhvdyBhIFRPQVNUIHRhYmxlIHJlbGF0ZXMKLQkg KiB0byBpdHMgbWFpbiB0YWJsZSBvciBhIHNlcXVlbmNlIHJlbGF0ZXMgdG8gYW4gaWRlbnRpdHkg Y29sdW1uLgotCSAqCi0JICogVGhpcyBlbnN1cmVzIHRoZSBjb25mbGljdCBsb2cgdGFibGUgaXMg YXV0b21hdGljYWxseSByZWFwZWQgZHVyaW5nIGEKLQkgKiBEUk9QIFNVQlNDUklQVElPTiB2aWEg cGVyZm9ybURlbGV0aW9uKCkuCi0JICovCi0JaWYgKENPTkZMSUNUU19MT0dHRURfVE9fVEFCTEUo b3B0cy5jb25mbGljdGxvZ2Rlc3QpKQotCXsKLQkJT2JqZWN0QWRkcmVzcyBjbHQ7Ci0KLQkJT2Jq ZWN0QWRkcmVzc1NldChjbHQsIFJlbGF0aW9uUmVsYXRpb25JZCwgbG9ncmVsaWQpOwotCQlyZWNv cmREZXBlbmRlbmN5T24oJmNsdCwgJm15c2VsZiwgREVQRU5ERU5DWV9JTlRFUk5BTCk7Ci0JfQot CiAJLyoKIAkgKiBBIHJlcGxpY2F0aW9uIG9yaWdpbiBpcyBjdXJyZW50bHkgY3JlYXRlZCBmb3Ig YWxsIHN1YnNjcmlwdGlvbnMsCiAJICogaW5jbHVkaW5nIHRob3NlIHRoYXQgb25seSBjb250YWlu IHNlcXVlbmNlcyBvciBhcmUgb3RoZXJ3aXNlIGVtcHR5LgpAQCAtMTUwNywyMCArMTUxMCw4IEBA IGFsdGVyX3N1Yl9jb25mbGljdGxvZ2Rlc3RpbmF0aW9uKFN1YnNjcmlwdGlvbiAqc3ViLCBDb25m bGljdExvZ0Rlc3QgbG9nZGVzdCwKIAkJLyogVGhlcmUgd2FzIG5vIHByZXZpb3VzIGNvbmZsaWN0 IGxvZyB0YWJsZS4gKi8KIAkJaWYgKHdhbnRfdGFibGUpCiAJCXsKLQkJCU9iamVjdEFkZHJlc3Mg Y2x0OwotCQkJT2JqZWN0QWRkcmVzcyBzdWJvYmo7Ci0KIAkJCXJlbGlkID0gY3JlYXRlX2NvbmZs aWN0X2xvZ190YWJsZShzdWItPm9pZCwgc3ViLT5uYW1lLCBzdWItPm93bmVyKTsKIAkJCXVwZGF0 ZV9yZWxpZCA9IHRydWU7Ci0KLQkJCS8qCi0JCQkgKiBFc3RhYmxpc2ggYW4gaW50ZXJuYWwgZGVw ZW5kZW5jeSBiZXR3ZWVuIHRoZSBjb25mbGljdCBsb2cgdGFibGUKLQkJCSAqIGFuZCB0aGUgc3Vi c2NyaXB0aW9uLiAgRm9yIGRldGFpbHMgcmVmZXIgY29tbWVudHMgaW4KLQkJCSAqIENyZWF0ZVN1 YnNjcmlwdGlvbiBmdW5jdGlvbi4KLQkJCSAqLwotCQkJT2JqZWN0QWRkcmVzc1NldChjbHQsIFJl bGF0aW9uUmVsYXRpb25JZCwgcmVsaWQpOwotCQkJT2JqZWN0QWRkcmVzc1NldChzdWJvYmosIFN1 YnNjcmlwdGlvblJlbGF0aW9uSWQsIHN1Yi0+b2lkKTsKLQkJCXJlY29yZERlcGVuZGVuY3lPbigm Y2x0LCAmc3Vib2JqLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9jb25mbGljdC5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9jb25mbGljdC5jCmluZGV4IDE1YjBlZjdmM2NhLi4wZjA3 N2IyODY3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9jb25m bGljdC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvY29uZmxpY3QuYwpA QCAtMTc1LDYgKzE3NSw4IEBAIGNyZWF0ZV9jb25mbGljdF9sb2dfdGFibGUoT2lkIHN1YmlkLCBj aGFyICpzdWJuYW1lLCBPaWQgc3Vib3duZXIpCiB7CiAJVHVwbGVEZXNjCXR1cGRlc2M7CiAJT2lk CQkJcmVsaWQ7CisJT2JqZWN0QWRkcmVzcwlteXNlbGY7CisJT2JqZWN0QWRkcmVzcwlzdWJhZGRy OwogCWNoYXIgICAgCXJlbG5hbWVbTkFNRURBVEFMRU5dOwogCiAJc25wcmludGYocmVsbmFtZSwg TkFNRURBVEFMRU4sICJwZ19jb25mbGljdF9sb2dfZm9yX3N1YmlkXyV1Iiwgc3ViaWQpOwpAQCAt MjE4LDYgKzIyMCwyMSBAQCBjcmVhdGVfY29uZmxpY3RfbG9nX3RhYmxlKE9pZCBzdWJpZCwgY2hh ciAqc3VibmFtZSwgT2lkIHN1Ym93bmVyKQogCQkJCQkJCQkJIE5VTEwpOyAvKiB0eXBhZGRyZXNz ICovCiAJQXNzZXJ0KE9pZElzVmFsaWQocmVsaWQpKTsKIAorCS8qCisJICogRXN0YWJsaXNoIGFu IGludGVybmFsIGRlcGVuZGVuY3kgYmV0d2VlbiB0aGUgY29uZmxpY3QgbG9nIHRhYmxlIGFuZAor CSAqIHRoZSBzdWJzY3JpcHRpb24uCisJICoKKwkgKiBXZSB1c2UgREVQRU5ERU5DWV9JTlRFUk5B TCB0byBzaWduaWZ5IHRoYXQgdGhlIHRhYmxlJ3MgbGlmZWN5Y2xlIGlzCisJICogc3RyaWN0bHkg dGllZCB0byB0aGUgc3Vic2NyaXB0aW9uLCBzaW1pbGFyIHRvIGhvdyBhIFRPQVNUIHRhYmxlIHJl bGF0ZXMKKwkgKiB0byBpdHMgbWFpbiB0YWJsZSBvciBhIHNlcXVlbmNlIHJlbGF0ZXMgdG8gYW4g aWRlbnRpdHkgY29sdW1uLgorCSAqCisJICogVGhpcyBlbnN1cmVzIHRoZSBjb25mbGljdCBsb2cg dGFibGUgaXMgYXV0b21hdGljYWxseSByZWFwZWQgZHVyaW5nIGEKKwkgKiBEUk9QIFNVQlNDUklQ VElPTiB2aWEgcGVyZm9ybURlbGV0aW9uKCkuCisJICovCisJT2JqZWN0QWRkcmVzc1NldChteXNl bGYsIFJlbGF0aW9uUmVsYXRpb25JZCwgcmVsaWQpOworCU9iamVjdEFkZHJlc3NTZXQoc3ViYWRk ciwgU3Vic2NyaXB0aW9uUmVsYXRpb25JZCwgc3ViaWQpOworCXJlY29yZERlcGVuZGVuY3lPbigm bXlzZWxmLCAmc3ViYWRkciwgREVQRU5ERU5DWV9JTlRFUk5BTCk7CisKIAkvKiBSZWxlYXNlIHR1 cGxlIGRlc2NyaXB0b3IgbWVtb3J5LiAqLwogCUZyZWVUdXBsZURlc2ModHVwZGVzYyk7CiAKLS0g CjIuNDkuMAoK --000000000000d7883a0652fe14cb--