[Opensim-dev] Changing GetRegions(uint, uint, uint, uint) in GridManager

Justin Clark-Casey jjustincc at googlemail.com
Tue Oct 28 14:08:38 UTC 2008


Checking this in sounds good to me.  Could we also put the method into an interface which states that it is an external 
interface?

Mike Mazur wrote:
> Hi,
> 
> In OpenSim/Grid/GridServer/GridManager.cs there is a method with the
> following signature:
> 
> Dictionary<ulong, RegionProfileData> GetRegions(uint, uint, uint, uint)
> 
> This method grabs all the regions currently in the regions table, and
> puts them in a dictionary with the region handle as the key. It's
> invoked in GetSimNeighboursData() and XmlRpcMapBlockMethod().
> 
> I would like to modify this method to have the following signature:
> 
> List<RegionProfileData> GetRegions(uint, uint, uint, uint)
> 
> Note there is another method very similar already in GridManager:
> 
> List<RegionProfileData> GetRegions(string, int)
> 
> I don't immediately see any place that the region handle is required.
> The dictionary is iterated over, the data from each region extracted
> and passed on.
> 
> Why is the region handle required? It's calculated from the region's
> coordinates, so maybe it's used to uniquely identify a region? In that
> case, could the UUID be used instead?
> 
> The reason I want to do this is that for our load balancing application
> we have multiple entries in the regions table for the same region;
> different IPs and URIs for the same coordinates and hence same region
> handle. The way the method is currently implemented, only one regions
> table entry for each set of coordinates is returned.
> 
> Please find the proposed diff below. Am I introducing any bugs? Is there
> a better way to do this?
> 
> If nobody has any issues with this, I'd like to check this in.
> 
> Thanks,
> Mike
> 
> 
> @@ -165,19 +165,15 @@ namespace OpenSim.Grid.GridServer
>              return null;
>          }
>  
> -        public Dictionary<ulong, RegionProfileData> GetRegions(uint xmin, uint ymin, uint xmax, uint ymax)
> +        public List<RegionProfileData> GetRegions(uint xmin, uint ymin, uint xmax, uint ymax)
>          {
> -            Dictionary<ulong, RegionProfileData> regions = new Dictionary<ulong, RegionProfileData>();
> +            List<RegionProfileData> regions = new List<RegionProfileData>();
>  
>              foreach (IGridDataPlugin plugin in _plugins)
>              {
>                  try
>                  {
> -                    RegionProfileData[] neighbours = plugin.GetProfilesInRange(xmin, ymin, xmax, ymax);
> -                    foreach (RegionProfileData neighbour in neighbours)
> -                    {
> -                        regions[neighbour.regionHandle] = neighbour;
> -                    }
> +                    regions.AddRange(plugin.GetProfilesInRange(xmin, ymin, xmax, ymax));
>                  }
>                  catch
>                  {
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
> 


-- 
justincc
Justin Clark-Casey
http://justincc.wordpress.com



More information about the Opensim-dev mailing list