Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p0KjD-0008BM-5F for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Nov 2022 10:54:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p0KjB-0000UO-Tv for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Nov 2022 10:54:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p0KjB-0000TB-Hx for pgsql-hackers@lists.postgresql.org; Wed, 30 Nov 2022 10:54:09 +0000 Received: from mail-yb1-xb2f.google.com ([2607:f8b0:4864:20::b2f]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p0Kj6-0006zv-Fp for pgsql-hackers@lists.postgresql.org; Wed, 30 Nov 2022 10:54:06 +0000 Received: by mail-yb1-xb2f.google.com with SMTP id n196so1049029yba.6 for ; Wed, 30 Nov 2022 02:54:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=yp5OqV/TOu5deAG4eS+NoR7C4t+jr5Dp0EWkT3koXBA=; b=FJcWz3e41G3GO1HYT867W/5+0ftVJcJ50IdQHsoMZdqJkQmFg2eLMfzzLvOpYzZ5iK 8Go+uwz00gy+sYxOL93FtOrhRh0IH3u3VfyF5nBA3tMi0yt6FvHunliRyDgg58XknvE6 hm5iflSOZIypmJBF7JE5cb4rOaL6b4y0bOAwTOyfSpI9bgmNvKI38Lm3eY4Im7f0D6K2 i9Fbs/tDlyyk6jMHSQNx4RoFEj330YOSPdDp/Fgja/SjLbZeBTXUg6VoQ8fTlDxKv8Kp JdUsa9ufxK/RjLwvXD1R5D6MSzHpXFkumnf6f86uc/i7yn7mgW0HjuuQX2MytJMD+l60 iPKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=yp5OqV/TOu5deAG4eS+NoR7C4t+jr5Dp0EWkT3koXBA=; b=pPSEuECmIP/Y6Vu6UvsVr0Y4TE/3YhQPe5OIFIBCpltqvKvML75F0U7e8kdz60Z4OQ DtlDf+xI4VqGgCYPA2gYyWlzMuYTEFqgrT7uB9Kftu0dqedpTN2QOt2PN43LtLPnHfpj k+tT1alUXe3SIQ0y9zTKj8T96ET3AeS188CY8aT47uI2K1V7FxEaH/Ul7XVrY5OaGIdX f5OMc87L6zpw/vpkZH681qDvfq1BbJHDnT/39Ks9ci3IE7fXJ+brS05pknrZj2OIN5+n //UzxqPAo7OSnlZ4wUfJ9dJtR/XjrLmUAFT7jdbZ4mMrS6hCBByk6fSbAkr9eH6jnFef XFXA== X-Gm-Message-State: ANoB5pnhRR+bVPnOhna17dvMpnEMverfC5suwu3rPeAxW7GkiSRx1xmX qbEer4utbXeWj5ZqG521g0iDChigZ7YixVduRJM= X-Google-Smtp-Source: AA0mqf4Ywe7gactfEtyPohXTCThVdI+kH/nOtDwzjcnrotdaWBZEaLh25CXuGto31LfuCTfrOgY+5rq7PfbIvRhcjmc= X-Received: by 2002:a25:4184:0:b0:6f9:e3a0:7e9c with SMTP id o126-20020a254184000000b006f9e3a07e9cmr4000273yba.495.1669805641674; Wed, 30 Nov 2022 02:54:01 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Amit Kapila Date: Wed, 30 Nov 2022 16:23:50 +0530 Message-ID: Subject: Re: Perform streaming logical transactions by background workers and parallel apply To: "houzj.fnst@fujitsu.com" Cc: Masahiko Sawada , "wangw.fnst@fujitsu.com" , Peter Smith , Dilip Kumar , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000001dcca705eeadecf3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001dcca705eeadecf3 Content-Type: text/plain; charset="UTF-8" On Tue, Nov 29, 2022 at 10:18 AM houzj.fnst@fujitsu.com wrote: > > Attach the new version patch which addressed all comments. > Some comments on v53-0002* ======================== 1. I think testing the scenario where the shm_mq buffer is full between the leader and parallel apply worker would require a large amount of data and then also there is no guarantee. How about having a developer GUC [1] force_apply_serialize which allows us to serialize the changes and only after commit the parallel apply worker would be allowed to apply it? I am not sure if we can reliably test the serialization of partial changes (like some changes have been already sent to parallel apply worker and then serialization happens) but at least we can test the serialization of complete xacts and their execution via parallel apply worker. 2. + /* + * The stream lock is released when processing changes in a + * streaming block, so the leader needs to acquire the lock here + * before entering PARTIAL_SERIALIZE mode to ensure that the + * parallel apply worker will wait for the leader to release the + * stream lock. + */ + if (in_streamed_transaction && + action != LOGICAL_REP_MSG_STREAM_STOP) + { + pa_lock_stream(winfo->shared->xid, AccessExclusiveLock); This comment is not completely correct because we can even acquire the lock for the very streaming chunk. This check will work but doesn't appear future-proof or at least not very easy to understand though I don't have a better suggestion at this stage. Can we think of a better check here? 3. I have modified a few comments in v53-0002* patch and the incremental patch for the same is attached. [1] - https://www.postgresql.org/docs/devel/runtime-config-developer.html -- With Regards, Amit Kapila. --0000000000001dcca705eeadecf3 Content-Type: application/octet-stream; name="changes_amit_v53_0002.patch" Content-Disposition: attachment; filename="changes_amit_v53_0002.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lb3j5ks30 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxl bHdvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVs d29ya2VyLmMKaW5kZXggM2FjZjlkNWZiOS4uMWZjNjJjZGJhMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTc0 LDEwICs3NCwxMCBAQAogICogbWVzc2FnZXMsIGFuZCB0aGlzIHdhaXQgZG9lc24ndCBhcHBlYXIg aW4gbG1nci4KICAqCiAgKiBUbyByZXNvbHZlIHRoaXMgaXNzdWUsIHdlIHVzZSBub24tYmxvY2tp bmcgd3JpdGUgYW5kIHdhaXQgd2l0aCBhIHRpbWVvdXQuIElmCi0gKiB0aW1lb3V0IGlzIGV4Y2Vl ZGVkLCB0aGUgTEEgd2lsbCBzZXJpYWxpemUgdGhlIG1lc3NhZ2UgdG8gYSBmaWxlIGFuZAorICog dGhlIHRpbWVvdXQgaXMgZXhjZWVkZWQsIHRoZSBMQSB3aWxsIHNlcmlhbGl6ZSB0aGUgbWVzc2Fn ZSB0byBhIGZpbGUgYW5kCiAgKiBpbmRpY2F0ZSBQQS0yIHRoYXQgaXQgbmVlZHMgdG8gcmVhZCB0 aGF0IGZpbGUgZm9yIHRoZSByZW1haW5pbmcgbWVzc2FnZXMuCiAgKiBUaGVuIExBIHdpbGwgc3Rh cnQgd2FpdGluZyBmb3IgY29tbWl0IHdoaWNoIHdpbGwgZGV0ZWN0IGRlYWRsb2NrIGlmIGFueS4K LSAqIChTZWUgcGFfc2VuZF9kYXRhKCkgYW5kIHR5cGVkZWYgZW51bSBUcmFuc0FwcGx5QWN0aW9u KQorICogKFNlZSBwYV9zZW5kX2RhdGEoKSBhbmQgZW51bSBUcmFuc0FwcGx5QWN0aW9uKQogICoK ICAqIDQpIExvY2sgdHlwZQogICoKQEAgLTExNDcsOSArMTE0NywxMCBAQCBwYV9zZW5kX2RhdGEo UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRlcywgY29uc3Qgdm9pZCAq ZGF0YSkKIAkJCUxvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbjsKIAogCQkJLyoKLQkJCSAqIFRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgbWlnaHQgYmUgc3R1Y2sgZm9yIHNvbWUgcmVhc29uLCBzbwot CQkJICogc3RvcCBzZW5kaW5nIGRhdGEgZGlyZWN0bHkgdG8gaXQgYW5kIHN0YXJ0IHRvIHNlcmlh bGl6ZSBkYXRhIHRvCi0JCQkgKiBmaWxlcyBpbnN0ZWFkLgorCQkJICogVGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlciBjb3VsZCBiZSBzdHVjayBmb3Igc29tZSByZWFzb24gKHNheQorCQkJICogd2Fp dGluZyBvbiBzb21lIGxvY2sgYnkgb3RoZXIgYmFja2VuZCksIHNvIHN0b3AgdHJ5aW5nIHRvIHNl bmQKKwkJCSAqIGRhdGEgZGlyZWN0bHkgdG8gaXQgYW5kIGluc3RlYWQgc3RhcnQgdG8gc2VyaWFs aXplIGRhdGEgdG8KKwkJCSAqIGZpbGUgaW5zdGVhZC4KIAkJCSAqLwogCQkJd2luZm8tPnNlcmlh bGl6ZV9jaGFuZ2VzID0gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29y a2VyLmMKaW5kZXggYjVmYjc0NTcyZS4uYzUxZDkyYjY3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xMzMxLDcgKzEzMzEsNiBAQCBhcHBseV9oYW5kbGVf c3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCQkJICovCiAJCQlwYV91bmxvY2tfc3RyZWFt KHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CiAKLQkJCS8qIFNlbmQg U1RSRUFNIFBSRVBBUkUgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAqLwog CQkJaWYgKGFwcGx5X2FjdGlvbiA9PSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCkKIAkJ CQlwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CiAJCQllbHNlCkBAIC0xMzM5 LDYgKzEzMzgsMTAgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykK IAkJCQkJCQkJCQkJIExPR0lDQUxfUkVQX01TR19TVFJFQU1fUFJFUEFSRSwKIAkJCQkJCQkJCQkJ ICZvcmlnaW5hbF9tc2cpOwogCisJCQkvKgorCQkJICogSXQgaXMgcG9zc2libGUgdGhhdCB3aGls ZSBzZW5kaW5nIHRoaXMgY2hhbmdlIHRvIHBhcmFsbGVsIGFwcGx5CisJCQkgKiB3b3JrZXIgd2Ug bmVlZCB0byBzd2l0Y2ggdG8gc2VyaWFsaXplIG1vZGUuCisJCQkgKi8KIAkJCWlmICh3aW5mby0+ c2VyaWFsaXplX2NoYW5nZXMpCiAJCQkJcGFfc2V0X2ZpbGVzZXRfc3RhdGUod2luZm8tPnNoYXJl ZCwgRlNfUkVBRFkpOwogCkBAIC0xODQwLDYgKzE4NDMsMTAgQEAgYXBwbHlfaGFuZGxlX3N0cmVh bV9hYm9ydChTdHJpbmdJbmZvIHMpCiAKIAkJCWlmICh0b3BsZXZlbF94YWN0KQogCQkJeworCQkJ CS8qCisJCQkJICogSXQgaXMgcG9zc2libGUgdGhhdCB3aGlsZSBzZW5kaW5nIHRoaXMgY2hhbmdl IHRvIHBhcmFsbGVsIGFwcGx5CisJCQkJICogd29ya2VyIHdlIG5lZWQgdG8gc3dpdGNoIHRvIHNl cmlhbGl6ZSBtb2RlLgorCQkJCSAqLwogCQkJCWlmICh3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMp CiAJCQkJCXBhX3NldF9maWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsCiAJCQkJCQkJCQkJIEZT X1JFQURZKTsKQEAgLTIwNjIsMTMgKzIwNjksMTYgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21t aXQoU3RyaW5nSW5mbyBzKQogCQkJICovCiAJCQlwYV91bmxvY2tfc3RyZWFtKHhpZCwgQWNjZXNz RXhjbHVzaXZlTG9jayk7CiAKLQkJCS8qIFNlbmQgU1RSRUFNIENPTU1JVCBtZXNzYWdlIHRvIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCiAJCQlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5T X0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMKQogCQkJCXBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVu LCBzLT5kYXRhKTsKIAkJCWVsc2UKIAkJCQlzdHJlYW1fb3Blbl9hbmRfd3JpdGVfY2hhbmdlKHhp ZCwgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9DT01NSVQsCiAJCQkJCQkJCQkJCSAmb3JpZ2luYWxf bXNnKTsKIAorCQkJLyoKKwkJCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2hpbGUgc2VuZGluZyB0 aGlzIGNoYW5nZSB0byBwYXJhbGxlbCBhcHBseQorCQkJICogd29ya2VyIHdlIG5lZWQgdG8gc3dp dGNoIHRvIHNlcmlhbGl6ZSBtb2RlLgorCQkJICovCiAJCQlpZiAod2luZm8tPnNlcmlhbGl6ZV9j aGFuZ2VzKQogCQkJCXBhX3NldF9maWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsCiAJCQkJCQkJ CQkgRlNfUkVBRFkpOwo= --0000000000001dcca705eeadecf3--