On Thu, Jun 20, 2024 at 5:06 PM Ashutosh Bapat <ashutosh.bapat....@gmail.com> wrote: > > On Thu, Jun 20, 2024 at 3:21 PM Amit Kapila <amit.kapil...@gmail.com> wrote: >> >> On Wed, Jun 19, 2024 at 2:51 PM Ashutosh Bapat >> <ashutosh.bapat....@gmail.com> wrote: >> > >> > On Wed, Jun 19, 2024 at 12:03 PM Amit Kapila <amit.kapil...@gmail.com> >> > wrote: >> >> >> >> > I doubt that it would be that simple. The application will have to >> >> > intervene and tell one of the employees that their reservation has >> >> > failed. It looks natural that the first one to reserve the room should >> >> > get the reservation, but implementing that is more complex than >> >> > resolving a conflict in the database. In fact, mostly it will be >> >> > handled outside database. >> >> > >> >> >> >> Sure, the application needs some handling but I have tried to explain >> >> with a simple way that comes to my mind and how it can be realized >> >> with db involved. This is a known conflict detection method but note >> >> that I am not insisting to have "earliest_timestamp_wins". Even, if we >> >> want this we can have a separate discussion on this and add it later. >> >> >> > >> > It will be good to add a minimal set of conflict resolution strategies to >> > begin with, while designing the feature for extensibility. I imagine the >> > first version might just detect the conflict and throw error or do >> > nothing. That's already two simple conflict resolution strategies with >> > minimal efforts. We can add more complicated ones incrementally. >> > >> >> Agreed, splitting the work into multiple patches would help us to >> finish the easier ones first. >> >> I have thought to divide it such that in the first patch, we detect >> conflicts like 'insert_exists', 'update_differ', 'update_missing', and >> 'delete_missing' (the definition of each could be found in the initial >> email [1]) and throw an ERROR or write them in LOG. Various people >> agreed to have this as a separate committable work [2]. This can help >> users to detect and monitor the conflicts in a better way. I have >> intentionally skipped update_deleted as it would require more >> infrastructure and it would be helpful even without that. > > > Since we are in the initial months of release, it will be good to take a > stock of whether the receiver receives all the information needed for most > (if not all) of the conflict detection and resolution strategies. If there > are any missing pieces, we may want to add those in PG18 so that improved > conflict detection and resolution on a higher version receiver can still work. >
Good point. This can help us to detect conflicts if required even when we move to a higher version. As we continue to discuss/develop the features, I hope we will be able to see any missing pieces. >> >> >> In the second patch, we can implement simple built-in resolution >> strategies like apply and skip (which can be named as remote_apply and >> keep_local, see [3][4] for details on these strategies) with ERROR or >> LOG being the default strategy. We can allow these strategies to be >> configured at the global and table level. >> >> In the third patch, we can add monitoring capability for conflicts and >> resolutions as mentioned by Jonathan [5]. Here, we can have stats like >> how many conflicts of a particular type have happened. > > > That looks like a plan. Thanks for chalking it out. > Thanks! -- With Regards, Amit Kapila.