Skip to content

Commit 5c903cb

Browse files
authored
Merge pull request #74 from postgrespro/PBCKP-136-catch-FileNotFoundError-exception
Catch FileNotFoundError exception
2 parents ceb1ee9 + 0e8b1c8 commit 5c903cb

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

testgres/enums.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from enum import Enum, IntEnum
22
from six import iteritems
3+
from psutil import NoSuchProcess
34

45

56
class XLogMethod(Enum):
@@ -68,11 +69,15 @@ def from_process(process):
6869
],
6970
} # yapf: disable
7071

72+
try:
73+
cmdline = ''.join(process.cmdline())
74+
except (FileNotFoundError, ProcessLookupError, NoSuchProcess):
75+
return ProcessType.Unknown
76+
7177
# we deliberately cut special words and spaces
72-
cmdline = ''.join(process.cmdline()) \
73-
.replace('postgres:', '', 1) \
74-
.replace('bgworker:', '', 1) \
75-
.replace(' ', '')
78+
cmdline = cmdline.replace('postgres:', '', 1) \
79+
.replace('bgworker:', '', 1) \
80+
.replace(' ', '')
7681

7782
for ptype in ProcessType:
7883
if cmdline.startswith(ptype.value.replace(' ', '')):

tests/test_simple.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import time
1010
import six
1111
import unittest
12+
import psutil
1213

1314
import logging.config
1415

@@ -48,6 +49,7 @@
4849
# NOTE: those are ugly imports
4950
from testgres import bound_ports
5051
from testgres.utils import PgVer
52+
from testgres.node import ProcessProxy
5153

5254

5355
def pg_version_ge(version):
@@ -965,6 +967,18 @@ def test_child_pids(self):
965967
with self.assertRaises(TestgresException):
966968
replica.source_walsender
967969

970+
def test_child_process_dies(self):
971+
# test for FileNotFound exception during child_processes() function
972+
with subprocess.Popen(["sleep", "60"]) as process:
973+
self.assertEqual(process.poll(), None)
974+
# collect list of processes currently running
975+
children = psutil.Process(os.getpid()).children()
976+
# kill a process, so received children dictionary becomes invalid
977+
process.kill()
978+
process.wait()
979+
# try to handle children list -- missing processes will have ptype "ProcessType.Unknown"
980+
[ProcessProxy(p) for p in children]
981+
968982

969983
if __name__ == '__main__':
970984
if os.environ.get('ALT_CONFIG'):

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy