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

Resharding fails to abort on setFCV on a cluster with config shard

    • Type: Icon: Bug Bug
    • Resolution: Unresolved
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • None
    • Cluster Scalability
    • ALL
    • None
    • 3
    • TBD
    • None
    • None
    • None
    • None
    • None
    • None

      In a cluster with config shard, and with allFeatureFlagTests (I don't know which feature flag triggers it) setFCV can get indefinitely stuck waiting for resharding operations to abort. The following jstest reproduces the issue very reliably:

      /**
       * @tags: [
       *   requires_sharding,
       *   multiversion_incompatible,
       *  ]
       */
      
      import {
          uniformDistTransitions
      } from "jstests/concurrency/fsm_workload_helpers/state_transition_utils.js";
      
      export const $config = (function() {
          let states = {
              insert: function(db, collName, connCache) {
                  jsTestLog('Executing insert state');
                  const bulk = db.getSiblingDB("DB_" + Random.randInt(10))["coll_" + Random.randInt(10)]
                                   .initializeUnorderedBulkOp();
                  for (let i = 0; i < 100; ++i) {
                      bulk.insert({x: i});
                  }
                  assert.commandWorked(bulk.execute());
                  jsTestLog('Finishing insert state');
              },
              setFCV: function(db, collName, connCache) {
                  const fcvValues = [lastLTSFCV, lastContinuousFCV, latestFCV];
                  const targetFCV = fcvValues[Random.randInt(3)];
                  jsTestLog('Executing setFCV state, setting to:' + targetFCV);
                  try {
                      assert.commandWorked(
                          db.adminCommand({setFeatureCompatibilityVersion: targetFCV, confirm: true}));
                  } catch (e) {
                      // Just ignore
                      jsTestLog(e);
                  }
      
                  jsTestLog('setFCV state finished');
              },
          };
      
          return {
              threadCount: 8,
              iterations: 64,
              startState: 'insert',
              data: {},
              states: states,
              transitions: uniformDistTransitions(states),
              setup: function(db, collName, connCache) {},
              passConnectionCache: true
          };
      })();
      

      Run in a suite with balancer, like this:

      buildscripts/resmoke.py run --suites=concurrency_sharded_with_balancer_and_auto_bootstrap --runAllFeatureFlagTests jstests/concurrency/fsm_workloads/ddl/random_ddl/test.js

            Assignee:
            Unassigned Unassigned
            Reporter:
            aitor.esteve@mongodb.com Aitor Esteve Alvarado
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: