@@ -206,6 +206,11 @@ func (cd *clientDoc) _docRevSeqsNewestToOldest() []clientSeq {
206
206
func (cd * clientDoc ) latestRev () (* clientDocRev , error ) {
207
207
cd .lock .RLock ()
208
208
defer cd .lock .RUnlock ()
209
+ return cd ._latestRev ()
210
+ }
211
+
212
+ // _latestRev returns the latest revision of the document.
213
+ func (cd * clientDoc ) _latestRev () (* clientDocRev , error ) {
209
214
if cd ._latestSeq == 0 {
210
215
return nil , nil
211
216
}
@@ -220,6 +225,11 @@ func (cd *clientDoc) latestRev() (*clientDocRev, error) {
220
225
func (cd * clientDoc ) addNewRev (rev clientDocRev ) {
221
226
cd .lock .Lock ()
222
227
defer cd .lock .Unlock ()
228
+ cd ._addNewRev (rev )
229
+ }
230
+
231
+ // addNewRev adds a new revision to the document.
232
+ func (cd * clientDoc ) _addNewRev (rev clientDocRev ) {
223
233
cd ._latestSeq = rev .clientSeq
224
234
cd ._revisionsBySeq [rev .clientSeq ] = rev
225
235
cd ._seqsByVersions [rev .version ] = rev .clientSeq
@@ -550,6 +560,9 @@ func (btr *BlipTesterReplicator) initHandlers(btc *BlipTesterClient) {
550
560
}
551
561
}
552
562
563
+ doc .lock .Lock ()
564
+ defer doc .lock .Unlock ()
565
+
553
566
var newVersion DocVersion
554
567
var hlv db.HybridLogicalVector
555
568
if btc .UseHLV () {
@@ -576,8 +589,8 @@ func (btr *BlipTesterReplicator) initHandlers(btc *BlipTesterClient) {
576
589
}
577
590
578
591
// remove existing entry and replace with new seq
579
- delete (btcr ._seqStore , doc .latestSeq () )
580
- doc .addNewRev (docRev )
592
+ delete (btcr ._seqStore , doc ._latestSeq )
593
+ doc ._addNewRev (docRev )
581
594
btcr ._seqStore [newClientSeq ] = doc
582
595
btcr ._seqFromDocID [docID ] = newClientSeq
583
596
@@ -591,11 +604,9 @@ func (btr *BlipTesterReplicator) initHandlers(btc *BlipTesterClient) {
591
604
replacedVersion = DocVersion {RevTreeID : revID }
592
605
}
593
606
// store the new sequence for a replaced rev for tests waiting for this specific rev
594
- doc .lock .Lock ()
595
607
doc ._seqsByVersions [replacedVersion ] = newClientSeq
596
- doc .lock .Unlock ()
597
608
}
598
- doc .setLatestServerVersion ( newVersion )
609
+ doc ._latestServerVersion = newVersion
599
610
600
611
if ! msg .NoReply () {
601
612
response := msg .Response ()
@@ -772,6 +783,8 @@ func (btr *BlipTesterReplicator) initHandlers(btc *BlipTesterClient) {
772
783
_seqsByVersions : make (map [DocVersion ]clientSeq ),
773
784
}
774
785
}
786
+ doc .lock .Lock ()
787
+ defer doc .lock .Unlock ()
775
788
776
789
var newVersion DocVersion
777
790
var hlv db.HybridLogicalVector
@@ -797,8 +810,8 @@ func (btr *BlipTesterReplicator) initHandlers(btc *BlipTesterClient) {
797
810
}
798
811
799
812
// remove existing entry and replace with new seq
800
- delete (btcr ._seqStore , doc .latestSeq () )
801
- doc .addNewRev (docRev )
813
+ delete (btcr ._seqStore , doc ._latestSeq )
814
+ doc ._addNewRev (docRev )
802
815
btcr ._seqStore [newClientSeq ] = doc
803
816
btcr ._seqFromDocID [docID ] = newClientSeq
804
817
@@ -812,11 +825,9 @@ func (btr *BlipTesterReplicator) initHandlers(btc *BlipTesterClient) {
812
825
replacedVersion = DocVersion {RevTreeID : replacedRev }
813
826
}
814
827
// store the new sequence for a replaced rev for tests waiting for this specific rev
815
- doc .lock .Lock ()
816
828
doc ._seqsByVersions [replacedVersion ] = newClientSeq
817
- doc .lock .Unlock ()
818
829
}
819
- doc .setLatestServerVersion ( newVersion )
830
+ doc ._latestServerVersion = newVersion
820
831
821
832
if ! msg .NoReply () {
822
833
response := msg .Response ()
@@ -1493,11 +1504,15 @@ func (btc *BlipTesterCollectionClient) upsertDoc(docID string, parentVersion *Do
1493
1504
_seqsByVersions : make (map [DocVersion ]clientSeq , 1 ),
1494
1505
}
1495
1506
}
1507
+
1508
+ doc .lock .Lock ()
1509
+ defer doc .lock .Unlock ()
1510
+
1496
1511
newGen := 1
1497
1512
var hlv db.HybridLogicalVector
1498
1513
if parentVersion != nil {
1499
1514
// grab latest version for this doc and make sure we're doing an upsert on top of it to avoid branching revisions
1500
- latestRev , err := doc .latestRev ()
1515
+ latestRev , err := doc ._latestRev ()
1501
1516
require .NoError (btc .TB (), err )
1502
1517
latestVersion := latestRev .version
1503
1518
// CV or RevTreeID match is enough to ensure we're updating the latest revision
@@ -1526,7 +1541,7 @@ func (btc *BlipTesterCollectionClient) upsertDoc(docID string, parentVersion *Do
1526
1541
btc ._seqLast ++
1527
1542
newSeq := btc ._seqLast
1528
1543
rev := clientDocRev {clientSeq : newSeq , version : docVersion , body : body , HLV : hlv , isDelete : body == nil }
1529
- doc .addNewRev (rev )
1544
+ doc ._addNewRev (rev )
1530
1545
1531
1546
btc ._seqStore [newSeq ] = doc
1532
1547
btc ._seqFromDocID [docID ] = newSeq
0 commit comments