summaryrefslogtreecommitdiff
path: root/src/mongo/s/catalog/sharding_catalog_client_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/catalog/sharding_catalog_client_impl.cpp')
-rw-r--r--src/mongo/s/catalog/sharding_catalog_client_impl.cpp93
1 files changed, 11 insertions, 82 deletions
diff --git a/src/mongo/s/catalog/sharding_catalog_client_impl.cpp b/src/mongo/s/catalog/sharding_catalog_client_impl.cpp
index 9720eeef27c..38949060bf1 100644
--- a/src/mongo/s/catalog/sharding_catalog_client_impl.cpp
+++ b/src/mongo/s/catalog/sharding_catalog_client_impl.cpp
@@ -102,37 +102,6 @@ void toBatchError(const Status& status, BatchedCommandResponse* response) {
response->setStatus(status);
}
-void sendRetryableWriteBatchRequestToConfig(OperationContext* opCtx,
- const NamespaceString& nss,
- std::vector<BSONObj>& docs,
- TxnNumber txnNumber,
- const WriteConcernOptions& writeConcern) {
- auto configShard = Grid::get(opCtx)->shardRegistry()->getConfigShard();
-
- BatchedCommandRequest request([&] {
- write_ops::InsertCommandRequest insertOp(nss);
- insertOp.setDocuments(docs);
- return insertOp;
- }());
- request.setWriteConcern(writeConcern.toBSON());
-
- BSONObj cmdObj = request.toBSON();
- BSONObjBuilder bob(cmdObj);
- bob.append(OperationSessionInfo::kTxnNumberFieldName, txnNumber);
-
- BatchedCommandResponse batchResponse;
- auto response = configShard->runCommand(opCtx,
- ReadPreferenceSetting{ReadPreference::PrimaryOnly},
- nss.db().toString(),
- bob.obj(),
- Shard::kDefaultConfigCommandTimeout,
- Shard::RetryPolicy::kIdempotent);
-
- auto writeStatus = Shard::CommandResponse::processBatchWriteResponse(response, &batchResponse);
-
- uassertStatusOK(batchResponse.toStatus());
- uassertStatusOK(writeStatus);
-}
AggregateCommandRequest makeCollectionAndChunksAggregation(OperationContext* opCtx,
const NamespaceString& nss,
@@ -1042,12 +1011,14 @@ Status ShardingCatalogClientImpl::insertConfigDocument(OperationContext* opCtx,
insertOp.setDocuments({doc});
return insertOp;
}());
- request.setWriteConcern(writeConcern.toBSON());
auto configShard = Grid::get(opCtx)->shardRegistry()->getConfigShard();
for (int retry = 1; retry <= kMaxWriteRetry; retry++) {
- auto response = configShard->runBatchWriteCommand(
- opCtx, Shard::kDefaultConfigCommandTimeout, request, Shard::RetryPolicy::kNoRetry);
+ auto response = configShard->runBatchWriteCommand(opCtx,
+ Shard::kDefaultConfigCommandTimeout,
+ request,
+ writeConcern,
+ Shard::RetryPolicy::kNoRetry);
Status status = response.toStatus();
@@ -1102,49 +1073,6 @@ Status ShardingCatalogClientImpl::insertConfigDocument(OperationContext* opCtx,
MONGO_UNREACHABLE;
}
-void ShardingCatalogClientImpl::insertConfigDocumentsAsRetryableWrite(
- OperationContext* opCtx,
- const NamespaceString& nss,
- std::vector<BSONObj> docs,
- const WriteConcernOptions& writeConcern) {
- invariant(nss.db() == NamespaceString::kAdminDb || nss.db() == NamespaceString::kConfigDb);
-
- AlternativeSessionRegion asr(opCtx);
- TxnNumber currentTxnNumber = 0;
-
- std::vector<BSONObj> workingBatch;
- size_t workingBatchItemSize = 0;
- int workingBatchDocSize = 0;
-
- while (!docs.empty()) {
- BSONObj toAdd = docs.back();
- docs.pop_back();
-
- const int docSizePlusOverhead =
- toAdd.objsize() + write_ops::kRetryableAndTxnBatchWriteBSONSizeOverhead;
- // Check if pushing this object will exceed the batch size limit or the max object size
- if ((workingBatchItemSize + 1 > write_ops::kMaxWriteBatchSize) ||
- (workingBatchDocSize + docSizePlusOverhead > BSONObjMaxUserSize)) {
- sendRetryableWriteBatchRequestToConfig(
- asr.opCtx(), nss, workingBatch, currentTxnNumber, writeConcern);
- ++currentTxnNumber;
-
- workingBatch.clear();
- workingBatchItemSize = 0;
- workingBatchDocSize = 0;
- }
-
- workingBatch.push_back(toAdd);
- ++workingBatchItemSize;
- workingBatchDocSize += docSizePlusOverhead;
- }
-
- if (!workingBatch.empty()) {
- sendRetryableWriteBatchRequestToConfig(
- asr.opCtx(), nss, workingBatch, currentTxnNumber, writeConcern);
- }
-}
-
StatusWith<bool> ShardingCatalogClientImpl::updateConfigDocument(
OperationContext* opCtx,
const NamespaceString& nss,
@@ -1189,11 +1117,10 @@ StatusWith<bool> ShardingCatalogClientImpl::_updateConfigDocument(
}()});
return updateOp;
}());
- request.setWriteConcern(writeConcern.toBSON());
auto configShard = Grid::get(opCtx)->shardRegistry()->getConfigShard();
auto response = configShard->runBatchWriteCommand(
- opCtx, maxTimeMs, request, Shard::RetryPolicy::kIdempotent);
+ opCtx, maxTimeMs, request, writeConcern, Shard::RetryPolicy::kIdempotent);
Status status = response.toStatus();
if (!status.isOK()) {
@@ -1225,11 +1152,13 @@ Status ShardingCatalogClientImpl::removeConfigDocuments(OperationContext* opCtx,
}()});
return deleteOp;
}());
- request.setWriteConcern(writeConcern.toBSON());
auto configShard = Grid::get(opCtx)->shardRegistry()->getConfigShard();
- auto response = configShard->runBatchWriteCommand(
- opCtx, Shard::kDefaultConfigCommandTimeout, request, Shard::RetryPolicy::kIdempotent);
+ auto response = configShard->runBatchWriteCommand(opCtx,
+ Shard::kDefaultConfigCommandTimeout,
+ request,
+ writeConcern,
+ Shard::RetryPolicy::kIdempotent);
return response.toStatus();
}