Skip to content

Commit d525367

Browse files
committed
CBG-4257 add HLV into DocVersion
1 parent 61b0628 commit d525367

15 files changed

+205
-185
lines changed

db/revision_cache_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1401,7 +1401,10 @@ func documentRevisionForCacheTestUpdate(key string, body string, version DocVers
14011401
DocID: key,
14021402
RevID: version.RevTreeID,
14031403
History: Revisions{"start": 1},
1404-
CV: &version.CV,
1404+
CV: &Version{
1405+
SourceID: version.HLV.SourceID,
1406+
Value: version.HLV.Version,
1407+
},
14051408
}
14061409
}
14071410

@@ -1501,7 +1504,7 @@ func createThenRemoveFromRevCache(t *testing.T, ctx context.Context, docID strin
15011504
RevTreeID: doc.CurrentRev,
15021505
}
15031506
if doc.HLV != nil {
1504-
docVersion.CV = *doc.HLV.ExtractCurrentVersionFromHLV()
1507+
docVersion.HLV = *doc.HLV
15051508
}
15061509
return docVersion
15071510
}

db/utilities_hlv_testing.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ import (
2525
// DocVersion represents a specific version of a document in an revID/HLV agnostic manner.
2626
type DocVersion struct {
2727
RevTreeID string
28-
CV Version
28+
HLV HybridLogicalVector
2929
}
3030

3131
func (v *DocVersion) String() string {
32-
return fmt.Sprintf("RevTreeID: %s", v.RevTreeID)
32+
return fmt.Sprintf("RevTreeID:%s, HLV:%+#v", v.RevTreeID, v.HLV)
3333
}
3434

3535
func (v DocVersion) Equal(o DocVersion) bool {
@@ -41,10 +41,7 @@ func (v DocVersion) Equal(o DocVersion) bool {
4141

4242
func (v DocVersion) GetRev(useHLV bool) string {
4343
if useHLV {
44-
if v.CV.SourceID == "" {
45-
return ""
46-
}
47-
return v.CV.String()
44+
return v.HLV.GetCurrentVersionString()
4845
} else {
4946
return v.RevTreeID
5047
}
@@ -71,6 +68,14 @@ func (v *DocVersion) RevIDDigest() string {
7168
return strings.Split(v.RevTreeID, "-")[1]
7269
}
7370

71+
// CV returns the current version of the document.
72+
func (v *DocVersion) CV() Version {
73+
return Version{
74+
SourceID: v.HLV.SourceID,
75+
Value: v.HLV.Version,
76+
}
77+
}
78+
7479
// HLVAgent performs HLV updates directly (not via SG) for simulating/testing interaction with non-SG HLV agents
7580
type HLVAgent struct {
7681
t *testing.T

rest/access_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1185,7 +1185,7 @@ func TestAllDocsCV(t *testing.T) {
11851185
"total_rows": 1,
11861186
"update_seq": 1,
11871187
"rows": [{"key": "%s", "id": "%s", "value": {"rev": "%s", "cv": "%s"}}]
1188-
}`, docID, docID, docVersion.RevTreeID, docVersion.CV.String()),
1188+
}`, docID, docID, docVersion.RevTreeID, docVersion.HLV.GetCurrentVersionString()),
11891189
},
11901190
}
11911191
for _, testCase := range testCases {

rest/api_test.go

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

28352835
// assert that we have a prev CV drop to pv and a new CV pair, assert pv values are as expected after delta conversions
28362836
assert.Equal(t, testSource, newDoc.HLV.SourceID)
2837-
assert.Equal(t, version2.CV.Value, newDoc.HLV.Version)
2837+
assert.Equal(t, version2.HLV.Version, newDoc.HLV.Version)
28382838
assert.Len(t, newDoc.HLV.PreviousVersions, 1)
28392839
assert.Equal(t, casV1, newDoc.HLV.PreviousVersions[encodedSourceV1])
28402840

rest/blip_api_crud_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2038,7 +2038,7 @@ func TestSendReplacementRevision(t *testing.T) {
20382038

20392039
// also purge revision backup and flush cache to ensure request for rev 1-... cannot be fulfilled
20402040
// Revs are backed up by hash of CV now, switch to fetch by this till CBG-3748 (backwards compatibility for revID)
2041-
cvHash := base.Crc32cHashString([]byte(version1.CV.String()))
2041+
cvHash := base.Crc32cHashString([]byte(version1.HLV.GetCurrentVersionString()))
20422042
err := collection.PurgeOldRevisionJSON(ctx, docID, cvHash)
20432043
require.NoError(t, err)
20442044
rt.GetDatabase().FlushRevisionCacheForTest()
@@ -2183,9 +2183,9 @@ func TestPullReplicationUpdateOnOtherHLVAwarePeer(t *testing.T) {
21832183
// create doc version of the above doc write
21842184
version1 := DocVersion{
21852185
RevTreeID: bucketDoc.CurrentRev,
2186-
CV: db.Version{
2186+
HLV: db.HybridLogicalVector{
21872187
SourceID: hlvHelper.Source,
2188-
Value: cas,
2188+
Version: cas,
21892189
},
21902190
}
21912191

rest/blip_api_delta_sync_test.go

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

383383
// reject deltas built ontop of rev 1
384384
if client.UseHLV() {
385-
client.rejectDeltasForSrcRev = docVersion1.CV.String()
385+
client.rejectDeltasForSrcRev = docVersion1.HLV.GetCurrentVersionString()
386386
} else {
387387
client.rejectDeltasForSrcRev = docVersion1.RevTreeID
388388
}

rest/blip_legacy_revid_test.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,8 @@ func TestProcessLegacyRev(t *testing.T) {
230230

231231
// assert this legacy doc has been given source version pair
232232
docSource, docVrs := collection.GetDocumentCurrentVersion(t, "doc1")
233-
assert.Equal(t, docVersion.CV.SourceID, docSource)
234-
assert.NotEqual(t, docVersion.CV.Value, docVrs)
233+
assert.Equal(t, docVersion.HLV.SourceID, docSource)
234+
assert.NotEqual(t, docVersion.HLV.Version, docVrs)
235235

236236
// try new rev to process
237237
_, _, _, err = bt.SendRev(
@@ -288,7 +288,7 @@ func TestProcessRevWithLegacyHistory(t *testing.T) {
288288
rev1ID := docVersion.RevTreeID
289289

290290
// remove hlv here to simulate a legacy rev
291-
require.NoError(t, ds.RemoveXattrs(ctx, docID, []string{base.VvXattrName}, docVersion.CV.Value))
291+
require.NoError(t, ds.RemoveXattrs(ctx, docID, []string{base.VvXattrName}, docVersion.HLV.Version))
292292
rt.GetDatabase().FlushRevisionCacheForTest()
293293

294294
// Have CBL send an update to that doc, with history in revTreeID format
@@ -308,7 +308,7 @@ func TestProcessRevWithLegacyHistory(t *testing.T) {
308308
rev1ID = docVersion.RevTreeID
309309

310310
// remove hlv here to simulate a legacy rev
311-
require.NoError(t, ds.RemoveXattrs(ctx, docID2, []string{base.VvXattrName}, docVersion.CV.Value))
311+
require.NoError(t, ds.RemoveXattrs(ctx, docID2, []string{base.VvXattrName}, docVersion.HLV.Version))
312312
rt.GetDatabase().FlushRevisionCacheForTest()
313313

314314
// Have CBL send an update to that doc, with history in HLV + revTreeID format
@@ -329,7 +329,7 @@ func TestProcessRevWithLegacyHistory(t *testing.T) {
329329
rev1ID = docVersion.RevTreeID
330330

331331
// remove hlv here to simulate a legacy rev
332-
require.NoError(t, ds.RemoveXattrs(ctx, docID3, []string{base.VvXattrName}, docVersion.CV.Value))
332+
require.NoError(t, ds.RemoveXattrs(ctx, docID3, []string{base.VvXattrName}, docVersion.HLV.Version))
333333
rt.GetDatabase().FlushRevisionCacheForTest()
334334

335335
history = []string{"1000@CBL2", "2-abc", rev1ID}
@@ -363,7 +363,7 @@ func TestProcessRevWithLegacyHistory(t *testing.T) {
363363
docVersion = rt.PutDocDirectly(docID5, db.Body{"test": "doc"})
364364

365365
docVersion = rt.UpdateDocDirectly(docID5, docVersion, db.Body{"some": "update"})
366-
version := docVersion.CV.Value
366+
version := docVersion.HLV.Version
367367
rev2ID := docVersion.RevTreeID
368368
pushedRev := db.Version{
369369
Value: version + 1000,
@@ -379,7 +379,7 @@ func TestProcessRevWithLegacyHistory(t *testing.T) {
379379
bucketDoc, _, err = collection.GetDocWithXattrs(ctx, docID5, db.DocUnmarshalAll)
380380
require.NoError(t, err)
381381
assert.Equal(t, pushedRev.String(), bucketDoc.HLV.GetCurrentVersionString())
382-
assert.Equal(t, docVersion.CV.Value, bucketDoc.HLV.PreviousVersions[docVersion.CV.SourceID])
382+
assert.Equal(t, docVersion.HLV.Version, bucketDoc.HLV.PreviousVersions[docVersion.HLV.SourceID])
383383
assert.NotNil(t, bucketDoc.History[rev2ID])
384384

385385
// 6. CBL sends rev=1010@CBL1, history=3-abc,2-abc,1-abc and SGW has 1000@SGW, 1-abc
@@ -404,7 +404,7 @@ func TestProcessRevWithLegacyHistory(t *testing.T) {
404404
bucketDoc, _, err = collection.GetDocWithXattrs(ctx, docID6, db.DocUnmarshalAll)
405405
require.NoError(t, err)
406406
assert.Equal(t, pushedRev.String(), bucketDoc.HLV.GetCurrentVersionString())
407-
assert.Equal(t, docVersion.CV.Value, bucketDoc.HLV.PreviousVersions[docVersion.CV.SourceID])
407+
assert.Equal(t, docVersion.HLV.Version, bucketDoc.HLV.PreviousVersions[docVersion.HLV.SourceID])
408408
assert.NotNil(t, bucketDoc.History[rev1ID])
409409
assert.NotNil(t, bucketDoc.History["2-abc"])
410410
assert.NotNil(t, bucketDoc.History["3-abc"])
@@ -444,7 +444,7 @@ func TestProcessRevWithLegacyHistoryConflict(t *testing.T) {
444444
docVersion = rt.UpdateDocDirectly(docID, docVersion, db.Body{"some": "update2"})
445445

446446
// remove hlv here to simulate a legacy rev
447-
require.NoError(t, ds.RemoveXattrs(base.TestCtx(t), docID, []string{base.VvXattrName}, docVersion.CV.Value))
447+
require.NoError(t, ds.RemoveXattrs(base.TestCtx(t), docID, []string{base.VvXattrName}, docVersion.HLV.Version))
448448
rt.GetDatabase().FlushRevisionCacheForTest()
449449

450450
history := []string{rev2ID, rev1ID}
@@ -473,7 +473,7 @@ func TestProcessRevWithLegacyHistoryConflict(t *testing.T) {
473473
docVersion = rt.UpdateDocDirectly(docID3, docVersion, db.Body{"some": "update"})
474474

475475
// remove hlv here to simulate a legacy rev
476-
require.NoError(t, ds.RemoveXattrs(base.TestCtx(t), docID3, []string{base.VvXattrName}, docVersion.CV.Value))
476+
require.NoError(t, ds.RemoveXattrs(base.TestCtx(t), docID3, []string{base.VvXattrName}, docVersion.HLV.Version))
477477
rt.GetDatabase().FlushRevisionCacheForTest()
478478

479479
history = []string{"1000@CBL2", rev1ID}
@@ -515,7 +515,7 @@ func TestChangesResponseLegacyRev(t *testing.T) {
515515

516516
// assert the rev property contains cv
517517
rev := request.Properties["rev"]
518-
assert.Equal(t, docVersion2.CV.String(), rev)
518+
assert.Equal(t, docVersion2.HLV.GetCurrentVersionString(), rev)
519519

520520
// assert that history contain current revID and previous revID
521521
history := request.Properties["history"]
@@ -633,7 +633,7 @@ func TestChangesResponseWithHLVInHistory(t *testing.T) {
633633
assert.Len(t, historyList, 3)
634634
assert.Equal(t, newDoc.CurrentRev, historyList[1])
635635
assert.Equal(t, docVersion.RevTreeID, historyList[2])
636-
assert.Equal(t, docVersion.CV.String(), historyList[0])
636+
assert.Equal(t, docVersion.HLV.GetCurrentVersionString(), historyList[0])
637637
}
638638

639639
bt.blipContext.HandlerForProfile["changes"] = func(request *blip.Message) {
@@ -712,7 +712,7 @@ func TestCBLHasPreUpgradeMutationThatHasNotBeenReplicated(t *testing.T) {
712712
rev1ID := docVersion.RevTreeID
713713

714714
// remove hlv here to simulate a legacy rev
715-
require.NoError(t, ds.RemoveXattrs(ctx, "doc1", []string{base.VvXattrName}, docVersion.CV.Value))
715+
require.NoError(t, ds.RemoveXattrs(ctx, "doc1", []string{base.VvXattrName}, docVersion.HLV.Version))
716716
rt.GetDatabase().FlushRevisionCacheForTest()
717717

718718
history := []string{rev1ID}
@@ -752,7 +752,7 @@ func TestCBLHasOfPreUpgradeMutationThatSGWAlreadyKnows(t *testing.T) {
752752
rev2ID := docVersion.RevTreeID
753753

754754
// remove hlv here to simulate a legacy rev
755-
require.NoError(t, ds.RemoveXattrs(ctx, "doc1", []string{base.VvXattrName}, docVersion.CV.Value))
755+
require.NoError(t, ds.RemoveXattrs(ctx, "doc1", []string{base.VvXattrName}, docVersion.HLV.Version))
756756
rt.GetDatabase().FlushRevisionCacheForTest()
757757

758758
history := []string{rev1ID}
@@ -791,7 +791,7 @@ func TestPushOfPostUpgradeMutationThatHasCommonAncestorToSGWVersion(t *testing.T
791791
rev2ID := docVersion.RevTreeID
792792

793793
// remove hlv here to simulate a legacy rev
794-
require.NoError(t, ds.RemoveXattrs(ctx, "doc1", []string{base.VvXattrName}, docVersion.CV.Value))
794+
require.NoError(t, ds.RemoveXattrs(ctx, "doc1", []string{base.VvXattrName}, docVersion.HLV.Version))
795795
rt.GetDatabase().FlushRevisionCacheForTest()
796796

797797
// send 100@CBL1
@@ -833,7 +833,7 @@ func TestPushDocConflictBetweenPreUpgradeCBLMutationAndPreUpgradeSGWMutation(t *
833833
rev3ID := docVersion.RevTreeID
834834

835835
// remove hlv here to simulate a legacy rev
836-
require.NoError(t, ds.RemoveXattrs(ctx, "doc1", []string{base.VvXattrName}, docVersion.CV.Value))
836+
require.NoError(t, ds.RemoveXattrs(ctx, "doc1", []string{base.VvXattrName}, docVersion.HLV.Version))
837837
rt.GetDatabase().FlushRevisionCacheForTest()
838838

839839
// send rev 3-def
@@ -922,7 +922,7 @@ func TestConflictBetweenPostUpgradeCBLMutationAndPostUpgradeSGWMutation(t *testi
922922
require.NoError(t, err)
923923
assert.Equal(t, "100@CBL1", bucketDoc.HLV.GetCurrentVersionString())
924924
assert.NotNil(t, bucketDoc.History[rev1ID])
925-
assert.Equal(t, docVersion.CV.Value, bucketDoc.HLV.PreviousVersions[docVersion.CV.SourceID])
925+
assert.Equal(t, docVersion.HLV.Version, bucketDoc.HLV.PreviousVersions[docVersion.HLV.SourceID])
926926

927927
// conflict rev
928928
docVersion = rt.PutDocDirectly(docID2, db.Body{"some": "doc"})
@@ -937,5 +937,5 @@ func TestConflictBetweenPostUpgradeCBLMutationAndPostUpgradeSGWMutation(t *testi
937937
bucketDoc, _, err = collection.GetDocWithXattrs(ctx, docID2, db.DocUnmarshalAll)
938938
require.NoError(t, err)
939939
assert.Equal(t, rev1ID, bucketDoc.CurrentRev)
940-
assert.Equal(t, docVersion.CV.String(), bucketDoc.HLV.GetCurrentVersionString())
940+
assert.Equal(t, docVersion.HLV.GetCurrentVersionString(), bucketDoc.HLV.GetCurrentVersionString())
941941
}

rest/changestest/changes_api_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1832,7 +1832,7 @@ func TestChangesIncludeDocs(t *testing.T) {
18321832
}
18331833
docVersion := rt.UpdateDocDirectly("doc_pruned", db.DocVersion{RevTreeID: revid}, body)
18341834
revid = docVersion.RevTreeID
1835-
cvs = append(cvs, docVersion.CV.String())
1835+
cvs = append(cvs, docVersion.HLV.GetCurrentVersionString())
18361836
}
18371837

18381838
// Doc w/ attachment

rest/doc_api_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,12 @@ func TestGetDocWithCV(t *testing.T) {
203203
{
204204
name: "get doc with cv",
205205
url: "/{{.keyspace}}/doc1?show_cv=true",
206-
output: fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"bar"}`, docID, docVersion.RevTreeID, docVersion.CV),
206+
output: fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"bar"}`, docID, docVersion.RevTreeID, docVersion.HLV.GetCurrentVersionString()),
207207
},
208208
{
209209
name: "get doc with open_revs=all and cv no multipart",
210210
url: "/{{.keyspace}}/doc1?open_revs=all&show_cv=true",
211-
output: fmt.Sprintf(`[{"ok": {"_id":"%s","_rev":"%s","_cv":"%s","foo":"bar"}}]`, docID, docVersion.RevTreeID, docVersion.CV),
211+
output: fmt.Sprintf(`[{"ok": {"_id":"%s","_rev":"%s","_cv":"%s","foo":"bar"}}]`, docID, docVersion.RevTreeID, docVersion.HLV.GetCurrentVersionString()),
212212
headers: map[string]string{
213213
"Accept": "application/json",
214214
},
@@ -217,7 +217,7 @@ func TestGetDocWithCV(t *testing.T) {
217217
{
218218
name: "get doc with open_revs=all and cv",
219219
url: "/{{.keyspace}}/doc1?open_revs=all&show_cv=true",
220-
output: fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"bar"}`, docID, docVersion.RevTreeID, docVersion.CV),
220+
output: fmt.Sprintf(`{"_id":"%s","_rev":"%s","_cv":"%s","foo":"bar"}`, docID, docVersion.RevTreeID, docVersion.HLV.GetCurrentVersionString()),
221221
multipart: true,
222222
},
223223
}
@@ -265,8 +265,8 @@ func TestBulkGetWithCV(t *testing.T) {
265265
url: "/{{.keyspace}}/_bulk_get?show_cv=true",
266266
input: fmt.Sprintf(`{"docs":[{"id":"%s"},{"id":"%s"}]}`, doc1ID, doc2ID),
267267
output: []string{
268-
fmt.Sprintf(`{"_id":"%s","_rev":"%s","foo":"bar", "_cv": "%s"}`, doc1ID, doc1Version.RevTreeID, doc1Version.CV),
269-
fmt.Sprintf(`{"_id":"%s","_rev":"%s","foo":"baz", "_cv": "%s"}`, doc2ID, doc2Version.RevTreeID, doc2Version.CV),
268+
fmt.Sprintf(`{"_id":"%s","_rev":"%s","foo":"bar", "_cv": "%s"}`, doc1ID, doc1Version.RevTreeID, doc1Version.HLV.GetCurrentVersionString()),
269+
fmt.Sprintf(`{"_id":"%s","_rev":"%s","foo":"baz", "_cv": "%s"}`, doc2ID, doc2Version.RevTreeID, doc2Version.HLV.GetCurrentVersionString()),
270270
},
271271
},
272272
}

rest/importtest/import_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func TestXattrImportOldDocRevHistory(t *testing.T) {
179179
// 1. Create revision with history
180180
docID := t.Name()
181181
version := rt.PutDocDirectly(docID, rest.JsonToMap(t, `{"val":-1}`))
182-
cv := version.CV.String()
182+
cv := version.HLV.GetCurrentVersionString()
183183
collection, ctx := rt.GetSingleTestDatabaseCollectionWithUser()
184184

185185
for i := 0; i < 10; i++ {
@@ -189,7 +189,7 @@ func TestXattrImportOldDocRevHistory(t *testing.T) {
189189
cvHash := base.Crc32cHashString([]byte(cv))
190190
purgeErr := collection.PurgeOldRevisionJSON(ctx, docID, cvHash)
191191
require.NoError(t, purgeErr)
192-
cv = version.CV.String()
192+
cv = version.HLV.GetCurrentVersionString()
193193
}
194194

195195
// 2. Modify doc via SDK

0 commit comments

Comments
 (0)