On Thu, Oct 26, 2023 at 09:40:09AM -0400, Robert Haas wrote: > Because of this, it is possible for bucketbuf, prevbuf, and wbuf to be > the same (your first scenario) but the second scenario you mention > (nextbuf == wbuf) should be impossible.
Okay.. > It seems to me that maybe we shouldn't even be registering wbuf or > doing anything at all to it if there are no tuples that need moving. > That would also require some adjustment of the redo routine. Hmm. So my question is: do we need the cleanup lock on the write buffer even if there are no tuples, and even if primary bucket and the write bucket are the same? I'd like to think that what you say is OK, still I am not completely sure after reading the lock assumptions in the hash README or 6d46f4783efe. A simpler thing would be to mark buffer 1 with REGBUF_NO_CHANGE when the primary and write buffers are the same if we expect the lock to always be taken, I guess.. I've noticed that the replay paths for XLOG_HASH_MOVE_PAGE_CONTENTS and XLOG_HASH_SQUEEZE_PAGE are similar with their page handlings (some copy-pastes?). A MOVE record should never have zero tuples, still the replay path assumes that this can be possible, so it could be simplified. -- Michael
signature.asc
Description: PGP signature