コード例 #1
0
ファイル: RouteHandleMap.cpp プロジェクト: DavadDi/mcrouter
RouteHandleMap::RouteHandleMap(
  const RouteSelectorMap& routeSelectors,
  const RoutingPrefix& defaultRoute,
  bool sendInvalidRouteToDefault)
    : defaultRoute_(defaultRoute),
      sendInvalidRouteToDefault_(sendInvalidRouteToDefault) {

  checkLogic(routeSelectors.find(defaultRoute_) != routeSelectors.end(),
             "invalid default route: {}", defaultRoute_.str());

  RouteSelectorVector allRoutes;
  std::unordered_map<std::string, RouteSelectorVector> byRegion;
  std::unordered_map<std::string, RouteSelectorVector> byRoute;
  // add defaults first
  for (const auto& it : routeSelectors) {
    RoutingPrefix prefix(it.first);
    if (prefix.str() == defaultRoute_.str()) {
      allRoutes.push_back(it.second);
    }

    if (prefix.getRegion() == defaultRoute_.getRegion()) {
      byRegion[prefix.getRegion().str()].push_back(it.second);
    }
  }

  // then add rest
  for (const auto& it : routeSelectors) {
    RoutingPrefix prefix(it.first);
    if (prefix.str() != defaultRoute_.str()) {
      allRoutes.push_back(it.second);
    }

    if (prefix.getRegion() != defaultRoute_.getRegion()) {
      byRegion[prefix.getRegion().str()].push_back(it.second);
    }

    byRoute[it.first].push_back(it.second);
  }

  // create corresponding RoutePolicyMaps
  UniqueVectorMap uniqueVectors;
  allRoutes_ = makePolicyMap(uniqueVectors, allRoutes);
  for (const auto& it : byRegion) {
    byRegion_.emplace(it.first, makePolicyMap(uniqueVectors, it.second));
  }
  for (const auto& it : byRoute) {
    byRoute_.emplace(it.first, makePolicyMap(uniqueVectors, it.second));
  }

  assert(byRoute_.find(defaultRoute_) != byRoute_.end());
  defaultRouteMap_ = byRoute_[defaultRoute_];
}
コード例 #2
0
ファイル: PolicyBucket.cpp プロジェクト: pohly/cynara
PolicyBucket::PolicyBucket(const PolicyBucketId &id, const PolicyResult &defaultPolicy,
                           const PolicyCollection &policies)
    : m_policyCollection(makePolicyMap(policies)), m_defaultPolicy(defaultPolicy), m_id(id) {
    idValidator(id);
}
コード例 #3
0
ファイル: PolicyBucket.cpp プロジェクト: pohly/cynara
PolicyBucket::PolicyBucket(const PolicyBucketId &id, const PolicyCollection &policies)
    : m_policyCollection(makePolicyMap(policies)), m_defaultPolicy(PredefinedPolicyType::DENY),
      m_id(id) {
    idValidator(id);
}