Probably a global parameter with a more expected default is appropriate. Multi-store operation is not a commonly supported operating mode, although we've made provisions for it over time. The current behavior was intended to solve the following problem.
1) System one opens a store and starts using it. 2) A second system opens a store (test at the REPL, etc) and overwrites the global *store-controller* variable. 3) System one starts writing objects into store 2 silently - oops! I tended to work with a database that powered a website, but also did interactive work with a second database interactively and didn't want that default changed and I found it annoying to constantly get errors when I had error checking in there. open-store interactions with *store-controller* could have the following variables set by *open-store-policy* 1) :one-only: open-store sets *store-controller* the first time and errors if it is already set 2) :one-only silent: as above, but no error 3) :last-one-wins: silently set the global *store-controller* to the value of the last opened store. :one-only is the default. If you are using multiple stores in a system you should use (with-store (spec) ...) to ensure that code uses the proper store. Ian On Jul 28, 2010, at 12:36 AM, Alex Mizrahi wrote: > LPP> the documentation for close-store says: > > LPP> If you pass a custom store controller, > LPP> you are responsible for setting it to NIL. > > What is "it" in this context"? I think it is pretty hard to read this as > "you are responsible for setting elephant:*current-controller* to NIL". > > LPP> Do you think this behavior should be changed? > > I think so -- behaviour of open-store/close-store is not symmetric and is > pretty ugly. I don't know what is a right fix, though... > > A simple solution would be to set *current-controller* to NIL in close-store > if passed custom store matches *current-controller*. > I think it should work in all cases except when *current-controller* is > re-bound, e.g. via with-store. > > Better solution would be to prevent open-store from setting *current-store* > at all. E.g. with a parameter: > > (defparameter *foo* (open-store '(:BDB ...) :set-default NIL) > > Or we can set this behaviour globally, e.g. if we set *current-controller* > to something other than NIL or a store: > (setf *current-controller* :no-default-controller) > > this will prevent open-store from overwriting it. > > > > _______________________________________________ > 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