Sirikata
|
AggregatedTransferPool manages multiple requests for the same resource. More...
#include <AggregatedTransferPool.hpp>
Classes | |
struct | RequestData |
Public Member Functions | |
virtual | ~AggregatedTransferPool () |
virtual void | addRequest (TransferRequestPtr req) |
Puts a request into the pool. | |
virtual void | updatePriority (TransferRequestPtr req, Priority p) |
Updates priority of a request in the pool. | |
void | deleteRequest (TransferRequestPtr req) |
Updates priority of a request in the pool. | |
Private Types | |
typedef std::vector < TransferRequestPtr > | TransferRequestList |
typedef std::tr1::unordered_map < String, RequestData > | RequestDataMap |
Private Member Functions | |
AggregatedTransferPool (const std::string &clientID) | |
std::tr1::shared_ptr < TransferRequest > | getRequest () |
void | handleMetadata (const String input_identifier, MetadataRequestPtr req, RemoteFileMetadataPtr response) |
void | handleChunk (const String input_identifier, ChunkRequestPtr req, DenseDataPtr response) |
void | handleDirectChunk (const String input_identifier, DirectChunkRequestPtr req, DenseDataPtr response) |
void | handleUpload (const String input_identifier, UploadRequestPtr req, const Transfer::URI &response) |
Private Attributes | |
PriorityAggregationAlgorithm * | mAggregationAlgorithm |
boost::mutex | mMutex |
RequestDataMap | mRequestData |
ThreadSafeQueue < TransferRequestPtr > | mDeltaQueue |
Friends | |
class | TransferMediator |
AggregatedTransferPool manages multiple requests for the same resource.
It only submits a single request to the Transfermediator, but aggregates priorities for the requests according to a user-provided function. When a resource is returned by the TransferMediator, it triggers all callbacks for the requested data.
typedef std::tr1::unordered_map<String, RequestData> Sirikata::Transfer::AggregatedTransferPool::RequestDataMap [private] |
typedef std::vector<TransferRequestPtr> Sirikata::Transfer::AggregatedTransferPool::TransferRequestList [private] |
virtual Sirikata::Transfer::AggregatedTransferPool::~AggregatedTransferPool | ( | ) | [inline, virtual] |
Sirikata::Transfer::AggregatedTransferPool::AggregatedTransferPool | ( | const std::string & | clientID | ) | [inline, private] |
References mAggregationAlgorithm.
virtual void Sirikata::Transfer::AggregatedTransferPool::addRequest | ( | TransferRequestPtr | req | ) | [inline, virtual] |
Puts a request into the pool.
Implements Sirikata::Transfer::TransferPool.
References Sirikata::Transfer::PriorityAggregationAlgorithm::aggregate(), Sirikata::Transfer::AggregatedTransferPool::RequestData::aggregateRequest, Sirikata::Logging::error, handleChunk(), handleDirectChunk(), handleMetadata(), handleUpload(), Sirikata::Transfer::AggregatedTransferPool::RequestData::inputRequests, mAggregationAlgorithm, mDeltaQueue, mMutex, mRequestData, Sirikata::ThreadSafeQueue< T >::push(), Sirikata::Transfer::TransferPool::setRequestClientID(), Sirikata::Transfer::TransferPool::setRequestPriority(), and SILOG.
void Sirikata::Transfer::AggregatedTransferPool::deleteRequest | ( | TransferRequestPtr | req | ) | [inline, virtual] |
Updates priority of a request in the pool.
Implements Sirikata::Transfer::TransferPool.
References Sirikata::Transfer::PriorityAggregationAlgorithm::aggregate(), mAggregationAlgorithm, mDeltaQueue, mMutex, mRequestData, Sirikata::ThreadSafeQueue< T >::push(), Sirikata::Transfer::TransferPool::setRequestDeletion(), and Sirikata::Transfer::TransferPool::setRequestPriority().
std::tr1::shared_ptr<TransferRequest> Sirikata::Transfer::AggregatedTransferPool::getRequest | ( | ) | [inline, private, virtual] |
Implements Sirikata::Transfer::TransferPool.
References Sirikata::ThreadSafeQueue< T >::blockingPop(), and mDeltaQueue.
void Sirikata::Transfer::AggregatedTransferPool::handleChunk | ( | const String | input_identifier, |
ChunkRequestPtr | req, | ||
DenseDataPtr | response | ||
) | [inline, private] |
References mMutex, mRequestData, and Sirikata::Transfer::ChunkRequest::notifyCaller().
Referenced by addRequest().
void Sirikata::Transfer::AggregatedTransferPool::handleDirectChunk | ( | const String | input_identifier, |
DirectChunkRequestPtr | req, | ||
DenseDataPtr | response | ||
) | [inline, private] |
References mMutex, mRequestData, and Sirikata::Transfer::DirectChunkRequest::notifyCaller().
Referenced by addRequest().
void Sirikata::Transfer::AggregatedTransferPool::handleMetadata | ( | const String | input_identifier, |
MetadataRequestPtr | req, | ||
RemoteFileMetadataPtr | response | ||
) | [inline, private] |
References mMutex, mRequestData, and Sirikata::Transfer::MetadataRequest::notifyCaller().
Referenced by addRequest().
void Sirikata::Transfer::AggregatedTransferPool::handleUpload | ( | const String | input_identifier, |
UploadRequestPtr | req, | ||
const Transfer::URI & | response | ||
) | [inline, private] |
References mMutex, mRequestData, and Sirikata::Transfer::UploadRequest::notifyCaller().
Referenced by addRequest().
virtual void Sirikata::Transfer::AggregatedTransferPool::updatePriority | ( | TransferRequestPtr | req, |
Priority | p | ||
) | [inline, virtual] |
Updates priority of a request in the pool.
Implements Sirikata::Transfer::TransferPool.
References Sirikata::Transfer::PriorityAggregationAlgorithm::aggregate(), mAggregationAlgorithm, mDeltaQueue, mMutex, mRequestData, Sirikata::ThreadSafeQueue< T >::push(), and Sirikata::Transfer::TransferPool::setRequestPriority().
friend class TransferMediator [friend] |
Reimplemented from Sirikata::Transfer::TransferPool.
PriorityAggregationAlgorithm* Sirikata::Transfer::AggregatedTransferPool::mAggregationAlgorithm [private] |
Referenced by addRequest(), AggregatedTransferPool(), deleteRequest(), and updatePriority().
ThreadSafeQueue<TransferRequestPtr> Sirikata::Transfer::AggregatedTransferPool::mDeltaQueue [private] |
Referenced by addRequest(), deleteRequest(), getRequest(), updatePriority(), and ~AggregatedTransferPool().
boost::mutex Sirikata::Transfer::AggregatedTransferPool::mMutex [private] |
Referenced by addRequest(), deleteRequest(), handleChunk(), handleDirectChunk(), handleMetadata(), handleUpload(), updatePriority(), and ~AggregatedTransferPool().
Referenced by addRequest(), deleteRequest(), handleChunk(), handleDirectChunk(), handleMetadata(), handleUpload(), updatePriority(), and ~AggregatedTransferPool().