[Opensim-dev] Event Queue

Cristina Videira Lopes lopes at ics.uci.edu
Wed Dec 3 17:39:52 UTC 2008


Apologies in advance for bringing up everyone's favorite hate topic, but 
having spent most of yesterday tracking TP/crossing problems (again), I 
can't help but bringing this up to a wider audience. I know everyone 
hates the EQ. As it stands, there are several broken elements with the 
EQ in OpenSim, beyond the obvious bugs caused by its management. I'm 
just wondering if there is something here that I'm completely missing, 
or if this is really this bad:

1) It's implemented as an optional region module (!!!), configurable in 
OpenSim.ini (!!!). That explains why, for example, I could not reproduce 
crashes that other people have reported with older viewers. It turns out 
that those people are not just using older viewers; they are using 
OpenSim servers configured with EventQueue=false. A complete 
miscommunication.

2) It's implemented as an optional region module -- the sequel. It is 
being considered a [optional] part of the Region Environment, something 
a region may or may not do. I'm afraid, this is the incorrect model. The 
server side doesn't have any choice on this, if it wants to interact 
with the current version of the LL viewer. The EQ should be hand-in-hand 
with LLClientView. After all, it's the new channel of communications 
between a server and the LL viewer. Things that used to go over UDP are 
now sent via the EQ, period, no choice. Region Environment should be 
completely oblivious to that change. As it is now, this pattern occurs 
all over Region Environment classes:

            IEventQueue eq = [scene.]RequestModuleInterface<IEventQueue>();
            if (eq != null)
            {
                // send the event over EQ
            }
            else
            {
                // call the right IClientAPI method to send the event 
[over UDP]
            }

This is infecting the server side with things that should be purely 
client side. It's a horrendous way of getting at the question "what 
version of the LL viewer are you supporting in your region?". If there 
is such a thing as a wrong question to ask, this is one of them. If we 
want to support viewers with older communication stacks, then let's make 
that explicit in OpenSim and subclass LLClientView for the N previous 
versions of the LL viewer's communications stack. Region Environment, 
and the whole of the OpenSim framework, should be insulated from that 
mess, that's what the IClientAPI is there for. No OpenSim.ini 
configuration variables, other than the already existing one:
clientstack_plugin="OpenSim.Region.ClientStack.LindenUDP.dll"

What will happen when Rex comes along? ... what version of the LL viewer 
is that based on? ...

Sorry for venting! I'm just sending this out to find the answer to these 
three questions:

a) Am I missing something?

b) Are there any objections to placing EQ under 
OpenSim.Region.ClientStack.LindenUDP? (besides that name now being 
somewhat incorrect)

c) Should OpenSim be backwards compatible with viewers forked off from 
older LL viewers *for the specific aspect of communications*? If so, 
what design pattern should be used?, subclassing or alternative code 
paths inside methods?




More information about the Opensim-dev mailing list