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 1nVDpV-0002Mv-Kx for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Mar 2022 14:43:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nVDpU-00082J-F3 for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Mar 2022 14:43:48 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nVDpT-000829-Kv for pgsql-hackers@lists.postgresql.org; Fri, 18 Mar 2022 14:43:48 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nVDpQ-0003v6-6j for pgsql-hackers@postgresql.org; Fri, 18 Mar 2022 14:43:45 +0000 Received: by mail-lf1-x129.google.com with SMTP id bt26so14457223lfb.3 for ; Fri, 18 Mar 2022 07:43:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to:content-transfer-encoding; bh=njIrSgsB8cp8Tcefj6g2h7KYMFTpZD6O/gvlnq6NEz4=; b=ABr/myMjzorWiYk7wGGtEiHiLTBr1R+uCv97sqCgh8B5rRpw0YO2Ejck49qDddSr5M 8B3jbb5fQ4YZQiy2G4nCC5t3Get8gd8Hwrf6m0FO3Q85encDnsRLyKTMX1PMIUQ+WCg7 3Z0Udw/Qteh+X7oMjKeT60FJvjSzlyAK0UXGuW2hh4AQw/CAIkrylBlc9QhXj95KGN+3 rpdAVMMcUjkQp4rKIKLp0hJMiXVeJXuGuH5QxksSlXxeigNBT0g3eQix8SR5Wfj2fksS N4gzZ/wOCOBp6cBTFqp/6SfzDoFdJVMkRTaLFx9Qhey+rbpKHset79R0YZeSTS8cizcH 9mxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=njIrSgsB8cp8Tcefj6g2h7KYMFTpZD6O/gvlnq6NEz4=; b=tnkcibh7vZyZ609pD+pGnyk3C0R5SACqnAqn5hBtZMZhX66uiXUV6gLuiSwOb72Bsz K3BzzWkc41GqV9vkbeyVbqNPogSP6zuPD+u3RCoKAJ3FQGJfkenBzNgzt4WgkDMuEySr Wk3pfNmXrWSKmcV5IHjaFCvepKnoXAB9LuqbGIA4nPHDxWzz7H2K4uIy6fHnz9ZR43yF aKZXCdzBg6RMsyOcc3qBToN558lQhXQwXLblqvSD+ApRRqLEKpg4xq9Y4fAJQxniKuOy Ubm5GJp7uwS/lWCWDVvhDWWXwLz7XZ1SI9q6RSoleQyJOC2qaRJ9F02umyNpuOaMJrqQ yaZA== X-Gm-Message-State: AOAM5305azjSalby4h9fDkSlhZPEidkVLE3d/yMVwt8qQYG6CgCQI3f+ wlWO4536Aenrq/uyQg/7TL8moPQhHcaoGkevFLv532KGFM493qU7Lv/NiMb+aa+Xho+DPm8PE1+ /xOGdMoLioZegKUsQ9ST6rKRDHZsGyNg/7qpk3r7ZvwtE5ic0ajGeLH8cMpL3K6bbuD0zSCIr6Q J3ZP57J+cg51p4qx7SqrFfGwiPnRazC/JNvwj2 X-Google-Smtp-Source: ABdhPJy9TajWLLGaibGFkJazQwUDHxzKQDLaQ09p9s/mv/aFCkDiV6SRGSgKa1WNuaYhhYEK+a1BKw== X-Received: by 2002:a19:ac42:0:b0:448:1f15:4b18 with SMTP id r2-20020a19ac42000000b004481f154b18mr6138616lfc.32.1647614622211; Fri, 18 Mar 2022 07:43:42 -0700 (PDT) Received: from [10.137.0.17] (37-247-27-82.customers.ownit.se. [37.247.27.82]) by smtp.gmail.com with ESMTPSA id p8-20020a2ea408000000b00247e5087157sm967236ljn.101.2022.03.18.07.43.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 18 Mar 2022 07:43:41 -0700 (PDT) Message-ID: <3162f7f0-86ac-e3a9-dc55-0a660cb9bab1@enterprisedb.com> Date: Fri, 18 Mar 2022 15:43:41 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.2 Subject: Re: Column Filtering in Logical Replication Content-Language: en-US To: Amit Kapila Cc: "houzj.fnst@fujitsu.com" , Peter Eisentraut , Alvaro Herrera , Justin Pryzby , Rahila Syed , Peter Smith , pgsql-hackers , "shiy.fnst@fujitsu.com" References: <202201120041.p24wvsfcsope@alvherre.pgsql> <78b8d385-57cb-9a3f-cfe5-9f300f15eced@enterprisedb.com> <822a8e40-287c-59ff-0ea9-35eb759f4fe6@enterprisedb.com> <2b8471f9-3849-c91f-ef82-9181d4bca0a7@enterprisedb.com> <16e83ce3-8415-b732-37b2-c3329a2c13a1@enterprisedb.com> From: Tomas Vondra In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 3/18/22 06:52, Amit Kapila wrote: > On Fri, Mar 18, 2022 at 12:47 AM Tomas Vondra > wrote: >> >> I pushed the second fix. Interestingly enough, wrasse failed in the >> 013_partition test. I don't see how that could be caused by this >> particular commit, though - see the pgsql-committers thread [1]. >> > > I have a theory about what's going on here. I think this is due to a > test added in your previous commit c91f71b9dc. The newly added test > added hangs in tablesync because there was no apply worker to set the > state to SUBREL_STATE_CATCHUP which blocked tablesync workers from > proceeding. > > See below logs from pogona [1]. > 2022-03-18 01:33:15.190 CET [2551176][client > backend][3/74:0][013_partition.pl] LOG: statement: ALTER SUBSCRIPTION > sub2 SET PUBLICATION pub_lower_level, pub_all > 2022-03-18 01:33:15.354 CET [2551193][logical replication > worker][4/57:0][] LOG: logical replication apply worker for > subscription "sub2" has started > 2022-03-18 01:33:15.605 CET [2551176][client > backend][:0][013_partition.pl] LOG: disconnection: session time: > 0:00:00.415 user=bf database=postgres host=[local] > 2022-03-18 01:33:15.607 CET [2551209][logical replication > worker][3/76:0][] LOG: logical replication table synchronization > worker for subscription "sub2", table "tab4_1" has started > 2022-03-18 01:33:15.609 CET [2551211][logical replication > worker][5/11:0][] LOG: logical replication table synchronization > worker for subscription "sub2", table "tab3" has started > 2022-03-18 01:33:15.617 CET [2551193][logical replication > worker][4/62:0][] LOG: logical replication apply worker for > subscription "sub2" will restart because of a parameter change > > You will notice that the apply worker is never restarted after a > parameter change. The reason was that the particular subscription > reaches the limit of max_sync_workers_per_subscription after which we > don't allow to restart the apply worker. I think you might want to > increase the values of > max_sync_workers_per_subscription/max_logical_replication_workers to > make it work. > Hmmm. So the theory is that in most runs we manage to sync the tables faster than starting the workers, so we don't hit the limit. But on some machines the sync worker takes a bit longer, we hit the limit. Seems possible, yes. Unfortunately we don't seem to log anything when we hit the limit, so hard to say for sure :-( I suggest we add a WARNING message to logicalrep_worker_launch or something. Not just because of this test, it seems useful in general. However, how come we don't retry the sync? Surely we don't just give up forever, that'd be a pretty annoying behavior. Presumably we just end up sleeping for a long time before restarting the sync worker, somewhere. >> I'd like to test & polish the main patch over the weekend, and get it >> committed early next week. Unless someone thinks it's definitely not >> ready for that ... >> > > I think it is in good shape but apart from cleanup, there are issues > with dependency handling which I have analyzed and reported as one of > the comments in the email [2]. I was getting some weird behavior > during my testing due to that. Apart from that still the patch has DDL > handling code in tablecmds.c which probably is not required. > Similarly, Shi-San has reported an issue with replica full in her > email [3]. It is up to you what to do here but it would be good if you > can once share the patch after fixing these issues so that we can > re-test/review it. Ah, thanks for reminding me - it's hard to keep track of all the issues in threads as long as this one. BTW do you have any opinion on the SET COLUMNS syntax? Peter Smith proposed to get rid of it in [1] but I'm not sure that's a good idea. Because if we ditch it, then removing the column list would look like this: ALTER PUBLICATION pub ALTER TABLE tab; And if we happen to add other per-table options, this would become pretty ambiguous. Actually, do we even want to allow resetting column lists like this? We don't allow this for row filters, so if you want to change a row filter you have to re-add the table, right? So maybe we should just ditch ALTER TABLE entirely. regards [4] https://www.postgresql.org/message-id/CAHut%2BPtc7Rh187eQKrxdUmUNWyfxz7OkhYAX%3DAW411Qwxya0LQ%40mail.gmail.com -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company