summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorAaron <aaron@10gen.com>2010-03-22 13:57:59 -0700
committerAaron <aaron@10gen.com>2010-03-22 13:57:59 -0700
commit4912b401063f65ec79ad585e3406ca51dfd7d501 (patch)
tree548d3aec442ef19cb1c5208f0f8c542f38d62ef4 /db
parent97275707db0f0bf80f81245ee72857b1ef237300 (diff)
downloadmongo-4912b401063f65ec79ad585e3406ca51dfd7d501.tar.gz
SERVER-615 more precise extent skipping calculation
Diffstat (limited to 'db')
-rw-r--r--db/dbcommands.cpp7
1 files changed, 3 insertions, 4 deletions
diff --git a/db/dbcommands.cpp b/db/dbcommands.cpp
index a8d826dc682..6d1aa5a80eb 100644
--- a/db/dbcommands.cpp
+++ b/db/dbcommands.cpp
@@ -1188,12 +1188,11 @@ namespace mongo {
string toNs = string( realDbName ) + "." + to;
NamespaceDetails *nsd = nsdetails( fromNs.c_str() );
massert( 10301 , "source collection " + fromNs + " does not exist", nsd );
- long long excessSize = nsd->datasize - size * 2;
+ long long excessSize = nsd->datasize - size * 2; // datasize and extentSize can't be compared exactly, so add some padding to 'size'
DiskLoc extent = nsd->firstExtent;
- for( ; excessSize > 0 && extent != nsd->lastExtent; extent = extent.ext()->xnext ) {
+ for( ; excessSize > extent.ext()->length && extent != nsd->lastExtent; extent = extent.ext()->xnext ) {
excessSize -= extent.ext()->length;
- if ( excessSize > 0 )
- log( 2 ) << "cloneCollectionAsCapped skipping extent of size " << extent.ext()->length << endl;
+ log( 2 ) << "cloneCollectionAsCapped skipping extent of size " << extent.ext()->length << endl;
log( 6 ) << "excessSize: " << excessSize << endl;
}
DiskLoc startLoc = extent.ext()->firstRecord;