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

XDCR - Backfill pipeline stats are not reset if replication was deleted when backfill is in progress (negative changes_left)

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Major
    • Morpheus, 7.6.2
    • 7.6.0, Morpheus, 7.0.0, 7.0.1, 7.0.2, 7.0.3, 7.0.4, 7.1.4, 7.0.5, 7.1.0, 7.1.1, 7.1.2, 7.2.0, 7.1.3, 7.2.1, 7.1.5, 7.2.4, 7.2.2, 7.1.6, 7.2.3, 7.2.5, 7.6.2
    • XDCR
    • Untriaged
    • 0
    • Unknown

    Description

      Say for example, as part of replication spec GC (since target bucket is deleted), we eventually call `StopPipeline` which deletes main pipeline checkpoints and resets stats when replication spec was deleted/recreated, but not for backfill pipeline:

      func (pipelineMgr *PipelineManager) StopPipeline(rep_status pipeline.ReplicationStatusIface) base.ErrorMap {
      ...
              // if replication spec has been deleted
      	// or deleted and recreated, which is signaled by change in spec internal id
      	// perform clean up
      	spec, _ := pipelineMgr.repl_spec_svc.ReplicationSpec(replId)
      	if spec == nil || (rep_status.GetSpecInternalId() != "" && rep_status.GetSpecInternalId() != spec.InternalId) {
      		if spec == nil {
      			pipelineMgr.logger.Infof("%v Cleaning up replication status since repl spec has been deleted.\n", replId)
      		} else {
      			pipelineMgr.logger.Infof("%v Cleaning up replication status since repl spec has been deleted and recreated. oldSpecInternalId=%v, newSpecInternalId=%v\n", replId, rep_status.GetSpecInternalId(), spec.InternalId)
      		}
       
      		pipelineMgr.checkpoint_svc.DelCheckpointsDocs(replId)
       
      		rep_status.ResetStorage(common.MainPipeline)
      		pipelineMgr.repl_spec_svc.SetDerivedObj(replId, nil)
       
      		//close the connection pool for the replication
      		pools := base.ConnPoolMgr().FindPoolNamesByPrefix(replId)
      		for _, poolName := range pools {
      			base.ConnPoolMgr().RemovePool(poolName)
      		}
      	} 

      `StopPipeline` calls `StopBackfillPipeline`, but StopBackfillPipeline differs from StopPipeline such that it needs an explicit call to `CleanBackfillPipeline` to clean backfill pipeline checkpoints and reset stats. Checkpoints are deleted for backfill pipeline in `postDeleteBackfillRepl` as part of replication spec deletion callback, but stats are never reset.

      Attachments

        Issue Links

          Activity

            People

              ayush.nayyar Ayush Nayyar
              sumukh.bhat Sumukh Bhat
              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