SERVER-106306 Convert UWE query knob to an IFR flag (#44857)

GitOrigin-RevId: 36ffa983ae95f421d2f385a0a2efaf7d050b7489
This commit is contained in:
Rui Liu 2025-12-08 14:50:40 +00:00 committed by MongoDB Bot
parent 63e6747093
commit b1f3237a1a
43 changed files with 127 additions and 133 deletions

View File

@ -28,3 +28,5 @@
- featureFlagPrimaryDrivenIndexBuilds
# TODO SERVER-104494 SERVER-104258: Turn this back on once the issues are fixed.
- featureFlagReshardingCloneNoRefresh
# TODO: SERVER-91308 Enable unified write executor.
- featureFlagUnifiedWriteExecutor

View File

@ -26,7 +26,7 @@ executor:
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
logComponentVerbosity:
command: 1
network:
@ -37,7 +37,7 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
logComponentVerbosity:
command: 1
network:

View File

@ -23,11 +23,11 @@ executor:
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_shards: 2
hooks:
- class: CheckReplDBHash

View File

@ -34,11 +34,11 @@ executor:
set_parameters:
coordinateCommitReturnImmediatelyAfterPersistingDecision: true
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 2
hooks:
- class: DropSessionsCollection

View File

@ -17,17 +17,17 @@ executor:
global_vars:
TestData:
doNotUseRawDataOperations: true
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
fixture:
class: ShardedClusterFixture
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 1
num_shards: 2
hooks:

View File

@ -15,9 +15,9 @@ executor:
global_vars:
TestData:
doNotUseRawDataOperations: true
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
setParametersMongos:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
nodb: ""
matrix_suite: true
selector:

View File

@ -34,9 +34,9 @@
shell_options:
global_vars:
TestData:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
setParametersMongos:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
- name: unified_write_executor_sharding_jscore_passthrough
value:
@ -45,16 +45,16 @@
shell_options:
global_vars:
TestData:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
fixture:
class: ShardedClusterFixture
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 1
num_shards: 2

View File

@ -43,7 +43,7 @@ executor:
shell_options:
global_vars:
TestData:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
- class: CheckReplDBHash
- class: CheckMetadataConsistencyInBackground
@ -57,9 +57,9 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 1

View File

@ -231,8 +231,8 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true

View File

@ -56,7 +56,7 @@ executor:
runningWithCausalConsistency: true
runningWithBalancer: false
implicitlyShardOnCreateCollectionOnly: true
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
- class: CheckShardFilteringMetadata
- class: CheckReplDBHashInBackground
@ -73,7 +73,7 @@ executor:
set_parameters:
enableTestCommands: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
shard_options:
mongod_options:
oplogSize: 1024
@ -83,7 +83,7 @@ executor:
roleGraphInvalidationIsFatal: 1
queryAnalysisWriterIntervalSecs: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 3
num_shards: 2
num_mongos: 2

View File

@ -67,7 +67,7 @@ executor:
runningWithCausalConsistency: true
runningWithBalancer: true
implicitlyShardOnCreateCollectionOnly: true
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
- class: CheckShardFilteringMetadata
@ -84,7 +84,7 @@ executor:
set_parameters:
enableTestCommands: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
shard_options:
mongod_options:
oplogSize: 1024
@ -96,7 +96,7 @@ executor:
queryAnalysisSamplerConfigurationRefreshSecs: 1
skipDroppingHashedShardKeyIndex: true
reshardingMinimumOperationDurationMillis: 0
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 3
num_shards: 2
num_mongos: 2

View File

@ -149,7 +149,7 @@ executor:
enableTestCommands: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1
findShardsOnConfigTimeoutMS: 30000 # giving legroom as this suite is doing initial sync
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
shard_options:
all_nodes_electable: True
mongod_options:
@ -177,7 +177,7 @@ executor:
queryAnalysisWriterIntervalSecs: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1
skipDroppingHashedShardKeyIndex: true
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 3
num_shards: 2
num_mongos: 2

View File

@ -94,7 +94,7 @@ executor:
runningWithSessions: true
traceExceptions: false
implicitlyShardOnCreateCollectionOnly: true
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
- class: CheckShardFilteringMetadata
- class: CheckReplDBHashInBackground
@ -111,7 +111,7 @@ executor:
set_parameters:
enableTestCommands: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
shard_options:
mongod_options:
oplogSize: 1024
@ -121,7 +121,7 @@ executor:
roleGraphInvalidationIsFatal: 1
queryAnalysisWriterIntervalSecs: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 3
num_shards: 2
num_mongos: 2

View File

@ -99,7 +99,7 @@ executor:
traceExceptions: false
runningWithBalancer: true
implicitlyShardOnCreateCollectionOnly: true
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
- class: CheckShardFilteringMetadata
@ -116,7 +116,7 @@ executor:
set_parameters:
enableTestCommands: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
shard_options:
mongod_options:
oplogSize: 1024
@ -128,7 +128,7 @@ executor:
queryAnalysisSamplerConfigurationRefreshSecs: 1
skipDroppingHashedShardKeyIndex: true
reshardingMinimumOperationDurationMillis: 0
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 3
num_shards: 2
num_mongos: 2

View File

@ -132,7 +132,7 @@ executor:
implicitlyShardOnCreateCollectionOnly: true
useActionPermittedFile: [ContinuousAddRemoveShard]
shardCollectionProbability: 0.5
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
- class: ContinuousAddRemoveShard
transition_configsvr: true
@ -159,7 +159,7 @@ executor:
set_parameters:
enableTestCommands: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
shard_options:
mongod_options:
oplogSize: 1024
@ -172,7 +172,7 @@ executor:
skipDroppingHashedShardKeyIndex: true
reshardingMinimumOperationDurationMillis: 0
balancerMigrationsThrottlingMs: 250
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
failpoint.movePrimaryFailIfNeedToCloneMovableCollections:
data:
comment: *movePrimaryComment

View File

@ -49,7 +49,7 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
queryAnalysisSamplerConfigurationRefreshSecs: 1
shard_options:
mongod_options:
@ -57,7 +57,7 @@ executor:
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
roleGraphInvalidationIsFatal: 1
queryAnalysisWriterIntervalSecs: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1

View File

@ -84,7 +84,7 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
queryAnalysisSamplerConfigurationRefreshSecs: 1
shard_options:
mongod_options:
@ -92,7 +92,7 @@ executor:
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
roleGraphInvalidationIsFatal: 1
queryAnalysisWriterIntervalSecs: 1
queryAnalysisSamplerConfigurationRefreshSecs: 1

View File

@ -18,7 +18,7 @@ executor:
shell_options:
global_vars:
TestData:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
- class: CheckReplDBHash
- class: CheckMetadataConsistencyInBackground
@ -31,9 +31,9 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 2

View File

@ -19,7 +19,7 @@ executor:
shell_options:
global_vars:
TestData:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
- class: CheckReplDBHash
- class: CheckMetadataConsistencyInBackground
@ -33,10 +33,10 @@ executor:
set_parameters:
enableTestCommands: 1
internalQueryFLEAlwaysUseEncryptedCollScanMode: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryFLEAlwaysUseEncryptedCollScanMode: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 2

View File

@ -282,7 +282,7 @@ executor:
defaultTransactionReadConcernLevel: "snapshot"
defaultTransactionWriteConcernW: "majority"
defaultWriteConcernW: "majority"
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
networkErrorAndTxnOverrideConfig:
wrapCRUDinTransactions: true
sessionOptions:
@ -306,7 +306,7 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
logComponentVerbosity:
@ -323,6 +323,6 @@ executor:
enableTestCommands: 1
numInitialSyncAttempts: 1
coordinateCommitReturnImmediatelyAfterPersistingDecision: true
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 2
num_shards: 2

View File

@ -328,7 +328,7 @@ executor:
global_vars:
TestData:
logRetryAttempts: true
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
networkErrorAndTxnOverrideConfig:
retryOnNetworkErrors: true
wrapCRUDinTransactions: true
@ -369,7 +369,7 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
syncdelay: 5
oplogSize: 1024
@ -388,7 +388,7 @@ executor:
enableTestCommands: 1
enableElectionHandoff: 0
numInitialSyncAttempts: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_shards: 2
num_rs_nodes_per_shard: 3
configsvr_options:

View File

@ -90,7 +90,7 @@ executor:
network:
verbosity: 1
asio: 2
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
@ -101,5 +101,5 @@ executor:
asio: 2
replication:
heartbeats: 2
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 2

View File

@ -43,7 +43,7 @@ executor:
await import('jstests/libs/override_methods/enable_causal_consistency_without_read_pref.js');
global_vars:
TestData:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
# We don't execute dbHash or oplog consistency checks since there is only a single replica set
# node.
@ -57,8 +57,8 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true

View File

@ -91,7 +91,7 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
logComponentVerbosity:
command: 1
network:
@ -101,7 +101,7 @@ executor:
set_parameters:
enableTestCommands: 1
minSnapshotHistoryWindowInSeconds: 3600
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
logComponentVerbosity:
command: 1
network:

View File

@ -81,8 +81,8 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true

View File

@ -36,7 +36,7 @@ executor:
eval: "globalThis.testingReplication = true;"
global_vars:
TestData:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
# We don't execute dbHash or oplog consistency checks since there is only a single replica set
# node.
@ -50,8 +50,8 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true

View File

@ -51,7 +51,7 @@ executor:
await import('jstests/libs/override_methods/implicitly_shard_accessed_collections.js');
global_vars:
TestData:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
hooks:
# We don't execute dbHash or oplog consistency checks since there is only a single replica set
# node.
@ -65,9 +65,9 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_shards: 2

View File

@ -297,10 +297,10 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
coordinateCommitReturnImmediatelyAfterPersistingDecision: true
num_rs_nodes_per_shard: 2

View File

@ -103,5 +103,5 @@ executor:
global_vars:
TestData:
setParametersMongos:
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
nodb: ""

View File

@ -54,9 +54,9 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
num_rs_nodes_per_shard: 1

View File

@ -88,11 +88,11 @@ executor:
mongos_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
mongod_options:
set_parameters:
enableTestCommands: 1
internalQueryUnifiedWriteExecutor: true
featureFlagUnifiedWriteExecutor: true
reshardingMinimumOperationDurationMillis: 0
useBatchedDeletesForRangeDeletion: true
num_rs_nodes_per_shard: 1

View File

@ -567,8 +567,8 @@ buildvariants:
exec_timeout_factor: 1.5
test_flags: >-
--runAllFeatureFlagTests
--mongodSetParameters="{internalQueryUnifiedWriteExecutor: true}"
--mongosSetParameters="{internalQueryUnifiedWriteExecutor: true}"
--mongodSetParameters="{featureFlagUnifiedWriteExecutor: true}"
--mongosSetParameters="{featureFlagUnifiedWriteExecutor: true}"
# For now just unified write executor suites but tasks will be added as development continues.
tasks:
- name: compile_integration_and_test_parallel_stream_TG

View File

@ -5,11 +5,11 @@ export function isUweEnabled(db) {
return !!assert.commandWorkedOrFailedWithCode(
db.adminCommand({
getParameter: 1,
internalQueryUnifiedWriteExecutor: 1,
featureFlagUnifiedWriteExecutor: 1,
}),
// Allow the error when the query knob is not present.
ErrorCodes.InvalidOptions,
).internalQueryUnifiedWriteExecutor;
).featureFlagUnifiedWriteExecutor;
}
/**

View File

@ -68,7 +68,6 @@ const expectedParamDefaults = {
internalQueryDisablePlanCache: false,
internalQueryFindCommandBatchSize: 101,
internalQuerySlotBasedExecutionHashAggIncreasedSpilling: "inDebug",
internalQueryUnifiedWriteExecutor: false,
};
function assertDefaultParameterValues() {
@ -307,9 +306,6 @@ assertSetParameterSucceeds("internalQuerySlotBasedExecutionHashAggIncreasedSpill
assertSetParameterSucceeds("internalQuerySlotBasedExecutionHashAggIncreasedSpilling", "inDebug");
assertSetParameterFails("internalQuerySlotBasedExecutionHashAggIncreasedSpilling", "random");
assertSetParameterSucceeds("internalQueryUnifiedWriteExecutor", true);
assertSetParameterSucceeds("internalQueryUnifiedWriteExecutor", false);
assertSetParameterSucceeds("internalOrStageMaxMemoryBytes", 11);
assertSetParameterFails("internalOrStageMaxMemoryBytes", 0);
assertSetParameterFails("internalOrStageMaxMemoryBytes", -1);

View File

@ -88,9 +88,9 @@ TEST_F(SessionsCollectionShardedTest, RefreshOneSessionOKTest) {
// Set up routing table for the logical sessions collection.
loadRoutingTableWithTwoChunksAndTwoShardsImpl(NamespaceString::kLogicalSessionsNamespace,
BSON("_id" << 1));
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
uweKnobValue);
for (auto uweFlag : {false, true}) {
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweFlag);
auto future = launchAsync([&] {
auto now = Date_t::now();
auto thePast = now - Minutes(5);
@ -100,7 +100,7 @@ TEST_F(SessionsCollectionShardedTest, RefreshOneSessionOKTest) {
});
onCommandForPoolExecutor([&](const RemoteCommandRequest& request) {
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
BulkWriteCommandReply reply(
BulkWriteCommandResponseCursor(0,
{BulkWriteReplyItem{0, Status::OK()}},
@ -173,9 +173,9 @@ TEST_F(SessionsCollectionShardedTest, RefreshOneSessionWriteErrTest) {
// Set up routing table for the logical sessions collection.
loadRoutingTableWithTwoChunksAndTwoShardsImpl(NamespaceString::kLogicalSessionsNamespace,
BSON("_id" << 1));
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
uweKnobValue);
for (auto uweFlag : {false, true}) {
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweFlag);
auto future = launchAsync([&] {
auto now = Date_t::now();
@ -186,7 +186,7 @@ TEST_F(SessionsCollectionShardedTest, RefreshOneSessionWriteErrTest) {
});
onCommandForPoolExecutor([&](const RemoteCommandRequest& request) {
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
BulkWriteCommandReply reply(
BulkWriteCommandResponseCursor(
0,
@ -219,17 +219,16 @@ TEST_F(SessionsCollectionShardedTest, RemoveOneSessionOKTest) {
loadRoutingTableWithTwoChunksAndTwoShardsImpl(NamespaceString::kLogicalSessionsNamespace,
BSON("_id" << 1));
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
uweKnobValue);
for (auto uweFlag : {false, true}) {
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweFlag);
auto future = launchAsync([&] {
_collection.removeRecords(operationContext(), {makeLogicalSessionIdForTest()});
});
onCommandForPoolExecutor([&](const RemoteCommandRequest& request) {
// TODO lol
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
BulkWriteCommandReply reply(
BulkWriteCommandResponseCursor(0,
{BulkWriteReplyItem{0, Status::OK()}},
@ -273,17 +272,16 @@ TEST_F(SessionsCollectionShardedTest, RemoveOneSessionWriteErrTest) {
loadRoutingTableWithTwoChunksAndTwoShardsImpl(NamespaceString::kLogicalSessionsNamespace,
BSON("_id" << 1));
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
uweKnobValue);
for (auto uweFlag : {false, true}) {
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweFlag);
auto future = launchAsync([&] {
_collection.removeRecords(operationContext(), {makeLogicalSessionIdForTest()});
});
onCommandForPoolExecutor([&](const RemoteCommandRequest& request) {
// TODO
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
BulkWriteCommandReply reply(
BulkWriteCommandResponseCursor(
0,

View File

@ -315,3 +315,10 @@ feature_flags:
cpp_varname: gFeatureFlagPathArrayness
fcv_gated: false
default: false
featureFlagUnifiedWriteExecutor:
description: "Feature flag to use the unified write executor."
cpp_varname: "gFeatureFlagUnifiedWriteExecutor"
default: false
fcv_gated: false
incremental_rollout_phase: in_development

View File

@ -1667,14 +1667,6 @@ server_parameters:
default: false
redact: false
internalQueryUnifiedWriteExecutor:
description: "Boolean flag to use the unified write executor."
set_at: [startup, runtime]
cpp_varname: "internalQueryUnifiedWriteExecutor"
cpp_vartype: AtomicWord<bool>
default: false
redact: false
internalQueryGetMoreMaxCursorPinRetryAttempts:
description: >-
Max number of attempts to pin cursor by getMore command before failing in cases where

View File

@ -95,14 +95,14 @@ protected:
TEST_F(ClusterBulkWriteTest, NoErrors) {
RAIIServerParameterControllerForTest controller("featureFlagBulkWriteCommand", true);
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor", false);
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor", false);
testNoErrors(kBulkWriteCmdTargeted, kBulkWriteCmdScatterGather);
}
TEST_F(ClusterBulkWriteTest, AttachesAtClusterTimeForSnapshotReadConcern) {
RAIIServerParameterControllerForTest controller("featureFlagBulkWriteCommand", true);
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor", false);
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor", false);
testAttachesAtClusterTimeForSnapshotReadConcern(kBulkWriteCmdTargeted,
kBulkWriteCmdScatterGather);
@ -110,14 +110,14 @@ TEST_F(ClusterBulkWriteTest, AttachesAtClusterTimeForSnapshotReadConcern) {
TEST_F(ClusterBulkWriteTest, SnapshotReadConcernWithAfterClusterTime) {
RAIIServerParameterControllerForTest controller("featureFlagBulkWriteCommand", true);
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor", false);
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor", false);
testSnapshotReadConcernWithAfterClusterTime(kBulkWriteCmdTargeted, kBulkWriteCmdScatterGather);
}
TEST_F(ClusterBulkWriteTest, FireAndForgetRequestGetsReplyWithOnlyOkStatus) {
RAIIServerParameterControllerForTest controller("featureFlagBulkWriteCommand", true);
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor", false);
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor", false);
auto asFireAndForgetRequest = [](const BSONObj& cmdObj) {
BSONObjBuilder bob(cmdObj);

View File

@ -95,14 +95,14 @@ protected:
TEST_F(ClusterBulkWriteUWETest, NoErrors) {
RAIIServerParameterControllerForTest controller("featureFlagBulkWriteCommand", true);
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor", true);
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor", true);
testNoErrors(kBulkWriteCmdTargeted, kBulkWriteCmdScatterGather);
}
TEST_F(ClusterBulkWriteUWETest, AttachesAtClusterTimeForSnapshotReadConcern) {
RAIIServerParameterControllerForTest controller("featureFlagBulkWriteCommand", true);
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor", true);
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor", true);
testAttachesAtClusterTimeForSnapshotReadConcern(kBulkWriteCmdTargeted,
kBulkWriteCmdScatterGather);
@ -110,14 +110,14 @@ TEST_F(ClusterBulkWriteUWETest, AttachesAtClusterTimeForSnapshotReadConcern) {
TEST_F(ClusterBulkWriteUWETest, SnapshotReadConcernWithAfterClusterTime) {
RAIIServerParameterControllerForTest controller("featureFlagBulkWriteCommand", true);
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor", true);
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor", true);
testSnapshotReadConcernWithAfterClusterTime(kBulkWriteCmdTargeted, kBulkWriteCmdScatterGather);
}
TEST_F(ClusterBulkWriteUWETest, FireAndForgetRequestGetsReplyWithOnlyOkStatus) {
RAIIServerParameterControllerForTest controller("featureFlagBulkWriteCommand", true);
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor", true);
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor", true);
auto asFireAndForgetRequest = [](const BSONObj& cmdObj) {
BSONObjBuilder bob(cmdObj);

View File

@ -59,7 +59,7 @@ protected:
void expectInspectRequest(int shardIndex, InspectionCallback cb) override {
onCommandForPoolExecutor([&](const executor::RemoteCommandRequest& request) {
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
cb(request);
BulkWriteCommandReply reply(
BulkWriteCommandResponseCursor(0, {BulkWriteReplyItem{0, Status::OK()}}, kNss),
@ -87,7 +87,7 @@ protected:
void expectReturnsSuccess(int shardIndex) override {
onCommandForPoolExecutor([this, shardIndex](const executor::RemoteCommandRequest& request) {
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
BulkWriteCommandReply reply(
BulkWriteCommandResponseCursor(0, {BulkWriteReplyItem{0, Status::OK()}}, kNss),
0,
@ -113,7 +113,7 @@ protected:
TEST_F(ClusterDeleteTest, NoErrors) {
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweKnobValue);
testNoErrors(kDeleteCmdTargeted, kDeleteCmdScatterGather);
}
@ -137,7 +137,7 @@ TEST_F(ClusterDeleteTest, CorrectMetrics) {
b.append("command", 0);
const BSONObj obj = b.obj();
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweKnobValue);
testOpcountersAreCorrect(kDeleteCmdTargeted, /* expectedValue */ obj);
}

