Discussion:
[Fwd: Re: [omniORB] Synchronization between omniNames service & Services]
Nigel Rantor
2008-08-05 20:11:42 UTC
Permalink
sorry, meant to reply to list, not just to OP
The second one is the scenario..
As you think I am also guess, the problem is trying to contact the
original object reference that was registered with the Nameservice
rather than the new one.
Yes. That does look to be your problem.

To make this work you will have to make the client smart enough to
look-up the object reference again if it finds that it fails like this.

n
No.. still did not get a solution.
As I found with new experiments, this problem is not a specific
for this Master/Slave case. If we just consider only about the
Master, Problem still remains. I found these result with debugging.
I just repeat the same procedure with only a single server.
* Start the server and get registered with the name service
* Manually kill the server
* Start the server and get registered with the name service
*again *.
Then the registration also get success. But when the client try
to call server's functions, it gives this exception.
the exception is *"SystemException: TRANSIENT_ConnectFailed"*
The reason for this problem may be the sudden break down of the
server with out informing it to the name service.
Do we have any solution for this....?
You're going to have to be more explicit about this.
Which of the following is the order things are happening in?
A
--------------------------------------------------------------
- Start server
- Server registers with Nameservice as "server"
- Kill server
- Start server again
- Server registers with Nameservice as "server"
- Start client
- Client looks up "server" with Nameservice
- Client invokes an operation on the reference from the Nameservice
- Client gets "SystemException: TRANSIENT_ConnectFailed"
--------------------------------------------------------------
B
--------------------------------------------------------------
- Start server
- Server registers with Nameservice as "server"
- Client looks up "server" with Nameservice
- Kill server
- Start server again
- Server registers with Nameservice as "server"
- Start client
- Client invokes an operation on the reference from the Nameservice
- Client gets "SystemException: TRANSIENT_ConnectFailed"
--------------------------------------------------------------
My question is, has the client got the most recently bound name from
the nameservice or not?
It appears from you description that it is trying to contact the
original object reference that was registered with the Nameservice
rather than the new one.
n
--
Regards,
R. P. Janaka
Philip Tait
2008-08-06 03:15:36 UTC
Permalink
I had the same issue. Here's my updated version of
'examples/echo/example_echo_nsclt.py' that tolerates stop and restart of
'examples/echo/example_echo_srv.py'

Comments and suggestions for improvement are welcome.

Philip J. Tait
http://subarutelescope.org

------------------------------------------------------

#!/usr/bin/env python

import sys
# Import the CORBA module
from omniORB import CORBA
# Import the stubs for the CosNaming and Example modules
import CosNaming, Example

def bindContext(name):
try:
obj = rootContext.resolve(name)
except CosNaming.NamingContext.NotFound, ex:
print "Name not found"
sys.exit(1)
# Narrow the object to an Example::Echo
eo = obj._narrow(Example.Echo)
if eo is None:
print "Object reference is not an Example::Echo"
sys.exit(1)
return eo

# Initialise the ORB
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)

# Obtain a reference to the root naming context
obj = orb.resolve_initial_references("NameService")
rootContext = obj._narrow(CosNaming.NamingContext)

if rootContext is None:
print "Failed to narrow the root naming context"
sys.exit(1)

# Resolve the name "test.my_context/ExampleEcho.Object"
name = [CosNaming.NameComponent("test", "my_context"),
CosNaming.NameComponent("ExampleEcho", "Object")]

eo = bindContext(name)

import time
import traceback

# Invoke the echoString operation
message = "Hello from Python"

while True:
while True:
try:
result = eo.echoString(message)
break
except (CORBA.COMM_FAILURE, CORBA.TRANSIENT):
traceback.print_exc()
eo = bindContext(name)
time.sleep(1)
print "I said '%s'. The object said '%s'." % (message,result)
time.sleep(10)
--------------------------------------------------------------------------
Post by Nigel Rantor
sorry, meant to reply to list, not just to OP
The second one is the scenario..
As you think I am also guess, the problem is trying to contact the
original object reference that was registered with the Nameservice
rather than the new one.
Yes. That does look to be your problem.
To make this work you will have to make the client smart enough to
look-up the object reference again if it finds that it fails like this.
n
No.. still did not get a solution.
As I found with new experiments, this problem is not a specific
for this Master/Slave case. If we just consider only about the
Master, Problem still remains. I found these result with debugging.
I just repeat the same procedure with only a single server.
* Start the server and get registered with the name service
* Manually kill the server
* Start the server and get registered with the name service
*again *.
Then the registration also get success. But when the client try
to call server's functions, it gives this exception.
the exception is *"SystemException: TRANSIENT_ConnectFailed"*
The reason for this problem may be the sudden break down of the
server with out informing it to the name service.
Do we have any solution for this....?
You're going to have to be more explicit about this.
Which of the following is the order things are happening in?
A
--------------------------------------------------------------
- Start server
- Server registers with Nameservice as "server"
- Kill server
- Start server again
- Server registers with Nameservice as "server"
- Start client
- Client looks up "server" with Nameservice
- Client invokes an operation on the reference from the Nameservice
- Client gets "SystemException: TRANSIENT_ConnectFailed"
--------------------------------------------------------------
B
--------------------------------------------------------------
- Start server
- Server registers with Nameservice as "server"
- Client looks up "server" with Nameservice
- Kill server
- Start server again
- Server registers with Nameservice as "server"
- Start client
- Client invokes an operation on the reference from the Nameservice
- Client gets "SystemException: TRANSIENT_ConnectFailed"
--------------------------------------------------------------
My question is, has the client got the most recently bound name from
the nameservice or not?
It appears from you description that it is trying to contact the
original object reference that was registered with the Nameservice
rather than the new one.
n
--
Regards,
R. P. Janaka
_______________________________________________
omniORB-list mailing list
http://www.omniorb-support.com/mailman/listinfo/omniorb-list
Loading...