/* * Update repository information and return thre repoId, otherwise empty * string. */ void updateRepo(const string &path) { RepoControl repo = RepoControl(path); RepoInfo info; try { repo.open(); } catch (SystemException &e) { WARNING("Failed to open repository %s: %s", path.c_str(), e.what()); return; } RWKey::sp key = infoLock.writeLock(); if (myInfo.hasRepo(repo.getUUID())) { info = myInfo.getRepo(repo.getUUID()); } else { info = RepoInfo(repo.getUUID(), repo.getPath()); } info.updateHead(repo.getHead()); myInfo.updateRepo(repo.getUUID(), info); LOG("Checked %s: %s %s", path.c_str(), repo.getHead().c_str(), repo.getUUID().c_str()); repo.close(); return; }
void writer(int id) { rwLock.writeLock(); int i = rand() % buffer.size(); int data = rand(); buffer[i] = data; { lock_guard<mutex> lock(outputLock); cout << "writer " << id << " writes buffer[" << i << "] = " << data << endl; } rwLock.writeUnLock(); }
void updateHost(KVSerializer &kv, const string &srcIp) { RWKey::sp key = hostsLock.writeLock(); map<string, HostInfo *>::iterator it; string hostId = kv.getStr("hostId"); // Update it = hosts.find(hostId); if (it == hosts.end()) { hosts[hostId] = new HostInfo(hostId, kv.getStr("cluster")); } hosts[hostId]->update(kv); hosts[hostId]->setPreferredIp(srcIp); }