int ConfigDiffTracker<ValType,ShardType>:: calculateConfigDiff( string config, const set<ChunkVersion>& extraMinorVersions ) { verifyAttached(); // Get the diff query required Query diffQuery = configDiffQuery( extraMinorVersions ); ScopedDbConnection conn(config); try { // Open a cursor for the diff chunks auto_ptr<DBClientCursor> cursor = conn->query( ChunkType::ConfigNS, diffQuery, 0, 0, 0, 0, ( DEBUG_BUILD ? 2 : 1000000 ) ); verify( cursor.get() ); int diff = calculateConfigDiff( *cursor.get() ); conn.done(); return diff; } catch( DBException& e ) { // Should only happen on connection errors e.addContext( str::stream() << "could not calculate config difference for ns " << _ns << " on " << config ); throw; } }
int ConfigDiffTracker<ValType, ShardType>::calculateConfigDiff(CatalogManager* catalogManager) { _assertAttached(); // Get the diff query required Query diffQuery = configDiffQuery(); try { std::vector<ChunkType> chunks; uassertStatusOK(catalogManager->getChunks( diffQuery.getFilter(), diffQuery.getSort(), boost::none, &chunks)); return calculateConfigDiff(chunks); } catch (DBException& e) { // Should only happen on connection errors e.addContext(str::stream() << "could not calculate config difference for ns " << _ns); throw; } }