Sirikata
|
#include <Forwarder.hpp>
typedef std::vector<ServerID> Sirikata::Forwarder::ListServersUpdate [private] |
typedef std::tr1::unordered_map<UUID, UniqueObjConn, UUID::Hasher> Sirikata::Forwarder::ObjectConnectionMap [private] |
typedef std::tr1::unordered_map<UUID,ListServersUpdate, UUID::Hasher> Sirikata::Forwarder::ObjectServerUpdateMap [private] |
typedef std::tr1::unordered_map<ServerID, ODPFlowScheduler*> Sirikata::Forwarder::ODPRouterMap [private] |
typedef std::map<String, ForwarderServiceQueue::ServiceID> Sirikata::Forwarder::ServiceMap [private] |
Sirikata::Forwarder::Forwarder | ( | SpaceContext * | ctx | ) |
References createServerMessageService(), FORWARDER_SEND_QUEUE_SIZE, Sirikata::GetOptionValue< uint32 >(), Sirikata::SpaceContext::id(), mContext, mForwarderWeightRouter, mNullServerIDOSegCallback, mOSegCacheUpdateRouter, mOutgoingMessages, Sirikata::ServerMessageDispatcher::registerMessageRecipient(), routeObjectMessageToServerNoReturn(), SERVER_PORT_FORWARDER_WEIGHT_UPDATE, and SERVER_PORT_OBJECT_MESSAGE_ROUTING.
Sirikata::Forwarder::~Forwarder | ( | ) |
void Sirikata::Forwarder::addObjectConnection | ( | const UUID & | dest_obj, |
ObjectConnection * | conn | ||
) |
void Sirikata::Forwarder::addODPServerMessageService | ( | LocationService * | loc | ) | [private] |
References Sirikata::ForwarderServiceQueue::addService(), createODPFlowScheduler(), mOutgoingMessages, mServiceIDMap, mServiceIDSource, and ODP_SERVER_MESSAGE_SERVICE.
Referenced by initialize().
ODPFlowScheduler * Sirikata::Forwarder::createODPFlowScheduler | ( | LocationService * | loc, |
ServerID | remote_server, | ||
uint32 | max_size | ||
) | [private] |
References Sirikata::GetOptionValue< String >(), mContext, mODPRouterMapMutex, mODPRouters, mOutgoingMessages, mServiceIDMap, ODP_SERVER_MESSAGE_SERVICE, and SERVER_ODP_FLOW_SCHEDULER.
Referenced by addODPServerMessageService().
Router< Message * > * Sirikata::Forwarder::createServerMessageService | ( | const String & | name | ) | [virtual] |
Implements Sirikata::ServerMessageRouter.
References mOutgoingMessages, mServiceIDMap, mServiceIDSource, and name().
Referenced by Forwarder(), and Sirikata::Server::Server().
void Sirikata::Forwarder::dispatchMessage | ( | Sirikata::Protocol::Object::ObjectMessage * | msg | ) | const [private] |
References Sirikata::ODP::DelegateService::deliver(), mDelegateODPService, and Sirikata::SpaceID::null().
Referenced by handleObjectMessageLoop(), receiveObjectRoutingMessage(), and routeObjectHostMessage().
void Sirikata::Forwarder::enableObjectConnection | ( | const UUID & | dest_obj | ) |
References Sirikata::ObjectConnection::enable(), getObjectConnection(), SILOG, and Sirikata::Logging::warn.
Referenced by Sirikata::Server::handleConnectAck().
bool Sirikata::Forwarder::forward | ( | Sirikata::Protocol::Object::ObjectMessage * | msg, |
ServerID | forwardFrom = NullServerID |
||
) | [private] |
Try to forward a message to get it closer to the destination object.
This checks if we have a direct connection to the object, then does an OSeg lookup if necessary.
References Sirikata::Trace::FORWARDING_STARTED, Sirikata::OSegLookupQueue::lookup(), mNullServerIDOSegCallback, mOSegLookups, Sirikata::Trace::OSEG_LOOKUP_STARTED, routeObjectMessageToServerNoReturn(), TIMESTAMP_END, and TIMESTAMP_START.
Referenced by receiveObjectRoutingMessage(), and routeObjectHostMessage().
void Sirikata::Forwarder::forwarderServiceMessageReady | ( | ServerID | dest_server | ) | [private, virtual] |
Implements Sirikata::ForwarderServiceQueue::Listener.
References Sirikata::ServerMessageQueue::messageReady(), and mServerMessageQueue.
ObjectConnection * Sirikata::Forwarder::getObjectConnection | ( | const UUID & | dest_obj, |
uint64 & | uniqueconnid | ||
) |
References mObjectConnections.
ObjectConnection * Sirikata::Forwarder::getObjectConnection | ( | const UUID & | dest_obj | ) |
References mObjectConnections.
Referenced by enableObjectConnection(), Sirikata::Server::handleMigrationEvent(), and Sirikata::Server::killObjectConnection().
void Sirikata::Forwarder::handleObjectMessageLoop | ( | Sirikata::Protocol::Object::ObjectMessage * | msg | ) | const [private] |
References dispatchMessage().
Referenced by routeObjectMessageToServer().
void Sirikata::Forwarder::initialize | ( | ObjectSegmentation * | oseg, |
ServerMessageQueue * | smq, | ||
ServerMessageReceiver * | smr, | ||
LocationService * | loc | ||
) |
void Sirikata::Forwarder::processReceivedServerMessages | ( | ) | [private] |
References Sirikata::ServerMessageDispatcher::dispatchMessage(), MAX_RECEIVED_MESSAGES_PROCESSED, mReceivedMessages, mReceivedMessagesMutex, Sirikata::SizedThreadSafeQueue< T, ResourceMonitor, Superclass >::pop(), Sirikata::SizedThreadSafeQueue< T, ResourceMonitor, Superclass >::probablyEmpty(), and scheduleProcessReceivedServerMessages().
Referenced by scheduleProcessReceivedServerMessages().
void Sirikata::Forwarder::receiveMessage | ( | Message * | msg | ) | [private, virtual] |
void Sirikata::Forwarder::receiveObjectRoutingMessage | ( | Message * | msg | ) | [private] |
References dispatchMessage(), Sirikata::Trace::DROPPED_DURING_FORWARDING, Sirikata::Logging::error, forward(), Sirikata::Trace::HANDLE_SPACE_MESSAGE, LOG_INVALID_MESSAGE, mDroppedPerSecond, Sirikata::UUID::null(), Sirikata::parsePBJMessage(), Sirikata::Message::payload(), Sirikata::Message::source_server(), TIMESTAMP, and TRACE_DROP.
Referenced by receiveMessage().
void Sirikata::Forwarder::receiveWeightUpdateMessage | ( | Message * | msg | ) | [private] |
References Sirikata::ServerMessageQueue::capacity(), Sirikata::Logging::error, Sirikata::SpaceContext::id(), Sirikata::Logging::insane, LOG_INVALID_MESSAGE, mContext, mODPRouterMapMutex, mODPRouters, mServerMessageQueue, mServerMessageReceiver, Sirikata::parsePBJMessage(), Sirikata::Message::payload(), SILOG, Sirikata::Message::source_server(), Sirikata::ServerMessageQueue::totalUsedWeight(), Sirikata::ODPFlowScheduler::updateReceiverStats(), Sirikata::ODPFlowScheduler::updateSenderStats(), and Sirikata::ServerMessageReceiver::updateSenderStats().
Referenced by receiveMessage().
ObjectConnection * Sirikata::Forwarder::removeObjectConnection | ( | const UUID & | dest_obj | ) |
void Sirikata::Forwarder::reportStats | ( | ) | [private] |
void Sirikata::Forwarder::routeObjectHostMessage | ( | Sirikata::Protocol::Object::ObjectMessage * | obj_msg | ) |
bool Sirikata::Forwarder::routeObjectMessageToServer | ( | Sirikata::Protocol::Object::ObjectMessage * | msg, |
const OSegEntry & | dest_serv, | ||
OSegLookupQueue::ResolvedFrom | resolved_from, | ||
ServerID | forwardFrom = NullServerID |
||
) | [private] |
References Sirikata::Trace::DROPPED_AT_SPACE_ENQUEUED, handleObjectMessageLoop(), Sirikata::SpaceContext::id(), Sirikata::OSegEntry::isNull(), Sirikata::Context::mainStrand, mContext, mDroppedPerSecond, mForwardedPerSecond, mODPRouterMapMutex, mODPRouters, mOSegCacheUpdateRouter, mOutgoingMessages, Sirikata::OSegEntry::null(), Sirikata::Trace::OSEG_CACHE_LOOKUP_FINISHED, Sirikata::Trace::OSEG_LOOKUP_FINISHED, Sirikata::Trace::OSEG_SERVER_LOOKUP_FINISHED, Sirikata::Network::IOStrand::post(), Sirikata::ForwarderServiceQueue::prePush(), Sirikata::ODPFlowScheduler::push(), Sirikata::OSegEntry::radius(), Sirikata::OSegLookupQueue::ResolvedFromCache, Sirikata::Router< MessageType >::route(), Sirikata::serializePBJMessage(), Sirikata::OSegEntry::server(), SERVER_PORT_OSEG_UPDATE, Sirikata::Trace::SPACE_TO_SPACE_ENQUEUED, TIMESTAMP, and TRACE_DROP.
Referenced by routeObjectMessageToServerNoReturn(), and tryCacheForward().
void Sirikata::Forwarder::routeObjectMessageToServerNoReturn | ( | Sirikata::Protocol::Object::ObjectMessage * | msg, |
const OSegEntry & | dest_serv, | ||
OSegLookupQueue::ResolvedFrom | resolved_from, | ||
ServerID | forwardFrom = NullServerID |
||
) | [private] |
References routeObjectMessageToServer().
Referenced by forward(), and Forwarder().
void Sirikata::Forwarder::scheduleProcessReceivedServerMessages | ( | ) | [private] |
References Sirikata::Context::mainStrand, mContext, Sirikata::Network::IOStrand::post(), and processReceivedServerMessages().
Referenced by processReceivedServerMessages(), and serverMessageReceived().
void Sirikata::Forwarder::serverConnectionReceived | ( | ServerID | sid | ) | [private, virtual] |
need to take the lock because createODPFlowScheduler will want the lock later but an intervening lock will be taken
Implements Sirikata::ServerMessageReceiver::Listener.
References mODPRouterMapMutex, mOutgoingMessages, and Sirikata::ForwarderServiceQueue::prePush().
bool Sirikata::Forwarder::serverMessageEmpty | ( | ServerID | dest | ) | [private, virtual] |
Implements Sirikata::ServerMessageQueue::Sender.
References Sirikata::ForwarderServiceQueue::empty(), and mOutgoingMessages.
Message * Sirikata::Forwarder::serverMessagePull | ( | ServerID | dest | ) | [private, virtual] |
Invoked when the ServerMessageQueue is ready to accept a message from the sender, destined for the specified server.
Return NULL if no elements are available.
Implements Sirikata::ServerMessageQueue::Sender.
References CONTEXT_SPACETRACE, Sirikata::Message::dest_server(), Sirikata::Message::id(), mOutgoingMessages, Sirikata::ForwarderServiceQueue::pop(), and Sirikata::Message::serializedSize().
void Sirikata::Forwarder::serverMessageReceived | ( | Message * | msg | ) | [private, virtual] |
Implements Sirikata::ServerMessageReceiver::Listener.
References Sirikata::Logging::debug, Sirikata::Message::dest_port(), Sirikata::Logging::error, LOG_INVALID_MESSAGE, mLocalForwarder, mReceivedMessages, mReceivedMessagesMutex, Sirikata::parsePBJMessage(), Sirikata::Message::payload(), Sirikata::SizedThreadSafeQueue< T, ResourceMonitor, Superclass >::probablyEmpty(), Sirikata::SizedThreadSafeQueue< T, ResourceMonitor, Superclass >::push(), scheduleProcessReceivedServerMessages(), SERVER_PORT_OBJECT_MESSAGE_ROUTING, SILOG, Sirikata::Trace::SPACE_TO_SPACE_SMR_DEQUEUED, TIMESTAMP_PAYLOAD, tryCacheForward(), and Sirikata::LocalForwarder::tryForward().
void Sirikata::Forwarder::setLocalForwarder | ( | LocalForwarder * | lf | ) | [inline] |
References mLocalForwarder.
Referenced by Sirikata::Server::Server().
void Sirikata::Forwarder::setODPService | ( | ODP::DelegateService * | odp | ) |
void Sirikata::Forwarder::start | ( | ) | [virtual] |
Implements Sirikata::Service.
References mServerWeightPoller, mTimeSeriesPoller, and Sirikata::Poller::start().
Referenced by Sirikata::Server::start().
void Sirikata::Forwarder::stop | ( | ) | [virtual] |
Implements Sirikata::Service.
References mServerWeightPoller, mTimeSeriesPoller, and Sirikata::Poller::stop().
Referenced by Sirikata::Server::stop().
WARN_UNUSED bool Sirikata::Forwarder::tryCacheForward | ( | Sirikata::Protocol::Object::ObjectMessage * | msg | ) |
References Sirikata::OSegLookupQueue::cacheLookup(), Sirikata::SpaceContext::id(), Sirikata::OSegEntry::isNull(), mContext, mOSegLookups, Sirikata::Trace::OSEG_CACHE_CHECK_FINISHED, Sirikata::Trace::OSEG_CACHE_CHECK_STARTED, Sirikata::OSegLookupQueue::ResolvedFromCache, routeObjectMessageToServer(), Sirikata::OSegEntry::server(), TIMESTAMP_END, and TIMESTAMP_START.
Referenced by Sirikata::Server::onObjectHostMessageReceived(), and serverMessageReceived().
void Sirikata::Forwarder::updateServerWeights | ( | ) | [private] |
References Sirikata::ServerMessageReceiver::capacity(), Sirikata::ServerMessageQueue::capacity(), Sirikata::SpaceContext::id(), Sirikata::Logging::insane, Sirikata::ServerMessageReceiver::isBlocked(), Sirikata::ServerMessageQueue::isBlocked(), mContext, mForwarderWeightRouter, mODPRouterMapMutex, mODPRouters, mServerMessageQueue, mServerMessageReceiver, Sirikata::Router< MessageType >::route(), Sirikata::serializePBJMessage(), SERVER_PORT_FORWARDER_WEIGHT_UPDATE, SILOG, Sirikata::ODPFlowScheduler::totalActiveWeight(), Sirikata::ODPFlowScheduler::totalReceiverUsedWeight(), Sirikata::ODPFlowScheduler::totalSenderUsedWeight(), Sirikata::ServerMessageReceiver::totalUsedWeight(), Sirikata::ServerMessageQueue::totalUsedWeight(), and Sirikata::ServerMessageQueue::updateReceiverStats().
SpaceContext* Sirikata::Forwarder::mContext [private] |
Referenced by dispatchMessage(), and setODPService().
AtomicValue<uint32> Sirikata::Forwarder::mDroppedPerSecond [private] |
Referenced by receiveObjectRoutingMessage(), reportStats(), routeObjectHostMessage(), and routeObjectMessageToServer().
AtomicValue<uint32> Sirikata::Forwarder::mForwardedPerSecond [private] |
Referenced by reportStats(), and routeObjectMessageToServer().
Router<Message*>* Sirikata::Forwarder::mForwarderWeightRouter [private] |
Referenced by Forwarder(), updateServerWeights(), and ~Forwarder().
Time Sirikata::Forwarder::mLastStatsTime [private] |
Referenced by reportStats().
Referenced by serverMessageReceived(), and setLocalForwarder().
Referenced by forward(), and Forwarder().
Referenced by addObjectConnection(), getObjectConnection(), and removeObjectConnection().
boost::recursive_mutex Sirikata::Forwarder::mODPRouterMapMutex [private] |
ODPRouterMap Sirikata::Forwarder::mODPRouters [private] |
Router<Message*>* Sirikata::Forwarder::mOSegCacheUpdateRouter [private] |
Referenced by Forwarder(), routeObjectMessageToServer(), and ~Forwarder().
OSegLookupQueue* Sirikata::Forwarder::mOSegLookups [private] |
Referenced by forward(), initialize(), tryCacheForward(), and ~Forwarder().
Referenced by processReceivedServerMessages(), and serverMessageReceived().
boost::mutex Sirikata::Forwarder::mReceivedMessagesMutex [private] |
Referenced by processReceivedServerMessages(), and serverMessageReceived().
Referenced by forwarderServiceMessageReady(), initialize(), receiveWeightUpdateMessage(), and updateServerWeights().
Referenced by initialize(), receiveWeightUpdateMessage(), and updateServerWeights().
ServiceMap Sirikata::Forwarder::mServiceIDMap [private] |
Referenced by addODPServerMessageService(), createODPFlowScheduler(), and createServerMessageService().
Referenced by addODPServerMessageService(), and createServerMessageService().
Referenced by setODPService().
const String Sirikata::Forwarder::mTimeSeriesDroppedPerSecondName [private] |
Referenced by reportStats().
const String Sirikata::Forwarder::mTimeSeriesForwardedPerSecondName [private] |
Referenced by reportStats().
Poller Sirikata::Forwarder::mTimeSeriesPoller [private] |
uint64 Sirikata::Forwarder::mUniqueConnIDs [private] |
Referenced by addObjectConnection().