THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- A memory component start as an empty component with its state being either READABLE_WRITABLE (first component) or INACTIVE (other components).
- A READABLE_WRITABLE component becomes READABLE_UNWRITABLE prior to flushing it to allow for current writers inside the components to exit before flushing.
- This operation is done through the primary index operation tracker and it affects all indexes/partitions of the dataset.
- This setting of the components state happens from outside the components due to two factos:
- There is a single primary opTracker that is used for synchronization on multiple partitions.
- Some operations don't affect all indexes of a dataset in a partition.
- Hence, if a partition/index had no operation
- Hence, an empty component can become READABLE_UNWRITABLE and schedule flush will get called.
- If schedule flush is called on an empty component, its state is switched back from READABLE_UNWRITABLE to READABLE_WRITABLE.
- On scheduling a flush, the memory component state is transitioned to READABLE_UNWRITABLE_FLUSHING. The previous state can either be
READABLE_UNWRITABLE or (READABLE_WRITABLE: not clear when). - When a flush is scheduled, the activation flag is set for the next component. If there is only a single component, then the flag is set for the current component.
- When any operation tries to enter a component that is INACTIVE and has the activation flag set, it will switch it to READABLE_WRITABLE.
- When an operation exits the memory component