Sirikata
|
#include <RedisObjectSegmentation.hpp>
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< Mutex > | Lock |
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 | |
CoordinateSegmentation * | mCSeg |
OSegCache * | mCache |
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 |
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] |
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().
void Sirikata::RedisObjectSegmentation::addMigratedObject | ( | const UUID & | obj_id, |
float | radius, | ||
ServerID | idServerAckTo, | ||
bool | generateAck | ||
) | [virtual] |
Implements Sirikata::ObjectSegmentation.
References ensureConnected(), Sirikata::SpaceContext::id(), Sirikata::Logging::insane, Sirikata::ObjectSegmentation::mContext, mMutex, mOSeg, mRedisContext, mRedisHasTransactions, mRedisKeyTTL, mRedisPrefix, Sirikata::ObjectSegmentation::mStopping, REDISOSEG_LOG, and Sirikata::UUID::toString().
void Sirikata::RedisObjectSegmentation::addNewObject | ( | const UUID & | obj_id, |
float | radius | ||
) | [virtual] |
Implements Sirikata::ObjectSegmentation.
References ensureConnected(), Sirikata::SpaceContext::id(), Sirikata::Logging::insane, Sirikata::ObjectSegmentation::mContext, mMutex, mOSeg, mRedisContext, mRedisHasTransactions, mRedisKeyTTL, mRedisPrefix, Sirikata::ObjectSegmentation::mStopping, REDISOSEG_LOG, and Sirikata::UUID::toString().
void Sirikata::RedisObjectSegmentation::addRead | ( | ) |
References Sirikata::Logging::insane, mReading, REDISOSEG_LOG, and startRead().
void Sirikata::RedisObjectSegmentation::addWrite | ( | ) |
References Sirikata::Logging::insane, mWriting, REDISOSEG_LOG, and startWrite().
Implements Sirikata::ObjectSegmentation.
References Sirikata::OSegCache::get(), and mCache.
void Sirikata::RedisObjectSegmentation::cleanup | ( | ) |
References Sirikata::Logging::insane, mMutex, mReading, mRedisContext, mRedisFD, mWriting, and REDISOSEG_LOG.
Referenced by disconnected(), and ~RedisObjectSegmentation().
bool Sirikata::RedisObjectSegmentation::clearToMigrate | ( | const UUID & | obj_id | ) | [virtual] |
Implements Sirikata::ObjectSegmentation.
References mOSeg, and Sirikata::ObjectSegmentation::mStopping.
void Sirikata::RedisObjectSegmentation::connect | ( | ) | [private] |
References Sirikata::Network::IOService::asioService(), Sirikata::Logging::error, Sirikata::Logging::insane, Sirikata::Context::ioService, Sirikata::ObjectSegmentation::mContext, mMutex, mRedisContext, mRedisFD, mRedisHost, mRedisPort, and REDISOSEG_LOG.
Referenced by ensureConnected(), and start().
void Sirikata::RedisObjectSegmentation::delRead | ( | ) |
References Sirikata::Logging::insane, mReading, and REDISOSEG_LOG.
void Sirikata::RedisObjectSegmentation::delWrite | ( | ) |
References Sirikata::Logging::insane, mWriting, and REDISOSEG_LOG.
void Sirikata::RedisObjectSegmentation::disconnected | ( | ) |
References cleanup().
void Sirikata::RedisObjectSegmentation::ensureConnected | ( | ) | [private] |
References connect(), and mRedisContext.
Referenced by addMigratedObject(), addNewObject(), lookup(), refreshObjectTimeout(), and removeObject().
void Sirikata::RedisObjectSegmentation::failReadObject | ( | const UUID & | obj_id | ) |
void Sirikata::RedisObjectSegmentation::finishReadObject | ( | const UUID & | obj_id, |
const String & | data_str | ||
) |
References Sirikata::Logging::detailed, Sirikata::OSegCache::insert(), Sirikata::OSegEntry::isNull(), mCache, Sirikata::ObjectSegmentation::mLookupListener, Sirikata::ObjectSegmentation::mStopping, Sirikata::OSegEntry::null(), Sirikata::OSegLookupListener::osegLookupCompleted(), REDISOSEG_LOG, Sirikata::OSegEntry::setRadius(), Sirikata::OSegEntry::setServer(), and Sirikata::UUID::toString().
void Sirikata::RedisObjectSegmentation::finishWriteMigratedObject | ( | const UUID & | obj_id, |
ServerID | ackTo | ||
) |
void Sirikata::RedisObjectSegmentation::finishWriteNewObject | ( | const UUID & | obj_id, |
OSegWriteListener::OSegAddNewStatus | status | ||
) |
References Sirikata::Logging::detailed, Sirikata::OSegCache::insert(), mCache, mOSeg, Sirikata::ObjectSegmentation::mStopping, Sirikata::ObjectSegmentation::mWriteListener, Sirikata::OSegWriteListener::osegAddNewFinished(), REDISOSEG_LOG, scheduleObjectRefresh(), Sirikata::OSegWriteListener::SUCCESS, and Sirikata::UUID::toString().
void Sirikata::RedisObjectSegmentation::handleMigrateMessageAck | ( | const Sirikata::Protocol::OSeg::MigrateMessageAcknowledge & | msg | ) | [virtual] |
void Sirikata::RedisObjectSegmentation::handleUpdateOSegMessage | ( | const Sirikata::Protocol::OSeg::UpdateOSegMessage & | update_oseg_msg | ) | [virtual] |
Implements Sirikata::ObjectSegmentation.
References Sirikata::OSegCache::insert(), and mCache.
void Sirikata::RedisObjectSegmentation::migrateObject | ( | const UUID & | obj_id, |
const OSegEntry & | new_server_id | ||
) | [virtual] |
Implements Sirikata::ObjectSegmentation.
References mOSeg, Sirikata::ObjectSegmentation::mStopping, and mTimeouts.
void Sirikata::RedisObjectSegmentation::processExpiredObjects | ( | ) | [private] |
void Sirikata::RedisObjectSegmentation::readHandler | ( | const boost::system::error_code & | ec | ) | [private] |
References Sirikata::Logging::error, mMutex, mRedisContext, REDISOSEG_LOG, and startRead().
Referenced by startRead().
void Sirikata::RedisObjectSegmentation::refreshObjectTimeout | ( | const UUID & | obj_id | ) | [private] |
References ensureConnected(), Sirikata::SpaceContext::id(), Sirikata::Logging::insane, Sirikata::ObjectSegmentation::mContext, mMutex, mOSeg, mRedisContext, mRedisHasTransactions, mRedisKeyTTL, mRedisPrefix, Sirikata::ObjectSegmentation::mStopping, REDISOSEG_LOG, and Sirikata::UUID::toString().
Referenced by processExpiredObjects().
void Sirikata::RedisObjectSegmentation::removeObject | ( | const UUID & | obj_id | ) | [virtual] |
Implements Sirikata::ObjectSegmentation.
References ensureConnected(), mMutex, mOSeg, mRedisContext, mRedisPrefix, Sirikata::ObjectSegmentation::mStopping, mTimeouts, and Sirikata::UUID::toString().
void Sirikata::RedisObjectSegmentation::scheduleObjectRefresh | ( | const UUID & | obj_id | ) | [private] |
References Sirikata::ObjectSegmentation::mContext, mRedisKeyTTL, mTimeouts, Sirikata::Context::simTime(), and startTimeoutHandler().
Referenced by finishWriteNewObject(), and handleMigrateMessageAck().
void Sirikata::RedisObjectSegmentation::start | ( | ) | [virtual] |
Reimplemented from Sirikata::ObjectSegmentation.
References connect().
void Sirikata::RedisObjectSegmentation::startRead | ( | ) | [private] |
References Sirikata::Logging::error, mReading, mRedisFD, Sirikata::ObjectSegmentation::mStopping, and readHandler().
Referenced by addRead(), and readHandler().
void Sirikata::RedisObjectSegmentation::startTimeoutHandler | ( | ) | [private] |
References Sirikata::ObjectSegmentation::mContext, mExpiryTimer, mTimeouts, and Sirikata::Context::simTime().
Referenced by processExpiredObjects(), and scheduleObjectRefresh().
void Sirikata::RedisObjectSegmentation::startWrite | ( | ) | [private] |
References Sirikata::Logging::error, mRedisFD, Sirikata::ObjectSegmentation::mStopping, mWriting, and writeHandler().
Referenced by addWrite(), and writeHandler().
void Sirikata::RedisObjectSegmentation::stop | ( | ) | [virtual] |
Reimplemented from Sirikata::ObjectSegmentation.
References mExpiryTimer.
void Sirikata::RedisObjectSegmentation::writeHandler | ( | const boost::system::error_code & | ec | ) | [private] |
References Sirikata::Logging::error, mMutex, mRedisContext, REDISOSEG_LOG, and startWrite().
Referenced by startWrite().
Referenced by startTimeoutHandler(), and stop().
Referenced by addMigratedObject(), addNewObject(), cleanup(), connect(), lookup(), readHandler(), refreshObjectTimeout(), removeObject(), and writeHandler().
bool Sirikata::RedisObjectSegmentation::mReading [private] |
Referenced by addRead(), cleanup(), delRead(), and startRead().
redisAsyncContext* Sirikata::RedisObjectSegmentation::mRedisContext [private] |
Referenced by addMigratedObject(), addNewObject(), cleanup(), connect(), ensureConnected(), lookup(), readHandler(), refreshObjectTimeout(), removeObject(), and writeHandler().
boost::asio::posix::stream_descriptor* Sirikata::RedisObjectSegmentation::mRedisFD [private] |
Referenced by cleanup(), connect(), startRead(), and startWrite().
bool Sirikata::RedisObjectSegmentation::mRedisHasTransactions [private] |
Referenced by addMigratedObject(), addNewObject(), and refreshObjectTimeout().
String Sirikata::RedisObjectSegmentation::mRedisHost [private] |
Referenced by connect().
Referenced by addMigratedObject(), addNewObject(), processExpiredObjects(), refreshObjectTimeout(), and scheduleObjectRefresh().
uint16 Sirikata::RedisObjectSegmentation::mRedisPort [private] |
Referenced by connect().
String Sirikata::RedisObjectSegmentation::mRedisPrefix [private] |
Referenced by addMigratedObject(), addNewObject(), lookup(), refreshObjectTimeout(), and removeObject().
Referenced by migrateObject(), processExpiredObjects(), removeObject(), scheduleObjectRefresh(), and startTimeoutHandler().
bool Sirikata::RedisObjectSegmentation::mWriting [private] |
Referenced by addWrite(), cleanup(), delWrite(), and startWrite().