Chicken & Egg problem with multiple deployers

In case someone can point out something I've missed ... can't find anything in the forums on this.

I want to have two deployers as follows
Deployer 1 with one component in it, A
Deployer 2 with one component in it, B (it has other components, but none connect to A currently)

If I add component A in to Deployer 2 as a CORBA type and component B in to Deployer 1 also as a corba type, there seems to be no way to bring up each deployer and have the whole system be happy. The ports will connect, but other things seem to go wrong (not-mentioned components in Deployer 2 don't run periodically, they run only once).

I have tried making either A or B a corba server, neither of which has worked. The only solution I have found is to start a stub component in Deployer 1 that simply connects to all of A's ports, and then put A as a non-server CORBA component in Deployer 2. Everything connects and everything works.

Am I doing something wrong, or is this a limitation of the system?

Thanks
S

Chicken & Egg problem with multiple deployers

On Tuesday 03 February 2009 04:03:05 kiwi [dot] net [..] ... wrote:
> In case someone can point out something I've missed ... can't find anything
> in the forums on this.
>
> I want to have two deployers as follows
> Deployer 1 with one component in it, A
> Deployer 2 with one component in it, B (it has other components, but none
> connect to A currently)
>
> If I add component A in to Deployer 2 as a CORBA type and component B in to
> Deployer 1 also as a corba type, there seems to be no way to bring up each
> deployer and have the whole system be happy.

What happens if you split the loading in two phases:
1. start both deployers with their XML files having only A and B loaded as
corba servers.
2. load a second XML file in each deployer which loads the proxy to A in 2 and
proxy to B in 1. and which connects the ports.

To have this working properly, you'll require the deploymentcomponent from
ocl/trunk. But read on...

> The ports will connect, but
> other things seem to go wrong (not-mentioned components in Deployer 2 don't
> run periodically, they run only once).

That's disastrous :-/ Is it a hanging thread in updateHook() ?

>
> I have tried making either A or B a corba server, neither of which has
> worked.

Both need to be ! Otherwise the proxy can't find them.

> The only solution I have found is to start a stub component in
> Deployer 1 that simply connects to all of A's ports, and then put A as a
> non-server CORBA component in Deployer 2. Everything connects and
> everything works.
>
> Am I doing something wrong, or is this a limitation of the system?

An alternative to my solution is having B as a server in (2), let A 'peer'
connect to a proxy of B and make the proxy 'peer' connect back to A in (1).
Orocos will automatically create the missing server for A at (1) and a proxy
for A at (2).

Peter

Chicken & Egg problem with multiple deployers

On Feb 3, 2009, at 03:35 , Peter Soetens wrote:

> On Tuesday 03 February 2009 04:03:05 kiwi [dot] net [..] ... wrote:
>> In case someone can point out something I've missed ... can't find
>> anything
>> in the forums on this.
>>
>> I want to have two deployers as follows
>> Deployer 1 with one component in it, A
>> Deployer 2 with one component in it, B (it has other components,
>> but none
>> connect to A currently)
>>
>> If I add component A in to Deployer 2 as a CORBA type and component
>> B in to
>> Deployer 1 also as a corba type, there seems to be no way to bring
>> up each
>> deployer and have the whole system be happy.
>
> What happens if you split the loading in two phases:
> 1. start both deployers with their XML files having only A and B
> loaded as
> corba servers.
> 2. load a second XML file in each deployer which loads the proxy to
> A in 2 and
> proxy to B in 1. and which connects the ports.
>
> To have this working properly, you'll require the
> deploymentcomponent from
> ocl/trunk. But read on...
>
>> The ports will connect, but
>> other things seem to go wrong (not-mentioned components in Deployer
>> 2 don't
>> run periodically, they run only once).
>
> That's disastrous :-/ Is it a hanging thread in updateHook() ?

Daylight provided an appropriate cranial-rectum extraction: don't
start a blocking task in an periodic activity with the same scheduler/
priority as other periodic activites. Everything stalls .... grrr ...
sorry.

>> I have tried making either A or B a corba server, neither of which
>> has
>> worked.
>
> Both need to be ! Otherwise the proxy can't find them.
>
>> The only solution I have found is to start a stub component in
>> Deployer 1 that simply connects to all of A's ports, and then put A
>> as a
>> non-server CORBA component in Deployer 2. Everything connects and
>> everything works.
>>
>> Am I doing something wrong, or is this a limitation of the system?
>
> An alternative to my solution is having B as a server in (2), let A
> 'peer'
> connect to a proxy of B and make the proxy 'peer' connect back to A
> in (1).
> Orocos will automatically create the missing server for A at (1) and
> a proxy
> for A at (2).

Is this what you mean?

deployer1.xml
component A, Server =1, type = A ** no peer, no corba, no server **

deployer2.xml
component A, Server =0, type = CORBA, peer = B
component B, type = B, peer = A ** no corba, no server **

Start deployer1 then start deployer 2. Correct?
I know I've got something like this working before, but everytime I
come back to this it causes me issues.

Cheers
S

Chicken & Egg problem with multiple deployers

On Tuesday 03 February 2009 14:04:11 Stephen Roderick wrote:
> > An alternative to my solution is having B as a server in (2), let A
> > 'peer'
> > connect to a proxy of B and make the proxy 'peer' connect back to A
> > in (1).
> > Orocos will automatically create the missing server for A at (1) and
> > a proxy
> > for A at (2).
>
> Is this what you mean?
>
> deployer1.xml
> component A, Server =1, type = A ** no peer, no corba, no server **
>
> deployer2.xml
> component A, Server =0, type = CORBA, peer = B
> component B, type = B, peer = A ** no corba, no server **
>
> Start deployer1 then start deployer 2. Correct?
> I know I've got something like this working before, but everytime I
> come back to this it causes me issues.

Yes that's what I mean. It's the 'classical' use case. I vaguely remember
complaints about peer connections + CORBA, but that's a long time ago. I
thought we sorted it out.

Peter

Chicken & Egg problem with multiple deployers

On Feb 3, 2009, at 08:35 , Peter Soetens wrote:

> On Tuesday 03 February 2009 14:04:11 Stephen Roderick wrote:
>>> An alternative to my solution is having B as a server in (2), let A
>>> 'peer'
>>> connect to a proxy of B and make the proxy 'peer' connect back to A
>>> in (1).
>>> Orocos will automatically create the missing server for A at (1) and
>>> a proxy
>>> for A at (2).
>>
>> Is this what you mean?
>>
>> deployer1.xml
>> component A, Server =1, type = A ** no peer, no corba, no server
>> **
>>
>> deployer2.xml
>> component A, Server =0, type = CORBA, peer = B
>> component B, type = B, peer = A ** no corba, no server **
>>
>> Start deployer1 then start deployer 2. Correct?
>> I know I've got something like this working before, but everytime I
>> come back to this it causes me issues.
>
> Yes that's what I mean. It's the 'classical' use case. I vaguely
> remember
> complaints about peer connections + CORBA, but that's a long time
> ago. I
> thought we sorted it out.

For the record, working solution (slightly corrected from above)

deployer1.xml
component A, type = A, server = 1, ports = x,y,z
** on startup will output warnings about being unable to form
connection with only one port - ignore these **

deployer2.xml
component A, type = CORBA, server = 0, peer = B, ports = x,y,z
component B, type = B, peer = A, ports = x,y,z, ...

Deploy both the above with deployer-corba-TARGET.
S

I should add that all ports

I should add that all ports involved are DataPort's, not Read nor Write ports.

Chicken & Egg problem with multiple deployers

In case someone can point out something I've missed ... can't find anything in the forums on this.

I want to have two deployers as follows
Deployer 1 with one component in it, A
Deployer 2 with one component in it, B (it has other components, but none connect to A currently)

If I add component A in to Deployer 2 as a CORBA type and component B in to Deployer 1 also as a corba type, there seems to be no way to bring up each deployer and have the whole system be happy. The ports will connect, but other things seem to go wrong (not-mentioned components in Deployer 2 don't run periodically, they run only once).

I have tried making either A or B a corba server, neither of which has worked. The only solution I have found is to start a stub component in Deployer 1 that simply connects to all of A's ports, and then put A as a non-server CORBA component in Deployer 2. Everything connects and everything works.

Am I doing something wrong, or is this a limitation of the system?

Thanks
S

I should add that all ports

I should add that all ports involved are DataPort's, not Read nor Write ports.