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