[elephant-devel] Cross-references and SETF SLOT-VALUE

Ian Eslick eslick at media.mit.edu
Fri Feb 22 20:55:58 UTC 2008


> Right now all I want is “do what I mean” behaviour for SETF SLOT- 
> VALUE.
> AFAICS the current behaviour for this operation is that Elephant  
> attempts
> to stuff the object into the current sc instead of using the objects
> home controller. Which seems not exactly sensible to me.
>

Ok, I think I can clarify a couple of points (especially now that I've  
caught up on sleep! :)

What we're arguing about is the correct default behavior.  I think  
you're talking me around on supporting this functionality, however I  
want to make sure that you have to explicitly enable it.

The reason for this is that allowing objects to have more than one  
home store means that the semantics of other functions has to change,  
such as get-instances-by-class which now becomes get-instances-by- 
class-in-current-store-controller.  I'd like users to realize that  
this change is happening when it does.  If a user unintentionally  
creates an object in a second store, I don't want that error to be  
invisible.

Here is a proposal:

1) Writes to objects will always use that object's home store (as  
requested!)

2) The persistent-metaclass would be extended to support multiple  
class indexes; one for each store controller instances exist in.

3) We add an option to enable multi-store operation.  Unless multi- 
store operation is enabled, writing an object to a new store will  
result in a condition which asks if the user really intended to do  
this with a reference to the manual section they should read.

4) When multi-store mode is on, class+database synchronization is  
disabled.  This means that any indexes for a given class will be  
ignored if the class definition doesn't explicitly reference them  
(this just means that the index storage will be maintained, even if  
you choose to unindex a slot in the defpclass)

5) To fix the abstraction problems, we might want to add a facility  
when a store is opened to scan the data store's master list of class  
indexes and explicitly add the class index to the set of cached class  
indexes for that class.  This way the user can rely on the class  
knowing about all the stores that reference an object.  We could then  
implement 'the right thing' for get-instances-by-class, etc. by doing  
multiple map-indexes and merging the results.

6) Add a chapter to the manual expanding on the implications for  
storing indexed classes in multiple stores

I'll do # 1-4 now since it doesn't really effect anyone but you and  
maintains the current behavior for anyone else.  I can't sign up for  
#5-6.

This proposal should do the right thing for the common cases you want  
(esp. if we do #5), but make sure that people think about what they're  
doing before they do it and don't shoot themselves in the foot  
accidentally by creating objects that disappear.  The manual should  
talk about what parts of the class indexing abstraction will change.   
For example index-based queries of all objects or objects by value  
refer only to the objects in the current store, not to all instances  
of the class that may exist.  The user can continue and disable the  
warning for the current session.

I could explain why the current behavior is what it is, but I'd  
probably just confuse things further!

Regards,
Ian





More information about the elephant-devel mailing list