Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-65938

Collection haveCappedWaiters should check actual waiters, not potential waiters

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major - P3
    • Resolution: Won't Fix
    • None
    • None
    • None
    • None
    • Repl 2022-05-02, Repl 2022-05-16, Repl 2022-05-30, Repl 2022-06-13, Repl 2022-06-27

    Description

      Background:

      The Collection method haveCappedWaiter()s returns whether anyone has a shared pointer to the collection's cappedNotifier. Some time in the 3.6 timeframe (SERVER-29127), we started holding the cappedNotifier whenever we were in an oplog find/getMore even when we were not actually waiting for data, because holding the cappedNotifier also allows us to track the notifier version. However, haveCappedWaiters() is used for oplog visibility; specifically, if we have capped waiters, we update oplog visibility immediately (and ping the capped notifier) rather than batch notifications. This should only happen if someone is waiting on the notifier, not if they are merely tracking it.

      Solution: We should maintain the version on the capped notifier whenever anyone has a shared pointer to it. But we should return true from haveCappedWaiters only if the notifier is actually in the wait loop.

      Attachments

        Issue Links

          Activity

            People

              matthew.russotto@mongodb.com Matthew Russotto
              matthew.russotto@mongodb.com Matthew Russotto
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: