Skip to content

Commit 13508f1

Browse files
authored
Improve topologytest logging (#7664)
1 parent bba44c0 commit 13508f1

11 files changed

+55
-62
lines changed

base/main_test_bucket_pool.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ func newRosmarTracker(numBuckets int) *rosmarTracker {
4848
}
4949

5050
// getNextBucketIdx returns the next available bucket index in a rosmarTracker. This will return the lowest available
51-
// number starting at 0. If all buckets are in use, it will return an error.
51+
// number starting at 1. If all buckets are in use, it will return an error.
5252
func (r *rosmarTracker) GetNextBucketIdx() (int, error) {
5353
r.lock.Lock()
5454
defer r.lock.Unlock()
5555
// iterate over len of activeBuckets to find the first lexicographically in a map
5656
for i, active := range r.activeBuckets {
5757
if !active {
5858
r.activeBuckets[i] = true
59-
return i, nil
59+
return i + 1, nil
6060
}
6161
}
6262
return 0, fmt.Errorf("no rosmar buckets available, all have been used")
@@ -66,7 +66,7 @@ func (r *rosmarTracker) GetNextBucketIdx() (int, error) {
6666
func (r *rosmarTracker) ReleaseBucketIdx(idx int) {
6767
r.lock.Lock()
6868
defer r.lock.Unlock()
69-
r.activeBuckets[idx] = false
69+
r.activeBuckets[idx-1] = false
7070
}
7171

7272
// TestBucketPool is used to manage a pool of pre-prepared buckets for testing purposes.

db/hybrid_logical_vector.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,10 @@ func (v Version) String() string {
143143
return strconv.FormatUint(v.Value, 16) + "@" + v.SourceID
144144
}
145145

146+
func (v Version) GoString() string {
147+
return fmt.Sprintf("Version{SourceID:%s, Value:%d}", v.SourceID, v.Value)
148+
}
149+
146150
// IsEmpty returns true if the version is empty/zero value.
147151
func (v Version) IsEmpty() bool {
148152
return v.SourceID == "" && v.Value == 0
@@ -179,7 +183,7 @@ func NewHybridLogicalVector() *HybridLogicalVector {
179183
}
180184
}
181185

182-
func (hlv *HybridLogicalVector) Equals(other *HybridLogicalVector) bool {
186+
func (hlv *HybridLogicalVector) Equal(other *HybridLogicalVector) bool {
183187
if hlv.SourceID != other.SourceID {
184188
return false
185189
}
@@ -663,6 +667,6 @@ func (hlv *HybridLogicalVector) UnmarshalJSON(inputjson []byte) error {
663667
return nil
664668
}
665669

666-
func (hlv *HybridLogicalVector) GoString() string {
667-
return fmt.Sprintf("HybridLogicalVector{CurrentVersionCAS:%d, SourceID:%s, Version:%d, PreviousVersions:%+v, MergeVersions:%+v}", hlv.CurrentVersionCAS, hlv.SourceID, hlv.Version, hlv.PreviousVersions, hlv.MergeVersions)
670+
func (hlv HybridLogicalVector) GoString() string {
671+
return fmt.Sprintf("HybridLogicalVector{CurrentVersionCAS:%d, SourceID:%s, Version:%d, PreviousVersions:%#+v, MergeVersions:%#+v}", hlv.CurrentVersionCAS, hlv.SourceID, hlv.Version, hlv.PreviousVersions, hlv.MergeVersions)
668672
}

db/hybrid_logical_vector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1408,7 +1408,7 @@ func TestAddVersion(t *testing.T) {
14081408

14091409
expectedHLV, _, err := ExtractHLVFromBlipMessage(tc.expectedHLV)
14101410
require.NoError(t, err)
1411-
require.True(t, hlv.Equals(expectedHLV), "expected %#v does not match actual %#v", expectedHLV, hlv)
1411+
require.True(t, hlv.Equal(expectedHLV), "expected %#v does not match actual %#v", expectedHLV, hlv)
14121412

14131413
})
14141414
}

db/utilities_hlv_testing.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@ type DocVersion struct {
2828
CV Version
2929
}
3030

31-
func (v *DocVersion) String() string {
32-
return fmt.Sprintf("RevTreeID: %s", v.RevTreeID)
31+
func (v DocVersion) String() string {
32+
return fmt.Sprintf("RevTreeID:%s,CV:%#v", v.RevTreeID, v.CV)
33+
}
34+
35+
func (v DocVersion) GoString() string {
36+
return fmt.Sprintf("DocVersion{RevTreeID:%s,CV:%#v}", v.RevTreeID, v.CV)
3337
}
3438

3539
func (v DocVersion) Equal(o DocVersion) bool {

rest/utilities_testing_blip_client.go

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -899,15 +899,6 @@ func (btcc *BlipTesterCollectionClient) updateLastReplicatedRev(docID string, ve
899899
rev.message = msg
900900
}
901901

902-
func (btcc *BlipTesterCollectionClient) getLastReplicatedRev(docID string) (version DocVersion, ok bool) {
903-
btcc.seqLock.RLock()
904-
defer btcc.seqLock.RUnlock()
905-
doc, ok := btcc._getClientDoc(docID)
906-
require.True(btcc.TB(), ok, "docID %q not found in _seqFromDocID", docID)
907-
latestServerVersion := doc._latestServerVersion
908-
return latestServerVersion, latestServerVersion.RevTreeID != "" || latestServerVersion.CV.Value != 0
909-
}
910-
911902
func (c *BlipTesterCollectionClient) lastSeq() clientSeq {
912903
c.seqLock.RLock()
913904
defer c.seqLock.RUnlock()
@@ -1164,6 +1155,24 @@ func (e proposeChangeBatchEntry) Rev() string {
11641155
return e.version.RevTreeID
11651156
}
11661157

1158+
func (e proposeChangeBatchEntry) MarshalJSON() ([]byte, error) {
1159+
output := &bytes.Buffer{}
1160+
fmt.Fprintf(output, `["%s","%s"`, e.docID, e.Rev())
1161+
if e.latestServerVersion.RevTreeID != "" || e.latestServerVersion.CV.Value != 0 {
1162+
if e.useHLV() {
1163+
fmt.Fprintf(output, `,"%s"`, e.latestServerVersion.CV.String())
1164+
} else {
1165+
fmt.Fprintf(output, `,"%s"`, e.latestServerVersion.RevTreeID)
1166+
}
1167+
}
1168+
fmt.Fprintf(output, "]")
1169+
return output.Bytes(), nil
1170+
}
1171+
1172+
func (e proposeChangeBatchEntry) GoString() string {
1173+
return fmt.Sprintf("proposeChangeBatchEntry{docID: %q, version:%v,revTreeIDHistory:%v,hlvHistory:%v,seq:%d,latestServerVersion:%v,isDelete: %t}", e.docID, e.version, e.revTreeIDHistory, e.hlvHistory, e.seq, e.latestServerVersion, e.isDelete)
1174+
}
1175+
11671176
// StartPull will begin a push replication with the given options between the client and server
11681177
func (btcc *BlipTesterCollectionClient) StartPushWithOpts(opts BlipTesterPushOptions) {
11691178
require.True(btcc.TB(), btcc.pushRunning.CASRetry(false, true), "push replication already running")
@@ -1199,28 +1208,11 @@ func (btcc *BlipTesterCollectionClient) sendProposeChanges(ctx context.Context,
11991208
proposeChangesRequest := blip.NewRequest()
12001209
proposeChangesRequest.SetProfile(db.MessageProposeChanges)
12011210

1202-
proposeChangesRequestBody := bytes.NewBufferString(`[`)
1203-
for i, change := range changesBatch {
1204-
if i > 0 {
1205-
proposeChangesRequestBody.WriteString(",")
1206-
}
1207-
proposeChangesRequestBody.WriteString(fmt.Sprintf(`["%s","%s"`, change.docID, change.Rev()))
1208-
// write last known server version to support no-conflict mode
1209-
if serverVersion, ok := btcc.getLastReplicatedRev(change.docID); ok {
1210-
base.DebugfCtx(ctx, base.KeySGTest, "specifying last known server version for doc %s = %v", change.docID, serverVersion)
1211-
if btcc.UseHLV() {
1212-
proposeChangesRequestBody.WriteString(fmt.Sprintf(`,"%s"`, serverVersion.CV.String()))
1213-
} else {
1214-
proposeChangesRequestBody.WriteString(fmt.Sprintf(`,"%s"`, serverVersion.RevTreeID))
1215-
}
1216-
}
1217-
proposeChangesRequestBody.WriteString(`]`)
1218-
}
1219-
proposeChangesRequestBody.WriteString(`]`)
1220-
proposeChangesRequestBodyBytes := proposeChangesRequestBody.Bytes()
1221-
proposeChangesRequest.SetBody(proposeChangesRequestBodyBytes)
1211+
proposeChangesRequestBody, err := base.JSONMarshal(changesBatch)
1212+
require.NoError(btcc.TB(), err, "error marshalling proposeChanges request body: %v", err)
1213+
proposeChangesRequest.SetBody(proposeChangesRequestBody)
12221214

1223-
base.DebugfCtx(ctx, base.KeySGTest, "proposeChanges request: %s", string(proposeChangesRequestBodyBytes))
1215+
base.DebugfCtx(ctx, base.KeySGTest, "proposeChanges request body: %s, changes:%#+v", string(proposeChangesRequestBody), changesBatch)
12241216

12251217
btcc.addCollectionProperty(proposeChangesRequest)
12261218

@@ -1265,7 +1257,7 @@ func (btcc *BlipTesterCollectionClient) sendRev(ctx context.Context, change prop
12651257

12661258
btcc.addCollectionProperty(revRequest)
12671259
btcc.sendPushMsg(revRequest)
1268-
base.DebugfCtx(ctx, base.KeySGTest, "sent doc %s / %v", change.docID, change.version)
1260+
base.DebugfCtx(ctx, base.KeySGTest, "sent doc %s / %#v", change.docID, change.version)
12691261
// block until remote has actually processed the rev and sent a response
12701262
revResp := revRequest.Response()
12711263
errorCode := revResp.Properties["Error-Code"]
@@ -1275,7 +1267,7 @@ func (btcc *BlipTesterCollectionClient) sendRev(ctx context.Context, change prop
12751267
return
12761268
}
12771269
require.NotContains(btcc.TB(), revResp.Properties, "Error-Domain", "unexpected error response from rev %#v", revResp)
1278-
base.DebugfCtx(ctx, base.KeySGTest, "peer acked rev %s / %v", change.docID, change.version)
1270+
base.DebugfCtx(ctx, base.KeySGTest, "peer acked rev %s / %#v", change.docID, change.version)
12791271
btcc.updateLastReplicatedRev(change.docID, change.version, revRequest)
12801272
}
12811273

@@ -1646,7 +1638,7 @@ func (btcc *BlipTesterCollectionClient) WaitForVersion(docID string, docVersion
16461638
var found bool
16471639
var lastKnownVersion *DocVersion
16481640
data, lastKnownVersion, found = btcc.GetVersion(docID, docVersion)
1649-
assert.True(c, found, "Could not find docID:%+v Version %+v, last known version: %s", docID, docVersion, lastKnownVersion)
1641+
assert.True(c, found, "Could not find docID:%+v Version %+v, last known version: %#v", docID, docVersion, lastKnownVersion)
16501642
}, 10*time.Second, 5*time.Millisecond, "BlipTesterClient timed out waiting for doc %+v Version %+v", docID, docVersion)
16511643
return data
16521644
}

topologytest/main_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func TestMain(m *testing.M) {
2727
base.SkipTestMain(m, "Tests are disabled for Couchbase Server by default, to enable set %s=true environment variable", base.TbpEnvTopologyTests)
2828
return
2929
}
30-
tbpOptions := base.TestBucketPoolOptions{MemWatermarkThresholdMB: 8192}
30+
tbpOptions := base.TestBucketPoolOptions{MemWatermarkThresholdMB: 8192, NumCollectionsPerBucket: 1}
3131
// Do not create indexes for this test, so they are built by server_context.go
3232
db.TestBucketPoolWithIndexes(ctx, m, tbpOptions)
3333
}

topologytest/multi_actor_conflict_test.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ func TestMultiActorConflictCreate(t *testing.T) {
2121
for _, topology := range append(simpleTopologies, Topologies...) {
2222
t.Run(topology.description, func(t *testing.T) {
2323
collectionName, peers, replications := setupTests(t, topology)
24-
replications.Stop()
25-
2624
docID := getDocID(t)
2725
docVersion := createConflictingDocs(t, collectionName, peers, docID, topology.description)
2826
replications.Start()
@@ -47,7 +45,6 @@ func TestMultiActorConflictUpdate(t *testing.T) {
4745
}
4846
t.Run(topology.description, func(t *testing.T) {
4947
collectionName, peers, replications := setupTests(t, topology)
50-
replications.Stop()
5148

5249
docID := getDocID(t)
5350
docVersion := createConflictingDocs(t, collectionName, peers, docID, topology.description)
@@ -79,8 +76,6 @@ func TestMultiActorConflictDelete(t *testing.T) {
7976
}
8077
t.Run(topology.description, func(t *testing.T) {
8178
collectionName, peers, replications := setupTests(t, topology)
82-
replications.Stop()
83-
8479
docID := getDocID(t)
8580
docVersion := createConflictingDocs(t, collectionName, peers, docID, topology.description)
8681

@@ -115,7 +110,6 @@ func TestMultiActorConflictResurrect(t *testing.T) {
115110
}
116111
t.Run(topology.description, func(t *testing.T) {
117112
collectionName, peers, replications := setupTests(t, topology)
118-
replications.Stop()
119113

120114
docID := getDocID(t)
121115
docVersion := createConflictingDocs(t, collectionName, peers, docID, topology.description)

topologytest/multi_actor_no_conflict_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func TestMultiActorUpdate(t *testing.T) {
2323
for _, topology := range append(simpleTopologies, Topologies...) {
2424
t.Run(topology.description, func(t *testing.T) {
2525
collectionName, peers, replications := setupTests(t, topology)
26-
26+
replications.Start()
2727
for createPeerName, createPeer := range peers.ActivePeers() {
2828
for updatePeerName, updatePeer := range peers {
2929
docID := getDocID(t) + "_create=" + createPeerName + ",update=" + updatePeerName
@@ -51,7 +51,7 @@ func TestMultiActorDelete(t *testing.T) {
5151
for _, topology := range append(simpleTopologies, Topologies...) {
5252
t.Run(topology.description, func(t *testing.T) {
5353
collectionName, peers, replications := setupTests(t, topology)
54-
54+
replications.Start()
5555
for createPeerName, createPeer := range peers.ActivePeers() {
5656
for deletePeerName, deletePeer := range peers {
5757
docID := getDocID(t) + "_create=" + createPeerName + ",update=" + deletePeerName
@@ -79,7 +79,7 @@ func TestMultiActorResurrect(t *testing.T) {
7979
for _, topology := range append(simpleTopologies, Topologies...) {
8080
t.Run(topology.description, func(t *testing.T) {
8181
collectionName, peers, replications := setupTests(t, topology)
82-
82+
replications.Start()
8383
for createPeerName, createPeer := range peers.ActivePeers() {
8484
for deletePeerName, deletePeer := range peers {
8585
for resurrectPeerName, resurrectPeer := range peers {

topologytest/peer_test.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -330,11 +330,6 @@ func setupTests(t *testing.T, topology Topology) (base.ScopeAndCollectionName, P
330330
base.SetUpTestLogging(t, base.LevelDebug, base.KeyImport, base.KeyVV, base.KeyCRUD, base.KeySync)
331331
peers := createPeers(t, topology.peers)
332332
replications := createPeerReplications(t, peers, topology.replications)
333-
334-
for _, replication := range replications {
335-
// temporarily start the replication before writing the document, limitation of CouchbaseLiteMockPeer as active peer since WriteDocument is calls PushRev
336-
replication.Start()
337-
}
338333
return getSingleDsName(), peers, replications
339334
}
340335

topologytest/single_actor_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ func TestSingleActorCreate(t *testing.T) {
2121
for _, topology := range append(simpleTopologies, Topologies...) {
2222
t.Run(topology.description, func(t *testing.T) {
2323
collectionName, peers, replications := setupTests(t, topology)
24+
replications.Start()
2425
for activePeerID, activePeer := range peers.ActivePeers() {
2526
t.Run(fmt.Sprintf("actor=%s", activePeerID), func(t *testing.T) {
2627
updatePeersT(t, peers)
@@ -44,6 +45,7 @@ func TestSingleActorUpdate(t *testing.T) {
4445
for _, topology := range append(simpleTopologies, Topologies...) {
4546
t.Run(topology.description, func(t *testing.T) {
4647
collectionName, peers, replications := setupTests(t, topology)
48+
replications.Start()
4749
for activePeerID, activePeer := range peers.ActivePeers() {
4850
t.Run(fmt.Sprintf("actor=%s", activePeerID), func(t *testing.T) {
4951
updatePeersT(t, peers)
@@ -74,6 +76,7 @@ func TestSingleActorDelete(t *testing.T) {
7476
for _, topology := range append(simpleTopologies, Topologies...) {
7577
t.Run(topology.description, func(t *testing.T) {
7678
collectionName, peers, replications := setupTests(t, topology)
79+
replications.Start()
7780
for activePeerID, activePeer := range peers.ActivePeers() {
7881
t.Run(fmt.Sprintf("actor=%s", activePeerID), func(t *testing.T) {
7982
updatePeersT(t, peers)
@@ -104,6 +107,7 @@ func TestSingleActorResurrect(t *testing.T) {
104107
for _, topology := range append(simpleTopologies, Topologies...) {
105108
t.Run(topology.description, func(t *testing.T) {
106109
collectionName, peers, replications := setupTests(t, topology)
110+
replications.Start()
107111
for activePeerID, activePeer := range peers.ActivePeers() {
108112
t.Run(fmt.Sprintf("actor=%s", activePeerID), func(t *testing.T) {
109113
updatePeersT(t, peers)

0 commit comments

Comments
 (0)