Skip to content

Commit 93d0b90

Browse files
committed
fix failing tests and clear up work
1 parent 32b332c commit 93d0b90

File tree

2 files changed

+32
-22
lines changed

2 files changed

+32
-22
lines changed

topologytest/multi_actor_no_conflict_test.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package topologytest
1010

1111
import (
1212
"fmt"
13+
"strings"
1314
"testing"
1415

1516
"github.com/couchbase/sync_gateway/base"
@@ -110,14 +111,17 @@ func TestMultiActorResurrect(t *testing.T) {
110111
// if cbs resurrect, if delete AND resurrecting peer is server side peer (cbs or sgw) the all docs will converge for version expected
111112
// if cbs resurrect and delete AND resurrecting peer is NOT server side peer (lite), then need to wait for tombstone convergence first
112113
if resurrectPeer.Type() == PeerTypeCouchbaseServer {
113-
if conflictNotExpectedOnCBL([]Peer{createPeer, deletePeer, resurrectPeer}, []string{deletePeerName, createPeerName}, resurrectPeerName) { //allActorsServerSide([]Peer{createPeer, deletePeer, resurrectPeer}) || conflictNotExpectedOnCBL(deletePeer, []string{deletePeerName, createPeerName}, resurrectPeerName) {
114-
// no cbl conflict?
115-
waitForCVAndBody(t, collectionName, docID, resurrectVersion, topology)
114+
if strings.Contains(topologySpec.description, "CBL") {
115+
if conflictNotExpectedOnCBL(deletePeer, resurrectPeer, deletePeerName, resurrectPeerName) {
116+
// if no cbl conflict is expected we can wait on CV and body
117+
waitForCVAndBody(t, collectionName, docID, resurrectVersion, topology)
118+
} else {
119+
// if cbl conflict is expected we need to wait for tombstone convergence
120+
waitForConvergingTombstones(t, collectionName, docID, topology)
121+
}
116122
} else {
117-
fmt.Println("waiting for converging tombstones")
118-
waitForConvergingTombstones(t, collectionName, docID, topology)
123+
waitForCVAndBody(t, collectionName, docID, resurrectVersion, topology)
119124
}
120-
//waitForCVAndBody(t, collectionName, docID, resurrectVersion, topology)
121125
} else {
122126
waitForVersionAndBody(t, collectionName, docID, resurrectVersion, topology)
123127
}

topologytest/peer_test.go

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -132,30 +132,36 @@ func (p Peers) PeerList() []string {
132132
return peerNames
133133
}
134134

135-
func allActorsServerSide(p []Peer) bool {
136-
for _, v := range p {
137-
if v.Type() == PeerTypeCouchbaseServer || v.Type() == PeerTypeSyncGateway {
138-
continue
139-
}
140-
return false
141-
}
142-
return true
143-
}
144-
145-
func deleteHasSGWSource(deletingPeer Peer) bool {
146-
if deletingPeer.Type() == PeerTypeCouchbaseServer || deletingPeer.Type() == PeerTypeSyncGateway {
135+
// peerIsServerSide returns true if the peer is a Couchbase Server or Sync Gateway peer.
136+
func peerIsServerSide(p Peer) bool {
137+
if p.Type() == PeerTypeCouchbaseServer || p.Type() == PeerTypeSyncGateway {
147138
return true
148139
}
149140
return false
150141
}
151142

152-
func conflictNotExpectedOnCBL(peers []Peer, createDelPeerNames []string, resPeerName string) bool {
153-
if createDelPeerNames[1] == "sg1" && resPeerName == "cbs1" {
154-
return true
143+
// conflictNotExpectedOnCBL will return true if no conflict is expected for delete and resurrect operations for
144+
// topologies with cbl peer in them and false for expected conflict
145+
func conflictNotExpectedOnCBL(deletePeer Peer, resurrectPeer Peer, delPeerName string, resPeerName string) bool {
146+
if delPeerName == "cbl1" {
147+
// cbl delete will mean cbs resurrect has a conflict
148+
return false
155149
}
156-
if createDelPeerNames[1] == "cbs1" && resPeerName == "cbs1" {
150+
if peerIsServerSide(deletePeer) && peerIsServerSide(resurrectPeer) {
151+
if strings.Contains(delPeerName, "1") && strings.Contains(resPeerName, "2") {
152+
fmt.Println("conflict expected due to different backing bucket")
153+
// conflict expected due to different backing bucket (sourceID)
154+
return false
155+
}
156+
if strings.Contains(delPeerName, "2") && strings.Contains(resPeerName, "1") {
157+
fmt.Println("conflict expected due to different backing bucket")
158+
// conflict expected due to different backing bucket (sourceID)
159+
return false
160+
}
161+
// if both actors are server side and same backing bucket, no conflict expected
157162
return true
158163
}
164+
// conflict expected
159165
return false
160166
}
161167

0 commit comments

Comments
 (0)