Here is a proposal for approaching this problem. Currently the only
problem with depending on foreign uses of OIDs is migration. There
is an interface of sorts already, although I'm sure it could be
improved or cleaned up with a little bit of work. If future features
(i.e. online GC) add any other limitations on OID use, we can define
the interface to that then.
Today, to support migrating a custom data structure that uses OIDs
instead of persistent object references, you need to write a method
on migrate that ensures the following:
1) Every object referenced by an OID in your data structure has been
copied to the target
(see below for how to do this yourself)
2) Use elephant::retrieve-copied-object to get the new object and
extract its OID
3) Write the new OIDs into your data structure replacing the old.
This can be done cleanly by iterating over your set of OIDs doing
something like this.
(defun copy-and-get-oid (old-store new-store old-oid class)
(let ((old (make-instance class :from-oid old-oid)))
(unless (elephant::object-was-copied-p old)
(migrate new-store old))
(elephant::oid (retrieve-copied-object old-store old))))
This means, however, that your data structure has to know the class
of the target OID apriori. This will be improved in the next release
or two by the addition of an OID->Class map in the store. I want to
make sure the performance impact is not too bad before I implement
this, so it may be some time.
Let me know if you have any questions about this.
Cheers,
Ian
On May 28, 2007, at 3:35 PM, Red Daly wrote:
Ian Eslick wrote:
A few clarifications:
It is poor coding practice to use system-assigned OIDs. In future
versions of elephant OIDs may change over time due to GC, auto
recovery of oid space, etc. It's sort oft like using the physical
address of an object in a C++ program. There is a legitimate way
to use OIDs outside of elephant, but we haven't yet defined an
interface for users to do so (for example you might want to use
OIDs to create many-to-many maps or efficient persistent sets)
When can we expect this legitimate interface? And if it is not
expected soon, do you have a favorite hack? I have wanted foreign
references to persistent objects in ttaihe past, and I suspect
other users run into situations, too.
Ian
Red
_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel
_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel