diff --git a/eden/cli/doctor/__init__.py b/eden/cli/doctor/__init__.py index bf71c3aa33..60d9790fd8 100644 --- a/eden/cli/doctor/__init__.py +++ b/eden/cli/doctor/__init__.py @@ -29,7 +29,7 @@ from eden.cli import config as config_mod, filesystem, mtab, process_finder, ui, from eden.cli.config import EdenInstance from thrift.Thrift import TApplicationException -from . import check_watchman +from . import check_rogue_edenfs, check_watchman from .problem import ( DryRunFixer, FixableProblem, @@ -71,7 +71,7 @@ def cure_what_ails_you( run_operating_system_checks(fixer, instance, out) # check multiple edenfs running with some rogue stale PIDs - check_many_edenfs_are_running(fixer, process_finder) + check_rogue_edenfs.check_many_edenfs_are_running(fixer, process_finder) status = instance.check_health() if not status.is_healthy(): @@ -285,34 +285,6 @@ def printable_bytes(b: bytes) -> str: return b.decode("utf-8", "backslashreplace") -def check_many_edenfs_are_running( - tracker: ProblemTracker, process_finder: process_finder.ProcessFinder -) -> None: - rogue_pids_list = process_finder.find_rogue_pids() - if len(rogue_pids_list) > 0: - rogue_pids_problem = ManyEdenFsRunning(rogue_pids_list) - tracker.add_problem(rogue_pids_problem) - - -class ManyEdenFsRunning(Problem): - def __init__(self, rogue_pids_list): - self._rogue_pids_list = rogue_pids_list - self.set_manual_remediation_message() - - def description(self) -> str: - return f"Many edenfs processes are running. Please keep only one for \ -each config directory." - - def severity(self) -> ProblemSeverity: - return ProblemSeverity.ADVICE - - def set_manual_remediation_message(self) -> None: - if self._rogue_pids_list is not None: - kill_command = ["kill", "-9"] - kill_command.extend(map(str, self._rogue_pids_list)) - self._remediation = " ".join(map(shlex.quote, kill_command)) - - class CheckoutNotMounted(FixableProblem): def __init__(self, instance: EdenInstance, mount_path: str) -> None: self._instance = instance diff --git a/eden/cli/doctor/check_rogue_edenfs.py b/eden/cli/doctor/check_rogue_edenfs.py new file mode 100644 index 0000000000..286e139d40 --- /dev/null +++ b/eden/cli/doctor/check_rogue_edenfs.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2018-present, Facebook, Inc. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. An additional grant +# of patent rights can be found in the PATENTS file in the same directory. + +import shlex + +from eden.cli import process_finder +from eden.cli.doctor.problem import Problem, ProblemSeverity, ProblemTracker + + +def check_many_edenfs_are_running( + tracker: ProblemTracker, process_finder: process_finder.ProcessFinder +) -> None: + rogue_pids_list = process_finder.find_rogue_pids() + if len(rogue_pids_list) > 0: + rogue_pids_problem = ManyEdenFsRunning(rogue_pids_list) + tracker.add_problem(rogue_pids_problem) + + +class ManyEdenFsRunning(Problem): + def __init__(self, rogue_pids_list): + self._rogue_pids_list = rogue_pids_list + self.set_manual_remediation_message() + + def description(self) -> str: + return ( + "Many edenfs processes are running. " + "Please keep only one for each config directory." + ) + + def severity(self) -> ProblemSeverity: + return ProblemSeverity.ADVICE + + def set_manual_remediation_message(self) -> None: + if self._rogue_pids_list is not None: + kill_command = ["kill", "-9"] + kill_command.extend(map(str, self._rogue_pids_list)) + self._remediation = " ".join(map(shlex.quote, kill_command)) diff --git a/eden/cli/test/doctor_test.py b/eden/cli/test/doctor_test.py index ded429bb08..943fd56b5c 100644 --- a/eden/cli/test/doctor_test.py +++ b/eden/cli/test/doctor_test.py @@ -28,7 +28,7 @@ import eden.dirstate import facebook.eden.ttypes as eden_ttypes from eden.cli import filesystem, mtab, process_finder, util from eden.cli.config import EdenInstance, HealthStatus -from eden.cli.doctor import check_watchman +from eden.cli.doctor import check_rogue_edenfs, check_watchman from eden.test_support.temporary_directory import TemporaryDirectoryMixin from fb303.ttypes import fb_status @@ -977,7 +977,7 @@ class MultipleEdenfsRunningTest(DoctorTestBase): self, process_finder: process_finder.ProcessFinder, dry_run: bool ) -> Tuple[doctor.ProblemFixer, str]: fixer, out = self.create_fixer(dry_run) - doctor.check_many_edenfs_are_running(fixer, process_finder) + check_rogue_edenfs.check_many_edenfs_are_running(fixer, process_finder) return fixer, out.getvalue() def test_when_there_are_rogue_pids(self):