diff options
Diffstat (limited to 'src/mongo/db/storage/mmap_v1/extent_manager.cpp')
-rw-r--r-- | src/mongo/db/storage/mmap_v1/extent_manager.cpp | 96 |
1 files changed, 47 insertions, 49 deletions
diff --git a/src/mongo/db/storage/mmap_v1/extent_manager.cpp b/src/mongo/db/storage/mmap_v1/extent_manager.cpp index 8efc2cbc50f..15222fac01a 100644 --- a/src/mongo/db/storage/mmap_v1/extent_manager.cpp +++ b/src/mongo/db/storage/mmap_v1/extent_manager.cpp @@ -34,66 +34,64 @@ namespace mongo { - int ExtentManager::quantizeExtentSize( int size ) const { +int ExtentManager::quantizeExtentSize(int size) const { + if (size == maxSize()) { + // no point doing quantizing for the entire file + return size; + } - if ( size == maxSize() ) { - // no point doing quantizing for the entire file - return size; - } + invariant(size <= maxSize()); - invariant( size <= maxSize() ); + // make sizes align with VM page size + int newSize = (size + 0xfff) & 0xfffff000; - // make sizes align with VM page size - int newSize = (size + 0xfff) & 0xfffff000; + if (newSize > maxSize()) { + return maxSize(); + } - if ( newSize > maxSize() ) { - return maxSize(); - } + if (newSize < minSize()) { + return minSize(); + } - if ( newSize < minSize() ) { - return minSize(); - } + return newSize; +} - return newSize; +int ExtentManager::followupSize(int len, int lastExtentLen) const { + invariant(len < maxSize()); + int x = initialSize(len); + // changed from 1.20 to 1.35 in v2.1.x to get to larger extent size faster + int y = (int)(lastExtentLen < 4000000 ? lastExtentLen * 4.0 : lastExtentLen * 1.35); + int sz = y > x ? y : x; + + if (sz < lastExtentLen) { + // this means there was an int overflow + // so we should turn it into maxSize + return maxSize(); + } else if (sz > maxSize()) { + return maxSize(); } - int ExtentManager::followupSize( int len, int lastExtentLen ) const { - invariant( len < maxSize() ); - int x = initialSize(len); - // changed from 1.20 to 1.35 in v2.1.x to get to larger extent size faster - int y = (int) (lastExtentLen < 4000000 ? lastExtentLen * 4.0 : lastExtentLen * 1.35); - int sz = y > x ? y : x; - - if ( sz < lastExtentLen ) { - // this means there was an int overflow - // so we should turn it into maxSize - return maxSize(); - } - else if ( sz > maxSize() ) { - return maxSize(); - } - - sz = quantizeExtentSize( sz ); - verify( sz >= len ); - - return sz; - } + sz = quantizeExtentSize(sz); + verify(sz >= len); - int ExtentManager::initialSize( int len ) const { - invariant( len <= maxSize() ); + return sz; +} - long long sz = len * 16; - if ( len < 1000 ) - sz = len * 64; +int ExtentManager::initialSize(int len) const { + invariant(len <= maxSize()); - if ( sz >= maxSize() ) - return maxSize(); + long long sz = len * 16; + if (len < 1000) + sz = len * 64; - if ( sz <= minSize() ) - return minSize(); + if (sz >= maxSize()) + return maxSize(); - int z = ExtentManager::quantizeExtentSize( sz ); - verify( z >= len ); - return z; - } + if (sz <= minSize()) + return minSize(); + + int z = ExtentManager::quantizeExtentSize(sz); + verify(z >= len); + return z; +} } |