  Causal consistency for key-value stores has two main requirements (1) do not
make a version visible if some of its dependencies are invisible as it may
violate causal consistency in the future and (2) make a version visible as soon
as possible so that clients have the most recent information (to the extent
feasible). These two requirements conflict with each other. Existing key-value
stores that provide causal consistency (or detection of causal violation)
utilize a static approach in the trade-off between these requirements.
Depending upon the choice, it assists some applications and penalizes some
applications. We propose an alternative where the system provides a set of
tracking groups and checking groups. This allows the application to choose the
settings that are most suitable for that application. Furthermore, these groups
can be dynamically changed based on application requirements.
