move the check for rogue edenfs processes to its own module

Summary: paintrefactor

Reviewed By: strager

Differential Revision: D13374643

fbshipit-source-id: 90f128ece97296c9607fe9ab0e311bfc3d870480
This commit is contained in:
Adam Simpkins 2018-12-13 21:38:18 -08:00 committed by Facebook Github Bot
parent ebe2fec3bf
commit 639f5a62ae
3 changed files with 47 additions and 32 deletions

View File

@ -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

View File

@ -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))

View File

@ -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):