2121
2222from .utils import \
2323 get_bin_path , \
24- execute_utility
24+ execute_utility , \
25+ clean_on_error
2526
2627
2728class NodeBackup (object ):
@@ -56,8 +57,8 @@ def __init__(self,
5657 try :
5758 xlog_method = XLogMethod (xlog_method )
5859 except ValueError :
59- raise BackupException (
60- 'Invalid xlog_method "{}"' . format ( xlog_method ) )
60+ msg = 'Invalid xlog_method "{}"' . format ( xlog_method )
61+ raise BackupException ( msg )
6162
6263 # Set default arguments
6364 username = username or default_username ()
@@ -144,15 +145,16 @@ def spawn_primary(self, name=None, destroy=True):
144145
145146 # Build a new PostgresNode
146147 from .node import PostgresNode
147- node = PostgresNode (name = name , base_dir = base_dir )
148+ with clean_on_error (PostgresNode (name = name ,
149+ base_dir = base_dir )) as node :
148150
149- # New nodes should always remove dir tree
150- node ._should_rm_dirs = True
151+ # New nodes should always remove dir tree
152+ node ._should_rm_dirs = True
151153
152- node .append_conf (PG_CONF_FILE , "\n " )
153- node .append_conf (PG_CONF_FILE , "port = {}" .format (node .port ))
154+ node .append_conf (PG_CONF_FILE , "\n " )
155+ node .append_conf (PG_CONF_FILE , "port = {}" .format (node .port ))
154156
155- return node
157+ return node
156158
157159 def spawn_replica (self , name = None , destroy = True , slot = None ):
158160 """
@@ -168,13 +170,14 @@ def spawn_replica(self, name=None, destroy=True, slot=None):
168170 """
169171
170172 # Build a new PostgresNode
171- node = self .spawn_primary (name = name , destroy = destroy )
173+ with clean_on_error (self .spawn_primary (name = name ,
174+ destroy = destroy )) as node :
172175
173- # Assign it a master and a recovery file (private magic)
174- node ._assign_master (self .original_node )
175- node ._create_recovery_conf (username = self .username , slot = slot )
176+ # Assign it a master and a recovery file (private magic)
177+ node ._assign_master (self .original_node )
178+ node ._create_recovery_conf (username = self .username , slot = slot )
176179
177- return node
180+ return node
178181
179182 def cleanup (self ):
180183 if self ._available :
0 commit comments