diff --git a/.vscode/settings.json b/.vscode/settings.json index 64701d2ae81..a072134dc06 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,6 +14,7 @@ "Browsable", "istr", "ostr", + "soversion", "unregisters", "Upcall" ], diff --git a/cpp/config/templates.xml b/cpp/config/templates.xml index c8429610f19..de6128a65d2 100644 --- a/cpp/config/templates.xml +++ b/cpp/config/templates.xml @@ -27,7 +27,7 @@ - + - + & info, const shared_ptrmachine); setReserved("node.datadir", info->dataDir); setReserved("node.data", info->dataDir); + if (info->iceSoVersion) + { + setReserved("node.ice.soversion", *info->iceSoVersion); + } + else + { + // Since the node didn't supply this info, we're guessing it's a 3.7 node, but we don't know for sure. + setReserved("node.ice.soversion", "37"); + } } string @@ -958,11 +968,8 @@ Resolver::getProperties(const Ice::StringSeq& references, set& resolved) map Resolver::getReserved() { - // - // Allowed reserved variables (reserved variables can't be - // overrided, in this implementation an empty reserved variable is - // considered to be undefined (see getVariable)) - // + // Allowed reserved variables (reserved variables can't be overridden, in this implementation an empty reserved + // variable is considered to be undefined (see getVariable)) map reserved; reserved["application"] = ""; reserved["node"] = ""; @@ -973,6 +980,7 @@ Resolver::getReserved() reserved["node.machine"] = ""; reserved["node.datadir"] = ""; reserved["node.data"] = ""; + reserved["node.ice.soversion"] = ""; reserved["session.id"] = ""; reserved["server"] = ""; reserved["server.data"] = "${node.data}/servers/${server}/data"; diff --git a/cpp/src/IceGrid/Internal.ice b/cpp/src/IceGrid/Internal.ice index 0e7b2578828..894f653a237 100644 --- a/cpp/src/IceGrid/Internal.ice +++ b/cpp/src/IceGrid/Internal.ice @@ -373,6 +373,10 @@ class InternalNodeInfo /// The path to the node data directory. string dataDir; + + /// The Ice SO version of this node, for example 38. It is typically used to load the same version of the IceStorm + /// service in IceBox. + optional(1) string iceSoVersion; } /// Information about an IceGrid registry replica. diff --git a/cpp/src/IceGrid/PlatformInfo.cpp b/cpp/src/IceGrid/PlatformInfo.cpp index e61d320d407..26932a90b2b 100644 --- a/cpp/src/IceGrid/PlatformInfo.cpp +++ b/cpp/src/IceGrid/PlatformInfo.cpp @@ -383,8 +383,16 @@ PlatformInfo::getRegistryInfo() const shared_ptr PlatformInfo::getInternalNodeInfo() const { - return make_shared< - InternalNodeInfo>(_name, _os, _hostname, _release, _version, _machine, _nProcessorThreads, _dataDir); + return make_shared( + _name, + _os, + _hostname, + _release, + _version, + _machine, + _nProcessorThreads, + _dataDir, + ICE_SO_VERSION); } shared_ptr