Ice::StringSeq NodeSessionI::getServers(const Ice::Current&) const { ServerEntrySeq servers = _database->getNode(_info->name)->getServers(); Ice::StringSeq names; for(ServerEntrySeq::const_iterator p = servers.begin(); p != servers.end(); ++p) { names.push_back((*p)->getId()); } return names; }
ServerEntrySeq NodeEntry::getServers() const { Lock sync(*this); ServerEntrySeq entries; for(map<string, ServerEntryPtr>::const_iterator p = _servers.begin(); p != _servers.end(); ++p) { entries.push_back(p->second); } return entries; }
void NodeSessionI::loadServers_async(const AMD_NodeSession_loadServersPtr& amdCB, const Ice::Current& current) const { // // No need to wait for the servers to be loaded. If we were // waiting, we would have to figure out an appropriate timeout for // calling this method since each load() call might take time to // complete. // amdCB->ice_response(); // // Get the server proxies to load them on the node. // ServerEntrySeq servers = _database->getNode(_info->name)->getServers(); for_each(servers.begin(), servers.end(), IceUtil::voidMemFun(&ServerEntry::sync)); }
void NodeSessionI::loadServers_async(const AMD_NodeSession_loadServersPtr& amdCB, const Ice::Current&) const { // // No need to wait for the servers to be loaded. If we were // waiting, we would have to figure out an appropriate timeout for // calling this method since each load() call might take time to // complete. // amdCB->ice_response(); // // Get the server proxies to load them on the node. // ServerEntrySeq servers = _database->getNode(_info->name)->getServers(); for(ServerEntrySeq::const_iterator p = servers.begin(); p != servers.end(); ++p) { (*p)->sync(); (*p)->waitForSyncNoThrow(1); // Don't wait too long. } }
void NodeSessionI::destroyImpl(bool shutdown) { { Lock sync(*this); if(_destroy) { throw Ice::ObjectNotExistException(__FILE__, __LINE__); } _destroy = true; } ServerEntrySeq servers = _database->getNode(_info->name)->getServers(); for_each(servers.begin(), servers.end(), IceUtil::voidMemFun(&ServerEntry::unsync)); // // If the registry isn't being shutdown we remove the node // internal proxy from the database. // if(!shutdown) { _database->removeInternalObject(_node->ice_getIdentity()); } // // Next we notify the observer. // NodeObserverTopicPtr::dynamicCast(_database->getObserverTopic(NodeObserverTopicName))->nodeDown(_info->name); // // Unsubscribe the node replica observer. // if(_replicaObserver) { _database->getReplicaCache().unsubscribe(_replicaObserver); _replicaObserver = 0; } // // Finally, we clear the session, this must be done last. As soon // as the node entry session is set to 0 another session might be // created. // _database->getNode(_info->name)->setSession(0); // // Clean up the patcher feedback servants (this will call back // removeFeedback so we need to use a temporary set). // set<PatcherFeedbackPtr> feedbacks; _feedbacks.swap(feedbacks); for(set<PatcherFeedbackPtr>::const_iterator p = feedbacks.begin(); p != feedbacks.end(); ++p) { (*p)->failed("node is down"); } if(!shutdown) { try { _database->getInternalAdapter()->remove(_proxy->ice_getIdentity()); } catch(const Ice::ObjectAdapterDeactivatedException&) { } } }