View File

@ -58,7 +58,7 @@ protected:
void expectInspectRequest(int shardIndex, InspectionCallback cb) override {
onCommandForPoolExecutor([&](const executor::RemoteCommandRequest& request) {
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
cb(request);
BulkWriteReplyItem item(0, Status::OK());
item.setN(1);
@ -82,7 +82,7 @@ protected:
void expectReturnsSuccess(int shardIndex) override {
onCommandForPoolExecutor([this, shardIndex](const executor::RemoteCommandRequest& request) {
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
auto cmd = request.cmdObj;
auto ops = cmd["ops"].Array();
auto size = ops.size();
@ -112,7 +112,7 @@ protected:
TEST_F(ClusterInsertTest, NoErrors) {
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweKnobValue);
testNoErrors(kInsertCmdTargeted, kInsertCmdScatterGather);
}
@ -138,7 +138,7 @@ TEST_F(ClusterInsertTest, CorrectMetricsSingleInsert) {
const BSONObj obj = b.obj();
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweKnobValue);
testOpcountersAreCorrect(kInsertCmdTargeted, /* expectedValue */ obj);
}
@ -158,7 +158,7 @@ TEST_F(ClusterInsertTest, CorrectMetricsBulkInsert) {
const BSONObj obj = b.obj();
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweKnobValue);
testOpcountersAreCorrect(bulkInsertCmd, /* expectedValue */ obj);
}

View File

@ -59,7 +59,7 @@ protected:
void expectInspectRequest(int shardIndex, InspectionCallback cb) override {
onCommandForPoolExecutor([&](const executor::RemoteCommandRequest& request) {
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
cb(request);
BulkWriteCommandReply reply(
BulkWriteCommandResponseCursor(0, {BulkWriteReplyItem{0, Status::OK()}}, kNss),
@ -90,7 +90,7 @@ protected:
void expectReturnsSuccess(int shardIndex) override {
onCommandForPoolExecutor([this, shardIndex](const executor::RemoteCommandRequest& request) {
if (internalQueryUnifiedWriteExecutor.load()) {
if (feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled()) {
BulkWriteCommandReply reply(
BulkWriteCommandResponseCursor(0, {BulkWriteReplyItem{0, Status::OK()}}, kNss),
0,
@ -120,7 +120,7 @@ protected:
TEST_F(ClusterUpdateTest, NoErrors) {
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweKnobValue);
testNoErrors(kUpdateCmdTargeted, kUpdateCmdScatterGather);
}
@ -145,7 +145,7 @@ TEST_F(ClusterUpdateTest, CorrectMetrics) {
const BSONObj obj = b.obj();
for (auto uweKnobValue : {false, true}) {
RAIIServerParameterControllerForTest uweController("internalQueryUnifiedWriteExecutor",
RAIIServerParameterControllerForTest uweController("featureFlagUnifiedWriteExecutor",
uweKnobValue);
testOpcountersAreCorrect(kUpdateCmdTargeted, /* expectedValue */ obj);
}

View File

@ -146,9 +146,8 @@ FindAndModifyCommandResponse findAndModify(OperationContext* opCtx,
executeWriteCommand(opCtx, WriteCommandRef{request}, originalCommand));
}
// TODO SERVER-106306: Convert the knob below to an IFR flag.
bool isEnabled(OperationContext* opCtx) {
return internalQueryUnifiedWriteExecutor.load();
return feature_flags::gFeatureFlagUnifiedWriteExecutor.checkEnabled();
}
} // namespace unified_write_executor