Community
Participate
Working Groups
Build Identifier: 4.0 We have the following scenario (see attached test-case): master session with a transaction where the changes are done and an offline session which will go offline and online again. online: ---> v1 ---> v2 ---> v3 ---> v4 offline: ---> v1 --/....................../(rawrepl.)--> v2 After the change v1 we go offline, do 3 more changes on online transaction. Then we go online again, raw replication will start and will deliver changes v2-v4 in one revision delta causing the transaction on the offline clone to update from v1 to v2. When a change on this object is done, the exception is thrown because v4 is expected instead of v2. Reproducible: Always Steps to Reproduce: 1. see testcase
Created attachment 174018 [details] TestCase
Created attachment 174020 [details] Idea for a patch Here is a patch resolving the version problem, but unfortunately this patch introduces some other problems, so I'm not sure if this would be the way to go. The patch uses the higher version in the revision delta, so when applying the delta to the local revision the version will be correct. However every piece of code trying to get the revision from revision manager (eg. for the old value etc.) will now fail because the call is done with the higher version which can not be found in the revision manager.
Pascal, please confirm that: 1) The number of lines that you changed is smaller than 250. 2) You are the only author of these changed lines. 3) You apply the EPL to these changed lines.
Committed test case to HEAD
1) The number of lines that you changed is smaller than 250. confirmed. 2) You are the only author of these changed lines. confirmed. 3) You apply the EPL to these changed lines. confirmed.
Comment on attachment 174020 [details] Idea for a patch This fix does not solve the problem that we need the target version of the aggregated deltas. Investigating further...
Fixed by adding this to CDORevisionDeltaImpl: private CDOBranchVersion target; Committed to HEAD
Available in R20110608-1407