Enumize logical replication message actions
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
From: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
To: Ashutosh Bapat <ashutosh.bapat@2ndquadrant.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2020-10-16T07:25:26Z
Lists: pgsql-hackers
Attachments
- 0001-Enumize-top-level-logical-replication-actions.patch (text/x-patch) patch 0001
Hi All, Logical replication protocol uses single byte character to identify different chunks of logical repliation messages. The code uses character literals for the same. These literals are used as bare constants in code as well. That's true for almost all the code that deals with wire protocol. With that it becomes difficult to identify the code which deals with a particular message. For example code that deals with message type 'B'. In various protocol 'B' has different meaning and it gets difficult and time consuming to differentiate one usage from other and find all places which deal with one usage. Here's a patch simplifying that for top level logical replication messages. I think I have covered the places that need change. But I might have missed something, given that these literals are used at several other places (a problem this patch tries to fix :)). Initially I had used #define for the same, but Peter E suggested using Enums so that switch cases can detect any remaining items along with stronger type checks. Pavan offleast suggested to create a wrapper pg_send_logical_rep_message() on top of pg_sendbyte(), similarly for pg_getmsgbyte(). I wanted to see if this change is acceptable. If so, I will change that as well. Comments/suggestions welcome. -- Best Wishes, Ashutosh Bapat
Commits
-
Use Enums for logical replication message types at more places.
- f3a8f73ec274 14.0 landed
-
Use Enum for top level logical replication message types.
- 644f0d7cc9c2 14.0 landed