コード例 #1
0
query_object_client::socket_data*
query_object_client::get_socket(const std::string& objectkey) {
  boost::lock_guard<boost::mutex> guard(lock);
  std::map<std::string, socket_data*>::iterator iter = sockets.find(objectkey);
  if (iter != sockets.end()) return iter->second;
  else {
    // create a socket
    socket_data* newsock = new socket_data;
    newsock->creation_time = time(NULL);
    newsock->key = objectkey;
    newsock->randid = ((uint64_t)(rand()) << 32) + rand();
    std::string masterkey = get_zk_objectkey_name(objectkey, 0);
    std::vector<std::string> slavekeys;
    for (size_t i = 1; i <= replica_count; ++i) {
      slavekeys.push_back(get_zk_objectkey_name(objectkey, i));
    }

    newsock->sock = new async_request_socket(z_ctx,
                                             zk_keyval,
                                             masterkey,
                                             slavekeys);

    newsock->sock->add_to_pollset(&pollset);

    sockets[objectkey] = newsock;
    return newsock;
  }
}
コード例 #2
0
bool replica_election(graphlab::zookeeper_util::key_value* zk_keyval,
                     std::string objectkey,
                     size_t replicaid) {
  // the actual election process. Simply try to insert the object
  std::cout << "Joining replica election: " << objectkey << ":" << replicaid << "\n";
  // If we fail to insert. we lose the election
  return zk_keyval->insert(get_zk_objectkey_name(objectkey, replicaid), "");
}