Something to keep in mind:
For the time being, we're talking about URLs that would likely GET
people's profiles -- that'd be the only time at which these global
identifiers would be invoked.
Again, HG authentication has nothing to do with this, it doesn't even
use these particular references.
On Aug 31, 2010, at 4:09 PM, Melanie wrote:
According to the tenets of REST, if you do need to retrieve data
that is constant, you use GET and caches may cache it.
If you want to initiate something, like a chat, you would use POST.
Caches are not eternal. So retrieval of profile info may be slightly
out of date (depending on cache ttl).
POSTed chat requests, etc, won't be cached, as POST replies are
uncacheable.
Melanie
Dahlia Trimble wrote:
OK, so if all the information needed is in the URL and the URL is
cache
friendly, what if whatever information the URL is supposed to
reference
changes upstream? How is it ever going to be retrieved? You've
already
designed a cache into the system with the format of the URL, at
what point
were you even considering making the request?
On Tue, Aug 31, 2010 at 3:13 PM, Melanie <[email protected]> wrote:
I'm not relying on one. I'm imagining a world where VW traffic is
the main part of internet traffic, having displaced the flatweb. For
ISP caching, it's important that most protocols are designed to be
RESTful. I don't plan on caching, but i don't want to create a
protocol that is inherently uncacheable. Be nice to the net.
Melanie
Dahlia Trimble wrote:
if you're relying on an external cache, why do you need to store
the same
information in the url?
On Tue, Aug 31, 2010 at 1:05 PM, Melanie <[email protected]>
wrote:
See my prior messages. That format is inherently un-cacheable. I
believe the mandatory info needs to be part of a URL that can be
fetched with GET and cached, e.g. is RESTful.
Melanie
Dahlia Trimble wrote:
I've tried to use extra information in URLs before by slash-
delimiting
them
and all seemed to work well until I ran into situations such as
missing
data
for one of the terms and some URL parsers did not accept the
double
slash
which resulted from the missing field. Another problem exists
when
extending
the definition at a later date, then all parsers that have to
deal
with
the
URL have to be modified. After banging my head over these kind if
issues
I
went back and redesigned it to use the &name=value format and
I''ve
never
regretted it since. Parsing it is quite simple in C# with
String.Split()
Given the open source nature of OpenSimulator, I would think
diverging
definitions would be unavoidable and would likely hinder
interoperability
unless some means for allowing flexibility was designed in from
the
start,
and I think name-value pairs are a usable means of providing that
flexibility.
On Tue, Aug 31, 2010 at 7:53 AM, <[email protected]> wrote:
Hurliman, John wrote:
It sounds like the decision has been made (or was already made
before
this
discussion started), so on to the next step. Can you (Melanie
or
Diva)
do
these two things?
As I said, the issue was *really* narrow :) Even though the
interfaces
already account for this, I got scared when I faced the
situation of
actually creating persistent references to external data. (or,
in the
case
of Simian, creating persistent data structures representing
external
data,
which is similar)
1) Define exactly how the URL is supposed to be parsed. ABNF
notation
would be preferred, or something equivalent that makes it
clear what
identifiers are valid or invalid. Or perhaps define any URL
as valid
like
diva suggested, but only parse display names out of
specifically
crafted
URLs. With the suggested format of
http://authority/user/user_id/First+Last it seems like you
would
either
assume any URL that includes a space in the last section of
the path
is
parsed as a first+last name tuple. (I'm assuming you remove any
attached
query string before parsing the name.) Or will it look for
"user_id"
as
the
second to last segment of the path followed by a path segment
containing a
space? Obviously it can't expect /user/user_id/First+Last to be
anchored at
the root of the domain since it won't be possible to generate
those
URLs on
some setups.
Yes, and that's the crux of the narrow issue in discussion. So
let's
finish
those little details on the IRC, maybe.
2) Standardize the handling of external identities in OpenSim.
Go
through
and clean out the approaches that are no longer being used,
such as
OpenSim.Framework.Communications.Osp. I can help with this
part as
I'm
always a fan of removing dead code.
That's the only broad consequence of this issue, and one that
I also
feel
it's very important. I know these global names have been used
before
--
or
maybe never used, but the code is there -- and, even though I
didn't
remember the syntax, I remembered that it looked nothing like
an URI.
Thanks, Justin, for explaining. If everyone is ok with the URI
syntax,
then
let's make it consistent across the board.
John
-----Original Message-----
From: [email protected] [mailto:opensim-
dev-
[email protected]] On Behalf Of [email protected]
Sent: Monday, August 30, 2010 3:39 PM
To: [email protected]
Subject: Re: [Opensim-dev] Global identifiers
OK, so here's the form of the URI that will start showing up
in the
[non-Simian] DBs soon, specifically in the GridUser table:
http://authority/user/user_id/First+Last
Yes?
I suspect that SimianGrid will take things like
LoggedIn(string userID) and
StoreGridUserInfo(GridUserInfo info)
and create user accounts for these if they don't exist,
because I
think
SimanGrid collapses the 2 concepts. Just keep in mind that
you'll
soon
be receiving URLs of the form above as arguments.
I agree with Melanie that not adding the display name is a
missed
opportunity for caching, but I'm willing to write up code that
accounts
for it being optional for all the grid operators who would
rather
have
the extra lookups coming their way.
Hurliman, John wrote:
If we are still on the same page, there should never be a
case
where
something could be either a local identifier (UUID) or a
global
identifier (URL). The context is always clear, where cross-
grid
communication and exported content uses only global
identifiers and
all
intra-grid communication uses only local identifiers. If a sim
wants
to
resolve the creator of a prim it uses a single path, the
UUID->Profile
(aka display name) API call which takes advantage of all the
caching
and optimizations we've built into OpenSim. There is no
ambiguity
there
or potential for the code to take a slower or less tested
path. The
discussion is about communication outside of the local grid
context,
when you are exporting content or moving people or content
between
grids. In every use case there I think it makes sense to
always use
global identifiers, or at least a clear path to build a global
identifier.
John
-----Original Message-----
From: [email protected] [mailto:opensim-dev-
[email protected]] On Behalf Of Melanie
Sent: Monday, August 30, 2010 2:30 PM
To: [email protected]
Subject: Re: [Opensim-dev] Global identifiers
I think we already have a perfectly good field, which is a
UUID
for
local users and a URL for remote ones.
Melanie
Serendipity Seraph wrote:
On 8/30/10 2:09 PM, [email protected] wrote:
Hurliman, John wrote:
My interpretation (please correct me if I'm wrong) is
that
there
is
rough consensus on the overall strategy, but an open
question of
how
to encode global identities when cross-grid communication
(or
out-of-grid archiving) happens.
That's what's going on.
Up to now, all global identifiers (that already exist)
have
been
volatile; nothing has persisted. As I found myself
writing code
that
would inject global identifiers into a DB table, I thought we
should
all talk about the form of such identifiers.
There is probably also a hidden question of how to mark a
local
account as linked to a foreign identity, which may
solve the
friending issue. If I am friends with your avatar and
we are
both
on
grid B but your avatar actually originated from grid A,
that
link
in
the profile is what can tip off the presence service to
try a
remote
presence check (assuming the user is not online in the
local
grid).
My only interest in these low level questions like how the
global
identifiers and profile links look is what the final
decision
is
so
I
can implement it in the OpenSim SimianGrid connectors.
Well, we distinguish "user accounts" from "grid users"
-- these
are
2
different interfaces, although implementers may decide to
collapse
them. But they are different concepts. User accounts are
the
locally-registered users; in some cases, like for
example, the
UCI
grid, there's only some people who can get accounts there,
namely
people associated with the university. Grid users are
users
that
are
referenced by things that happen in the grid. So we already
have
an
interface for that, although now I'm thinking that perhaps
we need
to
separate its UserID field into 2 things: a local UUID and a
reference
to the external name. And I guess that's my main issue at
this
point.
It seems more reasonable in a distributed system to say
that an
X
is
an
X - a User is a User, whether they originally were
instantiated
on
a
local or a remote system. So I would go for collapsing
the two
as
much
as possible as a matter of policy. Otherwise freedom to
move
between
nodes in the system is more limited and there is more
special case
logic
to deal with. But that is speaking from a general
distributed
computing perspective. There may be many Opensim details
that
make
that
seemingly ideal position in practice rather naive.
- s
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
------------------------------------------------------------------------
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
------------------------------------------------------------------------
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
------------------------------------------------------------------------
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev