diff options
Diffstat (limited to 'src/mongo/s/write_ops')
-rw-r--r-- | src/mongo/s/write_ops/batch_downconvert.cpp | 3 | ||||
-rw-r--r-- | src/mongo/s/write_ops/batch_write_op.cpp | 14 | ||||
-rw-r--r-- | src/mongo/s/write_ops/batch_write_op.h | 10 | ||||
-rw-r--r-- | src/mongo/s/write_ops/batched_command_response.cpp | 6 |
4 files changed, 27 insertions, 6 deletions
diff --git a/src/mongo/s/write_ops/batch_downconvert.cpp b/src/mongo/s/write_ops/batch_downconvert.cpp index 068ab1599aa..cdfa9264cac 100644 --- a/src/mongo/s/write_ops/batch_downconvert.cpp +++ b/src/mongo/s/write_ops/batch_downconvert.cpp @@ -180,6 +180,9 @@ namespace mongo { // N starts at zero, and we add to it for each item response->setN( 0 ); + // GLE path always sets nModified to -1 (sentinel) to indicate we should omit it later. + response->setNModified(-1); + for ( size_t i = 0; i < request.sizeWriteOps(); ++i ) { // Break on first error if we're ordered diff --git a/src/mongo/s/write_ops/batch_write_op.cpp b/src/mongo/s/write_ops/batch_write_op.cpp index 0a3dfd8a055..8f0688eaef2 100644 --- a/src/mongo/s/write_ops/batch_write_op.cpp +++ b/src/mongo/s/write_ops/batch_write_op.cpp @@ -449,7 +449,13 @@ namespace mongo { numUpserted = response.sizeUpsertDetails(); } stats->numMatched += ( response.getN() - numUpserted ); - stats->numModified += response.getNModified(); + long long numModified = response.getNModified(); + + if (numModified >= 0) + stats->numModified += numModified; + else + stats->numModified = -1; // sentinel used to indicate we omit the field downstream + stats->numUpserted += numUpserted; } else { @@ -740,8 +746,10 @@ namespace mongo { int nValue = _stats->numInserted + _stats->numUpserted + _stats->numMatched + _stats->numDeleted; batchResp->setN( nValue ); - if ( _clientRequest->getBatchType() == BatchedCommandRequest::BatchType_Update ) - batchResp->setNModified( _stats->numModified ); + if ( _clientRequest->getBatchType() == BatchedCommandRequest::BatchType_Update && + _stats->numModified >= 0) { + batchResp->setNModified( _stats->numModified ); + } dassert( batchResp->isValid( NULL ) ); } diff --git a/src/mongo/s/write_ops/batch_write_op.h b/src/mongo/s/write_ops/batch_write_op.h index cf058a5ec23..0237bb6185d 100644 --- a/src/mongo/s/write_ops/batch_write_op.h +++ b/src/mongo/s/write_ops/batch_write_op.h @@ -192,6 +192,16 @@ namespace mongo { int numModified; int numDeleted; + std::string toString() const { + StringBuilder str; + str << "numInserted: " << numInserted + << " numUpserted: " << numUpserted + << " numMatched: " << numMatched + << " numModified: " << numModified + << " numDeleted: " << numDeleted; + return str.str(); + } + }; /** diff --git a/src/mongo/s/write_ops/batched_command_response.cpp b/src/mongo/s/write_ops/batched_command_response.cpp index 7c15c04196d..f412f6d59d9 100644 --- a/src/mongo/s/write_ops/batched_command_response.cpp +++ b/src/mongo/s/write_ops/batched_command_response.cpp @@ -39,7 +39,7 @@ namespace mongo { const BSONField<int> BatchedCommandResponse::errCode("code", ErrorCodes::UnknownError); const BSONField<string> BatchedCommandResponse::errMessage("errmsg"); const BSONField<long long> BatchedCommandResponse::n("n", 0); - const BSONField<long long> BatchedCommandResponse::nModified("nModified", -1); + const BSONField<long long> BatchedCommandResponse::nModified("nModified", 0); const BSONField<std::vector<BatchedUpsertDetail*> > BatchedCommandResponse::upsertDetails("upserted"); const BSONField<OpTime> BatchedCommandResponse::lastOp("lastOp"); @@ -81,7 +81,7 @@ namespace mongo { if (_isErrMessageSet) builder.append(errMessage(), _errMessage); - if (_isNModifiedSet && _nModified > -1) builder.appendNumber(nModified(), _nModified); + if (_isNModifiedSet) builder.appendNumber(nModified(), _nModified); if (_isNSet) builder.appendNumber(n(), _n); if (_upsertDetails.get()) { @@ -203,7 +203,7 @@ namespace mongo { _errMessage.clear(); _isErrMessageSet = false; - _nModified = -1; + _nModified = 0; _isNModifiedSet = false; _n = 0; |