Feature compatibility
=====================

Server feature/commit scope interoperability
--------------------------------------------

Not all server features work with all commit scopes. This table shows
the ones that interoperate.

.. csv-table::
  :header: """ """,Async (default),:ref:`Parallel Apply<Parallel Apply>`,:ref:`Using with transaction streaming<Using with transaction streaming>`,:ref:`Decoding worker<Decoding worker>`
  :widths: 12,8,8,8,8
  :align: left
  :class: longtable

  :ref:`Group commit<Group commit>` ,Not applicable,Does not interoperate,Does not interoperate❗️,Interoperates
  :ref:`Commit At Most Once<Commit At Most Once>` ,Not applicable,Interoperates,Does not interoperate,Does not interoperate
  :ref:`Lag Control<Lag Control>` ,Interoperates,Interoperates,Interoperates,Interoperates
  :ref:`Synchronous Commit<Synchronous Commit>` ,Not applicable,Interoperates,Interoperates,Interoperates

Notes
^^^^^

⛔︎ : The Async column in the table represents PGD without a synchronous
commit scope in use. Lag Control isn’t a synchronous commit scope. It’s
a controlling commit scope and is therefore available with asynchronous
operations.

❗️ : Attempting to use Group Commit and Transaction Streaming presents a
warning. The warning suggests that you disable transaction streaming,
and the transaction appears to take place. In the background, Group
Commit was disabled to allow the transaction to occur.

Commit scope/commit scope interoperability
------------------------------------------

Although you can’t mix commit scopes, you can :ref:`combine rules <Commit scope rules>`  with an
``AND`` operator. This table shows where commit scopes can be combined.

.. csv-table::
  :header: """ """,:ref:`Group commit<Group commit>`,:ref:`Commit At Most Once<Commit At Most Once>`,:ref:`Lag Control<Lag Control>`,:ref:`Synchronous Commit<Synchronous Commit>`
  :widths: auto
  :align: left
  :class: longtable

  :ref:`Group commit<Group commit>` ,Not applicable,Does not combine,Combines,Combines
  :ref:`Commit At Most Once<Commit At Most Once>` ,Does not combine,Not applicable,Combines,Does not combine
  :ref:`Lag Control<Lag Control>` ,Combines,Combines,Not applicable,Combines
  :ref:`Synchronous Commit<Synchronous Commit>` ,Combines,Does not combine,Combines,Not applicable

.. _notes-1:

Notes
^^^^^

Each commit scope implicitly works with itself.
