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>

Comments

  • benoit
    benoit Rennes, France
    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.
  • Problem solved!

    Thanks Benoit, that solved the problem. I see that I lost the setting when I removed the replication settings.
  • 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.