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

API to get/set lastCommittedOpTime on Shard

    XMLWordPrintable

Details

    • Task
    • Status: Closed
    • Major - P3
    • Resolution: Fixed
    • None
    • 3.7.3
    • Sharding
    • None
    • Fully Compatible
    • Sharding 2018-02-12, Sharding 2018-02-26, Sharding 2018-03-12

    Description

      Summary:

      Mongos needs to track the highest lastCommittedOpTime it's seen per shard, so new logic needs to be added to the Shard interface.

      Description:

      ShardRemote will get a new private field LogicalTime _lastCommittedOpTime that will be updated / accessed through new methods void updateLastCommittedOpTime(LogicalTime lastCommittedOpTime) and LogicalTime getLastCommittedOpTime(). These methods will be declared in src/mongo/s/client/shard.h, but only implemented in ShardRemote, containing MONGO_UNREACHABLE in ShardLocal. This new field will need to be mutex protected, and we will only store the new time in updateLastCommittedOpTime if the new time is greater than the currently stored one (it's possible a secondary returns a lastCommittedOpTime lower than one returned from an earlier command on a primary or farther ahead secondary).

      void ShardRemote::updateLastCommittedOpTime(LogicalTime time) {
           stdx::lock_guard<stdx::mutex> lk(_lastCommittedOpTimeMutex);
           if (lastCommittedOpTime > _lastCommittedOpTime) {
               _lastCommittedOpTime = lastCommittedOpTime;
           }
      }
       
      LogicalTime ShardRemote::getLastCommittedOpTime() {
          stdx::lock_guard<stdx::mutex> lk(_lastCommittedOpTimeMutex);
          return _lastCommittedOpTime;
      }
       
      mutable stdx::mutex _lastCommittedOpTimeMutex;
      LogicalTime _lastCommittedOpTime;
      

      Open Questions:

      POC: https://mongodbcr.appspot.com/188010001/

      Attachments

        Issue Links

          Activity

            People

              jack.mulrow@mongodb.com Jack Mulrow
              misha.tyulenev@mongodb.com Misha Tyulenev
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: