Uploaded image for project: 'Couchbase Server'
  1. Couchbase Server
  2. MB-24562

Checkpoint Manager potential race condition

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Major
    • 5.0.0
    • 5.0.0
    • XDCR
    • Untriaged
    • No

    Description

      As part of the go race detector run, it caught some places where we access metadata.CheckpointRecord without locking

      type checkpointRecordWithLock struct {
      	ckpt *metadata.CheckpointRecord
      	lock *sync.RWMutex
      }
      

      For example,

      func (ckmgr *CheckpointManager) do_checkpoint(vbno uint16, through_seqno_map map[uint16]uint64,
      ...
      		ckpt_record.Seqno = through_seqno
      
      

      is one it complained about.

      ==================
      WARNING: DATA RACE
      Write at 0x00c42041e048 by goroutine 172:
        github.com/couchbase/goxdcr/pipeline_svc.(*CheckpointManager).do_checkpoint()
            /Users/neil.huang/source/couchbase/goproj/src/github.com/couchbase/goxdcr/pipeline_svc/checkpoint_manager.go:1097 +0x433
        github.com/couchbase/goxdcr/pipeline_svc.(*CheckpointManager).performCkpt_internal()
            /Users/neil.huang/source/couchbase/goproj/src/github.com/couchbase/goxdcr/pipeline_svc/checkpoint_manager.go:1048 +0x577
       
      Previous read at 0x00c42041e048 by goroutine 123:
        github.com/couchbase/goxdcr/pipeline_svc.(*CheckpointManager).getVBTimestampForVB()
            /Users/neil.huang/source/couchbase/goproj/src/github.com/couchbase/goxdcr/pipeline_svc/checkpoint_manager.go:715 +0x16a
        github.com/couchbase/goxdcr/pipeline_svc.(*CheckpointManager).startSeqnoGetter()
            /Users/neil.huang/source/couchbase/goproj/src/github.com/couchbase/goxdcr/pipeline_svc/checkpoint_manager.go:692 +0x364
       
      Goroutine 172 (running) created at:
        github.com/couchbase/goxdcr/pipeline_svc.(*CheckpointManager).PerformCkpt()
            /Users/neil.huang/source/couchbase/goproj/src/github.com/couchbase/goxdcr/pipeline_svc/checkpoint_manager.go:998 +0x75d
        github.com/couchbase/goxdcr/pipeline_svc.(*CheckpointManager).CheckpointBeforeStop.func1()
            /Users/neil.huang/source/couchbase/goproj/src/github.com/couchbase/goxdcr/pipeline_svc/checkpoint_manager.go:477 +0x42
       
      Goroutine 123 (running) created at:
        github.com/couchbase/goxdcr/pipeline_svc.(*CheckpointManager).SetVBTimestamps()
            /Users/neil.huang/source/couchbase/goproj/src/github.com/couchbase/goxdcr/pipeline_svc/checkpoint_manager.go:638 +0x15d2
        github.com/couchbase/goxdcr/factory.(*XDCRFactory).SetStartSeqno()
            /Users/neil.huang/source/couchbase/goproj/src/github.com/couchbase/goxdcr/factory/xdcr_factory.go:674 +0xf8
        github.com/couchbase/goxdcr/factory.(*XDCRFactory).SetStartSeqno-fm()
            /Users/neil.huang/source/couchbase/goproj/src/github.com/couchbase/goxdcr/factory/xdcr_factory.go:249 +0x55
      ==================
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            neil.huang Neil Huang
            neil.huang Neil Huang
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes

                PagerDuty