WiredTiger currently updates the shared metadata table in the following ways:
- Modifying the metadata table directly during a checkpoint, e.g., during checkpoint resolve.
- Modifying the metadata table directly in response to DDL operations, e.g., creating a new table.
- Scheduling metadata to be copied later, e.g., to handle creating empty tables.
The latter has a somewhat unfortunate design (even though it works), because it schedules copying metadata for later, but it uses metadata from that latter point when updating it. It is also somewhat unfortunate that the mechanism's correctness depends on transactional access to the metadata table, while metadata operations are non-transactional.
The motivation behind this redesign is to clean up the design.