void ShardingState::donateChunk( const string& ns , const BSONObj& min , const BSONObj& max , ShardChunkVersion version ) { scoped_lock lk( _mutex ); ChunkManagersMap::const_iterator it = _chunks.find( ns ); assert( it != _chunks.end() ) ; ShardChunkManagerPtr p = it->second; // empty shards should have version 0 version = ( p->getNumChunks() > 1 ) ? version : ShardChunkVersion( 0 , 0 ); ShardChunkManagerPtr cloned( p->cloneMinus( min , max , version ) ); _chunks[ns] = cloned; }
void ShardingState::donateChunk( const string& ns , const BSONObj& min , const BSONObj& max , ChunkVersion version ) { scoped_lock lk( _mutex ); ChunkManagersMap::const_iterator it = _chunks.find( ns ); verify( it != _chunks.end() ) ; ShardChunkManagerPtr p = it->second; // empty shards should have version 0 version = ( p->getNumChunks() > 1 ) ? version : ChunkVersion( 0 , OID() ); ShardChunkManagerPtr cloned( p->cloneMinus( min , max , version ) ); // TODO: a bit dangerous to have two different zero-version states - no-manager and // no-version _chunks[ns] = cloned; }