|[CDO] Server replication mechanism [message #990163]
||Tue, 11 December 2012 03:31
| Alex Lagarde
Registered: May 2010
Dear CDO enthusiasts,|
I've got some questions related to the IRepositorySynchronizer mechanism
in CDO, in case you have advices before I start developping my own solution.
We are currently deploying a CDO-based software for our users.
The issue is that the users are located in a city, and the CDO server in
another one. In result, the performances (especially when loading
models) are not acceptable for the end-users, because of the poor
network. On another hand, when deploying the server in their city the
users are satisfied by the tool performances.
That is why I'm currently trying to set up a replication mechanism: we
would like to have a MASTER server in city A, and a CLONE (potentially
many clones) of this server in the city B (the users's city). This will
allow to improve performances especially when loading their models, as
users directly use the CLONE and hence networks requests are way faster.
I've played with the OfflineExampleClone, and it works very well : I'm
able to launch a MASTER repository and its corresponding CLONE, and
whether I'm commiting in the MASTER or the CLONE changes are propagated
to the other repository thanks to the IRepositorySynchronizer. Notice
that in our case, we do not want to provide offline-mode support : if
the MASTER connection breaks, the user will not be able to do anything.
However, I still have some issues to tackle before being able to use
this solution on our software:
1. Cross-repository locks :
With my current prototype, whether I'm locking elements on CLONE or
MASTER, locks are not propagated to the other repository. This is
problematic for us, as we rely on a fine-grained lock mechanism that
automatically locks modified elements to prevent from any conflict. We
do not want (expect if we have no other solution) to allow conflicts
that would be resolved through a merge tool.
In other words, I would like to implement a mechanism that makes sure
that we only allow to lock objects on the CLONE if it is possible to
also lock the same objects on the MASTER.
2. Remote changes integration
For the same reasons, we would like to be sure that changes made on the
master repository have been integrated before being able to lock elements.
For example :
- User 1 makes a modification on an element E1 of the MASTER repository
=> locks are taken on both the MASTER and the CLONE repository
- User 2 cannot change E1 as it is locked on both repositories
- User 1 commits his modifications => locks are released on both the
MASTER and the CLONE repository
- User 2 should not be able to make changes on E1 as long as the changes
made by User 1 have not been propagated to the CLONE
Do you have tips or reference documentation about how to implement those
2 mechanisms ?
To make things more difficult, the software depends on CDO 4.0.2, and
not the latest CDO version...
Best regards, and thank you very much for your help !