Discussion:
[omniORB] omniORB python supplier apparently disconnecting external consumer from event channel?
K. Workman
2006-06-23 20:41:20 UTC
Permalink
I've found myself in an interesting situation.

I have an existing fully functional CORBA event channel based
application written in Java, running in two distinct processes.

I've subsequently written a python supplier and consumer application
(multiple threads, same process) designed to connect to these same event
channels.

Everything works perfectly on my office computer.

However, when I attempt to execute the same programs (both the existing
Java and my new Python work) on my laptop, it does NOT work. It exhibits
the following symptoms when the Python supplier attempts to send a message.

1) When the Python supplier sends the message, the Python consumer sees
the message, but the Java consumer does NOT.
2) Going forward, messages sent by the Java supplier can no longer be
seen by the Java consumer. However, the Python consumer can see the
messages sent by the Java supplier.
3) When I restart the Java consumer, it can see the messages sent by the
Java supplier. Until, that is, I send a message from my Python supplier.

To summarize, everything works as expected until I attempt to send a
message from the Python supplier. Then, as far as I've been able to
determine, the Java consumer no longer sees messages on the event
channel. Until it is restarted, that is. It is as though the Python
supplier is somehow disconnecting the Java Consumer.

Since the problem does NOT occur on my office PC, but ONLY on my laptop,
I'm assuming that something is not right in my configuration
(environment variables). So far, a comparison between my two
environments has not revealed much.

I did do one thing on my laptop that I did not do on my office PC and
that is install the OmniORB C++ development kit. So, I uninstalled it,
but the behavior stayed the same. I'm wondering if there might be a
registry entry that was not removed by the uninstall that might be
causing problems?

Thanks in advance for any helpful suggestions.

(sorry for the over-long post, but I wanted to be as clear as possible)

K.A.
Joe Bronkema
2006-06-23 21:14:05 UTC
Permalink
Post by K. Workman
Everything works perfectly on my office computer.
However, when I attempt to execute the same programs (both the
existing Java and my new Python work) on my laptop, it does NOT work.
It exhibits the following symptoms when the Python supplier attempts
to send a message.
...
Post by K. Workman
To summarize, everything works as expected until I attempt to send a
message from the Python supplier. Then, as far as I've been able to
determine, the Java consumer no longer sees messages on the event
channel. Until it is restarted, that is. It is as though the Python
supplier is somehow disconnecting the Java Consumer.
Since the problem does NOT occur on my office PC, but ONLY on my
laptop, I'm assuming that something is not right in my configuration
(environment variables). So far, a comparison between my two
environments has not revealed much.
You don't say what notification service implementation you're using, so
I don't know what options you have here, but have you tried logging
what's going on in the notification service process?

Also, taking a stab in the dark here, does your laptop have multiple
network interfaces? If so, does the problem still occur if you disable
all but one?
K. Workman
2006-06-23 21:48:41 UTC
Permalink
Post by Joe Bronkema
Post by K. Workman
Everything works perfectly on my office computer.
However, when I attempt to execute the same programs (both the
existing Java and my new Python work) on my laptop, it does NOT work.
It exhibits the following symptoms when the Python supplier attempts
to send a message.
...
Post by K. Workman
To summarize, everything works as expected until I attempt to send a
message from the Python supplier. Then, as far as I've been able to
determine, the Java consumer no longer sees messages on the event
channel. Until it is restarted, that is. It is as though the Python
supplier is somehow disconnecting the Java Consumer.
Since the problem does NOT occur on my office PC, but ONLY on my
laptop, I'm assuming that something is not right in my configuration
(environment variables). So far, a comparison between my two
environments has not revealed much.
You don't say what notification service implementation you're using,
so I don't know what options you have here, but have you tried logging
what's going on in the notification service process?
Also, taking a stab in the dark here, does your laptop have multiple
network interfaces? If so, does the problem still occur if you
disable all but one?
The original Java application is legacy code that happens to be using
ACE TAO for Corba Naming and Event services. The Java consumer is
designed to log to standard out every message that it receives. Not the
content, but the fact that it received a message. In the event it
receives a message it doesn't recognize, it reports that as well. In
this case, it doesn't report a thing. It is as though it never receives
the message, at all.

You second point does bring to mind an issue. One difference between my
office PC and my laptop, is that my laptop is connected to my wirelesss
LAN, while my office PC only has the single wired NIC. It hadn't
occurred to me to run things on the laptop while it is disconnected.
That might explain why the Java consumer seems never to see anything
from the Python supplier. But, not necessarily why the Java consumer
stops receiving messages from the Java supplier IMMEDIATELY after the
Python supplier attempts to send a message.

