Module: check_mk
Branch: master
Commit: 3949ef631a29f664e8cf8af43d76bad9d68f50ea
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=3949ef631a29f6…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Thu Jan 10 11:39:19 2019 +0100
Removed more lock_exclusive() calls.
Change-Id: I5fa9c15a4b0181b6ff025588ecf87187915691d6
---
cmk/gui/wato/__init__.py | 7 ++++++-
cmk/gui/wato/pages/automation.py | 39 +++++++++++++++++++--------------------
cmk/gui/watolib.py | 5 -----
cmk/gui/webapi.py | 19 ++++++++++++-------
4 files changed, 37 insertions(+), 33 deletions(-)
diff --git a/cmk/gui/wato/__init__.py b/cmk/gui/wato/__init__.py
index 77ef646..1f194b8 100644
--- a/cmk/gui/wato/__init__.py
+++ b/cmk/gui/wato/__init__.py
@@ -442,8 +442,13 @@ def page_handler():
# If we do an action, we aquire an exclusive lock on the complete WATO.
if html.is_transaction():
- watolib.lock_exclusive()
+ with watolib.exclusive_lock():
+ _wato_page_handler(current_mode, mode_permissions, mode_class)
+ else:
+ _wato_page_handler(current_mode, mode_permissions, mode_class)
+
+def _wato_page_handler(current_mode, mode_permissions, mode_class):
try:
init_wato_datastructures(with_wato_lock=not html.is_transaction())
except:
diff --git a/cmk/gui/wato/pages/automation.py b/cmk/gui/wato/pages/automation.py
index acffb0f..3b0301b 100644
--- a/cmk/gui/wato/pages/automation.py
+++ b/cmk/gui/wato/pages/automation.py
@@ -87,14 +87,6 @@ class ModeAutomation(WatoWebApiMode):
# logged in user here.
config.set_super_user()
- # To prevent mixups in written files we use the same lock here as for
- # the normal WATO page processing. This might not be needed for some
- # special automation requests, like inventory e.g., but to keep it simple,
- # we request the lock in all cases.
- watolib.lock_exclusive()
-
- watolib.init_wato_datastructures(with_wato_lock=False)
-
def _from_vars(self):
self._authenticate()
self._command = html.request.var("command")
@@ -109,21 +101,28 @@ class ModeAutomation(WatoWebApiMode):
raise MKAuthException(_("Invalid automation secret."))
def page(self):
- # TODO: Refactor these two calls to also use the automation_command_registry
- if self._command == "checkmk-automation":
- self._execute_cmk_automation()
- return
+ # To prevent mixups in written files we use the same lock here as for
+ # the normal WATO page processing. This might not be needed for some
+ # special automation requests, like inventory e.g., but to keep it simple,
+ # we request the lock in all cases.
+ with watolib.exclusive_lock():
+ watolib.init_wato_datastructures(with_wato_lock=False)
- elif self._command == "push-profile":
- self._execute_push_profile()
- return
+ # TODO: Refactor these two calls to also use the automation_command_registry
+ if self._command == "checkmk-automation":
+ self._execute_cmk_automation()
+ return
- try:
- automation_command = watolib.automation_command_registry[self._command]
- except KeyError:
- raise MKGeneralException(_("Invalid automation command: %s.") %
self._command)
+ elif self._command == "push-profile":
+ self._execute_push_profile()
+ return
+
+ try:
+ automation_command = watolib.automation_command_registry[self._command]
+ except KeyError:
+ raise MKGeneralException(_("Invalid automation command: %s.") %
self._command)
- self._execute_automation_command(automation_command)
+ self._execute_automation_command(automation_command)
def _execute_cmk_automation(self):
cmk_command = html.request.var("automation")
diff --git a/cmk/gui/watolib.py b/cmk/gui/watolib.py
index 4d02163..8cfd5ff 100644
--- a/cmk/gui/watolib.py
+++ b/cmk/gui/watolib.py
@@ -10544,11 +10544,6 @@ def lock_exclusive():
store.aquire_lock(cmk.utils.paths.default_config_dir + "/multisite.mk")
-# TODO: Use exclusive_lock() and nuke this!
-def unlock_exclusive():
- store.release_lock(cmk.utils.paths.default_config_dir + "/multisite.mk")
-
-
def git_command(args):
command = ["git"] + [a.encode("utf-8") for a in args]
logger.debug("GIT: Execute in %s: %s" %
(cmk.utils.paths.default_config_dir,
diff --git a/cmk/gui/webapi.py b/cmk/gui/webapi.py
index 433ec2d..acd1030 100644
--- a/cmk/gui/webapi.py
+++ b/cmk/gui/webapi.py
@@ -159,14 +159,19 @@ def page_api():
if "request_format" in request_object:
del request_object["request_format"]
- if api_actions[action].get("locking", True):
- watolib.lock_exclusive() # unlock is done automatically
-
- if watolib.is_read_only_mode_enabled() and not
watolib.may_override_read_only_mode():
- raise MKUserError(None, watolib.read_only_message())
+ def execute_action():
+ if watolib.is_read_only_mode_enabled() and not
watolib.may_override_read_only_mode():
+ raise MKUserError(None, watolib.read_only_message())
+ return {
+ "result_code": 0,
+ "result":
api_actions[action]["handler"](request_object),
+ }
- action_response = api_actions[action]["handler"](request_object)
- response = {"result_code": 0, "result": action_response}
+ if api_actions[action].get("locking", True):
+ with watolib.exclusive_lock():
+ return execute_action()
+ else:
+ return execute_action()
except MKAuthException as e:
response = {