On Mon, Mar 15, 2021 at 12:56 PM Amul Sul <sula...@gmail.com> wrote: > > > > It is a very minor change, so I rebased the patch. Please take a look, if > > that works for you. > > > > Thanks, I am getting one more failure for the vacuumlazy.c. on the > latest master head(d75288fb27b), I fixed that in attached version.
Thanks Amul! I haven't looked at the whole thread, I may be repeating things here, please bear with me. 1) Is the pg_prohibit_wal() only user sets the wal prohibit mode? Or do we still allow via 'ALTER SYSTEM READ ONLY/READ WRITE'? If not, I think the patches still have ALTER SYSTEM READ ONLY references. 2) IIUC, the idea of this patch is not to generate any new WAL when set as default_transaction_read_only and transaction_read_only can't guarantee that? 3) IMO, the function name pg_prohibit_wal doesn't look good where it also allows one to set WAL writes, how about the following functions - pg_prohibit_wal or pg_disallow_wal_{generation, inserts} or pg_allow_wal or pg_allow_wal_{generation, inserts} without any arguments and if needed a common function pg_set_wal_generation_state(read-only/read-write) something like that? 4) It looks like only the checkpointer is setting the WAL prohibit state? Is there a strong reason for that? Why can't the backend take a lock on prohibit state in shared memory and set it and let the checkpointer read it and block itself from writing WAL? 5) Is SIGUSR1 (which is multiplexed) being sent without a "reason" to checkpointer? Why? 6) What happens for long-running or in-progress transactions if someone prohibits WAL in the midst of them? Do these txns fail? Or do we say that we will allow them to run to completion? Or do we fail those txns at commit time? One might use this feature to say not let server go out of disk space, but if we allow in-progress txns to generate/write WAL, then how can one achieve that with this feature? Say, I monitor my server in such a way that at 90% of disk space, prohibit WAL to avoid server crash. But if this feature allows in-progress txns to generate WAL, then the server may still crash? 7) What are the other use-cases (I can think of - to avoid out of disk crashes, block/freeze writes to database when the server is compromised) with this feature? Any usages during/before failover, promotion or after it? 8) Is there a strong reason that we've picked up conditional variable wal_prohibit_cv over mutex/lock for updating WALProhibit shared memory? 9) Any tests that you are planning to add? Regards, Bharath Rupireddy.