Error::ErrorCode Flood::LoopOnce( void ) { GetChunks(); time_t now; time( &now ); if ( now - m_lasttrackerupdate >= SECONDS_TRACKER_UPDATE_INTERVAL ) { UpdateTrackers(); time( &m_lasttrackerupdate ); } // copy the peer sptr vector, chances are it will change in this loop V_PeerConnectionSPtr peers = m_peers; { V_PeerConnectionSPtr::iterator peeriter = peers.begin(); V_PeerConnectionSPtr::iterator peerend = peers.end(); for ( ; peeriter != peerend; ++peeriter ) { // process (*peeriter)->LoopOnce(); } } /// now reap peers { V_PeerConnectionSPtr::iterator peeriter = m_peers.begin(); V_PeerConnectionSPtr::iterator peerend = m_peers.end(); for ( ; peeriter != peerend; ) { if ( (*peeriter)->m_disconnected ) { printf( "Reaping %s\n", (*peeriter)->m_id.c_str() ); peeriter = m_peers.erase( peeriter ); } else { ++peeriter; } } } return Error::NO_ERROR_LBF; }
bool StorageShard::IsSplitable() { StorageChunk** itChunk; ReadBuffer firstKey; ReadBuffer lastKey; FOREACH (itChunk, GetChunks()) { firstKey = (*itChunk)->GetFirstKey(); lastKey = (*itChunk)->GetLastKey(); if (firstKey.GetLength() > 0 && !RangeContains(firstKey)) return false; if (lastKey.GetLength() > 0 && !RangeContains(lastKey)) return false; }