예제 #1
0
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;
}
예제 #2
0
void WdtResourceController::updateMaxSendersLimit(
    const std::string& wdtNamespace, int64_t maxNumSenders) {
  auto controller = getNamespaceController(wdtNamespace, true);
  if (controller) {
    controller->updateMaxSendersLimit(maxNumSenders);
  }
}
예제 #3
0
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;
}
예제 #4
0
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);
}
예제 #5
0
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();
}
예제 #6
0
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);
}
예제 #7
0
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;
}
예제 #8
0
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;
}
예제 #9
0
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;
}
예제 #10
0
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;
}
예제 #11
0
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;
}