std::map<string, string> client::getPropertyMap(const Ice::PropertiesPtr& properties) const { Ice::PropertiesPtr props; if (!properties) { props = getProperties(); } else { props = properties; } std::map<string, string> pm; Ice::PropertyDict omeroProperties = props->getPropertiesForPrefix("omero"); Ice::PropertyDict::const_iterator beg = omeroProperties.begin(); Ice::PropertyDict::const_iterator end = omeroProperties.end(); while (beg != end) { pm[(*beg).first] = (*beg).second; beg++; } Ice::PropertyDict iceProperties = props->getPropertiesForPrefix("Ice"); beg = iceProperties.begin(); end = iceProperties.end(); while (beg != end) { pm[(*beg).first] = (*beg).second; beg++; } return pm; }
void IcePy::UpdateCallbackWrapper::updated(const Ice::PropertyDict& dict) { AdoptThread adoptThread; // Ensure the current thread is able to call into Python. PyObjectHandle result = PyDict_New(); if(result.get()) { for(Ice::PropertyDict::const_iterator p = dict.begin(); p != dict.end(); ++p) { PyObjectHandle key = createString(p->first); PyObjectHandle val = createString(p->second); if(!val.get() || PyDict_SetItem(result.get(), key.get(), val.get()) < 0) { return; } } } PyObjectHandle obj = PyObject_CallMethod(_callback, STRCAST("updated"), STRCAST("O"), result.get()); if(!obj.get()) { assert(PyErr_Occurred()); throw AbortMarshaling(); } }
static PyObject* propertiesStr(PropertiesObject* self) { assert(self->properties); Ice::PropertyDict dict; try { dict = (*self->properties)->getPropertiesForPrefix(""); } catch(const Ice::Exception& ex) { setPythonException(ex); return 0; } string str; for(Ice::PropertyDict::const_iterator p = dict.begin(); p != dict.end(); ++p) { if(p != dict.begin()) { str.append("\n"); } str.append(p->first + "=" + p->second); } return createString(str); }
NodeI::NodeI(const Ice::ObjectAdapterPtr& adapter, NodeSessionManager& sessions, const ActivatorPtr& activator, const IceUtil::TimerPtr& timer, const TraceLevelsPtr& traceLevels, const NodePrx& proxy, const string& name, const UserAccountMapperPrx& mapper, const string& instanceName) : _communicator(adapter->getCommunicator()), _adapter(adapter), _sessions(sessions), _activator(activator), _timer(timer), _traceLevels(traceLevels), _name(name), _proxy(proxy), _redirectErrToOut(false), _allowEndpointsOverride(false), _waitTime(0), _instanceName(instanceName), _userAccountMapper(mapper), _platform("IceGrid.Node", _communicator, _traceLevels), _fileCache(new FileCache(_communicator)), _serial(1), _consistencyCheckDone(false) { Ice::PropertiesPtr props = _communicator->getProperties(); const_cast<string&>(_dataDir) = _platform.getDataDir(); const_cast<string&>(_serversDir) = _dataDir + "/servers"; const_cast<string&>(_tmpDir) = _dataDir + "/tmp"; const_cast<Ice::Int&>(_waitTime) = props->getPropertyAsIntWithDefault("IceGrid.Node.WaitTime", 60); const_cast<string&>(_outputDir) = props->getProperty("IceGrid.Node.Output"); const_cast<bool&>(_redirectErrToOut) = props->getPropertyAsInt("IceGrid.Node.RedirectErrToOut") > 0; const_cast<bool&>(_allowEndpointsOverride) = props->getPropertyAsInt("IceGrid.Node.AllowEndpointsOverride") > 0; // // Parse the properties override property. // vector<string> overrides = props->getPropertyAsList("IceGrid.Node.PropertiesOverride"); if(!overrides.empty()) { for(vector<string>::iterator p = overrides.begin(); p != overrides.end(); ++p) { if(p->find("--") != 0) { *p = "--" + *p; } } Ice::PropertiesPtr p = Ice::createProperties(); p->parseCommandLineOptions("", overrides); Ice::PropertyDict propDict = p->getPropertiesForPrefix(""); for(Ice::PropertyDict::const_iterator q = propDict.begin(); q != propDict.end(); ++q) { _propertiesOverride.push_back(createProperty(q->first, q->second)); } } }
ZEND_METHOD(Ice_Properties, __toString) { if(ZEND_NUM_ARGS() > 0) { WRONG_PARAM_COUNT; } Ice::PropertiesPtr _this = Wrapper<Ice::PropertiesPtr>::value(getThis() TSRMLS_CC); assert(_this); try { Ice::PropertyDict val = _this->getPropertiesForPrefix(""); string str; for(Ice::PropertyDict::const_iterator p = val.begin(); p != val.end(); ++p) { if(p != val.begin()) { str.append("\n"); } str.append(p->first + "=" + p->second); } RETURN_STRINGL(STRCAST(str.c_str()), static_cast<int>(str.length()), 1); } catch(const IceUtil::Exception& ex) { throwException(ex TSRMLS_CC); RETURN_NULL(); } }
TrustManager::TrustManager(const Ice::CommunicatorPtr& communicator) : _communicator(communicator) { Ice::PropertiesPtr properties = communicator->getProperties(); _traceLevel = properties->getPropertyAsInt("IceSSL.Trace.Security"); string key; try { key = "IceSSL.TrustOnly"; _all = parse(properties->getProperty(key)); key = "IceSSL.TrustOnly.Client"; _client = parse(properties->getProperty(key)); key = "IceSSL.TrustOnly.Server"; _allServer = parse(properties->getProperty(key)); Ice::PropertyDict dict = properties->getPropertiesForPrefix("IceSSL.TrustOnly.Server."); for(Ice::PropertyDict::const_iterator p = dict.begin(); p != dict.end(); ++p) { string name = p->first.substr(string("IceSSL.TrustOnly.Server.").size()); key = p->first; _server[name] = parse(p->second); } } catch(const ParseException& e) { Ice::PluginInitializationException ex(__FILE__, __LINE__); ex.reason = "IceSSL: invalid property " + key + ":\n" + e.reason; throw ex; } }
orca::ComponentData getComponentData( const Context& context ) { orca::ComponentData compData; compData.name = context.name(); Ice::PropertyDict providesProps = context.properties()->getPropertiesForPrefix(context.tag()+".Provides"); orca::ProvidedInterface provided; for ( Ice::PropertyDict::iterator i=providesProps.begin(); i!=providesProps.end(); ++i ) { provided.name = i->second; provided.id = "unknown"; compData.provides.push_back( provided ); } // special cases: add standard interfaces (depending on startup flags) // first, add the Home interface itself // std::string homeIdentity = "orca." + context.name().platform + "." + context.name().component + "/Home"; // provided.name = homeIdentity; // provided.id = "::orca::Home"; // compData.provides.push_back( provided ); // // if ( interfaceFlag_& TracerInterface ) { // provided.name = "tracer"; // provided.id = "::orca::Tracer"; // compData.provides.push_back( provided ); // } // // if ( interfaceFlag_& StatusInterface ) { // provided.name = "status"; // provided.id = "::orca::Status"; // compData.provides.push_back( provided ); // } // NOTE: this will not work if the config file uses long notation for req. interfaces Ice::PropertyDict requiresProps = context.properties()->getPropertiesForPrefix(context.tag()+".Requires"); orca::RequiredInterface required; for ( Ice::PropertyDict::iterator i=requiresProps.begin(); i!=requiresProps.end(); ++i ) { required.name = orcaice::toInterfaceName( i->second ); required.id = "unknown"; compData.requires.push_back( required ); } return compData; }
int Controller::load_camera_config(Ice::PropertyDict pd, int cam) { for(Ice::PropertyDict::const_iterator it = pd.begin(); it != pd.end(); it++) { std::istringstream sTemp; if((*it).first.compare("rgbdManualCalibrator.Config.Position.X")==0) { this->cameras[cam].position.X=(float)atof((*it).second.c_str()); this->lastx = this->cameras[cam].position.X; } else if((*it).first.compare("rgbdManualCalibrator.Config.Position.Y")==0) { this->cameras[cam].position.Y=(float)atof((*it).second.c_str()); this->lasty = this->cameras[cam].position.Y; } else if((*it).first.compare("rgbdManualCalibrator.Config.Position.Z")==0) { this->cameras[cam].position.Z=(float)atof((*it).second.c_str()); this->lastz = this->cameras[cam].position.Z; } else if((*it).first.compare("rgbdManualCalibrator.Config.Position.H")==0) { this->cameras[cam].position.H=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.FOAPosition.X")==0) { this->cameras[cam].foa.X=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.FOAPosition.Y")==0) { this->cameras[cam].foa.Y=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.FOAPosition.Z")==0) { this->cameras[cam].foa.Z=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.FOAPosition.H")==0) { this->cameras[cam].foa.H=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.Roll")==0) { this->cameras[cam].roll=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.Fx")==0) { this->cameras[cam].fdistx=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.Fy")==0) { this->cameras[cam].fdisty=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.Skew")==0) { this->cameras[cam].skew=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.U0")==0) { this->cameras[cam].u0=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.V0")==0) { this->cameras[cam].v0=(float)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.Columns")==0) { this->cameras[cam].columns=(int)atof((*it).second.c_str()); } else if((*it).first.compare("rgbdManualCalibrator.Config.Rows")==0) { this->cameras[cam].rows=(int)atof((*it).second.c_str()); } } }
void PropsClient::show(const Ice::PropertiesAdminPrx& admin) { Ice::PropertyDict props = admin->getPropertiesForPrefix("Demo"); cout << "Server's current settings:" << endl; for(Ice::PropertyDict::iterator p = props.begin(); p != props.end(); ++p) { cout << " " << p->first << "=" << p->second << endl; } }
static PyObject* communicatorProxyToProperty(CommunicatorObject* self, PyObject* args) { // // We don't want to accept None here, so we can specify ProxyType and force // the caller to supply a proxy object. // PyObject* proxyObj; PyObject* strObj; if(!PyArg_ParseTuple(args, STRCAST("O!O"), &ProxyType, &proxyObj, &strObj)) { return 0; } Ice::ObjectPrx proxy = getProxy(proxyObj); string str; if(!getStringArg(strObj, "property", str)) { return 0; } assert(self->communicator); Ice::PropertyDict dict; try { dict = (*self->communicator)->proxyToProperty(proxy, str); } catch(const Ice::Exception& ex) { setPythonException(ex); return 0; } PyObjectHandle result = PyDict_New(); if(result.get()) { for(Ice::PropertyDict::iterator p = dict.begin(); p != dict.end(); ++p) { PyObjectHandle key = createString(p->first); PyObjectHandle val = createString(p->second); if(!val.get() || PyDict_SetItem(result.get(), key.get(), val.get()) < 0) { return 0; } } } return result.release(); }
MurmurIce::MurmurIce() { count = 0; if (meta->mp.qsIceEndpoint.isEmpty()) return; Ice::PropertiesPtr ipp = Ice::createProperties(); ::Meta::mp.qsSettings->beginGroup("Ice"); foreach(const QString &v, ::Meta::mp.qsSettings->childKeys()) { ipp->setProperty(u8(v), u8(::Meta::mp.qsSettings->value(v).toString())); } ::Meta::mp.qsSettings->endGroup(); Ice::PropertyDict props = ippProperties->getPropertiesForPrefix(""); Ice::PropertyDict::iterator i; for (i=props.begin(); i != props.end(); ++i) { ipp->setProperty((*i).first, (*i).second); } ipp->setProperty("Ice.ImplicitContext", "Shared"); Ice::InitializationData idd; idd.properties = ipp; try { communicator = Ice::initialize(idd); if (! meta->mp.qsIceSecretWrite.isEmpty()) { ::Ice::ImplicitContextPtr impl = communicator->getImplicitContext(); if (impl) impl->put("secret", u8(meta->mp.qsIceSecretWrite)); } adapter = communicator->createObjectAdapterWithEndpoints("Murmur", qPrintable(meta->mp.qsIceEndpoint)); MetaPtr m = new MetaI; MetaPrx mprx = MetaPrx::uncheckedCast(adapter->add(m, communicator->stringToIdentity("Meta"))); adapter->addServantLocator(new ServerLocator(), "s"); iopServer = new ServerI; adapter->activate(); foreach(const Ice::EndpointPtr ep, mprx->ice_getEndpoints()) { qWarning("MurmurIce: Endpoint \"%s\" running", qPrintable(u8(ep->toString()))); } meta->connectListener(this); } catch (Ice::Exception &e) { qCritical("MurmurIce: Initialization failed: %s", qPrintable(u8(e.ice_name()))); } }
static PyObject* propertiesGetPropertiesForPrefix(PropertiesObject* self, PyObject* args) { PyObject* prefixObj; if(!PyArg_ParseTuple(args, STRCAST("O"), &prefixObj)) { return 0; } string prefix; if(!getStringArg(prefixObj, "prefix", prefix)) { return 0; } assert(self->properties); Ice::PropertyDict dict; try { dict = (*self->properties)->getPropertiesForPrefix(prefix); } catch(const Ice::Exception& ex) { setPythonException(ex); return 0; } PyObjectHandle result = PyDict_New(); if(result.get()) { for(Ice::PropertyDict::iterator p = dict.begin(); p != dict.end(); ++p) { PyObjectHandle key = createString(p->first); PyObjectHandle val = createString(p->second); if(!val.get() || PyDict_SetItem(result.get(), key.get(), val.get()) < 0) { return 0; } } } return result.release(); }
TrustManager::TrustManager(const Ice::CommunicatorPtr& communicator) : _communicator(communicator) { Ice::PropertiesPtr properties = communicator->getProperties(); _traceLevel = properties->getPropertyAsInt("IceSSL.Trace.Security"); string key; try { key = "IceSSL.TrustOnly"; parse(properties->getProperty(key), _rejectAll, _acceptAll); key = "IceSSL.TrustOnly.Client"; parse(properties->getProperty(key), _rejectClient, _acceptClient); key = "IceSSL.TrustOnly.Server"; parse(properties->getProperty(key), _rejectAllServer, _acceptAllServer); Ice::PropertyDict dict = properties->getPropertiesForPrefix("IceSSL.TrustOnly.Server."); for(Ice::PropertyDict::const_iterator p = dict.begin(); p != dict.end(); ++p) { string name = p->first.substr(string("IceSSL.TrustOnly.Server.").size()); key = p->first; list<DistinguishedName> reject, accept; parse(p->second, reject, accept); if(!reject.empty()) { _rejectServer[name] = reject; } if(!accept.empty()) { _acceptServer[name] = accept; } } } catch(const ParseException& e) { Ice::PluginInitializationException ex(__FILE__, __LINE__); ex.reason = "IceSSL: invalid property " + key + ":\n" + e.reason; throw ex; } }
int PropsClient::run(int argc, char* argv[]) { if(argc > 1) { cerr << appName() << ": too many arguments" << endl; return EXIT_FAILURE; } PropsPrx props = PropsPrx::checkedCast(communicator()->propertyToProxy("Props.Proxy")); if(!props) { cerr << argv[0] << ": invalid proxy" << endl; return EXIT_FAILURE; } Ice::PropertiesAdminPrx admin = Ice::PropertiesAdminPrx::checkedCast(communicator()->propertyToProxy("Admin.Proxy")); Ice::PropertyDict batch1; batch1["Demo.Prop1"] = "1"; batch1["Demo.Prop2"] = "2"; batch1["Demo.Prop3"] = "3"; Ice::PropertyDict batch2; batch2["Demo.Prop1"] = "10"; batch2["Demo.Prop2"] = ""; // An empty value removes this property batch2["Demo.Prop3"] = "30"; show(admin); menu(); char c = 'x'; do { try { cout << "==> "; cin >> c; if(c == '1' || c == '2') { Ice::PropertyDict dict = c == '1' ? batch1 : batch2; cout << "Sending:" << endl; for(Ice::PropertyDict::iterator p = dict.begin(); p != dict.end(); ++p) { if(p->first.find("Demo") == 0) { cout << " " << p->first << "=" << p->second << endl; } } cout << endl; admin->setProperties(dict); cout << "Changes:" << endl; Ice::PropertyDict changes = props->getChanges(); if(changes.empty()) { cout << " None." << endl; } else { for(Ice::PropertyDict::iterator p = changes.begin(); p != changes.end(); ++p) { cout << " " << p->first; if(p->second.empty()) { cout << " was removed" << endl; } else { cout << " is now " << p->second << endl; } } } } else if(c == 'c') { show(admin); } else if(c == 's') { props->shutdown(); } else if(c == 'x') { // Nothing to do } else if(c == '?') { menu(); } else { cout << "unknown command `" << c << "'" << endl; menu(); } } catch(const Ice::Exception& ex) { cerr << ex << endl; } } while(cin.good() && c != 'x'); return EXIT_SUCCESS; }
void ServiceI::start( const string& name, const CommunicatorPtr& communicator, const StringSeq& /*args*/) { PropertiesPtr properties = communicator->getProperties(); validateProperties(name, properties, communicator->getLogger()); int id = properties->getPropertyAsIntWithDefault(name + ".NodeId", -1); // If we are using a replicated deployment and if the topic // manager thread pool max size is not set then ensure it is set // to some suitably high number. This ensures no deadlocks in the // replicated case due to call forwarding from replicas to // coordinators. if(id != -1 && properties->getProperty(name + ".TopicManager.ThreadPool.SizeMax").empty()) { properties->setProperty(name + ".TopicManager.ThreadPool.SizeMax", "100"); } Ice::ObjectAdapterPtr topicAdapter = communicator->createObjectAdapter(name + ".TopicManager"); Ice::ObjectAdapterPtr publishAdapter = communicator->createObjectAdapter(name + ".Publish"); // // We use the name of the service for the name of the database environment. // string instanceName = properties->getPropertyWithDefault(name + ".InstanceName", "IceStorm"); Identity topicManagerId; topicManagerId.category = instanceName; topicManagerId.name = "TopicManager"; if(properties->getPropertyAsIntWithDefault(name+ ".Transient", 0) > 0) { _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter, 0); try { TransientTopicManagerImplPtr manager = new TransientTopicManagerImpl(_instance); _managerProxy = TopicManagerPrx::uncheckedCast(topicAdapter->add(manager, topicManagerId)); } catch(const Ice::Exception& ex) { _instance = 0; LoggerOutputBase s; s << "exception while starting IceStorm service " << name << ":\n"; s << ex; IceBox::FailureException e(__FILE__, __LINE__); e.reason = s.str(); throw e; } topicAdapter->activate(); publishAdapter->activate(); return; } if(id == -1) // No replication. { _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter); try { _manager = new TopicManagerImpl(_instance); _managerProxy = TopicManagerPrx::uncheckedCast(topicAdapter->add(_manager->getServant(), topicManagerId)); } catch(const Ice::Exception& ex) { _instance = 0; LoggerOutputBase s; s << "exception while starting IceStorm service " << name << ":\n"; s << ex; IceBox::FailureException e(__FILE__, __LINE__); e.reason = s.str(); throw e; } } else { // Here we want to create a map of id -> election node // proxies. map<int, NodePrx> nodes; string topicManagerAdapterId = properties->getProperty(name + ".TopicManager.AdapterId"); // We support two possible deployments. The first is a manual // deployment, the second is IceGrid. // // Here we check for the manual deployment const string prefix = name + ".Nodes."; Ice::PropertyDict props = properties->getPropertiesForPrefix(prefix); if(!props.empty()) { for(Ice::PropertyDict::const_iterator p = props.begin(); p != props.end(); ++p) { int nodeid = atoi(p->first.substr(prefix.size()).c_str()); nodes[nodeid] = NodePrx::uncheckedCast(communicator->propertyToProxy(p->first)); } } else { // If adapter id's are defined for the topic manager or // node adapters then we consider this an IceGrid based // deployment. string nodeAdapterId = properties->getProperty(name + ".Node.AdapterId"); // Validate first that the adapter ids match for the node // and the topic manager otherwise some other deployment // is being used. const string suffix = ".TopicManager"; if(topicManagerAdapterId.empty() || nodeAdapterId.empty() || topicManagerAdapterId.replace( topicManagerAdapterId.find(suffix), suffix.size(), ".Node") != nodeAdapterId) { Ice::Error error(communicator->getLogger()); error << "deployment error: `" << topicManagerAdapterId << "' prefix does not match `" << nodeAdapterId << "'"; throw IceBox::FailureException(__FILE__, __LINE__, "IceGrid deployment is incorrect"); } // Determine the set of node id and node proxies. // // This is determined by locating all topic manager // replicas, and then working out the node for that // replica. // // We work out the node id by removing the instance // name. The node id must follow. // IceGrid::LocatorPrx locator = IceGrid::LocatorPrx::checkedCast(communicator->getDefaultLocator()); assert(locator); IceGrid::QueryPrx query = locator->getLocalQuery(); Ice::ObjectProxySeq replicas = query->findAllReplicas( communicator->stringToProxy(instanceName + "/TopicManager")); for(Ice::ObjectProxySeq::const_iterator p = replicas.begin(); p != replicas.end(); ++p) { string adapterid = (*p)->ice_getAdapterId(); // Replace TopicManager with the node endpoint. adapterid = adapterid.replace(adapterid.find(suffix), suffix.size(), ".Node"); // The adapter id must start with the instance name. if(adapterid.find(instanceName) != 0) { Ice::Error error(communicator->getLogger()); error << "deployment error: `" << adapterid << "' does not start with `" << instanceName << "'"; throw IceBox::FailureException(__FILE__, __LINE__, "IceGrid deployment is incorrect"); } // The node id follows. We find the first digit (the // start of the node id, and then the end of the // digits). string::size_type start = instanceName.size(); while(start < adapterid.size() && !IceUtilInternal::isDigit(adapterid[start])) { ++start; } string::size_type end = start; while(end < adapterid.size() && IceUtilInternal::isDigit(adapterid[end])) { ++end; } if(start == end) { // We must have at least one digit, otherwise there is // some sort of deployment error. Ice::Error error(communicator->getLogger()); error << "deployment error: node id does not follow instance name. instance name:" << instanceName << " adapter id: " << adapterid; throw IceBox::FailureException(__FILE__, __LINE__, "IceGrid deployment is incorrect"); } int nodeid = atoi(adapterid.substr(start, end-start).c_str()); ostringstream os; os << "node" << nodeid; Ice::Identity id; id.category = instanceName; id.name = os.str(); nodes[nodeid] = NodePrx::uncheckedCast((*p)->ice_adapterId(adapterid)->ice_identity(id)); } } if(nodes.size() < 3) { Ice::Error error(communicator->getLogger()); error << "Replication requires at least 3 Nodes"; throw IceBox::FailureException(__FILE__, __LINE__, "Replication requires at least 3 Nodes"); } try { // If the node thread pool size is not set then initialize // to the number of nodes + 1 and disable thread pool size // warnings. if(properties->getProperty(name + ".Node.ThreadPool.Size").empty()) { ostringstream os; os << nodes.size() + 1; properties->setProperty(name + ".Node.ThreadPool.Size", os.str()); properties->setProperty(name + ".Node.ThreadPool.SizeWarn", "0"); } if(properties->getProperty(name + ".Node.MessageSizeMax").empty()) { properties->setProperty(name + ".Node.MessageSizeMax", "0"); // No limit on data exchanged internally } Ice::ObjectAdapterPtr nodeAdapter = communicator->createObjectAdapter(name + ".Node"); _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter, nodeAdapter, nodes[id]); _instance->observers()->setMajority(static_cast<unsigned int>(nodes.size())/2); // Trace replication information. TraceLevelsPtr traceLevels = _instance->traceLevels(); if(traceLevels->election > 0) { Ice::Trace out(traceLevels->logger, traceLevels->electionCat); out << "I am node " << id << "\n"; for(map<int, NodePrx>::const_iterator p = nodes.begin(); p != nodes.end(); ++p) { out << "\tnode: " << p->first << " proxy: " << p->second->ice_toString() << "\n"; } } if(topicManagerAdapterId.empty()) { // We're not using an IceGrid deployment. Here we need // a proxy which is used to create proxies to the // replicas later. _managerProxy = TopicManagerPrx::uncheckedCast(topicAdapter->createProxy(topicManagerId)); } else { // If we're using IceGrid deployment we need to create // indirect proxies. _managerProxy = TopicManagerPrx::uncheckedCast(topicAdapter->createIndirectProxy(topicManagerId)); } _manager = new TopicManagerImpl(_instance); topicAdapter->add(_manager->getServant(), topicManagerId); ostringstream os; // The node object identity. os << "node" << id; Ice::Identity nodeid; nodeid.category = instanceName; nodeid.name = os.str(); NodeIPtr node = new NodeI(_instance, _manager, _managerProxy, id, nodes); _instance->setNode(node); nodeAdapter->add(node, nodeid); nodeAdapter->activate(); node->start(); } catch(const Ice::Exception& ex) { _instance = 0; LoggerOutputBase s; s << "exception while starting IceStorm service " << name << ":\n"; s << ex; IceBox::FailureException e(__FILE__, __LINE__); e.reason = s.str(); throw e; } } topicAdapter->add(new FinderI(TopicManagerPrx::uncheckedCast(topicAdapter->createProxy(topicManagerId))), communicator->stringToIdentity("IceStorm/Finder")); topicAdapter->activate(); publishAdapter->activate(); }
PlatformInfo::PlatformInfo(const string& prefix, const Ice::CommunicatorPtr& communicator, const TraceLevelsPtr& traceLevels) : _traceLevels(traceLevels) { // // Initialization of the necessary data structures to get the load average. // #if defined(_WIN32) _terminated = false; _usages1.insert(_usages1.end(), 1 * 60 / 5, 0); // 1 sample every 5 seconds during 1 minutes. _usages5.insert(_usages5.end(), 5 * 60 / 5, 0); // 1 sample every 5 seconds during 5 minutes. _usages15.insert(_usages15.end(), 15 * 60 / 5, 0); // 1 sample every 5 seconds during 15 minutes. _last1Total = 0; _last5Total = 0; _last15Total = 0; #elif defined(_AIX) struct nlist nl; nl.n_name = "avenrun"; nl.n_value = 0; if(knlist(&nl, 1, sizeof(nl)) == 0) { _kmem = open("/dev/kmem", O_RDONLY); // // Give up root permissions to minimize security risks, it's // only needed to access /dev/kmem. // setuid(getuid()); setgid(getgid()); } else { _kmem = -1; } #endif // // Get the number of cores/threads. E.g. a quad-core CPU with 2 threads per core will return 8. // #if defined(_WIN32) SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); _nProcessorThreads = sysInfo.dwNumberOfProcessors; #elif defined(__FreeBSD__) static int ncpu[2] = { CTL_HW, HW_NCPU }; size_t sz = sizeof(_nProcessorThreads); if(sysctl(ncpu, 2, &_nProcessorThreads, &sz, 0, 0) == -1) { Ice::SyscallException ex(__FILE__, __LINE__); ex.error = IceInternal::getSystemErrno(); throw ex; } #else _nProcessorThreads = static_cast<int>(sysconf(_SC_NPROCESSORS_ONLN)); #endif // // Get the rest of the node information. // #ifdef _WIN32 _os = "Windows"; char hostname[MAX_COMPUTERNAME_LENGTH + 1]; unsigned long size = sizeof(hostname); if(GetComputerName(hostname, &size)) { _hostname = hostname; } OSVERSIONINFO osInfo; osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osInfo); ostringstream os; os << osInfo.dwMajorVersion << "." << osInfo.dwMinorVersion; _release = os.str(); _version = osInfo.szCSDVersion; switch(sysInfo.wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_AMD64: _machine = "x64"; break; case PROCESSOR_ARCHITECTURE_IA64: _machine = "IA64"; break; case PROCESSOR_ARCHITECTURE_INTEL: _machine = "x86"; break; default: _machine = "unknown"; break; }; #else struct utsname utsinfo; uname(&utsinfo); _os = utsinfo.sysname; _hostname = utsinfo.nodename; _release = utsinfo.release; _version = utsinfo.version; _machine = utsinfo.machine; #endif Ice::PropertiesPtr properties = communicator->getProperties(); // // Try to obtain the number of processor sockets. // _nProcessorSockets = properties->getPropertyAsIntWithDefault("IceGrid.Node.ProcessorSocketCount", 0); if(_nProcessorSockets == 0) { #if defined(_WIN32) _nProcessorSockets = getSocketCount(_traceLevels->logger); #elif defined(__linux) IceUtilInternal::ifstream is(string("/proc/cpuinfo")); set<string> ids; int nprocessor = 0; while(is) { string line; getline(is, line); if(line.find("processor") == 0) { nprocessor++; } else if(line.find("physical id") == 0) { nprocessor--; ids.insert(line); } } _nProcessorSockets = nprocessor + ids.size(); #else // Not supported _nProcessorSockets = 1; #endif } string endpointsPrefix; if(prefix == "IceGrid.Registry") { _name = properties->getPropertyWithDefault("IceGrid.Registry.ReplicaName", "Master"); endpointsPrefix = prefix + ".Client"; } else { _name = properties->getProperty(prefix + ".Name"); endpointsPrefix = prefix; } Ice::PropertyDict props = properties->getPropertiesForPrefix(endpointsPrefix); Ice::PropertyDict::const_iterator p = props.find(endpointsPrefix + ".PublishedEndpoints"); if(p != props.end()) { _endpoints = p->second; } else { _endpoints = properties->getProperty(endpointsPrefix + ".Endpoints"); } string cwd; if(IceUtilInternal::getcwd(cwd) != 0) { throw "cannot get the current directory:\n" + IceUtilInternal::lastErrorToString(); } _cwd = string(cwd); _dataDir = properties->getProperty(prefix + ".Data"); if(!IceUtilInternal::isAbsolutePath(_dataDir)) { _dataDir = _cwd + '/' + _dataDir; } if(_dataDir[_dataDir.length() - 1] == '/') { _dataDir = _dataDir.substr(0, _dataDir.length() - 1); } }