[email protected] wrote:
> Justin Clark-Casey wrote:
>> I like this generally but I do have the following comments.
>>
>> 1. I'm not a huge fan of this since, like Stefan, I'd ideally like it to be
>> possible to package an OpenSim that
>> supports only a single architecture, with no trace of other architecture
>> code in there at all. Putting everything into
>> one dll makes this impossible, though perhaps it's not really that big a
>> deal. Is it really not possibly to do this via
>> plugins (where the hg code relies on the presence of local service plugins?).
>
> OK. It might be possible to merge the hypergrid-related conditionals in
> the connectors of what's currently known as OGS1. If that's possible,
> then we'd have two dlls:
>
> OpenSim.Region.ResourceServicesConnectors.Local.dll
> OpenSim.Region.ResourceServicesConnectors.Remote.dll
>
> Where "Remote" means calls to local and remote services out there, and
> not just to the ones associated with the grid; so includes calls to, for
> example, user services of foreign users -- if the sim is configured to
> deal with them.
>
> We already have the dependency OGS1 depends-on Local, that would
> continue to be, that is, Remote depends-on Local. So the fact that a sim
> uses the Remote dll doesn't mean that all calls to services are remote
> calls; some may be local.
If bundling is the only reasonable way forward than fair enough. Perhaps
looking at some code might help. For
instance, in HGUserServices in OpenSim.Region.Communications.Hypergrid.dll,
there's a lot of the following
public override List<AvatarPickerAvatar>
GenerateAgentPickerRequestResponse(UUID queryID, string query)
{
if (m_localUserServices != null)
return
m_localUserServices.GenerateAgentPickerRequestResponse(queryID, query);
return base.GenerateAgentPickerRequestResponse(queryID, query);
}
Here, I can imagine a way in which this stuff could be restructured so that
HGUserServices relies on LocalUserServices
in a plugin fashion where HG and Local don't need to be aware of each other.
But then there are other methods in this class such as
public override void LogOffUser(UUID userid, UUID regionid, ulong
regionhandle, Vector3 position, Vector3 lookat)
{
string url = string.Empty;
if ((m_localUserServices != null) && !IsForeignUser(userid, out
url))
m_localUserServices.LogOffUser(userid, regionid, regionhandle,
position, lookat);
else
base.LogOffUser(userid, regionid, regionhandle, position,
lookat);
}
where some awareness of whether a user is local or foreign - IsForeignUser() -
appears to be required by HG. If there's
no way to make this check more generic then that would appear to lead towards a
higher level of coupling which may make
it a lot easier to put everything in monolithic dlls/big modules.
I looked at this because I was thinking of actually doing this with the limited
pre-existing internal module system in
UserManagerBase which makes it possible to source user 'data' from multiple
internal plugins. But the presence of
methods such as LogOffUser() raised the difficulty bar too high for my brain
time budget at that time.
>
>> 2. On your previous suggested ini stuff, in my opinion something like
>>
>> UserService = { local | remote }
>>
>> would be clearer than
>>
>> LocalUserService = {True|False}
>>
>> From what I remember, specifying remote is understandable even if the
>> services are actually on the same machine (but
>> one has chosen to run them as separate processes). Local would naturally
>> denote the use of services in the same process
>> as the simulator.
>
> Actually, there's a subtle but very important difference in the case of
> hypergrid. A standalone grid wanting to allow Guests would have to use
> the Remote dll, even though the service for local users is local.
>
> This is, in fact, the kernel of the complexity here. Local has been
> designed to be Sandbox connectors, and OSG1 has been designed to connect
> with exactly *one* of each type of service. All remote calls in it
> hardcode serversInfo.xxxURL.
>
> The Hypergrid needs the regions to interact with *several* of each type
> of service, potentially, including the local one. So, most of the
> hypergrid changes have to do with determining local vs remote and, if
> remote, determining the service URL, making it a variable instead of a
> constant.
>
> The question is: do you want to hold on the the 'old' grid model,
> *architecturally speaking*? (not behaviorally) Or do you want to
> generalize the architecture, and then let people configure its
> *behavior* with things like
>
> AllowGuests = {True|False}
>
> ?
>
> I have a preference for the generalization, but I'm not strongly
> pushing, I can go both ways.
> The thing that *really* needs to go is this
>
> gridmode = {True|False}
>
> This is an absolute show stopper; it binds us down to two monolithic things.
>
> So if we want to keep 3 architectures around, as separate architectures
> (and not one, more general), we have a meta option here:
>
> ServiceConnectors = {Sandbox|LLGrid|Hypergrid}
>
> With this, I can make the hypergrid architecture have configuration
> variables to be able to generate all of the behaviors of Sandbox and
> LLGrid, and more -- basically place the ideas on my original email under
> the Hypergrid mode, and leave the other two as they are now.
Hmm, having configuration variables to switch Hypergrid between 'standalone'
and 'LLGrid' sounds subtly worse if
anything. But I do think there's a trade off here between complexity in the
configuration files and usability. Perhaps
this could be alleviated by a further config section that most users wouldn't
have to look at that defines the plugins
that 'Sandbox', 'LLGrid' and 'Hypergrid' actually use. Then a 3rd party could
define their own label to put in
ServiceConnectors. But this might be hopeless naive since it's off the top of
my head.
If I were you, I would follow the path of least resistance unless it made
things horribly messy internally (perhaps this
is the point).
Also, I'd rather see that we leave 'LL' out of this if only because they could
change their model in the future for all
we know :).
--
justincc
Justin Clark-Casey
http://justincc.wordpress.com
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev