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

ReshardingCoordinatorObserver destructor should only invariant if ReshardingCoordinatorService::run() is called

    XMLWordPrintableJSON

Details

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major - P3 Major - P3
    • None
    • 5.0.0, 6.0.0, 6.1.0, 7.0.0, 6.2.0-rc6, 7.2.0-rc0, 7.1.0-rc5
    • Sharding
    • Cluster Scalability
    • ALL
    • 0
    • 2

    Description

      In BF-30149 it was found that in very rare cases it is possible for ReshardingCoordinator Instance to be destroyed before Instance::run() is called by the POS framework as described in this comment. In this case the ReshardingCoordinator destructor would be called following which ReshardingCoordinatorOpObserver destructor would invariant on promises:

      ReshardingCoordinatorObserver::~ReshardingCoordinatorObserver() {
          stdx::lock_guard<Latch> lg(_mutex);
          invariant(_allDonorsReportedMinFetchTimestamp.getFuture().isReady());
          invariant(_allRecipientsFinishedCloning.getFuture().isReady());
          invariant(_allRecipientsReportedStrictConsistencyTimestamp.getFuture().isReady());
          invariant(_allRecipientsDone.getFuture().isReady());
          invariant(_allDonorsDone.getFuture().isReady());
      }
      

      We should pass through the invariant checks if Instance::run() is not called.

      Attachments

        Activity

          People

            backlog-server-cluster-scalability Backlog - Cluster Scalability
            abdul.qadeer@mongodb.com Abdul Qadeer
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: