ErrorCode WdtResourceController::createReceiver( const std::string& wdtNamespace, const WdtTransferRequest& wdtOperationRequest, ReceiverPtr& receiver) { NamespaceControllerPtr controller = nullptr; receiver = nullptr; { GuardLock lock(controllerMutex_); controller = getNamespaceController(wdtNamespace); if (!controller) { LOG(WARNING) << "Couldn't find controller for " << wdtNamespace; return NOT_FOUND; } if (numReceivers_ >= maxNumReceivers_ && maxNumReceivers_ > 0) { LOG(ERROR) << "Exceeded quota on max receivers. " << "Max num senders " << maxNumReceivers_; return QUOTA_EXCEEDED; } ++numReceivers_; } ErrorCode code = controller->createReceiver(wdtOperationRequest, receiver); if (!receiver) { GuardLock lock(controllerMutex_); --numReceivers_; LOG(ERROR) << "Failed in creating receiver for " << wdtNamespace; } else { LOG(INFO) << "Successfully added a receiver for " << wdtNamespace; } return code; }
void WdtResourceController::updateMaxSendersLimit( const std::string& wdtNamespace, int64_t maxNumSenders) { auto controller = getNamespaceController(wdtNamespace, true); if (controller) { controller->updateMaxSendersLimit(maxNumSenders); } }
ReceiverPtr WdtResourceController::addReceiver( const std::string& wdtNamespace, const WdtTransferRequest& wdtOperationRequest) { NamespaceControllerPtr controller = nullptr; { GuardLock lock(controllerMutex_); controller = getNamespaceController(wdtNamespace); if (!controller) { LOG(WARNING) << "Couldn't find controller for " << wdtNamespace; return nullptr; } if (numReceivers_ >= maxNumReceivers_ && maxNumReceivers_ > 0) { LOG(ERROR) << "Exceeded quota on max receivers. " << "Max num senders " << maxNumReceivers_; return nullptr; } ++numReceivers_; } auto receiver = controller->addReceiver(wdtOperationRequest); if (!receiver) { GuardLock lock(controllerMutex_); --numReceivers_; LOG(ERROR) << "Failed in creating receiver for " << wdtNamespace; } else { LOG(INFO) << "Successfully added a receiver for " << wdtNamespace; } return receiver; }
ReceiverPtr WdtResourceController::getReceiver(const string& wdtNamespace, const string& transferId) const { NamespaceControllerPtr controller = nullptr; controller = getNamespaceController(wdtNamespace, true); if (!controller) { LOG(ERROR) << "Couldn't find the controller for " << wdtNamespace; return nullptr; } return controller->getReceiver(transferId); }
vector<ReceiverPtr> WdtResourceController::getAllReceivers( const string &wdtNamespace) const { NamespaceControllerPtr controller = nullptr; controller = getNamespaceController(wdtNamespace, true); if (!controller) { LOG(ERROR) << "Couldn't find the controller for " << wdtNamespace; return vector<ReceiverPtr>(); } return controller->getReceivers(); }
SenderPtr WdtResourceController::getSender(const string &wdtNamespace, const string &identifier) const { NamespaceControllerPtr controller = nullptr; controller = getNamespaceController(wdtNamespace, true); if (!controller) { LOG(ERROR) << "Couldn't find the controller for " << wdtNamespace; return nullptr; } return controller->getSender(identifier); }
ErrorCode WdtResourceController::registerWdtNamespace( const std::string& wdtNamespace) { GuardLock lock(controllerMutex_); if (getNamespaceController(wdtNamespace)) { LOG(INFO) << "Found existing controller for " << wdtNamespace; return OK; } namespaceMap_[wdtNamespace] = make_shared<WdtNamespaceController>(wdtNamespace); return OK; }
ErrorCode WdtResourceController::releaseStaleReceivers( const string &wdtNamespace, vector<string> &erasedIds) { NamespaceControllerPtr controller = nullptr; controller = getNamespaceController(wdtNamespace, true); if (!controller) { LOG(ERROR) << "Couldn't find the controller for " << wdtNamespace; return NOT_FOUND; } erasedIds = controller->releaseStaleReceivers(); if (erasedIds.size() > 0) { GuardLock lock(controllerMutex_); numReceivers_ -= erasedIds.size(); } return OK; }
ErrorCode WdtResourceController::releaseAllReceivers( const std::string& wdtNamespace) { NamespaceControllerPtr controller = nullptr; { controller = getNamespaceController(wdtNamespace, true); if (!controller) { LOG(WARNING) << "Couldn't find controller for " << wdtNamespace; return ERROR; } } int64_t numReceivers = controller->releaseAllReceivers(); if (numReceivers > 0) { GuardLock lock(controllerMutex_); numReceivers_ -= numReceivers; } return OK; }
ErrorCode WdtResourceController::releaseSender(const std::string& wdtNamespace, const std::string& transferId) { NamespaceControllerPtr controller = nullptr; { controller = getNamespaceController(wdtNamespace, true); if (!controller) { LOG(WARNING) << "Couldn't find controller for " << wdtNamespace; return ERROR; } } if (controller->releaseSender(transferId) == OK) { GuardLock lock(controllerMutex_); --numSenders_; return OK; } LOG(ERROR) << "Couldn't release sender " << transferId << " for " << wdtNamespace; return ERROR; }
ErrorCode WdtResourceController::releaseReceiver( const std::string &wdtNamespace, const std::string &identifier) { NamespaceControllerPtr controller = nullptr; { controller = getNamespaceController(wdtNamespace, true); if (!controller) { LOG(WARNING) << "Couldn't find controller for " << wdtNamespace; return ERROR; } } if (controller->releaseReceiver(identifier) == OK) { GuardLock lock(controllerMutex_); --numReceivers_; return OK; } LOG(ERROR) << "Couldn't release receiver " << identifier << " for " << wdtNamespace; return ERROR; }