Beispiel #1
0
void ListPolicy::init(const Host::Ptr& connected_host,
                      const HostMap& hosts,
                      Random* random) {
  HostMap valid_hosts;
  for (HostMap::const_iterator i = hosts.begin(),
    end = hosts.end(); i != end; ++i) {
    const Host::Ptr& host = i->second;
    if (is_valid_host(host)) {
      valid_hosts.insert(HostPair(i->first, host));
    }
  }

  if (valid_hosts.empty()) {
    LOG_ERROR("No valid hosts available for list policy");
  }

  ChainedLoadBalancingPolicy::init(connected_host, valid_hosts, random);
}
Beispiel #2
0
static int url_parse_host(const char **url,
                          size_t *data_out_ptr,
                          size_t out_limit,
                          avs_url_t *parsed_url) {
    parsed_url->host_ptr = *data_out_ptr;
    if (**url == '[') {
        ++*url;
        while (*data_out_ptr < out_limit && **url != '\0' && **url != ']') {
            parsed_url->data[(*data_out_ptr)++] = *(*url)++;
        }
        assert(**url == '\0' || **url == ']');
        if (*(*url)++ != ']') {
            LOG(ERROR, "expected ] at the end of host address");
            return -1;
        }
    } else {
        while (*data_out_ptr < out_limit
                && **url != '\0'
                && **url != '/'
                && **url != '?'
                && **url != ':') {
            parsed_url->data[(*data_out_ptr)++] = *(*url)++;
        }
        assert(**url == '\0' || **url == '/' || **url == '?' || **url == ':');
    }
    if (*data_out_ptr == parsed_url->host_ptr) {
        LOG(ERROR, "host part cannot be empty");
        return -1;
    }
    parsed_url->data[(*data_out_ptr)++] = '\0';

    if (!is_valid_host(&parsed_url->data[parsed_url->host_ptr])) {
        return -1;
    }
    return 0;
}
Beispiel #3
0
void ListPolicy::on_down(const Host::Ptr& host) {
  if (is_valid_host(host)) {
    child_policy_->on_down(host);
  }
}
Beispiel #4
0
CassHostDistance ListPolicy::distance(const Host::Ptr& host) const {
  if (is_valid_host(host)) {
    return child_policy_->distance(host);
  }
  return CASS_HOST_DISTANCE_IGNORE;
}