Archived
This forum has been archived. Please start a new discussion on GitHub.
IceStorm with IceGrid - TopicManager Proxy name mismatch
From reading a couple of other threads, I seem to have the same problem as others have encountered.
I'm trying to get the demopy/IceStorm/clock demo running under IceGrid instead of IceBox.
I modified application.xml from Ice-3.3.0/cpp/demo/IceStorm/replicated to take out the replication-related stuff, which I don't need (pasted at end).
I matched up Ice.Default.Locator in config.pub and sub to what I have in /etc/icegridnode.conf
However, now I get this when running Subscriber.py (which is unmodified) :
Traceback (most recent call last):
File "/opt/Ice-3.3.0/python/Ice.py", line 790, in main
status = self.run(args)
File "Subscriber.py", line 77, in run
manager = IceStorm.TopicManagerPrx.checkedCast(self.communicator().propertyToProxy('TopicManager.Proxy'))
File "/opt/Ice-3.3.0/python/IceStorm_IceStorm_ice.py", line 349, in checkedCast
return _M_IceStorm.TopicManagerPrx.ice_checkedCast(proxy, '::IceStorm::TopicManager', facetOrCtx, _ctx)
NotRegisteredException: exception ::Ice::NotRegisteredException
{
kindOfObject = object
id = DemoIceStorm/TopicManager
}
This indicates that it is trying to find "DemoIceStorm/TopicManager" (the setting of TopicManager.Proxy). I looked under "IceStorm.TopicManager" in the icegridgui, and found Adapter ID "DemoIceStorm.IceStorm.IceStorm.TopicManager". Is that supposed to match up?
Here is application.xml :
<icegrid>
<application name="DemoIceStorm" import-default-templates="true">
<server-template id="IceStorm">
<parameter name="topic-manager-endpoints" default="default"/>
<parameter name="publish-endpoints" default="default"/>
<parameter name="node-endpoints" default="default"/>
<parameter name="instance-name"/>
<icebox id="${instance-name}" exe="icebox" activation="on-demand">
<service name="IceStorm" entry="IceStormService,33:createIceStorm">
<dbenv name="${service}"/>
<adapter name="${service}.TopicManager"
endpoints="${topic-manager-endpoints}"/>
<adapter name="${service}.Publish"
endpoints="${publish-endpoints}"/>
<adapter name="${service}.Node"
endpoints="${node-endpoints}"/>
<properties>
<property name="${service}.InstanceName" value="${instance-name}"/>
<property name="${service}.Trace.TopicManager" value="2"/>
<property name="${service}.Trace.Topic" value="1"/>
<property name="${service}.Trace.Subscriber" value="1"/>
<property name="${service}.Trace.Election" value="1"/>
</properties>
</service>
</icebox>
</server-template>
<node name="irs2env">
<server-instance template="IceStorm" instance-name="DemoIceStorm"/>
</node>
</application>
I'm trying to get the demopy/IceStorm/clock demo running under IceGrid instead of IceBox.
I modified application.xml from Ice-3.3.0/cpp/demo/IceStorm/replicated to take out the replication-related stuff, which I don't need (pasted at end).
I matched up Ice.Default.Locator in config.pub and sub to what I have in /etc/icegridnode.conf
However, now I get this when running Subscriber.py (which is unmodified) :
Traceback (most recent call last):
File "/opt/Ice-3.3.0/python/Ice.py", line 790, in main
status = self.run(args)
File "Subscriber.py", line 77, in run
manager = IceStorm.TopicManagerPrx.checkedCast(self.communicator().propertyToProxy('TopicManager.Proxy'))
File "/opt/Ice-3.3.0/python/IceStorm_IceStorm_ice.py", line 349, in checkedCast
return _M_IceStorm.TopicManagerPrx.ice_checkedCast(proxy, '::IceStorm::TopicManager', facetOrCtx, _ctx)
NotRegisteredException: exception ::Ice::NotRegisteredException
{
kindOfObject = object
id = DemoIceStorm/TopicManager
}
This indicates that it is trying to find "DemoIceStorm/TopicManager" (the setting of TopicManager.Proxy). I looked under "IceStorm.TopicManager" in the icegridgui, and found Adapter ID "DemoIceStorm.IceStorm.IceStorm.TopicManager". Is that supposed to match up?
Here is application.xml :
<icegrid>
<application name="DemoIceStorm" import-default-templates="true">
<server-template id="IceStorm">
<parameter name="topic-manager-endpoints" default="default"/>
<parameter name="publish-endpoints" default="default"/>
<parameter name="node-endpoints" default="default"/>
<parameter name="instance-name"/>
<icebox id="${instance-name}" exe="icebox" activation="on-demand">
<service name="IceStorm" entry="IceStormService,33:createIceStorm">
<dbenv name="${service}"/>
<adapter name="${service}.TopicManager"
endpoints="${topic-manager-endpoints}"/>
<adapter name="${service}.Publish"
endpoints="${publish-endpoints}"/>
<adapter name="${service}.Node"
endpoints="${node-endpoints}"/>
<properties>
<property name="${service}.InstanceName" value="${instance-name}"/>
<property name="${service}.Trace.TopicManager" value="2"/>
<property name="${service}.Trace.Topic" value="1"/>
<property name="${service}.Trace.Subscriber" value="1"/>
<property name="${service}.Trace.Election" value="1"/>
</properties>
</service>
</icebox>
</server-template>
<node name="irs2env">
<server-instance template="IceStorm" instance-name="DemoIceStorm"/>
</node>
</application>
0
Comments
-
Hi,
Since you don't specify any well-known objects in the XML descriptors, you should configure the publisher/subscriber to use the following indirect proxy for the topic manager object: "DemoIceStorm/TopicManager @ DemoIceStorm.IceStorm.IceStorm.TopicManager". Or if you want to use a well-known proxy instead (i.e.: just "DemoIceStorm/TopicManager"), you need to add the following to the service descriptor under the TopicManager adapter element:<adapter name="${service}.TopicManager" endpoints="${topic-manager-endpoints}"> <object identity="${instance-name}/TopicManager" type="::IceStorm::TopicManager"/> </adapter>
Cheers,
Benoit.0 -
Problem solved!
Thanks Benoit, that solved the problem. I see that I lost the setting when I removed the replication settings.0 -
Starting Clock.py publisher with IceGrid
Any pointers on how to get IceGrid to also startup the Clock.py program, as well as running IceStorm? I looked at demopy/IceGrid/Simple, but I'm at a loss as to how to merge in the server startup section.0