Skip to content

Commit

Permalink
SERVER-7186 Addressed idempotency violations in update operators.
Browse files Browse the repository at this point in the history
  • Loading branch information
Alberto Lerner committed Oct 5, 2012
1 parent 966a547 commit 55ce76f
Show file tree
Hide file tree
Showing 5 changed files with 632 additions and 103 deletions.
38 changes: 6 additions & 32 deletions src/mongo/db/ops/update.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,21 +102,8 @@ namespace mongo {
DEV verify( mods->size() );

BSONObj pattern = patternOrig;
if ( mss->haveArrayDepMod() ) {
BSONObjBuilder patternBuilder;
patternBuilder.appendElements( pattern );
mss->appendSizeSpecForArrayDepMods( patternBuilder );
pattern = patternBuilder.obj();
}

if( mss->needOpLogRewrite() ) {
DEBUGUPDATE( "\t rewrite update: " << mss->getOpLogRewrite() );
logOp("u", ns, mss->getOpLogRewrite() ,
&pattern, 0, fromMigrate );
}
else {
logOp("u", ns, updateobj, &pattern, 0, fromMigrate );
}
DEBUGUPDATE( "\t rewrite update: " << mss->getOpLogRewrite() );
logOp("u", ns, mss->getOpLogRewrite() , &pattern, 0, fromMigrate );
}
return UpdateResult( 1 , 1 , 1 , BSONObj() );
} // end $operator update
Expand Down Expand Up @@ -336,13 +323,13 @@ namespace mongo {
const BSONObj& onDisk = loc.obj();

ModSet* useMods = mods.get();
bool forceRewrite = false;
//bool forceRewrite = false;

auto_ptr<ModSet> mymodset;
if ( details.hasElemMatchKey() && mods->hasDynamicArray() ) {
useMods = mods->fixDynamicArray( details.elemMatchKey() );
mymodset.reset( useMods );
forceRewrite = true;
//forceRewrite = true;
}

auto_ptr<ModSetState> mss = useMods->prepare( onDisk );
Expand Down Expand Up @@ -395,21 +382,8 @@ namespace mongo {
if ( logop ) {
DEV verify( mods->size() );

if ( mss->haveArrayDepMod() ) {
BSONObjBuilder patternBuilder;
patternBuilder.appendElements( pattern );
mss->appendSizeSpecForArrayDepMods( patternBuilder );
pattern = patternBuilder.obj();
}

if ( forceRewrite || mss->needOpLogRewrite() ) {
DEBUGUPDATE( "\t rewrite update: " << mss->getOpLogRewrite() );
logOp("u", ns, mss->getOpLogRewrite() ,
&pattern, 0, fromMigrate );
}
else {
logOp("u", ns, updateobj, &pattern, 0, fromMigrate );
}
DEBUGUPDATE( "\t rewrite update: " << mss->getOpLogRewrite() );
logOp("u", ns, mss->getOpLogRewrite() , &pattern, 0, fromMigrate );
}
numModded++;
if ( ! multi )
Expand Down
Loading

0 comments on commit 55ce76f

Please sign in to comment.