summaryrefslogtreecommitdiff
path: root/src/mongo/s/write_ops
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/write_ops')
-rw-r--r--src/mongo/s/write_ops/batch_downconvert.cpp3
-rw-r--r--src/mongo/s/write_ops/batch_write_op.cpp14
-rw-r--r--src/mongo/s/write_ops/batch_write_op.h10
-rw-r--r--src/mongo/s/write_ops/batched_command_response.cpp6
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;