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)
| 404 | // allocator allocating sequences to end of current batch |
| 405 | // - Asserts that handling using nextSequence function is correct |
| 406 | func 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) |
nothing calls this directly
no test coverage detected