[omniORB] Event Service?

Bruce Fountain B_Fountain@motherwell.com.au
Wed, 26 Sep 2001 10:37:10 +0800


zoltan.sebestyen@netvisor.hu wrote:
> omniEvents, a contribution to omniORB does this job:
> http://www.uk.research.att.com/omniORB/contribution/omniEvents.html
> 
> > -----Original Message-----
> > From: ngo tieu huy [mailto:ntnh78@hotmail.com]
> > 
> > 
> > I'm totally new to omniorb. Has it implemented Event Service 
> > and other 
> > services ?

We had a lot of trouble with omniEvents. It doesn't seem to be
threadsafe at all. If you run several suppliers that hammer it with
events (even if there are no consumers) then it falls over easily.
Note that it is not the load that kills it - putting it under light load
will kill it eventually if you have multiple suppliers, it just takes
longer. There is some sort of race condition when two events
arrive simultaneously. We fixed this problem by adding a mutex
guard to the ProxyPushConsumer::push() method and that
solved the problem on the supplier side.

Unfortunately, we ran into further problems on the consumer side.
It seems to crash somewhere when cleaning up after a consumer
disconnects or dies. Possibly the incoming events are trying to
use a ProxyPushSupplier that has just been removed. To simulate
this problem we wrote a consumer process which registers for a
channel. We then wrote a script that spawns the consumer, waits
ten seconds, then kills the consumer. We ran a few such scripts
simultaneously, plus the supplier program. The service dies in a
matter of minutes. We didn't find a fix for this problem.

I ended up writing my own event service. It only implements the
functionality that we actually use and it is designed specifically
to deal with badly behaved (or dead) consumers. The mandate is
"the greatest good for the greatest number of consumers" rather
than "guaranteed delivery", which suits our application. Consumers
which throw an exception or timeout are immediately disconnected
and cleaned up.

In summary: omniEvents is fine for experimentation and even
development (we didn't run into any problems until we started
field testing), but I don't think it is industrial strength.

We are using omniORB 3.0.3 with omniEvents 2.1.1 on Solaris/gcc.

Bruce Fountain
bruce_fountain@motherwell.com.au