-
Type: Task
-
Status: Open
-
Priority: Minor
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: QualifiedToSchedule
-
Component/s: Clustering, Core
-
Tags:
-
Backlog priority:500
There are several problems that we would like to address :
- conflicts
- detect and prevent dirty updates
- detect and prevent names conflicts
- manage transient state that is induced by long running tasks
- sub tree deletion
- sub tree reindexing
- sub tree ACL update
- ...
The first point (conflicts) are here from the beginning, but usage of REST API make it even more visible and problematic.
The second point is currently not really visible with VCS (since almost everything is synchronous, but this creates other problems), but the move to `elasticsearch` and MongoDB will make it more and more visible.
Because of MVCC model used in VCS/SQL DB, we can not rely on the database to detect for real conflicts :
- one TX can not see that an other TX is conflicting
- relying on SQL level integrity constraints is not what we want (performances + user feedback)
The goal is then to have a transient state manager that can store non transactional data that is shared across all cluster nodes.
This data could for example include :
- list of DocumentModels being created or updated
- prevent dirty updates or name conflicts
- list of DocumenModels being processed (reindexing, ...)
- be able to display a flag in UI saying that Document state is transient
These information should be stored in Redis so that :
- it can be easily shared
- it can be safely accessed under concurrency
- it can be persisted if needed
This may also make sense at some point to merge this with the shared VCS cache.