[Opensim-dev] The HyperGrid

Cristina Videira Lopes lopes at ics.uci.edu
Sun Oct 26 16:16:29 UTC 2008


I started working on an extension to OpenSim that makes it work in 
peer-to-peer mode, i.e. no need for grid servers to help the process of 
teleporting and more, which I explain below.  I'm really excited to say 
that this is working! -- I hope some of you are interested in trying it 
out, and helping out too!

The project is called the HyperGrid. Hypergrid is an existing 
theoretical concept in p2p networks which maps reasonably well to what 
I'm doing here, so I borrowed the name.

Comments, suggestions, contributions, ... welcome!
Crista / Diva


** OpenSim HyperGrid**

The basic idea of p2p is that nodes define networks by linking to other 
nodes. Unfortunately, this concept doesn't map too well to the concept 
of a 2-dimensional map of "the world" (i.e. "the grid"). What does 
position (Xloc, YLoc) mean in p2p where there is no central authority? 
The 2-dimensional map is quite interesting in VWs, so we should continue 
to use it. Should someone coordinate the allocation of sims  to grid 
positions world-wide?

Enters hypergrid. In an hypergrid of p2p nodes there is no central 
authority for allocating nodes to grid positions. The position of peers 
in the map is determined locally by the node itself, and not by any 
global entity. As we move from peer to peer, we are presented completely 
different grids. For example, my node can connect to CNN's world placing 
it in position 10, 10 of my grid; but when I TP to CNN, I am presented 
with a totally different grid: the node that I TP-ed to is probably not 
at position 10, 10 of its local grid; my own node is probably not in 
CNN's grid at all.

These links are the VW-equivalent of web hyperlinks. Some comparisons to 
the Web:
- Just like hypertext links, hyperworld links are uni-directional.
- The establishment of hyperworld links by region administrators is 
[sort of] equivalent to writing a web page with hypertext links to other 
web sites.
- A web page with external links can be thought of as a 1D Map. The VW 
Map happens to be 2D.

I've implemented a console command that looks like this:
link-region 10 10 ucigrid02.nacs.uci.edu 9000

10, 10 is the position on the local grid
ucigrid02.nacs.uci.edu and 9000 are the host and port respectively of 
the remote opensim

Once this link is established, we can interact with this peer in the 
normal way. It will show up in the local map at position 10, 10. We can 
TP to it via the map. (I'm still debating whether adjacencies should be 
allowed or not; they bring along child agents that can overload the 
remote regions; but that's a detail)

I have this working already, and that leads to a whole other topic: the 
topic of maintaining identity and accessing inventory. This second part 
is not done yet, so once you TP out you loose access to your inventory. 
If the viewer would cooperate, this would be infinitely easier, but 
since we're assuming the LL viewer for the foreseeable future, this 
needs a bit of server-side trickery.

*** Trying it out ***

Please get the sources from svn and follow the instructions in README.txt:

If things are not clear, don't hesitate in emailing me.

*** Implementation ***

The implementation of HyperGrid is a thin layer on top of the existing 
protocols, Local and OGS1. The classes reuse the OpenSim framework 
massively by inheritance, delegation and, when those fail, copy&paste. 
The major crux of the idea is the management of region handles, which 
need to be mapped between the local grid and the remote node's grid.

There are two sets of classes so that HyperGrid works both for 
standalones and grid-ed opensims.

** Of interest to OpenSim architects: in order to instantiate these 
classes, I had to subclass Region.Application.OpenSim and override a 
bunch of things, especially the Startup methods which hard-code the 
communication protocol class names. So if there's a way of modularizing 
that better, it would be good.

** Of interest to Open Grid Protocol people: I didn't use any of your 
code/concepts, for the following reasons:
a) It wasn't clear that what you are doing is an hypergrid model vs 
simply supporting TPs between LL and opensim servers on the same grid.
b) OGP seems to be designed for talking to LL's servers. I wanted to do 
something for opensim, because it's the only server code I have for 
But I think that once the p2p protocols are clearly defined, we can 
implement a different layer of messaging for LL servers using LLSD 
instead of remoting. That is, assuming LL is vaguely interested in the 
non-centralized, hypergrid model of VWs.

More information about the Opensim-dev mailing list