-
Type: Task
-
Status: Open
-
Priority: Minor
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: QualifiedToSchedule
-
Component/s: Core
By nature, inside Nuxeo Platform we have a lot of processing that is done on a document sub tree :
- update ACLs on a sub tree (and compute readacls)
- change life cycle on a sub tree
- remove documents (delete a sub tree)
- move a sub tree (and recompute all sub paths)
All these processing have common characteristics :
- they can be long running process
- they can be configured / plugged (ex: version policy removal, lifecycle transitions ...)
- we must ensure they will run at some point
Currently, the majority of these processing are handled at database level using triggers and stored procedure.
This approach shows several limitations :
- since most processing are synchronous it creates freezes for the users
- a lots of support client have complained about that
- it creates performance issues, especially on database engine that don't handle correctly concurrency
- we had a lot of problems with SQL Server, but there are also problems with PGSQL
- we need to code, debug and maintain for several database vendors
- that's really a pain
- because processing is handled at SQL level
- some configuration rules are by-passed
- listeners don't get fired (ex: document delete event )
- we can not use the same approach for non SQL DB anyway !
To fix that we need extract a new set of core level APIs (resurseXXX) that :
- will be shared across most repository backends
- but may actually be optimized at low level if needed
- will be Java based and will leverage the `WorkManager` infrastructure
Part of the work could also be shared with what has been done for ElasticSearch (recursive re-indexing).
- depends on
-
NXP-14450 Redesign how recursive deletes are handled
- Open