示例#1
0
文件: d_state.cpp 项目: ALFIO/mongo
    ShardChunkManagerPtr ShardingState::getShardChunkManager( const string& ns ){
        scoped_lock lk( _mutex );

        ChunkManagersMap::const_iterator it = _chunks.find( ns );
        if ( it == _chunks.end() ) {
            return ShardChunkManagerPtr();
        } else {
            return it->second;
        }
    }
示例#2
0
文件: d_state.cpp 项目: jit/mongo
    ShardChunkManagerPtr ShardingState::getShardChunkManager( const string& ns ){
        ConfigVersion version;
        { 
            // check cache
            scoped_lock lk( _mutex );

            NSVersionMap::const_iterator it = _versions.find( ns );
            if ( it == _versions.end() ) {
                return ShardChunkManagerPtr();
            }

            version = it->second;

            // TODO SERVER-1849 pending drop work
            // the manager should use the cached version only if the versions match exactly
            ShardChunkManagerPtr p = _chunks[ns];
            if ( p && p->getVersion() >= version ){
                // our cached version is good, so just return
                return p;                
            }
        }

        // load the chunk information for this shard from the config database
        // a reminder: ShardChunkManager may throw on construction
        const string c = (_configServer == _shardHost) ? "" /* local */ : _configServer;
        ShardChunkManagerPtr p( new ShardChunkManager( c , ns , _shardName ) );

        // TODO SERVER-1849 verify that the manager's version is exactly the one requested
        // If not, do update _chunks, but fail the request.
        { 
            scoped_lock lk( _mutex );
            _chunks[ns] = p;
        }

        return p;
    }
示例#3
0
 DocumentSourceCursor::CursorWithContext::CursorWithContext( const string& ns )
     : _readContext( ns ) // Take a read lock.
     , _chunkMgr(shardingState.needShardChunkManager( ns )
                 ? shardingState.getShardChunkManager( ns )
                 : ShardChunkManagerPtr())
 {}
示例#4
0
文件: query.cpp 项目: igagnidz/tokumx
 ShardChunkManagerPtr QueryResponseBuilder::newChunkManager() const {
     if ( !shardingState.needShardChunkManager( _parsedQuery.ns() ) ) {
         return ShardChunkManagerPtr();
     }
     return shardingState.getShardChunkManager( _parsedQuery.ns() );
 }