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 1w5Wye-003LLq-0e for pgsql-bugs@arkaria.postgresql.org; Wed, 25 Mar 2026 22:45:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5Wyc-00HFE2-1J for pgsql-bugs@arkaria.postgresql.org; Wed, 25 Mar 2026 22:45:26 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w5Wyb-00HFDu-2Q for pgsql-bugs@lists.postgresql.org; Wed, 25 Mar 2026 22:45:26 +0000 Received: from mail-oi1-x235.google.com ([2607:f8b0:4864:20::235]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5WyZ-000000012le-3rin for pgsql-bugs@lists.postgresql.org; Wed, 25 Mar 2026 22:45:25 +0000 Received: by mail-oi1-x235.google.com with SMTP id 5614622812f47-467161c4ba7so185748b6e.0 for ; Wed, 25 Mar 2026 15:45:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774478723; cv=none; d=google.com; s=arc-20240605; b=LEpZz9kjhL2Bshb5CsLn6mhtlT7we8kdIDHcr2AoFspmnp98PhRyAP+hNUXGMtrUCQ dlQvndqCW5qipE2gwsEryHZ/qnMeyp8PDh5Ygab3dSIr0OX9dmLNjoURnG2gzQO7pwCQ xPIrIkwzthZuGRg+bDjW5x/EowPZrTt2uedCYceLG2Vu12flYSakl/WrzCo1v70QSg29 KL62iFbmzqnv/GBBd5CTdp+2bmu+Dc7iYwSxL6EBEj8c3vT1CdXMh4/4dWSFJnbArRQy o8Jm/c10SNtksfZxkgcXgkJ8AHw9UyrkvN4OrAdGEuRD8ddcPJ7HNlIh4A1y3ZzwMVpc LByg== 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=74Yqib2oMx25N8IjW/BIP9OB0VzCdmwdDWxFUH/syA0=; fh=wVaF3Bdw/MgXj848la1/j9L95tgP7xigrFR0lmKlb0s=; b=SZQR0wphGE27y4XAvWwWZmm0J1Oaa/et7SPGAe0P3wQTD955ED5EyyXNxgEfU4uNUn bTca7oFZOyc5mq8GhxNmNhojwHoFtKkisuFiiGM37I23Am0ODQb1TLiHluVYZTKPGP8v LyPiS1hkUali3NllHlibXWKvHlXujxF0LXp0SZVxWxEe9PLyl6+RkrKSERrzgEeICTb1 zsnPttSxf4MjNIMna6xoZwZcZCAsYmgvSuTEEpaicM1GCoA6qBZUGMQvehv3y8bB+Vhj a4oMslTIm7StnT4csDEoWVmZ57Y3lqD8kDc61eSJFH5bkip/x6mjkWEqDxn2VMSWnI9f ZbSw==; 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=1774478723; x=1775083523; 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=74Yqib2oMx25N8IjW/BIP9OB0VzCdmwdDWxFUH/syA0=; b=XxpxELlSSSy1wIYu4EL9l2pZ40TAzLGOeLCw0NwNI7erjcV4XsAlG3Xvds7MLaT1Uv k1NLupvYvLFVfnt0U9AVyLVMv39DHbqmcIa8nbqkycTsD+DSVldNpcsqU9UsHWyUiF+u ZNQHpEgPkWr3wu9YBWQQO7HA14aHUxGM7GjFPLQexMhHl3grrDCrr/YcYe7XcpuPCkF0 E7D0tcCR/wHX5a7HYxMaswb5CG0V4C0jWXwDM5Oc7ijTP+PqZpLT+f0uvhititlZTcDo EsqJ5OPJXoLHtacrK0z2WRDHWU6gZTfkYL1+TKx4t5yzCFUZE1XL8+dcj09x/TImOwhs 5+Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774478723; x=1775083523; 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=74Yqib2oMx25N8IjW/BIP9OB0VzCdmwdDWxFUH/syA0=; b=HiCTdzWKlzYPdEjECdwm2pqmQQd72dEz0vefCx22kCoVEudZpT5o29Wa2Bw30cD35J U1spOvYY0idfU7FIxVToUHdEg2eQoOuOs7JXEvSAS/Q6me9ETrdFd1zoF3PUqsAnxGp5 Iw7Wdi2O5Ph1d7A67CBrDfldTxLpn8z9BM6DJXkdDraSRwX+XOsHkRltY06voiuEVj5q hmlSFy/oBzJwcbnLXWMsRz/o4b4mFt6FB9eIH4XiXn5Xn7MGelWeQN1UThHGlNC4gA1m gBbVJLyRJIOXRKBj1B/PTZ93/3zc63uP4Ptk7H+ZHq9ot2WS75JtyXy8b00CJjt8kLRQ h+Gw== X-Forwarded-Encrypted: i=1; AJvYcCUW0Ax0s4lmmGc/iilp3McZIRxpVAu07JjwRYT41JZi8DxRQKmC/pYtbOKXnsAJXTzuXjx8HXRPo6ra@lists.postgresql.org X-Gm-Message-State: AOJu0YzcHjgVe8KTeIAhL8CDN2m0g2eHRoOSF9biitcSux14xZgrcW46 HPj3Op1N6NGfG18g9uXGVow8214U2nP6BKaBgAFkLVFg3HOJ2f/GyYyo6wmMUCJyLFcz9Teet9+ NducqpwdIhRoRfsgVWpn89MBnxHrDvjY= X-Gm-Gg: ATEYQzyijEFnW1kHIKHthF56oHcXop05DKM1d5pcETYoVI7z2nPtzdS2KapjgGOtp7y MLPRIucKA40RniCxINCim0+7vWui8DtR7DRaffQLL0AfjGd/6vc6+gj1P29ep7dwKjmufgKXRSj 12Jc44vOOKMYr2Htm8rk07smyxvj8A7RbSDTOj3bG7g66Mp91LbEdgzQWdPswpcpI2jugSkdBn6 C7LXUMCmbi2twW2Zj4Fc8gszlqPILvRbY+kk1blWLWTih5fWTjIaBjn+GB977x6EkWLs1tEAcDH sGQs7RHfcVTuBA== X-Received: by 2002:a05:6808:1452:b0:45a:6adf:4d44 with SMTP id 5614622812f47-46a0cdb448fmr4233174b6e.12.1774478723324; Wed, 25 Mar 2026 15:45:23 -0700 (PDT) MIME-Version: 1.0 References: <40d694df-39fd-4a4a-9459-9d6489165f60@gogi.tv> In-Reply-To: From: surya poondla Date: Wed, 25 Mar 2026 15:45:11 -0700 X-Gm-Features: AQROBzDL_UAQStS8Xq409gPfBn4YCw3hg8tGStoOTak6g9MI0nEWhKLfJO4T5QA Message-ID: Subject: Re: Two issues with REFRESH MATERIALIZED VIEW CONCURRENTLY To: cca5507 Cc: Rafia Sabih , Giuliano Gagliardi , pgsql-bugs Content-Type: multipart/mixed; boundary="000000000000f7896a064de105dd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f7896a064de105dd Content-Type: multipart/alternative; boundary="000000000000f78969064de105db" --000000000000f78969064de105db Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi ChangAo, Thank you for the continued review, your test case helped me find a real issue in v3 patch, and I updated the fix accordingly. You were correct that v3 was wrong. Removing IS NOT NULL and using *=3D alo= ne in the pre-check was too aggressive: *=3D treats NULL=3DNULL=3Dtrue, which = caused (NULL,NULL)=C3=972 with a unique index on a nullable column to be flagged as duplicates even though the unique index allows multiple NULLs. The updated patch takes a different approach. Instead of removing the guard and relying on *=3D alone, the pre-check now uses the same per-column equal= ity operators as the FULL OUTER JOIN accumulated during the same index-scanning loop. These operators treat NULL=3DNULL as false, which is consistent with how unique indexes actually work (NULLs are distinct). For (test, NULL)=C3=972 with a single index on a (non-null): newdata2.a =3D newdata.a i.e 'test'=3D'test' that is TRUE newdata2.* *=3D newdata.* that is TRUE Thus the duplicate is caught and error is raised For (NULL, NULL)=C3=972 with a single index on a (nullable): newdata2.a =3D newdata.a i.e NULL=3DNULL that is NULL (false) Thus no duplicate is caught, the refresh correctly succeeds, MV gets 2 rows For (test, NULL)=C3=972 with a composite index on (a, b): newdata2.a =3D newdata.a i.e TRUE newdata2.b =3D newdata.b i.e NULL=3DNULL that is NULL (false) Combined: NULL is not caught, refresh correctly succeeds Regarding your record_image_eq_variant approach: it correctly handles the NULL-in-indexed-column case, but it introduces a performance regression for unchanged rows where any non-indexed column contains NULL. For example, an unchanged row (1, NULL) with a unique index on non-null index on a would require a DELETE+INSERT on every CONCURRENTLY refresh because record_image_eq_variant((1,NULL),(1,NULL)) returns false. This makes CONCURRENTLY impractical for any table where rows contain NULLs in non-indexed columns. The updated patch for bug 1. Here is some additional tests I did: postgres=3D# SET client_min_messages =3D WARNING; SET postgres=3D# -- Test 1: (test,NULL)=C3=972, single index on 'a' should ERRO= R postgres=3D# CREATE TABLE t(a text, b text); INSERT INTO t VALUES('test', NULL); CREATE MATERIALIZED VCREATE TABLE postgres=3D# INSERT INTO t VALUES('test', NULL); INSERT 0 1 postgres=3D# CREATE MATERIALIZED VIEW m AS SELECT * FROM t; CREATE UNIQUE INDEX ON m(a); INSERT INTO t VALUES('test', NULL); REFSELECT 1 postgres=3D# CREATE UNIQUE INDEX ON m(a); CREATE INDEX postgres=3D# INSERT INTO t VALUES('test', NULL); INSERT 0 1 postgres=3D# REFRESH MATERIALIZED VIEW CONCURRENTLY m; -- must error ERROR: new data for materialized view "m" contains duplicate rows DETAIL: Row: (test,) postgres=3D# DROP TABLE t CASCADE; DROP TABLE postgres=3D# -- Test 2: (NULL,NULL)=C3=972, single index on 'a' should SUCC= EED postgres=3D# CREATE TABLE t(a int, b int); CREATE TABLE postgres=3D# INSERT INTO t VALUES(NULL, NULL); INSERT 0 1 postgres=3D# CREATE MATERIALIZED VIEW m AS SELECT * FROM t; SELECT 1 postgres=3D# CREATE UNIQUE INDEX ON m(a); CREATE INDEX postgres=3D# INSERT INTO t VALUES(NULL, NULL); INSERT 0 1 postgres=3D# REFRESH MATERIALIZED VIEW CONCURRENTLY m; -- must succeed SELECT COUNT(*) FROM m; DROP TABLE t CASCADE;REFRESH MATERIALIZED VIEW postgres=3D# SELECT COUNT(*) FROM m; -- should be 2 count ------- 2 (1 row) postgres=3D# DROP TABLE t CASCADE; DROP TABLE postgres=3D# --Test 3: (test,NULL)=C3=972, composite index (a,b) should SUC= CEED postgres=3D# CREATE TABLE t(a text, b text); CREATE TABLE postgres=3D# INSERT INTO t VALUES('test', NULL); INSERT 0 1 postgres=3D# CREATE MATERIALIZED VIEW m AS SELECT * FROM t; SELECT 1 postgres=3D# CREATE UNIQUE INDEX ON m(a, b); INSERT INTO t VALUES('test', NUL CREATE UNIQUE INDEX ON m(a, b); CREATE INDEX postgres=3D# INSERT INTO t VALUES('test', NULL); INSERT 0 1 postgres=3D# REFRESH MATERIALIZED VIEW CONCURRENTLY m; -- must succeed REFRESH MATERIALIZED VIEW postgres=3D# SELECT COUNT(*) FROM m; DROP TABLE t CASCADE; SELECT COUNT(*) FROM m; -- must be 2 count ------- 2 (1 row) postgres=3D# DROP TABLE t CASCADE; DROP TABLE postgres=3D# -- Test 4: unchanged (1,NULL), index on 'a' should SUCCEED. postgres=3D# CREATE TABLE t(a int, b int); CREATE TABLE postgres=3D# INSERT INTO t VALUES(1, NULL); INSERT 0 1 postgres=3D# CREATE MATERIALIZED VIEW m AS SELECT * FROM t; SELECT 1 postgres=3D# CREATE UNIQUE INDEX ON m(a); CREATE INDEX postgres=3D# REFRESH MATERIALIZED VIEW CONCURRENTLY m; -- must succeed REFRESH MATERIALIZED VIEW postgres=3D# SELECT * FROM m; -- must still show (1,) a | b ---+--- 1 | (1 row) postgres=3D# DROP TABLE t CASCADE; DROP TABLE postgres=3D# -- Test 5: (1,NULL)=C3=972, separate index on a AND b, should = ERROR postgres=3D# CREATE TABLE t(a int, b int); CREATE TABLE postgres=3D# INSERT INTO t VALUES(1, NULL); INSERT 0 1 postgres=3D# CREATE MATERIALIZED VIEW m AS SELECT * FROM t; SELECT 1 postgres=3D# CREATE UNIQUE INDEX ON m(a); CREATE INDEX postgres=3D# CREATE UNIQUE INDEX ON m(b); CREATE INDEX postgres=3D# INSERT INTO t VALUES(1, NULL); INSERT 0 1 postgres=3D# REFRESH MATERIALIZED VIEW CONCURRENTLY m; -- must error ERROR: duplicate key value violates unique constraint "m_a_idx" DETAIL: Key (a)=3D(1) already exists. CONTEXT: SQL statement "INSERT INTO public.m SELECT (diff.newdata).* FROM pg_temp_2.pg_temp_16535_2 diff WHERE tid IS NULL" postgres=3D# DROP TABLE t CASCADE; DROP TABLE postgres=3D# Made some minor changes to bug2 patch too. Regards, Surya Poondla --000000000000f78969064de105db Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi ChangAo,

Thank you for the continued review= , your test case helped me find a real=C2=A0issue in v3 patch, and I update= d the fix accordingly.

You were correct that v3 was wrong. Removing = IS NOT NULL and using *=3D alone in the pre-check was too aggressive: *=3D = treats NULL=3DNULL=3Dtrue, which caused=C2=A0
(NULL,NULL)=C3=972 = with a unique index on a nullable column to be flagged as=C2=A0duplicates e= ven though the unique index allows multiple NULLs.=C2=A0

The updated= patch takes a different approach. Instead of removing the guard and relyin= g on *=3D alone, the pre-check now uses the same per-column equality
ope= rators as the FULL OUTER JOIN accumulated during the same index-scanning=C2= =A0loop. These operators treat NULL=3DNULL as false, which is consistent wi= th how
unique indexes actually work (NULLs are distinct).

For (te= st, NULL)=C3=972 with a single index on a (non-null):
newdata2.a =3D new= data.a=C2=A0i.e 'test'=3D'test' that is TRUE
newdata2.* = *=3D newdata.* that is TRUE
Thus the duplicate is caught and error is ra= ised=C2=A0

For (NULL, NULL)=C3=972 with a single index on a (= nullable):
newdata2.a =3D newdata.a i.e NULL=3DNULL that is NULL (false)=
Thus no duplicate is caught, the refresh correctly succeeds, MV gets 2 = rows=C2=A0

For (test, NULL)=C3=972 with a composite index on (a, b):=
newdata2.a =3D newdata.a=C2=A0i.e TRUE
newdata2.b =3D newdata.b i.e = NULL=3DNULL that is NULL (false)
Combined: NULL is not caught, refresh c= orrectly succeeds=C2=A0

Regarding your record_image_eq_variant appro= ach: it correctly handles the NULL-in-indexed-column case, but it introduce= s a performance regression for
unchanged rows where any non-indexed colu= mn contains NULL.
For example, an unchanged row (1, NULL) with a unique= index on non-null index on a would require a DELETE+INSERT on every CONCUR= RENTLY refresh because
record_image_eq_variant((1,NULL),(1,NULL)) return= s false.=C2=A0
This makes CONCURRENTLY impractical for any table = where rows contain NULLs in non-indexed columns.

The updated patch f= or bug 1.

Here is some additional tests I did:
postgres=3D# SET c= lient_min_messages =3D WARNING;
SET
postgres=3D# -- Test 1: (test,NUL= L)=C3=972, single index on 'a' should ERROR
postgres=3D# =C2=A0 = CREATE TABLE t(a text, b text);
=C2=A0 INSERT INTO t VALUES('test= 9;, NULL);
=C2=A0 CREATE MATERIALIZED VCREATE TABLE
postgres=3D# =C2= =A0 INSERT INTO t VALUES('test', NULL);
INSERT 0 1
postgres= =3D# =C2=A0 CREATE MATERIALIZED VIEW m AS SELECT * FROM t;
=C2=A0 CREATE= UNIQUE INDEX ON m(a);
=C2=A0 INSERT INTO t VALUES('test', NULL)= ;
=C2=A0 REFSELECT 1
postgres=3D# =C2=A0 CREATE UNIQUE INDEX ON m(a);=
CREATE INDEX
postgres=3D# =C2=A0 INSERT INTO t VALUES('test'= , NULL);
INSERT 0 1
postgres=3D# =C2=A0 REFRESH MATERIALIZED VIEW CON= CURRENTLY m; =C2=A0-- must error
ERROR: =C2=A0new data for materialized = view "m" contains duplicate rows
DETAIL: =C2=A0Row: (test,)postgres=3D# =C2=A0 DROP TABLE t CASCADE;
DROP TABLE

postgres=3D= # -- Test 2: (NULL,NULL)=C3=972, single index on 'a' should SUCCEED=
postgres=3D# =C2=A0 CREATE TABLE t(a int, b int);
CREATE TABLE
po= stgres=3D# =C2=A0 INSERT INTO t VALUES(NULL, NULL);
INSERT 0 1
postgr= es=3D# =C2=A0 CREATE MATERIALIZED VIEW m AS SELECT * FROM t;
SELECT 1postgres=3D# =C2=A0 CREATE UNIQUE INDEX ON m(a);
CREATE INDEX
postgr= es=3D# =C2=A0 INSERT INTO t VALUES(NULL, NULL);
INSERT 0 1
postgres= =3D# =C2=A0 REFRESH MATERIALIZED VIEW CONCURRENTLY m; =C2=A0-- must succeed=
=C2=A0 SELECT COUNT(*) FROM m;
=C2=A0 DROP TABLE t CASCADE;REFRESH M= ATERIALIZED VIEW
postgres=3D# =C2=A0 SELECT COUNT(*) FROM m; =C2=A0-- sh= ould be 2
=C2=A0count
-------
=C2=A0 =C2=A0 =C2=A02
(1 row)
= postgres=3D# =C2=A0 DROP TABLE t CASCADE;
DROP TABLE

postgres=3D#= --Test 3: (test,NULL)=C3=972, composite index (a,b) should SUCCEED
post= gres=3D# =C2=A0 CREATE TABLE t(a text, b text);
CREATE TABLE
postgres= =3D# =C2=A0 INSERT INTO t VALUES('test', NULL);
INSERT 0 1
po= stgres=3D# =C2=A0 CREATE MATERIALIZED VIEW m AS SELECT * FROM t;
SELECT = 1
postgres=3D# =C2=A0 CREATE UNIQUE INDEX ON m(a, b);
=C2=A0 INSERT I= NTO t VALUES('test', NUL =C2=A0CREATE UNIQUE INDEX ON m(a, b);
C= REATE INDEX
postgres=3D# =C2=A0 INSERT INTO t VALUES('test', NUL= L);
INSERT 0 1
postgres=3D# =C2=A0 REFRESH MATERIALIZED VIEW CONCURRE= NTLY m; =C2=A0-- must succeed
REFRESH MATERIALIZED VIEW
postgres=3D# = =C2=A0 SELECT COUNT(*) FROM m;=C2=A0
=C2=A0 DROP TABLE t CASCADE;
=C2= =A0 SELECT COUNT(*) FROM m; =C2=A0-- must be 2
=C2=A0count
-------=C2=A0 =C2=A0 =C2=A02
(1 row)
postgres=3D# =C2=A0 DROP TABLE t CASCA= DE;
DROP TABLE

postgres=3D# -- Test 4: unchanged (1,NULL), index = on 'a' should SUCCEED.
postgres=3D# =C2=A0 CREATE TABLE t(a int,= b int);
CREATE TABLE
postgres=3D# =C2=A0 INSERT INTO t VALUES(1, NUL= L);
INSERT 0 1
postgres=3D# =C2=A0 CREATE MATERIALIZED VIEW m AS SELE= CT * FROM t;
SELECT 1
postgres=3D# =C2=A0 CREATE UNIQUE INDEX ON m(a)= ;
CREATE INDEX
postgres=3D# =C2=A0 REFRESH MATERIALIZED VIEW CONCURRE= NTLY m; =C2=A0-- must succeed
REFRESH MATERIALIZED VIEW
postgres=3D# = =C2=A0 SELECT * FROM m; =C2=A0-- must still show (1,)
=C2=A0a | b
---= +---
=C2=A01 |
(1 row)
postgres=3D# =C2=A0 DROP TABLE t CASCADE;DROP TABLE

postgres=3D# -- Test 5: (1,NULL)=C3=972, separate index= on a AND b, should ERROR
postgres=3D# =C2=A0 CREATE TABLE t(a int, b in= t);
CREATE TABLE
postgres=3D# =C2=A0 INSERT INTO t VALUES(1, NULL);INSERT 0 1
postgres=3D# =C2=A0 CREATE MATERIALIZED VIEW m AS SELECT * = FROM t;
SELECT 1
postgres=3D# =C2=A0 CREATE UNIQUE INDEX ON m(a);
= CREATE INDEX
postgres=3D# =C2=A0 CREATE UNIQUE INDEX ON m(b);
CREATE = INDEX
postgres=3D# =C2=A0 INSERT INTO t VALUES(1, NULL);
INSERT 0 1postgres=3D# =C2=A0 REFRESH MATERIALIZED VIEW CONCURRENTLY m; =C2=A0-- mu= st error
ERROR: =C2=A0duplicate key value violates unique constraint &qu= ot;m_a_idx"
DETAIL: =C2=A0Key (a)=3D(1) already exists.
CONTEXT:= =C2=A0SQL statement "INSERT INTO public.m SELECT (diff.newdata).* FRO= M pg_temp_2.pg_temp_16535_2 diff WHERE tid IS NULL"
postgres=3D# = =C2=A0 DROP TABLE t CASCADE;
DROP TABLE
postgres=3D#

Made some= minor changes=C2=A0to bug2 patch too.

Regards,
Surya Poondla
--000000000000f78969064de105db-- --000000000000f7896a064de105dd Content-Type: application/octet-stream; name="0005-Fix-REFRESH-MATERIALIZED-VIEW-CONCURRENTLY-to-detect_bug1.patch" Content-Disposition: attachment; filename="0005-Fix-REFRESH-MATERIALIZED-VIEW-CONCURRENTLY-to-detect_bug1.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn6lxoh80 RnJvbSBmODQxOWZlODNjNmU2ODMxZmY5ODdiNTNmMmJjYWUyZjMxNzMwMjliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzcG9vbmRsYSA8c19wb29uZGxhQGFwcGxlLmNvbT4KRGF0ZTog TW9uLCAyIE1hciAyMDI2IDExOjIyOjExIC0wODAwClN1YmplY3Q6IFtQQVRDSCB2NV0gRml4IFJF RlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgQ09OQ1VSUkVOVExZIHRvIGRldGVjdAogZHVwbGljYXRl IHJvd3MKClJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgQ09OQ1VSUkVOVExZIHdhcyBpbmNvcnJl Y3RseSBza2lwcGluZwpkdXBsaWNhdGUgZGV0ZWN0aW9uIGZvciByb3dzIGNvbnRhaW5pbmcgTlVM TCB2YWx1ZXMuIFRoZSBwcmUtY2hlY2sKcXVlcnkgdXNlZCAiV0hFUkUgbmV3ZGF0YS4qIElTIE5P VCBOVUxMIiB3aGljaCBjYXVzZWQgcm93cyB3aXRoIGFueQpOVUxMIGNvbHVtbiB0byBieXBhc3Mg ZHVwbGljYXRlIGRldGVjdGlvbiBlbnRpcmVseS4KClRoZSBmaXggcmVidWlsZHMgdGhlIHByZS1j aGVjayB1c2luZyB0aGUgc2FtZSBwZXItY29sdW1uIGVxdWFsaXR5Cm9wZXJhdG9ycyB1c2VkIGJ5 IHRoZSBkaWZmIEpPSU4gKG9uZSBjb25kaXRpb24gcGVyIHVuaXF1ZS1pbmRleGVkCmNvbHVtbiku ICBUaGVzZSBvcGVyYXRvcnMgdHJlYXQgTlVMTCBhcyBub3QgZXF1YWwgdG8gTlVMTCwgbWF0Y2hp bmcKdW5pcXVlIGluZGV4IHNlbWFudGljcyB3aGVyZSBOVUxMcyBhcmUgY29uc2lkZXJlZCBkaXN0 aW5jdC4gIE9ubHkKcm93cyB3aG9zZSBpbmRleGVkIGNvbHVtbnMgYXJlIG5vbi1udWxsIGFuZCBl cXVhbCBhcmUgZmxhZ2dlZCBhcwpkdXBsaWNhdGVzIC0tLSB0aGUgc2FtZSByb3dzIHRoYXQgd291 bGQgY2F1c2Ugam9pbiBhbWJpZ3VpdHkuCgpUaGlzIGNvcnJlY3RseSBoYW5kbGVzIHR3byBjYXNl cyB0aGF0IHRoZSBvbGQgYXBwcm9hY2ggZ290IHdyb25nOgogIC0gKHRlc3QsIE5VTEwpIHgyIHdp dGggaW5kZXggb24gYTogYT0ndGVzdCcgaXMgbm9uLW51bGwgYW5kCiAgICBkdXBsaWNhdGVkLCBz byB0aGUgZHVwbGljYXRlIGlzIGNvcnJlY3RseSBkZXRlY3RlZCBhbmQgYW4gZXJyb3IKICAgIGlz IHJhaXNlZC4KICAtIChOVUxMLCBOVUxMKSB4MiB3aXRoIGluZGV4IG9uIGE6IGE9TlVMTCwgYW5k IHVuaXF1ZSBpbmRleGVzCiAgICBhbGxvdyBtdWx0aXBsZSBOVUxMcyAoZWFjaCBpcyB0cmVhdGVk IGFzIGRpc3RpbmN0KSwgc28gdGhlCiAgICByZWZyZXNoIGNvcnJlY3RseSBzdWNjZWVkcyBhbmQg dXBkYXRlcyB0aGUgdmlldyB0byB0d28gcm93cy4KCkFkZGVkIHJlZ3Jlc3Npb24gdGVzdHMgY292 ZXJpbmcgYm90aCBjYXNlcy4KCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyAg ICAgICAgfCAxMjIgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbWF0dmlldy5vdXQgfCAgMzMgKysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwv bWF0dmlldy5zcWwgICAgICB8ICAyMiArKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMzcgaW5zZXJ0 aW9ucygrKSwgNDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCmluZGV4IDgxYTU1 YTMzZWYyLi4yYTE2OTRmM2I0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0 dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpAQCAtNjA2LDYgKzYw Niw4IEBAIHJlZnJlc2hfYnlfbWF0Y2hfbWVyZ2UoT2lkIG1hdHZpZXdPaWQsIE9pZCB0ZW1wT2lk LCBPaWQgcmVsb3duZXIsCiAJTGlzdENlbGwgICAqaW5kZXhvaWRzY2FuOwogCWludDE2CQlyZWxu YXR0czsKIAlPaWQJCSAgICpvcFVzZWRGb3JRdWFsOworCVN0cmluZ0luZm9EYXRhIHByZWNoZWNr X2NvbmRfYnVmOworCWJvb2wJCXByZWNoZWNrX2hhc19jb25kOwogCiAJaW5pdFN0cmluZ0luZm8o JnF1ZXJ5YnVmKTsKIAltYXR2aWV3UmVsID0gdGFibGVfb3BlbihtYXR2aWV3T2lkLCBOb0xvY2sp OwpAQCAtNjM0LDQ1ICs2MzYsNiBAQCByZWZyZXNoX2J5X21hdGNoX21lcmdlKE9pZCBtYXR2aWV3 T2lkLCBPaWQgdGVtcE9pZCwgT2lkIHJlbG93bmVyLAogCWlmIChTUElfZXhlYyhxdWVyeWJ1Zi5k YXRhLCAwKSAhPSBTUElfT0tfVVRJTElUWSkKIAkJZWxvZyhFUlJPUiwgIlNQSV9leGVjIGZhaWxl ZDogJXMiLCBxdWVyeWJ1Zi5kYXRhKTsKIAotCS8qCi0JICogV2UgbmVlZCB0byBlbnN1cmUgdGhh dCB0aGVyZSBhcmUgbm90IGR1cGxpY2F0ZSByb3dzIHdpdGhvdXQgTlVMTHMgaW4KLQkgKiB0aGUg bmV3IGRhdGEgc2V0IGJlZm9yZSB3ZSBjYW4gY291bnQgb24gdGhlICJkaWZmIiByZXN1bHRzLiAg Q2hlY2sgZm9yCi0JICogdGhhdCBpbiBhIHdheSB0aGF0IGFsbG93cyBzaG93aW5nIHRoZSBmaXJz dCBkdXBsaWNhdGVkIHJvdyBmb3VuZC4gIEV2ZW4KLQkgKiBhZnRlciB3ZSBwYXNzIHRoaXMgdGVz dCwgYSB1bmlxdWUgaW5kZXggb24gdGhlIG1hdGVyaWFsaXplZCB2aWV3IG1heQotCSAqIGZpbmQg YSBkdXBsaWNhdGUga2V5IHByb2JsZW0uCi0JICoKLQkgKiBOb3RlOiBoZXJlIGFuZCBiZWxvdywg d2UgdXNlICJ0YWJsZW5hbWUuKjo6dGFibGVyb3d0eXBlIiBhcyBhIGhhY2sgdG8KLQkgKiBrZWVw ICIuKiIgZnJvbSBiZWluZyBleHBhbmRlZCBpbnRvIG11bHRpcGxlIGNvbHVtbnMgaW4gYSBTRUxF Q1QgbGlzdC4KLQkgKiBDb21wYXJlIHJ1bGV1dGlscy5jJ3MgZ2V0X3ZhcmlhYmxlKCkuCi0JICov Ci0JcmVzZXRTdHJpbmdJbmZvKCZxdWVyeWJ1Zik7Ci0JYXBwZW5kU3RyaW5nSW5mbygmcXVlcnli dWYsCi0JCQkJCSAiU0VMRUNUIG5ld2RhdGEuKjo6JXMgRlJPTSAlcyBuZXdkYXRhICIKLQkJCQkJ ICJXSEVSRSBuZXdkYXRhLiogSVMgTk9UIE5VTEwgQU5EIEVYSVNUUyAiCi0JCQkJCSAiKFNFTEVD VCAxIEZST00gJXMgbmV3ZGF0YTIgV0hFUkUgbmV3ZGF0YTIuKiBJUyBOT1QgTlVMTCAiCi0JCQkJ CSAiQU5EIG5ld2RhdGEyLiogT1BFUkFUT1IocGdfY2F0YWxvZy4qPSkgbmV3ZGF0YS4qICIKLQkJ CQkJICJBTkQgbmV3ZGF0YTIuY3RpZCBPUEVSQVRPUihwZ19jYXRhbG9nLjw+KSAiCi0JCQkJCSAi bmV3ZGF0YS5jdGlkKSIsCi0JCQkJCSB0ZW1wbmFtZSwgdGVtcG5hbWUsIHRlbXBuYW1lKTsKLQlp ZiAoU1BJX2V4ZWN1dGUocXVlcnlidWYuZGF0YSwgZmFsc2UsIDEpICE9IFNQSV9PS19TRUxFQ1Qp Ci0JCWVsb2coRVJST1IsICJTUElfZXhlYyBmYWlsZWQ6ICVzIiwgcXVlcnlidWYuZGF0YSk7Ci0J aWYgKFNQSV9wcm9jZXNzZWQgPiAwKQotCXsKLQkJLyoKLQkJICogTm90ZSB0aGF0IHRoaXMgZXJl cG9ydCgpIGlzIHJldHVybmluZyBkYXRhIHRvIHRoZSB1c2VyLiAgR2VuZXJhbGx5LAotCQkgKiB3 ZSB3b3VsZCB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1c2VyIGhhcyBiZWVuIGdyYW50ZWQg YWNjZXNzIHRvCi0JCSAqIHRoaXMgZGF0YS4gIEhvd2V2ZXIsIFJFRlJFU0ggTUFUIFZJRVcgaXMg b25seSBhYmxlIHRvIGJlIHJ1biBieSB0aGUKLQkJICogb3duZXIgb2YgdGhlIG1hdCB2aWV3IChv ciBhIHN1cGVydXNlcikgYW5kIHRoZXJlZm9yZSB0aGVyZSBpcyBubwotCQkgKiBuZWVkIHRvIGNo ZWNrIGZvciBhY2Nlc3MgdG8gZGF0YSBpbiB0aGUgbWF0IHZpZXcuCi0JCSAqLwotCQllcmVwb3J0 KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfQ0FSRElOQUxJVFlfVklPTEFUSU9OKSwKLQkJ CQkgZXJybXNnKCJuZXcgZGF0YSBmb3IgbWF0ZXJpYWxpemVkIHZpZXcgXCIlc1wiIGNvbnRhaW5z IGR1cGxpY2F0ZSByb3dzIHdpdGhvdXQgYW55IG51bGwgY29sdW1ucyIsCi0JCQkJCQlSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShtYXR2aWV3UmVsKSksCi0JCQkJIGVycmRldGFpbCgiUm93OiAlcyIs Ci0JCQkJCQkgICBTUElfZ2V0dmFsdWUoU1BJX3R1cHRhYmxlLT52YWxzWzBdLCBTUElfdHVwdGFi bGUtPnR1cGRlc2MsIDEpKSkpOwotCX0KLQogCS8qCiAJICogQ3JlYXRlIHRoZSB0ZW1wb3Jhcnkg ImRpZmYiIHRhYmxlLgogCSAqCkBAIC03MTUsNiArNjc4LDggQEAgcmVmcmVzaF9ieV9tYXRjaF9t ZXJnZShPaWQgbWF0dmlld09pZCwgT2lkIHRlbXBPaWQsIE9pZCByZWxvd25lciwKIAl0dXBkZXNj ID0gbWF0dmlld1JlbC0+cmRfYXR0OwogCW9wVXNlZEZvclF1YWwgPSBwYWxsb2MwX2FycmF5KE9p ZCwgcmVsbmF0dHMpOwogCWZvdW5kVW5pcXVlSW5kZXggPSBmYWxzZTsKKwlpbml0U3RyaW5nSW5m bygmcHJlY2hlY2tfY29uZF9idWYpOworCXByZWNoZWNrX2hhc19jb25kID0gZmFsc2U7CiAKIAlp bmRleG9pZGxpc3QgPSBSZWxhdGlvbkdldEluZGV4TGlzdChtYXR2aWV3UmVsKTsKIApAQCAtODAy LDYgKzc2NywzMCBAQCByZWZyZXNoX2J5X21hdGNoX21lcmdlKE9pZCBtYXR2aWV3T2lkLCBPaWQg dGVtcE9pZCwgT2lkIHJlbG93bmVyLAogCQkJCQkJCQkJCSByaWdodG9wLCBhdHRydHlwZSk7CiAK IAkJCQlmb3VuZFVuaXF1ZUluZGV4ID0gdHJ1ZTsKKworCQkJCS8qCisJCQkJICogQWxzbyBhY2N1 bXVsYXRlIHRoZSBzYW1lIGNvbmRpdGlvbiBmb3IgdGhlIGR1cGxpY2F0ZS1yb3cKKwkJCQkgKiBw cmUtY2hlY2ssIGNvbXBhcmluZyBuZXdkYXRhMiBhZ2FpbnN0IG5ld2RhdGEgKGluc3RlYWQgb2YK KwkJCQkgKiBuZXdkYXRhIGFnYWluc3QgbXYpLiAgVGhpcyBsZXRzIHVzIGRldGVjdCByb3dzIHRo YXQgYXJlCisJCQkJICogZHVwbGljYXRlcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHVuaXF1ZSBpbmRl eCBzZW1hbnRpY3MgLS0tCisJCQkJICogaS5lLiByb3dzIHdob3NlIGluZGV4ZWQgY29sdW1ucyBh cmUgbm9uLW51bGwgYW5kIGVxdWFsIC0tLQorCQkJCSAqIHdpdGhvdXQgZmFsc2VseSBmbGFnZ2lu ZyByb3dzIHdob3NlIGluZGV4ZWQgY29sdW1ucyBhcmUKKwkJCQkgKiBOVUxMICh3aGljaCB1bmlx dWUgaW5kZXhlcyB0cmVhdCBhcyBkaXN0aW5jdCkuCisJCQkJICovCisJCQkJaWYgKHByZWNoZWNr X2hhc19jb25kKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZwcmVjaGVja19jb25kX2J1 ZiwgIiBBTkQgIik7CisKKwkJCQlsZWZ0b3AgPSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcigi bmV3ZGF0YTIiLAorCQkJCQkJCQkJCQkJCQlOYW1lU3RyKGF0dHItPmF0dG5hbWUpKTsKKwkJCQly aWdodG9wID0gcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoIm5ld2RhdGEiLAorCQkJCQkJCQkJ CQkJCQkgTmFtZVN0cihhdHRyLT5hdHRuYW1lKSk7CisKKwkJCQlnZW5lcmF0ZV9vcGVyYXRvcl9j bGF1c2UoJnByZWNoZWNrX2NvbmRfYnVmLAorCQkJCQkJCQkJCSBsZWZ0b3AsIGF0dHJ0eXBlLAor CQkJCQkJCQkJCSBvcCwKKwkJCQkJCQkJCQkgcmlnaHRvcCwgYXR0cnR5cGUpOworCisJCQkJcHJl Y2hlY2tfaGFzX2NvbmQgPSB0cnVlOwogCQkJfQogCQl9CiAKQEAgLTgzMSw2ICs4MjAsNjEgQEAg cmVmcmVzaF9ieV9tYXRjaF9tZXJnZShPaWQgbWF0dmlld09pZCwgT2lkIHRlbXBPaWQsIE9pZCBy ZWxvd25lciwKIAkJCQkJCSAgICJXSEVSRSBuZXdkYXRhLiogSVMgTlVMTCBPUiBtdi4qIElTIE5V TEwgIgogCQkJCQkJICAgIk9SREVSIEJZIHRpZCIpOwogCisJLyoKKwkgKiBCZWZvcmUgcG9wdWxh dGluZyB0aGUgZGlmZiB0YWJsZSwgY2hlY2sgZm9yIGR1cGxpY2F0ZSByb3dzIGluIHRoZQorCSAq IG5ldyBkYXRhIHNldC4gIFdlIGxvb2sgZm9yIHJvd3MgdGhhdCBhcmUgZXF1YWwgaW4gYWxsIHVu aXF1ZSBpbmRleAorCSAqIGNvbHVtbnMgKHVzaW5nIHRoZSBzYW1lIG9wZXJhdG9ycyBhcyB0aGUg am9pbiBhYm92ZSwgd2hlcmUKKwkgKiBOVUxMID0gTlVMTCBpcyBmYWxzZSkgQU5EIGFyZSBhbHNv ICo9LWVxdWFsIG92ZXJhbGwuICBTdWNoIHJvd3MKKwkgKiB3b3VsZCBib3RoIG1hdGNoIHRoZSBz YW1lIG1hdGVyaWFsaXplZCB2aWV3IHJvdyBpbiB0aGUgam9pbiwKKwkgKiBwcm9kdWNpbmcgYW4g YW1iaWd1b3VzIGRpZmYuCisJICoKKwkgKiBVc2luZyBpbmRleCBjb2x1bW4gb3BlcmF0b3JzIHJh dGhlciB0aGFuICo9IGFsb25lIGlzIGltcG9ydGFudDogaXQKKwkgKiBjb3JyZWN0bHkgZXhjbHVk ZXMgcm93cyB3aG9zZSBpbmRleGVkIGNvbHVtbnMgYXJlIE5VTEwsIGJlY2F1c2UKKwkgKiB1bmlx dWUgaW5kZXhlcyB0cmVhdCBOVUxMcyBhcyBkaXN0aW5jdCBzbyB0aG9zZSByb3dzIGRvIG5vdCBj YXVzZQorCSAqIGpvaW4gYW1iaWd1aXR5LgorCSAqCisJICogTm90ZTogaGVyZSBhbmQgYmVsb3cs IHdlIHVzZSAidGFibGVuYW1lLio6OnRhYmxlcm93dHlwZSIgYXMgYSBoYWNrCisJICogdG8ga2Vl cCAiLioiIGZyb20gYmVpbmcgZXhwYW5kZWQgaW50byBtdWx0aXBsZSBjb2x1bW5zIGluIGEgU0VM RUNUCisJICogbGlzdC4gIENvbXBhcmUgcnVsZXV0aWxzLmMncyBnZXRfdmFyaWFibGUoKS4KKwkg KgorCSAqIEV2ZW4gYWZ0ZXIgd2UgcGFzcyB0aGlzIHRlc3QsIGEgdW5pcXVlIGluZGV4IG9uIHRo ZSBtYXRlcmlhbGl6ZWQKKwkgKiB2aWV3IG1heSBmaW5kIGEgZHVwbGljYXRlIGtleSBwcm9ibGVt LgorCSAqLworCXsKKwkJU3RyaW5nSW5mb0RhdGEgcHJlY2hlY2tfcXVlcnlidWY7CisKKwkJaW5p dFN0cmluZ0luZm8oJnByZWNoZWNrX3F1ZXJ5YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmcHJl Y2hlY2tfcXVlcnlidWYsCisJCQkJCQkgIlNFTEVDVCBuZXdkYXRhLio6OiVzIEZST00gJXMgbmV3 ZGF0YSAiCisJCQkJCQkgIldIRVJFIEVYSVNUUyAiCisJCQkJCQkgIihTRUxFQ1QgMSBGUk9NICVz IG5ld2RhdGEyIFdIRVJFICVzIgorCQkJCQkJICIgQU5EIG5ld2RhdGEyLiogT1BFUkFUT1IocGdf Y2F0YWxvZy4qPSkgbmV3ZGF0YS4qIgorCQkJCQkJICIgQU5EIG5ld2RhdGEyLmN0aWQgT1BFUkFU T1IocGdfY2F0YWxvZy48PikgbmV3ZGF0YS5jdGlkKSIsCisJCQkJCQkgdGVtcG5hbWUsIHRlbXBu YW1lLCB0ZW1wbmFtZSwgcHJlY2hlY2tfY29uZF9idWYuZGF0YSk7CisKKwkJaWYgKFNQSV9leGVj dXRlKHByZWNoZWNrX3F1ZXJ5YnVmLmRhdGEsIGZhbHNlLCAxKSAhPSBTUElfT0tfU0VMRUNUKQor CQkJZWxvZyhFUlJPUiwgIlNQSV9leGVjIGZhaWxlZDogJXMiLCBwcmVjaGVja19xdWVyeWJ1Zi5k YXRhKTsKKworCQlpZiAoU1BJX3Byb2Nlc3NlZCA+IDApCisJCXsKKwkJCS8qCisJCQkgKiBOb3Rl IHRoYXQgdGhpcyBlcmVwb3J0KCkgaXMgcmV0dXJuaW5nIGRhdGEgdG8gdGhlIHVzZXIuCisJCQkg KiBHZW5lcmFsbHksIHdlIHdvdWxkIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVzZXIgaGFz IGJlZW4KKwkJCSAqIGdyYW50ZWQgYWNjZXNzIHRvIHRoaXMgZGF0YS4gIEhvd2V2ZXIsIFJFRlJF U0ggTUFUIFZJRVcgaXMKKwkJCSAqIG9ubHkgYWJsZSB0byBiZSBydW4gYnkgdGhlIG93bmVyIG9m IHRoZSBtYXQgdmlldyAob3IgYQorCQkJICogc3VwZXJ1c2VyKSBhbmQgdGhlcmVmb3JlIHRoZXJl IGlzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGFjY2VzcworCQkJICogdG8gZGF0YSBpbiB0aGUgbWF0 IHZpZXcuCisJCQkgKi8KKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf Q0FSRElOQUxJVFlfVklPTEFUSU9OKSwKKwkJCQkJIGVycm1zZygibmV3IGRhdGEgZm9yIG1hdGVy aWFsaXplZCB2aWV3IFwiJXNcIiBjb250YWlucyBkdXBsaWNhdGUgcm93cyIsCisJCQkJCQkJUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUobWF0dmlld1JlbCkpLAorCQkJCQkgZXJyZGV0YWlsKCJSb3c6 ICVzIiwKKwkJCQkJCQkgICBTUElfZ2V0dmFsdWUoU1BJX3R1cHRhYmxlLT52YWxzWzBdLAorCQkJ CQkJCQkJCSAgIFNQSV90dXB0YWJsZS0+dHVwZGVzYywgMSkpKSk7CisJCX0KKwl9CisKIAkvKiBQ b3B1bGF0ZSB0aGUgdGVtcG9yYXJ5ICJkaWZmIiB0YWJsZS4gKi8KIAlpZiAoU1BJX2V4ZWMocXVl cnlidWYuZGF0YSwgMCkgIT0gU1BJX09LX0lOU0VSVCkKIAkJZWxvZyhFUlJPUiwgIlNQSV9leGVj IGZhaWxlZDogJXMiLCBxdWVyeWJ1Zi5kYXRhKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvbWF0dmlldy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21hdHZp ZXcub3V0CmluZGV4IDAzNTU3MjBkZmM2Li4xZGNmZjI2YTJlNCAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9tYXR2aWV3Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL21hdHZpZXcub3V0CkBAIC0zOTYsOCArMzk2LDM5IEBAIFJFRlJFU0ggTUFURVJJQUxJ WkVEIFZJRVcgbXZ0ZXN0X212OwogRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRl eCAibXZ0ZXN0X212X2FfaWR4IgogREVUQUlMOiAgS2V5IChhKT0oMSkgaXMgZHVwbGljYXRlZC4K IFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgQ09OQ1VSUkVOVExZIG12dGVzdF9tdjsKLUVSUk9S OiAgbmV3IGRhdGEgZm9yIG1hdGVyaWFsaXplZCB2aWV3ICJtdnRlc3RfbXYiIGNvbnRhaW5zIGR1 cGxpY2F0ZSByb3dzIHdpdGhvdXQgYW55IG51bGwgY29sdW1ucworRVJST1I6ICBuZXcgZGF0YSBm b3IgbWF0ZXJpYWxpemVkIHZpZXcgIm12dGVzdF9tdiIgY29udGFpbnMgZHVwbGljYXRlIHJvd3MK IERFVEFJTDogIFJvdzogKDEsMTApCitEUk9QIFRBQkxFIG12dGVzdF9mb28gQ0FTQ0FERTsKK05P VElDRTogIGRyb3AgY2FzY2FkZXMgdG8gbWF0ZXJpYWxpemVkIHZpZXcgbXZ0ZXN0X212CistLSB0 ZXN0IHRoYXQgZHVwbGljYXRlIHJvd3MgY29udGFpbmluZyBOVUxMcyBpbiBub24taW5kZXhlZCBj b2x1bW5zIGFyZSBkZXRlY3RlZAorQ1JFQVRFIFRBQkxFIG12dGVzdF9mb28oYSB0ZXh0LCBiIHRl eHQpOworSU5TRVJUIElOVE8gbXZ0ZXN0X2ZvbyBWQUxVRVMoJ3Rlc3QnLCBOVUxMKTsKK0NSRUFU RSBNQVRFUklBTElaRUQgVklFVyBtdnRlc3RfbXYgQVMgU0VMRUNUICogRlJPTSBtdnRlc3RfZm9v OworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBtdnRlc3RfbXYoYSk7CitJTlNFUlQgSU5UTyBtdnRl c3RfZm9vIFZBTFVFUygndGVzdCcsIE5VTEwpOworUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyBt dnRlc3RfbXY7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4ICJtdnRlc3Rf bXZfYV9pZHgiCitERVRBSUw6ICBLZXkgKGEpPSh0ZXN0KSBpcyBkdXBsaWNhdGVkLgorUkVGUkVT SCBNQVRFUklBTElaRUQgVklFVyBDT05DVVJSRU5UTFkgbXZ0ZXN0X212OworRVJST1I6ICBuZXcg ZGF0YSBmb3IgbWF0ZXJpYWxpemVkIHZpZXcgIm12dGVzdF9tdiIgY29udGFpbnMgZHVwbGljYXRl IHJvd3MKK0RFVEFJTDogIFJvdzogKHRlc3QsKQorRFJPUCBUQUJMRSBtdnRlc3RfZm9vIENBU0NB REU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIG1hdGVyaWFsaXplZCB2aWV3IG12dGVzdF9t dgorLS0gdGVzdCB0aGF0IHJvd3Mgd2l0aCBOVUxMcyBpbiB0aGUgaW5kZXhlZCBjb2x1bW4gYXJl IG5vdCBmYWxzZSBwb3NpdGl2ZXM6CistLSB1bmlxdWUgaW5kZXhlcyB0cmVhdCBOVUxMcyBhcyBk aXN0aW5jdCwgc28gKE5VTEwsTlVMTCl4MiBpcyBhIHZhbGlkIHN0YXRlCistLSBhbmQgQ09OQ1VS UkVOVExZIHNob3VsZCBzdWNjZWVkIGFuZCB1cGRhdGUgdGhlIHZpZXcgdG8gcmVmbGVjdCBib3Ro IHJvd3MKK0NSRUFURSBUQUJMRSBtdnRlc3RfZm9vKGEgaW50LCBiIGludCk7CitJTlNFUlQgSU5U TyBtdnRlc3RfZm9vIFZBTFVFUyhOVUxMLCBOVUxMKTsKK0NSRUFURSBNQVRFUklBTElaRUQgVklF VyBtdnRlc3RfbXYgQVMgU0VMRUNUICogRlJPTSBtdnRlc3RfZm9vOworQ1JFQVRFIFVOSVFVRSBJ TkRFWCBPTiBtdnRlc3RfbXYoYSk7CitJTlNFUlQgSU5UTyBtdnRlc3RfZm9vIFZBTFVFUyhOVUxM LCBOVUxMKTsKK1JFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgQ09OQ1VSUkVOVExZIG12dGVzdF9t djsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIG12dGVzdF9tdjsKKyBjb3VudCAKKy0tLS0tLS0KKyAg ICAgMgorKDEgcm93KQorCiBEUk9QIFRBQkxFIG12dGVzdF9mb28gQ0FTQ0FERTsKIE5PVElDRTog IGRyb3AgY2FzY2FkZXMgdG8gbWF0ZXJpYWxpemVkIHZpZXcgbXZ0ZXN0X212CiAtLSBtYWtlIHN1 cmUgdGhhdCBhbGwgY29sdW1ucyBjb3ZlcmVkIGJ5IHVuaXF1ZSBpbmRleGVzIHdvcmtzCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tYXR2aWV3LnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL21hdHZpZXcuc3FsCmluZGV4IDkzNDQyNmI5YWU4Li5lNjVjZDRmYTk0YiAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWF0dmlldy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvbWF0dmlldy5zcWwKQEAgLTEzNSw2ICsxMzUsMjggQEAgUkVGUkVTSCBNQVRFUklB TElaRUQgVklFVyBtdnRlc3RfbXY7CiBSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIENPTkNVUlJF TlRMWSBtdnRlc3RfbXY7CiBEUk9QIFRBQkxFIG12dGVzdF9mb28gQ0FTQ0FERTsKIAorLS0gdGVz dCB0aGF0IGR1cGxpY2F0ZSByb3dzIGNvbnRhaW5pbmcgTlVMTHMgaW4gbm9uLWluZGV4ZWQgY29s dW1ucyBhcmUgZGV0ZWN0ZWQKK0NSRUFURSBUQUJMRSBtdnRlc3RfZm9vKGEgdGV4dCwgYiB0ZXh0 KTsKK0lOU0VSVCBJTlRPIG12dGVzdF9mb28gVkFMVUVTKCd0ZXN0JywgTlVMTCk7CitDUkVBVEUg TUFURVJJQUxJWkVEIFZJRVcgbXZ0ZXN0X212IEFTIFNFTEVDVCAqIEZST00gbXZ0ZXN0X2ZvbzsK K0NSRUFURSBVTklRVUUgSU5ERVggT04gbXZ0ZXN0X212KGEpOworSU5TRVJUIElOVE8gbXZ0ZXN0 X2ZvbyBWQUxVRVMoJ3Rlc3QnLCBOVUxMKTsKK1JFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgbXZ0 ZXN0X212OworUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyBDT05DVVJSRU5UTFkgbXZ0ZXN0X212 OworRFJPUCBUQUJMRSBtdnRlc3RfZm9vIENBU0NBREU7CisKKy0tIHRlc3QgdGhhdCByb3dzIHdp dGggTlVMTHMgaW4gdGhlIGluZGV4ZWQgY29sdW1uIGFyZSBub3QgZmFsc2UgcG9zaXRpdmVzOgor LS0gdW5pcXVlIGluZGV4ZXMgdHJlYXQgTlVMTHMgYXMgZGlzdGluY3QsIHNvIChOVUxMLE5VTEwp eDIgaXMgYSB2YWxpZCBzdGF0ZQorLS0gYW5kIENPTkNVUlJFTlRMWSBzaG91bGQgc3VjY2VlZCBh bmQgdXBkYXRlIHRoZSB2aWV3IHRvIHJlZmxlY3QgYm90aCByb3dzCitDUkVBVEUgVEFCTEUgbXZ0 ZXN0X2ZvbyhhIGludCwgYiBpbnQpOworSU5TRVJUIElOVE8gbXZ0ZXN0X2ZvbyBWQUxVRVMoTlVM TCwgTlVMTCk7CitDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgbXZ0ZXN0X212IEFTIFNFTEVDVCAq IEZST00gbXZ0ZXN0X2ZvbzsKK0NSRUFURSBVTklRVUUgSU5ERVggT04gbXZ0ZXN0X212KGEpOwor SU5TRVJUIElOVE8gbXZ0ZXN0X2ZvbyBWQUxVRVMoTlVMTCwgTlVMTCk7CitSRUZSRVNIIE1BVEVS SUFMSVpFRCBWSUVXIENPTkNVUlJFTlRMWSBtdnRlc3RfbXY7CitTRUxFQ1QgQ09VTlQoKikgRlJP TSBtdnRlc3RfbXY7CitEUk9QIFRBQkxFIG12dGVzdF9mb28gQ0FTQ0FERTsKKwogLS0gbWFrZSBz dXJlIHRoYXQgYWxsIGNvbHVtbnMgY292ZXJlZCBieSB1bmlxdWUgaW5kZXhlcyB3b3JrcwogQ1JF QVRFIFRBQkxFIG12dGVzdF9mb28oYSwgYiwgYykgQVMgVkFMVUVTKDEsIDIsIDMpOwogQ1JFQVRF IE1BVEVSSUFMSVpFRCBWSUVXIG12dGVzdF9tdiBBUyBTRUxFQ1QgKiBGUk9NIG12dGVzdF9mb287 Ci0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --000000000000f7896a064de105dd Content-Type: application/octet-stream; name="0005-Fix-REFRESH-MATERIALIZED-VIEW-CONCURRENTLY-performance_bug2.patch" Content-Disposition: attachment; filename="0005-Fix-REFRESH-MATERIALIZED-VIEW-CONCURRENTLY-performance_bug2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn6msa9i1 RnJvbSAxNWZiNzY2ZWU2Y2Y3MjQ1MDkyZmFiZDdjNTA2Yjg4MGY5ZjBiNmI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzcG9vbmRsYSA8c19wb29uZGxhQGFwcGxlLmNvbT4KRGF0ZTog TW9uLCAyIE1hciAyMDI2IDExOjIzOjE3IC0wODAwClN1YmplY3Q6IFtQQVRDSCB2NV0gRml4IFJF RlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgQ09OQ1VSUkVOVExZIHBlcmZvcm1hbmNlCiB3aXRoIG51 bGxhYmxlIGluZGV4ZWQgY29sdW1ucwoKV2hlbiBhIG1hdGVyaWFsaXplZCB2aWV3IGhhcyBhIHVu aXF1ZSBpbmRleCBvbiBhIG51bGxhYmxlIGNvbHVtbiwgdGhlIGpvaW4KY29uZGl0aW9uIHVzZWQg dG8gZGV0ZWN0IGNoYW5nZXMgaW5jbHVkZWQgTlVMTCA9IE5VTEwgY29tcGFyaXNvbnMgd2hpY2gK ZXZhbHVhdGUgdG8gTlVMTCAoZmFsc2UpLCBjYXVzaW5nIGV2ZXJ5IHJvdyB3aXRoIGEgTlVMTCBp bmRleGVkIHZhbHVlIHRvCmFwcGVhciBhcyBjaGFuZ2VkIG9uIGV2ZXJ5IENPTkNVUlJFTlRMWSBy ZWZyZXNoIGV2ZW4gd2hlbiB0aGUgZGF0YSB3YXMKdW5jaGFuZ2VkLgoKVGhlIGZpeCBza2lwcyBu dWxsYWJsZSBjb2x1bW5zIGZyb20gdGhlIHBlci1jb2x1bW4gam9pbiBjb25kaXRpb25zIHdoZW4g dGhlCmluZGV4IGhhcyBhdCBsZWFzdCBvbmUgTk9UIE5VTEwgY29sdW1uLiAgVGhlIE5PVCBOVUxM IGNvbHVtbihzKSBhcmUgc3VmZmljaWVudAp0byBpZGVudGlmeSBtYXRjaGluZyByb3dzIHVuaXF1 ZWx5LCBzbyBvbWl0dGluZyB0aGUgbnVsbGFibGUgb25lcyBhdm9pZHMgdGhlCnVubmVjZXNzYXJ5 IE5VTEwgPSBOVUxMIGNvbXBhcmlzb25zLiAgVGhlIHJlY29yZCBlcXVhbGl0eSBvcGVyYXRvciAo Kj0pLAphcHBlbmRlZCB0byB0aGUgam9pbiBjb25kaXRpb24gdW5jb25kaXRpb25hbGx5LCBoYW5k bGVzIGFsbCBjb2x1bW5zIGluY2x1ZGluZwpudWxsYWJsZSBvbmVzIGFuZCBlbnN1cmVzIGNoYW5n ZWQgcm93cyBhcmUgc3RpbGwgZGV0ZWN0ZWQgY29ycmVjdGx5LgoKV2hlbiBhbGwgY29sdW1ucyBv ZiBhIHVuaXF1ZSBpbmRleCBhcmUgbnVsbGFibGUsIG5vIGNvbHVtbnMgYXJlIHNraXBwZWQuClJl bHlpbmcgb24gKj0gYWxvbmUgaW4gdGhhdCBjYXNlIHdvdWxkIGJlIGluY29ycmVjdDogKj0gdHJl YXRzIE5VTEwgYXMgZXF1YWwKdG8gTlVMTCwgd2hpY2ggY2FuIGNhdXNlIGpvaW4gYW1iaWd1aXR5 IG9yIHNpbGVudCBkYXRhIGxvc3Mgd2hlbiByb3dzIGNvbnRhaW4KYWxsLW51bGwgdmFsdWVzLiAg RmFsbGluZyBiYWNrIHRvIGluY2x1ZGluZyBhbGwgY29sdW1ucyBwcmVzZXJ2ZXMgdGhlIG9yaWdp bmFsCihzbG93ZXIgYnV0IGNvcnJlY3QpIGJlaGF2aW9yIGZvciB0aGF0IGVkZ2UgY2FzZS4KCkFk ZGVkIHJlZ3Jlc3Npb24gdGVzdHMgY292ZXJpbmcgYm90aCB0aGUgb3B0aW1pemF0aW9uIHBhdGgg KGluZGV4IHdpdGggYXQKbGVhc3Qgb25lIE5PVCBOVUxMIGNvbHVtbikgYW5kIHRoZSBmYWxsYmFj ayBwYXRoIChhbGwtbnVsbGFibGUgaW5kZXgpLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21h dHZpZXcuYyAgICAgICAgfCA2MCArKysrKysrKysrKysrKysrKysrKysrKysrLS0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvbWF0dmlldy5vdXQgfCAyOSArKysrKysrKysrKysrCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9tYXR2aWV3LnNxbCAgICAgIHwgMjQgKysrKysrKysrKysKIDMgZmlsZXMg Y2hhbmdlZCwgMTEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0 dmlldy5jCmluZGV4IDgxYTU1YTMzZWYyLi5iMGQ3YzU5NDQ0YSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYwpAQCAtNjAyLDYgKzYwMiw3IEBAIHJlZnJlc2hfYnlfbWF0Y2hfbWVyZ2UoT2lkIG1hdHZp ZXdPaWQsIE9pZCB0ZW1wT2lkLCBPaWQgcmVsb3duZXIsCiAJY2hhcgkgICAqbnNwOwogCVR1cGxl RGVzYwl0dXBkZXNjOwogCWJvb2wJCWZvdW5kVW5pcXVlSW5kZXg7CisJYm9vbAkJYWRkZWRBbnlR dWFsczsKIAlMaXN0CSAgICppbmRleG9pZGxpc3Q7CiAJTGlzdENlbGwgICAqaW5kZXhvaWRzY2Fu OwogCWludDE2CQlyZWxuYXR0czsKQEAgLTcxNSw2ICs3MTYsNyBAQCByZWZyZXNoX2J5X21hdGNo X21lcmdlKE9pZCBtYXR2aWV3T2lkLCBPaWQgdGVtcE9pZCwgT2lkIHJlbG93bmVyLAogCXR1cGRl c2MgPSBtYXR2aWV3UmVsLT5yZF9hdHQ7CiAJb3BVc2VkRm9yUXVhbCA9IHBhbGxvYzBfYXJyYXko T2lkLCByZWxuYXR0cyk7CiAJZm91bmRVbmlxdWVJbmRleCA9IGZhbHNlOworCWFkZGVkQW55UXVh bHMgPSBmYWxzZTsKIAogCWluZGV4b2lkbGlzdCA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KG1hdHZp ZXdSZWwpOwogCkBAIC03MzEsNiArNzMzLDkgQEAgcmVmcmVzaF9ieV9tYXRjaF9tZXJnZShPaWQg bWF0dmlld09pZCwgT2lkIHRlbXBPaWQsIE9pZCByZWxvd25lciwKIAkJCW9pZHZlY3RvciAgKmlu ZGNsYXNzOwogCQkJRGF0dW0JCWluZGNsYXNzRGF0dW07CiAJCQlpbnQJCQlpOworCQkJYm9vbAkJ aW5kZXhfaGFzX25vbm51bGw7CisKKwkJCWZvdW5kVW5pcXVlSW5kZXggPSB0cnVlOwogCiAJCQkv KiBNdXN0IGdldCBpbmRjbGFzcyB0aGUgaGFyZCB3YXkuICovCiAJCQlpbmRjbGFzc0RhdHVtID0g U3lzQ2FjaGVHZXRBdHRyTm90TnVsbChJTkRFWFJFTElELApAQCAtNzM4LDYgKzc0MywyOSBAQCBy ZWZyZXNoX2J5X21hdGNoX21lcmdlKE9pZCBtYXR2aWV3T2lkLCBPaWQgdGVtcE9pZCwgT2lkIHJl bG93bmVyLAogCQkJCQkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRjbGFzcyk7CiAJCQlpbmRj bGFzcyA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNsYXNzRGF0dW0pOwogCisJ CQkvKgorCQkJICogUHJlLXNjYW46IGNoZWNrIHdoZXRoZXIgdGhpcyBpbmRleCBoYXMgYXQgbGVh c3Qgb25lIE5PVCBOVUxMCisJCQkgKiBjb2x1bW4uICBJZiBpdCBkb2VzLCB3ZSBjYW4gc2FmZWx5 IHNraXAgbnVsbGFibGUgY29sdW1ucyBpbgorCQkJICogdGhlIGpvaW4gY29uZGl0aW9uIGJlbG93 ICh0aGUgTk9UIE5VTEwgY29sdW1uKHMpIHVuaXF1ZWx5CisJCQkgKiBpZGVudGlmeSByb3dzLCBz byBvbWl0dGluZyBudWxsYWJsZSBjb2x1bW5zIGRvZXMgbm90IGludHJvZHVjZQorCQkJICogam9p biBhbWJpZ3VpdHkpLiAgSWYgYWxsIGNvbHVtbnMgYXJlIG51bGxhYmxlIHdlIG11c3QgaW5jbHVk ZQorCQkJICogYWxsIG9mIHRoZW0gdG8gcHJlc2VydmUgY29ycmVjdG5lc3M6IHNraXBwaW5nIGV2 ZXJ5dGhpbmcgYW5kCisJCQkgKiByZWx5aW5nIG9uICo9IGFsb25lIGNhbiBjYXVzZSBqb2luIGFt YmlndWl0eSBvciBkYXRhIGxvc3MKKwkJCSAqIGJlY2F1c2UgKj0gdHJlYXRzIE5VTEwgYXMgZXF1 YWwgdG8gTlVMTC4KKwkJCSAqLworCQkJaW5kZXhfaGFzX25vbm51bGwgPSBmYWxzZTsKKwkJCWZv ciAoaSA9IDA7IGkgPCBpbmRua2V5YXR0czsgaSsrKQorCQkJeworCQkJCUZvcm1fcGdfYXR0cmli dXRlIGF0dHJfY2hlY2sgPQorCQkJCQlUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGluZGV4U3RydWN0 LT5pbmRrZXkudmFsdWVzW2ldIC0gMSk7CisKKwkJCQlpZiAoYXR0cl9jaGVjay0+YXR0bm90bnVs bCkKKwkJCQl7CisJCQkJCWluZGV4X2hhc19ub25udWxsID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJ CQkJfQorCQkJfQorCiAJCQkvKiBBZGQgcXVhbHMgZm9yIGFsbCBjb2x1bW5zIGZyb20gdGhpcyBp bmRleC4gKi8KIAkJCWZvciAoaSA9IDA7IGkgPCBpbmRua2V5YXR0czsgaSsrKQogCQkJewpAQCAt NzUzLDYgKzc4MSwyNCBAQCByZWZyZXNoX2J5X21hdGNoX21lcmdlKE9pZCBtYXR2aWV3T2lkLCBP aWQgdGVtcE9pZCwgT2lkIHJlbG93bmVyLAogCQkJCWNvbnN0IGNoYXIgKmxlZnRvcDsKIAkJCQlj b25zdCBjaGFyICpyaWdodG9wOwogCisJCQkJLyoKKwkJCQkgKiBTa2lwIG51bGxhYmxlIGNvbHVt bnMgd2hlbiB0aGlzIGluZGV4IGhhcyBhdCBsZWFzdCBvbmUgTk9UCisJCQkJICogTlVMTCBjb2x1 bW4uICBOdWxsYWJsZSBjb2x1bW5zIGluIHVuaXF1ZSBpbmRleGVzIGFsbG93CisJCQkJICogbXVs dGlwbGUgTlVMTHMgYW5kIE5VTEwgPSBOVUxMIGV2YWx1YXRlcyB0byBOVUxMIChmYWxzZSkgaW4K KwkJCQkgKiB0aGUgam9pbiwgbWFraW5nIHVuY2hhbmdlZCBOVUxMLWNvbnRhaW5pbmcgcm93cyBh cHBlYXIgYXMKKwkJCQkgKiBjaGFuZ2VkIG9uIGV2ZXJ5IHJlZnJlc2guICBUaGUgTk9UIE5VTEwg Y29sdW1uKHMpIGFyZQorCQkJCSAqIHN1ZmZpY2llbnQgdG8gaWRlbnRpZnkgbWF0Y2hpbmcgcm93 cywgc28gd2UgY2FuIHNhZmVseSBvbWl0CisJCQkJICogbnVsbGFibGUgb25lcyB3aXRob3V0IGlu dHJvZHVjaW5nIGpvaW4gYW1iaWd1aXR5LgorCQkJCSAqCisJCQkJICogV2hlbiBhbGwgY29sdW1u cyBhcmUgbnVsbGFibGUgd2UgbXVzdCBub3Qgc2tpcCBhbnkgb2YgdGhlbToKKwkJCQkgKiB3aXRo IG5vIHBlci1jb2x1bW4gY29uZGl0aW9ucyBvbmx5ICo9IHdvdWxkIHJlbWFpbiwgd2hpY2gKKwkJ CQkgKiBjYW4gY2F1c2Ugam9pbiBhbWJpZ3VpdHkgb3IgZGF0YSBsb3NzIChzZWUgcHJlLXNjYW4g Y29tbWVudAorCQkJCSAqIGFib3ZlKS4gIFdlIGZhbGwgYmFjayB0byBpbmNsdWRpbmcgYWxsIGNv bHVtbnMgc28gdGhlIGpvaW4KKwkJCQkgKiBiZWhhdmVzIGFzIGluIHRoZSBvcmlnaW5hbCBjb2Rl LgorCQkJCSAqLworCQkJCWlmIChpbmRleF9oYXNfbm9ubnVsbCAmJiAhYXR0ci0+YXR0bm90bnVs bCkKKwkJCQkJY29udGludWU7CisKIAkJCQkvKgogCQkJCSAqIElkZW50aWZ5IHRoZSBlcXVhbGl0 eSBvcGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbmRleAogCQkJCSAqIGNvbHVtbi4gIEZp cnN0IHdlIG5lZWQgdG8gbG9vayB1cCB0aGUgY29sdW1uJ3Mgb3BjbGFzcy4KQEAgLTc4OCw3ICs4 MzQsNyBAQCByZWZyZXNoX2J5X21hdGNoX21lcmdlKE9pZCBtYXR2aWV3T2lkLCBPaWQgdGVtcE9p ZCwgT2lkIHJlbG93bmVyLAogCQkJCS8qCiAJCQkJICogQWN0dWFsbHkgYWRkIHRoZSBxdWFsLCBB TkRlZCB3aXRoIGFueSBvdGhlcnMuCiAJCQkJICovCi0JCQkJaWYgKGZvdW5kVW5pcXVlSW5kZXgp CisJCQkJaWYgKGFkZGVkQW55UXVhbHMpCiAJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1 ZXJ5YnVmLCAiIEFORCAiKTsKIAogCQkJCWxlZnRvcCA9IHF1b3RlX3F1YWxpZmllZF9pZGVudGlm aWVyKCJuZXdkYXRhIiwKQEAgLTgwMSw3ICs4NDcsNyBAQCByZWZyZXNoX2J5X21hdGNoX21lcmdl KE9pZCBtYXR2aWV3T2lkLCBPaWQgdGVtcE9pZCwgT2lkIHJlbG93bmVyLAogCQkJCQkJCQkJCSBv cCwKIAkJCQkJCQkJCQkgcmlnaHRvcCwgYXR0cnR5cGUpOwogCi0JCQkJZm91bmRVbmlxdWVJbmRl eCA9IHRydWU7CisJCQkJYWRkZWRBbnlRdWFscyA9IHRydWU7CiAJCQl9CiAJCX0KIApAQCAtODI2 LDggKzg3MiwxNiBAQCByZWZyZXNoX2J5X21hdGNoX21lcmdlKE9pZCBtYXR2aWV3T2lkLCBPaWQg dGVtcE9pZCwgT2lkIHJlbG93bmVyLAogCQkJCWVycm1zZygiY291bGQgbm90IGZpbmQgc3VpdGFi bGUgdW5pcXVlIGluZGV4IG9uIG1hdGVyaWFsaXplZCB2aWV3IFwiJXNcIiIsCiAJCQkJCSAgIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKG1hdHZpZXdSZWwpKSk7CiAKKwkvKgorCSAqIFRoZSByZWNv cmQgZXF1YWxpdHkgb3BlcmF0b3IgKCo9KSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGpvaW4K KwkgKiBwcmVkaWNhdGUuICBJdCBoYW5kbGVzIGFsbCBjb2x1bW5zIGNvcnJlY3RseSBpbmNsdWRp bmcgbnVsbGFibGUgb25lcworCSAqIHRoYXQgd2VyZSBza2lwcGVkIGFib3ZlLCBzaW5jZSAqPSAg dHJlYXRzIE5VTEwgYXMgZXF1YWwgdG8gTlVMTC4KKwkgKi8KKwlpZiAoYWRkZWRBbnlRdWFscykK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcXVlcnlidWYsICIgQU5EICIpOworCiAJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmcXVlcnlidWYsCi0JCQkJCQkgICAiIEFORCBuZXdkYXRhLiogT1BF UkFUT1IocGdfY2F0YWxvZy4qPSkgbXYuKikgIgorCQkJCQkJICAgIm5ld2RhdGEuKiBPUEVSQVRP UihwZ19jYXRhbG9nLio9KSBtdi4qKSAiCiAJCQkJCQkgICAiV0hFUkUgbmV3ZGF0YS4qIElTIE5V TEwgT1IgbXYuKiBJUyBOVUxMICIKIAkJCQkJCSAgICJPUkRFUiBCWSB0aWQiKTsKIApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tYXR2aWV3Lm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvbWF0dmlldy5vdXQKaW5kZXggMDM1NTcyMGRmYzYuLjk4ZGIxZTA4MTg1 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21hdHZpZXcub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWF0dmlldy5vdXQKQEAgLTQxOCw2ICs0MTgsMzUg QEAgQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG12dGVzdF9tdjIgQVMgU0VMRUNUICogRlJPTSBt dnRlc3RfbXYxCiAgIFdIRVJFIGNvbDEgPSAoU0VMRUNUIExFQVNUKGNvbDEpIEZST00gbXZ0ZXN0 X212MSkgV0lUSCBOTyBEQVRBOwogRFJPUCBNQVRFUklBTElaRUQgVklFVyBtdnRlc3RfbXYxIENB U0NBREU7CiBOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIG1hdGVyaWFsaXplZCB2aWV3IG12dGVz dF9tdjIKKy0tIHRlc3QgdGhhdCBudWxsYWJsZSBpbmRleGVkIGNvbHVtbnMgYXJlIHNraXBwZWQg aW4gdGhlIGpvaW4gY29uZGl0aW9uIHdoZW4KKy0tIHRoZSBpbmRleCBoYXMgYXQgbGVhc3Qgb25l IE5PVCBOVUxMIGNvbHVtbi4gIFRoZSBOT1QgTlVMTCBjb2x1bW4gYWxvbmUKKy0tIGlkZW50aWZp ZXMgbWF0Y2hpbmcgcm93cywgc28gdGhlIG51bGxhYmxlIGNvbHVtbiBkb2VzIG5vdCBuZWVkIHRv IGJlIGluCistLSB0aGUgam9pbiBhbmQgaXRzIE5VTEwgdmFsdWVzIGRvIG5vdCBjYXVzZSB1bm5l Y2Vzc2FyeSBERUxFVEUrSU5TRVJUIGNodXJuLgorQ1JFQVRFIFRBQkxFIG12dGVzdF9mb28oYSBp bnQgTk9UIE5VTEwsIGIgaW50KTsKK0lOU0VSVCBJTlRPIG12dGVzdF9mb28gVkFMVUVTKDEsIE5V TEwpLCAoMiwgTlVMTCksICgzLCBOVUxMKTsKK0NSRUFURSBNQVRFUklBTElaRUQgVklFVyBtdnRl c3RfbXYgQVMgU0VMRUNUICogRlJPTSBtdnRlc3RfZm9vOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBP TiBtdnRlc3RfbXYoYSk7ICAtLSBhIGlzIE5PVCBOVUxMLCBiIGlzIG51bGxhYmxlCistLSBBZGQg YSBzZWNvbmQgaW5kZXggb24gdGhlIG51bGxhYmxlIGNvbHVtbiBhbG9uZSB0byBtYWtlIGl0IGV4 ZXJjaXNlIHRoZQorLS0gYWxsLW51bGxhYmxlIGZhbGxiYWNrIHBhdGggdGhyb3VnaCB0aGUgcHJl LXNjYW4uCitDUkVBVEUgVU5JUVVFIElOREVYIE9OIG12dGVzdF9tdihiKTsKK1JFRlJFU0ggTUFU RVJJQUxJWkVEIFZJRVcgQ09OQ1VSUkVOVExZIG12dGVzdF9tdjsgIC0tIG11c3Qgc3VjY2VlZAor RFJPUCBUQUJMRSBtdnRlc3RfZm9vIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRv IG1hdGVyaWFsaXplZCB2aWV3IG12dGVzdF9tdgorLS0gdGVzdCB0aGF0IENPTkNVUlJFTlRMWSBz dGlsbCB3b3JrcyB3aGVuIGFsbCBpbmRleGVkIGNvbHVtbnMgYXJlIG51bGxhYmxlCistLSAoZmFs bHMgYmFjayB0byBpbmNsdWRpbmcgYWxsIGNvbHVtbnMsIHdoaWNoIGlzIHNsb3dlciBidXQgY29y cmVjdCkuCitDUkVBVEUgVEFCTEUgbXZ0ZXN0X2ZvbyhhIGludCwgYiBpbnQpOworSU5TRVJUIElO VE8gbXZ0ZXN0X2ZvbyBWQUxVRVMoTlVMTCwgMSk7CitDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcg bXZ0ZXN0X212IEFTIFNFTEVDVCAqIEZST00gbXZ0ZXN0X2ZvbzsKK0NSRUFURSBVTklRVUUgSU5E RVggT04gbXZ0ZXN0X212KGEpOyAgLS0gYWxsLW51bGxhYmxlIGluZGV4CitSRUZSRVNIIE1BVEVS SUFMSVpFRCBWSUVXIENPTkNVUlJFTlRMWSBtdnRlc3RfbXY7ICAtLSBtdXN0IHN1Y2NlZWQKK1NF TEVDVCAqIEZST00gbXZ0ZXN0X212OworIGEgfCBiIAorLS0tKy0tLQorICAgfCAxCisoMSByb3cp CisKK0RST1AgVEFCTEUgbXZ0ZXN0X2ZvbyBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRl cyB0byBtYXRlcmlhbGl6ZWQgdmlldyBtdnRlc3RfbXYKIC0tIG1ha2Ugc3VyZSB0aGF0IHR5cGVz IHdpdGggdW51c3VhbCBlcXVhbGl0eSB0ZXN0cyB3b3JrCiBDUkVBVEUgVEFCTEUgbXZ0ZXN0X2Jv eGVzIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGIgYm94KTsKIElOU0VSVCBJTlRPIG12dGVzdF9i b3hlcyAoYikgVkFMVUVTCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tYXR2aWV3 LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21hdHZpZXcuc3FsCmluZGV4IDkzNDQyNmI5YWU4 Li42MjQwNTZhNGRjNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWF0dmlldy5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWF0dmlldy5zcWwKQEAgLTE1Myw2ICsxNTMs MzAgQEAgQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIG12dGVzdF9tdjIgQVMgU0VMRUNUICogRlJP TSBtdnRlc3RfbXYxCiAgIFdIRVJFIGNvbDEgPSAoU0VMRUNUIExFQVNUKGNvbDEpIEZST00gbXZ0 ZXN0X212MSkgV0lUSCBOTyBEQVRBOwogRFJPUCBNQVRFUklBTElaRUQgVklFVyBtdnRlc3RfbXYx IENBU0NBREU7CiAKKy0tIHRlc3QgdGhhdCBudWxsYWJsZSBpbmRleGVkIGNvbHVtbnMgYXJlIHNr aXBwZWQgaW4gdGhlIGpvaW4gY29uZGl0aW9uIHdoZW4KKy0tIHRoZSBpbmRleCBoYXMgYXQgbGVh c3Qgb25lIE5PVCBOVUxMIGNvbHVtbi4gIFRoZSBOT1QgTlVMTCBjb2x1bW4gYWxvbmUKKy0tIGlk ZW50aWZpZXMgbWF0Y2hpbmcgcm93cywgc28gdGhlIG51bGxhYmxlIGNvbHVtbiBkb2VzIG5vdCBu ZWVkIHRvIGJlIGluCistLSB0aGUgam9pbiBhbmQgaXRzIE5VTEwgdmFsdWVzIGRvIG5vdCBjYXVz ZSB1bm5lY2Vzc2FyeSBERUxFVEUrSU5TRVJUIGNodXJuLgorQ1JFQVRFIFRBQkxFIG12dGVzdF9m b28oYSBpbnQgTk9UIE5VTEwsIGIgaW50KTsKK0lOU0VSVCBJTlRPIG12dGVzdF9mb28gVkFMVUVT KDEsIE5VTEwpLCAoMiwgTlVMTCksICgzLCBOVUxMKTsKK0NSRUFURSBNQVRFUklBTElaRUQgVklF VyBtdnRlc3RfbXYgQVMgU0VMRUNUICogRlJPTSBtdnRlc3RfZm9vOworQ1JFQVRFIFVOSVFVRSBJ TkRFWCBPTiBtdnRlc3RfbXYoYSk7ICAtLSBhIGlzIE5PVCBOVUxMLCBiIGlzIG51bGxhYmxlCist LSBBZGQgYSBzZWNvbmQgaW5kZXggb24gdGhlIG51bGxhYmxlIGNvbHVtbiBhbG9uZSB0byBtYWtl IGl0IGV4ZXJjaXNlIHRoZQorLS0gYWxsLW51bGxhYmxlIGZhbGxiYWNrIHBhdGggdGhyb3VnaCB0 aGUgcHJlLXNjYW4uCitDUkVBVEUgVU5JUVVFIElOREVYIE9OIG12dGVzdF9tdihiKTsKK1JFRlJF U0ggTUFURVJJQUxJWkVEIFZJRVcgQ09OQ1VSUkVOVExZIG12dGVzdF9tdjsgIC0tIG11c3Qgc3Vj Y2VlZAorRFJPUCBUQUJMRSBtdnRlc3RfZm9vIENBU0NBREU7CisKKy0tIHRlc3QgdGhhdCBDT05D VVJSRU5UTFkgc3RpbGwgd29ya3Mgd2hlbiBhbGwgaW5kZXhlZCBjb2x1bW5zIGFyZSBudWxsYWJs ZQorLS0gKGZhbGxzIGJhY2sgdG8gaW5jbHVkaW5nIGFsbCBjb2x1bW5zLCB3aGljaCBpcyBzbG93 ZXIgYnV0IGNvcnJlY3QpLgorQ1JFQVRFIFRBQkxFIG12dGVzdF9mb28oYSBpbnQsIGIgaW50KTsK K0lOU0VSVCBJTlRPIG12dGVzdF9mb28gVkFMVUVTKE5VTEwsIDEpOworQ1JFQVRFIE1BVEVSSUFM SVpFRCBWSUVXIG12dGVzdF9tdiBBUyBTRUxFQ1QgKiBGUk9NIG12dGVzdF9mb287CitDUkVBVEUg VU5JUVVFIElOREVYIE9OIG12dGVzdF9tdihhKTsgIC0tIGFsbC1udWxsYWJsZSBpbmRleAorUkVG UkVTSCBNQVRFUklBTElaRUQgVklFVyBDT05DVVJSRU5UTFkgbXZ0ZXN0X212OyAgLS0gbXVzdCBz dWNjZWVkCitTRUxFQ1QgKiBGUk9NIG12dGVzdF9tdjsKK0RST1AgVEFCTEUgbXZ0ZXN0X2ZvbyBD QVNDQURFOworCiAtLSBtYWtlIHN1cmUgdGhhdCB0eXBlcyB3aXRoIHVudXN1YWwgZXF1YWxpdHkg dGVzdHMgd29yawogQ1JFQVRFIFRBQkxFIG12dGVzdF9ib3hlcyAoaWQgc2VyaWFsIHByaW1hcnkg a2V5LCBiIGJveCk7CiBJTlNFUlQgSU5UTyBtdnRlc3RfYm94ZXMgKGIpIFZBTFVFUwotLSAKMi4z OS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000f7896a064de105dd--