Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit99e645e

Browse files
[#247] PortManager__Generic uses lock-dirs for reserved ports
1 parentedd64db commit99e645e

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

‎testgres/consts.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
TMP_CACHE='tgsc_'
1111
TMP_BACKUP='tgsb_'
1212

13+
TMP_TESTGRES="testgres"
14+
15+
TMP_TESTGRES_PORTS=TMP_TESTGRES+"/ports"
16+
1317
# path to control file
1418
XLOG_CONTROL_FILE="global/pg_control"
1519

‎testgres/impl/port_manager__generic.py

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
from ..port_managerimportPortManager
44
from ..exceptionsimportPortForException
5+
from ..importconsts
56

7+
importos
68
importthreading
79
importrandom
810
importtyping
@@ -15,6 +17,8 @@ class PortManager__Generic(PortManager):
1517
_available_ports:typing.Set[int]
1618
_reserved_ports:typing.Set[int]
1719

20+
_lock_dir:str
21+
1822
def__init__(self,os_ops:OsOperations):
1923
assertos_opsisnotNone
2024
assertisinstance(os_ops,OsOperations)
@@ -23,6 +27,12 @@ def __init__(self, os_ops: OsOperations):
2327
self._available_ports:typing.Set[int]=set(range(1024,65535))
2428
self._reserved_ports:typing.Set[int]=set()
2529

30+
temp_dir=os_ops.get_tempdir()
31+
asserttype(temp_dir)==str# noqa: E721
32+
self._lock_dir=os.path.join(temp_dir,consts.TMP_TESTGRES_PORTS)
33+
asserttype(self._lock_dir)==str# noqa: E721
34+
os_ops.makedirs(self._lock_dir)
35+
2636
defreserve_port(self)->int:
2737
assertself._guardisnotNone
2838
asserttype(self._available_ports)==set# noqa: E721t
@@ -41,9 +51,23 @@ def reserve_port(self) -> int:
4151
ifnotself._os_ops.is_port_free(port):
4252
continue
4353

44-
self._reserved_ports.add(port)
45-
self._available_ports.discard(port)
54+
try:
55+
lock_path=self.helper__make_lock_path(port)
56+
self._os_ops.makedir(lock_path)
57+
except:# noqa: 722
58+
continue
59+
60+
assertself._os_ops.path_exists(lock_path)
61+
62+
try:
63+
self._reserved_ports.add(port)
64+
except:# noqa: 722
65+
assertnot (portinself._reserved_ports)
66+
self._os_ops.rmdir(lock_path)
67+
raise
68+
4669
assertportinself._reserved_ports
70+
self._available_ports.discard(port)
4771
assertnot (portinself._available_ports)
4872
returnport
4973

@@ -55,10 +79,26 @@ def release_port(self, number: int) -> None:
5579
assertself._guardisnotNone
5680
asserttype(self._reserved_ports)==set# noqa: E721
5781

82+
lock_path=self.helper__make_lock_path(number)
83+
5884
withself._guard:
5985
assertnumberinself._reserved_ports
6086
assertnot (numberinself._available_ports)
6187
self._available_ports.add(number)
6288
self._reserved_ports.discard(number)
6389
assertnot (numberinself._reserved_ports)
6490
assertnumberinself._available_ports
91+
92+
assertisinstance(self._os_ops,OsOperations)
93+
assertself._os_ops.path_exists(lock_path)
94+
self._os_ops.rmdir(lock_path)
95+
96+
return
97+
98+
defhelper__make_lock_path(self,port_number:int)->str:
99+
asserttype(port_number)==int# noqa: E721
100+
asserttype(self._lock_dir)==str# noqa: E721
101+
102+
result=os.path.join(self._lock_dir,str(port_number)+".lock")
103+
asserttype(result)==str# noqa: E721
104+
returnresult

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp