diff options
author | Antonin Kral <a.kral@bobek.cz> | 2010-06-30 08:56:42 +0200 |
---|---|---|
committer | Antonin Kral <a.kral@bobek.cz> | 2010-06-30 08:56:42 +0200 |
commit | 5c6a2219e6715bd7649c3fd28f58e6fb63d60a25 (patch) | |
tree | 1eda5f5ca9bd35190fe499a51119e855774b16c0 /db/database.h | |
parent | df7046adebaeb16716b5a2cebc6f34694f530caf (diff) | |
download | mongodb-5c6a2219e6715bd7649c3fd28f58e6fb63d60a25.tar.gz |
Imported Upstream version 1.4.4
Diffstat (limited to 'db/database.h')
-rw-r--r-- | db/database.h | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/db/database.h b/db/database.h index 868af0b..23bca7c 100644 --- a/db/database.h +++ b/db/database.h @@ -154,7 +154,7 @@ namespace mongo { return preallocateOnly ? 0 : p; } - MongoDataFile* addAFile( int sizeNeeded = 0, bool preallocateNextFile = false ) { + MongoDataFile* addAFile( int sizeNeeded, bool preallocateNextFile ) { int n = (int) files.size(); MongoDataFile *ret = getFile( n, sizeNeeded ); if ( preallocateNextFile ) @@ -168,12 +168,15 @@ namespace mongo { getFile( n, 0, true ); } - MongoDataFile* suitableFile( int sizeNeeded ) { + MongoDataFile* suitableFile( int sizeNeeded, bool preallocate ) { MongoDataFile* f = newestFile(); + if ( !f ) { + f = addAFile( sizeNeeded, preallocate ); + } for ( int i = 0; i < 8; i++ ) { if ( f->getHeader()->unusedLength >= sizeNeeded ) break; - f = addAFile( sizeNeeded ); + f = addAFile( sizeNeeded, preallocate ); if ( f->getHeader()->fileLength >= MongoDataFile::maxSize() ) // this is as big as they get so might as well stop break; } @@ -183,12 +186,16 @@ namespace mongo { Extent* allocExtent( const char *ns, int size, bool capped ) { Extent *e = DataFileMgr::allocFromFreeList( ns, size, capped ); if( e ) return e; - return suitableFile( size )->createExtent( ns, size, capped ); + return suitableFile( size, !capped )->createExtent( ns, size, capped ); } MongoDataFile* newestFile() { int n = (int) files.size(); - if ( n > 0 ) n--; + if ( n > 0 ) { + n--; + } else { + return 0; + } return getFile(n); } |