Пример #1
0
  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;
  }
Пример #2
0
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;
    }