[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