From f45c31a7d888cd93fe289221b0985d0e0440c22d Mon Sep 17 00:00:00 2001 From: mplebanski <42939509+mplebanski@users.noreply.github.com> Date: Wed, 10 Jul 2019 17:22:57 +0200 Subject: [PATCH] Disable GLambda for a misconfigured platform (#4449) --- apps/glambda/glambdaenvironment.py | 31 ++++++++++++++++++++++++++---- golem/environments/environment.py | 1 + 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/apps/glambda/glambdaenvironment.py b/apps/glambda/glambdaenvironment.py index 46d0ed2c50..66b15c099a 100644 --- a/apps/glambda/glambdaenvironment.py +++ b/apps/glambda/glambdaenvironment.py @@ -1,3 +1,5 @@ +import filecmp +import logging import shutil from typing import Dict @@ -5,6 +7,8 @@ from golem.docker.environment import DockerEnvironment from golem.environments.environment import SupportStatus, UnsupportReason +logger = logging.getLogger(__name__) + class GLambdaTaskEnvironment(DockerEnvironment): DOCKER_IMAGE = "golemfactory/glambda" @@ -14,12 +18,31 @@ class GLambdaTaskEnvironment(DockerEnvironment): def check_support(self) -> SupportStatus: GVISOR_SECURE_RUNTIME = 'runsc' - if is_linux() and not shutil.which(GVISOR_SECURE_RUNTIME): - return SupportStatus.err({ - UnsupportReason.ENVIRONMENT_NOT_SECURE: self.ENV_ID - }) + if is_linux(): + if not shutil.which(GVISOR_SECURE_RUNTIME): + return SupportStatus.err({ + UnsupportReason.ENVIRONMENT_NOT_SECURE: self.ENV_ID + }) + if not GLambdaTaskEnvironment._is_cgroup_cpuset_cfg_correct(): + logger.warning('Unable to start GLambda app. Setting ' + '`cgroup.cpuset.cpus` does not match `docker.' + 'cpuset.cpus`. Potential fix: `cat /sys/fs/' + 'cgroup/cpuset/cpuset.cpus > /sys/fs/cgroup/' + 'cpuset/docker/cpuset.cpus`.') + return SupportStatus.err({ + UnsupportReason.ENVIRONMENT_MISCONFIGURED: self.ENV_ID + }) return super().check_support() + @staticmethod + def _is_cgroup_cpuset_cfg_correct(): + try: + res = filecmp.cmp('/sys/fs/cgroup/cpuset/cpuset.cpus', + '/sys/fs/cgroup/cpuset/docker/cpuset.cpus') + except FileNotFoundError: + return False + return res + def get_container_config(self) -> Dict: return dict( runtime='runsc' if is_linux() else None, diff --git a/golem/environments/environment.py b/golem/environments/environment.py index 34dc307975..351823831a 100644 --- a/golem/environments/environment.py +++ b/golem/environments/environment.py @@ -54,6 +54,7 @@ class UnsupportReason(enum.Enum): ENVIRONMENT_UNSUPPORTED = 'environment_unsupported' ENVIRONMENT_NOT_ACCEPTING_TASKS = 'environment_not_accepting_tasks' ENVIRONMENT_NOT_SECURE = 'environment_not_secure' + ENVIRONMENT_MISCONFIGURED = 'environment_misconfigured' MAX_PRICE = 'max_price' APP_VERSION = 'app_version' DENY_LIST = 'deny_list'