@@ -19,6 +19,7 @@ import (
19
19
"fmt"
20
20
"io"
21
21
"net/http"
22
+ "strconv"
22
23
"strings"
23
24
"sync"
24
25
"time"
@@ -352,6 +353,42 @@ func (b *GocbV2Bucket) GetMaxVbno() (uint16, error) {
352
353
return uint16 (vbNo ), nil
353
354
}
354
355
356
+ func (b * GocbV2Bucket ) GetCCVStartingCas (ctx context.Context ) (map [uint16 ]uint64 , error ) {
357
+ uri := "/pools/default/buckets/" + b .GetName ()
358
+ output , status , err := b .MgmtRequest (ctx , http .MethodGet , uri , "application/json" , nil )
359
+ if err != nil {
360
+ return nil , fmt .Errorf ("error executing query for vbucket CAS, status code: %d error: %v output: %s" , status , err , string (output ))
361
+ }
362
+ if status != http .StatusOK {
363
+ return nil , fmt .Errorf ("error executing query for vbucket CAS, status code: %d output: %s" , status , string (output ))
364
+ }
365
+ var bucketInfo struct {
366
+ EnableCrossClusterVersioning bool `json:"enableCrossClusterVersioning"`
367
+ MaxCas []string `json:"vBucketsMaxCas"`
368
+ }
369
+ err = JSONUnmarshal (output , & bucketInfo )
370
+ if err != nil {
371
+ return nil , fmt .Errorf ("error parsing output from bucket %q error:%v" , string (output ), err )
372
+ }
373
+
374
+ numVBuckets , err := b .GetMaxVbno ()
375
+ if err != nil {
376
+ return nil , fmt .Errorf ("error getting vbucket count: %v" , err )
377
+ }
378
+ if len (bucketInfo .MaxCas ) != int (numVBuckets ) {
379
+ return nil , fmt .Errorf ("error getting vbucket CAS, expected %d vbucket CAS values, got %q" , numVBuckets , bucketInfo .MaxCas )
380
+ }
381
+ highCas := make (map [uint16 ]uint64 , len (bucketInfo .MaxCas ))
382
+ for i , casStr := range bucketInfo .MaxCas {
383
+ cas , err := strconv .ParseUint (casStr , 10 , 64 )
384
+ if err != nil {
385
+ return nil , fmt .Errorf ("error parsing vbucket CAS value %q for vbucket %d: %v" , casStr , i , err )
386
+ }
387
+ highCas [uint16 (i )] = cas
388
+ }
389
+ return highCas , nil
390
+ }
391
+
355
392
func (b * GocbV2Bucket ) getConfigSnapshot () (* gocbcore.ConfigSnapshot , error ) {
356
393
agent , err := b .GetGoCBAgent ()
357
394
if err != nil {
0 commit comments