Sirikata
Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes
Sirikata::RedisObjectSegmentation Class Reference

#include <RedisObjectSegmentation.hpp>

Inheritance diagram for Sirikata::RedisObjectSegmentation:
Collaboration diagram for Sirikata::RedisObjectSegmentation:

List of all members.

Classes

struct  expires_tag
struct  ObjectTimeout
struct  objid_tag

Public Member Functions

 RedisObjectSegmentation (SpaceContext *con, Network::IOStrand *o_strand, CoordinateSegmentation *cseg, OSegCache *cache, const String &redis_host, uint32 redis_port, const String &redis_prefix, Duration redis_ttl, bool redis_has_transactions)
 ~RedisObjectSegmentation ()
virtual void start ()
virtual void stop ()
virtual OSegEntry cacheLookup (const UUID &obj_id)
virtual OSegEntry lookup (const UUID &obj_id)
virtual void addNewObject (const UUID &obj_id, float radius)
virtual void addMigratedObject (const UUID &obj_id, float radius, ServerID idServerAckTo, bool)
virtual void removeObject (const UUID &obj_id)
virtual bool clearToMigrate (const UUID &obj_id)
virtual void migrateObject (const UUID &obj_id, const OSegEntry &new_server_id)
virtual void handleMigrateMessageAck (const Sirikata::Protocol::OSeg::MigrateMessageAcknowledge &msg)
virtual void handleUpdateOSegMessage (const Sirikata::Protocol::OSeg::UpdateOSegMessage &update_oseg_msg)
void disconnected ()
void addRead ()
void delRead ()
void addWrite ()
void delWrite ()
void cleanup ()
void finishReadObject (const UUID &obj_id, const String &data_str)
void failReadObject (const UUID &obj_id)
void finishWriteNewObject (const UUID &obj_id, OSegWriteListener::OSegAddNewStatus)
void finishWriteMigratedObject (const UUID &obj_id, ServerID ackTo)

Private Types

typedef
std::tr1::unordered_map< UUID,
OSegEntry, UUID::Hasher
OSegMap
typedef boost::recursive_mutex Mutex
typedef boost::lock_guard< MutexLock
typedef
boost::multi_index_container
< ObjectTimeout,
boost::multi_index::indexed_by
< boost::multi_index::hashed_unique
< boost::multi_index::tag
< objid_tag >
, BOOST_MULTI_INDEX_MEMBER(ObjectTimeout,
UUID, objid), UUID::Hasher >
, boost::multi_index::ordered_non_unique
< boost::multi_index::tag
< expires_tag >
, BOOST_MULTI_INDEX_MEMBER(ObjectTimeout,
Time, expires) > > > 
ObjectTimeouts
typedef ObjectTimeouts::index
< objid_tag >::type 
ObjectTimeoutsByID
typedef ObjectTimeouts::index
< expires_tag >::type 
ObjectTimeoutsByExpiration

Private Member Functions

void connect ()
void ensureConnected ()
void startRead ()
void startWrite ()
void readHandler (const boost::system::error_code &ec)
void writeHandler (const boost::system::error_code &ec)
void scheduleObjectRefresh (const UUID &obj_id)
void startTimeoutHandler ()
void processExpiredObjects ()
void refreshObjectTimeout (const UUID &obj_id)

Private Attributes

CoordinateSegmentationmCSeg
OSegCachemCache
OSegMap mOSeg
String mRedisHost
uint16 mRedisPort
String mRedisPrefix
Duration mRedisKeyTTL
bool mRedisHasTransactions
redisAsyncContext * mRedisContext
boost::asio::posix::stream_descriptor * mRedisFD
bool mReading
bool mWriting
Mutex mMutex
ObjectTimeouts mTimeouts
Network::IOTimerPtr mExpiryTimer

Member Typedef Documentation

typedef boost::lock_guard<Mutex> Sirikata::RedisObjectSegmentation::Lock [private]
typedef boost::recursive_mutex Sirikata::RedisObjectSegmentation::Mutex [private]
typedef boost::multi_index_container< ObjectTimeout, boost::multi_index::indexed_by< boost::multi_index::hashed_unique< boost::multi_index::tag<objid_tag>, BOOST_MULTI_INDEX_MEMBER(ObjectTimeout,UUID,objid), UUID::Hasher >, boost::multi_index::ordered_non_unique< boost::multi_index::tag<expires_tag>, BOOST_MULTI_INDEX_MEMBER(ObjectTimeout,Time,expires) > > > Sirikata::RedisObjectSegmentation::ObjectTimeouts [private]
typedef ObjectTimeouts::index<expires_tag>::type Sirikata::RedisObjectSegmentation::ObjectTimeoutsByExpiration [private]
typedef ObjectTimeouts::index<objid_tag>::type Sirikata::RedisObjectSegmentation::ObjectTimeoutsByID [private]
typedef std::tr1::unordered_map<UUID, OSegEntry, UUID::Hasher> Sirikata::RedisObjectSegmentation::OSegMap [private]

