On Wed, Feb 8, 2012 at 13:57, Thomas Mortagne <[email protected]>wrote:

> On Wed, Feb 8, 2012 at 1:08 PM, Denis Gervalle <[email protected]> wrote:
> > On Wed, Feb 8, 2012 at 12:05, Thomas Mortagne <[email protected]
> >wrote:
> >
> >> Hi devs,
> >>
> >> Denis just reported an issue he have while he is working on generating
> >> ids for the database: local reference to an object looks like
> >> "space.name^wiki:xspace.class[0]" which is not very local when the
> >> absolute reference is "wiki:space.name^wiki:xspace.class[0]" (will let
> >> him give more details on what issue it causes).
> >>
> >
> > I was simply using ObjectReference to produce the base key for hashing
> the
> > object id for the database. This is done using a
> > LocalUidStringReferenceSerializer, that was initially stripping the wiki
> as
> > any local reference serialize would do.
> > But, since the object name change depending on the wiki were the object
> is
> > loaded from, the hash was not really portable between databases.
> Currently,
> > to fix this easily and as cleanly as possible, I have hacked my
> serializer
> > consider the object reference like it would be using proposal 1/. But
> this
> > put some dependence of my serializer on the formatting of the object name
> > which is bad. An object name no dependent on another serializer would be
> > more stable, and therefore storable.
> >
> >
> >> I'm not sure what's the best for this.
> >>
> >> Here are some ideas:
> >>
> >> 1/ Relative references for class: change BaseObjectReference to
> >> generate a name based on a class reference relative to the document
> >> reference. So an absolute reference of an object would give
> >> "wiki:space.name^xspace.class[0]" which in turn is not fully absolute
> >> even of you can resolve the class reference based on the document.
> >
> >
> >> 2/ Local reference for class: pretty much the same thing as 1/ but
> >> never contain the wiki. Thing is the current storage does not support
> >> class coming from another wiki so would kind of make it "official" in
> >> the references generated by BaseObject.
> >>
> >> 3/ Custom serializer in oldcore: overwrite reference serializers in
> >> oldcore and parse the object name to also make the class reference
> >> follow the serializer rules (local, compact, etc.).
> >>
> >> 4/ Object guid as name: use object guid as name but right now guid
> >> can't be trusted (sometimes not set, sometimes duplicated, etc.) so it
> >> would require to fix some bugs first.
> >>
> >> 5/ Do nothing: and see this as a limitation of the object reference in
> >> the current storage. That means that anyone that really need a local
> >> reference for a BaseObject should generate the reference the way he
> >> want instead of asking it to BaseeObject before giving it to the
> >> serializer.
> >>
> >> Note that all of these solution generate already currently valid
> >> object references, it's mostly about choosing the best default
> >> reference.
> >>
> >> WDYT ?
> >>
> >> 1/ and 2/ mean that code counting on reference always having absolute
> >> reference will be broken, like some event listener on object and
> >> object properties modifications probably (would need to check).
> >> 3/ is a bit crappy from architecture point of view but at least the
> >> base object reference stay fully absolute
> >> 4/ is a bit dangerous right now and require to fix several bugs
> >> related to guids at least. Also it gives an object reference not very
> >> nice from human reading point of view.
> >> 5/ does not fix much even if it's possible to manage with a hack
> >> helper to get local reference but it's a hack
> >>
> >> 1/, 3/ and 5/ are nothing else that hacks from my point of view so I'm
> >> -0.5 for them
> >>
> >> 4/ is not a hack but I don't feel very comfortable with object uid
> >> that has never really been used (and so have several blocker bug still
> >> not fixed) so lets say -0 too
> >>
> >> 2/ is OK if we say that with BaseObject we will never support classes
> >> coming from another wiki. The next storage will have different kind of
> >> names for objects anyway not based on classes from what we discussed.
> >> It's a +0.5 for me (no solution give me 100% satisfaction but this one
> >> is the best until other arguments are exposed)
> >>
> >>
> > 4/ would have been the best for me if the guid introduced initially to
> > properly reference object were working properly. The advantage is that we
> > would never be tempted to hack the object name in anyway. It also solve
> my
> > remark about double serialization above, and it render object reference
> > less dependent.
> > But considering the issue, and the current implementation it may not be
> the
> > best.
> > -0
> >
> > 1/ and 2/ are the same in fact, since the class is never from another
> wiki,
> > I prefer 1/ since it do not have the inconvenience of 2/.
> > +0.5 for 1/, and +0 for 2/
>
> Actually there is a big difference between 1/ and 2/: in 2/ the class
> part of object name for the same class whatever the document is always
> the same (the local name of the class) so it's more stable while in 1/
> it could change depending on the document space. It's also more clear
> from the start what is the name of an object if you know the class
> (useful for object related events to match on the reference).
>

Ok, I do not get this.
So I am -0 for 1/ than.


>
> >
> > One way to ensure more stability on 2/ would be to use my
> > (Local)UidStringReferenceSerializer to serialize the document reference.
> > The goad of the uid serializers is to stay stable, even if the syntax of
> > references evolve over time. Using then will avoid double escaping and
> > unexpected dependencies between references. It could be parse in the
> > current implementation to get the class reference back, but this works
> only
> > for 2/, since we should know in advance if an uid contains a wiki or not
> to
> > parse it back.
> > This would produce: "wiki:space.name^6:xspace5:class[0]"
> > So, I am +1 for this one.
> >
> >
> >
> >>
> >> --
> >> Thomas Mortagne
> >> _______________________________________________
> >> devs mailing list
> >> [email protected]
> >> http://lists.xwiki.org/mailman/listinfo/devs
> >>
> >
> >
> >
> > --
> > Denis Gervalle
> > SOFTEC sa - CEO
> > eGuilde sarl - CTO
> > _______________________________________________
> > devs mailing list
> > [email protected]
> > http://lists.xwiki.org/mailman/listinfo/devs
>
>
>
> --
> Thomas Mortagne
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>



-- 
Denis Gervalle
SOFTEC sa - CEO
eGuilde sarl - CTO
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to