summaryrefslogtreecommitdiff
path: root/db/cloner.cpp
diff options
context:
space:
mode:
authorAaron <aaron@10gen.com>2009-03-06 10:26:01 -0500
committerAaron <aaron@10gen.com>2009-03-06 10:26:01 -0500
commit316f47d1a500e357e9610d033b602335826250a2 (patch)
treed450c710be59d38b4d859ff18cfca58461bf3389 /db/cloner.cpp
parentda1da8d5478c86e56975d6562ad196875f656a0a (diff)
downloadmongo-316f47d1a500e357e9610d033b602335826250a2.tar.gz
Filter cloneCollection oplog inserts based on query pattern
Diffstat (limited to 'db/cloner.cpp')
-rw-r--r--db/cloner.cpp8
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 );
}
{