MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestSingleNodeSyncSeqRollback

Function TestSingleNodeSyncSeqRollback

db/sequence_allocator_test.go:406–479  ·  view source on GitHub ↗

TestSingleNodeSyncSeqRollback: - Test rollback of _sync:seq doc in bucket for a single node - Use nextSequence to allocate sequences and trigger the rollback handling code - Between each sequence allocation alter the _sync:seq doc to some value in the bucket + alter a.last to mock allocator allocati

(t *testing.T)

Source from the content-addressed store, hash-verified

404// allocator allocating sequences to end of current batch
405// - Asserts that handling using nextSequence function is correct
406func TestSingleNodeSyncSeqRollback(t *testing.T) {
407 ctx := base.TestCtx(t)
408 bucket := base.GetTestBucket(t)
409 defer bucket.Close(ctx)
410
411 sgw, err := base.NewSyncGatewayStats()
412 require.NoError(t, err)
413 dbstats, err := sgw.NewDBStats("", false, false, false, nil, nil)
414 require.NoError(t, err)
415 testStats := dbstats.Database()
416 ds := bucket.GetSingleDataStore()
417
418 a := &sequenceAllocator{
419 datastore: bucket.GetSingleDataStore(),
420 dbStats: testStats,
421 sequenceBatchSize: 10,
422 reserveNotify: make(chan struct{}, 50), // no sequence release monitor
423 metaKeys: base.DefaultMetadataKeys,
424 }
425
426 nxtSeq, err := a.nextSequence(ctx)
427 require.NoError(t, err)
428 assert.Equal(t, uint64(1), nxtSeq)
429
430 // alter _sync:seq in bucket to 5
431 err = ds.Set(a.metaKeys.SyncSeqKey(), 0, nil, 5)
432 require.NoError(t, err)
433
434 // alter s.last to mock sequences being allocated
435 a.last = 10
436
437 // triggers correction value increase to 10 (sequence batch value) thus nextSeq is higher than you would expect
438 nxtSeq, err = a.nextSequence(ctx)
439 require.NoError(t, err)
440 assert.Equal(t, uint64(521), nxtSeq)
441 assert.Equal(t, uint64(530), a.max)
442
443 // alter _sync:seq in bucket to end seq in prev batch
444 err = ds.Set(a.metaKeys.SyncSeqKey(), 0, nil, 10)
445 require.NoError(t, err)
446
447 // alter s.last to mock sequences being allocated
448 a.last = 530
449
450 nxtSeq, err = a.nextSequence(ctx)
451 require.NoError(t, err)
452 assert.Equal(t, uint64(1041), nxtSeq)
453 assert.Equal(t, uint64(1050), a.max)
454
455 // alter _sync:seq in bucket to start seq in batch
456 err = ds.Set(a.metaKeys.SyncSeqKey(), 0, nil, 521)
457 require.NoError(t, err)
458
459 // alter s.last to mock sequences being allocated
460 a.last = 1050
461
462 // triggers correction value increase to 10 (sequence batch value) thus nextSeq is higher than you would expect
463 nxtSeq, err = a.nextSequence(ctx)

Callers

nothing calls this directly

Calls 11

nextSequenceMethod · 0.95
TestCtxFunction · 0.92
GetTestBucketFunction · 0.92
NewSyncGatewayStatsFunction · 0.92
NewDBStatsMethod · 0.80
SyncSeqKeyMethod · 0.80
CloseMethod · 0.65
DatabaseMethod · 0.45
GetSingleDataStoreMethod · 0.45
EqualMethod · 0.45
SetMethod · 0.45

Tested by

no test coverage detected