I will definitely take the laptop off my wireless LAN and see what
happens. It is certainly worth a try. I'll also take a closer look at
the event channel logs and see what I can see. However, the Python
consumer sees all messages (from both the Python and Java suppliers, so
I'm not hopeful the logs will show me anything conclusive.

Thanks for the pointer.

If you any other thoughts occur, please don't hesitate...
K. Workman
2006-06-26 20:18:45 UTC
Permalink
Post by Joe Bronkema
Post by K. Workman
Everything works perfectly on my office computer.
However, when I attempt to execute the same programs (both the
existing Java and my new Python work) on my laptop, it does NOT work.
It exhibits the following symptoms when the Python supplier attempts
to send a message.
...
Post by K. Workman
To summarize, everything works as expected until I attempt to send a
message from the Python supplier. Then, as far as I've been able to
determine, the Java consumer no longer sees messages on the event
channel. Until it is restarted, that is. It is as though the Python
supplier is somehow disconnecting the Java Consumer.
Since the problem does NOT occur on my office PC, but ONLY on my
laptop, I'm assuming that something is not right in my configuration
(environment variables). So far, a comparison between my two
environments has not revealed much.
You don't say what notification service implementation you're using,
so I don't know what options you have here, but have you tried logging
what's going on in the notification service process?
Also, taking a stab in the dark here, does your laptop have multiple
network interfaces? If so, does the problem still occur if you
disable all but one?
I tried disabling all the network interfaces, except the one (wireless)
and the problem persists. Very odd. Logging is turned on, but I will try
and raise the debug level and see if that tells me anything.

Thanks for the assist.
Duncan Grisby
2006-06-24 03:03:08 UTC
Permalink
On Friday 23 June, "K. Workman" wrote:

[...]
Post by K. Workman
1) When the Python supplier sends the message, the Python consumer
sees the message, but the Java consumer does NOT.
2) Going forward, messages sent by the Java supplier can no longer be
seen by the Java consumer. However, the Python consumer can see the
messages sent by the Java supplier.
3) When I restart the Java consumer, it can see the messages sent by
the Java supplier. Until, that is, I send a message from my Python
supplier.
It sounds to me as though whatever the problem is, it's with the event
channel implementation, rather than any other part of the system. You
say that you are using TAO's event service. I know that TAO has lots of
debugging options, similar to omniORB's traceLevel, so you might try
activating that and seeing what gets logged. I don't know the details of
how you do that for TAO.

What happens if you do not register the Python consumer, but just send
messages from the Python supplier? Does that also break the Java
consumer?

Are the producers and consumers in the same process as each other?

Do you see anything interesting if you run the omniORB code with
-ORBtraceLevel 25 -ORBtraceInvocations 1 -ORBtraceThreadId 1

Cheers,

Duncan.
--
-- Duncan Grisby --
-- ***@grisby.org --
-- http://www.grisby.org --
K. Workman
2006-06-26 21:06:12 UTC
Permalink
Actually, I've not tried only registering the python supplier (not the
python consumer). That is an interesting idea, I'll give it a shot.

The Java producer and consumer are in different processes. However, the
python producer and consumer are in the same process.
I took a look at the logs last night, but there was alot of information
to wade through. I'll pull them apart more carefully, tonight.

The whole issue is just so strange. Why the applications work as
expected on my office PC, but not on my laptop has got me intrigued.
Particularly, in the manner of failure. Why it would partially work on
my laptop, until I brought the python supplier in the loop is even more
strange.

However, I definitely like the idea of not registering the python
consumer. and seeing what happens.

Thanks for the input!
Post by Duncan Grisby
[...]
Post by K. Workman
1) When the Python supplier sends the message, the Python consumer
sees the message, but the Java consumer does NOT.
2) Going forward, messages sent by the Java supplier can no longer be
seen by the Java consumer. However, the Python consumer can see the
messages sent by the Java supplier.
3) When I restart the Java consumer, it can see the messages sent by
the Java supplier. Until, that is, I send a message from my Python
supplier.
It sounds to me as though whatever the problem is, it's with the event
channel implementation, rather than any other part of the system. You
say that you are using TAO's event service. I know that TAO has lots of
debugging options, similar to omniORB's traceLevel, so you might try
activating that and seeing what gets logged. I don't know the details of
how you do that for TAO.
What happens if you do not register the Python consumer, but just send
messages from the Python supplier? Does that also break the Java
consumer?
Are the producers and consumers in the same process as each other?
Do you see anything interesting if you run the omniORB code with
-ORBtraceLevel 25 -ORBtraceInvocations 1 -ORBtraceThreadId 1
Cheers,
Duncan.
K. Workman
2006-06-28 20:52:34 UTC
Permalink
Post by Duncan Grisby
[...]
Post by K. Workman
1) When the Python supplier sends the message, the Python consumer
sees the message, but the Java consumer does NOT.
2) Going forward, messages sent by the Java supplier can no longer be
seen by the Java consumer. However, the Python consumer can see the
messages sent by the Java supplier.
3) When I restart the Java consumer, it can see the messages sent by
the Java supplier. Until, that is, I send a message from my Python
supplier.
It sounds to me as though whatever the problem is, it's with the event
channel implementation, rather than any other part of the system. You
say that you are using TAO's event service. I know that TAO has lots of
debugging options, similar to omniORB's traceLevel, so you might try
activating that and seeing what gets logged. I don't know the details of
how you do that for TAO.
What happens if you do not register the Python consumer, but just send
messages from the Python supplier? Does that also break the Java
consumer?
Are the producers and consumers in the same process as each other?
Do you see anything interesting if you run the omniORB code with
-ORBtraceLevel 25 -ORBtraceInvocations 1 -ORBtraceThreadId 1
Cheers,
Duncan.
Ok, I tried not registering the Python consumer, but only the Python
supplier. Messages sent from the Python supplier never reached the Java
consumer.

Only the Python consumer and producer are in the same process. The Java
consumer and supplier are in separate processes.

I'll continue to scrutinize the log files to see what I can come up with.

Thanks for the help!

Loading...