Skip to content

Commit 43129a0

Browse files
authored
CBG-4839 allow vBucketsMaxCas to not be populated (#7782)
1 parent 5b41b06 commit 43129a0

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

base/collection.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,12 +357,19 @@ func (b *GocbV2Bucket) GetCCVSettings(ctx context.Context) (ccvEnabled bool, max
357357
if err != nil {
358358
return false, nil, fmt.Errorf("error getting vbucket count: %v", err)
359359
}
360-
// we'd always expect a CAS value per vbucket if CCV is enabled and has propagated correctly - so fail if that's not the case
360+
361+
highCAS := make(map[VBNo]uint64, numVBuckets)
362+
// we'd always expect a CAS value per vbucket if CCV is enabled and has propagated correctly
363+
// except after a bucket flushed in Server < 7.6.8 see MB-64705
364+
// Treating this as ECCV=true with startingCas=0, which will mean imports will all get tagged with bucket SourceID.
361365
if len(response.VBucketsMaxCas) != int(numVBuckets) {
362-
return false, nil, fmt.Errorf("error getting vbucket CAS, expected %d vbucket CAS values, got %q", numVBuckets, response.VBucketsMaxCas)
366+
InfofCtx(ctx, KeyBucket, "Bucket %q has enableCrossClusterVersioning=true but unexpected number of vbucket CAS values - expected %d, got %+v. Treating all imports as originating on this Couchbase Server cluster.", MD(b.GetName()), numVBuckets, response.VBucketsMaxCas)
367+
for i := range numVBuckets {
368+
highCAS[VBNo(i)] = 0
369+
}
370+
return true, highCAS, nil
363371
}
364372

365-
highCAS := make(map[VBNo]uint64, numVBuckets)
366373
for i, casStr := range response.VBucketsMaxCas {
367374
cas, err := strconv.ParseUint(casStr, 10, 64)
368375
if err != nil {

db/database.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1681,7 +1681,11 @@ func (db *DatabaseContext) GetVersionPruningWindow(ctx context.Context, forceRef
16811681
func (db *DatabaseContext) updateCCVSettings(ctx context.Context) error {
16821682
cbStore, ok := base.AsCouchbaseBucketStore(db.Bucket)
16831683
if !ok {
1684-
db.CachedCCVEnabled.Store(false)
1684+
// for rosmar, ECCV is always enabled, mark starting cas as 0
1685+
db.CachedCCVEnabled.Store(true)
1686+
for vbNo := range db.numVBuckets {
1687+
db.CachedCCVStartingCas.Store(base.VBNo(vbNo), 0)
1688+
}
16851689
return nil
16861690
}
16871691

db/import_test.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,6 @@ func TestFeedImport(t *testing.T) {
119119
}
120120
for _, testCase := range testCases {
121121
t.Run(testCase.name, func(t *testing.T) {
122-
if base.UnitTestUrlIsWalrus() {
123-
t.Skip("rosmar does not support vBuckets and unknownSource")
124-
}
125122
docID := SafeDocumentName(t, t.Name())
126123
db.CachedCCVEnabled.Store(testCase.eccv)
127124
for vBucket := range db.numVBuckets {
@@ -282,9 +279,6 @@ func TestOnDemandImport(t *testing.T) {
282279
}
283280
for _, testCase := range testCases {
284281
t.Run(testCase.name, func(t *testing.T) {
285-
if base.UnitTestUrlIsWalrus() {
286-
t.Skip("rosmar does not support vBuckets and unknownSource")
287-
}
288282
docID := SafeDocumentName(t, t.Name())
289283
db.CachedCCVEnabled.Store(testCase.eccv)
290284
for vBucket := range db.numVBuckets {

0 commit comments

Comments
 (0)