Constructor & Destructor Documentation

Sirikata::RedisObjectSegmentation::RedisObjectSegmentation ( SpaceContext con,
Network::IOStrand o_strand,
CoordinateSegmentation cseg,
OSegCache cache,
const String &  redis_host,
uint32  redis_port,
const String &  redis_prefix,
Duration  redis_ttl,
bool  redis_has_transactions 
)
Sirikata::RedisObjectSegmentation::~RedisObjectSegmentation ( )

References cleanup().


Member Function Documentation

void Sirikata::RedisObjectSegmentation::addMigratedObject ( const UUID obj_id,
float  radius,
ServerID  idServerAckTo,
bool  generateAck 
) [virtual]
void Sirikata::RedisObjectSegmentation::addNewObject ( const UUID obj_id,
float  radius 
) [virtual]
void Sirikata::RedisObjectSegmentation::addRead ( )
void Sirikata::RedisObjectSegmentation::addWrite ( )
OSegEntry Sirikata::RedisObjectSegmentation::cacheLookup ( const UUID obj_id) [virtual]
void Sirikata::RedisObjectSegmentation::cleanup ( )
bool Sirikata::RedisObjectSegmentation::clearToMigrate ( const UUID obj_id) [virtual]
void Sirikata::RedisObjectSegmentation::connect ( ) [private]
void Sirikata::RedisObjectSegmentation::delRead ( )
void Sirikata::RedisObjectSegmentation::delWrite ( )
void Sirikata::RedisObjectSegmentation::disconnected ( )

References cleanup().

void Sirikata::RedisObjectSegmentation::ensureConnected ( ) [private]
void Sirikata::RedisObjectSegmentation::failReadObject ( const UUID obj_id)
void Sirikata::RedisObjectSegmentation::finishReadObject ( const UUID obj_id,
const String &  data_str 
)
void Sirikata::RedisObjectSegmentation::finishWriteMigratedObject ( const UUID obj_id,
ServerID  ackTo 
)
void Sirikata::RedisObjectSegmentation::finishWriteNewObject ( const UUID obj_id,
OSegWriteListener::OSegAddNewStatus  status 
)
void Sirikata::RedisObjectSegmentation::handleMigrateMessageAck ( const Sirikata::Protocol::OSeg::MigrateMessageAcknowledge &  msg) [virtual]
void Sirikata::RedisObjectSegmentation::handleUpdateOSegMessage ( const Sirikata::Protocol::OSeg::UpdateOSegMessage &  update_oseg_msg) [virtual]
OSegEntry Sirikata::RedisObjectSegmentation::lookup ( const UUID obj_id) [virtual]
void Sirikata::RedisObjectSegmentation::migrateObject ( const UUID obj_id,
const OSegEntry new_server_id 
) [virtual]
void Sirikata::RedisObjectSegmentation::processExpiredObjects ( ) [private]
void Sirikata::RedisObjectSegmentation::readHandler ( const boost::system::error_code &  ec) [private]
void Sirikata::RedisObjectSegmentation::refreshObjectTimeout ( const UUID obj_id) [private]
void Sirikata::RedisObjectSegmentation::removeObject ( const UUID obj_id) [virtual]
void Sirikata::RedisObjectSegmentation::scheduleObjectRefresh ( const UUID obj_id) [private]
void Sirikata::RedisObjectSegmentation::start ( ) [virtual]

Reimplemented from Sirikata::ObjectSegmentation.

References connect().

void Sirikata::RedisObjectSegmentation::startRead ( ) [private]
void Sirikata::RedisObjectSegmentation::startTimeoutHandler ( ) [private]
void Sirikata::RedisObjectSegmentation::startWrite ( ) [private]
void Sirikata::RedisObjectSegmentation::stop ( ) [virtual]

Reimplemented from Sirikata::ObjectSegmentation.

References mExpiryTimer.

void Sirikata::RedisObjectSegmentation::writeHandler ( const boost::system::error_code &  ec) [private]

Member Data Documentation

Referenced by startTimeoutHandler(), and stop().

Referenced by addRead(), cleanup(), delRead(), and startRead().

boost::asio::posix::stream_descriptor* Sirikata::RedisObjectSegmentation::mRedisFD [private]

Referenced by connect().

Referenced by connect().


The documentation for this class was generated from the following files: