Skip to content

Commit bd428b0

Browse files
committed
remove cached initdb dir by default
1 parent b903f44 commit bd428b0

File tree

1 file changed

+47
-21
lines changed

1 file changed

+47
-21
lines changed

testgres/testgres.py

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,24 @@
2727
Copyright (c) 2016, Postgres Professional
2828
"""
2929

30+
import atexit
31+
import logging
3032
import os
31-
import subprocess
3233
import pwd
34+
import select
3335
import shutil
34-
import time
3536
import six
36-
import port_for
37-
38-
import threading
39-
import logging
40-
import select
37+
import subprocess
4138
import tempfile
39+
import threading
40+
import time
41+
42+
import port_for
4243

4344
from enum import Enum
4445
from distutils.version import LooseVersion
4546

47+
4648
# Try to use psycopg2 by default. If psycopg2 isn't available then use
4749
# pg8000 which is slower but much more portable because uses only
4850
# pure-Python code
@@ -60,9 +62,6 @@
6062
# threads for loggers
6163
util_threads = []
6264

63-
# chached initdb dir
64-
cached_data_dir = None
65-
6665
# rows returned by PG_CONFIG
6766
pg_config_data = {}
6867

@@ -80,9 +79,18 @@ class TestgresConfig:
8079
Global config (override default settings)
8180
"""
8281

82+
# shall we cache pg_config results?
8383
cache_pg_config = True
84+
85+
# shall we use cached initdb instance?
8486
cache_initdb = True
8587

88+
# shall we create a temp dir for cached initdb?
89+
cached_initdb_dir = None
90+
91+
# shall we remove EVERYTHING (including logs)?
92+
node_cleanup_full = False
93+
8694

8795
class TestgresException(Exception):
8896
"""
@@ -427,7 +435,7 @@ def __init__(self,
427435
self.port = port or reserve_port()
428436
self.should_free_port = port is None
429437
self.base_dir = base_dir or tempfile.mkdtemp()
430-
self.should_rm_base_dir = base_dir is None
438+
self.should_rm_dirs = base_dir is None
431439
self.use_logging = use_logging
432440
self.logger = None
433441

@@ -741,8 +749,6 @@ def reload(self, params=[]):
741749
_params = ["reload", "-D", self.data_dir, "-w"] + params
742750
_execute_utility("pg_ctl", _params, self.utils_logname)
743751

744-
return self
745-
746752
def pg_ctl(self, params):
747753
"""
748754
Invoke pg_ctl with params.
@@ -784,9 +790,16 @@ def cleanup(self, max_attempts=3):
784790

785791
attempts += 1
786792

787-
# remove data directory if necessary
788-
if self.should_rm_base_dir:
789-
shutil.rmtree(self.data_dir, ignore_errors=True)
793+
# remove directory tree if necessary
794+
if self.should_rm_dirs:
795+
796+
# choose directory to be removed
797+
if TestgresConfig.node_cleanup_full:
798+
rm_dir = self.base_dir # everything
799+
else:
800+
rm_dir = self.data_dir # just data, save logs
801+
802+
shutil.rmtree(rm_dir, ignore_errors=True)
790803

791804
return self
792805

@@ -1101,16 +1114,29 @@ def call_initdb(_data_dir):
11011114
call_initdb(data_dir)
11021115
# Else we can use cached dir
11031116
else:
1104-
global cached_data_dir
1117+
# Set default temp dir for cached initdb
1118+
if TestgresConfig.cached_initdb_dir is None:
1119+
def rm_cached_data_dir(rm_dir):
1120+
shutil.rmtree(rm_dir, ignore_errors=True)
1121+
1122+
# Create default temp dir
1123+
TestgresConfig.cached_initdb_dir = tempfile.mkdtemp()
11051124

1106-
# Initialize cached initdb
1107-
if cached_data_dir is None:
1108-
cached_data_dir = tempfile.mkdtemp()
1109-
call_initdb(cached_data_dir)
1125+
# Schedule cleanup
1126+
atexit.register(rm_cached_data_dir,
1127+
TestgresConfig.cached_initdb_dir)
11101128

11111129
try:
1130+
# Fetch cached initdb dir
1131+
cached_data_dir = TestgresConfig.cached_initdb_dir
1132+
1133+
# Initialize cached initdb
1134+
if not os.listdir(cached_data_dir):
1135+
call_initdb(cached_data_dir)
1136+
11121137
# Copy cached initdb to current data dir
11131138
shutil.copytree(cached_data_dir, data_dir)
1139+
11141140
except Exception as e:
11151141
raise InitNodeException(str(e))
11161142

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