+ self.context = context
+ self._feedback_fn = feedback
+ self.exclusive_BGL = False
+
+ def _ExecLU(self, lu):
+ """Logical Unit execution sequence.
+
+ """
+ write_count = self.context.cfg.write_count
+ lu.CheckPrereq()
+ hm = HooksMaster(rpc.call_hooks_runner, self, lu)
+ h_results = hm.RunPhase(constants.HOOKS_PHASE_PRE)
+ lu.HooksCallBack(constants.HOOKS_PHASE_PRE, h_results,
+ self._feedback_fn, None)
+ try:
+ result = lu.Exec(self._feedback_fn)
+ h_results = hm.RunPhase(constants.HOOKS_PHASE_POST)
+ result = lu.HooksCallBack(constants.HOOKS_PHASE_POST, h_results,
+ self._feedback_fn, result)
+ finally:
+ # FIXME: This needs locks if not lu_class.REQ_BGL
+ if write_count != self.context.cfg.write_count:
+ hm.RunConfigUpdate()
+
+ return result
+
+ def _LockAndExecLU(self, lu, level):
+ """Execute a Logical Unit, with the needed locks.