mirror of
https://github.com/facebook/sapling.git
synced 2024-10-08 07:49:11 +03:00
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:
parent
ebe2fec3bf
commit
639f5a62ae
@ -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
|
||||
|
43
eden/cli/doctor/check_rogue_edenfs.py
Normal file
43
eden/cli/doctor/check_rogue_edenfs.py
Normal 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))
|
@ -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):
|
||||
|
Loading…
Reference in New Issue
Block a user