Changeset 3538
- Timestamp:
- 07/21/08 17:25:37 (4 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/projects/bos/m2/initialization-subsystem.lisp
r3537 r3538 1 1 (in-package :bos.m2) 2 2 3 ;;; store-transient-init-functions3 ;;; transient-init-functions 4 4 ;;; 5 5 ;;; Allows for registering transient init functions that 6 6 ;;; will be called after each restore of m2-store 7 7 8 (defvar * store-transient-init-functions* nil)9 (defvar * store-transient-init-constraints* nil)8 (defvar *transient-init-functions* nil) 9 (defvar *transient-init-constraints* nil) 10 10 11 (defun register- store-transient-init-function (init-function &rest dependencies)11 (defun register-transient-init-function (init-function &rest dependencies) 12 12 "Register INIT-FUNCTION (a function-name) to be called after 13 13 each restore of m2-store. Optionally, names of other … … 28 28 (dolist (dependency dependencies) 29 29 (check-type dependency symbol)) 30 (let (new- store-transient-init-functions31 new- store-transient-init-constraints)30 (let (new-transient-init-functions 31 new-transient-init-constraints) 32 32 (let ((constraints (build-constraints)) 33 33 ;; dont know yet whether we have a circular dependency - so 34 34 ;; we want to be able to abort without changes 35 (* store-transient-init-functions* *store-transient-init-functions*)36 (* store-transient-init-constraints* *store-transient-init-constraints*))37 (pushnew init-function * store-transient-init-functions*)35 (*transient-init-functions* *transient-init-functions*) 36 (*transient-init-constraints* *transient-init-constraints*)) 37 (pushnew init-function *transient-init-functions*) 38 38 (dolist (dependency dependencies) 39 (pushnew dependency * store-transient-init-functions*))39 (pushnew dependency *transient-init-functions*)) 40 40 (dolist (constraint constraints) 41 (pushnew constraint * store-transient-init-constraints* :test #'equal))42 (setq new- store-transient-init-functions43 (topological-sort * store-transient-init-functions*44 * store-transient-init-constraints*41 (pushnew constraint *transient-init-constraints* :test #'equal)) 42 (setq new-transient-init-functions 43 (topological-sort *transient-init-functions* 44 *transient-init-constraints* 45 45 #'ignorant-tie-breaker) 46 new- store-transient-init-constraints47 * store-transient-init-constraints*))48 (setq * store-transient-init-functions*49 new- store-transient-init-functions50 * store-transient-init-constraints*51 new- store-transient-init-constraints))))46 new-transient-init-constraints 47 *transient-init-constraints*)) 48 (setq *transient-init-functions* 49 new-transient-init-functions 50 *transient-init-constraints* 51 new-transient-init-constraints)))) 52 52 53 (defun invoke- store-transient-init-functions ()54 (dolist (function-name * store-transient-init-functions*)53 (defun invoke-transient-init-functions () 54 (dolist (function-name *transient-init-functions*) 55 55 (with-simple-restart (skip-init-function "Skip transient-init-function ~A" 56 56 function-name) … … 64 64 &key until) 65 65 (declare (ignore until)) 66 ( bos.m2::invoke-store-transient-init-functions))66 (invoke-transient-init-functions)) 67 67 68 68 (defmethod bknr.datastore::snapshot-subsystem (store (subsystem initialization-subsystem)) 69 ) 69 ;; We are calling the initialization functions also here, because 70 ;; for transactions that follow the current snapshot we want to be 71 ;; in the same initial state as if the store had been freshly 72 ;; restored. 73 (invoke-transient-init-functions)) 70 74
