diff options
author | Aaron <aaron@10gen.com> | 2009-03-06 10:26:01 -0500 |
---|---|---|
committer | Aaron <aaron@10gen.com> | 2009-03-06 10:26:01 -0500 |
commit | 316f47d1a500e357e9610d033b602335826250a2 (patch) | |
tree | d450c710be59d38b4d859ff18cfca58461bf3389 /db/cloner.cpp | |
parent | da1da8d5478c86e56975d6562ad196875f656a0a (diff) | |
download | mongo-316f47d1a500e357e9610d033b602335826250a2.tar.gz |
Filter cloneCollection oplog inserts based on query pattern
Diffstat (limited to 'db/cloner.cpp')
-rw-r--r-- | db/cloner.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/db/cloner.cpp b/db/cloner.cpp index 3589a8e2058..d7fe827b986 100644 --- a/db/cloner.cpp +++ b/db/cloner.cpp @@ -258,17 +258,23 @@ namespace mongo { copy( indexNs.c_str(), indexNs.c_str(), true, logForRepl, false, false, BSON( "ns" << ns ) ); } + JSMatcher matcher( query ); // According to the docs, the machine I'm cloning from is supposed to be // locked during this part. Need to learn more about the plan for that. string logNS = "local.temp.oplog." + string( ns ); auto_ptr< DBClientCursor > c = conn->query( logNS.c_str(), Query() ); while( 1 ) { + BSONObj op; { dbtemprelease t; if ( !c->more() ) break; + op = c->next(); } - ReplSource::applyOperation( c->next() ); + // For sharding v1.0, we don't allow shard key updates -- so just + // filter each insert by value. + if ( op.getStringField( "op" )[ 0 ] != 'i' || matcher.matches( op.getObjectField( "o" ) ) ) + ReplSource::applyOperation( op ); } { |